index.vue 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886
  1. <template>
  2. <div class="mainContentBox">
  3. <avue-crud
  4. ref="crudRef"
  5. v-model:search="search"
  6. v-loading="loading"
  7. v-model="form"
  8. :data="data"
  9. :option="option"
  10. v-model:page="page"
  11. :permission="permission"
  12. @row-save="createRow"
  13. @row-update="updateRow"
  14. @row-del="deleteRow"
  15. @search-change="searchChange"
  16. @search-reset="resetChange"
  17. @size-change="dataList"
  18. @current-change="dataList"
  19. @selection-change="selectionChange"
  20. >
  21. <template #menu-left="{ size }">
  22. <el-button
  23. :disabled="toDeleteIds.length < 1"
  24. type="danger"
  25. icon="el-icon-delete"
  26. :size="size"
  27. @click="multipleDelete"
  28. >删除</el-button
  29. >
  30. <el-button
  31. :disabled="toDeleteIds.length < 1"
  32. type="primary"
  33. icon="el-icon-primary"
  34. :size="size"
  35. @click="aps1"
  36. >批量排程</el-button
  37. >
  38. </template>
  39. <template #menu="{ size, row, index }">
  40. <el-button
  41. v-hasPerm="[buttonPermission.PLAN.BTNS.work_order_edit]"
  42. v-if="
  43. row.workOrderState === '0' ||
  44. row.workOrderState === '1' ||
  45. row.workOrderState === '2'
  46. "
  47. type="primary"
  48. link
  49. size="small"
  50. @click="handleEdit(row, 0)"
  51. ><i-ep-edit />编辑
  52. </el-button>
  53. <el-button
  54. @click="aps(row.id)"
  55. icon="el-icon-setting"
  56. text
  57. v-hasPerm="[buttonPermission.PLAN.BTNS.work_order_aps]"
  58. v-if="
  59. row.workOrderState === '0' ||
  60. row.workOrderState === '1' ||
  61. row.workOrderState === '2'
  62. "
  63. type="primary"
  64. :size="size"
  65. >排程</el-button
  66. >
  67. <el-button
  68. icon="el-icon-setting"
  69. text
  70. v-hasPerm="[buttonPermission.PLAN.BTNS.work_order_lock]"
  71. v-if="row.workOrderState === '4'"
  72. @click="lockOrUnLockWorkOrder(row.id, 5)"
  73. type="primary"
  74. :size="size"
  75. >冻结</el-button
  76. >
  77. <el-button
  78. icon="el-icon-setting"
  79. text
  80. v-if="row.workOrderState === '5'"
  81. v-hasPerm="[buttonPermission.PLAN.BTNS.work_order_lock]"
  82. @click="lockOrUnLockWorkOrder(row.id, 4)"
  83. type="primary"
  84. :size="size"
  85. >解冻</el-button
  86. >
  87. <el-button
  88. icon="el-icon-setting"
  89. text
  90. v-if="row.workOrderState === '2'"
  91. @click="distribute(row.id)"
  92. type="primary"
  93. v-hasPerm="[buttonPermission.PLAN.BTNS.work_order_aps]"
  94. :size="size"
  95. >下发</el-button
  96. >
  97. <el-button
  98. icon="el-icon-setting"
  99. text
  100. @click="showSeqPage(row)"
  101. type="primary"
  102. :size="size"
  103. >工卡编号</el-button
  104. >
  105. <el-button
  106. icon="el-icon-delete"
  107. text
  108. v-if="row.workOrderState === '3'"
  109. @click="revoke(row.id)"
  110. type="primary"
  111. :size="size"
  112. >撤销</el-button
  113. >
  114. <el-button
  115. icon="el-icon-setting"
  116. text
  117. @click="showCheckTask(row)"
  118. type="primary"
  119. :size="size"
  120. >检验任务</el-button
  121. >
  122. <el-button
  123. icon="el-icon-setting"
  124. text
  125. @click="jumpPage(row.workOrderCode, 2)"
  126. type="primary"
  127. :size="size"
  128. >维修准备</el-button
  129. >
  130. <el-button
  131. icon="el-icon-setting"
  132. text
  133. @click="showProExcel(row.id)"
  134. type="primary"
  135. v-if="row.workOrderState > 3"
  136. :size="size"
  137. >维修跟踪卡</el-button
  138. >
  139. <!-- <el-button
  140. icon="el-icon-notebook"
  141. text
  142. v-if="row.workOrderState === '6'"
  143. @click="workOrderData(row.id)"
  144. type="primary"
  145. v-hasPerm="[buttonPermission.PLAN.BTNS.work_order_data]"
  146. :size="size"
  147. >生成维修随工单</el-button
  148. >-->
  149. <!-- <el-button
  150. icon="el-icon-download"
  151. text
  152. v-if="row.workOrderState === '6'&&row.packageUrl!=='0'"
  153. @click="downloadTemplate('/api/v1/plan/workOrder/zip/'+row.id)"
  154. type="primary"
  155. v-hasPerm="[buttonPermission.PLAN.BTNS.work_order_downLoad]"
  156. :size="size">下载数据包</el-button>-->
  157. </template>
  158. </avue-crud>
  159. <el-dialog
  160. v-model="dialog.visible"
  161. :title="dialog.title"
  162. width="80%"
  163. @close="dialog.visible = false"
  164. >
  165. <order-page queryType="1" @order-info="orderInfo" />
  166. </el-dialog>
  167. <el-dialog
  168. v-model="dialog1.visible"
  169. :title="dialog1.title"
  170. width="80%"
  171. @close="dialog1.visible = false"
  172. >
  173. <choice-route-page
  174. :processRouteType="processRouteType"
  175. :material-code="form.materialCode"
  176. @route-info="routeInfo"
  177. />
  178. </el-dialog>
  179. <el-dialog
  180. v-model="dialog2.visible"
  181. :title="dialog2.title"
  182. width="80%"
  183. @close="dialog2.visible = false"
  184. >
  185. <choice-workshop-page @work-shop-info="workShopInfo" />
  186. </el-dialog>
  187. <el-dialog
  188. v-model="dialog3.visible"
  189. :title="dialog3.title"
  190. width="80%"
  191. @close="dialog3.visible = false"
  192. >
  193. <choice-line-page
  194. :parentCode="form.workshopCode"
  195. :materialCode="form.materialCode"
  196. @line-info="lineInfo"
  197. />
  198. </el-dialog>
  199. <el-dialog
  200. v-model="dialog4.visible"
  201. :title="dialog4.title"
  202. width="950px"
  203. @close="dialog4.visible = false"
  204. >
  205. <work-order-seq :workOrderInfo="form" />
  206. </el-dialog>
  207. <el-dialog
  208. v-model="dialog6.visible"
  209. :append-to-body="true"
  210. :title="dialog6.title"
  211. width="1100px"
  212. @close="dialog6.visible = false"
  213. >
  214. <check-task :workOrderInfo="form" />
  215. </el-dialog>
  216. <el-dialog
  217. v-model="dialog5.visible"
  218. :title="dialog5.title"
  219. width="450px"
  220. @close="dialog5.visible = false"
  221. >
  222. <el-form
  223. ref="dataFormRef"
  224. :model="formData"
  225. :rules="rules"
  226. label-width="150px"
  227. >
  228. <el-form-item label="排程时间" prop="apsTime">
  229. <el-date-picker
  230. v-model="formData.apsTime"
  231. type="date"
  232. style="width: 200px"
  233. :disabled-date="disabledDate"
  234. placeholder="请选择时间"
  235. format="YYYY/MM/DD"
  236. value-format="YYYY-MM-DD"
  237. />
  238. <!-- <el-input width="250px" v-model="formData.apsTime" type="date" format="YYYY-MM-DD" value-format="YYYY-MM-DD"/>-->
  239. </el-form-item>
  240. <el-form-item label="优先级" prop="priority" v-if="apsType === 1">
  241. <el-select
  242. v-model="formData.priority"
  243. placeholder="排程类型"
  244. style="width: 200px"
  245. >
  246. <el-option
  247. v-for="item in apsPriority"
  248. :label="item.dictLabel"
  249. :value="item.dictValue"
  250. :key="item.dictValue"
  251. />
  252. </el-select>
  253. </el-form-item>
  254. <el-form-item label="排程类型" prop="apsModel">
  255. <el-select
  256. v-model="formData.apsModel"
  257. placeholder="排程类型"
  258. style="width: 200px"
  259. >
  260. <el-option
  261. v-for="item in schedulingTypes"
  262. :label="item.dictLabel"
  263. :value="item.dictValue"
  264. :key="item.dictValue"
  265. />
  266. </el-select>
  267. </el-form-item>
  268. </el-form>
  269. <template #footer>
  270. <div class="dialog-footer">
  271. <el-button type="primary" @click="handleSubmit">确 定</el-button>
  272. <el-button @click="dialog5.visible = false">取 消</el-button>
  273. </div>
  274. </template>
  275. </el-dialog>
  276. <!-- 维修随工单 -->
  277. <el-dialog
  278. v-model="workOderShow"
  279. :title="updateTitle"
  280. @close="workOderShow = false"
  281. width="1600"
  282. >
  283. <proWorkOrderExcel :data="ExDataObj" @close="closeShow" />
  284. </el-dialog>
  285. </div>
  286. </template>
  287. <script setup>
  288. import { ref, getCurrentInstance } from "vue";
  289. import { useCrud } from "@/hooks/userCrud";
  290. import buttonPermission from "@/common/configs/buttonPermission";
  291. import {
  292. apsWorkOrder,
  293. distributeWorkOrder,
  294. revokeWorkOrder,
  295. lockWorkOrder,
  296. excelWorkOrder,
  297. } from "@/api/order";
  298. import { useCommonStoreHook } from "@/store";
  299. import dictDataUtil from "@/common/configs/dictDataUtil";
  300. import ChoiceRoutePage from "./components/choice-route-page.vue";
  301. import ChoiceWorkshopPage from "./components/choice-workshop-page.vue";
  302. import WorkOrderSeq from "./components/work-order-seq.vue";
  303. import CheckTask from "./components/check-task.vue";
  304. import { checkPerm } from "@/directive/permission";
  305. import { queryDictDataByType } from "@/api/system/dict";
  306. import { getProExcel } from "@/api/excel";
  307. import proWorkOrderExcel from "./components/proWorkOrderExcel.vue";
  308. import { getWorkshopData } from "@/api/report";
  309. const { isShowTable, tableType } = toRefs(useCommonStoreHook());
  310. const updateTitle = ref("维修随工单");
  311. const workshopName = ref("");
  312. const router = useRouter();
  313. const workOderShow = ref(false);
  314. const ExDataObj = ref({});
  315. const excelData = ref([]);
  316. const showProExcel = async (id) => {
  317. const { data, code } = await getProExcel(id);
  318. if (code == "200") {
  319. ExDataObj.value = data;
  320. workOderShow.value = true;
  321. } else {
  322. ExDataObj.value = {};
  323. workOderShow.value = false;
  324. }
  325. };
  326. const closeShow = () => {
  327. workOderShow.value = false;
  328. };
  329. const test = () => {
  330. isShowTable.value = true;
  331. tableType.value = tableType.value == 1 ? 2 : 1;
  332. };
  333. const processRouteType = ref("");
  334. const permission = reactive({
  335. delBtn: checkPerm(buttonPermission.PLAN.BTNS.work_order_del),
  336. addBtn: checkPerm(buttonPermission.PLAN.BTNS.work_order_add),
  337. editBtn: checkPerm(buttonPermission.PLAN.BTNS.work_order_edit),
  338. menu: true,
  339. });
  340. const disabledDate = (time) => {
  341. return time.getTime() < Date.now(); // 8.64e7 毫秒数代表一天
  342. };
  343. const jumpPage = (workOrderCode, type) => {
  344. if (type === 1) {
  345. router.push("/requisition?workOrderCode=" + workOrderCode);
  346. } else {
  347. router.push("/plan/prepare?workOrderCode=" + workOrderCode);
  348. }
  349. };
  350. const dialog = reactive({
  351. title: "计划选择",
  352. visible: false,
  353. });
  354. const dialog1 = reactive({
  355. title: "工艺选择",
  356. visible: false,
  357. });
  358. const dialog2 = reactive({
  359. title: "车间选择",
  360. visible: false,
  361. });
  362. const dialog3 = reactive({
  363. title: "产线选择",
  364. visible: false,
  365. });
  366. const dialog4 = reactive({
  367. title: "工卡编号",
  368. visible: false,
  369. });
  370. const dialog5 = reactive({
  371. title: "排程确认",
  372. visible: false,
  373. });
  374. const dialog6 = reactive({
  375. title: "检验任务",
  376. visible: false,
  377. });
  378. const apsType = ref(0);
  379. const aps = (id) => {
  380. apsType.value = 0;
  381. formData.workOrderIds = [id];
  382. dialog5.visible = true;
  383. };
  384. const showSeqPage = (workOrderCode) => {
  385. form.value = workOrderCode;
  386. dialog4.visible = true;
  387. };
  388. const showCheckTask = (workOrderCode) => {
  389. form.value = workOrderCode;
  390. dialog6.visible = true;
  391. };
  392. const distribute = (id) => {
  393. ElMessageBox.confirm("当前操作不可逆,确定下发工单吗?")
  394. .then(() => {
  395. distributeWorkOrder(id).then((data) => {
  396. ElMessage.success(data.msg);
  397. dataList();
  398. });
  399. })
  400. .catch(() => {
  401. // catch error
  402. });
  403. };
  404. const lockOrUnLockWorkOrder = (id, status) => {
  405. let message = status === "4" ? "解冻" : "冻结";
  406. ElMessageBox.confirm("当前操作不可逆,确定" + message + "工单吗?")
  407. .then(() => {
  408. loading.value = true;
  409. lockWorkOrder({ id: id, workOrderState: status }).then((data) => {
  410. loading.value = false;
  411. ElMessage.success(data.msg);
  412. dataList();
  413. });
  414. })
  415. .catch(() => {
  416. // catch error
  417. });
  418. };
  419. const loading = ref(false);
  420. const excelWork = ref({});
  421. const workOrderData = (id) => {
  422. loading.value = true;
  423. excelWork.value.workOrderId = id;
  424. excelWorkOrder(excelWork.value).then((data) => {
  425. if (data.code === "200") {
  426. loading.value = false;
  427. ElMessage.success(data.msg);
  428. dataList();
  429. } else {
  430. loading.value = false;
  431. ElMessage.error(data.msg);
  432. }
  433. });
  434. };
  435. const revoke = (id) => {
  436. ElMessageBox.confirm("当前操作不可逆,确定撤销工单吗?")
  437. .then(() => {
  438. loading.value = true;
  439. revokeWorkOrder(id).then((data) => {
  440. if (data.code === "200") {
  441. loading.value = false;
  442. ElMessage.success(data.msg);
  443. dataList();
  444. } else {
  445. loading.value = false;
  446. ElMessage.error(data.msg);
  447. }
  448. });
  449. })
  450. .catch(() => {
  451. // catch error
  452. });
  453. };
  454. const allData = ref([]);
  455. const getAllData = async () => {
  456. const { data, code } = await getWorkshopData({
  457. pageNo: 1,
  458. pageSize: 999999,
  459. });
  460. allData.value = data.records;
  461. };
  462. const setWorkShop = () => {
  463. allData.value.forEach((item) => {
  464. if (item.name == workshopName.value) {
  465. workShopInfo(item);
  466. }
  467. });
  468. };
  469. const handleEdit = (row, index) => {
  470. workshopName.value = row.workshopName;
  471. crudRef.value && crudRef.value.rowEdit(row, index);
  472. setWorkShop();
  473. };
  474. const aps1 = () => {
  475. apsType.value = 1;
  476. formData.workOrderIds = toDeleteIds;
  477. dialog5.visible = true;
  478. };
  479. const dataFormRef = ref(ElForm);
  480. const schedulingTypes = ref([]);
  481. const apsPriority = ref([]);
  482. const formData = reactive({
  483. apsTime: null,
  484. priority: "1",
  485. apsModel: "0",
  486. workOrderId: 0,
  487. });
  488. const rules = reactive({
  489. priority: [{ required: true, message: "请选择优先级", trigger: "blur" }],
  490. apsTime: [{ required: true, message: "排程时间不能为空", trigger: "blur" }],
  491. apsModel: [{ required: true, message: "排程类型不能为空", trigger: "blur" }],
  492. });
  493. const handleSubmit = () => {
  494. dataFormRef.value.validate((isValid) => {
  495. if (isValid) {
  496. apsWorkOrder(formData).then((data) => {
  497. if (data.code === "200") {
  498. ElMessage.success(data.msg);
  499. dialog5.visible = false;
  500. dataList();
  501. } else {
  502. ElMessage.error(data.msg);
  503. }
  504. });
  505. }
  506. });
  507. };
  508. const orderInfo = (value) => {
  509. form.value.orderCode = value.orderCode;
  510. form.value.orderName = value.orderName;
  511. form.value.materialCode = value.materialCode;
  512. form.value.materialName = value.materialName;
  513. form.value.materialModel = value.materialModel;
  514. form.value.priority = value.priority;
  515. form.value.orderType = value.orderType;
  516. form.value.processRouteId = "";
  517. form.value.processRouteCode = "";
  518. form.value.processRouteName = "";
  519. form.value.processRouteVersion = "";
  520. form.value.productLineId = "";
  521. form.value.productLineName = "";
  522. form.value.workshopName = "";
  523. form.value.workshopCode = "";
  524. form.value.workshopName = "";
  525. dialog.visible = false;
  526. };
  527. const lineInfo = (value) => {
  528. form.value.productLineId = value.id;
  529. form.value.productLineName = value.name;
  530. dialog3.visible = false;
  531. };
  532. const workShopInfo = (value) => {
  533. if (
  534. form.value.workshopCode &&
  535. value.code &&
  536. form.value.workshopCode !== value.code
  537. ) {
  538. form.value.productLineId = "";
  539. form.value.productLineName = "";
  540. }
  541. form.value.workshopName = value.id;
  542. form.value.workshopCode = value.code;
  543. form.value.workshopName = value.name;
  544. dialog2.visible = false;
  545. };
  546. const routeInfo = (value) => {
  547. form.value.processRouteId = value.id;
  548. form.value.processRouteCode = value.processRouteCode;
  549. form.value.processRouteName = value.processRouteName;
  550. form.value.processRouteVersion = value.processRouteVersion;
  551. dialog1.visible = false;
  552. };
  553. // 传入一个url,后面不带/
  554. const { form, data, option, search, page, toDeleteIds, Methords, Utils } =
  555. useCrud({
  556. src: "/api/v1/plan/workOrder",
  557. });
  558. const { dataList, createRow, updateRow, deleteRow, searchChange, resetChange } =
  559. Methords; //增删改查
  560. const { selectionChange, multipleDelete } = Methords; //选中和批量删除事件
  561. const { checkBtnPerm, downloadTemplate, exportData } = Utils; //按钮权限等工具
  562. const crudRef = ref(null); //crudRef.value 获取avue-crud对象
  563. // 设置表格列或者其他自定义的option
  564. option.value = Object.assign(option.value, {
  565. delBtn: false,
  566. selection: true,
  567. viewBtn: false,
  568. editBtn: false,
  569. column: [
  570. {
  571. label: "工单编号",
  572. prop: "workOrderCode",
  573. search: true,
  574. display: false,
  575. width: 125,
  576. overHidden: true,
  577. },
  578. {
  579. label: "计划编号",
  580. prop: "orderCode",
  581. search: true,
  582. width: 125,
  583. overHidden: true,
  584. rules: [
  585. {
  586. required: true,
  587. message: "计划编号不能为空",
  588. trigger: "trigger",
  589. },
  590. ],
  591. click: ({ value, column }) => {
  592. if (column.boxType) {
  593. dialog.visible = true;
  594. }
  595. },
  596. change: ({ value, column }) => {
  597. if (column.boxType) {
  598. if (value != form.value.orderCode) {
  599. dialog.visible = true;
  600. }
  601. }
  602. },
  603. },
  604. {
  605. label: "计划名称",
  606. prop: "orderName",
  607. search: true,
  608. disabled: true,
  609. width: 125,
  610. overHidden: true,
  611. },
  612. {
  613. label: "计划类型",
  614. prop: "orderType",
  615. type: "select", //类型为下拉选择框
  616. width: 100,
  617. disabled: true,
  618. overHidden: true,
  619. dicUrl: dictDataUtil.request_url + dictDataUtil.TYPE_CODE.plan_order_type,
  620. props: {
  621. label: "dictLabel",
  622. value: "dictValue",
  623. },
  624. },
  625. {
  626. label: "产品编号",
  627. width: 125,
  628. overHidden: true,
  629. search: true,
  630. disabled: true,
  631. prop: "materialCode",
  632. },
  633. {
  634. label: "产品名称",
  635. width: 125,
  636. overHidden: true,
  637. search: true,
  638. disabled: true,
  639. prop: "materialName",
  640. },
  641. {
  642. label: "产品规格",
  643. width: 125,
  644. search: true,
  645. overHidden: true,
  646. disabled: true,
  647. prop: "materialModel",
  648. },
  649. {
  650. label: "优先级",
  651. prop: "priority",
  652. display: false,
  653. width: "80",
  654. type: "select", //类型为下拉选择框
  655. dicUrl:
  656. dictDataUtil.request_url + dictDataUtil.TYPE_CODE.plan_order_priority,
  657. props: {
  658. label: "dictLabel",
  659. value: "dictValue",
  660. },
  661. },
  662. {
  663. label: "状态",
  664. prop: "workOrderState",
  665. width: "80",
  666. display: false,
  667. type: "select", //类型为下拉选择框
  668. dicUrl:
  669. dictDataUtil.request_url + dictDataUtil.TYPE_CODE.plan_work_order_state,
  670. props: {
  671. label: "dictLabel",
  672. value: "dictValue",
  673. },
  674. },
  675. {
  676. label: "维修流程",
  677. prop: "processRouteName",
  678. width: 125,
  679. overHidden: true,
  680. rules: [
  681. {
  682. required: true,
  683. message: "维修流程不能为空",
  684. trigger: "trigger",
  685. },
  686. ],
  687. click: ({ value, column }) => {
  688. if (column.boxType) {
  689. if (!form.value.materialCode) {
  690. ElMessage({
  691. message: "请先选择计划",
  692. type: "warning",
  693. });
  694. return;
  695. }
  696. processRouteType.value = form.value.orderType === "2" ? "FG" : "ZC";
  697. dialog1.visible = true;
  698. }
  699. },
  700. change: ({ value, column }) => {
  701. if (column.boxType) {
  702. if (value != form.value.processRouteName) {
  703. dialog1.visible = true;
  704. }
  705. }
  706. },
  707. },
  708. {
  709. label: "工艺版本",
  710. width: 100,
  711. overHidden: true,
  712. prop: "processRouteVersion",
  713. display: false,
  714. html: true,
  715. formatter: (val) => {
  716. return (
  717. '<b class="el-tag el-tag--success el-tag--light">' +
  718. val.processRouteVersion +
  719. "</b>"
  720. );
  721. },
  722. },
  723. {
  724. label: "维修车间",
  725. prop: "workshopName",
  726. width: 120,
  727. overHidden: true,
  728. rules: [
  729. {
  730. required: true,
  731. message: "维修车间不能为空",
  732. trigger: "trigger",
  733. },
  734. ],
  735. click: ({ value, column }) => {
  736. if (column.boxType) {
  737. dialog2.visible = true;
  738. }
  739. if (column.boxType == "edit") {
  740. form.value.productLineName = "";
  741. }
  742. },
  743. change: ({ value, column }) => {
  744. if (column.boxType) {
  745. if (value != form.value.workshopName) {
  746. dialog2.visible = true;
  747. }
  748. }
  749. },
  750. },
  751. {
  752. label: "产线名称",
  753. prop: "productLineName",
  754. width: 120,
  755. overHidden: true,
  756. rules: [
  757. {
  758. required: true,
  759. message: "产线名称不能为空",
  760. trigger: "trigger",
  761. },
  762. ],
  763. click: ({ value, column }) => {
  764. if (column.boxType) {
  765. if (!form.value.workshopName) {
  766. ElMessage({
  767. message: "请先选择维修车间",
  768. type: "warning",
  769. });
  770. return;
  771. }
  772. dialog3.visible = true;
  773. }
  774. },
  775. change: ({ value, column }) => {
  776. if (column.boxType) {
  777. if (value != form.value.productLineName) {
  778. dialog3.visible = true;
  779. }
  780. }
  781. },
  782. },
  783. {
  784. label: "开始时间",
  785. prop: "planStartWhen",
  786. width: 180,
  787. overHidden: true,
  788. display: false,
  789. },
  790. {
  791. label: "结束时间",
  792. prop: "planStartEnd",
  793. width: 180,
  794. display: false,
  795. overHidden: true,
  796. },
  797. {
  798. label: "工单数量",
  799. prop: "planNum",
  800. width: 85,
  801. type: "number",
  802. min: 1,
  803. max: 99999,
  804. rules: [
  805. {
  806. required: true,
  807. message: "工单数量不能为空",
  808. trigger: "trigger",
  809. },
  810. ],
  811. },
  812. {
  813. label: "完成数量",
  814. width: 85,
  815. display: false,
  816. prop: "completeNum",
  817. },
  818. {
  819. label: "下线数量",
  820. width: 85,
  821. display: false,
  822. prop: "beforeNum",
  823. },
  824. {
  825. label: "报废数量",
  826. width: 85,
  827. display: false,
  828. prop: "scrapNum",
  829. },
  830. {
  831. label: "首检数量",
  832. width: 85,
  833. prop: "firstCheckNum",
  834. value: 0,
  835. },
  836. {
  837. label: "已检数量",
  838. width: 85,
  839. display: false,
  840. prop: "firstCheckAlreadyNum",
  841. },
  842. {
  843. label: "创建时间",
  844. width: 180,
  845. display: false,
  846. prop: "created",
  847. },
  848. {
  849. label: "创建人",
  850. width: 90,
  851. display: false,
  852. prop: "creator",
  853. },
  854. {
  855. label: "数据包地址",
  856. width: 90,
  857. display: false,
  858. prop: "packageUrl",
  859. hide: true,
  860. },
  861. ],
  862. });
  863. onMounted(() => {
  864. getAllData();
  865. dataList();
  866. queryDictDataByType("order_scheduling_type").then((data) => {
  867. schedulingTypes.value = data.data;
  868. });
  869. queryDictDataByType("aps_priority").then((data) => {
  870. apsPriority.value = data.data;
  871. });
  872. });
  873. </script>