test-spec.md 13 KB

测试规格:app-entry-page-form-unification

范围

本变更覆盖应用入口、列表设计器、表单设计器、运行态渲染、发布检查和低代码发布版本读取链路。

P0 验证

  • 前端定向 ESLint:覆盖列表设计器、GridBlockRenderer、page-schema、AiCrudPage、运行页和表单属性面板。
  • 前端生产构建:确认 Vue 模板、路由运行页和低代码设计器能完成 Vite 构建。
  • 后端生成器模块编译:确认发布版本快照读取、发布检查和 Mapper XML 能编译通过。
  • git diff --check:确认无空白字符错误。

P1 验证

  • 有本地后端和测试数据时,手动验证:
    • 保存草稿后不发布,已发布入口仍显示旧版本表单/列表。
    • 列表设计器真实预览在 mock、真实列表、新增、编辑、详情模式下状态提示正确。
    • 真实预览失败后发布检查出现 PAGE_PREVIEW_API_ERROR
    • 按钮权限码和显示条件在运行态隐藏不满足条件的操作。
    • 表单事件 request 的 resultMapping 能把接口响应回填到提交 payload。

本轮跳过项

  • 未启动本地后端、数据库和浏览器做端到端点击验证;本轮以静态检查、前端构建和后端编译为验收证据。

2026-06-20 UI 修复增量验证

  • 覆盖范围:表单设计右侧属性栏样式、表单预览弹窗、列表设计预览弹窗、列表只读画布白底。
  • 必跑验证:
    • 定向 ESLint 覆盖本轮 4 个 Vue 文件。
    • 本轮相关文件 git diff --check
    • pnpm --dir forge-admin-ui build
  • 跳过项:
    • 未启动浏览器做截图验证;当前环境只做构建、Lint 和空白检查闭环。

2026-06-20 发布解密与预览滚动修复验证

  • 覆盖范围:
    • 前端密钥交换恢复逻辑,避免使用本地旧会话密钥导致 /ai/business/object/{id}/designer 解密失败。
    • 后端解密结果为空时的明确错误保护,避免 NullPointerException
    • 列表预览弹窗横向滚动条。
  • 必跑验证:
    • 定向 ESLint:key-exchange.jsBusinessListDesigner.vue
    • 后端 forge-starter-crypto Java 17 编译。
    • 前端生产构建。
    • 本轮相关文件 git diff --check
  • 跳过项:
    • 未启动本地后端和浏览器做实际发布/保存点击验证。

2026-06-20 发布接口加密与日志脱敏增量验证

  • 覆盖范围:
    • 显式 encrypt: true 的业务对象设计器保存、字段、布局、动作和发布接口。
    • 前端请求拦截器在无会话密钥时先触发密钥协商,协商失败则阻止明文请求。
    • SM4 大报文 Base64 转换改为分块处理,避免设计器大 JSON 加密时栈溢出。
    • 操作日志对 @ApiDecrypt 接口的 @RequestBody 解密对象做省略记录,避免 sys_operation_log.request_params 落完整明文设计器 JSON。
  • 必跑验证:
    • SM4 30 万字符级别大报文加密/解密往返脚本。
    • 定向 ESLint:sm4.jscrypto-interceptor.jsinterceptors.jsbusiness-app.js
    • 后端 forge-starter-log Java 17 编译。
    • 前端生产构建。
    • 本轮相关文件 git diff --check
  • 跳过项:
    • 未重新启动后端服务复测数据库 sys_operation_log 新记录;本轮通过切面编译和前端构建完成静态闭环。

2026-06-20 表单保真与发布阻断收敛增量验证

  • 覆盖范围:
    • 新版表单画布 flushDesigner() 保留多表单元数据和默认表单 key,避免保存/发布后运行态新增、编辑弹窗取到旧表单或错误表单。
    • 发布检查仅保留会直接影响页面渲染、表单绑定、运行配置和表结构的阻断项;其他检查降级为提醒,不阻断发布。
    • 运行页存在 formDesignerSchema 时,新增/编辑弹窗不再把默认 editSchema 中未出现在画布上的字段追加回表单。
    • 运行页从 formDesignerSchema 生成布局时保留标题、按钮等无字段绑定的独立组件,确保应用页新增/编辑弹窗与表单设计器结构一致。
  • 必跑验证:
    • 定向 ESLint:ForgeFormDesigner.vue
    • 定向 ESLint:crud-page.vue
    • 后端 forge-plugin-generator Java 17 编译。
    • 前端生产构建。
    • 本轮相关文件 git diff --check
  • 跳过项:
    • 未启动本地后端和浏览器做新增/编辑弹窗端到端比对;本轮通过构建、编译和静态检查验证。

2026-06-20 左树右表画布宽度联动增量验证

  • 覆盖范围:
    • 左树右表布局同步不再用固定 3 栅格判定主区块风险,避免自定义左树宽度被自动还原。
    • 左树宽度调整时,右侧 100% 主区块自动贴到左树右侧并按画布剩余宽度填充。
  • 必跑验证:
    • 定向 ESLint:ListPageGridDesigner.vuepage-schema.js
    • 前端生产构建。
    • 本轮相关文件 git diff --check
  • 跳过项:
    • 未启动浏览器做实际拖拽截图验证;本轮通过静态检查和构建验证。

2026-06-20 CRUD 预览 100% 宽度与 resize 请求风暴增量验证

  • 覆盖范围:
    • 低代码画布中 AiCrudPage 外层保持 width: 100%,不再用内部内容撑大组件宽度。
    • CRUD 预览外层不裁剪内容,表格横向滚动由 AiCrudPage 根据列 width/minWidth 自己计算。
    • publicParams/publicQuery 监听改为稳定内容签名,避免设计器拖拽宽高导致对象引用变化时反复调用列表接口。
  • 必跑验证:
    • 定向 ESLint:GridBlockRenderer.vueAiCrudPage.vue
    • 前端生产构建。
    • 本轮相关文件 git diff --check
  • 跳过项:
    • 未启动浏览器做实际拖拽网络面板验证;本轮通过代码路径、定向 ESLint、构建和空白检查验证。

2026-06-20 树折叠与栅格布局组件增量验证

  • 覆盖范围:
    • 筛选树折叠状态不再只收内部内容,设计态和只读态外层区块都会按折叠 rail 宽度显示,并联动右侧主区块视觉宽度。
    • 页面组件面板新增 grid-layout 栅格布局容器。
    • 栅格布局支持列数、行数、列间距、行间距、格子最小高、水平/垂直对齐、格子边框、格子背景和格子内容管理。
    • 拖拽组件到栅格具体 cell 后,cell 内子组件按 width: 100% 自适应。
  • 必跑验证:
    • 定向 ESLint:ListPageGridDesigner.vueGridBlockRenderer.vuepage-schema.js
    • 前端生产构建。
    • 本轮相关文件 git diff --check
  • 跳过项:
    • 未启动浏览器做实际拖入栅格 cell 的可视化验证;本轮通过代码路径、定向 ESLint、构建和空白检查验证。

2026-06-20 栅格子组件设计态控制增量验证

  • 覆盖范围:
    • 栅格 cell 内子组件选中后显示拖拽手柄、更多操作按钮和 resize 锚点。
    • 栅格内子组件更多菜单支持复制和删除,复制时递归重置子节点 id。
    • 已放入栅格的子组件可拖拽移动到其他栅格 cell,目标 cell 高亮提示落点。
    • 栅格内子组件 resize 支持递归更新样式,默认宽度保持 100%,高度按组件默认高度排布。
  • 必跑验证:
    • 定向 ESLint:ListPageGridDesigner.vueGridBlockRenderer.vuepage-schema.jsForgePropertyPanel.vue
    • 前端生产构建。
    • 本轮相关文件 git diff --check
  • 跳过项:
    • 未启动浏览器做真实拖拽和锚点拖动验证;本轮通过代码路径、定向 ESLint、构建和空白检查验证。

2026-06-20 栅格配置可理解性与子组件宽度增量验证

  • 覆盖范围:
    • 栅格结构、格子样式、格子内容配置提前到属性面板顶部。
    • 栅格样式控件改为带明确标签的配置项:总列数、列间距、组件行距、最小高度、垂直位置、水平位置、显示格子边框。
    • 拖拽到栅格 cell 时恢复蓝色背景落点提示。
    • 栅格内子组件拖动宽度锚点后,外壳宽度按固定宽度显示,不再被 max-width: 100% 卡住。
  • 必跑验证:
    • 定向 ESLint:ListPageGridDesigner.vueGridBlockRenderer.vuepage-schema.jsForgePropertyPanel.vue
    • 前端生产构建。
    • 本轮相关文件 git diff --check
  • 跳过项:
    • 未启动浏览器做真实属性面板和拖拽锚点视觉验证;本轮通过代码路径、定向 ESLint、构建和空白检查验证。

2026-06-20 页面/表单栅格拖拽一致性增量验证

  • 覆盖范围:
    • 页面栅格内已有子组件拖拽时,外层画布能识别已有块并显示普通画布落点;拖出栅格后转为顶层块。
    • 页面栅格内已有子组件仍可拖到其他栅格 cell,目标格子继续显示高亮落点。
    • 表单设计器栅格 row 改为 24 栅格语义,默认 4 个格子、每格 span=6。
    • 表单栅格属性面板拆分为总列数、格子数量、列间距、每格 span,避免列数和 span 混用。
    • 表单栅格 row 接收普通字段/组件时自动投放到目标格子,已有组件 pointer 拖动也会从 row 映射到具体 col。
  • 必跑验证:
    • 定向 ESLint:ListPageGridDesigner.vueGridBlockRenderer.vueForgeFormCanvas.vueForgeFormCanvasNode.vueForgePropertyPanel.vuedesignerLayoutFactory.jsformDesignerSchema.js
    • 前端生产构建。
    • 本轮相关文件 git diff --check
  • 跳过项:
    • 未启动浏览器做真实拖拽录屏/截图验证;本轮通过代码路径、定向 ESLint、构建和空白检查验证。

2026-06-21 栅格拖拽丝滑度与配置入口增量验证

  • 覆盖范围:
    • 列表页栅格内子组件手柄接入 pointer 拖动,不再依赖浏览器原生 drag/drop;拖动过程中持续显示栅格 cell 或外层画布落点。
    • 列表页栅格内子组件松手时按当前鼠标位置移动到目标 cell 或转为画布顶层块,拖动过程不实时写 layout,降低卡顿和副作用。
    • 表单设计器 pointer 拖动普通组件经过 row 区域时强制映射到具体 col,避免组件变成 row 的直接子节点。
    • 表单设计器选中 row/col 时在基础配置中前置“栅格快捷配置”,减少查找成本。
  • 必跑验证:
    • 定向 ESLint:ListPageGridDesigner.vueGridBlockRenderer.vueForgeFormCanvasNode.vueForgePropertyPanel.vue
    • 前端生产构建。
    • 本轮相关文件 git diff --check
  • 跳过项:
    • 未启动浏览器做真实拖拽录屏/截图验证;本轮通过代码路径、定向 ESLint、构建和空白检查验证。

2026-06-21 表单/列表栅格嵌套容器与预览一致性增量验证

  • 覆盖范围:
    • 列表页栅格拖拽落点优先命中最内层可接收容器,卡片/标签页放在栅格里后,中间区域可以继续拖入组件。
    • 列表页栅格内已有组件拖拽到卡片/标签页时按容器子节点移动,不再错误掉回画布或被外层 cell 截走。
    • 列表页栅格内子组件手柄去掉原生 HTML5 drag,仅保留 pointer 拖动,减少拖拽抖动和落点丢失。
    • 表单设计器 row/col 视觉降噪,row 只承担栅格结构,col 作为明确投放区;设计态补齐 rowGap,运行预览继续使用 24 栅格 span/gutter 语义。
  • 必跑验证:
    • 定向 ESLint:ListPageGridDesigner.vueGridBlockRenderer.vueAiFormLayoutNodes.vueForgeFormCanvasNode.vueForgePropertyPanel.vue
    • 前端生产构建。
    • 本轮相关文件 git diff --check
  • 跳过项:
    • 未启动浏览器做真实拖拽录屏/截图验证;本轮通过代码路径、定向 ESLint、构建和空白检查验证。

2026-06-21 列表栅格内部拖拽落点降噪增量验证

  • 覆盖范围:
    • 列表栅格内部拖动时,渲染器接收当前正在拖动的子块 id,拖动源原位块进入低透明安静状态。
    • 栅格内部拖动时普通 cell 边框、子组件 hover/selected 边框和内部块 selected 样式不再叠加显示。
    • 目标 cell 只显示一个高对比浅蓝落点层,减少多层边框和斜纹背景造成的视觉混乱。
  • 必跑验证:
    • 定向 ESLint:ListPageGridDesigner.vueGridBlockRenderer.vue
    • 前端生产构建。
    • 本轮相关文件 git diff --check
  • 跳过项:
    • 未启动浏览器做真实拖拽截图验证;本轮通过代码路径、定向 ESLint、构建和空白检查验证。

2026-06-21 列表栅格放置后提示层遮挡修复验证

  • 覆盖范围:
    • 栅格 cell 已有内容时不再渲染整块“释放到此格/拖入组件”覆盖层。
    • 空状态只在 cell 真正没有 children 且不是当前 active drop cell 时显示。
    • cell 内容层级高于提示层,避免拖拽状态残留一帧时盖住刚放入的组件。
  • 必跑验证:
    • 定向 ESLint:GridBlockRenderer.vue
    • 前端生产构建。
    • 本轮相关文件 git diff --check
  • 跳过项:
    • 未启动浏览器做真实拖拽截图验证;本轮通过代码路径、定向 ESLint、构建和空白检查验证。