list.vue 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532
  1. <template>
  2. <el-card shadow="never">
  3. <seekPage :seekList="seekList" :maxLength="4" @search="reload"></seekPage>
  4. <ele-pro-table
  5. ref="table"
  6. row-key="id"
  7. :columns="columns"
  8. :datasource="datasource"
  9. cacheKey="batchRecordBefore"
  10. :cache-key="cacheKeyUrl"
  11. autoAmendPage
  12. :pageSize="20"
  13. height="600px"
  14. >
  15. <!-- 操作列 -->
  16. <!-- 表头工具栏 -->
  17. <template v-slot:toolbar>
  18. <el-button
  19. v-if="
  20. $hasPermission('mes:producetaskrulerecord:tempsu') ||
  21. $hasPermission('mes:producetaskrulerecord:tempsus') ||
  22. $hasPermission('mes:producetaskrecordrulesrecord:saveorupdate') ||
  23. $hasPermission('mes:producetaskrecordrulesrecord:sus')
  24. "
  25. size="small"
  26. type="primary"
  27. icon="el-icon-plus"
  28. class="ele-btn-icon"
  29. @click="openEdit('add', null)"
  30. >
  31. 新建
  32. </el-button>
  33. </template>
  34. <template v-slot:code="{ row }">
  35. <el-link
  36. type="primary"
  37. :underline="false"
  38. @click="openEdit('detail', row)"
  39. >
  40. {{ row.code }}
  41. </el-link>
  42. </template>
  43. <template v-slot:action="{ row }">
  44. <div>
  45. <el-link
  46. v-if="
  47. row.executeStatus == 0 ||
  48. (row.executeStatus == 1 && row.itemType == 2)
  49. "
  50. type="primary"
  51. :underline="false"
  52. @click="openEdit('edit', row)"
  53. >
  54. 编辑
  55. </el-link>
  56. <!-- <el-popconfirm
  57. v-if="
  58. row.executeStatus == 0 ||
  59. (row.executeStatus == 1 && row.itemType == 2) ||
  60. (row.executeStatus == 1 && row.itemType == 3)
  61. "
  62. title="确定要报工此记录吗?"
  63. class="ele-action"
  64. @confirm="execute(row)"
  65. >
  66. <template v-slot:reference>
  67. <el-link type="primary" :underline="false"> 报工 </el-link>
  68. </template>
  69. </el-popconfirm> -->
  70. <el-link
  71. type="primary"
  72. :underline="false"
  73. @click="openEdit('edit', row)"
  74. v-if="
  75. row.executeStatus == 0 ||
  76. (row.executeStatus == 1 && row.itemType == 2) ||
  77. (row.executeStatus == 1 && row.itemType == 3)
  78. "
  79. >
  80. 报工
  81. </el-link>
  82. <el-link
  83. v-if="
  84. row.executeStatus == 2 &&
  85. $hasPermission('mes:producetaskrecordrulesrecord:res')
  86. "
  87. type="primary"
  88. :underline="false"
  89. @click="openEdit('edit', row)"
  90. >
  91. 重新报工
  92. </el-link>
  93. <el-link
  94. v-if="row.approvalStatus === 0"
  95. type="primary"
  96. :underline="false"
  97. @click="openApproval(row)"
  98. >
  99. 提交
  100. </el-link>
  101. <el-popconfirm
  102. v-if="
  103. row.executeStatus == 0 &&
  104. $hasPermission('mes:producetaskrecordrulesrecord:logicdelete')
  105. "
  106. title="确定要删除此用户吗?"
  107. class="ele-action"
  108. @confirm="deleteById(row)"
  109. >
  110. <template v-slot:reference>
  111. <el-link type="danger" :underline="false"> 删除 </el-link>
  112. </template>
  113. </el-popconfirm>
  114. </div>
  115. </template>
  116. </ele-pro-table>
  117. <!-- 编辑添加组件 -->
  118. <editModal
  119. ref="detailsRef"
  120. :reportWorkType="reportWorkType"
  121. @reload="reload"
  122. ></editModal>
  123. <!-- 记录规则 执行 -->
  124. <releaseRulesDialog
  125. ref="releaseRulesDialogRef"
  126. @reload="reload"
  127. :isTempRecord="1"
  128. />
  129. <programRulesDialog
  130. ref="programRulesDialogRef"
  131. @reload="reload"
  132. :isTempRecord="1"
  133. />
  134. <taskDialog ref="taskDialogRef" @reload="reload" :isTempRecord="1" />
  135. <process-submit-dialog
  136. :processSubmitDialogFlag.sync="processSubmitDialogFlag"
  137. v-if="processSubmitDialogFlag"
  138. ref="processSubmitDialogRef"
  139. @reload="reload"
  140. :isNotNeedProcess="false"
  141. ></process-submit-dialog>
  142. </el-card>
  143. </template>
  144. <script>
  145. import dictMixins from '@/mixins/dictMixins';
  146. import tableColumnsMixin from '@/mixins/tableColumnsMixin';
  147. import {
  148. producetaskrulerecordPage,
  149. logicDeleteById,
  150. saveRuleRecord
  151. } from '@/api/producetaskrulerecord/index';
  152. import editModal from './editModal.vue';
  153. import { parameterGetByCode } from '@/api/system/dictionary-data';
  154. import releaseRulesDialog from '@/views/produce/components/prenatalExamination/releaseRulesDialog.vue';
  155. import programRulesDialog from '@/views/produce/components/prenatalExamination/programRulesDialog.vue';
  156. import taskDialog from '@/views/produce/components/prenatalExamination/taskDialog.vue';
  157. import processSubmitDialog from '@/components/processSubmitDialog/processSubmitDialog.vue';
  158. import {
  159. queryListByWorkOrderId,
  160. saveOrUpdateAndSubmit
  161. } from '@/api/producetaskrecordrulesrecord/index.js';
  162. export default {
  163. components: {
  164. editModal,
  165. releaseRulesDialog,
  166. programRulesDialog,
  167. processSubmitDialog,
  168. taskDialog
  169. },
  170. name: 'batchRecordTable',
  171. mixins: [dictMixins, tableColumnsMixin],
  172. props: {
  173. // 1-产前准备,2-过程控制,3-产后检查
  174. reportWorkType: {
  175. type: Number,
  176. default: 1
  177. }
  178. },
  179. data() {
  180. return {
  181. // 表格字段
  182. columns: [
  183. {
  184. width: 50,
  185. type: 'index',
  186. columnKey: 'index',
  187. label: '序号',
  188. align: 'center'
  189. },
  190. {
  191. label: '记录编码',
  192. prop: 'code',
  193. minWidth: 150,
  194. slot: 'code'
  195. },
  196. {
  197. label: '产品编码',
  198. prop: 'productCode',
  199. minWidth: 180
  200. },
  201. {
  202. label: '产品名称',
  203. prop: 'productName',
  204. minWidth: 180
  205. },
  206. {
  207. label: '批次号',
  208. prop: 'batchNo',
  209. minWidth: 150
  210. },
  211. {
  212. label: '生产工单号',
  213. prop: 'workOrderCode',
  214. minWidth: 180
  215. },
  216. {
  217. label: '类型',
  218. prop: 'itemType',
  219. formatter: (row) => {
  220. return this.getDictValue('事项类型', row.itemType + '');
  221. }
  222. },
  223. {
  224. label: '配置执行方式',
  225. prop: 'executeMethod',
  226. minWidth: 150,
  227. formatter: (row) => {
  228. return this.getDictValue('执行方式', row.executeMethod + '');
  229. }
  230. },
  231. {
  232. label: '事项名称',
  233. prop: 'ruleName',
  234. minWidth: 180,
  235. formatter: (row) => {
  236. return row.ruleName || row.itemTaskName;
  237. }
  238. },
  239. {
  240. label: '记录执行方式',
  241. prop: 'recordRulesExecuteMethodName',
  242. minWidth: 180
  243. },
  244. {
  245. label: '状态',
  246. minWidth: 80,
  247. prop: 'executeStatus',
  248. formatter: (row) => {
  249. switch (row.executeStatus) {
  250. case 0:
  251. return '未报工';
  252. case 1:
  253. return '执行中';
  254. default:
  255. return '已报工';
  256. }
  257. }
  258. },
  259. {
  260. label: '审核状态',
  261. prop: 'approvalStatus',
  262. minWidth: 90,
  263. formatter: (row) => {
  264. switch (row.approvalStatus) {
  265. case 0:
  266. return '未提交';
  267. case 1:
  268. return '审核中';
  269. case 2:
  270. return '审核通过';
  271. case 3:
  272. return '审核不通过';
  273. case 4:
  274. return '终止审核中';
  275. case 5:
  276. return '终止审核通过';
  277. case 7:
  278. return '流程废止';
  279. default:
  280. return '';
  281. }
  282. }
  283. },
  284. {
  285. label: '结果',
  286. prop: 'checkFailed',
  287. minWidth: 100,
  288. formatter: (row) => {
  289. return row.checkFailed == 1 ? '不合格' : '合格';
  290. }
  291. },
  292. {
  293. label: '创建人',
  294. prop: 'createUserName',
  295. minWidth: 150
  296. },
  297. {
  298. label: '创建时间',
  299. prop: 'createTime',
  300. minWidth: 150
  301. },
  302. {
  303. label: '操作',
  304. columnKey: 'action',
  305. slot: 'action',
  306. showOverflowTooltip: true,
  307. minWidth: 150,
  308. align: 'center',
  309. fixed: 'right'
  310. }
  311. ],
  312. // 是否展示处理按钮
  313. showBut: false,
  314. showReleaseRulesDialog: false,
  315. processSubmitDialogFlag: false,
  316. butLoading: false
  317. };
  318. },
  319. computed: {
  320. seekList() {
  321. return [
  322. {
  323. label: '记录编码:',
  324. value: 'code',
  325. type: 'input',
  326. placeholder: '请输入'
  327. },
  328. {
  329. label: '生产工单号:',
  330. value: 'workOrderCode',
  331. type: 'input',
  332. placeholder: '请输入'
  333. },
  334. {
  335. label: '类型:',
  336. value: 'itemType',
  337. type: 'select',
  338. placeholder: '请选择',
  339. planList: this.getDictListByName('事项类型')
  340. },
  341. {
  342. label: '产品名称:',
  343. value: 'productName',
  344. type: 'input',
  345. placeholder: '请输入'
  346. },
  347. {
  348. label: '状态:',
  349. value: 'executeStatus',
  350. type: 'select',
  351. placeholder: '请选择',
  352. planList: [
  353. {
  354. label: '未报工',
  355. value: 0
  356. },
  357. {
  358. label: '执行中',
  359. value: 1
  360. },
  361. {
  362. label: '已报工',
  363. value: 2
  364. }
  365. ]
  366. }
  367. ];
  368. },
  369. cacheKeyUrl() {
  370. return `mes-batchRecordTableRules-reportWorkType-${this.reportWorkType}`;
  371. }
  372. },
  373. created() {
  374. this.requestDict('事项类型');
  375. this.requestDict('报工类型');
  376. this.requestDict('执行方式');
  377. this.parameterGetByCode();
  378. },
  379. methods: {
  380. // 刷新表格
  381. reload(where = {}) {
  382. this.$nextTick(() => {
  383. this.$refs.table.reload({
  384. page: 1,
  385. where,
  386. reportWorkType: this.reportWorkType,
  387. recordOrder: [1, 2, 3].includes(this.reportWorkType) ? 1 : ''
  388. });
  389. });
  390. },
  391. /* 表格数据源 */
  392. datasource({ page, limit, where, order }) {
  393. return producetaskrulerecordPage({
  394. ...where,
  395. ...order,
  396. pageNum: page,
  397. size: limit,
  398. reportWorkType: this.reportWorkType,
  399. recordOrder: [1, 2, 3].includes(this.reportWorkType) ? 1 : ''
  400. });
  401. },
  402. // 打开编辑新增
  403. openEdit(type, row) {
  404. this.$refs.detailsRef.open(type, row);
  405. },
  406. // 删除临时记录
  407. async deleteById(item) {
  408. await logicDeleteById(item.id);
  409. this.$message.warning('删除成功!');
  410. this.reload();
  411. },
  412. // 查询是否显示处理按钮
  413. async parameterGetByCode() {
  414. const data = await parameterGetByCode({
  415. code: 'form_submission_requires_approval',
  416. moduleCode: 'mes_'
  417. });
  418. this.showBut = data?.tenantId == '1';
  419. console.log('是否显示处理按钮(审批)', this.showBut);
  420. },
  421. // 提交审批
  422. openApproval(row) {
  423. console.log('row', row);
  424. this.processSubmitDialogFlag = true;
  425. // 类型
  426. let businessType = '';
  427. if (this.reportWorkType == 1) {
  428. businessType = '产前准备';
  429. } else if (this.reportWorkType == 2) {
  430. businessType = '过程控制';
  431. } else if (this.reportWorkType == 3) {
  432. businessType = '产后检查';
  433. } else {
  434. businessType = '生产统计';
  435. }
  436. this.$nextTick(() => {
  437. let params = {
  438. businessId: row.id,
  439. businessKey: 'mes_produce_task_record_rule_check',
  440. formCreateUserId: row.createUserId,
  441. variables: {
  442. businessCode: row.code,
  443. businessName: '批记录',
  444. businessType: businessType
  445. }
  446. };
  447. this.$refs.processSubmitDialogRef.init(params);
  448. });
  449. },
  450. // 执行
  451. async execute(row) {
  452. console.log('row', row);
  453. const currentItem = { ...row, recordId: row.id };
  454. if (row.itemType == 1) {
  455. // 设备保养计划相关逻辑
  456. this.$refs.programRulesDialogRef.init(currentItem, currentItem, {
  457. name: row.produceTaskName
  458. });
  459. return;
  460. }
  461. if (row.itemType == 2) {
  462. return this.releaseRulesSaveOrSubmit(row);
  463. }
  464. // 任务确认
  465. this.saveRuleRecord(row);
  466. },
  467. // 任务确认报工
  468. async saveRuleRecord(row) {
  469. this.butLoading = true;
  470. await saveRuleRecord(row);
  471. this.$message.success('报工成功!');
  472. this.butLoading = false;
  473. this.reload();
  474. },
  475. // 记录规则报工
  476. async releaseRulesSaveOrSubmit(row) {
  477. this.butLoading = true;
  478. if (row.produceTaskId) {
  479. const pickDetails = await queryListByWorkOrderId({
  480. workOrderId: row.workOrderId,
  481. recordId: row.id,
  482. produceTaskId: row.produceTaskId,
  483. ruleId: row.ruleId
  484. });
  485. row.pickDetails = pickDetails;
  486. }
  487. await saveOrUpdateAndSubmit(row);
  488. this.$message.success('报工成功!');
  489. this.butLoading = false;
  490. this.reload();
  491. },
  492. approvalStatusText(row) {
  493. switch (row.approvalStatus) {
  494. case 0:
  495. return '未提交';
  496. case 1:
  497. return '审核中';
  498. case 2:
  499. return '审核通过';
  500. case 3:
  501. return '审核不通过';
  502. case 4:
  503. return '终止审核中';
  504. case 5:
  505. return '终止审核通过';
  506. case 7:
  507. return '流程废止';
  508. default:
  509. return '';
  510. }
  511. }
  512. }
  513. };
  514. </script>
  515. <style lang="scss" scoped></style>