浅念
6ff288f1d3
feat(groups): chat_group 补 6 群主/建群列 + 复合PK迁移修复 + 存量回填
...
对齐云客员工聊天窗口·微信群 tab(2026-08-25 真机验证 raw_json 键):
- ChatGroup 加列 owner_name/owner_wxid/owner_alias/owner_avatar/
friend_count/create_time(全 nullable)
- scraper _normalize_chat_group 同名提取;createTime 兼容 ms-int 与
'YYYY-MM-DD HH:mm:ss'(smoke.db 实测 1105 行全为后者),复用
_parse_add_time 归一 ms-epoch
- 迁移 099ac2097fa2:加 6 列 + 修复 Task1 评审遗留 drift——PK 由单列
room_id 变更为复合 (room_id, channel, owner_account_id) 且
owner_account_id NOT NULL(对齐模型 8a99940;smoke.db 1105 行无 NULL,
未兜底编造数据);SQLite 走 batch 重建(copy_from 显式旧结构),
MySQL 渲染为直接 ALTER(离线 --sql 已验证)
- 回填脚本 scripts/backfill_chat_group_fields.py(幂等,逐列只补空);
smoke.db 实跑 backfilled 1105/1105,重跑 0/1105
- GroupOut 加 6 字段(model_validate 自动输出,路由无改)
Co-Authored-By: Claude <noreply@anthropic.com >
2026-08-25 14:32:12 +08:00
浅念
90c28f4c7b
feat(scraper): moments 实体(浏览器fetch getFriendsterInfo,秒→ms,hashNext翻页,接入full_sync+4h调度+图片media)
...
- scrape_via_page:_normalize_moments(createTime秒×1000,缺id丢弃)+
_iter_moments_pages 翻页内核(fetch回调注入,sleep可注入,hashNext假/
信封异常/max_pages 上限即止)+ scrape_moments(逐员工遍历wechat_account,
form小驼峰,首页code≠10000告警cookie失效,换页重试惯例)+CLI注册moments
- media:download_moments_images(image_urls JSON数组展开去重,MomentsPost无
回链列→用Media.original_url做已下载标记,分片IN防SQLite变量上限,批间commit)
接入scrape_media第4源
- full_sync_all.sh:9c步moments(media前,同轮图片即可本地化)+汇总加moments计数
- scheduler:4h messages job 末尾追加 moments --max-pages 3 浅扫(全量翻页
由每日full承担);测试断言7条命令序列
- tests/test_scrape_moments.py:归一化(秒→ms/空安全/坏createTime)+翻页内核
(两页累积停止/hashNext假单页/max_pages防死循环/丢id行/坏信封)+图片本地化
(一帖两图/幂等跳过/非http跳过+500容错);全套440测试通过
Co-Authored-By: Claude <noreply@anthropic.com >
2026-08-25 14:07:39 +08:00
浅念
b7669199f8
feat(db): moments_post 表+upsert(朋友圈实体,PK=云客data.id,create_time统一ms)
...
- MomentsPost 模型:moments_post 表,PK=id(云客 getFriendsterInfo data.id),
wechat_id/create_time 建索引,praise/comment/image 存 JSON 列
- 迁移 524da8d2d597(手写 create_table,已应用到 smoke.db 并在临时 SQLite
全链路 upgrade/downgrade 验证)
- repos.upsert_moments_posts:批量幂等 upsert;附带修 _build_column_values
对 JSON 列表的误 join(标量列 join 保持不变,dept_route 旧测试仍过)
- 修复 3 个 chat_group 旧测试缺 owner_account_id(2026-08-24 复合主键遗留)
- 全套 430 测试通过
Co-Authored-By: Claude <noreply@anthropic.com >
2026-08-25 13:44:54 +08:00
浅念
2f73d79a6d
docs(plan): 吸收评审4条(groups路由实为model_validate免改/客户搜索需加q参数/moments调度+图片本地化补step/行号校正)
...
Co-Authored-By: Claude <noreply@anthropic.com >
2026-08-25 12:35:41 +08:00
浅念
05a31022db
docs(plan): 员工聊天窗口五视图实施计划(15任务:后端7+前端8,TDD+真机判别spike)
...
Co-Authored-By: Claude <noreply@anthropic.com >
2026-08-25 12:31:53 +08:00
浅念
00180ef479
docs(spec): 二次审计修订8项(微信群表列真机结构/统计明细分tab列型/phone_call userId转换坑/类型归一化回填任务/通讯录批量操作/msgid定位/chat_group补列/左栏折叠)
...
Co-Authored-By: Claude <noreply@anthropic.com >
2026-08-25 12:10:16 +08:00
浅念
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