yubo
2026-04-06 6448ec15bfe0b65fb822a662105bceddc23b58d8
src/views/user/archivesChange.vue
@@ -2677,10 +2677,12 @@
import Pagination from '@/components/Pagination'
import { getToken } from '@/utils/auth'
import { pages } from '@/settings'
import dictMixin from '../../utils/dictMixin'
export default {
  name: 'ArchivesEdit',
  components: { Treeselect, Pagination },
  mixins: [dictMixin],
  props: {
    dialogVisible: {
      type: Boolean,
@@ -3558,34 +3560,35 @@
        { type: 'dic_credentials' },
        { type: 'password' },
        { type: 'implicit' }
      ],
      statusOptions: [],
      empTypeOptions: [],
      nationOptions: [],
      marriageOptions: [],
      educationOptions: [],
      nativePlaceOptions: [],
      archivesStatusOptions: [],
      insuranceTypeOptions: [],
      empCardStatusOptions: [],
      handbookStatusOptions: [],
      ecgOptions: [],
      certificateListOptions: [],
      physicalExamTypeOptions: [],
      contractStatusOptions: [],
      leaveTypeOptions: [],
      insuranceGaersOptions: [],
      applayStatusOptions: [],
      reportStatusOptions: [],
      hospitalizatioFlagOptions: [],
      settleStatusOptions: [],
      arbitrationTypeOptions: [],
      changeTypeOptions: [],
      dimissionTypeOptions: [],
      sexOptions: []
      ]
    }
  },
  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') },
    sexOptions() { return this.getDictOptions('sex') },
    isVisible: {
      get() {
        return this.dialogVisible
@@ -3598,79 +3601,8 @@
  },
  mounted() {
    this.initDept()
    /* 政治面貌*/
    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(['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) {
@@ -4100,22 +4032,45 @@
      this.physicalExamForm = { ...val }
      this.workExperienceForm = { ...val }
      this.badRecordForm = { ...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() // 考勤情况
      // 分批加载数据,避免并发请求过多导致 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()
      ])
    },
    initphysicalExamData(params = {}) {
      params.pageSize = this.pagination.size