Files
shencaisuan/docs/superpowers/plans/2026-07-07-functional-parity-plan.md
2026-07-07 17:07:44 +08:00

568 lines
17 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 功能等价修复实施计划
> **给后续执行者:** 实施本计划时必须使用 `superpowers:subagent-driven-development`(推荐)或 `superpowers:executing-plans`,按任务逐项执行。任务步骤使用复选框格式,方便跟踪进度。
**目标:**`shencaisuan` 在功能上与参考项目 `3Dyjs` 保持一致,同时保留当前项目的换皮样式、页面组织方式和已经明确允许的差异。
**架构:**`3Dyjs` 作为功能事实标准。先补齐公共业务规则,再让各页面复用同一套规则,避免每个页面各自判断。视觉样式可以不同,但接口、参数、状态判断、标色规则、购买规则、注册登录、分销、专家申请、文章权限等功能必须和参考项目一致,除非本计划明确列为允许差异。
**技术栈:** 静态 HTML 页面、Layui、jQuery、WangEditor、`utils/*.js` 浏览器全局工具、`utils/ApiClient.js` 统一接口、`utils/CommonUtil.js` 公共渲染和工具方法。
## 全局约束
- 参考项目路径:`C:\Users\Administrator\Desktop\job\3Dyjs`
- 当前项目路径:`C:\Users\Administrator\Desktop\job\shencaisuan`
- 功能行为默认对齐参考项目,除非写在“允许差异”里。
- 样式、品牌、公共导航外观、底部外观、移动端视觉表现可以不同。
- 当前项目不需要 `zhuanjia.html`,不要恢复这个页面。
- 如果公共导航或接口返回入口指向 `zhuanjia.html`,必须过滤或改写到当前项目有效页面。
-`docs/reference-project-function-diff-2026-07-07.md` 作为差异对比基线。
- 不删除、不回退与本任务无关的用户已有改动。
- 每个任务完成后必须做最小可行验证。
---
## 允许差异
这些差异是当前项目明确允许的,不作为缺陷处理:
- `html/zhuanjia.html` 不属于当前项目。
- 视觉皮肤、间距、渐变、导航底部样式、移动端呈现可以不同于参考项目。
- 部分页面可以合并,但合并后必须保留等价功能和有效入口。
- 客服二维码使用当前项目本地图片:`public/img/kfwx.jpg``public/img/kfqq.jpg`
- 工信部备案链接必须使用 `https://beian.miit.gov.cn/`
## 任务 1:锁定导航和允许差异契约
**涉及文件:**
- 修改:`docs/reference-project-function-diff-2026-07-07.md`
- 检查:`utils/CommonUtil.js`
- 检查:`html/index.html`
- 检查:所有渲染公共导航的 `html/*.html`
**输入:**
- 当前项目明确不需要 `zhuanjia.html`
**输出:**
- 找出当前项目里所有仍可能跳转到 `zhuanjia.html` 的运行时代码路径。
- [ ] 步骤 1:搜索错误专家页入口。
执行:
```powershell
rg -n "zhuanjia\.html|专家推荐" html utils public
```
期望:
- 所有 `zhuanjia.html` 结果都必须被检查。
- 只出现在文档里的结果允许存在。
- 当前项目运行时导航不能打开缺失的 `zhuanjia.html`
- [ ] 步骤 2:检查 `CommonUtil.js` 的导航映射。
检查菜单名称为“专家推荐”或路径为 `zhuanjia.html` 时,当前公共工具如何处理。
期望:
- 公共导航不会打开缺失的 `zhuanjia.html`
- 如果接口返回专家推荐入口,当前代码必须过滤它,或改写到一个有效页面。
- [ ] 步骤 3:如果发现新风险,同步更新差异文档。
期望:
- 文档继续把 `zhuanjia.html` 标为允许差异。
- 文档只记录真实运行时风险。
- [ ] 步骤 4:验证文档格式。
执行:
```powershell
git diff --check -- docs/reference-project-function-diff-2026-07-07.md
```
期望:无输出。
## 任务 2:补齐发布权限公共契约
**涉及文件:**
- 新增:`utils/PublishPermission.js`
- 修改:`html/fabumianfeiwenzhang.html`
- 修改:`html/fufei.html`
- 参考:`C:\Users\Administrator\Desktop\job\3Dyjs\utils\PublishPermission.js`
- 参考:`C:\Users\Administrator\Desktop\job\3Dyjs\html\fabumianfeiwenzhang.html`
- 参考:`C:\Users\Administrator\Desktop\job\3Dyjs\html\fufei.html`
**输入:**
- `ApiClient.API.mineSummary`
**输出:**
- 全局对象:`PublishPermission.parseSummary(userData, options)`
- 权限对象字段:`hasExpertIdentity``isRegularExpert``canFree``canPaid``quotaExempt``todayFreeArticleCount``requiredDailyFreeArticleCount``paidReason``reason`
- [ ] 步骤 1:按参考项目逻辑新增 `utils/PublishPermission.js`
期望行为:
- 专家身份兼容字段:`is_expert``isExpert``expert``is_regular_expert``isRegularExpert``regularExpert`、文本型 `expertStatus`
- 付费发布兼容字段:`canPublishPayArticle``payArticleFreeQuotaExempt``todayApprovedFreeArticleCount``requiredDailyApprovedFreeArticleCount``payArticlePublishReason`
- 默认每天需要审核通过的免费文章数量为 `2`
- [ ] 步骤 2:两个发布页都引入新脚本。
期望增加:
```html
<script src="../utils/PublishPermission.js"></script>
```
- [ ] 步骤 3:替换 `fabumianfeiwenzhang.html` 里的本地权限判断。
期望:
- 免费发布页请求 `mineSummary`
- 使用 `PublishPermission.parseSummary(res.data)`
- `canFree` 为假时禁止发布,并引导到 `apply.html`
- “发布付费文章”tab 使用 `canPaid``paidReason` 判断。
- [ ] 步骤 4:给 `fufei.html` 增加付费发布拦截。
期望:
- 页面加载付费发布数据前先请求 `mineSummary`
- `canPaid` 为假时显示原因,并跳回 `fabumianfeiwenzhang.html`
- 不改变现有视觉表单和选号逻辑。
- [ ] 步骤 5:静态验证。
执行:
```powershell
rg -n "PublishPermission|parsePublishPermission|loadTodayPublishedFreeCount|checkPaidPublishPermission" html\fabumianfeiwenzhang.html html\fufei.html utils\PublishPermission.js
```
期望:
- `PublishPermission.js` 存在,并暴露 `parseSummary`
- 两个发布页调用 `PublishPermission.parseSummary`
- 旧的重复权限解析函数被删除,或不再被使用。
- [ ] 步骤 6:语法验证。
执行:
```powershell
node -c utils\PublishPermission.js
```
期望:没有语法错误。
## 任务 3:修正个人中心契约和重复 DOM 风险
**涉及文件:**
- 修改:`html/usercenter.html`
- 参考:`C:\Users\Administrator\Desktop\job\3Dyjs\html\usercenter.html`
**输入:**
- `CommonUtil.getExpertState(user)`
- `ApiClient.js` 中已有的账号概要和资料接口
**输出:**
- 微信绑定区域只有一个明确 DOM 所有者,或使用 class 统一更新多个展示点。
- 资料编辑只走一条清晰提交路径。
- [ ] 步骤 1:搜索 `usercenter.html` 里的重复 ID。
执行:
```powershell
rg -n "wechat-bind-card|wechat-bind-desc|wechat-bind-button|editProfile|expertStatus|expertEnabled" html\usercenter.html
```
期望:
- 编辑前先确认重复 ID 位置。
- [ ] 步骤 2:把重复 ID 改成单一所有者或 class 更新。
期望:
- 页面中不再有重复 `id`
- 重复视觉区域使用 class。
- 微信绑定状态能同步更新所有可见区域。
- [ ] 步骤 3:验证专家申请按钮逻辑。
期望:
- 已是专家:展示专家相关操作,不显示重复申请。
- 审核中:显示“申请审核中”,不允许重复提交。
- 非专家:显示“专家申请”。
- `expertStatus: 0` 这种 falsey 值不能被丢失。
- [ ] 步骤 4:验证资料编辑契约。
期望:
- 昵称字段提交为 `nickName`
- 密码只有在两次输入都存在并一致时提交。
- 头像上传结果提交为 `avatar`
- 没有任何修改时提示“暂无修改”,不发送空请求。
- [ ] 步骤 5:静态验证。
执行:
```powershell
git diff --check -- html\usercenter.html
```
期望:无输出。
## 任务 4:对齐登录、注册、找回密码、验证码和推广绑定
**涉及文件:**
- 修改:`utils/AuthPageUtil.js`
- 修改:`html/login.html`
- 修改:`html/reg.html`
- 修改:`html/repwd.html`
- 参考:`C:\Users\Administrator\Desktop\job\3Dyjs\utils\AuthPageUtil.js`
- 参考:`C:\Users\Administrator\Desktop\job\3Dyjs\html\login.html`
**输入:**
- `referralBindPreview`
- `referralBind`
- 登录、注册、短信验证码、滑块验证码接口
**输出:**
- 邀请码捕获、预览、缓存、登录/注册后绑定流程与参考项目一致。
- [ ] 步骤 1:对比 `AuthPageUtil.js` 和参考项目。
执行:
```powershell
rg -n "invite|referral|captcha|slide|viewport|resize|bind" utils\AuthPageUtil.js C:\Users\Administrator\Desktop\job\3Dyjs\utils\AuthPageUtil.js
```
期望:
- 编辑前列出缺失的邀请码和滑块移动端行为。
- [ ] 步骤 2:迁移邀请码缓存和登录/注册后绑定逻辑。
期望:
- 支持参考项目里的邀请参数。
- 邀请码能在登录/注册页面跳转之间保留。
- 登录或注册成功后,在合适时机调用 `referralBind`
- [ ] 步骤 3:迁移滑块验证码移动端定位逻辑。
期望:
- 移动端验证码弹层居中。
- 多次打开不会残留旧遮罩或旧状态。
- [ ] 步骤 4:确认登录注册页面仍保持当前皮肤。
期望:
- 不回退成参考项目旧样式。
- 表单字段保持当前布局,但行为与参考项目一致。
## 任务 5:对齐免费文章列表、详情、发布和收藏
**涉及文件:**
- 修改:`html/mianfeilist.html`
- 修改:`html/mianfei.html`
- 修改:`html/fabumianfeiwenzhang.html`
- 修改:`html/mianfeishoucang.html`
- 检查:`html/c.html`
- 参考:`C:\Users\Administrator\Desktop\job\3Dyjs\html\mianfeilist.html`
- 参考:`C:\Users\Administrator\Desktop\job\3Dyjs\html\mianfei.html`
**输入:**
- `ApiClient.API` 中免费文章列表、详情、收藏相关接口
**输出:**
- 免费文章列表数量、分页、详情渲染、收藏行为与参考项目等价。
- [ ] 步骤 1:对比免费文章列表接口参数。
期望:
- `pageNum``pageSize``menuId`、状态/类型筛选与参考项目一致。
- 如果页面合并导致参数适配不同,需要在文档中记录。
- [ ] 步骤 2:验证作者和标题展示。
期望:
- 头像、`issuer` 昵称、标题、日期按当前需求展示。
- 标题有最大宽度和省略号。
- [ ] 步骤 3:确定收藏页主入口。
期望:
- 要么 `mianfeishoucang.html` 负责所有收藏 tab`c.html` 变成兼容入口。
- 要么两个页面职责明确,不重复。
- [ ] 步骤 4:验证富文本安全。
期望:
- 文章内容渲染达到参考项目同等级别的净化或转义要求。
- 不出现未处理的危险 HTML 注入。
## 任务 6:对齐付费文章、专家详情、购买和预购
**涉及文件:**
- 修改:`html/cai.html`
- 修改:`html/caiinfo.html`
- 修改:`html/fufei.html`
- 修改:`html/usercenter.html`
- 参考:`C:\Users\Administrator\Desktop\job\3Dyjs\html\cai.html`
- 参考:`C:\Users\Administrator\Desktop\job\3Dyjs\html\caiinfo.html`
- 参考:`C:\Users\Administrator\Desktop\job\3Dyjs\html\fufei.html`
**输入:**
- 专家排行、付费文章列表/详情、购买、预购、收藏、钱包概要接口
**输出:**
- 购买、预购、已购、收藏、余额判断等行为与参考项目等价。
- [ ] 步骤 1:对比 `caiinfo.html` 状态归一化。
期望:
- 已购买、可预购、已预购、文章收藏、专家收藏等状态判断与参考项目一致。
- [ ] 步骤 2:对比支付请求参数。
期望:
- 价格、文章 ID、菜单 ID、专家 ID、预购字段与参考项目接口契约一致。
- [ ] 步骤 3:验证个人中心付费文章和购买记录。
期望:
- 我的付费文章、已购文章、删除购买记录、空状态与参考项目等价。
## 任务 7:对齐走势图渲染规则
**涉及文件:**
- 新增或修改:`public/js/trend-pages.js`
- 修改:`html/fc3d.html`
- 修改:`html/pl3.html`
- 修改:`html/pl5.html`
- 修改:`html/kl8.html`
- 修改:`html/ssq.html`
- 修改:`html/cjdlt.html`
- 修改:`html/qlc.html`
- 修改:`html/qxc.html`
- 参考:`C:\Users\Administrator\Desktop\job\3Dyjs\public\js\trend-pages.js`
**输入:**
- `lotteryTrend`
- `latestLotteryResult`
**输出:**
- 期数选项、走势图行、颜色标记、每 10 期分隔线、统计行、横向滚动规则按彩种与参考项目一致。
- [ ] 步骤 1:对比 8 个走势图页面和参考配置。
期望:
- 确认每个彩种的号码分区、蓝球规则、特别号列、统计行。
- [ ] 步骤 2:实现当前项目共享走势图渲染,或逐页完全对齐。
期望:
- 期数按钮为:`10期``20期``30期``60期`
- 每 10 期使用与参考项目粗细一致的分隔线。
- 红球为红色,蓝球为蓝色,特殊色只在参考项目使用时保留。
- 快乐8 不出现错误的“开奖号”表头,并正确展示 20 个号码。
- [ ] 步骤 3:静态验证 8 个页面。
执行:
```powershell
rg -n "10期|20期|30期|60期|trend-period-separator|lotteryTrend|latestLotteryResult" html\fc3d.html html\pl3.html html\pl5.html html\kl8.html html\ssq.html html\cjdlt.html html\qlc.html html\qxc.html
```
期望:
- 每个页面都有一致的期数选项和数据 fallback 策略。
## 任务 8:对齐钱包、充值、提现和资金明细
**涉及文件:**
- 修改:`html/chongzhi.html`
- 修改:`html/tixian.html`
- 修改:`html/tixianlist.html`
- 修改:`html/jine.html`
- 参考:`C:\Users\Administrator\Desktop\job\3Dyjs\html\tixian.html`
- 参考:`C:\Users\Administrator\Desktop\job\3Dyjs\html\tixianlist.html`
**输入:**
- 钱包概要、充值配置、充值下单、订单状态、提现账户、提现提交、资金流水接口
**输出:**
- 余额展示、二维码上传、默认账户、提现提交、记录筛选行为与参考项目等价。
- [ ] 步骤 1:对比钱包接口 key 和请求参数。
期望:
- 当前页面调用的接口语义与参考项目一致。
- [ ] 步骤 2:验证充值余额和订单轮询。
期望:
- 用户能看到相关余额。
- 二维码和订单状态轮询在成功或失败后正确停止。
- [ ] 步骤 3:验证提现账户管理。
期望:
- 新增、编辑、删除、设默认、二维码上传、提交提现与参考项目等价。
## 任务 9:对齐推广和分销流程
**涉及文件:**
- 修改:`html/tuiguang.html`
- 修改:`html/fenxiao.html`
- 修改:`html/wodefenxiao.html`
- 修改:`utils/AuthPageUtil.js`
- 参考:`C:\Users\Administrator\Desktop\job\3Dyjs\html\fenxiao.html`
- 参考:`C:\Users\Administrator\Desktop\job\3Dyjs\html\wodefenxiao.html`
**输入:**
- 推广概要、邀请列表、返佣列表、绑定预览、绑定提交接口
**输出:**
- 推广链接、二维码、绑定关系、邀请列表、返佣列表行为与参考项目等价。
- [ ] 步骤 1:确认 `wodefenxiao.html` 的业务含义。
期望:
- 如果参考项目展示返佣记录,当前项目不能静默展示邀请用户列表。
- [ ] 步骤 2:对齐接口调用和表格字段。
期望:
- 用户看到的数据含义与参考项目一致。
- [ ] 步骤 3:验证推广绑定链路。
期望:
- 匿名访问邀请链接,注册或登录后能绑定推广关系。
## 任务 10:最终跨模块回归
**涉及文件:**
- 检查所有已修改文件。
- 如决策变化,更新:`docs/reference-project-function-diff-2026-07-07.md`
**输出:**
- 当前批次的功能等价验证记录。
- [ ] 步骤 1:检查所有改动文件格式。
执行:
```powershell
git diff --check
```
期望:无空白错误。
- [ ] 步骤 2:搜索参考项目中当前项目不应误跳的本地路径。
执行:
```powershell
rg -n "zhuanjia\.html|duanzuhe\.html|shazuhe\.html|zhuanjiashoucang\.html" html utils public
```
期望:
- `zhuanjia.html` 不作为运行时目标出现。
- `duanzuhe.html``shazuhe.html` 要么是确认过的外链目标,要么已恢复本地等价功能。
- `zhuanjiashoucang.html` 不作为运行时目标出现,除非明确恢复。
- [ ] 步骤 3:浏览器手工回归。
期望覆盖:
- 登录、注册、找回密码。
- 首页导航和底部。
- 8 个走势图页面。
- 免费文章列表、详情、发布、收藏。
- 付费文章列表、详情、购买、预购、发布。
- 个人中心资料、签到、微信绑定、专家申请状态。
- 充值、提现、资金明细。
- 推广邀请和返佣页面。
## 执行顺序
1. 任务 1:锁定允许差异,防止缺失页面误跳。
2. 任务 2:补齐发布权限公共契约。
3. 任务 3:修正个人中心契约和重复 DOM 风险。
4. 任务 4:对齐登录、注册、验证码和推广绑定基础能力。
5. 任务 5:对齐免费文章流程。
6. 任务 6:对齐付费文章和购买流程。
7. 任务 7:对齐走势图。
8. 任务 8:对齐钱包流程。
9. 任务 9:对齐推广和分销页面。
10. 任务 10:跨模块回归。
## 自检结果
- 需求覆盖:覆盖 `docs/reference-project-function-diff-2026-07-07.md` 中记录的主要高风险差异。
- 占位检查:没有把“待定/以后实现”作为任务要求。
- 契约一致性:发布权限对象字段与参考项目 `PublishPermission.parseSummary` 保持一致。
- 范围检查:这是多批次功能等价修复,每个任务都可以独立验证,并且必须按顺序执行。