Переглянути джерело

添加个人信息审批流程

huangguoce 4 тижнів тому
батько
коміт
eea77d5d34
27 змінених файлів з 5040 додано та 923 видалено
  1. 36 0
      src/api/human/enrollment/EnrollmentRegistrationService.js
  2. 1 1
      src/views/common/UpLoadComponentCardStyle.vue
  3. 173 258
      src/views/flowable/task/TaskForm.vue
  4. 43 58
      src/views/home/components/MyNoticePageList2.vue
  5. 7 0
      src/views/home/components/TodoList2.vue
  6. 74 33
      src/views/human/enrollment/registration/EnrollmentRegistrationEditForm.vue
  7. 1629 0
      src/views/human/enrollment/registration/EnrollmentUserInfoAuditForm.vue
  8. 10 0
      src/views/human/enrollment/registration/components/AttachmentView.vue
  9. 67 41
      src/views/human/enrollment/registration/components/CertificateInfo.vue
  10. 8 7
      src/views/human/enrollment/registration/components/EducationInfo.vue
  11. 1 0
      src/views/human/enrollment/registration/components/FamilyInfo.vue
  12. 1 0
      src/views/human/enrollment/registration/components/LanguageInfo.vue
  13. 1 0
      src/views/human/enrollment/registration/components/RewardInfo.vue
  14. 1 0
      src/views/human/enrollment/registration/components/SkillInfo.vue
  15. 1 3
      src/views/human/enrollment/registration/components/TrainingInfo.vue
  16. 24 14
      src/views/human/enrollment/registration/components/WorkInfo.vue
  17. 245 274
      src/views/sys/cert/CertForm.vue
  18. 544 234
      src/views/sys/user/UserInfo.vue
  19. 172 0
      src/views/sys/user/components/AttachmentView.vue
  20. 276 0
      src/views/sys/user/components/CertificateInfo.vue
  21. 409 0
      src/views/sys/user/components/EducationInfo.vue
  22. 226 0
      src/views/sys/user/components/FamilyInfo.vue
  23. 227 0
      src/views/sys/user/components/LanguageInfo.vue
  24. 210 0
      src/views/sys/user/components/RewardInfo.vue
  25. 206 0
      src/views/sys/user/components/SkillInfo.vue
  26. 204 0
      src/views/sys/user/components/TrainingInfo.vue
  27. 244 0
      src/views/sys/user/components/WorkInfo.vue

+ 36 - 0
src/api/human/enrollment/EnrollmentRegistrationService.js

@@ -9,6 +9,13 @@ export default {
 			params: params,
 		});
 	},
+	getUserInfoAudit: function (params) {
+		return request({
+			url: prefix + "/enrollmentRegistration/getUserInfoAudit",
+			method: "get",
+			params: params,
+		});
+	},
 	save(inputForm) {
 		return request({
 			url: prefix + `/enrollmentRegistration/save`,
@@ -37,6 +44,28 @@ export default {
 			data: inputForm,
 		});
 	},
+	updateInfoAudit(inputForm) {
+		return request({
+			url: prefix + `/enrollmentRegistration/updateInfoAudit`,
+			method: "post",
+			data: inputForm,
+		});
+	},
+	updateInfoAgree(inputForm) {
+		return request({
+			url: prefix + `/enrollmentRegistration/updateInfoAgree`,
+			method: "post",
+			data: inputForm,
+		});
+	},
+
+	updateInfoReject(inputForm) {
+		return request({
+			url: prefix + `/enrollmentRegistration/updateInfoReject`,
+			method: "post",
+			data: inputForm,
+		});
+	},
 	saveWageCard(inputForm) {
 		return request({
 			url: prefix + `/enrollmentRegistration/saveWageCard`,
@@ -72,6 +101,13 @@ export default {
 			params: { id: id },
 		});
 	},
+	findAuditInfoById(id) {
+		return request({
+			url: prefix + "/enrollmentRegistration/findAuditInfoById",
+			method: "get",
+			params: { id: id },
+		});
+	},
 	findWageCardById(id) {
 		return request({
 			url: prefix + "/enrollmentRegistration/findWageCardById",

+ 1 - 1
src/views/common/UpLoadComponentCardStyle.vue

@@ -430,7 +430,7 @@ export default {
       await this.dataListNew.splice(index, 1)
       await this.dataList.splice(index, 1)
       if (this.commonJS.isNotEmpty(row.id)) {
-        this.ossService.deleteMsgById(row.id)
+        // this.ossService.deleteMsgById(row.id)
       }
       var newFileList = [];
       for (var i = 0; i < fileList.length; i++) {

+ 173 - 258
src/views/flowable/task/TaskForm.vue

@@ -4,25 +4,12 @@
 
 		<el-tabs type="border-card" v-model="taskSelectedTab" @tab-click="onTabChange">
 			<el-tab-pane label="表单信息" name="form-first">
-				<component
-					:formReadOnly="formReadOnly"
-					v-if="formType === '2'"
-					:class="formReadOnly ? 'readonly' : ''"
-					ref="form"
-					:businessId="businessId"
-					:is="form"
-					:status="status"
-					@callBackFunc="callBackFunc"
-					@changeLoading="changeLoading"
-				></component>
+				<component :formReadOnly="formReadOnly" v-if="formType === '2'" :class="formReadOnly ? 'readonly' : ''"
+					ref="form" :businessId="businessId" :is="form" :status="status" @callBackFunc="callBackFunc"
+					@changeLoading="changeLoading"></component>
 
-				<PreviewForm
-					v-if="formType !== '2'"
-					:processDefinitionId="procDefId"
-					:edit="true"
-					:taskFormData="taskFormData"
-					ref="form"
-				/>
+				<PreviewForm v-if="formType !== '2'" :processDefinitionId="procDefId" :edit="true"
+					:taskFormData="taskFormData" ref="form" />
 			</el-tab-pane>
 			<el-tab-pane label="流程信息" v-if="procInsId" name="form-second">
 				<flow-time-line :historicTaskList="historicTaskList" />
@@ -34,77 +21,59 @@
 							<span>流程图</span>
 						</div>
 					</template>
-					<flow-chart
-						ref="chart1"
-						v-if="procInsId"
-						:processInstanceId="procInsId"
-					/>
-					<flow-chart
-						ref="chart2"
-						v-if="!procInsId"
-						:processDefId="procDefId"
-					/>
+					<flow-chart ref="chart1" v-if="procInsId" :processInstanceId="procInsId" />
+					<flow-chart ref="chart2" v-if="!procInsId" :processDefId="procDefId" />
 				</el-card>
 			</el-tab-pane>
 			<el-tab-pane label="流转记录" v-if="procInsId" name="form-forth">
 				<flow-step :historicTaskList="historicTaskList" />
 			</el-tab-pane>
 			<el-tab-pane label="入库修改历史" v-if="commonJS.isNotEmpty(wareHouseId)" name="form-sixth">
-				<vxe-table
-					ref="wareHouseTable"
-					border="inner"
-					size="small"
-					:key="222"
-					max-height="1000px"
-					class="vxe-table-element"
-					:data="dataListHi">
+				<vxe-table ref="wareHouseTable" border="inner" size="small" :key="222" max-height="1000px"
+					class="vxe-table-element" :data="dataListHi">
 					<vxe-column type="seq" width="60" title="序号"></vxe-column>
 					<vxe-column min-width="120" align="center" title="修改类型" field="updateTradeType">
 						<template #default="scope">
-							<span v-if="commonJS.isNotEmpty(scope.row.updateTradeType)"> {{scope.row.updateTradeType}} </span>
+							<span v-if="commonJS.isNotEmpty(scope.row.updateTradeType)"> {{ scope.row.updateTradeType }}
+							</span>
 							<span v-else> -- </span>
 						</template>
 					</vxe-column>
 					<vxe-column min-width="160" align="center" title="修改商品" field="updateTradeName">
 						<template #default="scope">
-							<span v-if="commonJS.isNotEmpty(scope.row.updateTradeName)"> {{scope.row.updateTradeName}} </span>
+							<span v-if="commonJS.isNotEmpty(scope.row.updateTradeName)"> {{ scope.row.updateTradeName }}
+							</span>
 							<span v-else> -- </span>
 						</template>
 					</vxe-column>
 					<vxe-column min-width="160" align="center" title="修改人" field="updateUser">
 						<template #default="scope">
-							<span v-if="scope.row.endflag === '2'">(创建人) {{scope.row.updateUser}} </span>
-							<span v-else>{{scope.row.updateUser}} </span>
+							<span v-if="scope.row.endflag === '2'">(创建人) {{ scope.row.updateUser }} </span>
+							<span v-else>{{ scope.row.updateUser }} </span>
 						</template>
 					</vxe-column>
 					<vxe-column min-width="160" align="center" title="修改时间" field="createTime"></vxe-column>
 					<vxe-column title="操作" width="150px" fixed="right" align="center">
-						<template  #default="scope">
+						<template #default="scope">
 							<el-button type="text" size="small" @click="hiDetail(scope.row)">修改详情</el-button>
 						</template>
 					</vxe-column>
 				</vxe-table>
 			</el-tab-pane>
 			<el-tab-pane label="领用退回历史" v-if="returnId" name="form-seventh">
-				<vxe-table
-					ref="returnTable"
-					border="inner"
-					:key="111"
-					size="small"
-					class="vxe-table-element"
-					max-height="1000px"
-					:data="dataListHiCollect">
+				<vxe-table ref="returnTable" border="inner" :key="111" size="small" class="vxe-table-element"
+					max-height="1000px" :data="dataListHiCollect">
 					<vxe-column type="seq" width="60" title="序号"></vxe-column>
 					<vxe-column min-width="160" align="center" title="退回物品" field="returnGoods">
 						<template #default="scope">
-							<span v-if="commonJS.isNotEmpty(scope.row.returnGoods)"> {{scope.row.returnGoods}} </span>
+							<span v-if="commonJS.isNotEmpty(scope.row.returnGoods)"> {{ scope.row.returnGoods }} </span>
 							<span v-else> -- </span>
 						</template>
 					</vxe-column>
 					<vxe-column min-width="160" align="center" title="退回申请人" field="returnUserName"></vxe-column>
 					<vxe-column min-width="160" align="center" title="退回时间" field="createTime"></vxe-column>
 					<vxe-column title="操作" width="150px" fixed="right" align="center">
-						<template  #default="scope">
+						<template #default="scope">
 							<el-button type="text" size="small" @click="hiDetailCollect(scope.row)">退回详情</el-button>
 						</template>
 					</vxe-column>
@@ -112,27 +81,21 @@
 			</el-tab-pane>
 
 			<el-tab-pane label="归档历史" v-if="commonJS.isNotEmpty(cwArchiveHiFlag)" name="form-cwArchive">
-				<vxe-table
-					ref="wareHouseTable"
-					border="inner"
-					size="small"
-					:key="222"
-					max-height="1000px"
-					class="vxe-table-element"
-					:data="cwArchiveDataListHiCollect">
+				<vxe-table ref="wareHouseTable" border="inner" size="small" :key="222" max-height="1000px"
+					class="vxe-table-element" :data="cwArchiveDataListHiCollect">
 					<vxe-column type="seq" width="60" title="序号"></vxe-column>
 					<vxe-column min-width="160" align="center" title="归档发起人" field="userName"></vxe-column>
 					<vxe-column min-width="160" align="center" title="归档时间" field="auditDate"></vxe-column>
 					<vxe-column min-width="160" align="center" title="归档状态" field="status">
 						<template #default="scope">
 							<el-button @click="detail(scope.row)" effect="dark"
-									   :type="$dictUtils.getDictLabel('cw_status_flag', scope.row.status, '-')">
-								{{$dictUtils.getDictLabel("cw_status", scope.row.status, '-')}}
+								:type="$dictUtils.getDictLabel('cw_status_flag', scope.row.status, '-')">
+								{{ $dictUtils.getDictLabel("cw_status", scope.row.status, '-') }}
 							</el-button>
 						</template>
 					</vxe-column>
 					<vxe-column title="操作" width="150px" fixed="right" align="center">
-						<template  #default="scope">
+						<template #default="scope">
 							<el-button type="text" size="small" @click="hiDetailCwArchive(scope.row)">归档详情</el-button>
 						</template>
 					</vxe-column>
@@ -142,35 +105,23 @@
 
 		</el-tabs>
 
-		<el-card
-			style="margin-top: 10px; padding-bottom: 66px"
-			v-if="!procInsId || taskId"
-		>
+		<el-card style="margin-top: 10px; padding-bottom: 66px" v-if="!procInsId || taskId">
 			<el-form :model="auditForm" ref="auditForm" v-loading="loading" label-width="120px">
 				<el-row>
 					<el-col :span="16">
-<!--						<el-form-item-->
-<!--							v-if="!procInsId"-->
-<!--							label="流程标题"-->
-<!--							prop="title"-->
-<!--						>-->
-<!--							<el-input-->
-<!--								placeholder="请输入流程标题"-->
-<!--								v-model="title"-->
-<!--							>-->
-<!--							</el-input>-->
-<!--						</el-form-item>-->
-						<el-form-item
-							v-if="taskId"
-							label="审批信息"
-							prop="message"
-						>
-							<el-input
-								type="textarea"
-								:rows="3"
-								placeholder="请输入审批意见"
-								v-model="auditForm.message"
-							>
+						<!--						<el-form-item-->
+						<!--							v-if="!procInsId"-->
+						<!--							label="流程标题"-->
+						<!--							prop="title"-->
+						<!--						>-->
+						<!--							<el-input-->
+						<!--								placeholder="请输入流程标题"-->
+						<!--								v-model="title"-->
+						<!--							>-->
+						<!--							</el-input>-->
+						<!--						</el-form-item>-->
+						<el-form-item v-if="taskId" label="审批信息" prop="message">
+							<el-input type="textarea" :rows="3" placeholder="请输入审批意见" v-model="auditForm.message">
 							</el-input>
 						</el-form-item>
 					</el-col>
@@ -180,21 +131,14 @@
 						</el-form-item>
 					</el-col>
 					<el-col :span="16">
-						<el-form-item
-							v-if="isCC"
-							:rules="[
-								{
-									required: true,
-									message: '用户不能为空',
-									trigger: 'blur',
-								},
-							]"
-							prop="userIds"
-							label="抄送给"
-						>
-							<user-select
-								v-model="auditForm.userIds"
-							></user-select>
+						<el-form-item v-if="isCC" :rules="[
+							{
+								required: true,
+								message: '用户不能为空',
+								trigger: 'blur',
+							},
+						]" prop="userIds" label="抄送给">
+							<user-select v-model="auditForm.userIds"></user-select>
 						</el-form-item>
 					</el-col>
 					<!--<el-col :span="16">
@@ -205,22 +149,14 @@
 						</el-form-item>
 					</el-col>-->
 					<el-col :span="16">
-						<el-form-item
-							v-if="isAssign"
-							:rules="[
-								{
-									required: true,
-									message: '用户不能为空',
-									trigger: 'blur',
-								},
-							]"
-							prop="assignee"
-							label="指定"
-						>
-							<user-select
-								:limit="1"
-								v-model="auditForm.assignee"
-							></user-select>
+						<el-form-item v-if="isAssign" :rules="[
+							{
+								required: true,
+								message: '用户不能为空',
+								trigger: 'blur',
+							},
+						]" prop="assignee" label="指定">
+							<user-select :limit="1" v-model="auditForm.assignee"></user-select>
 						</el-form-item>
 					</el-col>
 				</el-row>
@@ -230,52 +166,24 @@
 		<div class="FlowFormFooter">
 			<template v-for="(button, index) in buttons">
 				<template v-if="button.isHide === '0'">
-					<el-button
-						size="large"
-						type="primary"
-						v-if="button.code !== '_flow_print'"
-						:key="index"
-						@click="submit(button, buttons)"
-						v-noMoreClick
-						v-loading="loading"
-						plain
-						>{{ button.name }}</el-button
-					>
-					<el-button
-						size="large"
-						type="primary"
-						v-if="button.code === '_flow_print'"
-						@click="print"
-						:key="index"
-						v-noMoreClick
-						v-loading="loading"
-						plain
-						>{{ button.name }}</el-button
-					>
+					<el-button size="large" type="primary" v-if="button.code !== '_flow_print'" :key="index"
+						@click="submit(button, buttons)" v-noMoreClick v-loading="loading" plain>{{ button.name
+						}}</el-button>
+					<el-button size="large" type="primary" v-if="button.code === '_flow_print'" @click="print"
+						:key="index" v-noMoreClick v-loading="loading" plain>{{ button.name }}</el-button>
 				</template>
 			</template>
 		</div>
 		<task-back-nodes ref="taskBackNodes" @getBackTaskDefKey="back" />
-		<user-select-dialog
-			title="选择转办用户"
-			ref="transferUserSelectDialog"
-			:limit="1"
-			@doSubmit="selectUsersToTransferTask"
-		></user-select-dialog>
-		<user-select-dialog
-			title="选择委派用户"
-			ref="delegateUserSelectDialog"
-			:limit="1"
-			@doSubmit="selectUsersToDelateTask"
-		></user-select-dialog>
-		<user-select-dialog
-			title="选择加签用户"
-			ref="addSignTaskUserSelectDialog"
-			@doSubmit="selectUsersToAddSignTask"
-		></user-select-dialog>
+		<user-select-dialog title="选择转办用户" ref="transferUserSelectDialog" :limit="1"
+			@doSubmit="selectUsersToTransferTask"></user-select-dialog>
+		<user-select-dialog title="选择委派用户" ref="delegateUserSelectDialog" :limit="1"
+			@doSubmit="selectUsersToDelateTask"></user-select-dialog>
+		<user-select-dialog title="选择加签用户" ref="addSignTaskUserSelectDialog"
+			@doSubmit="selectUsersToAddSignTask"></user-select-dialog>
 		<CollectReturnHi ref="collectReturnHi"></CollectReturnHi>
 		<WareHouseHi ref="wareHouseHi"></WareHouseHi>
-		<ProjectReportArchiveForm ref="projectReportArchiveForm" ></ProjectReportArchiveForm>
+		<ProjectReportArchiveForm ref="projectReportArchiveForm"></ProjectReportArchiveForm>
 	</div>
 </template>
 
@@ -307,7 +215,7 @@ export default {
 	collectService: null,
 	wareHouseService: null,
 	projectReportArchiveService: null,
-	beforeCreate () {
+	beforeCreate() {
 		this.collectService = new CollectService()
 		this.wareHouseService = new WareHouseService()
 		this.projectReportArchiveService = new ProjectReportArchiveService()
@@ -358,22 +266,22 @@ export default {
 		this.buttons = null
 		if (this.status === "start") {
 			this.buttons = [{ code: "_flow_start", name: "启动", isHide: "0" }];
-		}else if (this.status === 'startAndClose') { // 送审、关闭
-			this.buttons = [{code: '_flow_start', name: '送审', isHide: '0'}, {code: '_flow_close', name: '关闭', isHide: '0'}]
+		} else if (this.status === 'startAndClose') { // 送审、关闭
+			this.buttons = [{ code: '_flow_start', name: '送审', isHide: '0' }, { code: '_flow_close', name: '关闭', isHide: '0' }]
 		} else if (this.status === 'reapplyFlag') { // 重新申请、流程终止、关闭
-			this.buttons = [{code: '_flow_reapply', name: '重新申请', isHide: '0'}, {code: '_flow_stop', name: '流程终止', isHide: '0'}, {code: '_flow_close', name: '关闭', isHide: '0'}]
+			this.buttons = [{ code: '_flow_reapply', name: '重新申请', isHide: '0' }, { code: '_flow_stop', name: '流程终止', isHide: '0' }, { code: '_flow_close', name: '关闭', isHide: '0' }]
 		} else if (this.status === 'startAndHold') {  // 送审、暂存、关闭
-			this.buttons = [{code: '_flow_start', name: '送审', isHide: '0'}, {code: '_flow_save', name: '暂存', isHide: '0'}, {code: '_flow_close', name: '关闭', isHide: '0'}]
+			this.buttons = [{ code: '_flow_start', name: '送审', isHide: '0' }, { code: '_flow_save', name: '暂存', isHide: '0' }, { code: '_flow_close', name: '关闭', isHide: '0' }]
 		} else if (this.status === 'startAndCloseFiled') { // 送审、关闭
-			this.buttons = [{code: '_flow_start', name: '送审', isHide: '0'}, {code: '_flow_close', name: '关闭', isHide: '0'}]
+			this.buttons = [{ code: '_flow_start', name: '送审', isHide: '0' }, { code: '_flow_close', name: '关闭', isHide: '0' }]
 		} else if (this.status === 'startAndHoldFiled') {  // 送审、暂存、关闭
-			this.buttons = [{code: '_flow_start', name: '送审', isHide: '0'}, {code: '_flow_save', name: '暂存', isHide: '0'}, {code: '_flow_close', name: '关闭', isHide: '0'}]
+			this.buttons = [{ code: '_flow_start', name: '送审', isHide: '0' }, { code: '_flow_save', name: '暂存', isHide: '0' }, { code: '_flow_close', name: '关闭', isHide: '0' }]
 		} else if (this.status === 'startAndCloseBorrow') {
-			this.buttons = [{code: '_flow_start', name: '送审', isHide: '0'}, {code: '_flow_close', name: '关闭', isHide: '0'}]
+			this.buttons = [{ code: '_flow_start', name: '送审', isHide: '0' }, { code: '_flow_close', name: '关闭', isHide: '0' }]
 		} else if (this.status === 'reback') {
-			this.buttons = [{code: '_flow_reback', name: '撤回', isHide: '0'}]
+			this.buttons = [{ code: '_flow_reback', name: '撤回', isHide: '0' }]
 		} else if (this.status === 'agreeAndReject') {
-			this.buttons = [{code: '_flow_agree', name: '同意', isHide: '0'}, {code: '_flow_reject', name: '驳回', isHide: '0'}]
+			this.buttons = [{ code: '_flow_agree', name: '同意', isHide: '0' }, { code: '_flow_reject', name: '驳回', isHide: '0' }]
 			this.status = 'audit'
 		} else if (this.procDefKey && this.taskDefKey) {
 			// 读取按钮
@@ -426,7 +334,7 @@ export default {
 		},
 	},
 	methods: {
-		changeBusiness () {
+		changeBusiness() {
 			this.$refs.form.close()
 			this.businessId = 'false'
 		},
@@ -514,7 +422,7 @@ export default {
 					this.changeBusiness()
 					useTabs.close()
 					if (!this.commonJS.isEmpty(this.$route.query.routePath)) {
-						this.$router.push({path: this.$route.query.routePath})
+						this.$router.push({ path: this.$route.query.routePath })
 					} else {
 						this.$router.push({
 							path: '/sys/dashboard/workBench/PendingList',
@@ -536,8 +444,8 @@ export default {
 			if (this.formType === "2") {
 				// 外置表单
 				this.$refs.form.startForm(
-					(businessTable, businessId, inputForm,recordType) => {
-						vars = { ...vars, ...inputForm ,recordType}
+					(businessTable, businessId, inputForm, recordType) => {
+						vars = { ...vars, ...inputForm, recordType }
 						console.log(vars)
 						if (inputForm.procDefId) {
 							this.procDefId = inputForm.procDefId
@@ -555,8 +463,8 @@ export default {
 						if (recordType) {
 							this.recordType = recordType
 						}
-						if (inputForm.days){
-							this.days=inputForm.days
+						if (inputForm.days) {
+							this.days = inputForm.days
 						}
 						console.log('this.recordType', this.recordType)
 						let assignee = this.auditForm.assignee
@@ -580,7 +488,7 @@ export default {
 								this.changeBusiness()
 								useTabs.close();
 								if (!this.commonJS.isEmpty(this.$route.query.routePath)) {
-									this.$router.push({path: this.$route.query.routePath})
+									this.$router.push({ path: this.$route.query.routePath })
 								} else {
 									this.$router.push({
 										path: '/sys/dashboard/workBench/PendingList',
@@ -606,7 +514,7 @@ export default {
 						this.changeBusiness()
 						useTabs.close();
 						if (!this.commonJS.isEmpty(this.$route.query.routePath)) {
-							this.$router.push({path: this.$route.query.routePath})
+							this.$router.push({ path: this.$route.query.routePath })
 						} else {
 							this.$router.push({
 								path: '/sys/dashboard/workBench/PendingList',
@@ -622,14 +530,14 @@ export default {
 		},
 		// 同意
 		agree(vars) {
-				vars = {...vars, agree: true}
-				if (this.formType === '2') {
-					this.commit(vars)
-				}
+			vars = { ...vars, agree: true }
+			if (this.formType === '2') {
+				this.commit(vars)
+			}
 		},
 		// 重新申请
-		reapply (vars) {
-			vars = {...vars, agree: true}
+		reapply(vars) {
+			vars = { ...vars, agree: true }
 			if (this.formType === '2') { // 外置表单
 				let param = {
 					num: this.$route.query.num,
@@ -649,8 +557,8 @@ export default {
 						taskName: ''
 					}
 				}
-				this.$refs.form.reapplyForm((businessTable, businessId, inputForm,recordType) => {
-					vars = {...vars, ...inputForm,recordType}
+				this.$refs.form.reapplyForm((businessTable, businessId, inputForm, recordType) => {
+					vars = { ...vars, ...inputForm, recordType }
 					if (inputForm.procDefId) {
 						param.procDefId = inputForm.procDefId
 					}
@@ -659,9 +567,9 @@ export default {
 						assignee = inputForm.assignee
 					}
 					console.log('recordType', recordType)
-					this.recordType=recordType
+					this.recordType = recordType
 					if (!this.commonJS.isEmpty(inputForm.days)) {
-						this.days=inputForm.days
+						this.days = inputForm.days
 					}
 					console.log('this.recordType', this.recordType)
 					taskService.audit({
@@ -685,14 +593,14 @@ export default {
 						// this.$router.push({path: '/flowable/task/TodoList'})
 						// this.cc(data)
 						if (this.$route.query.routePath) {
-							this.$router.push({path: this.$route.query.routePath})
+							this.$router.push({ path: this.$route.query.routePath })
 						} else {
 							var num = this.$route.query.num
 							if (num === '2') {
-								this.$router.push({path: '/sys/dashboard/workBench/Pending'})
+								this.$router.push({ path: '/sys/dashboard/workBench/Pending' })
 								this.cc(data)
 							} else if (num === '3') {
-								this.$router.push({path: '/sys/dashboard/workBench/PendingList'})
+								this.$router.push({ path: '/sys/dashboard/workBench/PendingList' })
 								this.cc(data)
 							} else {
 								this.$router.push({
@@ -714,14 +622,14 @@ export default {
 					// this.$router.push({path: '/flowable/task/TodoList'})
 					// this.cc(data)
 					if (this.$route.query.routePath) {
-						this.$router.push({path: this.$route.query.routePath})
+						this.$router.push({ path: this.$route.query.routePath })
 					} else {
 						var num = this.$route.query.num
 						if (num === '2') {
-							this.$router.push({path: '/sys/dashboard/workBench/Pending'})
+							this.$router.push({ path: '/sys/dashboard/workBench/Pending' })
 							this.cc(data)
 						} else if (num === '3') {
-							this.$router.push({path: '/sys/dashboard/workBench/PendingList'})
+							this.$router.push({ path: '/sys/dashboard/workBench/PendingList' })
 							this.cc(data)
 						} else {
 							this.$router.push({
@@ -923,7 +831,8 @@ export default {
 				this.procDefId.includes('Process_1722404901733') ||
 				this.procDefId.includes('Process_1722412442950') ||
 				this.procDefId.includes('Process_1722416114655') ||
-				this.procDefId.includes('Process_1723517404891')
+				this.procDefId.includes('Process_1723517404891') ||
+				this.procDefId.includes('Process_1751269402209')
 			) {
 				console.log('进入新版驳回')
 				this.$confirm(`确定驳回流程吗?`, '提示', {
@@ -932,10 +841,10 @@ export default {
 					type: 'warning'
 				}).then(async () => {
 					if (this.formType === '2') {
-						vars = {...vars, agree: false}
+						vars = { ...vars, agree: false }
 						// await this.commit(vars) // 驳回
 						this.$refs.form.updateStatusById('reject', (assignee) => {
-							if (this.commonJS.isEmpty(this.auditForm.assignee)){
+							if (this.commonJS.isEmpty(this.auditForm.assignee)) {
 								this.auditForm.assignee = assignee
 							}
 							taskService.audit({
@@ -957,20 +866,20 @@ export default {
 								// this.$router.push({path: '/flowable/task/TodoList'})
 								// this.cc(data)
 								if (this.$route.query.routePath) {
-									this.$router.push({path: this.$route.query.routePath})
+									this.$router.push({ path: this.$route.query.routePath })
 								} else {
 									var num = this.$route.query.num
 									if (num === '2') {
-										this.$router.push({path: '/sys/dashboard/workBench/Pending'})
+										this.$router.push({ path: '/sys/dashboard/workBench/Pending' })
 										this.cc(data)
 									} else if (num === '3') {
-										this.$router.push({path: '/sys/dashboard/workBench/PendingList'})
+										this.$router.push({ path: '/sys/dashboard/workBench/PendingList' })
 										this.cc(data)
-									}else if (this.cs === 'cs') {
-										this.$router.push({path: '/dashboard/index'})
+									} else if (this.cs === 'cs') {
+										this.$router.push({ path: '/dashboard/index' })
 										this.cc(data)
-									}else if (this.cs === 'cs2') {
-										this.$router.push({path: '/home'})
+									} else if (this.cs === 'cs2') {
+										this.$router.push({ path: '/home' })
 										this.cc(data)
 									} else {
 										this.$router.push({
@@ -1079,10 +988,10 @@ export default {
 				this.procDefId.includes('Process_1702534302878')
 			) {
 				if (this.formType === '2') {
-					vars = {...vars, agree: false}
+					vars = { ...vars, agree: false }
 					// await this.commit(vars) // 驳回
 					this.$refs.form.updateStatusById('reject', (assignee) => {
-						if (this.commonJS.isEmpty(this.auditForm.assignee)){
+						if (this.commonJS.isEmpty(this.auditForm.assignee)) {
 							this.auditForm.assignee = assignee
 						}
 						taskService.audit({
@@ -1104,20 +1013,20 @@ export default {
 							// this.$router.push({path: '/flowable/task/TodoList'})
 							// this.cc(data)
 							if (this.$route.query.routePath) {
-								this.$router.push({path: this.$route.query.routePath})
+								this.$router.push({ path: this.$route.query.routePath })
 							} else {
 								var num = this.$route.query.num
 								if (num === '2') {
-									this.$router.push({path: '/sys/dashboard/workBench/Pending'})
+									this.$router.push({ path: '/sys/dashboard/workBench/Pending' })
 									this.cc(data)
 								} else if (num === '3') {
-									this.$router.push({path: '/sys/dashboard/workBench/PendingList'})
+									this.$router.push({ path: '/sys/dashboard/workBench/PendingList' })
 									this.cc(data)
-								}else if (this.cs === 'cs') {
-									this.$router.push({path: '/dashboard/index'})
+								} else if (this.cs === 'cs') {
+									this.$router.push({ path: '/dashboard/index' })
 									this.cc(data)
-								}else if (this.cs === 'cs2') {
-									this.$router.push({path: '/home'})
+								} else if (this.cs === 'cs2') {
+									this.$router.push({ path: '/home' })
 									this.cc(data)
 								} else {
 									this.$router.push({
@@ -1135,7 +1044,7 @@ export default {
 			}
 		},
 		// 驳回至指定节点(节点是从0开始)
-		rejectToPointNum (num) {
+		rejectToPointNum(num) {
 			this.$confirm(`确定驳回流程吗?`, '提示', {
 				confirmButtonText: '确定',
 				cancelButtonText: '取消',
@@ -1154,7 +1063,7 @@ export default {
 			}
 		},
 		// 撤回
-		reback () {
+		reback() {
 			this.$confirm(`确定撤回流程吗?`, '提示', {
 				confirmButtonText: '确定',
 				cancelButtonText: '取消',
@@ -1171,7 +1080,7 @@ export default {
 					} else {
 						useTabs.close()
 						if (!this.commonJS.isEmpty(this.$route.query.routePath)) {
-							this.$router.push({path: this.$route.query.routePath})
+							this.$router.push({ path: this.$route.query.routePath })
 						} else {
 							this.$router.push({
 								path: '/sys/dashboard/workBench/PendingList',
@@ -1203,9 +1112,9 @@ export default {
 					useTabs.close();
 					var num = this.$route.query.num
 					if (num === '2') {
-						this.$router.push({path: '/sys/dashboard/workBench/Pending'})
+						this.$router.push({ path: '/sys/dashboard/workBench/Pending' })
 					} else if (num === '3') {
-						this.$router.push({path: '/sys/dashboard/workBench/PendingList'})
+						this.$router.push({ path: '/sys/dashboard/workBench/PendingList' })
 					} else {
 						this.$router.push({
 							path: '/sys/dashboard/workBench/PendingList',
@@ -1239,7 +1148,7 @@ export default {
 				});
 		},
 		// 减签
-		delMultiInstance() {},
+		delMultiInstance() { },
 		// 转办
 		transfer() {
 			this.$refs.transferUserSelectDialog.open();
@@ -1285,14 +1194,14 @@ export default {
 						useTabs.close()
 						// this.cc(data)
 						if (this.$route.query.routePath) {
-							this.$router.push({path: this.$route.query.routePath})
+							this.$router.push({ path: this.$route.query.routePath })
 						} else {
 							var num = this.$route.query.num
 							if (num === '2') {
-								this.$router.push({path: '/sys/dashboard/workBench/Pending'})
+								this.$router.push({ path: '/sys/dashboard/workBench/Pending' })
 								this.cc(data)
 							} else if (num === '3') {
-								this.$router.push({path: '/sys/dashboard/workBench/PendingList'})
+								this.$router.push({ path: '/sys/dashboard/workBench/PendingList' })
 								this.cc(data)
 							} else {
 								this.$router.push({
@@ -1309,11 +1218,11 @@ export default {
 			});
 		},
 		// 关闭
-		close () {
+		close() {
 			this.changeBusiness()
 			useTabs.close()
 			if (!this.commonJS.isEmpty(this.$route.query.routePath)) {
-				this.$router.push({path: this.$route.query.routePath})
+				this.$router.push({ path: this.$route.query.routePath })
 			} else {
 				this.$router.push({
 					path: '/sys/dashboard/workBench/PendingList',
@@ -1324,11 +1233,11 @@ export default {
 			}
 		},
 		// 关闭
-		cancel () {
+		cancel() {
 			this.changeBusiness()
 			useTabs.close()
 			if (!this.commonJS.isEmpty(this.$route.query.routePath)) {
-				this.$router.push({path: this.$route.query.routePath})
+				this.$router.push({ path: this.$route.query.routePath })
 			} else {
 				this.$router.push({
 					path: '/dashboard/index',
@@ -1359,11 +1268,11 @@ export default {
 				}
 				// eslint-disable-next-line no-unused-vars
 				this.$refs.form.agreeForm(
-					(businessTable, businessId, inputForm,recordType) => {
+					(businessTable, businessId, inputForm, recordType) => {
 						if (this.commonJS.isNotEmpty(inputForm)) {
 							if (this.commonJS.isNotEmpty(inputForm.assignee)) {
 								this.auditForm.assignee = inputForm.assignee
-								if ( inputForm.imprestAmountArrears == 0) {
+								if (inputForm.imprestAmountArrears == 0) {
 									this.reject2();
 									return
 								}
@@ -1372,7 +1281,7 @@ export default {
 								this.days = inputForm.days
 							}
 						}
-						vars = { ...vars, ...inputForm,recordType }
+						vars = { ...vars, ...inputForm, recordType }
 						taskService
 							.audit({
 								taskId: this.taskId,
@@ -1381,8 +1290,8 @@ export default {
 								procDefId: this.procDefId,
 								comment: this.auditForm,
 								assignee: this.auditForm.assignee,
-								recordType:recordType,
-								days :this.days,
+								recordType: recordType,
+								days: this.days,
 								vars: vars
 							})
 							.then((data) => {
@@ -1396,20 +1305,20 @@ export default {
 								// this.$router.push({path: "/flowable/task/TodoList"});
 								// this.cc(data);
 								if (this.$route.query.routePath) {
-									this.$router.push({path: this.$route.query.routePath})
+									this.$router.push({ path: this.$route.query.routePath })
 								} else {
 									var num = this.$route.query.num
 									if (num === '2') {
-										this.$router.push({path: '/sys/dashboard/workBench/Pending'})
+										this.$router.push({ path: '/sys/dashboard/workBench/Pending' })
 										this.cc(data)
 									} else if (num === '3') {
-										this.$router.push({path: '/sys/dashboard/workBench/PendingList'})
+										this.$router.push({ path: '/sys/dashboard/workBench/PendingList' })
 										this.cc(data)
-									}else if (this.cs === 'cs') {
-										this.$router.push({path: '/dashboard/index'})
+									} else if (this.cs === 'cs') {
+										this.$router.push({ path: '/dashboard/index' })
 										this.cc(data)
-									}else if (this.cs === 'cs2') {
-										this.$router.push({path: '/home'})
+									} else if (this.cs === 'cs2') {
+										this.$router.push({ path: '/home' })
 										this.cc(data)
 									} else {
 										this.$router.push({
@@ -1438,14 +1347,14 @@ export default {
 						// this.$router.push({path: "/flowable/task/TodoList"});
 						// this.cc(data);
 						if (this.$route.query.routePath) {
-							this.$router.push({path: this.$route.query.routePath})
+							this.$router.push({ path: this.$route.query.routePath })
 						} else {
 							var num = this.$route.query.num
 							if (num === '2') {
-								this.$router.push({path: '/sys/dashboard/workBench/Pending'})
+								this.$router.push({ path: '/sys/dashboard/workBench/Pending' })
 								this.cc(data)
 							} else if (num === '3') {
-								this.$router.push({path: '/sys/dashboard/workBench/PendingList'})
+								this.$router.push({ path: '/sys/dashboard/workBench/PendingList' })
 								this.cc(data)
 							} else {
 								this.$router.push({
@@ -1533,13 +1442,13 @@ export default {
 		},
 
 		//文件补充
-		fileApply(vars){
+		fileApply(vars) {
 			let message = ""
 			if (this.formType === "2") {
 				// 外置表单
 				this.$refs.form.fileApply(
-					(businessTable, businessId, inputForm,recordType,createById,newTitle,title,procDefId,procDefKey,fileMessage) => {
-						vars = { ...vars, ...inputForm ,recordType}
+					(businessTable, businessId, inputForm, recordType, createById, newTitle, title, procDefId, procDefKey, fileMessage) => {
+						vars = { ...vars, ...inputForm, recordType }
 						console.log(vars)
 						if (procDefId) {
 							this.procDefId = procDefId
@@ -1557,8 +1466,8 @@ export default {
 						if (recordType) {
 							this.recordType = recordType
 						}
-						if (inputForm.days){
-							this.days=inputForm.days
+						if (inputForm.days) {
+							this.days = inputForm.days
 						}
 
 						let assignee = createById
@@ -1606,7 +1515,7 @@ export default {
 						this.changeBusiness()
 						useTabs.close();
 						if (!this.commonJS.isEmpty(this.$route.query.routePath)) {
-							this.$router.push({path: this.$route.query.routePath})
+							this.$router.push({ path: this.$route.query.routePath })
 						} else {
 							this.$router.push({
 								path: '/sys/dashboard/workBench/PendingList',
@@ -1623,7 +1532,7 @@ export default {
 		},
 
 
-		myNotice (taskId, proDefId, title, userName, createDate) {
+		myNotice(taskId, proDefId, title, userName, createDate) {
 			this.inputForm = {
 				taskId: '',
 				title: '',
@@ -1657,7 +1566,7 @@ export default {
 				}
 			})
 		},
-		callBackFunc (type) {
+		callBackFunc(type) {
 			// 隐藏同意按钮
 			if (type === 'hide') {
 				// 读取按钮
@@ -1692,14 +1601,14 @@ export default {
 			}
 		},
 		// 开启/关闭taskForm页面的加载中状态
-		changeLoading (loading) {
+		changeLoading(loading) {
 			if (this.commonJS.isNotEmpty(loading)) {
 				this.loading = loading
 			} else {
 				this.loading = false
 			}
 		},
-		onTabChange (event) {
+		onTabChange(event) {
 			if (event.props.name === 'form-sixth') {
 				if (this.commonJS.isNotEmpty(this.wareHouseId)) {
 					this.wareHouseService.findHiById(this.wareHouseId).then((data) => {
@@ -1725,19 +1634,19 @@ export default {
 			}*/
 		},
 		// 打开财务归档修改历史详情页
-		hiDetailCwArchive (row) {
+		hiDetailCwArchive(row) {
 			if (this.commonJS.isNotEmpty(row.id)) {
 				this.$refs.projectReportArchiveForm.init('view', row.id)
 			}
 		},
 		// 打开入库修改历史详情页
-		hiDetail (row) {
+		hiDetail(row) {
 			if (this.commonJS.isNotEmpty(row.id)) {
 				this.$refs.wareHouseHi.init(row.id)
 			}
 		},
 		// 打开领用退回历史详情页
-		hiDetailCollect (row) {
+		hiDetailCollect(row) {
 			if (this.commonJS.isNotEmpty(row.id)) {
 				this.$refs.collectReturnHi.init(row.id)
 			}
@@ -1789,7 +1698,7 @@ export default {
 			dataListHi: [],
 			dataListHiCollect: [],
 			cwArchiveDataListHiCollect: [],
-			recordType:''
+			recordType: ''
 		};
 	},
 };
@@ -1800,10 +1709,12 @@ export default {
 	position: relative;
 	padding: 10px;
 }
+
 .title {
 	padding: 15px;
 	text-align: center;
 }
+
 .FlowFormFooter {
 	position: fixed;
 	right: 0;
@@ -1826,22 +1737,26 @@ export default {
 		font-size 0.3s;
 	/* right: 20.125px; */
 }
-.aminui-side-split + .aminui-side + .aminui-body.el-container {
+
+.aminui-side-split+.aminui-side+.aminui-body.el-container {
 	.FlowFormFooter {
 		left: 275px;
 	}
 }
-.aminui-side-split + .aminui-side.isCollapse + .aminui-body.el-container {
+
+.aminui-side-split+.aminui-side.isCollapse+.aminui-body.el-container {
 	.FlowFormFooter {
 		left: 130px;
 	}
 }
-.aminui-side + .aminui-body.el-container {
+
+.aminui-side+.aminui-body.el-container {
 	.FlowFormFooter {
 		left: 200px;
 	}
 }
-.aminui-side.isCollapse + .aminui-body.el-container {
+
+.aminui-side.isCollapse+.aminui-body.el-container {
 	.FlowFormFooter {
 		left: 65px;
 	}

+ 43 - 58
src/views/home/components/MyNoticePageList2.vue

@@ -3,7 +3,8 @@
 		<template #header>
 			<div class="card-header">
 				<span>我的通知
-				<el-badge class="mark" v-if="tablePage.total !== 0" :value="tablePage.total" :max="99" style="line-height: 0;margin-top: 8px"/>
+					<el-badge class="mark" v-if="tablePage.total !== 0" :value="tablePage.total" :max="99"
+						style="line-height: 0;margin-top: 8px" />
 				</span>
 				<div style="float:right;">
 					<el-button type="text" @click="refreshList()">刷新</el-button>
@@ -12,46 +13,24 @@
 			</div>
 		</template>
 		<div style="height: 250px;margin-top: 5px">
-			<vxe-table
-				border="inner"
-				auto-resize
-				resizable
-				:loading="loading"
-				size="small"
-				ref="noticetable"
-				show-header-overflow
-				show-overflow
-				highlight-hover-row
-				:menu-config="{}"
-				:print-config="{}"
-				:import-config="{}"
-				:export-config="{}"
-				@sort-change="sortChangeHandle"
-				:sort-config="{remote:true}"
-				:data="dataList"
-				:checkbox-config="{}">
+			<vxe-table border="inner" auto-resize resizable :loading="loading" size="small" ref="noticetable"
+				show-header-overflow show-overflow highlight-hover-row :menu-config="{}" :print-config="{}"
+				:import-config="{}" :export-config="{}" @sort-change="sortChangeHandle" :sort-config="{ remote: true }"
+				:data="dataList" :checkbox-config="{}">
 				<vxe-column title="实例标题" field="title">
 					<template #default="scope">
-						<el-link type="primary" :underline="false"
-								 @click="todo(scope.row)">{{scope.row.title}}
+						<el-link type="primary" :underline="false" @click="todo(scope.row)">{{ scope.row.title }}
 						</el-link>
 					</template>
 				</vxe-column>
 				<vxe-column title="流程名称" field="taskName"></vxe-column>
 				<vxe-column title="流程发起人" field="createUser"></vxe-column>
-				<vxe-column
-					field="createTime"
-					title="创建时间">
+				<vxe-column field="createTime" title="创建时间">
 				</vxe-column>
 			</vxe-table>
-			<vxe-pager
-				background
-				size="small"
-				style="margin-top: 5px"
-				:current-page="tablePage.currentPage"
-				:page-size="tablePage.pageSize"
-				:total="tablePage.total"
-				:page-sizes="[10, 20, 100, 1000, {label: '全量数据', value: 1000000}]"
+			<vxe-pager background size="small" style="margin-top: 5px" :current-page="tablePage.currentPage"
+				:page-size="tablePage.pageSize" :total="tablePage.total"
+				:page-sizes="[10, 20, 100, 1000, { label: '全量数据', value: 1000000 }]"
 				:layouts="['PrevPage', 'JumpNumber', 'NextPage', 'FullJump', 'Sizes', 'Total']"
 				@page-change="currentChangeHandle">
 			</vxe-pager>
@@ -65,15 +44,15 @@
 </template>
 
 <script>
-	import WareHouseHistoryPopup from '@/views/materialManagement/wareHouseSummary/WareHouseHistoryPopup'
-	import RegisterPopup from '@/views/human/practice/register/RegisterPopup'
-	import KeyCardPopup from '@/views/human/enrollment/registration/KeyCardPopup'
-	import DepartPopup from '@/views/human/depart/handover/DepartPopup'
-	import DepartProvePopup from '@/views/human/depart/handover/DepartProvePopup'
+import WareHouseHistoryPopup from '@/views/materialManagement/wareHouseSummary/WareHouseHistoryPopup'
+import RegisterPopup from '@/views/human/practice/register/RegisterPopup'
+import KeyCardPopup from '@/views/human/enrollment/registration/KeyCardPopup'
+import DepartPopup from '@/views/human/depart/handover/DepartPopup'
+import DepartProvePopup from '@/views/human/depart/handover/DepartProvePopup'
 // import notifyService from "@/api/notify/notifyService";
 import noticeService from '@/api/flowable/NoticeService'
 import taskService from "@/api/flowable/taskService";
-	import pick from "lodash.pick";
+import pick from "lodash.pick";
 export default {
 	// title: "我的通知",
 	// icon: "tongzhi",
@@ -118,16 +97,22 @@ export default {
 	},
 	methods: {
 		// 排序
-		sortChangeHandle (column) {
+		sortChangeHandle(column) {
 			this.tablePage.orders = []
 			if (column.order != null) {
-				this.tablePage.orders.push({column: this.$utils.toLine(column.property), asc: column.order === 'asc'})
+				this.tablePage.orders.push({ column: this.$utils.toLine(column.property), asc: column.order === 'asc' })
 			}
 			this.refreshList()
 		},
-		todo (row) {
+		todo(row) {
 			// console.log('row', row)
-			if (row.taskName === '库存提醒') {
+			if (row.taskName === '个人信息审批') {
+				this.inputForm = {
+					id: row.id
+				}
+				noticeService.stockUpdate(this.inputForm)
+				this.resetSearch()
+			} else if (row.taskName === '库存提醒') {
 				// console.log('测试进来了')
 				this.$refs.wareHouseHistoryPopup.init(row.defId)
 				this.inputForm = {
@@ -149,14 +134,14 @@ export default {
 				}
 				noticeService.stockUpdate(this.inputForm)
 				this.resetSearch()
-			}else if (row.taskName.includes('离职提醒')) {
+			} else if (row.taskName.includes('离职提醒')) {
 				this.$refs.departPopup.init(row.taskName)
 				this.inputForm = {
 					id: row.id
 				}
 				noticeService.stockUpdate(this.inputForm)
 				this.resetSearch()
-			}else if (row.taskName.includes('请点击下载离职证明')) {
+			} else if (row.taskName.includes('请点击下载离职证明')) {
 				this.$refs.departProvePopup.init(row.taskName)
 				this.inputForm = {
 					id: row.id
@@ -190,16 +175,16 @@ export default {
 					// 	}
 					// })
 					this.$router.push({
-					  path: '/flowable/task/TaskFormDetail',
-					  query: {
-						  ...pick(data, 'formType', 'formUrl', 'procDefKey', 'taskDefKey', 'procInsId', 'procDefId', 'taskId', 'status', 'title'),
-						  isShow: 'false',
-						  readOnly: true,
-						title: `审批【${row.taskName || ''}】`,
-						formTitle: `${row.title}`,
-						businessId: data.businessId,
-						  status: 'reback'
-					  }
+						path: '/flowable/task/TaskFormDetail',
+						query: {
+							...pick(data, 'formType', 'formUrl', 'procDefKey', 'taskDefKey', 'procInsId', 'procDefId', 'taskId', 'status', 'title'),
+							isShow: 'false',
+							readOnly: true,
+							title: `审批【${row.taskName || ''}】`,
+							formTitle: `${row.title}`,
+							businessId: data.businessId,
+							status: 'reback'
+						}
 					})
 				})
 			}
@@ -229,7 +214,7 @@ export default {
 			// this.$refs.searchForm.resetFields();
 			this.refreshList();
 		},
-		toPendingList () {
+		toPendingList() {
 			// this.$router.push('./PendingList')
 			this.$router.push('/flowable/task/NoticePageList')
 		},
@@ -237,7 +222,7 @@ export default {
 };
 </script>
 <style scoped>
-	.box-card {
-		height: 100%;
-	}
+.box-card {
+	height: 100%;
+}
 </style>

+ 7 - 0
src/views/home/components/TodoList2.vue

@@ -88,6 +88,13 @@ export default {
 			return this.$store.state.global.backlogCount
 		},
 	},
+	watch: {
+		$route(to, from) {
+			if (to.fullPath == "/home") {
+				this.refreshList()
+			}
+		}
+	},
 	mounted() {
 		// 页面加载后
 		// 1.在执行定时器前先执行一次获取接口数据的操作函数, 否则接口会1秒钟后才调用

+ 74 - 33
src/views/human/enrollment/registration/EnrollmentRegistrationEditForm.vue

@@ -836,8 +836,8 @@
 												}}</el-descriptions-item>
 												<el-descriptions-item label="毕业院校:">{{ item.graduatedFrom
 												}}</el-descriptions-item>
-												<el-descriptions-item label="其他毕业院校:">{{ item.otherGraduatedFrom
-												}}</el-descriptions-item>
+												<!-- <el-descriptions-item label="其他毕业院校:">{{ item.otherGraduatedFrom
+												}}</el-descriptions-item> -->
 												<el-descriptions-item label="专业:">{{ item.speciality
 												}}</el-descriptions-item>
 												<el-descriptions-item label="学历:">{{
@@ -863,8 +863,8 @@
 												}}</el-descriptions-item>
 												<!-- <el-descriptions-item label="培养方式:">{{ item.cultureMethod
 												}}</el-descriptions-item> -->
-												<el-descriptions-item label="专业描述:">{{ item.specialityDesc
-												}}</el-descriptions-item>
+												<!-- <el-descriptions-item label="专业描述:">{{ item.specialityDesc
+												}}</el-descriptions-item> -->
 												<el-descriptions-item label="学历证明:">
 													<AttachmentView :fileList="item.educationFile">
 													</AttachmentView>
@@ -1026,8 +1026,8 @@
 											<template #title="{ isActive }">
 												<div class="collapseTitle">
 													<span style="font-size: 16px;"> {{
-														$dictUtils.getDictLabel("certification_certificate",
-															item.certificateName, '-') }}</span>
+														$dictUtils.getDictLabel('sys_cert_type', item.type, '-')
+													}}</span>
 													<div style="margin-left: auto;">
 														<el-button type="text"
 															@click.stop="editCertificate(item.id)">修改</el-button>
@@ -1037,22 +1037,31 @@
 												</div>
 											</template>
 											<el-descriptions title="" border>
-												<el-descriptions-item label="证书名称:">{{
-													$dictUtils.getDictLabel("certification_certificate",
-														item.certificateName, '-')
-												}}</el-descriptions-item>
-												<el-descriptions-item label="其他证书名称:">{{ item.otherCertificateName
-												}}</el-descriptions-item>
-												<el-descriptions-item label="证书编号:">{{ item.certificateNumber
-												}}</el-descriptions-item>
-												<el-descriptions-item label="发证机构:">{{ item.issuingAuthority
-												}}</el-descriptions-item>
-												<el-descriptions-item label="获得日期:">{{
-													handleDateFormatter(item.issueDate)
-												}}</el-descriptions-item>
-												<el-descriptions-item label="有效期至:">{{
-													handleDateFormatter(item.validUntil)
-												}}</el-descriptions-item>
+												<el-descriptions-item label="证书类型:">
+													{{ $dictUtils.getDictLabel('sys_cert_type', item.type, '-')
+													}}
+												</el-descriptions-item>
+												<el-descriptions-item label="证书编号:">
+													{{ item.no }}
+												</el-descriptions-item>
+												<el-descriptions-item label="发证机关:">
+													{{ item.authorities }}
+												</el-descriptions-item>
+												<el-descriptions-item label="发证日期:">
+													{{ handleDateFormatter(item.issuedDate) }}
+												</el-descriptions-item>
+												<el-descriptions-item label="注册日期:">
+													{{ handleDateFormatter(item.enrollDate) }}
+												</el-descriptions-item>
+												<el-descriptions-item label="到期日期:">
+													{{ handleDateFormatter(item.expireDate) }}
+												</el-descriptions-item>
+												<el-descriptions-item label="注册证书编号:">
+													{{ item.enrollCertNo }}
+												</el-descriptions-item>
+												<el-descriptions-item label="专业:">
+													{{ item.profession }}
+												</el-descriptions-item>
 												<el-descriptions-item label="附件:">
 													<AttachmentView :fileList="item.certificateAttachment">
 													</AttachmentView>
@@ -1495,16 +1504,7 @@ export default {
 				],
 				// 资质证书
 				certificateInfoList: [
-					{
-						enrollmentRegistrationId: '',
-						certificateName: '',          // 证书名称
-						otherCertificateName: '',     // 其他证书名称
-						certificateNumber: '',        // 证书编号
-						issuingAuthority: '',         // 发证机构
-						issueDate: '',                // 获得日期
-						validUntil: '',               // 有效期至
-						certificateAttachment: []     // 证书附件
-					}
+
 				],
 				// 专业技能
 				skillInfoList: [
@@ -1808,7 +1808,9 @@ export default {
 					if (this.commonJS.isEmpty(this.inputForm.rewardInfoList)) {
 						this.inputForm.rewardInfoList = []
 					}
-
+					this.inputForm.certificateInfoList.forEach(temp => {
+						this.changeType(temp.type, temp)
+					})
 					if (this.commonJS.isNotEmpty(this.inputForm.socialSecurityPictureFront)) {
 						await this.ossService.getTemporaryUrl(this.inputForm.socialSecurityPictureFront).then((data) => {
 							let file = {
@@ -2582,6 +2584,45 @@ export default {
 		changeInfoList(index) {
 			this.changeFlag[index] = !this.changeFlag[index]
 		},
+		changeType(value, row) {
+
+			if (value === '1' || value === '2') {
+				let obj = this.$dictUtils.getDictList('sys_cert_profession_build').find(item => {
+					return item.value == row.profession
+				})
+				if (obj) {
+					row.profession = obj.label
+				}
+			} else if (value === '3' || value === '4') {
+				let obj = this.$dictUtils.getDictList('sys_cert_profession_cost').find(item => {
+					return item.value == row.profession
+				})
+				console.log(obj);
+				if (obj) {
+					row.profession = obj.label
+				}
+			} else if (value === '5') {
+				let obj = this.$dictUtils.getDictList('sys_cert_profession_supervision').find(item => {
+					return item.value == row.profession
+				})
+				if (obj) {
+					row.profession = obj.label
+				}
+			} else if (value === '6') {
+				let obj = this.$dictUtils.getDictList('sys_cert_profession_accounting').find(item => {
+					return item.value == row.profession
+				})
+				if (obj) {
+					row.profession = obj.label
+				}
+			}
+			console.log(row);
+			console.log(row);
+			console.log(row);
+			console.log(row);
+			console.log(row);
+
+		},
 	}
 }
 </script>

Різницю між файлами не показано, бо вона завелика
+ 1629 - 0
src/views/human/enrollment/registration/EnrollmentUserInfoAuditForm.vue


+ 10 - 0
src/views/human/enrollment/registration/components/AttachmentView.vue

@@ -74,6 +74,16 @@ export default {
         }
     },
     watch: {
+        fileList(newVal) {
+            this.newFiles = []
+            this.fileList.forEach(item => {
+                this.ossService.getFileSizeByUrl(item.url).then((data) => {
+                    let obj = { ...item, size: data.size, lsUrl: data.url }
+                    this.newFiles.push(obj)
+                    this.uploadKey = Date.now().toString();
+                })
+            })
+        },
     },
     created() {
         this.ossService = new OSSSerivce()

+ 67 - 41
src/views/human/enrollment/registration/components/CertificateInfo.vue

@@ -8,50 +8,65 @@
 				@submit.native.prevent>
 				<el-row :gutter="26">
 					<el-col :span="12">
-						<el-form-item label="证书名称" prop="certificateName">
-							<el-select size="default" v-model="inputForm.certificateName" placeholder="请选择证书"
+						<el-form-item label="证书类型" prop="type">
+							<el-select @change="changeType" size="default" v-model="inputForm.type" placeholder="请选择证书"
 								style="width: 100%;">
-								<el-option v-for="item in $dictUtils.getDictList('certification_certificate')"
-									:key="item.value" :label="item.label" :value="item.value">
+								<el-option v-for="item in $dictUtils.getDictList('sys_cert_type')" :key="item.value"
+									:label="item.label" :value="item.value">
 								</el-option>
 							</el-select>
 						</el-form-item>
 					</el-col>
 
-
 					<el-col :span="12">
-						<el-form-item label="其他证书名称" prop="otherCertificateName">
-							<el-input v-model="inputForm.otherCertificateName" placeholder="请输入其他证书名称"></el-input>
+						<el-form-item label="证书编号" prop="no">
+							<el-input v-model="inputForm.no" placeholder="请输入证书编号"></el-input>
 						</el-form-item>
 					</el-col>
 
 					<el-col :span="12">
-						<el-form-item label="证书编号" prop="certificateNumber">
-							<el-input v-model="inputForm.certificateNumber" placeholder="请输入证书编号"></el-input>
+						<el-form-item label="发证机关" prop="authorities">
+							<el-input v-model="inputForm.authorities" placeholder="请输入发证机关"></el-input>
 						</el-form-item>
 					</el-col>
-
 					<el-col :span="12">
-						<el-form-item label="发证机构" prop="issuingAuthority">
-							<el-input v-model="inputForm.issuingAuthority" placeholder="请输入发证机构"></el-input>
+						<el-form-item label="发证日期" prop="issuedDate">
+							<el-date-picker v-model="inputForm.issuedDate" type="date" placeholder="请选择发证日期"
+								style="width: 100%;">
+							</el-date-picker>
 						</el-form-item>
 					</el-col>
 					<el-col :span="12">
-						<el-form-item label="获得日期" prop="issueDate">
-							<el-date-picker v-model="inputForm.issueDate" type="date" placeholder="请选择获得日期"
+						<el-form-item label="注册日期" prop="enrollDate">
+							<el-date-picker v-model="inputForm.enrollDate" type="date" placeholder="请选择注册日期"
 								style="width: 100%;">
 							</el-date-picker>
 						</el-form-item>
 					</el-col>
 					<el-col :span="12">
-						<el-form-item label="有效期至" prop="validUntil">
-							<el-date-picker v-model="inputForm.validUntil" type="date" placeholder="请选择有效期"
+						<el-form-item label="到期日期" prop="expireDate">
+							<el-date-picker v-model="inputForm.expireDate" type="date" placeholder="请选择到期日期"
 								style="width: 100%;">
 							</el-date-picker>
 						</el-form-item>
 					</el-col>
+					<el-col :span="12">
+						<el-form-item label="注册证书编号" prop="enrollCertNo">
+							<el-input v-model="inputForm.enrollCertNo" placeholder="请输入注册证书编号"></el-input>
+						</el-form-item>
+					</el-col>
+					<el-col :span="12">
+						<el-form-item label="专业" prop="profession">
+							<el-select size="default" v-model="inputForm.profession" placeholder="请选择专业"
+								style="width: 100%;">
+								<el-option v-for="item in inputForm.professionList" :key="item.value"
+									:label="item.label" :value="item.value">
+								</el-option>
+							</el-select>
+						</el-form-item>
+					</el-col>
 					<el-col :span="24">
-						<el-form-item label="证书附件" prop="certificateAttachment">
+						<el-form-item label="附件" prop="certificateAttachment">
 							<UpLoadComponent ref="upLoadComponent"></UpLoadComponent>
 						</el-form-item>
 					</el-col>
@@ -94,32 +109,30 @@ export default {
 			visible: false,
 			loading: false,
 			inputForm: {
+				id: "",
 				enrollmentRegistrationId: '',
-				certificateName: '',          // 证书名称
-				otherCertificateName: '',     // 其他证书名称
-				certificateNumber: '',        // 证书编号
-				issuingAuthority: '',         // 发证机构
-				issueDate: '',                // 获得日期
-				validUntil: '',               // 有效期至
+				type: '',          // 证书类型
+				no: '',        // 证书编号
+				authorities: '',         // 发证机构
+				issuedDate: '',                // 获得日期
+				enrollDate: "",//注册日期
+				expireDate: "",//到期日期
+				enrollCertNo: '',               // 注册证书编号
+				profession: "",
 				certificateAttachment: []     // 证书附件
 			},
 			keyWatch: '',
 			rules: {
-				certificateName: [
+				type: [
 					{ required: true, message: '请输入证书名称', trigger: 'blur' },
 				],
-				certificateNumber: [
+				no: [
 					{ required: true, message: '请输入证书编号', trigger: 'blur' },
 				],
-				issuingAuthority: [
-					{ required: true, message: '请输入发证机构', trigger: 'blur' },
-				],
-				issueDate: [
+
+				issuedDate: [
 					{ type: 'date', required: true, message: '请选择获得日期', trigger: 'change' }
 				],
-				validUntil: [
-					{ type: 'date', required: true, message: '请选择有效期至', trigger: 'change' }
-				],
 
 			}
 		}
@@ -171,13 +184,16 @@ export default {
 		init(method, id, reId) {
 			this.method = method
 			this.inputForm = {
+				id: "",
 				enrollmentRegistrationId: '',
-				certificateName: '',          // 证书名称
-				otherCertificateName: '',     // 其他证书名称
-				certificateNumber: '',        // 证书编号
-				issuingAuthority: '',         // 发证机构
-				issueDate: '',                // 获得日期
-				validUntil: '',               // 有效期至
+				type: '',          // 证书类型
+				no: '',        // 证书编号
+				authorities: '',         // 发证机构
+				issuedDate: '',                // 获得日期
+				enrollDate: "",//注册日期
+				expireDate: "",//到期日期
+				enrollCertNo: '',               // 注册证书编号
+				profession: "",
 				certificateAttachment: []     // 证书附件
 			}
 			if (method === 'add') {
@@ -201,6 +217,7 @@ export default {
 						if (!this.inputForm.certificateAttachment) {
 							this.inputForm.certificateAttachment = []
 						}
+						this.changeType(this.inputForm.type)
 						this.$refs.upLoadComponent.newUpload(method, this.inputForm.certificateAttachment, 'certificate')
 						this.loading = false
 					})
@@ -218,9 +235,7 @@ export default {
 			}
 			this.$refs['inputForm'].validate((valid) => {
 				if (valid) {
-					this.inputForm.issueDate = new Date(this.inputForm.issueDate).getTime(); // 转为时间戳
-					this.inputForm.validUntil = new Date(this.inputForm.validUntil).getTime(); // 转为时间戳
-					this.inputForm.certificateAttachment = this.$refs.upLoadComponent.getDataList()
+					this.inputForm.status = "5"
 					enrollmentRegistrationService.saveCertificateInfo(this.inputForm).then(res => {
 						this.close()
 						this.$message.success(res)
@@ -235,6 +250,17 @@ export default {
 			this.$refs.inputForm.resetFields()
 			this.visible = false
 		},
+		changeType(value) {
+			if (value === '1' || value === '2') {
+				this.inputForm.professionList = this.$dictUtils.getDictList('sys_cert_profession_build')
+			} else if (value === '3' || value === '4') {
+				this.inputForm.professionList = this.$dictUtils.getDictList('sys_cert_profession_cost')
+			} else if (value === '5') {
+				this.inputForm.professionList = this.$dictUtils.getDictList('sys_cert_profession_supervision')
+			} else if (value === '6') {
+				this.inputForm.professionList = this.$dictUtils.getDictList('sys_cert_profession_accounting')
+			}
+		},
 	}
 }
 </script>

+ 8 - 7
src/views/human/enrollment/registration/components/EducationInfo.vue

@@ -26,12 +26,12 @@
 							<el-input v-model="inputForm.graduatedFrom" placeholder="请输入毕业院校"></el-input>
 						</el-form-item>
 					</el-col>
-
+					<!-- 
 					<el-col :span="12">
 						<el-form-item label="其他毕业院校" prop="otherGraduatedFrom">
 							<el-input v-model="inputForm.otherGraduatedFrom" placeholder="如无可不填"></el-input>
 						</el-form-item>
-					</el-col>
+					</el-col> -->
 
 					<el-col :span="12">
 						<el-form-item label="专业" prop="speciality">
@@ -103,8 +103,8 @@
 						</el-form-item>
 					</el-col>
 
-					<el-col :span="12">
-						<!-- <el-form-item label="培养方式" prop="cultureMethod">
+					<!-- <el-col :span="12"> -->
+					<!-- <el-form-item label="培养方式" prop="cultureMethod">
 							<el-select v-model="inputForm.cultureMethod" placeholder="请选择培养方式">
 								<el-option label="统招" value="统招"></el-option>
 								<el-option label="委培" value="委培"></el-option>
@@ -116,7 +116,7 @@
 								<el-option label="自考" value="5"></el-option>
 							</el-select>
 						</el-form-item> -->
-					</el-col>
+					<!-- </el-col> -->
 
 					<el-col :span="12">
 						<el-form-item label="学历附件" prop="educationFile" class="fileUpload">
@@ -130,12 +130,12 @@
 						</el-form-item>
 					</el-col>
 
-					<el-col :span="24">
+					<!-- <el-col :span="24">
 						<el-form-item label="专业描述" prop="specialityDesc">
 							<el-input type="textarea" v-model="inputForm.specialityDesc" placeholder="请输入专业描述"
 								:rows="4"></el-input>
 						</el-form-item>
-					</el-col>
+					</el-col> -->
 				</el-row>
 			</el-form>
 			<template #footer>
@@ -377,6 +377,7 @@ export default {
 					this.inputForm.endDate = new Date(this.inputForm.endDate).getTime(); // 转为时间戳
 					this.inputForm.educationFile = this.$refs.educationUploadComponent.getDataList()
 					this.inputForm.degreeFile = this.$refs.degreeUploadComponent.getDataList()
+					this.inputForm.status = "5"
 					enrollmentRegistrationService.saveEduInfo(this.inputForm).then(res => {
 						this.close()
 						this.$message.success(res)

+ 1 - 0
src/views/human/enrollment/registration/components/FamilyInfo.vue

@@ -200,6 +200,7 @@ export default {
 			this.$refs['inputForm'].validate((valid) => {
 				if (valid) {
 					this.inputForm.birthDate = new Date(this.inputForm.birthDate).getTime(); // 转为时间戳
+					this.inputForm.status = "5"
 					enrollmentRegistrationService.saveFamilyInfo(this.inputForm).then(res => {
 						this.close()
 						this.$message.success(res)

+ 1 - 0
src/views/human/enrollment/registration/components/LanguageInfo.vue

@@ -200,6 +200,7 @@ export default {
 			this.$refs['inputForm'].validate((valid) => {
 				if (valid) {
 					this.inputForm.files = this.$refs.upLoadComponent.getDataList()
+					this.inputForm.status = "5"
 					enrollmentRegistrationService.saveLanguageInfo(this.inputForm).then(res => {
 						this.close()
 						this.$message.success(res)

+ 1 - 0
src/views/human/enrollment/registration/components/RewardInfo.vue

@@ -183,6 +183,7 @@ export default {
 				if (valid) {
 					this.inputForm.rewardDate = new Date(this.inputForm.rewardDate).getTime(); // 转为时间戳
 					this.inputForm.files = this.$refs.upLoadComponent.getDataList()
+					this.inputForm.status = "5"
 					enrollmentRegistrationService.saveRewardInfo(this.inputForm).then(res => {
 						this.close()
 						this.$message.success(res)

+ 1 - 0
src/views/human/enrollment/registration/components/SkillInfo.vue

@@ -180,6 +180,7 @@ export default {
 			this.$refs['inputForm'].validate((valid) => {
 				if (valid) {
 					this.inputForm.files = this.$refs.upLoadComponent.getDataList()
+					this.inputForm.status = "5"
 					enrollmentRegistrationService.saveSkillInfo(this.inputForm).then(res => {
 						this.close()
 						this.$message.success(res)

+ 1 - 3
src/views/human/enrollment/registration/components/TrainingInfo.vue

@@ -83,9 +83,6 @@ export default {
 				trainingInstitution: [
 					{ required: true, message: '请输入培训机构', trigger: 'blur' }
 				],
-				trainingResult: [
-					{ required: true, message: '请输入培训成绩', trigger: 'blur' },
-				],
 			}
 		}
 	},
@@ -180,6 +177,7 @@ export default {
 			this.$refs['inputForm'].validate((valid) => {
 				if (valid) {
 					this.inputForm.files = this.$refs.upLoadComponent.getDataList()
+					this.inputForm.status = "5"
 					enrollmentRegistrationService.saveTrainingInfo(this.inputForm).then(res => {
 						this.close()
 						this.$message.success(res)

+ 24 - 14
src/views/human/enrollment/registration/components/WorkInfo.vue

@@ -42,7 +42,8 @@
 
 					<el-col :span="12">
 						<el-form-item label="是否本单位工作经历" prop="isCurrentCompanyExperience">
-							<el-radio-group v-model="inputForm.isCurrentCompanyExperience">
+							<el-radio-group v-model="inputForm.isCurrentCompanyExperience"
+								@change="handleChangeIsCurrentCompanyExperience">
 								<el-radio label="1">是</el-radio>
 								<el-radio label="0">否</el-radio>
 							</el-radio-group>
@@ -107,19 +108,7 @@ export default {
 					{ required: true, message: '请选择开始时间', trigger: 'change' },
 				],
 				endDate: [
-					{ required: true, message: '结束时间不能为空', trigger: 'change' },
-					{
-						validator: (rule, value, callback) => {
-							const start = this.inputForm.startDate;
-							if (!start || !value) return callback();
-							if (new Date(start).getTime() > new Date(value).getTime()) {
-								callback(new Error('结束时间必须晚于开始时间'));
-							} else {
-								callback();
-							}
-						},
-						trigger: 'change'
-					}
+
 				],
 				isCurrentCompanyExperience: [
 					{ required: true, message: '请选择是否本单位经历', trigger: 'change' },
@@ -212,6 +201,7 @@ export default {
 				if (valid) {
 					this.inputForm.startDate = new Date(this.inputForm.startDate).getTime(); // 转为时间戳
 					this.inputForm.endDate = new Date(this.inputForm.endDate).getTime(); // 转为时间戳
+					this.inputForm.status = "5"
 					enrollmentRegistrationService.saveWorkInfo(this.inputForm).then(res => {
 						this.close()
 						this.$message.success(res)
@@ -225,6 +215,26 @@ export default {
 			this.$refs.inputForm.resetFields()
 			this.visible = false
 		},
+		handleChangeIsCurrentCompanyExperience(value) {
+			console.log(value);
+			if (value == 1) {
+				this.rules.endDate = []
+			} else {
+				this.rules.endDate = { required: true, message: '结束时间不能为空', trigger: 'change' },
+				{
+					validator: (rule, value, callback) => {
+						const start = this.inputForm.startDate;
+						if (!start || !value) return callback();
+						if (new Date(start).getTime() > new Date(value).getTime()) {
+							callback(new Error('结束时间必须晚于开始时间'));
+						} else {
+							callback();
+						}
+					},
+					trigger: 'change'
+				}
+			}
+		}
 	}
 }
 </script>

+ 245 - 274
src/views/sys/cert/CertForm.vue

@@ -1,183 +1,151 @@
 <template xmlns:v-slot="http://www.w3.org/1999/XSL/Transform">
-  <el-dialog
-    :title="title"
-    :close-on-click-modal="false"
-	draggable
-    width="1400px"
-    v-model="visible">
-    <el-form :model="inputForm" ref="inputForm" @keyup.enter.native="doSubmit()"
-             label-width="120px" v-loading="loading" :class="method==='view'?'readonly':''" :disabled="method==='view'" @submit.native.prevent>
-     <el-divider content-position="left"><i class="el-icon-user"></i> 人员信息</el-divider>
+  <el-dialog :title="title" :close-on-click-modal="false" draggable width="1400px" v-model="visible">
+    <el-form :model="inputForm" ref="inputForm" @keyup.enter.native="doSubmit()" label-width="120px" v-loading="loading"
+      :class="method === 'view' ? 'readonly' : ''" :disabled="method === 'view'" @submit.native.prevent>
+      <el-divider content-position="left"><i class="el-icon-user"></i> 人员信息</el-divider>
       <el-row :gutter="15">
         <el-col :span="12">
-            <el-form-item label="姓名" :rules="[{required: true, message: '姓名不能为空', trigger: 'blur'}]" prop="name">
-              <el-input :disabled="true" v-model="inputForm.name" maxlength="50" placeholder=""></el-input>
-            </el-form-item>
+          <el-form-item label="姓名" :rules="[{ required: true, message: '姓名不能为空', trigger: 'blur' }]" prop="name">
+            <el-input :disabled="true" v-model="inputForm.name" maxlength="50" placeholder=""></el-input>
+          </el-form-item>
         </el-col>
-         <el-col :span="12">
-           <el-form-item label="手机" prop="mobile" :rules="[{validator:validator.isMobile, trigger:'blur'}]">
-             <el-input :disabled="true" v-model="inputForm.mobile" maxlength="50" placeholder=""></el-input>
-           </el-form-item>
-         </el-col>
-         <el-col :span="12">
-           <el-form-item prop="officeDTO.id" :rules="[{required: true, message: '部门不能为空', trigger: 'blur'}]" label="部门">
-             <SelectTree
-               ref="officeTree"
-               :props="{
-                value: 'id',             // ID字段名
-                label: 'name',         // 显示名称
-                children: 'children'    // 子级字段名
-              }"
-
-               :url="`/system-server/sys/office/treeData?type=2`"
-               :value="inputForm.officeDTO.id"
-			   size="default"
-               :clearable="true"
-               :accordion="true"
-               :disabled="true"
-               @getValue="(value) => {inputForm.officeDTO.id=value}"/>
-           </el-form-item>
-         </el-col>
-         <el-col :span="12">
-           <el-form-item label="岗位" prop="postIdList">
-             <el-select :disabled="true" v-model="inputForm.postIdList" style="width:100%" multiple placeholder="请选择">
-               <el-option
-                 v-for="item in postList"
-                 :key="item.id"
-                 :label="item.name"
-                 :value="item.id">
-               </el-option>
-             </el-select>
-           </el-form-item>
-         </el-col>
-         <el-col :span="12">
-           <el-form-item label="角色" prop="roleIdList" :rules="[{required: true, message: '角色不能为空', trigger: 'blur'}]">
-             <el-select :disabled="true" v-model="inputForm.roleIdList" style="width:100%" multiple placeholder="请选择">
-               <el-option
-                 v-for="role in roleList"
-                 :key="role.id"
-                 :label="role.name"
-                 :value="role.id">
-               </el-option>
-             </el-select>
-           </el-form-item>
-         </el-col>
-    </el-row>
+        <el-col :span="12">
+          <el-form-item label="手机" prop="mobile" :rules="[{ validator: validator.isMobile, trigger: 'blur' }]">
+            <el-input :disabled="true" v-model="inputForm.mobile" maxlength="50" placeholder=""></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item prop="officeDTO.id" :rules="[{ required: true, message: '部门不能为空', trigger: 'blur' }]"
+            label="部门">
+            <SelectTree ref="officeTree" :props="{
+              value: 'id',             // ID字段名
+              label: 'name',         // 显示名称
+              children: 'children'    // 子级字段名
+            }" :url="`/system-server/sys/office/treeData?type=2`" :value="inputForm.officeDTO.id" size="default"
+              :clearable="true" :accordion="true" :disabled="true"
+              @getValue="(value) => { inputForm.officeDTO.id = value }" />
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="岗位" prop="postIdList">
+            <el-select :disabled="true" v-model="inputForm.postIdList" style="width:100%" multiple placeholder="请选择">
+              <el-option v-for="item in postList" :key="item.id" :label="item.name" :value="item.id">
+              </el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="角色" prop="roleIdList" :rules="[{ required: true, message: '角色不能为空', trigger: 'blur' }]">
+            <el-select :disabled="true" v-model="inputForm.roleIdList" style="width:100%" multiple placeholder="请选择">
+              <el-option v-for="role in roleList" :key="role.id" :label="role.name" :value="role.id">
+              </el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+      </el-row>
       <el-divider content-position="left"><i class="el-icon-document"></i>
         执业资格证书
-        <el-button style="margin-left: 20px" type="primary" :disabled="method==='view'" @click="insertEvent()" plain>
+        <el-button style="margin-left: 20px" type="primary" :disabled="method === 'view'" @click="insertEvent()" plain>
           新增
         </el-button>
       </el-divider>
-      <el-row  :gutter="15">
-		  <el-col :span="24">
-			  <vxe-table
-				  border
-				  show-overflow
-				  show-footer
-				  ref="certTable"
-				  class="vxe-table-element"
-				  :data="inputForm.certDTOList"
-				  style="margin-left: 5em"
-				  :key="tableKey"
-				  highlight-current-row
-				  :edit-config="{trigger: 'click', mode: 'row', showStatus: false, autoClear: true}"
-				  @edit-actived="editActivedEvent"
-			  >
-				  <vxe-table-column field="type" align="center" title="证书类型" :edit-render="{name: '$select', options: $dictUtils.getDictList('sys_cert_type')}">
-					  <template v-slot:edit="scope">
-						  <vxe-select v-model="scope.row.type" @change="changeType(scope.$rowIndex)" placeholder="请选择证书类型" clearable style="width: 100%;" transfer>
-							  <vxe-option
-								  v-for="item in $dictUtils.getDictList('sys_cert_type')"
-								  :key="item.value"
-								  :label="item.label"
-								  :value="item.value">
-							  </vxe-option>
-						  </vxe-select>
-					  </template>
-				  </vxe-table-column>
-				  <vxe-table-column field="no" align="center" title="证书编号" :edit-render="{}">
-					  <template v-slot:edit="scope">
-						  <el-input v-model="scope.row.no" ></el-input>
-					  </template>
-				  </vxe-table-column>
-				  <vxe-table-column field="authorities" align="center" title="发证机关" :edit-render="{}">
-					  <template v-slot:edit="scope">
-						  <el-input v-model="scope.row.authorities" ></el-input>
-					  </template>
-				  </vxe-table-column>
-				  <vxe-table-column field="issuedDate" align="center" title="发证日期" :edit-render="{}">
-					  <template v-slot:edit="scope">
-						  <el-date-picker style="width: 100%;" v-model="scope.row.issuedDate" placeholder="发证日期" type="date"
-										  value-format="YYYY-MM-DD" transfer></el-date-picker>
-					  </template>
-				  </vxe-table-column>
-				  <vxe-table-column field="enrollDate" align="center" title="注册日期" :edit-render="{}">
-					  <template v-slot:edit="scope">
-						  <el-date-picker style="width: 100%;" v-model="scope.row.enrollDate" value-format="YYYY-MM-DD" type="date" placeholder="注册日期" clearable transfer></el-date-picker>
-					  </template>
-				  </vxe-table-column>
-				  <vxe-table-column field="expireDate" align="center" title="到期日期" :edit-render="{}">
-					  <template v-slot:edit="scope">
-						  <el-date-picker style="width: 100%;" v-model="scope.row.expireDate" value-format="YYYY-MM-DD" placeholder="到期日期" type="date" transfer></el-date-picker>
-					  </template>
-				  </vxe-table-column>
-				  <vxe-table-column field="enrollCertNo" align="center" title="注册证书编号" :edit-render="{}">
-					  <template v-slot:edit="scope">
-						  <el-input v-model="scope.row.enrollCertNo" ></el-input>
-					  </template>
-				  </vxe-table-column>
-				  <vxe-table-column field="profession" align="center" title="专业" :formatter="formatLabel" :edit-render="{}">
-					  <template v-slot:edit="scope">
-						  <vxe-select v-model="scope.row.profession" @change="changeProfession" placeholder="请选择专业" clearable style="width: 100%;" transfer>
-							  <vxe-option
-								  v-for="item in scope.row.professionList"
-								  :key="item.value"
-								  :label="item.label"
-								  :value="item.label">
-							  </vxe-option>
-						  </vxe-select>
-					  </template>
-				  </vxe-table-column>
-				  <vxe-table-column min-width="50px" field="fileLsUrl" align="center" title="文件" :edit-render="{}">
-					  <template v-slot="{row}">
-						  <img style="height: 43px" class="img" :src="row.fileLsUrl"/>
-					  </template>
-					  <template v-slot:edit="scope" >
-						  <el-upload slot="reference"
-									 class="avatar"
-									 style="height: 43px;line-height: 43px"
-									 :action="`${$http.BASE_URL}/public-modules-server/oss/file/webUpload/fileUpload?dir=sys_cert`"
-									 :on-success="(res,file)=> handleAvatarSuccess(res,file,scope)"
-									 :before-upload="beforeAvatarUpload"
-									 :show-file-list="false">
-							  <el-button type="info" slot="trigger" style="margin-right: 10px" class="avatar-uploader-table">上传</el-button>
-							  <img style="max-height: 43px;max-width: 56px" slot="tip" :readonly="true" @click="showPhoto(scope.row.fileLsUrl)" v-if="scope.row.fileLsUrl" :src="scope.row.fileLsUrl" class="el-upload-list__item-thumbnail">
-						  </el-upload>
-
-					  </template>
-				  </vxe-table-column>
-				  <vxe-table-column title="操作" width="100">
-					  <template v-slot="scope">
-						  <el-button type="danger" @click="removeEvent(scope.row,scope.$rowIndex)">删除</el-button>
-					  </template>
-				  </vxe-table-column>
-			  </vxe-table>
-		  </el-col>
+      <el-row :gutter="15">
+        <el-col :span="24">
+          <vxe-table border show-overflow show-footer ref="certTable" class="vxe-table-element"
+            :data="inputForm.certDTOList" style="margin-left: 5em" :key="tableKey" highlight-current-row
+            :row-config="{ height: 120 }"
+            :edit-config="{ trigger: 'click', mode: 'row', showStatus: false, autoClear: true }"
+            @edit-actived="editActivedEvent">
+            <vxe-table-column field="type" align="center" title="证书类型"
+              :edit-render="{ name: '$select', options: $dictUtils.getDictList('sys_cert_type') }">
+              <template v-slot:edit="scope">
+                <vxe-select v-model="scope.row.type" @change="changeType(scope.$rowIndex)" placeholder="请选择证书类型"
+                  clearable style="width: 100%;" transfer>
+                  <vxe-option v-for="item in $dictUtils.getDictList('sys_cert_type')" :key="item.value"
+                    :label="item.label" :value="item.value">
+                  </vxe-option>
+                </vxe-select>
+              </template>
+            </vxe-table-column>
+            <vxe-table-column field="no" align="center" title="证书编号" :edit-render="{}">
+              <template v-slot:edit="scope">
+                <el-input v-model="scope.row.no"></el-input>
+              </template>
+            </vxe-table-column>
+            <vxe-table-column field="authorities" align="center" title="发证机关" :edit-render="{}">
+              <template v-slot:edit="scope">
+                <el-input v-model="scope.row.authorities"></el-input>
+              </template>
+            </vxe-table-column>
+            <vxe-table-column field="issuedDate" align="center" title="发证日期" :edit-render="{}">
+              <template v-slot:edit="scope">
+                <el-date-picker style="width: 100%;" v-model="scope.row.issuedDate" placeholder="发证日期" type="date"
+                  value-format="YYYY-MM-DD" transfer></el-date-picker>
+              </template>
+            </vxe-table-column>
+            <vxe-table-column field="enrollDate" align="center" title="注册日期" :edit-render="{}">
+              <template v-slot:edit="scope">
+                <el-date-picker style="width: 100%;" v-model="scope.row.enrollDate" value-format="YYYY-MM-DD"
+                  type="date" placeholder="注册日期" clearable transfer></el-date-picker>
+              </template>
+            </vxe-table-column>
+            <vxe-table-column field="expireDate" align="center" title="到期日期" :edit-render="{}">
+              <template v-slot:edit="scope">
+                <el-date-picker style="width: 100%;" v-model="scope.row.expireDate" value-format="YYYY-MM-DD"
+                  placeholder="到期日期" type="date" transfer></el-date-picker>
+              </template>
+            </vxe-table-column>
+            <vxe-table-column field="enrollCertNo" align="center" title="注册证书编号" :edit-render="{}">
+              <template v-slot:edit="scope">
+                <el-input v-model="scope.row.enrollCertNo"></el-input>
+              </template>
+            </vxe-table-column>
+            <vxe-table-column field="profession" align="center" title="专业" :formatter="formatLabel" :edit-render="{}">
+              <template v-slot:edit="scope">
+                <vxe-select v-model="scope.row.profession" @change="changeProfession" placeholder="请选择专业" clearable
+                  style="width: 100%;" transfer>
+                  <vxe-option v-for="item in scope.row.professionList" :key="item.value" :label="item.label"
+                    :value="item.label">
+                  </vxe-option>
+                </vxe-select>
+              </template>
+            </vxe-table-column>
+            <vxe-table-column width="250px" field="fileLsUrl" align="center" title="文件" :edit-render="{}">
+              <!-- <template v-slot="{ row }">
+                <img style="height: 43px" class="img" :src="row.fileLsUrl" />
+                <AttachmentView :key="row.id" :fileList="row.certificateAttachment"></AttachmentView>
+              </template> -->
+              <template v-slot="scope">
+                <!-- <el-upload slot="reference" class="avatar" style="height: 43px;line-height: 43px"
+                  :action="`${$http.BASE_URL}/public-modules-server/oss/file/webUpload/fileUpload?dir=sys_cert`"
+                  :on-success="(res, file) => handleAvatarSuccess(res, file, scope)" :before-upload="beforeAvatarUpload"
+                  :show-file-list="false">
+                  <el-button type="info" slot="trigger" style="margin-right: 10px"
+                    class="avatar-uploader-table">上传</el-button>
+                  <img style="max-height: 43px;max-width: 56px" slot="tip" :readonly="true"
+                    @click="showPhoto(scope.row.fileLsUrl)" v-if="scope.row.fileLsUrl" :src="scope.row.fileLsUrl"
+                    class="el-upload-list__item-thumbnail">
+                </el-upload> -->
+                <AttachmentView :key="scope.row.id" :fileList="scope.row.certificateAttachment"></AttachmentView>
+              </template>
+            </vxe-table-column>
+            <vxe-table-column title="操作" width="100">
+              <template v-slot="scope">
+                <el-button type="danger" @click="removeEvent(scope.row, scope.$rowIndex)">删除</el-button>
+              </template>
+            </vxe-table-column>
+          </vxe-table>
+        </el-col>
       </el-row>
     </el-form>
-    <el-image-viewer
-      v-if="showViewer"
-      :on-close="closeViewer"
-      :url-list="[url]"
-      :zIndex="99999"
-    />
-	  <template #footer>
-		  <span class="dialog-footer">
-			  <el-button @click="visible = false" icon="el-icon-circle-close">关闭</el-button>
-			  <el-button type="primary" v-if="method != 'view'" @click="doSubmit()" icon="el-icon-circle-check" v-noMoreClick>确定</el-button>
-			</span>
-	  </template>
+    <el-image-viewer v-if="showViewer" :on-close="closeViewer" :url-list="[url]" :zIndex="99999" />
+    <template #footer>
+      <span class="dialog-footer">
+        <el-button @click="visible = false" icon="el-icon-circle-close">关闭</el-button>
+        <el-button type="primary" v-if="method != 'view'" @click="doSubmit()" icon="el-icon-circle-check"
+          v-noMoreClick>确定</el-button>
+      </span>
+    </template>
   </el-dialog>
 </template>
 
@@ -187,9 +155,10 @@ import userService from '@/api/sys/userService'
 import postService from '@/api/sys/postService'
 import roleService from '@/api/sys/roleService'
 import OSSSerive from '@/api/sys/OSSService'
+import AttachmentView from '@/views/human/enrollment/registration/components/AttachmentView.vue'
 // import ElImageViewer from 'element-ui/packages/image/src/image-viewer'
 export default {
-  data () {
+  data() {
     return {
       visible: false,
       loading: false,
@@ -225,26 +194,27 @@ export default {
         remarks: '', // 备注
         certDTOList: [] // 资格证书列表
       },
-		testList: [],
+      testList: [],
       professionList: [],
       tableKey: '',
       url: '',
       showViewer: false
     }
   },
-	ossService: null,
-  created () {
-	  this.ossService = new OSSSerive()
+  ossService: null,
+  created() {
+    this.ossService = new OSSSerive()
   },
-  mounted () {
+  mounted() {
   },
   components: {
     SelectTree,
+    AttachmentView
     // ElImageViewer
   },
   methods: {
-    init (method, id) {
-    	this.testList = []
+    init(method, id) {
+      this.testList = []
       this.method = method
       this.inputForm.id = id
       if (method === 'add') {
@@ -258,24 +228,24 @@ export default {
       this.$nextTick(() => {
         this.$refs.inputForm.resetFields()
         this.inputForm.oldLoinName = ''
-        roleService.list({current: 1, size: -1}).then((data) => {
+        roleService.list({ current: 1, size: -1 }).then((data) => {
           this.roleList = data.records
         })
-        postService.list({current: 1, size: -1}).then((data) => {
+        postService.list({ current: 1, size: -1 }).then((data) => {
           this.postList = data.records
         })
 
         if (method === 'edit' || method === 'view') { // 修改或者查看
           this.loading = true
-			this.ossService.queryById(this.inputForm.id).then((data) => {
-				console.log('data', data)
-				this.inputForm = this.recover(this.inputForm, data)
-				this.inputForm.oldLoginName = this.inputForm.loginName
-				if (this.commonJS.isEmpty(this.inputForm.certDTOList)) {
-					this.inputForm.certDTOList = []
-				}
-				this.loading = false
-			})
+          this.ossService.queryById(this.inputForm.id).then((data) => {
+            console.log('data', data)
+            this.inputForm = this.recover(this.inputForm, data)
+            this.inputForm.oldLoginName = this.inputForm.loginName
+            if (this.commonJS.isEmpty(this.inputForm.certDTOList)) {
+              this.inputForm.certDTOList = []
+            }
+            this.loading = false
+          })
           // userService.queryById(this.inputForm.id).then((data) => {
           // 	console.log('data', data)
           //   this.inputForm = this.recover(this.inputForm, data)
@@ -288,7 +258,7 @@ export default {
         }
       })
     },
-    beforeAvatarUpload (file) {
+    beforeAvatarUpload(file) {
       const isJPG = file.type.indexOf('image/') >= 0
       const isLt2M = file.size / 1024 / 100 <= 1
 
@@ -302,72 +272,72 @@ export default {
       }
       return true
     },
-      // 表单提交
-    doSubmit () {
+    // 表单提交
+    doSubmit() {
       this.$refs['inputForm'].validate((valid) => {
         if (valid) {
           this.loading = true
-			console.log('this.inputForm.certDTOList', this.inputForm.certDTOList)
+          console.log('this.inputForm.certDTOList', this.inputForm.certDTOList)
           this.inputForm.certDTOList.forEach((item, index) => {
-          	if(item.row){
-				this.testList.push(item.row)
-			}else{
-				this.testList.push(item)
-			}
-          	console.log('item',item.type)
-			  if(item.row){
-			  	if (this.commonJS.isEmpty(item.row.type)) {
-				  this.$message.error('执业资格证书中第' + (index + 1) + '条数据的“证书类型”未填写')
-				  this.loading = false
-				  throw new Error()
-			  }
-				  if (this.commonJS.isEmpty(item.row.no)) {
-					  this.$message.error('执业资格证书中第' + (index + 1) + '条数据的“证书编号”未填写')
-					  this.loading = false
-					  throw new Error()
-				  }
-				  if (this.commonJS.isNotEmpty(item.row.issuedDate)) {
-					  item.issuedDate = this.moment(item.row.issuedDate).format('YYYY-MM-DD')
-				  }
-				  if (this.commonJS.isNotEmpty(item.row.enrollDate)) {
-					  item.enrollDate = this.moment(item.row.enrollDate).format('YYYY-MM-DD')
-				  }
-				  if (this.commonJS.isNotEmpty(item.row.expireDate)) {
-					  item.expireDate = this.moment(item.row.expireDate).format('YYYY-MM-DD')
-				  } else {
-					  this.$message.error('执业资格证书中第' + (index + 1) + '条数据的“到期日期”未填写')
-					  this.loading = false
-					  throw new Error()
-				  }
-			  }else{
-				  if (this.commonJS.isEmpty(item.type)) {
-					  this.$message.error('执业资格证书中第' + (index + 1) + '条数据的“证书类型”未填写')
-					  this.loading = false
-					  throw new Error()
-				  }
-				  if (this.commonJS.isEmpty(item.no)) {
-					  this.$message.error('执业资格证书中第' + (index + 1) + '条数据的“证书编号”未填写')
-					  this.loading = false
-					  throw new Error()
-				  }
-				  if (this.commonJS.isNotEmpty(item.issuedDate)) {
-					  item.issuedDate = this.moment(item.issuedDate).format('YYYY-MM-DD')
-				  }
-				  if (this.commonJS.isNotEmpty(item.enrollDate)) {
-					  item.enrollDate = this.moment(item.enrollDate).format('YYYY-MM-DD')
-				  }
-				  if (this.commonJS.isNotEmpty(item.expireDate)) {
-					  item.expireDate = this.moment(item.expireDate).format('YYYY-MM-DD')
-				  } else {
-					  this.$message.error('执业资格证书中第' + (index + 1) + '条数据的“到期日期”未填写')
-					  this.loading = false
-					  throw new Error()
-				  }
-			  }
+            if (item.row) {
+              this.testList.push(item.row)
+            } else {
+              this.testList.push(item)
+            }
+            console.log('item', item.type)
+            if (item.row) {
+              if (this.commonJS.isEmpty(item.row.type)) {
+                this.$message.error('执业资格证书中第' + (index + 1) + '条数据的“证书类型”未填写')
+                this.loading = false
+                throw new Error()
+              }
+              if (this.commonJS.isEmpty(item.row.no)) {
+                this.$message.error('执业资格证书中第' + (index + 1) + '条数据的“证书编号”未填写')
+                this.loading = false
+                throw new Error()
+              }
+              if (this.commonJS.isNotEmpty(item.row.issuedDate)) {
+                item.issuedDate = this.moment(item.row.issuedDate).format('YYYY-MM-DD')
+              }
+              if (this.commonJS.isNotEmpty(item.row.enrollDate)) {
+                item.enrollDate = this.moment(item.row.enrollDate).format('YYYY-MM-DD')
+              }
+              if (this.commonJS.isNotEmpty(item.row.expireDate)) {
+                item.expireDate = this.moment(item.row.expireDate).format('YYYY-MM-DD')
+              } else {
+                this.$message.error('执业资格证书中第' + (index + 1) + '条数据的“到期日期”未填写')
+                this.loading = false
+                throw new Error()
+              }
+            } else {
+              if (this.commonJS.isEmpty(item.type)) {
+                this.$message.error('执业资格证书中第' + (index + 1) + '条数据的“证书类型”未填写')
+                this.loading = false
+                throw new Error()
+              }
+              if (this.commonJS.isEmpty(item.no)) {
+                this.$message.error('执业资格证书中第' + (index + 1) + '条数据的“证书编号”未填写')
+                this.loading = false
+                throw new Error()
+              }
+              if (this.commonJS.isNotEmpty(item.issuedDate)) {
+                item.issuedDate = this.moment(item.issuedDate).format('YYYY-MM-DD')
+              }
+              if (this.commonJS.isNotEmpty(item.enrollDate)) {
+                item.enrollDate = this.moment(item.enrollDate).format('YYYY-MM-DD')
+              }
+              if (this.commonJS.isNotEmpty(item.expireDate)) {
+                item.expireDate = this.moment(item.expireDate).format('YYYY-MM-DD')
+              } else {
+                this.$message.error('执业资格证书中第' + (index + 1) + '条数据的“到期日期”未填写')
+                this.loading = false
+                throw new Error()
+              }
+            }
 
           })
-			console.log('this.testList', this.testList)
-			this.inputForm.certDTOList = this.testList
+          console.log('this.testList', this.testList)
+          this.inputForm.certDTOList = this.testList
           userService.saveCertList(this.inputForm).then((data) => {
             this.loading = false
             this.visible = false
@@ -380,50 +350,49 @@ export default {
       })
     },
     // 新增
-    insertEvent () {
+    insertEvent() {
       this.$refs.certTable.insert().then((data) => {
         this.inputForm.certDTOList.push(data)
       })
     },
     // 删除
-    removeEvent (row, rowIndex) {
+    removeEvent(row, rowIndex) {
       this.$refs.certTable.remove(row)
       this.inputForm.certDTOList.splice(rowIndex, 1)
     },
-    changeType (index) {
-    	console.log('this.inputForm.certDTOList[index].type',this.inputForm.certDTOList[index].type)
-      this.inputForm.certDTOList[index].row.profession = ''
-      if (this.inputForm.certDTOList[index].row.type === '1' || this.inputForm.certDTOList[index].row.type === '2') {
-        this.inputForm.certDTOList[index].row.professionList = this.$dictUtils.getDictList('sys_cert_profession_build')
-      } else if (this.inputForm.certDTOList[index].row.type === '3' || this.inputForm.certDTOList[index].row.type === '4') {
-        this.inputForm.certDTOList[index].row.professionList = this.$dictUtils.getDictList('sys_cert_profession_cost')
-      } else if (this.inputForm.certDTOList[index].row.type === '5') {
-        this.inputForm.certDTOList[index].row.professionList = this.$dictUtils.getDictList('sys_cert_profession_supervision')
-      } else if (this.inputForm.certDTOList[index].row.type === '6') {
-        this.inputForm.certDTOList[index].row.professionList = this.$dictUtils.getDictList('sys_cert_profession_accounting')
+    changeType(index) {
+      this.inputForm.certDTOList[index].profession = ''
+      if (this.inputForm.certDTOList[index].type === '1' || this.inputForm.certDTOList[index].type === '2') {
+        this.inputForm.certDTOList[index].professionList = this.$dictUtils.getDictList('sys_cert_profession_build')
+      } else if (this.inputForm.certDTOList[index].type === '3' || this.inputForm.certDTOList[index].type === '4') {
+        this.inputForm.certDTOList[index].professionList = this.$dictUtils.getDictList('sys_cert_profession_cost')
+      } else if (this.inputForm.certDTOList[index].type === '5') {
+        this.inputForm.certDTOList[index].professionList = this.$dictUtils.getDictList('sys_cert_profession_supervision')
+      } else if (this.inputForm.certDTOList[index].type === '6') {
+        this.inputForm.certDTOList[index].professionList = this.$dictUtils.getDictList('sys_cert_profession_accounting')
       }
     },
-    changeProfession () {
+    changeProfession() {
       this.$forceUpdate()
     },
-    handleAvatarSuccess (res, file, scope) {
+    handleAvatarSuccess(res, file, scope) {
       this.inputForm.certDTOList[scope.$rowIndex].fileUrl = res.url
       this.inputForm.certDTOList[scope.$rowIndex].fileLsUrl = res.lsUrl
       this.$forceUpdate()
     },
-    showPhoto (fileUrl) {
+    showPhoto(fileUrl) {
       this.url = fileUrl
       this.showViewer = true
     },
     // 关闭查看器
-    closeViewer () {
+    closeViewer() {
       this.url = ''
       this.showViewer = false
-		this.testList = []
+      this.testList = []
     },
     // 格式化显示名称
     // 单元格或行在没有变成可编辑前、单元格或行在编辑状态结束后 都会执行此方法
-    formatLabel ({ cellValue, row }) {
+    formatLabel({ cellValue, row }) {
       if (row.type === '1' || row.type === '2') {
         row.professionList = this.$dictUtils.getDictList('sys_cert_profession_build')
       } else if (row.type === '3' || row.type === '4') {
@@ -443,7 +412,7 @@ export default {
       return ''
     },
     // 在点击行之后,行数据变为可编辑时,执行此方法
-    editActivedEvent ({row}) {
+    editActivedEvent({ row }) {
       if (this.commonJS.isNotEmpty(row.professionList)) {
         let dict = row.professionList.find(item => item.value === row.profession || item.label === row.profession)
         if (dict) {
@@ -455,14 +424,16 @@ export default {
 }
 </script>
 <style>
-.avatar{
+.avatar {
   height: 100px;
 }
+
 .el-divider__text {
-	font-weight: bold;
-	font-size: 16px;
+  font-weight: bold;
+  font-size: 16px;
 }
-.vxe-select--panel{
-	z-index: 3000 !important;
+
+.vxe-select--panel {
+  z-index: 3000 !important;
 }
 </style>

Різницю між файлами не показано, бо вона завелика
+ 544 - 234
src/views/sys/user/UserInfo.vue


+ 172 - 0
src/views/sys/user/components/AttachmentView.vue

@@ -0,0 +1,172 @@
+<!--文件上传组件-->
+<template>
+    <div :key="uploadKey" style="width: 100%;">
+        <div style="height: calc(100% - 80px);margin-top: 10px">
+            <div class="file-item" v-for="(item, index) in newFiles">
+                <div class="slt">
+                    <template v-if="ifName(item) === 'img'">
+                        <el-image ref="imageViewer" :hide-on-click-modal="true"
+                            style="width: 30px; height: 30px;padding-top: 4px; margin-right: 8px;" :src="item.lsUrl"
+                            :preview-src-list="[item.lsUrl]" :preview-teleported="true"></el-image>
+                        <!-- <el-icon size="28" style="cursor: pointer;">
+                            <Picture @click="showFile(item)" />
+                        </el-icon> -->
+                    </template>
+                    <template v-else>
+                        <el-icon size="28" style="cursor: pointer;">
+                            <Document @click="showFile(item)" />
+                        </el-icon>
+                    </template>
+                </div>
+
+                <el-tooltip effect="dark" :content="item.name" placement="top">
+                    <div class="filename">
+                        {{ item.name }}
+                    </div>
+                </el-tooltip>
+                <div>
+                    <el-divider direction="vertical"></el-divider>
+                </div>
+                <div class="file-btn" key="index">
+
+                    <el-tooltip effect="dark" content="预览" placement="top">
+                        <el-icon size="20" style="margin-right: 10px;cursor: pointer;">
+                            <View @click="showFile(item)" />
+                        </el-icon>
+                    </el-tooltip>
+
+                    <el-tooltip effect="dark" content="下载" placement="top">
+                        <el-icon size="20" style="margin-right: 10px;cursor: pointer;">
+                            <Download @click="toHref(item)" />
+                        </el-icon>
+                    </el-tooltip>
+
+                </div>
+            </div>
+
+        </div>
+        <el-image-viewer v-if="showViewer" @close="closeViewer" :url-list="[url]" :zIndex="9999"></el-image-viewer>
+    </div>
+</template>
+
+<script>
+import OSSSerivce, {
+    openWindowOnUrl,
+    toHref
+} from '@/api/sys/OSSService'
+export default {
+    props: {
+        fileList: {
+            type: Array,
+            default: () => []
+        }
+    },
+    data() {
+        return {
+            uploadKey: '',
+            url: '',
+            newFiles: [],
+            showViewer: false,
+            ossService: null,
+            delFlag: false,
+            createBy: '',
+            loading: false,
+        }
+    },
+    watch: {
+    },
+    created() {
+        this.ossService = new OSSSerivce()
+        this.fileList.forEach(item => {
+            this.ossService.getFileSizeByUrl(item.url).then((data) => {
+                item.lsUrl = data.url
+                item.size = data.size
+                this.newFiles.push(item)
+            })
+        })
+    },
+    mounted() {
+        window.onPreview = this.onPreview
+    },
+    methods: {
+        showFile(row) {
+            if (this.ifName(row) == "img") {
+                this.ossService.getTemporaryUrl(row.url).then((data) => {
+                    this.onPreview(data)
+                })
+            } else {
+
+                openWindowOnUrl(row)
+            }
+        },
+        onPreview(url) {
+            this.url = url
+            this.showViewer = true
+        },
+        // 关闭查看器
+        closeViewer() {
+            this.url = ''
+            this.showViewer = false
+        },
+        toHref(row) {
+            toHref(row)
+        },
+        ifName(row) {
+            if (this.commonJS.isEmpty(row.name)) {
+                row.name = '---'
+                return "file"
+            }
+            let suffix = row.name.substring(row.name.lastIndexOf('.') + 1)
+            if (suffix === 'jpg' || suffix === 'png' || suffix === 'gif' || suffix === 'bmp' || suffix === 'jpeg') {
+                return "img"
+            } else {
+                return "file"
+            }
+        },
+
+    }
+}
+</script>
+<style>
+.el-divider__text {
+    font-size: 16px;
+    font-weight: bold;
+}
+
+.file-item {
+    height: 40px;
+    display: flex;
+    width: 250px;
+    align-items: center;
+    border-radius: 10px;
+    background-color: #f7f9fa;
+    padding: 0 10px;
+    margin-bottom: 10px;
+
+    .slt {
+        height: 100%;
+        width: 40px;
+        display: flex;
+        align-items: center;
+    }
+
+    .filename {
+        flex: 1;
+        overflow: hidden;
+        white-space: nowrap;
+        text-overflow: ellipsis;
+        cursor: pointer;
+        line-height: 40px;
+    }
+
+    .file-btn {
+        display: flex;
+        align-items: center;
+    }
+
+    .el-icon:hover {
+        color: #2d8cf0;
+
+    }
+}
+</style>

+ 276 - 0
src/views/sys/user/components/CertificateInfo.vue

@@ -0,0 +1,276 @@
+<template xmlns:v-slot="http://www.w3.org/1999/XSL/Transform">
+	<div>
+		<el-dialog :title="title" :close-on-click-modal="false" draggable width="1200px" height="500px" @close="close"
+			append-to-body v-model="visible">
+			<el-form :model="inputForm" ref="inputForm" v-loading="loading" :rules="rules"
+				:class="method === 'view' ? 'readonly' : ''"
+				:disabled="status === 'audit' || status === 'taskFormDetail' || method === 'view'" label-width="100px"
+				@submit.native.prevent>
+				<el-row :gutter="26">
+					<el-col :span="12">
+						<el-form-item label="证书类型" prop="type">
+							<el-select @change="changeType" size="default" v-model="inputForm.type" placeholder="请选择证书"
+								style="width: 100%;">
+								<el-option v-for="item in $dictUtils.getDictList('sys_cert_type')" :key="item.value"
+									:label="item.label" :value="item.value">
+								</el-option>
+							</el-select>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="证书编号" prop="no">
+							<el-input v-model="inputForm.no" placeholder="请输入证书编号"></el-input>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="发证机关" prop="authorities">
+							<el-input v-model="inputForm.authorities" placeholder="请输入发证机关"></el-input>
+						</el-form-item>
+					</el-col>
+					<el-col :span="12">
+						<el-form-item label="发证日期" prop="issuedDate">
+							<el-date-picker v-model="inputForm.issuedDate" type="date" placeholder="请选择发证日期"
+								style="width: 100%;">
+							</el-date-picker>
+						</el-form-item>
+					</el-col>
+					<el-col :span="12">
+						<el-form-item label="注册日期" prop="enrollDate">
+							<el-date-picker v-model="inputForm.enrollDate" type="date" placeholder="请选择注册日期"
+								style="width: 100%;">
+							</el-date-picker>
+						</el-form-item>
+					</el-col>
+					<el-col :span="12">
+						<el-form-item label="到期日期" prop="expireDate">
+							<el-date-picker v-model="inputForm.expireDate" type="date" placeholder="请选择到期日期"
+								style="width: 100%;">
+							</el-date-picker>
+						</el-form-item>
+					</el-col>
+					<el-col :span="12">
+						<el-form-item label="注册证书编号" prop="enrollCertNo">
+							<el-input v-model="inputForm.enrollCertNo" placeholder="请输入注册证书编号"></el-input>
+						</el-form-item>
+					</el-col>
+					<el-col :span="12">
+						<el-form-item label="专业" prop="profession">
+							<el-select size="default" v-model="inputForm.profession" placeholder="请选择专业"
+								style="width: 100%;">
+								<el-option v-for="item in inputForm.professionList" :key="item.value"
+									:label="item.label" :value="item.value">
+								</el-option>
+							</el-select>
+						</el-form-item>
+					</el-col>
+					<el-col :span="24">
+						<el-form-item label="附件" prop="certificateAttachment">
+							<UpLoadComponent ref="upLoadComponent"></UpLoadComponent>
+						</el-form-item>
+					</el-col>
+				</el-row>
+			</el-form>
+			<template #footer>
+				<span class="dialog-footer">
+					<el-button @click="close()" icon="el-icon-circle-close">关闭</el-button>
+					<el-button v-if="method === 'edit' || method == 'add'" type="primary" icon="el-icon-circle-check"
+						@click="doSubmit()">确定</el-button>
+				</span>
+			</template>
+		</el-dialog>
+	</div>
+</template>
+
+<script>
+import UpLoadComponent from '@/views/common/UpLoadComponentCardStyle'
+import enrollmentRegistrationService from '@/api/human/enrollment/EnrollmentRegistrationService'
+export default {
+	props: {
+		businessId: {
+			type: String,
+			default: ''
+		},
+		formReadOnly: {
+			type: Boolean,
+			default: false
+		},
+		status: {
+			type: String,
+			default: ''
+		}
+	},
+	data() {
+		return {
+			disabled: false,
+			title: '',
+			method: '',
+			visible: false,
+			loading: false,
+			inputForm: {
+				id: "",
+				enrollmentRegistrationId: '',
+				type: '',          // 证书类型
+				no: '',        // 证书编号
+				authorities: '',         // 发证机构
+				issuedDate: '',                // 获得日期
+				enrollDate: "",//注册日期
+				expireDate: "",//到期日期
+				enrollCertNo: '',               // 注册证书编号
+				profession: "",
+				certificateAttachment: []     // 证书附件
+			},
+			keyWatch: '',
+			rules: {
+				type: [
+					{ required: true, message: '请输入证书名称', trigger: 'blur' },
+				],
+				no: [
+					{ required: true, message: '请输入证书编号', trigger: 'blur' },
+				],
+
+				issuedDate: [
+					{ type: 'date', required: true, message: '请选择获得日期', trigger: 'change' }
+				],
+
+			}
+		}
+	},
+	created() {
+
+	},
+	components: {
+		UpLoadComponent
+	},
+	computed: {
+		bus: {
+			get() {
+				return this.businessId
+			},
+			set(val) {
+				this.businessId = val
+			}
+		},
+		name() {
+			return this.$store.state.user.name
+		},
+		userId() {
+			return this.$store.state.user.id
+		}
+	},
+	watch: {
+		'keyWatch': {
+			handler(newVal) {
+				if (this.commonJS.isNotEmpty(this.bus)) {
+					this.init('', this.bus)
+				} else {
+					this.$nextTick(() => {
+						this.$refs.inputForm.resetFields()
+					})
+				}
+			}
+		},
+		'loading': {
+			handler(newVal) {
+				this.$emit('changeLoading', newVal)
+			}
+		}
+	},
+	methods: {
+		changeType(value) {
+			if (value === '1' || value === '2') {
+				this.inputForm.professionList = this.$dictUtils.getDictList('sys_cert_profession_build')
+			} else if (value === '3' || value === '4') {
+				this.inputForm.professionList = this.$dictUtils.getDictList('sys_cert_profession_cost')
+			} else if (value === '5') {
+				this.inputForm.professionList = this.$dictUtils.getDictList('sys_cert_profession_supervision')
+			} else if (value === '6') {
+				this.inputForm.professionList = this.$dictUtils.getDictList('sys_cert_profession_accounting')
+			}
+		},
+		getKeyWatch(keyWatch) {
+			this.keyWatch = keyWatch
+		},
+		init(method, row, reId) {
+			this.method = method
+			this.inputForm = {
+				id: "",
+				enrollmentRegistrationId: '',
+				type: '',          // 证书名称
+				no: '',        // 证书编号
+				authorities: '',         // 发证机构
+				issuedDate: '',                // 获得日期
+				enrollDate: "",//注册日期
+				expireDate: "",//到期日期
+				enrollCertNo: '',               // 注册证书编号
+				profession: "",
+				certificateAttachment: []     // 证书附件
+			}
+			if (method === 'add') {
+				this.title = `新增资质证书`
+			} else if (method === 'edit') {
+				this.title = '修改资质证书'
+			} else if (method === 'view') {
+				this.title = '查看资质证书'
+			}
+			this.inputForm.userId = reId
+			this.visible = true
+			this.loading = true
+			this.$nextTick(() => {
+				if (row && row.id) {
+					this.inputForm = this.recover(this.inputForm, row)
+					this.inputForm = JSON.parse(JSON.stringify(this.inputForm))
+					if (!this.inputForm.certificateAttachment) {
+						this.inputForm.certificateAttachment = []
+					}
+					this.changeType(this.inputForm.type)
+					this.$refs.upLoadComponent.newUpload(method, this.inputForm.certificateAttachment, 'certificate')
+					this.loading = false
+				} else {
+					this.inputForm.id = this.generateFallbackId()
+					this.$refs.upLoadComponent.newUpload(method, this.inputForm.certificateAttachment, 'certificate')
+					this.loading = false
+				}
+			})
+		},
+		// 表单提交
+		doSubmit() {
+			if (this.$refs.upLoadComponent.checkProgress()) {
+				return
+			}
+
+			this.$refs['inputForm'].validate((valid) => {
+				if (valid) {
+					this.inputForm.enrollDate = new Date(this.inputForm.enrollDate).getTime(); // 转为时间戳
+					this.inputForm.expireDate = new Date(this.inputForm.expireDate).getTime(); // 转为时间戳
+					this.inputForm.issuedDate = new Date(this.inputForm.issuedDate).getTime(); // 转为时间戳
+
+					this.inputForm.certificateAttachment = this.$refs.upLoadComponent.getDataList()
+					this.$emit("addCertificateInfo", JSON.parse(JSON.stringify(this.inputForm)))
+					this.close()
+				}
+			})
+		},
+		close() {
+			this.$refs.upLoadComponent.clearUpload()
+			this.$refs.inputForm.resetFields()
+			this.visible = false
+		},
+		generateFallbackId() {
+			const timestamp = Date.now(); // 13位
+			const randomPart = Math.floor(Math.random() * 1e6); // 6位随机数
+			return String(timestamp) + String(randomPart);  // 返回 19 位字符串
+		},
+	}
+}
+</script>
+
+
+<style lang="less">
+.fileUpload {
+	.el-form-item__content {
+		width: 100%;
+	}
+}
+</style>

+ 409 - 0
src/views/sys/user/components/EducationInfo.vue

@@ -0,0 +1,409 @@
+<template xmlns:v-slot="http://www.w3.org/1999/XSL/Transform">
+	<div>
+		<el-dialog :title="title" :close-on-click-modal="false" draggable width="1200px" height="500px" @close="close"
+			append-to-body v-model="visible">
+			<el-form :model="inputForm" ref="inputForm" v-loading="loading" :rules="rules"
+				:class="method === 'view' ? 'readonly' : ''"
+				:disabled="status === 'audit' || status === 'taskFormDetail' || method === 'view'" label-width="100px"
+				@submit.native.prevent>
+				<el-row :gutter="26">
+					<el-col :span="12">
+						<el-form-item label="开始时间" prop="startDate">
+
+							<el-date-picker v-model="inputForm.startDate" type="date" placeholder="选择开始时间"
+								style="width: 100%;"></el-date-picker>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="结束时间" prop="endDate">
+							<el-date-picker v-model="inputForm.endDate" type="date" placeholder="选择结束时间"
+								style="width: 100%;"></el-date-picker>
+						</el-form-item>
+					</el-col>
+					<el-col :span="12">
+						<el-form-item label="毕业院校" prop="graduatedFrom">
+							<el-input v-model="inputForm.graduatedFrom" placeholder="请输入毕业院校"></el-input>
+						</el-form-item>
+					</el-col>
+
+					<!-- <el-col :span="12">
+						<el-form-item label="其他毕业院校" prop="otherGraduatedFrom">
+							<el-input v-model="inputForm.otherGraduatedFrom" placeholder="如无可不填"></el-input>
+						</el-form-item>
+					</el-col> -->
+
+					<el-col :span="12">
+						<el-form-item label="专业" prop="speciality">
+							<el-input v-model="inputForm.speciality" placeholder="请输入专业名称"></el-input>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="学历" prop="education">
+							<el-select size="default" v-model="inputForm.education" placeholder="请选择学历"
+								style="width: 100%;">
+								<el-option v-for="item in $dictUtils.getDictList('education')" :key="item.value"
+									:label="item.label" :value="item.value">
+								</el-option>
+							</el-select>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="学位" prop="degree">
+							<el-select size="default" v-model="inputForm.degree" placeholder="请选择学位"
+								style="width: 100%;">
+								<el-option v-for="item in $dictUtils.getDictList('degree')" :key="item.value"
+									:label="item.label" :value="item.value">
+								</el-option>
+							</el-select>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="是否最高学历" prop="isHighestEducation">
+
+							<el-radio-group v-model="inputForm.isHighestEducation">
+								<el-radio label="1">是</el-radio>
+								<el-radio label="0">否</el-radio>
+							</el-radio-group>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="是否最高学位" prop="isHighestDegree">
+
+							<el-radio-group v-model="inputForm.isHighestDegree">
+								<el-radio label="1">是</el-radio>
+								<el-radio label="0">否</el-radio>
+							</el-radio-group>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="学习形式" prop="learnForms">
+							<el-select size="default" v-model="inputForm.learnForms" placeholder="请选择学习形式"
+								style="width: 100%;">
+								<el-option v-for="item in $dictUtils.getDictList('learn_form')" :key="item.value"
+									:label="item.label" :value="item.value">
+								</el-option>
+							</el-select>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="毕业类型" prop="graduationType">
+							<el-select size="default" v-model="inputForm.graduationType" placeholder="请选择毕业类型"
+								style="width: 100%;">
+								<el-option v-for="item in $dictUtils.getDictList('graduation_type')" :key="item.value"
+									:label="item.label" :value="item.value">
+								</el-option>
+							</el-select>
+						</el-form-item>
+					</el-col>
+
+					<!-- <el-col :span="12"> -->
+					<!-- <el-form-item label="培养方式" prop="cultureMethod">
+							<el-select v-model="inputForm.cultureMethod" placeholder="请选择培养方式">
+								<el-option label="统招" value="统招"></el-option>
+								<el-option label="委培" value="委培"></el-option>
+								<el-option label="自费" value="自费"></el-option>
+								<el-option label="统招全日制" value="1"></el-option>
+								<el-option label="国家开放大学" value="2"></el-option>
+								<el-option label="成人高考" value="3"></el-option>
+								<el-option label="网络远程教育" value="4"></el-option>
+								<el-option label="自考" value="5"></el-option>
+							</el-select>
+						</el-form-item> -->
+					<!-- </el-col> -->
+
+					<el-col :span="12">
+						<el-form-item label="学历附件" prop="educationFile" class="fileUpload">
+							<UpLoadComponent ref="educationUploadComponent"></UpLoadComponent>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="学位附件" prop="degreeFile">
+							<UpLoadComponent ref="degreeUploadComponent"></UpLoadComponent>
+						</el-form-item>
+					</el-col>
+
+					<!-- <el-col :span="24">
+						<el-form-item label="专业描述" prop="specialityDesc">
+							<el-input type="textarea" v-model="inputForm.specialityDesc" placeholder="请输入专业描述"
+								:rows="4"></el-input>
+						</el-form-item>
+					</el-col> -->
+				</el-row>
+			</el-form>
+			<template #footer>
+				<span class="dialog-footer">
+					<el-button @click="close()" icon="el-icon-circle-close">关闭</el-button>
+					<el-button v-if="method === 'edit' || method == 'add'" type="primary" icon="el-icon-circle-check"
+						@click="doSubmit()">确定</el-button>
+				</span>
+			</template>
+		</el-dialog>
+	</div>
+</template>
+
+<script>
+import UpLoadComponent from '@/views/common/UpLoadComponentCardStyle'
+import enrollmentRegistrationService from '@/api/human/enrollment/EnrollmentRegistrationService'
+import OSSSerivce, {
+	httpRequest,
+	fileName,
+	toHref,
+} from '@/api/sys/OSSService'
+export default {
+	props: {
+		businessId: {
+			type: String,
+			default: ''
+		},
+		formReadOnly: {
+			type: Boolean,
+			default: false
+		},
+		status: {
+			type: String,
+			default: ''
+		}
+	},
+	data() {
+		return {
+			disabled: false,
+			title: '',
+			method: '',
+			visible: false,
+			loading: false,
+			inputForm: {
+				id: "",
+				graduatedFrom: "",
+				otherGraduatedFrom: "",
+				startDate: "",
+				endDate: "",
+				speciality: "",//专业
+				education: "",//学历
+				degree: "",//学位
+				isHighestEducation: "1",
+				isHighestDegree: "1",
+				learnForms: "",//学习形式
+				graduationType: "",//毕业类型
+				cultureMethod: "",//培养方式
+				educationFile: [],
+				degreeFile: [],
+				specialityDesc: "",
+				enrollmentRegistrationId: ""
+			},
+			keyWatch: '',
+			rules: {
+				graduatedFrom: [
+					{ required: true, message: '毕业院校不能为空', trigger: 'blur' }
+				],
+				startDate: [
+					{ required: true, message: '开始时间不能为空', trigger: 'change' }
+				],
+				endDate: [
+					{ required: true, message: '结束时间不能为空', trigger: 'change' },
+					{
+						validator: (rule, value, callback) => {
+							const start = this.inputForm.startDate;
+							if (!start || !value) return callback();
+							if (new Date(start).getTime() > new Date(value).getTime()) {
+								callback(new Error('结束时间必须晚于开始时间'));
+							} else {
+								callback();
+							}
+						},
+						trigger: 'change'
+					}
+				],
+				speciality: [
+					{ required: true, message: '专业不能为空', trigger: 'blur' }
+				],
+				education: [
+					{ required: true, message: '请选择学历', trigger: 'change' }
+				],
+				degree: [
+					{ required: true, message: '请选择学位', trigger: 'change' }
+				],
+				learnForms: [
+					{ required: true, message: '请选择学习形式', trigger: 'change' }
+				],
+				graduationType: [
+					{ required: true, message: '请选择毕业类型', trigger: 'change' }
+				],
+				cultureMethod: [
+					{ required: true, message: '请选择培养方式', trigger: 'change' }
+				],
+				// educationFile: [
+				// 	{ required: true, message: '请上传学历附件', trigger: 'change' }
+				// ],
+				// degreeFile: [
+				// 	{ required: true, message: '请上传学位附件', trigger: 'change' }
+				// ]
+			}
+		}
+	},
+	created() {
+		this.ossService = new OSSSerivce()
+	},
+	components: {
+		UpLoadComponent
+	},
+	computed: {
+		bus: {
+			get() {
+				return this.businessId
+			},
+			set(val) {
+				this.businessId = val
+			}
+		},
+		name() {
+			return this.$store.state.user.name
+		},
+		userId() {
+			return this.$store.state.user.id
+		}
+	},
+	watch: {
+		'keyWatch': {
+			handler(newVal) {
+				if (this.commonJS.isNotEmpty(this.bus)) {
+					this.init('', this.bus)
+				} else {
+					this.$nextTick(() => {
+						this.$refs.inputForm.resetFields()
+					})
+				}
+			}
+		},
+		'loading': {
+			handler(newVal) {
+				this.$emit('changeLoading', newVal)
+			}
+		}
+	},
+	methods: {
+		getKeyWatch(keyWatch) {
+			this.keyWatch = keyWatch
+		},
+		init(method, row, reId) {
+			this.method = method
+			this.inputForm = {
+				id: "",
+				graduatedFrom: "",
+				otherGraduatedFrom: "",
+				startDate: "",
+				endDate: "",
+				speciality: "",//专业
+				education: "",//学历
+				degree: "",//学位
+				isHighestEducation: "1",
+				isHighestDegree: "1",
+				learnForms: "",//学习形式
+				graduationType: "",//毕业类型
+				cultureMethod: "",//培养方式
+				educationFile: [],
+				degreeFile: [],
+				specialityDesc: "",
+				enrollmentRegistrationId: ""
+			}
+			this.currentUserId = ""
+			if (method === 'add') {
+				this.title = `新增教育经历`
+			} else if (method === 'edit') {
+				this.title = '修改教育经历'
+			} else if (method === 'view') {
+				this.title = '查看教育经历'
+			}
+			this.inputForm.userId = reId
+			this.visible = true
+			this.loading = true
+			this.$nextTick(() => {
+				if (row && row.id) {
+					console.log("修改");
+					console.log(this.recover(this.inputForm, row));
+					console.log(this.recover(this.inputForm, row));
+					console.log(this.recover(this.inputForm, row));
+					console.log(this.recover(this.inputForm, row));
+					console.log(this.recover(this.inputForm, row));
+					// enrollmentRegistrationService.findEduInfoById({
+					// 	id: this.inputForm.id
+					// }).then(res => {
+					this.inputForm = this.recover(this.inputForm, row)
+					this.inputForm = JSON.parse(JSON.stringify(this.inputForm))
+					if (!this.inputForm.educationFile) {
+						this.inputForm.educationFile = []
+					}
+					if (!this.inputForm.degreeFile) {
+						this.inputForm.degreeFile = []
+					}
+					this.$refs.educationUploadComponent.newUpload(method, this.inputForm.educationFile, 'education')
+					this.$refs.degreeUploadComponent.newUpload(method, this.inputForm.degreeFile, 'degree')
+					this.loading = false
+					// })
+				} else {
+					console.log("新增");
+					this.inputForm.id = this.generateFallbackId()
+					this.$refs.educationUploadComponent.newUpload(method, this.inputForm.educationFile, 'education')
+					this.$refs.degreeUploadComponent.newUpload(method, this.inputForm.degreeFile, 'degree')
+					this.loading = false
+					console.log(this.inputForm.id);
+					console.log(this.inputForm.id);
+					console.log(this.inputForm.id);
+					console.log(this.inputForm.id);
+					console.log(this.inputForm.id);
+				}
+			})
+		},
+		// 表单提交
+		doSubmit() {
+			if (this.$refs.educationUploadComponent.checkProgress() || this.$refs.degreeUploadComponent.checkProgress()) {
+				return
+			}
+
+			this.$refs['inputForm'].validate((valid) => {
+				if (valid) {
+					this.inputForm.startDate = new Date(this.inputForm.startDate).getTime(); // 转为时间戳
+					this.inputForm.endDate = new Date(this.inputForm.endDate).getTime(); // 转为时间戳
+					this.inputForm.educationFile = this.$refs.educationUploadComponent.getDataList()
+					this.inputForm.degreeFile = this.$refs.degreeUploadComponent.getDataList()
+					this.$emit("addEduInfo", JSON.parse(JSON.stringify(this.inputForm)))
+					this.close()
+					// enrollmentRegistrationService.saveEduInfo(this.inputForm).then(res => {
+					// 	this.close()
+					// 	this.$message.success(res)
+					// 	this.$emit("addEduInfo", this.inputForm.enrollmentRegistrationId)
+					// 	this.loading = false
+					// })
+				}
+			})
+		},
+		generateFallbackId() {
+			const timestamp = Date.now(); // 13位
+			const randomPart = Math.floor(Math.random() * 1e6); // 6位随机数
+			return String(timestamp) + String(randomPart);  // 返回 19 位字符串
+		},
+		close() {
+			this.$refs.educationUploadComponent.clearUpload()
+			this.$refs.degreeUploadComponent.clearUpload()
+			this.$refs.inputForm.resetFields()
+			this.visible = false
+		},
+	}
+}
+</script>
+
+
+<style lang="less">
+.fileUpload {
+	.el-form-item__content {
+		width: 100%;
+	}
+}
+</style>

+ 226 - 0
src/views/sys/user/components/FamilyInfo.vue

@@ -0,0 +1,226 @@
+<template xmlns:v-slot="http://www.w3.org/1999/XSL/Transform">
+	<div>
+		<el-dialog :title="title" :close-on-click-modal="false" draggable width="1200px" height="500px" @close="close"
+			append-to-body v-model="visible">
+			<el-form :model="inputForm" ref="inputForm" v-loading="loading" :rules="rules"
+				:class="method === 'view' ? 'readonly' : ''"
+				:disabled="status === 'audit' || status === 'taskFormDetail' || method === 'view'" label-width="100px"
+				@submit.native.prevent>
+				<el-row :gutter="26">
+					<el-col :span="12">
+						<el-form-item label="成员姓名" prop="name">
+							<el-input v-model="inputForm.name" placeholder="请输入成员姓名"></el-input>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="出生日期" prop="birthDate">
+							<el-date-picker v-model="inputForm.birthDate" type="date" placeholder="请选择出生日期"
+								style="width: 100%;"></el-date-picker>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="与本人关系" prop="relation">
+							<el-input v-model="inputForm.relation" placeholder="请输入与本人关系"></el-input>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="性别" prop="gender">
+							<el-radio-group v-model="inputForm.gender">
+								<el-radio v-for="item in $dictUtils.getDictList('sex')" :label="item.value + ''">{{
+									item.label }}</el-radio>
+							</el-radio-group>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="手机号码" prop="mobile">
+							<el-input v-model="inputForm.mobile" placeholder="请输入手机号码"></el-input>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="工作单位" prop="workUnit">
+							<el-input v-model="inputForm.workUnit" placeholder="请输入工作单位"></el-input>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="联系电话" prop="contactNumber">
+							<el-input v-model="inputForm.contactNumber" placeholder="请输入联系电话"></el-input>
+						</el-form-item>
+					</el-col>
+
+
+				</el-row>
+			</el-form>
+			<template #footer>
+				<span class="dialog-footer">
+					<el-button @click="close()" icon="el-icon-circle-close">关闭</el-button>
+					<el-button v-if="method === 'edit' || method == 'add'" type="primary" icon="el-icon-circle-check"
+						@click="doSubmit()">确定</el-button>
+				</span>
+			</template>
+		</el-dialog>
+	</div>
+</template>
+
+<script>
+import enrollmentRegistrationService from '@/api/human/enrollment/EnrollmentRegistrationService'
+export default {
+	props: {
+		businessId: {
+			type: String,
+			default: ''
+		},
+		formReadOnly: {
+			type: Boolean,
+			default: false
+		},
+		status: {
+			type: String,
+			default: ''
+		}
+	},
+	data() {
+		return {
+			disabled: false,
+			title: '',
+			method: '',
+			visible: false,
+			loading: false,
+			inputForm: {
+				id: "",
+				enrollmentRegistrationId: '',
+				name: '',            // 成员姓名
+				birthDate: '',       // 出生日期
+				relation: '',        // 与本人关系名称
+				gender: '1',          // 性别
+				mobile: '',          // 手机号码
+				workUnit: '',        // 工作单位
+				contactNumber: ''    // 联系电话
+			},
+			keyWatch: '',
+			rules: {
+				name: [
+					{ required: true, message: '请输入成员姓名', trigger: 'blur' },
+				],
+				relation: [
+					{ required: true, message: '请输入与本人关系', trigger: 'blur' },
+				],
+				contactNumber: [
+					{ required: true, message: '请输入联系电话', trigger: 'blur' },
+				]
+			}
+		}
+	},
+	created() {
+	},
+	components: {
+	},
+	computed: {
+		bus: {
+			get() {
+				return this.businessId
+			},
+			set(val) {
+				this.businessId = val
+			}
+		},
+		name() {
+			return this.$store.state.user.name
+		},
+		userId() {
+			return this.$store.state.user.id
+		}
+	},
+	watch: {
+		'keyWatch': {
+			handler(newVal) {
+				if (this.commonJS.isNotEmpty(this.bus)) {
+					this.init('', this.bus)
+				} else {
+					this.$nextTick(() => {
+						this.$refs.inputForm.resetFields()
+					})
+				}
+			}
+		},
+		'loading': {
+			handler(newVal) {
+				this.$emit('changeLoading', newVal)
+			}
+		}
+	},
+	methods: {
+		getKeyWatch(keyWatch) {
+			this.keyWatch = keyWatch
+		},
+		init(method, row, reId) {
+			this.method = method
+			this.inputForm = {
+				id: "",
+				enrollmentRegistrationId: '',
+				name: '',            // 成员姓名
+				birthDate: '',       // 出生日期(格式:YYYY-MM-DD)
+				relation: '',        // 与本人关系名称
+				gender: '1',          // 性别(如:男、女)
+				mobile: '',          // 手机号码
+				workUnit: '',        // 工作单位
+				contactNumber: ''    // 联系电话
+			}
+			if (method === 'add') {
+				this.title = `新增家庭成员`
+			} else if (method === 'edit') {
+				this.title = '修改家庭成员'
+			} else if (method === 'view') {
+				this.title = '查看家庭成员'
+			}
+			this.inputForm.userId = reId
+			this.visible = true
+			this.loading = true
+			this.$nextTick(() => {
+				if (row && row.id) {
+
+					this.inputForm = this.recover(this.inputForm, res)
+					this.inputForm = JSON.parse(JSON.stringify(this.inputForm))
+					this.loading = false
+				} else {
+					this.inputForm.id = this.generateFallbackId()
+					this.loading = false
+				}
+			})
+		},
+		generateFallbackId() {
+			const timestamp = Date.now(); // 13位
+			const randomPart = Math.floor(Math.random() * 1e6); // 6位随机数
+			return String(timestamp) + String(randomPart);  // 返回 19 位字符串
+		},
+		// 表单提交
+		doSubmit() {
+			this.$refs['inputForm'].validate((valid) => {
+				if (valid) {
+					this.inputForm.birthDate = new Date(this.inputForm.birthDate).getTime(); // 转为时间戳
+					this.$emit("addFamilyInfo", JSON.parse(JSON.stringify(this.inputForm)))
+					this.close()
+				}
+			})
+		},
+		close() {
+			this.$refs.inputForm.resetFields()
+			this.visible = false
+		},
+	}
+}
+</script>
+
+
+<style lang="less">
+.fileUpload {
+	.el-form-item__content {
+		width: 100%;
+	}
+}
+</style>

+ 227 - 0
src/views/sys/user/components/LanguageInfo.vue

@@ -0,0 +1,227 @@
+<template xmlns:v-slot="http://www.w3.org/1999/XSL/Transform">
+	<div>
+		<el-dialog :title="title" :close-on-click-modal="false" draggable width="1200px" height="500px" @close="close"
+			append-to-body v-model="visible">
+			<el-form :model="inputForm" ref="inputForm" v-loading="loading" :rules="rules"
+				:class="method === 'view' ? 'readonly' : ''"
+				:disabled="status === 'audit' || status === 'taskFormDetail' || method === 'view'" label-width="100px"
+				@submit.native.prevent>
+				<el-row :gutter="26">
+					<el-col :span="12">
+						<el-form-item label="语言" prop="language">
+							<el-input v-model="inputForm.language" placeholder="请输入语言"></el-input>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="是否母语" prop="isNative">
+							<el-radio-group v-model="inputForm.isNative">
+								<el-radio label="1">是</el-radio>
+								<el-radio label="0">否</el-radio>
+							</el-radio-group>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="掌握程度" prop="proficiency">
+							<el-input v-model="inputForm.proficiency" placeholder="请输入掌握程度"></el-input>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="书写能力" prop="writingAbility">
+							<el-input v-model="inputForm.writingAbility" placeholder="请输入书写能力"></el-input>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="阅读能力" prop="readingAbility">
+							<el-input v-model="inputForm.readingAbility" placeholder="请输入阅读能力"></el-input>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="口语能力" prop="speakingAbility">
+							<el-input v-model="inputForm.speakingAbility" placeholder="请输入口语能力"></el-input>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="24">
+						<el-form-item label="附件" prop="certificateAttachment">
+							<UpLoadComponent ref="upLoadComponent"></UpLoadComponent>
+						</el-form-item>
+					</el-col>
+				</el-row>
+			</el-form>
+			<template #footer>
+				<span class="dialog-footer">
+					<el-button @click="close()" icon="el-icon-circle-close">关闭</el-button>
+					<el-button v-if="method === 'edit' || method == 'add'" type="primary" icon="el-icon-circle-check"
+						@click="doSubmit()">确定</el-button>
+				</span>
+			</template>
+		</el-dialog>
+	</div>
+</template>
+
+<script>
+import UpLoadComponent from '@/views/common/UpLoadComponentCardStyle'
+import enrollmentRegistrationService from '@/api/human/enrollment/EnrollmentRegistrationService'
+export default {
+	props: {
+		businessId: {
+			type: String,
+			default: ''
+		},
+		formReadOnly: {
+			type: Boolean,
+			default: false
+		},
+		status: {
+			type: String,
+			default: ''
+		}
+	},
+	data() {
+		return {
+			disabled: false,
+			title: '',
+			method: '',
+			visible: false,
+			loading: false,
+			inputForm: {
+				id: "",
+				language: '',              // 语言
+				isNative: "1",           // 是否母语
+				proficiency: '',           // 掌握程度
+				writingAbility: '',        // 书写能力
+				readingAbility: '',        // 阅读能力
+				speakingAbility: '',        // 口语能力
+				files: []
+			},
+			keyWatch: '',
+			rules: {
+				language: [
+					{ required: true, message: '请输入语言', trigger: 'blur' }
+				],
+			}
+		}
+	},
+	created() {
+
+	},
+	components: {
+		UpLoadComponent
+	},
+	computed: {
+		bus: {
+			get() {
+				return this.businessId
+			},
+			set(val) {
+				this.businessId = val
+			}
+		},
+		name() {
+			return this.$store.state.user.name
+		},
+		userId() {
+			return this.$store.state.user.id
+		}
+	},
+	watch: {
+		'keyWatch': {
+			handler(newVal) {
+				if (this.commonJS.isNotEmpty(this.bus)) {
+					this.init('', this.bus)
+				} else {
+					this.$nextTick(() => {
+						this.$refs.inputForm.resetFields()
+					})
+				}
+			}
+		},
+		'loading': {
+			handler(newVal) {
+				this.$emit('changeLoading', newVal)
+			}
+		}
+	},
+	methods: {
+		getKeyWatch(keyWatch) {
+			this.keyWatch = keyWatch
+		},
+		init(method, row, reId) {
+			this.method = method
+			this.inputForm = {
+				id: "",
+				language: '',              // 语言
+				isNative: "1",           // 是否母语
+				proficiency: '',           // 掌握程度
+				writingAbility: '',        // 书写能力
+				readingAbility: '',        // 阅读能力
+				speakingAbility: '',        // 口语能力
+				files: []
+			}
+			if (method === 'add') {
+				this.title = `新增语言能力`
+			} else if (method === 'edit') {
+				this.title = '修改语言能力'
+			} else if (method === 'view') {
+				this.title = '查看语言能力'
+			}
+			this.inputForm.userId = reId
+			this.visible = true
+			this.loading = true
+			this.$nextTick(() => {
+				if (row && row.id) {
+
+					this.inputForm = this.recover(this.inputForm, row)
+					this.inputForm = JSON.parse(JSON.stringify(this.inputForm))
+					if (!this.inputForm.files) {
+						this.inputForm.files = []
+					}
+					this.$refs.upLoadComponent.newUpload(method, this.inputForm.files, 'language')
+					this.loading = false
+				} else {
+					this.inputForm.id = this.generateFallbackId()
+					this.$refs.upLoadComponent.newUpload(method, this.inputForm.files, 'language')
+					this.loading = false
+				}
+			})
+		},
+		generateFallbackId() {
+			const timestamp = Date.now(); // 13位
+			const randomPart = Math.floor(Math.random() * 1e6); // 6位随机数
+			return String(timestamp) + String(randomPart);  // 返回 19 位字符串
+		},
+		// 表单提交
+		doSubmit() {
+			if (this.$refs.upLoadComponent.checkProgress()) {
+				return
+			}
+			this.$refs['inputForm'].validate((valid) => {
+				if (valid) {
+					this.inputForm.files = this.$refs.upLoadComponent.getDataList()
+					this.$emit("addLanguageInfo", JSON.parse(JSON.stringify(this.inputForm)))
+					this.close()
+				}
+			})
+		},
+		close() {
+			this.$refs.upLoadComponent.clearUpload()
+			this.$refs.inputForm.resetFields()
+			this.visible = false
+		},
+	}
+}
+</script>
+
+
+<style lang="less">
+.fileUpload {
+	.el-form-item__content {
+		width: 100%;
+	}
+}
+</style>

+ 210 - 0
src/views/sys/user/components/RewardInfo.vue

@@ -0,0 +1,210 @@
+<template xmlns:v-slot="http://www.w3.org/1999/XSL/Transform">
+	<div>
+		<el-dialog :title="title" :close-on-click-modal="false" draggable width="1200px" height="500px" @close="close"
+			append-to-body v-model="visible">
+			<el-form :model="inputForm" ref="inputForm" v-loading="loading" :rules="rules"
+				:class="method === 'view' ? 'readonly' : ''"
+				:disabled="status === 'audit' || status === 'taskFormDetail' || method === 'view'" label-width="100px"
+				@submit.native.prevent>
+				<el-row :gutter="26">
+					<el-col :span="12">
+						<el-form-item label="奖项" prop="name">
+							<el-input v-model="inputForm.name" placeholder="请输入奖项"></el-input>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="获奖日期" prop="rewardDate">
+							<el-date-picker v-model="inputForm.rewardDate" type="date" placeholder="请选择获奖日期"
+								style="width: 100%;">
+							</el-date-picker>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="24">
+						<el-form-item label="简述" prop="description">
+							<el-input type="textarea" v-model="inputForm.description" placeholder="请输入简述">
+							</el-input>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="24">
+						<el-form-item label="附件" prop="files">
+							<UpLoadComponent ref="upLoadComponent"></UpLoadComponent>
+						</el-form-item>
+					</el-col>
+				</el-row>
+			</el-form>
+			<template #footer>
+				<span class="dialog-footer">
+					<el-button @click="close()" icon="el-icon-circle-close">关闭</el-button>
+					<el-button v-if="method === 'edit' || method == 'add'" type="primary" icon="el-icon-circle-check"
+						@click="doSubmit()">确定</el-button>
+				</span>
+			</template>
+		</el-dialog>
+	</div>
+</template>
+
+<script>
+import UpLoadComponent from '@/views/common/UpLoadComponentCardStyle'
+import enrollmentRegistrationService from '@/api/human/enrollment/EnrollmentRegistrationService'
+export default {
+	props: {
+		businessId: {
+			type: String,
+			default: ''
+		},
+		formReadOnly: {
+			type: Boolean,
+			default: false
+		},
+		status: {
+			type: String,
+			default: ''
+		}
+	},
+	data() {
+		return {
+			disabled: false,
+			title: '',
+			method: '',
+			visible: false,
+			loading: false,
+			inputForm: {
+				id: "",
+				enrollmentRegistrationId: '',
+				name: "",       // 奖项
+				rewardDate: "",       // 获奖日期
+				description: "", // 简述
+				files: []
+			},
+			keyWatch: '',
+			rules: {
+				name: [
+					{ required: true, message: '请输入语言', trigger: 'blur' }
+				],
+				rewardDate: [
+					{ required: true, message: '请输入获奖日期', trigger: 'blur' }
+				],
+			}
+		}
+	},
+	created() {
+
+	},
+	components: {
+		UpLoadComponent
+	},
+	computed: {
+		bus: {
+			get() {
+				return this.businessId
+			},
+			set(val) {
+				this.businessId = val
+			}
+		},
+		name() {
+			return this.$store.state.user.name
+		},
+		userId() {
+			return this.$store.state.user.id
+		}
+	},
+	watch: {
+		'keyWatch': {
+			handler(newVal) {
+				if (this.commonJS.isNotEmpty(this.bus)) {
+					this.init('', this.bus)
+				} else {
+					this.$nextTick(() => {
+						this.$refs.inputForm.resetFields()
+					})
+				}
+			}
+		},
+		'loading': {
+			handler(newVal) {
+				this.$emit('changeLoading', newVal)
+			}
+		}
+	},
+	methods: {
+		getKeyWatch(keyWatch) {
+			this.keyWatch = keyWatch
+		},
+		init(method, row, reId) {
+			this.method = method
+			this.inputForm = {
+				id: "",
+				enrollmentRegistrationId: '',
+				name: "",       // 奖项
+				rewardDate: "",       // 获奖日期
+				description: "", // 简述
+				files: []
+			}
+			if (method === 'add') {
+				this.title = `新增语言能力`
+			} else if (method === 'edit') {
+				this.title = '修改语言能力'
+			} else if (method === 'view') {
+				this.title = '查看语言能力'
+			}
+			this.inputForm.userId = reId
+			this.visible = true
+			this.loading = true
+			this.$nextTick(() => {
+				if (row && row.id) {
+
+					this.inputForm = this.recover(this.inputForm, row)
+					this.inputForm = JSON.parse(JSON.stringify(this.inputForm))
+					if (!this.inputForm.files) {
+						this.inputForm.files = []
+					}
+					this.$refs.upLoadComponent.newUpload(method, this.inputForm.files, 'reward')
+					this.loading = false
+				} else {
+					this.inputForm.id = this.generateFallbackId()
+					this.$refs.upLoadComponent.newUpload(method, this.inputForm.files, 'reward')
+					this.loading = false
+				}
+			})
+		},
+		generateFallbackId() {
+			const timestamp = Date.now(); // 13位
+			const randomPart = Math.floor(Math.random() * 1e6); // 6位随机数
+			return String(timestamp) + String(randomPart);  // 返回 19 位字符串
+		},
+		// 表单提交
+		doSubmit() {
+			if (this.$refs.upLoadComponent.checkProgress()) {
+				return
+			}
+
+			this.$refs['inputForm'].validate((valid) => {
+				if (valid) {
+					this.inputForm.rewardDate = new Date(this.inputForm.rewardDate).getTime(); // 转为时间戳
+					this.inputForm.files = this.$refs.upLoadComponent.getDataList()
+					this.$emit("addRewardInfo", JSON.parse(JSON.stringify(this.inputForm)))
+					this.close()
+				}
+			})
+		},
+		close() {
+			this.$refs.upLoadComponent.clearUpload()
+			this.$refs.inputForm.resetFields()
+			this.visible = false
+		},
+	}
+}
+</script>
+
+
+<style lang="less">
+.fileUpload {
+	.el-form-item__content {
+		width: 100%;
+	}
+}
+</style>

+ 206 - 0
src/views/sys/user/components/SkillInfo.vue

@@ -0,0 +1,206 @@
+<template xmlns:v-slot="http://www.w3.org/1999/XSL/Transform">
+	<div>
+		<el-dialog :title="title" :close-on-click-modal="false" draggable width="1200px" height="500px" @close="close"
+			append-to-body v-model="visible">
+			<el-form :model="inputForm" ref="inputForm" v-loading="loading" :rules="rules"
+				:class="method === 'view' ? 'readonly' : ''"
+				:disabled="status === 'audit' || status === 'taskFormDetail' || method === 'view'" label-width="100px"
+				@submit.native.prevent>
+				<el-row :gutter="26">
+					<el-col :span="12">
+						<el-form-item label="名称" prop="name">
+							<el-input v-model="inputForm.name" placeholder="请输入名称"></el-input>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="掌握程度" prop="proficiency">
+							<el-input v-model="inputForm.proficiency" placeholder="请输入掌握程度"></el-input>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="种类" prop="category">
+							<el-input v-model="inputForm.category" placeholder="请输入种类"></el-input>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="使用时间(月)" prop="usageTime">
+							<el-input v-model="inputForm.usageTime" placeholder="请输入使用时间(月)"></el-input>
+						</el-form-item>
+					</el-col>
+					<el-col :span="24">
+						<el-form-item label="附件" prop="certificateAttachment">
+							<UpLoadComponent ref="upLoadComponent"></UpLoadComponent>
+						</el-form-item>
+					</el-col>
+				</el-row>
+			</el-form>
+			<template #footer>
+				<span class="dialog-footer">
+					<el-button @click="close()" icon="el-icon-circle-close">关闭</el-button>
+					<el-button v-if="method === 'edit' || method == 'add'" type="primary" icon="el-icon-circle-check"
+						@click="doSubmit()">确定</el-button>
+				</span>
+			</template>
+		</el-dialog>
+	</div>
+</template>
+
+<script>
+import UpLoadComponent from '@/views/common/UpLoadComponentCardStyle'
+import enrollmentRegistrationService from '@/api/human/enrollment/EnrollmentRegistrationService'
+export default {
+	props: {
+		businessId: {
+			type: String,
+			default: ''
+		},
+		formReadOnly: {
+			type: Boolean,
+			default: false
+		},
+		status: {
+			type: String,
+			default: ''
+		}
+	},
+	data() {
+		return {
+			disabled: false,
+			title: '',
+			method: '',
+			visible: false,
+			loading: false,
+			inputForm: {
+				id: "",
+				name: '',              // 名称
+				proficiency: '',       // 掌握程度
+				category: '',          // 种类
+				usageTime: '',          // 使用时间
+				files: []
+			},
+			keyWatch: '',
+			rules: {
+				name: [
+					{ required: true, message: '请输入名称', trigger: 'blur' }
+				],
+			}
+		}
+	},
+	created() {
+
+	},
+	components: {
+		UpLoadComponent
+	},
+	computed: {
+		bus: {
+			get() {
+				return this.businessId
+			},
+			set(val) {
+				this.businessId = val
+			}
+		},
+		name() {
+			return this.$store.state.user.name
+		},
+		userId() {
+			return this.$store.state.user.id
+		}
+	},
+	watch: {
+		'keyWatch': {
+			handler(newVal) {
+				if (this.commonJS.isNotEmpty(this.bus)) {
+					this.init('', this.bus)
+				} else {
+					this.$nextTick(() => {
+						this.$refs.inputForm.resetFields()
+					})
+				}
+			}
+		},
+		'loading': {
+			handler(newVal) {
+				this.$emit('changeLoading', newVal)
+			}
+		}
+	},
+	methods: {
+		getKeyWatch(keyWatch) {
+			this.keyWatch = keyWatch
+		},
+		init(method, row, reId) {
+			this.method = method
+			this.inputForm = {
+				id: "",
+				name: '',              // 名称
+				proficiency: '',       // 掌握程度
+				category: '',          // 种类
+				usageTime: '',          // 使用时间
+				files: []
+			}
+			if (method === 'add') {
+				this.title = `新增专业技能`
+			} else if (method === 'edit') {
+				this.title = '修改专业技能'
+			} else if (method === 'view') {
+				this.title = '查看专业技能'
+			}
+			this.inputForm.userId = reId
+			this.visible = true
+			this.loading = true
+			this.$nextTick(() => {
+				if (row && row.id) {
+					this.inputForm = this.recover(this.inputForm, row)
+					this.inputForm = JSON.parse(JSON.stringify(this.inputForm))
+					if (!this.inputForm.files) {
+						this.inputForm.files = []
+					}
+					this.$refs.upLoadComponent.newUpload(method, this.inputForm.files, 'skill')
+					this.loading = false
+				} else {
+					this.inputForm.id = this.generateFallbackId()
+					this.$refs.upLoadComponent.newUpload(method, this.inputForm.files, 'skill')
+					this.loading = false
+				}
+			})
+		},
+		// 表单提交
+		doSubmit() {
+			if (this.$refs.upLoadComponent.checkProgress()) {
+				return
+			}
+			this.$refs['inputForm'].validate((valid) => {
+				if (valid) {
+					this.inputForm.files = this.$refs.upLoadComponent.getDataList()
+					this.$emit("addSkillInfo", JSON.parse(JSON.stringify(this.inputForm)))
+					this.close()
+				}
+			})
+		},
+		close() {
+			this.$refs.upLoadComponent.clearUpload()
+			this.$refs.inputForm.resetFields()
+			this.visible = false
+		},
+		generateFallbackId() {
+			const timestamp = Date.now(); // 13位
+			const randomPart = Math.floor(Math.random() * 1e6); // 6位随机数
+			return String(timestamp) + String(randomPart);  // 返回 19 位字符串
+		},
+	}
+}
+</script>
+
+
+<style lang="less">
+.fileUpload {
+	.el-form-item__content {
+		width: 100%;
+	}
+}
+</style>

+ 204 - 0
src/views/sys/user/components/TrainingInfo.vue

@@ -0,0 +1,204 @@
+<template xmlns:v-slot="http://www.w3.org/1999/XSL/Transform">
+	<div>
+		<el-dialog :title="title" :close-on-click-modal="false" draggable width="1200px" height="500px" @close="close"
+			append-to-body v-model="visible">
+			<el-form :model="inputForm" ref="inputForm" v-loading="loading" :rules="rules"
+				:class="method === 'view' ? 'readonly' : ''"
+				:disabled="status === 'audit' || status === 'taskFormDetail' || method === 'view'" label-width="100px"
+				@submit.native.prevent>
+				<el-row :gutter="26">
+					<el-col :span="12">
+						<el-form-item label="名称" prop="name">
+							<el-input v-model="inputForm.name" placeholder="请输入单位名称"></el-input>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="培训机构" prop="trainingInstitution">
+							<el-input v-model="inputForm.trainingInstitution" placeholder="请输入培训机构"></el-input>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="培训成绩" prop="trainingResult">
+							<el-input v-model="inputForm.trainingResult" placeholder="请输入培训成绩"></el-input>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="附件" prop="files">
+							<UpLoadComponent ref="upLoadComponent"></UpLoadComponent>
+						</el-form-item>
+					</el-col>
+
+				</el-row>
+			</el-form>
+			<template #footer>
+				<span class="dialog-footer">
+					<el-button @click="close()" icon="el-icon-circle-close">关闭</el-button>
+					<el-button v-if="method === 'edit' || method == 'add'" type="primary" icon="el-icon-circle-check"
+						@click="doSubmit()">确定</el-button>
+				</span>
+			</template>
+		</el-dialog>
+	</div>
+</template>
+
+<script>
+import UpLoadComponent from '@/views/common/UpLoadComponentCardStyle'
+import enrollmentRegistrationService from '@/api/human/enrollment/EnrollmentRegistrationService'
+export default {
+	props: {
+		businessId: {
+			type: String,
+			default: ''
+		},
+		formReadOnly: {
+			type: Boolean,
+			default: false
+		},
+		status: {
+			type: String,
+			default: ''
+		}
+	},
+	data() {
+		return {
+			disabled: false,
+			title: '',
+			method: '',
+			visible: false,
+			loading: false,
+			inputForm: {
+				id: "",
+				name: "",
+				trainingInstitution: "",
+				trainingResult: "",
+				files: []
+			},
+			keyWatch: '',
+			rules: {
+				name: [
+					{ required: true, message: '请输入名称', trigger: 'blur' }
+				],
+				trainingInstitution: [
+					{ required: true, message: '请输入培训机构', trigger: 'blur' }
+				],
+
+			}
+		}
+	},
+	created() {
+
+	},
+	components: {
+		UpLoadComponent
+	},
+	computed: {
+		bus: {
+			get() {
+				return this.businessId
+			},
+			set(val) {
+				this.businessId = val
+			}
+		},
+		name() {
+			return this.$store.state.user.name
+		},
+		userId() {
+			return this.$store.state.user.id
+		}
+	},
+	watch: {
+		'keyWatch': {
+			handler(newVal) {
+				if (this.commonJS.isNotEmpty(this.bus)) {
+					this.init('', this.bus)
+				} else {
+					this.$nextTick(() => {
+						this.$refs.inputForm.resetFields()
+					})
+				}
+			}
+		},
+		'loading': {
+			handler(newVal) {
+				this.$emit('changeLoading', newVal)
+			}
+		}
+	},
+	methods: {
+		getKeyWatch(keyWatch) {
+			this.keyWatch = keyWatch
+		},
+		init(method, row, reId) {
+			this.method = method
+			this.inputForm = {
+				id: "",
+				name: "",
+				trainingInstitution: "",
+				trainingResult: "",
+				files: []
+			}
+			if (method === 'add') {
+				this.title = `新增培训经历`
+			} else if (method === 'edit') {
+				this.title = '修改培训经历'
+			} else if (method === 'view') {
+				this.title = '查看培训经历'
+			}
+			this.inputForm.userId = reId
+			this.visible = true
+			this.loading = true
+			this.$nextTick(() => {
+				if (row && row.id) {
+					this.inputForm = this.recover(this.inputForm, row)
+					this.inputForm = JSON.parse(JSON.stringify(this.inputForm))
+					if (!this.inputForm.files) {
+						this.inputForm.files = []
+					}
+					this.$refs.upLoadComponent.newUpload(method, this.inputForm.files, 'training')
+					this.loading = false
+				} else {
+					this.inputForm.id = this.generateFallbackId()
+					this.$refs.upLoadComponent.newUpload(method, this.inputForm.files, 'training')
+					this.loading = false
+				}
+			})
+		},
+		// 表单提交
+		doSubmit() {
+			if (this.$refs.upLoadComponent.checkProgress()) {
+				return
+			}
+			this.$refs['inputForm'].validate((valid) => {
+				if (valid) {
+					this.inputForm.files = this.$refs.upLoadComponent.getDataList()
+					this.$emit("addTrainingInfo", JSON.parse(JSON.stringify(this.inputForm)))
+					this.close()
+				}
+			})
+		},
+		close() {
+			this.$refs.upLoadComponent.clearUpload()
+			this.$refs.inputForm.resetFields()
+			this.visible = false
+		},
+		generateFallbackId() {
+			const timestamp = Date.now(); // 13位
+			const randomPart = Math.floor(Math.random() * 1e6); // 6位随机数
+			return String(timestamp) + String(randomPart);  // 返回 19 位字符串
+		},
+	}
+}
+</script>
+
+
+<style lang="less">
+.fileUpload {
+	.el-form-item__content {
+		width: 100%;
+	}
+}
+</style>

+ 244 - 0
src/views/sys/user/components/WorkInfo.vue

@@ -0,0 +1,244 @@
+<template xmlns:v-slot="http://www.w3.org/1999/XSL/Transform">
+	<div>
+		<el-dialog :title="title" :close-on-click-modal="false" draggable width="1200px" height="500px" @close="close"
+			append-to-body v-model="visible">
+			<el-form :model="inputForm" ref="inputForm" v-loading="loading" :rules="rules"
+				:class="method === 'view' ? 'readonly' : ''"
+				:disabled="status === 'audit' || status === 'taskFormDetail' || method === 'view'" label-width="100px"
+				@submit.native.prevent>
+				<el-row :gutter="26">
+					<el-col :span="12">
+						<el-form-item label="单位名称" prop="companyName">
+							<el-input v-model="inputForm.companyName" placeholder="请输入单位名称"></el-input>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="职务" prop="position">
+							<el-input v-model="inputForm.position" placeholder="请输入职务"></el-input>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="开始时间" prop="startDate">
+
+							<el-date-picker v-model="inputForm.startDate" type="date" placeholder="选择开始时间"
+								style="width: 100%;"></el-date-picker>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="结束时间" prop="endDate">
+							<el-date-picker v-model="inputForm.endDate" type="date" placeholder="选择结束时间"
+								style="width: 100%;"></el-date-picker>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="证明人" prop="certifier">
+							<el-input v-model="inputForm.certifier" placeholder=""></el-input>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="是否本单位工作经历" prop="isCurrentCompanyExperience">
+							<el-radio-group v-model="inputForm.isCurrentCompanyExperience"
+								@change="handleChangeIsCurrentCompanyExperience">
+								<el-radio label="1">是</el-radio>
+								<el-radio label="0">否</el-radio>
+							</el-radio-group>
+						</el-form-item>
+					</el-col>
+
+				</el-row>
+			</el-form>
+			<template #footer>
+				<span class="dialog-footer">
+					<el-button @click="close()" icon="el-icon-circle-close">关闭</el-button>
+					<el-button v-if="method === 'edit' || method == 'add'" type="primary" icon="el-icon-circle-check"
+						@click="doSubmit()">确定</el-button>
+				</span>
+			</template>
+		</el-dialog>
+	</div>
+</template>
+
+<script>
+import enrollmentRegistrationService from '@/api/human/enrollment/EnrollmentRegistrationService'
+export default {
+	props: {
+		businessId: {
+			type: String,
+			default: ''
+		},
+		formReadOnly: {
+			type: Boolean,
+			default: false
+		},
+		status: {
+			type: String,
+			default: ''
+		}
+	},
+	data() {
+		return {
+			disabled: false,
+			title: '',
+			method: '',
+			visible: false,
+			loading: false,
+			inputForm: {
+				id: "",
+				enrollmentRegistrationId: '',
+				companyName: '',
+				position: '',
+				startDate: '',
+				endDate: '',
+				certifier: '',
+				isCurrentCompanyExperience: "1"
+			},
+			keyWatch: '',
+			rules: {
+				companyName: [
+					{ required: true, message: '请输入单位名称', trigger: 'blur' }
+				],
+				position: [
+					{ required: true, message: '请输入职务', trigger: 'blur' }
+				],
+				startDate: [
+					{ required: true, message: '请选择开始时间', trigger: 'change' },
+				],
+				endDate: [],
+				isCurrentCompanyExperience: [
+					{ required: true, message: '请选择是否本单位经历', trigger: 'change' },
+				]
+			}
+		}
+	},
+	created() {
+	},
+	components: {
+	},
+	computed: {
+		bus: {
+			get() {
+				return this.businessId
+			},
+			set(val) {
+				this.businessId = val
+			}
+		},
+		name() {
+			return this.$store.state.user.name
+		},
+		userId() {
+			return this.$store.state.user.id
+		}
+	},
+	watch: {
+		'keyWatch': {
+			handler(newVal) {
+				if (this.commonJS.isNotEmpty(this.bus)) {
+					this.init('', this.bus)
+				} else {
+					this.$nextTick(() => {
+						this.$refs.inputForm.resetFields()
+					})
+				}
+			}
+		},
+		'loading': {
+			handler(newVal) {
+				this.$emit('changeLoading', newVal)
+			}
+		}
+	},
+	methods: {
+		getKeyWatch(keyWatch) {
+			this.keyWatch = keyWatch
+		},
+		init(method, row, reId) {
+			this.method = method
+			this.inputForm = {
+				id: "",
+				enrollmentRegistrationId: '',
+				companyName: '',
+				position: '',
+				startDate: '',
+				endDate: '',
+				certifier: '',
+				isCurrentCompanyExperience: "1"
+			}
+			if (method === 'add') {
+				this.title = `新增工作经历`
+			} else if (method === 'edit') {
+				this.title = '修改工作经历'
+			} else if (method === 'view') {
+				this.title = '查看工作经历'
+			}
+			this.inputForm.userId = reId
+			this.visible = true
+			this.loading = true
+			this.$nextTick(() => {
+				if (row && row.id) {
+					this.inputForm = this.recover(this.inputForm, row)
+					this.inputForm = JSON.parse(JSON.stringify(this.inputForm))
+					this.loading = false
+				} else {
+					this.inputForm.id = this.generateFallbackId()
+					this.loading = false
+				}
+			})
+		},
+		generateFallbackId() {
+			const timestamp = Date.now(); // 13位
+			const randomPart = Math.floor(Math.random() * 1e6); // 6位随机数
+			return String(timestamp) + String(randomPart);  // 返回 19 位字符串
+		},
+		// 表单提交
+		doSubmit() {
+			this.$refs['inputForm'].validate((valid) => {
+				if (valid) {
+					this.inputForm.startDate = new Date(this.inputForm.startDate).getTime(); // 转为时间戳
+					this.inputForm.endDate = new Date(this.inputForm.endDate).getTime(); // 转为时间戳
+					this.$emit("addWorkInfo", JSON.parse(JSON.stringify(this.inputForm)))
+					this.close()
+				}
+			})
+		},
+		close() {
+			this.$refs.inputForm.resetFields()
+			this.visible = false
+		},
+		handleChangeIsCurrentCompanyExperience(value) {
+			console.log(value);
+			if (value == 1) {
+				this.rules.endDate = []
+			} else {
+				this.rules.endDate = { required: true, message: '结束时间不能为空', trigger: 'change' },
+				{
+					validator: (rule, value, callback) => {
+						const start = this.inputForm.startDate;
+						if (!start || !value) return callback();
+						if (new Date(start).getTime() > new Date(value).getTime()) {
+							callback(new Error('结束时间必须晚于开始时间'));
+						} else {
+							callback();
+						}
+					},
+					trigger: 'change'
+				}
+			}
+		}
+	}
+}
+</script>
+
+
+<style lang="less">
+.fileUpload {
+	.el-form-item__content {
+		width: 100%;
+	}
+}
+</style>