index.vue 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835
  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.isExcel == 1"
  136. :size="size"
  137. >生产随工单</el-button
  138. >
  139. <el-button
  140. icon="el-icon-notebook"
  141. text
  142. v-if="row.workOrderState === '6' && row.isExcel == 0"
  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. const { isShowTable, tableType } = toRefs(useCommonStoreHook());
  309. const updateTitle = ref("生产随工单");
  310. const router = useRouter();
  311. const workOderShow = ref(false);
  312. const ExDataObj = ref({});
  313. const excelData = ref([]);
  314. const showProExcel = async (id) => {
  315. const { data, code } = await getProExcel(id);
  316. if (code == "200") {
  317. ExDataObj.value = data;
  318. workOderShow.value = true;
  319. } else {
  320. ExDataObj.value = {};
  321. workOderShow.value = false;
  322. }
  323. };
  324. const closeShow = () => {
  325. workOderShow.value = false;
  326. };
  327. const test = () => {
  328. isShowTable.value = true;
  329. tableType.value = tableType.value == 1 ? 2 : 1;
  330. };
  331. const processRouteType = ref("");
  332. const permission = reactive({
  333. delBtn: checkPerm(buttonPermission.PLAN.BTNS.work_order_del),
  334. addBtn: checkPerm(buttonPermission.PLAN.BTNS.work_order_add),
  335. editBtn: checkPerm(buttonPermission.PLAN.BTNS.work_order_edit),
  336. menu: true,
  337. });
  338. const disabledDate = (time) => {
  339. return time.getTime() < Date.now(); // 8.64e7 毫秒数代表一天
  340. };
  341. const jumpPage = (workOrderCode, type) => {
  342. if (type === 1) {
  343. router.push("/requisition?workOrderCode=" + workOrderCode);
  344. } else {
  345. router.push("/plan/prepare?workOrderCode=" + workOrderCode);
  346. }
  347. };
  348. const dialog = reactive({
  349. title: "订单选择",
  350. visible: false,
  351. });
  352. const dialog1 = reactive({
  353. title: "工艺选择",
  354. visible: false,
  355. });
  356. const dialog2 = reactive({
  357. title: "车间选择",
  358. visible: false,
  359. });
  360. const dialog3 = reactive({
  361. title: "产线选择",
  362. visible: false,
  363. });
  364. const dialog4 = reactive({
  365. title: "流转卡号",
  366. visible: false,
  367. });
  368. const dialog5 = reactive({
  369. title: "排程确认",
  370. visible: false,
  371. });
  372. const dialog6 = reactive({
  373. title: "检验任务",
  374. visible: false,
  375. });
  376. const apsType = ref(0);
  377. const aps = (id) => {
  378. apsType.value = 0;
  379. formData.workOrderIds = [id];
  380. dialog5.visible = true;
  381. };
  382. const showSeqPage = (workOrderCode) => {
  383. form.value = workOrderCode;
  384. dialog4.visible = true;
  385. };
  386. const showCheckTask = (workOrderCode) => {
  387. form.value = workOrderCode;
  388. dialog6.visible = true;
  389. };
  390. const distribute = (id) => {
  391. ElMessageBox.confirm("当前操作不可逆,确定下发工单吗?")
  392. .then(() => {
  393. loading.value = true;
  394. distributeWorkOrder(id).then((data) => {
  395. loading.value = false;
  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 handleEdit = (row, index) => {
  455. crudRef.value && crudRef.value.rowEdit(row, index);
  456. };
  457. const aps1 = () => {
  458. apsType.value = 1;
  459. formData.workOrderIds = toDeleteIds;
  460. dialog5.visible = true;
  461. };
  462. const dataFormRef = ref(ElForm);
  463. const schedulingTypes = ref([]);
  464. const apsPriority = ref([]);
  465. const formData = reactive({
  466. apsTime: null,
  467. priority: "1",
  468. apsModel: "0",
  469. workOrderId: 0,
  470. });
  471. const rules = reactive({
  472. priority: [{ required: true, message: "请选择优先级", trigger: "blur" }],
  473. apsTime: [{ required: true, message: "排程时间不能为空", trigger: "blur" }],
  474. apsModel: [{ required: true, message: "排程类型不能为空", trigger: "blur" }],
  475. });
  476. const handleSubmit = () => {
  477. dataFormRef.value.validate((isValid) => {
  478. if (isValid) {
  479. apsWorkOrder(formData).then((data) => {
  480. if (data.code === "200") {
  481. ElMessage.success(data.msg);
  482. dialog5.visible = false;
  483. dataList();
  484. } else {
  485. ElMessage.error(data.msg);
  486. }
  487. });
  488. }
  489. });
  490. };
  491. const orderInfo = (value) => {
  492. form.value.orderCode = value.orderCode;
  493. form.value.orderName = value.orderName;
  494. form.value.materialCode = value.materialCode;
  495. form.value.materialName = value.materialName;
  496. form.value.materialModel = value.materialModel;
  497. form.value.priority = value.priority;
  498. form.value.orderType = value.orderType;
  499. form.value.processRouteId = "";
  500. form.value.processRouteCode = "";
  501. form.value.processRouteName = "";
  502. form.value.processRouteVersion = "";
  503. form.value.productLineId = "";
  504. form.value.productLineName = "";
  505. form.value.workshopName = "";
  506. form.value.workshopCode = "";
  507. form.value.workshopName = "";
  508. dialog.visible = false;
  509. };
  510. const lineInfo = (value) => {
  511. form.value.productLineId = value.id;
  512. form.value.productLineName = value.name;
  513. dialog3.visible = false;
  514. };
  515. const workShopInfo = (value) => {
  516. form.value.workshopName = value.id;
  517. form.value.workshopCode = value.code;
  518. form.value.workshopName = value.name;
  519. form.value.productLineId = ""
  520. form.value.productLineName = "";
  521. dialog2.visible = false;
  522. };
  523. const routeInfo = (value) => {
  524. form.value.processRouteId = value.id;
  525. form.value.processRouteCode = value.processRouteCode;
  526. form.value.processRouteName = value.processRouteName;
  527. form.value.processRouteVersion = value.processRouteVersion;
  528. dialog1.visible = false;
  529. };
  530. // 传入一个url,后面不带/
  531. const { form, data, option, search, page, toDeleteIds, Methords, Utils } =
  532. useCrud({
  533. src: "/api/v1/plan/workOrder",
  534. });
  535. const { dataList, createRow, updateRow, deleteRow, searchChange, resetChange } =
  536. Methords; //增删改查
  537. const { selectionChange, multipleDelete } = Methords; //选中和批量删除事件
  538. const { checkBtnPerm, downloadTemplate, exportData } = Utils; //按钮权限等工具
  539. const crudRef = ref(null); //crudRef.value 获取avue-crud对象
  540. // 设置表格列或者其他自定义的option
  541. option.value = Object.assign(option.value, {
  542. delBtn: false,
  543. selection: true,
  544. viewBtn: false,
  545. editBtn: false,
  546. column: [
  547. {
  548. label: "工单编号",
  549. prop: "workOrderCode",
  550. search: true,
  551. display: false,
  552. width: 125,
  553. overHidden: true,
  554. },
  555. {
  556. label: "订单编号",
  557. prop: "orderCode",
  558. search: true,
  559. width: 125,
  560. overHidden: true,
  561. rules: [
  562. {
  563. required: true,
  564. message: "订单编号不能为空",
  565. trigger: "trigger",
  566. },
  567. ],
  568. click: ({ value, column }) => {
  569. if (column.boxType) {
  570. dialog.visible = true;
  571. }
  572. },
  573. },
  574. {
  575. label: "订单名称",
  576. prop: "orderName",
  577. search: true,
  578. disabled: true,
  579. width: 125,
  580. overHidden: true,
  581. },
  582. {
  583. label: "订单类型",
  584. prop: "orderType",
  585. type: "select", //类型为下拉选择框
  586. width: 100,
  587. disabled: true,
  588. overHidden: true,
  589. dicUrl: dictDataUtil.request_url + dictDataUtil.TYPE_CODE.plan_order_type,
  590. props: {
  591. label: "dictLabel",
  592. value: "dictValue",
  593. },
  594. },
  595. {
  596. label: "产品编号",
  597. width: 125,
  598. overHidden: true,
  599. search: true,
  600. disabled: true,
  601. prop: "materialCode",
  602. },
  603. {
  604. label: "产品名称",
  605. width: 125,
  606. overHidden: true,
  607. search: true,
  608. disabled: true,
  609. prop: "materialName",
  610. },
  611. {
  612. label: "产品规格",
  613. width: 125,
  614. search: true,
  615. overHidden: true,
  616. disabled: true,
  617. prop: "materialModel",
  618. },
  619. {
  620. label: "优先级",
  621. prop: "priority",
  622. display: false,
  623. width: "80",
  624. type: "select", //类型为下拉选择框
  625. dicUrl:
  626. dictDataUtil.request_url + dictDataUtil.TYPE_CODE.plan_order_priority,
  627. props: {
  628. label: "dictLabel",
  629. value: "dictValue",
  630. },
  631. },
  632. {
  633. label: "状态",
  634. prop: "workOrderState",
  635. width: "80",
  636. display: false,
  637. type: "select", //类型为下拉选择框
  638. dicUrl:
  639. dictDataUtil.request_url + dictDataUtil.TYPE_CODE.plan_work_order_state,
  640. props: {
  641. label: "dictLabel",
  642. value: "dictValue",
  643. },
  644. },
  645. {
  646. label: "工艺路线",
  647. prop: "processRouteName",
  648. width: 125,
  649. overHidden: true,
  650. rules: [
  651. {
  652. required: true,
  653. message: "工艺路线不能为空",
  654. trigger: "trigger",
  655. },
  656. ],
  657. click: ({ value, column }) => {
  658. if (column.boxType) {
  659. if (!form.value.materialCode) {
  660. ElMessage({
  661. message: "请先选择订单",
  662. type: "warning",
  663. });
  664. return;
  665. }
  666. processRouteType.value = form.value.orderType === "1" ? "ZC" : "FG";
  667. dialog1.visible = true;
  668. }
  669. },
  670. },
  671. {
  672. label: "工艺版本",
  673. width: 100,
  674. overHidden: true,
  675. prop: "processRouteVersion",
  676. display: false,
  677. html: true,
  678. formatter: (val) => {
  679. return (
  680. '<b class="el-tag el-tag--success el-tag--light">' +
  681. val.processRouteVersion +
  682. "</b>"
  683. );
  684. },
  685. },
  686. {
  687. label: "生产车间",
  688. prop: "workshopName",
  689. width: 120,
  690. overHidden: true,
  691. rules: [
  692. {
  693. required: true,
  694. message: "生产车间不能为空",
  695. trigger: "trigger",
  696. },
  697. ],
  698. click: ({ value, column }) => {
  699. if (column.boxType) {
  700. dialog2.visible = true;
  701. }
  702. if (column.boxType == "edit") {
  703. form.value.productLineName = "";
  704. }
  705. },
  706. },
  707. {
  708. label: "产线名称",
  709. prop: "productLineName",
  710. width: 120,
  711. overHidden: true,
  712. rules: [
  713. {
  714. required: true,
  715. message: "产线名称不能为空",
  716. trigger: "trigger",
  717. },
  718. ],
  719. click: ({ value, column }) => {
  720. if (column.boxType) {
  721. if (!form.value.workshopCode) {
  722. ElMessage({
  723. message: "请先选择生产车间",
  724. type: "warning",
  725. });
  726. return;
  727. }
  728. dialog3.visible = true;
  729. }
  730. },
  731. },
  732. {
  733. label: "开始时间",
  734. prop: "planStartWhen",
  735. width: 180,
  736. overHidden: true,
  737. display: false,
  738. },
  739. {
  740. label: "结束时间",
  741. prop: "planStartEnd",
  742. width: 180,
  743. display: false,
  744. overHidden: true,
  745. },
  746. {
  747. label: "工单数量",
  748. prop: "planNum",
  749. width: 85,
  750. type: "number",
  751. min: 1,
  752. max: 99999,
  753. rules: [
  754. {
  755. required: true,
  756. message: "工单数量不能为空",
  757. trigger: "trigger",
  758. },
  759. ],
  760. },
  761. {
  762. label: "完成数量",
  763. width: 85,
  764. display: false,
  765. prop: "completeNum",
  766. },
  767. {
  768. label: "下线数量",
  769. width: 85,
  770. display: false,
  771. prop: "beforeNum",
  772. },
  773. {
  774. label: "报废数量",
  775. width: 85,
  776. display: false,
  777. prop: "scrapNum",
  778. },
  779. {
  780. label: "首检数量",
  781. width: 85,
  782. prop: "firstCheckNum",
  783. value: 0,
  784. },
  785. {
  786. label: "已检数量",
  787. width: 85,
  788. display: false,
  789. prop: "firstCheckAlreadyNum",
  790. },
  791. {
  792. label: "创建时间",
  793. width: 180,
  794. display: false,
  795. prop: "created",
  796. },
  797. {
  798. label: "创建人",
  799. width: 90,
  800. display: false,
  801. prop: "creator",
  802. },
  803. {
  804. label: "数据包地址",
  805. width: 90,
  806. display: false,
  807. prop: "packageUrl",
  808. hide: true,
  809. },
  810. ],
  811. });
  812. onMounted(() => {
  813. // console.log("crudRef", crudRef)
  814. dataList();
  815. queryDictDataByType("order_scheduling_type").then((data) => {
  816. schedulingTypes.value = data.data;
  817. });
  818. queryDictDataByType("aps_priority").then((data) => {
  819. apsPriority.value = data.data;
  820. });
  821. });
  822. </script>