Files
luo 0d77a7d55b
All checks were successful
构建并部署前端到测试环境 / deploy (push) Successful in 55s
fix: some
2026-10-14 17:08:32 +08:00

124 lines
13 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.
# 后台实施记录
后台代码已按第 1 批对接说明及用户确认适配。2026-10-14 用户明确追加代理扫码注册页及原注册接口的密码校验,其他 C 端仍不修改。真实后端联调尚未完成,未部署、提交或调用真实写接口。
## 结果与证据
| 证据 | 已确认结果 | 实现路径 |
| --- | --- | --- |
| 规则测试与本地订单详情 | 支付摘要、独立支付单状态、失败记录、空时间与金额展示正常 | `src/types/api/order.ts`、订单列表/详情、`orderPayment.ts` |
| 规则测试与模拟核销/代理注册详情 | 终态优先于陈旧恢复标志,核销可重提、代理注册提示重新扫码 | 核销展示工具、退款常量、注册状态辅助函数及相应页面 |
| 规则测试与模拟改密弹窗 | 按 2026-10-14 修正允许特殊符号且四类至少三类;旧密码不受新长度限制,错误说明不重叠 | `loginPassword.ts`、后台密码表单、本人改密弹窗与双语文案 |
| 规则测试与原模拟换货确认完成 | 1202 按最新规则原样展示 `msg`,有效响应手机号才提供跳转;原待确认状态保持,不自动解绑 | `exchangeError.ts`、换货页面与服务 |
| 数值测试与模拟预警规则/详情 | 规则额度移除,MB 快照两位小数,零和缺失区分,套餐商品额度保留 | 预警类型、规则页、记录列表/详情及 `trafficAlert.ts` |
| 模板和源码回归检查 | 新四列表头与手机号说明,设备 IMEI 必填说明、原 Excel 模板和行级失败反馈保持 | `shopBusinessOwnerImport.ts`、导入页面 |
ui-ux-pro-max 用于检查标签含义、错误反馈和长文案换行;保留现有 Element Plus 样式,未引入新 UI 依赖或改版。docs-generator 用于区分实施结果、可复现检查和未完成的真实联调,任务清单没有将后端验收提前标为完成。
## 复现本地验证
在项目根目录执行:
```powershell
# 63 项规则及已有回归测试;加载入口兼容 pnpm 的 esbuild 隔离布局。
node --import ./scripts/tests/register-esbuild.mjs --test --test-reporter=spec scripts/tests/*.test.mjs
npx --no-install vue-tsc --noEmit
# 生产构建输出到临时目录,关闭自动声明生成并校验原声明内容未被覆盖。
node scripts/tests/verifyBuild.mjs
openspec validate update-october-batch-one-admin-integration --strict --no-interactive
```
受影响文件 ESLint、Prettier 和 UTF-8 检查通过。生产构建存在原有搜索表单常量赋值、审计/认证循环分块和大 chunk 警告,未扩大本次修改去重构这些模块。
### 本地页面检查
```powershell
node scripts/tests/verifyBuild.mjs --serve
```
访问 `http://127.0.0.1:5190`。该预览拦截全部 `/api/` 请求且禁用真实代理,测试数据为模拟值;登录和写请求不会到真实后台。模拟账号为超级管理员,仅用于本地验收,输入满足登录页既有规则的任意测试账号密码即可。
已检查订单详情、核销失败详情、代理注册失败详情、预警详情/规则页、改密弹窗和换货完成 1202 提示;页面检查未产生 JS 错误。改密弹窗额外检查 375px 视口。
模板下载从统一 UTF-8 BOM 文本生成新 CSV,原 GBK 静态文件不再被此页面引用,没有改写用户已有模板资产。设备 Excel 模板没有修改。`src/types/components.d.ts` 与实施前内容 SHA-256 一致;已有开发服务器的自动生成曾补入本次新 Alert 声明,已改显式组件导入并只撤回该自动新增行,用户原差异保留。
## 待真实联调
1. 六类审批失败终态真实数据、权限矩阵、未知结果恢复、核销预占释放和提现重新冻结。
2. 真实支付摘要与多次支付历史、换货解除关联后成功重试及其他错误响应。
3. CSV 表头/手机号错误、逐行部分成功,以及设备 IMEI 空白/全部失败。
4. 新建与历史订单、IoT 卡、设备、预警导出文件列。
这些项目继续保留在任务清单,用户验收及部署后再归档。
## 用户追加:换货冲突快捷解绑
已在用户明确要求下补充以下行为:
- 创建换货捕获提交时新资产上下文,确认完成使用换货单的新资产标识,不使用旧资产。按用户最新修正,跳转手机号只取当前 1202 `data.phone`,缺失时不再回退历史手机号数组。
- 用户点击跳转后,路由带 `asset_identifier` 和 `phone`,目标页从 1 页/20 条精确查询。只实际勾选匹配两项条件且有效的记录,不全选历史失效记录。
- 表格勾选方法由已有 ArtTable 透传;手工取消后不立即重新勾选,重置、筛选、翻页及解绑后刷新清空旧选择;缓存重入或路由参数变化重新取目标,过期响应不能覆盖新查询。
- 批量解绑仍使用 `phone_asset_association:unbind_batch` 和原原因/二次确认表单;结果列展示「解绑成功/解绑失败」,资产类型同时显示中文,不修改后端布尔值契约。
原说明要求号码不额外记录或持久化;用户追加明确要求两项路由参数,因此用户主动跳转时允许号码进入该 URL 查询参数,不额外记录日志或写入本地存储。
新增三项自动测试,全套 66 项通过,类型检查、受影响文件 lint、编码和严格规范校验通过,生产构建通过(原有警告仍在)。本地模拟确认了完整的 1202 弹窗 → 带参跳转 → 筛选并勾选有效记录 → 手工取消禁用按钮 → 原确认表单 → 中文成功结果链路,没有调用真实后台解绑接口。
### 用户修正:区分共用的 1202 错误码
同为 1202 的「已完成过换货」响应 `data=null`,只弹出后端 `msg` 和「知道了」,不出现关联管理按钮;带有效 `data.phone` 的绑定冲突才保留原权限内的去解绑入口。两种弹窗正文都使用原始 `msg`,不再拼接手机号或固定指引。新增回归覆盖 HTTP/业务承载、null/空白/非字符串号码及资产历史数组不得绕过门槛,全套测试增至 67 项。
该修正的 67 项自动回归、类型检查、lint、格式、编码及严格规范校验通过。重新做浏览器检查时本地会话回到了资产首页,未完成两种新弹窗的视觉验证;未将此项标为已通过,也未操作真实换货或解绑数据。
## 2026-10-14:允许特殊符号与改密遮罩覆盖侧栏
最新密码规则恢复为 8~12 位,大写、小写、数字、半角特殊符号至少三类,禁止空白和中文等非法字符。`Admin@12345`、`ABC1234!`、`abc1234!`、`Abcdefg!` 可通过;仅两类、超长/过短、空白、中文、emoji 和控制字符拒绝。共享规则和双语文案已同步所有后台新密码表单及账号服务,不改旧密码输入、登录、C 端、操作密码或 WiFi 密码。
侧栏未变暗的原因是顶栏堆叠上下文(100)低于侧栏(101),改密弹窗此前在顶栏内部。加 `append-to-body` 后,DOM 检查确认实际遮罩父元素是 BODY、不在顶栏中;菜单位置命中遮罩而非菜单。1920px 和 375px 截图检查通过,整页包括侧栏一起变暗,未改变全局 z-index。
全套 68 项 Node 测试、类型检查、受影响文件 ESLint、该弹窗 Stylelint、格式、UTF-8 和规范校验通过。模拟页面中 `Admin@12345` 通过表单校验并发出本地 `PUT /api/auth/password` 请求,无表单规则错误。没有修改真实账号密码;工作区同时出现的设备 Excel 模板及其临时文件属于用户其他工作,未触及。
## 2026-10-14:全后台新密码入口复核
用户要求所有修改密码入口使用相同规则。全量搜索密码输入、独立校验、动态输入弹窗及密码服务调用后,确认既有后台入口均已引用 `loginPassword.ts`;共享规则修改会同时生效,不只影响顶栏弹窗。本次没有发现需要补改的后台密码表单,也不新建账号改密入口。
| 后台入口 | 表单文件 | 已核对字段 |
| --- | --- | --- |
| 本人修改密码 | `src/components/core/layouts/art-header-bar/ChangePasswordDialog.vue` | `new_password`、`confirm_password` |
| 平台账号创建 | `src/views/account-management/account/index.vue` | `password` |
| 店铺/企业下客户账号创建 | `src/views/common/account-list.vue` | `password` |
| 店铺初始账号创建 | `src/views/shop-management/list/index.vue` | `init_password` |
| 企业创建及企业修改密码 | `src/views/account-management/enterprise-customer/index.vue` | 两个表单各自的 `password` |
新增源码契约回归,逐项确认上述七个新密码输入使用共享提示、12 位输入上限、无 `.trim` 的绑定,以及共享校验与必填规则,没有叠加旧长度或字符正则。账号服务的可选密码修改与独立改密仍使用共享规则。仓库中未被这些表单调用的通用密码工具不改变;登录/旧密码、操作密码、WiFi/锁屏密码和公开扫码注册页继续排除。
可复现检查仍使用上面的 Node 测试命令;全套增至 69 项并通过,类型、测试文件 ESLint/格式、编码及 OpenSpec 严格校验通过。此轮为源码及自动回归核对,没有修改真实账号密码或新增权限编码。docs-generator 用于明确列出实际覆盖入口,并区分源码核对与真实后端联调。
## 2026-10-14:用户追加代理扫码注册密码规则
原扫码页按此前排除 C 端的范围保留了 8~32 位校验。用户现在明确要求该页及同一注册接口的 `password` 使用 8~12 位、四类至少三类、禁止空格和中文,本轮只将这项纳入,不扩大到其他 C 端功能。
| 证据 | 已确认结果 | 实现路径 |
| --- | --- | --- |
| 表单源码契约回归与共享规则测试 | 扫码页复用同一规则,输入上限 12,无 `.trim`,完整规则可见;强度反馈不把空格/中文算作有效符号 | `src/views/agent-registration/index.vue`、`loginPassword.ts` |
| 注册服务桩测试 | 有效三类组合原样发送;过短/超长/两类/空格/中文阻止请求;原注册路径、其他字段、免 Token 和短信调用不变 | `src/api/modules/agentDistribution.ts`、`scripts/tests/octoberBatchOne.test.mjs` |
ui-ux-pro-max 影响本次提示处理:保留既有页面与 Element Plus 样式,完整规则独立显示并关联输入框,使用文字反馈而不只用颜色,长校验错误参与正常布局。docs-generator 用于明确记录这次范围例外和未完成的浏览器验收。
全套 71 项自动测试、类型检查、受影响文件 ESLint/Stylelint、格式、UTF-8、OpenSpec 严格校验及生产构建通过。当前 CUA 浏览器列表为空,IAB 和 Chrome 均返回不可用,未完成移动端视觉检查,不将其标为通过。没有发送真实短信、提交真实注册或改变任何权限编码。
## 2026-10-14:注册单次失败提示与公共表头拖拽
用户发现公开代理注册在 1050/1001 模板错误时,公共请求层与页面 catch 分别弹消息。只给原注册请求设置 `errorMessageMode: 'none'`,页面以共享映射处理非零响应或 HTTP 错误:1050/1001 显示「注册失败, 请联系管理员」,其他可读业务原因保留。短信、后台注册审核和公共 HTTP 不改。请求进行中阻止重复提交,失败保留输入,不日志输出密码。
代理注册申请列表还报告 `Sortable: el must be an HTMLElement`。仓库唯一 VueDraggable 位于公共表头 Popover 的列设置;原组件自动启动可能拿到未渲染/已离开的空 ref。修复改用 `useDraggable` 禁止自动启动,Popover 打开且进入后仅对真实、仍连接文档的 HTMLElement 初始化;关闭、卸载和 KeepAlive 停用销毁,晚到回调忽略。原列排序双向 model、勾选状态和按钮不变。
| 证据 | 已确认结果 | 实现路径 |
| --- | --- | --- |
| 共享错误映射及服务桩测试 | 业务/HTTP 的 1050/1001 隐藏配置细节,原注册配置关闭公共消息,短信配置不变 | `agentRegistrationError.ts`、`agentDistribution.ts` |
| 实际扫码页 setup 执行测试 | 每种模板错误只调用一次指定消息;并发重复点击不新增请求;提交失败、加载状态及表单正确保留 | `octoberBatchOne.test.mjs`、扫码页 |
| 编译后的表头 Vue 生命周期测试,拖拽控制器使用桩 | 首次挂载不自动启动;空/非元素/脱离节点不启动;开关、卸载和缓存切换正确清理;列顺序及 checked 保持 | `tableHeaderDragLifecycle.test.mjs`、`ArtTableHeader.vue` |
ui-ux-pro-max 的生命周期建议用于把拖拽实例绑定真实节点和清理事件,不做视觉改版。docs-generator 用于区分桩/组件逻辑证据与真实浏览器验收。全套 78 项 Node 测试、类型、受影响文件 lint/stylelint、格式、编码、严格规范及生产构建通过;构建仍存在此前记录的常量赋值/循环分块/大 chunk 警告。当前无浏览器连接,未声称已重放用户浏览器的 console 堆栈,也未发送真实注册、短信或修改权限。