From 19ab33b10284cc04606a2490bddb752bbb72e95e Mon Sep 17 00:00:00 2001 From: HenryDu8133 <813367384@qq.com> Date: Sun, 13 Sep 2026 02:04:48 +0800 Subject: [PATCH] =?UTF-8?q?feat(admin):=20=E4=BC=98=E5=8C=96=E5=90=8E?= =?UTF-8?q?=E5=8F=B0=E6=97=A5=E6=9C=9F=E9=80=89=E6=8B=A9=E5=99=A8=E5=92=8C?= =?UTF-8?q?=E6=92=AD=E5=87=BA=E6=97=B6=E6=AE=B5=E4=BA=A4=E4=BA=92=E6=B5=81?= =?UTF-8?q?=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - AdminDatePicker: 新增可展开月历网格 + 6 个快捷日期跳转按钮 - AdminMultiDatePicker: 新增 8 种批量预设 + Shift 范围选择 + 月历网格 - PlayTimeManager: 新增 6 个校园广播快速模板 + 时段复制 + 批量启停 - ScheduleManager: 播出时段从下拉改为标签按钮组 + 增加统计卡片 - RequestTimeManager: datetime-local 拆分为日期+时间双输入 + 6 种快捷预设 --- app/components/Admin/AdminDatePicker.vue | 251 +++++++++--- app/components/Admin/AdminMultiDatePicker.vue | 364 ++++++++++++++---- app/components/Admin/PlayTimeManager.vue | 106 ++++- app/components/Admin/RequestTimeManager.vue | 160 +++++++- app/components/Admin/ScheduleManager.vue | 134 ++++++- 5 files changed, 839 insertions(+), 176 deletions(-) diff --git a/app/components/Admin/AdminDatePicker.vue b/app/components/Admin/AdminDatePicker.vue index b063b06..9017dc5 100644 --- a/app/components/Admin/AdminDatePicker.vue +++ b/app/components/Admin/AdminDatePicker.vue @@ -1,9 +1,10 @@ diff --git a/app/components/Admin/AdminMultiDatePicker.vue b/app/components/Admin/AdminMultiDatePicker.vue index 1f5ca30..2457eac 100644 --- a/app/components/Admin/AdminMultiDatePicker.vue +++ b/app/components/Admin/AdminMultiDatePicker.vue @@ -1,9 +1,10 @@ diff --git a/app/components/Admin/PlayTimeManager.vue b/app/components/Admin/PlayTimeManager.vue index 7315f1d..114a5d8 100644 --- a/app/components/Admin/PlayTimeManager.vue +++ b/app/components/Admin/PlayTimeManager.vue @@ -8,7 +8,7 @@ 定义校园广播的常规播放窗口,用户仅可在这些时间段内进行点歌或查看排期

-
+
@@ -30,6 +30,21 @@ />
+
+ 批量 + + +
+
+
+
{ } } +// 应用快速模板 +const applyPreset = (preset) => { + Object.assign(formData, { + name: preset.name, + startTime: preset.startTime, + endTime: preset.endTime, + description: preset.description, + enabled: true + }) +} + +// 复制时段 +const duplicatePlayTime = (playTime: PlayTime) => { + showAddForm.value = true + editingPlayTime.value = null + Object.assign(formData, { + id: 0, + name: `${playTime.name} (副本)`, + startTime: playTime.startTime || '', + endTime: playTime.endTime || '', + description: playTime.description || '', + enabled: playTime.enabled + }) +} + +// 批量切换启用状态 +const batchToggleAll = async (enable: boolean) => { + if (!isAdmin.value) return + const ids = playTimes.value + .filter((pt) => pt.enabled !== enable) + .map((pt) => pt.id) + if (ids.length === 0) { + showNotification(`所有时段已是${enable ? '启用' : '禁用'}状态`, 'info') + return + } + try { + const authConfig = getAuthConfig() + await Promise.all( + ids.map((id) => + $fetch(`/api/admin/play-times/${id}`, { + method: 'PATCH', + body: { enabled: enable }, + ...authConfig + }) + ) + ) + await fetchPlayTimes() + showNotification(`已${enable ? '启用' : '禁用'} ${ids.length} 个时段`, 'success') + } catch (err: any) { + showNotification(err.message || '批量操作失败', 'error') + } +} + // 取消表单 const cancelForm = () => { showAddForm.value = false diff --git a/app/components/Admin/RequestTimeManager.vue b/app/components/Admin/RequestTimeManager.vue index 762281f..2ead769 100644 --- a/app/components/Admin/RequestTimeManager.vue +++ b/app/components/Admin/RequestTimeManager.vue @@ -291,26 +291,64 @@ >
+
+
+ + 点击可一键套用常见时段 +
+
+ +
+
+
- 开始时间 +
+ + +
+

+ 实际值: {{ formData.startTime || '尚未设置' }} +

- 结束时间 +
+ + +
+

+ 实际值: {{ formData.endTime || '尚未设置' }} +

@@ -502,7 +540,7 @@