From c2e8526f8f857be5e3a8c6f2b39c5efd424de33e Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期四, 15 十月 2026 11:50:24 +0800
Subject: [PATCH] refactor(auth): 优化认证逻辑和界面组件结构

---
 src/views/mes/pro/workorder-center/index.vue |   59 ++++++++++++++++++-----------------------------------------
 1 files changed, 18 insertions(+), 41 deletions(-)

diff --git a/src/views/mes/pro/workorder-center/index.vue b/src/views/mes/pro/workorder-center/index.vue
index 99ada7d..c8f8f0a 100644
--- a/src/views/mes/pro/workorder-center/index.vue
+++ b/src/views/mes/pro/workorder-center/index.vue
@@ -1,6 +1,6 @@
 <script lang="ts" setup>
 import type { VxeTableGridOptions } from '#/adapter/vxe-table';
-import type { MesProWorkOrderApi, TaskInfo } from '#/api/mes/pro/workorder';
+import type { MesProWorkOrderApi, TaskInfo, WorkOrderProgress } from '#/api/mes/pro/workorder';
 
 import { ref } from 'vue';
 import { useRouter } from 'vue-router';
@@ -16,19 +16,24 @@
   getWorkOrderProgress,
   checkAndAutoFinishWorkOrder,
 } from '#/api/mes/pro/workorder';
-import { previewAutoGenerate, autoGenerateTasks } from '#/api/mes/pro/task';
 
 import ArchiveDetail from '#/views/mes/pd/archive/modules/detail.vue';
 import { useGridColumns, useGridFormSchema, useTaskGridColumns } from './data';
 import QuickFeedbackForm from './modules/quick-feedback.vue';
-import SchedulePreviewModal from './modules/schedule-preview.vue';
+import AutoSchedule from '../task/modules/auto-schedule.vue';
 
 defineOptions({ name: 'WorkorderCenter' });
-const archiveDetailRef = ref<InstanceType<typeof ArchiveDetail>>();
+const archiveVisible = ref(false);
+const archiveProductCode = ref('');
+
+function handleArchive(row: MesProWorkOrderApi.WorkOrder) {
+  archiveProductCode.value = row.productCode ?? '';
+  archiveVisible.value = true;
+}
 
 const router = useRouter();
 
-const progressData = ref<MesProWorkOrderApi.WorkOrderProgress | null>(null);
+const progressData = ref<WorkOrderProgress | null>(null);
 const activeProcessKeys = ref<string[]>([]);
 const expandedRowId = ref<number | null>(null);
 
@@ -38,7 +43,7 @@
 });
 
 const [SchedulePreviewModalWrap, schedulePreviewModalApi] = useVbenModal({
-  connectedComponent: SchedulePreviewModal,
+  connectedComponent: AutoSchedule,
   destroyOnClose: true,
 });
 
@@ -107,27 +112,9 @@
     .open();
 }
 
-/** 涓�閿帓浜ч瑙� */
-async function handleSchedulePreview(row: MesProWorkOrderApi.WorkOrder) {
-  try {
-    const preview = await previewAutoGenerate({ workOrderId: row.id! });
-    schedulePreviewModalApi
-      .setData({ workOrder: row, preview })
-      .open();
-  } catch {
-    message.error('鑾峰彇鎺掍骇棰勮澶辫触');
-  }
-}
-
-/** 鎵ц涓�閿帓浜� */
-async function handleScheduleExecute(row: MesProWorkOrderApi.WorkOrder) {
-  try {
-    const result = await autoGenerateTasks({ workOrderId: row.id! });
-    message.success(`鎺掍骇鎴愬姛锛岀敓鎴� ${result.taskIds?.length || 0} 涓换鍔);
-    handleRefresh();
-  } catch {
-    message.error('鎺掍骇澶辫触');
-  }
+/** 涓庣敓浜ф帓浜у叡鐢ㄦ牎楠屻�侀瑙堝拰鎵ц娴佺▼銆� */
+function handleSchedulePreview(row: MesProWorkOrderApi.WorkOrder) {
+  schedulePreviewModalApi.setData({ workOrderIds: [row.id!] }).open();
 }
 
 const [Grid, gridApi] = useVbenVxeGrid({
@@ -193,26 +180,16 @@
         <TableAction
           :actions="[
             {
-              label: '鎺掍骇棰勮',
-              type: 'link',
-              auth: ['mes:pro-task:create'],
-              ifShow: row.quantityScheduled < row.quantity,
-              onClick: handleSchedulePreview.bind(null, row),
-            },
-            {
               label: '涓�閿帓浜�',
               type: 'link',
               auth: ['mes:pro-task:create'],
-              ifShow: row.quantityScheduled < row.quantity,
-              popConfirm: {
-                title: '纭涓�閿帓浜э紵灏嗘寜鐓у伐鑹鸿矾绾胯嚜鍔ㄧ敓鎴愪换鍔°��',
-                confirm: handleScheduleExecute.bind(null, row),
-              },
+              ifShow: (row.quantityScheduled ?? 0) < (row.quantity ?? 0),
+              onClick: handleSchedulePreview.bind(null, row),
             },
             {
               label: '褰掓。',
               type: 'link',
-              onClick: () => archiveDetailRef.value?.open(row.productCode),
+              onClick: () => handleArchive(row),
             },
           ]"
         />
@@ -316,6 +293,6 @@
         </Collapse.Panel>
       </Collapse>
     </Card>
-    <ArchiveDetail ref="archiveDetailRef" />
+    <ArchiveDetail :visible="archiveVisible" :product-code="archiveProductCode" @update:visible="archiveVisible = $event" />
   </Page>
 </template>

--
Gitblit v1.9.3