Browse Source

添加 社会及行业职务 和 工作业绩

huangguoce 3 weeks ago
parent
commit
ae0c87c903

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

@@ -528,4 +528,62 @@ export default {
 			params: params,
 		});
 	},
+	// 社会及行业职务接口
+	saveSocietyInfo(data) {
+		return request({
+			url: prefix + "/societyInfo/save",
+			method: "post",
+			data: data,
+		});
+	},
+	deleteSocietyInfoById(id) {
+		return request({
+			url: prefix + "/societyInfo/delete",
+			method: "post",
+			data: { id: id },
+		});
+	},
+	findSocietyInfo(params) {
+		return request({
+			url: prefix + "/societyInfo/list",
+			method: "get",
+			params: params,
+		});
+	},
+	findSocietyInfoById(params) {
+		return request({
+			url: prefix + "/societyInfo/findById",
+			method: "get",
+			params: params,
+		});
+	},
+	// 社会及行业职务接口
+	savePerformanceInfo(data) {
+		return request({
+			url: prefix + "/performanceInfo/save",
+			method: "post",
+			data: data,
+		});
+	},
+	deletePerformanceInfoById(id) {
+		return request({
+			url: prefix + "/performanceInfo/delete",
+			method: "post",
+			data: { id: id },
+		});
+	},
+	findPerformanceInfo(params) {
+		return request({
+			url: prefix + "/performanceInfo/list",
+			method: "get",
+			params: params,
+		});
+	},
+	findPerformanceInfoById(params) {
+		return request({
+			url: prefix + "/performanceInfo/findById",
+			method: "get",
+			params: params,
+		});
+	},
 };

+ 215 - 70
src/views/human/enrollment/registration/EnrollmentRegistrationEditForm.vue

@@ -1113,7 +1113,7 @@
 											<el-descriptions title="" border>
 												<el-descriptions-item label="职称名称:">{{
 													$dictUtils.getDictLabel('professional_certificate', item.name, '-')
-													}}</el-descriptions-item>
+												}}</el-descriptions-item>
 												<el-descriptions-item label="职称等级:">{{ item.proficiency
 												}}</el-descriptions-item>
 												<el-descriptions-item label="取得日期:">{{
@@ -1389,7 +1389,116 @@
 						</el-row>
 					</el-collapse-transition>
 				</el-card>
-
+				<!-- 社会及行业职务 -->
+				<el-card style="width: 100%" shadow="hover" class="card-info">
+					<template #header>
+						<el-divider content-position="left"><i class="el-icon-document"></i> <span
+								style="font-weight: 900; font-size: 16px; color: #606266;">社会及行业职务</span>
+							<el-divider direction="vertical" />
+							<el-button type="primary" @click="addSociety()">新增</el-button>
+							<el-divider direction="vertical" />
+							<el-button :type="changeFlag[9] ? 'warning' : 'success'" @click="changeInfoList(9)">{{
+								changeFlag[9] ? "收起" : "展开"
+							}}</el-button>
+						</el-divider>
+					</template>
+					<el-collapse-transition>
+						<el-row :gutter="26" v-if="changeFlag[9]">
+							<el-col :span="24">
+								<el-collapse v-model="activeNames[9]"
+									v-if="inputForm.societyInfoList && inputForm.societyInfoList.length > 0">
+									<div style="padding: 0 30px;" v-for="(item, index) in inputForm.societyInfoList">
+										<el-collapse-item :name="item.id">
+											<template #title="{ isActive }">
+												<div class="collapseTitle">
+													<span style="font-size: 16px;"> {{ item.name }}</span>
+													<div style="margin-left: auto;">
+														<el-button type="text"
+															@click.stop="editSociety(item.id)">修改</el-button>
+														<el-button type="text" @click.stop="delSociety(item.id)"
+															style="color: red;">删除</el-button>
+													</div>
+												</div>
+											</template>
+											<el-descriptions title="" border>
+												<el-descriptions-item label="职务名称:">{{ item.name
+												}}</el-descriptions-item>
+												<el-descriptions-item label="任职开始日期:">{{
+													handleDateFormatter(item.startDate)
+												}}</el-descriptions-item>
+												<el-descriptions-item label="任职开始日期:">{{
+													handleDateFormatter(item.endDate)
+												}}</el-descriptions-item>
+												<el-descriptions-item label="任职机构:">{{ item.institution
+												}}</el-descriptions-item>
+											</el-descriptions>
+										</el-collapse-item>
+									</div>
+								</el-collapse>
+								<el-empty image-size="80px" style="margin-top: 0 !important;padding: 0 !important;"
+									v-else description="暂无社会及行业职务信息"></el-empty>
+							</el-col>
+						</el-row>
+					</el-collapse-transition>
+				</el-card>
+				<!-- 工作业绩 -->
+				<el-card style="width: 100%" shadow="hover" class="card-info">
+					<template #header>
+						<el-divider content-position="left"><i class="el-icon-document"></i> <span
+								style="font-weight: 900; font-size: 16px; color: #606266;">工作业绩</span>
+							<el-divider direction="vertical" />
+							<el-button type="primary" @click="addPerformance()">新增</el-button>
+							<el-divider direction="vertical" />
+							<el-button :type="changeFlag[10] ? 'warning' : 'success'" @click="changeInfoList(10)">{{
+								changeFlag[10] ? "收起" : "展开"
+							}}</el-button>
+						</el-divider>
+					</template>
+					<el-collapse-transition>
+						<el-row :gutter="26" v-if="changeFlag[10]">
+							<el-col :span="24">
+								<el-collapse v-model="activeNames[10]"
+									v-if="inputForm.performanceInfoList && inputForm.performanceInfoList.length > 0">
+									<div style="padding: 0 30px;"
+										v-for="(item, index) in inputForm.performanceInfoList">
+										<el-collapse-item :name="item.id">
+											<template #title="{ isActive }">
+												<div class="collapseTitle">
+													<span style="font-size: 16px;"> {{ item.name }}</span>
+													<div style="margin-left: auto;">
+														<el-button type="text"
+															@click.stop="editPerformance(item.id)">修改</el-button>
+														<el-button type="text" @click.stop="delPerformance(item.id)"
+															style="color: red;">删除</el-button>
+													</div>
+												</div>
+											</template>
+											<el-descriptions title="" border>
+												<el-descriptions-item label="项目名称:">{{ item.name
+												}}</el-descriptions-item>
+												<el-descriptions-item label="委托方:">{{ item.client
+												}}</el-descriptions-item>
+												<el-descriptions-item label="工程分类:">{{ item.type
+												}}</el-descriptions-item>
+												<el-descriptions-item label="规模类型/单位/数量:">{{ item.info
+												}}</el-descriptions-item>
+												<el-descriptions-item label="担任职务:">{{
+													$dictUtils.getDictLabel("position_held",
+														item.position,
+														'-')
+												}}</el-descriptions-item>
+												<el-descriptions-item label="参与内容:">{{ item.participateContent
+												}}</el-descriptions-item>
+											</el-descriptions>
+										</el-collapse-item>
+									</div>
+								</el-collapse>
+								<el-empty image-size="80px" style="margin-top: 0 !important;padding: 0 !important;"
+									v-else description="暂无工作业绩信息"></el-empty>
+							</el-col>
+						</el-row>
+					</el-collapse-transition>
+				</el-card>
 			</el-form>
 			<template #footer>
 				<span class="dialog-footer">
@@ -1417,6 +1526,11 @@
 			<!-- 劳动合同 -->
 			<LaborContractInfo ref="laborContractInfo" @addLaborContractInfo="handleAddLaborContractInfo">
 			</LaborContractInfo>
+			<!-- 社会及行业职务 -->
+			<SocietyInfo ref="societyInfo" @addSocietyInfo="handleAddSocietyInfo">
+			</SocietyInfo>
+			<!-- 工作业绩 -->
+			<PerformanceInfo ref="performanceInfo" @addPerformanceInfo="handleAddPerformanceInfo"></PerformanceInfo>
 
 		</el-dialog>
 	</div>
@@ -1441,6 +1555,8 @@ import FamilyInfo from "./components/FamilyInfo";
 import RewardInfo from "./components/RewardInfo";
 import AttachmentView from './components/AttachmentView'
 import LaborContractInfo from "./components/LaborContractInfo"
+import SocietyInfo from "./components/SocietyInfo.vue"
+import PerformanceInfo from "./components/PerformanceInfo.vue"
 
 import postService from "@/api/sys/postService";
 import roleService from "@/api/sys/roleService";
@@ -1549,46 +1665,15 @@ export default {
 				newPassword: "",// 密码
 				//教育经历
 				eduInfoList: [
-					{
-						graduatedFrom: "",
-						otherGraduatedFrom: "",
-						startDate: "",
-						endDate: "",
-						speciality: "",//专业
-						education: "",//学历
-						degree: "",//学位
-						isHighestEducation: "1",
-						isHighestDegree: "1",
-						learnForms: "",//学习形式
-						graduationType: "",//毕业类型
-						cultureMethod: "",//培养方式
-						educationFile: [],
-						degreeFile: [],
-						specialityDesc: "",
-						enrollmentRegistrationId: ''
-					}
+
 				],
 				// 工作经历
 				workInfoList: [
-					{
-						enrollmentRegistrationId: '',
-						companyName: '',
-						position: '',
-						startDate: '',
-						endDate: '',
-						certifier: '',
-						isCurrentCompanyExperience: "1"
-					}
+
 				],
 				// 培训经历
 				trainingInfoList: [
-					{
-						enrollmentRegistrationId: '',
-						name: "",
-						trainingInstitution: "",
-						trainingResult: "",
-						files: []
-					}
+
 				],
 				// 执业资格证书
 				certificateInfoList: [
@@ -1596,52 +1681,27 @@ export default {
 				],
 				// 职称证书
 				skillInfoList: [
-					{
-						enrollmentRegistrationId: '',
-						name: '',              // 名称
-						proficiency: '',       // 掌握程度
-						category: '',          // 种类
-						usageTime: '',          // 使用时间
-						files: []
-					}
+
 				],
 				languageInfoList: [
-					{
-						enrollmentRegistrationId: '',
-						language: '',              // 语言
-						isNative: "1",           // 是否母语
-						proficiency: '',           // 掌握程度
-						writingAbility: '',        // 书写能力
-						readingAbility: '',        // 阅读能力
-						speakingAbility: '',        // 口语能力
-						files: []
-					}
+
 				],
 				familyInfoList: [
-					{
-						enrollmentRegistrationId: '',
-						name: '',            // 成员姓名
-						birthDate: '',       // 出生日期
-						relation: '',        // 与本人关系名称
-						gender: '',          // 性别
-						mobile: '',          // 手机号码
-						workUnit: '',        // 工作单位
-						contactNumber: ''    // 联系电话
-					}
+
 				],
 				rewardInfoList: [
 				],
-				laborContractInfoList: []
+				laborContractInfoList: [],
+				societyInfoList: [],
+				performanceInfoList: []
 			},
 			keyWatch: '',
 			roleList: [],
 			postList: [],
 			changeFlag: [
-				true, true, true, true, true, true, true, true, true
+				true, true, true, true, true, true, true, true, true, true, true
 			],
 			activeNames: []
-
-
 		}
 	},
 	created() {
@@ -1658,7 +1718,9 @@ export default {
 		FamilyInfo,
 		RewardInfo,
 		AttachmentView,
-		LaborContractInfo
+		LaborContractInfo,
+		SocietyInfo,
+		PerformanceInfo
 	},
 	computed: {
 		bus: {
@@ -1825,6 +1887,8 @@ export default {
 				familyInfoList: [],
 				rewardInfoList: [],
 				laborContractInfoList: [],
+				societyInfoList: [],
+				performanceInfoList: [],
 				loginName: ""
 			}
 			if (method === 'add') {
@@ -1896,6 +1960,14 @@ export default {
 					if (this.commonJS.isEmpty(this.inputForm.laborContractInfoList)) {
 						this.inputForm.laborContractInfoList = []
 					}
+					// 社会及行业职务
+					if (this.commonJS.isEmpty(this.inputForm.societyInfoList)) {
+						this.inputForm.societyInfoList = []
+					}
+					// 工作业绩
+					if (this.commonJS.isEmpty(this.inputForm.performanceInfoList)) {
+						this.inputForm.performanceInfoList = []
+					}
 
 					this.inputForm.certificateInfoList.forEach(temp => {
 						this.changeType(temp.type, temp)
@@ -1910,6 +1982,9 @@ export default {
 					this.activeNames[6] = this.inputForm.familyInfoList.map(item => item.id)
 					this.activeNames[7] = this.inputForm.rewardInfoList.map(item => item.id)
 					this.activeNames[8] = this.inputForm.laborContractInfoList.map(item => item.id)
+					this.activeNames[9] = this.inputForm.societyInfoList.map(item => item.id)
+					this.activeNames[10] = this.inputForm.performanceInfoList.map(item => item.id)
+
 					if (this.commonJS.isNotEmpty(this.inputForm.socialSecurityPictureFront)) {
 						await this.ossService.getTemporaryUrl(this.inputForm.socialSecurityPictureFront).then((data) => {
 							let file = {
@@ -2683,7 +2758,7 @@ export default {
 				this.activeNames[7] = this.inputForm.rewardInfoList.map(item => item.id)
 			})
 		},
-		//表彰与奖励处理
+		//劳动合同
 		addLaborContract() {
 			this.$refs.laborContractInfo.init("add", null, this.inputForm.userId)
 		},
@@ -2718,6 +2793,76 @@ export default {
 				this.activeNames[8] = this.inputForm.laborContractInfoList.map(item => item.id)
 			})
 		},
+		//社会及行业职务
+		addSociety() {
+			this.$refs.societyInfo.init("add", null, this.inputForm.userId)
+		},
+		editSociety(id) {
+			this.$refs.societyInfo.init("edit", id, this.inputForm.userId)
+		},
+		delSociety(id) {
+			this.$confirm('确定删除此条社会及行业职务信息吗?', '提示', {
+				confirmButtonText: '确定',
+				cancelButtonText: '取消',
+				type: 'warning'
+			}).then(() => {
+				this.loading = true
+				enrollmentRegistrationService.deleteSocietyInfoById(id).then(res => {
+					this.$message.success(res)
+					this.loading = false
+					this.handleGetSocietyInfo()
+				})
+
+			}).catch(() => {
+
+			});
+		},
+		handleAddSocietyInfo(id) {
+			this.handleGetSocietyInfo()
+		},
+		handleGetSocietyInfo() {
+			enrollmentRegistrationService.findSocietyInfo({
+				userId: this.inputForm.userId
+			}).then(res => {
+				this.inputForm.societyInfoList = res
+				this.activeNames[9] = this.inputForm.societyInfoList.map(item => item.id)
+			})
+		},
+		//工作业绩
+		addPerformance() {
+			this.$refs.performanceInfo.init("add", null, this.inputForm.userId)
+		},
+		editPerformance(id) {
+			this.$refs.performanceInfo.init("edit", id, this.inputForm.userId)
+		},
+		delPerformance(id) {
+			this.$confirm('确定删除此条工作业绩信息吗?', '提示', {
+				confirmButtonText: '确定',
+				cancelButtonText: '取消',
+				type: 'warning'
+			}).then(() => {
+				this.loading = true
+				enrollmentRegistrationService.deletePerformanceInfoById(id).then(res => {
+					this.$message.success(res)
+					this.loading = false
+					this.handleGetPerformanceInfo()
+				})
+
+			}).catch(() => {
+
+			});
+		},
+		handleAddPerformanceInfo(id) {
+			this.handleGetPerformanceInfo()
+		},
+		handleGetPerformanceInfo() {
+			enrollmentRegistrationService.findPerformanceInfo({
+				userId: this.inputForm.userId
+			}).then(res => {
+				this.inputForm.performanceInfoList = res
+				this.activeNames[10] = this.inputForm.performanceInfoList.map(item => item.id)
+			})
+		},
 		// 日期格式化
 		handleDateFormatter(dateStr) {
 			if (!dateStr) return ''; // 如果为空,返回空字符串

+ 203 - 72
src/views/human/enrollment/registration/EnrollmentUserInfoAuditForm.vue

@@ -501,7 +501,7 @@
 										<el-descriptions title="" border>
 											<el-descriptions-item label="职称名称:">{{
 												$dictUtils.getDictLabel('professional_certificate', item.name, '-')
-												}}</el-descriptions-item>
+											}}</el-descriptions-item>
 
 											<el-descriptions-item label="职称等级:">{{ item.proficiency
 											}}</el-descriptions-item>
@@ -700,7 +700,116 @@
 					</el-row>
 				</el-collapse-transition>
 			</el-card>
+			<!-- 社会及行业职务 -->
+			<el-card style="width: 100%" shadow="hover" class="card-info">
+				<template #header>
+					<el-divider content-position="left"><i class="el-icon-document"></i> <span
+							style="font-weight: 900; font-size: 16px; color: #606266;">社会及行业职务</span>
+						<el-divider direction="vertical" />
+						<el-button type="primary" @click="addSociety()">新增</el-button>
+						<el-divider direction="vertical" />
+						<el-button :type="changeFlag[8] ? 'warning' : 'success'" @click="changeInfoList(8)">{{
+							changeFlag[8] ? "收起" : "展开"
+						}}</el-button>
+					</el-divider>
+				</template>
+				<el-collapse-transition>
+					<el-row :gutter="26" v-if="changeFlag[8]">
+						<el-col :span="24">
+							<el-collapse v-model="activeNames[8]"
+								v-if="inputForm.societyInfoList && inputForm.societyInfoList.length > 0">
+								<div style="padding: 0 30px;" v-for="(item, index) in inputForm.societyInfoList">
+									<el-collapse-item :name="item.id">
+										<template #title="{ isActive }">
+											<div class="collapseTitle">
+												<span style="font-size: 16px;"> {{ item.name }}</span>
+												<div style="margin-left: auto;">
+													<el-button type="text"
+														@click.stop="editSociety(item.id)">修改</el-button>
+													<el-button type="text" @click.stop="delSociety(item.id)"
+														style="color: red;">删除</el-button>
+												</div>
+											</div>
+										</template>
+										<el-descriptions title="" border>
+											<el-descriptions-item label="职务名称:">{{ item.name
+											}}</el-descriptions-item>
+											<el-descriptions-item label="任职开始日期:">{{
+												handleDateFormatter(item.startDate)
+											}}</el-descriptions-item>
+											<el-descriptions-item label="任职开始日期:">{{
+												handleDateFormatter(item.endDate)
+											}}</el-descriptions-item>
+											<el-descriptions-item label="任职机构:">{{ item.institution
+											}}</el-descriptions-item>
+										</el-descriptions>
+									</el-collapse-item>
+								</div>
+							</el-collapse>
+							<el-empty image-size="80px" style="margin-top: 0 !important;padding: 0 !important;" v-else
+								description="暂无社会及行业职务信息"></el-empty>
+						</el-col>
+					</el-row>
+				</el-collapse-transition>
+			</el-card>
 
+			<!-- 工作业绩 -->
+			<el-card style="width: 100%" shadow="hover" class="card-info">
+				<template #header>
+					<el-divider content-position="left"><i class="el-icon-document"></i> <span
+							style="font-weight: 900; font-size: 16px; color: #606266;">工作业绩</span>
+						<el-divider direction="vertical" />
+						<el-button type="primary" @click="addPerformance()">新增</el-button>
+						<el-divider direction="vertical" />
+						<el-button :type="changeFlag[9] ? 'warning' : 'success'" @click="changeInfoList(9)">{{
+							changeFlag[9] ? "收起" : "展开"
+						}}</el-button>
+					</el-divider>
+				</template>
+				<el-collapse-transition>
+					<el-row :gutter="26" v-if="changeFlag[9]">
+						<el-col :span="24">
+							<el-collapse v-model="activeNames[9]"
+								v-if="inputForm.performanceInfoList && inputForm.performanceInfoList.length > 0">
+								<div style="padding: 0 30px;" v-for="(item, index) in inputForm.performanceInfoList">
+									<el-collapse-item :name="item.id">
+										<template #title="{ isActive }">
+											<div class="collapseTitle">
+												<span style="font-size: 16px;"> {{ item.name }}</span>
+												<div style="margin-left: auto;">
+													<el-button type="text"
+														@click.stop="editPerformance(item.id)">修改</el-button>
+													<el-button type="text" @click.stop="delPerformance(item.id)"
+														style="color: red;">删除</el-button>
+												</div>
+											</div>
+										</template>
+										<el-descriptions title="" border>
+											<el-descriptions-item label="项目名称:">{{ item.name
+											}}</el-descriptions-item>
+											<el-descriptions-item label="委托方:">{{ item.client
+											}}</el-descriptions-item>
+											<el-descriptions-item label="工程分类:">{{ item.type
+											}}</el-descriptions-item>
+											<el-descriptions-item label="规模类型/单位/数量:">{{ item.info
+											}}</el-descriptions-item>
+											<el-descriptions-item label="担任职务:">{{
+												$dictUtils.getDictLabel("position_held",
+													item.position,
+													'-')
+											}}</el-descriptions-item>
+											<el-descriptions-item label="参与内容:">{{ item.participateContent
+											}}</el-descriptions-item>
+										</el-descriptions>
+									</el-collapse-item>
+								</div>
+							</el-collapse>
+							<el-empty image-size="80px" style="margin-top: 0 !important;padding: 0 !important;" v-else
+								description="暂无工作业绩信息"></el-empty>
+						</el-col>
+					</el-row>
+				</el-collapse-transition>
+			</el-card>
 
 		</el-form>
 		<!-- 教育经历 -->
@@ -822,7 +931,7 @@ export default {
 			fileType: ['jpg', 'jpeg', 'png', 'webp'],
 			keyWatch: '',
 			changeFlag: [
-				true, true, true, true, true, true, true, true
+				true, true, true, true, true, true, true, true, true, true
 			],
 			activeNames: []
 		}
@@ -913,46 +1022,15 @@ export default {
 				postIdList: [],
 				//教育经历
 				eduInfoList: [
-					{
-						graduatedFrom: "",
-						otherGraduatedFrom: "",
-						startDate: "",
-						endDate: "",
-						speciality: "",//专业
-						education: "",//学历
-						degree: "",//学位
-						isHighestEducation: "1",
-						isHighestDegree: "1",
-						learnForms: "",//学习形式
-						graduationType: "",//毕业类型
-						cultureMethod: "",//培养方式
-						educationFile: [],
-						degreeFile: [],
-						specialityDesc: "",
-						enrollmentRegistrationId: ''
-					}
+
 				],
 				// 工作经历
 				workInfoList: [
-					{
-						enrollmentRegistrationId: '',
-						companyName: '',
-						position: '',
-						startDate: '',
-						endDate: '',
-						certifier: '',
-						isCurrentCompanyExperience: "1"
-					}
+
 				],
 				// 培训经历
 				trainingInfoList: [
-					{
-						enrollmentRegistrationId: '',
-						name: "",
-						trainingInstitution: "",
-						trainingResult: "",
-						files: []
-					}
+
 				],
 				// 资质证书
 				certificateInfoList: [
@@ -960,48 +1038,19 @@ export default {
 				],
 				// 专业技能
 				skillInfoList: [
-					{
-						enrollmentRegistrationId: '',
-						name: '',              // 名称
-						proficiency: '',       // 掌握程度
-						category: '',          // 种类
-						usageTime: '',          // 使用时间
-						files: []
-					}
+
 				],
 				languageInfoList: [
-					{
-						enrollmentRegistrationId: '',
-						language: '',              // 语言
-						isNative: "1",           // 是否母语
-						proficiency: '',           // 掌握程度
-						writingAbility: '',        // 书写能力
-						readingAbility: '',        // 阅读能力
-						speakingAbility: '',        // 口语能力
-						files: []
-					}
+
 				],
 				familyInfoList: [
-					{
-						enrollmentRegistrationId: '',
-						name: '',            // 成员姓名
-						birthDate: '',       // 出生日期
-						relation: '',        // 与本人关系名称
-						gender: '',          // 性别
-						mobile: '',          // 手机号码
-						workUnit: '',        // 工作单位
-						contactNumber: ''    // 联系电话
-					}
+
 				],
 				rewardInfoList: [
-					{
-						enrollmentRegistrationId: '',
-						name: "",       // 奖项
-						rewardDate: "",       // 获奖日期
-						description: "", // 简述
-						files: []
-					}
-				]
+
+				],
+				societyInfoList: [],
+				performanceInfoList: []
 			}
 			if (method === 'add') {
 				this.title = `用户信息完善`
@@ -1068,6 +1117,16 @@ export default {
 					if (this.commonJS.isEmpty(this.inputForm.idCardBack)) {
 						this.inputForm.idCardBack = []
 					}
+					// 社会及行业职务
+					if (this.commonJS.isEmpty(this.inputForm.societyInfoList)) {
+						this.inputForm.societyInfoList = []
+					}
+					// 工作业绩
+					if (this.commonJS.isEmpty(this.inputForm.performanceInfoList)) {
+						this.inputForm.performanceInfoList = []
+					}
+
+
 					this.inputForm.certificateInfoList.forEach(temp => {
 						this.changeType(temp.type, temp)
 					})
@@ -1079,6 +1138,8 @@ export default {
 					this.activeNames[5] = this.inputForm.languageInfoList.map(item => item.id)
 					this.activeNames[6] = this.inputForm.familyInfoList.map(item => item.id)
 					this.activeNames[7] = this.inputForm.rewardInfoList.map(item => item.id)
+					this.activeNames[8] = this.inputForm.societyInfoList.map(item => item.id)
+					this.activeNames[9] = this.inputForm.performanceInfoList.map(item => item.id)
 					//后面的fileType是限制上传类型
 					this.$refs.idCardFront.newUpload('view', this.inputForm.idCardFront, 'idCard', null, null, null, null, null, [...this.fileType])
 					this.$refs.idCardBack.newUpload('view', this.inputForm.idCardBack, 'idCard', null, null, null, null, null, [...this.fileType])
@@ -1563,6 +1624,76 @@ export default {
 				this.inputForm.rewardInfoList = res
 			})
 		},
+		//社会及行业职务
+		addSociety() {
+			this.$refs.societyInfo.init("add", null, this.inputForm.userId)
+		},
+		editSociety(id) {
+			this.$refs.societyInfo.init("edit", id, this.inputForm.userId)
+		},
+		delSociety(id) {
+			this.$confirm('确定删除此条社会及行业职务信息吗?', '提示', {
+				confirmButtonText: '确定',
+				cancelButtonText: '取消',
+				type: 'warning'
+			}).then(() => {
+				this.loading = true
+				enrollmentRegistrationService.deleteSocietyInfoById(id).then(res => {
+					this.$message.success(res)
+					this.loading = false
+					this.handleGetSocietyInfo()
+				})
+
+			}).catch(() => {
+
+			});
+		},
+		handleAddSocietyInfo(id) {
+			this.handleGetSocietyInfo()
+		},
+		handleGetSocietyInfo() {
+			enrollmentRegistrationService.findSocietyInfo({
+				userId: this.inputForm.userId
+			}).then(res => {
+				this.inputForm.societyInfoList = res
+				this.activeNames[9] = this.inputForm.societyInfoList.map(item => item.id)
+			})
+		},
+		//工作业绩
+		addPerformance() {
+			this.$refs.performanceInfo.init("add", null, this.inputForm.userId)
+		},
+		editPerformance(id) {
+			this.$refs.performanceInfo.init("edit", id, this.inputForm.userId)
+		},
+		delPerformance(id) {
+			this.$confirm('确定删除此条社会及行业职务信息吗?', '提示', {
+				confirmButtonText: '确定',
+				cancelButtonText: '取消',
+				type: 'warning'
+			}).then(() => {
+				this.loading = true
+				enrollmentRegistrationService.deletePerformanceInfoById(id).then(res => {
+					this.$message.success(res)
+					this.loading = false
+					this.handleGetPerformanceInfo()
+				})
+
+			}).catch(() => {
+
+			});
+		},
+		handleAddPerformanceInfo(id) {
+			this.handleGetPerformanceInfo()
+		},
+		handleGetPerformanceInfo() {
+			enrollmentRegistrationService.findPerformanceInfo({
+				userId: this.inputForm.userId
+			}).then(res => {
+				this.inputForm.performanceInfoList = res
+				this.activeNames[10] = this.inputForm.performanceInfoList.map(item => item.id)
+			})
+		},
 		// 日期格式化
 		handleDateFormatter(dateStr) {
 			if (!dateStr) return ''; // 如果为空,返回空字符串

+ 214 - 0
src/views/human/enrollment/registration/components/PerformanceInfo.vue

@@ -0,0 +1,214 @@
+<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="160px"
+				@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="client">
+							<el-input v-model="inputForm.client" placeholder="请输入委托方"></el-input>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="工程分类" prop="type">
+							<el-input v-model="inputForm.type" placeholder="请输入类型"></el-input>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="规模类型/单位/数量" prop="info">
+							<el-input v-model="inputForm.info" placeholder="请输入信息"></el-input>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="担任职务" prop="position">
+							<el-select size="default" v-model="inputForm.position" placeholder="请选择担任的职务"
+								style="width: 100%;">
+								<el-option v-for="item in $dictUtils.getDictList('position_held')" :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="participateContent">
+							<el-input type="textarea" v-model="inputForm.participateContent"
+								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: {
+				enrollmentRegistrationId: '',
+				name: "",
+				client: "",
+				type: "",
+				info: "",
+				position: "",
+				participateContent: "",
+			},
+			keyWatch: '',
+			rules: {
+				name: [
+					{ 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, id, reId) {
+			this.method = method
+			this.inputForm = {
+				enrollmentRegistrationId: '',
+				name: "",
+				client: "",
+				type: "",
+				info: "",
+				position: "",
+				participateContent: "",
+			}
+			if (method === 'add') {
+				this.title = `新增工作业绩`
+			} else if (method === 'edit') {
+				this.title = '修改工作业绩`'
+			} else if (method === 'view') {
+				this.title = '查看工作业绩`'
+			}
+			this.inputForm.id = id
+			this.inputForm.userId = reId
+			this.visible = true
+			this.loading = true
+			this.$nextTick(() => {
+				if (id) {
+					enrollmentRegistrationService.findPerformanceInfoById({
+						id: this.inputForm.id
+					}).then(res => {
+						this.inputForm = this.recover(this.inputForm, res)
+						this.inputForm = JSON.parse(JSON.stringify(this.inputForm))
+						this.loading = false
+					})
+				} else {
+					this.inputForm.id = id
+					this.loading = false
+				}
+			})
+		},
+		// 表单提交
+		doSubmit() {
+			this.$refs['inputForm'].validate((valid) => {
+				if (valid) {
+					this.inputForm.status = "5"
+					enrollmentRegistrationService.savePerformanceInfo(this.inputForm).then(res => {
+						this.close()
+						this.$message.success(res)
+						this.$emit("addPerformanceInfo", this.inputForm.enrollmentRegistrationId)
+						this.loading = false
+					})
+				}
+			})
+		},
+		close() {
+			this.$refs.inputForm.resetFields()
+			this.visible = false
+		},
+	}
+}
+</script>
+
+
+<style lang="less">
+.fileUpload {
+	.el-form-item__content {
+		width: 100%;
+	}
+}
+</style>

+ 200 - 0
src/views/human/enrollment/registration/components/SocietyInfo.vue

@@ -0,0 +1,200 @@
+<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="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="startDate">
+							<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="institution">
+							<el-input v-model="inputForm.institution" 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: {
+				enrollmentRegistrationId: '',
+				name: '',            // 名称
+				startDate: '',       // 开始日期
+				endDate: '',        // 结束日期
+				institution: '',          // 机构
+			},
+			keyWatch: '',
+			rules: {
+				name: [
+					{ 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, id, reId) {
+			this.method = method
+			this.inputForm = {
+				enrollmentRegistrationId: '',
+				name: '',            // 名称
+				startDate: '',       // 开始日期
+				endDate: '',        // 结束日期
+				institution: '',          // 机构
+			}
+			if (method === 'add') {
+				this.title = `新增社会及行业职务`
+			} else if (method === 'edit') {
+				this.title = '修改社会及行业职务'
+			} else if (method === 'view') {
+				this.title = '查看社会及行业职务'
+			}
+			this.inputForm.id = id
+			this.inputForm.userId = reId
+			this.visible = true
+			this.loading = true
+			this.$nextTick(() => {
+				if (id) {
+					enrollmentRegistrationService.findSocietyInfoById({
+						id: this.inputForm.id
+					}).then(res => {
+						this.inputForm = this.recover(this.inputForm, res)
+						this.inputForm = JSON.parse(JSON.stringify(this.inputForm))
+						this.loading = false
+					})
+				} else {
+					this.inputForm.id = id
+					this.loading = false
+				}
+			})
+		},
+		// 表单提交
+		doSubmit() {
+			this.$refs['inputForm'].validate((valid) => {
+				if (valid) {
+					if (this.commonJS.isNotEmpty(this.inputForm.startDate)) {
+						this.inputForm.startDate = new Date(this.inputForm.startDate).getTime(); // 转为时间戳
+					}
+					if (this.commonJS.isNotEmpty(this.inputForm.endDate)) {
+						this.inputForm.endDate = new Date(this.inputForm.endDate).getTime(); // 转为时间戳
+					}
+					this.inputForm.status = "5"
+					enrollmentRegistrationService.saveSocietyInfo(this.inputForm).then(res => {
+						this.close()
+						this.$message.success(res)
+						this.$emit("addSocietyInfo", this.inputForm.enrollmentRegistrationId)
+						this.loading = false
+					})
+				}
+			})
+		},
+		close() {
+			this.$refs.inputForm.resetFields()
+			this.visible = false
+		},
+	}
+}
+</script>
+
+
+<style lang="less">
+.fileUpload {
+	.el-form-item__content {
+		width: 100%;
+	}
+}
+</style>

+ 233 - 1
src/views/sys/user/UserInfo.vue

@@ -1498,6 +1498,128 @@
 							</el-collapse-transition>
 						</el-card>
 					</el-tab-pane>
+					<el-tab-pane label="社会及行业职务">
+						<el-card style="width: 100%" shadow="hover" class="card-info">
+							<template #header>
+								<el-divider content-position="left"><i class="el-icon-document"></i> <span
+										style="font-weight: 900; font-size: 16px; color: #606266;">社会及行业职务</span>
+									<el-divider direction="vertical" />
+									<el-button type="primary" @click="addSociety()"
+										:disabled="auditStatus == 2">新增</el-button>
+									<el-divider direction="vertical" />
+									<el-button :type="changeFlag[9] ? 'warning' : 'success'"
+										@click="changeInfoList(9)">{{
+											changeFlag[9] ? "收起" : "展开"
+										}}</el-button>
+								</el-divider>
+							</template>
+							<el-collapse-transition>
+								<el-row :gutter="26" v-if="changeFlag[9]">
+									<el-col :span="24">
+										<el-collapse v-model="activeNames[9]"
+											v-if="societyInfoList && societyInfoList.length > 0">
+											<div style="padding: 0 30px;" v-for="(item, index) in societyInfoList">
+												<el-collapse-item :name="item.id">
+													<template #title="{ isActive }">
+														<div class="collapseTitle">
+															<span style="font-size: 16px;"> {{ item.name }}</span>
+															<div style="margin-left: auto;">
+																<el-button type="text"
+																	@click.stop="editSociety(item.id)"
+																	:disabled="auditStatus == 2">修改</el-button>
+																<el-button type="text" @click.stop="delSociety(item.id)"
+																	style="color: red;"
+																	:disabled="auditStatus == 2">删除</el-button>
+															</div>
+														</div>
+													</template>
+													<el-descriptions title="" border>
+														<el-descriptions-item label="职务名称:">{{ item.name
+														}}</el-descriptions-item>
+														<el-descriptions-item label="任职开始日期:">{{
+															handleDateFormatter(item.startDate)
+														}}</el-descriptions-item>
+														<el-descriptions-item label="任职开始日期:">{{
+															handleDateFormatter(item.endDate)
+														}}</el-descriptions-item>
+														<el-descriptions-item label="任职机构:">{{ item.institution
+														}}</el-descriptions-item>
+													</el-descriptions>
+												</el-collapse-item>
+											</div>
+										</el-collapse>
+										<el-empty image-size="80px"
+											style="margin-top: 0 !important;padding: 0 !important;" v-else
+											description="暂无社会及行业职务信息"></el-empty>
+									</el-col>
+								</el-row>
+							</el-collapse-transition>
+						</el-card>
+					</el-tab-pane>
+					<el-tab-pane label="工作业绩">
+						<el-card style="width: 100%" shadow="hover" class="card-info">
+							<template #header>
+								<el-divider content-position="left"><i class="el-icon-document"></i> <span
+										style="font-weight: 900; font-size: 16px; color: #606266;">工作业绩</span>
+									<el-divider direction="vertical" />
+									<el-button type="primary" @click="addPerformance()"
+										:disabled="auditStatus == 2">新增</el-button>
+									<el-divider direction="vertical" />
+									<el-button :type="changeFlag[10] ? 'warning' : 'success'"
+										@click="changeInfoList(10)">{{
+											changeFlag[10] ? "收起" : "展开"
+										}}</el-button>
+								</el-divider>
+							</template>
+							<el-collapse-transition>
+								<el-row :gutter="26" v-if="changeFlag[10]">
+									<el-col :span="24">
+										<el-collapse v-model="activeNames[10]"
+											v-if="performanceInfoList && performanceInfoList.length > 0">
+											<div style="padding: 0 30px;" v-for="(item, index) in performanceInfoList">
+												<el-collapse-item :name="item.id">
+													<template #title="{ isActive }">
+														<div class="collapseTitle">
+															<span style="font-size: 16px;"> {{ item.name }}</span>
+															<div style="margin-left: auto;">
+																<el-button type="text"
+																	@click.stop="editPerformance(item.id)"
+																	:disabled="auditStatus == 2">修改</el-button>
+																<el-button type="text"
+																	@click.stop="delPerformance(item.id)"
+																	style="color: red;"
+																	:disabled="auditStatus == 2">删除</el-button>
+															</div>
+														</div>
+													</template>
+													<el-descriptions title="" border>
+														<el-descriptions-item label="项目名称:">{{ item.name
+														}}</el-descriptions-item>
+														<el-descriptions-item label="委托方:">{{ item.client
+														}}</el-descriptions-item>
+														<el-descriptions-item label="工程分类:">{{ item.type
+														}}</el-descriptions-item>
+														<el-descriptions-item label="规模类型/单位/数量:">{{ item.info
+														}}</el-descriptions-item>
+														<el-descriptions-item label="担任职务:">{{
+															$dictUtils.getDictLabel("position_held",
+																item.position,
+																'-')
+														}}</el-descriptions-item>
+														<el-descriptions-item label="参与内容:">{{ item.participateContent
+														}}</el-descriptions-item>
+													</el-descriptions>
+												</el-collapse-item>
+											</div>
+										</el-collapse>
+										<el-empty image-size="80px"
+											style="margin-top: 0 !important;padding: 0 !important;" v-else
+											description="暂无工作业绩信息"></el-empty>
+									</el-col>
+								</el-row>
+							</el-collapse-transition>
+						</el-card>
+					</el-tab-pane>
 					<el-tab-pane label="劳动合同">
 						<el-card style="width: 100%" shadow="hover" class="card-info">
 							<template #header>
@@ -1794,6 +1916,11 @@
 		<FamilyInfo ref="familyInfo" @addFamilyInfo="handleAddFamilyInfo"></FamilyInfo>
 		<!-- 表彰与奖励 -->
 		<RewardInfo ref="rewardInfo" @addRewardInfo="handleAddRewardInfo"></RewardInfo>
+		<!-- 社会及行业职务 -->
+		<SocietyInfo ref="societyInfo" @addSocietyInfo="handleAddSocietyInfo"></SocietyInfo>
+		<!-- 工作业绩 -->
+		<PerformanceInfo ref="performanceInfo" @addPerformanceInfo="handleAddPerformanceInfo"></PerformanceInfo>
+
 	</el-container>
 </template>
 
@@ -1814,6 +1941,9 @@ import SkillInfo from "./components/SkillInfo";
 import LanguageInfo from "./components/LanguageInfo";
 import FamilyInfo from "./components/FamilyInfo";
 import RewardInfo from "./components/RewardInfo";
+import SocietyInfo from "./components/SocietyInfo";
+import PerformanceInfo from "./components/PerformanceInfo";
+
 import AttachmentView from './components/AttachmentView'
 import UpLoadComponent from '@/views/common/UpLoadComponentCardStyle'
 import processService from '@/api/flowable/processService'
@@ -1836,6 +1966,8 @@ export default {
 		LanguageInfo,
 		FamilyInfo,
 		RewardInfo,
+		SocietyInfo,
+		PerformanceInfo,
 		AttachmentView,
 		UpLoadComponent
 	},
@@ -2038,7 +2170,7 @@ export default {
 				{ validator: validatePass2, trigger: "blur" },
 			],
 			changeFlag: [
-				true, true, true, true, true, true, true, true, true
+				true, true, true, true, true, true, true, true, true, true, true
 			],
 			activeNames: [],
 			//教育经历
@@ -2070,6 +2202,8 @@ export default {
 			rewardInfoList: [
 
 			],
+			societyInfoList: [],
+			performanceInfoList: [],
 			laborContractInfoList: [],
 			auditStatus: "0",
 			flowData: [],
@@ -2212,6 +2346,14 @@ export default {
 				if (this.commonJS.isNotEmpty(data.laborContractInfoList)) {
 					this.laborContractInfoList = data.laborContractInfoList
 				}
+				// 社会及行业职务
+				if (this.commonJS.isNotEmpty(data.societyInfoList)) {
+					this.societyInfoList = data.societyInfoList
+				}
+				//工作业绩
+				if (this.commonJS.isNotEmpty(data.performanceInfoList)) {
+					this.performanceInfoList = data.performanceInfoList
+				}
 
 				if (this.commonJS.isEmpty(this.generalForm.idCardFront)) {
 					this.generalForm.idCardFront = []
@@ -2232,6 +2374,8 @@ export default {
 				this.activeNames[6] = this.familyInfoList.map(item => item.id)
 				this.activeNames[7] = this.rewardInfoList.map(item => item.id)
 				this.activeNames[8] = this.laborContractInfoList.map(item => item.id)
+				this.activeNames[9] = this.societyInfoList.map(item => item.id)
+				this.activeNames[10] = this.performanceInfoList.map(item => item.id)
 
 				//后面的fileType是限制上传类型
 				this.$refs.idCardFront.newUpload('edit', this.generalForm.idCardFront, 'idCard', null, null, null, null, null, [...this.fileType])
@@ -2342,6 +2486,9 @@ export default {
 					this.rewardInfoList = data.rewardInfoList
 					this.laborContractInfoList = data.laborContractInfoList
 					this.workInfoList = data.workInfoList
+					this.societyInfoList = data.societyInfoList
+					this.performanceInfoList = data.performanceInfoList
+
 					this.concatForm.email = data.email
 					this.activeNames[0] = this.eduInfoList.map(item => item.id)
 					this.activeNames[1] = this.workInfoList.map(item => item.id)
@@ -2352,6 +2499,9 @@ export default {
 					this.activeNames[6] = this.familyInfoList.map(item => item.id)
 					this.activeNames[7] = this.rewardInfoList.map(item => item.id)
 					this.activeNames[8] = this.laborContractInfoList.map(item => item.id)
+					this.activeNames[9] = this.societyInfoList.map(item => item.id)
+					this.activeNames[10] = this.performanceInfoList.map(item => item.id)
+
 					if (this.commonJS.isEmpty(this.generalForm.idCardFront)) {
 						this.generalForm.idCardFront = []
 					}
@@ -2435,6 +2585,8 @@ export default {
 						this.generalForm.familyInfoList = this.familyInfoList
 						this.generalForm.trainingInfoList = this.trainingInfoList
 						this.generalForm.languageInfoList = this.languageInfoList
+						this.generalForm.societyInfoList = this.societyInfoList
+						this.generalForm.performanceInfoList = this.performanceInfoList
 
 						enrollmentRegistrationService.updateInfoAudit(this.generalForm).then((data) => {
 							this.close()
@@ -3135,6 +3287,86 @@ export default {
 				this.rewardInfoList = res
 			})
 		},
+		//社会及行业职务
+		addSociety() {
+			this.$refs.societyInfo.init("add", null, this.userId)
+		},
+		editSociety(row) {
+			this.$refs.societyInfo.init("edit", row, this.userId)
+		},
+		delSociety(id) {
+			this.$confirm('确定删除此条社会及行业职务信息吗?', '提示', {
+				confirmButtonText: '确定',
+				cancelButtonText: '取消',
+				type: 'warning'
+			}).then(() => {
+				this.societyInfoList = this.societyInfoList.filter(item => item.id !== id)
+			}).catch(() => {
+
+			});
+		},
+		handleAddSocietyInfo(row) {
+			const { id } = row
+			let index = this.societyInfoList.findIndex(item => item.id === row.id)
+			if (index === -1) {
+				// 不存在就新增
+				this.societyInfoList.push(row)
+			} else {
+				// 存在就更新
+				this.societyInfoList[index] = row
+			}
+			if (!this.activeNames[9].includes(id)) {
+				this.activeNames[9].push(id);
+			}
+			this.uploadKey = Date.now().toString();
+		},
+		handleGetSocietyInfo(row) {
+			enrollmentRegistrationService.findSocietyInfo({
+				userId: this.userId
+			}).then(res => {
+				this.societyInfoList = res
+			})
+		},
+		//工作业绩
+		addPerformance() {
+			this.$refs.performanceInfo.init("add", null, this.userId)
+		},
+		editPerformance(row) {
+			this.$refs.performanceInfo.init("edit", row, this.userId)
+		},
+		delPerformance(id) {
+			this.$confirm('确定删除此条工作业绩信息吗?', '提示', {
+				confirmButtonText: '确定',
+				cancelButtonText: '取消',
+				type: 'warning'
+			}).then(() => {
+				this.performanceInfoList = this.performanceInfoList.filter(item => item.id !== id)
+			}).catch(() => {
+
+			});
+		},
+		handleAddPerformanceInfo(row) {
+			const { id } = row
+			let index = this.performanceInfoList.findIndex(item => item.id === row.id)
+			if (index === -1) {
+				// 不存在就新增
+				this.performanceInfoList.push(row)
+			} else {
+				// 存在就更新
+				this.performanceInfoList[index] = row
+			}
+			if (!this.activeNames[10].includes(id)) {
+				this.activeNames[10].push(id);
+			}
+			this.uploadKey = Date.now().toString();
+		},
+		handleGetPerformanceInfo(row) {
+			enrollmentRegistrationService.findPerformanceInfo({
+				userId: this.userId
+			}).then(res => {
+				this.performanceInfoList = res
+			})
+		},
 		changeType(value, row) {
 
 			if (value === '1' || value === '2') {

+ 208 - 0
src/views/sys/user/components/PerformanceInfo.vue

@@ -0,0 +1,208 @@
+<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="client">
+							<el-input v-model="inputForm.client" placeholder="请输入委托方"></el-input>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="工程分类" prop="type">
+							<el-input v-model="inputForm.type" placeholder="请输入类型"></el-input>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="规模类型/单位/数量" prop="info">
+							<el-input v-model="inputForm.info" placeholder="请输入信息"></el-input>
+						</el-form-item>
+					</el-col>
+
+					<el-col :span="12">
+						<el-form-item label="担任职务" prop="position">
+							<el-select size="default" v-model="inputForm.position" placeholder="请选择担任的职务"
+								style="width: 100%;">
+								<el-option v-for="item in $dictUtils.getDictList('position_held')" :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="participateContent">
+							<el-input type="textarea" v-model="inputForm.participateContent"
+								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: {
+				enrollmentRegistrationId: '',
+				name: "",
+				client: "",
+				type: "",
+				info: "",
+				position: "",
+				participateContent: "",
+			},
+			keyWatch: '',
+			rules: {
+				name: [
+					{ 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 = {
+				enrollmentRegistrationId: '',
+				name: "",
+				client: "",
+				type: "",
+				info: "",
+				position: "",
+				participateContent: "",
+			}
+			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.$emit("addPerformanceInfo", 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>

+ 194 - 0
src/views/sys/user/components/SocietyInfo.vue

@@ -0,0 +1,194 @@
+<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="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="startDate">
+							<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="institution">
+							<el-input v-model="inputForm.institution" 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: {
+				enrollmentRegistrationId: '',
+				name: '',            // 名称
+				startDate: '',       // 开始日期
+				endDate: '',        // 结束日期
+				institution: '',          // 机构
+			},
+			keyWatch: '',
+			rules: {
+				name: [
+					{ 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 = {
+				enrollmentRegistrationId: '',
+				name: '',            // 名称
+				startDate: '',       // 开始日期
+				endDate: '',        // 结束日期
+				institution: '',          // 机构
+			}
+			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) {
+					if (this.commonJS.isNotEmpty(this.inputForm.startDate)) {
+						this.inputForm.startDate = new Date(this.inputForm.startDate).getTime(); // 转为时间戳
+					}
+					if (this.commonJS.isNotEmpty(this.inputForm.endDate)) {
+						this.inputForm.endDate = new Date(this.inputForm.endDate).getTime(); // 转为时间戳
+					}
+					this.$emit("addSocietyInfo", 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>