status: complete created: 2026-07-15 complexity: 🔴复杂
本变更处理用户集中反馈的五项平台问题:流程已办消息动作不准确、通用导入缺少预览/进度/结果反馈、加解密总开关未贯通前后端、AI 模型列表操作列裁剪、用户关联管理查询在 MySQL ONLY_FULL_GROUP_BY 下报错。
完成后应达到以下可验证结果:
/ai/provider-model 模型表格在宽屏和需要横向滚动的场景下都能看到“测试、编辑、删除”三个操作。ONLY_FULL_GROUP_BY。forge-admin-ui/src/layouts/components/MessageNotification.vue#isApprovalMessage 只按 bizType === 'FLOW_TODO' 判断,并对所有此类消息展示“去审批”。forge-server/forge-framework/forge-plugin-parent/forge-plugin-flow/src/main/java/com/mdframe/forge/starter/flow/listener/FlowTaskEventListener.java 在任务完成后调用 messageService.markWebReadByBiz("FLOW_TODO", taskId),因此 FLOW_TODO + readFlag=1 是现有链路中已完成消息的可用标识。forge-admin-ui/src/components/ai-form/AiCrudPage.vue#handleImportRequest 选中文件后立即上传;成功后直接关闭弹窗,只用消息提示摘要。ImportResult 和 DynamicCrudImportResult 已提供 totalRows/successRows/failedRows/errors/summary,无需新增数据库表即可展示核心指标。ExcelImportServiceImpl#downloadTemplate 可按配置写样例行,但模板没有字段说明页。DynamicCrudExcelService#downloadImportTemplate 当前只写表头和空数据,未提供样例值或字段说明。xlsx 依赖,可在浏览器本地读取工作表并限制预览行数,不需要先把原始文件上传到服务器。EncryptResponseBodyAdvice、DecryptRequestBodyAdvice 已检查 CryptoProperties.enabled 与 enableApiCrypto。ConfigManagerService#saveCryptoConfig 只更新 sys_config_group,没有同步 sys_config 并刷新 @RefreshScope 运行时属性。forge-admin-ui/src/utils/crypto/crypto-config.js 静态设置 enabled: true,应用启动时没有读取后端配置。JacksonCryptoConfiguration 只在启动阶段按属性注册字段加解密,已注册的 CryptoFieldSerializer/CryptoFieldDeserializer 没有在每次序列化时检查动态总开关。SM4Encryptor/AESEncryptor 会在 Bean 构造阶段无条件解析默认密钥;即使总开关关闭,历史无效密钥仍会阻断服务启动。RSA 配置密钥对也存在同类风险。forge-admin-ui/src/views/ai/provider-model.vue#modelColumns 在宽度 100px 的右固定列内渲染三个文本按钮,实际内容宽度超过列宽而被固定列表层裁剪。SysUserOrgRoleMapper.xml#selectRoleNamesByUserOrg 使用 SELECT DISTINCT r.role_name,但按未出现在选择列表里的 r.sort 排序,MySQL 8 严格模式会拒绝该查询。ONLY_FULL_GROUP_BY。FLOW_TODO 且 readFlag=0 才视为当前可办理的审批消息;已读流程消息仍可在消息列表中查看,但不进入待办审批页。secretKey、RSA 私钥或其它密钥材料。enabled=false 或 API 开关 enableApiCrypto=false 任一成立,前端 API 加密均视为关闭。enabled 和 enableFieldCrypto 双重约束。本变更不新增表、字段或内置数据,不修改已执行 Flyway 脚本。
| 操作 | 接口 | 方法 | 变更内容 |
|---|---|---|---|
| 新增 | /crypto/config |
GET | 匿名返回安全裁剪后的前端加解密运行配置,响应固定明文 |
| 调整 | /api/config/manage/crypto |
PUT | 保存成功后立即同步运行时配置;响应固定明文 |
| 调整 | 既有导入接口 | POST | 协议不变,前端完整展示既有导入结果指标 |
| 调整 | 既有导入模板接口 | GET | 工作簿增加样例行与“填写说明”工作表 |
AiCrudPage 的所有通用导入页面。enabled=true 的安全默认值,不能因网络异常自动降级明文。X-Inner-Call 暴露给浏览器,不改变既有内部调用信任边界。test-spec.md。无。用户已明确要求继续实施,并明确禁止使用 ui-ux-pro-max。
AiCrudImportModal,避免继续扩大已有 5000 行以上的 AiCrudPage.vue。CryptoProperties 为单一运行时事实源;配置中心保存后通过现有 ConfigSyncService 同步并刷新。/crypto/config,失败时保留静态加密开启默认值。GROUP BY r.id, r.role_name, r.sort,保证排序字段确定且兼容同名不同角色。| Task | 状态 | 实际改动文件 | 备注 |
|---|---|---|---|
| Task 1 | complete | MessageNotification.vue、消息判断工具及测试 |
已办消息不再提供审批动作 |
| Task 2 | complete | AiCrudImportModal.vue、导入工具、Excel 模板写入器及接入服务 |
支持有限预览、真实上传进度、结果指标、样例和填写说明 |
| Task 3 | complete | Config/Crypto/Auth Starter、前端运行配置与配置中心 | 保存后写入 sys_config 并刷新;前后端与字段级开关贯通 |
| Task 4 | complete | provider-model.vue |
操作列 160px、横向宽度 1030px |
| Task 5 | complete | SysUserOrgRoleMapper.xml |
严格模式兼容 SQL 已落地 |
| Task 6 | complete | test-spec.md、execution-log.md |
单测、Lint、XML、前后端构建和空白检查已完成 |
| Task 7 | complete | SM4Encryptor.java、AESEncryptor.java、CryptoAutoConfiguration.java 及回归测试 |
修复全局关闭后无效历史密钥阻断启动 |
实现与静态审查通过,新增前端测试 11/11、Excel 模板测试 1/1、加密器生命周期测试 3/3 通过,Admin 42 模块打包和前端生产构建通过。未启动真实服务或数据库;匿名运行配置、开关切换后的明文/密文以及用户关联管理接口需在部署环境做运行态冒烟。
ui-ux-pro-max;视为授权按本 Spec 直接实施。