table.vue 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429
  1. <template>
  2. <div class="height_100">
  3. <el-container>
  4. <el-header style="display: flex;justify-content: space-between;align-items: center;">
  5. <div>
  6. <mySearch :SearchFields="searchFiled" @search="search" :searchValue="searchOption"></mySearch>
  7. </div>
  8. <div style="display:flex;margin-right:10px">
  9. <el-button v-if="type == 1" type="primary" size="small" @click="createTask">创建任务</el-button>
  10. </div>
  11. </el-header>
  12. <el-main class="height_100">
  13. <el-table :data="tableData" style="width: 100%;" border header-row-class-name="custom-table-header"
  14. @sort-change="sortChange">
  15. <el-table-column label="#" align="center" width="80px">
  16. <template slot-scope="scope">
  17. <div>
  18. {{ (queryParams.current - 1) * queryParams.size + scope.$index + 1 }}
  19. </div>
  20. </template>
  21. </el-table-column>
  22. <el-table-column v-for="item in columnList" :key="item.value" :prop="item.value"
  23. :render-header="$commonJS.renderHeaderMethods" :label="item.name" sortable="custom" align="center">
  24. <template slot-scope="scope">
  25. <div v-if="['name'].includes(item.value)">
  26. <el-link @click="handleItem(scope.row, item.value)">
  27. <span v-html="$commonJS.getColumnData(scope.row, item)"></span>
  28. </el-link>
  29. </div>
  30. <div v-else-if="['type'].includes(item.value)"
  31. v-html="$commonJS.getColumnData(scope.row, item, null, { data: taskType })"></div>
  32. <div v-else-if="['status'].includes(item.value)"
  33. v-html="$commonJS.getColumnData(scope.row, item, null, { data: taskStatus })"></div>
  34. <div v-else v-html="$commonJS.getColumnData(scope.row, item)"></div>
  35. </template>
  36. </el-table-column>
  37. <el-table-column label="操作" align="center" width="180px">
  38. <template slot-scope="scope">
  39. <div>
  40. <el-dropdown split-button type="primary" size="small" @command="handleCommand($event, scope.row)"
  41. @click="handleTask(scope.row)">
  42. <span v-if="scope.row.status == '3' || scope.row.handlerName != userinfo.name">查 看</span>
  43. <span v-else>处 理</span>
  44. <el-dropdown-menu slot="dropdown" style="text-align: center;">
  45. <el-dropdown-item command="1" v-if="[6].includes(scope.row.type)">查看审核记录</el-dropdown-item>
  46. <el-dropdown-item command="4" v-if="scope.row.status != 3">编 辑</el-dropdown-item>
  47. <el-dropdown-item command="3" v-if="[6].includes(scope.row.type)">完 成</el-dropdown-item>
  48. <el-dropdown-item command="2" divided style="color: red;">删 除</el-dropdown-item>
  49. </el-dropdown-menu>
  50. </el-dropdown>
  51. </div>
  52. </template>
  53. </el-table-column>
  54. </el-table>
  55. </el-main>
  56. <el-footer class="pagination">
  57. <el-pagination background layout="total, prev, pager, next, jumper" :current-page.sync="queryParams.current"
  58. :page-size.sync="queryParams.size" @current-change="handleCurrentChange" :total="queryParams.total">
  59. </el-pagination>
  60. </el-footer>
  61. </el-container>
  62. <auditRecords ref="auditRecords"></auditRecords>
  63. <createTask ref="createTaskDialog" :id="id" @isCreate="isCreate"></createTask>
  64. <handleTask1 ref="handleTask1Dialog"></handleTask1>
  65. <handleTask2 ref="handleTask2Dialog" @isSuccess="isSuccess"></handleTask2>
  66. </div>
  67. </template>
  68. <script>
  69. import { mapGetters } from 'vuex'
  70. import { column } from '@/views/patentMining/components/mixins/index2'
  71. import { taskPatentMining } from './mixins/task'
  72. import auditRecords from '@/views/patentMining/components/dialog/auditRecords.vue'
  73. import createTask from '@/views/patentMining/components/dialog/createTask.vue'
  74. import handleTask1 from '@/views/patentMining/components/dialog/handleTask1.vue'
  75. import handleTask2 from '@/views/patentMining/components/dialog/handleTask2.vue'
  76. export default {
  77. mixins: [column, taskPatentMining],
  78. props: ['type', 'id', 'obj'],
  79. components: {
  80. auditRecords,
  81. createTask,
  82. handleTask1,
  83. handleTask2,
  84. },
  85. data() {
  86. return {
  87. // table数据
  88. tableData: [
  89. {
  90. name: '加热器专利挖掘1',
  91. taskType: '1',
  92. createPerson: '朱豪',
  93. handlerName: '张三',
  94. createTime: '2023-9-28 13:52',
  95. endTime: '2023-9-28 18:02',
  96. status: '未完成'
  97. },
  98. {
  99. name: '加热器专利挖掘2',
  100. taskType: '1',
  101. createPerson: '朱豪',
  102. handlerName: '朱豪',
  103. createTime: '2023-9-28 13:52',
  104. endTime: '2023-9-28 18:02',
  105. status: '未完成'
  106. },
  107. {
  108. name: '加热器专利挖掘3',
  109. taskType: '2',
  110. createPerson: '张三',
  111. handlerName: '朱豪',
  112. createTime: '2023-9-28 13:52',
  113. endTime: '2023-9-28 18:02',
  114. status: '未完成'
  115. },
  116. {
  117. name: '加热器专利挖掘4',
  118. taskType: '3',
  119. createPerson: '朱豪',
  120. handlerName: '朱豪',
  121. createTime: '2023-9-28 13:52',
  122. endTime: '2023-9-28 18:02',
  123. status: '未完成',
  124. taskPath: '创新点梳理',
  125. endTime: '2023-10-10',
  126. },
  127. {
  128. name: '加热器专利挖掘5',
  129. taskType: '1',
  130. createPerson: '张三',
  131. handlerName: '朱豪',
  132. createTime: '2023-9-28 13:52',
  133. endTime: '2023-9-28 18:02',
  134. status: '已完成'
  135. },
  136. {
  137. name: '加热器专利挖掘6',
  138. taskType: '1',
  139. createPerson: '朱豪',
  140. handlerName: '张三',
  141. createTime: '2023-9-28 13:52',
  142. endTime: '2023-9-28 18:02',
  143. status: '已完成'
  144. },
  145. ],
  146. // 分页及总数信息
  147. queryParams: {
  148. current: 1,
  149. size: 10,
  150. total: 0,
  151. },
  152. // 检索字段
  153. searchFiled: [],
  154. // 检索字符串
  155. searchOption: {},
  156. //排序字段
  157. sort: [{ "orderBy": "createTime", "orderType": 1 }],
  158. // 检索字段标识
  159. searchType: {
  160. 1: 'projectTask',//专利挖掘任务清单检索字段
  161. },
  162. // 任务类型
  163. taskType: {
  164. 0: '标引任务',
  165. 1: '项目开卷审核任务',
  166. 2: '检索条件任务',
  167. 3: '对比任务',
  168. 4: '协同任务',
  169. 5: '任务审核任务',
  170. 6: '文件分配任务',
  171. },
  172. // 任务状态
  173. taskStatus: {
  174. 1: '审核中',
  175. 2: '处理中',
  176. 3: '已完成',
  177. 4: '缺少资料',
  178. 5: '取消',
  179. },
  180. }
  181. },
  182. computed: {
  183. ...mapGetters(['webSocket', 'userinfo']),
  184. },
  185. async mounted() {
  186. // 获取table栏位
  187. this.columnList = await this.$commonJS.getCustomField('projectTask')
  188. // 获取栏位
  189. this.getColumn()
  190. // 获取数据
  191. this.getList()
  192. },
  193. methods: {
  194. // 请求数据
  195. getList() {
  196. let searchOption = {
  197. ...this.obj.search,//固有检索字段
  198. ...this.searchOption
  199. }
  200. let params = {
  201. ...this.queryParams,//分页信息
  202. searchQuery: this.$commonJS.objectToString(searchOption),//检索条件
  203. orderDTOList: this.sort,//排序信息
  204. }
  205. this.$api.queryProjectTask(params).then(response => {
  206. if (response.code == 200) {
  207. this.tableData = response.data.data
  208. this.queryParams.current = response.data.current
  209. this.queryParams.size = response.data.size
  210. this.queryParams.total = response.data.total
  211. }
  212. }).catch(error => {
  213. // this.tableData = []
  214. this.queryParams.total = 0
  215. })
  216. },
  217. // 分页
  218. handleCurrentChange(val) {
  219. this.queryParams.current = val
  220. this.getList()
  221. },
  222. // 操作栏下拉菜单按钮
  223. handleCommand(ev, row) {
  224. switch (ev) {
  225. case '1'://查看审核记录
  226. this.$refs.auditRecords.open(row.id)
  227. break;
  228. case '2'://删除任务
  229. this.deleteTask(row)
  230. break;
  231. case '3'://完成任务
  232. this.finish(row)
  233. break;
  234. case '4'://编辑任务
  235. this.handleEdit(row)
  236. break;
  237. default:
  238. break;
  239. }
  240. },
  241. // 编辑任务
  242. handleEdit(row) {
  243. this.$refs.createTaskDialog.open(row)
  244. },
  245. // 完成任务
  246. finish(row) {
  247. let params = {
  248. id : row.id
  249. }
  250. this.$api.status(params).then(res => {
  251. if (res.code == 200) {
  252. this.$message.success('任务已置为完成')
  253. // this.getList()
  254. }
  255. })
  256. },
  257. // 删除任务
  258. deleteTask(row) {
  259. this.deleteTasks([row.id])
  260. },
  261. deleteTasks(ids) {
  262. this.$api.dele(ids).then(response => {
  263. if (response.code == 200) {
  264. this.$message.success('删除成功')
  265. this.queryParams.current = 1
  266. this.getList()
  267. }
  268. })
  269. },
  270. //处理任务
  271. handleTask(row) {
  272. if (row.status == 3 || row.handlerName != this.userinfo.name) {// 负责人不是自己
  273. this.handleTypeTask2(row)
  274. } else {
  275. // if (row.status != 3) {/
  276. this.handleTypeTask(row)
  277. // }
  278. }
  279. // if (row.handlerName != this.userinfo.name) {// 负责人不是自己
  280. // if (row.taskType == '1') {// 项目审核任务
  281. // this.$refs.handleTask1Dialog.open(row, false)
  282. // } else if (row.taskType == '2') {//文件分配任务
  283. // this.$refs.handleTask2Dialog.open(row, false)
  284. // }
  285. // } else {//未完成状态
  286. // if (row.taskType == '1') {// 项目审核任务
  287. // this.$refs.handleTask1Dialog.open(row, true)
  288. // } else if (row.taskType == '2') {//文件分配任务
  289. // this.$refs.handleTask2Dialog.open(row, true)
  290. // } else {//文件审核任务
  291. // let router = this.$router.resolve({
  292. // path: '/handleExamine',
  293. // query: {
  294. // row: JSON.stringify(row)
  295. // }
  296. // })
  297. // window.open(router.href, '_blank')
  298. // }
  299. // }
  300. },
  301. // 处理人和负责人相同是处理流程
  302. handleTypeTask(row) {
  303. switch (row.type) {
  304. case 1://项目开卷审核任务
  305. this.getPatentMining(2)
  306. break;
  307. case 5://任务审核任务
  308. row.disabled=false
  309. let router = this.$router.resolve({
  310. path: '/handleExamine',
  311. query: {
  312. row: JSON.stringify(row)
  313. }
  314. })
  315. window.open(router.href, '_blank')
  316. break;
  317. case 6://文件分配任务
  318. row.projectId=this.id//项目id
  319. this.$refs.handleTask2Dialog.open(row, true)
  320. break;
  321. default:
  322. break;
  323. }
  324. },
  325. // 处理人和负责人不相同时处理流程
  326. handleTypeTask2(row) {
  327. switch (row.type) {
  328. case 1://项目开卷审核任务
  329. this.getPatentMining(1)
  330. break;
  331. case 5://任务审核任务
  332. row.disabled=true
  333. let router = this.$router.resolve({
  334. path: '/handleExamine',
  335. query: {
  336. row: JSON.stringify(row)
  337. }
  338. })
  339. window.open(router.href, '_blank')
  340. break;
  341. case 6://文件分配任务
  342. this.$refs.handleTask2Dialog.open(row, false)
  343. break;
  344. default:
  345. break;
  346. }
  347. },
  348. // 获取挖掘项目
  349. getPatentMining(val) {
  350. let params = {
  351. current: 1,
  352. size:10,
  353. searchQuery: `id=${this.id}`,//检索条件
  354. }
  355. this.$api.queryPatentDigProject(params).then(res => {
  356. if (res.code == 200) {
  357. this.$refs.handleTask1Dialog.open(res.data.data[0], val)
  358. }
  359. })
  360. },
  361. // 左侧搜索
  362. search(val) {
  363. let params = {}
  364. val.forEach(item => {
  365. if (item.type == 3) {
  366. params[item.value] = item.searchValue.map(itemValue => {
  367. return itemValue.value
  368. })
  369. } else {
  370. params[item.value] = item.searchValue.label
  371. }
  372. })
  373. // 返回字符串
  374. this.searchOption = params
  375. // 调用查询接口
  376. this.queryParams.current = 1
  377. this.getList()
  378. },
  379. //排序
  380. sortChange({ column, prop, order }) {
  381. //如需要多个字段排序,则不需要清空
  382. var params = {
  383. sort: this.sort,
  384. column,
  385. prop,
  386. order,
  387. }
  388. this.sort = this.$commonJS.getSortData(params)
  389. this.queryParams.current = 1
  390. this.getList()
  391. },
  392. //获取table栏位及分组字段、检索字段
  393. async getColumn() {
  394. let params = [this.searchType[this.type]]
  395. await this.$api.getParamsCommon(params).then(res => {
  396. if (res.code == 200) {
  397. let conditionDTOList = JSON.parse(JSON.stringify(res.data[0].conditionDTOList))
  398. // 搜索字段
  399. this.searchFiled = this.$commonJS.getField(conditionDTOList, (u) => u.ifSearch == true, {
  400. label: 'name',
  401. value: 'value',
  402. type: 'type',
  403. })
  404. }
  405. })
  406. // this.showView = false
  407. // this.$nextTick(() => {
  408. // this.showView = true
  409. // })
  410. },
  411. },
  412. }
  413. </script>
  414. <style lang="scss" scoped></style>