fix: 贴片模板显示逻辑改为按节点实例patchLayout开关判断
- currentWorkflowHasPatchLayout 改为检查节点实例的 patchLayout 字段 - InputBar 工作流对接真实接口,禁用技能选择 - home/index.vue 移除 mock 数据,工作空间对接真实接口 - 工作空间增加预览/下载/删除功能
This commit is contained in:
@@ -2,17 +2,12 @@
|
||||
<div class="input-shell">
|
||||
<div class="input-card" :class="{ 'is-focused': isFocused }">
|
||||
<!-- 已选中状态标签栏 -->
|
||||
<div v-if="selectedWorkflowId !== null || selectedSkill !== 'default'" class="selected-tags">
|
||||
<div v-if="selectedWorkflowId !== null" class="selected-tag workflow-tag">
|
||||
<div v-if="selectedWorkflowId !== null" class="selected-tags">
|
||||
<div class="selected-tag workflow-tag">
|
||||
<el-icon><Promotion /></el-icon>
|
||||
<span>{{ commonWorkflows.find((w) => w.id === selectedWorkflowId)?.name }}</span>
|
||||
<el-icon class="tag-close" @click="selectedWorkflowId = null"><Close /></el-icon>
|
||||
</div>
|
||||
<div v-if="selectedSkill !== 'default'" class="selected-tag skill-tag">
|
||||
<el-icon><MagicStick /></el-icon>
|
||||
<span>{{ skillLabels[selectedSkill] }}</span>
|
||||
<el-icon class="tag-close" @click="selectedSkill = 'default'"><Close /></el-icon>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 文本输入区 -->
|
||||
@@ -31,28 +26,15 @@
|
||||
<!-- 底部工具栏 -->
|
||||
<div class="input-toolbar">
|
||||
<div class="toolbar-left">
|
||||
<!-- 上传附件 -->
|
||||
<button class="tool-icon-btn" title="上传文件" @click="handleAttachment">
|
||||
<el-icon><Paperclip /></el-icon>
|
||||
</button>
|
||||
|
||||
<!-- 选择技能 -->
|
||||
<el-dropdown trigger="click" placement="top-start" @command="handleSkillSelect">
|
||||
<button class="tool-icon-btn" :class="{ active: selectedSkill !== 'default' }" title="选择技能">
|
||||
<el-icon><MagicStick /></el-icon>
|
||||
<span class="tool-label">技能</span>
|
||||
</button>
|
||||
<template #dropdown>
|
||||
<el-dropdown-menu>
|
||||
<el-dropdown-item command="default">
|
||||
<el-icon><CircleClose /></el-icon>不使用技能
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item divided command="code-review">代码审查</el-dropdown-item>
|
||||
<el-dropdown-item command="refactor">代码重构</el-dropdown-item>
|
||||
<el-dropdown-item command="writing">内容写作</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</template>
|
||||
</el-dropdown>
|
||||
<!-- 技能暂已禁用 -->
|
||||
<button class="tool-icon-btn" title="技能暂不可用" disabled>
|
||||
<el-icon><MagicStick /></el-icon>
|
||||
<span class="tool-label">技能</span>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div class="toolbar-right">
|
||||
@@ -81,9 +63,10 @@
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { ref } from 'vue';
|
||||
import { Top, MagicStick, Promotion, Close, CircleClose, Paperclip } from '@element-plus/icons-vue';
|
||||
import { ref, onMounted } from 'vue';
|
||||
import { Top, MagicStick, Promotion, Close, Paperclip } from '@element-plus/icons-vue';
|
||||
import { ElMessage } from 'element-plus';
|
||||
import { getWorkflowList } from '/@/api/settings/creation';
|
||||
|
||||
interface Emits {
|
||||
(e: 'send', message: string): void;
|
||||
@@ -98,36 +81,30 @@ interface Workflow {
|
||||
const emit = defineEmits<Emits>();
|
||||
const message = ref('');
|
||||
const isFocused = ref(false);
|
||||
const selectedSkill = ref('default');
|
||||
const selectedWorkflowId = ref<number | null>(null);
|
||||
const commonWorkflows = ref<Workflow[]>([]);
|
||||
|
||||
const skillLabels: Record<string, string> = {
|
||||
default: '选择技能',
|
||||
'code-review': '代码审查',
|
||||
refactor: '代码重构',
|
||||
writing: '内容写作',
|
||||
const fetchWorkflows = async () => {
|
||||
try {
|
||||
const res = await getWorkflowList();
|
||||
const workflows = res.data?.listFlowUserRes?.list || [];
|
||||
commonWorkflows.value = workflows.map((w) => ({
|
||||
id: Number(w.id),
|
||||
name: w.flowName || '未命名',
|
||||
prefix: '[工作流] ' + (w.flowName || '') + ':\n',
|
||||
}));
|
||||
} catch {
|
||||
commonWorkflows.value = [];
|
||||
}
|
||||
};
|
||||
|
||||
const skillPrefixes: Record<string, string> = {
|
||||
default: '',
|
||||
'code-review': '[技能:代码审查] 请帮我审查下面这段代码,找出潜在问题并给出改进建议:\n',
|
||||
refactor: '[技能:代码重构] 请帮我重构下面这段代码,提升可读性和可维护性:\n',
|
||||
writing: '[技能:内容写作] 请根据下面的需求帮我创作内容:\n',
|
||||
};
|
||||
|
||||
const commonWorkflows: Workflow[] = [
|
||||
{ id: 1, name: '审查', prefix: '[工作流:审查] 完成后请自动生成单元测试:\n' },
|
||||
{ id: 2, name: '文档再编码', prefix: '[工作流:文档再编码] 请先编写接口文档,再实现代码:\n' },
|
||||
{ id: 3, name: '代码重构', prefix: '[工作流:代码重构] 请帮我重构这段代码:\n' },
|
||||
{ id: 4, name: '需求分析', prefix: '[工作流:需求分析] 请帮我分析这个需求并拆解任务:\n' },
|
||||
];
|
||||
|
||||
const handleSend = () => {
|
||||
const msg = message.value.trim();
|
||||
if (!msg) return;
|
||||
const skillPrefix = skillPrefixes[selectedSkill.value] || '';
|
||||
const workflowPrefix = selectedWorkflowId.value !== null ? commonWorkflows.find((w) => w.id === selectedWorkflowId.value)?.prefix || '' : '';
|
||||
const finalMessage = (skillPrefix + workflowPrefix + msg).trim();
|
||||
const workflowPrefix = selectedWorkflowId.value !== null
|
||||
? commonWorkflows.value.find((w) => w.id === selectedWorkflowId.value)?.prefix || ''
|
||||
: '';
|
||||
const finalMessage = (workflowPrefix + msg).trim();
|
||||
emit('send', finalMessage);
|
||||
message.value = '';
|
||||
selectedWorkflowId.value = null;
|
||||
@@ -137,13 +114,13 @@ const handleAttachment = () => {
|
||||
ElMessage.info('附件上传功能开发中...');
|
||||
};
|
||||
|
||||
const handleSkillSelect = (key: string | number | object | null) => {
|
||||
selectedSkill.value = String(key ?? 'default');
|
||||
};
|
||||
|
||||
const toggleWorkflow = (id: number) => {
|
||||
selectedWorkflowId.value = selectedWorkflowId.value === id ? null : id;
|
||||
};
|
||||
|
||||
onMounted(() => {
|
||||
fetchWorkflows();
|
||||
});
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
@@ -196,12 +173,6 @@ const toggleWorkflow = (id: number) => {
|
||||
border: 1px solid #bfdbfe;
|
||||
}
|
||||
|
||||
&.skill-tag {
|
||||
background: #f5f3ff;
|
||||
color: #7c3aed;
|
||||
border: 1px solid #ddd6fe;
|
||||
}
|
||||
|
||||
.tag-close {
|
||||
margin-left: 2px;
|
||||
cursor: pointer;
|
||||
|
||||
Reference in New Issue
Block a user