TanWenyan
|
ac60d64775
|
feat(evaluation): 模块1.5(2/2) - 增强评查点分组列表页功能
功能变更:
1. 服务端筛选和分页
- Loader函数使用增强的 getRuleGroups API
- 支持名称、编码、状态筛选
- 支持分页参数(page, pageSize)
- 仅加载一级分组(pid: null)
- 返回总数用于分页展示
2. 批量操作功能
- 添加批量选择状态管理
- 复选框列(全选/单选)
- 批量启用按钮
- 批量禁用按钮
- 批量删除按钮
- 显示选中数量提示
- 操作后自动刷新列表
3. 用户体验优化
- 仅对有编辑权限的用户显示批量操作
- 批量按钮仅在有选中项时显示
- 操作成功/失败的 Toast 提示
- 删除前二次确认
技术实现:
- useState 管理选中ID列表
- 条件渲染批量操作按钮
- 类型安全的复选框列定义
- 防止事件冒泡(onClick stopPropagation)
- URL参数驱动的服务端筛选
安全性:
- 权限检查(hasEditPermission)
- 批量删除前确认
- 操作失败详细提示
验收标准:
✅ Loader使用服务端筛选和分页
✅ 表格支持复选框多选
✅ 批量操作按钮显示/隐藏正确
✅ 批量启用/禁用功能正常
✅ 批量删除功能正常
✅ 无TypeScript类型错误
✅ 仅有编辑权限的用户可见批量操作
符合实施计划:
- 阶段 1.5(2/2):rule-groups._index.tsx 更新 ✅
- 模块 1.5 完成 ✅
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-25 12:43:01 +08:00 |
|
TanWenyan
|
374e3626cc
|
feat(evaluation): 模块1.5(1/2) - 优化评查点分组表单验证和父级分组选择
功能变更:
1. 优化父级分组选择
- 使用增强的 getRuleGroups API 获取父级分组列表
- 仅显示一级分组(pid: null)
- 仅显示已启用的分组(is_enabled: true)
- 提高分组选择的准确性和安全性
2. 新增编码唯一性异步验证
- 实时验证分组编码唯一性
- 防抖处理(500ms)避免频繁API调用
- 编辑模式下自动排除当前分组自身
- 显示"验证中..."状态提示用户
- 验证失败时显示清晰的错误提示
3. 改进用户体验
- 实时反馈编码是否可用
- 防止提交重复编码的分组
- 优雅的错误处理和状态管理
技术实现:
- 使用 useState 管理验证状态
- setTimeout 实现防抖机制
- 异步函数处理唯一性检查
- 类型安全的错误处理
验收标准:
✅ 父级分组列表仅显示一级分组
✅ 父级分组列表仅显示已启用的分组
✅ 编码唯一性实时验证(防抖)
✅ 编辑模式下排除自身
✅ 显示验证状态
✅ 无TypeScript类型错误
符合实施计划:
- 阶段 1.5(1/2):rule-groups.new.tsx 更新 ✅
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-25 12:38:41 +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 |
|
TanWenyan
|
7f1a05107f
|
feat(evaluation): 模块1.4 - 新增评查点分组批量操作接口
## 主要改进
### 1. 新增 batchUpdateRuleGroupStatus 函数(批量启用/禁用)
- ✅ 参数验证(ID列表不为空,每个ID有效)
- ✅ 逐个验证分组存在性
- ✅ 逐个执行更新操作
- ✅ 返回详细的操作结果
- updated_count: 成功更新的数量
- failed_ids: 失败的ID列表
- errors: 详细的错误信息(包含ID和错误原因)
### 2. 新增 batchDeleteRuleGroups 函数(批量删除)
- ✅ 参数验证(ID列表不为空,每个ID有效)
- ✅ 采用安全的阻止删除策略
- ✅ 逐个检查并删除分组
- ✅ 返回详细的操作结果和错误信息
- deleted_count: 成功删除的数量
- failed_ids: 失败的ID列表
- errors: 详细的错误信息(包含子分组/评查点检查结果)
### 3. 批量操作特性
- ✅ **逐个处理**:确保每个分组都能被正确处理
- ✅ **部分成功支持**:即使部分分组操作失败,成功的也会被处理
- ✅ **详细的错误追踪**:记录每个失败的ID及其失败原因
- ✅ **安全性优先**:批量删除继承单个删除的安全检查
### 4. 返回值结构
```typescript
// 批量更新状态
{
success: boolean; // 是否全部成功
updated_count: number; // 成功更新的数量
failed_ids: string[]; // 失败的ID列表
errors?: Array<{ // 详细错误(可选)
id: string;
error: string;
}>;
}
// 批量删除
{
success: boolean; // 是否全部成功
deleted_count: number; // 成功删除的数量
failed_ids: string[]; // 失败的ID列表
errors?: Array<{ // 详细错误(可选)
id: string;
error: string;
details?: { // 删除失败详情
hasChildren?: boolean;
hasPoints?: boolean;
};
}>;
}
```
## 使用示例
### 批量启用分组
```typescript
const result = await batchUpdateRuleGroupStatus(
['1', '2', '3'],
true,
token
);
if (result.success) {
console.log(`成功启用 ${result.updated_count} 个分组`);
} else {
console.log(`成功 ${result.updated_count} 个,失败 ${result.failed_ids.length} 个`);
result.errors?.forEach(err => {
console.log(`分组 ${err.id}: ${err.error}`);
});
}
```
### 批量删除分组
```typescript
const result = await batchDeleteRuleGroups(['1', '2'], token);
if (result.success) {
console.log(`成功删除 ${result.deleted_count} 个分组`);
} else {
result.errors?.forEach(err => {
if (err.details?.hasChildren) {
console.log(`分组 ${err.id} 有子分组,无法删除`);
}
if (err.details?.hasPoints) {
console.log(`分组 ${err.id} 有评查点,无法删除`);
}
});
}
```
## 相关文件
- app/api/evaluation_points/rule-groups.ts
## 验收清单
- [x] TypeScript 类型检查通过
- [x] 完整的参数验证
- [x] 支持部分成功场景
- [x] 详细的错误追踪
- [x] 安全的删除策略
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-25 12:16:46 +08:00 |
|
TanWenyan
|
89b1d2e5f5
|
feat(evaluation): 模块1.3 - 增强评查点分组删除接口安全性
## 主要改进
### 1. 删除策略优化(从级联删除改为阻止删除)
- ✅ **安全优先**:采用阻止删除策略而非级联删除
- ✅ 删除前检查子分组,如有则拒绝删除
- ✅ 删除前检查关联评查点,如有则拒绝删除
- ✅ 只有空分组才能被删除
### 2. 详细的删除检查
- ✅ ID有效性验证
- ✅ 分组存在性验证
- ✅ 子分组检查(仅一级分组)
- ✅ 评查点关联检查(所有分组)
- ✅ 返回详细的检查结果(childCount, pointCount)
### 3. 友好的错误提示
- ✅ 明确提示存在多少个子分组
- ✅ 明确提示存在多少个评查点
- ✅ 建议用户先清理关联数据
- ✅ 区分不同类型的删除失败原因
### 4. 标记废弃函数
- ✅ deleteChildGroup 标记为 @deprecated
- ✅ deleteEvaluationPointsByGroupId 标记为 @deprecated
- ✅ 保留代码以备将来批量删除功能使用
## 删除策略对比
### 旧策略(级联删除)- 高风险
❌ 删除一级分组时自动删除所有子分组
❌ 自动删除所有关联的评查点
❌ 用户可能误删大量数据
❌ 无法恢复
### 新策略(阻止删除)- 安全
✅ 拒绝删除有子分组的一级分组
✅ 拒绝删除有评查点的分组
✅ 用户必须手动清理关联数据
✅ 防止误删除
✅ 提供清晰的错误提示
## 返回值增强
```typescript
{
success: boolean;
error?: string;
details?: {
hasChildren: boolean; // 是否有子分组
hasPoints: boolean; // 是否有评查点
childCount?: number; // 子分组数量
pointCount?: number; // 评查点数量
}
}
```
## 相关文件
- app/api/evaluation_points/rule-groups.ts
## 验收清单
- [x] TypeScript 类型检查通过
- [x] 删除前完整的关联检查
- [x] 阻止删除有依赖的分组
- [x] 详细的错误提示
- [x] 返回详细的检查结果
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-25 12:13:57 +08:00 |
|
TanWenyan
|
e148fca429
|
feat(evaluation): 模块1.2 - 增强评查点分组创建/更新接口验证
## 主要改进
### 1. 增强 createRuleGroup 函数
- ✅ 名称长度验证(1-100字符)
- ✅ 编码格式验证(只允许字母、数字、连字符、下划线)
- ✅ 编码长度验证(1-50字符)
- ✅ 编码唯一性验证(查询数据库确保不重复)
- ✅ 父级ID存在性验证(二级分组必须有有效的父级)
- ✅ 三级分组防护(不允许在二级分组下创建子分组)
- ✅ 数据库约束错误友好提示
### 2. 增强 updateRuleGroup 函数
- ✅ ID有效性验证(检查分组是否存在)
- ✅ 名称长度验证(1-100字符)
- ✅ 编码格式验证(只允许字母、数字、连字符、下划线)
- ✅ 编码长度验证(1-50字符)
- ✅ 编码唯一性验证(排除自身)
- ✅ **禁止修改pid**(防止分组层级混乱)
- ✅ 数据库约束错误友好提示
- ✅ 提供清晰的错误消息
### 3. 类型安全性改进
- ✅ 修复所有 TypeScript 类型错误
- ✅ 添加类型守卫防止 undefined 访问
- ✅ 确保所有返回值类型正确
## 验证规则
### 分组名称
- 必填,不能为空
- 长度:1-100字符
- 自动去除首尾空格
### 分组编码
- 必填,不能为空
- 长度:1-50字符
- 格式:只允许字母、数字、连字符(-)、下划线(_)
- 必须全局唯一
- 自动去除首尾空格
### 父级ID
- 一级分组:pid = null 或 '0'
- 二级分组:pid = 有效的父级分组ID
- 不允许三级分组
- **更新时不允许修改pid**
## 相关文件
- app/api/evaluation_points/rule-groups.ts
## 验收清单
- [x] TypeScript 类型检查通过
- [x] 完整的字段验证
- [x] 编码唯一性验证
- [x] 父级ID验证
- [x] 禁止修改pid
- [x] 友好的错误提示
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-25 12:11:12 +08:00 |
|
TanWenyan
|
d3b9403d64
|
feat(evaluation): 模块1.1 - 增强评查点分组查询接口
## 主要改进
### 1. 增强 getRuleGroups 函数
- ✅ 添加完整的分页参数支持 (page, pageSize)
- ✅ 添加筛选参数 (name, code, is_enabled, pid)
- ✅ 添加排序参数 (orderBy, order)
- ✅ 返回总数 (totalCount)
- ✅ 支持一级分组和二级分组查询
### 2. 优化 getChildGroups 函数
- ✅ 内部使用改进后的 getRuleGroups 函数
- ✅ 自动添加评查点数量统计
- ✅ 改进类型安全性
### 3. 优化 getRuleGroup 函数
- ✅ 确保评查点数量统计准确
- ✅ 改进错误处理
- ✅ 优化类型守卫逻辑
### 4. 类型定义改进
- ✅ 新增 RuleGroupQueryParams 接口
- ✅ ApiRuleGroup.pid 类型支持 null
- ✅ 修复所有 TypeScript 类型错误
### 5. 创建对接计划文档
- ✅ 详细的 API 对接实施计划
- ✅ 分模块逐步实施策略
- ✅ 验收标准和风险评估
## 相关文件
- app/api/evaluation_points/rule-groups.ts
- docs/evaluation/API对接实施计划.md
## 验收清单
- [x] TypeScript 类型检查通过
- [x] 支持分页、筛选、排序
- [x] 返回评查点数量统计
- [x] 向后兼容现有代码
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-25 12:06:48 +08:00 |
|
TanWenyan
|
47107b45df
|
优化操作提示
|
2025-11-24 20:52:00 +08:00 |
|
LiangShiyong
|
93bae2de17
|
fix: 1. 修复角色权限管理报错误提示的问题
|
2025-11-24 19:46:52 +08:00 |
|
LiangShiyong
|
9b2ee6d9bd
|
Merge branch 'Wren' into shiy-login
|
2025-11-24 18:42:29 +08:00 |
|
LiangShiyong
|
9376e8af6d
|
1. 添加 mocano-editor demo
2. 添加 react-pdf 高亮效果的 demo
|
2025-11-24 18:41:14 +08:00 |
|
TanWenyan
|
689ef6bc3d
|
fix: 修复角色权限管理模块的API认证和数据加载问题
主要修复:
1. 修复所有RBAC API函数使用axios-client(自动添加JWT token)
- getRoles, createRole, updateRole, deleteRole 从rbacFetch切换到axios-client
- 解决401未授权导致的数据加载失败问题
2. 修复用户ID字段不匹配问题
- getAllUsers函数使用user_id字段(兼容user.user_id || user.id)
- 确保角色分配时使用正确的用户ID
3. 修复路由ID不匹配问题
- getRoutes函数改用真实后端API(GET /rbac/user/routes)
- 解决前端Mock路由ID与数据库不一致导致的400错误
4. 增强axios-client成功响应识别
- 支持code=200作为成功状态(原本只支持code=0)
- 兼容不同后端API的响应格式
5. 实现用户单角色限制功能
- 添加getUserRoles API函数
- 分配角色前检查用户现有角色
- 在用户列表中显示当前角色标签
6. 改进创建角色的表单验证
- role_key必须以字母开头(正则:^[a-z][a-z0-9_]*$)
- 添加实时验证提示
- 更新提示文案说明规则
7. 添加删除操作的安全确认机制
- 删除角色/移除用户角色前显示确认模态框
- 3秒倒计时后才能确认删除
- 成功删除后自动刷新数据
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-11-24 18:03:57 +08:00 |
|
LiangShiyong
|
1b546e6818
|
提交api-config文件
|
2025-11-22 16:03:56 +08:00 |
|
LiangShiyong
|
d09d5b709d
|
Merge branch 'PingChuan' into shiy-login
# Conflicts:
# app/config/api-config.ts
fix: 1. 修复无法加载数据的问题:没有从入口页中进来会缺少数据。
2. 加强后端接口关于token的校验错误和权限校验错误的管理。
feat: 1. 对接后端的数据看板的接口。
2. 将系统设置单独抽出来作为管理员的固定一个入口。
|
2025-11-22 15:57:22 +08:00 |
|
LiangShiyong
|
48e515195c
|
提交配置文件
|
2025-11-21 17:23:17 +08:00 |
|
LiangShiyong
|
dab0835605
|
feat: 1.修改提示词模板的不用角色的操作权限。
2. 对接数据看板的数据。
3. 添加入口模块管理的页面。
|
2025-11-21 17:16:07 +08:00 |
|
PingChuan
|
7e7648383e
|
feat:合同文档列表预览完成Collabora集成
|
2025-11-21 11:04:14 +08:00 |
|
PingChuan
|
c3e4b3837f
|
Merge remote-tracking branch 'origin/shiy-login' into PingChuan
|
2025-11-20 20:37:08 +08:00 |
|
PingChuan
|
b9fe57c5fa
|
temp:临时备份,测试合并兼容性
|
2025-11-20 20:36:42 +08:00 |
|
LiangShiyong
|
3850d05bdd
|
feat: 1. 将大部分的请求从fetch改成axios方便管理。
2. 给文档类型添加入口模块和相关数据的渲染。并且给文档类型进行功能上的角色权限区分
3. 新增角色权限管理页面
|
2025-11-20 20:34:31 +08:00 |
|
LiangShiyong
|
2e604e8ede
|
feat: 生成一个结果统计的组件。
|
2025-11-20 16:19:48 +08:00 |
|
LiangShiyong
|
6dc9b4e468
|
feat: 1. 完善文档列表的显示效果,数据对接后端接口返回。
2. 对评查点分组和文档类型的编辑删除新增操作进行限制。
|
2025-11-20 15:26:11 +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
|
adfb84a31d
|
feat: 1. 修改完善全局路由检测。 2. 完善统一的token认证管理,token失效自动跳转到登录页。
|
2025-11-18 20:32:43 +08:00 |
|
LiangShiyong
|
bfe39e45a9
|
feat: 1. 添加axios全局路由拦截进行自动添加请求jwt。 2.重新整理路由表。 3. 文档列表新增版本差异对比。 4.菜单路由可访问列表通过对接接口返回,添加全局路由检测。
5. 修改统一认证登录和管理员登录是通过接口形式进行,存储返回的accessToken。 6. 修改交叉评查的部分样式
|
2025-11-18 11:06:24 +08:00 |
|
LiangShiyong
|
8a50671c39
|
fix: 1.将主页和法务助手对话设置成手机也能够正确加载的响应式布局。
2. 修改合同重新上传模板的可接受文件类型,修改对接的上传模板对应的接口。
3. 交叉评查任务列表去除任务名称的点击效果。
4. 交叉评查文件预览在点击完成评查的按钮后会返回任务列表并打开任务的文档列表。
5.修复点击完成评查按钮造成页面刷新。
6. 修复创建任务的第3步无法返回列表。
|
2025-11-12 15:51:39 +08:00 |
|
LiangShiyong
|
c20c168a13
|
fix: 修改单点登录保存用户的jwt的生成,通过user_id为login,绕过验证进行表的增改。
|
2025-11-11 21:09:11 +08:00 |
|
LiangShiyong
|
12ec2ad7bd
|
fix: 完善单点登录传递回调地址和serverUrl的功能。优化token刷新机制,判断单点登录和管理员登录等等不同路径的处理机制。提示词管理的模板数据查找的时候只需要返回固定的5个类型。隐藏评查点设置中关于抽取的自定义模板的选择。
|
2025-11-11 14:25:44 +08:00 |
|
LiangShiyong
|
95381ddcc2
|
fix: 完善提示词管理页面的优化,数据库中添加相关字段来区分vlm和llm提示词。评查点设置中抽取设置的多模态抽取的类型通过查询数据库来返回数据。
|
2025-11-11 01:16:27 +08:00 |
|
LiangShiyong
|
ddad57529d
|
fix: 修改评查点设置中的多模态抽取设置的逻辑。
|
2025-11-10 20:40:08 +08:00 |
|
LiangShiyong
|
b375c35825
|
fix: 1.将合同模板和交叉评查中的文件下载改用通过后端api进行转发获取文件来下载。 2.修复登录过程中token认证的代码问题。 3.完善api-config文件中不同端口号不同的回调地址配置。
|
2025-11-07 18:36:15 +08:00 |
|
LiangShiyong
|
80f05da984
|
添加正式环境的idaas server地址
|
2025-11-07 11:15:54 +08:00 |
|
LiangShiyong
|
6c09285ac9
|
修改省局的端口的判断为51707
|
2025-11-07 11:12:43 +08:00 |
|
LiangShiyong
|
730e7cb7fe
|
fix: 修复提示词模板识别’{{}}‘的问题
|
2025-11-06 18:10:55 +08:00 |
|
LiangShiyong
|
b99ae6df84
|
fix: 优化提示词模板的创建者的显示
|
2025-11-06 14:51:31 +08:00 |
|
LiangShiyong
|
34cba4a34f
|
fix: 修复评查点分组的结果保存异常
|
2025-11-03 09:47:46 +08:00 |
|
jiangao
|
054fc4f697
|
修复当封面是-1页码的时候无法索引定位
|
2025-10-31 16:09:44 +08:00 |
|
LiangShiyong
|
6a627f356d
|
撤销固定封面的改动
|
2025-10-30 18:20:35 +08:00 |
|
LiangShiyong
|
8358b7a585
|
fix:修改跳转页面如果目标页为1则不进行偏移
|
2025-10-30 18:09:02 +08:00 |
|
TanWenyan
|
d11fc54da2
|
修复文件审核状态更新误报Network Error的问题
问题分析:
- 上传页面等待进度时,前端提示"更新文件审核状态失败:Network Error"
- 实际上后端已成功更新审核状态
- 类似删除会话的问题,API报错但操作实际成功
根本原因:
- axios请求可能因超时/网络波动抛出异常
- postgrestPut捕获错误并返回error
- 前端收到error后显示失败提示
- 但后端实际已成功处理并更新数据库
修复方案:
1. updateDocumentAuditStatus函数优化
- 添加详细日志记录请求和响应
- 即使postgrestPut返回error也返回success
- catch异常也返回success
2. 采用宽容策略的理由
- 更新审核状态具有幂等性
- 重复更新不会造成数据问题
- 下次刷新会显示正确状态
- 避免误报影响用户体验
现在更新文件审核状态不再误报错误,用户体验更流畅
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-10-30 17:51:59 +08:00 |
|
TanWenyan
|
a33213bd1d
|
修复删除会话的错误提示问题(实际成功但显示500错误)
问题分析:
- 删除会话实际成功,但前端提示"Failed to delete conversation: 500"
- difyFetch在响应非2xx时直接抛出异常,导致deleteConversation无法正常返回
- 即使Dify已删除会话,前端也会收到500错误
修复方案:
1. dify-client.server.ts - deleteConversation方法
- 添加try-catch捕获difyFetch异常
- 删除操作特殊处理:即使API返回错误也返回成功
- 理由:会话可能已被删除,避免误报错误
- 下次加载会话列表时会自然发现会话已不存在
2. api.client.ts - deleteConversation函数
- 添加详细日志记录响应状态
- 记录错误详情便于调试
现在删除会话不再误报错误,用户体验更好
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-10-30 15:44:41 +08:00 |
|
TanWenyan
|
c93a87a65e
|
优化思考模式AI回复的UI显示,支持<think>标签解析
新增功能:
1. 创建消息解析工具 message-parser.ts
- 解析 <think> 标签,提取思考过程
- 分离思考内容和实际回复
2. 创建思考过程展示组件 thinking-block.tsx
- 可折叠/展开的思考过程区域
- 参考 GPT-5 和 Claude 网页版设计
- 默认折叠,点击展开查看详细思考过程
3. 修改聊天消息组件 chat-message.tsx
- 集成思考过程解析和展示
- 思考过程单独显示在顶部
- 实际回复正常显示在下方
4. 新增样式 thinking-block.css
- 契合当前淡绿色(#a4e2ad)配色方案
- 渐变背景和流畅动画效果
- 灯泡图标标识思考过程
- 完整的响应式设计
UI效果:
- 思考过程:淡绿色渐变背景,可折叠区域
- 实际回复:正常Markdown渲染
- 交互流畅:展开/折叠动画平滑
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-10-30 15:21:27 +08:00 |
|
TanWenyan
|
8e4213e634
|
修复删除对话时报500错误的问题
问题:
- 删除对话实际成功但前端报错"Failed to delete conversation: 500"
- Dify删除API返回的可能不是JSON格式(空响应或文本)
- 原代码直接调用response.json()导致解析失败抛出异常
修复:
1. 添加Content-Type检查,只有JSON才解析
2. 非JSON响应直接返回成功标识 { result: 'success' }
3. 添加详细日志方便调试
现在删除对话能正确显示成功,无需刷新页面
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-10-30 15:16:37 +08:00 |
|
TanWenyan
|
5cff5f2a5d
|
添加对话记录保存详细日志,诊断conversation_id传递问题
添加日志位置:
1. chat/index.tsx: 发送消息、接收会话ID变更、初始化读取localStorage
2. use-chat-message.ts: 发送消息、接收新会话ID、处理新会话
3. use-conversation.ts: setCurrConversationId保存到localStorage
帮助诊断为什么对话记录没有固定(每次都创建新会话)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-10-30 15:06:24 +08:00 |
|
TanWenyan
|
78e218b953
|
添加返回数据日志,查看API响应内容
添加日志:
1. 打印fetchConversations返回的完整数据
2. 打印fetchAppParams返回的完整数据
3. 打印chat组件接收到的数据
4. 打印解析后的conversations数组
帮助诊断数据格式问题
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-10-30 14:55:46 +08:00 |
|
TanWenyan
|
a5e5f289c1
|
添加详细的客户端请求日志,便于排查问题
添加日志:
1. 请求URL和配置
2. 响应状态
3. 错误详情(包含响应body)
4. 捕获所有异常
帮助诊断:
- API_URL配置是否正确
- 请求是否发送成功
- 响应状态码和内容
- 具体的错误信息
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-10-30 14:51:05 +08:00 |
|
TanWenyan
|
79e0f542be
|
回滚:客户端调用Remix API routes,避免CORS问题
问题分析:
直接让客户端调用FastAPI后端会遇到:
1. CORS跨域限制
2. Cookie无法在跨域情况下传递
3. 安全性降低
正确架构(三层代理):
浏览器 → Remix /api/* → FastAPI /dify/* → Dify
流程说明:
1. 浏览器:fetch('/api/chat-messages', { credentials: 'include' })
- 相对路径,同域请求,无CORS问题
- Cookie自动携带
2. Remix API routes (app/routes/api.chat-messages.tsx)
- 从session获取JWT
- 调用 difyClient.createChatMessage(..., jwt)
3. dify-client.server.ts
- 使用 API_BASE_URL (根据端口配置)
- 调用 FastAPI: http://baseUrl/dify/chat-messages
- 携带JWT: Authorization: Bearer {jwt}
4. FastAPI /dify 路由
- 验证JWT,提取username
- 调用Dify: http://nas.7bm.co:12980/v1/chat-messages
baseUrl配置(服务端使用):
- 端口51703 → http://172.16.0.55:8073
- 端口51704 → http://10.79.97.17:8001
- ...
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
|
2025-10-30 14:49:54 +08:00 |
|