Files
soul-yongping/.cursor/meeting/2026-03-10_文章详情三端功能对齐与开发.md

3.9 KiB
Raw Blame History

会议纪要 - 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

  1. model/person.goCkbApiKey 字段VARCHAR 100
  2. handler/db_person.go DBPersonSave 接收并存储 ckbApiKey
  3. model/ckb_lead.goTargetPersonIDSource 字段落库
  4. handler/ckb.go CKBLead 接收 targetUserId/targetNickname/source,查 persons.ckb_api_key,有则用,无则 fallback 全局 Key成功文案动态化"提交成功XXX 会尽快联系您"
  5. scripts/add-persons-ckb-api-key.sql 手动迁移备用脚本

管理端soul-admin

  1. components/RichEditor.tsx PersonItem 接口加 ckbApiKey?: string
  2. pages/content/ContentPage.tsx
    • loadPersons 映射 ckbApiKey
    • newPerson state 加 ckbApiKey
    • Person 配置卡片加「存客宝密钥」输入框(新建时可填)
    • Person 列表每行加铅笔编辑按钮,展开内联输入框可直接修改密钥
    • 密钥状态 badge有密钥显示绿色 密钥 ✓,无则灰色 用默认密钥

小程序miniprogram

  1. utils/contentParser.js 全面重写:
    • 新增 parseBlockToSegments:统一处理 mention / linkTag(span) / linkTag(a) / image 四种内联元素
    • 新增解码工具函数 decodeEntities
    • 纯图片行独立成段,不与文字混排
  2. pages/read/read.js
    • 删除重复的旧版 loadContentBug覆盖新版
    • 新版 loadContent 补全:成功后写本地缓存,缓存降级时恢复 partTitle/chapterTitle
    • 新增 onLinkTagTap:内页路径直接 navigateTo,外链复制到剪贴板并提示
    • 新增 onImageTap:点击图片全屏预览(wx.previewImage
  3. pages/read/read.wxml 段落块新增渲染分支:
    • linkTag<text class="link-tag" bindtap="onLinkTagTap">#{{label}}</text>
    • image<image class="content-image" bindtap="onImageTap">
  4. pages/read/read.wxss 新增 .link-tag(金色 #FFD700.content-image(宽度铺满)样式

完整加好友链路

管理端Person 配置填写存客宝密钥ckbApiKey
  ↓
文章写入 content → "@[卡若](karuo)" / "#[标签名](url)" / <img src>
  ↓
小程序 contentParser 解析 → segments
  ↓ 点击 @卡若
POST /api/miniprogram/ckb/lead
  { targetUserId: "karuo", targetNickname: "卡若", source: "article_mention" }
  ↓
后端查 persons WHERE person_id='karuo' → 取 ckb_api_key
  → 有:用该人专属密钥推存客宝
  → 无fallback 全局 CKB_LEAD_API_KEY
  ↓
落库 ckb_lead_recordstarget_person_id, source

待办

角色 任务
产品经理 确认 #linkTag 外链的交互体验(复制 vs 打开 webview是否符合预期
测试人员 联调:@某人点击 → 存客宝各渠道收线索;#标签点击 → 复制/跳转;图片点击 → 全屏预览