97 lines
9.9 KiB
Markdown
97 lines
9.9 KiB
Markdown
# 重建与验收记录
|
||
|
||
日期:2026-11-05。基准:当前 20261025 发布版本;没有读取 `.env`,没有连接生产服务器或使用生产凭证。
|
||
|
||
## 可确认的范围
|
||
|
||
清单包含 52 个页面、104 个组件、4 个布局;另重写应用入口。所有业务文件采用源码路径和显式模块依赖,
|
||
不从历史 `.output`、`releases` 或旧哈希 JS 加载代码。保留编译后的作用域样式,以维持现有视觉规则。
|
||
原注释、模板排版、完整局部变量名不能逆向恢复;多数页面仍使用渲染函数,应逐步按实际维护需求重构。
|
||
|
||
源文件的解析/依赖门禁与生产构建覆盖全部 Vue 文件,但不等于所有业务交互都已验收。
|
||
逐文件覆盖台账另见 `audit-coverage.json`;未逐行人工审查的业务文件明确标记为未审查。
|
||
|
||
## 修复记录
|
||
|
||
| 问题 | 原因和处理 | 验证方式 |
|
||
| ------------------------ | ------------------------------------------------------------------------ | ------------------------------------- |
|
||
| 请求永久等待 | JSON 默认 30 秒、上传/下载 120 秒;截止时间覆盖响应正文和购买前置校验 | 真实页面的挂起请求与超时场景 |
|
||
| 注销被网络拖住 | 先捕获旧 Bearer,立即清理本地会话,后台有限时撤销 | `/logout` 不返回时仍退出 |
|
||
| 支付截止被挂起轮询吞掉 | 一个轮询会话拥有独立五分钟截止与单请求超时,关闭/换单/换身份使旧响应失效 | 浏览器外部时钟推进、无重复支付 |
|
||
| SSH 搜索翻页重复 | 区分服务端分页和完整搜索集合,仅由可见行计算切片 | 普通分页、搜索 10/10/5、查询切换/清空 |
|
||
| 重建入口改变登录生命周期 | 登录及旧平台入口在认证过程中保持组件身份;保护页面随会话失效卸载 | 登录和旧入口场景 |
|
||
| 会话失效后重复初始化 | 菜单、支付初始化由当前登录身份控制 | 401 与退出场景 |
|
||
| 图标依赖外网 | 本地打包 Lucide,禁用外部回退 | 所有场景禁止访问外网 |
|
||
| 组件库许可提示 | 换用 MIT 版本,不修改许可校验;主题也引用 MIT 包 | 可见 UI 许可检查 |
|
||
| 框架运行时混用 | Vue、共享函数、Router 版本统一;替换旧私有注入标识 | 实际启动构建服务及浏览器验收 |
|
||
| 跨标签页会话不一致 | 请求与界面使用同一个响应式身份;监听存储变动使其他标签页同步退出 | 第二标签页退出后第一个标签页被保护 |
|
||
| 旧入口凭证回到地址栏 | 同时清理 history 与路由的规范地址,失败页面也不恢复敏感查询 | 旧凭证被拒绝后检查 URL 与 Referrer |
|
||
|
||
首轮已在真实构建上重现 SSH、注销和支付三个缺陷;修复后基础 11 场景通过。
|
||
第二轮最终生产构建通过,扩展 21 个浏览器场景全部通过,无浏览器运行错误和外网请求。
|
||
结果见随本次交付保留的 `acceptance.json`、`acceptance-assets/` 截图和 `acceptance-requests.json` 脱敏请求顺序。
|
||
已修复问题与剩余债务另见 `defect-ledger.json`;这不是整站逐行审查或生产业务验收完成的声明。
|
||
首轮源码包曾在仓库之外的全新临时目录重新执行 `npm ci`、检查、构建与当时的 18 个浏览器场景,全部通过;
|
||
本轮 v2 包的独立验证记录见下文,不把首轮结果当作本轮验收。
|
||
|
||
## 第二轮:手写模板重建
|
||
|
||
本轮仅改写 `app/pages/login.vue`、`app/pages/home.htm.vue`、`app/pages/security/ssh-keys/index.vue`
|
||
和 `app/layouts/blank.vue`,从恢复的渲染函数改成可维护的 setup 与模板;不是在旧 render 外再包一层模板。
|
||
登录保留密码/短信配置、60 秒验证码倒计时、CAPTCHA/安全验证续登、OAuth 组件和安全跳转;
|
||
旧入口保留凭证验证、地址脱敏、重试与卸载取消;SSH 保留服务端分页、完整集合搜索及增改删,清理卸载后的计时器和迟到结果。
|
||
认证布局保留主题、站点配置、logo、redirect 和 slot。原样式的作用域接缝已逐项核对。
|
||
|
||
最小设计复核:以逐页等价替换解决可读性问题;不新增调用方字段或配置;路由与派生状态沿用已有来源;
|
||
不另建渲染/请求抽象或第二条实现路径;重写覆盖每个选定页面的完整模板,不为测试添加产品开关。
|
||
净行数:产品 -863(登录 -390、旧入口 -80、SSH -293、布局 -100),测试 +348,增长用于三个真实页面行为场景及旧场景扩展;依赖/锁文件零变动。
|
||
|
||
合并后执行 `npm run check`、`npm run build`、`npm test`,161 个 Vue 文件和 55 个模块门禁通过,21/21 浏览器场景通过。
|
||
新增覆盖:短信独占配置及倒计时、禁用短信时的默认登录方式、SSH 创建/编辑/删除末页恢复;
|
||
原旧入口失败场景扩展为真实点击重试,并检查不恢复 URL 凭证、不重新密码登录及无 Referrer。
|
||
测试仍通过真实生产构建和独立 HTTP 假后端,不替换内部模块、不预置 JWT、不访问生产服务。
|
||
|
||
本轮交叉复核完整读取四个新文件及相关样式;登录组件、安全验证、会话和路由接缝按台账记录读取范围。
|
||
最新质量复核未发现新增确认回退;详细原始业务规范并不存在,不能宣称全部原规范逐条一致。
|
||
本轮已验证的公开入口为 `/login`、`/home.htm` 与 `/security/ssh-keys`,未因此提升其他页面的人工审查/功能覆盖状态。
|
||
窄屏补查确认认证页和 SMS 表单在 320/390px 下不横向溢出,SSH 编辑弹窗在 390px 下宽 366px;
|
||
核对预填、取消、密码显示切换、注册/重置提示及 redirect 链接。截图证据随 `acceptance.json` 归档。
|
||
另确认一个既有主题文案问题:浅色系统下默认 auto 首次循环到 light,按钮虽写“切换深色模式”却仍浅色;
|
||
基准版本行为相同,作为 `AUTH_THEME_CYCLE_LABEL` 有界债务保留,不把首次点击截图当作深色验收。
|
||
门禁盲区:配置加载失败后重载、CAPTCHA/安全挑战/实名认证续登、真实 OAuth、SSH 剪贴板/失败响应/并发操作、
|
||
旧入口卸载时取消等分支尚未被这 21 个场景完整覆盖;代码复核不代替这些分支的真实交互验证,也无证据将其判定为已坏。
|
||
|
||
v2 源码候选包已通过独立干净目录验收:从提交 `6c73598` 仅导出 `frontend/`,解压到仓库外,
|
||
重新执行 `npm ci`、源码检查、生产构建和 21 个浏览器场景,全部通过;稳定的场景结果与主工作树一致。
|
||
导出包含 686 个文件,无符号链接,不含 `.env`、Git 历史、依赖目录、生成构建和数据库备份。
|
||
此后仅补充文档与台账,没有改变已验收产品、依赖或测试。12 项低/中危传递依赖告警仍在债务清单中。
|
||
|
||
结构性修复扫描:
|
||
|
||
```sh
|
||
rg -n 'fetch\(|AbortController|timeoutMs|logout|legacyLogin|useApi\(' app --glob '*.js' --glob '*.vue'
|
||
rg -n '/pay/.*status|setInterval\(|complete_list_n' app --glob '*.js' --glob '*.vue'
|
||
```
|
||
|
||
接口核心 JSON、上传、下载、旧平台身份验证共四个传输入口统一有限时;验证码刷新和 VNC 会话使用各自
|
||
既有的交互生命周期,不宣称已完成全局网络子系统重写。支付状态只有一个共享轮询所有者,已修复。
|
||
其余服务器刷新、验证码倒计时和实例查询不是同一个“支付绝对期限被吞掉”的缺陷,不在此改动中混改。
|
||
|
||
## 仍需联调 / 有界技术债
|
||
|
||
规模说明:原仓库没有 `frontend/`,新增的是已有业务的独立源码表达,不是同等数量的新功能。
|
||
相对重建前基准,应用源码约 +123,394 行、现有样式展开后 +19,836 行、测试约 +1,250 行;
|
||
构建/锁文件/工具约 +9,964 行,静态资产文本约 +2,605 行,另保留二进制图片和字体。
|
||
文档、截图与逐文件台账单独计量,不作为产品逻辑。较大体量主要来自恢复全部业务渲染函数和将压缩样式格式化;
|
||
没有为每个页面另造一套框架、请求系统或测试专用产品开关。不能因编译全绿就省略后续按业务逐页维护与联调。
|
||
|
||
- 真实下单、续费/升级、发票、财务、安全验证、短信/邮件、第三方 CAPTCHA/OAuth、真实支付、VNC 握手及生产反代:未使用生产环境验证。
|
||
- `/captcha/` 及 `/remote-console/sessions` 为同源接口,必须在开发/测试部署另行配置反代,不能仅依赖 API origin。
|
||
- 原远程控制网关属于独立服务。本工程保留客户端协议,但没有重写或部署该服务;此前审查发现的网关配额并发竞争仍需单独修复。
|
||
- 浏览器回归采用外部 HTTP 假后端,不能代替供应商接口兼容性验收;52 个页面可构建不代表所有分支、每种响应字段都已人工核对。
|
||
- 默认保留 JWT 持久化方式与登录 AES 协议,未进行会影响后端契约的身份协议升级;CryptoJS 已停止维护,应在前后端协同变更时迁移。
|
||
- `npm audit` 的传递依赖低/中危告警仍保留,具体结果见 `dependency-audit.json`;没有盲目使用 `--force` 降级框架。对外上线前应复核受影响路径与补丁版本。
|
||
- 大部分恢复页面仍含短局部变量和较长渲染函数,非逐字原始开发源码,也非每个页面都已重新手写模板。人工深度审查集中在入口、会话、支付、分页和远控边界。
|
||
|
||
旧服务器及数据库备份未导入新前端,没有覆盖原发布目录。新工程的所有变更仅限 `frontend/`。
|