fix: 修复任务总览的状态不能自动更新的问题

This commit is contained in:
2025-09-21 15:17:40 +08:00
parent 6897f35d1e
commit de45255feb
3 changed files with 107 additions and 20 deletions

View File

@@ -107,17 +107,41 @@ const toggleScript = (scriptId: string) => {
}
}
// 获取状态颜色
// 获取状态颜色 - 使用更全面的映射和后备逻辑
const getStatusColor = (status: string) => {
const statusColorMap: Record<string, string> = {
// 精确匹配优先
const exactStatusColorMap: Record<string, string> = {
'等待': 'orange',
'排队': 'orange',
'挂起': 'orange',
'运行中': 'blue',
'运行': 'blue',
'进行中': 'blue',
'执行中': 'blue',
'已完成': 'green',
'完成': 'green',
'成功': 'green',
'失败': 'red',
'异常': 'red',
'错误': 'red',
'暂停': 'gray',
'取消': 'default'
'取消': 'default',
'停止': 'default'
}
return statusColorMap[status] || 'default'
// 先尝试精确匹配
if (exactStatusColorMap[status]) {
return exactStatusColorMap[status]
}
// 使用正则表达式进行模糊匹配(作为后备)
if (/成功|完成|已完成/.test(status)) return 'green'
if (/失败|错误|异常/.test(status)) return 'red'
if (/等待|排队|挂起/.test(status)) return 'orange'
if (/进行|执行|运行/.test(status)) return 'blue'
if (/暂停|停止/.test(status)) return 'gray'
return 'default'
}
// 初始化时展开所有脚本

View File

@@ -31,7 +31,9 @@ interface WSMessage {
type: string
id: string
data: {
task_dict: Script[]
task_dict?: Script[]
user_list?: User[]
task_list?: any[]
}
fullMessage?: any
}
@@ -40,23 +42,84 @@ interface WSMessage {
const taskData = ref<Script[]>([])
const taskTreeRef = ref()
// 计算总任务数量
const totalTaskCount = computed(() => {
return taskData.value.reduce((total, script) => {
return total + (script.user_list?.length || 0)
}, 0)
})
// 处理 WebSocket 消息
const handleWSMessage = (message: WSMessage) => {
console.log('TaskOverviewPanel 收到 WebSocket 消息:', message)
if (message.type === 'Update' && message.data?.task_dict) {
console.log('更新任务数据:', message.data.task_dict)
taskData.value = message.data.task_dict
console.log('设置后的 taskData:', taskData.value)
// 更新展开状态
if (taskTreeRef.value) {
taskTreeRef.value.updateExpandedScripts()
if (message.type === 'Update') {
// 处理 task_dict 数据(完整的脚本和用户数据)
if (message.data?.task_dict) {
console.log('更新任务数据 (task_dict):', message.data.task_dict)
taskData.value = message.data.task_dict
console.log('设置后的 taskData:', taskData.value)
// 更新展开状态
if (taskTreeRef.value) {
taskTreeRef.value.updateExpandedScripts()
}
}
// 处理 user_list 数据(只有用户状态更新)
else if (message.data?.user_list && Array.isArray(message.data.user_list)) {
console.log('更新用户列表 (user_list):', message.data.user_list)
// 如果还没有脚本数据,创建一个默认脚本来包含这些用户
if (taskData.value.length === 0) {
taskData.value = [{
script_id: 'default-script',
name: '新 MAA 脚本', // 使用你提供的脚本名称
status: '运行中',
user_list: message.data.user_list
}]
} else {
// 更新现有脚本的用户列表
// 假设所有用户都属于第一个脚本(根据你的使用场景)
if (taskData.value[0]) {
taskData.value[0].user_list = message.data.user_list
// 根据用户状态更新脚本状态
const userStatuses = message.data.user_list.map(u => u.status)
if (userStatuses.includes('异常') || userStatuses.includes('失败')) {
taskData.value[0].status = '异常'
} else if (userStatuses.includes('运行中')) {
taskData.value[0].status = '运行中'
} else if (userStatuses.every(s => s === '已完成')) {
taskData.value[0].status = '已完成'
} else {
taskData.value[0].status = '等待'
}
}
}
console.log('更新后的 taskData:', taskData.value)
// 更新展开状态
if (taskTreeRef.value) {
taskTreeRef.value.updateExpandedScripts()
}
}
// 处理 task_list 数据
else if (message.data?.task_list && Array.isArray(message.data.task_list)) {
console.log('更新任务列表 (task_list):', message.data.task_list)
const convertedData = message.data.task_list.map((task: any) => ({
script_id: task.id || task.script_id || `task_${Date.now()}`,
name: task.name || '未知任务',
status: task.status || '等待',
user_list: task.user_list || []
}))
taskData.value = convertedData
console.log('转换后的 taskData:', taskData.value)
// 更新展开状态
if (taskTreeRef.value) {
taskTreeRef.value.updateExpandedScripts()
}
}
else {
console.log('收到未识别格式的更新数据:', message.data)
}
}
}

View File

@@ -330,10 +330,10 @@ export function useSchedulerLogic() {
// 处理task_dict初始化消息
if (data.task_dict && Array.isArray(data.task_dict)) {
// 初始化任务队列
// 初始化任务队列 - 保持原始状态
const newTaskQueue = data.task_dict.map((item: any) => ({
name: item.name || '未知任务',
status: '等待',
status: item.status || '等待', // 使用实际状态,而不是强制设置为等待
}));
// 初始化用户队列(仅包含运行状态下的用户)