From 2f182519a578a5e23d49001703dadb69a547e868 Mon Sep 17 00:00:00 2001 From: AoXuan Date: Fri, 15 Aug 2025 21:40:39 +0800 Subject: [PATCH] =?UTF-8?q?refactor(queue):=20=E9=87=8D=E6=9E=84=E9=98=9F?= =?UTF-8?q?=E5=88=97=E6=95=B0=E6=8D=AE=E8=8E=B7=E5=8F=96=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 使用专门的定时项和队列项 API 获取数据,提高数据获取效率和准确性 - 优化数据处理逻辑,移除不必要的中间步骤 - 提高代码可读性和可维护性 --- .../src/components/queue/QueueItemManager.vue | 2 +- frontend/src/views/Queue.vue | 152 ++++++++---------- 2 files changed, 66 insertions(+), 88 deletions(-) diff --git a/frontend/src/components/queue/QueueItemManager.vue b/frontend/src/components/queue/QueueItemManager.vue index 45fbfa4..739ab20 100644 --- a/frontend/src/components/queue/QueueItemManager.vue +++ b/frontend/src/components/queue/QueueItemManager.vue @@ -182,7 +182,7 @@ const loadOptions = async () => { const addQueueItem = async () => { editingQueueItem.value = null Object.assign(form, { - script: '', + script: null, }) // 确保在打开弹窗时加载脚本选项 diff --git a/frontend/src/views/Queue.vue b/frontend/src/views/Queue.vue index 52245b7..d8dd59e 100644 --- a/frontend/src/views/Queue.vue +++ b/frontend/src/views/Queue.vue @@ -252,65 +252,54 @@ const refreshTimeSets = async () => { } try { - // 重新从API获取最新的队列数据 - const response = await Service.getQueuesApiQueueGetPost({}) + // 使用专门的定时项API获取数据 + const response = await Service.getTimeSetApiQueueTimeGetPost({ + queueId: activeQueueId.value, + }) + if (response.code !== 200) { - console.error('获取队列数据失败:', response) + console.error('获取定时项数据失败:', response) currentTimeSets.value = [] return } - // 更新缓存的队列数据 - currentQueueData.value = response.data + const timeSets: any[] = [] - // 从最新的队列数据中获取定时项信息 - if (response.data && response.data[activeQueueId.value]) { - const queueData = response.data[activeQueueId.value] - const timeSets: any[] = [] + // 处理定时项数据 + if (response.index && Array.isArray(response.index)) { + response.index.forEach((item: any) => { + try { + const timeSetId = item.uid + if (!timeSetId || !response.data || !response.data[timeSetId]) return - // 检查是否有TimeSet配置 - if (queueData?.SubConfigsInfo?.TimeSet) { - const timeSetConfig = queueData.SubConfigsInfo.TimeSet + const timeSetData = response.data[timeSetId] + if (timeSetData?.Info) { + // 解析时间字符串 "HH:mm" + const originalTimeString = timeSetData.Info.Set || timeSetData.Info.Time || '00:00' + const [hours = 0, minutes = 0] = originalTimeString.split(':').map(Number) - // 遍历instances数组获取所有定时项ID - if (Array.isArray(timeSetConfig.instances)) { - timeSetConfig.instances.forEach((instance: any) => { - try { - const timeSetId = instance?.uid - if (!timeSetId) return + // 创建标准化的时间字符串 + const validHours = Math.max(0, Math.min(23, hours)) + const validMinutes = Math.max(0, Math.min(59, minutes)) + const timeString = `${validHours.toString().padStart(2, '0')}:${validMinutes.toString().padStart(2, '0')}` - const timeSetData = timeSetConfig[timeSetId] - if (timeSetData?.Info) { - // 解析时间字符串 "HH:mm" - 修复字段名 - const originalTimeString = timeSetData.Info.Set || timeSetData.Info.Time || '00:00' - const [hours = 0, minutes = 0] = originalTimeString.split(':').map(Number) - - // 创建标准化的时间字符串 - const validHours = Math.max(0, Math.min(23, hours)) - const validMinutes = Math.max(0, Math.min(59, minutes)) - const timeString = `${validHours.toString().padStart(2, '0')}:${validMinutes.toString().padStart(2, '0')}` - - timeSets.push({ - id: timeSetId, - time: timeString, - enabled: Boolean(timeSetData.Info.Enabled), - description: timeSetData.Info.Description || '', - }) - } - } catch (itemError) { - console.warn('解析单个定时项失败:', itemError, instance) - } - }) + timeSets.push({ + id: timeSetId, + time: timeString, + enabled: Boolean(timeSetData.Info.Enabled), + description: timeSetData.Info.Description || '', + }) + } + } catch (itemError) { + console.warn('解析单个定时项失败:', itemError, item) } - } - - // 使用nextTick确保数据更新不会导致渲染问题 - await nextTick() - currentTimeSets.value = [...timeSets] - console.log('刷新后的定时项数据:', timeSets) // 调试日志 - } else { - currentTimeSets.value = [] + }) } + + // 使用nextTick确保数据更新不会导致渲染问题 + await nextTick() + currentTimeSets.value = [...timeSets] + console.log('刷新后的定时项数据:', timeSets) // 调试日志 } catch (error) { console.error('刷新定时项列表失败:', error) currentTimeSets.value = [] @@ -326,54 +315,43 @@ const refreshQueueItems = async () => { } try { - // 重新从API获取最新的队列数据 - const response = await Service.getQueuesApiQueueGetPost({}) + // 使用专门的队列项API获取数据 + const response = await Service.getItemApiQueueItemGetPost({ + queueId: activeQueueId.value, + }) + if (response.code !== 200) { - console.error('获取队列数据失败:', response) + console.error('获取队列项数据失败:', response) currentQueueItems.value = [] return } - // 更新缓存的队列数据 - currentQueueData.value = response.data + const queueItems: any[] = [] - // 从最新的队列数据中获取队列项信息 - if (response.data && response.data[activeQueueId.value]) { - const queueData = response.data[activeQueueId.value] - const queueItems: any[] = [] + // 处理队列项数据 + if (response.index && Array.isArray(response.index)) { + response.index.forEach((item: any) => { + try { + const queueItemId = item.uid + if (!queueItemId || !response.data || !response.data[queueItemId]) return - // 检查是否有QueueItem配置 - if (queueData?.SubConfigsInfo?.QueueItem) { - const queueItemConfig = queueData.SubConfigsInfo.QueueItem - - // 遍历instances数组获取所有队列项ID - if (Array.isArray(queueItemConfig.instances)) { - queueItemConfig.instances.forEach((instance: any) => { - try { - const queueItemId = instance?.uid - if (!queueItemId) return - - const queueItemData = queueItemConfig[queueItemId] - if (queueItemData?.Info) { - queueItems.push({ - id: queueItemId, - script: queueItemData.Info.ScriptId || '', - }) - } - } catch (itemError) { - console.warn('解析单个队列项失败:', itemError, instance) - } - }) + const queueItemData = response.data[queueItemId] + if (queueItemData?.Info) { + queueItems.push({ + id: queueItemId, + script: queueItemData.Info.ScriptId || '', + }) + } + } catch (itemError) { + console.warn('解析单个队列项失败:', itemError, item) } - } - - // 使用nextTick确保数据更新不会导致渲染问题 - await nextTick() - currentQueueItems.value = [...queueItems] - console.log('刷新后的队列项数据:', queueItems) // 调试日志 - } else { - currentQueueItems.value = [] + }) } + + // 使用nextTick确保数据更新不会导致渲染问题 + await nextTick() + currentQueueItems.value = [...queueItems] + console.log('刷新后的队列项数据:', queueItems) // 调试日志 } catch (error) { console.error('刷新队列项列表失败:', error) currentQueueItems.value = []