From cb9cd49627b65a4c0e137e08063271a8cefe1826 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期四, 23 七月 2026 17:48:49 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev_pro2.0' into dev_pro2.0

---
 src/views/mes/pro/task/modules/schedule-form.vue |   64 ++++++++++++++++++++------------
 1 files changed, 40 insertions(+), 24 deletions(-)

diff --git a/src/views/mes/pro/task/modules/schedule-form.vue b/src/views/mes/pro/task/modules/schedule-form.vue
index 2993b59..e51d7b7 100644
--- a/src/views/mes/pro/task/modules/schedule-form.vue
+++ b/src/views/mes/pro/task/modules/schedule-form.vue
@@ -1,30 +1,32 @@
-<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';
 
-import { useVbenModal } from '..\..\..\..\..\packages\effects\common-ui\src';
+import { useVbenModal } from '@vben/common-ui';
 
 import { Button, Card, message, Popconfirm, Steps } from 'ant-design-vue';
 
 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';
 
 const emit = defineEmits(['success']);
 const formType = ref<'detail' | 'schedule'>('schedule');
-const workOrder = ref<MesProWorkOrderApi.WorkOrder>(); // 褰撳墠宸ュ崟璇︽儏
-const routeProcessList = ref<MesProRouteProcessApi.RouteProcess[]>([]); // 宸ヨ壓璺嚎宸ュ簭鍒楄〃
+const workOrder = ref<MesProWorkOrderApi.WorkOrder>(); // 褰撳墠璁㈠崟璇︽儏
+/** 鎺掍骇宸ュ簭鍒楄〃 */
+const routeProcessList = ref<MesProWorkOrderProcessApi.WorkOrderProcess[]>([]);
 const activeProcessStep = ref(0); // 褰撳墠宸ュ簭姝ラ绱㈠紩
 const currentRouteId = ref(0); // 褰撳墠宸ヨ壓璺嚎缂栧彿
 
 const isReadonly = computed(() => formType.value === 'detail'); // 璇︽儏鎬佸彧璇�
 const getTitle = computed(() =>
-  formType.value === 'detail' ? '宸ュ崟璇︽儏' : '鐢熶骇鎺掍骇',
+  formType.value === 'detail' ? '璁㈠崟璇︽儏' : '鐢熶骇鎺掍骇',
 );
 
 const [Form, formApi] = useVbenForm({
@@ -41,20 +43,26 @@
   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(
+  routeProcessList.value = [...woProcesses].toSorted(
     (a, b) => (a.sort ?? 0) - (b.sort ?? 0),
   );
+  // 纭畾宸ヨ壓璺嚎ID锛氬伐鍗曡矾绾� 鈫� 浜у搧璺嚎
+  if (workOrder.value?.routeId) {
+    currentRouteId.value = workOrder.value.routeId;
+  } else {
+    const processes = await getRouteProcessListByProduct(productId);
+    currentRouteId.value = processes?.[0]?.routeId ?? 0;
+  }
 }
 
-/** 瀹屾垚宸ュ崟 */
+/** 瀹屾垚璁㈠崟 */
 async function handleFinish() {
   if (!workOrder.value?.id) {
     return;
@@ -62,7 +70,7 @@
   modalApi.lock();
   try {
     await finishWorkOrder(workOrder.value.id);
-    message.success('宸ュ崟宸插畬鎴�');
+    message.success('璁㈠崟宸插畬鎴�');
     await modalApi.close();
     emit('success');
   } finally {
@@ -94,7 +102,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();
@@ -129,7 +140,7 @@
         <TaskList
           :color-code="rp.colorCode"
           :disabled="isReadonly"
-          :item-id="workOrder.productId"
+          :item-id="rp.outputItemId || workOrder.productId"
           :process-id="rp.processId!"
           :route-id="currentRouteId"
           :work-order-id="workOrder.id!"
@@ -138,13 +149,18 @@
     </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