V4.6.6 · 发布交付版

用户于 2026-10-10 授权同步 Git → Nexus。当前版本包含首页双栏登录弹窗、原有拖动验证恢复、单一《用户协议》入口及合并 Word 正文;保留已确认微信与账号管理流程。源码、单文件和 ZIP 同步覆盖原路径。下方旧版本中“本地待评审、未发布、两份协议”等表述属于历史阶段,当前以本节和 V4.6.6 协议合并说明为准。发布结果与来源提交见本任务回填。

V4.6.6 · 协议入口合并

现行入口统一为《用户协议》:登录、注册、微信登录共用一处勾选入口,首页页脚亦只保留用户协议。账号安全规则与隐私政策已包含在同一份《前海玖麦用户协议》中,不再展示独立《账号规则》。阅读弹层与 agreements/前海玖麦用户协议.docx 正文逐段一致;未改写已生成的正式 Word 内容。

未勾选提示为“请先阅读并同意用户协议”。打开或关闭协议不自动勾选,不提交表单,输入保留。拖动验证、验证码、登录、注册和微信绑定业务顺序不变。本版仅本地更新,未提交 Git 或发布 Nexus。下文旧版本中提到的“两份协议/缺失规则清单”属于历史记录,现行交付以本节为准。

V4.6 双栏修订:桌面登录弹窗采用左侧品牌与原首页素材、右侧登录/注册操作的布局。密码、验证码、微信三种登录方式及既有流程保留。窄屏收起装饰栏;协议模块紧随当前表单或二维码操作区,随内容共同滚动。三种登录方式共用“欢迎回来”、说明及切换栏;微信二维码在切换栏下方展示,标签统一为纯文字。

V4.6 · 本地待评审版

工程交接与交付清单

交付目标是可运行、可连续操作的前端。工程师可按已有视图函数拆分组件、接入项目路由与接口,不应再自行补画本范围内的流程。真实认证、短信、事务和权限仍由服务端实现,本包不包含真实认证能力。

文件与职责

文件职责
index.html可直接打开的入口,CSS/JS已嵌入;引用assets素材。
demo-standalone.html交付目录及ZIP中的完整单文件,内嵌图片,用于后续Nexus预览。
app.js业务视图与控制器:登录、注册、微信状态、用户名确认、首页、原账号弹窗、解绑换绑及表单校验。
mock-service.js可替换的本地数据服务:密码验证、注册唯一性、绑定冲突、解绑保护和持久化。
review-tools.js隔离的模拟服务界面:微信身份、消息、单次异常响应、后台读取异常响应,不提供超管跳转或按场景重写数据。
styles.css / frontend.css原页面视觉、响应式及模拟服务区域的空间保留。
admin-preview.js / admin-preview.css原用户台账的只读微信项,与前台共用账号及绑定数据。
assets/logo.png / assets/poster-2.jpg原品牌和首页素材。
build.cjs / server.cjs重新生成嵌入资源;运行本机8876静态服务。
test-mock-service.cjs / verification-service.json数据不变量单测与结果。
verification-v46.json本轮浏览器点击回归、布局和 Word 排版检查。verification-frontend.json 保留上一版记录。
流程与源码说明.html / 交互说明.html同一份最新页面、场景和状态说明。
交付说明.html / 交付说明.txt / delivery-manifest.json工程交接、运行方法和逐文件SHA256清单。

运行

node build.cjs
node test-mock-service.cjs
node server.cjs
浏览器打开 http://127.0.0.1:8876/?v=4.6.6

也可直接打开index.html或demo-standalone.html。推荐固定同一HTTP来源验收;文件地址、其他端口、Nexus属于不同存储来源。不要同时在多个标签修改同一份模拟数据。浏览器禁用存储时顶部提示仅当前页面有效。

组件化映射

建议组件已有实现保留行为
LoginPage / LoginMethods / AccountLinkFormrender的form/account分支、methodTabs、registrationFields、submit三种方式同级切换,验证码隔离用途,一次验证完成绑定登录。
WechatAuthorizestartWechat、qr/scanned/resolving/failures分支、authorize取消、过期、重试;关联结果由服务返回,不用前端按钮放行真实登录。
WelcomeNamewelcomeView、afterName注册成功后才显示;确认后继续绑定或进入首页。
ProfileSettingsDialog / WechatBindingRowprofileView、extendedAction保留原弹窗,只新增微信项,结果与昵称即时一致。
WechatUnlinkDialogsecurityFields、beginUnlink、unlink-confirm验证当前手机号;先解绑再绑定;已生效解绑不被取消新扫码暗中恢复。
AdminUserWechatBindingadmin-preview.js中的binding与rowsView只读;读取失败和未绑定分开,缺昵称不展示内部ID。

数据与服务接入

mock-service.js为本地可替换适配器,内部方法名不是现有后端API。app.js中的短信、授权延迟、用户名/资料保存也需替换为真实调用;接口路径和字段以项目为准。以下为页面消费的结果语义:

能力输入 / 结果约束
登录密码或手机号验证码 → 已验证用户服务端认证、账户状态及会话管理,前端不能代替安全校验。
发送/校验短信手机号+用途 → 冷却/有效期及结果服务端绑定手机号及用途;本地246810、60秒、5分钟是测试参数,正式使用接口返回值。
注册手机、验证码、密码、可选邀请码 → 已建立账号及初始名字沿用现有注册、邀请码和会员逻辑;本地不结算邀请权益或虚构邀请码规则。
微信授权有效授权上下文 → 已关联用户或未关联微信已关联直接登录;未关联引导绑定/注册。真实回调、state和有效期由服务端校验。
绑定/解绑账号验证与微信授权 / 当前手机号验证 → 新绑定状态服务端原子提交、防重放、提交时再次检查冲突;不覆盖不合并。
后台读取绑定状态、昵称、读取结果缺字段不等于未绑定;不暴露令牌、OpenID或UnionID。

本地错误语义:INVALID_CREDENTIALS、PHONE_EXISTS、INVALID_PHONE、PASSWORD_SHORT、ACCOUNT_ALREADY_BOUND、WECHAT_ALREADY_BOUND、PHONE_REQUIRED、BINDING_CHANGED、INVALID_CONTEXT。通过适配层将真实接口错误映射到对应页面状态。

模拟密码仅供本地假账号。生产接入时移除mock-service、review-tools、消息条、手机预览和“扫码成功”快捷按钮,使用已有认证存储与微信回调。不能把本地持久化或模拟验证码当成认证实现。

状态与恢复约束

核验与发布状态

本轮浏览器回归记录见verification-v46.json,verification-frontend.json 为历史基线;数据服务不变量结果见verification-service.json。包内delivery-manifest.json用于对照SHA256。本版仅供本地评审,尚未获本轮 Git 与 Nexus 发布授权。历史版本仅供对照,当前交付为 delivery-v4.6 和“微信登录与账号管理-V4.6-待确认.zip”。包内文件逐项登记 SHA256。

本轮不发布。用户确认后,另行更新 Git 与 Nexus 的独立预览、流程说明、工程说明和源代码包,并核对发布版本。

V4.6 · 小麦账号管理入口

小麦账号同时具有普通会员等级与VDOIT管理身份。顶栏分别显示两种标识,头像菜单按 master 显示“账号设置 → 玖麦管理后台 → 退出登录”。后台侧栏显示当前小麦账号,可返回前台继续使用同一会话,也可退出登录。

后台仍沿用已完成的用户台账视图,只读显示微信绑定。备用账号、新注册普通账号不显示管理入口。已移除模拟服务中的超管跳转,仅在已进入后台时提供读取失败等测试响应。升级已有本地数据只补充小麦的管理身份,不重置姓名、手机号、密码或微信关系。

本次已通过既有GitHub权限读取master:fb22fed49354d0c01288e78765ec228267d7747e,核对 jmai-web/src/components/header.tsx 与 jmai-web/src/app/admin/layout.tsx;使用 administration、administrationLabel、foundationAdmin 区分管理身份,会员等级另行展示。源码菜单目标为/admin,本次范围内打开既有用户台账,不新建管理概览。真实后台权限仍由原系统校验。

V4.6 首页登录弹窗与协议

2026年10月10日重新读取远程 master:69262ad0daed5e36f936649e9aa64b8677880a95。核对首页、登录、短信注册、顶栏、我的账号、帮助页、全局 CSS 和按钮/输入组件。交互参考美图设计室:首页作为背景、居中弹窗、主动同意协议(登录标签已按后续确认统一为纯文字);保留玖麦的橙色、圆角、字体和三种登录方式。

入口与状态操作与返回业务结果
访客首页首次打开显示登录弹窗;关闭/Esc后继续浏览;顶部登录、注册及创作入口可再次打开。关闭作废未完成异步请求和微信授权;已创建账号及已生效关系不回滚。账号已注册但名字未确认时可继续完善。
登录与注册密码、验证码、微信同级切换;注册字段和校验顺序不变。协议未勾选时阻止登录/注册提交及模拟微信授权,显示“请先阅读并同意用户协议和账号规则”;不清空输入。
阅读协议《用户协议》《账号规则》打开可滚动阅读层,关闭或“返回继续操作”回原位置。不自动勾选;不重新提交表单;输入保留。页脚亦可阅读。正文标记评审稿,无正式生效日期。
注册成功先显示用户名确认;微信注册在确认后绑定。无新增注册字段、手机号复验或重复确认绑定。已关联微信仍直接登录。
已登录账号管理头像 → 账号设置 → 绑定/解绑/更换;超管仍从小麦头像菜单进入。沿用上一版业务状态和同一份模拟数据。解绑仍验证当前手机号,更换仍先解绑再绑定。

协议数据源为 legal-content.json,构建时嵌入 Demo;create-legal-docs.py 用同一数据生成两份可编辑 Word 评审稿和独立缺失规则清单。协议正文不含未确认事项;两份协议不替代尚待确认的隐私政策。

附件《综合服务平台用户服务协议》前十页与后五页分属两套合同,争议解决和责任上限不一致;未擅自选择或移植。外贸报关、对公收款、催收、自动续期、AI商用权利、注销期限及充值退款等未确认内容均单列。

生产接入继续使用现有认证、验证码风控、服务端权限和微信官方授权。本地“扫码成功”仅模拟已完成授权;不取消微信真实手机确认。正式上线还需定稿协议、隐私披露及版本同意记录,不把本地勾选当作签约凭证。

V4.6.4 · 账号组件源码核对

本轮重新获取 limbayme/vdoit 的远程 master,提交 749dd90c8426667235e21e2d0e993778340d075f。从该提交读取 Header、ProfileSettingsDialog、IdentityContactSettings、globals.css、Tailwind 配置、Button/Input、登录页、短信组件及管理后台布局/用户页。

范围本次修正或核对
右上角账号菜单按 Header 恢复 36px 按钮、28px 头像、208px 下拉层;14px 菜单字体、16px 线性图标、皇冠/箭头、角色与会员徽章、外部点击关闭。修复无效描边颜色。补充 Escape 收起。
我的账号按 ProfileSettingsDialog 补齐独立管理身份栏,对齐标题、输入框及按钮间距;按共享联系方式组件对齐图标、行布局、状态色。微信新增行及原验证/解绑流程保留。
登录和注册保留用户明确确认的首页双栏弹窗、三种纯文字登录方式、二维码标题及跟随内容的协议。这些是本次设计变更,不应回退成 master 的独立登录页。未借本轮核对修改注册顺序、验证码或授权业务规则。
管理后台核对用户台账与管理身份入口,验证从小麦菜单进入及返回前台;微信绑定信息保持只读。未扩展运营解绑或其他后台编辑。

工程接入应直接复用项目 Header、ProfileSettingsDialog 和共享身份组件。本 HTML 是本地模拟适配版,未包含真实余额、通知、认证等平台接口;不能据此宣称整个产品与线上逐像素一致。源码记录见 admin-menu-source-reference.json,核验见 verification-v46.json。本轮未更新 Git 或 Nexus。

V4.6.5 · 原有认证流程恢复与差异核对

核对基准:2026-10-10 已读取并留存的 master 提交 749dd90c8426667235e21e2d0e993778340d075f。本次 fresh fetch 两次连接重置,GitHub 连接器返回 404,未声称已取得更新的远程版本。身份后端 routes.py/service.py 取自本机只读副本,Git blob 哈希分别与该提交的 010d8d80cbcf6d31d57eaaf4f27f27a33f0c35bd、272fe80531c6347103a240aebcbcee04053493a2 完全一致。

范围 / 原源码恢复的行为
密码登录 / login/page.tsx、tencent-captcha.ts提交 → 拖动人机验证 → 通过后才认证账号密码 → 登录成功。取消、失败不得认证;重试重新验证。微信绑定已有账号的密码入口复用同一顺序。
短信登录与注册 / sms-auth-card.tsx、identity/routes.py获取验证码 → 手机格式校验 → 人机验证 → 校验手机号与用途 → 发送成功后开始 60 秒冷却。未注册手机号不能获取登录短信,已注册手机号不能获取注册短信。验证码提交不再重复弹出人机验证。号码/验证码去首尾空格;输入上限恢复 8 位,本地短信仍使用六位测试码。
我的账号 / 共享 IdentityContactSettings手机号验证发送短信前做人机验证;微信解绑/更换复用短信验证,不绕过该步骤。邮箱发送保留 60 秒冷却、不同新邮箱及唯一性检查;邮箱不额外增加人机验证。
注册用户名 / RanchWelcomeName注册成功才进入名字确认。随机换名和编辑只改页面草稿,最终确认成功才写入账号;保存失败保留原名字。微信注册在名字确认后继续绑定。
我的账号 / ProfileSettingsDialog已有密码修改须填写并校验当前密码;无密码账号首次设置不要求旧密码。保存失败不修改名字或密码。会员文案优先使用服务返回 membershipLabel。
入口参数 / login/page.tsx恢复 mode=register、invite / invite_code 自动带入并转大写、error 回显。取消自加的四项返回目标白名单,保留安全站内目标(拒绝协议相对地址);本包只记录目标,其他产品页由正式路由承接,不伪造工具页面。
账号状态 / identity/service.py停用账号不能通过密码或短信认证。短信登录成功恢复手机号已验证状态。邀请码传入模拟注册数据,不虚构奖励结算。

拖动验证页面和状态

入口:密码提交、短信获取。主操作:拖动滑块使图标进入虚线框,松开后自动验证;方向键及回车可操作。位置错误留在弹层重试;刷新生成新题;模拟题 90 秒后过期,刷新后重试;关闭或 Esc 回原表单,保留输入。切换页面或关闭登录使旧请求失效,旧验证结果不能产生登录、短信或绑定。

本地 mock-captcha.js 仅提供交互替身,不具备安全认证能力。真实项目必须继续调用原 requestTencentCaptcha(),将 captcha_ticket 和 captcha_randstr 交由服务端验证;腾讯动态题型、风控结果和过期规则由官方服务决定,不以本地题替换腾讯 SDK。未连接真实腾讯、微信或短信服务,未读取 Secret。

保留已明确确认的改动:首页双栏登录弹窗、三种文字标签、跟随表单的协议、已绑定微信直接登录、未绑定注册/验证已有账号、手机号解绑/换绑、小麦管理入口与超管只读微信信息。未恢复 master 旧的自动创建微信账号路径,因为这部分已按用户确认改为先注册或验证已有账号。保留上述变更不意味着可删除既有人机验证。

未扩展的范围:真实短信频控、邀请权益、草粒奖励、服务端会话和其他平台工具继续由现有系统负责;本包不新增这些业务规则。此前流程说明未写出人机验证的步骤已由本节明确补正。本次只更新本地前端及交付包,未提交 Git、未发布 Nexus。