Commit Graph

254 Commits

Author SHA1 Message Date
TanWenyan d3418ef31b fix: 修复权限映射的反向保存逻辑
问题:权限映射只在显示层面进行,但保存时还需要反向映射回数据库权限键

解决方案:
1. 分离显示权限和原始权限:
   - originalRoutePermissionsMap:存储未映射的原始权限(用于保存)
   - routePermissionsMap:存储映射后的权限(用于显示)
   - originalAllPermissions:存储所有原始权限的列表

2. 加载角色权限时:
   - 从API获取角色已分配的权限ID(原始ID)
   - 直接存储到 selectedPermissionIds
   - 不做任何映射转换

3. 显示权限列表时:
   - 从原始权限构建映射后的权限(合并相同的)
   - 用户看到的就是映射后的权限(如dify:dataset:manage)
   - 但勾选状态基于原始权限ID

4. 保存权限时:
   - 直接使用 selectedPermissionIds(原始ID)
   - 无需反向映射

验证方式:
1. 取消勾选 dify:dataset:manage → 数据库中4个bind权限被DENY → 接口返回403
2. 重新勾选 dify:dataset:manage → 数据库中4个bind权限被GRANT → 接口可访问
2025-12-08 15:39:39 +08:00
TanWenyan 34029db395 优化操作提示 2025-12-08 15:35:34 +08:00
TanWenyan 547633bf38 feat: 修复权限键不匹配问题 - 前端权限映射
问题:前端权限列表显示dify:bind:*,但路由实际检查dify:dataset:*和dify:file:*
导致取消勾选后权限控制失效

解决方案:
1. 创建权限映射工具(permission-mapper.ts)
   - dify:bind:list/create/update/delete → dify:dataset:manage
   - 自动将数据库权限键映射为实际生效的权限键

2. 修改角色权限管理页面
   - 加载角色权限时应用权限键映射
   - 渲染权限列表时显示实际生效的权限键
   - 保存权限时使用映射后的权限ID

影响范围:
- 知识库管理权限(/chat-with-llm/dataset-manager)
- 角色权限分配页面(/role-permissions)

验证方式:
取消勾选dify:dataset:manage后,知识库管理接口应返回403
2025-12-08 15:29:31 +08:00
TanWenyan 3f5c23123b feat: 添加对话应用选择和知识库切换功能
- 新增对话应用管理模块(dify-chat-apps),支持获取和切换对话应用
- 优化对话应用切换后自动刷新会话列表功能
- 知识库管理页面新增下拉选择器,支持切换不同知识库
- API 层支持 app_id 参数传递,实现多应用会话隔离

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-08 01:44:34 +08:00
TanWenyan 27aff59152 feat: 添加知识库配置管理功能
新增地区-知识库绑定管理功能,支持增删改查操作
- 添加 V3 API 路由层:area-datasets 相关接口
- 添加 API 客户端:area-datasets.ts
- 添加自定义 Hook:use-area-dataset-config.ts
- 添加管理组件:area-dataset-config.tsx
- 修复路由冲突问题,删除重复的 .ts 路由文件
- 更新 dataset-manager 页面,添加 Tabs 导航

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-07 23:12:21 +08:00
TanWenyan d53742948d feat: 知识库设置页面增加 retrieval_model 检索配置功能
1. 召回测试页面增加 Score 阈值参数配置
2. 知识库设置页面新增检索模型配置:
   - 检索方式 (向量/全文/混合/关键字检索)
   - Reranking 模型 (默认开启,不可关闭)
   - Top K 返回数量
   - Score 阈值 (默认开启,可调节数值)
3. 修复 Dify API 字段名问题 (retrieval_model_dict)
4. 优化数据加载流程,使用详情接口获取完整配置

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-05 22:07:16 +08:00
LiangShiyong 5f9ce2fe9f 修复起草合同的销毁保存下载和删除的逻辑 2025-12-05 21:38:44 +08:00
LiangShiyong 91b7518c99 feat: 1. 完善起草合同页面的逻辑交互,对接minio的接口操作 2025-12-05 20:17:37 +08:00
LiangShiyong 3d1dbb3f97 all in 2025-12-05 00:09:32 +08:00
LiangShiyong bb3d22eabf Merge branch 'PingChuan' into shiy-login 2025-12-05 00:05:40 +08:00
LiangShiyong 33f10896a0 fix: 1.接入ai_suggestion.
2. 接入合同起草功能。
2025-12-05 00:04:45 +08:00
PingChuan dcdc21b90e feat:新增dify接入知识库时更新文档嵌入参数的功能 2025-12-04 17:47:44 +08:00
LiangShiyong eca98fc540 Merge branch 'PingChuan' into shiy-login
# Conflicts:
#	app/config/api-config.ts
2025-12-03 12:10:21 +08:00
LiangShiyong d88cfc818b feat: 1. 实现一键替换。
2. 优化追加附件和模板上传的样式。
2025-12-03 12:07:56 +08:00
PingChuan a13f3b3635 feat: 完善Dify知识库管理召回测试模块,优化知识库上传文件时的分段配置设置 2025-12-03 12:03:09 +08:00
PingChuan 0f49426a2e feat:完成上传文档时调整嵌入参数模块初版 2025-12-02 22:29:32 +08:00
LiangShiyong 2897423404 feat: 大模型对话适配移动端的样式 2025-12-02 11:41:21 +08:00
LiangShiyong 88466b7a8b feat: 1. 完善交叉评查上传创建任务,改成动态加载文档类型。
2. 重新对齐交叉评查的接口。
2025-12-02 10:10:03 +08:00
LiangShiyong c9e0d5abba Merge branch 'PingChuan' into shiy-login 2025-12-01 12:40:22 +08:00
LiangShiyong c43485ec27 fix: 添加交叉评查的案卷类型的查询,动态选择文档类型 2025-12-01 12:36:38 +08:00
PingChuan 0c1b81cfb2 temp:临时备份,完成一半知识库管理模块 2025-12-01 12:33:53 +08:00
PingChuan 754ec2c7b5 feat:完成dify知识库文档基础CRUD模块 2025-11-30 21:28:49 +08:00
PingChuan d85010bada feat:完善知识库管理路由权限配置 2025-11-30 20:14:51 +08:00
LiangShiyong af258fe669 Merge branch 'PingChuan' into shiy-login 2025-11-30 19:33:46 +08:00
LiangShiyong 4fcc92a381 feat: 1. 接入CollaboraViewer选中的高亮效果,清除高亮功能,页面销毁自动清除高亮。
2. 合同模板对比接入monaco editor的效果。
3. 添加交叉评查的案卷类型的数据查询。

fix: 1. 修复文档列表的打开模态框蒙板层显示效果。
2025-11-30 19:33:05 +08:00
PingChuan c94cc00138 feat:前端新增初版知识库管理页面 2025-11-30 19:27:01 +08:00
PingChuan 9614899171 feat:重构dify前端组件以及转发逻辑 2025-11-30 16:24:35 +08:00
LiangShiyong fb67f138dc fix: 1. 全局axios添加formData文件上传的检测,删除Content-Type让axios自动检测。
2. 完善入口模块管理的接口的对接。
3. 完善角色权限管理的接口对接和测试。
4. 完善主页的入口模块的图标的显示和图片的显示。
2025-11-29 19:37:29 +08:00
LiangShiyong 875ce19bb8 Merge branch 'PingChuan' into shiy-login
# Conflicts:
#	app/routes/files.upload.tsx
2025-11-29 10:59:50 +08:00
LiangShiyong e3d09aafb3 fix: 修复文档上传的页面bug 2025-11-29 10:57:05 +08:00
PingChuan 2865970f01 fix: 修复从react 引入 useRevalidator的问题,改为从remix引入 2025-11-29 10:54:56 +08:00
LiangShiyong 30e100ef3e feat: 1. 本地化思源黑体的字体包并优先使用。
2. 添加权限映射表和全局查看权限的hook,便于路由控制不同权限按钮显示/隐藏。
3. 删除评查点分组的部分旧api方法。
4. 对接评查点分组接口,文档类型接口, 提示词管理接口, 入口模块管理的接口。
5. 优化角色权限管理的接口,完善不用地区的访问权限认证。
6. 优化主页交叉评查和设置的入口样式和布局。
7. 优化评查点分组,评查规则的功能权限校验。
2025-11-29 10:37:35 +08:00
PingChuan f2714360d3 feat:完成清除高亮脚本封装 2025-11-27 16:13:51 +08:00
LiangShiyong d5827a2146 fix: 1. 接入入口模块的管理接口,优化样式。
2. 将查看文档评查结果详情对接接口,采用接口的方式进行查询。
2025-11-26 23:37:14 +08:00
LiangShiyong 9a1a78d578 fix: 删除冗余文件 2025-11-26 19:11:45 +08:00
LiangShiyong e9e2934c4e Merge branch 'Wren' into shiy-login 2025-11-26 18:05:24 +08:00
LiangShiyong 1b0108e518 fix: 1. 系统设置入口进来只会跳转到拥有权限访问的页面。
2. 优化登录样式
2025-11-26 18:05:15 +08:00
TanWenyan c491ad228c chore: 删除RBAC Mock API路由和数据
删除以下Mock文件(已迁移到真实后端API):
- api.v3.rbac.roles._index.tsx
- api.v3.rbac.roles.$roleId.tsx
- api.v3.rbac.roles.$roleId.users.tsx
- api.v3.rbac.users.$userId.roles.tsx
- api.v3.rbac.users.$userId.roles.$roleId.tsx
- rbac-mock-data.server.ts

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-26 17:08:11 +08:00
TanWenyan 1e9e0044ba feat: 角色权限管理v3.0及错误处理优化
1. 角色权限管理升级:
   - 添加路由下展开式API权限管理功能
   - 新增 getRoleRoutesWithPermissions 和 saveRoleApiPermissions API
   - 支持按路由展开/收起查看和勾选权限
   - 过滤"所有权限"选项,只显示具体权限

2. 错误处理优化:
   - 403 无权限错误显示为"无权限访问该资源"
   - 修复评查点分组批量删除显示"成功删除 undefined 个分组"的问题

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-26 17:04:18 +08:00
LiangShiyong efbf78246f Merge branch 'Wren' into shiy-login 2025-11-26 10:49:26 +08:00
LiangShiyong fe75b4fabd feat: 1. 将交叉评查转移在入口页。
2. 交叉评查渲染的pdf预览组件复用评查点详情的,同时在评查结果中的数据也添加坐标信息。
2025-11-26 10:49:15 +08:00
TanWenyan e7646d17a6 fix(evaluation-groups): 修复一级分组显示错误和 React key 警告
## 修复内容

### 1. 修复一级分组过滤问题
- **问题**: getEvaluationPointGroups 函数忽略了 pid 参数,导致返回所有分组(包括二级分组)
- **修复**: 添加 pid 参数处理逻辑,支持传递 "null" 字符串来查询一级分组
- **文件**: app/api/evaluation_points/rule-groups.ts:1186-1198

### 2. 修复 React key 重复警告
- **问题**: 父分组和子分组可能有相同的 ID,导致 "Encountered two children with the same key" 警告
- **修复**: 将 rowKey 从简单的 "id" 改为根据 isParent 生成唯一 key
- **文件**: app/routes/rule-groups._index.tsx:817

### 3. 新增后端 API 规范文档
- **文件**: docs/evaluation/evaluation_point_groups_backend_api_spec.md
- **内容**:
  - 完整的 9 个 FastAPI v3 接口规范
  - Python Pydantic 模型定义
  - TypeScript 接口定义
  - pid 参数处理说明(字符串 "null" 转换为 None)
  - 10 个完整测试用例
  - 数据库表结构建议

## 技术细节

**pid 参数处理**:
```typescript
// 前端发送
GET /api/v3/evaluation-point-groups?pid=null&page=1

// 后端需要识别字符串 "null" 并转换为 None/NULL
if (pid == "null") {
  query = query.filter(EvaluationPointGroup.pid.is_(None))
}
```

**唯一 key 生成**:
```typescript
rowKey={(record) => record.isParent ? `parent-${record.id}` : `child-${record.id}`}
```

🔗 相关文档: docs/evaluation/evaluation_point_groups_backend_api_spec.md
2025-11-26 10:05:39 +08:00
TanWenyan d1f764028c Merge branch 'shiy-login' into Wren 2025-11-25 20:59:59 +08:00
LiangShiyong 83f8d80e12 合并代码 2025-11-25 20:50:34 +08:00
TanWenyan 02658b77b2 fix(document-types): 修复构建错误 - 替换为 FastAPI v3 接口
问题:
- document-types.new.tsx 仍在使用已重命名的 getAllRuleGroups 函数
- 导致构建失败:"getAllRuleGroups" is not exported

修复:
- getAllRuleGroups → getAllEvaluationPointGroups
- 传递正确的参数:includeDisabled=false, withRuleCount=true

影响范围:
- app/routes/document-types.new.tsx (文档类型创建/编辑页面)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-25 20:24:24 +08:00
TanWenyan dbc9512c8b refactor(rule-groups): 替换创建/编辑页面为 FastAPI v3 接口
变更内容:
1. 补充重命名 getRuleGroup → getRuleGroup_legacy (rule-groups.ts)
2. 更新导入语句,使用新的 FastAPI v3 函数 (rule-groups.new.tsx)
3. 替换所有函数调用:
   - getRuleGroups → getEvaluationPointGroups (2处)
   - getRuleGroup → getEvaluationPointGroup
   - createRuleGroup → createEvaluationPointGroup
   - updateRuleGroup → updateEvaluationPointGroup

影响范围:
- app/api/evaluation_points/rule-groups.ts (补充遗漏的重命名)
- app/routes/rule-groups.new.tsx (创建/编辑页面)

功能:
- 分组创建、编辑、编码唯一性验证

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-25 20:20:52 +08:00
TanWenyan ef8b843dc5 refactor(rule-groups): 替换列表页面为 FastAPI v3 接口
变更内容:
- 更新导入语句,使用新的 FastAPI v3 函数
- getRuleGroups → getEvaluationPointGroups
- deleteRuleGroup → deleteEvaluationPointGroup
- batchUpdateRuleGroupStatus → batchUpdateEvaluationPointGroupStatus
- batchDeleteRuleGroups → batchDeleteEvaluationPointGroups

影响范围:
- app/routes/rule-groups._index.tsx(评查点分组列表页面)

功能:
- 列表查询、删除、批量启用/禁用、批量删除

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-25 20:17:39 +08:00
LiangShiyong ff0a99cbb4 Merge branch 'Wren' into shiy-login 2025-11-25 18:24:28 +08:00
LiangShiyong f76b3a8a92 feat: 接入pdf文件的显示高亮效果 2025-11-25 18:23:35 +08:00
TanWenyan f938ca6c00 feat(rbac): 添加 RBAC 角色管理 API 代理和模拟数据
添加角色基于访问控制(RBAC)相关接口:

1. API 代理路由
   - api.v3.rbac.roles._index.tsx: 角色列表和创建
   - api.v3.rbac.roles.$roleId.tsx: 角色详情、更新和删除
   - api.v3.rbac.roles.$roleId.users.tsx: 角色用户关联管理
   - api.v3.rbac.users.$userId.roles.tsx: 用户角色列表
   - api.v3.rbac.users.$userId.roles.$roleId.tsx: 用户角色分配

2. 模拟数据服务
   - rbac-mock-data.server.ts: 提供模拟角色和用户角色数据
   - 支持 CRUD 操作
   - 包含预置的系统管理员、开发者等角色

接口功能:
-  获取角色列表(支持分页和搜索)
-  获取角色详情
-  创建、更新、删除角色
-  获取角色的用户列表
-  为用户分配/移除角色

注:当前使用模拟数据,待后端接口完善后切换到真实 API

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-25 18:19:05 +08:00