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/task/index.vue |   54 ++++++++++++++++++++++++++++++++++++++++++++++--------
 1 files changed, 46 insertions(+), 8 deletions(-)

diff --git a/src/views/mes/pro/task/index.vue b/src/views/mes/pro/task/index.vue
index ba6ff48..9621fdc 100644
--- a/src/views/mes/pro/task/index.vue
+++ b/src/views/mes/pro/task/index.vue
@@ -7,12 +7,11 @@
 
 import { Page, useVbenModal } from '@vben/common-ui';
 import {
-  MesProWorkOrderProductionStatusEnum,
   MesProWorkOrderStatusEnum,
   MesProWorkOrderTypeEnum,
 } from '@vben/constants';
 
-import { Button, Card, Progress, Tabs } from 'ant-design-vue';
+import { Button, Card, Progress, Tabs, message } from 'ant-design-vue';
 
 import { ACTION_ICON, TableAction, useVbenVxeGrid } from '#/adapter/vxe-table';
 import { getGanttTaskList } from '#/api/mes/pro/task';
@@ -22,6 +21,7 @@
 import { GanttChart } from './components';
 import { useGridColumns, useGridFormSchema } from './data';
 import ScheduleForm from './modules/schedule-form.vue';
+import AutoSchedule from './modules/auto-schedule.vue';
 
 const router = useRouter();
 const ganttTasks = ref<any[]>([]); // 鐢樼壒鍥鹃瑙堟暟鎹�
@@ -35,9 +35,31 @@
   destroyOnClose: true,
 });
 
+const [AutoScheduleModal, autoScheduleModalApi] = useVbenModal({
+  connectedComponent: AutoSchedule,
+  destroyOnClose: true,
+});
+
+function canAutoSchedule(row: MesProWorkOrderApi.WorkOrder) {
+  return row.status === MesProWorkOrderStatusEnum.CONFIRMED
+    && row.type === MesProWorkOrderTypeEnum.SELF
+    && !isCompletedWorkOrder(row)
+    && (row.quantity ?? 0) > 0
+    && (row.quantityScheduled ?? 0) < (row.quantity ?? 0);
+}
+
+function handleAutoSchedule(row?: MesProWorkOrderApi.WorkOrder) {
+  const rows: MesProWorkOrderApi.WorkOrder[] = row ? [row] : gridApi.grid.getCheckboxRecords();
+  if (!rows.length) return message.warning('璇峰厛鍕鹃�夊緟鎺掍骇宸ュ崟');
+  if (rows.length > 30) return message.warning('涓�娆℃渶澶氶�夋嫨30涓伐鍗曪紝璇峰垎鎵规帓浜�');
+  if (rows.some((order) => !canAutoSchedule(order))) return message.warning('璇烽�夋嫨宸茬‘璁や笖浠嶉渶鎺掍骇鐨勮嚜琛岀敓浜у伐鍗�');
+  autoScheduleModalApi.setData({ workOrderIds: rows.map((order) => order.id!) }).open();
+}
+
 
 /** 鍒锋柊琛ㄦ牸 */
 function handleRefresh() {
+  gridApi.grid.clearCheckboxRow();
   gridApi.query();
   loadGanttPreview();
 }
@@ -72,12 +94,9 @@
   router.push({ name: 'MesProTaskGanttEdit' });
 }
 
-/** 鍒ゆ柇璁㈠崟鏄惁涓衡�滃凡瀹屾垚绫诲瀷鈥濓細璁㈠崟鐘舵��=宸插畬鎴� 鎴� 鐢熶骇鐘舵��=鐢熶骇瀹屾垚 */
+/** 鍒ゆ柇璁㈠崟鏄惁涓衡�滃凡瀹屾垚绫诲瀷鈥濓細璁㈠崟鐘舵��=宸插畬鎴� */
 function isCompletedWorkOrder(row: MesProWorkOrderApi.WorkOrder): boolean {
-  return (
-    row.status === MesProWorkOrderStatusEnum.FINISHED ||
-    row.productionStatus === MesProWorkOrderProductionStatusEnum.FINISHED
-  );
+  return row.status === MesProWorkOrderStatusEnum.FINISHED;
 }
 
 /**
@@ -103,6 +122,11 @@
   gridOptions: {
     columns: useGridColumns(),
     keepSource: true,
+    checkboxConfig: {
+      checkStrictly: true,
+      showHeader: true,
+      checkMethod: ({ row }: { row: MesProWorkOrderApi.WorkOrder }) => canAutoSchedule(row),
+    },
     proxyConfig: {
       ajax: {
         query: async ({ page }, formValues) => {
@@ -154,6 +178,7 @@
 <template>
   <Page auto-content-height>
     <ScheduleModal @success="handleRefresh" />
+    <AutoScheduleModal @success="handleRefresh" />
     <!-- 鎺掍骇鐢樼壒鍥鹃瑙� -->
     <Card title="鎺掍骇鐢樼壒鍥�" class="mb-4">
       <template #extra>
@@ -177,8 +202,14 @@
         <TableAction
           :actions="[
             {
-              label: '鐢樼壒鍥剧紪杈�',
+              label: '涓�閿帓浜�',
               type: 'primary',
+              icon: ACTION_ICON.ADD,
+              auth: ['mes:pro-task:create'],
+              onClick: () => handleAutoSchedule(),
+            },
+            {
+              label: '鐢樼壒鍥剧紪杈�',
               icon: ACTION_ICON.EDIT,
               onClick: handleGanttEdit,
             },
@@ -200,6 +231,13 @@
         <TableAction
           :actions="[
             {
+              label: '涓�閿帓浜�',
+              type: 'link',
+              auth: ['mes:pro-task:create'],
+              ifShow: canAutoSchedule(row),
+              onClick: () => handleAutoSchedule(row),
+            },
+            {
               label: '鎺掍骇缁存姢',
               type: 'link',
               auth: ['mes:pro-task:create'],

--
Gitblit v1.9.3