首页工作流与历史会话:修复执行后表单清空/默认展开,工作流最多展示9个+更多入口,历史会话分页加载更多
- 修复:执行时把用户填的表单值写回消息对象,会话认领重建后能恢复,不再清空;执行完成/历史回显卡片默认收起,可手动展开改参 - 功能:首页工作流最多展示 9 个(用户优先、模板补足),超出显示「更多」入口跳转工作流管理页 - 功能:历史会话分页「加载更多」,逐页追加去重 - 重构:工作流执行信号统一走提交(移除 retry/re-edit/cancel),失败卡片重跑/重编辑并入提交路径 - 其他:删除消息时终止进行中的轮;Markdown 渲染缓存设上限 Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -29,15 +29,6 @@
|
||||
<!-- 底部工具栏 -->
|
||||
<div class="input-toolbar">
|
||||
<div class="toolbar-left">
|
||||
<button class="tool-icon-btn" title="上传文件" @click="handleAttachment">
|
||||
<el-icon><Paperclip /></el-icon>
|
||||
</button>
|
||||
|
||||
<!-- 技能暂已禁用 -->
|
||||
<button class="tool-icon-btn" title="技能暂不可用" disabled>
|
||||
<el-icon><MagicStick /></el-icon>
|
||||
<span class="tool-label">技能</span>
|
||||
</button>
|
||||
|
||||
<!-- 切换会话模型入口 -->
|
||||
<button class="tool-icon-btn" :class="{ active: !!currentModelName }" title="切换会话模型" @click="emit('select-model')">
|
||||
@@ -75,6 +66,16 @@
|
||||
{{ wf.name }}
|
||||
<span v-if="wf.isTemplate" class="pill-tag">模板</span>
|
||||
</button>
|
||||
<!-- 工作流数量超出展示上限时提供「更多」入口:跳转工作流管理页查看/选择全部 -->
|
||||
<button
|
||||
v-if="commonWorkflows.length > MAX_WORKFLOWS"
|
||||
class="shortcut-pill shortcut-more"
|
||||
title="查看全部工作流"
|
||||
@click="handleOpenWorkflowManage"
|
||||
>
|
||||
<el-icon><More /></el-icon>
|
||||
更多
|
||||
</button>
|
||||
</div>
|
||||
</Transition>
|
||||
</div>
|
||||
@@ -82,8 +83,8 @@
|
||||
|
||||
<script setup lang="ts">
|
||||
import { ref, computed, onMounted } from 'vue';
|
||||
import { Top, MagicStick, Promotion, Close, Paperclip, VideoPause, Cpu } from '@element-plus/icons-vue';
|
||||
import { ElMessage } from 'element-plus';
|
||||
import { useRouter } from 'vue-router';
|
||||
import { Top, Promotion, Close, VideoPause, Cpu, More } from '@element-plus/icons-vue';
|
||||
import { getWorkflowList } from '/@/api/settings/creation';
|
||||
|
||||
interface Props {
|
||||
@@ -124,6 +125,14 @@ const props = withDefaults(defineProps<Props>(), {
|
||||
isWorkflowSession: false,
|
||||
});
|
||||
const emit = defineEmits<Emits>();
|
||||
const router = useRouter();
|
||||
// 首页展示工作流上限:用户工作流优先,不足用系统模板补足,最多 9 个
|
||||
const MAX_WORKFLOWS = 9;
|
||||
|
||||
// 「更多」入口:工作流数量超出展示上限时跳转工作流管理页查看/选择全部
|
||||
const handleOpenWorkflowManage = () => {
|
||||
router.push('/settings/workflow');
|
||||
};
|
||||
const message = ref('');
|
||||
const isFocused = ref(false);
|
||||
const selectedWorkflowId = ref<string | null>(null);
|
||||
@@ -131,9 +140,9 @@ const commonWorkflows = ref<Workflow[]>([]);
|
||||
// 取消工作流前的选择:父组件确认「继续编辑」时回滚,避免 InputBar 先置空、父侧保留草稿造成状态脱钩
|
||||
const previousSelectedWorkflowId = ref<string | null>(null);
|
||||
|
||||
// 工作流胶囊始终展示全部工作流:历史工作流会话回显预选上次执行的工作流,
|
||||
// 但仍允许自由切换/取消(不锁定为单个工作流)
|
||||
const visibleWorkflows = computed(() => commonWorkflows.value);
|
||||
// 工作流胶囊最多展示 MAX_WORKFLOWS 个:commonWorkflows 用户工作流在前、模板在后,
|
||||
// 截断前 MAX_WORKFLOWS 个即「用户优先、不足模板补足」;完整列表仍保留供父组件匹配
|
||||
const visibleWorkflows = computed(() => commonWorkflows.value.slice(0, MAX_WORKFLOWS));
|
||||
|
||||
// 输入框整体锁定:正处于生成/工作流执行中(执行中禁止切换工作流)
|
||||
const lockAll = computed(() => props.isWorkflowRunning || props.generating);
|
||||
@@ -163,6 +172,7 @@ const fetchWorkflows = async () => {
|
||||
const res = await getWorkflowList();
|
||||
const userList = res.data?.listFlowUserRes?.list || [];
|
||||
const tplList = res.data?.listFlowTemplateRes?.list || [];
|
||||
// commonWorkflows 保留完整列表:父组件按 id 匹配工作流名称/预选历史会话,不能被展示截断影响
|
||||
const workflows = [
|
||||
...userList.map((w) => ({ ...w, isTemplate: false })),
|
||||
...tplList.map((w) => ({ ...w, isTemplate: true })),
|
||||
@@ -198,10 +208,6 @@ const handleSend = () => {
|
||||
// 不清除工作流选择,保持表单可见
|
||||
};
|
||||
|
||||
const handleAttachment = () => {
|
||||
ElMessage.info('附件上传功能开发中...');
|
||||
};
|
||||
|
||||
const toggleWorkflow = (id: string) => {
|
||||
if (lockAll.value) return;
|
||||
const item = commonWorkflows.value.find((w) => w.id === id);
|
||||
@@ -511,6 +517,19 @@ const onCapsuleAfterLeave = (el: Element) => {
|
||||
}
|
||||
}
|
||||
|
||||
/* 「更多」入口:与普通胶囊区分,虚线边框 + 更轻的视觉重量,提示可进入管理页查看全部 */
|
||||
.shortcut-more {
|
||||
border-style: dashed;
|
||||
color: #94a3b8;
|
||||
|
||||
&:hover {
|
||||
border-style: dashed;
|
||||
border-color: #93c5fd;
|
||||
color: #2563eb;
|
||||
background: rgba(239, 246, 255, 0.9);
|
||||
}
|
||||
}
|
||||
|
||||
.pill-tag {
|
||||
font-size: 10px;
|
||||
line-height: 1;
|
||||
|
||||
Reference in New Issue
Block a user