4.4 KiB
4.4 KiB
立项配置代码审计报告(2026-02)
范围
- 前端:
frontend/src/views/admin/ProjectDetail.vue、frontend/src/api/studies.ts、frontend/src/types/setupConfig.ts、frontend/src/utils/setupFieldLocator.ts - 后端:
backend/app/api/v1/studies.py、backend/app/crud/study_setup_config.py、backend/app/schemas/study_setup_config.py、backend/app/services/setup_config_excel.py - 文档:
docs/setup-config-api.md、docs/setup-config-curl-smoke.sh、docs/postman/setup-config.postman_collection.json、backend/scripts/smoke_setup_config.py
发现清单
严重(会导致错误或明显行为偏差)
- 无新增严重问题。
中等(会导致交互不一致或维护风险)
ProjectDetail.vue中存在大量v-if="false"历史分支(Step4-7),增加阅读成本并容易引发误改。- 步骤表格从“输入态表格”转“展示态 + 抽屉编辑”后,存在未清理的旧方法与旧样式残留,导致逻辑路径复杂。
- “发布预览”语义已切换为“当前草稿只读预览”,但文档未明确,容易与后端
published_data概念混淆。
低(代码异味/重复/可读性)
ProjectDetail.vue文件过长(约 3800+ 行),后续改动冲突概率高。- 多个步骤编辑抽屉逻辑重复,适合后续抽象为通用
RowEditorDrawer。 - 表格列模板重复,适合后续改为列配置驱动。
本轮已处理
- 删除 Step4-7 全部
v-if="false"模板分支。 - 删除上述分支遗留的无用方法:
handleSiteMilestoneSiteChangehandleSiteEnrollmentSiteChangehandleCenterConfirmSiteChangetouchStrategyapplyStrategy
- 清理无用样式:
.section-toolbar.setup-content.is-published-preview .section-toolbar相关规则
- 保持现有交互行为不变并完成构建验证。
- 修复步骤标题行按钮保护不一致问题:
- 第2/4/5/6/7步标题行功能键增加
:disabled="!canEditSetup",避免锁定项目或无权限时误触发。 - 对应新增/删除/抽屉打开与保存方法统一加守卫,防止外部调用绕过前端可见状态。
- 第2/4/5/6/7步标题行功能键增加
- 收敛重复的草稿可编辑判定,新增
canMutateDraft()供步骤行编辑方法复用(不改变界面行为)。 - 抽取步骤行编辑通用控制器(
IndexedEditorController)与通用函数:openIndexedEditorgetEditingIndexcloseIndexedEditor复用到 Step2/4/5/6/7 的单行抽屉编辑逻辑,减少重复代码。
- 合并重复
onMounted注册逻辑,统一在单一入口完成loadProject与beforeunload监听初始化。 - 新增
frontend/src/composables/useSetupConfig.ts:- 将 setup-config 相关 API 编排从页面中收口到 composable(获取/保存/发布/版本列表/回滚/版本删除/Excel 导入导出)。
ProjectDetail.vue改为依赖 composable 暴露的方法,降低页面对 API 层的直接耦合。
- 新增
frontend/src/utils/setupDiffRows.ts:
- 将“步骤差异明细”计算与字段路径可读化逻辑从
ProjectDetail.vue抽离为工具函数。 - 页面保留项目主字段差异拼装,步骤差异统一由工具输出,降低页面认知负担。
- 将步骤标题行按钮显隐规则收敛为
stepActionMode计算属性:
- 去除模板中多段
activeStep === n && !isPublishedView分支。 - 保持按钮行为与权限控制不变,降低后续步骤扩展的修改面。
验证结果
frontend npm run build通过。- 后端 setup-config 核心文件通过 AST 语法解析检查。
- 当前环境
npx tsc --noEmit失败主要来自项目既有依赖类型版本不匹配(vue/element-plus/csstype),非本轮立项配置改动引入。
一致性核对结果
- 前后端 setup-config 路由一致:
GET/PUT /setup-configPOST /setup-config/publishGET /setup-config/versionsPOST /setup-config/rollbackDELETE /setup-config/versions/{target_version}GET /setup-config/export-excelPOST /setup-config/import-excel
- 前端
setupConfig类型与后端 schema 字段一致(published_data仍保留用于发布快照与差异比较)。
下一步建议(不改行为)
- 拆分
ProjectDetail.vue为步骤子组件(先拆 Step4-7)。 - 抽象通用行编辑抽屉组件,统一校验和保存流程。
- 使用列配置对象复用
el-table-column渲染,降低重复模板。