From 889d8ddf4c13c1b1bdbabd04c2d80b904020151e Mon Sep 17 00:00:00 2001
From: hsy <1029150275@qq.com>
Date: 星期三, 19 八月 2026 12:49:24 +0800
Subject: [PATCH] 生产订单与报工模块改造汇总 (Git Commit 文档) feat(mes-pro): 生产订单及报工模块审批流与批次填报改造 1. 生产订单功能增强 (Work Order)
---
src/views/mes/pro/task/modules/schedule-form.vue | 86 ++++++++++++++++++++++++++----------------
1 files changed, 53 insertions(+), 33 deletions(-)
diff --git a/src/views/mes/pro/task/modules/schedule-form.vue b/src/views/mes/pro/task/modules/schedule-form.vue
index 499f382..c14e0bd 100644
--- a/src/views/mes/pro/task/modules/schedule-form.vue
+++ b/src/views/mes/pro/task/modules/schedule-form.vue
@@ -1,6 +1,6 @@
-锘�<script lang="ts" setup>
-import type { MesProRouteProcessApi } from '#/api/mes/pro/route/process';
+<script lang="ts" setup>
import type { MesProWorkOrderApi } from '#/api/mes/pro/workorder';
+import type { MesProWorkOrderProcessApi } from '#/api/mes/pro/workorder/process';
import { computed, ref } from 'vue';
@@ -11,6 +11,7 @@
import { useVbenForm } from '#/adapter/form';
import { getRouteProcessListByProduct } from '#/api/mes/pro/route/process';
import { finishWorkOrder, getWorkOrder } from '#/api/mes/pro/workorder';
+import { getWorkOrderProcessListByWorkOrderId } from '#/api/mes/pro/workorder/process';
import { useScheduleFormSchema } from '../data';
import TaskList from './task-list.vue';
@@ -18,7 +19,8 @@
const emit = defineEmits(['success']);
const formType = ref<'detail' | 'schedule'>('schedule');
const workOrder = ref<MesProWorkOrderApi.WorkOrder>(); // 褰撳墠璁㈠崟璇︽儏
-const routeProcessList = ref<MesProRouteProcessApi.RouteProcess[]>([]); // 宸ヨ壓璺嚎宸ュ簭鍒楄〃
+/** 鎺掍骇宸ュ簭鍒楄〃 */
+const routeProcessList = ref<MesProWorkOrderProcessApi.WorkOrderProcess[]>([]);
const activeProcessStep = ref(0); // 褰撳墠宸ュ簭姝ラ绱㈠紩
const currentRouteId = ref(0); // 褰撳墠宸ヨ壓璺嚎缂栧彿
@@ -41,15 +43,24 @@
wrapperClass: 'grid-cols-3',
});
-/** 鍔犺浇宸ヨ壓璺嚎宸ュ簭鍒楄〃 */
-async function loadRouteProcesses(productId: number) {
- const processes = await getRouteProcessListByProduct(productId);
- if (!processes || processes.length === 0) {
- message.warning('褰撳墠浜у搧鏈厤缃伐鑹鸿矾绾匡紝璇峰厛鍦ㄥ伐鑹鸿矾绾夸腑缁存姢');
+/** 鍔犺浇宸ュ崟宸ュ簭鍒楄〃锛堜粎浣跨敤宸ュ崟宸ュ簭锛屼笉鍥為��鍒板伐鑹鸿矾绾挎ā鏉匡級 */
+async function loadRouteProcesses(workOrderId: number, productId: number) {
+ const woProcesses = await getWorkOrderProcessListByWorkOrderId(workOrderId);
+ if (!woProcesses || woProcesses.length === 0) {
+ message.warning('褰撳墠璁㈠崟鏈厤缃伐搴忥紝璇峰厛鍦ㄥ伐鍗曚腑缁存姢宸ュ簭淇℃伅');
return;
}
- currentRouteId.value = processes[0]!.routeId ?? 0;
- routeProcessList.value = [...processes].toSorted(
+ // 纭畾宸ヨ壓璺嚎ID锛氬伐鍗曡矾绾� 鈫� 浜у搧璺嚎
+ let tempRouteId = 0;
+ if (workOrder.value?.routeId) {
+ tempRouteId = workOrder.value.routeId;
+ } else {
+ const processes = await getRouteProcessListByProduct(productId);
+ tempRouteId = processes?.[0]?.routeId ?? 0;
+ }
+ currentRouteId.value = tempRouteId;
+
+ routeProcessList.value = [...woProcesses].toSorted(
(a, b) => (a.sort ?? 0) - (b.sort ?? 0),
);
}
@@ -94,7 +105,10 @@
// 璁剧疆鍒� values
await formApi.setValues(workOrder.value);
if (workOrder.value.productId) {
- await loadRouteProcesses(workOrder.value.productId);
+ await loadRouteProcesses(
+ workOrder.value.id!,
+ workOrder.value.productId,
+ );
}
} finally {
modalApi.unlock();
@@ -120,31 +134,37 @@
:title="rp.processName"
/>
</Steps>
- <Card
- v-for="(rp, index) in routeProcessList"
- v-show="activeProcessStep === index"
- :key="rp.processId"
- class="mx-4"
- >
- <TaskList
- :color-code="rp.colorCode"
- :disabled="isReadonly"
- :item-id="workOrder.productId"
- :process-id="rp.processId!"
- :route-id="currentRouteId"
- :work-order-id="workOrder.id!"
- />
- </Card>
+ <template v-for="(rp, index) in routeProcessList" :key="rp.processId">
+ <Card
+ v-if="activeProcessStep === index"
+ class="mx-4"
+ >
+ <TaskList
+ :color-code="rp.colorCode"
+ :disabled="isReadonly"
+ :item-id="rp.outputItemId || workOrder.productId"
+ :process-id="rp.processId!"
+ :route-id="currentRouteId"
+ :work-order-id="workOrder.id!"
+ :work-order-quantity="workOrder.quantity"
+ />
+ </Card>
+ </template>
</template>
<template #prepend-footer>
<div class="flex flex-auto items-center gap-2">
- <Popconfirm
- v-if="formType === 'schedule'"
- title="纭瑕佸畬鎴愯璁㈠崟鍚楋紵瀹屾垚鍚庤鍗曚笅鎵�鏈変换鍔″皢鏍囪涓哄凡瀹屾垚銆�"
- @confirm="handleFinish"
- >
- <Button type="primary">瀹屾垚</Button>
- </Popconfirm>
+ <template v-if="formType === 'schedule'">
+ <Popconfirm
+ v-if="routeProcessList.length > 0"
+ title="纭瑕佸畬鎴愯璁㈠崟鍚楋紵瀹屾垚鍚庤鍗曚笅鎵�鏈変换鍔″皢鏍囪涓哄凡瀹屾垚銆�"
+ @confirm="handleFinish"
+ >
+ <Button type="primary">瀹屾垚</Button>
+ </Popconfirm>
+ <span v-else class="text-gray-400 text-sm">
+ 褰撳墠璁㈠崟鏈厤缃伐搴忥紝璇峰厛鍦ㄥ伐鍗曚腑缁存姢宸ュ簭淇℃伅鍚庡啀瀹屾垚
+ </span>
+ </template>
</div>
</template>
</Modal>
--
Gitblit v1.9.3