fix: 调度中心界面小范围优化

This commit is contained in:
DLmaster361
2025-09-21 01:08:33 +08:00
parent 5eab1b0986
commit 1f85360c92
2 changed files with 32 additions and 41 deletions

View File

@@ -31,22 +31,17 @@
<div class="control-spacer"></div> <div class="control-spacer"></div>
<a-space size="middle"> <a-space size="middle">
<a-button <a-button
@click="onStart" @click="onAction"
type="primary" :type="status === '运行' ? 'default' : 'primary'"
:disabled="disabled || !localSelectedTaskId || !localSelectedMode" :danger="status === '运行'"
:disabled="status === '运行' ? false : (!localSelectedTaskId || !localSelectedMode || disabled)"
size="large" size="large"
> >
<template #icon><PlayCircleOutlined /></template> <template #icon>
开始执行 <StopOutlined v-if="status === '运行'" />
</a-button> <PlayCircleOutlined v-else />
<a-button </template>
@click="onStop" {{ status === '运行' ? '停止任务' : '开始执行' }}
:disabled="status !== '运行'"
danger
size="large"
>
<template #icon><StopOutlined /></template>
停止任务
</a-button> </a-button>
</a-space> </a-space>
</div> </div>
@@ -55,7 +50,7 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { computed, h, ref, watch } from 'vue' import { computed, ref, watch } from 'vue'
import { PlayCircleOutlined, StopOutlined } from '@ant-design/icons-vue' import { PlayCircleOutlined, StopOutlined } from '@ant-design/icons-vue'
import { TaskCreateIn } from '@/api/models/TaskCreateIn' import { TaskCreateIn } from '@/api/models/TaskCreateIn'
import type { ComboBoxItem } from '@/api/models/ComboBoxItem' import type { ComboBoxItem } from '@/api/models/ComboBoxItem'
@@ -124,12 +119,13 @@ const onModeChange = (value: TaskCreateIn.mode) => {
emit('update:selectedMode', value) emit('update:selectedMode', value)
} }
const onStart = () => { // 合并的按钮事件处理
emit('start') const onAction = () => {
} if (props.status === '运行') {
const onStop = () => {
emit('stop') emit('stop')
} else {
emit('start')
}
} }
// 任务选项过滤 // 任务选项过滤

View File

@@ -242,7 +242,8 @@ export function useSchedulerLogic() {
// 不再取消订阅保持WebSocket连接以便接收结束信号 // 不再取消订阅保持WebSocket连接以便接收结束信号
// 只需发送停止请求等待后端通过WebSocket发送结束信号 // 只需发送停止请求等待后端通过WebSocket发送结束信号
message.success('已发送停止任务请求,等待任务完成确认') // 移除了提示消息"已发送停止任务请求,等待任务完成确认"
// 因为任务状态变更必须由明确外部信号驱动,不应该使用提示消息来表示等待状态
saveTabsToStorage(schedulerTabs.value) saveTabsToStorage(schedulerTabs.value)
} catch (error) { } catch (error) {
console.error('停止任务失败:', error) console.error('停止任务失败:', error)
@@ -273,13 +274,6 @@ export function useSchedulerLogic() {
return return
} }
// 处理通过Info类型包装的Signal消息
if (type === 'Info' && data && data.title === 'Signal' && data.data) {
console.log('[Scheduler] 处理通过Info包装的Signal消息:', data.data)
handleSignalMessage(tab, data.data)
return
}
switch (type) { switch (type) {
case 'Update': case 'Update':
console.log('[Scheduler] 处理Update消息:', data) console.log('[Scheduler] 处理Update消息:', data)
@@ -318,26 +312,27 @@ export function useSchedulerLogic() {
} }
const handleUpdateMessage = (tab: SchedulerTab, data: any) => { const handleUpdateMessage = (tab: SchedulerTab, data: any) => {
// 处理task_dict初始化消息 // 直接使用所有状态信息,不进行额外初始化操作
// 按照层级结构处理任务和用户队列
if (data.task_dict && Array.isArray(data.task_dict)) { if (data.task_dict && Array.isArray(data.task_dict)) {
// 初始化任务队列 // 处理任务队列
const newTaskQueue = data.task_dict.map((item: any) => ({ const newTaskQueue = data.task_dict.map((item: any) => ({
name: item.name || '未知任务', name: item.name || '未知任务',
status: '等待', status: item.status || '未知',
})); }));
// 初始化用户队列(仅包含运行状态下的用户) // 处理用户队列,按照层级结构处理
// 用户是任务的子级,需要保留任务与用户之间的关联关系
const newUserQueue: QueueItem[] = []; const newUserQueue: QueueItem[] = [];
data.task_dict.forEach((taskItem: any) => { data.task_dict.forEach((taskItem: any) => {
if (taskItem.user_list && Array.isArray(taskItem.user_list)) { if (taskItem.user_list && Array.isArray(taskItem.user_list)) {
taskItem.user_list.forEach((user: any) => { taskItem.user_list.forEach((user: any) => {
// 只有在用户状态为运行时才添加到用户队列中 // 用户作为任务的子级,使用"任务名-用户名"格式保持关联关系
if (user.status === '运行') { // 这样TaskOverviewPanel组件可以通过前缀匹配正确构建树形结构
newUserQueue.push({ newUserQueue.push({
name: `${taskItem.name}-${user.name}`, name: `${taskItem.name}-${user.name}`,
status: user.status, status: user.status || '未知',
}); });
}
}); });
} }
}); });
@@ -426,7 +421,7 @@ export function useSchedulerLogic() {
tab.websocketId = null tab.websocketId = null
} }
notification.success({ message: '任务完成', description: data.Accomplish }) message.success('任务完成')
checkAllTasksCompleted() checkAllTasksCompleted()
saveTabsToStorage(schedulerTabs.value) saveTabsToStorage(schedulerTabs.value)