checklist.vue 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328
  1. <template>
  2. <div class="ele-body">
  3. <el-card shadow="never">
  4. <seek-page :seekList="seekList" @search="search"></seek-page>
  5. <ele-pro-table
  6. ref="table"
  7. row-key="id"
  8. :columns="columns"
  9. :datasource="datasource"
  10. :cache-key="cacheKeyUrl"
  11. autoAmendPage
  12. :pageSize="20"
  13. :height="tableHeight"
  14. @fullscreen-change="fullscreenChange"
  15. >
  16. <template v-slot:toolbar>
  17. <el-button type="primary" size="mini" @click="openCheckAdd('add')"
  18. >新建</el-button
  19. >
  20. </template>
  21. <template v-slot:action="{ row }">
  22. <el-link type="text" @click="checkAddConfirm('edit', row)"
  23. >编辑</el-link
  24. >
  25. <el-link
  26. type="text"
  27. v-if="row.approvalStatus == 0"
  28. @click="openApproval(row)"
  29. >提交</el-link
  30. >
  31. <el-popconfirm
  32. title="您确定要删除这条数据吗?"
  33. @confirm="deleteRow(row)"
  34. >
  35. <el-link style="margin-left: 10px" slot="reference" type="danger"
  36. >删除</el-link
  37. >
  38. </el-popconfirm>
  39. </template>
  40. <template v-slot:code="{ row }">
  41. <el-link type="primary" @click="checkAddConfirm('detail', row)">{{
  42. row.code
  43. }}</el-link>
  44. </template>
  45. </ele-pro-table>
  46. </el-card>
  47. <checkAdd
  48. ref="checkAddRef"
  49. @confirm="checkAddConfirm('add', $event)"
  50. ></checkAdd>
  51. <checkDetails ref="checkDetailsRef" @reload="reload"></checkDetails>
  52. <process-submit-dialog
  53. :processSubmitDialogFlag.sync="processSubmitDialogFlag"
  54. v-if="processSubmitDialogFlag"
  55. ref="processSubmitDialogRef"
  56. @reload="reload"
  57. :isNotNeedProcess="false"
  58. ></process-submit-dialog>
  59. </div>
  60. </template>
  61. <script>
  62. import dictMixins from '@/mixins/dictMixins';
  63. import tableColumnsMixin from '@/mixins/tableColumnsMixin';
  64. import {
  65. checklistrecordPage,
  66. checklistrecordDelete
  67. } from '@/api/checklistrecord/index';
  68. import checkAdd from './components/checkAdd.vue';
  69. import checkDetails from './components/checkDetails.vue';
  70. import processSubmitDialog from '@/components/processSubmitDialog/processSubmitDialog.vue';
  71. import { getCategoryByCode } from '@/api/main/index';
  72. export default {
  73. mixins: [dictMixins, tableColumnsMixin],
  74. components: { checkAdd, checkDetails, processSubmitDialog },
  75. data() {
  76. return {
  77. columns: [
  78. {
  79. width: 50,
  80. type: 'index',
  81. columnKey: 'index',
  82. align: 'center',
  83. label: '序号'
  84. },
  85. {
  86. prop: 'code',
  87. label: '放行单编码',
  88. align: 'center',
  89. minWidth: 110,
  90. showOverflowTooltip: true,
  91. slot: 'code'
  92. },
  93. {
  94. prop: 'name',
  95. label: '放行单名称',
  96. align: 'center',
  97. minWidth: 110,
  98. showOverflowTooltip: true
  99. },
  100. {
  101. prop: 'productCode',
  102. label: '产品编码',
  103. align: 'center',
  104. minWidth: 110,
  105. showOverflowTooltip: true,
  106. formatter: (row) => {
  107. return row.orders.map((i) => i.productCode).join(', ');
  108. }
  109. },
  110. {
  111. prop: 'productName',
  112. label: '产品名称',
  113. align: 'center',
  114. minWidth: 110,
  115. showOverflowTooltip: true,
  116. formatter: (row) => {
  117. return row.orders.map((i) => i.productName).join(', ');
  118. }
  119. },
  120. {
  121. prop: 'batchNo',
  122. label: '批次号',
  123. align: 'center',
  124. minWidth: 110,
  125. showOverflowTooltip: true,
  126. formatter: (row) => {
  127. return row.orders.map((i) => i.batchNo).join(', ');
  128. }
  129. },
  130. {
  131. prop: 'code',
  132. label: '生产工单号',
  133. align: 'center',
  134. minWidth: 110,
  135. showOverflowTooltip: true,
  136. formatter: (row) => {
  137. return row.orders.map((i) => i.workOrderCode).join(', ');
  138. }
  139. },
  140. {
  141. prop: 'formingNum',
  142. label: '数量',
  143. align: 'center',
  144. minWidth: 110,
  145. showOverflowTooltip: true,
  146. formatter: (row) => {
  147. return row.orders.map((i) => i.formingNum).join(', ');
  148. }
  149. },
  150. {
  151. prop: 'specification',
  152. label: '规格',
  153. align: 'center',
  154. minWidth: 110,
  155. showOverflowTooltip: true,
  156. formatter: (row) => {
  157. return row.orders.map((i) => i.specification).join(', ');
  158. }
  159. },
  160. {
  161. prop: 'productModel',
  162. label: '型号',
  163. align: 'center',
  164. minWidth: 110,
  165. showOverflowTooltip: true,
  166. formatter: (row) => {
  167. return row.orders.map((i) => i.productModel).join(', ');
  168. }
  169. },
  170. {
  171. prop: 'approvalStatus',
  172. label: '审核',
  173. align: 'center',
  174. showOverflowTooltip: true,
  175. minWidth: 150,
  176. formatter: (row) => {
  177. switch (row.approvalStatus) {
  178. case 0:
  179. return '未提交';
  180. case 1:
  181. return '审核中';
  182. case 2:
  183. return '审核通过';
  184. case 3:
  185. return '审核不通过';
  186. default:
  187. return '';
  188. }
  189. }
  190. },
  191. {
  192. prop: 'createTime',
  193. label: '创建时间',
  194. align: 'center',
  195. minWidth: 110,
  196. showOverflowTooltip: true
  197. },
  198. {
  199. columnKey: 'action',
  200. label: '操作',
  201. width: 220,
  202. align: 'center',
  203. resizable: false,
  204. fixed: 'right',
  205. slot: 'action',
  206. showOverflowTooltip: true
  207. }
  208. ],
  209. cacheKeyUrl: 'mes-25925-material-table',
  210. tableHeight: 'calc(100vh - 320px)',
  211. processSubmitDialogFlag: false
  212. };
  213. },
  214. computed: {
  215. seekList() {
  216. return [
  217. {
  218. label: '放行单编码:',
  219. value: 'code',
  220. type: 'input',
  221. placeholder: '请输入'
  222. },
  223. {
  224. label: '放行单名称:',
  225. value: 'name',
  226. type: 'input',
  227. placeholder: '请输入'
  228. },
  229. {
  230. label: '审核状态:',
  231. value: 'approvalStatus',
  232. type: 'select',
  233. placeholder: '请输入',
  234. planList: [
  235. { label: '未提交', value: 0 },
  236. { label: '审核中', value: 1 },
  237. { label: '审核通过', value: 2 },
  238. { label: '审核不通过', value: 3 }
  239. ]
  240. }
  241. ];
  242. },
  243. clientEnvironmentId() {
  244. return this.$store.state.user.info.clientEnvironmentId;
  245. }
  246. },
  247. methods: {
  248. // 刷新表格
  249. reload(where = {}) {
  250. this.$refs.table.reload({
  251. where
  252. });
  253. },
  254. /* 表格数据源 */
  255. datasource({ page, limit, where, order }) {
  256. // 参数
  257. const body = {
  258. ...where,
  259. ...order,
  260. pageNum: page,
  261. size: limit
  262. };
  263. return checklistrecordPage(body);
  264. },
  265. search(where) {
  266. this.reload(where);
  267. },
  268. // 打开添加弹窗
  269. openCheckAdd(type) {
  270. this.$refs.checkAddRef?.open(type);
  271. },
  272. checkAddConfirm(type, data) {
  273. this.$refs.checkDetailsRef?.open(type, data);
  274. },
  275. // 删除
  276. async deleteRow(row) {
  277. await checklistrecordDelete([row.id]);
  278. this.$message.success('删除成功');
  279. this.reload();
  280. },
  281. fullscreenChange(fullscreen) {
  282. if (fullscreen) {
  283. this.tableHeight = 'calc(100vh - 120px)';
  284. } else {
  285. this.tableHeight = 'calc(100vh - 320px)';
  286. }
  287. },
  288. // 提交审批
  289. openApproval(row) {
  290. console.log('row', row);
  291. this.processSubmitDialogFlag = true;
  292. this.$nextTick(async () => {
  293. let params = {
  294. businessId: row.id,
  295. businessKey: 'work_order_checklist_approval',
  296. formCreateUserId: row.createUserId,
  297. variables: {
  298. businessCode: row.code
  299. }
  300. };
  301. if (this.clientEnvironmentId == 5) {
  302. // 嘉实环境
  303. const data = await getCategoryByCode(row.orders[0]?.productCode);
  304. // 判断品类
  305. if (data && data.categoryLevelCodePath?.includes('W3-209')) {
  306. // 药品
  307. params.businessKey = 'work_order_checklist_approval1';
  308. } else {
  309. // 器械
  310. params.businessKey = 'work_order_checklist_approval';
  311. }
  312. }
  313. console.log('params', params);
  314. this.$refs.processSubmitDialogRef.init(params);
  315. });
  316. }
  317. }
  318. };
  319. </script>
  320. <style></style>