root
457b1d75f0
fix: 返回完全空白的响应页面
...
正常飞书APP内扫码流程:
1. 用户扫码确认授权
2. 飞书APP直接返回主界面(不会打开任何页面)
3. 电脑端通过轮询检测登录成功并自动跳转
redirect_uri 是OAuth协议要求的配置,但飞书APP内扫码时不会真正访问此URL。
只有在浏览器扫码时才会真正跳转,此时返回空白页面。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-26 11:10:51 +08:00
root
ad6984d22a
fix: 扫码登录成功后返回空页面并自动关闭
...
手机端扫码成功后直接关闭并返回飞书,不显示任何页面内容。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-26 11:08:10 +08:00
root
fd364be4b6
fix: 扫码登录成功后返回简单页面,不重定向
...
移动端扫码完成后显示登录成功页面,用户可直接关闭,
不再重定向到前端页面。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-26 11:04:31 +08:00
root
cd1499cd0f
fix: 修正飞书登录回调重定向方法
...
使用 Webman 全局 redirect() 函数,而不是 Response::redirect()
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-26 11:02:41 +08:00
root
a1b395b147
fix: 移除 HttpClient 中的 curl_close() 调用
...
PHP 8.0+ 中 curl 资源会自动关闭,curl_close() 已被弃用。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-26 10:45:22 +08:00
root
6899bad529
refactor: 重构飞书授权代码,提取公共工具类
...
1. 创建 app/util/HttpClient.php
- 公共 HTTP 请求类
- httpGet() 和 httpPost() 方法
- 支持自定义 headers 和 timeout
- 统一错误处理和日志
2. 创建 app/util/FeishuUtil.php
- 飞书授权工具类,可被其他业务模块复用
- getAppAccessToken() - 获取应用访问令牌(带缓存)
- getUserAccessToken() - 获取用户访问令牌
- getUserInfo() - 获取用户信息
- getCompleteUserInfo() - 一步获取完整用户信息
- clearTokenCache() - 清除 token 缓存
3. 重构 app/service/FeishuService.php
- 使用新的工具类
- 移除重复的 HTTP 请求方法
- 保持向后兼容
飞书授权流程:
1. app_access_token (应用级令牌)
2. user_access_token (用户级令牌,需要 app_access_token)
3. 用户信息 (需要 user_access_token)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-26 10:43:29 +08:00
root
b1d58ece61
fix: 使用飞书官方 passport 授权端点
...
后端修改:
- 授权 URL 从 open-apis 改为 passport.feishu.cn
- 使用 passport 端点获取 user_access_token
- 添加 httpGet 方法
前端修改:
- 使用官方 tt.requestAuthCode() API(飞书内免登)
- 保留轮询方式实现扫码登录
参考文档: https://open.feishu.cn/document/sso/web-application-sso/qr-sdk-documentation
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-26 10:20:48 +08:00
root
6357e5dbdc
fix: 修复飞书扫码登录 404 问题
...
1. 后端路由修正
- 将 /login/qrcode/{id} 移出 /api/v1 路由组
- 修正路由参数获取方式,使用参数注入而非 getRouteParam()
2. OpenResty 配置
- 添加 /login/qrcode/ 路径代理到后端
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-26 10:06:27 +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
8110b1e5e6
feat: 发起人自动审批通过功能
...
- 当发起人在审批人列表中时,提交时自动创建审批通过记录
- 根据节点类型判断是否完成:
- 单人审批(approver):发起人审批后节点完成
- 或签(or_approve):发起人审批后节点完成
- 会签(and_approve):需要所有审批人审批才完成
- 节点完成后自动移动到下一节点或完成审批
- 更新 PROJECT_ISSUES.md 记录问题和解决方案
业务逻辑说明:
- 如果发起人选择自己作为唯一审批人,提交后申请直接完成
- 如果有其他审批人,需要其他审批人继续审批
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-26 09:44:44 +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
ab62b9839e
fix: 清理旧的测试数据,添加调试日志
...
- 删除所有旧的测试订单(id <= 14)
- 前端添加调试日志,查看请求参数和响应数据
- 后端添加日志,记录接收到的请求参数
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-26 00:09:36 +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
root
3968e94195
feat: 实现默认审批人和抄送人功能
...
- 后端新增 getDefaultApprovers 接口,从审批流程配置中获取默认审批人和抄送人
- 前端申请页面加载时自动获取并显示默认审批人和抄送人
- 添加默认审批流程配置:1个审批人(闫继光) + 2个抄送人(孟启、程丽敏)
- 移除后端 support 目录下的自定义 Db 和 Model 类,使用 Webman 官方实现
- 前端选择页面优化:优先从 sessionStorage 恢复,否则加载后端默认配置
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-25 18:54:38 +08:00
root
e3e2843835
fix: 修复审批功能和数据加载问题
...
- BusinessTripService 添加 ApprovalNode use 语句
- 修复 approve 方法中的字段引用错误(flow_id 替代 order_id)
- 修复 approve 方法中的类型引用错误(type 替代 node_type)
- getList 方法添加 approvalOrder 关联加载
- 完善审批逻辑:检查用户是否在当前节点审批人列表中
- 前后端联调测试通过
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-25 18:30:49 +08:00
root
7c933bad16
feat: 完善审批接口功能
...
- 修复 ApprovalController 路由参数获取方式
- 修复 BaseController 命名空间引用问题
- 添加 use 语句引入 ApprovalOrder
- 修复 ApprovalNode 类型常量与数据库 enum 一致
- 修复 ApprovalService 中的 action 常量引用
- 测试验证审批列表、详情、通过接口正常工作
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-25 18:26:22 +08:00
root
eef91a6c83
feat: 添加前后端多语言支持
...
前端:
- 在 API 请求中添加 Accept-Language 头,传递当前语言设置
后端:
- 创建 LanguageMiddleware 中间件,自动检测并设置语言
- 为所有 API 路由添加语言中间件
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-25 18:21:05 +08:00
root
8817effc9a
refactor: 使用官方support\Translation替代自定义Lang类
...
- 创建 config/translation.php 配置文件
- 将翻译文件从 lang/ 移动到 resource/translations/ 目录
- 按照 Symfony Translation 标准重命名文件 (messages.{locale}.php)
- 删除自定义的 app\util\Lang 类
- 使用官方的 trans() 和 locale() 函数
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-25 18:18:52 +08:00
root
66b61eada4
refactor: 使用官方support\Db和support\Model
...
- 创建 support/Db.php 和 support/Model.php
- 在 bootstrap.php 中自动初始化数据库
- 移除 app/util/Db.php
- 更新所有模型和控制器使用官方类
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-25 18:15:17 +08:00
root
81cde28aa5
fix: 添加数据库初始化到AuthController
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-25 18:10:49 +08:00
root
582f454a5a
refactor: 重构后端目录结构和命名规范
...
- 将后端目录名从大写改为小写 (Controller->controller 等)
- 将命名空间从 App\ 改为 app\ (符合 webman 官方规范)
- 移除不必要的 bootstrap 目录
- 完善出差审批业务功能:
- 添加删除草稿功能
- 添加审批操作功能(同意/拒绝)
- 完善审批详情页,显示审批人和审批记录
- 前端优化:
- 调整列表页行高
- 隐藏底部导航栏
- 仪表盘只显示3个快捷入口
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-25 18:09:04 +08:00
root
09d4cb8054
fix: 修复页面间状态丢失问题并优化选择页面
...
- 修复选择审批人后再选择抄送人导致状态丢失的问题
- 使用独立的 sessionStorage key (selectedApprovers, selectedCc)
- 组件每次挂载时从 sessionStorage 恢复状态
- 只在提交/保存成功后清除 sessionStorage
- 优化人员选择页面布局和样式
- 更新 CLAUDE.md 文档记录问题和解决方案
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-25 15:22:12 +08:00
root
5aa7825f19
config: update all database references to xserver
...
- Update backend/.env: DB_DATABASE=xserver
- Update backend/.env.example: DB_DATABASE=xserver
- Update docker-compose.yml: DB_DATABASE=xserver
- Update backend/app/util/Db.php: default database=xserver
The old database name 'x_server_mobile' has been fully migrated to 'xserver'.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-24 21:29:45 +08:00
root
8629f4a4ce
refactor: fix directory structure and namespaces for webman conventions
...
- Rename directories to lowercase: Controller→controller, Model→model, Service→service, Util→util, Bootstrap→bootstrap
- Update all namespaces from App\Xxx to app\xxx (webman convention)
- Update all import statements across the codebase
- Update route.php to use lowercase namespaces
- Remove unused CompanyFeishuApp model
- Comment out unimplemented controller routes
Following webman 2.x framework conventions:
- Models: app\model\{ClassName}
- Controllers: app\controller\{ClassName}
- Services: app\service\{ClassName}
- Utils: app\util\{ClassName}
- Middleware: app\middleware\{ClassName}
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-24 18:28:23 +08:00
root
348885a51c
feat: add simplified Feishu configuration and workflow docs
...
- Update .gitignore to exclude large SQL files except migrations
- Add GIT_WORKFLOW.md documenting branch strategy
- Update Company model with Feishu app retrieval methods
- Update User model with Feishu-related scopes
- Update FeishuService to support multi-app configuration
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-24 18:16:42 +08:00
root
1f6d346f6a
feat: add multi-company Feishu integration and data migration
...
- Add companies table enhancements (abbr, tenant_key, feishu_enabled)
- Add users table enhancements (feishu fields, sn, report_to, etc.)
- Create company_feishu_apps table for multi-app per company
- Create user_sn_pool table for user number management
- Update FeishuService to support multiple Feishu apps per company
- Add data migration script (002_merge_old_data.sql)
- Add import script (scripts/import_old_data.php)
- Update User and Company models with new scopes and relationships
- Add CompanyFeishuApp model
- Add Git workflow documentation (GIT_WORKFLOW.md)
This supports:
- Multi-company architecture with Feishu integration
- Multiple Feishu apps per company (X-Server, Ticket, CRM)
- User number assignment system
- Data migration from old project
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-24 18:12:18 +08:00
root
8d78e18267
Initial commit: X-Server Mobile enterprise tool system
...
- Frontend: React 18 + TypeScript + Vite + Ant Design Mobile
- Backend: PHP 8.5 + Webman 2.x + MySQL + Redis
- i18n support: Chinese, English, Russian, Spanish, French
- Approval workflow engine
- Docker development environment
- Feishu integration
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-02-24 17:57:25 +08:00