feat(staff-friends): 员工客户列表独立页——对齐云客员工详情,好友数/微信群数下钻

员工列表点「好友数」原先跳全局 /customers?owner_account_id=x,布局与全局
列表无异且计数/分页绑全局声明口径(同日 dfa4fdd 修的显示 bug),与云客
「员工名下客户列表」体验割裂。新页 /staff-friends/:ownerId/:tab:

- 微信客户/微信群两 tab(对齐云客截图);标题=员工显示名(入口直带,
  直链经 /api/accounts 解析),返回箭头回员工列表
- 搜索(昵称/微信号/备注名/手机号,服务端 q)+ 查询/导出 CSV
- 发送/接收条数=Customer.send_num/receive_num 累计值(CustomerOut 补
  两列,同步自云客 friend 记录,与截图同源)
- 勾选批量「导出聊天记录」:新端点 GET /api/export/chat-html-zip,复用
  chat-html 渲染器每会话一个 HTML 打 zip(文件名=备注>昵称>friend_id,
  非法字符清洗;单会话 5000 行截断告警;一次上限 50 会话防误选打爆)
- 行内:查看聊天记录→staff-chat;导出HTML聊天记录(时间范围弹窗)
- WA 行保持原入口(该页暂仅微信)

后端 605 测试绿(zip 新 4 例);本地浏览器端到端验证:过滤 9 条/勾选
激活/群 tab/返回箭头;zip 产物 application/zip 双会话双气泡。

Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
浅念
2026-09-08 16:14:44 +08:00
parent dfa4fdd420
commit 2e526cd056
7 changed files with 812 additions and 6 deletions
+9
View File
@@ -117,6 +117,15 @@ const routes: RouteRecordRaw[] = [
props: true,
meta: { title: '员工聊天窗口' },
},
{
// 员工客户列表(2026-09-08 对齐云客员工详情):员工列表「好友数/微信群数」
// 账号维度下钻,与全局 /customers 分离; ?name= 直带员工显示名(直链自动解析)
path: '/staff-friends/:ownerId/:tab(customers|groups)?',
name: 'staff-friends',
component: () => import('@/views/StaffFriends.vue'),
props: true,
meta: { title: '员工客户列表' },
},
{
// 登录页(public:未登录可进;守卫据此放行)
path: '/login',