创建日期:2026-10-08
更新日期:2026-10-14
当前状态:现有登录页已实施 UI 改造,Register 已接入注册路由;真实认证仍需授权环境验证
规则入口:项目长期规则
视觉规范:UI 设计规范
以下事实按 2026-10-14 当前源码核对;后续用户确认已覆盖最初“只新增独立登录页、仅文档准备”的方案。第 1~7 节保留 2026-10-08 的原始规划,不能再据此判断当前登录页未实施、未接入或仍有语言切换。
| 项目 | 当前实现 |
|---|---|
| 页面与入口 | 直接改造 src/views/login/index.vue,/login 仍指向该页;没有另建 src/ui-refactor/login/LoginPage.vue |
| 技术栈 | Vue 2、JavaScript、Options API、Element UI、Vue Router 3、Vuex 与既有构建工具链 |
| 外观 | 深蓝品牌面板、白色表单卡片、Montserrat;按钮主色保持 #202259,Element UI 控件交互沿用既有机制 |
| 资源 | Logo 位于 src/assets/icons/;字体位于 src/assets/custom-theme/fonts/,当前不再引用旧登录页私有资源目录 |
| 语言 | 登录页展示英文,没有 LangSelect;进入页面时通过 app/setLanguage 同步英文状态 |
| 登录业务 | 保留验证码查询 / 刷新、密码显隐、Caps Lock、焦点、Enter,以及 user/login → user/getUserInfo → user/getBaseInfo;2026-10-20 起默认及原首页 redirect 改为 /dashboard/repeat-purchase,其他指定页面的 redirect 与附加 query 继续保留 |
| 附加入口 | Register 跳转 /signup 并保留查询参数;Forgot password 显示右下角客服 Notification;Shop now 仍是静态文案 |
| 注册路由 | src/router/modules/refactor.js 定义,src/router/index.js 加入常量路由,src/permission.js 保留 /signup 匿名白名单 |
注册布局和游客业务的当前说明分别见 公共页面框架 与 注册功能迁移。本次只更新 docs/,不修改根规则、设计文件或源码,不扩展后续代码修改权限。
本次未执行登录、浏览器、测试或构建。旧 vue-template-compiler 与 Vue 版本差异曾导致直接加载失败,但当前工具链已知使用 Vue 2.7 编译路径,不能仅凭该差异断言整个构建失败;后续应报告实际执行结果。
water1008 和用户网页提取结果作为 UI 参考,不自动授权其中的功能。本文件是后续实施范围说明,不是现在开始编写登录页的授权。项目级修改保护遵循 AGENTS.md。
| 文件/范围 | 保留内容 |
|---|---|
src/views/login/index.vue |
登录表单、验证码、密码切换、初始焦点、事件与失败处理 |
src/components/LangSelect/index.vue |
语言列表请求、Vue I18n 与 Vuex 语言同步 |
src/components/SvgIcon/index.vue |
既有图标能力 |
src/store/modules/user.js |
登录、用户信息、基础数据与缓存动作 |
src/store/modules/settings.js |
页面 ID 等查询动作 |
src/api/user.js、src/api/setting.js |
认证和页面数据请求 |
src/utils/usersInfo.js、request.js |
Token、本地缓存、请求与错误处理 |
src/router/index.js、src/permission.js |
原 /login 路由、登录守卫和返回路径 |
src/lang/** |
当前语言与已有文案 |
后台快捷登录和认证回调页面不在一期 UI 范围。
settings/getPageId 获取 pageId。/v1/site/captcha、page_id 与随机刷新参数生成。user/isLoginVerify,保留原来的响应判定与显示时机。isLoginVerify 按需显示,点击图片仍能刷新。页面提交给 user/login 的既有对象包含:
| 字段 | 约束 |
|---|---|
userName |
来自当前 loginForm.username;不得套用参考站的 NG 编码正则或自动大写 |
password |
来自当前 loginForm.password;不得加入参考站的新长度规则 |
verifyCode |
保留原验证码值传递 |
pageId |
保留初始化获得的页面标识 |
isLoginVerify |
保留现有分支条件 |
Vuex action 根据 isLoginVerify 组装真实 API 参数;无验证码分支使用既有 version: 'v2'。不要把页面对象当成所有分支固定一致的最终 HTTP body。
成功链路必须保持:
user/login
→ user/getUserInfo
→ user/getBaseInfo
→ 原 redirect 或 /
→ 传递原有其他查询参数
失败时保留登录缓存清理、验证码状态刷新、必要的验证码图片刷新和 loading 收尾。UI 改造不得自行调整 request 拦截器、Token 刷新和异常契约。
$t('login.title')、login.username、login.password、login.verifyCode、login.logIn 等现有翻译。| 未来获准实施后允许 | 一期排除 |
|---|---|
| 新建登录页面、必要私有展示组件、局部样式 | 修改旧登录页面或旧内部组件 |
| 新布局、内容组织、间距和响应式适配,沿用当前控件外观 | 修改全局主题、字体、控件配色/圆角/阴影、主入口或后台 Layout |
| 清楚的标签、焦点、可访问名称和响应式布局 | 增加账户功能或改变认证校验 |
| 展示原有 loading 和失败状态 | 模拟接口成功、改变错误规则或增加假等待 |
| 只读复用现有图片与 Logo | 新增字体或品牌主题,覆盖旧资源、整体导入参考 CSS/JS |
| 只读复用现有 API、actions、组件 | 创建第二套 Token/localStorage/Cookie 登录模型 |
| 位置 | 用途 | 当前是否创建 |
|---|---|---|
src/ui-refactor/login/LoginPage.vue |
新 UI 入口 | 否 |
src/ui-refactor/login/components/ |
有必要时的私有展示组件 | 否 |
src/ui-refactor/login/styles/ |
有必要时的局部布局样式,不建立新主题 | 否 |
一期优先复用旧图片/Logo,不规划新增字体或品牌资源目录。
这只是目录建议,不要求为一个登录页面建齐所有子目录。
实施时先选择最小的方式只读复用既有认证能力,不在本次文档中预先锁定继承/复制页面选项等实现方式。方案必须能核对第 3 节的业务等价性。
旧 /login 映射不变。新建 UI 文件并不自动进入应用,也不意味着交付了已上线的替换页面。只有用户明确授权修改接入点后,才能更改入口或路由。独立展示预览不能通过假登录冒充真实链路验证。
| 验收项 | 预期证据 |
|---|---|
| 存量代码保护 | 仅新增文件;已有源码、配置、资源和忽略文件没有变化 |
| 技术栈 | 无新增依赖、迁移或配置变更 |
| 现有 UI 风格 | 使用当前 Element UI 主色、字体、控件尺寸与默认视觉;没有深蓝/青色品牌主题或 Montserrat |
| 视觉 | 375/768/1024/1440px、320px 边界与短视口观察结果 |
| 原有交互 | 密码显隐、Caps Lock、焦点、验证码刷新、原 Enter 提交 |
| 语言 | 切换正常,长文案与 CJK fallback 可读 |
| 业务 | 请求参数、调用顺序、失败收尾、redirect/query 与基线一致 |
| 真实认证 | 仅在授权测试环境运行;没有条件时标注未验证 |
| 接入状态 | 明确“未接入”或经授权接入的具体范围,不能模糊描述 |
已知 Vue/模板编译器不匹配会影响完整构建验证。不要自行修改版本;保留新增实现并报告实际验证限制,不声称构建通过。