table.vue 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406
  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="1" v-if="[3].includes(scope.row.status)">编 辑</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. this.getList()
  191. },
  192. methods: {
  193. // 请求数据
  194. getList() {
  195. let searchOption = {
  196. ...this.obj.search,//固有检索字段
  197. ...this.searchOption
  198. }
  199. let params = {
  200. ...this.queryParams,//分页信息
  201. searchQuery: this.$commonJS.objectToString(searchOption),//检索条件
  202. orderDTOList: this.sort,//排序信息
  203. }
  204. this.$api.queryProjectTask(params).then(response => {
  205. if (response.code == 200) {
  206. this.tableData = response.data.data
  207. this.queryParams.current = response.data.current
  208. this.queryParams.size = response.data.size
  209. this.queryParams.total = response.data.total
  210. }
  211. }).catch(error => {
  212. // this.tableData = []
  213. this.queryParams.total = 0
  214. })
  215. },
  216. // 分页
  217. handleCurrentChange(val) {
  218. this.queryParams.current = val
  219. this.getList()
  220. },
  221. // 操作栏下拉菜单按钮
  222. handleCommand(ev, row) {
  223. switch (ev) {
  224. case '1'://查看审核记录
  225. this.$refs.auditRecords.open(row.id)
  226. break;
  227. case '2'://删除任务
  228. this.deleteTask(row)
  229. break;
  230. default:
  231. break;
  232. }
  233. },
  234. // 删除任务
  235. deleteTask(row) {
  236. this.deleteTasks([row.id])
  237. },
  238. deleteTasks(ids) {
  239. this.$api.dele(ids).then(response => {
  240. if (response.code == 200) {
  241. this.$message.success('删除成功')
  242. this.queryParams.current = 1
  243. this.getList()
  244. }
  245. })
  246. },
  247. //处理任务
  248. handleTask(row) {
  249. if (row.status == 3 || row.handlerName != this.userinfo.name) {// 负责人不是自己
  250. this.handleTypeTask2(row)
  251. } else {
  252. // if (row.status != 3) {/
  253. this.handleTypeTask(row)
  254. // }
  255. }
  256. // if (row.handlerName != this.userinfo.name) {// 负责人不是自己
  257. // if (row.taskType == '1') {// 项目审核任务
  258. // this.$refs.handleTask1Dialog.open(row, false)
  259. // } else if (row.taskType == '2') {//文件分配任务
  260. // this.$refs.handleTask2Dialog.open(row, false)
  261. // }
  262. // } else {//未完成状态
  263. // if (row.taskType == '1') {// 项目审核任务
  264. // this.$refs.handleTask1Dialog.open(row, true)
  265. // } else if (row.taskType == '2') {//文件分配任务
  266. // this.$refs.handleTask2Dialog.open(row, true)
  267. // } else {//文件审核任务
  268. // let router = this.$router.resolve({
  269. // path: '/handleExamine',
  270. // query: {
  271. // row: JSON.stringify(row)
  272. // }
  273. // })
  274. // window.open(router.href, '_blank')
  275. // }
  276. // }
  277. },
  278. // 处理人和负责人相同是处理流程
  279. handleTypeTask(row) {
  280. switch (row.type) {
  281. case 1://项目开卷审核任务
  282. this.getPatentMining(2)
  283. break;
  284. case 5://任务审核任务
  285. row.disabled=false
  286. let router = this.$router.resolve({
  287. path: '/handleExamine',
  288. query: {
  289. row: JSON.stringify(row)
  290. }
  291. })
  292. window.open(router.href, '_blank')
  293. break;
  294. case 6://文件分配任务
  295. row.projectId=this.id//项目id
  296. this.$refs.handleTask2Dialog.open(row, true)
  297. break;
  298. default:
  299. break;
  300. }
  301. },
  302. // 处理人和负责人不相同时处理流程
  303. handleTypeTask2(row) {
  304. switch (row.type) {
  305. case 1://项目开卷审核任务
  306. this.getPatentMining(1)
  307. break;
  308. case 5://任务审核任务
  309. row.disabled=true
  310. let router = this.$router.resolve({
  311. path: '/handleExamine',
  312. query: {
  313. row: JSON.stringify(row)
  314. }
  315. })
  316. window.open(router.href, '_blank')
  317. break;
  318. case 6://文件分配任务
  319. this.$refs.handleTask2Dialog.open(row, false)
  320. break;
  321. default:
  322. break;
  323. }
  324. },
  325. // 获取挖掘项目
  326. getPatentMining(val) {
  327. let params = {
  328. current: 1,
  329. size:10,
  330. searchQuery: `id=${this.id}`,//检索条件
  331. }
  332. this.$api.queryPatentDigProject(params).then(res => {
  333. if (res.code == 200) {
  334. this.$refs.handleTask1Dialog.open(res.data.data[0], val)
  335. }
  336. })
  337. },
  338. // 左侧搜索
  339. search(val) {
  340. let params = {}
  341. val.forEach(item => {
  342. if (item.type == 3) {
  343. params[item.value] = item.searchValue.map(itemValue => {
  344. return itemValue.value
  345. })
  346. } else {
  347. params[item.value] = item.searchValue.label
  348. }
  349. })
  350. // 返回字符串
  351. this.searchOption = params
  352. // 调用查询接口
  353. this.queryParams.current = 1
  354. this.getList()
  355. },
  356. //排序
  357. sortChange({ column, prop, order }) {
  358. //如需要多个字段排序,则不需要清空
  359. var params = {
  360. sort: this.sort,
  361. column,
  362. prop,
  363. order,
  364. }
  365. this.sort = this.$commonJS.getSortData(params)
  366. this.queryParams.current = 1
  367. this.getList()
  368. },
  369. //获取table栏位及分组字段、检索字段
  370. async getColumn() {
  371. let params = [this.searchType[this.type]]
  372. await this.$api.getParamsCommon(params).then(res => {
  373. if (res.code == 200) {
  374. let conditionDTOList = JSON.parse(JSON.stringify(res.data[0].conditionDTOList))
  375. // 搜索字段
  376. this.searchFiled = this.$commonJS.getField(conditionDTOList, (u) => u.ifSearch == true, {
  377. label: 'name',
  378. value: 'value',
  379. type: 'type',
  380. })
  381. }
  382. })
  383. // this.showView = false
  384. // this.$nextTick(() => {
  385. // this.showView = true
  386. // })
  387. },
  388. },
  389. }
  390. </script>
  391. <style lang="scss" scoped></style>