myExamine.vue 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267
  1. <template>
  2. <div>
  3. <div class="box">
  4. <el-tabs v-model="formData.status" type="card">
  5. <el-tab-pane v-for="(item, index) in tabsOption" :key="index" :label="item.label" :name="item.name"></el-tab-pane>
  6. </el-tabs>
  7. <el-form ref="formData" :inline="true" :model="formData" label-width="80px">
  8. <el-form-item label="积分类型">
  9. <el-select v-model="formData.pt_id" clearable placeholder="请选择积分类型">
  10. <el-option v-for="item in point_type" :key="item.id" :label="item.name" :value="item.id"></el-option>
  11. </el-select>
  12. </el-form-item>
  13. <el-form-item label="负责人">
  14. <el-select v-model="formData.employee_id" filterable clearable placeholder="请输入负责人">
  15. <el-option v-for="item in employee_map" :key="item.id" :label="item.name" :value="item.id"></el-option>
  16. </el-select>
  17. </el-form-item>
  18. <el-form-item label="排序">
  19. <el-select v-model="formData.sort" placeholder="请选择排序">
  20. <el-option v-for="item in sort" :key="item.id" :label="item.name" :value="item.code"></el-option>
  21. </el-select>
  22. </el-form-item>
  23. </el-form>
  24. <div>
  25. <el-table :data="list" style="width: 100%" v-loading="loading">
  26. <el-table-column label="负责人" prop="employee_id">
  27. <template slot-scope="scope">
  28. <div class="flex-box-ce">
  29. <userImage width="50px" :id="scope.row.employee_id" height="50px" :user_name="scope.row.employee_name" ></userImage>
  30. <span style="line-height: 50px; padding-left: 10px;">{{scope.row.employee_name}}</span>
  31. </div>
  32. </template>
  33. </el-table-column>
  34. <el-table-column label="任务内容" prop="task_name">
  35. <template slot-scope="scope">
  36. <span class="font-flex-word" style="max-width: 200px;">{{ scope.row.task_name }}</span>
  37. </template>
  38. </el-table-column>
  39. <el-table-column label="积分">
  40. <template slot-scope="scope">
  41. <span class="red">
  42. {{ scope.row.point_config.base_point }} {{ scope.row.pt_name }}
  43. </span>
  44. <!-- <span class="red" v-if="scope.row.point_config.review_point!=0">
  45. +{{ scope.row.point_config.review_point }} {{ scope.row.pt_name }}
  46. </span>
  47. <span class="red" v-else>
  48. +{{ scope.row.point_config.base_point }} {{ scope.row.pt_name }}
  49. </span> -->
  50. </template>
  51. </el-table-column>
  52. <el-table-column label="截止时间" prop="expire_time"></el-table-column>
  53. <!-- <el-table-column label="状态" prop="review_status" v-if="formData.status=='complete'">
  54. <template slot-scope="scope">
  55. <div class="yellow" v-if="scope.row.review_status == 0">待处理</div>
  56. <div class="green" v-if="scope.row.review_status ==1">已通过</div>
  57. <div class="red" v-if="scope.row.review_status == 2">已驳回</div>
  58. </template>
  59. </el-table-column> -->
  60. <el-table-column label="操作" prop="owner_id">
  61. <template slot-scope="scope">
  62. <el-link type="primary" :underline="false" @click.stop="openDetail(scope.row)" class="blue">查看任务</el-link>
  63. <el-link style="margin-left: 10px;" v-if="formData.status=='complete'" type="primary" :underline="false" @click.stop="openDetailXq(scope.row)">去审批</el-link>
  64. <el-link style="margin-left: 10px;" v-if="formData.status=='reviewed'" type="primary" :underline="false" @click.stop="openDetailXq(scope.row)">查看审批</el-link>
  65. </template>
  66. </el-table-column>
  67. <template slot="empty">
  68. <noData></noData>
  69. </template>
  70. </el-table>
  71. </div>
  72. <center style="padding: 20px 0;">
  73. <el-pagination
  74. background
  75. @size-change="handleSizeChange"
  76. @current-change="handleCurrentChange"
  77. :page-sizes="[10, 20, 50, 100]"
  78. layout="total, sizes, prev, pager, next"
  79. :current-page="formData.page"
  80. :page-size="formData.page_size"
  81. :total="total"
  82. ></el-pagination>
  83. </center>
  84. </div>
  85. <!-- 详情弹窗 -->
  86. <taskDetailsPopup :visible.sync="showDetailPopup" v-if="showDetailPopup" :id="detailId" :title="'任务详情'"></taskDetailsPopup>
  87. <!-- 审批详情 -->
  88. <examinePopup :title="'审核详情'" :id="detail_id" :show.sync="detailShow"></examinePopup>
  89. </div>
  90. </template>
  91. <script>
  92. import noData from '@/components/noData';
  93. import examinePopup from '@/components/examinePopup.vue';
  94. import taskDetailsPopup from '@/views/common/taskDetailsPopup'
  95. export default {
  96. name: 'my_task',
  97. data() {
  98. return {
  99. active: 'running',
  100. tabsOption: [{ label: '待完成', name: 'running' }, { label: '待审批', name: 'complete' }, { label: '已审批', name: 'reviewed' }],
  101. list: [],
  102. loading: false,
  103. total: null,
  104. sort: [ { id: 2, code: 'publish', name: '按发布时间' },{ id: 1, code: 'expire', name: '按截止时间' }],
  105. point_type: null,
  106. detail_form: {
  107. id: '',
  108. remark: ''
  109. },
  110. formData: {
  111. employee_id:'',
  112. status: 'running',
  113. pt_id: 0,
  114. sort: 'publish',
  115. source_type: '0',
  116. page: 1,
  117. page_size: 10
  118. },
  119. completeShow: false,
  120. showDetailPopup: false,
  121. detailId: null,
  122. showRepetitiveTasksPopup: false,
  123. showRewardTaskDetailsPopup: false,
  124. employee_map:[],
  125. // 审批相关
  126. detail_id:0,
  127. detailShow:false,
  128. };
  129. },
  130. components: { taskDetailsPopup, noData,examinePopup },
  131. watch: {
  132. 'formData.pt_id'(val) {
  133. this.formData.page = 1;
  134. this.getSpList();
  135. },
  136. 'formData.sort'(val) {
  137. this.formData.page = 1;
  138. this.getSpList();
  139. },
  140. 'formData.employee_id'(val) {
  141. this.formData.page = 1;
  142. this.getSpList();
  143. },
  144. 'formData.status'(val) {
  145. this.formData.page = 1;
  146. this.formData.pt_id = 0;
  147. this.formData.employee_id=''
  148. this.formData.sort = 'publish';
  149. this.list = [];
  150. this.getSpList();
  151. }
  152. },
  153. created() {
  154. this.getEmployee()
  155. },
  156. mounted() {
  157. this.getSpList();
  158. this.point_type = this.getPointType();
  159. },
  160. methods: {
  161. //获取员工列表
  162. getEmployee() {
  163. this.$axios('get', '/api/employee/index', { dept_id: 0, page: 1, page_size: 3000 }).then(res => {
  164. this.employee_map = res.data.data.list;
  165. })
  166. },
  167. openDetailXq(item) {
  168. this.detail_id = item.review_id;
  169. this.detailShow = true;
  170. },
  171. getPointType() {
  172. let point = window.plus ? JSON.parse(puls.storage.getItem('types')) : JSON.parse(localStorage.getItem('types'));
  173. // point.splice(0,1)
  174. point.unshift({ code: 'AF', id: 0, name: '全部' });
  175. return point;
  176. },
  177. // 页码变更
  178. handleCurrentChange(val) {
  179. this.formData.page = val;
  180. this.getSpList();
  181. },
  182. handleSizeChange(val) {
  183. this.formData.page_size = val;
  184. this.getSpList();
  185. },
  186. openDetail(row) {
  187. this.detailId = parseInt(row.id);
  188. this.showDetailPopup = true;
  189. },
  190. getSpList() {
  191. let self = this;
  192. self.loading = true;
  193. let params = JSON.parse(JSON.stringify(this.formData));
  194. if (params.pt_id == 0) {
  195. delete params.pt_id;
  196. }
  197. if (params.employee_id == '') {
  198. delete params.employee_id;
  199. }
  200. self.$axios('get', '/api/integral/work/list/reviewer', params)
  201. .then(res => {
  202. if (res.data.code == 1) {
  203. self.list = res.data.data.list;
  204. self.total = res.data.data.total;
  205. } else {
  206. self.$message.error(res.data.data.msg);
  207. }
  208. })
  209. .finally(() => {
  210. self.loading = false;
  211. });
  212. }
  213. }
  214. };
  215. </script>
  216. <style scoped lang="scss">
  217. .box {
  218. min-height: calc(100vh - 184px);
  219. min-width: 800px;
  220. background-color: #fff;
  221. padding: 20px;
  222. }
  223. ::v-deep .el-table tr:hover {
  224. cursor: pointer;
  225. }
  226. .details_content {
  227. padding: 20px;
  228. height: calc(100vh - 60px);
  229. overflow: auto;
  230. .row_title {
  231. position: relative;
  232. margin: 0 0 20px 0;
  233. padding-top: 12px;
  234. font-size: 16px;
  235. color: #303133;
  236. line-height: 22px;
  237. }
  238. .row_title:before {
  239. position: absolute;
  240. top: 0;
  241. content: ' ';
  242. width: 100%;
  243. border-top: 1px #f8f8f8 solid;
  244. }
  245. .el-row {
  246. margin-bottom: 10px;
  247. font-size: 14px;
  248. .el-col-4 {
  249. color: #606266;
  250. }
  251. }
  252. }
  253. .details_title {
  254. font-size: 18px;
  255. padding: 20px;
  256. border-bottom: 1px #efefef solid;
  257. }
  258. </style>