会议纪要 - 2026-03-10 | 文章详情三端功能对齐与开发
基本信息
- 时间:2026-03-10
- 议题:文章详情 @某人/@linkTag/图片 三端功能对齐,发现 Bug,完成开发
- 参与角色:产品经理、后端开发、管理端开发工程师、小程序开发工程师
现状摸底(开发前)
| 功能 |
后端 |
管理端 |
小程序 |
状态 |
| @mention 存储格式 |
content 字段存 TipTap HTML |
RichEditor 插入 <span data-type="mention"> |
contentParser 解析 ✅ |
✅ 正常 |
| @mention 点击加好友 |
CKBLead 接口 只用全局 Key |
— |
已传 targetUserId,后端接不住 |
❌ 缺密钥路由 |
| #linkTag 存储格式 |
content 字段存 <a href> |
insertLinkTag 插入标准 <a> |
未解析,直接被剥离 |
❌ 不可点 |
| 图片展示 |
存 <img src> |
编辑器支持上传插图 |
未解析,被剥离 |
❌ 不显示 |
| loadContent 重复定义 |
— |
— |
两个同名函数,旧版覆盖新版 |
❌ Bug |
本次完成的开发
后端(soul-api)
model/person.go 加 CkbApiKey 字段(VARCHAR 100)
handler/db_person.go DBPersonSave 接收并存储 ckbApiKey
model/ckb_lead.go 加 TargetPersonID、Source 字段落库
handler/ckb.go CKBLead 接收 targetUserId/targetNickname/source,查 persons.ckb_api_key,有则用,无则 fallback 全局 Key;成功文案动态化("提交成功,XXX 会尽快联系您")
scripts/add-persons-ckb-api-key.sql 手动迁移备用脚本
管理端(soul-admin)
components/RichEditor.tsx PersonItem 接口加 ckbApiKey?: string
pages/content/ContentPage.tsx
loadPersons 映射 ckbApiKey
newPerson state 加 ckbApiKey
- Person 配置卡片加「存客宝密钥」输入框(新建时可填)
- Person 列表每行加铅笔编辑按钮,展开内联输入框可直接修改密钥
- 密钥状态 badge:有密钥显示绿色
密钥 ✓,无则灰色 用默认密钥
小程序(miniprogram)
utils/contentParser.js 全面重写:
- 新增
parseBlockToSegments:统一处理 mention / linkTag(span) / linkTag(a) / image 四种内联元素
- 新增解码工具函数
decodeEntities
- 纯图片行独立成段,不与文字混排
pages/read/read.js
- 删除重复的旧版
loadContent(Bug:覆盖新版)
- 新版
loadContent 补全:成功后写本地缓存,缓存降级时恢复 partTitle/chapterTitle
- 新增
onLinkTagTap:内页路径直接 navigateTo,外链复制到剪贴板并提示
- 新增
onImageTap:点击图片全屏预览(wx.previewImage)
pages/read/read.wxml 段落块新增渲染分支:
linkTag → <text class="link-tag" bindtap="onLinkTagTap">#{{label}}</text>
image → <image class="content-image" bindtap="onImageTap">
pages/read/read.wxss 新增 .link-tag(金色 #FFD700)、.content-image(宽度铺满)样式
完整加好友链路
待办
| 角色 |
任务 |
| 产品经理 |
确认 #linkTag 外链的交互体验(复制 vs 打开 webview)是否符合预期 |
| 测试人员 |
联调:@某人点击 → 存客宝各渠道收线索;#标签点击 → 复制/跳转;图片点击 → 全屏预览 |