日期:2026-08-14
工程:mobile-h5(主)、菜单 SQL;绑定链路复用既有mobile-oa-h5/mp-bind
相关:docs/superpowers/specs/2026-08-13-oa-wechat-service-notify-design.md
Demo:mobile-ui/zkxw-mobile-wechat-notify-menu-demo.html
图标:mobile-h5/static/menu-icons/oa-wechat-notify.png
微信审批通知需要两步:
wx_mp_openid)当前入口分散:
用户容易只做一步,且不清楚两者关系。
mp-bind 授权协议;仅调整小程序引导与入口。| 决策点 | 结论 |
|---|---|
| 入口策略 | 仅保留首页菜单;登录页与首页顶栏入口均去掉 |
| 菜单文案 | 固定为「开启微信通知」(已开启后也不改名) |
| 菜单位置 | 「抄送我的」之后 |
| 菜单图标 | oa-wechat-notify.png(由 开启通知.png 拷贝并英文化命名) |
| 页面结构 | 原生步骤页:步骤 1 关注 → 步骤 2 绑定 |
| 顶部总状态 | 不展示「已开启 / 未开启」横幅;仅步骤卡片角标表达进度 |
| 步骤 1 完成判定 | 用户点击「我已关注」自行确认(本地持久化) |
| 步骤 2 | 跳转既有 /pages/oa/mp-bind/index(web-view 授权) |
| 技术方案 | 独立原生页 + 复用 mp-bind(方案 1) |
首页菜单宫格
… → 抄送我的 → 开启微信通知 → pages/oa/wechat-notify/index
├─ 步骤1 关注服务号
│ openOfficialAccountProfile / 二维码
│ 「我已关注」→ 本地标记
└─ 步骤2 绑定当前账号
→ pages/oa/mp-bind/index(既有)
删除:
pages/login/index.vue:login-follow-mp 区块及相关二维码弹层(若仅服务于该入口)pages/index/index.vue:顶栏 home-mp-notify 文案与 onTapMpNotify保留:
pages/oa/mp-bind/index.vue、mobile-oa-h5 OaMpBind、后端 mp-bind / mp-bind-statusMP_GH_USERNAME、MP_QRCODE_URL 配置(改由新步骤页使用)pages/oa/wechat-notify/index)开启微信通知步骤 1 · 关注服务号
| 状态 | UI |
|---|---|
| 未确认 | 角标「未完成」;主按钮「去关注」 |
| 点击去关注 | 优先 wx.openOfficialAccountProfile;失败则展开二维码(长按识别) |
| 二维码展开时 | 显示「我已关注」 |
| 已确认 | 角标「已完成」;按钮可改为「重新打开关注页」(仍可打开关注/二维码) |
「我已关注」写入本地(建议 key 含 userId/username,换账号不串数据)。不调用后端。
步骤 2 · 绑定当前账号
| 状态 | UI |
|---|---|
| 步骤 1 未确认 | 主按钮禁用,文案「请先完成步骤 1」 |
| 步骤 1 已确认且未绑定 | 「去绑定」→ navigateTo mp-bind |
| 已绑定 | 角标「已完成」;按钮「已绑定」禁用(不强制提供解绑) |
绑定状态来源:GET /mini/auth/mp-bind-status(onShow 刷新)。从 mp-bind 返回后自动刷新。
若接口已 bound=true,即使本地未点「我已关注」,也应将步骤 1 视为完成(避免已绑用户被步骤顺序卡住)。规则:
bound === true → 步骤 1、步骤 2 均显示已完成。bound === false → 步骤 2 未完成;步骤 1 以本地「我已关注」为准。oa-wechat-notify(PNG 自带色,iconBg: transparent,与其它 OA 宫格一致)navigateTo /pages/oa/wechat-notify/indexfetchMpBindStatus(若仅服务于顶栏)。新增 sys_menu(幂等插入),示例字段:
| 字段 | 值 |
|---|---|
| id | MINI000000000000000000000000OA007 |
| menu_name | 开启微信通知 |
| path | /pages/oa/wechat-notify/index |
| perms | mini:oa:wechat-notify |
| order_num | 70(抄送为 60,紧随其后) |
| icon(若菜单表/接口支持) | oa-wechat-notify |
SQL 落 docs/sql/(新建或追加既有 mobile OA 菜单脚本),与 mobile_menu_oa_task_centers.sql 风格一致。
mobile-h5/components/van-icon/van-icon.vue:PNG_ICONS['oa-wechat-notify']mobile-h5/utils/menu-icon-colors.js:加入 OA_PNG_ICONS 与 transparent 默认mp_follow_confirmed:{userId} → '1'| 动作 | 路径 |
|---|---|
| 新增 | mobile-h5/pages/oa/wechat-notify/index.vue |
| 注册 | mobile-h5/pages.json |
| 删除入口 | mobile-h5/pages/login/index.vue、login.scss(相关样式) |
| 删除入口 | mobile-h5/pages/index/index.vue(顶栏通知) |
| 图标已有 | mobile-h5/static/menu-icons/oa-wechat-notify.png |
| 映射 | van-icon.vue、menu-icon-colors.js |
| SQL | docs/sql/mobile_menu_oa_wechat_notify.sql(或等价) |
| Demo(已有) | mobile-ui/zkxw-mobile-wechat-notify-menu-demo.html |
| 文档修订 | 在 2026-08-13-oa-wechat-service-notify-design.md §6.1/6.2 加注:入口已迁移至本设计 |
不改:backend 推送与 bind API、mobile-oa-h5 OaMpBind 授权流程。
| 情况 | 行为 |
|---|---|
| 用户谎称已关注 | 步骤 2 仍可绑;未真正关注则后续模板发送失败/skip,与现网一致 |
| 绑定失败 | mp-bind H5 展示错误;返回设置页后仍为未绑定 |
| openOfficialAccountProfile 不可用 | 仅二维码路径 |
| 未登录进设置页 | 沿用全局登录拦截 / forceRelogin |
| 已绑定用户 | 两步均已完成,无需再点「我已关注」 |
本设计替代 2026-08-13-oa-wechat-service-notify-design.md 中 §6.1(登录页关注)与 §6.2(工作台顶栏/个人中心绑定入口)的产品入口描述;推送、绑定 API、深链会话等其余章节仍有效。