Files
hzdyjs/出国行程变更申请表单优化说明.md
T
2025-10-14 16:41:19 +08:00

285 lines
9.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 出国行程变更申请表单优化说明
## 📋 修改时间
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
**符合规范**:《关于变更因私出国(境)行程有关情况的报告(参考版本)》