first commit

This commit is contained in:
2026-09-09 09:14:28 +08:00
commit 5343198112
5199 changed files with 1052895 additions and 0 deletions
@@ -0,0 +1,272 @@
<template>
<div style="display: flex;align-items: center;justify-content: center">
<el-form :model="formData" ref="form" :rules="formRules" v-loading="loading" label-width="100px"
style="width: 1000px">
<vi-title title="申请变更"></vi-title>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="工&emsp;&emsp;号">
<el-input :value="formData.loginname" disabled></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="姓&emsp;&emsp;名">
<el-input :value="formData.username" disabled></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="所在单位">
<el-input :value="formData.unitname" disabled></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="所在工会">
<el-input :value="formData.unionname"
disabled></el-input>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="变更时间">
<el-input :value="formData.auditTime" disabled></el-input>
</el-form-item>
<el-form-item prop="type" label="变更类型">
<dict-select v-model="formData.type" style="width: 100%" clearable placeholder="变更类型"
code="MemberChangeType" @change="typeChange"></dict-select>
</el-form-item>
<!--异动-->
<div v-if="formData.type==='1'">
<el-form-item prop="type" label="新&ensp;单&ensp;位">
<el-select v-model="formData.currentUnitId" style="width: 100%" filterable clearable
@change="unitChange"
placeholder="请选择单位">
<el-option
v-for="item in unitOptions"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item prop="type" label="新&ensp;工&ensp;会">
<el-input :value="formData.currentUnionName" disabled placeholder=""></el-input>
</el-form-item>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="新科室" prop="currentThreeUnitId">
<el-select v-model="formData.currentThreeUnitId" clearable filterable
placeholder="请选择新科室"
@change="threeUnitChange"
style="width: 100%">
<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 :span="12">
<el-form-item label="工会小组">
<el-input :value="formData.currentUnionGroupName" disabled></el-input>
</el-form-item>
</el-col>
</el-row>
</div>
<div v-else-if="welfare_member&&['3','4','5','6','8'].includes(formData.type)">
<el-form-item prop="updateWelfareMember" label="是否同时取消享受福利" label-width="170px">
<el-switch
v-model="formData.updateWelfareMember"
active-color="#13ce66"
inactive-color="#ff4949">
</el-switch>
<span style="color: red">&emsp;&emsp;&emsp;温馨提醒此操作将取消该教工正式会员资格</span>
</el-form-item>
</div>
<div v-else-if="welfare_member&&['2','7'].includes(formData.type)">
<el-form-item prop="updateWelfareMember" label="是否同时享受福利" label-width="170px">
<el-switch
v-model="formData.updateWelfareMember"
active-color="#13ce66"
inactive-color="#ff4949">
</el-switch>
<span style="color: red">&emsp;&emsp;&emsp;温馨提醒此操作将该教工设为正式会员</span>
</el-form-item>
</div>
<el-form-item prop="remark" label="变化原因">
<el-input v-model="formData.remark" placeholder="变化原因" type="textarea" :rows="4"></el-input>
</el-form-item>
<el-row style="display: flex;justify-content:flex-end;">
<el-button @click="doSubmit" :loading="submitLoading" :disabled="disabled" type="primary">
提交
</el-button>
</el-row>
</el-form>
</div>
</template>
<script>
module.exports = {
components: {
'dict-select': httpVueLoader('/components/plugins/DictSelect.vue?v=1.0.0'),
},
props: {
userid: {type: String},
welfare_member: {type: Boolean, default: true},
},
data() {
return {
loading: true,
disabled: false,
submitLoading: false,
formData: {},
formRules: {
type: [{required: true, message: '必选', trigger: ['blur', 'change']}],
updateWelfareMember: [{required: true, message: '必选', trigger: ['blur', 'change']}],
currentUnitId: [{required: true, message: '必选', trigger: ['blur', 'change']}],
currentThreeUnitId: [{required: true, message: '请选择新三级单位', trigger: 'change'}]
},
unitOptions: [],
threeUnits: []
}
},
watch: {
userid(val) {
this.flush()
}
},
methods: {
typeChange() {
this.$set(this.formData, "updateWelfareMember", ['2', '3', '4', '5', '6', '7', '8'].includes(this.formData.type))
},
async doSubmit() {
this.$refs["form"].validate((valid) => {
if (valid) {
this.submitLoading = true
this.$emit("submit", this.formData)
}
})
},
closeLoading() {
this.submitLoading = false
},
unitChange(v) {
// const unit = this.unitOptions.find(x => x.id === v)
// if (unit) {
// this.formData.currentUnionId = unit.unionid
// this.formData.currentUnionName = unit.unionname
// } else {
// this.formData.currentUnionId = ''
// this.formData.currentUnionName = ''
// }
this.$set(this.formData, 'currentThreeUnitId', null)
this.$set(this.formData, 'currentUnionGroupName', null)
this.threeUnits = []
if (v) {
this.getThreeUnits(v)
}
const unit = this.unitOptions.find(x => x.id === v)
if (unit) {
this.$set(this.formData, 'currentUnionId', unit.unionid)
this.$set(this.formData, 'currentUnionName', unit.unionname)
} else {
this.$set(this.formData, 'currentUnionId', null)
this.$set(this.formData, 'currentUnionName', null)
}
},
async getThreeUnits(val) {
this.threeUnits = await threeUnitsByUnionGroupOrUnitId(val, null)
},
async threeUnitChange(val) {
if (val) {
const threeUnit = this.threeUnits.find(v => v.id === val)
const groupName = threeUnit.groupname
this.$set(this.formData, 'currentUnionGroupName', groupName)
} else {
this.$set(this.formData, 'currentUnionGroupName', null)
}
},
async flush() {
this.loading = true
this.disabled = false
if (!this.userid) {
this.formData = {}
this.loading = false
this.disabled = true
return
}
const resp = await $.get("/platform/member/common/userInfo", {userId: this.userid})
if (resp.code === 0) {
if (this.$refs["form"])
this.$refs["form"].resetFields();
this.formData = {
userId: resp.data.id,
loginname: resp.data.loginname,
username: resp.data.username,
unitname: resp.data.unitname,
unionname: resp.data.unionname,
originUnitId: resp.data.unitid,
originThreeUnitId: resp.data.threeUnitId,
originUnionId: resp.data.unionid,
auditTime: moment().format('YYYY-MM-DD'),
notes: null
}
this.disabled = false
} else {
this.disabled = true
this.$notify.error({
title: '错误',
message: '获取用户信息失败'
});
}
this.loading = false
},
async getUnits() {
const resp = await $.post('/platform/member/change/mange/units')
if (resp.code === 0) {
this.unitOptions = resp.data
}
}
},
created() {
this.getUnits()
this.flush()
// getUnits(null).then(res => this.unitOptions = res)
}
}
</script>
<style>
.is-flex {
display: flex;
}
.is-flex .el-form-item {
width: 50%;
}
</style>
@@ -0,0 +1,235 @@
<template>
<div>
<el-table :data="records" style="width: 100%" row-key="id"
@expand-change="onExpand">
<el-table-column type="expand">
<template slot-scope="{row}">
<el-form class="demo-table-expand" v-loading="row.loading"
label-position="right" label-suffix="" label-width="120px">
<vi-title title="变更信息"></vi-title>
<el-form-item label="变更原因">
{{ row.remark }}
</el-form-item>
<!--异动-->
<template v-if="row.type==1">
<vi-title title="异动信息"></vi-title>
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="原科室">
<span>{{ row.originThreeUnitName }}</span>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="原单位">
<span>{{ row.originUnitName }}</span>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="原工会">
<span>{{ row.originUnionName }}</span>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="新科室">
<span>{{ row.currentThreeUnitName }}</span>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="新单位">
<span>{{ row.currentUnitName }}</span>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="新工会">
<span>{{ row.currentUnionName }}</span>
</el-form-item>
</el-col>
</el-row>
</template>
<template v-if="audit_info_union&&row.info.unionAudit">
<vi-title title="基层工会审核信息"></vi-title>
<el-row :gutter="20" v-if="row.info&&row.info.unionAudit">
<el-col :span="12">
<el-form-item label="审核人员">
<span>{{ row.info.unionAudit.username }}</span>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="审核时间">
<span>{{ row.info.unionAudit.auditTime }}</span>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="审核意见">
<span>{{ row.info.unionAudit.auditOpinion }}</span>
</el-form-item>
</el-col>
</el-row>
<el-row v-else type="flex" justify="center">
<el-form-item label="暂无审核信息">
</el-form-item>
</el-row>
</template>
<template v-if="audit_info_school&&row.info.schoolAudit">
<vi-title title="校工会审核信息"></vi-title>
<el-row :gutter="20" v-if="row.info&&row.info.schoolAudit">
<el-col :span="12">
<el-form-item label="审核人员">
<span>{{ row.info.schoolAudit.username }}</span>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="审核时间">
<span>{{ row.info.schoolAudit.auditTime }}</span>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label="审核意见">
<span>{{ row.info.schoolAudit.auditOpinion }}</span>
</el-form-item>
</el-col>
</el-row>
<el-row v-else type="flex" justify="center">
<el-form-item label="暂无审核信息">
</el-form-item>
</el-row>
</template>
</el-form>
</template>
</el-table-column>
<el-table-column align="center" header-align="center" label="序号"
type="index"></el-table-column>
<el-table-column label="申请人" prop="username" header-align="center"
align="center"></el-table-column>
<el-table-column label="申请时间" prop="applyTime" header-align="center"
align="center"></el-table-column>
<el-table-column label="申请方式" prop="type" header-align="center"
align="center">
<template scope="{row:{applyOrigin}}">
{{ changeOrigin[applyOrigin] }}
</template>
</el-table-column>
<el-table-column label="变更类型" prop="type" header-align="center"
align="center">
<template scope="{row:{type}}">
{{ changeType[type] }}
</template>
</el-table-column>
<el-table-column label="状态" prop="stateId" header-align="center"
align="center">
<template scope="{row}">
<span :style="'color:'+row.stateColor">{{ row.stateName }}</span>
</template>
</el-table-column>
</el-table>
</div>
</template>
<script>
module.exports = {
components: {},
props: {
records: {type: Array, default: []},
userid: {type: String},
audit_info_union: {type: Boolean, default: true},
audit_info_school: {type: Boolean, default: true}
},
model: {
prop: 'records',
event: 'change'
},
data() {
return {
loading: true,
changeType: {},
changeOrigin: {},
}
},
watch: {
userid(val) {
this.getMemberChangeRecords()
}
},
methods: {
async onExpand(row, expandedRows) {
if (!expandedRows.includes(row)) {
return
}
this.$set(row, "loading", true)
const resp = await $.get("/platform/member/common/findChangeApplyInfo", {id: row.id})
this.$set(row, "loading", false)
if (resp.code === 0) {
this.$set(row, "info", resp.data)
} else {
this.$set(row, "info", {})
}
},
async getMemberChangeRecords() {
this.loading = true
if (!this.userid && this.records.length) {
this.loading = false
return
} else if (!this.userid) {
this.records = []
this.loading = false
return
}
const resp = await $.get("/platform/member/common/memberChangeRecords", {userId: this.userid})
this.loading = false
if (resp.code === 0) {
this.records = resp.data
} else {
this.$notify.error({
title: '错误',
message: '获取变更记录失败'
});
}
},
},
async created() {
await this.getMemberChangeRecords()
this.changeType = await member.getChangeType()
this.changeOrigin = await member.getChangeOrigin()
}
}
</script>
<style>
.is-flex {
display: flex;
}
.is-flex .el-form-item {
width: 50%;
}
</style>
@@ -0,0 +1,59 @@
/**
*Desc:
*Create by: jug
*Create time:2023/6/8/10:29
*/
<template>
<div>
<el-input v-model="cnd.memberSearchKeyWord" placeholder="请输入值" style="width: 100%">
<el-select v-model="cnd.memberSearchName" slot="prepend" placeholder="请选择字段" style="width: 120px">
<el-option
v-for="column in columnInfos"
:key="column.COLUMN_NAME"
:label="column.COLUMN_COMMENT"
:value="column.COLUMN_NAME">
</el-option>
</el-select>
</el-input>
</div>
</template>
<script>
module.exports = {
name: "MemberCnd",
props: {},
components: {'enum-select': httpVueLoader('/components/plugins/EnumSelect.vue?v=1.0.0'),},
data() {
return {
columnInfos: [],
cnd: {}
}
},
watch: {
cnd: {
handler(val) {
this.$emit('cnd', val)
},
deep: true
}
},
methods: {
async getColumnInfo() {
const {data, msg, code} = await $.post('/platform/activity/basic/scope/getUserTableColumnInfo')
if (code !== 0) {
this.$notify.warning(msg)
return
}
this.columnInfos = data
}
},
created() {
this.getColumnInfo()
}
}
</script>
<style scoped>
</style>
@@ -0,0 +1,993 @@
<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="displayUnionGroup">
<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="nameUsedBefore" label="曾&ensp;用&ensp;名">
<el-input maxlength="100" placeholder="曾用名"
v-model="formData.nameUsedBefore"></el-input>
</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 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-input v-model="formData.birthPlace" placeholder="出生地点"></el-input>
</el-form-item>
<el-form-item label="婚&emsp;&emsp;否">
<el-radio-group v-model="formData.marriage" size="small">
<el-radio label="已婚" border></el-radio>
<el-radio label="未婚" border></el-radio>
</el-radio-group>
</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="nationality" label="国&emsp;&emsp;籍">
<el-input v-model="formData.nationality" placeholder="国籍"></el-input>
</el-form-item>
<el-form-item prop="hometown" label="籍&emsp;&emsp;贯">
<el-input v-model="formData.hometown" placeholder="籍贯"></el-input>
</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="政治面貌">
<el-input maxlength="100" placeholder="政治面貌" v-model="formData.political"></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="wage" label="工&emsp;&emsp;资">
<el-input v-model="formData.wage" placeholder="工资"></el-input>
</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="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="idType" label="有效证件类型">
<dict-select
v-model="formData.idType"
placeholder="请选择有效证件类型"
style="width: 100%"
code="idType">
</dict-select>
</el-form-item>
<el-form-item prop="idType" label="证件有效日期">
<el-date-picker
format="yyyy-MM-dd"
value-format="yyyy-MM-dd"
v-model="formData.effectiveDate"
type="daterange"
range-separator=""
start-placeholder="开始日期"
end-placeholder="结束日期"
style="width: 100%">
</el-date-picker>
</el-form-item>
</div>
<div class="is-flex">
<el-form-item prop="idcard" label="身份证号">
<el-input v-model="formData.idcard" placeholder="身份证号"></el-input>
</el-form-item>
<el-form-item prop="weChat" label="微&ensp;信&ensp;号">
<el-input v-model="formData.weChat" placeholder="微信号"></el-input>
</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="qqnum" label="QQ号">
<el-input maxlength="20" placeholder="QQ号" v-model="formData.qqnum"></el-input>
</el-form-item>
</div>
<div class="is-flex">
<el-form-item prop="householdType" label="户籍类型">
<dict-select
v-model="formData.householdType"
placeholder="请选择户籍类型"
style="width: 100%"
code="householdType">
</dict-select>
</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>
<div class="is-flex">
<el-form-item prop="health" label="健康状况">
<dict-select
v-model="formData.health"
placeholder="请选择健康状况"
style="width: 100%"
code="health">
</dict-select>
</el-form-item>
<el-form-item prop="diseaseType" label="残疾类别">
<dict-select
v-model="formData.diseaseType"
placeholder="请选择残疾类别"
style="width: 100%"
code="diseaseType">
</dict-select>
</el-form-item>
</div>
<el-form-item label="疾病说明">
<el-input type="textarea" v-model="formData.diseaseDescription"
:autosize="{ minRows: 4}"></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-form>-->
</el-tab-pane>
<el-tab-pane label="工作信息" :name="2">
<!-- <el-form :model="formData" ref="form" :rules="formRules" label-width="140px" v-loading="loading">-->
<vi-title title="工作信息"></vi-title>
<div class="is-flex">
<el-form-item prop="isOutsiders" label="是否外来务工人员">
<el-radio-group v-model="formData.isOutsiders">
<el-radio :label="true" border></el-radio>
<el-radio :label="false" border></el-radio>
</el-radio-group>
</el-form-item>
</div>
<div class="is-flex">
<el-form-item prop="schoolTime" label="参加工作日期">
<el-date-picker
style="width: 100%;"
format="yyyy-MM-dd"
value-format="yyyy-MM-dd"
v-model="formData.schoolTime"
type="date"
placeholder="选择参加工作日期">
</el-date-picker>
</el-form-item>
<el-form-item prop="position" label="录用职位">
<el-input maxlength="100" placeholder="录用职位" v-model="formData.position"></el-input>
</el-form-item>
</div>
<div class="is-flex">
<el-form-item prop="majorCategory" label="所学专业类别">
<el-input maxlength="50" placeholder="所学专业类别" v-model="formData.majorCategory"></el-input>
</el-form-item>
<el-form-item prop="profession" label="从事专业">
<el-input v-model="formData.profession" placeholder="从事专业"></el-input>
</el-form-item>
</div>
<div class="is-flex">
<el-form-item prop="laborContractType" label="劳动合同制用工形式">
<el-input v-model="formData.laborContractType" placeholder="劳动合同制用工形式"></el-input>
</el-form-item>
<el-form-item prop="occupationType" label="职业类别">
<el-input v-model="formData.occupationType" placeholder="职业类别"></el-input>
</el-form-item>
</div>
<el-form-item prop="notes" label="注&emsp;&emsp;释">
<el-input type="textarea" v-model="formData.notes" placeholder="注释"></el-input>
</el-form-item>
<el-form-item prop="vita" label="个人简历">
<div id="vitaEditor"></div>
</el-form-item>
<!-- </el-form>-->
</el-tab-pane>
<el-tab-pane label="会员信息" :name="3">
<!-- <el-form :model="formData" ref="form" :rules="formRules" label-width="160px" v-loading="loading">-->
<vi-title title="会员信息"></vi-title>
<div class="is-flex">
<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>
<el-form-item prop="memberNumber" label="会&ensp;员&ensp;号">
<el-input v-model="formData.memberNumber" placeholder="会员号"></el-input>
</el-form-item>
</div>
<div class="is-flex">
<el-form-item prop="awardWinning" label="工会特殊项标识">
<dict-select
v-model="formData.awardWinning"
placeholder="请选择工会特殊项标识"
style="width: 100%"
code="awardWinning">
</dict-select>
</el-form-item>
<el-form-item prop="membershipCardType" label="会员卡类型">
<el-input v-model="formData.membershipCardType" placeholder="会员卡类型"></el-input>
</el-form-item>
</div>
<div class="is-flex">
<el-form-item prop="isLeader" label="是否工会干部">
<el-radio-group v-model="formData.isLeader">
<el-radio :label="true" border></el-radio>
<el-radio :label="false" border></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item prop="isPay" label="是否缴纳会费">
<el-radio-group v-model="formData.isPay">
<el-radio :label="true" border></el-radio>
<el-radio :label="false" border></el-radio>
</el-radio-group>
</el-form-item>
</div>
<div class="is-flex">
<el-form-item prop="isPhysicaisCard" label="是否办理工会实体卡">
<el-radio-group v-model="formData.isPhysicaisCard">
<el-radio :label="true" border></el-radio>
<el-radio :label="false" border></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item prop="isCardActivated" label="工会实体卡是否激活">
<el-radio-group v-model="formData.isCardActivated">
<el-radio :label="true" border></el-radio>
<el-radio :label="false" border></el-radio>
</el-radio-group>
</el-form-item>
</div>
<div class="is-flex">
<el-form-item prop="cardNum" label="工会实体卡卡号">
<el-input v-model="formData.cardNum" placeholder="工会实体卡卡号"></el-input>
</el-form-item>
<el-form-item prop="cardBankNum" label="工会实体卡银行卡号">
<el-input v-model="formData.cardBankNum" placeholder="工会实体卡银行卡卡号"></el-input>
</el-form-item>
</div>
<div class="is-flex">
<el-form-item prop="electronicCardNumber" label="电子会员卡卡号">
<el-input v-model="formData.electronicCardNumber" placeholder="电子会员卡卡号"></el-input>
</el-form-item>
<el-form-item prop="electronicCardNumberTime" label="电子会员卡发放时间">
<el-date-picker
format="yyyy-MM-dd"
value-format="yyyy-MM-dd"
v-model="formData.electronicCardNumberTime"
type="date"
placeholder="选择日期"
style="width: 100%">
</el-date-picker>
</el-form-item>
</div>
<!-- </el-form>-->
</el-tab-pane>
<el-tab-pane label="家庭及社会信息" :name="4">
<!-- <el-form :model="formData" ref="form" :rules="formRules" label-width="120px" v-loading="loading">-->
<vi-title title="家庭及社会信息"></vi-title>
<div class="is-flex">
<el-form-item prop="personalStatus" label="个人身份">
<el-input v-model="formData.personalStatus" placeholder="个人身份"></el-input>
</el-form-item>
<el-form-item prop="socialIdentity" label="社会身份">
<el-input v-model="formData.socialIdentity" placeholder="社会身份"></el-input>
</el-form-item>
</div>
<div class="is-flex">
<el-form-item prop="otherIdentity" label="其他社会身份">
<el-input v-model="formData.otherIdentity" placeholder="其他社会身份"></el-input>
</el-form-item>
<el-form-item prop="employmentStatus" label="就业状况">
<el-input v-model="formData.employmentStatus" placeholder="就业状况"></el-input>
</el-form-item>
</div>
<div class="is-flex">
<el-form-item prop="homePhone" label="住宅电话">
<el-input v-model="formData.homePhone" placeholder="住宅电话"></el-input>
</el-form-item>
<el-form-item prop="otherPhone" label="其他电话">
<el-input v-model="formData.otherPhone" placeholder="其他电话"></el-input>
</el-form-item>
</div>
<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="mailingAddress" label="通信地址">
<el-input v-model="formData.mailingAddress" placeholder="通信地址"></el-input>
</el-form-item>
</div>
<div class="is-flex">
<el-form-item prop="otherContactInformation" label="其他联系方式">
<el-input v-model="formData.otherContactInformation" placeholder="其他联系方式"></el-input>
</el-form-item>
<el-form-item prop="registeredResidence" label="户籍所在地">
<el-input v-model="formData.registeredResidence" placeholder="户籍所在地"></el-input>
</el-form-item>
</div>
<div class="is-flex">
<el-form-item prop="postalCode" label="邮政编码">
<el-input v-model="formData.postalCode" placeholder="邮政编码"></el-input>
</el-form-item>
<el-form-item prop="familyPopulation" label="家庭人口数">
<el-input v-model="formData.familyPopulation" 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="unit" label="单位" align="center" header-align="center">
<template slot-scope="scope">
<el-input placeholder="请输入单位" maxlength="100" v-model="scope.row.unit" clearable></el-input>
</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>
<el-form label-width="100px" v-loading="loading" label-position="left" label-suffix="">
<el-row gutter="20">
<el-col :span="18">
<el-row gutter="20">
<el-col :span="8">
<el-form-item label="姓&emsp;&emsp;名">
{{ formData.username }}
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="工&emsp;&emsp;号">
{{ formData.loginname }}
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="性&emsp;&emsp;别">
{{ formData.sex }}
</el-form-item>
</el-col>
</el-row>
<el-row gutter="20">
<el-col :span="8">
<el-form-item label="所在科室">
{{ formData.threeUnitName }}
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="所在单位">
{{ formData.unitname }}
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="所在工会">
{{ formData.unionname }}
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="政治面貌">
{{ formData.political }}
</el-form-item>
</el-col>
</el-row>
<el-row gutter="20">
<el-col :span="8">
<el-form-item label="出生日期">
{{ formData.birthday }}
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="籍&emsp;&emsp;贯">
{{ formData.hometown }}
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="民&emsp;&emsp;族">
{{ formData.nation }}
</el-form-item>
</el-col>
</el-row>
</el-col>
<el-col :span="6">
<el-image :src="APP_DOMAIN+FILE_STREAM_PREVIEW_ADDRESS + '?id=' +formData.avatar"
style="width: 180px;height: 180px;display: flex;justify-content: center;align-items: center;background-color: #f5f7fa">
<div slot="error" class="image-slot">
<i class="el-icon-picture-outline" style="font-size: 24px"></i>
</div>
</el-image>
</el-col>
</el-row>
<el-row gutter="20">
<el-col :span="6">
<el-form-item label="兴趣爱好">
{{ formData.hobby }}
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="婚&emsp;&emsp;否">
{{ formData.marriage }}
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="学&emsp;&emsp;历">
{{ formData.education }}
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="工&emsp;&emsp;资">
{{ formData.wage }}
</el-form-item>
</el-col>
</el-row>
<el-row gutter="20">
<el-col :span="6">
<el-form-item label="人事编制">
{{ formData.preparedBy }}
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="职&emsp;&emsp;务">
{{ formData.position }}
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="职&emsp;&emsp;称">
{{ formData.jobTitle }}
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="在职状态">
{{ formData.userState }}
</el-form-item>
</el-col>
</el-row>
<el-row gutter="20">
<el-col :span="6">
<el-form-item label="人员类型">
{{ formData.personType }}
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="手&ensp;机&ensp;号">
{{ formData.mobile }}
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="银行账号">
{{ formData.bank_number }}
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="身份证号">
{{ formData.idcard }}
</el-form-item>
</el-col>
</el-row>
<el-form-item label="个人简历">
<div v-html="formData.vita"></div>
</el-form-item>
<el-form-item label="家庭成员">
<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="unit" 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-form-item>
</el-form>
</div>
</div>
</template>
<script>
let vitaEditor = null
module.exports = {
components: {
'dict-select': httpVueLoader('/components/plugins/DictSelect.vue?v=1.0.4'),
},
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}
},
// model: {
// prop: 'value',
// event: 'change'
// },
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: [],
displayUnionGroup: 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
this.$nextTick(() => {
$("#vitaEditor").html("")
vitaEditor = new wangEditor("#vitaEditor")
vitaEditor.config.onchange = (html) => {
this.formData.vita = html
}
vitaEditor.create()
vitaEditor.txt.html(data.vita)
})
},
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.displayUnionGroup = await getConfigKey('SysUnionGroup') === 'true'
this.isAllowModify = await getConfigKey('MemberInfoModify') === 'true'
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.displayUnionGroup = await getConfigKey('SysUnionGroup') === '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;
}
</style>