TanWenyan
|
0499a3f0e5
|
fix(evaluation): 修复 updateEvaluationPoint 返回数据格式判断问题
## 问题描述
更新评查点时出现"更新评查点失败:返回数据格式不正确"错误
## 根本原因
- updateEvaluationPoint 和 createEvaluationPoint 对返回数据的格式判断过于严格
- 当 PostgREST 返回空数组时,代码没有正确处理
## 解决方案
### updateEvaluationPoint
- 添加详细的调试日志,记录返回数据的类型和格式
- 当返回空数组时,尝试重新获取数据(因为更新可能已成功)
- 改进错误消息,提供更明确的错误提示
### createEvaluationPoint
- 添加相同的调试日志
- 当返回空数组时,提供明确的错误消息并建议刷新页面
- 改进数据格式判断逻辑
## 技术改进
- 分层处理数组格式:有数据、空数组、非数组
- 空数组情况下的降级处理(update 重新获取,create 提示刷新)
- 保留所有调试日志便于问题诊断
## 测试建议
请在控制台查看日志输出,确认 PostgREST 返回的实际数据格式
|
2025-11-25 16:15:27 +08:00 |
|
TanWenyan
|
f5a5887651
|
feat(evaluation): 完成评查点完整CRUD接口对接
## 主要变更
### API层 (app/api/evaluation_points/rules.ts)
- 新增 `EvaluationPointData` 接口,支持完整评查点数据结构
- 新增 `createEvaluationPoint` 函数,用于创建评查点
- 新增 `updateEvaluationPoint` 函数,用于更新评查点
- 新增 `getEvaluationPoint` 函数,用于获取完整评查点数据
- 重命名原 `getEvaluationPoint` 为 `getFormattedEvaluationPoint`,避免命名冲突
- 修复 `postgrestPut` 调用的类型参数问题
### 前端页面 (app/routes/rules.new.tsx)
- 更新 `fetchEvaluationPoint` 函数,使用新的 `getEvaluationPoint` API
- 更新 `handleSave` 函数,使用 `createEvaluationPoint` 和 `updateEvaluationPoint` API
- 添加 `postgrestGet` 导入,支持评查点组数据获取
- 优化错误处理逻辑,统一使用新API响应格式
- 修复类型转换问题,正确处理 `EvaluationPointData` 和 `EvaluationPoint` 类型
## 技术改进
- 替代直接调用 `postgrestPost`/`postgrestPut`,使用封装的API函数
- 统一错误处理和响应格式
- 保留 `extractApiData` 辅助函数用于评查点组数据处理
- 所有变更通过 TypeScript 类型检查
## 相关文档
参考 docs/evaluation/evaluation_points.md 中的 FastAPI 接口定义
|
2025-11-25 14:55:42 +08:00 |
|
TanWenyan
|
fda49b1541
|
feat(evaluation): 模块2.5 - 新增评查点批量操作接口
功能变更:
1. 新增 batchUpdateRuleStatus 函数
- 支持批量启用/禁用评查点
- 逐个验证评查点ID有效性
- 使用增强的 updateRule 函数确保数据完整性
- 支持部分成功场景
- 返回详细的操作结果:
* success: 是否全部成功
* updated_count: 成功更新数量
* failed_ids: 失败的ID列表
* errors: 详细错误信息(包含每个失败ID的错误原因)
2. 新增 batchDeleteRules 函数
- 支持批量删除评查点
- 使用增强的 deleteRule 函数(自动包含关联检查)
- 逐个验证每个评查点的删除条件:
* ID存在性
* 关联评查结果检查
- 支持部分成功场景
- 返回详细的操作结果:
* success: 是否全部成功
* deleted_count: 成功删除数量
* failed_ids: 失败的ID列表
* errors: 详细错误信息(包含每个失败ID的错误原因)
技术实现:
- 复用增强的 getRule, updateRule, deleteRule 函数
- 继承所有单个操作的验证逻辑
- Try-catch 确保单个失败不影响整体流程
- 详细的错误追踪和报告
- 类型安全的返回值结构
安全性保障:
- 批量删除时自动检查每个评查点的关联评查结果
- 如果评查点已被使用,阻止删除并记录错误
- 防止误删除造成数据不一致
- 提供清晰的失败原因帮助用户理解和处理
验收标准:
✅ 支持批量启用/禁用评查点
✅ 支持批量删除评查点
✅ 返回更新/删除成功数量
✅ 返回失败的ID列表
✅ 提供详细的错误信息
✅ 支持部分成功场景
✅ 批量删除包含关联检查
✅ 类型安全的API设计
符合实施计划:
- 阶段 2.5:评查点批量操作接口对接 ✅
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-25 12:28:45 +08:00 |
|
TanWenyan
|
92e1ff0f8b
|
feat(evaluation): 模块2.3+2.4 - 验证复制功能和增强删除接口关联检查
模块 2.3 - 评查点复制功能验证:
✅ duplicateRule 函数验证完成
- 复制时自动添加 "-COPY" 后缀和 "(复制)" 标记
- 依赖增强后的 createRule 进行完整验证
- 自动继承所有验证规则(编码唯一性、格式检查、分组验证等)
- 如果编码已存在会返回清晰错误提示
模块 2.4 - 评查点删除接口增强:
1. 增强 deleteRule 函数
- 添加评查点ID存在性验证
- 添加关联评查结果检查(evaluation_results 表)
- 如果评查点已被使用,阻止删除并提示使用禁用功能
- 优雅处理表不存在的情况(向后兼容)
- 限制查询数量(limit:1)提高性能
2. 安全性增强
- 防止删除已使用的评查点,保护数据完整性
- 提供清晰的错误提示和替代方案建议
- 404 状态码表示评查点不存在
- 400 状态码表示评查点已被使用
技术实现:
- 使用 getRule 验证 ID 有效性
- 使用 PostgREST 查询关联记录(limit:1优化)
- 处理不同端口API响应格式差异
- Try-catch 优雅处理表不存在场景
验收标准:
✅ 复制功能正确生成唯一编码
✅ 复制功能继承完整验证逻辑
✅ 删除前检查评查点存在性
✅ 删除前检查关联评查结果
✅ 提供清晰的错误提示
✅ 建议使用禁用功能代替删除
符合实施计划:
- 阶段 2.3:评查点复制功能对接 ✅
- 阶段 2.4:评查点删除接口对接 ✅
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-25 12:26:52 +08:00 |
|
TanWenyan
|
371846c5ad
|
feat(evaluation): 模块2.2 - 增强评查点创建/更新接口验证逻辑
功能变更:
1. 增强 createRule 函数
- 添加必填字段验证(name, code)
- 验证名称长度(1-100字符)
- 验证编码格式(仅允许字母、数字、连字符和下划线)
- 验证编码唯一性(防止重复)
- 验证分组ID有效性(检查分组是否存在)
- 自动trim名称和编码空格
- 返回详细的错误信息和HTTP状态码
2. 增强 updateRule 函数
- 验证评查点ID有效性(检查评查点是否存在)
- 验证名称长度(如果提供)
- 验证编码格式(如果提供)
- 验证编码唯一性(排除自身,防止与其他评查点冲突)
- 验证分组ID有效性(如果提供)
- 自动trim名称和编码空格
- 支持部分字段更新
- 返回详细的错误信息和HTTP状态码
技术实现:
- 复用 getRulesList 进行编码唯一性检查
- 复用 getRule 进行ID有效性检查
- 使用 PostgREST 查询验证分组存在性
- 精确匹配防止关键词模糊搜索误判
- 统一错误处理和状态码返回
验收标准:
✅ 必填字段验证
✅ 名称长度验证(1-100字符)
✅ 编码格式验证(^[a-zA-Z0-9-_]+$)
✅ 编码唯一性验证
✅ 分组ID有效性验证
✅ 更新时ID存在性验证
✅ 更新时编码唯一性验证(排除自身)
✅ 支持部分字段更新
✅ 返回清晰的错误提示
符合实施计划:
- 阶段 2.2:评查点创建/更新接口对接 ✅
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-25 12:24:32 +08:00 |
|
TanWenyan
|
aaa4046c41
|
feat(evaluation): 模块2.1 - 增强评查点查询接口和新增统计接口
功能变更:
1. 增强 getRulesList 函数
- 添加风险等级筛选参数 (risk: '高' | '中' | '低')
- 支持按风险等级精确筛选评查点
- 保持现有分页、关键词搜索、分组筛选等功能
2. 新增 getRuleStatistics 函数
- 返回评查点总数 (total_count)
- 返回启用/禁用数量 (enabled_count, disabled_count)
- 返回按风险等级分组统计 (by_risk: {low, medium, high})
- 返回按规则组分组统计 (by_group: [{group_id, group_name, count}])
- 规则组统计按数量降序排序
技术实现:
- 使用 PostgREST 客户端进行数据查询
- 处理不同端口API响应格式差异
- Map数据结构优化分组统计性能
- 批量查询规则组名称避免N+1查询问题
符合实施计划:
- 阶段 2.1:评查点查询接口对接 ✅
- 所有验收标准已满足
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-25 12:21:44 +08:00 |
|
LiangShiyong
|
3850d05bdd
|
feat: 1. 将大部分的请求从fetch改成axios方便管理。
2. 给文档类型添加入口模块和相关数据的渲染。并且给文档类型进行功能上的角色权限区分
3. 新增角色权限管理页面
|
2025-11-20 20:34:31 +08:00 |
|
LiangShiyong
|
2edde8a8ab
|
feat: 1. 完善全局路由的访问权限的验证。 2. 完善接口返回的树形路由结构 3.优化评查点列表的查询,改用表连接的方式,废弃使用数据库的rpc函数,同时进行地区隔离和权限隔离。
4. 删除冗余的评查文件列表。 5.完善上传文档 页面初始化查询数据的时候 查询文件类型(改成动态指定) 6. 添加获取入口模块的查询接口。 7.完善服务端中判断token的有效性,失效则跳转到登录页。
8. 重构layout和sidebar的页面,改成由动态权限路由来渲染对应的菜单栏。 9.重构入口页面,通过动态查询根据不同地区的人返回不同的入口。
|
2025-11-20 01:35:30 +08:00 |
|
LiangShiyong
|
064f05ffa5
|
添加根据合同/卷宗的入口进行分类评查点列表,同时区分卷宗添加的分组属于卷宗,合同添加的分组属于合同
|
2025-10-29 21:01:01 +08:00 |
|
LiangShiyong
|
59706b70d0
|
给所有请求都加上jwt,隐藏生成jwt的secret(放到.env中),隐藏app-secret(放在pm2运行配置文件中,后续直接读取环境配置即可)
|
2025-10-17 15:28:22 +08:00 |
|
LiangShiyong
|
87ad3376fe
|
完善卷宗和合同的数据隔离的效果
|
2025-06-03 21:06:48 +08:00 |
|
LiangShiyong
|
b02978508d
|
删除所有console.log输出,优化评查结果的表格的显示,添加新的页码获取逻辑
|
2025-06-02 18:55:00 +08:00 |
|
LiangShiyong
|
5c2c367856
|
新增提示Toast组件
|
2025-04-21 09:22:13 +08:00 |
|
LiangShiyong
|
60680cd4bf
|
合并评查点新增代码
|
2025-04-13 15:09:01 +08:00 |
|
LiangShiyong
|
145aec6aa6
|
封装评查点列表的接口,完成删除和查找
|
2025-04-03 19:59:57 +08:00 |
|
LiangShiyong
|
2bde2bd76e
|
封装评查点的相关接口,完成评查点列表的简单搜索和查询
|
2025-04-02 19:17:44 +08:00 |
|
LiangShiyong
|
706cea8705
|
完成文档列表页面ui,封装部分上传文件的公共组件,封装请求接口
|
2025-04-01 22:14:43 +08:00 |
|