# 出差申请模块 (Business Trip Module) ## 概述 出差申请模块是审批流程的具体业务实现,支持出差行程管理、审批人选择、抄送人选择、草稿自动保存等功能。 --- ## 核心功能 | 功能 | 说明 | |------|------| | 行程管理 | 支持添加多个出差行程(城市、日期、住宿) | | 审批人选择 | 单选审批人,支持搜索 | | 抄送人选择 | 多选抄送人,支持搜索 | | 草稿保存 | 自动保存到 localStorage,刷新后恢复 | | 默认审批人 | 自动加载历史审批人 | --- ## API 接口 | 接口 | 方法 | 说明 | |------|------|------| | `/api/v1/business-trip/list` | GET | 获取出差列表 | | `/api/v1/business-trip/detail/:id` | GET | 获取出差详情 | | `/api/v1/business-trip/create` | POST | 创建出差申请 | | `/api/v1/business-trip/update/:id` | POST | 更新出差申请 | | `/api/v1/business-trip/submit/:id` | POST | 提交审批 | | `/api/v1/business-trip/cancel/:id` | POST | 撤销申请 | | `/api/v1/business-trip/delete/:id` | DELETE | 删除草稿 | | `/api/v1/business-trip/default-approvers` | GET | 获取默认审批人 | --- ## 前端关键文件 ``` frontend/src/pages/business-trip/ ├── list.tsx # 出差列表页 ├── apply.tsx # 出差申请页 ├── detail.tsx # 出差详情页 ├── select-approver.tsx # 选择审批人 └── select-cc.tsx # 选择抄送人 ``` --- ## 草稿自动保存 ### 保存时机 - 表单字段变化时 - 添加/删除行程时 - 选择审批人/抄送人时 ### 保存内容 ```typescript { trips: [...], // 出差行程 approvers: [...], // 审批人列表 ccUsers: [...], // 抄送人列表 reason: string, // 出差事由 savedAt: timestamp // 保存时间 } ``` ### 恢复逻辑 - 进入申请页时检查 localStorage - 如果存在草稿且未超过24小时,提示恢复 - 用户可选择恢复或放弃 --- ## 表单验证 ### 必填字段 - 出差行程(至少一条) - 每条行程:出发城市、目的城市、出发日期、返回日期 - 审批人(至少一人) - 出差事由 ### 日期验证 - 出发日期不能早于今天 - 返回日期不能早于出发日期 - 多条行程日期不能重叠 --- ## 数据库表结构 ### business_trip (出差申请) ```sql id -- 主键 company_id -- 公司ID applicant_id -- 申请人ID title -- 标题 reason -- 出差事由 status -- 状态 (draft, pending, approved, rejected, cancelled) current_node_id -- 当前节点ID created_at updated_at ``` ### business_trip_trip (出差行程) ```sql id -- 主键 business_trip_id -- 出差申请ID from_city -- 出发城市 to_city -- 目的城市 start_date -- 出发日期 end_date -- 返回日期 hotel_required -- 是否需要住宿 hotel_name -- 酒店名称(可选) ``` ### business_trip_approver (审批人) ```sql id -- 主键 business_trip_id -- 出差申请ID approver_id -- 审批人ID is_default -- 是否默认审批人 ``` --- ## 状态流转 ``` draft (草稿) │ 提交 ▼ pending (待审批) │ 通过 │ 拒绝 │ 撤销 ▼ ▼ ▼ approved rejected cancelled ``` --- ## 相关文档 - [审批流程模块](../approval/README.md) - [PROJECT_ISSUES.md](../../PROJECT_ISSUES.md) --- **负责人**: 待分配 **最后更新**: 2026-02-28