Commit Graph

247 Commits

Author SHA1 Message Date
浅念 2d93f31be7 docs(spec): 吸收评审建议(时间s→ms转换/msg_type映射推导注明/moments头部来源/统计全tab明细/WIP还原明确/空态描述)
Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-25 11:59:30 +08:00
浅念 614680a4eb docs(spec): 员工聊天窗口对齐设计(StaffChat五视图:单聊/群聊/朋友圈/通讯录/统计分析,基于2026-08-25云客真机抓包)
Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-25 11:57:29 +08:00
浅念 65ddcf988f fix(staff): \u5f39\u6846\u8865\u56de\u5458\u5de5\u4fe1\u606f\u5217(\u8bef\u5220)
Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-25 10:57:47 +08:00
浅念 c96f638bab fix(staff): 弹框富单元格TS修(Col加type字段+删unused staffInfo)+后端staff-chat-stats补head_image_url/real_name 2026-08-25 10:27:29 +08:00
浅念 b6eea3070a feat(staff): 弹框客户微信/员工微信列改富单元格(头像+昵称+ID+真实姓名,对齐云客)
Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-25 10:24:07 +08:00
浅念 0d19289fba feat(staff): 沟通数弹框加汇总说明(对齐云客:总X人次,重复Y,剩余Z条,玉绿左边框)
Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-25 10:08:44 +08:00
浅念 d4deb769e5 feat(chat): 会话侧栏全面美化(墨玉主题:药丸tab+圆角会话卡+今日红点+玉绿高亮)
Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-25 09:43:56 +08:00
浅念 85057e65dc feat(chat): 侧栏筛选改tab按钮式(好友列表|群列表带计数,对齐云客聊天窗口)
Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-24 18:34:16 +08:00
浅念 a7ef8632a0 feat(chat): 群聊隐藏左侧会话列表(对齐云客)+会话名WA去@s.whatsapp.net后缀显号码
Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-24 18:29:27 +08:00
浅念 e5ebb918fc docs(analytics): 数据分析与增值功能全景方案(22项/5系列,基于2026-08-24实测数据审计,首批E1+A1+A3+B2+C1)
Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-24 18:28:52 +08:00
浅念 d86a70382d feat(wa): 群列表列对齐云客7列(序号/员工信息/员工WhatsApp/群信息/添加时间/最后沟通时间/操作)
Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-24 18:19:53 +08:00
浅念 b66363e377 fix(wa): 直接以tab=groups进入时onMounted加载群数据(mount不触发route watch)
Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-24 18:18:32 +08:00
浅念 e84e89b029 fix(wa): 好友分页在群tab时隐藏(原两个分页同时显示)
Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-24 15:55:39 +08:00
浅念 8ee7399836 fix(wa): 子tab去掉v-if(只在groups时显示的bug→应始终显示)
Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-24 15:52:27 +08:00
浅念 b0923409fb fix(wa): viewCustomers带channel query(原缺whatsapp致WA客户页默认微信tab)+tab query watch
Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-24 15:42:20 +08:00
浅念 dcd1c2d178 feat(wa): WA客户列表加群列表子tab(好友/群两tab对齐云客)+员工列表群聊按钮跳子tab
- CustomerList whatsapp tab 加子tab切换(好友列表|群列表)
- 群列表内嵌 WA 群表格(序号/员工/群名/消息数/查看聊天)
- StaffList WA viewGroups 跳 /customers?tab=groups(不再跳 /groups)
- WA 群数据 317 个(wa-groups 重扫)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-24 15:28:39 +08:00
浅念 31d22ddd45 fix(media): 修复 Windows 反斜杠路径致 Linux 容器 404(49536 行 local_path 全量改为 /data/media 前缀)
SQLite 迁移时保留了 Windows 路径(media\xx\),Linux 后端 Path.resolve()
失败 → 404。一次性修复全部 media 行 + API 恢复 200。

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-24 15:16:18 +08:00
浅念 ed564e4885 fix(calls): 语音通话列布局对齐云客(头像/标签式/结束时间/时长格式)+修SFC构建3处阻断
- 客户信息/员工微信加头像+脱敏微信号+备注名
- 通话信息改多行标签式,员工信息改纯文本,通话时长显示endTime+MM'SS"
- 修SFC构建:模板字面量混合引号→字符串拼接;空三元表达式补全;onMounted误删

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-24 15:01:20 +08:00
浅念 d945a1e4ce feat(calls): 语音通话列表列布局全面对齐云客(头像/多行标签/结束时间/时长格式)
- 客户信息/员工微信列:加头像+微信号用脱敏alias+客户加备注名
- 通话信息:改多行标签式(状态/微信语音/来源),去「xx:」前缀
- 员工信息:改纯文本(云客不可点)
- 通话录音:接通时显示时长+播放
- 通话时长列:显示endTime+MM'SS"格式

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-24 14:43:03 +08:00
浅念 a9a30d49e7 fix(compose): MySQL映射宿主机3307(容器内存不足致浏览器崩溃,改宿主机直跑扫描)
Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-24 14:32:08 +08:00
浅念 5effaac00b fix(scraper): 补_room_watermarks函数定义(增量同步时引用但定义在编辑中丢失,导致群消息扫描崩溃)
Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-24 14:15:37 +08:00
浅念 8a99940554 feat(groups): chat_group改复合主键(channel,owner,room)——多员工同群不再去重(云客张士蓓64群vs原42)
原 room_id 单列 PK 把多员工同群合并成一行(末位覆盖owner),其他员工
群列表缺数据。改复合主键后同群每个员工各一行,对齐云客按员工查看。
重扫后 1590 行/865 去重群/张士蓓 64 群(与云客一致)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-24 12:01:25 +08:00
浅念 847c4cdee4 feat(groups): 群主信息列带头像+realName(去微信号,对齐云客)
Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-24 11:43:51 +08:00
浅念 242243e880 fix(groups): 群列表3处字段修正对齐云客(群主ownerName+好友数friendCount+fromType=0→工作手机)
- 群主信息: userName→ownerName(群数据里群主昵称的正确字段)
- 群成员好友数量: contactCount(不存在)→friendCount(实测有值500)
- fromType=0 映射为「工作手机」(群列表的编码与客户的1000014不同)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-24 11:40:20 +08:00
浅念 804addf725 feat(staff): 员工列表排序对齐云客API返回顺序(list_order列+抓取记序+API按序排)
- wechat_account 加 list_order 列(云客 wxUser/list 返回顺序)
- 抓取器记录每行在API响应中的序号
- /api/accounts ORDER BY list_order(对齐云客员工列表排列)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-24 11:25:33 +08:00
浅念 68f535d637 fix(calls): 员工详情抽屉字段补全(修错key+加userId/微信号/微信手机号;去不存在的工号/部门)
Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-24 10:44:25 +08:00
浅念 f7e1f1d775 fix(calls): 员工详情抽屉接线补全(函数体+状态变量,上轮断言中断只写入了模板)
Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-24 10:34:09 +08:00
浅念 12d773ce91 feat(ui): 语音通话员工详情改抽屉(原跳独立页,与全站详情体验统一;含卡片化样式)
Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-24 10:24:55 +08:00
浅念 3699ec6d3b fix(ui): 员工详情页接入卡片化美化(选择器扩展到独立页)+WA客户tab每页10条(微信保持5)
Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-24 10:17:18 +08:00
浅念 0202dbc336 feat(ui): 详情抽屉全面美化(卡片式信息档案风格,覆盖8个页面的全字段抽屉)
- 头像区:渐变名片卡+玉绿头像框+身份绿点
- KV网格:双列卡片+行悬停高亮+分区玉绿竖条标题
- 顶栏:毛玻璃悬浮;图片:圆角阴影+悬停放大;背景:点阵纹理
- 零组件改动(纯CSS全局层,!important覆盖各页scoped样式)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-24 10:05:13 +08:00
浅念 abc97fe217 feat(search): MySQL ngram FULLTEXT分支(LIKE 13.5s→索引毫秒级;索引缺失自动回退LIKE)
MySQL LIKE 全扫698k行13.5s撞axios 15s超时→前端ERR_ABORTED;
MATCH...AGAINST(ngram)毫秒级;本地C盘不足索引待服务器建
(索引SQL: CREATE FULLTEXT INDEX ft_msg_text ON message(text) WITH PARSER ngram)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-22 17:52:26 +08:00
浅念 a8b8d9d81c fix(export+calls): 同类owner错位问题全面修复(群导出不按owner过滤+群语音客户点击走群聊路由)
- /api/export/chat-html: room 查询忽略 owner(chat_group owner 错位同
  ChatTimeline,群列表/聊天页的导出按钮原来会导出空文件)
- CallList viewCallCustomer: talker 以 @chatroom 结尾→group-chat 路由
  (原走 1:1 路由按 talker_id 查@chatroom 恒空)
- TDD: 群消息在 ownerB 名下用 ownerA+room 导出仍能拿到;428 测试绿
- 实测:错位 owner 导出 43304 群返回 15002 个消息元素

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-22 17:00:43 +08:00
浅念 4f375c3d71 fix(chat): 群聊消息查询不带owner(chat_group按room去重owner被末位员工覆盖,与消息归属错位查空)
room 全局唯一且消息只在单一owner名下(多owner群=0),按room查即正确;
MessageQuery.owner_account_id 改可选。实测43304群6000条正常显示。
16个活跃群0条消息=增量未覆盖,4h调度自动补

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-22 16:50:56 +08:00
浅念 d08255696c fix(ui): 进场动画改纯opacity(transform残留值把fixed抽屉裁成半截)
transform:translateY(0)结束后仍是非none transform→创建containing block
→position:fixed的抽屉相对列表卡片定位被裁剪;opacity动画无此副作用

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-22 16:21:12 +08:00
浅念 b9d250cdc1 fix(chat): 默认时间窗改全部时间(原近2周把老对话过滤成空——7-26的对话打开显示暂无聊天记录)
点「查看聊天记录」就该看到记录;需要过滤再手动选日期(已开clearable,
清除即回全部);stat-modal 带窗入口(?start&end)不受影响

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-22 16:16:01 +08:00
浅念 4056dfb49e feat(ui): 客户列表默认每页5条(选项加5,用户偏好)
Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-22 16:02:07 +08:00
浅念 01842a0abf feat(ui): 可点击元素统一玉绿示意(链接悬停下划线+行悬停首列染玉绿+会话侧栏玉绿激活;修StaffList灰色覆盖把link按钮染灰的bug)
Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-22 15:54:05 +08:00
浅念 12097df9f1 feat(ui): 墨玉控制台主题(深墨侧栏+玉绿主色+暖纸内容区,组件零改动)
- 侧栏:深墨渐变底+品牌玉点+玉绿激活竖条(微光)+右缘渐隐线
- 主色:Element 全系覆写为玉绿(#0d9f6e,微信血统精炼)
- 内容区:暖纸底+极淡点阵纹理;页面进场微上浮动画
- 卡片:10px圆角+双层阴影+jade hover;表格:精致表头+玉绿行hover+tabular数字
- 聊天流:纸面质感底;细滚动条;输入/按钮圆角统一

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-22 15:38:03 +08:00
浅念 a290e39523 feat(customers): 发送/接收列改今日口径(对齐云客;本地消息表Asia/Shanghai今日聚合)
- CustomerOut 加 send_today/receive_today(路由赋值,非ORM列)
- /api/customers 每页一次 GROUP BY(owner IN 走复合索引前缀)
- 前端列优先今日值,无消息数据回退原raw字段;列名对齐云客「发送条数/接收条数」
- TDD:今日3发2收+昨日不计入+无消息客户0

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-22 14:39:17 +08:00
浅念 00ae13b5c2 feat(deploy): 完成数据迁移与MySQL全链路(14表698k消息100%一致+5方言补丁+bind mount)
- migrate_sqlite_to_mysql.py: 逐表清空重导(幂等),复用repos强转,JSON列
  解析,67万消息按msg_id键集分批,467s跑完14表全一致
- 修4个MySQL实测bug: NULLS LAST语法(compat.py编译补丁)、message.text
  TEXT→MEDIUMTEXT(64KB字节上限,实测20.8万字符车源清单)、URL列
  String(1024)→Text(分享链接超1KB)、垃圾超长member_id源头清理
- compose: media改bind mount(不占C盘Docker虚拟磁盘,实测2.5GB卷把
  C盘撑爆引擎500);mysql不映射宿主机3306
- 前端Dockerfile: npm ci→install(本地/容器npm版本锁漂移)
- 五服务实测:nginx→backend→MySQL全链路返回真实数据(客户6859/A**杰25条
  /搜索56条),媒体49536文件bind mount直读

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-22 12:40:44 +08:00
浅念 2175cb0169 feat(deploy): MySQL容器实测打通(3个方言bug修复)+部署文档
- repos: on_duplicate只更新实际插入列(fetched_at等Python-default列,
  SQLite excluded容忍/MySQL new.*直接报Unknown column)
- repos: _coerce_int增加日期字符串→ms epoch分支 + _INT_FIELDS补
  last_update/last_chat_time/timestamp/update_time(字符串直通BigInteger)
- models: wechat_account.db_size Integer→BigInteger(实测2.17GB超32位上限)
- compose: mysql不映射宿主机3306(本机已占;容器内服务名互联)
- docs/DEPLOY.md: 服务器部署全指南(架构/步骤/数据迁移/运维命令/注意事项)
- 容器实测:Playwright抓取55账号→MySQL upsert全通

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-22 10:40:04 +08:00
浅念 3dc80805fa feat(deploy): Docker镜像支持页面抓取(Playwright+Chromium+scripts/)+full_sync可移植
- Dockerfile:Chromium headless 系统依赖 + playwright install chromium
  + COPY scripts/(调度器 _page_subprocess 的入口,之前镜像里没有)
- full_sync_all.sh:DB_URL 外部可覆盖(容器 MySQL)、python 路径可移植
  (容器 PATH / 本地 venv 双兼容)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-22 10:15:58 +08:00
浅念 94c2df4612 test(scheduler): 更新messages job断言(四类消息命令序列)
Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-21 15:17:40 +08:00
浅念 d4bc3f5476 feat(scheduler): 4h增量接入全部四类消息(wa-messages/group-messages/wa-group-messages,水位后单对话1页可承受)
Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-21 15:15:24 +08:00
浅念 ef2df073a8 feat(ops): 服务健康检查脚本(检测+拉起后端/前端/调度器)
Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-21 15:10:20 +08:00
浅念 e8c77412fa feat(search): FTS5 trigram全文索引(中文搜索3.95s→0.003s,1300倍)
- message_fts 外部内容虚拟表+trigram分词(中文子串可MATCH,无需分词库)
- 3个触发器随ORM upsert自动同步索引(抓取器零改动)
- 搜索路由:≥3字走FTS MATCH,<3字/MySQL回退LIKE
- 实测:搜「大众途安」56条,LIKE全扫3.95s→FTS 0.003s;索引+300MB
- 7个新测试(建表幂等/触发器同步/中文匹配/短查询回退/未建索引回退),426绿

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-21 15:08:26 +08:00
浅念 621c2cc929 feat(scheduler): 每周日05:00全量对齐job(四消息实体--full-history,修撤回/编辑+消除滞后窗口)
Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-21 13:52:59 +08:00
浅念 0a161c7b6a fix(sync): 增量跳过条件去掉+60s缓冲(会造成永久漏消息)
若新消息恰好落在水位后60s内,云客act永远≤wm+60s→每轮跳过→消息永久漏。
act==wm(云客最新==我们最新,同源ms时间戳精确相等)才跳,消除该窗口。

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-21 13:43:42 +08:00
浅念 9bca5fc08a feat(sync): 消息全面增量同步(水位+跳过+触底停,4h周期从小时级降到分钟级)
- 每对话水位=本地max(timestamp);请求带start=水位只拉新消息
- 云客last_chat_time≤水位的对话整跳过(0请求)——实测7046对话3150被跳过(45%)
- 翻页遇≤水位消息即停(已同步区),页数从几十页降到1页
- 微信1:1/WA 1:1/微信群/WA群四个抓取器全接入;CLI --full-history强制全量
- 实测:每对话1页(~3s),3895待访对话约3.5h(含补积压的首次全量);
  稳态后每4h只访有新活动的对话(几十~几百个,15-30min)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-21 12:20:21 +08:00
浅念 10baa22acb fix(media): tried集合分片进NOT IN(3万+msg_id超SQLite变量上限,42k后崩;每晚全量媒体步同bug)
Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-21 11:26:50 +08:00