From 6448ec15bfe0b65fb822a662105bceddc23b58d8 Mon Sep 17 00:00:00 2001
From: yubo <autumnal_wind@yeah.net>
Date: 星期一, 06 四月 2026 21:34:44 +0800
Subject: [PATCH] feat(user): 新增员工档案管理视图组件
---
src/views/user/archivesChange.vue | 183 +++++++++++++++++----------------------------
1 files changed, 69 insertions(+), 114 deletions(-)
diff --git a/src/views/user/archivesChange.vue b/src/views/user/archivesChange.vue
index e1179ca..a5d9c4e 100644
--- a/src/views/user/archivesChange.vue
+++ b/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
--
Gitblit v1.8.0