index.vue 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. <template>
  2. <div>
  3. <van-nav-bar title="待办任务" left-text="返回" @click-left="back" fixed left-arrow />
  4. <div class="content">
  5. <van-sticky offset-top="1.22667rem">
  6. <!-- 全部任务/我执行的/我创建的 -->
  7. <van-tabs v-model="active" @click="activeClick" class="dateSelectCell">
  8. <van-tab title="全部任务" :name="0"></van-tab>
  9. <van-tab title="我执行的" :name="1"></van-tab>
  10. <van-tab title="我创建的" :name="2"></van-tab>
  11. </van-tabs>
  12. <!-- 任务状态 -->
  13. <van-cell title="任务状态" :value="select_state" @click="select_state_show = true" class="dateSelectCell"></van-cell>
  14. <van-popup v-model="select_state_show" position="bottom">
  15. <van-picker
  16. show-toolbar
  17. :columns="select_state_array"
  18. @confirm="stateChange"
  19. @cancel="select_state_show = false;$forceUpdate();"/>
  20. </van-popup>
  21. <!-- 任务类型 -->
  22. <van-cell title="任务类型" :value="select_type" @click="select_type_show = true" class="dateSelectCell"></van-cell>
  23. <van-popup v-model="select_type_show" position="bottom">
  24. <van-picker
  25. show-toolbar
  26. :columns="select_type_array"
  27. @confirm="typeChange"
  28. @cancel="select_type_show = false;$forceUpdate();"/>
  29. </van-popup>
  30. <!-- 时间范围 -->
  31. <van-cell class="dateSelectCell">
  32. <template slot="title">
  33. <van-popover
  34. v-model="select_date_type_show"
  35. trigger="click"
  36. :actions="select_date_type_array"
  37. @select="dateTypeChange"
  38. placement="bottom-start">
  39. <template slot="reference">
  40. <span>{{select_date_type}}<van-icon name="arrow-down" size="10" style="margin-left:2px;" /></span>
  41. </template>
  42. </van-popover>
  43. </template>
  44. <template slot="default">
  45. <div style="width:100%;height:100%" @click="select_date_show = true">{{select_date.length == 0 ? '请选择日期区间' : select_date[0] + ' 至 ' + select_date[1]}}</div>
  46. </template>
  47. <template slot="extra">
  48. <van-icon v-if="select_date.length != 0" name="close" style="line-height:0.64rem;position:relative;left:5px;" @click.stop="dateClear"/>
  49. </template>
  50. </van-cell>
  51. <van-calendar v-model="select_date_show" type="range" @confirm="dateChange" :min-date="new Date(2010,0,1)" :max-date="new Date(2030,11,31)" />
  52. </van-sticky>
  53. <div class="taskList" v-if="taskList.length != 0">
  54. <van-cell v-for="item in taskList" :key="item.id">
  55. <div style="line-height:0.8rem">任务名称:{{item.name}}</div>
  56. <div style="line-height:0.8rem">项目名称:{{item.projectName}}</div>
  57. <div style="line-height:0.8rem">起止时间:
  58. <span v-if="item.startDate && item.endDate">{{(item.startDate ? item.startDate : ' - ') + '\u3000至\u3000' + (item.endDate ? item.endDate : ' - ')}}</span>
  59. <span v-else></span>
  60. </div>
  61. <div class="task_button">
  62. <van-button size="small" type="info" @click="toEditask(item.id)">编辑</van-button>
  63. <van-button size="small" type="primary" @click="taskStatus(item.id,0)" v-if="select_state == '进行中'">完成</van-button>
  64. <van-button size="small" color="#e6a23c" @click="taskStatus(item.id,1)" v-else>重启</van-button>
  65. </div>
  66. </van-cell>
  67. </div>
  68. <div v-else style="text-align:center;font-size:16px;font-weight:500;color:#999;width:100%;margin-top:16px">暂无数据</div>
  69. </div>
  70. </div>
  71. </template>
  72. <script>
  73. export default {
  74. data() {
  75. return {
  76. active: '0',
  77. select_state: '进行中',
  78. select_state_array: ['进行中','已完成'],
  79. select_state_show: false,
  80. select_type: '全部',
  81. select_type_show: false,
  82. select_type_array: ['全部','任务','里程碑','风险'],
  83. select_date: [],
  84. select_date_type: '开始时间',
  85. select_date_type_array: [{text:'开始时间'},{text:'截止时间'}],
  86. select_date_type_show: false,
  87. select_date_show: false,
  88. taskList: [],
  89. }
  90. },
  91. mounted() {
  92. this.getList()
  93. },
  94. methods: {
  95. back() {
  96. history.back();
  97. },
  98. toEditask(taskid){ // 跳转编辑任务
  99. sessionStorage.setItem('taskId',JSON.stringify({
  100. addNew: false,
  101. id: taskid,
  102. groupId: null,
  103. stagesId: null
  104. }))
  105. this.$router.push("/editask");
  106. },
  107. taskStatus(taskid,status){ // 改变任务状态
  108. this.$axios.post("/task/finish", {
  109. id: taskid,
  110. taskStatus: status
  111. }).then(res => {
  112. if(res.code == "ok") {
  113. this.$toast.success('操作成功');
  114. this.getList()
  115. } else {
  116. this.$toast.fail('获取失败');
  117. }
  118. }).catch(err=> {this.$toast.clear();console.log(err)});
  119. },
  120. formatDate(date) {
  121. let mon = date.getMonth() + 1
  122. return `${date.getFullYear()}-${mon<10?'0'+mon:mon}-${date.getDate()<10?'0'+date.getDate():date.getDate()}`;
  123. },
  124. activeClick(){ // 导航点击
  125. // console.log(this.active);
  126. this.getList()
  127. },
  128. stateChange(value,key){ // 任务状态筛选
  129. this.select_state = value
  130. this.select_state_show = false
  131. this.getList()
  132. },
  133. typeChange(value,key){ // 任务类型筛选
  134. // console.log(value,key);
  135. this.select_type = value
  136. this.select_type_show = false
  137. this.getList()
  138. },
  139. dateTypeChange(action,index){ // 开始时间/截止时间 切换
  140. // console.log(action,index);
  141. this.select_date_type = action.text
  142. if(this.select_date.length != 0){
  143. this.getList()
  144. }
  145. },
  146. dateChange(date){ // 时间区间筛选
  147. const [start, end] = date;
  148. this.select_date_show = false;
  149. this.select_date = [this.formatDate(start),this.formatDate(end)];
  150. // console.log(this.select_date,date);
  151. this.getList()
  152. },
  153. dateClear(){
  154. this.select_date = []
  155. this.getList()
  156. },
  157. getList(){ // 获取任务列表
  158. let parameter = {
  159. viewId: this.active,
  160. status: this.select_state == '进行中' ? 0 : 1,
  161. pageIndex: 1,
  162. pageSize: 999
  163. }
  164. if(this.select_type != '全部'){
  165. if(this.select_type == '任务'){ parameter.type = 0 }
  166. if(this.select_type == '里程碑'){ parameter.type = 1 }
  167. if(this.select_type == '风险'){ parameter.type = 2 }
  168. }
  169. if(this.select_date.length != 0){
  170. parameter.dateType = this.select_date_type == '开始时间' ? 0 : 1
  171. parameter.startDate = this.select_date[0]
  172. parameter.endDate = this.select_date[1]
  173. }
  174. this.$axios.post("/task/listByPage", parameter)
  175. .then(res => {
  176. if(res.code == "ok") {
  177. this.taskList = res.data.records
  178. } else {
  179. this.$toast.fail('获取失败');
  180. }
  181. }).catch(err=> {this.$toast.clear();console.log(err)});
  182. }
  183. },
  184. }
  185. </script>
  186. <style lang="less" scoped>
  187. .content{
  188. margin-top: 46px;
  189. // overflow: auto;
  190. .task_button{
  191. padding-top: .09rem;
  192. text-align: right;
  193. button{
  194. margin-left: .2667rem;
  195. }
  196. }
  197. }
  198. // .dateSelectCell{
  199. // height: 1.2rem;
  200. // }
  201. </style>