This commit is contained in:
=
2026-06-12 16:07:11 +08:00
parent f65bcf7b67
commit 5a42a139d6
4 changed files with 167 additions and 200 deletions
@@ -72,15 +72,19 @@ public class RetiredUserServiceImpl extends BaseServiceImpl<Sys_user> implements
u.education, u.education,
u.academicDegree, u.academicDegree,
u.nation, u.nation,
null as campusName, campusDict.name as campusName,
u.unionGroupName, u.unionGroupName,
u.political, u.political,
u.personType, u.personType,
u.userState, u.userState,
u.unitName as unitname, u.unitName as unitname,
u.unionName as unionname, u.unionName as unionname,
null as threeUnitName CASE WHEN userUnit.unitLevel = 3 THEN userUnit.name ELSE NULL END as threeUnitName
FROM vw_user u FROM vw_user u
LEFT JOIN sys_unit userUnit ON userUnit.id = u.unitId
LEFT JOIN sys_dict campusParent ON campusParent.code = 'USER_CAMPUS'
LEFT JOIN sys_dict campusDict ON campusDict.parentId = campusParent.id
AND (campusDict.id = userUnit.xqid OR campusDict.code = userUnit.xqid OR campusDict.name = userUnit.xqid)
$condition $condition
"""); """);
Cnd cnd = Cnd.NEW(); Cnd cnd = Cnd.NEW();
@@ -157,11 +161,15 @@ public class RetiredUserServiceImpl extends BaseServiceImpl<Sys_user> implements
u.memberTime, u.memberTime,
u.families, u.families,
u.personalData, u.personalData,
null as campusName, campusDict.name as campusName,
null as threeUnitName, CASE WHEN userUnit.unitLevel = 3 THEN userUnit.name ELSE NULL END as threeUnitName,
rg.groupName as retiredGroupName, rg.groupName as retiredGroupName,
rpb.partyBranchName as retiredPartyBranchName rpb.partyBranchName as retiredPartyBranchName
FROM vw_user u FROM vw_user u
LEFT JOIN sys_unit userUnit ON userUnit.id = u.unitId
LEFT JOIN sys_dict campusParent ON campusParent.code = 'USER_CAMPUS'
LEFT JOIN sys_dict campusDict ON campusDict.parentId = campusParent.id
AND (campusDict.id = userUnit.xqid OR campusDict.code = userUnit.xqid OR campusDict.name = userUnit.xqid)
LEFT JOIN retired_group_unit rgu ON rgu.unitId = u.unitId LEFT JOIN retired_group_unit rgu ON rgu.unitId = u.unitId
LEFT JOIN retired_group rg ON rg.id = rgu.retiredGroupId LEFT JOIN retired_group rg ON rg.id = rgu.retiredGroupId
LEFT JOIN retired_party_branch_user rpbu ON rpbu.userId = u.id LEFT JOIN retired_party_branch_user rpbu ON rpbu.userId = u.id
@@ -226,7 +234,7 @@ public class RetiredUserServiceImpl extends BaseServiceImpl<Sys_user> implements
u.education, u.education,
u.academicDegree, u.academicDegree,
u.nation, u.nation,
null as campusName, campusDict.name as campusName,
u.unionGroupName, u.unionGroupName,
u.personType, u.personType,
u.userState, u.userState,
@@ -234,6 +242,10 @@ public class RetiredUserServiceImpl extends BaseServiceImpl<Sys_user> implements
u.unionName as unionname u.unionName as unionname
FROM retired_user_change ruc FROM retired_user_change ruc
LEFT JOIN vw_user u ON u.id = ruc.userId LEFT JOIN vw_user u ON u.id = ruc.userId
LEFT JOIN sys_unit userUnit ON userUnit.id = u.unitId
LEFT JOIN sys_dict campusParent ON campusParent.code = 'USER_CAMPUS'
LEFT JOIN sys_dict campusDict ON campusDict.parentId = campusParent.id
AND (campusDict.id = userUnit.xqid OR campusDict.code = userUnit.xqid OR campusDict.name = userUnit.xqid)
$condition $condition
"""); """);
Cnd cnd = Cnd.NEW(); Cnd cnd = Cnd.NEW();
@@ -264,18 +276,21 @@ public class RetiredUserServiceImpl extends BaseServiceImpl<Sys_user> implements
u.education, u.education,
u.academicDegree, u.academicDegree,
u.nation, u.nation,
null as campusName, campusDict.name as campusName,
unionGroup.name as unionGroupName, unionGroup.name as unionGroupName,
u.personType, u.personType,
u.userState, u.userState,
n.name AS unitname, n.name AS unitname,
gh.name AS unionname, gh.name AS unionname,
u.political, u.political,
null as threeUnitName, CASE WHEN n.unitLevel = 3 THEN n.name ELSE NULL END as threeUnitName,
rg.groupName AS retiredGroupName, rg.groupName AS retiredGroupName,
rpb.partyBranchName AS retiredPartyBranchName rpb.partyBranchName AS retiredPartyBranchName
FROM retired_user_history u FROM retired_user_history u
LEFT JOIN sys_unit n ON n.id = u.unitId LEFT JOIN sys_unit n ON n.id = u.unitId
LEFT JOIN sys_dict campusParent ON campusParent.code = 'USER_CAMPUS'
LEFT JOIN sys_dict campusDict ON campusDict.parentId = campusParent.id
AND (campusDict.id = n.xqid OR campusDict.code = n.xqid OR campusDict.name = n.xqid)
LEFT JOIN sys_union gh ON gh.id = n.unionId LEFT JOIN sys_union gh ON gh.id = n.unionId
LEFT JOIN sys_union_group unionGroup ON unionGroup.id = n.unionGroupId LEFT JOIN sys_union_group unionGroup ON unionGroup.id = n.unionGroupId
LEFT JOIN retired_group_unit rgu ON rgu.unitId = u.unitId LEFT JOIN retired_group_unit rgu ON rgu.unitId = u.unitId
@@ -306,6 +321,7 @@ public class RetiredUserServiceImpl extends BaseServiceImpl<Sys_user> implements
} }
private Sql retiredUserSql() { private Sql retiredUserSql() {
// 当前库的 vw_user 不直接提供科室和校区名称,科室按三级单位显示,校区按单位 xqid 关联 USER_CAMPUS 字典显示。
return Sqls.create(""" return Sqls.create("""
SELECT SELECT
u.id, u.id,
@@ -321,17 +337,21 @@ public class RetiredUserServiceImpl extends BaseServiceImpl<Sys_user> implements
u.education, u.education,
u.academicDegree, u.academicDegree,
u.nation, u.nation,
null as campusName, campusDict.name as campusName,
u.unionGroupName, u.unionGroupName,
u.personType, u.personType,
u.userState, u.userState,
u.unitName as unitname, u.unitName as unitname,
u.unionName as unionname, u.unionName as unionname,
u.political, u.political,
null as threeUnitName, CASE WHEN userUnit.unitLevel = 3 THEN userUnit.name ELSE NULL END as threeUnitName,
rg.groupName as retiredGroupName, rg.groupName as retiredGroupName,
rpb.partyBranchName as retiredPartyBranchName rpb.partyBranchName as retiredPartyBranchName
FROM vw_user u FROM vw_user u
LEFT JOIN sys_unit userUnit ON userUnit.id = u.unitId
LEFT JOIN sys_dict campusParent ON campusParent.code = 'USER_CAMPUS'
LEFT JOIN sys_dict campusDict ON campusDict.parentId = campusParent.id
AND (campusDict.id = userUnit.xqid OR campusDict.code = userUnit.xqid OR campusDict.name = userUnit.xqid)
LEFT JOIN retired_group_unit rgu ON rgu.unitId = u.unitId LEFT JOIN retired_group_unit rgu ON rgu.unitId = u.unitId
LEFT JOIN retired_group rg ON rg.id = rgu.retiredGroupId LEFT JOIN retired_group rg ON rg.id = rgu.retiredGroupId
LEFT JOIN retired_party_branch_user rpbu ON rpbu.userId = u.id LEFT JOIN retired_party_branch_user rpbu ON rpbu.userId = u.id
@@ -17,6 +17,12 @@
<el-input v-model="formData.username" maxlength="100" size="small"></el-input> <el-input v-model="formData.username" maxlength="100" size="small"></el-input>
</el-form-item> </el-form-item>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="籍贯">
<el-form-item prop="nativePlace">
<el-input v-model="formData.nativePlace" maxlength="100" placeholder="请输入籍贯"></el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="性别"> <el-descriptions-item label="性别">
<el-form-item prop="sex"> <el-form-item prop="sex">
<el-radio-group v-model="formData.sex" size="small"> <el-radio-group v-model="formData.sex" size="small">
@@ -26,12 +32,6 @@
</el-form-item> </el-form-item>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="民族">
<el-form-item prop="nation">
<dict-select style="width: 100%" placeholder="请选择民族" v-model="formData.nation"
code="USER_NATION"></dict-select>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="出生日期"> <el-descriptions-item label="出生日期">
<el-form-item prop="birthday"> <el-form-item prop="birthday">
<el-date-picker v-model="formData.birthday" type="date" <el-date-picker v-model="formData.birthday" type="date"
@@ -40,9 +40,9 @@
style="width: 100%"></el-date-picker> style="width: 100%"></el-date-picker>
</el-form-item> </el-form-item>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="籍贯"> <el-descriptions-item label="身份证号码">
<el-form-item prop="nativePlace"> <el-form-item prop="idCard">
<el-input v-model="formData.nativePlace" maxlength="100" placeholder="请输入籍贯"></el-input> <el-input v-model="formData.idCard" maxlength="30" placeholder="请输入身份证号码"></el-input>
</el-form-item> </el-form-item>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="政治面貌"> <el-descriptions-item label="政治面貌">
@@ -52,102 +52,34 @@
</el-form-item> </el-form-item>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="入党时间"> <el-descriptions-item label="参加工作时间">
<el-form-item prop="joinPartyDate">
<el-date-picker v-model="formData.joinPartyDate" type="date"
placeholder="请选择入党时间"
value-format="yyyy-MM-dd"
style="width: 100%"></el-date-picker>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="学历">
<el-form-item prop="education">
<dict-select style="width: 100%" placeholder="请选择学历" v-model="formData.education"
code="USER_EDUCATION"></dict-select>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="学位">
<el-form-item prop="academicDegree">
<dict-select style="width: 100%" placeholder="请选择学位" v-model="formData.academicDegree"
code="USER_ACADEMIC_DEGREE"></dict-select>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="婚姻状况">
<el-form-item prop="marriage">
<el-input v-model="formData.marriage" maxlength="50" placeholder="请输入婚姻状况"></el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="党政职务">
<el-form-item prop="position">
<el-input v-model="formData.position" maxlength="50" placeholder="请输入党政职务"></el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="职称">
<el-form-item prop="professionalTitle">
<el-input v-model="formData.professionalTitle" maxlength="50" placeholder="请输入职称"></el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="编制类别">
<el-form-item prop="preparedBy">
<el-input v-model="formData.preparedBy" maxlength="30" placeholder="请输入编制类别"></el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="来校时间">
<el-form-item prop="arrivalAtSchoolDate"> <el-form-item prop="arrivalAtSchoolDate">
<el-input v-model="formData.arrivalAtSchoolDate" maxlength="20" placeholder="请输入来校时间"></el-input> <el-input v-model="formData.arrivalAtSchoolDate" maxlength="20" placeholder="请输入参加工作时间"></el-input>
</el-form-item> </el-form-item>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="从教年月"> <el-descriptions-item label="单位">
<el-form-item prop="teachingTime">
<el-date-picker v-model="formData.teachingTime" type="date"
placeholder="请选择从教年月"
value-format="yyyy-MM-dd"
style="width: 100%"></el-date-picker>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="入会时间">
<el-form-item prop="memberTime">
<el-date-picker v-model="formData.memberTime" type="date"
placeholder="请选择入会时间"
value-format="yyyy-MM-dd"
style="width: 100%"></el-date-picker>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="所属校区">
<el-form-item prop="campusName">
<el-input v-model="formData.campusName" readonly placeholder="系统自动显示"></el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="工作单位">
<el-form-item prop="unitId"> <el-form-item prop="unitId">
<el-select clearable filterable placeholder="请选择工作单位" style="width: 100%" <el-select clearable filterable placeholder="请选择单位" style="width: 100%"
v-model="formData.unitId" @change="handleUnitChange"> v-model="formData.unitId" @change="handleUnitChange">
<el-option :key="item.id" :label="item.name" :value="item.id" <el-option :key="item.id" :label="item.name" :value="item.id"
v-for="item in units"></el-option> v-for="item in units"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="所属工会"> <el-descriptions-item label="工会">
<el-form-item prop="unionName"> <el-form-item prop="unionName">
<el-input v-model="formData.unionName" readonly placeholder="系统自动显示"></el-input> <el-input v-model="formData.unionName" readonly placeholder="系统自动显示"></el-input>
</el-form-item> </el-form-item>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="工会小组">
<el-form-item prop="unionGroupName">
<el-input v-model="formData.unionGroupName" readonly placeholder="系统自动显示"></el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="在职状态"> <el-descriptions-item label="职务">
<el-form-item prop="userState"> <el-form-item prop="position">
<dict-select v-model="formData.userState" code="USER_STATE" style="width: 100%"></dict-select> <el-input v-model="formData.position" maxlength="50" placeholder="请输入职务"></el-input>
</el-form-item> </el-form-item>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="教职工类别"> <el-descriptions-item label="职称">
<el-form-item prop="personType"> <el-form-item prop="professionalTitle">
<dict-select v-model="formData.personType" code="USER_PERSON_TYPE" style="width: 100%"></dict-select> <el-input v-model="formData.professionalTitle" maxlength="50" placeholder="请输入职称"></el-input>
</el-form-item> </el-form-item>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="退休时间"> <el-descriptions-item label="退休时间">
@@ -159,62 +91,25 @@
</el-form-item> </el-form-item>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="身份证号码"> <el-descriptions-item label="电话">
<el-form-item prop="idCard">
<el-input v-model="formData.idCard" maxlength="30" placeholder="请输入身份证号码"></el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="联系电话">
<el-form-item prop="mobile"> <el-form-item prop="mobile">
<el-input v-model="formData.mobile" maxlength="32" placeholder="请输入联系电话"></el-input> <el-input v-model="formData.mobile" maxlength="32" placeholder="请输入电话"></el-input>
</el-form-item> </el-form-item>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="电子邮箱"> <el-descriptions-item label="工龄">
<el-form-item prop="email"> <el-form-item>
<el-input v-model="formData.email" maxlength="255" placeholder="请输入电子邮箱"></el-input> <el-input :value="workAgeText(formData.arrivalAtSchoolDate)" readonly placeholder="系统自动计算"></el-input>
</el-form-item> </el-form-item>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="家庭主要成员" :span="3"> <el-descriptions-item label="在职状态">
<el-form-item prop="families"> <el-form-item prop="userState">
<el-table :data="formData.families" border size="small"> <dict-select v-model="formData.userState" code="USER_STATE" style="width: 100%"></dict-select>
<el-table-column label="关系" prop="relation">
<template slot-scope="{row}">
<el-input v-model="row.relation" maxlength="50" placeholder="请输入与本人关系"></el-input>
</template>
</el-table-column>
<el-table-column label="姓名" prop="name">
<template slot-scope="{row}">
<el-input v-model="row.name" maxlength="50" placeholder="请输入姓名"></el-input>
</template>
</el-table-column>
<el-table-column label="工作单位" prop="unit">
<template slot-scope="{row}">
<el-input v-model="row.unit" maxlength="100" placeholder="请输入工作单位"></el-input>
</template>
</el-table-column>
<el-table-column label="备注" prop="remark">
<template slot-scope="{row}">
<el-input v-model="row.remark" maxlength="100" placeholder="请输入备注"></el-input>
</template>
</el-table-column>
<el-table-column width="100px">
<template slot="header" slot-scope="scope">
<el-button type="primary" size="mini" @click="addFamily">添加</el-button>
</template>
<template slot-scope="scope">
<el-button type="danger" icon="el-icon-delete" size="mini"
@click="removeFamily(scope.$index)"></el-button>
</template>
</el-table-column>
</el-table>
</el-form-item> </el-form-item>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label="人员类型">
<el-descriptions-item label="个人简历" :span="3"> <el-form-item prop="personType">
<el-form-item prop="personalData"> <dict-select v-model="formData.personType" code="USER_PERSON_TYPE" style="width: 100%"></dict-select>
<el-input type="textarea" :rows="4" v-model="formData.personalData" maxlength="2000"
placeholder="请输入个人简历"></el-input>
</el-form-item> </el-form-item>
</el-descriptions-item> </el-descriptions-item>
</el-descriptions> </el-descriptions>
@@ -293,6 +188,10 @@ module.exports = {
handleUnitChange(unitId) { handleUnitChange(unitId) {
const unit = this.units.find(item => item.id === unitId) const unit = this.units.find(item => item.id === unitId)
this.$set(this.formData, "unitName", unit ? unit.name : null) this.$set(this.formData, "unitName", unit ? unit.name : null)
const unionId = unit ? (unit.unionId || unit.unionid || null) : null
const unionName = unit ? (unit.unionName || unit.unionname || null) : null
this.$set(this.formData, "unionId", unionId)
this.$set(this.formData, "unionName", unionName)
}, },
addFamily() { addFamily() {
const families = (this.formData.families || []).concat([{}]) const families = (this.formData.families || []).concat([{}])
@@ -307,6 +206,40 @@ module.exports = {
const units = await this.$businessTool.listUnit() const units = await this.$businessTool.listUnit()
this.$set(this, "units", units || []) this.$set(this, "units", units || [])
}, },
// 工龄不落库,根据参加工作时间实时计算,兼容 yyyy、yyyy-MM、yyyy-MM-dd 三种输入。
workAgeText(val) {
const start = this.parseWorkDate(val)
if (!start) {
return ""
}
const today = new Date()
let years = today.getFullYear() - start.getFullYear()
if (today.getMonth() < start.getMonth() ||
(today.getMonth() === start.getMonth() && today.getDate() < start.getDate())) {
years = years - 1
}
if (years < 0) {
years = 0
}
return years + "年"
},
parseWorkDate(val) {
if (!val) {
return null
}
const parts = String(val).split("-")
const year = Number(parts[0])
const month = parts.length > 1 ? Number(parts[1]) : 1
const day = parts.length > 2 ? Number(parts[2]) : 1
if (!year || !month || !day) {
return null
}
const date = new Date(year, month - 1, day)
if (isNaN(date.getTime())) {
return null
}
return date
},
normalizeUserData(user) { normalizeUserData(user) {
const data = Object.assign(this.defaultFormData(), user) const data = Object.assign(this.defaultFormData(), user)
// 详情数据可能来自视图或实体,统一把大小写差异字段整理成页面绑定的驼峰字段。 // 详情数据可能来自视图或实体,统一把大小写差异字段整理成页面绑定的驼峰字段。
@@ -8,61 +8,26 @@
<el-descriptions :column="3" border> <el-descriptions :column="3" border>
<el-descriptions-item label="工号">{{ emptyText(formData.loginname) }}</el-descriptions-item> <el-descriptions-item label="工号">{{ emptyText(formData.loginname) }}</el-descriptions-item>
<el-descriptions-item label="姓名">{{ emptyText(formData.username) }}</el-descriptions-item> <el-descriptions-item label="姓名">{{ emptyText(formData.username) }}</el-descriptions-item>
<el-descriptions-item label="性别">{{ emptyText(formData.sex) }}</el-descriptions-item>
<el-descriptions-item label="民族">{{ emptyText(formData.nation) }}</el-descriptions-item>
<el-descriptions-item label="出生日期">{{ formatDate(formData.birthday) }}</el-descriptions-item>
<el-descriptions-item label="籍贯">{{ emptyText(formData.nativePlace) }}</el-descriptions-item> <el-descriptions-item label="籍贯">{{ emptyText(formData.nativePlace) }}</el-descriptions-item>
<el-descriptions-item label="性别">{{ emptyText(formData.sex) }}</el-descriptions-item>
<el-descriptions-item label="出生日期">{{ formatDate(formData.birthday) }}</el-descriptions-item>
<el-descriptions-item label="身份证号码">{{ emptyText(formData.idCard) }}</el-descriptions-item>
<el-descriptions-item label="政治面貌">{{ emptyText(formData.political) }}</el-descriptions-item> <el-descriptions-item label="政治面貌">{{ emptyText(formData.political) }}</el-descriptions-item>
<el-descriptions-item label="入党时间">{{ formatDate(formData.joinPartyDate) }}</el-descriptions-item> <el-descriptions-item label="参加工作时间">{{ displayDate(formData.arrivalAtSchoolDate) }}</el-descriptions-item>
<el-descriptions-item label="婚姻状况">{{ emptyText(formData.marriage) }}</el-descriptions-item> <el-descriptions-item label="单位">{{ emptyText(formData.unitName) }}</el-descriptions-item>
<el-descriptions-item label="学历">{{ emptyText(formData.education) }}</el-descriptions-item>
<el-descriptions-item label="学位">{{ emptyText(formData.academicDegree) }}</el-descriptions-item>
<el-descriptions-item label="党政职务">{{ emptyText(formData.position) }}</el-descriptions-item>
<el-descriptions-item label="工会">{{ emptyText(formData.unionName) }}</el-descriptions-item>
<el-descriptions-item label="职务">{{ emptyText(formData.position) }}</el-descriptions-item>
<el-descriptions-item label="职称">{{ emptyText(formData.professionalTitle) }}</el-descriptions-item> <el-descriptions-item label="职称">{{ emptyText(formData.professionalTitle) }}</el-descriptions-item>
<el-descriptions-item label="编制类别">{{ emptyText(formData.preparedBy) }}</el-descriptions-item>
<el-descriptions-item label="来校时间">{{ formatDate(formData.arrivalAtSchoolDate) }}</el-descriptions-item>
<el-descriptions-item label="从教年月">{{ formatDate(formData.teachingTime) }}</el-descriptions-item> <el-descriptions-item label="退休时间">{{ formatDate(formData.retireDate) }}</el-descriptions-item>
<el-descriptions-item label="入会时间">{{ formatDate(formData.memberTime) }}</el-descriptions-item> <el-descriptions-item label="电话">{{ emptyText(formData.mobile) }}</el-descriptions-item>
<el-descriptions-item label="所属校区">{{ emptyText(formData.campusName) }}</el-descriptions-item> <el-descriptions-item label="工龄">{{ workAgeText(formData.arrivalAtSchoolDate) || '暂无' }}</el-descriptions-item>
<el-descriptions-item label="工作单位">{{ emptyText(formData.unitName) }}</el-descriptions-item>
<el-descriptions-item label="所属工会">{{ emptyText(formData.unionName) }}</el-descriptions-item>
<el-descriptions-item label="工会小组">{{ emptyText(formData.unionGroupName) }}</el-descriptions-item>
<el-descriptions-item label="所在科室">{{ emptyText(formData.threeUnitName) }}</el-descriptions-item>
<el-descriptions-item label="离退休小组">{{ emptyText(formData.retiredGroupName) }}</el-descriptions-item>
<el-descriptions-item label="离退休党支部">{{ emptyText(formData.retiredPartyBranchName) }}</el-descriptions-item>
<el-descriptions-item label="在职状态">{{ emptyText(formData.userState) }}</el-descriptions-item> <el-descriptions-item label="在职状态">{{ emptyText(formData.userState) }}</el-descriptions-item>
<el-descriptions-item label="教职工类别">{{ emptyText(formData.personType) }}</el-descriptions-item> <el-descriptions-item label="人员类型">{{ emptyText(formData.personType) }}</el-descriptions-item>
<el-descriptions-item label="退休时间">{{ formatDate(formData.retireDate) }}</el-descriptions-item>
<el-descriptions-item label="身份证号码">{{ emptyText(formData.idCard) }}</el-descriptions-item>
<el-descriptions-item label="联系电话">{{ emptyText(formData.mobile) }}</el-descriptions-item>
<el-descriptions-item label="电子邮箱">{{ emptyText(formData.email) }}</el-descriptions-item>
<el-descriptions-item label="家庭主要成员" :span="3">
<el-table v-if="formData.families && formData.families.length"
:data="formData.families" size="mini" border
:header-cell-style="{background:'#eff3f6'}"
style="width: 100%">
<el-table-column prop="relation" label="与本人关系" align="center"></el-table-column>
<el-table-column prop="name" label="姓名" align="center"></el-table-column>
<el-table-column prop="unit" label="单位" align="center"></el-table-column>
<el-table-column prop="remark" label="备注" align="center"></el-table-column>
</el-table>
<el-empty v-else :image-size="50" description="暂无家庭成员信息"></el-empty>
</el-descriptions-item>
<el-descriptions-item label="个人简历" :span="3">
<div v-if="formData.personalData" class="text-left" v-html="formData.personalData"></div>
<el-tag type="warning" v-else>暂无</el-tag>
</el-descriptions-item>
</el-descriptions> </el-descriptions>
<slot></slot> <slot></slot>
</div> </div>
@@ -89,12 +54,52 @@ module.exports = {
} }
return '暂无' return '暂无'
}, },
displayDate(val) {
if (!val) {
return '暂无'
}
return String(val)
},
emptyText(val) { emptyText(val) {
if (val === undefined || val === null || val === '') { if (val === undefined || val === null || val === '') {
return '暂无' return '暂无'
} }
return val return val
}, },
// 工龄不落库,根据参加工作时间实时计算,兼容 yyyy、yyyy-MM、yyyy-MM-dd 三种输入。
workAgeText(val) {
const start = this.parseWorkDate(val)
if (!start) {
return ""
}
const today = new Date()
let years = today.getFullYear() - start.getFullYear()
if (today.getMonth() < start.getMonth() ||
(today.getMonth() === start.getMonth() && today.getDate() < start.getDate())) {
years = years - 1
}
if (years < 0) {
years = 0
}
return years + "年"
},
parseWorkDate(val) {
if (!val) {
return null
}
const parts = String(val).split("-")
const year = Number(parts[0])
const month = parts.length > 1 ? Number(parts[1]) : 1
const day = parts.length > 2 ? Number(parts[2]) : 1
if (!year || !month || !day) {
return null
}
const date = new Date(year, month - 1, day)
if (isNaN(date.getTime())) {
return null
}
return date
},
getInfo() { getInfo() {
if (this.id) { if (this.id) {
$.post('/platform/retired/list/userInfo', {userId: this.id}).then(res => { $.post('/platform/retired/list/userInfo', {userId: this.id}).then(res => {
@@ -71,7 +71,7 @@ layout("/layouts/platform.html"){
<el-card shadow="never" class="mt10"> <el-card shadow="never" class="mt10">
<table-tool label="退休人员" :app="this"> <table-tool label="退休人员" :app="this">
<template #func> <template v-if="$auth.hasRoleOr(['SYSADMIN', 'SCHOOL_UNION_ADMIN', 'SCHOOL_UNION_MEMBER_ADMIN'])">
<el-button size="small" type="primary" @click="openAdd">新增退休人员(系统中不存在)</el-button> <el-button size="small" type="primary" @click="openAdd">新增退休人员(系统中不存在)</el-button>
<el-button size="small" type="primary" @click="openSet">设置退休人员(系统中存在)</el-button> <el-button size="small" type="primary" @click="openSet">设置退休人员(系统中存在)</el-button>
<el-button size="small" type="primary" @click="backUp">备份为历史数据</el-button> <el-button size="small" type="primary" @click="backUp">备份为历史数据</el-button>
@@ -211,19 +211,14 @@ layout("/layouts/platform.html"){
{prop: 'birthday', label: '出生年月', sortable: true}, {prop: 'birthday', label: '出生年月', sortable: true},
{prop: 'mobile', label: '联系电话'}, {prop: 'mobile', label: '联系电话'},
{prop: 'idCard', label: '身份证号', width: 170, checked: 0}, {prop: 'idCard', label: '身份证号', width: 170, checked: 0},
{prop: 'position', label: '职务', sortable: true, checked: 0},
{prop: 'professionalTitle', label: '职称', sortable: true, checked: 0}, {prop: 'professionalTitle', label: '职称', sortable: true, checked: 0},
{prop: 'personType', label: '人员类型', sortable: true, checked: 0}, {prop: 'personType', label: '人员类型', sortable: true, checked: 0},
{prop: 'userState', label: '在职状态', sortable: true, checked: 0}, {prop: 'userState', label: '在职状态', sortable: true, checked: 0},
{prop: 'political', label: '政治面貌'}, {prop: 'political', label: '政治面貌'},
// {prop: 'unionname', label: '所属工会', sortable: true}, // {prop: 'unionname', label: '所属工会', sortable: true},
{prop: 'unitname', label: '所属单位', sortable: true}, {prop: 'unitname', label: '所属单位', sortable: true},
{prop: 'threeUnitName', label: '所在科室', sortable: true, checked: 0},
{prop: 'unionGroupName', label: '工会小组', sortable: true, checked: 0},
{prop: 'retiredGroupName', label: '退休小组', sortable: true}, {prop: 'retiredGroupName', label: '退休小组', sortable: true},
{prop: 'retiredPartyBranchName', label: '退休党支部', sortable: true}, {prop: 'retiredPartyBranchName', label: '退休党支部', sortable: true},
{prop: 'campusName', label: '所属校区', sortable: true, checked: 0},
{prop: 'nation', label: '民族', checked: 0},
], ],
nonRetiredUserPageForm: { nonRetiredUserPageForm: {
@@ -262,7 +257,7 @@ layout("/layouts/platform.html"){
openAdd() { openAdd() {
this.$set(this, "userId", null) this.$set(this, "userId", null)
this.$refs.guava.edit() this.$refs.guava.edit()
this.$refs.userEdit.reset() this.callUserEdit(userEdit => userEdit.reset())
}, },
openSet() { openSet() {
this.$set(this, "retireUserAddDialogVisible", true) this.$set(this, "retireUserAddDialogVisible", true)
@@ -275,7 +270,21 @@ layout("/layouts/platform.html"){
openEdit(row) { openEdit(row) {
this.$refs.guava.edit() this.$refs.guava.edit()
this.$refs.userEdit.getInfo(row.id) this.callUserEdit(userEdit => userEdit.getInfo(row.id))
},
callUserEdit(callback, retry) {
const waitCount = retry || 0
this.$nextTick(() => {
if (this.$refs.userEdit) {
callback(this.$refs.userEdit)
} else if (waitCount < 10) {
setTimeout(() => {
this.callUserEdit(callback, waitCount + 1)
}, 100)
} else {
this.notifyWarning("编辑组件加载失败,请刷新页面后重试")
}
})
}, },
async nonRetiredUserPageData() { async nonRetiredUserPageData() {