Files
zhgh_hmc/src/main/resources/static/components/member/MemberInfo.vue
T
2024-12-31 09:46:20 +08:00

637 lines
31 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<template>
<div>
<div v-if="!view">
<el-form :model="formData" ref="form" :rules="formRules" label-width="120px" v-loading="loading" :disabled="!isAllowModify">
<el-tabs v-model="activeName" type="card">
<el-tab-pane label="基本信息" :name="1">
<vi-title title="基本资料"></vi-title>
<el-form-item prop="loginname" label="工&emsp;&emsp;号">
<el-input v-model="formData.loginname" placeholder="工号"></el-input>
</el-form-item>
<div class="is-flex">
<el-form-item prop="unitid" label="所属单位">
<el-select placeholder="所属单位" style="width: 100%" filterable @change="unitChange" v-model="formData.unitid">
<el-option v-for="unit in unitOptions" :key="unit.id" :value="unit.id" :label="unit.name"></el-option>
</el-select>
</el-form-item>
<el-form-item prop="unionid" label="所属工会">
<el-input :value="formData.unionname" readonly></el-input>
</el-form-item>
</div>
<el-row :gutter="10" v-if="isThreeUnit">
<el-col :xs="24" :lg="12">
<el-form-item label="所属三级单位" prop="deptId">
<el-select
v-model="formData.threeUnitId"
filterable
placeholder="所属三级单位"
style="width: 100%"
@change="threeUnitChange"
>
<el-option v-for="item in threeUnits" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :xs="24" :lg="12">
<el-form-item label="工会小组">
<el-input :value="formData.unionGroupName" readonly></el-input>
</el-form-item>
</el-col>
</el-row>
<div class="is-flex">
<el-form-item prop="username" label="姓&emsp;&emsp;名">
<el-input v-model="formData.username" placeholder="姓名"></el-input>
</el-form-item>
<el-form-item prop="sex" label="性&emsp;&emsp;别">
<el-radio v-model="formData.sex" label="男" border size="small"></el-radio>
<el-radio v-model="formData.sex" label="女" border size="small"></el-radio>
</el-form-item>
</div>
<div class="is-flex">
<el-form-item prop="birthday" label="出生日期">
<el-date-picker
style="width: 100%"
v-model="formData.birthday"
format="yyyy-MM-dd"
value-format="yyyy-MM-dd"
type="date"
placeholder="出生日期"
></el-date-picker>
</el-form-item>
<el-form-item label="婚姻状况">
<dict-select
v-model="formData.marriage"
style="width: 100%"
placeholder="请选择婚姻状况"
code="maritalStatus"
></dict-select>
</el-form-item>
</div>
<div class="is-flex">
<el-form-item prop="education" label="学&emsp;&emsp;历">
<dict-select v-model="formData.education" style="width: 100%" placeholder="请选择学历" code="Education"></dict-select>
</el-form-item>
<el-form-item prop="academicDegree" label="学&emsp;&emsp;位">
<dict-select
v-model="formData.academicDegree"
style="width: 100%"
placeholder="请选择学位"
code="academicDegree"
></dict-select>
</el-form-item>
</div>
<div class="is-flex">
<el-form-item prop="nation" label="民&emsp;&emsp;族">
<el-select placeholder="民族" style="width: 100%" filterable v-model="formData.nation">
<el-option v-for="nation in nationOptions" :key="nation" :value="nation" :label="nation"></el-option>
</el-select>
</el-form-item>
<el-form-item prop="political" label="政治面貌">
<dict-select
v-model="formData.political"
style="width: 100%"
placeholder="请选择政治面貌"
code="political"
></dict-select>
</el-form-item>
</div>
<div class="is-flex">
<el-form-item prop="userState" label="人员类型">
<dict-select
v-model="formData.personType"
style="width: 100%"
placeholder="请选择人员类型"
code="UserType"
></dict-select>
</el-form-item>
<el-form-item prop="userState" label="在职状态">
<dict-select
v-model="formData.userState"
style="width: 100%"
placeholder="请选择在职状态"
code="UserState"
></dict-select>
</el-form-item>
</div>
<div class="is-flex">
<el-form-item prop="mobile" label="手&ensp;机&ensp;号">
<el-input maxlength="100" placeholder="手机号" v-model="formData.mobile"></el-input>
</el-form-item>
<el-form-item prop="bank_number" label="银行账号">
<el-input maxlength="100" placeholder="银行账号" v-model="formData.bank_number"></el-input>
</el-form-item>
</div>
<div class="is-flex">
<el-form-item prop="idType" label="有效证件类型">
<dict-select
v-model="formData.idType"
placeholder="请选择有效证件类型"
style="width: 100%"
code="idType"
></dict-select>
</el-form-item>
<el-form-item prop="idcard" label="身份证号">
<el-input v-model="formData.idcard" placeholder="身份证号"></el-input>
</el-form-item>
</div>
<div class="is-flex">
<el-form-item prop="qqnum" label="QQ号">
<el-input maxlength="20" placeholder="QQ号" v-model="formData.qqnum"></el-input>
</el-form-item>
<el-form-item prop="email" label="邮箱号">
<el-input v-model="formData.email" placeholder="邮箱号" maxlength="50"></el-input>
</el-form-item>
</div>
<div class="is-flex">
<el-form-item prop="jobTitle" label="职&emsp;&emsp;称">
<dict-select v-model="formData.jobTitle" style="width: 100%" placeholder="请选择职称" code="JobTitle"></dict-select>
</el-form-item>
<el-form-item prop="memberJoinTime" label="入会日期">
<el-date-picker
style="width: 100%"
v-model="formData.memberJoinTime"
format="yyyy-MM-dd"
value-format="yyyy-MM-dd"
type="date"
placeholder="入会日期"
></el-date-picker>
</el-form-item>
</div>
<div class="is-flex">
<el-form-item prop="schoolTime" label="入校时间">
<el-date-picker
style="width: 100%"
v-model="formData.schoolTime"
format="yyyy-MM-dd"
value-format="yyyy-MM-dd"
type="date"
placeholder="入校时间"
></el-date-picker>
</el-form-item>
<el-form-item prop="startSalaryDate" label="起薪日期">
<el-date-picker
style="width: 100%"
v-model="formData.startSalaryDate"
format="yyyy-MM-dd"
value-format="yyyy-MM-dd"
type="date"
placeholder="起薪日期"
></el-date-picker>
</el-form-item>
</div>
<div class="is-flex">
<el-form-item prop="renewTime" label="更新时间">
<el-date-picker
style="width: 100%"
v-model="formData.renewTime"
format="yyyy-MM-dd"
value-format="yyyy-MM-dd"
type="date"
placeholder="更新时间"
></el-date-picker>
</el-form-item>
<el-form-item prop="workDate" label="参加工作日期">
<el-date-picker
style="width: 100%"
format="yyyy-MM-dd"
value-format="yyyy-MM-dd"
v-model="formData.workDate"
type="date"
placeholder="选择参加工作日期"
></el-date-picker>
</el-form-item>
</div>
<div class="is-flex">
<el-form-item label="兴趣爱好">
<el-input maxlength="255" placeholder="兴趣爱好" v-model="formData.hobby"></el-input>
</el-form-item>
<el-form-item prop="specialSkill" label="专&emsp;&emsp;长">
<el-input maxlength="100" placeholder="专长" v-model="formData.specialSkill"></el-input>
</el-form-item>
</div>
<el-form-item prop="vita" label="个人简历">
<el-input maxlength="500" placeholder="请填写个人工作简历" v-model="formData.vita" type="textarea" rows="3"></el-input>
</el-form-item>
<el-form-item label="照片上传">
<el-upload
:action="FILE_UPLOAD_ADDRESS"
list-type="picture-card"
:file-list="imageList"
:class="{ disabled: uploadDisabled }"
:on-preview="handlePictureCardPreview"
:limit="1"
:on-remove="removeAvatarUpload"
:before-upload="beforeAvatarUpload"
:on-success="handleAvatarSuccess"
>
<i class="el-icon-plus"></i>
<div class="el-upload__tip" slot="tip" style="color: red">*只能上传jpg/png文件且不超过2MB的一寸电子照片</div>
</el-upload>
</el-form-item>
</el-tab-pane>
<el-tab-pane label="家庭及社会信息" :name="4">
<vi-title title="家庭及社会信息"></vi-title>
<div class="is-flex">
<el-form-item prop="homeAddress" label="家庭住址">
<el-input v-model="formData.homeAddress" placeholder="家庭住址"></el-input>
</el-form-item>
<el-form-item prop="postalCode" label="邮政编码">
<el-input v-model="formData.postalCode" placeholder="邮政编码"></el-input>
</el-form-item>
</div>
<el-form-item label="家庭成员">
<span style="color: red">(已结婚填配偶信息未结婚填父母信息)</span>
<el-button style="float: right; margin-bottom: 10px" icon="el-icon-plus" size="mini" @click="formData.family.push({})">
添加成员
</el-button>
<el-table :data="formData.family" border size="mini" style="width: 100%">
<el-table-column prop="relation" label="与本人关系" align="center" header-align="center">
<template slot-scope="scope">
<el-input placeholder="请输入与本人关系" maxlength="30" v-model="scope.row.relation" clearable></el-input>
</template>
</el-table-column>
<el-table-column prop="name" label="姓名" align="center" header-align="center">
<template slot-scope="scope">
<el-input placeholder="请输入姓名" maxlength="100" v-model="scope.row.name" clearable></el-input>
</template>
</el-table-column>
<el-table-column prop="isCondolence" label="是否慰问" align="center" header-align="center">
<template slot-scope="scope">
<el-radio-group v-model="scope.row.isCondolence" size="mini">
<el-radio label="是"></el-radio>
<el-radio label="否"></el-radio>
</el-radio-group>
<!-- <el-input placeholder="请输入单位" maxlength="100" v-model="scope.row.unit"
clearable></el-input>-->
</template>
</el-table-column>
<el-table-column prop="condolenceTime" label="慰问时间" align="center" header-align="center">
<template slot-scope="scope">
<el-date-picker
style="width: 100%"
v-model="scope.row.condolenceTime"
format="yyyy-MM-dd"
value-format="yyyy-MM-dd"
type="date"
placeholder="慰问时间"
></el-date-picker>
</template>
</el-table-column>
<el-table-column prop="remark" label="备注" align="center" header-align="center">
<template slot-scope="scope">
<el-input placeholder="请输入备注" maxlength="100" v-model="scope.row.remark" clearable></el-input>
</template>
</el-table-column>
<el-table-column label="操作" width="100px" align="center" header-align="center">
<template slot-scope="scope">
<el-button
type="danger"
icon="el-icon-delete"
circle
:disabled="formData.family.length === 0"
@click="formData.family.splice(scope.$index, 1)"
></el-button>
</template>
</el-table-column>
</el-table>
</el-form-item>
<!-- </el-form>-->
</el-tab-pane>
</el-tabs>
</el-form>
<el-button v-if="has_bottom_btn" @click="save" :loading="submitLoading" type="primary" style="float: right">提交</el-button>
</div>
<div v-else>
<h3 style="text-align: center; letter-spacing: 6px">工会会员登记表</h3>
<!-- <div style="text-align: right; letter-spacing: 2px">填表日期{{ moment(formData.applyTime).format("YYYY年MM月DD日") }}</div>-->
<el-descriptions :column="3" border class="descriptions-form">
<el-descriptions-item label="姓名">{{ formData.username }}</el-descriptions-item>
<el-descriptions-item label="性别">{{ formData.sex }}</el-descriptions-item>
<el-descriptions-item label="民族">{{ formData.nation }}</el-descriptions-item>
<el-descriptions-item label="学历">{{ formData.education }}</el-descriptions-item>
<el-descriptions-item label="政治面貌">{{ formData.political }}</el-descriptions-item>
<el-descriptions-item label="婚姻状况">{{ formData.marriage }}</el-descriptions-item>
<el-descriptions-item label="身份证号码" span="2">{{ formData.idcard }}</el-descriptions-item>
<el-descriptions-item label="联系电话">{{ formData.mobile }}</el-descriptions-item>
<el-descriptions-item label="户口所在地" span="3">
<template slot="label">户口所在地</template>
<div class="text-left" v-html="formData.registeredResidence"></div>
</el-descriptions-item>
<el-descriptions-item label="现居住地" span="3">
<template slot="label">现居住地</template>
<div class="text-left" v-html="formData.homeAddress"></div>
</el-descriptions-item>
<el-descriptions-item label="工作部门(学院)及岗位" span="3">
<template slot="label">工作部门学院及岗位</template>
<div class="text-left">{{ formData.unitname + "" + (formData.jobTitle ? "、" + formData.jobTitle : "") }}</div>
</el-descriptions-item>
<el-descriptions-item label="简历" span="3">
<template slot="label">简历</template>
<div class="text-left" v-html="formData.vita"></div>
</el-descriptions-item>
<el-descriptions-item label="有何特长" span="3">
<template slot="label">有何特长</template>
<div class="text-left" v-html="formData.specialSkill"></div>
</el-descriptions-item>
</el-descriptions>
<vi-title title="家庭成员" class="mt20"></vi-title>
<el-table
v-if="formData.family && formData.family.length"
:data="formData.family"
size="mini"
border
:header-cell-style="{ background: '#eff3f6' }"
style="width: 100%"
>
<el-table-column prop="relation" label="与本人关系" align="center" header-align="center"></el-table-column>
<el-table-column prop="name" label="姓名" align="center" header-align="center"></el-table-column>
<el-table-column prop="isCondolence" label="是否慰问" align="center" header-align="center"></el-table-column>
<el-table-column prop="condolenceTime" label="慰问时间" align="center" header-align="center"></el-table-column>
<el-table-column prop="remark" label="备注" align="center" header-align="center"></el-table-column>
</el-table>
<el-empty v-else description="暂无家庭成员信息"></el-empty>
</div>
</div>
</template>
<script>
module.exports = {
props: {
id: { type: String },
view: { type: Boolean, default: false },
edit_unit: { type: Boolean, default: false },
source: { type: String },
has_bottom_btn: { type: Boolean, default: true }
},
data() {
return {
activeName: 1,
unionOptions: [],
unitOptions: [],
submitLoading: false,
imageList: [],
uploadDisabled: false,
loading: true,
disabled: false,
formData: {
family: []
},
formRules: {
loginname: [{ required: true, message: "必填", trigger: ["blur", "change"] }],
username: [{ required: true, message: "必填", trigger: ["blur", "change"] }],
unitid: [{ required: true, message: "必填", trigger: ["blur", "change"] }],
threeUnitId: [{ required: true, message: "必填", trigger: ["blur", "change"] }]
},
nationOptions: nation,
threeUnits: [],
isThreeUnit: false,
isAllowModify: false
}
},
watch: {
id() {
this.getUserInfo()
}
},
methods: {
async doOperating() {
this.$refs["form"].validate(async (valid) => {
if (valid) {
const formData = clone(this.formData)
formData.password = "dd3s@#2022"
formData.family = JSON.stringify(formData.family)
formData.source = this.source
if (formData.effectiveDate) {
formData.beginningDate = formData.effectiveDate[0]
formData.endDate = formData.effectiveDate[1]
}
const resp = await $.post(formData.id ? "/platform/sys/user/editDo" : "/platform/sys/user/addDo", formData)
if (resp.code === 0) {
this.$notify.success({
title: "成功",
message: resp.msg
})
this.$emit("load")
} else {
this.$notify.warning({
title: "警告",
message: resp.msg
})
}
}
})
},
async unitChange(v) {
const unit = this.unitOptions.find((x) => x.id == v)
if (unit) {
this.formData.unionid = unit.unionid
this.formData.unionname = unit.unionname
} else {
this.formData.unionid = ""
this.formData.unionname = ""
}
this.$set(this.formData, "threeUnitId", null)
this.$set(this.formData, "unionGroupName", null)
this.threeUnits = await this.getThreeUnits(v)
},
async getThreeUnits(v) {
const threeUnits = await threeUnitsByUnionGroupOrUnitId(v, null)
return threeUnits
// debugger
// if(v){
// const threeUnit = this.threeUnits.find(v => v.id === val)
// console.log(threeUnit)
// }else{
// this.$set(this.formData, 'unionGroupName', null)
// }
// this.$set(this.formData, 'threeUnitId', null)
// this.threeUnits = await threeUnitsByUnionGroupOrUnitId(this.formData.unitId, null)
},
threeUnitChange(val) {
const threeUnit = this.threeUnits.find((v) => v.id === val)
this.$set(this.formData, "unionGroupName", threeUnit.groupname)
this.$set(this.formData, "unionGroupId", threeUnit.uniongroupid)
},
async save() {
this.$refs["form"].validate(async (valid) => {
if (valid) {
this.submitLoading = true
const formData = clone(this.formData)
formData.family = JSON.stringify(formData.family)
formData.source = this.source
if (formData.effectiveDate) {
formData.beginningDate = formData.effectiveDate[0]
formData.endDate = formData.effectiveDate[1]
}
const resp = await $.post("/platform/member/common/saveUser", formData)
this.submitLoading = false
if (resp.code === 0) {
this.$notify.success({
title: "成功",
message: resp.msg
})
this.$emit("save", resp.data)
} else {
this.$notify.warning({
title: "警告",
message: resp.msg
})
}
}
})
},
load(data) {
if (this.$refs["form"]) {
this.$refs["form"].resetFields()
}
if (data.avatar) {
this.imageList = [
{
name: "_.jpg",
url: APP_DOMAIN + FILE_STREAM_PREVIEW_ADDRESS + "?id=" + data.avatar,
status: "success"
}
]
}
data.family = JSON.parse(data.family || "[]")
if (data.beginningDate && data.endDate) {
data.effectiveDate = [data.beginningDate, data.endDate]
}
this.formData = data
},
async getUserInfo() {
this.loading = true
this.disabled = false
this.imageList = []
if (!this.id) {
this.load({})
this.unionOptions = await getUnions(null)
this.unitOptions = await getUnionUnits()
this.loading = false
return
}
const resp = await $.get("/platform/member/common/userInfo", {
userId: this.id,
source: this.source
})
this.loading = false
if (resp.code === 0) {
const data = resp.data
this.unitOptions = await getUnits(data.unionid)
this.threeUnits = await this.getThreeUnits(data.unitid)
this.load(data)
} else {
this.$notify.error({
title: "错误",
message: "获取用户信息失败"
})
}
},
handlePictureCardPreview(file) {
/*showpic(file.url.replace(FILE_DOMAIN, ''))*/
let image = new Image()
image.src = file.url
let viewer = new Viewer(image)
viewer.show()
},
removeAvatarUpload(val) {
this.imageList = []
this.formData.avatar = null
},
beforeAvatarUpload(file) {
let isLt2M = file.size / 1024 / 1024 < 2
let isJPG = file.type === "image/jpeg"
let isPng = file.type === "image/png"
if (!isJPG && !isPng) {
this.$message.error("上传头像图片只能是 JPG和PNG格式!")
}
if (!isLt2M) {
this.$message.error("上传头像图片大小不能超过 2MB!")
}
return (isJPG || isPng) && isLt2M
},
handleAvatarSuccess: function (res, file) {
var self = this
if (res.code == 0) {
const {
data: { filepath }
} = res
self.formData.avatar = filepath
} else {
this.$notify.error({
title: "错误",
message: res.msg
})
}
}
},
async created() {
await this.getUserInfo()
this.unionOptions = await getUnions(null)
this.unitOptions = await getUnionUnits()
this.isThreeUnit = (await getConfigKey("isThreeUnit")) === "true"
this.isAllowModify = (await getConfigKey("MemberInfoModify")) === "true"
}
}
</script>
<style>
.is-flex {
display: flex;
}
.is-flex .el-form-item {
width: 50%;
}
.el-picker-panel {
z-index: 9999999 !important;
}
.el-descriptions-item__cell {
width: 200px;
text-align: center !important;
}
</style>