210 lines
14 KiB
Markdown
210 lines
14 KiB
Markdown
|
|
# 2026-06-06 工作日志
|
|||
|
|
|
|||
|
|
## 坐席工作台原型迭代 (v5.2 → v5.3)
|
|||
|
|
|
|||
|
|
### v5.3 调整内容
|
|||
|
|
- **排查步骤重构**:栏位始终显示不可收起,仅全流程图默认收起可通过按钮展开
|
|||
|
|
- 去掉了整个排查步骤栏位的 collapse 功能
|
|||
|
|
- 标题栏右侧改为「▶ 展开全流程图」/「▼ 收起全流程图」按钮
|
|||
|
|
- 最优路径横向方块始终显示
|
|||
|
|
- 流程图展开/收起带 max-height 过渡动画
|
|||
|
|
- **系统名称确认**:顶部栏 → "IT智能服务台 · 坐席工作台 — AI驱动 · 多系统对接 · 一站式处理"
|
|||
|
|
- 系统名使用渐变色突出显示
|
|||
|
|
- 新增 tagline 副标题表达平台定位
|
|||
|
|
|
|||
|
|
### 前端报错排查(17:29)
|
|||
|
|
- **现象**:前端报 `todo.ts:66 请求失败` + `agent.ts:131 未授权`
|
|||
|
|
- **根因**:后端 FastAPI 服务未运行,Vite proxy 转发请求到 localhost:8000 被拒
|
|||
|
|
- **修复**:启动后端 `uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload`
|
|||
|
|
- **验证**:`/todo-items`(200,8条数据) `/agents/login`(200,返回token) `/agents/me`(200需token) 全部正常
|
|||
|
|
- Redis (Docker): `it-desk-redis` 已确认运行中
|
|||
|
|
|
|||
|
|
### 页面与v5.3原型差异排查(17:35)
|
|||
|
|
- **现象**:用户截图显示页面与v5.3原型差异很大
|
|||
|
|
- **分析**:经逐项对比PRD和实际代码,主要差异只有2处:
|
|||
|
|
1. TopBar Logo方块尺寸32px→PRD要求26px
|
|||
|
|
2. UserInfoBar chips行缺少IT等级chip(PRD要求chips行包含😟情绪/⏱时长/💬轮次/IT等级/🔁重复)
|
|||
|
|
- **修复**:
|
|||
|
|
- `TopBar.vue`: `.logo-block` width/height 32px → 26px
|
|||
|
|
- `UserInfoBar.vue`: chips行新增 `🖥 {{ levelName }} Lv.{{ levelNumber }}` chip,样式 `.info-chip--accent`(accent色底+边框)
|
|||
|
|
- 其余组件(Workspace/ConversationList/ChatArea/AiAssistantPanel/global.css/子组件)均符合v5.3 PRD规范
|
|||
|
|
- 截图中空状态(暂无会话/暂无推荐/暂无待办)是因为数据库无数据,属正常行为
|
|||
|
|
|
|||
|
|
### 用户四问题修复(17:47)
|
|||
|
|
**问题**:1.标题栏没置顶 2.无双色切换开关 3.应急模式未取消 4.每种类型状态Mock数据不够
|
|||
|
|
|
|||
|
|
**修复**:
|
|||
|
|
1. **标题栏置顶**:`Workspace.vue` 布局改为上下结构(TopBar在上,新增 `.workspace-body` div包裹三栏);`global.css` 新增 `.workspace-body` 样式(`flex:1;display:flex;overflow:hidden`)
|
|||
|
|
2. **双色切换开关**:`TopBar.vue` 中主题按钮替换为 `el-switch`,带Sunny/Moon图标 + 深色(#0f1923)/浅色(#f5f7fa)双色背景;添加 `themeSwitchValue` ref + `watch` 同步 + `onThemeSwitch` 回调
|
|||
|
|
3. **应急模式移除**:TopBar.vue 删除应急横幅/开关按钮/`handleEmergencyToggle`/`checkEmergencyMode`/`defineExpose`/相关样式;Workspace.vue 删除 `checkEmergencyMode()` 调用;`ElMessageBox` 补回(logout还在用)
|
|||
|
|
4. **Mock数据扩充**:
|
|||
|
|
- `todo_items.py`: MOCK_TODO_ITEMS 8→20条(覆盖全部类型ticket/approval/device × 状态pending/processing/resolved),日期 2025→2026
|
|||
|
|
- `seed_conversations.py`(新建): 往SQLite写入15条会话Mock(覆盖queued/serving/ai_handling/resolved + VIP/情绪/阻断属性)
|
|||
|
|
|
|||
|
|
### 会话列表API 500错误 + WebSocket连接失败(18:20)
|
|||
|
|
**现象**:
|
|||
|
|
- `GET /api/conversations?page=1&page_size=100` 返回 500
|
|||
|
|
- `WebSocket connection to 'ws://localhost:5173/ws/740' failed`
|
|||
|
|
|
|||
|
|
**根因分析**:
|
|||
|
|
1. **500错误**:`session_service.py` 的 `get_conversations()` 用 SQL 侧 `case()` + `tags["hand_raise"].as_boolean()` 排序,SQLite 不支持 JSONB 操作符,SQL 执行报错
|
|||
|
|
2. **WebSocket失败**:`useWebSocket.ts` 用 `window.location.host`(前端 5173),Vite `/ws` 代理转发有兼容性问题
|
|||
|
|
|
|||
|
|
**修复**:
|
|||
|
|
1. **会话排序改为 Python 侧**(`session_service.py` 第629-712行):
|
|||
|
|
- 移除 SQL 侧 `case()` + JSON 操作符
|
|||
|
|
- 数据库侧只做基础排序(置顶+紧急度+状态+时间)
|
|||
|
|
- Python 侧 `_sort_key()` 函数完整实现 PRD 排序规则(置顶→紧急度5→举手→需介入→紧急度4→情绪→紧急度3→排队→AI处理→服务中→已结单)
|
|||
|
|
- 支持 SQLite(开发)和 PostgreSQL(生产)
|
|||
|
|
2. **WebSocket 直连后端**(`useWebSocket.ts` 第96-100行):
|
|||
|
|
- 开发环境(`import.meta.env.DEV`):`ws://localhost:8000/ws/{agentId}`
|
|||
|
|
- 生产环境:同源 `wss://` 通过 nginx 代理
|
|||
|
|
- 移除对 Vite `/ws` 代理的依赖
|
|||
|
|
3. **重启后端**使代码生效
|
|||
|
|
|
|||
|
|
### 快速回复三层渐进导航重构(18:46)
|
|||
|
|
**用户需求**:
|
|||
|
|
1. L1目录不用滑动条,1~2行显示完全;目录名中去掉"Alt+N",改为数字图标;搜索栏显示使用说明
|
|||
|
|
2. 快速回复按知识库三层结构逐步缩小范围,Alt+数字→数字→数字→Enter 填入
|
|||
|
|
|
|||
|
|
**实现**:
|
|||
|
|
- **CSS重构**:`.qr-tabs`→`.qr-l1-grid`(2列grid,无滚动)/ `.qr-l2-row`(flex-wrap chip,无滚动)/ `.qr-l3-list`(纵向滚动列表)
|
|||
|
|
- **HTML重构**:搜索栏 placeholder→"搜索快速回复 / Alt+目录数字";面包屑导航+返回按钮;L1/L2/L3三层渲染容器;选中预览条
|
|||
|
|
- **JS重构**:`qrData` 88条三级结构化数据(8大类×20子类×约50条回复)
|
|||
|
|
- 8个L1分类:安全🛡/网络🌐/邮箱📧/系统💻/账号🔑/硬件🖥/数据💾/话术💬
|
|||
|
|
- 键盘导航:Alt+1~8选L1 → 数字1~N选L2 → 数字1~N选L3 → Enter填入输入框
|
|||
|
|
- Esc/Backspace 返回上级;"/" 聚焦搜索框
|
|||
|
|
- **文件**:`agent-workspace-v5_3.html` 直接修改
|
|||
|
|
|
|||
|
|
### 快速回复数据源替换为真实知识库(18:57)
|
|||
|
|
**用户需求**:按《IT支持知识库2026-4-24.docx》真实目录结构和内容替换三层快速回复
|
|||
|
|
|
|||
|
|
**实现**:
|
|||
|
|
- 用 python-docx 读取 `C:\Users\simon\Downloads\IT支持知识库2026-4-24.docx`
|
|||
|
|
- 提取文档目录结构:Heading1(L1)→Heading2(L2)→Heading3(L3=问题)→正文(答案)
|
|||
|
|
- 生成独立数据文件 `qr_data.js`(35KB,180条)
|
|||
|
|
- **7大L1分类**:办公电脑💻(3子类12条) / 软件工具🛠(8子类47条) / 办公外设🖨(5子类27条) / 办公网络🌐(2子类28条) / 终端安全🛡(4子类13条) / 资产管理📊(3子类31条) / 其他业务📋(8子类22条)
|
|||
|
|
- HTML 中移除内联数据(~230行),改为 `<script src="qr_data.js"></script>` 外部引用
|
|||
|
|
- L1网格改为3列(7项=3+3+1=3行),Alt+1~7快捷键
|
|||
|
|
- 临时提取脚本 `extract_qr.py` 已清理
|
|||
|
|
### 原型同步至 Vue 3 开发代码(19:56~20:10)
|
|||
|
|
**背景**:用户确认原型 v5.3,要求同步快速回复三层渐进导航至 `wecom_it_smart_desk` 项目。
|
|||
|
|
|
|||
|
|
**同步内容**:
|
|||
|
|
1. **新增** `frontend-agent/src/data/qrData.ts` — 7大类层级数据(电脑/软件/外设/网络/安全/资产/其他),含 TypeScript 类型定义(QrCategory/QrSubCategory/QrItem)
|
|||
|
|
2. **重写** `frontend-agent/src/components/assistant/QuickReplyPanel.vue` — 三层渐进导航:
|
|||
|
|
- L1: 7列 grid,按钮上下排列(数字在上/名称在下),无 icon
|
|||
|
|
- L2: chip 横向流式布局
|
|||
|
|
- L3: 纵向列表 + 选中预览条
|
|||
|
|
- 面包屑导航 + 返回按钮
|
|||
|
|
- 搜索过滤(跨层级)
|
|||
|
|
- 保持 `emit('use-template', content)` 接口不变
|
|||
|
|
3. **更新** `frontend-agent/src/composables/useKeyboardShortcuts.ts`:
|
|||
|
|
- Alt+1~7 扩展至 7 个分类
|
|||
|
|
- 新增 `onQuickReplyDigit`(数字键 1-9)
|
|||
|
|
- 新增 `onQuickReplyBack`(←/Backspace 返回)
|
|||
|
|
- 保持对输入框聚焦的智能过滤
|
|||
|
|
4. **清理** 工作区临时 Python 修复脚本(qrData 引号修复相关)
|
|||
|
|
|
|||
|
|
**验证**:vue-tsc 编译通过,无新增 TS 错误(预存错误 5 个,与本次修改无关)
|
|||
|
|
|
|||
|
|
**文件清单**:
|
|||
|
|
- `C:\Users\simon\wecom_it_smart_desk\frontend-agent\src\data\qrData.ts`(新建)
|
|||
|
|
- `C:\Users\simon\wecom_it_smart_desk\frontend-agent\src\components\assistant\QuickReplyPanel.vue`(重写)
|
|||
|
|
- `C:\Users\simon\wecom_it_smart_desk\frontend-agent\src\composables\useKeyboardShortcuts.ts`(更新)
|
|||
|
|
|
|||
|
|
### 完整 Mock 数据基建 + Quick Reply 数据同步(20:14~20:35)
|
|||
|
|
- 从 IT支持知识库2026-4-24.docx 重新提取完整 180 条数据(python-docx + json.dumps 安全转义)
|
|||
|
|
- 名称简化为电脑/软件/外设/网络/安全/资产/其他 → 同步至原型 HTML + `src/data/qrData.ts`
|
|||
|
|
- **新建** `src/mock/data.ts` — 统一 mock 数据源:
|
|||
|
|
- 10会话(queued/serving/ai_handling/resolved + blocking/VIP/pinned/举手/需介入/情绪标签)
|
|||
|
|
- 12消息(text/image/system/ai_suggestion + employee/agent/ai/system)
|
|||
|
|
- 5待办(ticket/approval/device + urgent/high/normal/done)
|
|||
|
|
- 5坐席(online/busy/offline)、用户画像(张伟档案)、AI推荐(4条 + summary + tags)
|
|||
|
|
- **更新 Stores** mock fallback(仅 DEV 环境 + API 失败时):
|
|||
|
|
- `conversation.ts`: fetchConversations/fetchMessages
|
|||
|
|
- `todo.ts`: fetchTodoList
|
|||
|
|
- `agent.ts`: login/refreshAgentInfo/loadAvailableAgents
|
|||
|
|
- **修复** `TodoPanel.vue` agent stats 从 getAgentStats() 读取
|
|||
|
|
- **原型 HTML 丰富**:+3会话(不同状态) + 2待办(normal/done) + AI内联建议 + 2条AI推荐 + 新CSS类
|
|||
|
|
- vue-tsc 编译通过(仅预存6错误)
|
|||
|
|
|
|||
|
|
### 原型布局调整:排查步骤栏上移(22:30)
|
|||
|
|
- **用户需求**:排查步骤栏从输入框下方移到人员信息栏下方、消息区域上方
|
|||
|
|
- **实现**:Node.js 脚本精确移除→插入,追踪嵌套 div 深度定位闭合标签
|
|||
|
|
- **最终布局**:user-info-bar → user-detail-panel → **troubleshoot-bar** → chat-messages → chat-input-area
|
|||
|
|
|
|||
|
|
### 原型调整:AI推荐归位 + 输入框自适应(22:51)
|
|||
|
|
- **用户需求1**:AI智能推荐从中间栏移回右边栏
|
|||
|
|
- 移除 `ai-recommend-inline`(chat-messages 内联回复选项)
|
|||
|
|
- 移除 `msg-ai-suggestion`(AI建议横幅)
|
|||
|
|
- 右边栏 `ai-recommend-section` 保持不变
|
|||
|
|
- **用户需求2**:输入框随内容自动调节高度 + 支持手动拖拽
|
|||
|
|
- CSS: `resize: none` → `resize: vertical`,`max-height: 100px` → `300px`,新增 `overflow-y: auto`
|
|||
|
|
- JS: `autoResize()` 函数(监听 input → `scrollHeight` 自适应,上限300px)
|
|||
|
|
- `fillInput()` 调用 `autoResize()` 同步更新
|
|||
|
|
|
|||
|
|
### Vue 3 项目修复:AI推荐回归右边栏 + 右边栏默认可见(22:55)
|
|||
|
|
- **根因**:`ChatArea.vue` 中包含 `<AiRecommendInline />` 内联组件,导致AI推荐同时出现在中间栏和右边栏
|
|||
|
|
- **修复**:
|
|||
|
|
- `ChatArea.vue`: 移除 `AiRecommendInline` 模板使用、import、ref声明、`onAiRecommend` 快捷键绑定
|
|||
|
|
- `Workspace.vue`: `assistantVisible` 默认值 `false` → `true`,右边栏默认可见
|
|||
|
|
- **验证**: vue-tsc 无新增错误(仅预存5错误)
|
|||
|
|
|
|||
|
|
### 原型HTML结构修复 + Vue 3 会话加载修复(23:04)
|
|||
|
|
- **原型根因**:`chat-view` div 缺少 `</div>` 闭合标签,导致浏览器解析将 `sidebar-right`(AI推荐+快速回复)嵌套到 `center-column` 内部,显示在中栏
|
|||
|
|
- **原型修复**:在 `chat-input-area` 关闭后补 `</div>` 闭合 `chat-view`,使 `sidebar-right` 成为 `center-column` 的兄弟元素
|
|||
|
|
- **Vue 3 根因**:`Workspace.vue` onMounted 未调用 `fetchConversations()`,`currentConversation` 始终为 null,`ChatArea` 不渲染
|
|||
|
|
- **Vue 3 修复**:onMounted 中添加 `await conversationStore.fetchConversations()` + 自动选中第一个会话
|
|||
|
|
- **需重启 dev server 生效**
|
|||
|
|
|
|||
|
|
### wecom_it_smart_desk 目录清理(23:50)
|
|||
|
|
|
|||
|
|
**执行背景**:项目目录 524 MB,95% 为缓存/日志/过期产物,需要精简后迁移
|
|||
|
|
|
|||
|
|
**清理结果**:
|
|||
|
|
- 删除:~499 MB(95% 精简)
|
|||
|
|
- 保留:~25 MB(核心代码 + 文档 + 数据库)
|
|||
|
|
- 根目录文件:102 个 → ~25 个
|
|||
|
|
|
|||
|
|
**已删除分类**:
|
|||
|
|
1. 缓存/构建产物(519 MB):`itdesk-images.tar`(222MB)、`itdesk.tar.gz`、`node_modules/`(2个,202MB)、`venv/`(94MB)、`dist/`(2个)、`__pycache__/`、`pytest_cache/`
|
|||
|
|
2. 空文件(~10 个):所有 0 字节 `.txt` 文件
|
|||
|
|
3. 根目录重复脚本(~50 个 `.py`):`run_tests*.py`、`diagnose*.py`、`test_*.py`、`check_*.py`、`fix_*.py`、`restart_*.py` 等
|
|||
|
|
4. 后端根目录诊断脚本(`_*.py`,~20 个)
|
|||
|
|
5. 过期日志/输出文件(`*.txt`,~20 个)
|
|||
|
|
6. 遗留系统代码:`docs/existing_system_code/`(2.3 MB,旧 Django 项目)
|
|||
|
|
|
|||
|
|
**已归档**:`scripts/archive/`(5 个有用脚本:`simulate_wecom*.py`、`import_knowledge_base.py`、`start_8001.py`、`analyze_report.py`)
|
|||
|
|
|
|||
|
|
**保留文件**:核心代码(backend/app/、frontend-agent/src/、frontend-h5/src/)、文档(PRD.md、ARCHITECTURE.md、QA_TEST_REPORT.md)、数据库(`it_smart_desk.db`)、配置(`.env`、`.env.example`、`docker-compose.yml`、`nginx.conf`)
|
|||
|
|
|
|||
|
|
**迁移注意**:目标机器需重新执行 `npm install`(2 个前端)、`python -m venv venv && pip install -r requirements.txt`(后端)
|
|||
|
|
|
|||
|
|
**清理报告**:`C:\Users\simon\WorkBuddy\2026-05-21-16-57-26\wecom_it_smart_desk-清理报告.md`
|
|||
|
|
|
|||
|
|
### Vue 3 项目同步:排查步骤合并+展开箭头修正(23:25)
|
|||
|
|
- **TroubleshootBar.vue**:
|
|||
|
|
- 路径步骤从独立 `.troubleshoot-bar__path` 区域合并到 `.troubleshoot-bar__header` 同一行
|
|||
|
|
- 展开按钮从 `el-button` 文字按钮简化为三角图标 `▶`/`▼`(`.troubleshoot-bar__toggle`)
|
|||
|
|
- CSS 重构:紧凑行布局(`min-height: 36px`),内联步骤标签 `.path-step-inline`,内联箭头 `.path-arrow-inline`
|
|||
|
|
- **UserInfoBar.vue**:
|
|||
|
|
- 收起时 `▶`(向右=可展开),展开时 `▼`(向下,`rotate(90deg)`)
|
|||
|
|
- 之前方向反了:`▼` → `▲`(`rotate(180deg)`)
|
|||
|
|
- **验证**:vue-tsc 无新增错误(仅预存5错误)
|
|||
|
|
- **需重启 dev server 生效**
|
|||
|
|
- **排查步骤栏**:路径图(①②③④⑤)合并到标题栏同一行,展开全流程图按钮简化为三角图标 ▶/▼
|
|||
|
|
- ts-header 改为紧凑行:`[🔧 排查步骤] [①→②→③→④→⑤] [▶]`
|
|||
|
|
- 移除独立 ts-path-view 区域,改为 ts-path-inline 内联
|
|||
|
|
- 移除 ts-flowchart-btn 按钮样式,改为纯图标 ts-flowchart-toggle
|
|||
|
|
- toggleFlowchart() 简化为 textContent 切换
|
|||
|
|
- **用户信息栏**:展开箭头方向修正
|
|||
|
|
- 收起时 ▶(向右,表示可展开)→ 展开时 ▼(向下,rotate(90deg))
|
|||
|
|
- 之前是收起时 ▼ 展开时 ▲(方向反了)
|
|||
|
|
- **原型根因**:`chat-view` div 缺少 `</div>` 闭合标签,导致浏览器解析将 `sidebar-right`(AI推荐+快速回复)嵌套到 `center-column` 内部,显示在中栏
|
|||
|
|
- **原型修复**:在 `chat-input-area` 关闭后补 `</div>` 闭合 `chat-view`,使 `sidebar-right` 成为 `center-column` 的兄弟元素
|
|||
|
|
- **Vue 3 根因**:`Workspace.vue` onMounted 未调用 `fetchConversations()`,`currentConversation` 始终为 null,`ChatArea` 不渲染
|
|||
|
|
- **Vue 3 修复**:onMounted 中添加 `await conversationStore.fetchConversations()` + 自动选中第一个会话
|
|||
|
|
- **需重启 dev server 生效**
|
|||
|
|
|