fix: 调度中心界面小范围优化
This commit is contained in:
@@ -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')
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 任务选项过滤
|
// 任务选项过滤
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user