myExamine.vue 8.4 KB

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