index.vue 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855
  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. loading.value = true;
  396. distributeWorkOrder(id).then((data) => {
  397. loading.value = false;
  398. ElMessage.success(data.msg);
  399. dataList();
  400. });
  401. })
  402. .catch(() => {
  403. // catch error
  404. });
  405. };
  406. const lockOrUnLockWorkOrder = (id, status) => {
  407. let message = status === "4" ? "解冻" : "冻结";
  408. ElMessageBox.confirm("当前操作不可逆,确定" + message + "工单吗?")
  409. .then(() => {
  410. loading.value = true;
  411. lockWorkOrder({ id: id, workOrderState: status }).then((data) => {
  412. loading.value = false;
  413. ElMessage.success(data.msg);
  414. dataList();
  415. });
  416. })
  417. .catch(() => {
  418. // catch error
  419. });
  420. };
  421. const loading = ref(false);
  422. const excelWork = ref({});
  423. const workOrderData = (id) => {
  424. loading.value = true;
  425. excelWork.value.workOrderId = id;
  426. excelWorkOrder(excelWork.value).then((data) => {
  427. if (data.code === "200") {
  428. loading.value = false;
  429. ElMessage.success(data.msg);
  430. dataList();
  431. } else {
  432. loading.value = false;
  433. ElMessage.error(data.msg);
  434. }
  435. });
  436. };
  437. const revoke = (id) => {
  438. ElMessageBox.confirm("当前操作不可逆,确定撤销工单吗?")
  439. .then(() => {
  440. loading.value = true;
  441. revokeWorkOrder(id).then((data) => {
  442. if (data.code === "200") {
  443. loading.value = false;
  444. ElMessage.success(data.msg);
  445. dataList();
  446. } else {
  447. loading.value = false;
  448. ElMessage.error(data.msg);
  449. }
  450. });
  451. })
  452. .catch(() => {
  453. // catch error
  454. });
  455. };
  456. const allData = ref([]);
  457. const getAllData = async () => {
  458. const { data, code } = await getWorkshopData({
  459. pageNo: 1,
  460. pageSize: 999999,
  461. });
  462. allData.value = data.records;
  463. };
  464. const setWorkShop = () => {
  465. allData.value.forEach((item) => {
  466. if (item.name == workshopName.value) {
  467. workShopInfo(item);
  468. }
  469. });
  470. };
  471. const handleEdit = (row, index) => {
  472. workshopName.value = row.workshopName;
  473. crudRef.value && crudRef.value.rowEdit(row, index);
  474. setWorkShop();
  475. };
  476. const aps1 = () => {
  477. apsType.value = 1;
  478. formData.workOrderIds = toDeleteIds;
  479. dialog5.visible = true;
  480. };
  481. const dataFormRef = ref(ElForm);
  482. const schedulingTypes = ref([]);
  483. const apsPriority = ref([]);
  484. const formData = reactive({
  485. apsTime: null,
  486. priority: "1",
  487. apsModel: "0",
  488. workOrderId: 0,
  489. });
  490. const rules = reactive({
  491. priority: [{ required: true, message: "请选择优先级", trigger: "blur" }],
  492. apsTime: [{ required: true, message: "排程时间不能为空", trigger: "blur" }],
  493. apsModel: [{ required: true, message: "排程类型不能为空", trigger: "blur" }],
  494. });
  495. const handleSubmit = () => {
  496. dataFormRef.value.validate((isValid) => {
  497. if (isValid) {
  498. apsWorkOrder(formData).then((data) => {
  499. if (data.code === "200") {
  500. ElMessage.success(data.msg);
  501. dialog5.visible = false;
  502. dataList();
  503. } else {
  504. ElMessage.error(data.msg);
  505. }
  506. });
  507. }
  508. });
  509. };
  510. const orderInfo = (value) => {
  511. form.value.orderCode = value.orderCode;
  512. form.value.orderName = value.orderName;
  513. form.value.materialCode = value.materialCode;
  514. form.value.materialName = value.materialName;
  515. form.value.materialModel = value.materialModel;
  516. form.value.priority = value.priority;
  517. form.value.orderType = value.orderType;
  518. form.value.processRouteId = "";
  519. form.value.processRouteCode = "";
  520. form.value.processRouteName = "";
  521. form.value.processRouteVersion = "";
  522. form.value.productLineId = "";
  523. form.value.productLineName = "";
  524. form.value.workshopName = "";
  525. form.value.workshopCode = "";
  526. form.value.workshopName = "";
  527. dialog.visible = false;
  528. };
  529. const lineInfo = (value) => {
  530. form.value.productLineId = value.id;
  531. form.value.productLineName = value.name;
  532. dialog3.visible = false;
  533. };
  534. const workShopInfo = (value) => {
  535. form.value.workshopName = value.id;
  536. form.value.workshopCode = value.code;
  537. form.value.workshopName = value.name;
  538. form.value.productLineId = "";
  539. form.value.productLineName = "";
  540. dialog2.visible = false;
  541. };
  542. const routeInfo = (value) => {
  543. form.value.processRouteId = value.id;
  544. form.value.processRouteCode = value.processRouteCode;
  545. form.value.processRouteName = value.processRouteName;
  546. form.value.processRouteVersion = value.processRouteVersion;
  547. dialog1.visible = false;
  548. };
  549. // 传入一个url,后面不带/
  550. const { form, data, option, search, page, toDeleteIds, Methords, Utils } =
  551. useCrud({
  552. src: "/api/v1/plan/workOrder",
  553. });
  554. const { dataList, createRow, updateRow, deleteRow, searchChange, resetChange } =
  555. Methords; //增删改查
  556. const { selectionChange, multipleDelete } = Methords; //选中和批量删除事件
  557. const { checkBtnPerm, downloadTemplate, exportData } = Utils; //按钮权限等工具
  558. const crudRef = ref(null); //crudRef.value 获取avue-crud对象
  559. // 设置表格列或者其他自定义的option
  560. option.value = Object.assign(option.value, {
  561. delBtn: false,
  562. selection: true,
  563. viewBtn: false,
  564. editBtn: false,
  565. column: [
  566. {
  567. label: "工单编号",
  568. prop: "workOrderCode",
  569. search: true,
  570. display: false,
  571. width: 125,
  572. overHidden: true,
  573. },
  574. {
  575. label: "订单编号",
  576. prop: "orderCode",
  577. search: true,
  578. width: 125,
  579. overHidden: true,
  580. rules: [
  581. {
  582. required: true,
  583. message: "订单编号不能为空",
  584. trigger: "trigger",
  585. },
  586. ],
  587. click: ({ value, column }) => {
  588. if (column.boxType) {
  589. dialog.visible = true;
  590. }
  591. },
  592. },
  593. {
  594. label: "订单名称",
  595. prop: "orderName",
  596. search: true,
  597. disabled: true,
  598. width: 125,
  599. overHidden: true,
  600. },
  601. {
  602. label: "订单类型",
  603. prop: "orderType",
  604. type: "select", //类型为下拉选择框
  605. width: 100,
  606. disabled: true,
  607. overHidden: true,
  608. dicUrl: dictDataUtil.request_url + dictDataUtil.TYPE_CODE.plan_order_type,
  609. props: {
  610. label: "dictLabel",
  611. value: "dictValue",
  612. },
  613. },
  614. {
  615. label: "产品编号",
  616. width: 125,
  617. overHidden: true,
  618. search: true,
  619. disabled: true,
  620. prop: "materialCode",
  621. },
  622. {
  623. label: "产品名称",
  624. width: 125,
  625. overHidden: true,
  626. search: true,
  627. disabled: true,
  628. prop: "materialName",
  629. },
  630. {
  631. label: "产品规格",
  632. width: 125,
  633. search: true,
  634. overHidden: true,
  635. disabled: true,
  636. prop: "materialModel",
  637. },
  638. {
  639. label: "优先级",
  640. prop: "priority",
  641. display: false,
  642. width: "80",
  643. type: "select", //类型为下拉选择框
  644. dicUrl:
  645. dictDataUtil.request_url + dictDataUtil.TYPE_CODE.plan_order_priority,
  646. props: {
  647. label: "dictLabel",
  648. value: "dictValue",
  649. },
  650. },
  651. {
  652. label: "状态",
  653. prop: "workOrderState",
  654. width: "80",
  655. display: false,
  656. type: "select", //类型为下拉选择框
  657. dicUrl:
  658. dictDataUtil.request_url + dictDataUtil.TYPE_CODE.plan_work_order_state,
  659. props: {
  660. label: "dictLabel",
  661. value: "dictValue",
  662. },
  663. },
  664. {
  665. label: "工艺路线",
  666. prop: "processRouteName",
  667. width: 125,
  668. overHidden: true,
  669. rules: [
  670. {
  671. required: true,
  672. message: "工艺路线不能为空",
  673. trigger: "trigger",
  674. },
  675. ],
  676. click: ({ value, column }) => {
  677. if (column.boxType) {
  678. if (!form.value.materialCode) {
  679. ElMessage({
  680. message: "请先选择订单",
  681. type: "warning",
  682. });
  683. return;
  684. }
  685. processRouteType.value = form.value.orderType === "2" ? "FG" : "ZC";
  686. dialog1.visible = true;
  687. }
  688. },
  689. },
  690. {
  691. label: "工艺版本",
  692. width: 100,
  693. overHidden: true,
  694. prop: "processRouteVersion",
  695. display: false,
  696. html: true,
  697. formatter: (val) => {
  698. return (
  699. '<b class="el-tag el-tag--success el-tag--light">' +
  700. val.processRouteVersion +
  701. "</b>"
  702. );
  703. },
  704. },
  705. {
  706. label: "生产车间",
  707. prop: "workshopName",
  708. width: 120,
  709. overHidden: true,
  710. rules: [
  711. {
  712. required: true,
  713. message: "生产车间不能为空",
  714. trigger: "trigger",
  715. },
  716. ],
  717. click: ({ value, column }) => {
  718. if (column.boxType) {
  719. dialog2.visible = true;
  720. }
  721. if (column.boxType == "edit") {
  722. form.value.productLineName = "";
  723. }
  724. },
  725. },
  726. {
  727. label: "产线名称",
  728. prop: "productLineName",
  729. width: 120,
  730. overHidden: true,
  731. rules: [
  732. {
  733. required: true,
  734. message: "产线名称不能为空",
  735. trigger: "trigger",
  736. },
  737. ],
  738. click: ({ value, column }) => {
  739. if (column.boxType) {
  740. if (!form.value.workshopName) {
  741. ElMessage({
  742. message: "请先选择生产车间",
  743. type: "warning",
  744. });
  745. return;
  746. }
  747. dialog3.visible = true;
  748. }
  749. },
  750. },
  751. {
  752. label: "开始时间",
  753. prop: "planStartWhen",
  754. width: 180,
  755. overHidden: true,
  756. display: false,
  757. },
  758. {
  759. label: "结束时间",
  760. prop: "planStartEnd",
  761. width: 180,
  762. display: false,
  763. overHidden: true,
  764. },
  765. {
  766. label: "工单数量",
  767. prop: "planNum",
  768. width: 85,
  769. type: "number",
  770. min: 1,
  771. max: 99999,
  772. rules: [
  773. {
  774. required: true,
  775. message: "工单数量不能为空",
  776. trigger: "trigger",
  777. },
  778. ],
  779. },
  780. {
  781. label: "完成数量",
  782. width: 85,
  783. display: false,
  784. prop: "completeNum",
  785. },
  786. {
  787. label: "下线数量",
  788. width: 85,
  789. display: false,
  790. prop: "beforeNum",
  791. },
  792. {
  793. label: "报废数量",
  794. width: 85,
  795. display: false,
  796. prop: "scrapNum",
  797. },
  798. {
  799. label: "首检数量",
  800. width: 85,
  801. prop: "firstCheckNum",
  802. value: 0,
  803. },
  804. {
  805. label: "已检数量",
  806. width: 85,
  807. display: false,
  808. prop: "firstCheckAlreadyNum",
  809. },
  810. {
  811. label: "创建时间",
  812. width: 180,
  813. display: false,
  814. prop: "created",
  815. },
  816. {
  817. label: "创建人",
  818. width: 90,
  819. display: false,
  820. prop: "creator",
  821. },
  822. {
  823. label: "数据包地址",
  824. width: 90,
  825. display: false,
  826. prop: "packageUrl",
  827. hide: true,
  828. },
  829. ],
  830. });
  831. onMounted(() => {
  832. // console.log("crudRef", crudRef)
  833. getAllData();
  834. dataList();
  835. queryDictDataByType("order_scheduling_type").then((data) => {
  836. schedulingTypes.value = data.data;
  837. });
  838. queryDictDataByType("aps_priority").then((data) => {
  839. apsPriority.value = data.data;
  840. });
  841. });
  842. </script>