root
|
c1e54d9457
|
chore: 移除已迁移的旧文件
|
2026-02-27 18:01:32 +08:00 |
|
root
|
1004aea725
|
feat: 审批功能优化和拒绝原因弹窗
后端改动:
- ApprovalService: 添加调试日志,简化详情页 URL 生成逻辑
- BusinessTripService: 优化出差审批详情展示
前端改动:
- approval/detail: 审批详情页优化,支持查看完整审批流程
- approval/reject: 新增拒绝原因弹窗组件
- business-trip/detail: 出差详情页增强,展示审批状态和操作
功能特性:
- 审批详情页显示完整审批流程和记录
- 拒绝操作支持填写拒绝原因
- 出差申请详情页优化展示
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-27 17:57:56 +08:00 |
|
root
|
ea185eb6cc
|
fix: 移除快速审批页面中重复的 return 语句
修复白屏问题:
- 移除组件末尾的重复 return 语句
- 这些代码是死代码,导致组件无法正常渲染
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-26 19:34:38 +08:00 |
|
root
|
390bdc348c
|
fix: 修复快速审批页面路由和错误处理
修复内容:
1. router/index.tsx - 将 QuickAction 路由移到 MobileLayout 外部
2. quick-action.tsx - 修复导入错误,增强错误处理和调试信息
问题分析:
- QuickAction 不需要 MobileLayout,应该作为独立页面
- 添加详细的调试日志便于排查问题
- 增强页面关闭逻辑(支持多种方式)
工作流程:
1. 用户点击飞书消息按钮
2. 打开快速审批页面
3. 检查登录状态,未登录则跳转登录页
4. 已登录则自动执行审批操作
5. 显示操作结果
6. 尝试关闭页面或跳转到列表
相关文件:
- frontend/src/router/index.tsx
- frontend/src/pages/approval/quick-action.tsx
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-26 19:33:33 +08:00 |
|
root
|
09a7220e76
|
feat: 实现无感快速审批操作
问题:
- 用户点击飞书消息按钮需要跳转到web界面
- 需要登录才能操作,体验不流畅
解决方案:
1. 创建快速审批页面 (quick-action.tsx)
2. 用户点击按钮后自动执行审批操作
3. 操作成功后自动关闭页面或返回
4. 全流程无需用户手动跳转
工作流程:
1. 用户在飞书中点击"通过"/"拒绝"按钮
2. 打开快速审批页面
3. 自动执行审批操作(如果已登录)
4. 显示操作成功/失败
5. 自动关闭页面(飞书客户端)或返回列表
优势:
- 一步完成审批,无需跳转
- 已登录用户无感操作
- 未登录用户会引导登录后返回
相关文件:
- frontend/src/pages/approval/quick-action.tsx (新建)
- frontend/src/router/index.tsx
- backend/app/service/FeishuNotificationService.php
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-26 19:30:12 +08:00 |
|
root
|
e31cf88eab
|
fix: 添加与登录页相同的 tt 对象刷新机制
问题:
- 登录页可以飞书免登,但审批详情页不能
- 原因:登录页有刷新机制等待 tt 对象注入,审批详情页没有
修复:
- approval/detail.tsx - 添加与登录页相同的刷新逻辑
- 在飞书中但 tt 对象不存在时,自动刷新页面(最多3次)
- 每次刷新后重新检测 tt 对象是否已注入
工作流程:
1. 用户点击飞书消息按钮
2. 打开审批详情页
3. 检测到在飞书中但 tt 对象不存在
4. 自动刷新页面(最多3次)
5. tt 对象注入成功后自动免登
6. 免登成功后加载审批详情
相关文件:
- frontend/src/pages/approval/detail.tsx
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-26 19:28:04 +08:00 |
|
root
|
7e57e8720b
|
feat: 添加飞书 JSBridge SDK 支持
问题:
- 移动端飞书 WebView 中 tt 对象没有被注入
- 导致免登功能无法使用
修复:
1. index.html - 引入飞书 H5 JSBridge SDK
2. approval/detail.tsx - 添加对多种飞书 API 的支持
3. debug-feishu.tsx - 更新调试页面,检测所有可能的 API 对象
支持的飞书 API:
- window.tt (标准 H5 应用)
- window.h5sdk (JSBridge)
- window.bridge (JSBridge)
- window.ttjsBridge (旧版)
相关文件:
- frontend/index.html
- frontend/src/pages/approval/detail.tsx
- frontend/src/pages/debug-feishu.tsx
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-26 19:21:01 +08:00 |
|
root
|
f31abf2c68
|
feat: 添加飞书环境调试页面和详细日志
修改内容:
1. 新增 debug-feishu.tsx - 飞书环境调试页面
2. approval/detail.tsx - 添加详细的调试日志
3. router/index.tsx - 添加调试页面路由
4. business-trip.ts - 修复 import 错误
调试页面功能:
- 检测是否在飞书客户端内
- 显示 window.tt 等对象状态
- 测试飞书免登功能
使用方法:
1. 在飞书客户端中打开: https://xsm.dev.hnxinyouhe.com/debug-feishu
2. 查看环境信息
3. 点击"测试飞书免登"按钮
相关文件:
- frontend/src/pages/debug-feishu.tsx
- frontend/src/pages/approval/detail.tsx
- frontend/src/router/index.tsx
- frontend/src/services/business-trip.ts
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-26 19:16:33 +08:00 |
|
root
|
3ad8f34914
|
feat: 添加飞书免登自动登录功能
修改内容:
1. approval/detail.tsx - 在加载详情前检查登录状态,如果在飞书内则自动免登
2. login/index.tsx - 改进飞书环境检测和tt对象注入逻辑
业务流程:
1. 用户在飞书中点击消息按钮
2. 打开审批详情页 → 检测未登录
3. 如果在飞书客户端内 → 自动调用 tt.requestAuthCode
4. 免登成功 → 自动加载详情
5. 免登失败 → 跳转到登录页面
相关文件:
- frontend/src/pages/approval/detail.tsx
- frontend/src/pages/login/index.tsx
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-26 19:14:19 +08:00 |
|
root
|
df0d592ee4
|
feat: 飞书审批消息添加操作按钮
功能:
1. 审批通知卡片添加"通过"和"拒绝"按钮
2. 点击按钮跳转到审批详情页,自动弹出审批确认框
3. 保留"查看详情"按钮
实现:
- FeishuNotificationService.buildApprovalCard() - 添加审批操作按钮
- ApprovalService.notifyNextApprovers() - 传递 order_id 参数
- approval/detail.tsx - 处理 URL 中的 action 参数
按钮样式:
- 通过按钮:绿色 (primary)
- 拒绝按钮:红色 (danger)
- 查看详情:默认样式
相关文件:
- backend/app/service/FeishuNotificationService.php
- backend/app/service/ApprovalService.php
- frontend/src/pages/approval/detail.tsx
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-26 18:57:59 +08:00 |
|
root
|
8ce070bd77
|
fix: 使用 sessionStorage 保持 tab 状态
问题:navigate(-1) 浏览器后退不会传递 location.state
解决方案:
- 切换 tab 时保存到 sessionStorage
- 页面加载时优先从 sessionStorage 恢复 tab
修改文件:
- frontend/src/pages/business-trip/list.tsx
- frontend/src/pages/approval/list.tsx
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-26 18:38:42 +08:00 |
|
root
|
f3a9e442e9
|
fix: 返回列表时保持之前的 tab 状态
问题:从详情页返回时,列表总是重置到"我发起的" tab
解决方案:
1. 导航到详情页时传递 state: { fromTab: activeTab }
2. 列表页从 location.state.fromTab 恢复 tab 状态
修改文件:
- frontend/src/pages/approval/list.tsx
- frontend/src/pages/business-trip/list.tsx
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-26 18:36:41 +08:00 |
|
root
|
ea7f0f8820
|
feat: 添加"抄送我的"审批列表选项
后端修改:
- ApprovalService::getList 添加 'cc' 类型查询
- 从 form_data.cc_users 中查找包含当前用户的订单
- 兼容两种数据格式:[{id:29}] 或 [29]
前端修改:
- 添加"抄送我的"标签页
- 更新类型定义支持 'cc' 类型
- approvalListParams 类型添加 'cc' 选项
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-26 18:33:53 +08:00 |
|
root
|
df07b16c7a
|
feat: 实现多端飞书登录功能
1. 飞书客户端内:静默自动登录
- 检测飞书环境 (userAgent + ttjsBridge)
- 调用 ttjsBridge.getAuthCode() 获取授权码
- 自动登录到后台
2. 飞书客户端外:扫码登录
- 后端新增三个接口:
* POST /api/v1/auth/qrcode-login - 生成登录会话和二维码
* GET /api/v1/auth/qrcode-login/status - 轮询登录状态
* GET /login/qrcode/{id} - 飞书授权回调
- 前端新增 QRCodeLogin 组件:
* 使用 qrcode.react 生成二维码
* 每 2 秒轮询登录状态
* 状态:loading → pending → scanning → success/expired
3. 数据库表:feishu_login_session
- 存储 session_id, auth_url, status, user_id
- 状态:pending, scanning, success, expired
- 2 分钟过期机制
4. 其他优化
- 移除审批详情页的 header
- 更新 PROJECT_ISSUES.md 文档
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-26 09:58:19 +08:00 |
|
root
|
ba41b340fc
|
fix: 修复审批列表首次加载不显示和发起人审批人问题
- 移除 loadingRef,解决 React 18 StrictMode 下请求阻塞问题
- 提交申请时根据选择的审批人动态创建/更新审批节点
- 修改申请提交后跳转到审批列表而非出差列表
- 更新 PROJECT_ISSUES.md 记录所有问题和解决方案
修复问题:
1. 首次进入审批列表"我发起的"不显示数据
2. 发起人也是审批人时"待我审批"不显示
3. 申请提交后跳转到错误的页面
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-26 09:35:26 +08:00 |
|
root
|
b7919910f1
|
docs: 整理项目问题文档,修复审批列表数据混乱
- 新增 PROJECT_ISSUES.md 统一管理所有问题和解决方案
- 精简 CLAUDE.md,移除重复的问题记录部分
- 修复审批列表数据混乱问题(React 18 StrictMode + 状态管理)
- 修复首次加载不显示数据问题(requestIdRef 清理时机)
- 修复页码初始值错误(hasMore 默认值)
- 修复后端响应序列化问题(Eloquent 模型转数组)
- 添加审批人和抄送人重复校验
- 修复双 header 问题
- 调整申请页面 padding-bottom
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-26 09:12:21 +08:00 |
|
root
|
5c582b092e
|
fix: 修复审批弹框按钮不显示的问题
- 使用 actions 属性自定义弹框按钮
- 添加按钮点击事件的日志
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-26 00:39:03 +08:00 |
|
root
|
2a5c335cdd
|
debug: 增加审批弹框的调试日志
- 添加按钮点击和API调用的日志
- 添加弹框关闭的日志
- 添加 closeOnMaskClick 和 closeOnAction 配置
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-26 00:37:09 +08:00 |
|
root
|
ba919d2cdc
|
debug: 增加更详细的调试日志来排查审批按钮不显示问题
- 添加类型检查日志(userId、approvers类型)
- 添加多种匹配方式尝试
- 显示操作按钮状态
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-26 00:24:48 +08:00 |
|
root
|
a5a148d57e
|
style: 审批流程样式优化
- 审批人标签:蓝色 (#1890ff)
- 抄送人标签:橙色 (#faad14)
- 已审批:绿色对号 ✓
- 待审批:蓝色时钟图标 ⏱ + 脉动动画
- 未开始:灰色序号
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-26 00:21:45 +08:00 |
|
root
|
76c6e93e36
|
feat: 审批流程改为时间轴样式,增加审批人/抄送人标识
- 审批流程使用时间轴样式显示
- 增加"审批人"和"抄送人"标签
- 已审批节点显示审批人姓名和审批时间
- 未审批节点显示节点名称(人名)
- 当前审批节点高亮显示
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-26 00:19:37 +08:00 |
|
root
|
be5dea1d24
|
fix: 将审批节点名称改为直接显示人名
- 数据库:将节点名称从"经理审批"、"主管审批"等改为直接显示人名
- 前端:未审批时显示节点名称(人名),而非"待审批"
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-26 00:16:55 +08:00 |
|
root
|
349b6c9fe3
|
fix: 审批流程节点只显示人名,不显示职务前缀
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-26 00:16:14 +08:00 |
|
root
|
dad47d8df5
|
fix: 修复审批详情页多余的闭合标签导致白屏
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-26 00:15:29 +08:00 |
|
root
|
4c48b01144
|
fix: 修改审批流程显示格式为"审批人-姓名"或"抄送人-姓名"
- 添加 getNodeApproversNames 函数获取审批人姓名
- 添加 getNodeDisplayName 函数生成节点显示名称
- 更新审批流程和当前审批的显示逻辑
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-26 00:14:11 +08:00 |
|
root
|
40384d7f26
|
fix: 修复审批列表选项卡切换时使用旧状态值的问题
- 修复 loadData 函数,添加 tab 参数直接传递当前选中的标签
- 修复文件中的重复代码问题
- 添加更详细的调试日志
问题原因:setActiveTab 是异步的,handleTabChange 中调用 loadData 时,
activeTab 还是旧值,导致请求参数错误。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-26 00:10:08 +08:00 |
|
root
|
ab62b9839e
|
fix: 清理旧的测试数据,添加调试日志
- 删除所有旧的测试订单(id <= 14)
- 前端添加调试日志,查看请求参数和响应数据
- 后端添加日志,记录接收到的请求参数
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-26 00:09:36 +08:00 |
|
root
|
09ccc05b83
|
fix: 审批详情页表单字段标签显示中文
- 添加表单字段映射表(formFieldLabelMap)
- 将英文key(如reason)翻译成中文标签(如"出差事由")
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-26 00:06:19 +08:00 |
|
root
|
71a9ec2eda
|
fix: 修复审批详情页审批按钮不显示的问题
- 在 ApprovalRecord 接口中添加 node_id 和 approver_id 字段
- 添加调试日志帮助排查问题
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-26 00:05:43 +08:00 |
|
root
|
04953b22dc
|
feat: 完善审批功能
- 新增通用审批列表页面(我发起的/待我审批/我已审批)
- 新增通用审批详情页面(支持审批通过/拒绝操作)
- 修复审批列表过滤逻辑("我已审批"只显示已完成订单)
- 修复登录页面未设置 Zustand store 的问题
- 修复 User 类型定义(id 改为 number 类型)
- 修复草稿恢复时的日期转换问题
- 创建测试数据脚本(test_data.php)
- 安装 webman 官方依赖包(database, redis, pagination 等)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
2026-02-25 23:54:38 +08:00 |
|