285 lines
9.1 KiB
Markdown
285 lines
9.1 KiB
Markdown
# 出国行程变更申请表单优化说明
|
||
|
||
## 📋 修改时间
|
||
2025-10-13
|
||
|
||
## 🎯 优化目标
|
||
|
||
根据附件《关于变更因私出国(境)行程有关情况的报告》参考模板,重新设计变更申请表单,使其符合实际业务流程。
|
||
|
||
## 📝 优化内容
|
||
|
||
### 一、删除"0"选项问题
|
||
|
||
**问题**:选择原出国申请下拉框中显示"0"选项
|
||
|
||
**原因**:`applicationId`初始值设置为`0`
|
||
|
||
**解决方案**:
|
||
```typescript
|
||
// 修改前
|
||
state.form = {
|
||
applicationId: 0,
|
||
...
|
||
}
|
||
|
||
// 修改后
|
||
state.form = {
|
||
applicationId: undefined as any,
|
||
...
|
||
}
|
||
```
|
||
|
||
### 二、表单布局重新设计
|
||
|
||
参照附件图片,将表单重新组织为五个部分:
|
||
|
||
#### 1. 选择原出国申请
|
||
- 下拉框选择已审批通过的出国申请
|
||
- 支持筛选功能(`filterable`)
|
||
- 选择后自动填充后续表单数据
|
||
|
||
#### 2. 一、本人基本情况(自动填充,只读)
|
||
```
|
||
- 姓名:{{ applicantName }}
|
||
- 单位:{{ department }}
|
||
```
|
||
|
||
#### 3. 二、申请行程情况(自动填充,只读)
|
||
```
|
||
- 申请出行时间:{{ originalStartDate }}
|
||
- 地点:{{ originalDestination }}
|
||
- 在外停留时间:{{ originalStartDate }} 至 {{ originalEndDate }} ({{ originalDuration }}天)
|
||
```
|
||
|
||
#### 4. 三、实际行程情况(用户填写,可编辑)
|
||
```
|
||
- 实际出行时间:日期选择器(必填)
|
||
- 地点:文本输入框(必填)
|
||
- 在外停留时间:开始日期 至 结束日期(自动计算天数)
|
||
```
|
||
|
||
#### 5. 四、发生变更情况的原因(用户填写,必填)
|
||
```
|
||
- 多行文本框,最多500字
|
||
- 提示:相关证明材料可附后
|
||
```
|
||
|
||
#### 6. 五、有关认识和态度(用户填写,选填)
|
||
```
|
||
- 多行文本框,最多200字
|
||
- 默认提示:我承诺,以上情况说明完全属实。如有不实行为,愿意按受组织处理。
|
||
```
|
||
|
||
### 三、表单验证规则简化
|
||
|
||
#### 修改前(复杂的条件验证)
|
||
```typescript
|
||
rules: {
|
||
applicationId: [{ required: true, ... }],
|
||
changeReason: [{ required: true, ... }],
|
||
newDestination: [{
|
||
validator: (rule, value, callback) => {
|
||
if (state.changeTypes.includes('目的地变更') && !value) {
|
||
callback(new Error('请输入新目的地国家'));
|
||
}
|
||
...
|
||
}
|
||
}],
|
||
// ... 其他复杂验证
|
||
}
|
||
```
|
||
|
||
#### 修改后(简化为必填验证)
|
||
```typescript
|
||
rules: {
|
||
applicationId: [{ required: true, message: '请选择原出国申请', trigger: 'change' }],
|
||
newDestination: [{ required: true, message: '请输入实际目的地', trigger: 'blur' }],
|
||
newStartDate: [{ required: true, message: '请选择实际出行日期', trigger: 'change' }],
|
||
changeReason: [{ required: true, message: '请输入变更原因', trigger: 'blur' }]
|
||
}
|
||
```
|
||
|
||
### 四、变更类型自动识别
|
||
|
||
#### 修改前(用户手动选择变更类型)
|
||
```typescript
|
||
// 用户通过复选框选择变更类型
|
||
<el-checkbox-group v-model="changeTypes">
|
||
<el-checkbox label="目的地变更">目的地变更</el-checkbox>
|
||
<el-checkbox label="时间变更">时间变更</el-checkbox>
|
||
<el-checkbox label="行程变更">行程变更</el-checkbox>
|
||
</el-checkbox-group>
|
||
|
||
// 提交时检查
|
||
if (state.changeTypes.length === 0) {
|
||
ElMessage.warning('请至少选择一种变更类型');
|
||
return;
|
||
}
|
||
state.form.changeType = state.changeTypes.join(',');
|
||
```
|
||
|
||
#### 修改后(系统自动识别)
|
||
```typescript
|
||
// 提交时自动识别变更类型
|
||
const changeTypeList: string[] = [];
|
||
if (state.form.newDestination !== state.form.originalDestination) {
|
||
changeTypeList.push('目的地变更');
|
||
}
|
||
if (state.form.newStartDate !== state.form.originalStartDate ||
|
||
state.form.newEndDate !== state.form.originalEndDate) {
|
||
changeTypeList.push('时间变更');
|
||
}
|
||
if (state.form.newItinerary && state.form.newItinerary !== state.form.originalItinerary) {
|
||
changeTypeList.push('行程变更');
|
||
}
|
||
state.form.changeType = changeTypeList.length > 0 ? changeTypeList.join(',') : '其他变更';
|
||
```
|
||
|
||
## 🎨 UI/UX优化
|
||
|
||
### 1. 布局优化
|
||
- ✅ 使用分隔线(`<el-divider>`)明确区分五个部分
|
||
- ✅ 分隔线标题加粗显示(`<b>`标签)
|
||
- ✅ 对齐附件图片的报告格式
|
||
|
||
### 2. 交互优化
|
||
- ✅ 自动填充的字段设为只读(`disabled`)
|
||
- ✅ 用户填写的字段突出显示(可编辑)
|
||
- ✅ 删除不必要的变更类型选择
|
||
- ✅ 简化操作流程
|
||
|
||
### 3. 数据流优化
|
||
```
|
||
选择出国申请
|
||
↓
|
||
自动填充"一、本人基本情况"和"二、申请行程情况"
|
||
↓
|
||
用户填写"三、实际行程情况"
|
||
↓
|
||
用户填写"四、发生变更情况的原因"
|
||
↓
|
||
用户填写"五、有关认识和态度"
|
||
↓
|
||
系统自动识别变更类型
|
||
↓
|
||
提交审批
|
||
```
|
||
|
||
## 📦 涉及文件
|
||
|
||
### 前端
|
||
- `web/src/views/rs/overseas/itinerary-change.vue` - 主页面(表单布局和逻辑)
|
||
|
||
### 后端
|
||
- 无需修改(后端接口保持不变)
|
||
|
||
## ✨ 优化亮点
|
||
|
||
1. **符合业务规范**:完全参照官方报告模板设计
|
||
2. **操作更简单**:删除复杂的变更类型选择,自动识别
|
||
3. **逻辑更清晰**:五个部分层次分明,一目了然
|
||
4. **验证更合理**:只验证必填项,减少用户困扰
|
||
5. **数据自动化**:
|
||
- 自动填充原申请信息
|
||
- 自动识别变更类型
|
||
- 自动计算停留天数
|
||
|
||
## 🧪 测试验证
|
||
|
||
### 测试场景1:新增变更申请
|
||
1. ✅ 点击"新增变更申请"
|
||
2. ✅ 验证下拉框无"0"选项
|
||
3. ✅ 选择一个已审批通过的申请
|
||
4. ✅ 验证"一、本人基本情况"自动填充且只读
|
||
5. ✅ 验证"二、申请行程情况"自动填充且只读
|
||
6. ✅ 填写"三、实际行程情况"
|
||
7. ✅ 填写"四、发生变更情况的原因"
|
||
8. ✅ 填写"五、有关认识和态度"
|
||
9. ✅ 提交验证必填项
|
||
10. ✅ 验证变更类型自动识别
|
||
|
||
### 测试场景2:数据验证
|
||
```
|
||
测试数据:
|
||
- 原申请:目的地=美国,出行时间=2025-10-15
|
||
- 实际情况:目的地=英国,出行时间=2025-10-20
|
||
|
||
预期结果:
|
||
- 自动识别为"目的地变更,时间变更"
|
||
```
|
||
|
||
### 测试场景3:表单重置
|
||
1. ✅ 打开表单
|
||
2. ✅ 选择申请并填写数据
|
||
3. ✅ 点击"取消"
|
||
4. ✅ 验证表单重置,applicationId为undefined
|
||
|
||
## ⚠️ 注意事项
|
||
|
||
1. **数据兼容性**:
|
||
- 新表单产生的数据与原有数据结构完全兼容
|
||
- 原有的变更记录可以正常查看
|
||
|
||
2. **必填字段**:
|
||
- 选择原出国申请(必填)
|
||
- 实际目的地(必填)
|
||
- 实际出行日期(必填)
|
||
- 变更原因(必填)
|
||
|
||
3. **可选字段**:
|
||
- 实际返回日期(可选,用于计算停留时间)
|
||
- 有关认识和态度(可选)
|
||
|
||
4. **变更类型识别逻辑**:
|
||
- 目的地变更:newDestination ≠ originalDestination
|
||
- 时间变更:newStartDate ≠ originalStartDate 或 newEndDate ≠ originalEndDate
|
||
- 行程变更:newItinerary 有内容且 ≠ originalItinerary
|
||
- 无法识别时标记为"其他变更"
|
||
|
||
## 🎉 完成状态
|
||
|
||
✅ 删除"0"选项问题已解决
|
||
✅ 表单布局完全按照附件图片重新设计
|
||
✅ 表单验证规则已简化
|
||
✅ 变更类型自动识别已实现
|
||
✅ 前端无编译错误
|
||
✅ 业务逻辑符合需求
|
||
|
||
## 📸 界面效果
|
||
|
||
### 表单结构
|
||
```
|
||
┌─────────────────────────────────────────┐
|
||
│ 选择原出国申请: [下拉框-可筛选] │
|
||
├─────────────────────────────────────────┤
|
||
│ 一、本人基本情况 │
|
||
│ 姓名: [只读] 单位: [只读] │
|
||
├─────────────────────────────────────────┤
|
||
│ 二、申请行程情况 │
|
||
│ 申请出行时间: [只读] │
|
||
│ 地点: [只读] │
|
||
│ 在外停留时间: [只读-显示天数] │
|
||
├─────────────────────────────────────────┤
|
||
│ 三、实际行程情况 │
|
||
│ 实际出行时间: [日期选择器-必填] │
|
||
│ 地点: [文本框-必填] │
|
||
│ 在外停留时间: [开始日期] 至 [结束日期]│
|
||
├─────────────────────────────────────────┤
|
||
│ 四、发生变更情况的原因 │
|
||
│ [多行文本框-必填, 500字] │
|
||
│ 提示:相关证明材料可附后 │
|
||
├─────────────────────────────────────────┤
|
||
│ 五、有关认识和态度 │
|
||
│ [多行文本框-选填, 200字] │
|
||
│ 提示:我承诺,以上情况说明完全属实... │
|
||
└─────────────────────────────────────────┘
|
||
[提交] [取消]
|
||
```
|
||
|
||
---
|
||
|
||
**优化完成时间**:2025-10-13
|
||
**符合规范**:《关于变更因私出国(境)行程有关情况的报告(参考版本)》
|
||
|