yubo
2026-04-11 11ab4edc4f3c59643ffbd73ef2bf05bbb3e793aa
src/views/user/inemployees.vue
@@ -259,7 +259,7 @@
            show-overflow-tooltip
            prop="empNumb"
            label="编号"
            width="80"
            width="100"
            sortable="custom"
            :sort-orders="['ascending', 'descending']"
          />
@@ -364,7 +364,7 @@
          <el-form
            ref="empBaseInfoForm"
            :model="empBaseInfoForm"
            :rules="rules"
            :rules="isAdd ? addRules : rules"
            label-position="right"
            label-width="120px"
          >
@@ -1084,12 +1084,14 @@
import { calculateSeniority, toCardGetUserInfo, dateToString } from '@/utils/myUtil'
import ArchivesEdit from './archivesEdit'
import { pages } from '@/settings'
import dictMixin from '../../utils/dictMixin'
export default {
  components: {
    ArchivesEdit,
    Pagination, Treeselect
  },
  mixins: [dictMixin],
  data() {
    return {
      dialog: {
@@ -1205,11 +1207,7 @@
      depts: [],
      fileList: [],
      rules: {
        archivesNumb: [{ required: true, message: '请输入档案号', trigger: 'blur' }, {
          max: 20,
          message: this.$t('rules.noMoreThan20'),
          trigger: 'blur'
        }],
        archivesNumb: [{ max: 20, message: this.$t('rules.noMoreThan20'), trigger: 'blur' }],
        empName: [{ required: true, message: '请输入姓名', trigger: 'blur' },
          { min: 2, max: 50, message: this.$t('rules.noMoreThan50'), trigger: 'blur' }],
        empNumb: [{ required: true, message: '请输入员工编号', trigger: 'blur' },
@@ -1245,6 +1243,14 @@
        family: [{ max: 128, message: '长度不超过128个字符', trigger: 'blur' }],
        certificateValidity: [{ required: true, message: '请选择身份证有效期', trigger: 'change' }],
        urgencyPhone: [{ max: 30, message: '长度不超过30个字符', trigger: 'blur' }]
      },
      // 新增模式的简化验证规则(仅验证核心字段)
      addRules: {
        empName: [{ required: true, message: '请输入姓名', trigger: 'blur' },
          { min: 2, max: 50, message: this.$t('rules.noMoreThan50'), trigger: 'blur' }],
        empNumb: [{ required: true, message: '请输入员工编号', trigger: 'blur' },
          { min: 2, max: 20, message: this.$t('rules.noMoreThan20'), trigger: 'blur' }],
        certificateNumb: [{ required: true, message: '请输入身份证号', trigger: 'blur' }]
      },
      gbdaRules: {
        dimissionType: [{ required: true, message: '请选择离职类型', trigger: 'change' }],
@@ -1337,113 +1343,93 @@
      checkedCities: [],
      tableData: [],
      selectDimissionType: 1,
      statusOptions: [],
      empTypeOptions: [],
      inTypeOptions: [],
      nationOptions: [],
      marriageOptions: [],
      educationOptions: [],
      nativePlaceOptions: [],
      archivesStatusOptions: [],
      insuranceTypeOptions: [],
      empCardStatusOptions: [],
      handbookStatusOptions: [],
      ecgOptions: [],
      certificateListOptions: [],
      physicalExamTypeOptions: [],
      contractStatusOptions: [],
      leaveTypeOptions: [],
      insuranceGaersOptions: [],
      applayStatusOptions: [],
      reportStatusOptions: [],
      hospitalizatioFlagOptions: [],
      settleStatusOptions: [],
      arbitrationTypeOptions: [],
      changeTypeOptions: [],
      dimissionTypeOptions: [],
      ageStrOptions: [],
      sexOptions: [],
      openArchivesForm: {}
    }
  },
  computed: {
    // 字典选项计算属性
    statusOptions() {
      return this.getDictOptions('PLITICAL')
    },
    empTypeOptions() {
      return this.getDictOptions('EMPTYPE')
    },
    nationOptions() {
      return this.getDictOptions('NATION')
    },
    marriageOptions() {
      return this.getDictOptions('MARRIAGE')
    },
    educationOptions() {
      return this.getDictOptions('EDUCATION')
    },
    nativePlaceOptions() {
      return this.getDictOptions('NATIVEPLACE')
    },
    archivesStatusOptions() {
      return this.getDictOptions('archivesStatus')
    },
    insuranceTypeOptions() {
      return this.getDictOptions('INSURANCETYPE')
    },
    empCardStatusOptions() {
      return this.getDictOptions('empCardStatus')
    },
    handbookStatusOptions() {
      return this.getDictOptions('handbookStatus')
    },
    certificateListOptions() {
      return this.getDictOptions('certificateList')
    },
    physicalExamTypeOptions() {
      return this.getDictOptions('PHYSICALEXAMTYPE')
    },
    ecgOptions() {
      return this.getDictOptions('ECG')
    },
    contractStatusOptions() {
      return this.getDictOptions('CONTRACTSTATUS')
    },
    leaveTypeOptions() {
      return this.getDictOptions('LEAVETYPE')
    },
    insuranceGaersOptions() {
      return this.getDictOptions('INSURANCETYPE')
    },
    applayStatusOptions() {
      return this.getDictOptions('applayStatus')
    },
    reportStatusOptions() {
      return this.getDictOptions('reportStatus')
    },
    hospitalizatioFlagOptions() {
      return this.getDictOptions('hospitalizatioFlag')
    },
    settleStatusOptions() {
      return this.getDictOptions('settleStatus')
    },
    arbitrationTypeOptions() {
      return this.getDictOptions('ZCTYPE')
    },
    changeTypeOptions() {
      return this.getDictOptions('changeType')
    },
    dimissionTypeOptions() {
      return this.getDictOptions('LZTYPE')
    },
    ageStrOptions() {
      return this.getDictOptions('ageStr')
    },
    sexOptions() {
      return this.getDictOptions('sex')
    }
  },
  mounted() {
    this.fetch()
    this.initDept()
    this.getDicts('ageStr').then(response => {
      this.ageStrOptions = response.data
    })
    this.getDicts('PLITICAL').then(response => {
      this.statusOptions = response.data
    })
    this.getDicts('sex').then(response => {
      this.sexOptions = response.data
    })
    this.getDicts('empType').then(response => {
      this.empTypeOptions = response.data
    })
    this.getDicts('NATION').then(response => {
      this.nationOptions = response.data
    })
    this.getDicts('MARRIAGE').then(response => {
      this.marriageOptions = response.data
    })
    this.getDicts('EDUCATION').then(response => {
      this.educationOptions = response.data
    })
    this.getDicts('NATIVEPLACE').then(response => {
      this.nativePlaceOptions = response.data
    })
    this.getDicts('archivesStatus').then(response => {
      this.archivesStatusOptions = response.data
    })
    this.getDicts('INSURANCETYPE').then(response => {
      this.insuranceTypeOptions = response.data
    })
    this.getDicts('empCardStatus').then(response => {
      this.empCardStatusOptions = response.data
    })
    this.getDicts('handbookStatus').then(response => {
      this.handbookStatusOptions = response.data
    })
    this.getDicts('certificateList').then(response => {
      this.certificateListOptions = response.data
    })
    this.getDicts('PHYSICALEXAMTYPE').then(response => {
      this.physicalExamTypeOptions = response.data
    })
    this.getDicts('ECG').then(response => {
      this.ecgOptions = response.data
    })
    this.getDicts('CONTRACTSTATUS').then(response => {
      this.contractStatusOptions = response.data
    })
    this.getDicts('LEAVETYPE').then(response => {
      this.leaveTypeOptions = response.data
    })
    this.getDicts('INSURANCETYPE').then(response => {
      this.insuranceGaersOptions = response.data
    })
    this.getDicts('applayStatus').then(response => {
      this.applayStatusOptions = response.data
    })
    this.getDicts('reportStatus').then(response => {
      this.reportStatusOptions = response.data
    })
    this.getDicts('hospitalizatioFlag').then(response => {
      this.hospitalizatioFlagOptions = response.data
    })
    this.getDicts('settleStatus').then(response => {
      this.settleStatusOptions = response.data
    })
    this.getDicts('ZCTYPE').then(response => {
      this.arbitrationTypeOptions = response.data
    })
    this.getDicts('changeType').then(response => {
      this.changeTypeOptions = response.data
    })
    this.getDicts('LZTYPE').then(response => {
      this.dimissionTypeOptions = response.data
    })
    // 字典数据已在登录时预加载,直接从 Vuex 获取
    this.initDictTypes(['ageStr', 'PLITICAL', 'sex', 'EMPTYPE', 'NATION', 'MARRIAGE', 'EDUCATION', 'NATIVEPLACE', 'archivesStatus', 'INSURANCETYPE', 'empCardStatus', 'handbookStatus', 'certificateList', 'PHYSICALEXAMTYPE', 'ECG', 'CONTRACTSTATUS', 'LEAVETYPE', 'applayStatus', 'reportStatus', 'hospitalizatioFlag', 'settleStatus', 'ZCTYPE', 'changeType', 'LZTYPE'])
    this.initJob()
  },
  methods: {
@@ -1932,29 +1918,24 @@
      this.showXzyg(1)
    },
    putEmpBase(formName) {
      // 根据新增/编辑模式使用不同的验证规则
      const validateRules = this.isAdd ? this.addRules : this.rules
      this.$refs[formName].validate((valid) => {
        if (valid) {
          this.submitEmpInfo()
          this.fetch({
            ...this.queryParams,
            ...this.sort
          })
          this.cleanEmpBase()
          this.showXzyg()
          // 刷新、清空、关闭操作已移至 submitEmpInfo 的成功回调中
        }
      })
      }, validateRules)
    },
    putEmpBaseContinue(formName) {
      // 根据新增/编辑模式使用不同的验证规则
      const validateRules = this.isAdd ? this.addRules : this.rules
      this.$refs[formName].validate((valid) => {
        if (valid) {
          this.submitEmpInfo()
          this.cleanEmpBase()
          this.fetch({
            ...this.queryParams,
            ...this.sort
          })
          // 传入 true 表示保存并继续新增,不关闭对话框
          this.submitEmpInfo(true)
        }
      })
      }, validateRules)
    },
    delEmp() {
      var selection = this.$refs.multipleTable.store.states.selection
@@ -2365,9 +2346,25 @@
    getDateString() {
      return dateToString(new Date())
    },
    submitEmpInfo() {
    submitEmpInfo(continueAdd = false) {
      if (this.isAdd) {
        this.$post('hr/empBaseInfo/addInEmp', { ...this.empBaseInfoForm }).then((r) => {
          this.$message({
            message: this.$t('tips.addSuccess'),
            type: 'success'
          })
          // 刷新列表
          this.fetch({
            ...this.queryParams,
            ...this.sort
          })
          // 清空表单
          this.cleanEmpBase()
          // 如果不是继续新增,则关闭对话框
          if (!continueAdd) {
            this.showXzyg()
          }
          // 处理员工已存在的情况
          if (r.data != null) {
            if (r.data.data.empStatus === '0') {
              this.$confirm('该员工已存在,是否修改?', '提示', {
@@ -2416,12 +2413,6 @@
                  remark: ''
                }
                this.dialogShowDkda = true
                // this.$post('hr/empOpenArchives', { ...this.openArchivesForm }).then(() => {
                //   this.$message({
                //     message: this.$t('员工档案打开成功'),
                //     type: 'success'
                //   })
                // })
              })
            }
          }
@@ -2434,6 +2425,11 @@
          })
          this.$emit('success')
          this.cleanEmpBase()
          this.fetch({
            ...this.queryParams,
            ...this.sort
          })
          this.showXzyg()
        })
      }
    },