11 KiB
2026-06-08 工作日志
主要工作:NAS部署调试 + PRD审读
解决的问题
-
部署包目录结构问题 — 之前用 PowerShell
Compress-Archive打包时,nginx/nginx-nas.conf被压到了 zip 根目录,导致 NAS 解压后路径错误。已改用 Pythonzipfile重新打包,确保目录结构正确。 -
Windows
\r\n换行符问题 —.env文件从 Windows 上传到 NAS (Linux) 后,\r被当成普通字符读入变量值,导致:POSTGRES_DB=wecom_it_desk\r→ 后端连接数据库wecom失败- 修复方法:
sed -i 's/\r$//' .env
-
postgres 健康检查发现错误数据库 —
docker-compose.nas.yml第61行:test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-wecom}"]pg_isready默认连接与用户名同名的数据库wecom,但数据库实际叫wecom_it_desk。 修复:改为pg_isready -U ${POSTGRES_USER:-wecom} -d ${POSTGRES_DB:-wecom_it_desk} -
Docker 卷清理问题 —
docker volume rm需要容器先停止才能删除。正确方法:docker compose -f docker-compose.nas.yml down -v(加-v参数会连卷一起删除)
最终成功标志
后端启动日志显示:
✅ 使用 PostgreSQL 数据库: postgres:5432/wecom_it_desk
✅ 数据库表检查/创建完成
✅ 默认数据初始化完成
✅ Application startup complete.
待确认
- nginx 容器是否正常启动(之前报错
nginx-nas.conf does not exist) - Cloudflare Tunnel 是否正常转发流量
- Mock 登录页面是否能正常访问
下一步
- 确认 nginx 状态,若配置文件缺失则重新上传
- 测试 Mock 登录功能(访问
https://itdesk.amanzac.com/) - 配置企微 AI 机器人转人工链接为 H5 页面
下午追加 — API 响应格式修复
- Cloudflare Tunnel 503 修复 — cloudflared 加
--url http://nginx:80参数解决 "No ingress rules" - Mock 登录端点 404 — 后端 Docker 镜像是旧代码,
build --no-cache+up -d重建 - Mock 登录参数 — 正确参数名
employee_id(非user_id) - 数据库缺列 — conversations 表缺 impact_scope/is_blocking/emotion_state/dify_conversation_id,ALTER TABLE SQL 已提供
- API 响应格式不统一 — todo_items.py / troubleshooting_templates.py / employees.py 三个文件直接返回 Pydantic 模型,未用
success_response()包裹为{code:0, data:{}, message:"success"},导致前端拦截器res.code !== 0报"请求失败"。已全部修复为success_response(data=...)格式 - 员工端超时 — H5 前端调用
/h5/conversations/current,需先执行 ALTER TABLE 修复缺列才能正常工作 - 企微IP白名单 — NAS 出口 IP 117.147.35.138 未加白名单(errcode=60020),后端已降级放行
深浅色主题同步 v5.3(下午继续)
-
CSS变量体系完全同步原型v5.3:
- accent 统一为
#3b82f6(替换 Agent端#409eff+ H5端#1989FA) - 新增变量:
--border/--text-muted/--success-soft/--danger-soft/--warning-soft/--accent-soft/--purple/--orange/--shadow/--transition/--radius - 深色模式色值同步:bg-primary=#0f1923, bg-secondary=#151f2b, bg-tertiary=#1a2736 等
- accent 统一为
-
Agent端 87+ 处硬编码颜色全部替换为CSS变量:
- 影响组件:UserInfoPanel(15) / RiskAlert(12) / InviteDialog(11) / UserInfoBar(10) / MessageBubble(7) / FlowchartNode(7) / AiDraftBubble(5) / TopBar(4) / QuickReplyPanel(2) / ReplyBox(1) / TodoPanel(2) / TroubleshootBar(1) / ApprovalDetail(4) / TicketDetail(2) / DeviceDetail(2) / AiRecommendInline(1) / Login
- global.css 中 tag-badge-*/urgency-star/message-agent/ai-tag/conversation-avatar/it-badge 的 #fff → var(--bg-secondary)
-
H5端 10 处硬编码颜色替换:
- ChatView(2) / ChatPanel(1) / MessageBubble(1) / AiHelperPanel(1) / ComingSoon(1) / ShakeButton(2) / CallAgentModal(2)
-
两端构建验证通过:
- Agent:
dist/index.html+dist/assets/Workspace-*.css+dist/assets/index-*.js - H5:
dist/index.html+dist/assets/ChatView-*.css+dist/assets/index-*.js - ⏳ 待部署到 NAS(scp 上传 +
docker restart wecom_it_nginx)
- Agent:
-
NAS部署完成(内网IP 192.168.3.200,非 10.80.0.129):
- scp 上传 H5 + Agent dist 至 NAS
- nginx 重启后前端生效
-
代码同步检查与修复(NAS更新后验证本地代码一致性):
-
坐席工作台原型 v5.4 调整:
- 基于 v5.3 创建
agent-workspace-v5_4.html - 左栏会话列表新增:头像 + 新消息圆点指示器(3色:紧急红/普通蓝/低优灰)+ 处理对象缩略头像
- 我的会话:左侧头像(员工)+ 圆点(有/无新消息)+ 右侧缩略头像(处理对象=员工本人)
- 同事会话:左侧头像(员工)+ 圆点 + 右侧缩略头像(处理坐席)
- 待办事项:右侧新增 ki-avatar 缩略头像(处理对象=上报人/部门)
- 历史会话:仅头像,无圆点,无缩略头像
- 举手图标沿用原有
conv-tag-urgent样式 - 所有原有样式和内容完整保留
- 修复 ConversationItem.vue 遗漏 2 处:
#9b59b6→var(--purple)、#c0c4cc→var(--text-placeholder) - 修复 H5 MessageBubble.vue 注释:
#1989FA→var(--accent) - 全量扫描确认:所有残留硬编码色值均为可保留项(Login渐变 + SVG插图)
- 基于 v5.3 创建
-
Vue3 前端代码同步 v5.4 原型改动:
- ConversationItem.vue 重写:头像渐变色(av-blue
av-pink 7色) + 新消息圆点(dot-urgent红/dot-normal蓝/dot-muted灰3色) + 处理对象缩略头像(ta-blueta-pink) + section prop(my/colleague/history)控制缩略头像逻辑 - ConversationList.vue 重写:取消三段折叠(section-header/ArrowDown/myExpanded等全部移除),三区始终展开扁平显示
- TodoPanel.vue:待办条目右侧新增 ki-avatar 缩略头像(ka-blue~ka-red 5色,hash分配)
- ReplyBox.vue 重写:上方4px拖拽手柄(调整输入区高度+textarea同步) + 快捷工具栏(表情/图片/截图/文件/语音/远程协助/快速回复 7个按钮+分隔线+hover提示气泡+三角箭头) + 输入框+发送按钮合为圆角卡片(.chat-input-card) + textarea resize:none + 发送按钮渐变蓝紫(accent→purple) + 聚焦时卡片蓝色描边+外发光
- Workspace.vue 重写:左右栏border移除+6px拖拽手柄替代(resize-handle) + 可拖拽调整左栏/右栏宽度(200~500px) + mousedown/mousemove/mouseup事件处理 + body光标切换+userSelect控制
- global.css 更新:workspace-sidebar/assistant 去掉border+添加position:relative + 新增resize-handle样式(hover变蓝+::after显示⋮) + conversation-item 改为flex+gap+圆角+border + 新增conv-avatar-wrap/new-msg-dot(3色)/conv-target-avatar(7色) + 新增ki-avatar(5色) + conversation-info改为flex:1+min-width:0
- ConversationItem.vue 重写:头像渐变色(av-blue
-
坐席工作台原型 v5.4 二次调整:
- 取消会话分类折叠:我的会话/同事会话/历史会话全部始终展开,移除折叠箭头和 collapsed 类
- 消息输入框:padding 上下间距调整,上边框从 1px 改为 3px solid var(--border) 做视觉分隔
- 中间栏左右边框:改为拖拽手柄(6px宽),鼠标悬停变蓝+显示拖拽指示符,可手动拖拽调整左栏/右栏宽度(范围200~500px)
- 原型 v5.3 accent=#3b82f6 已与代码完全一致
- 后端/配置文件不涉及主题变更,无需更新
-
企微内嵌网页无法加载修复:
- 根因1:OAuth2 回调地址不匹配 — 后端默认构造
/h5/,Nginx 只有/itdesk/ - 修复1(前端):
employee.ts的getOAuthAuthorizeUrl()传入redirect_uri参数 - 修复2(后端):
h5.py默认回调从/h5/改为/itdesk/ - 根因2:可信域名/OAuth2回调域需备案主体匹配 → 当前域名无法通过验证
- 方案B落地:创建
.env.production清空VITE_WECOM_CORP_ID,关闭 OAuth2 走 Mock 登录 - H5 构建通过,待部署至 NAS
- 后续拿到公司备案域名后删除
.env.production即可切回 OAuth2
- 根因1:OAuth2 回调地址不匹配 — 后端默认构造
-
PRD 审读与问题标注:
- 全面审读 PRD.md(1552行),对比 15个API文件、13个模型文件、9个Service类
- 发现 31 项需明确/细化问题:P0×5 + P1×11 + P2×15
- P0 核心矛盾:PRD 定义"阶段一不接AI/不用WebSocket",但代码已深度集成
- P0 最大阻断:OAuth2不可用 + 端到端流程从未验证
- P1 关键缺失:H5 WebSocket未实现、排队系统未实现、满意度评分未实现、数据模型文档严重滞后
- 建议:PRD 升版到 v1.0,新增 Non-goals/Launch Criteria/安全/监控章节
-
战略观点确认与PRD v1.0更新:
- 用户确认四个战略观点:①资源审批期并行推进 ②管理后台为第三端 ③AI混合策略 ④零基础原则
- 确认三系统集成:Dify管配置/RAGFlow阈值自动推送/数据平台短期DB只读+iframe长期API
- 确认管理后台10大模块(功能开关P0/坐席管理P0/分配模式P1/快速回复P1/主题P2/会话监控P1/数据看板P1/流程图P1/知识库P2/外部集成P0~P2)
- 确认消息分配6种模式(轮询/手动/最少活跃/加权/技能匹配/优先队列)渐次启用
- 确认AI混合策略L1~L4四层架构:标注粒度B(标注+实际回复内容),迭代触发B(阈值推荐)
- 确认阶段细化:1A/1B/1C → 2A/2B/2C/2D → 3A/3B/3C → 4A/4B/4C
- 确认零基础边界:管理后台配置一切,代码修改需开发但控制颗粒度,操作者=坐席组长
- PRD 升版至 v1.0,新增 §18管理后台远景规划 + §19系统生态与集成规划 + §20阶段细化与并行推进策略
- MEMORY.md 同步更新:五阶段细化 + 管理后台 + AI混合策略 + 系统生态 + 零基础原则
-
现实校准更新:
- 消息分配模式:当前1人足够,手动接单完全满足,6种模式为远景按坐席规模渐次解锁
- 排查流程图+Dify实现路径确认4步:JSON导入导出→Dify变量/知识条目导出→HTTP回调分支→可视化拖拽
- PRD §18.3 更新为"手动接单优先+远景渐次解锁",§19.7 细化为分阶段实现路径
- §20.2B 和 §20.3 推荐事项同步更新
-
H5端API超时问题确认已解决:
- 后端日志显示
/h5/user→ 200,/h5/conversations/current→ 200 - nginx 代理链路正常:
localhost:18080/api/h5/approval-links→ HTTP 200 + 数据 - 之前超时是后端重启未就绪的瞬时问题
- 后端日志显示
技术笔记
NAS 部署关键配置
- Cloudflare Tunnel Token 已配置:
CF_TUNNEL_TOKEN=eyJhIjoi... - 企微配置 已填入:
WECOM_CORP_ID=wwa8c87970b2011f41WECOM_AGENT_ID=1000133WECOM_SECRET=EOtQslW7WD8Rna8Nm9WnwCW-ozHP3tustL4mFnet6O8
- Mock 登录已启用:
MOCK_LOGIN_ENABLED=true
文件位置(NAS)
/volume1/docker/wecom-it-desk/
├── docker-compose.nas.yml
├── .env # 从 .env.nas 复制并填入真实值
├── nginx/
│ └── nginx-nas.conf # ← 之前缺失,已重新打包
├── frontend-h5/dist/ # H5 员工端静态文件
├── frontend-agent/dist/ # 坐席工作台静态文件
└── backend/ # 后端源码(会构建为 Docker 镜像)