Files
hzdyjs/党籍保留表单优化说明.md
T
2025-10-14 16:41:19 +08:00

11 KiB
Raw Blame History

党籍保留申请表单优化说明

📋 优化概述

根据附件中的《关于因私赴 XXX 探亲保留党籍的申请》标准格式,对党籍保留申请表单进行了重新设计和优化。

🎯 优化目标

  1. 符合公文格式:表单布局完全按照正式申请书格式设计
  2. 信息流畅:采用行内表单元素,保持申请书的连贯性
  3. 清晰易读:使用合理的间距和排版,提升用户体验
  4. 数据完整:补充必要字段,确保申请信息完整

✨ 主要改进

1. 表单结构优化

原表单问题

  • ❌ 字段标签过长且混乱(如"拟于XXX年X月X日到XXX年XX月XX日")
  • ❌ 使用传统的标签-输入框布局,不符合公文格式
  • ❌ 固定的审批文字占用大量空间
  • ❌ 缺少必要字段(职务、亲属姓名等)

新表单设计

  • ✅ 标题区域:居中显示"关于因私赴 XXX 探亲保留党籍的申请"
  • ✅ 抬头区域:党支部名称输入
  • ✅ 正文区域:采用行内表单,文字和输入框自然衔接
  • ✅ 签名区域:右对齐显示申请人和日期

2. 字段调整

新增字段

position: '',           // 职务
relativeName: '',       // 亲属姓名
applicantSignature: '' // 申请人签名

移除字段

travelPeriod: [],      // 移除日期范围选择器,改为独立的开始/结束日期
selfFunded: '1',       // 移除费用自理字段
requestApproval: '',   // 移除固定的审批文字
finalApproval: ''      // 移除固定的审批文字

保留字段

name: '',              // 姓名
spouse: '',            // 配偶姓名(可选)
destination: '',       // 目的地国家或地区
purpose: '',           // 出国目的详细说明
travelStartDate: '',   // 开始日期
travelEndDate: '',     // 结束日期
stayDays: 1,          // 停留天数
partyBranch: '',      // 党支部名称
applicationDate: ''    // 申请日期

3. 表单布局优化

行内表单设计

<div class="content-paragraph">
  <span class="indent">本人</span>
  <el-form-item prop="name" class="inline-form-item">
    <el-input v-model="retentionForm.name" placeholder="请输入姓名" style="width: 120px" />
  </el-form-item>
  <span>(身份证号),现任</span>
  <el-form-item prop="position" class="inline-form-item">
    <el-input v-model="retentionForm.position" placeholder="请输入职务" style="width: 150px" />
  </el-form-item>
  <span>。计划于</span>
  <!-- 更多字段... -->
</div>

优势:

  • 文字和输入框自然衔接,符合公文书写习惯
  • 保持申请书的连贯性和可读性
  • 用户填写时更加直观

4. 样式优化

核心样式

/* 表单整体背景 */
.retention-form {
  padding: 20px;
  background-color: #fafafa;
  border-radius: 4px;
}

/* 标题居中加粗 */
.form-title {
  text-align: center;
  font-size: 18px;
  font-weight: bold;
  margin-bottom: 30px;
}

/* 正文区域白色背景 */
.form-content {
  background-color: #fff;
  padding: 20px;
  border-radius: 4px;
  line-height: 2.2;
}

/* 段落布局 */
.content-paragraph {
  margin-bottom: 20px;
  display: flex;
  align-items: flex-start;
  flex-wrap: wrap;
  line-height: 2.5;
}

/* 行内表单项 */
.inline-form-item {
  display: inline-block;
  margin: 0 4px;
  vertical-align: middle;
}

/* 签名区域右对齐 */
.signature-section {
  background-color: #fff;
  padding: 20px;
  border-radius: 4px;
  text-align: right;
}

5. 表单验证规则

const retentionRules = {
  name: [{ required: true, message: '请输入申请人姓名', trigger: 'blur' }],
  position: [{ required: true, message: '请输入职务', trigger: 'blur' }],
  destination: [{ required: true, message: '请输入目的地国家或地区', trigger: 'blur' }],
  purpose: [{ required: true, message: '请输入出国目的详细说明', trigger: 'blur' }],
  relativeName: [{ required: true, message: '请输入亲属姓名', trigger: 'blur' }],
  travelStartDate: [{ required: true, message: '请选择开始日期', trigger: 'change' }],
  travelEndDate: [{ required: true, message: '请选择结束日期', trigger: 'change' }],
  stayDays: [{ required: true, message: '请输入停留天数', trigger: 'blur' }],
  partyBranch: [{ required: true, message: '请输入党支部名称', trigger: 'blur' }],
  applicationDate: [{ required: true, message: '请选择申请日期', trigger: 'change' }]
};

📝 表单内容结构

完整申请书格式

关于因私赴 XXX 探亲保留党籍的申请

XXXX党支部:

    本人 XXX(身份证号),现任 XXX。计划于 XXXX年XX月XX日 至 XXXX年XX月XX日,
偕配偶 XXX,因私赴 XXX(国家或地区)

    探望在 XXX(单位名称或地区)的工作(留学、定居)的补女 XX,在外停留 XX 天
(含离、抵我国国境当日)。

    根据因私出国(境)党籍管理有关规定,特请此准同意其在出国(境)外期间保留党籍。

    妥否,请审批。


                                                申请人:___________

                                                XXXX年XX月XX日

🎨 视觉效果

对比效果

项目 优化前 优化后
布局方式 传统表单布局 公文格式布局
标签长度 过长且混乱 简洁清晰
信息流 断断续续 连贯流畅
可读性 较差 优秀
专业性 一般 符合公文规范

🔧 技术实现要点

1. 行内表单项处理

<el-form-item prop="name" class="inline-form-item">
  <el-input v-model="retentionForm.name" placeholder="请输入姓名" style="width: 120px" />
</el-form-item>

2. 错误提示优化

.inline-form-item :deep(.el-form-item__error) {
  position: relative;
  top: auto;
  left: auto;
  padding-top: 2px;
}

3. 响应式布局

.content-paragraph {
  display: flex;
  align-items: flex-start;
  flex-wrap: wrap;  /* 自动换行 */
  line-height: 2.5;
}

✅ 用户体验提升

  1. 直观性:表单布局与最终申请书格式一致,所见即所得
  2. 易用性:输入框宽度根据内容合理设置,提升填写效率
  3. 专业性:符合正式公文格式,提升系统专业形象
  4. 清晰性:段落分明,逻辑清晰,减少填写错误

📦 文件变更

修改文件

  • web/src/views/rs/party-membership-retention/index.vue

变更内容

  1. 重构表单HTML结构(第255-399行)
  2. 更新表单数据模型(第539-553行)
  3. 更新表单验证规则(第555-566行)
  4. 更新重置表单方法(第791-810行)
  5. 简化提交表单方法(第817-860行)
  6. 新增专用样式(第933-1029行)

🚀 后续建议

1. 后端字段同步

需要确保后端接口支持新增的字段:

  • position(职务)
  • relativeName(亲属姓名)
  • applicantSignature(申请人签名)

2. 数据库表结构

建议在 rs_party_membership_retention 表中添加对应字段:

ALTER TABLE rs_party_membership_retention 
ADD COLUMN position VARCHAR(100) COMMENT '职务',
ADD COLUMN relative_name VARCHAR(50) COMMENT '亲属姓名',
ADD COLUMN applicant_signature VARCHAR(50) COMMENT '申请人签名';

3. 打印功能

建议增加"打印预览"功能,生成标准格式的申请书PDF文档。

4. 自动填充

建议从用户信息中自动填充:

  • 姓名
  • 职务
  • 党支部

📄 参考文档

  • 原始需求:附件截图《关于因私赴 XXX 探亲保留党籍的申请》
  • 相关文件:web/src/views/rs/party-membership-retention/index.vue

✨ 总结

本次优化完全按照正式公文格式重新设计了党籍保留申请表单,解决了原表单布局混乱、信息不连贯的问题。新表单采用行内表单元素设计,保持了申请书的自然流畅性,大幅提升了用户体验和系统专业性。


🔄 第二轮优化(2025-10-05)

智能关联功能

1. 标题自动显示目的地

优化前:

<div class="form-title">关于因私赴 XXX 探亲保留党籍的申请</div>

优化后:

<div class="form-title">
  关于因私赴 {{ retentionForm.destination || '' }} 探亲保留党籍的申请
</div>

效果:

  • ✅ 用户填写"目的地国家或地区"后,标题自动更新
  • ✅ 未填写时显示空白,保持公文格式的规范性
  • ✅ 实时响应,提升用户体验

2. 停留天数自动计算

优化前:

<el-input-number 
  v-model="retentionForm.stayDays" 
  :min="1" 
  placeholder="天数" 
  style="width: 100px"
/>

优化后:

<span style="font-weight: bold; color: #409EFF; padding: 0 8px;">
  {{ calculatedStayDays }}
</span>

计算逻辑:

// 计算停留天数(自动计算)
const calculatedStayDays = computed(() => {
  if (!retentionForm.value.travelStartDate || !retentionForm.value.travelEndDate) {
    return 0;
  }
  
  const startDate = new Date(retentionForm.value.travelStartDate);
  const endDate = new Date(retentionForm.value.travelEndDate);
  
  // 计算天数差(包含起始日和结束日,所以要+1)
  const diffTime = endDate.getTime() - startDate.getTime();
  const diffDays = Math.ceil(diffTime / (1000 * 60 * 60 * 24)) + 1;
  
  // 如果日期选择有误(结束日期早于开始日期),返回0
  if (diffDays < 1) {
    return 0;
  }
  
  // 同步更新表单中的stayDays字段
  retentionForm.value.stayDays = diffDays;
  
  return diffDays;
});

效果:

  • ✅ 根据"开始日期"和"结束日期"自动计算天数
  • ✅ 包含起始日和结束日(符合"含离、抵我国国境当日"的要求)
  • ✅ 自动同步到表单数据,提交时无需手动计算
  • ✅ 日期选择错误时显示0,避免负数
  • ✅ 蓝色高亮显示,醒目易读

表单验证优化

移除字段:

stayDays: [{ required: true, message: '请输入停留天数', trigger: 'blur' }]  // 已移除

原因:停留天数改为自动计算,无需用户输入,因此移除验证规则。

技术实现

1. 导入 computed

import { ref, reactive, computed, onMounted, nextTick } from 'vue';

2. 响应式数据绑定

  • 标题使用 {{ retentionForm.destination || '' }}(未填写时显示空白)
  • 停留天数使用 {{ calculatedStayDays }}

3. 计算属性特点

  • 自动缓存,性能优化
  • 依赖项变化时自动重新计算
  • 实时同步到表单数据

用户体验提升

功能 优化前 优化后
标题显示 固定"XXX" 自动显示目的地(未填写时空白)
停留天数 手动输入 自动计算
数据一致性 可能不一致 完全一致
填写效率 需要手动计算 无需计算
错误率 可能计算错误 零错误

示例效果

填写过程:

  1. 用户填写"目的地"为"美国" → 标题立即变为"关于因私赴 美国 探亲保留党籍的申请"
  2. 用户选择"开始日期"为"2025-01-01"
  3. 用户选择"结束日期"为"2025-01-15"
  4. 停留天数自动显示为"15"(包含1月1日和1月15日)

优化完成时间:2025-10-05
优化人员:Cursor AI
版本:v2.1(新增智能关联功能)