From 11cd789f38d6f1fe1e1c078c3a4b1f34e1de039d Mon Sep 17 00:00:00 2001 From: MSuMshk <2039814060@qq.com> Date: Fri, 20 Feb 2026 09:03:23 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=91=98=E5=B7=A5=E6=8E=92=E7=8F=AD?= =?UTF-8?q?=E6=8E=A5=E5=85=A5=E7=9C=9F=E5=AE=9E=E6=95=B0=E6=8D=AE=E5=B9=B6?= =?UTF-8?q?=E7=A7=BB=E9=99=A4=E5=85=9C=E5=BA=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/web-antd/src/api/store-staff/index.ts | 4 +- .../staff/components/ShiftTemplateCard.vue | 11 +- .../staff/components/StaffScheduleDrawer.vue | 16 ++- .../staff/components/WeekScheduleDrawer.vue | 55 +++++---- .../staff/components/WeeklyScheduleBoard.vue | 67 +++++++---- .../staff/composables/staff-page/constants.ts | 14 +-- .../composables/staff-page/data-actions.ts | 28 ++++- .../staff/composables/staff-page/helpers.ts | 110 +++++++----------- .../staff-page/schedule-actions.ts | 92 ++++++++++----- .../staff/composables/useStoreStaffPage.ts | 56 +++++---- apps/web-antd/src/views/store/staff/index.vue | 10 +- .../src/views/store/staff/styles/drawer.less | 6 + .../views/store/staff/styles/schedule.less | 15 +++ .../views/store/staff/styles/template.less | 10 ++ 14 files changed, 298 insertions(+), 196 deletions(-) diff --git a/apps/web-antd/src/api/store-staff/index.ts b/apps/web-antd/src/api/store-staff/index.ts index c62dbed..87ff278 100644 --- a/apps/web-antd/src/api/store-staff/index.ts +++ b/apps/web-antd/src/api/store-staff/index.ts @@ -58,9 +58,11 @@ export interface StaffScheduleDto { /** 门店排班聚合 */ export interface StoreStaffScheduleDto { + isScheduleConfigured: boolean; + isTemplateConfigured: boolean; schedules: StaffScheduleDto[]; storeId: string; - templates: StoreShiftTemplatesDto; + templates: null | StoreShiftTemplatesDto; weekStartDate: string; } diff --git a/apps/web-antd/src/views/store/staff/components/ShiftTemplateCard.vue b/apps/web-antd/src/views/store/staff/components/ShiftTemplateCard.vue index 0cd3bff..71fa753 100644 --- a/apps/web-antd/src/views/store/staff/components/ShiftTemplateCard.vue +++ b/apps/web-antd/src/views/store/staff/components/ShiftTemplateCard.vue @@ -13,6 +13,7 @@ import dayjs from 'dayjs'; interface Props { isSaving: boolean; + isTemplateConfigured: boolean; onSetTemplateTime: (payload: { field: 'endTime' | 'startTime'; shiftType: Exclude; @@ -71,6 +72,10 @@ function handleTemplateTimeChange(payload: { 班次模板 +
+ 当前门店尚未配置班次模板,请先设置并保存模板,再进行员工排班。 +
+
- 调整模板后,个人排班和周排班中的同类型班次会同步到新的时间段。 + {{ + props.isTemplateConfigured + ? '调整模板后,个人排班和周排班中的同类型班次会同步到新的时间段。' + : '模板保存成功后,员工列表中的“排班”和“编辑排班”会自动可用。' + }}
diff --git a/apps/web-antd/src/views/store/staff/components/StaffScheduleDrawer.vue b/apps/web-antd/src/views/store/staff/components/StaffScheduleDrawer.vue index f6999da..4a5cb0f 100644 --- a/apps/web-antd/src/views/store/staff/components/StaffScheduleDrawer.vue +++ b/apps/web-antd/src/views/store/staff/components/StaffScheduleDrawer.vue @@ -40,6 +40,12 @@ function getDayShift(dayOfWeek: number) { return props.form.shifts.find((item) => item.dayOfWeek === dayOfWeek); } +/** 判断某日是否展示时间编辑。 */ +function isTimeHidden(dayOfWeek: number) { + const shift = getDayShift(dayOfWeek); + return !shift || shift.shiftType === 'off'; +} + /** 转换时间组件值。 */ function toPickerValue(time: string) { if (!time) return undefined; @@ -65,7 +71,7 @@ function toTimeText(value: Dayjs | null | string | undefined) { @update:open="(value) => emit('update:open', value)" >
- 点击班次胶囊可自动填充时间,选择“休息”后该日不排班。 + 点击班次胶囊可自动填充时间;显示“未配置”表示该日尚未设置排班。
@@ -94,14 +100,19 @@ function toTimeText(value: Dayjs | null | string | undefined) {
+ + 未配置 + +
string; getShiftLabel: (shiftType: ShiftType) => string; getShiftTimeText: (shift: StaffDayShiftDto) => string; + isTemplateConfigured: boolean; isSaving: boolean; legendItems: ShiftLegendItem[]; open: boolean; @@ -33,19 +34,30 @@ const emit = defineEmits<{ (event: 'update:open', value: boolean): void; }>(); -/** 获取某行某天班次,缺失时兜底为休息。 */ +/** 获取某行某天班次,缺失时返回未配置。 */ function resolveDayShift( row: WeekEditorRow, dayOfWeek: number, -): StaffDayShiftDto { - return ( - row.shifts.find((item) => item.dayOfWeek === dayOfWeek) ?? { - dayOfWeek, - shiftType: 'off', - startTime: '', - endTime: '', - } - ); +): StaffDayShiftDto | undefined { + return row.shifts.find((item) => item.dayOfWeek === dayOfWeek); +} + +/** 获取单元格样式。 */ +function resolveCellClass(shift: StaffDayShiftDto | undefined) { + if (!shift) return 'shift-unconfigured'; + return props.getShiftClass(shift.shiftType); +} + +/** 获取单元格班次文案。 */ +function resolveCellLabel(shift: StaffDayShiftDto | undefined) { + if (!shift) return '未配置'; + return props.getShiftLabel(shift.shiftType); +} + +/** 获取单元格时间文案。 */ +function resolveCellTimeText(shift: StaffDayShiftDto | undefined) { + if (!shift) return '未配置'; + return props.getShiftTimeText(shift); } @@ -74,7 +86,11 @@ function resolveDayShift(
-
+
+ +
+ +
@@ -105,11 +121,7 @@ function resolveDayShift( @@ -141,6 +147,7 @@ function resolveDayShift(