index.vue 22 KB

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