会员
This commit is contained in:
@@ -209,4 +209,83 @@
|
||||
::-webkit-scrollbar-thumb {
|
||||
background-color: silver;
|
||||
border-radius: 3px
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.process-task-record .el-descriptions__header {
|
||||
margin: 0;
|
||||
/*border: 1px solid var(--border-color-lighter);*/
|
||||
border-bottom: 0;
|
||||
padding: 10px 5px;
|
||||
/*background: var(--table-header-background-color);*/
|
||||
color: #1867b0;
|
||||
}
|
||||
|
||||
.process-task-record .el-descriptions__header .el-descriptions__title {
|
||||
font-weight: 600;
|
||||
letter-spacing: 1px;
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.process-task-record .el-descriptions {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
|
||||
.process-title {
|
||||
font-size: 20px;
|
||||
color: #000000;
|
||||
font-weight: 600;
|
||||
margin: 10px 0 10px 0;
|
||||
padding-left: 10px;
|
||||
position: relative;
|
||||
line-height: 1.1;
|
||||
font-family: inherit;
|
||||
}
|
||||
|
||||
.process-title::before {
|
||||
content: "";
|
||||
width: 5px;
|
||||
background: #1867b0;
|
||||
display: inline-block;
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
}
|
||||
|
||||
.signature-image {
|
||||
height: 100px;
|
||||
width: auto;
|
||||
}
|
||||
|
||||
.form-box {
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.descriptions-form .el-form-item {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.descriptions-form th.el-descriptions-item__label:has(+ td.el-descriptions-item__content > div.el-form-item.is-required):before {
|
||||
content: "*";
|
||||
color: #f56c6c;
|
||||
margin-right: 3px;
|
||||
}
|
||||
|
||||
.descriptions-form .el-form-item .el-form-item__label {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.descriptions-form .el-form-item .el-form-item__content > div {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
|
||||
.descriptions-form .el-form-item input, .descriptions-form .el-form-item textarea {
|
||||
/*border: none;*/
|
||||
}
|
||||
|
||||
.descriptions-form .el-form-item .el-date-editor {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,68 @@
|
||||
const commonUtil = {
|
||||
//权限认证
|
||||
authService() {
|
||||
function authPermission(permission) {
|
||||
// if (typeof permission !== "string" || !permission.trim()) {
|
||||
// return false
|
||||
// }
|
||||
// const permissions = store.state.user.permissions
|
||||
// if (!Array.isArray(permissions) || permissions.length === 0) {
|
||||
// return false
|
||||
// }
|
||||
// const permissionsSet = new Set(permissions)
|
||||
// return permissionsSet.has(permission.trim())
|
||||
}
|
||||
|
||||
function authRole(role) {
|
||||
if (typeof role !== "string" || !role.trim()) {
|
||||
return false
|
||||
}
|
||||
const user = JSON.parse(window.sessionStorage.getItem('user'))
|
||||
const roles = user.roles.map((item) => item.code)
|
||||
if (!Array.isArray(roles) || roles.length === 0) {
|
||||
return false
|
||||
}
|
||||
const rolesSet = new Set(roles)
|
||||
return rolesSet.has(role.trim())
|
||||
}
|
||||
|
||||
return {
|
||||
// 验证用户是否具备某权限
|
||||
hasPermission(permission) {
|
||||
return authPermission(permission)
|
||||
},
|
||||
// 验证用户是否含有指定权限,只需包含其中一个
|
||||
hasPermissionOr(permissionsOrPermissionsStr) {
|
||||
const permissions = Array.isArray(permissionsOrPermissionsStr) ? permissionsOrPermissionsStr : permissionsOrPermissionsStr.split(",")
|
||||
return permissions.some((item) => {
|
||||
return authPermission(item)
|
||||
})
|
||||
},
|
||||
// 验证用户是否含有指定权限,必须全部拥有
|
||||
hasPermissionAnd(permissionsOrPermissionsStr) {
|
||||
const permissions = Array.isArray(permissionsOrPermissionsStr) ? permissionsOrPermissionsStr : permissionsOrPermissionsStr.split(",")
|
||||
return permissions.every((item) => {
|
||||
return authPermission(item)
|
||||
})
|
||||
},
|
||||
// 判断用户是否拥有某个角色
|
||||
hasRole(role) {
|
||||
return authRole(role)
|
||||
},
|
||||
// 判断用户是否拥有某些角色中的任意一个
|
||||
hasRoleOr(rolesOrRoleStr) {
|
||||
const roles = Array.isArray(rolesOrRoleStr) ? rolesOrRoleStr : rolesOrRoleStr.split(",")
|
||||
return roles.some((item) => {
|
||||
return authRole(item.trim())
|
||||
})
|
||||
},
|
||||
// 判断用户是否拥有某些角色中的所有
|
||||
hasRoleAnd(rolesOrRoleStr) {
|
||||
const roles = Array.isArray(rolesOrRoleStr) ? rolesOrRoleStr : rolesOrRoleStr.split(",")
|
||||
return roles.every((item) => {
|
||||
return authRole(item)
|
||||
})
|
||||
}
|
||||
}
|
||||
},
|
||||
}
|
||||
@@ -154,7 +154,7 @@
|
||||
<el-form-item prop="updateUserState" label="是否改变在职状态" style="width: 100%">
|
||||
<dict-select v-model="formData.changeUserState" style="width: 100%" clearable
|
||||
placeholder="是否改变在职状态"
|
||||
code="userState"></dict-select>
|
||||
code="USER_STATE"></dict-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
@@ -169,7 +169,7 @@
|
||||
<el-form-item prop="updateUserState" label="是否改变人员类型" style="width: 100%">
|
||||
<dict-select v-model="formData.changePersonType" style="width: 100%" clearable
|
||||
placeholder="是否改变人员类型"
|
||||
code="UserType"></dict-select>
|
||||
code="PERSON_TYPE"></dict-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
@@ -201,7 +201,7 @@
|
||||
<el-form-item prop="education" label="新的学历" style="width: 100%">
|
||||
<dict-select v-model="formData.changeEducation" style="width: 100%" clearable
|
||||
placeholder="请选择新的学历"
|
||||
code="Education"></dict-select>
|
||||
code="USER_EDUCATION"></dict-select>
|
||||
</el-form-item>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -76,7 +76,7 @@
|
||||
|
||||
<div class="is-flex">
|
||||
<el-form-item prop="education" label="学  历">
|
||||
<dict-select v-model="formData.education" style="width: 100%" placeholder="请选择学历" code="Education"></dict-select>
|
||||
<dict-select v-model="formData.education" style="width: 100%" placeholder="请选择学历" code="USER_EDUCATION"></dict-select>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item prop="academicDegree" label="学  位">
|
||||
@@ -84,7 +84,7 @@
|
||||
v-model="formData.academicDegree"
|
||||
style="width: 100%"
|
||||
placeholder="请选择学位"
|
||||
code="academicDegree"
|
||||
code="USER_ACADEMIC_DEGREE"
|
||||
></dict-select>
|
||||
</el-form-item>
|
||||
</div>
|
||||
@@ -100,7 +100,7 @@
|
||||
v-model="formData.political"
|
||||
style="width: 100%"
|
||||
placeholder="请选择政治面貌"
|
||||
code="political"
|
||||
code="USER_POLITICAL"
|
||||
></dict-select>
|
||||
</el-form-item>
|
||||
</div>
|
||||
@@ -110,7 +110,7 @@
|
||||
v-model="formData.personType"
|
||||
style="width: 100%"
|
||||
placeholder="请选择人员类型"
|
||||
code="UserType"
|
||||
code="PERSON_TYPE"
|
||||
></dict-select>
|
||||
</el-form-item>
|
||||
|
||||
@@ -119,7 +119,7 @@
|
||||
v-model="formData.userState"
|
||||
style="width: 100%"
|
||||
placeholder="请选择在职状态"
|
||||
code="UserState"
|
||||
code="USER_STATE"
|
||||
></dict-select>
|
||||
</el-form-item>
|
||||
</div>
|
||||
|
||||
@@ -95,7 +95,7 @@
|
||||
<dict-select v-model="pageForm.personType" style="width: 100%" clearable
|
||||
placeholder="人员类型"
|
||||
@change="doSearch"
|
||||
code="UserType"></dict-select>
|
||||
code="PERSON_TYPE"></dict-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -105,7 +105,7 @@
|
||||
<dict-select v-model="pageForm.userState" style="width: 100%" clearable
|
||||
placeholder="在职状态"
|
||||
@change="doSearch"
|
||||
code="UserState"></dict-select>
|
||||
code="USER_STATE"></dict-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -665,8 +665,8 @@ module.exports = {
|
||||
}*/
|
||||
await this.flushUnits()
|
||||
await this.getActivityGroup()
|
||||
this.personTypeOptions = await getDictOptions("UserType")
|
||||
this.userStateOptions = await getDictOptions("UserState")
|
||||
this.personTypeOptions = await getDictOptions("PERSON_TYPE")
|
||||
this.userStateOptions = await getDictOptions("USER_STATE")
|
||||
await this.getMenuOptions()
|
||||
await this.pageData()
|
||||
},
|
||||
|
||||
@@ -81,8 +81,8 @@ module.exports = {
|
||||
clearInterval(signatureInterval)
|
||||
const ts = new Date().getTime() + (Math.floor(Math.random() * (1000 - 1 + 1)) + 1).toString()
|
||||
console.log(ts)
|
||||
// this.postAddress = location.protocol + '//' + location.host + '/signature?prefix=' + this.prefix + '&id=' + ts + "&is_value_base64=" + this.is_value_base64
|
||||
this.postAddress = 'https://zhgh.hmc.edu.cn/signature?prefix=' + this.prefix + '&id=' + ts + "&is_value_base64=" + this.is_value_base64
|
||||
this.postAddress = location.protocol + '//' + location.host + '/signature?prefix=' + this.prefix + '&id=' + ts + "&is_value_base64=" + this.is_value_base64
|
||||
// this.postAddress = 'https://zhgh.hmc.edu.cn/signature?prefix=' + this.prefix + '&id=' + ts + "&is_value_base64=" + this.is_value_base64
|
||||
|
||||
this.showQrCode = true
|
||||
|
||||
|
||||
@@ -64,7 +64,7 @@
|
||||
<dict-select v-model="pageForm.personType" style="width: 100%" clearable
|
||||
placeholder="人员类型"
|
||||
@change="doSearch"
|
||||
code="UserType"></dict-select>
|
||||
code="PERSON_TYPE"></dict-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -74,7 +74,7 @@
|
||||
<dict-select v-model="pageForm.userState" style="width: 100%" clearable
|
||||
placeholder="在职状态"
|
||||
@change="doSearch"
|
||||
code="UserState"></dict-select>
|
||||
code="USER_STATE"></dict-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -624,8 +624,8 @@ module.exports = {
|
||||
}
|
||||
await this.flushUnits()
|
||||
await this.getActivityGroup()
|
||||
this.personTypeOptions = await getDictOptions("UserType")
|
||||
this.userStateOptions = await getDictOptions("UserState")
|
||||
this.personTypeOptions = await getDictOptions("PERSON_TYPE")
|
||||
this.userStateOptions = await getDictOptions("USER_STATE")
|
||||
await this.getMenuOptions()
|
||||
await this.pageData()
|
||||
},
|
||||
|
||||
@@ -103,6 +103,7 @@
|
||||
<script src="${base!}/components/plugins/sysDict/DictData.js"></script>
|
||||
|
||||
<script src="${base!}/assets/platform/js/chengSh.js"></script>
|
||||
<script src="${base!}/assets/platform/js/util/commonUtil.js"></script>
|
||||
<script src="${base!}/assets/platform/plugins/xlsx/xlsx.full.min.js"></script>
|
||||
|
||||
<!-- <script src="${base!}/assets/platform/js/chengSh.js"></script>-->
|
||||
@@ -144,7 +145,7 @@
|
||||
};
|
||||
window.viewImage = viewImage;
|
||||
Vue.prototype.$viewImage = viewImage
|
||||
|
||||
Vue.prototype.$auth = commonUtil.authService()
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
<!--#
|
||||
layout("/mobile/platform.html"){
|
||||
#-->
|
||||
<div id="app" v-cloak>
|
||||
|
||||
</div>
|
||||
<script>
|
||||
new Vue({
|
||||
el: '#app',
|
||||
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -296,8 +296,8 @@ layout("/layouts/platform.html"){
|
||||
}
|
||||
this.flushUnits()
|
||||
await this.getActivityGroup()
|
||||
this.personTypeOptions = await getDictOptions("UserType")
|
||||
this.userStateOptions = await getDictOptions("UserState")
|
||||
this.personTypeOptions = await getDictOptions("PERSON_TYPE")
|
||||
this.userStateOptions = await getDictOptions("USER_STATE")
|
||||
await this.getMenuOptions()
|
||||
this.pageData()*/
|
||||
|
||||
|
||||
@@ -120,7 +120,7 @@ layout("/layouts/platform.html"){
|
||||
<dict-select v-model="pageForm.personType" style="width: 100%" clearable
|
||||
placeholder="人员类型"
|
||||
@change="doSearch"
|
||||
code="UserType"></dict-select>
|
||||
code="PERSON_TYPE"></dict-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -130,7 +130,7 @@ layout("/layouts/platform.html"){
|
||||
<dict-select v-model="pageForm.userState" style="width: 100%" clearable
|
||||
placeholder="在职状态"
|
||||
@change="doSearch"
|
||||
code="UserState"></dict-select>
|
||||
code="USER_STATE"></dict-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -87,7 +87,7 @@ layout("/layouts/platform.html"){
|
||||
<div class="search-item-option">
|
||||
<dict-select v-model="pageForm.personType" style="width: 100%" clearable
|
||||
placeholder="人员类型"
|
||||
code="UserType"></dict-select>
|
||||
code="PERSON_TYPE"></dict-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -96,7 +96,7 @@ layout("/layouts/platform.html"){
|
||||
<div class="search-item-option">
|
||||
<dict-select v-model="pageForm.userState" style="width: 100%" clearable
|
||||
placeholder="在职状态"
|
||||
code="UserState"></dict-select>
|
||||
code="USER_STATE"></dict-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -48,12 +48,12 @@ layout("/layouts/platform.html"){
|
||||
|
||||
<div class="btn-group tool-button mt5">
|
||||
<dict-select v-model="pageForm.personType" style="width: 200px" clearable placeholder="人员类型"
|
||||
code="UserType"></dict-select>
|
||||
code="PERSON_TYPE"></dict-select>
|
||||
</div>
|
||||
|
||||
<div class="btn-group tool-button mt5">
|
||||
<dict-select v-model="pageForm.userState" style="width: 200px" clearable placeholder="在职状态"
|
||||
code="UserState"></dict-select>
|
||||
code="USER_STATE"></dict-select>
|
||||
</div>
|
||||
|
||||
<div class="btn-group tool-button mt5">
|
||||
|
||||
@@ -61,13 +61,13 @@ layout("/layouts/platform.html"){
|
||||
<div class="btn-group tool-button">
|
||||
<dict-select v-model="pageForm.personType" style="width: 200px"
|
||||
clearable placeholder="人员类型"
|
||||
code="UserType"></dict-select>
|
||||
code="PERSON_TYPE"></dict-select>
|
||||
</div>
|
||||
|
||||
<div class="btn-group tool-button">
|
||||
<dict-select v-model="pageForm.userState" style="width: 200px" clearable
|
||||
placeholder="在职状态"
|
||||
code="UserState"></dict-select>
|
||||
code="USER_STATE"></dict-select>
|
||||
</div>
|
||||
<div class="btn-group tool-button">
|
||||
<el-button type="primary" icon="el-icon-search"
|
||||
|
||||
@@ -503,8 +503,8 @@ layout("/layouts/platform.html"){
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
const personType = await getDictOptions("UserType")
|
||||
const userState = await getDictOptions("userState")
|
||||
const personType = await getDictOptions("PERSON_TYPE")
|
||||
const userState = await getDictOptions("USER_STATE")
|
||||
|
||||
this.fields = this.fields.concat([{
|
||||
label: '人员类型',
|
||||
@@ -531,4 +531,4 @@ layout("/layouts/platform.html"){
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
#-->
|
||||
|
||||
@@ -191,7 +191,7 @@ layout("/layouts/platform.html"){
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="education" label="学历">
|
||||
<dict-select v-model="formData.education" code="Education"></dict-select>
|
||||
<dict-select v-model="formData.education" code="USER_EDUCATION"></dict-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
@@ -104,7 +104,7 @@ layout("/layouts/platform.html"){
|
||||
width="150px"
|
||||
show-overflow-tooltip>
|
||||
<template scope="{row}">
|
||||
<dict-select v-model="row.education" code="Education"
|
||||
<dict-select v-model="row.education" code="USER_EDUCATION"
|
||||
v-if="row.stateCode===0"></dict-select>
|
||||
<span v-else>{{row.education}}</span>
|
||||
</template>
|
||||
|
||||
@@ -0,0 +1,205 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app">
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<common-query ref="commonQueryRef" @search="search"></common-query>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" class="mt10">
|
||||
<table-tool :app="this" label="审核列表">
|
||||
<template #func>
|
||||
<el-radio-group @change="search" class="mr5" size="small" v-model="pageForm.audit">
|
||||
<el-radio-button label="true">已审核</el-radio-button>
|
||||
<el-radio-button label="false">未审核</el-radio-button>
|
||||
</el-radio-group>
|
||||
</template>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder" ref="table" row-key="id" style="width: 100%">
|
||||
<el-table-column :index="indexMethod" align="center" header-align="center"
|
||||
label="序号" type="index" width="80px"></el-table-column>
|
||||
<el-table-column :label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
:width="column.width"
|
||||
header-align="center"
|
||||
min-width="100px"
|
||||
show-overflow-tooltip
|
||||
v-for="column in tableColumns">
|
||||
<template scope="{row}" v-if="column.prop=='loginname'">
|
||||
<el-link @click="openView(row)" type="primary">{{row.loginname}}</el-link>
|
||||
</template>
|
||||
<template scope="{row}" v-if="column.prop=='allocationUnionName'">
|
||||
<el-tag v-if="row.allocationUnionName">{{ row.allocationUnionName }}</el-tag>
|
||||
<el-tag v-else type="danger">未分配</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="220">
|
||||
<template slot-scope="{row}">
|
||||
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
|
||||
<el-button v-if="[50].includes(row.applyStateId)" @click="openAudit(row)" size="mini" type="primary">审核</el-button>
|
||||
<el-button v-if="[70].includes(row.applyStateId)" @click="doRevoke(row)" size="mini" type="danger">撤回</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<member-apply-audit-info ref="memberApplyAuditInfoRef"></member-apply-audit-info>
|
||||
<div v-if="showApprovalForm">
|
||||
<div class="process-title" style="margin: 20px 0">分工会审核</div>
|
||||
<el-form :model="formData" ref="approvalFormRef" label-position="left" label-width="80px">
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="审核人" prop="username" :rules="[{required:true,message:'必填',trigger:['change','blur']}]">
|
||||
<el-input v-model="formData.username" readonly></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="审核时间" prop="auditTime" :rules="[{required:true,message:'必填',trigger:['change','blur']}]">
|
||||
<el-input v-model="formData.auditTime" readonly></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="24">
|
||||
<el-form-item label="审核意见" prop="auditOpinion" :rules="[{required:true,message:'必填',trigger:['change','blur']}]">
|
||||
<el-input type="textarea" v-model="formData.auditOpinion" rows="4" maxlength="300"
|
||||
placeholder="请填写审核意见" show-word-limit></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="审核签字" prop="auditSign" :rules="[{required:true,message:'必填',trigger:['change','blur']}]">
|
||||
<sign :is_value_base64="false" :qz.sync="formData.auditSign" prefix="member_apply_audit" ref="sign"></sign>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
<el-row type="flex" justify="end">
|
||||
<el-button plain @click="$refs.guava.index()">取消</el-button>
|
||||
<el-button type="danger" @click="doApproval(2)">退回重新申请</el-button>
|
||||
<el-button type="danger" @click="doApproval(0)">拒绝接收</el-button>
|
||||
<el-button type="primary" @click="doApproval(1)">同意接收</el-button>
|
||||
</el-row>
|
||||
</div>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
<script>
|
||||
<!--#include("../common/commonQuery.js"){}#-->
|
||||
<!--#include("../common/memberApplyAuditInfo.js"){}#-->
|
||||
<!--#include("../../common/memberInfo.js"){}#-->
|
||||
new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data(){
|
||||
return{
|
||||
pageForm: {
|
||||
audit: false
|
||||
},
|
||||
tableColumns: [
|
||||
{ prop: "loginname", label: "工号", sortable: true },
|
||||
{ prop: "username", label: "姓名", sortable: true },
|
||||
{ prop: "sex", label: "性别", sortable: true },
|
||||
{ prop: "userState", label: "在职状态", sortable: true },
|
||||
{ prop: "personType", label: "人员类型", sortable: true },
|
||||
{ prop: "unionName", label: "所属工会", sortable: true },
|
||||
{ prop: "unitName", label: "所属单位", sortable: true },
|
||||
{ prop: "allocationUnionName", label: "分配工会", sortable: true },
|
||||
{ prop: "stateName", label: "当前节点", sortable: true }
|
||||
],
|
||||
|
||||
id: '',
|
||||
showApprovalForm: false
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'common-query': COMMON_QUERY,
|
||||
'member-apply-audit-info': MEMBER_APPLY_AUDIT_INFO,
|
||||
'member-info': MEMBER_INFO,
|
||||
},
|
||||
methods: {
|
||||
openView(row){
|
||||
this.$refs.guava.view()
|
||||
this.$nextTick(() => {
|
||||
this.showApprovalForm = false
|
||||
this.$refs.memberApplyAuditInfoRef.onOpen(row.id)
|
||||
})
|
||||
},
|
||||
openAudit(row){
|
||||
const user = JSON.parse(window.sessionStorage.getItem('user'))
|
||||
this.id = row.id
|
||||
this.formData.username = user.username
|
||||
this.formData.auditTime = moment().format('YYYY-MM-DD HH:mm:ss')
|
||||
this.$refs.guava.view()
|
||||
this.$nextTick(() => {
|
||||
this.showApprovalForm = true
|
||||
this.$refs.memberApplyAuditInfoRef.onOpen(row.id)
|
||||
})
|
||||
},
|
||||
doApproval(approvalType){
|
||||
let msg = '确定要通过此条申请吗?'
|
||||
if (approvalType === 0) {
|
||||
msg = '拒绝后不可撤回,确定要拒绝此条申请吗?'
|
||||
} else if (approvalType === 2) {
|
||||
msg = '确定要退回此条申请吗?'
|
||||
}
|
||||
this.$confirm(msg, '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(async () => {
|
||||
this.formData.auditType = approvalType
|
||||
this.$refs.approvalFormRef.validate(async (valid) => {
|
||||
if (valid) {
|
||||
const resp = await $.post('/platform/member/apply/branchUnion/audit/approval', {
|
||||
audit: JSON.stringify(this.formData),
|
||||
id: this.id
|
||||
})
|
||||
if (resp.code === 0) {
|
||||
this.$message.success(resp.msg)
|
||||
this.$refs.guava.index()
|
||||
this.showApprovalForm = false
|
||||
this.pageData()
|
||||
} else {
|
||||
this.$message.error(resp.msg)
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
doRevoke(row){
|
||||
this.$confirm('确定要撤回该申请吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(async () => {
|
||||
const resp = await $.post('/platform/member/apply/branchUnion/audit/doRevoke', {id: row.id})
|
||||
if (resp.code === 0) {
|
||||
this.$message.success(resp.msg)
|
||||
this.pageData()
|
||||
} else {
|
||||
this.$message.error(resp.msg)
|
||||
}
|
||||
})
|
||||
},
|
||||
search(pageForm){
|
||||
if (pageForm) {
|
||||
this.pageForm = {...this.pageForm, ...pageForm}
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
},
|
||||
created(){
|
||||
this.pageData()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,90 @@
|
||||
const COMMON_QUERY = {
|
||||
template: /*language=HTML*/ `
|
||||
<div class="search">
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">姓名/工号</div>
|
||||
<div class="search-item-option">
|
||||
<el-input placeholder="请输入姓名或工号查询" clearable v-model="pageForm.searchKeyword"></el-input>
|
||||
</div>
|
||||
</div>
|
||||
<template v-if="$auth.hasRoleOr('sysadmin, SchoolUnionMemberAdmin, BranchUnionMemberAdmin')">
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">所属工会</div>
|
||||
<div class="search-item-option">
|
||||
<el-select @change="flushUnits" @clear="flushUnits" clearable filterable
|
||||
placeholder="请选择所属工会" style="width: 100%;" v-model="pageForm.unionId">
|
||||
<el-option :key="item.id" :label="item.unionname" :value="item.id"
|
||||
v-for="item in unions"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">所属单位</div>
|
||||
<div class="search-item-option">
|
||||
<el-select clearable filterable placeholder="请选择所属单位" style="width: 100%"
|
||||
v-model="pageForm.unitId">
|
||||
<el-option :key="item.id" :label="item.name" :value="item.id"
|
||||
v-for="item in units"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">在职状态</div>
|
||||
<div class="search-item-option">
|
||||
<dict-select v-model="pageForm.userState" style="width: 100%" placeholder="在职状态" @change="doSearch"
|
||||
code="USER_STATE"></dict-select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">人员类型</div>
|
||||
<div class="search-item-option">
|
||||
<dict-select v-model="pageForm.personType" style="width: 100%" placeholder="人员类型" @change="doSearch"
|
||||
code="PERSON_TYPE"></dict-select>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<div class="search-query">
|
||||
<el-button type="primary" icon="el-icon-search" @click="doSearch">搜索</el-button>
|
||||
</div>
|
||||
</div>
|
||||
`,
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return{
|
||||
unions: [],
|
||||
units: [],
|
||||
pageForm: {
|
||||
searchKeyword: '',
|
||||
unionId: '',
|
||||
unitId: '',
|
||||
userState: '',
|
||||
personType: ''
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
doSearch(){
|
||||
this.$emit('search', this.pageForm)
|
||||
},
|
||||
async initData(){
|
||||
if (this.$auth.hasRoleOr('sysadmin, SchoolUnionMemberAdmin, SchoolUnionAdmin')) {
|
||||
this.unions = await getUnions(this.pageForm.unionId)
|
||||
this.units = await getUnits()
|
||||
} else {
|
||||
const user = JSON.parse(window.sessionStorage.getItem('user'))
|
||||
this.unions = await getUnions(user.union.id)
|
||||
this.units = await getUnits(user.union.id)
|
||||
}
|
||||
},
|
||||
async flushUnits(){
|
||||
this.$set(this.pageForm, "unitId", null)
|
||||
this.units = []
|
||||
if (this.pageForm.unionId) {
|
||||
this.units = await getUnits(this.pageForm.unionId)
|
||||
}
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.initData()
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,109 @@
|
||||
const MEMBER_APPLY_AUDIT_INFO = {
|
||||
template: /*language=HTML*/ `
|
||||
<div>
|
||||
<el-tabs v-model="activeName">
|
||||
<el-tab-pane label="申请信息" name="basicInfo">
|
||||
<el-descriptions :column="3" border class="descriptions-form">
|
||||
<el-descriptions-item label="工号">{{ viewData.loginname }}</el-descriptions-item>
|
||||
<el-descriptions-item label="姓名">{{ viewData.username }}</el-descriptions-item>
|
||||
<el-descriptions-item label="性别">{{ viewData.sex }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="民族">{{ viewData.nation }}</el-descriptions-item>
|
||||
<el-descriptions-item label="出生日期">{{ moment(viewData.birthday).format("YYYY年MM月DD日") }}</el-descriptions-item>
|
||||
<el-descriptions-item label="政治面貌">{{ viewData.political }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="学历">{{ viewData.education }}</el-descriptions-item>
|
||||
<el-descriptions-item label="学位">{{ viewData.academicDegree }}</el-descriptions-item>
|
||||
<el-descriptions-item label="党政职务">{{ viewData.position }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="工作单位">{{ viewData.userUnitName }}</el-descriptions-item>
|
||||
<el-descriptions-item label="所属工会">{{ viewData.userUnionName }}</el-descriptions-item>
|
||||
<el-descriptions-item label="所属校区">{{ viewData.campus }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="身份证号码">{{ viewData.idCard }}</el-descriptions-item>
|
||||
<el-descriptions-item label="联系电话">{{ viewData.mobile }}</el-descriptions-item>
|
||||
<el-descriptions-item label="电子邮箱">{{ viewData.email }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="在职状态">{{ viewData.userState }}</el-descriptions-item>
|
||||
<el-descriptions-item label="人员类型">{{ viewData.personType }}</el-descriptions-item>
|
||||
<el-descriptions-item></el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="会员状态">{{ viewData.member ? '会员' : '非会员' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="福利会员状态">{{ viewData.welfareMember ? '福利会员' : '非福利会员' }}</el-descriptions-item>
|
||||
<el-descriptions-item></el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="家庭主要成员" :span="3">
|
||||
<el-table v-if="viewData.families&&viewData.families.length"
|
||||
:data="viewData.families" 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-empty v-else :image-size="50" description="暂无家庭成员信息"></el-empty>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="个人简况" :span="3">
|
||||
<template slot="label">个人简况</template>
|
||||
<div v-if="viewData.vita" class="text-left" v-html="viewData.vita"></div>
|
||||
<span v-else>无数据</span>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="校工会审核信息" name="school" v-if="viewData.schoolAudit">
|
||||
<div class="process-title">校工会审核信息</div>
|
||||
<el-descriptions :column="2" border class="table_fixed">
|
||||
<el-descriptions-item label="审核人员">{{ viewData.schoolAudit.username }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="审核时间">{{ viewData.schoolAudit.auditTime }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="分配工会" :span="2">
|
||||
<el-tag>{{ viewData.allocationUnionName }}</el-tag>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="审核意见" :span="2">{{ viewData.schoolAudit.auditOpinion }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="分工会接收信息" name="branch" v-if="viewData.branchAudit">
|
||||
<div class="process-title">分工会接收信息</div>
|
||||
<el-descriptions :column="2" border class="table_fixed">
|
||||
<el-descriptions-item label="审核人员">{{ viewData.branchAudit.username }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="审核时间">{{ viewData.branchAudit.auditTime }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="审核意见" :span="2">{{ viewData.branchAudit.auditOpinion }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</div>
|
||||
`,
|
||||
data() {
|
||||
return{
|
||||
activeName: "basicInfo",
|
||||
viewData: {
|
||||
schoolAudit: {},
|
||||
branchAudit: {}
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async onOpen(id){
|
||||
const resp = await $.post('/platform/member/apply/mine/findMemberApplyRecord', {id})
|
||||
if (resp.code === 0) {
|
||||
this.viewData = resp.data
|
||||
this.$emit('union-name', this.viewData.userUnionName)
|
||||
if (this.viewData.families) {
|
||||
this.viewData.families = JSON.parse(this.viewData.families)
|
||||
} else {
|
||||
this.viewData.families = []
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,546 +0,0 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
|
||||
<style>
|
||||
.v-body {
|
||||
display: flex;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
background-color: #f0f2f5;
|
||||
}
|
||||
|
||||
.v-card {
|
||||
width: calc(100% - 0px);
|
||||
height: calc(100% - 0px);
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.transition-row {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.transition-item {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
|
||||
.demo-table-expand {
|
||||
font-size: 0;
|
||||
}
|
||||
|
||||
.demo-table-expand label {
|
||||
color: #99a9bf;
|
||||
}
|
||||
|
||||
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<div class="v-body">
|
||||
<el-card class="v-card" shadow="never">
|
||||
<el-tabs v-model="activeName">
|
||||
<el-tab-pane label="申请入会" name="first">
|
||||
<div style="display: flex;width: 100%;height: 100%;align-items: center;justify-content: center;position: relative;padding: 10px">
|
||||
<el-card style="width: 500px">
|
||||
<div slot="header" class="clearfix">
|
||||
<h4>工会信息</h4>
|
||||
</div>
|
||||
<div v-loading="unionInfoLoading">
|
||||
<el-form label-suffix=":" label-width="120px">
|
||||
<el-form-item label="工会名称">{{unionInfo.unionname}}
|
||||
</el-form-item>
|
||||
<el-form-item label="工会编码">{{unionInfo.unioncode}}
|
||||
</el-form-item>
|
||||
<el-form-item label="工会负责人">{{unionInfo.manager}}
|
||||
</el-form-item>
|
||||
<el-form-item label="联系电话">{{unionInfo.telephone}}
|
||||
</el-form-item>
|
||||
<el-form-item label="加入方式">
|
||||
<el-radio-group v-model="memberStates">
|
||||
<el-radio :label="1">新增</el-radio>
|
||||
<!-- <el-radio :label="2">转入</el-radio>-->
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<el-button
|
||||
v-if="unionInfo.member !== 1"
|
||||
:disabled="!((unionInfo.apply||unionInfo.reApply))"
|
||||
type="primary"
|
||||
@click="apply"
|
||||
style="width: 70%;margin-left: 15%;margin-top: 20px">
|
||||
<span v-if="unionInfo.apply||unionInfo.reApply">{{unionInfo.reApply?'重新申请':'加入'}}</span>
|
||||
<span v-else-if="unionInfo.record">{{unionInfo.record.stateName}}</span>
|
||||
<span v-else>您已是会员</span>
|
||||
</el-button>
|
||||
</div>
|
||||
</el-card>
|
||||
</div>
|
||||
|
||||
</el-tab-pane>
|
||||
|
||||
<el-tab-pane label="个人信息" name="second">
|
||||
<div style="padding: 0 8%;padding-top: 50px">
|
||||
<member ref="memberInfo"
|
||||
:id="'${@shiro.getPrincipalProperty('id')}'" view></member>
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
|
||||
<el-tab-pane label="申请记录" name="third">
|
||||
|
||||
<el-table :data="unionInfo.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">
|
||||
<el-form>
|
||||
<el-form-item label="分工会审核信息 "
|
||||
label-width="180px"
|
||||
class="view-header">
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<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>
|
||||
|
||||
<el-form>
|
||||
<el-form-item label="校工会审核信息 "
|
||||
label-width="180px"
|
||||
class="view-header">
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<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>
|
||||
|
||||
</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="unionname" header-align="center"
|
||||
align="center"></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>
|
||||
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</el-card>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<template #edit_func>
|
||||
<!-- <el-button type="primary" @click="doSubmit">提交</el-button>-->
|
||||
</template>
|
||||
|
||||
<template #edit>
|
||||
|
||||
<div style="width: 800px;margin: 0 auto;">
|
||||
<h3 style="text-align: center">中华全国总工会</h3>
|
||||
<div style="text-align: center">入会申请书</div>
|
||||
<p style="text-indent: 2em">
|
||||
我自愿加入中华全国总工会,遵守工会章程,执行工会决议,积极参加工会活动,为全面建成小康社会、把我国建设成为富强民主文明和谐美丽的社会主义现代化强国、实现中华民族伟大复兴的中国梦而奋斗。
|
||||
</p>
|
||||
</div>
|
||||
|
||||
|
||||
<el-form :model="formData" :rules="rules" ref="AddForm" label-width="170px">
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="8">
|
||||
<el-form-item label="姓名" prop="username">
|
||||
<el-input disabled placeholder="姓名"
|
||||
v-model="formData.username"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="工号" prop="loginname">
|
||||
<el-input disabled placeholder="工号"
|
||||
v-model="formData.loginname"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="性别" prop="sex">
|
||||
<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>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item prop="nation" label="民族">
|
||||
<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-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item prop="education" label="学历">
|
||||
<dict-select v-model="formData.education" style="width: 100%"
|
||||
placeholder="请选择学历"
|
||||
code="Education"></dict-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item prop="academicDegree" label="学位">
|
||||
<dict-select v-model="formData.academicDegree" style="width: 100%"
|
||||
placeholder="请选择学位"
|
||||
code="academicDegree"></dict-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item prop="political" label="政治面貌">
|
||||
<el-input maxlength="100" placeholder="政治面貌"
|
||||
v-model="formData.political"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item prop="userState" label="人员类型">
|
||||
<dict-select v-model="formData.personType" style="width: 100%" placeholder="请选择人员类型"
|
||||
code="UserType"></dict-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item prop="idcard" label="身份证号">
|
||||
<el-input v-model="formData.idcard" placeholder="身份证号"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item prop="mobile" label="联系电话">
|
||||
<el-input maxlength="100" placeholder="联系电话"
|
||||
v-model="formData.mobile"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<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-col>
|
||||
|
||||
<el-col :span="24">
|
||||
<el-form-item prop="registeredResidence" label="户口所在地">
|
||||
<el-input maxlength="50" placeholder="请填写户口所在地"
|
||||
v-model="formData.registeredResidence" type="textarea"
|
||||
rows="3"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="24">
|
||||
<el-form-item prop="homeAddress" label="现居住地">
|
||||
<el-input maxlength="50" placeholder="请填写现居住地"
|
||||
v-model="formData.homeAddress" type="textarea"
|
||||
rows="3"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<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-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item prop="specialSkill" label="特长">
|
||||
<el-input maxlength="50" placeholder="请填写特长"
|
||||
v-model="formData.specialSkill" type="textarea"
|
||||
rows="3"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="家庭成员">
|
||||
<span style="color: red">(已结婚填配偶信息,未结婚填父母信息)</span>
|
||||
<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="header" slot-scope="scope">
|
||||
<el-button type="primary"
|
||||
size="mini"
|
||||
icon="el-icon-plus"
|
||||
@click="formData.family.push({})">
|
||||
</el-button>
|
||||
</template>
|
||||
|
||||
<template slot-scope="scope">
|
||||
<el-button type="danger" icon="el-icon-delete"
|
||||
size="mini"
|
||||
:disabled="formData.family.length===0"
|
||||
@click="formData.family.splice(scope.$index,1)"></el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
</el-row>
|
||||
</el-form>
|
||||
<el-row type="flex" justify="end">
|
||||
<el-button @click="$refs.guava.index()">取消</el-button>
|
||||
<el-button type="primary" @click="doSubmit">提交</el-button>
|
||||
</el-row>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
|
||||
</template>
|
||||
</guava>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
dicts: ['memberApplyPersonType'],
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
formData: {
|
||||
family: []
|
||||
},
|
||||
reading: false,
|
||||
activeName: 'first',
|
||||
unionInfoLoading: true,
|
||||
unionInfo: {},
|
||||
memberStates: 1,
|
||||
rules: {
|
||||
sex: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
education: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
academicDegree: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
political: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
idcard: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
mobile: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
position: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
homeAddress: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
specialSkill: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
registeredResidence: [{
|
||||
required: true,
|
||||
message: '必填',
|
||||
trigger: ['blur', 'change']
|
||||
}],
|
||||
},
|
||||
nationOptions: nation,
|
||||
unitOptions: [],
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'member': httpVueLoader('/components/member/MemberInfo.vue?v='+ new Date().getTime()),
|
||||
},
|
||||
methods: {
|
||||
|
||||
async onExpand(row) {
|
||||
this.$set(row, "loading", true)
|
||||
const resp = await $.get("/platform/member/common/findApplyInfo", {id: row.id})
|
||||
this.$set(row, "loading", false)
|
||||
if (resp.code === 0) {
|
||||
this.$set(row, "info", resp.data)
|
||||
} else {
|
||||
this.$set(row, "info", {})
|
||||
this.notifyWarning(resp.msg)
|
||||
}
|
||||
},
|
||||
|
||||
async doApply(user) {
|
||||
if (!this.reading) {
|
||||
this.$notify.warning({title: '提示', message: '请勾选阅读须知'});
|
||||
return
|
||||
}
|
||||
|
||||
const resp = await $.get(loc() + "/doApply", {memberStates: this.memberStates})
|
||||
if (resp.code === 0) {
|
||||
await this.getUnionInfo()
|
||||
this.$refs.memberInfo.getUserInfo()
|
||||
this.$refs.guava.index()
|
||||
} else {
|
||||
this.notifyWarning(resp.msg)
|
||||
}
|
||||
},
|
||||
doSubmit() {
|
||||
this.$refs['AddForm'].validate(async (valid) => {
|
||||
if (valid) {
|
||||
const formData = clone(this.formData)
|
||||
formData.family = JSON.stringify(this.formData.family)
|
||||
await $.post("/platform/member/apply/submit/doEdit", formData)
|
||||
const resp = await $.get(loc() + "/doApply", {memberStates: this.memberStates})
|
||||
if (resp.code === 0) {
|
||||
await this.getUnionInfo()
|
||||
this.$refs.memberInfo.getUserInfo()
|
||||
this.$refs.guava.index()
|
||||
this.notifySuccess(resp.msg)
|
||||
} else {
|
||||
this.notifyWarning(resp.msg)
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
async apply() {
|
||||
const values = this.dict.type.memberApplyPersonType.map(v => v.value)
|
||||
const personType = "${@shiro.getPrincipalProperty('personType')}"
|
||||
const msg = '您当前的人员类型是<span style="color: red">' + (personType || '空') + '</span>,目前只允许<strong>' + values.join('、') + '</strong>加入会员,如有疑问,请联系校工会进行更改。'
|
||||
if (!values.includes(personType)) {
|
||||
this.$alert(msg, '提示', {
|
||||
confirmButtonText: '确定',
|
||||
dangerouslyUseHTMLString: true
|
||||
})
|
||||
return
|
||||
}
|
||||
this.$refs.guava.edit()
|
||||
},
|
||||
|
||||
async getUnionInfo() {
|
||||
this.unionInfoLoading = true
|
||||
const resp = await $.get(loc() + "/unionInfo")
|
||||
this.unionInfoLoading = false
|
||||
if (resp.code === 0) {
|
||||
this.unionInfo = resp.data
|
||||
this.formData = resp.data
|
||||
this.$set(this.formData, "family", resp.data.family ? JSON.parse(resp.data.family) : [])
|
||||
this.formData = resp.data
|
||||
} else {
|
||||
this.notifyWarning(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 = ''
|
||||
}
|
||||
},
|
||||
|
||||
},
|
||||
async created() {
|
||||
this.getUnionInfo()
|
||||
this.unitOptions = await getUnionUnits()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,126 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app">
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<common-query ref="commonQueryRef" @search="search"></common-query>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" class="mt10">
|
||||
<table-tool :app="this" label="申请列表">
|
||||
</table-tool>
|
||||
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder" ref="table" row-key="id" style="width: 100%">
|
||||
<el-table-column :index="indexMethod" align="center" header-align="center"
|
||||
label="序号" type="index" width="80px"></el-table-column>
|
||||
<el-table-column :label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
:width="column.width"
|
||||
header-align="center"
|
||||
min-width="100px"
|
||||
show-overflow-tooltip
|
||||
v-for="column in tableColumns">
|
||||
<template scope="{row}" v-if="column.prop=='loginname'">
|
||||
<el-link @click="openView(row)" type="primary">{{row.loginname}}</el-link>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="220">
|
||||
<template slot-scope="{row}">
|
||||
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
|
||||
<el-button v-if="row.applyStateId === 10"
|
||||
@click="sublime.jumpPagePjax('/platform/member/apply/submit?id=' + row.id)"
|
||||
size="mini" type="primary">编辑</el-button>
|
||||
<!-- <el-button v-if="row.applyStateId === 20" @click="doRevoke(row)" size="mini" type="warning">撤销</el-button>-->
|
||||
<el-button v-if="row.applyStateId === 10" @click="doDelete(row)" size="mini" type="danger">删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<member-apply-audit-info ref="memberApplyAuditInfoRef"></member-apply-audit-info>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
<script>
|
||||
<!--#include("../common/commonQuery.js"){}#-->
|
||||
<!--#include("../common/memberApplyAuditInfo.js"){}#-->
|
||||
new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data(){
|
||||
return{
|
||||
tableColumns: [
|
||||
{ prop: "loginname", label: "工号", sortable: true },
|
||||
{ prop: "username", label: "姓名", sortable: true },
|
||||
{ prop: "sex", label: "性别", sortable: true },
|
||||
{ prop: "userState", label: "在职状态", sortable: true },
|
||||
{ prop: "personType", label: "人员类型", sortable: true },
|
||||
{ prop: "unionName", label: "所属工会", sortable: true },
|
||||
{ prop: "unitName", label: "所属单位", sortable: true },
|
||||
{ prop: "stateName", label: "当前节点", sortable: true }
|
||||
],
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'common-query': COMMON_QUERY,
|
||||
'member-apply-audit-info': MEMBER_APPLY_AUDIT_INFO
|
||||
},
|
||||
methods: {
|
||||
openView(row){
|
||||
this.$refs.guava.view()
|
||||
this.$nextTick(() => {
|
||||
this.$refs.memberApplyAuditInfoRef.onOpen(row.id)
|
||||
})
|
||||
},
|
||||
async doRevoke(row){
|
||||
const confirm = await this.$confirm('确定要撤销该条申请吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
if (confirm === "confirm") {
|
||||
const resp = await $.post("/platform/member/apply/mine/doRevoke", { id: row.id })
|
||||
if (resp.code === 0) {
|
||||
this.pageData()
|
||||
this.$message.success(resp.msg)
|
||||
} else {
|
||||
this.$message.error(resp.msg)
|
||||
}
|
||||
}
|
||||
},
|
||||
async doDelete(row){
|
||||
const confirm = await this.$confirm('确定要删除该条申请吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
if (confirm === "confirm") {
|
||||
const resp = await $.post("/platform/member/apply/mine/doDelete", { id: row.id })
|
||||
if (resp.code === 0) {
|
||||
this.pageData()
|
||||
this.$message.success(resp.msg)
|
||||
} else {
|
||||
this.$message.error(resp.msg)
|
||||
}
|
||||
}
|
||||
},
|
||||
search(pageForm){
|
||||
if (pageForm) {
|
||||
this.pageForm = {...this.pageForm, ...pageForm}
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
},
|
||||
created(){
|
||||
this.pageData()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,237 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app">
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<common-query ref="commonQueryRef" @search="search"></common-query>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" class="mt10">
|
||||
<table-tool :app="this" label="审核列表">
|
||||
<template #func>
|
||||
<el-radio-group @change="search" class="mr5" size="small" v-model="pageForm.audit">
|
||||
<el-radio-button label="true">已审核</el-radio-button>
|
||||
<el-radio-button label="false">未审核</el-radio-button>
|
||||
</el-radio-group>
|
||||
</template>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder" ref="table" row-key="id" style="width: 100%">
|
||||
<el-table-column :index="indexMethod" align="center" header-align="center"
|
||||
label="序号" type="index" width="80px"></el-table-column>
|
||||
<el-table-column :label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
:width="column.width"
|
||||
header-align="center"
|
||||
min-width="100px"
|
||||
show-overflow-tooltip
|
||||
v-for="column in tableColumns">
|
||||
<template scope="{row}" v-if="column.prop=='loginname'">
|
||||
<el-link @click="openView(row)" type="primary">{{row.loginname}}</el-link>
|
||||
</template>
|
||||
<template scope="{row}" v-if="column.prop=='allocationUnionName'">
|
||||
<el-tag v-if="row.allocationUnionName">{{ row.allocationUnionName }}</el-tag>
|
||||
<el-tag v-else type="danger">未分配</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="220">
|
||||
<template slot-scope="{row}">
|
||||
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
|
||||
<el-button v-if="[20, 70].includes(row.applyStateId)" @click="openAudit(row)" size="mini" type="primary">审核</el-button>
|
||||
<el-button v-if="[30, 50].includes(row.applyStateId)" @click="doRevoke(row)" size="mini" type="danger">撤回</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<member-apply-audit-info ref="memberApplyAuditInfoRef" @union-name="getApplyUserUnion"></member-apply-audit-info>
|
||||
<div v-if="showApprovalForm">
|
||||
<div class="process-title" style="margin: 20px 0">校工会审核</div>
|
||||
<el-form :model="formData" ref="approvalFormRef" label-position="left" label-width="120px">
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="校工会审核人" prop="username" :rules="[{required:true,message:'必填',trigger:['change','blur']}]">
|
||||
<el-input v-model="formData.username" readonly></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="审核时间" prop="auditTime" :rules="[{required:true,message:'必填',trigger:['change','blur']}]">
|
||||
<el-input v-model="formData.auditTime" readonly></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="分配工会关系" prop="unionId" :rules="[{required:true,message:'必填',trigger:['change','blur']}]">
|
||||
<el-select clearable filterable placeholder="请选择工会" style="width: 100%;"
|
||||
v-model="formData.unionId">
|
||||
<el-option :key="item.id" :label="item.unionname" :value="item.id"
|
||||
v-for="item in unions"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="当前所在工会" prop="unionName">
|
||||
<el-input v-model="unionName" readonly></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="24">
|
||||
<el-form-item label="审核意见" prop="auditOpinion" :rules="[{required:true,message:'必填',trigger:['change','blur']}]">
|
||||
<el-input type="textarea" v-model="formData.auditOpinion" rows="4" maxlength="300"
|
||||
placeholder="请填写审核意见" show-word-limit></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="审核签字" prop="auditSign" :rules="[{required:true,message:'必填',trigger:['change','blur']}]">
|
||||
<sign :is_value_base64="false" :qz.sync="formData.auditSign" prefix="member_apply_audit" ref="sign"></sign>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
<el-row type="flex" justify="end">
|
||||
<el-button plain @click="$refs.guava.index()">取消</el-button>
|
||||
<el-button type="danger" @click="doApproval(2)">退回重新申请</el-button>
|
||||
<el-button type="danger" @click="doApproval(0)">拒绝申请</el-button>
|
||||
<el-button type="primary" @click="doApproval(1)">同意申请</el-button>
|
||||
</el-row>
|
||||
</div>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
<script>
|
||||
<!--#include("../common/commonQuery.js"){}#-->
|
||||
<!--#include("../common/memberApplyAuditInfo.js"){}#-->
|
||||
<!--#include("../../common/memberInfo.js"){}#-->
|
||||
new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data(){
|
||||
return{
|
||||
pageForm: {
|
||||
audit: false
|
||||
},
|
||||
unions: [],
|
||||
unionName: '',
|
||||
tableColumns: [
|
||||
{ prop: "loginname", label: "工号", sortable: true },
|
||||
{ prop: "username", label: "姓名", sortable: true },
|
||||
{ prop: "sex", label: "性别", sortable: true },
|
||||
{ prop: "userState", label: "在职状态", sortable: true },
|
||||
{ prop: "personType", label: "人员类型", sortable: true },
|
||||
{ prop: "unionName", label: "所属工会", sortable: true },
|
||||
{ prop: "unitName", label: "所属单位", sortable: true },
|
||||
{ prop: "allocationUnionName", label: "分配工会", sortable: true },
|
||||
{ prop: "stateName", label: "当前节点", sortable: true }
|
||||
],
|
||||
|
||||
id: '',
|
||||
showApprovalForm: false,
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'common-query': COMMON_QUERY,
|
||||
'member-apply-audit-info': MEMBER_APPLY_AUDIT_INFO,
|
||||
'member-info': MEMBER_INFO,
|
||||
},
|
||||
methods: {
|
||||
getApplyUserUnion(unionName){
|
||||
this.unionName = unionName
|
||||
},
|
||||
openView(row){
|
||||
this.$refs.guava.view()
|
||||
this.$nextTick(() => {
|
||||
this.showApprovalForm = false
|
||||
this.$refs.memberApplyAuditInfoRef.onOpen(row.id)
|
||||
})
|
||||
},
|
||||
openAudit(row){
|
||||
const user = JSON.parse(window.sessionStorage.getItem('user'))
|
||||
this.id = row.id
|
||||
this.formData = {}
|
||||
this.formData.username = user.username
|
||||
this.formData.auditTime = moment().format('YYYY-MM-DD HH:mm:ss')
|
||||
this.$refs.guava.view()
|
||||
this.$nextTick(() => {
|
||||
this.showApprovalForm = true
|
||||
this.$refs.memberApplyAuditInfoRef.onOpen(row.id)
|
||||
})
|
||||
},
|
||||
doApproval(approvalType){
|
||||
let msg = '确定要通过此条申请吗?'
|
||||
if (approvalType === 0) {
|
||||
msg = '拒绝后不可撤回,确定要拒绝此条申请吗?'
|
||||
} else if (approvalType === 2) {
|
||||
msg = '确定要退回此条申请吗?'
|
||||
}
|
||||
this.$confirm(msg, '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(async () => {
|
||||
this.formData.auditType = approvalType
|
||||
this.$refs.approvalFormRef.validate(async (valid) => {
|
||||
if (valid) {
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '提交中,请稍后...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: 'rgba(0, 0, 0, 0.7)'
|
||||
});
|
||||
const resp = await $.post('/platform/member/apply/schoolUnion/audit/approval', {
|
||||
audit: JSON.stringify(this.formData),
|
||||
id: this.id,
|
||||
unionId: this.formData.unionId
|
||||
})
|
||||
loading.close()
|
||||
if (resp.code === 0) {
|
||||
this.$message.success(resp.msg)
|
||||
this.$refs.guava.index()
|
||||
this.showApprovalForm = false
|
||||
this.pageData()
|
||||
} else {
|
||||
this.$message.error(resp.msg)
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
doRevoke(row){
|
||||
this.$confirm('确定要撤回该申请吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(async () => {
|
||||
const resp = await $.post('/platform/member/apply/schoolUnion/audit/doRevoke', {id: row.id})
|
||||
if (resp.code === 0) {
|
||||
this.$message.success(resp.msg)
|
||||
this.pageData()
|
||||
} else {
|
||||
this.$message.error(resp.msg)
|
||||
}
|
||||
})
|
||||
},
|
||||
search(pageForm){
|
||||
if (pageForm) {
|
||||
this.pageForm = {...this.pageForm, ...pageForm}
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
},
|
||||
async created(){
|
||||
this.pageData()
|
||||
this.unions = await getUnions()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,325 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app">
|
||||
<el-card shadow="never">
|
||||
<div class="process-title">入会申请</div>
|
||||
<el-form :model="formData" ref="formRef" label-width="0" :rules="formRules" size="small">
|
||||
<el-descriptions :column="3" border class="descriptions-form">
|
||||
<el-descriptions-item label="工号">
|
||||
<el-form-item prop="loginname">
|
||||
<el-input v-model="formData.loginname" readonly size="small"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="姓名">
|
||||
<el-form-item prop="username">
|
||||
<el-input v-model="formData.username" readonly size="small"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="性别">
|
||||
<el-form-item prop="sex">
|
||||
<el-radio-group v-model="formData.sex" size="small">
|
||||
<el-radio border label="男"></el-radio>
|
||||
<el-radio border label="女"></el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-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-form-item prop="birthday">
|
||||
<el-date-picker v-model="formData.birthday" 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="political">
|
||||
<dict-select style="width: 100%" placeholder="请选择政治面貌" v-model="formData.political"
|
||||
code="USER_POLITICAL"></dict-select>
|
||||
</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="position">
|
||||
<el-input v-model="formData.position" placeholder="请输入党政职务"
|
||||
maxlength="50"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
|
||||
<el-descriptions-item label="工作单位">
|
||||
<el-form-item prop="unitId">
|
||||
<el-select clearable filterable placeholder="请选择工作单位" style="width: 100%"
|
||||
disabled @change="getUnionName(formData.unitId)"
|
||||
v-model="formData.unitId">
|
||||
<el-option :key="item.id" :label="item.name" :value="item.id"
|
||||
v-for="item in units"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="所属工会">
|
||||
<el-form-item prop="unionName">
|
||||
<el-input v-model="formData.unionName" disabled placeholder="请输入所属工会"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="所属校区">
|
||||
<el-form-item prop="campus">
|
||||
<dict-select style="width: 100%" placeholder="请选择所属校区" v-model="formData.campus"
|
||||
code="USER_CAMPUS"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
|
||||
<el-descriptions-item label="在职状态">
|
||||
<el-form-item prop="userState">
|
||||
<dict-select v-model="formData.userState" code="USER_STATE"
|
||||
style="width: 100%"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="人员类型">
|
||||
<el-form-item prop="personType">
|
||||
<dict-select v-model="formData.personType" code="PERSON_TYPE"
|
||||
style="width: 100%"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item></el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="身份证号码">
|
||||
<el-form-item prop="idCard">
|
||||
<el-input v-model="formData.idCard" placeholder="请输入身份证号码" maxlength="18"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="联系电话">
|
||||
<el-form-item prop="mobile">
|
||||
<el-input v-model="formData.mobile" placeholder="请输入联系电话" maxlength="32"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="电子邮箱">
|
||||
<el-form-item prop="email">
|
||||
<el-input v-model="formData.email" placeholder="请输入电子邮箱" maxlength="50"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
|
||||
<el-descriptions-item label="家庭主要成员" :span="3">
|
||||
<el-form-item prop="families">
|
||||
<el-table :data="formData.families" border size="small">
|
||||
<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="formData.families.push({})">添加
|
||||
</el-button>
|
||||
</template>
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
type="danger"
|
||||
icon="el-icon-delete"
|
||||
size="mini"
|
||||
:disabled="formData.families.length===0"
|
||||
@click="formData.families.splice(scope.$index,1)"
|
||||
></el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="个人简况(简历、获奖情况、有何特长)" :span="3">
|
||||
<el-form-item prop="vita">
|
||||
<text-editor v-model="formData.vita"></text-editor>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-form>
|
||||
<el-row v-if="!member" justify="end" type="flex" class="mt10">
|
||||
<!-- <el-row justify="end" type="flex" class="mt10">-->
|
||||
<el-button v-if="formData.id" type="primary" @click="sublime.jumpPagePjax('/platform/member/apply/mine')">返 回</el-button>
|
||||
<el-button @click="doSave" type="primary">保存申请</el-button>
|
||||
<el-button @click="doSubmit" type="primary">提交申请</el-button>
|
||||
</el-row>
|
||||
</el-card>
|
||||
</div>
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data(){
|
||||
return{
|
||||
id: GetQueryString("id"),
|
||||
units: [],
|
||||
member: false,
|
||||
formData: {
|
||||
families: []
|
||||
},
|
||||
formRules: {
|
||||
username: [{required: false, message: "必填", trigger: "change"}],
|
||||
sex: [{required: false, message: "必填", trigger: "change"}],
|
||||
idCard: [
|
||||
{required: false, message: "身份证号不能为空", trigger: "blur"},
|
||||
{
|
||||
pattern: /(^\d{6}(18|19|20)\d{2}(0[1-9]|1[012])(0[1-9]|[12]\d|3[01])\d{3}([0-9xX])$)/,
|
||||
message: "身份证号格式不正确",
|
||||
trigger: "blur"
|
||||
}
|
||||
],
|
||||
},
|
||||
}
|
||||
},
|
||||
methods:{
|
||||
doSave() {
|
||||
this.$confirm("保存后可在我的申请里面再次编辑,您确定要保存吗?", "提示", { type: "warning" })
|
||||
.then(() => {
|
||||
const formData = this.formData
|
||||
if (formData.families) {
|
||||
formData.families = JSON.stringify(this.formData.families)
|
||||
}
|
||||
$.post("/platform/member/apply/submit/doSave", formData)
|
||||
.then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.$message.success(res.msg)
|
||||
sublime.jumpPagePjax('/platform/member/apply/mine')
|
||||
} else {
|
||||
this.$message.error(res.msg)
|
||||
}
|
||||
})
|
||||
})
|
||||
.catch()
|
||||
},
|
||||
doSubmit() {
|
||||
this.$refs.formRef.validate((valid) => {
|
||||
if (valid) {
|
||||
this.$confirm("提交后将进入审核流程,无法再进行编辑,您确定要提交申请吗?", "提示", { type: "warning" })
|
||||
.then(() => {
|
||||
const formData = this.formData
|
||||
if (formData.families) {
|
||||
formData.families = JSON.stringify(this.formData.families)
|
||||
}
|
||||
$.post("/platform/member/apply/submit/doSubmit", formData)
|
||||
.then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.$message.success(res.msg)
|
||||
sublime.jumpPagePjax('/platform/member/apply/mine')
|
||||
} else {
|
||||
this.$message.error(res.msg)
|
||||
}
|
||||
})
|
||||
})
|
||||
.catch()
|
||||
}
|
||||
})
|
||||
},
|
||||
init(){
|
||||
const user = JSON.parse(window.sessionStorage.getItem('user'))
|
||||
this.member = user.member
|
||||
if (this.id) {
|
||||
$.post("/platform/member/apply/submit/findApplyById", { id: this.id }).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.formData = res.data
|
||||
if (this.formData.families) {
|
||||
this.formData.families = JSON.parse(this.formData.families)
|
||||
} else {
|
||||
this.formData.families = []
|
||||
}
|
||||
}
|
||||
})
|
||||
} else {
|
||||
const {
|
||||
id,
|
||||
username,
|
||||
loginname,
|
||||
sex,
|
||||
nation,
|
||||
birthday,
|
||||
political,
|
||||
education,
|
||||
academicDegree,
|
||||
position,
|
||||
unit,
|
||||
union,
|
||||
campus,
|
||||
userState,
|
||||
personType,
|
||||
idCard,
|
||||
mobile,
|
||||
email,
|
||||
families,
|
||||
vita
|
||||
} = user
|
||||
|
||||
this.$set(this.formData, "userId", id)
|
||||
this.$set(this.formData, "username", username)
|
||||
this.$set(this.formData, "loginname", loginname)
|
||||
this.$set(this.formData, "birthday", birthday)
|
||||
this.$set(this.formData, "sex", sex)
|
||||
this.$set(this.formData, "idCard", idCard)
|
||||
this.$set(this.formData, "nation", nation)
|
||||
this.$set(this.formData, "political", political)
|
||||
this.$set(this.formData, "position", position)
|
||||
this.$set(this.formData, "education", education)
|
||||
this.$set(this.formData, "academicDegree", academicDegree)
|
||||
this.$set(this.formData, "campus", campus)
|
||||
this.$set(this.formData, "userState", userState)
|
||||
this.$set(this.formData, "personType", personType)
|
||||
this.$set(this.formData, "unitName", unit ? unit.name : null)
|
||||
this.$set(this.formData, "unitId", unit ? unit.id : null)
|
||||
this.$set(this.formData, "unionName", union ? union.unionname : null)
|
||||
this.$set(this.formData, "unionId", union ? union.id : null)
|
||||
|
||||
this.$set(this.formData, "mobile", mobile)
|
||||
this.$set(this.formData, "email", email)
|
||||
this.$set(this.formData, "families", families ? families : [])
|
||||
this.$set(this.formData, "vita", vita)
|
||||
}
|
||||
}
|
||||
},
|
||||
async created(){
|
||||
this.init()
|
||||
this.units = await getUnits()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -72,7 +72,7 @@ layout("/layouts/platform.html"){
|
||||
style="width: 100%"
|
||||
clearable
|
||||
placeholder="在职状态"
|
||||
code="userState"></dict-select>
|
||||
code="USER_STATE"></dict-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -83,7 +83,7 @@ layout("/layouts/platform.html"){
|
||||
style="width: 100%"
|
||||
clearable
|
||||
placeholder="人员类型"
|
||||
code="UserType"></dict-select>
|
||||
code="PERSON_TYPE"></dict-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -102,10 +102,10 @@ layout("/layouts/platform.html"){
|
||||
<div class="search-item-label">变更类型:</div>
|
||||
<div class="search-item-option">
|
||||
<enum-select v-model="pageForm.changeTypes"
|
||||
enum="UserChangeType"
|
||||
label="description"
|
||||
enum="MemberChangeType"
|
||||
label="changeTypeName"
|
||||
multiple
|
||||
value="code"
|
||||
value="value"
|
||||
style="width: 100%"
|
||||
clearable
|
||||
placeholder="变更类型"
|
||||
|
||||
@@ -65,7 +65,7 @@ layout("/layouts/platform.html"){
|
||||
multiple
|
||||
clearable
|
||||
placeholder="在职状态"
|
||||
code="userState"></dict-select>
|
||||
code="USER_STATE"></dict-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -77,7 +77,7 @@ layout("/layouts/platform.html"){
|
||||
multiple
|
||||
clearable
|
||||
placeholder="人员类型"
|
||||
code="UserType"></dict-select>
|
||||
code="PERSON_TYPE"></dict-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
multiple
|
||||
clearable
|
||||
placeholder="在职状态"
|
||||
code="userState"></dict-select>
|
||||
code="USER_STATE"></dict-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -45,7 +45,7 @@
|
||||
multiple
|
||||
clearable
|
||||
placeholder="人员类型"
|
||||
code="UserType"></dict-select>
|
||||
code="PERSON_TYPE"></dict-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -0,0 +1,235 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app">
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<el-card shadow="never">
|
||||
<common-query ref="commonQueryRef" @search="search"></common-query>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" class="mt10">
|
||||
<table-tool :app="this" label="审核列表">
|
||||
<template #func>
|
||||
<el-radio-group @change="search" class="mr5" size="small" v-model="pageForm.audit">
|
||||
<el-radio-button label="true">已审核</el-radio-button>
|
||||
<el-radio-button label="false">未审核</el-radio-button>
|
||||
</el-radio-group>
|
||||
</template>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder" ref="table" row-key="id" style="width: 100%">
|
||||
<el-table-column :index="indexMethod" align="center" header-align="center"
|
||||
label="序号" type="index" width="80px"></el-table-column>
|
||||
<el-table-column :label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
:width="column.width"
|
||||
header-align="center"
|
||||
min-width="100px"
|
||||
show-overflow-tooltip
|
||||
v-for="column in tableColumns">
|
||||
<template scope="{row}" v-if="column.prop=='loginname'">
|
||||
<el-link @click="openUserView(row)" type="primary">{{row.loginname}}</el-link>
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop=='changeTypes'">
|
||||
<span style="color: #0e78c5;cursor: pointer" @click="openView(row)">
|
||||
{{getChangeTypes(row.changeTypes)}}
|
||||
</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="220">
|
||||
<template slot-scope="{row}">
|
||||
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
|
||||
<el-button v-if="row.applyStateId === 10020" @click="openAudit(row)" size="mini" type="primary">审核</el-button>
|
||||
<el-button v-if="[10030, 10050].includes(row.applyStateId)" @click="doRevoke(row)" size="mini" type="danger">撤回</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<member-change-audit-info ref="memberChangeAuditInfoRef"></member-change-audit-info>
|
||||
<div v-if="showApprovalForm">
|
||||
<div class="process-title" style="margin: 20px 0">分工会审核</div>
|
||||
<el-form :model="formData" ref="approvalFormRef" label-position="left" label-width="80px">
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="审核人" prop="username" :rules="[{required:true,message:'必填',trigger:['change','blur']}]">
|
||||
<el-input v-model="formData.username" readonly></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="审核时间" prop="auditTime" :rules="[{required:true,message:'必填',trigger:['change','blur']}]">
|
||||
<el-input v-model="formData.auditTime" readonly></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="24">
|
||||
<el-form-item label="审核意见" prop="auditOpinion" :rules="[{required:true,message:'必填',trigger:['change','blur']}]">
|
||||
<el-input type="textarea" v-model="formData.auditOpinion" rows="4" maxlength="300"
|
||||
placeholder="请填写审核意见" show-word-limit></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="审核签字" prop="auditSign" :rules="[{required:true,message:'必填',trigger:['change','blur']}]">
|
||||
<sign :is_value_base64="false" :qz.sync="formData.auditSign" prefix="member_apply_audit" ref="sign"></sign>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
<el-row type="flex" justify="end">
|
||||
<el-button plain @click="$refs.guava.index()">取消</el-button>
|
||||
<el-button type="danger" @click="doApproval(2)">退回重新申请</el-button>
|
||||
<el-button type="danger" @click="doApproval(0)">拒绝申请</el-button>
|
||||
<el-button type="primary" @click="doApproval(1)">同意申请</el-button>
|
||||
</el-row>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<template #public>
|
||||
<member-info ref="memberInfoRef"></member-info>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
<script>
|
||||
<!--#include("../common/commonQuery.js"){}#-->
|
||||
<!--#include("../../common/memberInfo.js"){}#-->
|
||||
<!--#include("../common/memberChangeAuditInfo.js"){}#-->
|
||||
|
||||
new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data(){
|
||||
return{
|
||||
pageForm: {
|
||||
audit: false
|
||||
},
|
||||
tableColumns: [
|
||||
{ prop: "loginname", label: "工号", sortable: true },
|
||||
{ prop: "username", label: "姓名", sortable: true },
|
||||
{ prop: "sex", label: "性别", sortable: true },
|
||||
{ prop: "userState", label: "在职状态", sortable: true },
|
||||
{ prop: "personType", label: "人员类型", sortable: true },
|
||||
{ prop: "unionName", label: "所属工会", sortable: true },
|
||||
{ prop: "unitName", label: "所属单位", sortable: true },
|
||||
{ prop: "changeTypes", label: "变更类型", sortable: true, width: 200 },
|
||||
{ prop: "applyDateTime", label: "申请时间", sortable: true },
|
||||
{ prop: "stateName", label: "当前节点", sortable: true }
|
||||
],
|
||||
|
||||
id: '',
|
||||
showApprovalForm: false,
|
||||
|
||||
changeTypeData: [],
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'member-info': MEMBER_INFO,
|
||||
'common-query': COMMON_QUERY,
|
||||
'member-change-audit-info': MEMBER_CHANGE_AUDIT_INFO
|
||||
},
|
||||
methods: {
|
||||
openView(row){
|
||||
this.$refs.guava.view()
|
||||
this.$nextTick(() => {
|
||||
this.showApprovalForm = false
|
||||
this.$refs.memberChangeAuditInfoRef.onOpen(row.id)
|
||||
})
|
||||
},
|
||||
openUserView(row){
|
||||
this.$refs.guava.public()
|
||||
this.$nextTick(() => {
|
||||
this.$refs.memberInfoRef.onOpen(row.userId)
|
||||
})
|
||||
},
|
||||
openAudit(row){
|
||||
const user = JSON.parse(window.sessionStorage.getItem('user'))
|
||||
this.id = row.id
|
||||
this.formData.username = user.username
|
||||
this.formData.auditTime = moment().format('YYYY-MM-DD HH:mm:ss')
|
||||
this.$refs.guava.view()
|
||||
this.$nextTick(() => {
|
||||
this.showApprovalForm = true
|
||||
this.$refs.memberChangeAuditInfoRef.onOpen(row.id)
|
||||
})
|
||||
},
|
||||
doApproval(approvalType){
|
||||
let msg = '确定要通过此条申请吗?'
|
||||
if (approvalType === 0) {
|
||||
msg = '拒绝后不可撤回,确定要拒绝此条申请吗?'
|
||||
} else if (approvalType === 2) {
|
||||
msg = '确定要退回此条申请吗?'
|
||||
}
|
||||
this.$confirm(msg, '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(async () => {
|
||||
this.formData.auditType = approvalType
|
||||
this.$refs.approvalFormRef.validate(async (valid) => {
|
||||
if (valid) {
|
||||
const resp = await $.post('/platform/member/change/branchUnion/audit/approval', {
|
||||
audit: JSON.stringify(this.formData),
|
||||
id: this.id
|
||||
})
|
||||
if (resp.code === 0) {
|
||||
this.$message.success(resp.msg)
|
||||
this.$refs.guava.index()
|
||||
this.showApprovalForm = false
|
||||
this.pageData()
|
||||
} else {
|
||||
this.$message.error(resp.msg)
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
doRevoke(row){
|
||||
this.$confirm('确定要撤回该申请吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(async () => {
|
||||
const resp = await $.post('/platform/member/change/branchUnion/audit/doRevoke', {id: row.id})
|
||||
if (resp.code === 0) {
|
||||
this.$message.success(resp.msg)
|
||||
this.pageData()
|
||||
} else {
|
||||
this.$message.error(resp.msg)
|
||||
}
|
||||
})
|
||||
},
|
||||
search(pageForm){
|
||||
if (pageForm) {
|
||||
this.pageForm = {...this.pageForm, ...pageForm}
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
getChangeTypes(changeTypes){
|
||||
const changeTypesList = JSON.parse(changeTypes)
|
||||
if (changeTypesList) {
|
||||
if (!changeTypesList || changeTypesList.length === 0 || !this.changeTypeData || this.changeTypeData.length === 0) return null
|
||||
return changeTypesList
|
||||
.map((v) => {
|
||||
return this.changeTypeData.find((item) => item.type === v).changeTypeName
|
||||
})
|
||||
.join(",")
|
||||
}
|
||||
return null
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.pageData()
|
||||
this.changeTypeData = await getEnumOptions("MemberChangeType")
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,90 @@
|
||||
const COMMON_QUERY = {
|
||||
template: /*language=HTML*/ `
|
||||
<div class="search">
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">姓名/工号</div>
|
||||
<div class="search-item-option">
|
||||
<el-input placeholder="请输入姓名或工号查询" clearable v-model="pageForm.searchKeyword"></el-input>
|
||||
</div>
|
||||
</div>
|
||||
<template v-if="$auth.hasRoleOr('sysadmin, SchoolUnionMemberAdmin, BranchUnionMemberAdmin')">
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">所属工会</div>
|
||||
<div class="search-item-option">
|
||||
<el-select @change="flushUnits" @clear="flushUnits" clearable filterable
|
||||
placeholder="请选择所属工会" style="width: 100%;" v-model="pageForm.unionId">
|
||||
<el-option :key="item.id" :label="item.unionname" :value="item.id"
|
||||
v-for="item in unions"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">所属单位</div>
|
||||
<div class="search-item-option">
|
||||
<el-select clearable filterable placeholder="请选择所属单位" style="width: 100%"
|
||||
v-model="pageForm.unitId">
|
||||
<el-option :key="item.id" :label="item.name" :value="item.id"
|
||||
v-for="item in units"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">在职状态</div>
|
||||
<div class="search-item-option">
|
||||
<dict-select v-model="pageForm.userState" style="width: 100%" placeholder="在职状态" @change="doSearch"
|
||||
code="USER_STATE"></dict-select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">人员类型</div>
|
||||
<div class="search-item-option">
|
||||
<dict-select v-model="pageForm.personType" style="width: 100%" placeholder="人员类型" @change="doSearch"
|
||||
code="PERSON_TYPE"></dict-select>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<div class="search-query">
|
||||
<el-button type="primary" icon="el-icon-search" @click="doSearch">搜索</el-button>
|
||||
</div>
|
||||
</div>
|
||||
`,
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return{
|
||||
unions: [],
|
||||
units: [],
|
||||
pageForm: {
|
||||
searchKeyword: '',
|
||||
unionId: '',
|
||||
unitId: '',
|
||||
userState: '',
|
||||
personType: ''
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
doSearch(){
|
||||
this.$emit('search', this.pageForm)
|
||||
},
|
||||
async initData(){
|
||||
if (this.$auth.hasRoleOr('sysadmin, SchoolUnionMemberAdmin, SchoolUnionAdmin')) {
|
||||
this.unions = await getUnions(this.pageForm.unionId)
|
||||
this.units = await getUnits()
|
||||
} else {
|
||||
const user = JSON.parse(window.sessionStorage.getItem('user'))
|
||||
this.unions = await getUnions(user.union.id)
|
||||
this.units = await getUnits(user.union.id)
|
||||
}
|
||||
},
|
||||
async flushUnits(){
|
||||
this.$set(this.pageForm, "unitId", null)
|
||||
this.units = []
|
||||
if (this.pageForm.unionId) {
|
||||
this.units = await getUnits(this.pageForm.unionId)
|
||||
}
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.initData()
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,103 @@
|
||||
const MEMBER_ALL_CHANGE_INFO = {
|
||||
template: /*language=HTML*/ `
|
||||
<el-tabs v-model="activeName">
|
||||
<el-tab-pane label="基础信息" name="basicInfo">
|
||||
<el-descriptions :column="3" border class="descriptions-form">
|
||||
<el-descriptions-item label="工号">{{ viewData.loginname }}</el-descriptions-item>
|
||||
<el-descriptions-item label="姓名">{{ viewData.username }}</el-descriptions-item>
|
||||
<el-descriptions-item label="性别">{{ viewData.sex }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="民族">{{ viewData.nation }}</el-descriptions-item>
|
||||
<el-descriptions-item label="出生日期">{{ moment(viewData.birthday).format("YYYY年MM月DD日") }}</el-descriptions-item>
|
||||
<el-descriptions-item label="政治面貌">{{ viewData.political }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="学历">{{ viewData.education }}</el-descriptions-item>
|
||||
<el-descriptions-item label="学位">{{ viewData.academicDegree }}</el-descriptions-item>
|
||||
<el-descriptions-item label="党政职务">{{ viewData.position }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="工作单位">{{ viewData.unitname }}</el-descriptions-item>
|
||||
<el-descriptions-item label="所属工会">{{ viewData.unionname }}</el-descriptions-item>
|
||||
<el-descriptions-item label="所属校区">{{ viewData.campus }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="身份证号码">{{ viewData.idCard }}</el-descriptions-item>
|
||||
<el-descriptions-item label="联系电话">{{ viewData.mobile }}</el-descriptions-item>
|
||||
<el-descriptions-item label="电子邮箱">{{ viewData.email }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="在职状态">{{ viewData.userState }}</el-descriptions-item>
|
||||
<el-descriptions-item label="人员类型">{{ viewData.personType }}</el-descriptions-item>
|
||||
<el-descriptions-item></el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="会员状态">{{ viewData.member ? '会员' : '非会员' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="福利会员状态">{{ viewData.welfareMember ? '福利会员' : '非福利会员' }}</el-descriptions-item>
|
||||
<el-descriptions-item></el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="家庭主要成员" :span="3">
|
||||
<el-table v-if="viewData.families&&viewData.families.length"
|
||||
:data="viewData.families" 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-empty v-else :image-size="50" description="暂无家庭成员信息"></el-empty>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="个人简况" :span="3">
|
||||
<template slot="label">个人简况</template>
|
||||
<div v-if="viewData.vita" class="text-left" v-html="viewData.vita"></div>
|
||||
<span v-else>无数据</span>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="历史变更记录" name="changeInfo" v-if="viewData.allChangeInfo">
|
||||
<el-timeline>
|
||||
<el-timeline-item placement="top" v-for="(changeData, index) in viewData.allChangeInfo"
|
||||
:key="index" :timestamp="changeData.timestamp">
|
||||
<el-card>
|
||||
<h4>{{ changeData.changeOriginName }}</h4>
|
||||
<el-table :data="changeData.changeInfos" size="mini" ref="table" row-key="id" style="width: 100%">
|
||||
<el-table-column :index="indexMethod" align="center" header-align="center"
|
||||
label="序号" type="index" width="80px"></el-table-column>
|
||||
<el-table-column prop="fieldName" label="变更字段" header-align="center"></el-table-column>
|
||||
<el-table-column prop="sourceValue" label="原数据" header-align="center">
|
||||
<template slot-scope="{row}">
|
||||
<div v-html="row.sourceValue"></div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="newValue" label="新数据" header-align="center">
|
||||
<template slot-scope="{row}">
|
||||
<div v-html="row.newValue"></div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-card>
|
||||
</el-timeline-item>
|
||||
</el-timeline>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
`,
|
||||
mixins: [initTableMixins],
|
||||
data(){
|
||||
return{
|
||||
viewData: {},
|
||||
activeName: "basicInfo"
|
||||
}
|
||||
},
|
||||
methods:{
|
||||
onOpen(userId){
|
||||
$.post('/platform/member/change/mange/getAllChangeMemberInfo', {userId})
|
||||
.then(resp => {
|
||||
if (resp.code === 0) {
|
||||
this.viewData = resp.data
|
||||
} else {
|
||||
this.$message.warning(resp.msg)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,492 @@
|
||||
const MEMBER_CHANGE = {
|
||||
template: /*language=html*/ `
|
||||
<el-card shadow="never">
|
||||
<div class="process-title">会员变更</div>
|
||||
<el-form :model="formData" ref="formRef" label-width="0" :rules="formRules" size="small">
|
||||
<el-descriptions :column="3" border class="descriptions-form">
|
||||
<el-descriptions-item label="工号">
|
||||
<el-form-item prop="loginname">
|
||||
<el-input v-model="formData.loginname" readonly size="small"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="姓名">
|
||||
<el-form-item prop="username">
|
||||
<el-input v-model="formData.username" readonly size="small"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="性别">
|
||||
<el-form-item prop="sex">
|
||||
<el-radio-group :disabled="allowFields('sex')" v-model="formData.sex" size="small">
|
||||
<el-radio border label="男"></el-radio>
|
||||
<el-radio border label="女"></el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="民族">
|
||||
<el-form-item prop="nation">
|
||||
<dict-select style="width: 100%" placeholder="请选择民族" v-model="formData.nation"
|
||||
:disabled="allowFields('nation')" code="USER_NATION"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="出生日期">
|
||||
<el-form-item prop="birthday">
|
||||
<el-date-picker v-model="formData.birthday"
|
||||
type="date"
|
||||
:disabled="allowFields('birthday')"
|
||||
placeholder="请选择出生日期"
|
||||
format="yyyy-MM-dd"
|
||||
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="political">
|
||||
<dict-select style="width: 100%" placeholder="请选择政治面貌" v-model="formData.political"
|
||||
:disabled="allowFields('political')" code="USER_POLITICAL"></dict-select>
|
||||
</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"
|
||||
:disabled="allowFields('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"
|
||||
:disabled="allowFields('academicDegree')" code="USER_ACADEMIC_DEGREE"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="党政职务">
|
||||
<el-form-item prop="position">
|
||||
<el-input v-model="formData.position" placeholder="请输入党政职务"
|
||||
:disabled="allowFields('position')" maxlength="50"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<template v-if="$auth.hasRoleOr('sysadmin, SchoolUnionMemberAdmin, SchoolUnionAdmin')">
|
||||
<el-descriptions-item label="工作单位">
|
||||
<el-form-item prop="unitId">
|
||||
<el-select clearable filterable placeholder="请选择工作单位" style="width: 100%"
|
||||
v-model="formData.unitId">
|
||||
<el-option :key="item.id" :label="item.name" :value="item.id"
|
||||
v-for="item in units"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="所属工会">
|
||||
<el-form-item prop="unionId">
|
||||
<el-select clearable filterable placeholder="请选择所属工会" style="width: 100%"
|
||||
v-model="formData.unionId">
|
||||
<el-option :key="item.id" :label="item.unionname" :value="item.id"
|
||||
v-for="item in unions"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
</template>
|
||||
<template v-else>
|
||||
<el-descriptions-item label="工作单位">
|
||||
<el-form-item prop="unitId">
|
||||
<el-select clearable filterable placeholder="请选择工作单位" style="width: 100%"
|
||||
:disabled="allowFields('unitId')" @change="getUnionName(formData.unitId)"
|
||||
v-model="formData.unitId">
|
||||
<el-option :key="item.id" :label="item.name" :value="item.id"
|
||||
v-for="item in units"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="所属工会">
|
||||
<el-form-item prop="unionName">
|
||||
<el-input v-model="formData.unionName" disabled placeholder="请输入所属工会"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
</template>
|
||||
<el-descriptions-item label="所属校区">
|
||||
<el-form-item prop="campus">
|
||||
<dict-select style="width: 100%" placeholder="请选择所属校区" v-model="formData.campus"
|
||||
:disabled="allowFields('campus')" code="USER_CAMPUS"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="身份证号码">
|
||||
<el-form-item prop="idCard">
|
||||
<el-input v-model="formData.idCard" :disabled="allowFields('idCard')" placeholder="请输入身份证号码" maxlength="18"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="联系电话">
|
||||
<el-form-item prop="mobile">
|
||||
<el-input v-model="formData.mobile" :disabled="allowFields('mobile')" placeholder="请输入联系电话" maxlength="15"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="电子邮箱">
|
||||
<el-form-item prop="email">
|
||||
<el-input v-model="formData.email" :disabled="allowFields('email')" placeholder="请输入电子邮箱" maxlength="50"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
|
||||
<el-descriptions-item label="在职状态">
|
||||
<el-form-item prop="userState">
|
||||
<dict-select v-model="formData.userState" code="USER_STATE"
|
||||
:disabled="allowFields('userState')" style="width: 100%"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="人员类型">
|
||||
<el-form-item prop="personType">
|
||||
<dict-select v-model="formData.personType" code="PERSON_TYPE"
|
||||
:disabled="allowFields('personType')" style="width: 100%"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="人员性质">
|
||||
<el-form-item prop="preparedBy">
|
||||
<el-input v-model="formData.preparedBy" disabled placeholder="暂无" maxlength="50"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="会员状态">
|
||||
<el-form-item prop="member">
|
||||
<el-radio-group v-model="formData.member" size="small">
|
||||
<el-radio border :label="true">会员</el-radio>
|
||||
<el-radio border :label="false">非会员</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="福利会员状态">
|
||||
<el-form-item prop="welfareMember">
|
||||
<el-radio-group v-model="formData.welfareMember" size="small">
|
||||
<el-radio border :label="true">福利会员</el-radio>
|
||||
<el-radio border :label="false">非福利会员</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item></el-descriptions-item>
|
||||
|
||||
|
||||
<template v-if="formData.member == 1">
|
||||
<el-descriptions-item label="是否加入会员组别">
|
||||
<el-form-item prop="member">
|
||||
<el-radio-group v-model="formData.isJoinActivityMemberScope" size="small">
|
||||
<el-radio border :label="true">是</el-radio>
|
||||
<el-radio border :label="false">否</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
</template>
|
||||
<template v-if="formData.member == 0">
|
||||
<el-descriptions-item label="是否退出会员组别">
|
||||
<el-form-item prop="member">
|
||||
<el-radio-group v-model="formData.isExitActivityMemberScope" size="small">
|
||||
<el-radio border :label="true">是</el-radio>
|
||||
<el-radio border :label="false">否</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
</template>
|
||||
|
||||
<template v-if="formData.member != null && !formData.welfareMember">
|
||||
<el-descriptions-item></el-descriptions-item>
|
||||
<el-descriptions-item></el-descriptions-item>
|
||||
</template>
|
||||
|
||||
<template v-if="formData.welfareMember == true">
|
||||
<el-descriptions-item label="是否加入福利项目">
|
||||
<el-form-item prop="isJoinWelfareProject">
|
||||
<el-radio-group v-model="formData.isJoinWelfareProject" size="small">
|
||||
<el-radio border :label="true">是</el-radio>
|
||||
<el-radio border :label="false">否</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<template v-if="formData.isJoinWelfareProject">
|
||||
<el-descriptions-item label="选择福利项目">
|
||||
<el-form-item prop="welfareProjectId">
|
||||
<el-select clearable filterable placeholder="请选择福利项目" style="width: 100%"
|
||||
v-model="formData.welfareProjectId">
|
||||
<el-option v-for="item in welfareProjectList"
|
||||
:key="id" :label="item.name" :value="item.id"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
</template>
|
||||
<template v-else>
|
||||
<el-descriptions-item></el-descriptions-item>
|
||||
</template>
|
||||
</template>
|
||||
|
||||
|
||||
<el-descriptions-item label="家庭主要成员" :span="3">
|
||||
<el-form-item prop="families">
|
||||
<el-table :data="formData.families" border size="small">
|
||||
<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" :disabled="allowFields('families')"
|
||||
@click="formData.families.push({})">添加
|
||||
</el-button>
|
||||
</template>
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
type="danger"
|
||||
icon="el-icon-delete"
|
||||
size="mini"
|
||||
:disabled="formData.families.length===0 || allowFields('families')"
|
||||
@click="formData.families.splice(scope.$index,1)"
|
||||
></el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="个人简历" :span="3">
|
||||
<el-form-item prop="vita">
|
||||
<text-editor v-model="formData.vita"></text-editor>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-form>
|
||||
<el-row justify="end" type="flex" class="mt10">
|
||||
<el-button @click="$emit('do-back')" v-if="formData.id || !isShow" type="primary">返 回</el-button>
|
||||
<template v-if="isShow">
|
||||
<el-button @click="doSave" type="primary">保存变更</el-button>
|
||||
</template>
|
||||
<el-button @click="doSubmit" type="primary">提交变更</el-button>
|
||||
</el-row>
|
||||
</el-card>
|
||||
`,
|
||||
props: {
|
||||
id: { type: String, default: '' },
|
||||
},
|
||||
mixins: [initTableMixins],
|
||||
data(){
|
||||
return{
|
||||
isShow: true,
|
||||
user: {},
|
||||
units: [],
|
||||
unions: [],
|
||||
// 允许变更的字段
|
||||
allowChangeFields: [],
|
||||
formData: {
|
||||
families: [],
|
||||
},
|
||||
formRules: {
|
||||
username: [{required: false, message: "必填", trigger: ["change", "blur"]}],
|
||||
sex: [{required: false, message: "必填", trigger: ["change", "blur"]}],
|
||||
email: [
|
||||
{
|
||||
validator: (rule, value, callback) => {
|
||||
if (!value) {
|
||||
callback();
|
||||
} else if (/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/.test(value)) {
|
||||
callback();
|
||||
} else {
|
||||
callback(new Error("邮箱格式错误"));
|
||||
}
|
||||
},
|
||||
trigger: ["change", "blur"]
|
||||
}
|
||||
],
|
||||
idCard: [
|
||||
{
|
||||
validator: (rule, value, callback) => {
|
||||
if (!value) {
|
||||
// 如果值为空,直接通过校验
|
||||
callback();
|
||||
} else if (/^[1-9]\d{5}(18|19|20)?\d{2}((0[1-9])|(10|11|12))(([0|1|2][0-9])|10|20|30|31)\d{3}(\d|[Xx])$/.test(value)) {
|
||||
// 18位身份证号码格式正确
|
||||
callback();
|
||||
} else if (/^[1-9]\d{7}((0[1-9])|(10|11|12))(([0|1|2][0-9])|10|20|30|31)\d{3}$/.test(value)) {
|
||||
// 15位身份证号码格式正确
|
||||
callback();
|
||||
} else if (/^[1-9]\d{5}(18|19|20)?\d{2}((0[1-9])|(10|11|12))(([0|1|2][0-9])|10|20|30|31)\d{3}$/.test(value)) {
|
||||
// 外国人身份证号码格式正确(18位)
|
||||
callback();
|
||||
} else if (/^[1-9]\d{7}((0[1-9])|(10|11|12))(([0|1|2][0-9])|10|20|30|31)\d{3}$/.test(value)) {
|
||||
// 外国人身份证号码格式正确(15位)
|
||||
callback();
|
||||
} else {
|
||||
// 格式错误,返回错误信息
|
||||
callback(new Error("身份证号码格式错误"));
|
||||
}
|
||||
},
|
||||
trigger: ["change", "blur"]
|
||||
}
|
||||
],
|
||||
mobile: [
|
||||
{
|
||||
validator: (rule, value, callback) => {
|
||||
if (!value) {
|
||||
// 如果值为空,直接通过校验
|
||||
callback();
|
||||
} else if (/^[1][345789][0-9]{9}$/.test(value)) {
|
||||
// 手机号格式正确
|
||||
callback();
|
||||
} else if (/^\d+-\d+$/.test(value) && value.length <= 16) {
|
||||
// 座机号格式正确
|
||||
callback();
|
||||
} else {
|
||||
// 格式错误,返回错误信息
|
||||
callback(new Error(value.includes('-') ? '座机号码格式错误' : '手机号码格式错误'));
|
||||
}
|
||||
},
|
||||
trigger: ["change", "blur"]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
welfareProjectList: []
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
allowFields(prop) {
|
||||
return !this.allowChangeFields.map(v => v.code).includes(prop)
|
||||
},
|
||||
doSave(){
|
||||
this.$confirm("保存后可在我的申请里面再次编辑,您确定要保存吗?", "提示", { type: "warning" })
|
||||
.then(() => {
|
||||
const formData = this.formData
|
||||
if (formData.families) {
|
||||
formData.families = JSON.stringify(this.formData.families)
|
||||
}
|
||||
this.$emit('do-save', formData)
|
||||
})
|
||||
.catch()
|
||||
},
|
||||
doSubmit() {
|
||||
this.$refs.formRef.validate((valid) => {
|
||||
if (valid) {
|
||||
this.$confirm("提交后将进入审核流程,无法再进行编辑,您确定要提交申请吗?", "提示", { type: "warning" })
|
||||
.then(() => {
|
||||
const formData = this.formData
|
||||
if (formData.families) {
|
||||
formData.families = JSON.stringify(this.formData.families)
|
||||
}
|
||||
this.$emit('do-submit', formData)
|
||||
})
|
||||
.catch()
|
||||
}
|
||||
})
|
||||
},
|
||||
async init(userId){
|
||||
if (userId) {
|
||||
this.isShow = false
|
||||
await this.getUserById(userId)
|
||||
} else {
|
||||
this.isShow = true
|
||||
this.user = JSON.parse(window.sessionStorage.getItem('user'))
|
||||
}
|
||||
this.getFormDataValue(this.id)
|
||||
this.allowChangeFields = await getDictOptions("ALLOW_CHANGE_FIELDS")
|
||||
if (this.$auth.hasRoleOr('sysadmin, SchoolUnionMemberAdmin, SchoolUnionAdmin')) {
|
||||
this.units = await getUnits()
|
||||
this.unions = await getUnions()
|
||||
} else {
|
||||
this.units = await getUnits(this.user.unionid)
|
||||
}
|
||||
},
|
||||
async getUserById(userId){
|
||||
const resp = await $.post("/platform/member/change/apply/getUserByIdForMemberChange", { userId })
|
||||
if (resp.code === 0) {
|
||||
this.user = resp.data
|
||||
}
|
||||
},
|
||||
getFormDataValue(id){
|
||||
if (id) {
|
||||
$.post("/platform/member/change/apply/findChangeById", { id }).then((res) => {
|
||||
if (res.code === 0) {
|
||||
this.formData = res.data
|
||||
this.formData.unionid = this.user.unionid
|
||||
if (this.formData.families) {
|
||||
this.formData.families = JSON.parse(this.formData.families)
|
||||
} else {
|
||||
this.formData.families = []
|
||||
}
|
||||
}
|
||||
})
|
||||
} else {
|
||||
const {
|
||||
id,
|
||||
username,
|
||||
loginname,
|
||||
sex,
|
||||
member,
|
||||
welfareMember,
|
||||
nation,
|
||||
birthday,
|
||||
political,
|
||||
education,
|
||||
academicDegree,
|
||||
position,
|
||||
unit,
|
||||
union,
|
||||
campus,
|
||||
userState,
|
||||
personType,
|
||||
preparedBy,
|
||||
idCard,
|
||||
mobile,
|
||||
email,
|
||||
families,
|
||||
vita
|
||||
} = this.user
|
||||
|
||||
this.$set(this.formData, "userId", id)
|
||||
this.$set(this.formData, "username", username)
|
||||
this.$set(this.formData, "loginname", loginname)
|
||||
this.$set(this.formData, "birthday", birthday)
|
||||
this.$set(this.formData, "sex", sex)
|
||||
this.$set(this.formData, "member", member === 1)
|
||||
this.$set(this.formData, "welfareMember", welfareMember === 1)
|
||||
this.$set(this.formData, "idCard", idCard)
|
||||
this.$set(this.formData, "nation", nation)
|
||||
this.$set(this.formData, "political", political)
|
||||
this.$set(this.formData, "position", position)
|
||||
this.$set(this.formData, "education", education)
|
||||
this.$set(this.formData, "academicDegree", academicDegree)
|
||||
this.$set(this.formData, "campus", campus)
|
||||
this.$set(this.formData, "userState", userState)
|
||||
this.$set(this.formData, "personType", personType)
|
||||
this.$set(this.formData, "preparedBy", preparedBy)
|
||||
this.$set(this.formData, "unitName", unit ? unit.name : null)
|
||||
this.$set(this.formData, "unitId", unit ? unit.id : null)
|
||||
this.$set(this.formData, "unionName", union ? union.unionname : null)
|
||||
this.$set(this.formData, "unionId", union ? union.id : null)
|
||||
|
||||
this.$set(this.formData, "mobile", mobile)
|
||||
this.$set(this.formData, "email", email)
|
||||
this.$set(this.formData, "families", families ? families : [])
|
||||
this.$set(this.formData, "vita", vita)
|
||||
}
|
||||
}
|
||||
},
|
||||
created(){
|
||||
this.init()
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,117 @@
|
||||
const MEMBER_CHANGE_AUDIT_INFO = {
|
||||
template: /*language=HTML*/ `
|
||||
<div>
|
||||
<el-tabs v-model="activeName">
|
||||
<el-tab-pane label="基础信息" name="basicInfo">
|
||||
<el-descriptions :column="3" border class="descriptions-form">
|
||||
<el-descriptions-item label="工号">{{ viewData.loginname }}</el-descriptions-item>
|
||||
<el-descriptions-item label="姓名">{{ viewData.username }}</el-descriptions-item>
|
||||
<el-descriptions-item label="性别">{{ viewData.sex }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="民族">{{ viewData.nation }}</el-descriptions-item>
|
||||
<el-descriptions-item label="出生日期">{{ viewData.birthday ? moment(viewData.birthday).format("YYYY年MM月DD日") : '暂无' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="政治面貌">{{ viewData.political }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="学历">{{ viewData.education }}</el-descriptions-item>
|
||||
<el-descriptions-item label="学位">{{ viewData.academicDegree }}</el-descriptions-item>
|
||||
<el-descriptions-item label="党政职务">{{ viewData.position }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="工作单位">{{ viewData.unitname }}</el-descriptions-item>
|
||||
<el-descriptions-item label="所属工会">{{ viewData.unionname }}</el-descriptions-item>
|
||||
<el-descriptions-item label="所属校区">{{ viewData.campus }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="身份证号码">{{ viewData.idCard }}</el-descriptions-item>
|
||||
<el-descriptions-item label="联系电话">{{ viewData.mobile }}</el-descriptions-item>
|
||||
<el-descriptions-item label="电子邮箱">{{ viewData.email }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="在职状态">{{ viewData.userState }}</el-descriptions-item>
|
||||
<el-descriptions-item label="人员类型">{{ viewData.personType }}</el-descriptions-item>
|
||||
<el-descriptions-item label="人员性质">{{ viewData.preparedBy }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="会员状态">{{ viewData.member ? '会员' : '非会员' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="福利会员状态">{{ viewData.welfareMember ? '福利会员' : '非福利会员' }}</el-descriptions-item>
|
||||
<el-descriptions-item></el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="家庭主要成员" :span="3">
|
||||
<el-table v-if="viewData.families&&viewData.families.length"
|
||||
:data="viewData.families" 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-empty v-else :image-size="50" description="暂无家庭成员信息"></el-empty>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="个人简况" :span="3">
|
||||
<template slot="label">个人简况</template>
|
||||
<div v-if="viewData.vita" class="text-left" v-html="viewData.vita"></div>
|
||||
<span v-else>无数据</span>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="变更信息" name="changeInfo" v-if="viewData.changeInfos">
|
||||
<el-table :data="viewData.changeInfos" :size="tableSize" @sort-change="pageOrder" ref="table" row-key="id" style="width: 100%">
|
||||
<el-table-column :index="indexMethod" align="center" header-align="center"
|
||||
label="序号" type="index" width="80px"></el-table-column>
|
||||
<el-table-column prop="fieldName" label="变更字段" header-align="center"></el-table-column>
|
||||
<el-table-column prop="sourceValue" label="原数据" header-align="center">
|
||||
<template slot-scope="{row}">
|
||||
<div v-html="row.sourceValue"></div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="newValue" label="新数据" header-align="center">
|
||||
<template slot-scope="{row}">
|
||||
<div v-html="row.newValue"></div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="分工会审核信息" name="branch" v-if="viewData.branchAudit">
|
||||
<el-descriptions :column="2" border class="table_fixed">
|
||||
<el-descriptions-item label="审核人员">{{ viewData.branchAudit.username }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="审核时间">{{ viewData.branchAudit.auditTime }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="审核意见" :span="2">{{ viewData.branchAudit.auditOpinion }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="校工会审核信息" name="school" v-if="viewData.schoolAudit">
|
||||
<el-descriptions :column="2" border class="table_fixed">
|
||||
<el-descriptions-item label="审核人员">{{ viewData.schoolAudit.username }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="审核时间">{{ viewData.schoolAudit.auditTime }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="审核意见" :span="2">{{ viewData.schoolAudit.auditOpinion }}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</div>
|
||||
`,
|
||||
mixins: [initTableMixins],
|
||||
data(){
|
||||
return{
|
||||
activeName: "basicInfo",
|
||||
viewData: {
|
||||
changeInfos: [],
|
||||
schoolAudit: {},
|
||||
branchAudit: {}
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async onOpen(id){
|
||||
const resp = await $.post('/platform/member/change/mine/findMemberChangeRecord', {id})
|
||||
if (resp.code === 0) {
|
||||
this.viewData = resp.data
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,933 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<div class="search">
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">职工信息:</div>
|
||||
<div class="search-item-option">
|
||||
<el-input placeholder="请输入内容" clearable v-model="pageForm.searchKeyword"
|
||||
@keyup.enter.native="doSearch" style="width: 100%">
|
||||
<el-select v-model="pageForm.searchName" slot="prepend"
|
||||
style="width: 80px;">
|
||||
<el-option label="姓名" value="u.username"></el-option>
|
||||
<el-option label="工号" value="u.loginname"></el-option>
|
||||
</el-select>
|
||||
</el-input>
|
||||
</div>
|
||||
</div>
|
||||
<div class="search-item"
|
||||
v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('SchoolUnionMemberAdmin')||@shiro.hasRole('H03')}">
|
||||
<div class="search-item-label">所属工会:</div>
|
||||
<div class="search-item-option">
|
||||
<el-select placeholder="所属工会" v-model="pageForm.unionId"
|
||||
style="width: 100%;"
|
||||
clearable="true"
|
||||
@change="flushUnits" @clear="flushUnits"
|
||||
filterable="true">
|
||||
<el-option v-for="item in unions" :label="item.unionname"
|
||||
:value="item.id"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">组成单位:</div>
|
||||
<div class="search-item-option">
|
||||
<el-select v-model="pageForm.unitId" style="width: 100%" filterable
|
||||
clearable
|
||||
@change="getThreeUnits"
|
||||
placeholder="请选择">
|
||||
<el-option
|
||||
v-for="item in units"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">性  别:</div>
|
||||
<div class="search-item-option">
|
||||
<el-select v-model="pageForm.sex" style="width: 100%" clearable
|
||||
placeholder="请选择">
|
||||
<el-option v-for="sex in sexOptions" :label="sex"
|
||||
:value="sex"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">在职状态:</div>
|
||||
<div class="search-item-option">
|
||||
<dict-select v-model="pageForm.userState"
|
||||
style="width: 100%"
|
||||
clearable
|
||||
placeholder="在职状态"
|
||||
code="USER_STATE"></dict-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">人员类型:</div>
|
||||
<div class="search-item-option">
|
||||
<dict-select v-model="pageForm.personType"
|
||||
style="width: 100%"
|
||||
clearable
|
||||
placeholder="人员类型"
|
||||
code="PERSON_TYPE"></dict-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">人员类型:</div>
|
||||
<div class="search-item-option">
|
||||
<dict-select v-model="pageForm.preparedBy"
|
||||
style="width: 100%"
|
||||
clearable
|
||||
placeholder="人员类型"
|
||||
code="PREPARED_BY"></dict-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">变更类型:</div>
|
||||
<div class="search-item-option">
|
||||
<enum-select v-model="pageForm.changeTypes"
|
||||
enum="MemberChangeType"
|
||||
label="changeTypeName"
|
||||
multiple
|
||||
value="type"
|
||||
style="width: 100%"
|
||||
clearable
|
||||
placeholder="变更类型"
|
||||
></enum-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- <div class="search-item">-->
|
||||
<!-- <div class="search-item-label">更新日期:</div>-->
|
||||
<!-- <div class="search-item-option">-->
|
||||
|
||||
<!-- <el-date-picker-->
|
||||
<!-- style="width: 100%"-->
|
||||
<!-- v-model="pageForm.changeDateRange"-->
|
||||
<!-- @change="changeDateRangeChange"-->
|
||||
<!-- type="datetimerange"-->
|
||||
<!-- :picker-options="pickerOptions"-->
|
||||
<!-- range-separator="-"-->
|
||||
<!-- start-placeholder="开始日期"-->
|
||||
<!-- end-placeholder="结束日期"-->
|
||||
<!-- format="yyyy-MM-dd"-->
|
||||
<!-- value-format="yyyy-MM-dd"-->
|
||||
<!-- align="right">-->
|
||||
<!-- </el-date-picker>-->
|
||||
<!-- </div>-->
|
||||
<!-- </div>-->
|
||||
|
||||
|
||||
<!--<div class="search-item">
|
||||
<div class="search-item-label">是否异动:</div>
|
||||
<div class="search-item-option">
|
||||
<el-radio-group v-model="pageForm.changed" @change="doSearch">
|
||||
<el-radio-button :label="true">是</el-radio-button>
|
||||
<el-radio-button :label="false">否</el-radio-button>
|
||||
</el-radio-group>
|
||||
</div>
|
||||
</div>-->
|
||||
|
||||
<div class="search-query">
|
||||
<el-button type="primary" icon="el-icon-search" @click="doSearch">搜索
|
||||
</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" class="mt10">
|
||||
<table-tool label="会员列表" :app="this">
|
||||
<template #label_end>
|
||||
<!-- <span class="text-danger">(温馨提醒:异动类型为新增的教职工,需要新入职变更操作后才能成为工会会员!)</span>-->
|
||||
</template>
|
||||
<template #func>
|
||||
<el-radio-group v-model="pageForm.myUnionGroupUser" @change="doSearch" class="mr5"
|
||||
v-if="isThreeUnit === true" size="small">
|
||||
<el-radio-button label="">全部</el-radio-button>
|
||||
<el-radio-button :label="1">本小组会员</el-radio-button>
|
||||
<el-radio-button :label="0">非本小组会员</el-radio-button>
|
||||
</el-radio-group>
|
||||
|
||||
<span class="text-danger">人员信息有无变化:</span>
|
||||
<el-select v-model="pageForm.isMember" @change="doSearch()"
|
||||
:clearable="false" size="small"
|
||||
style="width: 130px;margin-right: 5px">
|
||||
<el-option label="全部" value=""></el-option>
|
||||
<el-option label="是会员" value="1"></el-option>
|
||||
<el-option label="不是会员" value="0"></el-option>
|
||||
</el-select>
|
||||
|
||||
<el-radio-group v-model="pageForm.changed" @change="doSearch" class="mr5"
|
||||
size="small">
|
||||
<el-radio-button label="">全部
|
||||
</el-radio-button>
|
||||
<el-radio-button :label="1">有变化
|
||||
</el-radio-button>
|
||||
<el-radio-button :label="0">无变化
|
||||
</el-radio-button>
|
||||
</el-radio-group>
|
||||
|
||||
<!-- <span class="text-danger">是否会员:</span>
|
||||
<el-radio-group v-model="pageForm.isMember" @change="doSearch" class="mr5"
|
||||
size="small">
|
||||
<el-radio-button label="">全部({{numData.userSumNum || 0}})
|
||||
</el-radio-button>
|
||||
<el-radio-button label="1">是({{numData.memberNum || 0}})
|
||||
</el-radio-button>
|
||||
<el-radio-button label="0">否({{numData.notMemberNum || 0}})
|
||||
</el-radio-button>
|
||||
</el-radio-group>-->
|
||||
|
||||
<!-- <el-dropdown style="margin: 0 10px" @command="pushDropdownCommand">-->
|
||||
<!-- <el-button type="primary" size="small" icon="el-icon-plus">-->
|
||||
<!-- 添加-->
|
||||
<!-- </el-button>-->
|
||||
<!-- <el-dropdown-menu slot="dropdown">-->
|
||||
<!-- <el-dropdown-item :command="{type:'select'}">选择加入-->
|
||||
<!-- </el-dropdown-item>-->
|
||||
<!-- <el-dropdown-item :command="{type:'add'}">新增用户-->
|
||||
<!-- </el-dropdown-item>-->
|
||||
<!-- </el-dropdown-menu>-->
|
||||
<!-- </el-dropdown>-->
|
||||
|
||||
<!-- <el-button :disabled="!checkUsers.length" type="primary" size="small"
|
||||
icon="el-icon-edit"
|
||||
@click="openBatchEdit" class="ml5">
|
||||
设置校区
|
||||
</el-button>-->
|
||||
|
||||
<!-- <el-button :disabled="!checkUsers.length" type="primary" size="small"-->
|
||||
<!-- icon="el-icon-edit"-->
|
||||
<!-- @click="openUnitMove" class="ml5">-->
|
||||
<!-- 单位调整-->
|
||||
<!-- </el-button>-->
|
||||
|
||||
</template>
|
||||
</table-tool>
|
||||
|
||||
<el-table ref="table" :data="tableData" style="width: 100%" row-key="id"
|
||||
@sort-change="pageOrder"
|
||||
v-loading="tableLoading" :size="tableSize" class="vi-table"
|
||||
@selection-change="tableHandleSelectionChange">
|
||||
<!-- <el-table-column type="selection" :reserve-selection="true"></el-table-column>-->
|
||||
|
||||
<el-table-column align="center" header-align="center" type="index"
|
||||
:index="indexMethod" label="序号"
|
||||
width="80px"></el-table-column>
|
||||
<el-table-column
|
||||
align="center"
|
||||
header-align="center"
|
||||
v-for="column in tableColumns"
|
||||
show-overflow-tooltip
|
||||
:sortable="column.sortable"
|
||||
:label="column.label"
|
||||
:prop="column.prop" :width="column.width" min-width="100px">
|
||||
<template v-if="column.prop=='loginname'" scope="{row}">
|
||||
<el-link type="primary">{{row.loginname}}
|
||||
</el-link>
|
||||
</template>
|
||||
<template v-else-if="column.prop==='unitname'" scope="{row}">
|
||||
{{isDisPlayCode?'('+row.unitcode+')':null}}{{row.unitname}}
|
||||
</template>
|
||||
<template v-else-if="column.prop==='unionname'" scope="{row}">
|
||||
{{isDisPlayCode?'('+row.unioncode+')':null}}{{row.unionname}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="异动信息" header-align="center">
|
||||
<el-table-column label="更新时间" prop="changeTime" min-width="100px"
|
||||
header-align="center"
|
||||
sortable
|
||||
align="center" show-overflow-tooltip>
|
||||
</el-table-column>
|
||||
<el-table-column label="异动类型" prop="changeTypes" header-align="center"
|
||||
width="150px"
|
||||
align="center" show-overflow-tooltip sortable>
|
||||
<template scope="{row}">
|
||||
<span style="color: #0e78c5;cursor: pointer" @click="openAllChangeView(row)">
|
||||
{{ getChangeTypes(row.changeTypes) }}
|
||||
</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="会员" header-align="center" align="center" prop="member"
|
||||
show-overflow-tooltip sortable>
|
||||
<template scope="{row}">
|
||||
<span v-if="row.member==1" class="text-success ">
|
||||
<i class="fa fa-circle ml5"></i> 是
|
||||
</span>
|
||||
<span v-else class="text-danger">
|
||||
<i class="fa fa-circle ml5"></i> 否
|
||||
</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="审核状态" header-align="center" align="center"
|
||||
prop="welfareMember"
|
||||
show-overflow-tooltip sortable>
|
||||
<template scope="{row}">
|
||||
<vi-table-state v-if="row.stateId" :state="row"></vi-table-state>
|
||||
<vi-table-state v-else
|
||||
:state="{stateColor:'#1890ff',stateName:'暂无'}"></vi-table-state>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column prop="userOnline" align="center" header-align="center"
|
||||
label="操作"
|
||||
width="100px">
|
||||
<template scope="{row}">
|
||||
|
||||
<el-dropdown @command="dropdownCommand">
|
||||
<el-button plain size="mini">
|
||||
<i class="ti-settings"></i>
|
||||
<span class="ti-angle-down"></span>
|
||||
</el-button>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item v-if="$auth.hasRoleOr('sysadmin,SchoolUnionAdmin,SchoolUnionMemberAdmin,branchUnionMemberAdmin')"
|
||||
:command="{type:'view',data:row}">
|
||||
查看
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item
|
||||
v-if="$auth.hasRoleOr('sysadmin,SchoolUnionAdmin,ghxzzz,SchoolUnionMemberAdmin,H04')"
|
||||
:disabled="row.stateId == 10050"
|
||||
:command="{type:'change',data:row}">
|
||||
变更
|
||||
</el-dropdown-item>
|
||||
<!--
|
||||
<el-dropdown-item v-show="row.changeType===2"
|
||||
:command="{type:'sendSms',data:row}">
|
||||
通知入会
|
||||
</el-dropdown-item>-->
|
||||
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<member-info ref="memberInfoRef"></member-info>
|
||||
</template>
|
||||
|
||||
<template #public>
|
||||
<member-all-change-info ref="memberAllChangeInfoRef"></member-all-change-info>
|
||||
</template>
|
||||
|
||||
<template #edit>
|
||||
<member-change ref="memberChangeRef" @do-back="$refs.guava.index()" @do-submit="doSubmit"></member-change>
|
||||
</template>
|
||||
</guava>
|
||||
|
||||
<el-drawer
|
||||
title="设置校区"
|
||||
:visible.sync="batchEditVisible"
|
||||
:before-close="handleClose" size="1000px">
|
||||
<el-timeline style="margin-right: 40px">
|
||||
<el-timeline-item timestamp="" placement="top">
|
||||
<el-form ref="batchForm" :model="batchFormData" label-width="100px">
|
||||
<el-row :gutter="60">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="所属校区">
|
||||
<el-select v-model="batchFormData.campus" style="width: 300px"
|
||||
clearable
|
||||
size="medium"
|
||||
placeholder="请选择"
|
||||
@change="checkUsers.map(v=>$set(v,'campusId',batchFormData.campus))">
|
||||
<el-option
|
||||
v-for="item in campusOptions"
|
||||
:key="item.campus_id"
|
||||
:label="item.campus_name"
|
||||
:value="item.campus_id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
</el-timeline-item>
|
||||
<el-timeline-item timestamp="" placement="top">
|
||||
<el-table :data="checkUsers" style="width: 100%" row-key="id" class="vi-table"
|
||||
height="70vh">
|
||||
<el-table-column show-overflow-tooltip align="center" header-align="center"
|
||||
prop="loginname"
|
||||
label="工号"></el-table-column>
|
||||
<el-table-column show-overflow-tooltip align="center" header-align="center"
|
||||
prop="username"
|
||||
label="姓名"></el-table-column>
|
||||
<el-table-column show-overflow-tooltip align="center" header-align="center"
|
||||
prop="unitname"
|
||||
label="所属单位"></el-table-column>
|
||||
<el-table-column show-overflow-tooltip align="center" header-align="center"
|
||||
prop="unionname"
|
||||
label="所属工会"></el-table-column>
|
||||
<el-table-column show-overflow-tooltip align="center" header-align="center"
|
||||
prop="campusId"
|
||||
label="所属校区" width="300px">
|
||||
<template scope="{row}">
|
||||
<el-select v-model="row.campusId" style="width: 200px" clearable
|
||||
size="small"
|
||||
placeholder="请选择">
|
||||
<el-option
|
||||
v-for="item in campusOptions"
|
||||
:key="item.campus_id"
|
||||
:label="item.campus_name"
|
||||
:value="item.campus_id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-timeline-item>
|
||||
</el-timeline>
|
||||
|
||||
|
||||
<span style="position: absolute;bottom: 20px;right: 20px">
|
||||
<el-button @click="batchEditVisible = false"
|
||||
:disabled="batchEditLoading">取 消</el-button>
|
||||
<el-button type="primary" @click="doBatchEdit"
|
||||
:loading="batchEditLoading">确定</el-button>
|
||||
</span>
|
||||
</el-drawer>
|
||||
|
||||
<el-drawer
|
||||
title="单位调整"
|
||||
:visible.sync="unitMoveVisibile"
|
||||
:before-close="handleClose" size="70%">
|
||||
|
||||
<el-row class="text-primary p20">
|
||||
选择新单位
|
||||
</el-row>
|
||||
<el-row type="flex" :gutter="20" class="pl20 pr20">
|
||||
<el-col :span="12">
|
||||
<el-select placeholder="请选择新工会" v-model="unitMoveFormData.unionId"
|
||||
style="width: 100%;"
|
||||
clearable="true"
|
||||
@change="moveUnionsChange"
|
||||
filterable="true">
|
||||
<el-option v-for="item in unitMoveUnions" :label="item.unionname"
|
||||
:value="item.id"></el-option>
|
||||
</el-select>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-select v-model="unitMoveFormData.unitId" style="width: 100%" filterable
|
||||
clearable
|
||||
@change="moveUnitChange"
|
||||
placeholder="请选择新单位">
|
||||
<el-option
|
||||
v-for="item in unitMoveUnits"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-select v-model="unitMoveFormData.threeUnitId" clearable 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-col>
|
||||
<el-col :span="12">
|
||||
<el-input :value="unitMoveFormData.unionGroupName" disabled
|
||||
placeholder="新工会小组"></el-input>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row class="mt10">
|
||||
<el-table :data="checkUsers" style="width: 100%;padding: 20px" class="vi-table"
|
||||
border
|
||||
height="70vh">
|
||||
<el-table-column show-overflow-tooltip align="center" header-align="center"
|
||||
prop="loginname"
|
||||
width="120"
|
||||
label="工号"></el-table-column>
|
||||
<el-table-column show-overflow-tooltip align="center" header-align="center"
|
||||
prop="username"
|
||||
width="120"
|
||||
label="姓名"></el-table-column>
|
||||
<el-table-column show-overflow-tooltip align="center" header-align="center"
|
||||
prop="threeUnitName"
|
||||
label="当前科室" v-if="isThreeUnit"></el-table-column>
|
||||
<el-table-column show-overflow-tooltip align="center" header-align="center"
|
||||
prop="unitname"
|
||||
label="当前单位"></el-table-column>
|
||||
<el-table-column show-overflow-tooltip align="center" header-align="center"
|
||||
prop="unionname"
|
||||
label="当前工会"></el-table-column>
|
||||
<el-table-column show-overflow-tooltip align="center" header-align="center"
|
||||
label="新科室" v-if="isThreeUnit">
|
||||
<template slot-scope="{row}">
|
||||
<span>{{unitMoveFormData.threeUnitName}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column show-overflow-tooltip align="center" header-align="center"
|
||||
label="新单位">
|
||||
<template slot-scope="{row}">
|
||||
<span>{{unitMoveFormData.unitName}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column show-overflow-tooltip align="center" header-align="center"
|
||||
label="新分工会">
|
||||
<template slot-scope="{row}">
|
||||
<span>{{unitMoveFormData.unionName}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-row>
|
||||
|
||||
<span style="position: absolute;bottom: 20px;right: 20px">
|
||||
<el-button @click="unitMoveVisibile = false">取 消</el-button>
|
||||
<el-button type="primary" @click="doUnitMove">确定</el-button>
|
||||
</span>
|
||||
</el-drawer>
|
||||
|
||||
<el-drawer
|
||||
title="添加会员"
|
||||
:visible.sync="selectUserVisible"
|
||||
:before-close="handleClose" size="1200px">
|
||||
|
||||
<member-user-select v-model="selectUsers" ref="userSelect" :page_size="10"
|
||||
:sql_cnd="['(u.member is null or u.member = 0) and (c.taskId is null OR c.stateId=70)']"></member-user-select>
|
||||
|
||||
<span style="position: absolute;bottom: 20px;right: 20px">
|
||||
<el-button @click="selectUserVisible = false"
|
||||
:disabled="selectUserLoading">取 消</el-button>
|
||||
<el-button type="primary" @click="doBatchJoinMember"
|
||||
:loading="selectUserLoading">确定</el-button>
|
||||
</span>
|
||||
</el-drawer>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
<!--#include("../common/memberAllChangeInfo.js"){}#-->
|
||||
<!--#include("../../common/memberInfo.js"){}#-->
|
||||
<!--#include("../common/memberChange.js"){}#-->
|
||||
|
||||
new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
pickerOptions: {
|
||||
shortcuts: [{
|
||||
text: '最近一周',
|
||||
onClick(picker) {
|
||||
const end = new Date();
|
||||
const start = new Date();
|
||||
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
|
||||
picker.$emit('pick', [start, end]);
|
||||
}
|
||||
}, {
|
||||
text: '最近一个月',
|
||||
onClick(picker) {
|
||||
const end = new Date();
|
||||
const start = new Date();
|
||||
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
|
||||
picker.$emit('pick', [start, end]);
|
||||
}
|
||||
}, {
|
||||
text: '最近三个月',
|
||||
onClick(picker) {
|
||||
const end = new Date();
|
||||
const start = new Date();
|
||||
start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
|
||||
picker.$emit('pick', [start, end]);
|
||||
}
|
||||
}]
|
||||
},
|
||||
checkUsers: [],
|
||||
batchEditVisible: false,
|
||||
batchEditLoading: false,
|
||||
batchFormData: {},
|
||||
|
||||
unitMoveVisibile: false,
|
||||
unitMoveUnions: [],
|
||||
unitMoveUnits: [],
|
||||
unitMoveFormData: {
|
||||
unitId: '',
|
||||
unionId: '',
|
||||
unitName: '',
|
||||
unionName: ''
|
||||
},
|
||||
|
||||
active: 'info',
|
||||
submitLoading: false,
|
||||
formRules: {},
|
||||
info: {},
|
||||
userId: '',
|
||||
formData: {},
|
||||
pageForm: {
|
||||
searchName: "u.username",
|
||||
myUnionGroupUser: '',
|
||||
changed: '',
|
||||
isMember: '1',
|
||||
changeTypes: [],
|
||||
personTypes: [],
|
||||
changeOrigins: []
|
||||
},
|
||||
unions: [],
|
||||
units: [],
|
||||
tableColumns: [
|
||||
{prop: 'loginname', label: '工号', sortable: true},
|
||||
{prop: 'username', label: '姓名', sortable: true},
|
||||
{prop: 'sex', label: '性别', sortable: true, width: '100px'},
|
||||
{prop: 'birthday', label: '出生年月', sortable: true},
|
||||
{prop: 'userState', label: '在职状态', sortable: true},
|
||||
{prop: 'personType', label: '人员类型', sortable: true},
|
||||
{prop: 'preparedBy', label: '人员性质', sortable: true},
|
||||
{prop: 'unionname', label: '所属工会', sortable: true},
|
||||
{prop: 'unitname', label: '所属单位', sortable: true},
|
||||
{prop: 'threeUnitName', label: '所在科室', sortable: true, checked: 0},
|
||||
{prop: 'unionGroupName', label: '工会小组', sortable: true, checked: 0},
|
||||
// {prop: 'campusName', label: '所属校区', sortable: true},
|
||||
],
|
||||
campusOptions: [],
|
||||
sexOptions: ['男', '女'],
|
||||
|
||||
welfareMemberLoading: false,
|
||||
numData: {
|
||||
changeNum: 0,
|
||||
notChangeNum: 0,
|
||||
userSumNum: 0,
|
||||
memberNum: 0,
|
||||
notMemberNum: 0,
|
||||
},
|
||||
threeUnits: [],
|
||||
selectUserVisible: false,
|
||||
selectUsers: [],
|
||||
selectUserLoading: false,
|
||||
isThreeUnit: false,
|
||||
|
||||
changeTypeData: [],
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'member-user-select': httpVueLoader('/components/plugins/MemberUserTableSelect.vue?v=' + new Date().getTime()),
|
||||
'member-all-change-info': MEMBER_ALL_CHANGE_INFO,
|
||||
'member-info': MEMBER_INFO,
|
||||
'member-change': MEMBER_CHANGE,
|
||||
},
|
||||
methods: {
|
||||
openAllChangeView(row){
|
||||
this.$refs.guava.public()
|
||||
this.$nextTick(() => {
|
||||
this.$refs.memberAllChangeInfoRef.onOpen(row.id)
|
||||
})
|
||||
},
|
||||
async afterEdit(memData) {
|
||||
if (!this.userId) {
|
||||
await $.post("/platform/member/info/make/joinMemberFamily", memData)
|
||||
}
|
||||
this.userId = ''
|
||||
this.pageData()
|
||||
this.$refs.guava.index()
|
||||
},
|
||||
async doBatchJoinMember() {
|
||||
if (!this.selectUsers.length) {
|
||||
this.notifyWarning("请先勾选需要设置为会员的用户")
|
||||
return
|
||||
}
|
||||
|
||||
this.selectUserLoading = true
|
||||
const resp = await $.post(loc() + "/joinWelfareMember", {userIds: JSON.stringify(this.selectUsers)});
|
||||
this.selectUserLoading = false
|
||||
if (resp.code === 0) {
|
||||
this.pageData()
|
||||
this.$refs.userSelect.init()
|
||||
this.selectUserVisible = false
|
||||
} else {
|
||||
this.notifyWarning(resp.msg)
|
||||
}
|
||||
},
|
||||
pushDropdownCommand({type}) {
|
||||
if (type == 'select') {
|
||||
this.selectUsers = []
|
||||
this.selectUserVisible = true
|
||||
this.$nextTick(() => {
|
||||
this.$refs.userSelect.init()
|
||||
})
|
||||
} else if (type == 'add') {
|
||||
this.userId = ""
|
||||
this.$refs.guava.public()
|
||||
if (!this.userId) {
|
||||
this.$refs.member.id = null
|
||||
this.$refs.member.getUserInfo()
|
||||
}
|
||||
}
|
||||
},
|
||||
async threeUnitChange(val) {
|
||||
if (val) {
|
||||
const threeUnit = this.threeUnits.find(v => v.id === val)
|
||||
const groupName = threeUnit.groupname
|
||||
this.$set(this.unitMoveFormData, 'threeUnitName', threeUnit.name)
|
||||
this.$set(this.unitMoveFormData, 'unionGroupName', groupName)
|
||||
} else {
|
||||
this.$set(this.unitMoveFormData, 'unionGroupName', null)
|
||||
}
|
||||
},
|
||||
async getThreeUnits(val) {
|
||||
this.threeUnits = await threeUnitsByUnionGroupOrUnitId(this.pageForm.unitId, this.pageForm.unionGroupId)
|
||||
},
|
||||
doSearch() {
|
||||
this.pageForm.pageNumber = 1
|
||||
this.pageData()
|
||||
this.getNumData()
|
||||
},
|
||||
openUnitMove() {
|
||||
this.unitMoveVisibile = true
|
||||
this.unitMoveFormData = {
|
||||
unitId: '',
|
||||
unionId: '',
|
||||
unitName: '',
|
||||
unionName: ''
|
||||
}
|
||||
},
|
||||
async moveUnionsChange(val) {
|
||||
if (val) {
|
||||
this.unitMoveUnits = await getUnits(val)
|
||||
this.$set(this.unitMoveFormData, 'unionName', this.unitMoveUnions.find(v => v.id === val).unionname)
|
||||
this.$set(this.unitMoveFormData, 'unitId', '')
|
||||
this.$set(this.unitMoveFormData, 'unitName', '')
|
||||
} else {
|
||||
this.$set(this.unitMoveFormData, 'unitId', '')
|
||||
this.$set(this.unitMoveFormData, 'unitName', '')
|
||||
this.$set(this.unitMoveFormData, 'unionName', '')
|
||||
this.unitMoveUnits = []
|
||||
}
|
||||
},
|
||||
async moveUnitChange(val) {
|
||||
if (val) {
|
||||
this.$set(this.unitMoveFormData, 'unitName', this.unitMoveUnits.find(v => v.id === val).name)
|
||||
} else {
|
||||
this.$set(this.unitMoveFormData, 'unitName', '')
|
||||
}
|
||||
if (val) {
|
||||
this.threeUnits = await threeUnitsByUnionGroupOrUnitId(val, null)
|
||||
}
|
||||
},
|
||||
async doUnitMove() {
|
||||
if (this.unitMoveFormData.unitId === '') {
|
||||
this.notifyWarning('请选择新单位!')
|
||||
return
|
||||
}
|
||||
if (this.unitMoveFormData.threeUnitId === '') {
|
||||
this.notifyWarning('请选择新科室!')
|
||||
return
|
||||
}
|
||||
|
||||
const params = {
|
||||
unitId: this.unitMoveFormData.unitId,
|
||||
threeUnitId: this.unitMoveFormData.threeUnitId,
|
||||
userId: this.checkUsers.map(v => v.id)
|
||||
}
|
||||
|
||||
const resp = await $.post(loc() + '/userUnitMove', params)
|
||||
if (resp.code === 0) {
|
||||
this.pageData()
|
||||
this.getNumData()
|
||||
this.$refs.table.clearSelection();
|
||||
this.unitMoveVisibile = false
|
||||
} else {
|
||||
this.notifyWarning(resp.msg)
|
||||
}
|
||||
},
|
||||
changeDateRangeChange(val) {
|
||||
this.pageForm.changeDateBefore = val[0]
|
||||
this.pageForm.changeDateEnd = val[1]
|
||||
},
|
||||
async doBatchEdit() {
|
||||
const batch = this.checkUsers.map(v => {
|
||||
return {id: v.id, campusId: v.campusId}
|
||||
})
|
||||
this.batchEditLoading = true
|
||||
const resp = await $.post("/platform/welfare/member/mange/batchEdit", {users: JSON.stringify(batch)});
|
||||
this.batchEditLoading = false
|
||||
if (resp.code === 0) {
|
||||
this.pageData()
|
||||
this.getNumData()
|
||||
this.$refs.table.clearSelection();
|
||||
this.batchEditVisible = false
|
||||
} else {
|
||||
this.notifyWarning(resp.msg)
|
||||
}
|
||||
},
|
||||
handleClose(done) {
|
||||
this.$confirm('确认关闭?')
|
||||
.then(_ => {
|
||||
done();
|
||||
})
|
||||
.catch(_ => {
|
||||
});
|
||||
},
|
||||
openBatchEdit() {
|
||||
this.batchFormData = {}
|
||||
this.batchEditVisible = true
|
||||
},
|
||||
tableHandleSelectionChange(val) {
|
||||
this.checkUsers = val;
|
||||
},
|
||||
|
||||
async sendSms(userid) {
|
||||
const resp = await $.post(loc() + '/sendSms', {userid})
|
||||
if (resp.code === 0) {
|
||||
this.$notify({title: '成功', message: '发送成功!', type: 'success'});
|
||||
}
|
||||
},
|
||||
|
||||
async allIsWelfareMember() {
|
||||
this.welfareMemberLoading = true
|
||||
const resp = await $.post(loc() + "/allIsWelfareMember")
|
||||
this.welfareMemberLoading = false
|
||||
},
|
||||
|
||||
dropdownCommand(command) {
|
||||
const {type, data} = command
|
||||
if (type === 'view') {
|
||||
this.openView(data)
|
||||
} else if (type === 'change') {
|
||||
this.openChange(data.id)
|
||||
} else if (type === 'sendSms') {
|
||||
this.sendSms(data.id)
|
||||
}
|
||||
},
|
||||
openChange(userId) {
|
||||
this.$refs.guava.edit()
|
||||
this.$nextTick(() => {
|
||||
this.$refs.memberChangeRef.init(userId)
|
||||
})
|
||||
},
|
||||
async doSubmit(formData) {
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '数据保存中,请稍后...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: 'rgba(0, 0, 0, 0.7)'
|
||||
});
|
||||
const resp = await $.post('/platform/member/change/mange/doSubmitChange', formData)
|
||||
loading.close()
|
||||
if (resp.code === 0) {
|
||||
this.$message.success(resp.msg)
|
||||
this.$refs.guava.index()
|
||||
this.pageData()
|
||||
} else {
|
||||
this.$message.error(resp.msg)
|
||||
}
|
||||
},
|
||||
openView(row) {
|
||||
this.$refs.guava.view()
|
||||
this.$nextTick(() => {
|
||||
this.$refs.memberInfoRef.onOpen(row.id)
|
||||
})
|
||||
},
|
||||
async flushUnits() {
|
||||
this.$set(this.pageForm, "unitId", null)
|
||||
this.$set(this.pageForm, "unionGroupId", null)
|
||||
this.$set(this.pageForm, "threeUnitId", null)
|
||||
this.units = []
|
||||
this.unionGroups = []
|
||||
this.threeUnits = []
|
||||
if (this.pageForm.unionId) {
|
||||
this.units = await getUnits(this.pageForm.unionId)
|
||||
this.unionGroups = await unionGroupsByUnionId(this.pageForm.unionId)
|
||||
}
|
||||
},
|
||||
async getNumData() {
|
||||
// const resp = await $.post(loc() + '/getButtonNum', this.pageForm)
|
||||
// if (resp.code === 0) {
|
||||
// this.numData = resp.data
|
||||
// } else {
|
||||
// this.notifyWarning(resp.msg)
|
||||
// }
|
||||
},
|
||||
getChangeTypes(changeTypes){
|
||||
const changeTypesList = JSON.parse(changeTypes)
|
||||
if (changeTypesList) {
|
||||
if (!changeTypesList || changeTypesList.length === 0 || !this.changeTypeData || this.changeTypeData.length === 0) return null
|
||||
return changeTypesList
|
||||
.map((v) => {
|
||||
return this.changeTypeData.find((item) => item.type === v).changeTypeName
|
||||
})
|
||||
.join(",")
|
||||
}
|
||||
return null
|
||||
},
|
||||
pageData() {
|
||||
sublime.showLoadingbar();
|
||||
this.tableLoading = true
|
||||
const pageForm = clone(this.pageForm)
|
||||
pageForm.userStates = JSON.stringify(pageForm.userStates)
|
||||
pageForm.personTypes = JSON.stringify(pageForm.personTypes)
|
||||
pageForm.changeTypes = JSON.stringify(pageForm.changeTypes)
|
||||
pageForm.changeOrigins = JSON.stringify(pageForm.changeOrigins)
|
||||
$.post(loc() + '/pageData', pageForm, (data) => {
|
||||
sublime.closeLoadingbar();
|
||||
this.tableLoading = false
|
||||
if (data.code === 0) {
|
||||
this.tableData = data.data.list;
|
||||
this.pageForm.totalCount = data.data.totalCount;
|
||||
} else {
|
||||
this.$message.error(data.msg);
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
|
||||
},
|
||||
async created() {
|
||||
// this.isThreeUnit = await getConfigKey('isThreeUnit') === 'true'
|
||||
if (this.$auth.hasRole("ghxzzz")) {
|
||||
this.isThreeUnit = true
|
||||
this.pageForm.myUnionGroupUser = 1
|
||||
this.tableColumns.forEach(v => {
|
||||
if (["threeUnitName", "unionGroupName"].includes(v.prop)) {
|
||||
v.checked = 1
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
this.pageData();
|
||||
this.getNumData()
|
||||
if (this.$auth.hasRoleOr("sysadmin,SchoolUnionMemberAdmin,H03")) {
|
||||
this.unions = await getUnions(null, false)
|
||||
} else {
|
||||
this.unions = await getUnions(null, true)
|
||||
this.$set(this.pageForm, 'unionId', this.unions ? this.unions[0].id : null)
|
||||
this.flushUnits()
|
||||
}
|
||||
this.unitMoveUnions = clone(this.unions)
|
||||
this.campusOptions = await getCampus()
|
||||
this.changeTypeData = await getEnumOptions("MemberChangeType")
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,148 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app">
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<common-query ref="commonQueryRef" @search="search"></common-query>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" class="mt10">
|
||||
<table-tool :app="this" label="申请列表">
|
||||
</table-tool>
|
||||
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder" ref="table" row-key="id" style="width: 100%">
|
||||
<el-table-column :index="indexMethod" align="center" header-align="center"
|
||||
label="序号" type="index" width="80px"></el-table-column>
|
||||
<el-table-column :label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
:width="column.width"
|
||||
header-align="center"
|
||||
min-width="100px"
|
||||
show-overflow-tooltip
|
||||
v-for="column in tableColumns">
|
||||
<template scope="{row}" v-if="column.prop=='loginname'">
|
||||
<el-link @click="openView(row)" type="primary">{{row.loginname}}</el-link>
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop=='changeTypes'">
|
||||
<span style="color: #0e78c5;cursor: pointer" @click="openView(row)">
|
||||
{{getChangeTypes(row.changeTypes)}}
|
||||
</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="220">
|
||||
<template slot-scope="{row}">
|
||||
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
|
||||
<el-button v-if="row.applyStateId === 10010"
|
||||
@click="sublime.jumpPagePjax('/platform/member/change/apply?id=' + row.id)"
|
||||
size="mini" type="primary">编辑</el-button>
|
||||
<!-- <el-button v-if="row.applyStateId === 20" @click="doRevoke(row)" size="mini" type="warning">撤销</el-button>-->
|
||||
<el-button v-if="row.applyStateId === 10010" @click="doDelete(row)" size="mini" type="danger">删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<member-change-audit-info ref="memberChangeAuditInfoRef"></member-change-audit-info>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
<script>
|
||||
<!--#include("../common/commonQuery.js"){}#-->
|
||||
<!--#include("../common/memberChangeAuditInfo.js"){}#-->
|
||||
|
||||
new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data(){
|
||||
return{
|
||||
tableColumns: [
|
||||
{ prop: "loginname", label: "工号", sortable: true },
|
||||
{ prop: "username", label: "姓名", sortable: true },
|
||||
{ prop: "sex", label: "性别", sortable: true },
|
||||
{ prop: "userState", label: "在职状态", sortable: true },
|
||||
{ prop: "personType", label: "人员类型", sortable: true },
|
||||
{ prop: "unionName", label: "所属工会", sortable: true },
|
||||
{ prop: "unitName", label: "所属单位", sortable: true },
|
||||
{ prop: "changeTypes", label: "变更类型", sortable: true, width: 200 },
|
||||
{ prop: "applyDateTime", label: "申请时间", sortable: true },
|
||||
{ prop: "stateName", label: "当前节点", sortable: true }
|
||||
],
|
||||
changeTypeData: [],
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'common-query': COMMON_QUERY,
|
||||
'member-change-audit-info': MEMBER_CHANGE_AUDIT_INFO
|
||||
},
|
||||
methods: {
|
||||
openView(row){
|
||||
this.$refs.guava.view()
|
||||
this.$nextTick(() => {
|
||||
this.$refs.memberChangeAuditInfoRef.onOpen(row.id)
|
||||
})
|
||||
},
|
||||
async doRevoke(row){
|
||||
const confirm = await this.$confirm('确定要撤销该条申请吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
if (confirm === "confirm") {
|
||||
const resp = await $.post("/platform/member/change/mine/doRevoke", { id: row.id })
|
||||
if (resp.code === 0) {
|
||||
this.pageData()
|
||||
this.$message.success(resp.msg)
|
||||
} else {
|
||||
this.$message.error(resp.msg)
|
||||
}
|
||||
}
|
||||
},
|
||||
async doDelete(row){
|
||||
const confirm = await this.$confirm('确定要删除该条申请吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
if (confirm === "confirm") {
|
||||
const resp = await $.post("/platform/member/change/mine/doDelete", { id: row.id })
|
||||
if (resp.code === 0) {
|
||||
this.pageData()
|
||||
this.$message.success(resp.msg)
|
||||
} else {
|
||||
this.$message.error(resp.msg)
|
||||
}
|
||||
}
|
||||
},
|
||||
search(pageForm){
|
||||
if (pageForm) {
|
||||
this.pageForm = {...this.pageForm, ...pageForm}
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
getChangeTypes(changeTypes){
|
||||
const changeTypesList = JSON.parse(changeTypes)
|
||||
if (changeTypesList) {
|
||||
if (!changeTypesList || changeTypesList.length === 0 || !this.changeTypeData || this.changeTypeData.length === 0) return null
|
||||
return changeTypesList
|
||||
.map((v) => {
|
||||
return this.changeTypeData.find((item) => item.type === v).changeTypeName
|
||||
})
|
||||
.join(",")
|
||||
}
|
||||
return null
|
||||
}
|
||||
},
|
||||
async created(){
|
||||
this.pageData()
|
||||
this.changeTypeData = await getEnumOptions("MemberChangeType")
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,352 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
|
||||
<el-card shadow="never">
|
||||
<div class="search">
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">职工信息:</div>
|
||||
<div class="search-item-option">
|
||||
<el-input placeholder="请输入内容" clearable v-model="pageForm.searchKeyword"
|
||||
style="width: 100%"
|
||||
@keyup.enter.native="doSearch">
|
||||
<el-select v-model="pageForm.searchName" slot="prepend"
|
||||
placeholder="查询类型"
|
||||
style="width:80px;">
|
||||
<el-option label="姓名" value="u.username"></el-option>
|
||||
<el-option label="工号" value="u.loginname"></el-option>
|
||||
</el-select>
|
||||
</el-input>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">所属工会:</div>
|
||||
<div class="search-item-option">
|
||||
<el-select placeholder="所属工会" v-model="pageForm.unionId"
|
||||
style="width: 100%;"
|
||||
clearable
|
||||
@change="flushUnits" @clear="flushUnits"
|
||||
v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('SchoolUnionMemberAdmin')||@shiro.hasRole('H03')}"
|
||||
filterable>
|
||||
<el-option v-for="item in unions" :label="item.unionname"
|
||||
:value="item.id"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">所属单位:</div>
|
||||
<div class="search-item-option">
|
||||
<el-select placeholder="所属单位" v-model="pageForm.unitId"
|
||||
style="width: 100%;"
|
||||
@change="getThreeUnits"
|
||||
clearable
|
||||
filterable>
|
||||
<el-option v-for="item in units" :label="item.name"
|
||||
:value="item.id"></el-option>
|
||||
</el-select>
|
||||
</el-row>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">在职状态:</div>
|
||||
<div class="search-item-option">
|
||||
<dict-select v-model="pageForm.userStates"
|
||||
style="width: 100%"
|
||||
multiple
|
||||
clearable
|
||||
placeholder="在职状态"
|
||||
code="USER_STATE"></dict-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">人员类型:</div>
|
||||
<div class="search-item-option">
|
||||
<dict-select v-model="pageForm.personTypes"
|
||||
style="width: 100%"
|
||||
multiple
|
||||
clearable
|
||||
placeholder="人员类型"
|
||||
code="PERSON_TYPE"></dict-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">变更类型:</div>
|
||||
<div class="search-item-option">
|
||||
<enum-select v-model="pageForm.changeTypes"
|
||||
enum="MemberChangeType"
|
||||
label="changeTypeName"
|
||||
multiple
|
||||
value="value"
|
||||
style="width: 100%"
|
||||
clearable
|
||||
placeholder="变更类型"
|
||||
></enum-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">变更来源:</div>
|
||||
<div class="search-item-option">
|
||||
<enum-select enum="MemberChangeOrigin"
|
||||
v-model="pageForm.changeOrigins"
|
||||
multiple
|
||||
value="code"
|
||||
label="description"
|
||||
style="width: 100%" clearable
|
||||
placeholder="变更来源"></enum-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-query">
|
||||
<el-button type="primary" icon="el-icon-search" @click="doSearch">搜索
|
||||
</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" class="mt10">
|
||||
<table-tool label="变更列表" :app="this">
|
||||
</table-tool>
|
||||
<el-table :data="tableData" style="width: 100%" row-key="id"
|
||||
@sort-change="pageOrder"
|
||||
resizable
|
||||
v-loading="tableLoading" :size="tableSize" class="vi-table">
|
||||
<el-table-column align="center" header-align="center" type="index"
|
||||
:index="indexMethod" label="序号"
|
||||
width="80px"></el-table-column>
|
||||
<el-table-column
|
||||
align="center"
|
||||
header-align="center"
|
||||
v-for="column in tableColumns"
|
||||
show-overflow-tooltip
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
>
|
||||
<template v-if="column.prop=='loginname'" scope="{row}">
|
||||
<el-link type="primary" @click="openUserView(row)">{{row.loginname}}</el-link>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="异动信息" header-align="center">
|
||||
<el-table-column label="更新时间" prop="applyDateTime" min-width="145px"
|
||||
header-align="center"
|
||||
sortable
|
||||
align="center" show-overflow-tooltip>
|
||||
</el-table-column>
|
||||
<el-table-column label="异动类型" prop="changeTypes" header-align="center"
|
||||
width="150px"
|
||||
align="center" show-overflow-tooltip sortable>
|
||||
<template scope="{row}">
|
||||
<span style="color: #0e78c5;cursor: pointer" @click="openView(row)">
|
||||
{{ getChangeTypes(row.changeTypes) }}
|
||||
</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="审核状态">
|
||||
<template scope="{row}">
|
||||
<vi-table-state v-if="row.stateId" :state="row"></vi-table-state>
|
||||
<vi-table-state v-else :state="{stateColor:'#1890ff',stateName:'暂无'}"></vi-table-state>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="userOnline" align="center" header-align="center"
|
||||
label="操作"
|
||||
width="100px" fixed="right">
|
||||
<template scope="{row}">
|
||||
<el-button size="mini" type="primary" @click="openView(row.userId)">查看</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<member-change-audit-info ref="memberChangeAuditInfoRef"></member-change-audit-info>
|
||||
</template>
|
||||
|
||||
<template #edit>
|
||||
<member-info ref="memberInfoRef"></member-info>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
<!--#include("../../common/memberInfo.js"){}#-->
|
||||
<!--#include("../common/memberChangeAuditInfo.js"){}#-->
|
||||
|
||||
new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
active: 'info',
|
||||
submitLoading: false,
|
||||
formRules: {},
|
||||
info: {},
|
||||
userId: '',
|
||||
formData: {},
|
||||
pageForm: {
|
||||
searchName: "u.username",
|
||||
changeTypes: [],
|
||||
personTypes: [],
|
||||
changeOrigins: []
|
||||
},
|
||||
unions: [],
|
||||
units: [],
|
||||
|
||||
tableColumns: [
|
||||
{prop: 'loginname', label: '工号'},
|
||||
{prop: 'username', label: '姓名'},
|
||||
{prop: 'sex', label: '性别', sortable: true, width: '100px'},
|
||||
{prop: 'birthday', label: '出生年月', sortable: true},
|
||||
{prop: 'personType', label: '人员类型', sortable: true},
|
||||
{prop: 'userState', label: '在职状态', sortable: true},
|
||||
{prop: 'userUnionName', label: '所属工会', sortable: true},
|
||||
{prop: 'userUnitName', label: '所属单位', sortable: true},
|
||||
// {prop: 'type', label: '变更类型', sortable: true},
|
||||
// {prop: 'applyDate', label: '申请时间', sortable: true},
|
||||
// {prop: 'applyOrigin', label: '申请方式', sortable: true},
|
||||
// {prop: 'stateId', label: '状态', sortable: true}
|
||||
],
|
||||
isThreeUnit: false,
|
||||
|
||||
changeTypeData: [],
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'member-info': MEMBER_INFO,
|
||||
'member-change-audit-info': MEMBER_CHANGE_AUDIT_INFO,
|
||||
},
|
||||
methods: {
|
||||
openUserView(row){
|
||||
this.$refs.guava.edit()
|
||||
this.$nextTick(() => {
|
||||
this.$refs.memberInfoRef.onOpen(row.userId)
|
||||
})
|
||||
},
|
||||
openView(row){
|
||||
this.$refs.guava.view()
|
||||
this.$nextTick(() => {
|
||||
this.$refs.memberChangeAuditInfoRef.onOpen(row.id)
|
||||
})
|
||||
},
|
||||
getChangeTypes(changeTypes){
|
||||
const changeTypesList = JSON.parse(changeTypes)
|
||||
if (changeTypesList) {
|
||||
if (!changeTypesList || changeTypesList.length === 0 || !this.changeTypeData || this.changeTypeData.length === 0) return null
|
||||
return changeTypesList
|
||||
.map((v) => {
|
||||
return this.changeTypeData.find((item) => item.type === v).changeTypeName
|
||||
})
|
||||
.join(",")
|
||||
}
|
||||
return null
|
||||
},
|
||||
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", data)
|
||||
} else {
|
||||
this.notifyWarning(resp.msg)
|
||||
this.$set(row, "info", {})
|
||||
}
|
||||
},
|
||||
openChange(userId) {
|
||||
this.userId = userId
|
||||
this.$refs.guava.edit()
|
||||
},
|
||||
|
||||
async doSubmit(formData) {
|
||||
const resp = await $.post(loc() + "/change", formData)
|
||||
this.$refs.apply.closeLoading()
|
||||
if (resp.code === 0) {
|
||||
this.userId = ""
|
||||
this.$refs.guava.index()
|
||||
this.pageData()
|
||||
} else {
|
||||
this.notifyWarning(resp.msg)
|
||||
}
|
||||
},
|
||||
async flushUnits() {
|
||||
this.$set(this.pageForm, "unitId", null)
|
||||
this.$set(this.pageForm, "unionGroupId", null)
|
||||
this.$set(this.pageForm, "threeUnitId", null)
|
||||
this.units = []
|
||||
this.unionGroups = []
|
||||
this.threeUnits = []
|
||||
if (this.pageForm.unionId) {
|
||||
this.units = await getUnits(this.pageForm.unionId)
|
||||
this.unionGroups = await unionGroupsByUnionId(this.pageForm.unionId)
|
||||
}
|
||||
},
|
||||
|
||||
pageData() {
|
||||
sublime.showLoadingbar();
|
||||
this.tableLoading = true
|
||||
const pageForm = clone(this.pageForm)
|
||||
pageForm.userStates = JSON.stringify(pageForm.userStates)
|
||||
pageForm.personTypes = JSON.stringify(pageForm.personTypes)
|
||||
pageForm.changeTypes = JSON.stringify(pageForm.changeTypes)
|
||||
pageForm.changeOrigins = JSON.stringify(pageForm.changeOrigins)
|
||||
$.post(loc() + '/pageData', pageForm, (data) => {
|
||||
sublime.closeLoadingbar();
|
||||
this.tableLoading = false
|
||||
if (data.code === 0) {
|
||||
this.tableData = data.data.list;
|
||||
this.pageForm.totalCount = data.data.totalCount;
|
||||
} else {
|
||||
this.$message.error(data.msg);
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
|
||||
},
|
||||
async created() {
|
||||
this.isThreeUnit = await getConfigKey('isThreeUnit') === 'true'
|
||||
if (this.isThreeUnit) {
|
||||
this.tableColumns.forEach(v => {
|
||||
if (["threeUnitName", "unionGroupName"].includes(v.prop)) {
|
||||
v.checked = 1
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
this.pageData();
|
||||
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('SchoolUnionMemberAdmin')||@shiro.hasRole('H03')}" === 'true') {
|
||||
this.unions = await getUnions(null, false)
|
||||
} else {
|
||||
this.unions = await getUnions(null, true)
|
||||
this.$set(this.pageForm, 'unionId', this.unions ? this.unions[0].id : null)
|
||||
this.flushUnits()
|
||||
}
|
||||
|
||||
this.changeTypeData = await getEnumOptions("MemberChangeType")
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,235 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app">
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<el-card shadow="never">
|
||||
<common-query ref="commonQueryRef" @search="search"></common-query>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" class="mt10">
|
||||
<table-tool :app="this" label="审核列表">
|
||||
<template #func>
|
||||
<el-radio-group @change="search" class="mr5" size="small" v-model="pageForm.audit">
|
||||
<el-radio-button label="true">已审核</el-radio-button>
|
||||
<el-radio-button label="false">未审核</el-radio-button>
|
||||
</el-radio-group>
|
||||
</template>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder" ref="table" row-key="id" style="width: 100%">
|
||||
<el-table-column :index="indexMethod" align="center" header-align="center"
|
||||
label="序号" type="index" width="80px"></el-table-column>
|
||||
<el-table-column :label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
:width="column.width"
|
||||
header-align="center"
|
||||
min-width="100px"
|
||||
show-overflow-tooltip
|
||||
v-for="column in tableColumns">
|
||||
<template scope="{row}" v-if="column.prop=='loginname'">
|
||||
<el-link @click="openUserView(row)" type="primary">{{row.loginname}}</el-link>
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop=='changeTypes'">
|
||||
<span style="color: #0e78c5;cursor: pointer" @click="openView(row)">
|
||||
{{getChangeTypes(row.changeTypes)}}
|
||||
</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="220">
|
||||
<template slot-scope="{row}">
|
||||
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
|
||||
<el-button v-if="row.applyStateId === 10050" @click="openAudit(row)" size="mini" type="primary">审核</el-button>
|
||||
<el-button v-if="[10060].includes(row.applyStateId)" @click="doRevoke(row)" size="mini" type="danger">撤回</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<member-change-audit-info ref="memberChangeAuditInfoRef"></member-change-audit-info>
|
||||
<div v-if="showApprovalForm">
|
||||
<div class="process-title" style="margin: 20px 0">校工会审核</div>
|
||||
<el-form :model="formData" ref="approvalFormRef" label-position="left" label-width="80px">
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item label="审核人" prop="username" :rules="[{required:true,message:'必填',trigger:['change','blur']}]">
|
||||
<el-input v-model="formData.username" readonly></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="审核时间" prop="auditTime" :rules="[{required:true,message:'必填',trigger:['change','blur']}]">
|
||||
<el-input v-model="formData.auditTime" readonly></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="24">
|
||||
<el-form-item label="审核意见" prop="auditOpinion" :rules="[{required:true,message:'必填',trigger:['change','blur']}]">
|
||||
<el-input type="textarea" v-model="formData.auditOpinion" rows="4" maxlength="300"
|
||||
placeholder="请填写审核意见" show-word-limit></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="24">
|
||||
<el-form-item label="审核签字" prop="auditSign" :rules="[{required:true,message:'必填',trigger:['change','blur']}]">
|
||||
<sign :is_value_base64="false" :qz.sync="formData.auditSign" prefix="member_apply_audit" ref="sign"></sign>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
<el-row type="flex" justify="end">
|
||||
<el-button plain @click="$refs.guava.index()">取消</el-button>
|
||||
<el-button type="danger" @click="doApproval(2)">退回重新申请</el-button>
|
||||
<el-button type="danger" @click="doApproval(0)">拒绝申请</el-button>
|
||||
<el-button type="primary" @click="doApproval(1)">同意申请</el-button>
|
||||
</el-row>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<template #public>
|
||||
<member-info ref="memberInfoRef"></member-info>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
<script>
|
||||
<!--#include("../common/commonQuery.js"){}#-->
|
||||
<!--#include("../../common/memberInfo.js"){}#-->
|
||||
<!--#include("../common/memberChangeAuditInfo.js"){}#-->
|
||||
|
||||
new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data(){
|
||||
return{
|
||||
pageForm: {
|
||||
audit: false
|
||||
},
|
||||
tableColumns: [
|
||||
{ prop: "loginname", label: "工号", sortable: true },
|
||||
{ prop: "username", label: "姓名", sortable: true },
|
||||
{ prop: "sex", label: "性别", sortable: true },
|
||||
{ prop: "userState", label: "在职状态", sortable: true },
|
||||
{ prop: "personType", label: "人员类型", sortable: true },
|
||||
{ prop: "unionName", label: "所属工会", sortable: true },
|
||||
{ prop: "unitName", label: "所属单位", sortable: true },
|
||||
{ prop: "changeTypes", label: "变更类型", sortable: true, width: 200 },
|
||||
{ prop: "applyDateTime", label: "申请时间", sortable: true },
|
||||
{ prop: "stateName", label: "当前节点", sortable: true }
|
||||
],
|
||||
|
||||
id: '',
|
||||
showApprovalForm: false,
|
||||
|
||||
changeTypeData: [],
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'member-info': MEMBER_INFO,
|
||||
'common-query': COMMON_QUERY,
|
||||
'member-change-audit-info': MEMBER_CHANGE_AUDIT_INFO
|
||||
},
|
||||
methods: {
|
||||
openView(row){
|
||||
this.$refs.guava.view()
|
||||
this.$nextTick(() => {
|
||||
this.showApprovalForm = false
|
||||
this.$refs.memberChangeAuditInfoRef.onOpen(row.id)
|
||||
})
|
||||
},
|
||||
openUserView(row){
|
||||
this.$refs.guava.public()
|
||||
this.$nextTick(() => {
|
||||
this.$refs.memberInfoRef.onOpen(row.userId)
|
||||
})
|
||||
},
|
||||
openAudit(row){
|
||||
const user = JSON.parse(window.sessionStorage.getItem('user'))
|
||||
this.id = row.id
|
||||
this.formData.username = user.username
|
||||
this.formData.auditTime = moment().format('YYYY-MM-DD HH:mm:ss')
|
||||
this.$refs.guava.view()
|
||||
this.$nextTick(() => {
|
||||
this.showApprovalForm = true
|
||||
this.$refs.memberChangeAuditInfoRef.onOpen(row.id)
|
||||
})
|
||||
},
|
||||
doApproval(approvalType){
|
||||
let msg = '确定要通过此条申请吗?'
|
||||
if (approvalType === 0) {
|
||||
msg = '拒绝后不可撤回,确定要拒绝此条申请吗?'
|
||||
} else if (approvalType === 2) {
|
||||
msg = '确定要退回此条申请吗?'
|
||||
}
|
||||
this.$confirm(msg, '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(async () => {
|
||||
this.formData.auditType = approvalType
|
||||
this.$refs.approvalFormRef.validate(async (valid) => {
|
||||
if (valid) {
|
||||
const resp = await $.post('/platform/member/change/schoolUnion/audit/approval', {
|
||||
audit: JSON.stringify(this.formData),
|
||||
id: this.id
|
||||
})
|
||||
if (resp.code === 0) {
|
||||
this.$message.success(resp.msg)
|
||||
this.$refs.guava.index()
|
||||
this.showApprovalForm = false
|
||||
this.pageData()
|
||||
} else {
|
||||
this.$message.error(resp.msg)
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
doRevoke(row){
|
||||
this.$confirm('确定要撤回该申请吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(async () => {
|
||||
const resp = await $.post('/platform/member/change/schoolUnion/audit/doRevoke', {id: row.id})
|
||||
if (resp.code === 0) {
|
||||
this.$message.success(resp.msg)
|
||||
this.pageData()
|
||||
} else {
|
||||
this.$message.error(resp.msg)
|
||||
}
|
||||
})
|
||||
},
|
||||
search(pageForm){
|
||||
if (pageForm) {
|
||||
this.pageForm = {...this.pageForm, ...pageForm}
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
getChangeTypes(changeTypes){
|
||||
const changeTypesList = JSON.parse(changeTypes)
|
||||
if (changeTypesList) {
|
||||
if (!changeTypesList || changeTypesList.length === 0 || !this.changeTypeData || this.changeTypeData.length === 0) return null
|
||||
return changeTypesList
|
||||
.map((v) => {
|
||||
return this.changeTypeData.find((item) => item.type === v).changeTypeName
|
||||
})
|
||||
.join(",")
|
||||
}
|
||||
return null
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.pageData()
|
||||
this.changeTypeData = await getEnumOptions("MemberChangeType")
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,60 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app">
|
||||
<member-change ref="memberChange" :id="id" @do-save="doSave" @do-submit="doSubmit"
|
||||
@do-back="sublime.jumpPagePjax('/platform/member/change/mine')"></member-change>
|
||||
</div>
|
||||
<script>
|
||||
<!--#include("../common/memberChange.js"){}#-->
|
||||
|
||||
new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data(){
|
||||
return{
|
||||
id: GetQueryString('id')
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'member-change': MEMBER_CHANGE,
|
||||
},
|
||||
methods: {
|
||||
async doSave(formData){
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '数据保存中请稍后...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: 'rgba(0, 0, 0, 0.7)'
|
||||
});
|
||||
const resp = await $.post('/platform/member/change/apply/doSave', formData)
|
||||
loading.close()
|
||||
if (resp.code === 0) {
|
||||
this.$message.success(resp.msg)
|
||||
sublime.jumpPagePjax('/platform/member/change/mine')
|
||||
} else {
|
||||
this.$message.error(resp.msg)
|
||||
}
|
||||
},
|
||||
async doSubmit(formData){
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '数据保存中请稍后...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: 'rgba(0, 0, 0, 0.7)'
|
||||
});
|
||||
const resp = await $.post('/platform/member/change/apply/doSubmit', formData)
|
||||
loading.close()
|
||||
if (resp.code === 0) {
|
||||
this.$message.success(resp.msg)
|
||||
sublime.jumpPagePjax('/platform/member/change/mine')
|
||||
} else {
|
||||
this.$message.error(resp.msg)
|
||||
}
|
||||
},
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -92,7 +92,7 @@ layout("/layouts/platform.html"){
|
||||
multiple
|
||||
clearable
|
||||
placeholder="在职状态"
|
||||
code="userState"></dict-select>
|
||||
code="USER_STATE"></dict-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -104,7 +104,7 @@ layout("/layouts/platform.html"){
|
||||
multiple
|
||||
clearable
|
||||
placeholder="人员类型"
|
||||
code="UserType"></dict-select>
|
||||
code="PERSON_TYPE"></dict-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -0,0 +1,72 @@
|
||||
const MEMBER_INFO = {
|
||||
template: /*language=HTML*/ `
|
||||
<div>
|
||||
<div class="process-title">基础信息</div>
|
||||
<el-descriptions :column="3" border class="descriptions-form">
|
||||
<el-descriptions-item label="工号">{{ viewData.loginname }}</el-descriptions-item>
|
||||
<el-descriptions-item label="姓名">{{ viewData.username }}</el-descriptions-item>
|
||||
<el-descriptions-item label="性别">{{ viewData.sex }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="民族">{{ viewData.nation }}</el-descriptions-item>
|
||||
<el-descriptions-item label="出生日期">{{ moment(viewData.birthday).format("YYYY年MM月DD日") }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="政治面貌">{{ viewData.political }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="学历">{{ viewData.education }}</el-descriptions-item>
|
||||
<el-descriptions-item label="学位">{{ viewData.academicDegree }}</el-descriptions-item>
|
||||
<el-descriptions-item label="党政职务">{{ viewData.position }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="工作单位">{{ viewData.unitname }}</el-descriptions-item>
|
||||
<el-descriptions-item label="所属工会">{{ viewData.unionname }}</el-descriptions-item>
|
||||
<el-descriptions-item label="所属校区">{{ viewData.campus }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="身份证号码">{{ viewData.idCard }}</el-descriptions-item>
|
||||
<el-descriptions-item label="联系电话">{{ viewData.mobile }}</el-descriptions-item>
|
||||
<el-descriptions-item label="电子邮箱">{{ viewData.email }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="在职状态">{{ viewData.userState }}</el-descriptions-item>
|
||||
<el-descriptions-item label="人员类型">{{ viewData.personType }}</el-descriptions-item>
|
||||
<el-descriptions-item label="人员性质">{{ viewData.preparedBy || '暂无' }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="会员状态">{{ viewData.member ? '会员' : '非会员' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="福利会员状态">{{ viewData.welfareMember ? '福利会员' : '非福利会员' }}</el-descriptions-item>
|
||||
<el-descriptions-item></el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="家庭主要成员" :span="3">
|
||||
<el-table v-if="viewData.families&&viewData.families.length"
|
||||
:data="viewData.families" 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-empty v-else :image-size="50" description="暂无家庭成员信息"></el-empty>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="个人简况" :span="3">
|
||||
<template slot="label">个人简况</template>
|
||||
<div v-if="viewData.vita" class="text-left" v-html="viewData.vita"></div>
|
||||
<span v-else>无数据</span>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</div>
|
||||
`,
|
||||
data() {
|
||||
return {
|
||||
viewData: {}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async onOpen(userId) {
|
||||
const resp = await $.post("/platform/member/common/fetchMemberUserById", {userId})
|
||||
if (resp.code === 0) {
|
||||
this.viewData = resp.data
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -100,7 +100,7 @@ layout("/layouts/platform.html"){
|
||||
<dict-select v-model="pageForm.personType" style="width: 100%"
|
||||
clearable
|
||||
placeholder="人员类型"
|
||||
code="UserType"></dict-select>
|
||||
code="PERSON_TYPE"></dict-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -110,7 +110,7 @@ layout("/layouts/platform.html"){
|
||||
<dict-select v-model="pageForm.userState" style="width: 100%"
|
||||
clearable
|
||||
placeholder="在职状态"
|
||||
code="UserState"></dict-select>
|
||||
code="USER_STATE"></dict-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -490,8 +490,8 @@ layout("/layouts/platform.html"){
|
||||
this.$set(this.pageForm, 'unionId', this.unions ? this.unions[0].id : null)
|
||||
this.flushUnits()
|
||||
}
|
||||
this.personTypeOptions = await getDictOptions("UserType")
|
||||
this.userStateOptions = await getDictOptions("UserState")
|
||||
this.personTypeOptions = await getDictOptions("PERSON_TYPE")
|
||||
this.userStateOptions = await getDictOptions("USER_STATE")
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
@@ -103,7 +103,7 @@ layout("/layouts/platform.html"){
|
||||
<dict-select v-model="pageForm.personType" style="width: 100%"
|
||||
clearable
|
||||
placeholder="人员类型"
|
||||
code="UserType"></dict-select>
|
||||
code="PERSON_TYPE"></dict-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -113,7 +113,7 @@ layout("/layouts/platform.html"){
|
||||
<dict-select v-model="pageForm.userState" style="width: 100%"
|
||||
clearable
|
||||
placeholder="在职状态"
|
||||
code="UserState"></dict-select>
|
||||
code="USER_STATE"></dict-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -112,7 +112,7 @@ layout("/layouts/platform.html"){
|
||||
<dict-select v-model="pageForm.personType" style="width: 100%"
|
||||
clearable
|
||||
placeholder="人员类型"
|
||||
code="UserType"></dict-select>
|
||||
code="PERSON_TYPE"></dict-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -122,7 +122,7 @@ layout("/layouts/platform.html"){
|
||||
<dict-select v-model="pageForm.userState" style="width: 100%"
|
||||
clearable
|
||||
placeholder="在职状态"
|
||||
code="UserState"></dict-select>
|
||||
code="USER_STATE"></dict-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -132,7 +132,7 @@ layout("/layouts/platform.html"){
|
||||
<dict-select v-model="pageForm.userState" style="width: 100%"
|
||||
clearable
|
||||
placeholder="在职状态"
|
||||
code="UserState"></dict-select>
|
||||
code="USER_STATE"></dict-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -535,8 +535,8 @@ layout("/layouts/platform.html"){
|
||||
}
|
||||
|
||||
this.pageData();
|
||||
this.personTypeOptions = await getDictOptions("UserType")
|
||||
this.userStateOptions = await getDictOptions("UserState")
|
||||
this.personTypeOptions = await getDictOptions("PERSON_TYPE")
|
||||
this.userStateOptions = await getDictOptions("USER_STATE")
|
||||
this.preparedByOptions = await getDictOptions("PREPARED_BY")
|
||||
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('SchoolUnionMemberAdmin')||@shiro.hasRole('H03')}" === 'true') {
|
||||
this.unions = await getUnions(null, false)
|
||||
|
||||
@@ -119,7 +119,7 @@ layout("/layouts/platform.html"){
|
||||
<dict-select v-model="pageForm.personType" style="width: 100%"
|
||||
clearable
|
||||
placeholder="人员类型"
|
||||
code="UserType"></dict-select>
|
||||
code="PERSON_TYPE"></dict-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -129,7 +129,7 @@ layout("/layouts/platform.html"){
|
||||
<dict-select v-model="pageForm.userState" style="width: 100%"
|
||||
clearable
|
||||
placeholder="在职状态"
|
||||
code="UserState"></dict-select>
|
||||
code="USER_STATE"></dict-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -60,28 +60,24 @@ layout("/layouts/platform.html"){
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<el-row type="flex" align="middle" class="query-row">
|
||||
<el-col class="query-row-title">年  度:</el-col>
|
||||
<el-col class="query-row-content">
|
||||
<el-row>
|
||||
<el-col :span="8">
|
||||
<el-col :span="12">
|
||||
<span>所属年度:</span>
|
||||
<el-date-picker @change="doSearch()"
|
||||
style="width: 200px"
|
||||
style="margin-left: 33px;width: 80%"
|
||||
:picker-options="pickerOptions"
|
||||
v-model="pageForm.year"
|
||||
type="year"
|
||||
value-format="yyyy"
|
||||
placeholder="选择年" :clearable="false">
|
||||
</el-date-picker>
|
||||
<el-link type="primary" style="margin-left: 10px"
|
||||
:underline="false"
|
||||
@click="pageForm.year=moment().format('YYYY');doSearch()">
|
||||
本年
|
||||
</el-link>
|
||||
</el-col>
|
||||
<el-col :span="16">
|
||||
<el-col :span="12">
|
||||
<span>姓名工号:</span>
|
||||
<el-input placeholder="请输入内容" clearable
|
||||
v-model="pageForm.searchKeyword"
|
||||
style="width: 600px"
|
||||
style="margin-left: 33px;width: 80%"
|
||||
@keyup.enter.native="doSearch">
|
||||
<el-select v-model="pageForm.searchName" slot="prepend"
|
||||
placeholder="查询类型"
|
||||
@@ -95,9 +91,8 @@ layout("/layouts/platform.html"){
|
||||
</el-row>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never">
|
||||
|
||||
<el-row type="flex" align="middle" class="query-row">
|
||||
<el-col class="query-row-content">
|
||||
<el-row>
|
||||
@@ -901,8 +896,8 @@ layout("/layouts/platform.html"){
|
||||
this.$set(this.pageForm, 'unionId', this.unions ? this.unions[0].id : null)
|
||||
this.flushUnits()
|
||||
}
|
||||
this.personTypeOptions = await getDictOptions("UserType")
|
||||
this.userStateOptions = await getDictOptions("UserState")
|
||||
this.personTypeOptions = await getDictOptions("PERSON_TYPE")
|
||||
this.userStateOptions = await getDictOptions("USER_STATE")
|
||||
this.preparedByOptions = await getDictOptions("PREPARED_BY")
|
||||
this.memberStatusOptions = await getDictOptions("memberStatusText")
|
||||
await this.getMenuOptions();
|
||||
|
||||
@@ -285,7 +285,7 @@ layout("/layouts/platform.html"){
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.personTypeOptions = await getDictOptions("UserType")
|
||||
this.personTypeOptions = await getDictOptions("PERSON_TYPE")
|
||||
this.unions = await getUnions(null)
|
||||
this.units = await getUnits(null)
|
||||
this.pageData();
|
||||
@@ -296,4 +296,4 @@ layout("/layouts/platform.html"){
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
#-->
|
||||
|
||||
@@ -162,7 +162,7 @@ layout("/layouts/platform.html"){
|
||||
this.getData()
|
||||
},
|
||||
async getUserTypes() {
|
||||
const data = await getDictOptions("UserType")
|
||||
const data = await getDictOptions("PERSON_TYPE")
|
||||
this.userTypeNames = data.map(v => v.name)
|
||||
}
|
||||
},
|
||||
@@ -182,4 +182,4 @@ layout("/layouts/platform.html"){
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
#-->
|
||||
|
||||
@@ -114,7 +114,7 @@ layout("/layouts/platform.html"){
|
||||
<div class="search-item-option">
|
||||
<dict-select v-model="pageForm.personType" style="width: 100%" clearable
|
||||
placeholder="人员类型"
|
||||
code="UserType"></dict-select>
|
||||
code="PERSON_TYPE"></dict-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -123,7 +123,7 @@ layout("/layouts/platform.html"){
|
||||
<div class="search-item-option">
|
||||
<dict-select v-model="pageForm.userState" style="width: 100%" clearable
|
||||
placeholder="在职状态"
|
||||
code="UserState"></dict-select>
|
||||
code="USER_STATE"></dict-select>
|
||||
</div>
|
||||
</div>-->
|
||||
<div class="search-item">
|
||||
@@ -638,8 +638,8 @@ layout("/layouts/platform.html"){
|
||||
this.$set(this.pageForm, 'unionId', this.unions ? this.unions[0].id : null)
|
||||
this.flushUnits()
|
||||
}
|
||||
this.personTypeOptions = await getDictOptions("UserType")
|
||||
this.userStateOptions = await getDictOptions("UserState")
|
||||
this.personTypeOptions = await getDictOptions("PERSON_TYPE")
|
||||
this.userStateOptions = await getDictOptions("USER_STATE")
|
||||
},
|
||||
components: {
|
||||
'guava': httpVueLoader('/components/plugins/Guava.vue'),
|
||||
|
||||
@@ -187,7 +187,7 @@ layout("/layouts/platform.html"){
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.personTypeOptions = await getDictOptions("UserType")
|
||||
this.personTypeOptions = await getDictOptions("PERSON_TYPE")
|
||||
this.unions = await getUnions(null)
|
||||
this.units = await getUnits(null)
|
||||
this.pageData();
|
||||
|
||||
@@ -0,0 +1,77 @@
|
||||
const COMPONENT_FRAME = {
|
||||
template: /*language=html*/ `
|
||||
<div>
|
||||
{{ siftValue }}
|
||||
<el-input v-if="componentType === 'input'"
|
||||
v-model="siftValue"
|
||||
placeholder="请输入内容"
|
||||
></el-input>
|
||||
|
||||
<el-select v-else-if="componentType === 'select'"
|
||||
v-model="siftValue"
|
||||
multiple
|
||||
style="width: 100%"
|
||||
placeholder="请选择内容">
|
||||
<el-option
|
||||
v-for="item in selectOptions"
|
||||
:key="item.code"
|
||||
:label="item.name"
|
||||
:value="item.code"
|
||||
></el-option>
|
||||
</el-select>
|
||||
|
||||
<el-select v-else-if="componentType === 'remote'"
|
||||
v-model="siftValue"
|
||||
reserve-keyword remote
|
||||
multiple filterable
|
||||
placeholder="请输入工号或姓名进行查询"
|
||||
:remote-method="handleRemoteSearch"
|
||||
:loading="loading" style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in remoteOptions"
|
||||
:key="item.id"
|
||||
:label="item.username + '(' + item.loginname + ')' + item.unionname + '-' + item.unitname"
|
||||
:value="item.id"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
`,
|
||||
props: {
|
||||
componentType: { type: String, default: '' },
|
||||
siftValue: { type: [String, Array], default: () => [] },
|
||||
selectOptions: { type: Array, default: () => [] },
|
||||
remoteOptions: { type: Array, default: () => [] }
|
||||
},
|
||||
data(){
|
||||
return{
|
||||
loading: false
|
||||
}
|
||||
},
|
||||
methods:{
|
||||
handleRemoteSearch(query) {
|
||||
// 模拟远程搜索逻辑
|
||||
this.loading = true;
|
||||
$.post('/platform/sourcechange/config/getRemoteSearchUser', {query})
|
||||
.then(resp => {
|
||||
this.loading = false;
|
||||
if (resp.code === 0) {
|
||||
this.remoteOptions = resp.data.list
|
||||
}
|
||||
})
|
||||
},
|
||||
},
|
||||
watch: {
|
||||
siftValue(newVal) {
|
||||
this.$emit('input', newVal);
|
||||
}
|
||||
},
|
||||
computed:{
|
||||
valueAsString(){
|
||||
if(Array.isArray(this.value)){
|
||||
return this.value
|
||||
}else{
|
||||
return this.value ? this.value.toString() : ''
|
||||
}
|
||||
}
|
||||
},
|
||||
}
|
||||
@@ -0,0 +1,247 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app">
|
||||
<el-card shadow="never">
|
||||
<div class="process-title">更新配置</div>
|
||||
<el-form :model="formData" ref="formRef" label-width="0" :rules="formRules" size="small">
|
||||
<el-descriptions :column="3" border class="descriptions-form">
|
||||
<el-descriptions-item label="更新模式" :span="3">
|
||||
<el-form-item prop="sourceChangeType">
|
||||
<el-radio-group v-model="formData.sourceChangeType" size="small">
|
||||
<el-radio border label="automatic">自动更新</el-radio>
|
||||
<el-radio border label="artificial">人工变更</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="会员标签配置" :span="3">
|
||||
<el-form-item prop="memberSiftList">
|
||||
<el-table :data="formData.memberSiftList" border size="small">
|
||||
<el-table-column label="选项名称" prop="siftName">
|
||||
<template slot-scope="{row}">
|
||||
<el-select v-model="row.siftName" placeholder="请选择"
|
||||
@change="changeComponentFrame(row)" style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in memberSiftOptions"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.code">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="配置值" prop="siftValue">
|
||||
<template slot-scope="{row}">
|
||||
<component-frame
|
||||
:component-type="row.componentType"
|
||||
v-model="row.siftValue"
|
||||
:select-options="row.selectOptions"
|
||||
:remote-options="row.remoteOptions"
|
||||
></component-frame>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column width="100px">
|
||||
<template slot="header" slot-scope="scope">
|
||||
<el-button type="primary" size="mini"
|
||||
@click="formData.memberSiftList.push({})">添加
|
||||
</el-button>
|
||||
</template>
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
type="danger"
|
||||
icon="el-icon-delete"
|
||||
size="mini"
|
||||
:disabled="formData.memberSiftList.length===0"
|
||||
@click="formData.memberSiftList.splice(scope.$index,1)"
|
||||
></el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="新进职工是否加入会员组别" :span="1.5">
|
||||
<el-form-item prop="isJoinMemberActivityScope">
|
||||
<el-radio-group v-model="formData.isJoinMemberActivityScope" size="small">
|
||||
<el-radio border label="true">是</el-radio>
|
||||
<el-radio border label="false">否</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="非会员是否剔除会员组别" :span="1.5">
|
||||
<el-form-item prop="isDeleteMemberActivityScope">
|
||||
<el-radio-group v-model="formData.isDeleteMemberActivityScope" size="small">
|
||||
<el-radio border label="true">是</el-radio>
|
||||
<el-radio border label="false">否</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="福利会员标签配置" :span="3">
|
||||
<el-form-item prop="welfareMemberSiftList">
|
||||
<el-table :data="formData.welfareMemberSiftList" border size="small">
|
||||
<el-table-column label="选项名称" prop="siftName">
|
||||
<template slot-scope="{row}">
|
||||
<el-select v-model="row.siftName" placeholder="请选择"
|
||||
@change="changeComponentFrame(row)" style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in welfareMemberSiftOptions"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.code">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="配置值" prop="siftValue">
|
||||
<template slot-scope="{row}">
|
||||
<component-frame
|
||||
:component-type="row.componentType"
|
||||
v-model="row.siftValue"
|
||||
:select-options="row.selectOptions"
|
||||
:remote-options="row.remoteOptions"
|
||||
></component-frame>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column width="100px">
|
||||
<template slot="header" slot-scope="scope">
|
||||
<el-button type="primary" size="mini"
|
||||
@click="formData.welfareMemberSiftList.push({})">添加
|
||||
</el-button>
|
||||
</template>
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
type="danger"
|
||||
icon="el-icon-delete"
|
||||
size="mini"
|
||||
:disabled="formData.welfareMemberSiftList.length===0"
|
||||
@click="formData.welfareMemberSiftList.splice(scope.$index,1)"
|
||||
></el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="新进职工是否加入进行中福利" :span="1.5">
|
||||
<el-form-item prop="isJoinWelfareProject">
|
||||
<el-radio-group v-model="formData.isJoinWelfareProject" size="small">
|
||||
<el-radio border label="true">是</el-radio>
|
||||
<el-radio border label="false">否</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-form>
|
||||
<el-row type="flex" justify="end">
|
||||
<el-button type="primary" @click="doSubmit">提交</el-button>
|
||||
</el-row>
|
||||
</el-card>
|
||||
</div>
|
||||
<script>
|
||||
<!--#include("componentFrame.js"){}#-->
|
||||
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return{
|
||||
formData: {
|
||||
sourceChangeType: '',
|
||||
memberSiftList: [],
|
||||
welfareMemberSiftList: []
|
||||
},
|
||||
formRules: {
|
||||
updateMode: [
|
||||
{ required: true, message: '请选择更新模式', trigger: 'change' }
|
||||
],
|
||||
memberSiftList: [
|
||||
{ required: true, message: '请选择会员标签', trigger: 'change' }
|
||||
],
|
||||
welfareMemberSiftList: [
|
||||
{ required: true, message: '请选择福利会员标签', trigger: 'change' }
|
||||
]
|
||||
},
|
||||
|
||||
memberSiftOptions: [],
|
||||
welfareMemberSiftOptions: []
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'component-frame': COMPONENT_FRAME
|
||||
},
|
||||
methods: {
|
||||
doSubmit() {
|
||||
this.$confirm('确定要提交吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(async () => {
|
||||
const resp = await $.post('/platform/sourcechange/config/doAddOrModify', {
|
||||
data: JSON.stringify(this.formData)
|
||||
})
|
||||
if (resp.code === 0) {
|
||||
this.$message.success(resp.msg)
|
||||
} else {
|
||||
this.$message.warning(resp.msg)
|
||||
}
|
||||
})
|
||||
},
|
||||
async changeComponentFrame(row){
|
||||
const item = this.memberSiftOptions.find(item => item.code === row.siftName)
|
||||
switch (item.remark) {
|
||||
case 'text':
|
||||
row.siftValue = "";
|
||||
row.componentType = 'input';
|
||||
break;
|
||||
case 'select':
|
||||
row.componentType = 'select'
|
||||
row.siftValue = []
|
||||
switch (item.code) {
|
||||
case 'userState':
|
||||
row.selectOptions = await getDictOptions("USER_STATE")
|
||||
break;
|
||||
case 'personType':
|
||||
row.selectOptions = await getDictOptions("PERSON_TYPE")
|
||||
break;
|
||||
case 'retireTime':
|
||||
row.selectOptions = [
|
||||
{ name: '保留至上半年、下半年', code: 'halfYear' },
|
||||
{ name: '保留全年', code: 'annualYear' }
|
||||
];
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 'remote':
|
||||
row.componentType = 'remote';
|
||||
row.siftValue = []
|
||||
break;
|
||||
default:
|
||||
row.componentType = '';
|
||||
row.selectOptions = [];
|
||||
row.remoteOptions = [];
|
||||
}
|
||||
},
|
||||
async getSourceChangeConfig(){
|
||||
const resp = await $.get('/platform/sourcechange/config/getSourceChangeConfig')
|
||||
if (resp.code === 0) {
|
||||
this.formData = resp.data
|
||||
}
|
||||
}
|
||||
},
|
||||
async created(){
|
||||
this.memberSiftOptions = await getDictOptions("MEMBER_LABEL")
|
||||
this.welfareMemberSiftOptions = await getDictOptions("WELFARE_MEMBER_LABEL")
|
||||
await this.getSourceChangeConfig()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,148 @@
|
||||
const COMMON_QUERY = {
|
||||
template: /*language=HTML*/ `
|
||||
<div class="search">
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">姓名/工号</div>
|
||||
<div class="search-item-option">
|
||||
<el-input placeholder="请输入姓名或工号查询" clearable v-model="pageForm.searchKeyword"></el-input>
|
||||
</div>
|
||||
</div>
|
||||
<template v-if="$auth.hasRoleOr('sysadmin, SchoolUnionMemberAdmin, BranchUnionMemberAdmin')">
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">所属工会</div>
|
||||
<div class="search-item-option">
|
||||
<el-select @change="flushUnits" @clear="flushUnits" clearable filterable
|
||||
placeholder="请选择所属工会" style="width: 100%;" v-model="pageForm.unionId">
|
||||
<el-option :key="item.id" :label="item.unionname" :value="item.id"
|
||||
v-for="item in unions"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">所属单位</div>
|
||||
<div class="search-item-option">
|
||||
<el-select clearable filterable placeholder="请选择所属单位" style="width: 100%"
|
||||
v-model="pageForm.unitId">
|
||||
<el-option :key="item.id" :label="item.name" :value="item.id"
|
||||
v-for="item in units"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">在职状态</div>
|
||||
<div class="search-item-option">
|
||||
<dict-select v-model="pageForm.userState" style="width: 100%" placeholder="在职状态" @change="doSearch"
|
||||
code="USER_STATE"></dict-select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">人员类型</div>
|
||||
<div class="search-item-option">
|
||||
<dict-select v-model="pageForm.personType" style="width: 100%" placeholder="人员类型" @change="doSearch"
|
||||
code="PERSON_TYPE"></dict-select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">人员类型</div>
|
||||
<div class="search-item-option">
|
||||
<dict-select v-model="pageForm.personType" style="width: 100%" placeholder="人员类型" @change="doSearch"
|
||||
code="PERSON_TYPE"></dict-select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">变更日期</div>
|
||||
<div class="search-item-option">
|
||||
<el-date-picker :picker-options="pickerOptions" @change="changeDateRangeChange"
|
||||
align="right" end-placeholder="结束日期" format="yyyy-MM-dd"
|
||||
range-separator="-" start-placeholder="开始日期" style="width: 100%"
|
||||
type="datetimerange" v-model="pageForm.changeDateRange"
|
||||
value-format="yyyy-MM-dd"></el-date-picker>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<div class="search-query">
|
||||
<el-button type="primary" icon="el-icon-search" @click="doSearch">搜索</el-button>
|
||||
</div>
|
||||
</div>
|
||||
`,
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return{
|
||||
pickerOptions: {
|
||||
shortcuts: [
|
||||
{
|
||||
text: "最近一周",
|
||||
onClick(picker) {
|
||||
const end = new Date()
|
||||
const start = new Date()
|
||||
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7)
|
||||
picker.$emit("pick", [start, end])
|
||||
}
|
||||
},
|
||||
{
|
||||
text: "最近一个月",
|
||||
onClick(picker) {
|
||||
const end = new Date()
|
||||
const start = new Date()
|
||||
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30)
|
||||
picker.$emit("pick", [start, end])
|
||||
}
|
||||
},
|
||||
{
|
||||
text: "最近三个月",
|
||||
onClick(picker) {
|
||||
const end = new Date()
|
||||
const start = new Date()
|
||||
start.setTime(start.getTime() - 3600 * 1000 * 24 * 90)
|
||||
picker.$emit("pick", [start, end])
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
unions: [],
|
||||
units: [],
|
||||
pageForm: {
|
||||
searchKeyword: '',
|
||||
unionId: '',
|
||||
unitId: '',
|
||||
userState: '',
|
||||
personType: ''
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
changeDateRangeChange(val){
|
||||
if (val && val.length > 0) {
|
||||
this.pageForm.changeDateBefore = val[0]
|
||||
this.pageForm.changeDateEnd = val[1]
|
||||
} else {
|
||||
this.pageForm.changeDateBefore = null
|
||||
this.pageForm.changeDateEnd = null
|
||||
}
|
||||
this.doSearch()
|
||||
},
|
||||
doSearch(){
|
||||
this.$emit('search', this.pageForm)
|
||||
},
|
||||
async initData(){
|
||||
if (this.$auth.hasRoleOr('sysadmin, SchoolUnionMemberAdmin, SchoolUnionAdmin')) {
|
||||
this.unions = await getUnions(this.pageForm.unionId)
|
||||
this.units = await getUnits()
|
||||
} else {
|
||||
const user = JSON.parse(window.sessionStorage.getItem('user'))
|
||||
this.unions = await getUnions(user.union.id)
|
||||
this.units = await getUnits(user.union.id)
|
||||
}
|
||||
},
|
||||
async flushUnits(){
|
||||
this.$set(this.pageForm, "unitId", null)
|
||||
this.units = []
|
||||
if (this.pageForm.unionId) {
|
||||
this.units = await getUnits(this.pageForm.unionId)
|
||||
}
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.initData()
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,231 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.query-row {
|
||||
height: 55px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.query-row:not(:last-child) {
|
||||
border-bottom: 1px dashed rgb(230, 230, 230);
|
||||
}
|
||||
|
||||
.query-row-title {
|
||||
width: 120px;
|
||||
}
|
||||
</style>
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<common-query ref="commonQueryRef" @search="search"></common-query>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" class="mt10">
|
||||
<el-row type="flex" align="middle" class="query-row">
|
||||
<el-col class="query-row-title">异动类型:</el-col>
|
||||
<el-col class="query-row-content">
|
||||
<el-tag
|
||||
style="margin-right: 10px;cursor: pointer"
|
||||
v-for="item in changeTypeData"
|
||||
:key="item.code"
|
||||
:type="item.name"
|
||||
:effect="pageForm.changeTypes.includes(item.type)?'dark':'plain'"
|
||||
@click="tagClick('changeTypes',item.type)">
|
||||
{{ item.changeTypeName }}
|
||||
</el-tag>
|
||||
<el-link type="danger"
|
||||
v-if="changeTypeData.length && pageForm.changeTypes.length"
|
||||
:underline="false"
|
||||
@click="pageForm.changeTypes=[];doSearch()">清空
|
||||
</el-link>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" class="mt10">
|
||||
<table-tool :app="this" label="变更记录(默认查询当天变更记录,如需查询更多变更记录,请选择上方【变更日期】后进行搜索)">
|
||||
<template #func>
|
||||
<el-radio-group @change="search" class="mr5" size="small" v-model="pageForm.isOperate">
|
||||
<el-radio-button label="true">已操作</el-radio-button>
|
||||
<el-radio-button label="false">未操作</el-radio-button>
|
||||
</el-radio-group>
|
||||
</template>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder" ref="table" row-key="id" style="width: 100%">
|
||||
<el-table-column :index="indexMethod"
|
||||
header-align="center"
|
||||
label="序号" type="index" width="80px"></el-table-column>
|
||||
<el-table-column :label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
:width="column.width"
|
||||
header-align="center"
|
||||
min-width="100px"
|
||||
show-overflow-tooltip
|
||||
v-for="column in tableColumns">
|
||||
<template scope="{row}" v-if="column.prop == 'loginname'">
|
||||
<el-link @click="openView(row)" type="primary">{{row.loginname}}</el-link>
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop == 'changeTypes'">
|
||||
<span style="color: #0e78c5;cursor: pointer" @click="openChangeInfo(row, true)">
|
||||
{{getChangeTypes(row.changeTypes)}}
|
||||
</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="180px">
|
||||
<template slot-scope="{row}">
|
||||
<el-button @click="openChangeInfo(row, true)" size="mini" type="primary">查看</el-button>
|
||||
<el-button v-if="!row.isOperate" @click="openChangeInfo(row, false)" size="mini" type="primary">变更</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<user-change-info ref="userChangeInfoRef" :is-view="isView" @do-back="$refs.guava.index()" @do-submit="doSubmit"></user-change-info>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
<script>
|
||||
<!--#include("commonQuery.js"){}#-->
|
||||
<!--#include("userChangeInfo.js"){}#-->
|
||||
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return{
|
||||
pickerOptions: {
|
||||
shortcuts: [
|
||||
{
|
||||
text: "最近一周",
|
||||
onClick(picker) {
|
||||
const end = new Date()
|
||||
const start = new Date()
|
||||
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7)
|
||||
picker.$emit("pick", [start, end])
|
||||
}
|
||||
},
|
||||
{
|
||||
text: "最近一个月",
|
||||
onClick(picker) {
|
||||
const end = new Date()
|
||||
const start = new Date()
|
||||
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30)
|
||||
picker.$emit("pick", [start, end])
|
||||
}
|
||||
},
|
||||
{
|
||||
text: "最近三个月",
|
||||
onClick(picker) {
|
||||
const end = new Date()
|
||||
const start = new Date()
|
||||
start.setTime(start.getTime() - 3600 * 1000 * 24 * 90)
|
||||
picker.$emit("pick", [start, end])
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
pageForm: {
|
||||
searchKeyword: "",
|
||||
unionId: "",
|
||||
unitId: "",
|
||||
userState: "",
|
||||
preparedBy: "",
|
||||
personType: "",
|
||||
changeTypes: [],
|
||||
isOperate: false
|
||||
},
|
||||
tableColumns: [
|
||||
{ prop: "loginname", label: "工号", sortable: true },
|
||||
{ prop: "username", label: "姓名", sortable: true },
|
||||
{ prop: "sex", label: "性别", sortable: true, width: "100px" },
|
||||
{ prop: "userState", label: "在职状态", sortable: true },
|
||||
{ prop: "personType", label: "人员类型", sortable: true },
|
||||
{ prop: "unionname", label: "所属工会", sortable: true },
|
||||
{ prop: "unitname", label: "所属单位", sortable: true },
|
||||
{ prop: "changeTypes", label: "变更类型", sortable: true, width: "160px" },
|
||||
{ prop: "changeTime", label: "变更时间", sortable: true },
|
||||
],
|
||||
unions: [],
|
||||
units: [],
|
||||
isView: true,
|
||||
|
||||
changeTypeData: []
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'common-query': COMMON_QUERY,
|
||||
'user-change-info': USER_CHANGE_INFO
|
||||
},
|
||||
methods: {
|
||||
async doSubmit(formData){
|
||||
const resp = await $.post('/platform/sourcechange/manage/doSubmit', formData)
|
||||
if (resp.code === 0) {
|
||||
this.$message.success(resp.msg)
|
||||
this.$refs.guava.index()
|
||||
await this.pageData()
|
||||
} else {
|
||||
this.$message.warning(resp.msg)
|
||||
}
|
||||
},
|
||||
openChangeInfo(row, flag) {
|
||||
this.isView = flag
|
||||
this.$refs.guava.view()
|
||||
this.$nextTick(() => {
|
||||
this.$refs.userChangeInfoRef.onOpen(row.id)
|
||||
})
|
||||
},
|
||||
tagClick(key, val) {
|
||||
let idx = this.pageForm[key].indexOf(val)
|
||||
if (idx !== -1) {
|
||||
this.pageForm[key].splice(idx, 1)
|
||||
} else {
|
||||
this.pageForm[key].push(val)
|
||||
}
|
||||
this.pageData()
|
||||
},
|
||||
search(pageForm){
|
||||
this.pageForm = { ...this.pageForm, ...pageForm }
|
||||
this.pageData()
|
||||
},
|
||||
getChangeTypes(changeTypes){
|
||||
const changeTypesList = JSON.parse(changeTypes)
|
||||
if (changeTypesList) {
|
||||
if (!changeTypesList || changeTypesList.length === 0 || !this.changeTypeData || this.changeTypeData.length === 0) return null
|
||||
return changeTypesList
|
||||
.map((v) => {
|
||||
return this.changeTypeData.find((item) => item.type === v).changeTypeName
|
||||
})
|
||||
.join(",")
|
||||
}
|
||||
return null
|
||||
},
|
||||
async pageData() {
|
||||
const pageForm = clone(this.pageForm)
|
||||
pageForm.changeTypes = JSON.stringify(this.pageForm.changeTypes)
|
||||
const resp = await $.post('/platform/sourcechange/manage/pageData', pageForm)
|
||||
if (resp.code === 0) {
|
||||
this.tableData = resp.data.list
|
||||
this.pageForm.totalCount = resp.data.totalCount
|
||||
} else {
|
||||
this.$message.warning(resp.msg)
|
||||
}
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.changeTypeData = await getEnumOptions("MemberChangeType")
|
||||
this.pageData()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,440 @@
|
||||
const USER_CHANGE_INFO = {
|
||||
template: /*language=html*/ `
|
||||
<div>
|
||||
<el-tabs v-model="activeName">
|
||||
<el-tab-pane label="用户基础信息" name="basicInfo">
|
||||
<el-descriptions :column="3" border class="descriptions-form">
|
||||
<el-descriptions-item label="工号">{{ viewData.loginname }}</el-descriptions-item>
|
||||
<el-descriptions-item label="姓名">{{ viewData.username }}</el-descriptions-item>
|
||||
<el-descriptions-item label="性别">{{ viewData.sex }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="民族">{{ viewData.nation }}</el-descriptions-item>
|
||||
<el-descriptions-item label="出生日期">{{ moment(viewData.birthday).format("YYYY年MM月DD日") }}</el-descriptions-item>
|
||||
<el-descriptions-item label="政治面貌">{{ viewData.political }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="学历">{{ viewData.education }}</el-descriptions-item>
|
||||
<el-descriptions-item label="学位">{{ viewData.academicDegree }}</el-descriptions-item>
|
||||
<el-descriptions-item label="党政职务">{{ viewData.position }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="工作单位">{{ viewData.unitname }}</el-descriptions-item>
|
||||
<el-descriptions-item label="所属工会">{{ viewData.unionname }}</el-descriptions-item>
|
||||
<el-descriptions-item label="所属校区">{{ viewData.campus }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="身份证号码">{{ viewData.idCard }}</el-descriptions-item>
|
||||
<el-descriptions-item label="联系电话">{{ viewData.mobile }}</el-descriptions-item>
|
||||
<el-descriptions-item label="电子邮箱">{{ viewData.email }}</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="在职状态">{{ viewData.userState }}</el-descriptions-item>
|
||||
<el-descriptions-item label="人员类型">{{ viewData.personType }}</el-descriptions-item>
|
||||
<el-descriptions-item></el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="会员状态">{{ viewData.member ? '会员' : '非会员' }}</el-descriptions-item>
|
||||
<el-descriptions-item label="福利会员状态">{{ viewData.welfareMember ? '福利会员' : '非福利会员' }}</el-descriptions-item>
|
||||
<el-descriptions-item></el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="家庭主要成员" :span="3">
|
||||
<el-table v-if="viewData.families&&viewData.families.length"
|
||||
:data="viewData.families" 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-empty v-else :image-size="50" description="暂无家庭成员信息"></el-empty>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="个人简况" :span="3">
|
||||
<template slot="label">个人简况</template>
|
||||
<div v-if="viewData.vita" class="text-left" v-html="viewData.vita"></div>
|
||||
<span v-else>无数据</span>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-tab-pane>
|
||||
|
||||
<el-tab-pane label="变更后用户信息" name="userChangInfo" v-if="!formData.isOperate">
|
||||
<el-form :model="formData" ref="formRef" label-width="0" :rules="formRules" size="small">
|
||||
<el-descriptions :column="3" border class="descriptions-form">
|
||||
<el-descriptions-item label="工号">
|
||||
<el-form-item prop="loginname">
|
||||
<el-input v-model="formData.loginname" readonly size="small"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="姓名">
|
||||
<el-form-item prop="username">
|
||||
<el-input v-model="formData.username" readonly size="small"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="性别">
|
||||
<el-form-item prop="sex">
|
||||
<el-radio-group :disabled="allowFields('sex')" v-model="formData.sex" size="small">
|
||||
<el-radio border label="男"></el-radio>
|
||||
<el-radio border label="女"></el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="民族">
|
||||
<el-form-item prop="nation">
|
||||
<dict-select style="width: 100%" placeholder="请选择民族" v-model="formData.nation"
|
||||
:disabled="allowFields('nation')" code="USER_NATION"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="出生日期">
|
||||
<el-form-item prop="birthday">
|
||||
<el-date-picker v-model="formData.birthday"
|
||||
type="date"
|
||||
:disabled="allowFields('birthday')"
|
||||
placeholder="请选择出生日期"
|
||||
format="yyyy-MM-dd"
|
||||
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="political">
|
||||
<dict-select style="width: 100%" placeholder="请选择政治面貌" v-model="formData.political"
|
||||
:disabled="allowFields('political')" code="USER_POLITICAL"></dict-select>
|
||||
</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"
|
||||
:disabled="allowFields('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"
|
||||
:disabled="allowFields('academicDegree')" code="USER_ACADEMIC_DEGREE"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="党政职务">
|
||||
<el-form-item prop="position">
|
||||
<el-input v-model="formData.position" placeholder="请输入党政职务"
|
||||
:disabled="allowFields('position')" maxlength="50"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<template v-if="$auth.hasRoleOr('sysadmin, SchoolUnionMemberAdmin, SchoolUnionAdmin')">
|
||||
<el-descriptions-item label="工作单位">
|
||||
<el-form-item prop="unitId">
|
||||
<el-select clearable filterable placeholder="请选择工作单位" style="width: 100%"
|
||||
:disabled="isView" v-model="formData.unitid">
|
||||
<el-option :key="item.id" :label="item.name" :value="item.id"
|
||||
v-for="item in units"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="所属工会">
|
||||
<el-form-item prop="unionId">
|
||||
<el-select clearable filterable placeholder="请选择所属工会" style="width: 100%"
|
||||
:disabled="isView" v-model="formData.unionid">
|
||||
<el-option :key="item.id" :label="item.unionname" :value="item.id"
|
||||
v-for="item in unions"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
</template>
|
||||
<template v-else>
|
||||
<el-descriptions-item label="工作单位">
|
||||
<el-form-item prop="unitId">
|
||||
<el-select clearable filterable placeholder="请选择工作单位" style="width: 100%"
|
||||
:disabled="allowFields('unitId')" @change="getUnionName(formData.unitId)"
|
||||
v-model="formData.unitid">
|
||||
<el-option :key="item.id" :label="item.name" :value="item.id"
|
||||
v-for="item in units"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="所属工会">
|
||||
<el-form-item prop="unionName">
|
||||
<el-input v-model="formData.unionName" disabled placeholder="请输入所属工会"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
</template>
|
||||
<el-descriptions-item label="所属校区">
|
||||
<el-form-item prop="campus">
|
||||
<dict-select style="width: 100%" placeholder="请选择政治面貌" v-model="formData.campus"
|
||||
:disabled="allowFields('campus')" code="USER_CAMPUS"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="身份证号码">
|
||||
<el-form-item prop="idCard">
|
||||
<el-input v-model="formData.idCard" :disabled="allowFields('idCard')" placeholder="请输入身份证号码" maxlength="18"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="联系电话">
|
||||
<el-form-item prop="mobile">
|
||||
<el-input v-model="formData.mobile" :disabled="allowFields('mobile')" placeholder="请输入联系电话" maxlength="15"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="电子邮箱">
|
||||
<el-form-item prop="email">
|
||||
<el-input v-model="formData.email" :disabled="allowFields('email')" placeholder="请输入电子邮箱" maxlength="50"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
|
||||
<el-descriptions-item label="在职状态">
|
||||
<el-form-item prop="userState">
|
||||
<dict-select v-model="formData.userState" code="USER_STATE"
|
||||
:disabled="allowFields('userState')" style="width: 100%"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<template v-if="formData.userState == '退休'">
|
||||
<el-descriptions-item label="退休日期">
|
||||
<el-form-item prop="retireDate">
|
||||
<el-date-picker v-model="formData.retireDate"
|
||||
type="date"
|
||||
:disabled="isView"
|
||||
placeholder="请选择出生日期"
|
||||
format="yyyy-MM-dd"
|
||||
value-format="yyyy-MM-dd"
|
||||
style="width: 100%"></el-date-picker>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
</template>
|
||||
<el-descriptions-item label="人员类型">
|
||||
<el-form-item prop="personType">
|
||||
<dict-select v-model="formData.personType" code="PERSON_TYPE"
|
||||
:disabled="allowFields('personType')" style="width: 100%"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item v-if="formData.userState == null || formData.userState != '退休'"></el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="会员状态">
|
||||
<el-form-item prop="member">
|
||||
<el-radio-group v-model="formData.member" :disabled="isView" size="small">
|
||||
<el-radio border :label="1">会员</el-radio>
|
||||
<el-radio border :label="0">非会员</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="福利会员状态">
|
||||
<el-form-item prop="welfareMember">
|
||||
<el-radio-group v-model="formData.welfareMember" :disabled="isView" size="small">
|
||||
<el-radio border :label="1">福利会员</el-radio>
|
||||
<el-radio border :label="0">非福利会员</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item></el-descriptions-item>
|
||||
|
||||
|
||||
<template v-if="formData.member == 1 && !isView">
|
||||
<el-descriptions-item label="是否加入会员组别">
|
||||
<el-form-item prop="member">
|
||||
<el-radio-group v-model="formData.isJoinActivityMemberScope" size="small">
|
||||
<el-radio border :label="1">是</el-radio>
|
||||
<el-radio border :label="0">否</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
</template>
|
||||
<template v-if="formData.member == 0 && !isView">
|
||||
<el-descriptions-item label="是否退出会员组别">
|
||||
<el-form-item prop="member">
|
||||
<el-radio-group v-model="formData.isExitActivityMemberScope" size="small">
|
||||
<el-radio border :label="1">是</el-radio>
|
||||
<el-radio border :label="0">否</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
</template>
|
||||
|
||||
<template v-if="formData.member != null && !formData.welfareMember && !isView">
|
||||
<el-descriptions-item></el-descriptions-item>
|
||||
<el-descriptions-item></el-descriptions-item>
|
||||
</template>
|
||||
|
||||
<template v-if="formData.welfareMember == true && !isView">
|
||||
<el-descriptions-item label="是否加入福利项目">
|
||||
<el-form-item prop="isJoinWelfareProject">
|
||||
<el-radio-group v-model="formData.isJoinWelfareProject" size="small">
|
||||
<el-radio border :label="1">是</el-radio>
|
||||
<el-radio border :label="0">否</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<template v-if="formData.isJoinWelfareProject">
|
||||
<el-descriptions-item label="福利项目">
|
||||
<el-form-item prop="welfareProjectId">
|
||||
<el-select clearable filterable placeholder="请选择福利项目" style="width: 100%"
|
||||
v-model="formData.welfareProjectId">
|
||||
<el-option v-for="item in welfareProjectList"
|
||||
:key="id" :label="item.name" :value="item.id"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
</template>
|
||||
<template v-else>
|
||||
<el-descriptions-item></el-descriptions-item>
|
||||
</template>
|
||||
</template>
|
||||
</el-descriptions>
|
||||
</el-form>
|
||||
|
||||
<el-row justify="end" v-if="!isView" type="flex" class="mt10">
|
||||
<el-button @click="$emit('do-back')" type="primary">返 回</el-button>
|
||||
<el-button @click="doSubmit" type="primary">提 交</el-button>
|
||||
</el-row>
|
||||
</el-tab-pane>
|
||||
|
||||
<el-tab-pane label="详细变更字段" name="changeInfo" v-if="formData.changeInfos">
|
||||
<el-table :data="formData.changeInfos" :size="tableSize" @sort-change="pageOrder" ref="table" row-key="id" style="width: 100%">
|
||||
<el-table-column :index="indexMethod" align="center" header-align="center"
|
||||
label="序号" type="index" width="80px"></el-table-column>
|
||||
<el-table-column prop="fieldName" label="变更字段" header-align="center"></el-table-column>
|
||||
<el-table-column prop="sourceValue" label="原数据" header-align="center">
|
||||
<template slot-scope="{row}">
|
||||
<div v-html="row.sourceValue"></div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="newValue" label="新数据" header-align="center">
|
||||
<template slot-scope="{row}">
|
||||
<div v-html="row.newValue"></div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</div>
|
||||
`,
|
||||
props: {
|
||||
isView: { type: Boolean, default: true },
|
||||
},
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return{
|
||||
activeName: "basicInfo",
|
||||
viewData: {},
|
||||
units: [],
|
||||
unions: [],
|
||||
|
||||
// 允许变更的字段
|
||||
allowChangeFields: [],
|
||||
formData: {
|
||||
families: [],
|
||||
},
|
||||
formRules: {
|
||||
username: [{required: false, message: "必填", trigger: ["change", "blur"]}],
|
||||
sex: [{required: false, message: "必填", trigger: ["change", "blur"]}],
|
||||
email: [
|
||||
{
|
||||
validator: (rule, value, callback) => {
|
||||
if (!value) {
|
||||
callback();
|
||||
} else if (/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/.test(value)) {
|
||||
callback();
|
||||
} else {
|
||||
callback(new Error("邮箱格式错误"));
|
||||
}
|
||||
},
|
||||
trigger: ["change", "blur"]
|
||||
}
|
||||
],
|
||||
idCard: [
|
||||
{
|
||||
validator: (rule, value, callback) => {
|
||||
if (!value) {
|
||||
// 如果值为空,直接通过校验
|
||||
callback();
|
||||
} else if (/^[1-9]\d{5}(18|19|20)?\d{2}((0[1-9])|(10|11|12))(([0|1|2][0-9])|10|20|30|31)\d{3}(\d|[Xx])$/.test(value)) {
|
||||
// 18位身份证号码格式正确
|
||||
callback();
|
||||
} else if (/^[1-9]\d{7}((0[1-9])|(10|11|12))(([0|1|2][0-9])|10|20|30|31)\d{3}$/.test(value)) {
|
||||
// 15位身份证号码格式正确
|
||||
callback();
|
||||
} else if (/^[1-9]\d{5}(18|19|20)?\d{2}((0[1-9])|(10|11|12))(([0|1|2][0-9])|10|20|30|31)\d{3}$/.test(value)) {
|
||||
// 外国人身份证号码格式正确(18位)
|
||||
callback();
|
||||
} else if (/^[1-9]\d{7}((0[1-9])|(10|11|12))(([0|1|2][0-9])|10|20|30|31)\d{3}$/.test(value)) {
|
||||
// 外国人身份证号码格式正确(15位)
|
||||
callback();
|
||||
} else {
|
||||
// 格式错误,返回错误信息
|
||||
callback(new Error("身份证号码格式错误"));
|
||||
}
|
||||
},
|
||||
trigger: ["change", "blur"]
|
||||
}
|
||||
],
|
||||
mobile: [
|
||||
{
|
||||
validator: (rule, value, callback) => {
|
||||
if (!value) {
|
||||
// 如果值为空,直接通过校验
|
||||
callback();
|
||||
} else if (/^[1][345789][0-9]{9}$/.test(value)) {
|
||||
// 手机号格式正确
|
||||
callback();
|
||||
} else if (/^\d+-\d+$/.test(value) && value.length <= 16) {
|
||||
// 座机号格式正确
|
||||
callback();
|
||||
} else {
|
||||
// 格式错误,返回错误信息
|
||||
callback(new Error(value.includes('-') ? '座机号码格式错误' : '手机号码格式错误'));
|
||||
}
|
||||
},
|
||||
trigger: ["change", "blur"]
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
welfareProjectList: []
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
onOpen(sourceChangeId){
|
||||
$.post('/platform/sourcechange/manage/getSourceChangeAndCurrent', {sourceChangeId})
|
||||
.then(resp => {
|
||||
if (resp.code === 0) {
|
||||
this.formData = resp.data.middleTable
|
||||
this.viewData = resp.data.userData
|
||||
this.formData.unionid = resp.data.userData.unionid
|
||||
}
|
||||
})
|
||||
},
|
||||
allowFields(prop) {
|
||||
if (this.isView) {
|
||||
return true
|
||||
}
|
||||
return !this.allowChangeFields.map(v => v.code).includes(prop)
|
||||
},
|
||||
doSubmit() {
|
||||
this.$refs.formRef.validate((valid) => {
|
||||
if (valid) {
|
||||
this.$confirm("提交后会改变人员基础数据,您确定要提交吗?", "提示", { type: "warning" })
|
||||
.then(() => {
|
||||
this.$emit('do-submit', this.formData)
|
||||
})
|
||||
.catch()
|
||||
}
|
||||
})
|
||||
},
|
||||
async init(){
|
||||
const user = JSON.parse(window.sessionStorage.getItem('user'))
|
||||
this.allowChangeFields = await getDictOptions("ALLOW_CHANGE_FIELDS")
|
||||
if (this.$auth.hasRoleOr('sysadmin, SchoolUnionMemberAdmin, SchoolUnionAdmin')) {
|
||||
this.units = await getUnits()
|
||||
this.unions = await getUnions()
|
||||
} else {
|
||||
this.units = await getUnits(user.unionid)
|
||||
}
|
||||
},
|
||||
},
|
||||
created() {
|
||||
this.init()
|
||||
}
|
||||
}
|
||||
@@ -43,14 +43,14 @@ layout("/layouts/platform.html"){
|
||||
<div class="search-item-label">在职状态</div>
|
||||
<div class="search-item-option">
|
||||
<dict-select v-model="pageForm.userState" placeholder="在职状态" @change="doSearch"
|
||||
style="width: 100%" code="UserState"></dict-select>
|
||||
style="width: 100%" code="USER_STATE"></dict-select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">人员类型</div>
|
||||
<div class="search-item-option">
|
||||
<dict-select v-model="pageForm.personType" placeholder="人员类型" @change="doSearch"
|
||||
style="width: 100%" code="UserType"></dict-select>
|
||||
style="width: 100%" code="PERSON_TYPE"></dict-select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="search-query">
|
||||
|
||||
@@ -43,11 +43,11 @@ layout("/layouts/platform.html"){
|
||||
</el-select>
|
||||
</div>
|
||||
<div class="d-search-item btn-group tool-button">
|
||||
<dict-select clearable code="UserType" placeholder="请选择人员类型"
|
||||
<dict-select clearable code="PERSON_TYPE" placeholder="请选择人员类型"
|
||||
v-model="pageForm.personType"></dict-select>
|
||||
</div>
|
||||
<div class="d-search-item btn-group tool-button">
|
||||
<dict-select clearable code="UserState" placeholder="请选择在职状态"
|
||||
<dict-select clearable code="USER_STATE" placeholder="请选择在职状态"
|
||||
v-model="pageForm.userState"></dict-select>
|
||||
</div>
|
||||
<div class="mt10">
|
||||
|
||||
@@ -41,11 +41,11 @@ layout("/layouts/platform.html"){
|
||||
</el-select>
|
||||
</div>
|
||||
<div class="d-search-item btn-group tool-button">
|
||||
<dict-select clearable code="UserType" placeholder="请选择人员类型"
|
||||
<dict-select clearable code="PERSON_TYPE" placeholder="请选择人员类型"
|
||||
v-model="pageForm.personType"></dict-select>
|
||||
</div>
|
||||
<div class="d-search-item btn-group tool-button">
|
||||
<dict-select clearable code="UserState" placeholder="请选择在职状态"
|
||||
<dict-select clearable code="USER_STATE" placeholder="请选择在职状态"
|
||||
v-model="pageForm.userState"></dict-select>
|
||||
</div>
|
||||
<div class="d-search-item btn-group tool-button">
|
||||
|
||||
@@ -43,11 +43,11 @@ layout("/layouts/platform.html"){
|
||||
</el-select>
|
||||
</div>
|
||||
<div class="d-search-item btn-group tool-button">
|
||||
<dict-select clearable code="UserType" placeholder="请选择人员类型"
|
||||
<dict-select clearable code="PERSON_TYPE" placeholder="请选择人员类型"
|
||||
v-model="pageForm.personType"></dict-select>
|
||||
</div>
|
||||
<div class="d-search-item btn-group tool-button">
|
||||
<dict-select clearable code="UserState" placeholder="请选择在职状态"
|
||||
<dict-select clearable code="USER_STATE" placeholder="请选择在职状态"
|
||||
v-model="pageForm.userState"></dict-select>
|
||||
</div>
|
||||
<div class="d-search-item btn-group tool-button">
|
||||
|
||||
@@ -28,7 +28,7 @@ layout("/layouts/platform.html"){
|
||||
</el-select>
|
||||
</div>
|
||||
<div class="btn-group tool-button mt5">
|
||||
<dict-select clearable code="userState" placeholder="请选择在职状态"
|
||||
<dict-select clearable code="USER_STATE" placeholder="请选择在职状态"
|
||||
v-model="pageForm.userState"></dict-select>
|
||||
</div>
|
||||
<div class="btn-group tool-button mt5">
|
||||
|
||||
@@ -1053,8 +1053,8 @@ layout("/layouts/platform.html"){
|
||||
async created() {
|
||||
this.loadTree()
|
||||
this.typeOptions = await getClubType()
|
||||
this.personTypeOptions = await getDictOptions("UserType")
|
||||
this.userStateOptions = await getDictOptions("UserState")
|
||||
this.personTypeOptions = await getDictOptions("PERSON_TYPE")
|
||||
this.userStateOptions = await getDictOptions("USER_STATE")
|
||||
this.pageData()
|
||||
}
|
||||
})
|
||||
|
||||
@@ -100,6 +100,11 @@ layout("/layouts/platform.html"){
|
||||
v-model="formData.code"
|
||||
auto-complete="off" tabindex="5" type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="remark" label="特殊备注">
|
||||
<el-input maxlength="100" placeholder="特殊备注"
|
||||
v-model="formData.remark"
|
||||
auto-complete="off" tabindex="4" type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="disabled" label="启用状态">
|
||||
<el-switch
|
||||
v-model="formData.disabled"
|
||||
@@ -129,6 +134,11 @@ layout("/layouts/platform.html"){
|
||||
v-model="formData.code"
|
||||
auto-complete="off" tabindex="2" type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="remark" label="特殊备注">
|
||||
<el-input maxlength="100" placeholder="特殊备注"
|
||||
v-model="formData.remark"
|
||||
auto-complete="off" tabindex="4" type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="disabled" label="启用状态">
|
||||
<el-switch
|
||||
v-model="formData.disabled"
|
||||
|
||||
@@ -19,11 +19,11 @@ layout("/layouts/platform.html"){
|
||||
</el-select>
|
||||
</el-col>
|
||||
<el-col :span="4">
|
||||
<dict-select clearable code="UserType" placeholder="人员类型" style="width: 100%"
|
||||
<dict-select clearable code="PERSON_TYPE" placeholder="人员类型" style="width: 100%"
|
||||
v-model="pageForm.personType"></dict-select>
|
||||
</el-col>
|
||||
<el-col :span="4">
|
||||
<dict-select clearable code="UserState" placeholder="在职状态" style="width: 100%"
|
||||
<dict-select clearable code="USER_STATE" placeholder="在职状态" style="width: 100%"
|
||||
v-model="pageForm.userState"></dict-select>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
@@ -268,13 +268,13 @@ layout("/layouts/platform.html"){
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="人员类型" prop="personType">
|
||||
<dict-select clearable code="UserType" placeholder="人员类型" style="width: 100%"
|
||||
<dict-select clearable code="PERSON_TYPE" placeholder="人员类型" style="width: 100%"
|
||||
v-model="formData.personType"></dict-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item label="在职状态" prop="userState">
|
||||
<dict-select clearable code="UserState" placeholder="在职状态" style="width: 100%"
|
||||
<dict-select clearable code="USER_STATE" placeholder="在职状态" style="width: 100%"
|
||||
v-model="formData.userState"></dict-select>
|
||||
</el-form-item>
|
||||
|
||||
@@ -670,4 +670,4 @@ layout("/layouts/platform.html"){
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
#-->
|
||||
|
||||
@@ -113,7 +113,7 @@ layout("/layouts/platform.html"){
|
||||
<dict-select v-model="pageForm.personType" style="width: 100%"
|
||||
clearable
|
||||
placeholder="人员类型"
|
||||
code="UserType"></dict-select>
|
||||
code="PERSON_TYPE"></dict-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -123,7 +123,7 @@ layout("/layouts/platform.html"){
|
||||
<dict-select v-model="pageForm.userState" style="width: 100%"
|
||||
clearable
|
||||
placeholder="在职状态"
|
||||
code="UserState"></dict-select>
|
||||
code="USER_STATE"></dict-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -189,7 +189,7 @@ layout("/layouts/platform.html"){
|
||||
<div class="search-item-option">
|
||||
<dict-select @change="doSearch"
|
||||
clearable
|
||||
code="UserType"
|
||||
code="PERSON_TYPE"
|
||||
multiple
|
||||
placeholder="人员类型"
|
||||
style="width: 100%"
|
||||
@@ -200,7 +200,7 @@ layout("/layouts/platform.html"){
|
||||
<div class="search-item-label">在职状态:</div>
|
||||
<div class="search-item-option">
|
||||
<dict-select @change="doSearch" clearable
|
||||
code="userState"
|
||||
code="USER_STATE"
|
||||
multiple
|
||||
placeholder="在职状态"
|
||||
style="width: 100%"
|
||||
|
||||
@@ -178,7 +178,7 @@ layout("/layouts/platform.html"){
|
||||
<div class="search-item-option">
|
||||
<dict-select v-model="listPageForm.personType" style="width: 100%" clearable
|
||||
placeholder="人员类型"
|
||||
code="UserType"></dict-select>
|
||||
code="PERSON_TYPE"></dict-select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="search-item">
|
||||
@@ -186,7 +186,7 @@ layout("/layouts/platform.html"){
|
||||
<div class="search-item-option">
|
||||
<dict-select v-model="listPageForm.userState" style="width: 100%" clearable
|
||||
placeholder="在职状态"
|
||||
code="userState"></dict-select>
|
||||
code="USER_STATE"></dict-select>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
@@ -363,4 +363,4 @@ layout("/layouts/platform.html"){
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
#-->
|
||||
|
||||
@@ -78,7 +78,7 @@ layout("/layouts/platform.html"){
|
||||
@change="doSearch"
|
||||
multiple
|
||||
placeholder="人员类型"
|
||||
code="UserType"></dict-select>
|
||||
code="PERSON_TYPE"></dict-select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="search-item">
|
||||
@@ -90,7 +90,7 @@ layout("/layouts/platform.html"){
|
||||
@change="doSearch"
|
||||
multiple
|
||||
placeholder="在职状态"
|
||||
code="userState"></dict-select>
|
||||
code="USER_STATE"></dict-select>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -72,7 +72,7 @@ layout("/layouts/platform.html"){
|
||||
<div class="search-item-option">
|
||||
<dict-select v-model="pageForm.personType" style="width: 100%" clearable
|
||||
placeholder="人员类型"
|
||||
code="UserType"></dict-select>
|
||||
code="PERSON_TYPE"></dict-select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="search-item">
|
||||
@@ -80,7 +80,7 @@ layout("/layouts/platform.html"){
|
||||
<div class="search-item-option">
|
||||
<dict-select v-model="pageForm.userState" style="width: 100%" clearable
|
||||
placeholder="在职状态"
|
||||
code="userState"></dict-select>
|
||||
code="USER_STATE"></dict-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -281,4 +281,4 @@ layout("/layouts/platform.html"){
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
#-->
|
||||
|
||||
@@ -127,7 +127,7 @@ layout("/layouts/platform.html"){
|
||||
@change="doSearch"
|
||||
multiple
|
||||
placeholder="人员类型"
|
||||
code="UserType"></dict-select>
|
||||
code="PERSON_TYPE"></dict-select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="search-item">
|
||||
@@ -138,7 +138,7 @@ layout("/layouts/platform.html"){
|
||||
@change="doSearch"
|
||||
multiple
|
||||
placeholder="在职状态"
|
||||
code="userState"></dict-select>
|
||||
code="USER_STATE"></dict-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -47,7 +47,7 @@ layout("/layouts/platform.html"){
|
||||
<div class="search-item-label">在职状态:</div>
|
||||
<div class="search-item-option">
|
||||
<dict-select clearable
|
||||
code="userState"
|
||||
code="USER_STATE"
|
||||
multiple
|
||||
placeholder="在职状态"
|
||||
style="width: 100%"
|
||||
@@ -59,7 +59,7 @@ layout("/layouts/platform.html"){
|
||||
<div class="search-item-label">人员类型:</div>
|
||||
<div class="search-item-option">
|
||||
<dict-select clearable
|
||||
code="UserType"
|
||||
code="PERSON_TYPE"
|
||||
multiple
|
||||
placeholder="人员类型"
|
||||
style="width: 100%"
|
||||
|
||||
@@ -931,8 +931,8 @@ layout("/layouts/platform.html"){
|
||||
this.selPersonType.push(v.personType)
|
||||
})
|
||||
|
||||
const personType = await getDictOptions("UserType")
|
||||
const userState = await getDictOptions("userState")
|
||||
const personType = await getDictOptions("PERSON_TYPE")
|
||||
const userState = await getDictOptions("USER_STATE")
|
||||
this.getMemberCheckTaskOptions();
|
||||
this.fields = this.fields.concat([{
|
||||
label: '人员类型',
|
||||
|
||||
@@ -66,7 +66,7 @@ layout("/layouts/platform.html"){
|
||||
<div class="search-item-option">
|
||||
<dict-select @change="doSearch"
|
||||
clearable
|
||||
code="UserType"
|
||||
code="PERSON_TYPE"
|
||||
placeholder="人员类型"
|
||||
style="width: 100%"
|
||||
v-model="pageForm.personType"></dict-select>
|
||||
|
||||
Reference in New Issue
Block a user