13 KiB
后台实施记录
后台代码已按第 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 用于区分实施结果、可复现检查和未完成的真实联调,任务清单没有将后端验收提前标为完成。
复现本地验证
在项目根目录执行:
# 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 警告,未扩大本次修改去重构这些模块。
本地页面检查
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 声明,已改显式组件导入并只撤回该自动新增行,用户原差异保留。
待真实联调
- 六类审批失败终态真实数据、权限矩阵、未知结果恢复、核销预占释放和提现重新冻结。
- 真实支付摘要与多次支付历史、换货解除关联后成功重试及其他错误响应。
- CSV 表头/手机号错误、逐行部分成功,以及设备 IMEI 空白/全部失败。
- 新建与历史订单、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 堆栈,也未发送真实注册、短信或修改权限。