2026-05-20 21:39:12 +08:00

520 lines
23 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

[
{
"id": "FE-100",
"category": "agent",
"priority": 0,
"description": "Agent 对话页面 - SSE流式对话/会话管理/Skill进度展示",
"steps": [
"左侧会话列表:新建/切换/删除会话",
"消息区域:用户/助手气泡正确显示",
"助手消息支持Markdown渲染",
"SSE流式输出实时显示",
"Skill执行状态指示器正常工作",
"停止生成功能正常",
"空状态显示欢迎页和快捷操作"
],
"passes": true
},
{
"id": "FE-101",
"category": "agent",
"priority": 0,
"description": "Skill 管理页面 - 查看/启停/详情",
"steps": [
"Skill列表卡片网格正确显示",
"启用/禁用Skill功能正常",
"Skill详情抽屉展示完整信息",
"搜索过滤功能正常"
],
"passes": true
},
{
"id": "FE-102",
"category": "agent",
"priority": 0,
"description": "Skill 提示词自定义 - 详情抽屉中查看/编辑/保存/恢复默认提示词",
"steps": [
"打开Skill详情时加载并回显当前提示词列表",
"每个提示词折叠面板可展开编辑textarea",
"保存提示词调用后端API持久化到数据库",
"恢复默认按钮还原为硬编码的默认提示词",
"保存后刷新详情验证持久化成功"
],
"passes": true
},
{
"id": "FE-110",
"category": "video-scratch",
"priority": 0,
"description": "Skill 配置面板增强 - 详情抽屉增加参数配置tab",
"steps": [
"Skill详情抽屉增加 tabs: 基本信息 / 参数配置 / 提示词",
"视频抽帧Skill: fps滑块(1-10)、图片质量滑块(50-100)",
"旧伤检测Skill: 模型选择下拉框、batchSize输入、batchDelay输入",
"损伤定位Skill: groundingWindow输入模型固定豆包不可选",
"最佳帧筛选Skill: 模型选择、topN输入",
"报告生成Skill: 模型选择",
"配置修改后调用后端API持久化",
"不同Skill根据name动态展示不同的配置项"
],
"passes": true
},
{
"id": "FE-111",
"category": "video-scratch",
"priority": 0,
"description": "检测结果展示页 - 解析报告JSON渲染结果页面",
"steps": [
"新增路由 /agent/detection-result",
"统计卡片区: 车况评分/损伤数/标注帧数/分析帧数",
"视频信息卡片: 时长/分辨率/FPS/抽取帧数",
"整体评估区: AI生成的评估文字",
"损伤汇总表: 位置/类型/严重程度/时间/描述",
"损伤详情: 最佳帧原图+标注图对比展示",
"处理建议列表",
"支持查看历史检测记录"
],
"passes": true
},
{
"id": "FE-001",
"category": "infrastructure",
"priority": 1,
"description": "项目基础框架搭建Cool Admin Vue 3",
"steps": [
"安装依赖 pnpm i",
"启动开发服务器 pnpm dev",
"验证 http://localhost:9001 可访问",
"验证代理到后端 /dev/ → http://127.0.0.1:8003 正常"
],
"passes": true
},
{
"id": "FE-002",
"category": "infrastructure",
"priority": 1,
"description": "登录和权限系统UI",
"steps": [
"打开登录页面正常显示",
"输入用户名密码登录成功",
"登录后跳转到主页",
"侧边栏菜单根据权限动态显示",
"登出功能正常"
],
"passes": true
},
{
"id": "FE-003",
"category": "infrastructure",
"priority": 1,
"description": "系统管理页面(用户/角色/菜单/部门)",
"steps": [
"用户管理页面:列表/新增/编辑/删除",
"角色管理页面:列表/新增/编辑/删除/权限分配",
"菜单管理页面:树形列表/新增/编辑/删除",
"部门管理页面:树形列表/新增/编辑/删除"
],
"passes": true
},
{
"id": "FE-004",
"category": "infrastructure",
"priority": 1,
"description": "流程编排UI框架Vue Flow拖拽画布",
"steps": [
"流程列表页面显示所有流程",
"新建流程进入编辑界面",
"画布可拖拽缩放",
"左侧节点面板可拖入节点",
"节点可连线",
"小地图和控制器可用"
],
"passes": true
},
{
"id": "FE-005",
"category": "functional",
"priority": 2,
"description": "流程节点配置面板 - 点击节点弹出配置表单",
"steps": [
"点击开始节点显示输入参数配置",
"点击LLM节点显示模型选择和Prompt配置",
"点击代码节点显示Monaco代码编辑器",
"点击判断节点显示条件表达式配置",
"点击结束节点显示输出配置",
"配置修改后自动保存到流程数据"
],
"passes": false
},
{
"id": "FE-006",
"category": "functional",
"priority": 2,
"description": "流程保存和发布功能",
"steps": [
"点击保存按钮保存流程草稿",
"保存成功显示提示",
"点击发布按钮(飞机图标)发布流程",
"发布成功更新流程状态",
"流程列表显示发布状态"
],
"passes": false
},
{
"id": "FE-007",
"category": "functional",
"priority": 2,
"description": "流程调试面板 - 在编辑界面测试运行流程",
"steps": [
"点击调试按钮打开调试面板",
"输入测试参数",
"点击运行发送调试请求",
"实时显示节点执行状态",
"显示LLM流式输出",
"显示最终结果"
],
"passes": false
},
{
"id": "FE-008",
"category": "functional",
"priority": 2,
"description": "流程执行日志页面",
"steps": [
"查看流程执行历史列表",
"按流程名称/时间筛选",
"查看单次执行详情",
"查看各节点执行结果",
"查看执行耗时"
],
"passes": false
},
{
"id": "FE-009",
"category": "functional",
"priority": 2,
"description": "知识库管理页面",
"steps": [
"知识库类型列表/新增/编辑/删除",
"数据源管理(上传文件/添加链接)",
"知识条目列表/搜索/启用禁用",
"知识库配置(向量模型/分块参数)"
],
"passes": false
},
{
"id": "FE-010",
"category": "functional",
"priority": 3,
"description": "知识图谱可视化 - 3D力导向图展示实体关系",
"steps": [
"3D图谱渲染节点和关系",
"节点可点击查看详情",
"支持缩放/旋转/平移",
"新增/编辑/删除节点和关系"
],
"passes": false
},
{
"id": "FE-011",
"category": "functional",
"priority": 3,
"description": "流程自动布局 - ELK算法自动排列节点",
"steps": [
"点击自动布局按钮",
"节点按ELK算法自动排列",
"连线不交叉",
"布局动画过渡"
],
"passes": false
},
{
"id": "FE-012",
"category": "functional",
"priority": 3,
"description": "流程导入导出",
"steps": [
"导出流程为JSON文件",
"从JSON文件导入流程",
"导入后画布正确还原",
"验证节点和连线完整性"
],
"passes": false
},
{
"id": "FE-013",
"category": "functional",
"priority": 3,
"description": "字典管理页面",
"steps": [
"字典类型列表/新增/编辑/删除",
"字典条目列表/新增/编辑/删除",
"前端组件可通过key获取字典数据"
],
"passes": false
},
{
"id": "FE-014",
"category": "functional",
"priority": 3,
"description": "定时任务管理页面",
"steps": [
"任务列表显示状态和Cron",
"新增/编辑任务",
"暂停/恢复任务",
"查看任务执行日志"
],
"passes": false
},
{
"id": "FE-015",
"category": "functional",
"priority": 3,
"description": "文件空间管理页面",
"steps": [
"文件列表显示",
"文件上传",
"文件预览/下载",
"文件删除"
],
"passes": false
},
{
"id": "FE-016",
"category": "functional",
"priority": 3,
"description": "插件管理页面",
"steps": [
"插件列表显示",
"上传新插件",
"启用/禁用插件",
"插件配置"
],
"passes": false
},
{
"id": "FE-017",
"category": "integration",
"priority": 4,
"description": "TYCM审核定制 - 审核仪表盘页面",
"steps": [
"显示审核统计数据(今日/本周/本月)",
"审核通过率图表",
"审核耗时分布",
"待审核队列"
],
"passes": false
},
{
"id": "FE-018",
"category": "integration",
"priority": 4,
"description": "TYCM审核定制 - 审核结果列表页面",
"steps": [
"审核结果列表(通过/拒绝/待审核)",
"按时间/类型/结果筛选",
"查看单条审核详情",
"查看审核流程执行轨迹"
],
"passes": false
},
{
"id": "FE-019",
"category": "infrastructure",
"priority": 5,
"description": "国际化支持",
"steps": [
"中文/英文切换",
"所有页面文本国际化",
"Element Plus组件国际化"
],
"passes": false
},
{
"id": "FE-020",
"category": "infrastructure",
"priority": 5,
"description": "暗黑模式主题切换",
"steps": [
"亮色/暗色模式切换",
"流程编辑器适配暗色模式",
"所有页面样式适配"
],
"passes": false
},
{
"id": "FE-130",
"category": "agent-evolution",
"priority": 0,
"description": "Skill分类UI - skillType标签展示 + 分类筛选",
"steps": [
"【类型定义】修改 src/modules/agent/types/index.d.ts: SkillMeta接口增加 skillType?: 'compute' | 'llm' 字段(与后端BE-130同步)",
"【卡片标签】修改 views/skills.vue: 每个Skill卡片的分类tag旁边增加skillType标签: compute显示'纯计算'绿色tag(#67C23A), llm显示'需要LLM'蓝色tag(#409EFF); 使用el-tag组件: <el-tag :type=\"skill.skillType==='compute'?'success':'primary'\" size='small'>{{skill.skillType==='compute'?'纯计算':'需要LLM'}}</el-tag>",
"【筛选功能】在skills.vue顶部搜索框旁边增加skillType筛选: 使用el-radio-group或el-segmented: 全部/纯计算(compute)/需要LLM(llm); 新增 ref filterType = 'all'; 修改filteredSkills计算属性: 先按filterType过滤再按searchText搜索",
"【skill-detail增强】修改 components/skill-detail.vue: 基本信息tab的el-descriptions中增加一行展示skillType(同样用彩色tag)",
"【验证】卡片上正确显示skillType标签颜色; 筛选功能正确过滤; 详情抽屉显示skillType; 当后端未返回skillType时(旧数据)不崩溃",
"【难度评估】低难度。纯前端UI改动只涉及skills.vue和skill-detail.vue两个文件。数据来源已有: GET /admin/agent/skill/metas 返回的数据中会包含skillType字段(由BE-130后端提供)"
],
"passes": true
},
{
"id": "FE-131",
"category": "agent-evolution",
"priority": 0,
"description": "Agent管理列表页 - 卡片网格展示所有Agent + 状态管理 + 操作按钮",
"steps": [
"【类型定义】修改 types/index.d.ts: 新增 AgentInfo 接口 { id:number, name:string, label:string, description:string, icon?:string, systemPrompt?:string, skills:string[], modelConfig?:{apiKey:string,apiUrl:string,modelId:string}, config?:any, status:number(0=草稿1=已发布), createTime?:string, updateTime?:string }",
"【页面创建】创建 views/agent-list.vue: 参考skills.vue的卡片网格布局; 顶部: 搜索框+新建Agent按钮(el-button type=primary); 卡片网格(el-row+el-col :span=8): 每张卡片显示 icon+label+description(2行省略)+Skill数量badge+状态tag(草稿灰/已发布绿); 卡片底部操作: 编辑按钮+发布/取消发布开关+对话测试按钮+删除按钮(确认弹窗)",
"【API调用】使用admin接口(需Token): GET列表用 POST /dev/admin/agent/info/page; 删除用 POST /dev/admin/agent/info/delete {ids:[id]}; 发布/取消用 POST /dev/admin/agent/info/update {id,status:1或0}; 获取Token: const { user } = useBase(); headers: { Authorization: user.token }",
"【已发布Agent展示API信息】已发布的Agent卡片底部显示调用地址: POST /open/agent/run/invoke, agentId: {id}; 可复制按钮(navigator.clipboard)",
"【对话测试】点击'对话测试'按钮: 跳转到 /agent/chat 页面并传递query参数 agentId; 或使用 router.push({ path:'/agent/chat', query:{ agentId:id } })",
"【验证】卡片列表正确渲染; 新建/编辑/删除/发布功能正常; API调用地址正确展示; 对话测试跳转正常",
"【难度评估】中等难度。页面结构参考skills.vue但交互逻辑更复杂(CRUD+状态切换)。需要后端BE-133先完成提供API"
],
"passes": true
},
{
"id": "FE-132",
"category": "agent-evolution",
"priority": 0,
"description": "Agent编辑页 - 基本信息/Skill选择/系统提示词/模型配置/接口配置 5个Tab",
"steps": [
"【页面创建】创建 views/agent-edit.vue: 使用el-drawer(宽度700px)或独立页面; 接收props: visible(boolean) + agentId(number|null,null=新建); 使用el-tabs展示5个配置Tab",
"【Tab1-基本信息】el-form表单: name(唯一标识,英文下划线,创建后不可改), label(显示名称), description(textarea), icon(el-input或图标选择器); 表单验证: name和label必填",
"【Tab2-Skill配置】从后端加载全部Skill列表(GET /dev/admin/agent/skill/metas); 展示为勾选列表: el-checkbox-group绑定agent.skills数组; 每个Skill项展示: 勾选框+name+label+skillType彩色tag+description(1行省略); 已勾选的Skill高亮显示",
"【Tab3-系统提示词】el-input type=textarea :rows=15 绑定agent.systemPrompt; 提供'加载默认模板'按钮: 根据已选Skill自动生成推荐prompt(列出Skill名称和推荐工作流); 支持Markdown预览(可选)",
"【Tab4-模型配置】el-form: apiUrl(输入框), apiKey(密码输入框), modelId(输入框); 说明文字: '不配置则使用系统默认LLM配置'; 参考现有skill-model.vue的布局",
"【Tab5-接口配置】只读展示区域(已发布时可见): 调用地址 POST /open/agent/run/invoke; 请求示例JSON(根据当前Agent配置动态生成); 可复制按钮",
"【保存逻辑】新建: POST /dev/admin/agent/info/add { name,label,description,icon,systemPrompt,skills:JSON.stringify(selectedSkills),modelConfig:JSON.stringify(modelConfig),status:0 }; 编辑: POST /dev/admin/agent/info/update { id,...fields }; 保存成功后emit('saved')通知列表页刷新",
"【加载逻辑】编辑时: POST /dev/admin/agent/info/info {id:agentId} 获取Agent详情; JSON.parse(skills)和JSON.parse(modelConfig)反序列化",
"【验证】新建Agent表单验证正常; Skill勾选列表正确展示skillType标签; 保存成功持久化; 编辑时正确回显所有配置; 接口配置tab正确展示API示例",
"【难度评估】中等偏高难度。5个tab内容丰富Skill选择列表需要加载全量Skill并展示skillType。可分步实现: 先做Tab1+Tab2+保存(核心功能)再做Tab3~5(增强功能)"
],
"passes": true
},
{
"id": "FE-133",
"category": "agent-evolution",
"priority": 0,
"description": "对话页改造 - Agent选择器 + 动态欢迎页 + 按Agent过滤会话",
"steps": [
"【Agent Store扩展】修改 store/chat.ts: 新增状态 agents:ref<AgentInfo[]>([]); currentAgentId:ref<number|null>(null); 新增方法 loadAgents(): POST /dev/open/agent/info/list 获取已发布Agent列表; selectAgent(agentId:number|null): 设置currentAgentId; 修改sendMessage(): 传递currentAgentId到chat接口 body中加 agentId: currentAgentId.value",
"【Agent选择器UI】修改 views/chat.vue: 当messages.length===0(空状态/欢迎页)时替换现有欢迎页为Agent选择器: 顶部标题'选择AI助手'; Agent卡片网格(el-row+el-col :span=8): 每张卡片显示icon+label+description+Skill数量; 第一张卡片为'通用助手'(不指定agentId拥有所有Skill); 点击卡片选择Agent: selectAgent(agent.id); 选择后显示该Agent的欢迎信息和快捷操作",
"【动态欢迎页】选择Agent后(currentAgentId!=null): 显示该Agent的icon+label+description; 快捷操作按钮根据Agent.config.quickActions动态展示(如果有); 默认快捷操作: 通用Agent显示现有3个快捷操作; 视频划痕检测Agent显示'开始检测视频'按钮",
"【会话过滤】修改 store/chat.ts loadSessions(): 当currentAgentId有值时传 agentId 参数给 /open/agent/chat/sessions; 切换Agent时重新加载会话列表; 新建对话时自动使用当前Agent",
"【路由参数】chat.vue onMounted时检查 route.query.agentId: 如果有则自动选择对应Agent(从agent-list页面跳转过来的场景)",
"【URL参数】修改 chat.vue: 使用 useRoute() 获取 query.agentId; 如果有值则调用 selectAgent(Number(route.query.agentId))",
"【验证】空状态显示Agent选择器; 选择Agent后显示对应欢迎页; 发送消息时agentId正确传递; 会话按Agent过滤; 不选Agent时使用通用模式(兼容旧行为); 从agent-list跳转过来自动选中Agent",
"【难度评估】中等难度。改动集中在chat.vue(欢迎页改造)和store/chat.ts(Agent状态管理)。需要注意: 1)Agent列表用open接口(不需Token); 2)currentAgentId变化时要重新加载会话; 3)向下兼容不选Agent的场景"
],
"passes": true
},
{
"id": "FE-134",
"category": "agent-evolution",
"priority": 0,
"description": "Agent菜单配置 + 路由注册",
"steps": [
"【路由注册】修改 src/modules/agent/config.ts: 在views数组中新增路由对象 { path:'/agent/agents', meta:{title:'Agent管理'}, component:() => import('./views/agent-list.vue') }; 如果agent-edit.vue是独立页面也要注册路由(如果是抽屉则不需要)",
"【数据库菜单】通过MCP数据库工具在base_sys_menu表插入新菜单: INSERT INTO base_sys_menu (parentId, name, router, type, icon, orderNum, isShow) VALUES (112, 'Agent管理', '/agent/agents', 1, 'icon-setting', 1, 1); — parentId=112是'Agent管理'目录; type=1是页面; orderNum=1排在Agent对话后面",
"【菜单排序调整】可选: 调整现有菜单orderNum使Agent管理排在合适位置: Agent对话(0) → Agent管理(1) → Skill管理(2) → 检测结果(3)",
"【验证】刷新页面后左侧菜单出现'Agent管理'菜单项; 点击菜单正确跳转到/agent/agents页面; admin角色自动拥有该菜单权限(Cool Admin机制)",
"【难度评估】低难度。参考现有3个页面的路由注册方式。数据库菜单使用MCP工具INSERT即可"
],
"passes": true
},
{
"id": "FE-400",
"category": "audit-order",
"priority": 0,
"description": "审核订单列表页 - 分页表格+多条件筛选+操作按钮",
"steps": [
"创建 src/modules/audit/ 模块目录(views/components/types/config.ts)",
"创建 views/order-list.vue: el-table分页列表",
"列: 订单号/订单类型(投保|理赔)/主机厂/审核状态(彩色tag)/Agent名称/耗时/创建时间/操作",
"筛选: 订单类型下拉/审核状态下拉/时间范围选择/订单号搜索",
"操作按钮: 查看详情/重新审核/人工复审",
"API调用: POST /admin/audit/order/page",
"路由注册: /audit/orders, config.ts配置",
"数据库菜单: base_sys_menu新增审核管理目录+订单列表页面"
],
"passes": false
},
{
"id": "FE-401",
"category": "audit-order",
"priority": 0,
"description": "审核订单详情页 - 订单信息+步骤明细+Agent对话+审核结果",
"steps": [
"创建 views/order-detail.vue: 多区块详情页",
"区块1-基本信息: 订单号/类型/主机厂/状态/Agent/耗时 el-descriptions",
"区块2-审核步骤明细: el-timeline时间线展示各步骤(stepType+stepName+score+passed+输出数据)",
"区块3-OCR识别结果展示: 根据stepType动态渲染(身份证表格/发票表格/行驶证表格等)",
"区块4-Agent对话过程: 可展开查看Supervisor与Skill的完整交互(复用message-item组件)",
"区块5-最终审核结果: 通过/驳回/转人工 + 原因 + 评分",
"操作: 重新审核按钮/人工复审按钮(弹窗输入备注+选择结果)",
"API调用: POST /admin/audit/order/info + GET audit_order_detail列表"
],
"passes": false
},
{
"id": "FE-402",
"category": "audit-order",
"priority": 0,
"description": "审核统计面板 - 审核量/通过率/耗时分布/趋势图表",
"steps": [
"创建 views/dashboard.vue: 审核数据看板",
"统计卡片: 今日审核量/通过率/平均耗时/待审核数",
"图表1: 近7天审核量趋势(折线图, echarts或自定义canvas)",
"图表2: 审核结果分布(饼图: 通过/驳回/转人工/失败)",
"图表3: 各主机厂审核量对比(柱状图)",
"图表4: 审核耗时分布(直方图)",
"支持时间范围切换(今日/本周/本月/自定义)",
"API调用: POST /admin/audit/stats"
],
"passes": false
},
{
"id": "FE-403",
"category": "audit-order",
"priority": 0,
"description": "审核模块菜单配置 + 路由注册 + 类型定义",
"steps": [
"创建 types/index.d.ts: AuditOrder/AuditOrderDetail/AuditStats接口定义",
"创建 config.ts: 注册3个路由(/audit/orders, /audit/orders/:id, /audit/dashboard)",
"数据库菜单: base_sys_menu新增审核管理目录(parentId=null) + 3个子页面",
"菜单排序: 审核管理目录排在Agent管理之后",
"验证: 登录后左侧菜单显示审核管理+子菜单, 点击跳转正常"
],
"passes": false
},
{
"id": "FE-500",
"category": "agent",
"priority": 0,
"description": "Agent对话页实时语音交互 - Socket.io连接+麦克风录音+TTS播放+全屏语音面板",
"steps": [
"创建 hooks/realtime-voice.ts: useRealtimeVoice composable(Socket.io连接/麦克风PCM录音/TTS句子级缓冲播放/状态机/ASR&Chat消息管理)",
"创建 components/voice-chat-button.vue: 麦克风图标按钮(Agent配置realtime_voice Skill时显示)",
"创建 components/voice-chat-panel.vue: 全屏语音对话面板(对话气泡+通话计时+静音/挂断)",
"修改 views/chat.vue: 集成语音按钮和面板, hasVoiceSkill计算属性",
"修改 types/index.d.ts: 新增VoiceMessage接口",
"验证: 选择配置了realtime_voice Skill的Agent→显示麦克风按钮→点击弹出面板→说话→ASR文字出现→AI回复出现→TTS音频播放"
],
"passes": false
},
{
"id": "FE-501",
"category": "agent",
"priority": 0,
"description": "Skill配置面板改进 - 实时语音音色下拉+模型下拉+文生图配置",
"steps": [
"修改 components/skill-config.vue: 实时语音音色改为filterable allow-create下拉(4个精品音色选项)",
"修改 components/skill-config.vue: 模型版本改为下拉选择(O/O2.0/SC/SC2.0)",
"修改 components/skill-config.vue: 文生图Skill配置面板(分辨率/宽高比/输出格式/水印等)",
"验证: Skill管理页→实时语音Skill→参数配置→音色下拉正确显示文生图Skill配置面板正确显示"
],
"passes": false
}
]