520 lines
23 KiB
JSON
520 lines
23 KiB
JSON
[
|
||
{
|
||
"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
|
||
}
|
||
]
|