Commit Graph

261 Commits

Author SHA1 Message Date
PingChuan d40e5b261c fix:修复从reactdom导入useNavigate,改为从remix包导入 2025-11-25 11:10:30 +08:00
PingChuan bf738c190f Merge remote-tracking branch 'origin/shiy-login' into PingChuan 2025-11-25 11:03:42 +08:00
LiangShiyong 0ed6f0aaf4 备份 2025-11-25 11:02:40 +08:00
PingChuan 81db8213ee Merge remote-tracking branch 'origin/Wren' into PingChuan 2025-11-25 10:56:57 +08:00
PingChuan 272c3e8dce feat:完成Collabora初步集成(返回顶部、文档页数获取) 2025-11-25 10:56:47 +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
PingChuan 31614374a7 temp:备份代码 2025-11-22 19:02:53 +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
TanWenyan 679fa31ce3 重构:客户端直接调用FastAPI后端,不再通过Remix中转
架构变更:
旧架构:浏览器 → Remix /api/* → dify-client.server → FastAPI /dify → Dify
新架构:浏览器 → FastAPI /dify/* → Dify

修改:
1. app/config/chat.ts
   - getApiBaseUrl() 根据端口映射返回FastAPI后端地址
   - 端口映射表:
     * 51703 → http://172.16.0.55:8073
     * 51704 → http://10.79.97.17:8001
     * 51705 → http://10.79.97.17:8002
     * 51706 → http://10.79.97.17:8003
     * 51707 → http://10.79.97.17:8004
     * 51708 → http://10.79.97.17:8005
   - API_URL: `${baseUrl}/dify`

示例(端口51703):
- 浏览器Network: http://172.16.0.55:8073/dify/chat-messages
- 不再经过Remix API routes

注意:
- 需要FastAPI配置CORS允许跨域
- Cookie需要在跨域情况下正确传递

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-30 14:44:49 +08:00
TanWenyan 215ecff41d 修复:恢复CHAT_CONFIG.APP_ID和API_KEY字段,解决"应用配置不正确"错误
问题:移除APP_ID和API_KEY后,chat/index.tsx第125行检查失败,
导致显示"应用暂时不可用,应用配置不正确"

修改:
1. app/config/chat.ts
   - 添加 APP_ID = 'docreview-chat' (用于localStorage key)
   - 添加 API_KEY = '' (空值,保持兼容性)
   - 说明:API_KEY不再用于直接调用Dify,服务端通过JWT处理

2. app/components/chat/index.tsx
   - 修改hasSetAppConfig检查:从检查APP_ID和API_KEY改为只检查API_URL
   - 说明:客户端现在通过Remix API routes调用,不需要验证API_KEY

调用流程保持不变:
客户端 → /api/* → JWT验证 → FastAPI /dify → Dify

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-30 14:39:52 +08:00
TanWenyan 5949d057fb 添加详细日志:显示服务端实际调用的FastAPI地址
添加日志输出:
1. 启动时显示完整的Dify API URL配置
   - apiBaseUrl: 当前环境的FastAPI地址
   - fullDifyUrl: 完整的Dify代理路径

2. 每次请求时显示:
   - endpoint: 请求的具体端点
   - fullUrl: 完整的请求URL (baseUrl/dify/endpoint)
   - baseUrl: FastAPI基础地址
   - hasJWT: 是否携带JWT

示例输出(端口51703):
🔧 Dify Client Config: {
  apiUrl: 'http://172.16.0.55:8073/dify',
  apiBaseUrl: 'http://172.16.0.55:8073',
  fullDifyUrl: 'http://172.16.0.55:8073/dify'
}

🌐 [DifyClient] 请求FastAPI代理: {
  endpoint: 'chat-messages',
  fullUrl: 'http://172.16.0.55:8073/dify/chat-messages',
  baseUrl: 'http://172.16.0.55:8073',
  hasJWT: true
}

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-30 14:33:10 +08:00
TanWenyan a522d066ab 修正:Dify统一使用FastAPI后端地址,移除独立difyBaseUrl配置
问题:错误地为Dify创建了独立的difyBaseUrl配置

正确架构:
客户端 → /api/* → Remix routes → dify-client.server →
FastAPI baseUrl/dify/* → Dify服务

修改:
1. app/config/api-config.ts
   - 移除 difyBaseUrl 字段
   - 所有环境统一使用 baseUrl (FastAPI后端地址)
   - 添加注释说明 baseUrl 包含 /dify 代理

2. app/services/dify-client.server.ts
   - 使用 API_BASE_URL 而非 DIFY_BASE_URL
   - API_URL: `${API_BASE_URL}/dify`

各环境FastAPI地址:
- development: http://172.16.0.55:8000
- testing: http://nas.7bm.co:8873
- production: http://10.79.97.17:8000

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-30 14:24:35 +08:00