From 523116d48374661e10af366e83a099ff85bf8fb1 Mon Sep 17 00:00:00 2001 From: "jlj05024111@163.com" Date: Mon, 29 Sep 2025 11:22:43 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=9B=B4=E6=96=B0=E8=B0=83=E5=BA=A6?= =?UTF-8?q?=E5=B7=A5=E5=85=B7=E6=A0=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../schedule-table/schedule-table.scss | 4 + .../schedule-table/schedule-table.tsx | 45 +- .../schedule-toolbar/schedule-toolbar.scss | 76 ++++ .../schedule-toolbar/schedule-toolbar.tsx | 399 ++++++++++++++++++ .../hooks/use-schedule-table.ts | 57 ++- .../hooks/use-schedule-toolbar.ts | 135 ++++++ 6 files changed, 705 insertions(+), 11 deletions(-) create mode 100644 src/resource-scheduler/components/schedule-toolbar/schedule-toolbar.scss create mode 100644 src/resource-scheduler/components/schedule-toolbar/schedule-toolbar.tsx create mode 100644 src/resource-scheduler/hooks/use-schedule-toolbar.ts diff --git a/src/resource-scheduler/components/schedule-table/schedule-table.scss b/src/resource-scheduler/components/schedule-table/schedule-table.scss index 6d9c582..f45f3d8 100644 --- a/src/resource-scheduler/components/schedule-table/schedule-table.scss +++ b/src/resource-scheduler/components/schedule-table/schedule-table.scss @@ -28,4 +28,8 @@ width: 100%; min-height: 100%; } + + .schedule-toolbar-extra{ + height: 40px; + } } \ No newline at end of file diff --git a/src/resource-scheduler/components/schedule-table/schedule-table.tsx b/src/resource-scheduler/components/schedule-table/schedule-table.tsx index 6b25fb1..3129b83 100644 --- a/src/resource-scheduler/components/schedule-table/schedule-table.tsx +++ b/src/resource-scheduler/components/schedule-table/schedule-table.tsx @@ -1,4 +1,4 @@ -import { computed, defineComponent, PropType, ref } from 'vue'; +import { computed, defineComponent, PropType, ref, useSlots } from 'vue'; import { IResourceViewModel, IScheduleResource, @@ -13,10 +13,14 @@ import { useScheduleTableStyle, useVirtualScroll, } from '../../hooks/use-schedule-table'; +import { ScheduleToolbar } from '../schedule-toolbar/schedule-toolbar'; import './schedule-table.scss'; export const ScheduleTable = defineComponent({ name: 'ScheduleTable', + components: { + ScheduleToolbar, + }, props: { resources: { type: Array as PropType, @@ -102,14 +106,23 @@ export const ScheduleTable = defineComponent({ initStore(props, emit); // 初始化表格 - const { resourceViewModels, taskViewModels } = useInitScheduleTable( - headerCanvas, - bodyCanvas, - coordinateElement, - ); + const { + resourceViewModels, + taskViewModels, + onRefresh, + onSave, + onSaveAs, + onConfigRefresh, + } = useInitScheduleTable(headerCanvas, bodyCanvas, coordinateElement); + + // 插槽 + const slots = useSlots(); // 计算表格样式 - const { headerStyle, bodyStyle } = useScheduleTableStyle(props); + const { headerStyle, bodyStyle } = useScheduleTableStyle( + props, + slots && !!slots.extraToolbar, + ); // 监听视图大小变化 useScheduleTableReSize(props, headerCanvas, bodyCanvas, coordinateElement); @@ -150,11 +163,29 @@ export const ScheduleTable = defineComponent({ visibleTaskViewModels, handleScroll, visibleRange, + onRefresh, + onSave, + onSaveAs, + onConfigRefresh, }; }, render() { return (
+
+ + {this.$slots.extraToolbar ? ( +
+ {this.$slots.extraToolbar()} +
+ ) : null} +
{ + const options = []; + for (let i = 1; i <= _hours; i++) { + options.push({ + value: i, + label: `${i}小时`, + }); + } + return ( + + {options.map(item => { + return ( + + ); + })} + + ); + }; + + // 渲染显示天数列表 + const renderDaysList = (_days: number = 7) => { + const options = []; + for (let i = 1; i <= _days; i++) { + options.push({ + value: i, + label: `${i}天`, + }); + } + return ( +
+
onDaysClickChange(1)} + > +