# 审批流程模块 (Approval Module) ## 概述 审批流程模块是系统的核心功能,支持多种审批节点类型和灵活的流程配置。 --- ## 节点类型 | 类型 | 代码 | 说明 | |------|------|------| | 单人审批 | `single_approve` | 需要一个审批人通过 | | 会签 | `and_sign` | 所有人都需要通过 | | 或签 | `or_sign` | 任一人通过即可 | | 通知 | `notify` | 仅通知,无需审批 | --- ## 订单状态 | 状态 | 代码 | 说明 | |------|------|------| | 待审批 | `pending` | 等待当前节点审批 | | 已通过 | `approved` | 流程完成,已通过 | | 已拒绝 | `rejected` | 流程完成,已拒绝 | | 已撤销 | `cancelled` | 申请人主动撤销 | --- ## 列表过滤逻辑 ### 我发起的 ```sql applicant_id = current_user_id ``` ### 待我审批 ```sql status = 'pending' AND current_user_id IN 当前节点审批人列表 AND NOT EXISTS (已审批记录) ``` ### 我已审批 ```sql EXISTS (用户有审批记录) AND status IN ('approved', 'rejected', 'cancelled') ``` --- ## API 接口 | 接口 | 方法 | 说明 | |------|------|------| | `/api/v1/approval/list` | GET | 获取审批列表 | | `/api/v1/approval/detail/:id` | GET | 获取审批详情 | | `/api/v1/approval/approve/:id` | POST | 审批通过 | | `/api/v1/approval/reject/:id` | POST | 审批拒绝 | | `/api/v1/approval/cancel/:id` | POST | 撤销申请 | --- ## 前端关键文件 ``` frontend/src/ ├── pages/approval/ │ ├── list.tsx # 审批列表页 │ └── detail.tsx # 审批详情页 └── modules/approval/ └── components/ # 审批相关组件 ``` --- ## 后端关键文件 ``` backend/app/ ├── Controller/ │ └── ApprovalController.php # 审批控制器 ├── Service/ │ └── ApprovalService.php # 审批服务 └── Model/ ├── ApprovalOrder.php # 审批订单 ├── ApprovalFlow.php # 审批流程 ├── ApprovalNode.php # 审批节点 └── ApprovalRecord.php # 审批记录 ``` --- ## 数据库表结构 ### approval_order (审批订单) ```sql id -- 主键 company_id -- 公司ID applicant_id -- 申请人ID title -- 标题 content -- 内容 type -- 类型 (business_trip, expense, etc.) status -- 状态 (pending, approved, rejected, cancelled) current_node_id -- 当前节点ID created_at updated_at ``` ### approval_node (审批节点) ```sql id -- 主键 flow_id -- 流程ID node_type -- 节点类型 (single_approve, and_sign, or_sign, notify) node_order -- 节点顺序 approvers -- 审批人列表 (JSON) ``` ### approval_record (审批记录) ```sql id -- 主键 order_id -- 订单ID node_id -- 节点ID approver_id -- 审批人ID action -- 操作 (approve, reject, cancel) comment -- 意见 created_at ``` --- ## 流程图 ``` ┌─────────────┐ │ 申请人提交 │ └──────┬──────┘ │ ▼ ┌─────────────┐ 通过 ┌─────────────┐ │ 节点1审批 │ ────────────▶│ 节点2审批 │ └──────┬──────┘ └──────┬──────┘ │ 拒绝 │ 拒绝 ▼ ▼ ┌─────────────┐ ┌─────────────┐ │ 已拒绝 │ │ 已拒绝 │ └─────────────┘ └─────────────┘ │ 通过到最后节点 ▼ ┌─────────────┐ │ 已通过 │ └─────────────┘ ``` --- ## 测试数据 运行测试数据脚本: ```bash docker exec x-server-backend php test_data.php ``` 该脚本会创建: - 2 个待审批的订单(其他用户提交,用户1审批) - 1 个已通过的订单(用户1已审批) - 1 个已拒绝的订单(用户1已拒绝) --- ## 相关文档 - [PROJECT_ISSUES.md](../../PROJECT_ISSUES.md) - 历史问题汇总 - [IMPLEMENTATION_PLAN.md](../../IMPLEMENTATION_PLAN.md) - 实现计划 --- **负责人**: 待分配 **最后更新**: 2026-02-28