Files
x-server-mobile/docs/modules/approval/README.md
T
root e3fa7e86f3 docs: 重组文档结构,按模块分类
新的文档结构:
docs/
├── README.md              # 文档中心导航
├── modules/               # 模块文档
│   ├── auth/             # 认证模块
│   │   ├── README.md
│   │   ├── feishu-login.md
│   │   ├── feishu-qrcode.md
│   │   └── feishu-notification.md
│   ├── approval/         # 审批流程模块
│   │   └── README.md
│   ├── business-trip/    # 出差申请模块
│   │   └── README.md
│   └── user/             # 用户管理模块
│       └── README.md
└── guides/               # 指南文档
    ├── deployment.md
    ├── environment.md
    ├── git-workflow.md
    └── ...

每个模块都有独立的 README.md 说明概述、API、关键文件等
2026-02-28 11:42:51 +08:00

182 lines
4.5 KiB
Markdown

# 审批流程模块 (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