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