赫艾前端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

599 lines
20 KiB

3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
  1. <template>
  2. <div class="mod-config">
  3. <el-row>
  4. <el-col :span="24">
  5. <el-button @click="getDataList()" type="primary">查询</el-button>
  6. <download-excel
  7. :fields="fields()"
  8. type="xls"
  9. :name="exportName"
  10. :fetch="createExportData"
  11. worksheet="导出信息"
  12. class="el-button el-button--primary el-button--medium">
  13. {{ '导出' }}
  14. </download-excel>
  15. <el-button @click="addOrUpdateHandle()" type="primary">发起任务
  16. </el-button>
  17. </el-col>
  18. </el-row>
  19. <el-row>
  20. <el-col :span="24">
  21. <el-form :inline="true" label-position="top" :model="dataForm" @keyup.enter.native="getDataList()">
  22. <el-row>
  23. <el-col :span="24">
  24. <el-form-item label="责任部门">
  25. <el-input style="width: 120px" v-model="dataForm.department" clearable></el-input>
  26. </el-form-item>
  27. <el-form-item label="责任人">
  28. <el-input style="width: 120px" v-model="dataForm.responsiblePerson" clearable></el-input>
  29. </el-form-item>
  30. <el-form-item label="最终状态">
  31. <el-select v-model="dataForm.finalStatus" style="width: 120px">
  32. <el-option label="未完成" value="未完成"></el-option>
  33. <el-option label="已完成" value="已完成"></el-option>
  34. <el-option label="全部" value=""></el-option>
  35. </el-select>
  36. </el-form-item>
  37. <el-form-item label="发起日期">
  38. <el-date-picker style="width: 120px" v-model="dataForm.startDate"
  39. value-format='yyyy-MM-dd 00:00:00'
  40. format='yyyy-MM-dd'
  41. ></el-date-picker>
  42. -
  43. <el-date-picker style="width: 120px" v-model="dataForm.endDate"
  44. value-format='yyyy-MM-dd 23:59:59'
  45. format='yyyy-MM-dd'
  46. ></el-date-picker>
  47. </el-form-item>
  48. </el-col>
  49. </el-row>
  50. <el-row>
  51. <el-col style="margin-top: -5px" :span="24">
  52. <el-form-item label="客户">
  53. <el-input style="width: 120px" v-model="dataForm.customer" clearable></el-input>
  54. </el-form-item>
  55. <el-form-item label="项目">
  56. <el-input style="width: 120px" v-model="dataForm.project" clearable></el-input>
  57. </el-form-item>
  58. <el-form-item label="状态">
  59. <el-select v-model="dataForm.status" style="width: 120px">
  60. <el-option label="未受理" value="未受理"></el-option>
  61. <el-option label="已受理" value="已受理"></el-option>
  62. <el-option label="全部" value=""></el-option>
  63. </el-select>
  64. </el-form-item>
  65. <el-form-item label="要求完成日期">
  66. <el-date-picker style="width: 120px" v-model="dataForm.finishStartDate"
  67. value-format='yyyy-MM-dd 00:00:00'
  68. format='yyyy-MM-dd'
  69. ></el-date-picker>
  70. -
  71. <el-date-picker style="width: 120px" v-model="dataForm.finishEndDate"
  72. value-format='yyyy-MM-dd 23:59:59'
  73. format='yyyy-MM-dd'
  74. ></el-date-picker>
  75. </el-form-item>
  76. </el-col>
  77. </el-row>
  78. </el-form>
  79. </el-col>
  80. </el-row>
  81. <el-row>
  82. <el-col :span="24">
  83. <el-table
  84. :data="dataList"
  85. border
  86. :height="height"
  87. v-loading="dataListLoading"
  88. :row-class-name="tableRowClassName"
  89. @selection-change="selectionChangeHandle"
  90. highlight-current-row
  91. style="width: 100%;">
  92. <el-table-column
  93. v-for="(item,index) in columnList" :key="index"
  94. :sortable="item.columnSortable"
  95. :prop="item.columnProp"
  96. :header-align="'center'"
  97. :show-overflow-tooltip="item.showOverflowTooltip"
  98. :align="item.align"
  99. :fixed="item.fixed==''?false:item.fixed"
  100. :width="item.columnWidth"
  101. :label="item.columnLabel">
  102. <template slot-scope="scope">
  103. <span v-if="!item.columnHidden"> {{ scope.row[item.columnProp] }}</span>
  104. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]"
  105. style="width: 100px; height: 80px"/></span>
  106. </template>
  107. </el-table-column>
  108. <el-table-column
  109. fixed="right"
  110. header-align="center"
  111. align="center"
  112. width="300"
  113. label="操作">
  114. <template slot-scope="scope">
  115. <el-link type="text" size="small" @click="addOrUpdateHandle(scope.row.taskId)">修改 |</el-link>
  116. <el-link type="text" size="small" @click="updateStatusDialog(scope.row)">更改最终状态 |</el-link>
  117. <el-link type="text" size="small" @click="chatHistoryDialog(scope.row)">沟通 |</el-link>
  118. <el-link type="text" size="small" @click="annex(scope.row)">附件 |</el-link>
  119. <!-- <el-link type="text" size="small" @click="annex(scope.row.id)"> 沟通附件</el-link>-->
  120. <el-link type="text" size="small"
  121. @click="deleteHandle(scope.row.id)">删除
  122. </el-link>
  123. </template>
  124. </el-table-column>
  125. </el-table>
  126. </el-col>
  127. </el-row>
  128. <el-dialog
  129. v-drag
  130. :title="'更改状态'"
  131. :close-on-click-modal="false"
  132. width="139px"
  133. :visible.sync="statusVisible">
  134. <el-form :model="dataForm" :inline="true" label-position="top"
  135. label-width="80px">
  136. <el-form-item label="状态">
  137. <el-select v-model="selectRow.finalStatus" style="width: 120px">
  138. <el-option label="未完成" value="未完成"></el-option>
  139. <el-option label="已完成" value="已完成"></el-option>
  140. </el-select>
  141. </el-form-item>
  142. </el-form>
  143. <span slot="footer" class="dialog-footer">
  144. <el-button type="primary" @click="updateStatus()">确定</el-button>
  145. <el-button type="primary" @click="statusVisible = false">取消</el-button>
  146. </span>
  147. </el-dialog>
  148. <!-- 沟通记录 -->
  149. <chat-history v-if="chatHistoryVisible" ref="chatHistory" ></chat-history>
  150. <!-- 文件列表 -->
  151. <task-file-list v-if="taskFileVisible" ref="taskFileList"></task-file-list>
  152. <!-- 弹窗, 新增 / 修改 -->
  153. <add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" @refreshDataList="getDataList"></add-or-update>
  154. </div>
  155. </template>
  156. <script>
  157. import ChatHistory from './chat-history.vue'
  158. import {getTaskDetailList,updateTaskDetail} from '@/api/taskmanage/tasklist.js'
  159. import TaskFileList from './task-file-upload-list.vue'
  160. import AddOrUpdate from "./tasklist-add-or-update";
  161. export default {
  162. data() {
  163. return {
  164. height: 200,
  165. dataForm: {
  166. site: this.$store.state.user.site,
  167. customer: '',
  168. taskHeader: '',
  169. project: '',
  170. taskDescription: '',
  171. taskInitiator: this.$store.state.user.name,
  172. finalStatus: '',
  173. department: '',
  174. responsiblePerson: '',
  175. startDate: '',
  176. endDate: '',
  177. finishStartDate: '',
  178. finishEndDate: '',
  179. status: '',
  180. },
  181. // 展示列集
  182. columnList: [
  183. {
  184. tableId: "ProjectInfo",
  185. tableName: this.$route.meta.title,
  186. columnProp: "taskStartDate",
  187. columnLabel: "发起日期",
  188. columnHidden: false,
  189. columnImage: false,
  190. columnSortable: false,
  191. columnWidth: null,
  192. format: null,
  193. functionId: this.$route.meta.menuId,
  194. sortLv: 0,
  195. status: true,
  196. fixed: '',
  197. serialNumber: null,
  198. columnType: null,
  199. align: null
  200. },
  201. {
  202. tableId: "ProjectInfo",
  203. tableName: this.$route.meta.title,
  204. columnProp: "taskInitiator",
  205. columnLabel: "任务发起人",
  206. columnHidden: false,
  207. columnImage: false,
  208. columnSortable: false,
  209. columnWidth: null,
  210. format: null,
  211. functionId: this.$route.meta.menuId,
  212. sortLv: 0,
  213. status: true,
  214. fixed: '',
  215. serialNumber: null,
  216. columnType: null,
  217. align: null
  218. },
  219. {
  220. tableId: "ProjectInfo",
  221. tableName: this.$route.meta.title,
  222. columnProp: "customer",
  223. columnLabel: "客户",
  224. columnHidden: false,
  225. columnImage: false,
  226. columnSortable: false,
  227. columnWidth: null,
  228. format: null,
  229. functionId: this.$route.meta.menuId,
  230. sortLv: 0,
  231. status: true,
  232. fixed: '',
  233. serialNumber: null,
  234. columnType: null,
  235. align: null
  236. },
  237. {
  238. tableId: "ProjectInfo",
  239. tableName: this.$route.meta.title,
  240. columnProp: "project",
  241. columnLabel: "项目",
  242. columnHidden: false,
  243. columnImage: false,
  244. columnSortable: false,
  245. columnWidth: null,
  246. format: null,
  247. functionId: this.$route.meta.menuId,
  248. sortLv: 0,
  249. status: true,
  250. fixed: '',
  251. serialNumber: null,
  252. columnType: null,
  253. align: null
  254. },
  255. {
  256. tableId: "ProjectInfo",
  257. tableName: this.$route.meta.title,
  258. columnProp: "taskHeader",
  259. columnLabel: "任务主题",
  260. columnHidden: false,
  261. columnImage: false,
  262. columnSortable: false,
  263. columnWidth: null,
  264. format: null,
  265. functionId: this.$route.meta.menuId,
  266. sortLv: 0,
  267. status: true,
  268. fixed: '',
  269. serialNumber: null,
  270. columnType: null,
  271. align: null
  272. },
  273. {
  274. tableId: "ProjectInfo",
  275. tableName: this.$route.meta.title,
  276. columnProp: "taskDescription",
  277. columnLabel: "任务描述",
  278. columnHidden: false,
  279. columnImage: false,
  280. columnSortable: false,
  281. columnWidth: null,
  282. format: null,
  283. functionId: this.$route.meta.menuId,
  284. sortLv: 0,
  285. status: true,
  286. fixed: '',
  287. serialNumber: null,
  288. columnType: null,
  289. align: null
  290. },
  291. {
  292. tableId: "ProjectInfo",
  293. tableName: this.$route.meta.title,
  294. columnProp: "department",
  295. columnLabel: "责任部门",
  296. columnHidden: false,
  297. columnImage: false,
  298. columnSortable: false,
  299. columnWidth: null,
  300. format: null,
  301. functionId: this.$route.meta.menuId,
  302. sortLv: 0,
  303. status: true,
  304. fixed: '',
  305. serialNumber: null,
  306. columnType: null,
  307. align: null
  308. },
  309. {
  310. tableId: "ProjectInfo",
  311. tableName: this.$route.meta.title,
  312. columnProp: "responsiblePerson",
  313. columnLabel: "责任人",
  314. columnHidden: false,
  315. columnImage: false,
  316. columnSortable: false,
  317. columnWidth: null,
  318. format: null,
  319. functionId: this.$route.meta.menuId,
  320. sortLv: 0,
  321. status: true,
  322. fixed: '',
  323. serialNumber: null,
  324. columnType: null,
  325. align: null
  326. },
  327. {
  328. tableId: "ProjectInfo",
  329. tableName: this.$route.meta.title,
  330. columnProp: "requiredCompletionDate",
  331. columnLabel: "要求完成日期",
  332. columnHidden: false,
  333. columnImage: false,
  334. columnSortable: false,
  335. columnWidth: null,
  336. format: null,
  337. functionId: this.$route.meta.menuId,
  338. sortLv: 0,
  339. status: true,
  340. fixed: '',
  341. serialNumber: null,
  342. columnType: null,
  343. align: null
  344. },
  345. {
  346. tableId: "ProjectInfo",
  347. tableName: this.$route.meta.title,
  348. columnProp: "status",
  349. columnLabel: "状态",
  350. columnHidden: false,
  351. columnImage: false,
  352. columnSortable: false,
  353. columnWidth: null,
  354. format: null,
  355. functionId: this.$route.meta.menuId,
  356. sortLv: 0,
  357. status: true,
  358. fixed: '',
  359. serialNumber: null,
  360. columnType: null,
  361. align: null
  362. },
  363. {
  364. tableId: "ProjectInfo",
  365. tableName: this.$route.meta.title,
  366. columnProp: "finalStatus",
  367. columnLabel: "最终状态",
  368. columnHidden: false,
  369. columnImage: false,
  370. columnSortable: false,
  371. columnWidth: null,
  372. format: null,
  373. functionId: this.$route.meta.menuId,
  374. sortLv: 0,
  375. status: true,
  376. fixed: '',
  377. serialNumber: null,
  378. columnType: null,
  379. align: null
  380. },
  381. {
  382. tableId: "ProjectInfo",
  383. tableName: this.$route.meta.title,
  384. columnProp: "createdBy",
  385. columnLabel: "创建人",
  386. columnHidden: false,
  387. columnImage: false,
  388. columnSortable: false,
  389. columnWidth: null,
  390. format: null,
  391. functionId: this.$route.meta.menuId,
  392. sortLv: 0,
  393. status: true,
  394. fixed: '',
  395. serialNumber: null,
  396. columnType: null,
  397. align: null
  398. },
  399. {
  400. tableId: "ProjectInfo",
  401. tableName: this.$route.meta.title,
  402. columnProp: "createdDate",
  403. columnLabel: "创建时间",
  404. columnHidden: false,
  405. columnImage: false,
  406. columnSortable: false,
  407. columnWidth: 140,
  408. format: null,
  409. functionId: this.$route.meta.menuId,
  410. sortLv: 0,
  411. status: true,
  412. fixed: '',
  413. serialNumber: null,
  414. columnType: null,
  415. align: null
  416. },
  417. {
  418. tableId: "ProjectInfo",
  419. tableName: this.$route.meta.title,
  420. columnProp: "updatedBy",
  421. columnLabel: "修改人",
  422. columnHidden: false,
  423. columnImage: false,
  424. columnSortable: false,
  425. columnWidth: null,
  426. format: null,
  427. functionId: this.$route.meta.menuId,
  428. sortLv: 0,
  429. status: true,
  430. fixed: '',
  431. serialNumber: null,
  432. columnType: null,
  433. align: null
  434. },
  435. {
  436. tableId: "ProjectInfo",
  437. tableName: this.$route.meta.title,
  438. columnProp: "updatedDate",
  439. columnLabel: "修改时间",
  440. columnHidden: false,
  441. columnImage: false,
  442. columnSortable: false,
  443. columnWidth: 140,
  444. format: null,
  445. functionId: this.$route.meta.menuId,
  446. sortLv: 0,
  447. status: true,
  448. fixed: '',
  449. serialNumber: null,
  450. columnType: null,
  451. align: null
  452. },
  453. ],
  454. dataList: [],
  455. selectRow: {
  456. id: 0,
  457. finalStatus: '',
  458. },
  459. dataListLoading: false,
  460. dataListSelections: [],
  461. chatHistoryVisible: false,
  462. statusVisible: false,
  463. taskFileVisible: false,
  464. addOrUpdateVisible: false,
  465. exportName: this.$route.meta.title + this.dayjs().format('YYYYMMDDHHmmss')
  466. }
  467. },
  468. components: {
  469. ChatHistory,
  470. TaskFileList,
  471. AddOrUpdate,
  472. },
  473. activated() {
  474. // this.getDataList()
  475. },
  476. mounted() {
  477. this.$nextTick(() => {
  478. this.height = window.innerHeight - 200;
  479. })
  480. },
  481. methods: {
  482. // 获取数据列表
  483. getDataList() {
  484. this.dataListLoading = true
  485. getTaskDetailList(this.dataForm).then(({data}) => {
  486. if (data && data.code === 0) {
  487. this.dataList = data.data
  488. } else {
  489. this.dataList = []
  490. }
  491. this.dataListLoading = false
  492. })
  493. },
  494. // 多选
  495. selectionChangeHandle(val) {
  496. this.dataListSelections = val
  497. },
  498. // 更改状态模态框
  499. updateStatusDialog(row) {
  500. this.selectRow.finalStatus = row.finalStatus
  501. this.selectRow.id = row.id
  502. this.statusVisible = true;
  503. },
  504. // 更改状态提交
  505. updateStatus() {
  506. updateTaskDetail(this.selectRow).then(({data}) =>{
  507. if (data && data.code == 0 ){
  508. this.statusVisible = false
  509. this.$message.success(data.msg)
  510. this.getDataList()
  511. }else {
  512. this.$message.warning(data.msg)
  513. }
  514. })
  515. },
  516. // 沟通记录
  517. chatHistoryDialog(id){
  518. this.chatHistoryVisible = true
  519. this.$nextTick(() => {
  520. this.$refs.chatHistory.init(id)
  521. })
  522. },
  523. // 附件
  524. annex(row) {
  525. this.taskFileVisible = true
  526. let dto = {
  527. fileTypeCode: 'TASK',
  528. orderRef3:row.taskId,
  529. orderRef2:row.id
  530. }
  531. this.$nextTick(() => {
  532. this.$refs.taskFileList.init(dto)
  533. })
  534. },
  535. // 删除
  536. deleteHandle(id) {
  537. var ids = id
  538. this.$confirm(`确定进行删除操作?`, '提示', {
  539. confirmButtonText: '确定',
  540. cancelButtonText: '取消',
  541. type: 'warning'
  542. }).then(() => {
  543. this.$http({
  544. url: this.$http.adornUrl('/taskmanage/taskDetail/delete'),
  545. method: 'post',
  546. data: this.$http.adornData(ids, false)
  547. }).then(({data}) => {
  548. if (data && data.code === 0) {
  549. this.$message.success('操作成功')
  550. this.getDataList()
  551. } else {
  552. this.$message.error(data.msg)
  553. }
  554. })
  555. })
  556. },
  557. tableRowClassName({row, rowIndex}) {
  558. if (row.chatLastType == '有新回复'&&row.finalStatus=='未完成') {
  559. return 'newChat'
  560. }
  561. },
  562. // 新增 / 修改
  563. addOrUpdateHandle(id) {
  564. this.addOrUpdateVisible = true
  565. this.$nextTick(() => {
  566. this.$refs.addOrUpdate.init(id)
  567. })
  568. },
  569. // 导出
  570. fields() {
  571. let json = "{"
  572. this.columnList.forEach((item, index) => {
  573. if (index == this.columnList.length - 1) {
  574. json += "\"" + item.columnLabel + "\"" + ":" + "\"" + item.columnProp + "\""
  575. } else {
  576. json += "\"" + item.columnLabel + "\"" + ":" + "\"" + item.columnProp + "\"" + ","
  577. }
  578. })
  579. json += "}"
  580. let s = eval("(" + json + ")")
  581. return s
  582. },
  583. createExportData() {
  584. // 点击导出按钮之后,开始导出数据之前的执行函数,返回值为需要下载的数据
  585. return this.dataList;
  586. },
  587. }
  588. }
  589. </script>
  590. <style>
  591. .mod-config .newChat {
  592. background-color: #00d9ff;
  593. }
  594. </style>