my-task.vue 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. <template>
  2. <view class="">
  3. <navbar :config="config" backColor="#999999"></navbar>
  4. <view class="pages-lable-box">
  5. <view class="pages-lable">
  6. <block v-for="(item , index ) in taskStatus">
  7. <view @click.stop="onSelect(item.value)"
  8. :class="['pages-lable-item' , activeTaskStatus === item.value ? 'active-lable-item' : '' ]">
  9. {{item.lable}}
  10. </view>
  11. </block>
  12. </view>
  13. </view>
  14. <view class="task-list-box">
  15. <task-list-item :dataList="dataList" showTaskStatus privateTask :task-tag="taskTag" />
  16. <loadMore v-if="dataList.length > 0 || loadingStatus === 'loading' " :status="loadingStatus" />
  17. <view class="empty-data" v-if="(!dataList || dataList.length===0) && loadingStatus=== 'noMore' ">
  18. <EmptyDate />
  19. </view>
  20. </view>
  21. </view>
  22. </template>
  23. <script>
  24. import {
  25. getMyTask_Api
  26. } from "@/api/task.js"
  27. import taskListItem from "./components/task-list-item.vue"
  28. const app = getApp()
  29. export default {
  30. components: {
  31. taskListItem
  32. },
  33. data() {
  34. return {
  35. top: null,
  36. config: {
  37. back: true,
  38. title: '任务中心',
  39. color: 'black',
  40. backgroundColor: [1, '#fff'],
  41. statusBarFontColor: 'black'
  42. },
  43. activeTaskStatus: 1,
  44. taskStatus: [{
  45. value: 1,
  46. lable: '进行中'
  47. }, {
  48. value: 2,
  49. lable: '已完成'
  50. }, {
  51. value: 3,
  52. lable: '已过期'
  53. }],
  54. dataList: [],
  55. pageNum: 0,
  56. pageSize: 10,
  57. loadingStatus: '',
  58. taskTag: {
  59. name: '',
  60. color: "",
  61. bgColor: ''
  62. }
  63. }
  64. },
  65. onLoad() {
  66. const global = app.globalData
  67. this.top = global.navHeight + global.statusBarHeight + 'px'
  68. this.init()
  69. },
  70. onReachBottom() {
  71. if (this.loadingStatus === "more") {
  72. this.getMyTask();
  73. }
  74. },
  75. onPullDownRefresh() {
  76. this.init();
  77. },
  78. watch: {
  79. activeTaskStatus: {
  80. handler(newS, oldS) {
  81. switch (newS) {
  82. case 1:
  83. this.taskTag = {
  84. name: '进行中',
  85. color: "#FFFFFF",
  86. bgColor: '#0096B7'
  87. };
  88. break;
  89. case 2:
  90. this.taskTag = {
  91. name: '已完成',
  92. color: "#FFFFFF",
  93. bgColor: '#299E00'
  94. };
  95. break;
  96. case 3:
  97. this.taskTag = {
  98. name: '已过期',
  99. color: "#FFF",
  100. bgColor: '#474747'
  101. };
  102. break;
  103. }
  104. },
  105. immediate: true
  106. }
  107. },
  108. methods: {
  109. onSelect(val) {
  110. this.dataList = [];
  111. this.pageNum = 0;
  112. this.pageSize = 10;
  113. this.loadingStatus = '';
  114. this.activeTaskStatus = val;
  115. this.getMyTask();
  116. },
  117. init() {
  118. this.dataList = [];
  119. this.pageNum = 0;
  120. this.pageSize = 10;
  121. this.loadingStatus = '';
  122. this.activeTaskStatus = 1;
  123. this.getMyTask();
  124. },
  125. getMyTask() {
  126. if (this.loadingStatus === 'noMore' || this.loadingStatus === 'loading') return
  127. this.loadingStatus = 'loading';
  128. this.pageNum++;
  129. if (this.pageNum <= 1) {
  130. this.dataList = [];
  131. }
  132. getMyTask_Api({
  133. pageNum: this.pageNum,
  134. pageSize: this.pageSize,
  135. myTaskStatus: this.activeTaskStatus
  136. }).then(res => {
  137. const t_o = 300;
  138. setTimeout(() => {
  139. if (res.code === 200) {
  140. this.dataList = this.dataList.concat(res.rows || []);
  141. };
  142. this.setLoadingStatus(this.$mUtil.pagination(res.total, this.pageNum, this
  143. .pageSize))
  144. } , this.dataList.length === 0 ? t_o : 0)
  145. }).catch(err => {
  146. this.setLoadingStatus("noMore")
  147. })
  148. },
  149. setLoadingStatus(status) {
  150. setTimeout(() => {
  151. this.loadingStatus = status
  152. }, 100)
  153. }
  154. }
  155. }
  156. </script>
  157. <style>
  158. page {
  159. background-color: #f9f9f9;
  160. }
  161. </style>
  162. <style lang="scss" scoped>
  163. @import "./common.scss";
  164. $padd_: 30rpx;
  165. .pages-lable-box {
  166. width: 100%;
  167. height: 94rpx;
  168. .pages-lable {
  169. position: fixed;
  170. left: 0;
  171. right: 0;
  172. z-index: 5;
  173. width: 100%;
  174. height: 94rpx;
  175. padding: 0 $padd_;
  176. display: flex;
  177. justify-content: space-between;
  178. align-items: stretch;
  179. border-bottom: 1rpx solid #E6E6E6;
  180. background-color: #fff;
  181. .pages-lable-item {
  182. height: 100%;
  183. line-height: 94rpx;
  184. font-size: 30rpx;
  185. font-family: PingFang SC, PingFang SC-Regular;
  186. font-weight: Regular;
  187. color: #1a1a1a;
  188. position: relative;
  189. &::before {
  190. content: '';
  191. position: absolute;
  192. left: 0;
  193. bottom: 0;
  194. right: 0;
  195. height: 4rpx;
  196. border-radius: 2px;
  197. }
  198. }
  199. .active-lable-item {
  200. font-family: PingFang SC, PingFang SC-Bold;
  201. font-weight: Bold;
  202. color: #3bb7ce;
  203. &::before {
  204. background-color: #3bb7ce;
  205. }
  206. }
  207. }
  208. }
  209. .task-list-box {
  210. padding: 30rpx $padd_ 0;
  211. }
  212. </style>