6448ec15bfe0b65fb822a662105bceddc23b58d8..25ab0c2c41862bc4926814e6905e07cf4b76d40a
2026-04-06 yubo
refactor(user): 规范字典选项计算属性格式
25ab0c 对比 | 目录
2026-04-06 yubo
feat(user): 添加员工档案详情弹窗视图及信息展示功能
e25015 对比 | 目录
4个文件已修改
299 ■■■■ 已修改文件
src/views/user/Informationinput.vue 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/user/archivesChange.vue 108 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/user/archivesEdit.vue 83 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/user/inemployees.vue 102 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/user/Informationinput.vue
@@ -2648,9 +2648,11 @@
import Pagination from '@/components/Pagination'
import { pages } from '@/settings'
import { getToken } from '@/utils/auth'
import dictMixin from '../../utils/dictMixin'
export default {
  components: { Treeselect, Pagination },
  mixins: [dictMixin],
  data() {
    return {
      downloadEmpExcel: pages.downloadEmpExcel,
@@ -3533,7 +3535,7 @@
  computed: {
    // 字典选项计算属性
    statusOptions() { return this.getDictOptions('PLITICAL') },
    empTypeOptions() { return this.getDictOptions('empType') },
    empTypeOptions() { return this.getDictOptions('EMPTYPE') },
    nationOptions() { return this.getDictOptions('NATION') },
    marriageOptions() { return this.getDictOptions('MARRIAGE') },
    educationOptions() { return this.getDictOptions('EDUCATION') },
@@ -3560,7 +3562,7 @@
  mounted() {
    this.permissions = JSON.parse(localStorage.getItem('PERMISSIONS'))
    // 字典数据已在登录时预加载,直接从 Vuex 获取
    this.initDictTypes(['PLITICAL', 'sex', 'empType', 'NATION', 'MARRIAGE', 'EDUCATION', 'NATIVEPLACE', 'archivesStatus', 'INSURANCETYPE', 'empCardStatus', 'handbookStatus', 'certificateList', 'PHYSICALEXAMTYPE', 'ECG', 'CONTRACTSTATUS', 'LEAVETYPE', 'applayStatus', 'reportStatus', 'hospitalizatioFlag', 'settleStatus', 'ZCTYPE', 'changeType', 'LZTYPE'])
    this.initDictTypes(['PLITICAL', 'sex', 'EMPTYPE', 'NATION', 'MARRIAGE', 'EDUCATION', 'NATIVEPLACE', 'archivesStatus', 'INSURANCETYPE', 'empCardStatus', 'handbookStatus', 'certificateList', 'PHYSICALEXAMTYPE', 'ECG', 'CONTRACTSTATUS', 'LEAVETYPE', 'applayStatus', 'reportStatus', 'hospitalizatioFlag', 'settleStatus', 'ZCTYPE', 'changeType', 'LZTYPE'])
    this.initDept()
    this.thisShowIndex = 1
    this.isShow(false, 0)
src/views/user/archivesChange.vue
@@ -3566,7 +3566,7 @@
  computed: {
    // 字典选项计算属性
    statusOptions() { return this.getDictOptions('PLITICAL') },
    empTypeOptions() { return this.getDictOptions('empType') },
    empTypeOptions() { return this.getDictOptions('EMPTYPE') },
    nationOptions() { return this.getDictOptions('NATION') },
    marriageOptions() { return this.getDictOptions('MARRIAGE') },
    educationOptions() { return this.getDictOptions('EDUCATION') },
@@ -3602,7 +3602,7 @@
  mounted() {
    this.initDept()
    // 字典数据已在登录时预加载,直接从 Vuex 获取
    this.initDictTypes(['PLITICAL', 'sex', 'empType', 'NATION', 'MARRIAGE', 'EDUCATION', 'NATIVEPLACE', 'archivesStatus', 'INSURANCETYPE', 'empCardStatus', 'handbookStatus', 'certificateList', 'PHYSICALEXAMTYPE', 'ECG', 'CONTRACTSTATUS', 'LEAVETYPE', 'applayStatus', 'reportStatus', 'hospitalizatioFlag', 'settleStatus', 'ZCTYPE', 'changeType', 'LZTYPE'])
    this.initDictTypes(['PLITICAL', 'sex', 'EMPTYPE', 'NATION', 'MARRIAGE', 'EDUCATION', 'NATIVEPLACE', 'archivesStatus', 'INSURANCETYPE', 'empCardStatus', 'handbookStatus', 'certificateList', 'PHYSICALEXAMTYPE', 'ECG', 'CONTRACTSTATUS', 'LEAVETYPE', 'applayStatus', 'reportStatus', 'hospitalizatioFlag', 'settleStatus', 'ZCTYPE', 'changeType', 'LZTYPE'])
  },
  methods: {
    typeFormat(row, column) {
@@ -4032,45 +4032,8 @@
      this.physicalExamForm = { ...val }
      this.workExperienceForm = { ...val }
      this.badRecordForm = { ...val }
      // 分批加载数据,避免并发请求过多导致 503 错误
      this.loadDataInBatches()
    },
    // 分批加载档案数据,控制并发请求数量
    async loadDataInBatches() {
      // 第1批:首屏可见数据(4个请求)
      await Promise.all([
        this.initlabel(),
        this.initphysicalExamData(),
        this.initList(),
        this.initjobChangeData()
      ])
      // 延迟 200ms 后加载第2批
      await new Promise(resolve => setTimeout(resolve, 200))
      await Promise.all([
        this.initdimissionLogData(),
        this.initcontractInfoData(),
        this.initleaveInfoData(),
        this.initresignData()
      ])
      // 延迟 200ms 后加载第3批
      await new Promise(resolve => setTimeout(resolve, 200))
      await Promise.all([
        this.initunemploymentData(),
        this.initinsuranceData(),
        this.initremarkInfoData(),
        this.initlaborTroubleData()
      ])
      // 延迟 200ms 后加载第4批
      await new Promise(resolve => setTimeout(resolve, 200))
      await Promise.all([
        this.initoccupationalData(),
        this.initbadRecordData(),
        this.initaccidentCasesData(),
        this.initdimissionAttendData()
      ])
      // 只加载附件数据(基本信息已在val中),其他模块懒加载
      this.initlabel()
    },
    initphysicalExamData(params = {}) {
      params.pageSize = this.pagination.size
@@ -5684,57 +5647,120 @@
    goAnchor: function(type) {
      let item = 1
      this.item = type
      // 根据点击的菜单懒加载对应数据
      switch (type) {
        case 'jbxx':
          item = 0
          // 基本信息 - 已加载
          break
        case 'gzjl':
          item = 1
          // 工作经历 - 懒加载
          if (!this.workExperienceData || this.workExperienceData.length === 0) {
            this.initList()
          }
          break
        case 'tjxx':
          item = 2
          // 体检信息 - 懒加载
          if (!this.physicalExamData || this.physicalExamData.length === 0) {
            this.initphysicalExamData()
          }
          break
        case 'htxx':
          item = 3
          // 合同信息 - 懒加载
          if (!this.contractInfoData || this.contractInfoData.length === 0) {
            this.initcontractInfoData()
          }
          break
        case 'tgjl':
          item = 4
          // 调岗记录 - 懒加载
          if (!this.jobChangeData || this.jobChangeData.length === 0) {
            this.initjobChangeData()
          }
          break
        case 'qjjl':
          item = 5
          // 请假记录 - 懒加载
          if (!this.leaveInfoData || this.leaveInfoData.length === 0) {
            this.initleaveInfoData()
          }
          break
        case 'czsq':
          item = 6
          // 辞职申请 - 懒加载
          if (!this.resignData || this.resignData.length === 0) {
            this.initresignData()
          }
          break
        case 'lzdykq':
          item = 7
          // 离职当月考勤 - 懒加载
          if (!this.dimissionAttendData || this.dimissionAttendData.length === 0) {
            this.initdimissionAttendData()
          }
          break
        case 'rlzjl':
          item = 8
          // 入离职记录 - 懒加载
          if (!this.dimissionLogData || this.dimissionLogData.length === 0) {
            this.initdimissionLogData()
          }
          break
        case 'syjlq':
          item = 9
          // 失业金领取 - 懒加载
          if (!this.unemploymentData || this.unemploymentData.length === 0) {
            this.initunemploymentData()
          }
          break
        case 'sbsq':
          item = 10
          // 社保申请 - 懒加载
          if (!this.insuranceData || this.insuranceData.length === 0) {
            this.initinsuranceData()
          }
          break
        case 'ywxaj':
          item = 11
          // 意外险案件 - 懒加载
          if (!this.accidentCasesData || this.accidentCasesData.length === 0) {
            this.initaccidentCasesData()
          }
          break
        case 'gsaj':
          item = 12
          // 工伤案件 - 懒加载
          if (!this.occupationalData || this.occupationalData.length === 0) {
            this.initoccupationalData()
          }
          break
        case 'lzaj':
          item = 13
          // 仲裁案件 - 懒加载
          if (!this.laborTroubleData || this.laborTroubleData.length === 0) {
            this.initlaborTroubleData()
          }
          break
        case 'bljl':
          item = 14
          // 不良记录 - 懒加载
          if (!this.badRecordData || this.badRecordData.length === 0) {
            this.initbadRecordData()
          }
          break
        case 'bz':
          item = 15
          // 备注 - 懒加载
          if (!this.remarkInfoData || this.remarkInfoData.length === 0) {
            this.initremarkInfoData()
          }
          break
        case 'jljt':
          item = 16
          // 记录截图及相关附件 - 已在initlabel中加载
          break
      }
      this.$nextTick(() => {
src/views/user/archivesEdit.vue
@@ -3868,7 +3868,7 @@
    },
    // 字典选项计算属性
    statusOptions() { return this.getDictOptions('PLITICAL') },
    empTypeOptions() { return this.getDictOptions('empType') },
    empTypeOptions() { return this.getDictOptions('EMPTYPE') },
    nationOptions() { return this.getDictOptions('NATION') },
    marriageOptions() { return this.getDictOptions('MARRIAGE') },
    educationOptions() { return this.getDictOptions('EDUCATION') },
@@ -3895,7 +3895,7 @@
  mounted() {
    this.initDept()
    // 字典数据已在登录时预加载,直接从 Vuex 获取
    this.initDictTypes(['PLITICAL', 'sex', 'empType', 'NATION', 'MARRIAGE', 'EDUCATION', 'NATIVEPLACE', 'archivesStatus', 'INSURANCETYPE', 'empCardStatus', 'handbookStatus', 'certificateList', 'PHYSICALEXAMTYPE', 'ECG', 'CONTRACTSTATUS', 'LEAVETYPE', 'applayStatus', 'reportStatus', 'hospitalizatioFlag', 'settleStatus', 'ZCTYPE', 'changeType', 'LZTYPE'])
    this.initDictTypes(['PLITICAL', 'sex', 'EMPTYPE', 'NATION', 'MARRIAGE', 'EDUCATION', 'NATIVEPLACE', 'archivesStatus', 'INSURANCETYPE', 'empCardStatus', 'handbookStatus', 'certificateList', 'PHYSICALEXAMTYPE', 'ECG', 'CONTRACTSTATUS', 'LEAVETYPE', 'applayStatus', 'reportStatus', 'hospitalizatioFlag', 'settleStatus', 'ZCTYPE', 'changeType', 'LZTYPE'])
  },
  methods: {
    clickImg(node) {
@@ -4472,22 +4472,8 @@
      this.accidentCasesForm.sex = val.sex
      this.$set(this.accidentCasesForm, 'delFlag', 0)
      // 只加载附件数据(基本信息已在val中),其他模块懒加载
      this.initlabel()
      this.initphysicalExamData()
      this.initList() // 工作经历
      this.initjobChangeData() // 调岗记录
      this.initdimissionLogData() // 入离职记录
      this.initcontractInfoData() // 合同信息
      this.initleaveInfoData() // 请假记录
      this.initresignData() // 辞职申请
      this.initunemploymentData() // 失业金领取
      this.initinsuranceData() // 社保申请
      this.initremarkInfoData() // 备注
      this.initlaborTroubleData() // 仲裁案件
      this.initoccupationalData() // 工伤案件
      this.initbadRecordData() // 不良记录
      this.initaccidentCasesData() // 意外险案件
      this.initdimissionAttendData() // 考勤情况
    },
    initphysicalExamData(params = {}) {
      params.pageSize = this.pagination.size
@@ -6104,57 +6090,120 @@
    goAnchor: function(type) {
      let item = 1
      this.item = type
      // 根据点击的菜单懒加载对应数据
      switch (type) {
        case 'jbxx':
          item = 0
          // 基本信息 - 已加载
          break
        case 'gzjl':
          item = 1
          // 工作经历 - 懒加载
          if (!this.workExperienceData || this.workExperienceData.length === 0) {
            this.initList()
          }
          break
        case 'tjxx':
          item = 2
          // 体检信息 - 懒加载
          if (!this.physicalExamData || this.physicalExamData.length === 0) {
            this.initphysicalExamData()
          }
          break
        case 'htxx':
          item = 3
          // 合同信息 - 懒加载
          if (!this.contractInfoData || this.contractInfoData.length === 0) {
            this.initcontractInfoData()
          }
          break
        case 'tgjl':
          item = 4
          // 调岗记录 - 懒加载
          if (!this.jobChangeData || this.jobChangeData.length === 0) {
            this.initjobChangeData()
          }
          break
        case 'qjjl':
          item = 5
          // 请假记录 - 懒加载
          if (!this.leaveInfoData || this.leaveInfoData.length === 0) {
            this.initleaveInfoData()
          }
          break
        case 'czsq':
          item = 6
          // 辞职申请 - 懒加载
          if (!this.resignData || this.resignData.length === 0) {
            this.initresignData()
          }
          break
        case 'lzdykq':
          item = 7
          // 考勤情况 - 懒加载
          if (!this.dimissionAttendData || this.dimissionAttendData.length === 0) {
            this.initdimissionAttendData()
          }
          break
        case 'rlzjl':
          item = 8
          // 入离职记录 - 懒加载
          if (!this.dimissionLogData || this.dimissionLogData.length === 0) {
            this.initdimissionLogData()
          }
          break
        case 'syjlq':
          item = 9
          // 失业金领取 - 懒加载
          if (!this.unemploymentData || this.unemploymentData.length === 0) {
            this.initunemploymentData()
          }
          break
        case 'sbsq':
          item = 10
          // 社保申请 - 懒加载
          if (!this.insuranceData || this.insuranceData.length === 0) {
            this.initinsuranceData()
          }
          break
        case 'ywxaj':
          item = 11
          // 意外险案件 - 懒加载
          if (!this.accidentCasesData || this.accidentCasesData.length === 0) {
            this.initaccidentCasesData()
          }
          break
        case 'gsaj':
          item = 12
          // 工伤案件 - 懒加载
          if (!this.occupationalData || this.occupationalData.length === 0) {
            this.initoccupationalData()
          }
          break
        case 'lzaj':
          item = 13
          // 仲裁案件 - 懒加载
          if (!this.laborTroubleData || this.laborTroubleData.length === 0) {
            this.initlaborTroubleData()
          }
          break
        case 'bljl':
          item = 14
          // 不良记录 - 懒加载
          if (!this.badRecordData || this.badRecordData.length === 0) {
            this.initbadRecordData()
          }
          break
        case 'bz':
          item = 15
          // 备注 - 懒加载
          if (!this.remarkInfoData || this.remarkInfoData.length === 0) {
            this.initremarkInfoData()
          }
          break
        case 'jljt':
          item = 16
          // 奖励津贴 - 懒加载
          break
      }
      this.$nextTick(() => {
src/views/user/inemployees.vue
@@ -1345,37 +1345,87 @@
  },
  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') }
    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()
    // 字典数据已在登录时预加载,直接从 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.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: {