wuzhen update
This commit is contained in:
commit
0037cb4e7d
1503 files changed
+74822
-196654
No files matched your search
@@ -0,0 +1,496 @@
|
||||
# 出国申请管理系统需求文档
|
||||
|
||||
**项目名称**: 校园管理系统 - 出国申请管理模块
|
||||
**文档版本**: v1.0
|
||||
**创建时间**: 2025-07-28
|
||||
**更新时间**: 2025-07-28
|
||||
|
||||
## 📋 需求概述
|
||||
|
||||
### 业务背景
|
||||
为规范学校教职工出国(出境)申请流程,建立标准化的出国申请、审批、记录管理体系,提升出国事务管理的效率和规范性。
|
||||
|
||||
### 核心目标
|
||||
1. **流程规范化**:建立标准的出国申请和审批流程
|
||||
2. **权限分离**:区分申请管理和审批管理功能,实现权限精细化控制
|
||||
3. **过程透明**:申请进度可视化,审批过程可追溯
|
||||
4. **数据完整**:完整记录出国申请全过程数据,支持统计分析
|
||||
|
||||
## 🎯 功能模块设计
|
||||
|
||||
### 模块架构
|
||||
参考培训申请和培训审批的权限分离设计,出国申请管理分为两个独立模块:
|
||||
|
||||
```
|
||||
人事管理
|
||||
├── 出国申请 (rs:overseas:*) ← 申请管理功能
|
||||
└── 出国审批 (rs:overseasApproval:*) ← 审批管理功能
|
||||
```
|
||||
|
||||
## 📊 出国申请模块 (rs:overseas:*)
|
||||
|
||||
### 功能定位
|
||||
面向教职工的出国申请管理平台,提供申请提交、查看、修改等功能。
|
||||
|
||||
### 主要功能
|
||||
|
||||
#### 1. 出国申请选项卡
|
||||
- **申请提交**:新增出国申请
|
||||
- **申请查看**:查看申请详情和状态
|
||||
- **申请修改**:编辑待审核的申请
|
||||
- **申请删除**:删除申请记录
|
||||
- **申请导出**:导出申请数据
|
||||
|
||||
#### 2. 出国记录选项卡
|
||||
- **记录查看**:查看已完成的出国记录
|
||||
- **记录编辑**:更新出国记录信息
|
||||
- **材料上传**:上传出国证明材料
|
||||
- **记录导出**:导出出国记录
|
||||
|
||||
### 核心字段设计
|
||||
|
||||
#### 出国申请基础信息
|
||||
```javascript
|
||||
{
|
||||
applicationId: string, // 申请ID(雪花ID)
|
||||
applicantId: string, // 申请人ID
|
||||
applicantName: string, // 申请人姓名
|
||||
department: string, // 所属部门
|
||||
position: string, // 职位
|
||||
contactPhone: string, // 联系电话
|
||||
contactEmail: string, // 联系邮箱
|
||||
}
|
||||
```
|
||||
|
||||
#### 出国详细信息
|
||||
```javascript
|
||||
{
|
||||
purpose: string, // 出国目的(学术交流、培训、会议、考察等)
|
||||
purposeDetail: string, // 目的详细说明
|
||||
destination: string, // 目的地国家/地区
|
||||
destinationCity: string, // 目的地城市
|
||||
startDate: date, // 出国开始日期
|
||||
endDate: date, // 出国结束日期
|
||||
duration: number, // 出国天数
|
||||
budget: number, // 预算金额
|
||||
budgetSource: string, // 经费来源(学校、个人、项目、其他)
|
||||
invitation: string, // 邀请方信息
|
||||
itinerary: string, // 行程安排
|
||||
accommodationPlan: string, // 住宿安排
|
||||
transportationPlan: string, // 交通安排
|
||||
}
|
||||
```
|
||||
|
||||
#### 审批流程信息
|
||||
```javascript
|
||||
{
|
||||
status: string, // 申请状态(0-待审核,1-已通过,2-已拒绝,3-已取消,4-已完成)
|
||||
currentApprover: string, // 当前审批人
|
||||
approvalLevel: string, // 当前审批级别
|
||||
applyTime: datetime, // 申请时间
|
||||
approvalTime: datetime, // 审批时间
|
||||
adminRemark: string, // 管理员备注
|
||||
applicantRemark: string, // 申请人备注
|
||||
}
|
||||
```
|
||||
|
||||
### 页面布局设计
|
||||
|
||||
#### 出国申请表单
|
||||
```vue
|
||||
<el-form>
|
||||
<!-- 基础信息 -->
|
||||
<el-card title="基础信息">
|
||||
<el-form-item label="所属部门" required>
|
||||
<el-select v-model="form.department" placeholder="请选择部门">
|
||||
<!-- 从sys_dept获取部门列表 -->
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="联系电话" required>
|
||||
<el-input v-model="form.contactPhone" />
|
||||
</el-form-item>
|
||||
<el-form-item label="联系邮箱" required>
|
||||
<el-input v-model="form.contactEmail" />
|
||||
</el-form-item>
|
||||
</el-card>
|
||||
|
||||
<!-- 出国信息 -->
|
||||
<el-card title="出国信息">
|
||||
<el-form-item label="出国目的" required>
|
||||
<el-select v-model="form.purpose">
|
||||
<el-option label="学术交流" value="academic" />
|
||||
<el-option label="培训学习" value="training" />
|
||||
<el-option label="国际会议" value="conference" />
|
||||
<el-option label="考察访问" value="visit" />
|
||||
<el-option label="其他" value="other" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="目的详细说明" required>
|
||||
<el-input type="textarea" v-model="form.purposeDetail" />
|
||||
</el-form-item>
|
||||
<el-form-item label="目的地国家" required>
|
||||
<el-input v-model="form.destination" />
|
||||
</el-form-item>
|
||||
<el-form-item label="目的地城市" required>
|
||||
<el-input v-model="form.destinationCity" />
|
||||
</el-form-item>
|
||||
</el-card>
|
||||
|
||||
<!-- 时间和预算 -->
|
||||
<el-card title="时间和预算">
|
||||
<el-form-item label="出国时间" required>
|
||||
<el-date-picker
|
||||
v-model="dateRange"
|
||||
type="daterange"
|
||||
range-separator="至"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="预算金额" required>
|
||||
<el-input-number v-model="form.budget" :min="0" />
|
||||
</el-form-item>
|
||||
<el-form-item label="经费来源" required>
|
||||
<el-select v-model="form.budgetSource">
|
||||
<el-option label="学校经费" value="school" />
|
||||
<el-option label="个人承担" value="personal" />
|
||||
<el-option label="项目经费" value="project" />
|
||||
<el-option label="其他来源" value="other" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-card>
|
||||
|
||||
<!-- 详细安排 -->
|
||||
<el-card title="详细安排">
|
||||
<el-form-item label="邀请方信息">
|
||||
<el-input type="textarea" v-model="form.invitation" />
|
||||
</el-form-item>
|
||||
<el-form-item label="行程安排" required>
|
||||
<el-input type="textarea" v-model="form.itinerary" />
|
||||
</el-form-item>
|
||||
<el-form-item label="住宿安排">
|
||||
<el-input type="textarea" v-model="form.accommodationPlan" />
|
||||
</el-form-item>
|
||||
<el-form-item label="交通安排">
|
||||
<el-input type="textarea" v-model="form.transportationPlan" />
|
||||
</el-form-item>
|
||||
<el-form-item label="申请备注">
|
||||
<el-input type="textarea" v-model="form.applicantRemark" />
|
||||
</el-form-item>
|
||||
</el-card>
|
||||
</el-form>
|
||||
```
|
||||
|
||||
## 📝 出国审批模块 (rs:overseasApproval:*)
|
||||
|
||||
### 功能定位
|
||||
面向管理员和审批人员的出国申请审批平台,提供审批处理、流程管理等功能。
|
||||
|
||||
### 主要功能
|
||||
|
||||
#### 1. 待审批申请选项卡
|
||||
- **申请审批**:审批出国申请(通过/拒绝)
|
||||
- **审批查询**:查询和筛选待审批申请
|
||||
- **批量审批**:批量处理多个申请
|
||||
- **审批导出**:导出审批数据
|
||||
|
||||
#### 2. 审批记录选项卡
|
||||
- **历史审批**:查看已审批的申请记录
|
||||
- **审批统计**:审批数据统计分析
|
||||
- **记录导出**:导出审批记录
|
||||
|
||||
### 审批流程设计
|
||||
|
||||
#### 审批层级
|
||||
```javascript
|
||||
// 基于金额和天数的审批层级
|
||||
const approvalRules = {
|
||||
level1: { // 一级审批:部门主管
|
||||
condition: "budget <= 10000 && duration <= 7",
|
||||
approver: "部门主管"
|
||||
},
|
||||
level2: { // 二级审批:分管领导
|
||||
condition: "budget <= 50000 && duration <= 30",
|
||||
approver: "分管领导"
|
||||
},
|
||||
level3: { // 三级审批:校领导
|
||||
condition: "budget > 50000 || duration > 30",
|
||||
approver: "校领导"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### 审批状态流转
|
||||
```
|
||||
申请提交 → 部门审核 → 分管领导审批 → 校领导审批 → 审批完成
|
||||
↓ ↓ ↓ ↓
|
||||
待审核 已通过/拒绝 已通过/拒绝 已通过/拒绝
|
||||
```
|
||||
|
||||
## 🗄️ 数据库设计
|
||||
|
||||
### 主表:rs_overseas_application
|
||||
```sql
|
||||
CREATE TABLE rs_overseas_application (
|
||||
application_id BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '申请ID',
|
||||
applicant_id BIGINT(20) NOT NULL COMMENT '申请人ID',
|
||||
applicant_name VARCHAR(50) NOT NULL COMMENT '申请人姓名',
|
||||
department VARCHAR(100) NOT NULL COMMENT '所属部门',
|
||||
position VARCHAR(100) COMMENT '职位',
|
||||
contact_phone VARCHAR(20) COMMENT '联系电话',
|
||||
contact_email VARCHAR(100) COMMENT '联系邮箱',
|
||||
|
||||
purpose VARCHAR(50) NOT NULL COMMENT '出国目的',
|
||||
purpose_detail TEXT NOT NULL COMMENT '目的详细说明',
|
||||
destination VARCHAR(100) NOT NULL COMMENT '目的地国家',
|
||||
destination_city VARCHAR(100) COMMENT '目的地城市',
|
||||
start_date DATE NOT NULL COMMENT '开始日期',
|
||||
end_date DATE NOT NULL COMMENT '结束日期',
|
||||
duration INT NOT NULL COMMENT '出国天数',
|
||||
budget DECIMAL(15,2) NOT NULL COMMENT '预算金额',
|
||||
budget_source VARCHAR(50) NOT NULL COMMENT '经费来源',
|
||||
|
||||
invitation TEXT COMMENT '邀请方信息',
|
||||
itinerary TEXT NOT NULL COMMENT '行程安排',
|
||||
accommodation_plan TEXT COMMENT '住宿安排',
|
||||
transportation_plan TEXT COMMENT '交通安排',
|
||||
|
||||
status CHAR(1) NOT NULL DEFAULT '0' COMMENT '申请状态',
|
||||
current_approver VARCHAR(100) COMMENT '当前审批人',
|
||||
approval_level CHAR(1) COMMENT '审批级别',
|
||||
apply_time DATETIME NOT NULL COMMENT '申请时间',
|
||||
approval_time DATETIME COMMENT '审批时间',
|
||||
admin_remark TEXT COMMENT '管理员备注',
|
||||
applicant_remark TEXT COMMENT '申请人备注',
|
||||
|
||||
tenant_id VARCHAR(20) DEFAULT '000000' COMMENT '租户编号',
|
||||
deleted CHAR(1) DEFAULT '0' COMMENT '删除标志',
|
||||
create_dept BIGINT(20) COMMENT '创建部门',
|
||||
create_by BIGINT(20) COMMENT '创建者',
|
||||
create_time DATETIME COMMENT '创建时间',
|
||||
update_by BIGINT(20) COMMENT '更新者',
|
||||
update_time DATETIME COMMENT '更新时间',
|
||||
|
||||
PRIMARY KEY (application_id)
|
||||
) ENGINE=InnoDB COMMENT='出国申请表';
|
||||
```
|
||||
|
||||
### 字典表:sys_dict_data(新增出国相关字典)
|
||||
```sql
|
||||
-- 出国目的
|
||||
INSERT INTO sys_dict_data VALUES (NULL, 1, '学术交流', 'academic', 'overseas_purpose', '', '', 'Y', '0', 'admin', NOW(), '', NULL, '学术交流访问');
|
||||
INSERT INTO sys_dict_data VALUES (NULL, 2, '培训学习', 'training', 'overseas_purpose', '', '', 'Y', '0', 'admin', NOW(), '', NULL, '培训学习');
|
||||
INSERT INTO sys_dict_data VALUES (NULL, 3, '国际会议', 'conference', 'overseas_purpose', '', '', 'Y', '0', 'admin', NOW(), '', NULL, '参加国际会议');
|
||||
INSERT INTO sys_dict_data VALUES (NULL, 4, '考察访问', 'visit', 'overseas_purpose', '', '', 'Y', '0', 'admin', NOW(), '', NULL, '考察访问');
|
||||
INSERT INTO sys_dict_data VALUES (NULL, 5, '其他', 'other', 'overseas_purpose', '', '', 'Y', '0', 'admin', NOW(), '', NULL, '其他目的');
|
||||
|
||||
-- 经费来源
|
||||
INSERT INTO sys_dict_data VALUES (NULL, 1, '学校经费', 'school', 'budget_source', '', '', 'Y', '0', 'admin', NOW(), '', NULL, '学校经费');
|
||||
INSERT INTO sys_dict_data VALUES (NULL, 2, '个人承担', 'personal', 'budget_source', '', '', 'Y', '0', 'admin', NOW(), '', NULL, '个人承担');
|
||||
INSERT INTO sys_dict_data VALUES (NULL, 3, '项目经费', 'project', 'budget_source', '', '', 'Y', '0', 'admin', NOW(), '', NULL, '项目经费');
|
||||
INSERT INTO sys_dict_data VALUES (NULL, 4, '其他来源', 'other', 'budget_source', '', '', 'Y', '0', 'admin', NOW(), '', NULL, '其他来源');
|
||||
|
||||
-- 申请状态
|
||||
INSERT INTO sys_dict_data VALUES (NULL, 1, '待审核', '0', 'overseas_status', '', 'warning', 'Y', '0', 'admin', NOW(), '', NULL, '待审核');
|
||||
INSERT INTO sys_dict_data VALUES (NULL, 2, '已通过', '1', 'overseas_status', '', 'success', 'Y', '0', 'admin', NOW(), '', NULL, '已通过');
|
||||
INSERT INTO sys_dict_data VALUES (NULL, 3, '已拒绝', '2', 'overseas_status', '', 'danger', 'Y', '0', 'admin', NOW(), '', NULL, '已拒绝');
|
||||
INSERT INTO sys_dict_data VALUES (NULL, 4, '已取消', '3', 'overseas_status', '', 'info', 'Y', '0', 'admin', NOW(), '', NULL, '已取消');
|
||||
INSERT INTO sys_dict_data VALUES (NULL, 5, '已完成', '4', 'overseas_status', '', 'primary', 'Y', '0', 'admin', NOW(), '', NULL, '已完成');
|
||||
```
|
||||
|
||||
## 🔐 权限配置
|
||||
|
||||
### 菜单权限配置
|
||||
```sql
|
||||
-- 出国申请主菜单
|
||||
INSERT INTO sys_menu VALUES (2130, '出国申请', 2000, 3, 'overseas', 'rs/overseas/index', '', '', 1, 0, 'M', '0', '0', 'rs:overseas:list', 'international', 'admin', NOW(), '', NULL, '出国申请管理');
|
||||
|
||||
-- 出国申请子权限
|
||||
INSERT INTO sys_menu VALUES (2131, '出国申请查询', 2130, 1, '', '', '', '', 1, 0, 'F', '0', '0', 'rs:overseas:application:query', '#', 'admin', NOW(), '', NULL, '');
|
||||
INSERT INTO sys_menu VALUES (2132, '出国申请新增', 2130, 2, '', '', '', '', 1, 0, 'F', '0', '0', 'rs:overseas:application:add', '#', 'admin', NOW(), '', NULL, '');
|
||||
INSERT INTO sys_menu VALUES (2133, '出国申请修改', 2130, 3, '', '', '', '', 1, 0, 'F', '0', '0', 'rs:overseas:application:edit', '#', 'admin', NOW(), '', NULL, '');
|
||||
INSERT INTO sys_menu VALUES (2134, '出国申请删除', 2130, 4, '', '', '', '', 1, 0, 'F', '0', '0', 'rs:overseas:application:remove', '#', 'admin', NOW(), '', NULL, '');
|
||||
INSERT INTO sys_menu VALUES (2135, '出国申请导出', 2130, 5, '', '', '', '', 1, 0, 'F', '0', '0', 'rs:overseas:application:export', '#', 'admin', NOW(), '', NULL, '');
|
||||
|
||||
-- 出国审批主菜单
|
||||
INSERT INTO sys_menu VALUES (2140, '出国审批', 2000, 4, 'overseasApproval', 'rs/overseasApproval/index', '', '', 1, 0, 'M', '0', '0', 'rs:overseasApproval:list', 'process', 'admin', NOW(), '', NULL, '出国审批管理');
|
||||
|
||||
-- 出国审批子权限
|
||||
INSERT INTO sys_menu VALUES (2141, '出国审批查询', 2140, 1, '', '', '', '', 1, 0, 'F', '0', '0', 'rs:overseasApproval:query', '#', 'admin', NOW(), '', NULL, '');
|
||||
INSERT INTO sys_menu VALUES (2142, '出国审批处理', 2140, 2, '', '', '', '', 1, 0, 'F', '0', '0', 'rs:overseasApproval:process', '#', 'admin', NOW(), '', NULL, '');
|
||||
INSERT INTO sys_menu VALUES (2143, '出国审批导出', 2140, 3, '', '', '', '', 1, 0, 'F', '0', '0', 'rs:overseasApproval:export', '#', 'admin', NOW(), '', NULL, '');
|
||||
```
|
||||
|
||||
### 角色权限分配
|
||||
```sql
|
||||
-- 教职工角色(出国申请权限)
|
||||
INSERT INTO sys_role_menu SELECT 2, menu_id FROM sys_menu WHERE menu_id BETWEEN 2130 AND 2135;
|
||||
|
||||
-- 审批人员角色(出国审批权限)
|
||||
INSERT INTO sys_role_menu SELECT 3, menu_id FROM sys_menu WHERE menu_id BETWEEN 2140 AND 2143;
|
||||
|
||||
-- 管理员角色(全部权限)
|
||||
INSERT INTO sys_role_menu SELECT 1, menu_id FROM sys_menu WHERE menu_id BETWEEN 2130 AND 2143;
|
||||
```
|
||||
|
||||
## 📱 技术实现
|
||||
|
||||
### 前端路由配置
|
||||
```javascript
|
||||
// web/src/router/index.ts
|
||||
{
|
||||
path: 'overseas',
|
||||
component: () => import('@/views/rs/overseas/index.vue'),
|
||||
name: 'OverseasManagement',
|
||||
meta: { title: '出国申请', icon: 'international', permissions: ['rs:overseas:list'] }
|
||||
},
|
||||
{
|
||||
path: 'overseasApproval',
|
||||
component: () => import('@/views/rs/overseasApproval/index.vue'),
|
||||
name: 'OverseasApproval',
|
||||
meta: { title: '出国审批', icon: 'process', permissions: ['rs:overseasApproval:list'] }
|
||||
}
|
||||
```
|
||||
|
||||
### API接口设计
|
||||
```javascript
|
||||
// web/src/api/rs/overseas.ts
|
||||
export interface OverseasApplicationForm {
|
||||
applicationId?: string | number;
|
||||
department: string;
|
||||
contactPhone: string;
|
||||
contactEmail: string;
|
||||
purpose: string;
|
||||
purposeDetail: string;
|
||||
destination: string;
|
||||
destinationCity: string;
|
||||
startDate: string;
|
||||
endDate: string;
|
||||
budget: number;
|
||||
budgetSource: string;
|
||||
invitation?: string;
|
||||
itinerary: string;
|
||||
accommodationPlan?: string;
|
||||
transportationPlan?: string;
|
||||
applicantRemark?: string;
|
||||
}
|
||||
|
||||
// 申请管理API
|
||||
export const listOverseasApplication = (query: OverseasQuery) => {
|
||||
return request({ url: '/rs/overseas/list', method: 'get', params: query });
|
||||
};
|
||||
|
||||
export const addOverseasApplication = (data: OverseasApplicationForm) => {
|
||||
return request({ url: '/rs/overseas', method: 'post', data: data });
|
||||
};
|
||||
|
||||
// 审批管理API
|
||||
export const approveOverseasApplication = (applicationId: string | number, status: string, remark?: string) => {
|
||||
return request({ url: '/rs/overseasApproval/approve', method: 'post', data: { applicationId, status, remark } });
|
||||
};
|
||||
```
|
||||
|
||||
### 后端控制器
|
||||
```java
|
||||
// backend/ruoyi-modules/ruoyi-rs/src/main/java/org/dromara/rs/controller/RsOverseasController.java
|
||||
@RestController
|
||||
@RequestMapping("/rs/overseas")
|
||||
public class RsOverseasController extends BaseController {
|
||||
|
||||
@SaCheckPermission("rs:overseas:application:query")
|
||||
@GetMapping("/list")
|
||||
public TableDataInfo<RsOverseasApplicationVo> list(RsOverseasApplicationQuery query) {
|
||||
return rsOverseasService.queryPageList(query);
|
||||
}
|
||||
|
||||
@SaCheckPermission("rs:overseas:application:add")
|
||||
@PostMapping
|
||||
public R<Void> add(@Validated @RequestBody RsOverseasApplicationBo bo) {
|
||||
return toAjax(rsOverseasService.insertByBo(bo));
|
||||
}
|
||||
}
|
||||
|
||||
// backend/ruoyi-modules/ruoyi-rs/src/main/java/org/dromara/rs/controller/RsOverseasApprovalController.java
|
||||
@RestController
|
||||
@RequestMapping("/rs/overseasApproval")
|
||||
public class RsOverseasApprovalController extends BaseController {
|
||||
|
||||
@SaCheckPermission("rs:overseasApproval:process")
|
||||
@PostMapping("/approve")
|
||||
public R<Void> approve(@RequestBody ApprovalRequest request) {
|
||||
return toAjax(rsOverseasApprovalService.approve(request));
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 📊 业务流程
|
||||
|
||||
### 申请流程
|
||||
```mermaid
|
||||
graph TD
|
||||
A[教职工提交申请] --> B[系统验证]
|
||||
B --> C[部门主管审核]
|
||||
C --> D{金额/天数判断}
|
||||
D -->|≤1万且≤7天| E[审批完成]
|
||||
D -->|≤5万且≤30天| F[分管领导审批]
|
||||
D -->|>5万或>30天| G[校领导审批]
|
||||
F --> H[审批完成]
|
||||
G --> I[审批完成]
|
||||
|
||||
C --> J[拒绝]
|
||||
F --> K[拒绝]
|
||||
G --> L[拒绝]
|
||||
```
|
||||
|
||||
### 状态流转
|
||||
```javascript
|
||||
const statusFlow = {
|
||||
'0': ['1', '2', '3'], // 待审核 → 通过/拒绝/取消
|
||||
'1': ['4'], // 已通过 → 已完成
|
||||
'2': [], // 已拒绝 → 终态
|
||||
'3': [], // 已取消 → 终态
|
||||
'4': [] // 已完成 → 终态
|
||||
};
|
||||
```
|
||||
|
||||
## 🔍 验收标准
|
||||
|
||||
### 功能测试
|
||||
1. **申请提交**:教职工能够完整填写并提交出国申请
|
||||
2. **审批处理**:管理员能够查看、审批、拒绝申请
|
||||
3. **权限控制**:不同角色只能访问对应功能模块
|
||||
4. **状态流转**:申请状态按照业务规则正确流转
|
||||
5. **数据完整**:所有申请和审批数据完整记录
|
||||
|
||||
### 性能要求
|
||||
1. **响应时间**:页面加载时间 < 3秒
|
||||
2. **并发处理**:支持100人同时使用
|
||||
3. **数据准确**:审批流程无数据丢失或错误
|
||||
|
||||
### 用户体验
|
||||
1. **界面友好**:参考培训申请的UI设计风格
|
||||
2. **操作简单**:申请流程不超过5个步骤
|
||||
3. **提示清晰**:表单验证和错误提示明确
|
||||
|
||||
## 📅 开发计划
|
||||
|
||||
### 第一阶段(1周):基础搭建
|
||||
- 数据库表设计和创建
|
||||
- 菜单权限配置
|
||||
- 基础页面框架搭建
|
||||
|
||||
### 第二阶段(2周):核心功能开发
|
||||
- 出国申请功能开发
|
||||
- 出国审批功能开发
|
||||
- 审批流程实现
|
||||
|
||||
### 第三阶段(1周):测试优化
|
||||
- 功能测试和优化
|
||||
- 权限测试验证
|
||||
- 用户体验优化
|
||||
|
||||
---
|
||||
|
||||
**✅ 需求文档完成**
|
||||
**📋 参考标准**: 基于培训申请和培训审批的设计模式
|
||||
**🎯 核心特色**: 权限分离、流程规范、数据完整、用户友好
|
||||
@@ -0,0 +1,133 @@
|
||||
需求分析概览
|
||||
|
||||
### 核心业务模块
|
||||
1. **招聘管理模块** - 招聘公告、职位管理
|
||||
2. **应聘者管理模块** - 注册登录、简历管理、职位申请
|
||||
3. **培训管理模块** - 培训申请、审核、记录管理
|
||||
4. **出国申请模块** - 出国申请、审核流程
|
||||
5. **用户认证模块** - 多种登录方式、密码重置
|
||||
|
||||
## 👥 角色体系设计
|
||||
|
||||
基于您的需求,系统需要以下角色:
|
||||
|
||||
### 1. **应聘者角色** (APPLICANT)
|
||||
- 账号注册、登录
|
||||
- 简历填写和管理
|
||||
- 职位申请和跟踪
|
||||
- 个人信息维护
|
||||
|
||||
### 2. **HR管理员角色** (HR_ADMIN)
|
||||
- 发布招聘公告
|
||||
- 管理招聘职位
|
||||
- 审核应聘者申请
|
||||
- 简历筛选和评估
|
||||
|
||||
### 3. **教职工角色** (TEACHER)
|
||||
- 培训申请和查询
|
||||
- 出国申请提交
|
||||
- 个人培训记录查看
|
||||
- 证书上传管理
|
||||
|
||||
### 4. **培训管理员角色** (TRAINING_ADMIN)
|
||||
- 培训课程管理
|
||||
- 培训申请审核
|
||||
- 培训记录登记
|
||||
- 培训证书管理
|
||||
|
||||
### 5. **审批领导角色** (APPROVER)
|
||||
- 培训申请审批
|
||||
- 出国申请审批
|
||||
- 在线签字审批
|
||||
- 审批流程管理
|
||||
|
||||
### 6. **系统管理员角色** (SYSTEM_ADMIN)
|
||||
- 用户权限管理
|
||||
- 系统配置管理
|
||||
- 数据统计分析
|
||||
|
||||
## 📋 需要提供的材料清单
|
||||
|
||||
为了完整开发这个人事管理系统,我需要您提供以下材料:
|
||||
|
||||
### 🔴 必需材料
|
||||
|
||||
#### 1. **业务流程图**
|
||||
- 招聘流程:发布公告 → 职位申请 → 简历筛选 → 面试安排 → 录用决定
|
||||
- 培训申请流程:申请提交 → 部门审核 → 领导审批 → 培训执行 → 记录归档
|
||||
- 出国申请流程:申请提交 → 部门审核 → 领导审批 → 出国执行
|
||||
|
||||
#### 2. **详细字段需求**
|
||||
- **招聘职位**:职位名称、部门、岗位要求、薪资范围、工作地点等
|
||||
- **简历信息**:基本信息、教育背景、工作经历、技能证书、附件等
|
||||
- **培训记录**:培训名称、培训时间、学时、培训类别、证书等
|
||||
- **出国申请**:出国目的、目的地、时间、预算、行程安排等
|
||||
|
||||
#### 3. **审批规则**
|
||||
- 培训申请的审批层级(部门主管 → 分管领导 → 校领导)
|
||||
- 出国申请的审批层级和条件
|
||||
- 不同金额/时长的审批权限
|
||||
|
||||
#### 4. **权限矩阵**
|
||||
- 各角色的功能权限明细
|
||||
- 数据查看权限范围
|
||||
- 操作权限限制
|
||||
|
||||
### 🟡 建议提供的材料
|
||||
|
||||
#### 5. **UI/UX设计要求**
|
||||
- 简历填写页面的布局要求
|
||||
- 审批流程的界面展示
|
||||
- 移动端适配要求
|
||||
|
||||
#### 6. **集成需求**
|
||||
- 是否需要与现有OA系统集成
|
||||
- 短信/邮件服务商选择
|
||||
- 文件存储方案
|
||||
|
||||
#### 7. **报表需求**
|
||||
- 招聘统计报表
|
||||
- 培训统计分析
|
||||
- 人事数据报表
|
||||
|
||||
## 🚀 开发规划建议
|
||||
|
||||
### 第一阶段:基础模块开发 (2-3周)
|
||||
1. 用户认证模块(多种登录方式)
|
||||
2. 角色权限管理
|
||||
3. 基础数据字典
|
||||
|
||||
### 第二阶段:招聘管理模块 (2-3周)
|
||||
1. 招聘公告管理
|
||||
2. 职位管理
|
||||
3. 应聘者注册和简历管理
|
||||
|
||||
### 第三阶段:培训管理模块 (2-3周)
|
||||
1. 培训申请和审核
|
||||
2. 培训记录管理
|
||||
3. 工作流集成
|
||||
|
||||
### 第四阶段:出国申请模块 (1-2周)
|
||||
1. 出国申请流程
|
||||
2. 审批管理
|
||||
3. 记录查询
|
||||
|
||||
### 第五阶段:优化完善 (1周)
|
||||
1. 报表统计
|
||||
2. 移动端适配
|
||||
3. 性能优化
|
||||
|
||||
## 📝 下一步行动
|
||||
|
||||
请您优先提供以下关键材料,我就可以开始详细的技术设计:
|
||||
|
||||
1. **详细的业务流程图** - 特别是审批流程的具体步骤
|
||||
2. **各模块的详细字段清单** - 包括必填字段、字段类型、校验规则
|
||||
3. **角色权限矩阵** - 明确各角色可以执行的操作
|
||||
4. **审批规则说明** - 不同类型申请的审批层级和条件
|
||||
|
||||
有了这些材料,我将按照项目规范为您生成:
|
||||
- 完整的数据库设计文档
|
||||
- 标准的API接口文档
|
||||
- 详细的开发计划
|
||||
- 规范的代码模板
|
||||
@@ -0,0 +1,406 @@
|
||||
# 培训管理模块开发需求
|
||||
|
||||
## 一、需求概述
|
||||
|
||||
基于人事管理系统现有招聘管理功能,开发培训管理模块,实现培训申请、审核、培训记录管理等功能。培训管理模块主要支持教职工提交培训申请,培训管理员审核申请和管理培训课程,审批领导进行多级审批,并提供培训记录统计功能。
|
||||
|
||||
## 二、功能模块设计
|
||||
|
||||
### 1. 培训课程管理
|
||||
|
||||
#### 功能描述
|
||||
- 培训课程的CRUD操作
|
||||
- 课程分类管理
|
||||
- 课程状态管理(待开课、进行中、已结束)
|
||||
- 课程名额限制和报名统计
|
||||
|
||||
#### 数据表设计
|
||||
```sql
|
||||
CREATE TABLE `rs_training_course` (
|
||||
`course_id` bigint(20) NOT NULL COMMENT '课程ID',
|
||||
`title` varchar(100) NOT NULL COMMENT '课程名称',
|
||||
`category` varchar(50) NOT NULL COMMENT '课程类别',
|
||||
`description` text COMMENT '课程描述',
|
||||
`start_time` datetime NOT NULL COMMENT '开始时间',
|
||||
`end_time` datetime NOT NULL COMMENT '结束时间',
|
||||
`duration` int(11) NOT NULL COMMENT '学时数',
|
||||
`location` varchar(200) COMMENT '培训地点',
|
||||
`max_participants` int(11) DEFAULT 0 COMMENT '最大参与人数',
|
||||
`current_participants` int(11) DEFAULT 0 COMMENT '当前报名人数',
|
||||
`status` char(1) DEFAULT '0' COMMENT '状态(0正常 1停用)',
|
||||
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
|
||||
`create_by` bigint(20) DEFAULT NULL COMMENT '创建者',
|
||||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||||
`update_by` bigint(20) DEFAULT NULL COMMENT '更新者',
|
||||
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
|
||||
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
|
||||
`deleted` char(1) DEFAULT '0' COMMENT '删除标志',
|
||||
PRIMARY KEY (`course_id`)
|
||||
) ENGINE=InnoDB COMMENT='培训课程表';
|
||||
```
|
||||
|
||||
### 2. 培训申请管理
|
||||
|
||||
#### 功能描述
|
||||
- 教职工提交培训申请
|
||||
- 培训申请列表展示和筛选
|
||||
- 申请详情查看
|
||||
- 申请状态管理
|
||||
- 多级审批流程(部门主管→分管领导→校领导)
|
||||
|
||||
#### 数据表设计
|
||||
```sql
|
||||
CREATE TABLE `rs_training_application` (
|
||||
`application_id` bigint(20) NOT NULL COMMENT '申请ID',
|
||||
`course_id` bigint(20) NOT NULL COMMENT '课程ID',
|
||||
`user_id` bigint(20) NOT NULL COMMENT '申请人ID',
|
||||
`user_name` varchar(50) NOT NULL COMMENT '申请人姓名',
|
||||
`department` varchar(50) NOT NULL COMMENT '所属部门',
|
||||
`position` varchar(50) COMMENT '职位',
|
||||
`reason` text COMMENT '申请理由',
|
||||
`status` char(1) DEFAULT '0' COMMENT '状态(0待审核 1已通过 2已拒绝 3进行中 4已完成)',
|
||||
`apply_time` datetime DEFAULT NULL COMMENT '申请时间',
|
||||
`current_approver` varchar(50) DEFAULT NULL COMMENT '当前审批人',
|
||||
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
|
||||
`create_by` bigint(20) DEFAULT NULL COMMENT '创建者',
|
||||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||||
`update_by` bigint(20) DEFAULT NULL COMMENT '更新者',
|
||||
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
|
||||
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
|
||||
`deleted` char(1) DEFAULT '0' COMMENT '删除标志',
|
||||
PRIMARY KEY (`application_id`)
|
||||
) ENGINE=InnoDB COMMENT='培训申请表';
|
||||
```
|
||||
|
||||
### 3. 培训审批流程
|
||||
|
||||
#### 功能描述
|
||||
- 审批流程定义和配置
|
||||
- 审批记录跟踪
|
||||
- 审批意见填写
|
||||
- 审批通知(短信/邮件)
|
||||
|
||||
#### 数据表设计
|
||||
```sql
|
||||
CREATE TABLE `rs_training_approval` (
|
||||
`approval_id` bigint(20) NOT NULL COMMENT '审批ID',
|
||||
`application_id` bigint(20) NOT NULL COMMENT '申请ID',
|
||||
`approver_id` bigint(20) NOT NULL COMMENT '审批人ID',
|
||||
`approver_name` varchar(50) NOT NULL COMMENT '审批人姓名',
|
||||
`approval_level` int(11) NOT NULL COMMENT '审批级别(1部门主管 2分管领导 3校领导)',
|
||||
`status` char(1) DEFAULT '0' COMMENT '状态(0待审核 1已通过 2已拒绝)',
|
||||
`opinion` varchar(500) DEFAULT NULL COMMENT '审批意见',
|
||||
`approval_time` datetime DEFAULT NULL COMMENT '审批时间',
|
||||
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
|
||||
`create_by` bigint(20) DEFAULT NULL COMMENT '创建者',
|
||||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||||
`update_by` bigint(20) DEFAULT NULL COMMENT '更新者',
|
||||
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
|
||||
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
|
||||
`deleted` char(1) DEFAULT '0' COMMENT '删除标志',
|
||||
PRIMARY KEY (`approval_id`)
|
||||
) ENGINE=InnoDB COMMENT='培训审批表';
|
||||
```
|
||||
|
||||
### 4. 培训记录管理
|
||||
|
||||
#### 功能描述
|
||||
- 培训记录登记
|
||||
- 培训证书上传和管理
|
||||
- 个人培训记录查询
|
||||
- 培训统计报表
|
||||
|
||||
#### 数据表设计
|
||||
```sql
|
||||
CREATE TABLE `rs_training_record` (
|
||||
`record_id` bigint(20) NOT NULL COMMENT '记录ID',
|
||||
`application_id` bigint(20) NOT NULL COMMENT '申请ID',
|
||||
`course_id` bigint(20) NOT NULL COMMENT '课程ID',
|
||||
`user_id` bigint(20) NOT NULL COMMENT '用户ID',
|
||||
`user_name` varchar(50) NOT NULL COMMENT '用户姓名',
|
||||
`completion_status` char(1) DEFAULT '0' COMMENT '完成状态(0进行中 1已完成 2未完成)',
|
||||
`completion_time` datetime DEFAULT NULL COMMENT '完成时间',
|
||||
`score` decimal(5,2) DEFAULT NULL COMMENT '成绩',
|
||||
`certificate_path` varchar(255) DEFAULT NULL COMMENT '证书路径',
|
||||
`certificate_number` varchar(50) DEFAULT NULL COMMENT '证书编号',
|
||||
`feedback` text COMMENT '培训反馈',
|
||||
`tenant_id` varchar(20) DEFAULT '000000' COMMENT '租户编号',
|
||||
`create_by` bigint(20) DEFAULT NULL COMMENT '创建者',
|
||||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||||
`update_by` bigint(20) DEFAULT NULL COMMENT '更新者',
|
||||
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
|
||||
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
|
||||
`deleted` char(1) DEFAULT '0' COMMENT '删除标志',
|
||||
PRIMARY KEY (`record_id`)
|
||||
) ENGINE=InnoDB COMMENT='培训记录表';
|
||||
```
|
||||
|
||||
## 三、API接口设计
|
||||
|
||||
### 1. 培训课程管理API
|
||||
|
||||
```
|
||||
1. 查询培训课程列表
|
||||
GET /training/course/list
|
||||
|
||||
2. 获取培训课程详情
|
||||
GET /training/course/{courseId}
|
||||
|
||||
3. 新增培训课程
|
||||
POST /training/course
|
||||
|
||||
4. 修改培训课程
|
||||
PUT /training/course
|
||||
|
||||
5. 删除培训课程
|
||||
DELETE /training/course/{courseIds}
|
||||
|
||||
6. 切换培训课程状态
|
||||
PUT /training/course/toggle/{courseId}
|
||||
|
||||
7. 导出培训课程
|
||||
GET /training/course/export
|
||||
```
|
||||
|
||||
### 2. 培训申请管理API
|
||||
|
||||
```
|
||||
1. 查询培训申请列表
|
||||
GET /training/application/list
|
||||
|
||||
2. 获取培训申请详情
|
||||
GET /training/application/{applicationId}
|
||||
|
||||
3. 提交培训申请
|
||||
POST /training/application
|
||||
|
||||
4. 修改培训申请
|
||||
PUT /training/application
|
||||
|
||||
5. 取消培训申请
|
||||
PUT /training/application/cancel/{applicationId}
|
||||
|
||||
6. 导出培训申请
|
||||
GET /training/application/export
|
||||
|
||||
7. 获取我的培训申请列表
|
||||
GET /training/application/my
|
||||
```
|
||||
|
||||
### 3. 培训审批API
|
||||
|
||||
```
|
||||
1. 查询待我审批的申请列表
|
||||
GET /training/approval/pending
|
||||
|
||||
2. 审批培训申请
|
||||
PUT /training/approval/process/{applicationId}/{status}
|
||||
|
||||
3. 获取申请审批历史
|
||||
GET /training/approval/history/{applicationId}
|
||||
|
||||
4. 批量审批
|
||||
POST /training/approval/batch
|
||||
```
|
||||
|
||||
### 4. 培训记录API
|
||||
|
||||
```
|
||||
1. 查询培训记录列表
|
||||
GET /training/record/list
|
||||
|
||||
2. 获取培训记录详情
|
||||
GET /training/record/{recordId}
|
||||
|
||||
3. 登记培训记录
|
||||
POST /training/record
|
||||
|
||||
4. 修改培训记录
|
||||
PUT /training/record
|
||||
|
||||
5. 上传培训证书
|
||||
POST /training/record/certificate/{recordId}
|
||||
|
||||
6. 查询我的培训记录
|
||||
GET /training/record/my
|
||||
|
||||
7. 导出培训记录
|
||||
GET /training/record/export
|
||||
|
||||
8. 获取培训统计数据
|
||||
GET /training/record/statistics
|
||||
```
|
||||
|
||||
## 四、前端页面设计
|
||||
|
||||
### 1. 培训课程管理页面
|
||||
|
||||
- **页面路径**:/rs/training/course
|
||||
- **功能组件**:
|
||||
- 搜索表单(课程名称、类别、状态)
|
||||
- 操作按钮(新增、修改、删除、导出)
|
||||
- 数据表格(课程信息展示)
|
||||
- 表单对话框(新增/修改课程信息)
|
||||
|
||||
### 2. 培训申请管理页面
|
||||
|
||||
- **页面路径**:/rs/training/application
|
||||
- **功能组件**:
|
||||
- 搜索表单(课程名称、申请人、状态)
|
||||
- 操作按钮(导出)
|
||||
- 数据表格(申请信息展示)
|
||||
- 申请详情对话框
|
||||
- 审批操作面板
|
||||
|
||||
### 3. 我的培训页面
|
||||
|
||||
- **页面路径**:/rs/training/my
|
||||
- **功能组件**:
|
||||
- 培训申请选项卡
|
||||
- 申请表单
|
||||
- 我的申请列表
|
||||
- 培训记录选项卡
|
||||
- 我的培训记录
|
||||
- 证书查看与下载
|
||||
|
||||
### 4. 培训统计报表页面
|
||||
|
||||
- **页面路径**:/rs/training/statistics
|
||||
- **功能组件**:
|
||||
- 统计图表(按部门、课程类型等维度)
|
||||
- 数据筛选器
|
||||
- 导出功能
|
||||
|
||||
## 五、权限设计
|
||||
|
||||
### 1. 权限项定义
|
||||
```
|
||||
# 培训课程管理权限
|
||||
- rs:training:course:list 查看培训课程列表
|
||||
- rs:training:course:query 查询培训课程详情
|
||||
- rs:training:course:add 新增培训课程
|
||||
- rs:training:course:edit 修改培训课程
|
||||
- rs:training:course:remove 删除培训课程
|
||||
- rs:training:course:export 导出培训课程
|
||||
|
||||
# 培训申请管理权限
|
||||
- rs:training:application:list 查看培训申请列表
|
||||
- rs:training:application:query 查询培训申请详情
|
||||
- rs:training:application:add 提交培训申请
|
||||
- rs:training:application:edit 修改培训申请
|
||||
- rs:training:application:export 导出培训申请
|
||||
|
||||
# 培训审批权限
|
||||
- rs:training:approval:list 查看审批列表
|
||||
- rs:training:approval:process 处理培训审批
|
||||
|
||||
# 培训记录管理权限
|
||||
- rs:training:record:list 查看培训记录列表
|
||||
- rs:training:record:query 查询培训记录详情
|
||||
- rs:training:record:add 新增培训记录
|
||||
- rs:training:record:edit 修改培训记录
|
||||
- rs:training:record:export 导出培训记录
|
||||
```
|
||||
|
||||
### 2. 角色权限分配
|
||||
|
||||
```
|
||||
# 教职工角色 (TEACHER)
|
||||
- rs:training:course:list
|
||||
- rs:training:course:query
|
||||
- rs:training:application:add
|
||||
- rs:training:application:query
|
||||
- rs:training:record:query (个人)
|
||||
|
||||
# 培训管理员角色 (TRAINING_ADMIN)
|
||||
- rs:training:course:*
|
||||
- rs:training:application:list
|
||||
- rs:training:application:query
|
||||
- rs:training:application:export
|
||||
- rs:training:record:*
|
||||
|
||||
# 审批领导角色 (APPROVER)
|
||||
- rs:training:course:list
|
||||
- rs:training:course:query
|
||||
- rs:training:application:list
|
||||
- rs:training:application:query
|
||||
- rs:training:approval:*
|
||||
```
|
||||
|
||||
## 六、开发计划
|
||||
|
||||
### 第一阶段:数据库设计与基础架构 (5天)
|
||||
- 创建数据库表
|
||||
- 生成基础实体类
|
||||
- 搭建模块结构
|
||||
|
||||
### 第二阶段:培训课程管理功能 (5天)
|
||||
- 后端API开发
|
||||
- 前端页面开发
|
||||
- 单元测试
|
||||
|
||||
### 第三阶段:培训申请功能 (7天)
|
||||
- 后端API开发
|
||||
- 前端页面开发
|
||||
- 审批流程设计
|
||||
- 单元测试
|
||||
|
||||
### 第四阶段:培训记录管理功能 (5天)
|
||||
- 后端API开发
|
||||
- 前端页面开发
|
||||
- 证书上传功能
|
||||
- 单元测试
|
||||
|
||||
### 第五阶段:统计报表与优化 (3天)
|
||||
- 培训统计报表
|
||||
- 权限控制完善
|
||||
- 性能优化
|
||||
- 集成测试
|
||||
|
||||
## 七、技术要点与注意事项
|
||||
|
||||
1. **工作流集成**
|
||||
- 使用Warm-Flow工作流引擎实现多级审批流程
|
||||
- 遵循工作流开发规范,确保VO类包含基础字段
|
||||
|
||||
2. **前后端字段一致性**
|
||||
- 严格遵循命名规范,确保前后端字段名称一致
|
||||
- 注意类型一致性,特别是日期、枚举等类型
|
||||
|
||||
3. **文件上传处理**
|
||||
- 培训证书上传需支持多种格式(PDF, JPG等)
|
||||
- 实现文件预览功能
|
||||
|
||||
4. **权限控制**
|
||||
- 实现数据权限,教职工只能查看自己的培训记录
|
||||
- 审批权限按角色和部门进行控制
|
||||
|
||||
5. **文档同步更新**
|
||||
- 确保API变更同步更新到API文档
|
||||
- 所有新增功能需要同步更新变更记录
|
||||
|
||||
## 八、验收标准
|
||||
|
||||
1. **功能完整性**
|
||||
- 培训管理各模块功能齐全
|
||||
- 审批流程运行正常
|
||||
- 各角色权限控制正确
|
||||
|
||||
2. **界面体验**
|
||||
- 操作流程简洁明了
|
||||
- 页面响应迅速
|
||||
- 数据展示清晰
|
||||
|
||||
3. **性能要求**
|
||||
- 列表页面加载时间<2秒
|
||||
- 表单提交响应时间<1秒
|
||||
- 导出功能支持大数据量
|
||||
|
||||
4. **兼容性**
|
||||
- 支持主流浏览器
|
||||
- 移动端适配良好
|
||||
|
||||
5. **安全性**
|
||||
- 数据传输加密
|
||||
- 防SQL注入
|
||||
- 敏感信息脱敏
|
||||
@@ -0,0 +1,93 @@
|
||||
第一步:生成招聘页面原型图
|
||||
cursor
|
||||
根据以下需求生成招聘模块的Figma原型图:
|
||||
1. 页面组成:
|
||||
- 招聘公告列表页(带搜索/筛选)
|
||||
- 职位详情页(申请按钮)
|
||||
- 简历填写表单(分步骤)
|
||||
- HR管理后台(职位发布表单)
|
||||
|
||||
2. 核心功能:
|
||||
- 应聘者能浏览公开职位
|
||||
- HR能发布新职位(含薪资范围/要求等字段)
|
||||
- 响应式布局(支持移动端)
|
||||
|
||||
3. 数据字段参考:
|
||||
- 职位:title, department, salary_range, location, description, requirements
|
||||
- 简历:personal_info, education[], work_experience[], skills
|
||||
|
||||
4. 角色权限:
|
||||
- 应聘者:仅查看/申请
|
||||
- HR:增删改职位
|
||||
第二步:生成招聘模块表结构
|
||||
cursor
|
||||
生成符合MySQL规范的SQL建表语句,包含以下核心表:
|
||||
|
||||
1. `jobs` 职位表:
|
||||
- id (PK)
|
||||
- title VARCHAR(100)
|
||||
- department ENUM('教学','行政','科研')
|
||||
- salary_range VARCHAR(50)
|
||||
- location VARCHAR(100)
|
||||
- description TEXT
|
||||
- requirements TEXT
|
||||
- is_active BOOLEAN (是否在招)
|
||||
- created_at TIMESTAMP
|
||||
- created_by (FK to users)
|
||||
|
||||
2. `applicants` 应聘者表:
|
||||
- user_id (PK, FK to users)
|
||||
- resume_file_path VARCHAR(255)
|
||||
- current_status ENUM('active','hired','rejected')
|
||||
|
||||
3. `applications` 申请记录表:
|
||||
- id (PK)
|
||||
- job_id (FK)
|
||||
- applicant_id (FK)
|
||||
- apply_time TIMESTAMP
|
||||
- status ENUM('pending','interviewed','offered')
|
||||
|
||||
4. 补充关联表:
|
||||
- resumes (存储结构化简历数据)
|
||||
- application_attachments (附件)
|
||||
第三步:初始化数据库
|
||||
cursor
|
||||
基于上述表结构执行以下操作:
|
||||
1. 创建名为`recruitment_system`的MySQL数据库
|
||||
2. 生成各表的DDL语句(包含外键约束)
|
||||
3. 为每个表添加基础索引:
|
||||
- jobs表的department/is_active字段
|
||||
- applications表的job_id/applicant_id字段
|
||||
4. 插入测试数据:
|
||||
- 5个示例职位(3个教学岗、2个行政岗)
|
||||
- 10条模拟应聘者记录
|
||||
- 每个职位关联2-3条申请记录
|
||||
第四步:前后端开发指令
|
||||
cursor
|
||||
使用MERN栈开发招聘模块,分两部分实现:
|
||||
|
||||
【前端部分】
|
||||
1. 创建React页面:
|
||||
- /jobs 职位列表页(带Ant Design表格)
|
||||
- /jobs/:id 职位详情页
|
||||
- /apply 简历表单(分教育/工作经历多步骤)
|
||||
|
||||
2. 主要功能组件:
|
||||
- 职位搜索过滤器(部门/薪资范围)
|
||||
- 简历PDF上传组件
|
||||
- 申请状态跟踪面板
|
||||
|
||||
【后端部分】
|
||||
1. 创建Express路由:
|
||||
- GET /api/jobs (支持分页查询)
|
||||
- POST /api/jobs (HR权限校验)
|
||||
- POST /api/applications
|
||||
|
||||
2. 核心业务逻辑:
|
||||
- 职位发布时自动生成公告
|
||||
- 申请时发送邮件通知HR
|
||||
- 简历文件存储到AWS S3
|
||||
|
||||
3. 权限控制中间件:
|
||||
- 应聘者只能访问GET /jobs
|
||||
- HR角色需要JWT校验
|
||||
@@ -199,7 +199,7 @@ B老师接收审核通过信息 → 确认缴费状态 → 填写录取通知书
|
||||
## 🎯 技术需求分析
|
||||
|
||||
### 1. 前端技术栈
|
||||
- **移动端**:Vue 3.4.21 + uni-app + uview-plus(报名表单)
|
||||
- **移动端**:Vue 2.6.14 + uni-app 2.x + uview-ui 2.0.38(报名表单)
|
||||
- **Web端**:Vue 3 + TypeScript + Element Plus(管理界面)
|
||||
|
||||
### 2. 后端技术栈
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
### 1.3 技术栈
|
||||
- **后端**: Spring Boot 3.4.6 + MyBatis-Plus + MySQL
|
||||
- **前端**: Vue 3 + TypeScript + Element Plus
|
||||
- **移动端**: Vue 3.4.21 + uni-app + uview-plus 3.4.45
|
||||
- **移动端**: Vue 2.6.14 + uni-app 2.x + uview-ui 2.0.38
|
||||
- **工具**: Git + Maven + npm + Docker
|
||||
|
||||
## 2. 开发阶段规划
|
||||
|
||||
Reference in new issue
Block a user