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

17 KiB
Raw Blame History

功能等价修复实施计划

给后续执行者: 实施本计划时必须使用 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.jpgpublic/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:搜索错误专家页入口。

执行:

rg -n "zhuanjia\.html|专家推荐" html utils public

期望:

  • 所有 zhuanjia.html 结果都必须被检查。

  • 只出现在文档里的结果允许存在。

  • 当前项目运行时导航不能打开缺失的 zhuanjia.html

  • 步骤 2:检查 CommonUtil.js 的导航映射。

检查菜单名称为“专家推荐”或路径为 zhuanjia.html 时,当前公共工具如何处理。

期望:

  • 公共导航不会打开缺失的 zhuanjia.html

  • 如果接口返回专家推荐入口,当前代码必须过滤它,或改写到一个有效页面。

  • 步骤 3:如果发现新风险,同步更新差异文档。

期望:

  • 文档继续把 zhuanjia.html 标为允许差异。

  • 文档只记录真实运行时风险。

  • 步骤 4:验证文档格式。

执行:

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)

  • 权限对象字段:hasExpertIdentityisRegularExpertcanFreecanPaidquotaExempttodayFreeArticleCountrequiredDailyFreeArticleCountpaidReasonreason

  • 步骤 1:按参考项目逻辑新增 utils/PublishPermission.js

期望行为:

  • 专家身份兼容字段:is_expertisExpertexpertis_regular_expertisRegularExpertregularExpert、文本型 expertStatus

  • 付费发布兼容字段:canPublishPayArticlepayArticleFreeQuotaExempttodayApprovedFreeArticleCountrequiredDailyApprovedFreeArticleCountpayArticlePublishReason

  • 默认每天需要审核通过的免费文章数量为 2

  • 步骤 2:两个发布页都引入新脚本。

期望增加:

<script src="../utils/PublishPermission.js"></script>
  • 步骤 3:替换 fabumianfeiwenzhang.html 里的本地权限判断。

期望:

  • 免费发布页请求 mineSummary

  • 使用 PublishPermission.parseSummary(res.data)

  • canFree 为假时禁止发布,并引导到 apply.html

  • “发布付费文章”tab 使用 canPaidpaidReason 判断。

  • 步骤 4:给 fufei.html 增加付费发布拦截。

期望:

  • 页面加载付费发布数据前先请求 mineSummary

  • canPaid 为假时显示原因,并跳回 fabumianfeiwenzhang.html

  • 不改变现有视觉表单和选号逻辑。

  • 步骤 5:静态验证。

执行:

rg -n "PublishPermission|parsePublishPermission|loadTodayPublishedFreeCount|checkPaidPublishPermission" html\fabumianfeiwenzhang.html html\fufei.html utils\PublishPermission.js

期望:

  • PublishPermission.js 存在,并暴露 parseSummary

  • 两个发布页调用 PublishPermission.parseSummary

  • 旧的重复权限解析函数被删除,或不再被使用。

  • 步骤 6:语法验证。

执行:

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。

执行:

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:静态验证。

执行:

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 和参考项目。

执行:

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:对比免费文章列表接口参数。

期望:

  • pageNumpageSizemenuId、状态/类型筛选与参考项目一致。

  • 如果页面合并导致参数适配不同,需要在文档中记录。

  • 步骤 2:验证作者和标题展示。

期望:

  • 头像、issuer 昵称、标题、日期按当前需求展示。

  • 标题有最大宽度和省略号。

  • 步骤 3:确定收藏页主入口。

期望:

  • 要么 mianfeishoucang.html 负责所有收藏 tabc.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 个页面。

执行:

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:检查所有改动文件格式。

执行:

git diff --check

期望:无空白错误。

  • 步骤 2:搜索参考项目中当前项目不应误跳的本地路径。

执行:

rg -n "zhuanjia\.html|duanzuhe\.html|shazuhe\.html|zhuanjiashoucang\.html" html utils public

期望:

  • zhuanjia.html 不作为运行时目标出现。

  • duanzuhe.htmlshazuhe.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 保持一致。
  • 范围检查:这是多批次功能等价修复,每个任务都可以独立验证,并且必须按顺序执行。