会员升级

This commit is contained in:
Paidax
2025-10-21 17:24:21 +08:00
parent 5b44c75aaf
commit 2d7a74fd87
92 changed files with 6139 additions and 5194 deletions
@@ -21,10 +21,10 @@ const branchUnionGroupManage = {
<el-card shadow="never" style="border: 1px solid var(--border-color-lighter); margin-top: 10px">
<el-table :data="tableData" border>
<el-table-column type="index" width="50" label="序号"></el-table-column>
<el-table-column prop="code" label="小组编码"></el-table-column>
<el-table-column prop="name" label="小组名称"></el-table-column>
<el-table-column prop="leaderUserName" label="组长姓名"></el-table-column>
<el-table-column prop="leaderMobile" label="组长电话"></el-table-column>
<el-table-column prop="code" label="小组编码" width="120px"></el-table-column>
<el-table-column prop="name" label="小组名称" width="200px"></el-table-column>
<el-table-column prop="leaderInfos" label="组长信息"></el-table-column>
<el-table-column prop="unitInfos" label="组成单位"></el-table-column>
<el-table-column label="操作" width="200px">
<template slot-scope="{row}">
<el-button type="primary" size="mini" @click="onEdit(row)">
@@ -38,7 +38,7 @@ const branchUnionGroupManage = {
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
<el-dialog :title="formData.id ? '编辑' : '新增'" :visible.sync="dialogFormVisible" width="600px"
:close-on-click-modal="false">
<el-form ref="formRef" :model="formData" :rules="rules" label-width="100px">
@@ -49,11 +49,17 @@ const branchUnionGroupManage = {
<el-form-item label="小组名称" prop="name">
<el-input v-model="formData.name" placeholder="小组名称" maxlength="100"></el-input>
</el-form-item>
<el-form-item label="小组长" prop="leader">
<el-form-item label="组成单位" prop="unitIds">
<el-select clearable filterable placeholder="请选择组成单位" multiple
style="width: 100%" v-model="formData.unitIds">
<el-option :key="item.id" :label="item.name" :value="item.id" v-for="item in units"></el-option>
</el-select>
</el-form-item>
<el-form-item label="小组长" prop="leaders">
<el-select
v-model="formData.leader"
v-model="formData.leaders"
filterable
remote
remote multiple
reserve-keyword
placeholder="请输入姓名查询"
:remote-method="getUserOptions"
@@ -88,22 +94,29 @@ const branchUnionGroupManage = {
rules: {
code: [{ required: true, message: "请输入小组编码", trigger: "blur" }],
name: [{ required: true, message: "请输入小组名称", trigger: "blur" }],
leader: [{ required: true, message: "请选择小组长", trigger: "change" }]
leaders: [{ required: true, message: "请选择小组长", trigger: "change" }],
unitIds: [{ required: true, message: "请选择组成单位", trigger: "change" }],
},
userOptions: []
userOptions: [],
units: [],
}
},
methods: {
openAdd() {
async openAdd() {
this.dialogFormVisible = true
await this.getUnits()
this.$nextTick(() => {
this.formData = {}
this.$refs.formRef.clearValidate()
})
},
onEdit(row) {
async onEdit(row) {
this.formData = { ...row }
this.formData.unitIds = JSON.parse(row.unitIds)
this.formData.leaders = JSON.parse(row.leaders)
await this.getUnits(row.id)
this.getUserOptions(null, this.formData.leaders)
this.dialogFormVisible = true
this.$nextTick(() => {
this.$refs.formRef.clearValidate()
@@ -115,7 +128,10 @@ const branchUnionGroupManage = {
if (valid) {
const { id } = this.formData
const url = "/platform/sys/unionGroup" + (id ? "/update" : "/insert")
$.post(url, { ...this.formData, unionId: this.union_id }).then((res) => {
const formData = clone(this.formData)
formData.unitIds = JSON.stringify(formData.unitIds)
formData.leaders = JSON.stringify(formData.leaders)
$.post(url, { ...formData, unionId: this.union_id }).then((res) => {
if (res.code === 0) {
this.$message.success(res.msg)
this.dialogFormVisible = false
@@ -152,12 +168,25 @@ const branchUnionGroupManage = {
})
},
getUserOptions(keyword) {
$.get("/platform/sys/unionGroup/listUser", { keyword, unionId: this.union_id }).then((res) => {
getUserOptions(keyword, userIds = null) {
$.get("/platform/sys/unionGroup/listUser", {
keyword,
unionId: this.union_id,
userIds: JSON.stringify(userIds)
}).then((res) => {
if (res.code === 0) {
this.userOptions = res.data
}
})
},
async getUnits(val) {
const resp = await this.$axios.post("/platform/sys/unionGroup/getUnits", {
unionId: this.union_id,
groupId: val
})
if (resp.code === 0) {
this.units = resp.data
}
}
}
}
@@ -3,105 +3,71 @@ layout("/layouts/platform.html"){
#-->
<div id="app" v-cloak>
<guava ref="guava">
<template>
<el-card shadow="never">
<search @search="doSearch">
<search-item label="姓名/工号">
<el-input placeholder="请输入内容" clearable v-model="pageForm.searchKeyword"></el-input>
</search-item>
<search-item label="所属工会">
<el-select
@change="flushUnits"
@clear="flushUnits"
clearable
filterable
placeholder="所属工会"
style="width: 100%"
v-model="pageForm.unionId"
>
<el-option :key="item.id" :label="item.name" :value="item.id" v-for="item in unions"></el-option>
</el-select>
</search-item>
<search-item label="所属单位">
<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>
</search-item>
<search-item label="在职状态">
<dict-select v-model="pageForm.userState" placeholder="在职状态" @change="doSearch" code="USER_STATE"></dict-select>
</search-item>
<search-item label="聘用方式">
<dict-select v-model="pageForm.preparedBy" placeholder="聘用方式" @change="doSearch" code="PREPARED_BY"></dict-select>
</search-item>
<search-item label="人员类型">
<dict-select v-model="pageForm.personType" placeholder="人员类型" @change="doSearch" code="PERSON_TYPE"></dict-select>
</search-item>
</search>
</el-card>
<el-card shadow="never" class="mt10">
<table-tool label="申请列表">
<el-radio-group @change="doSearch" 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>
</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="操作" fixed="right" width="200px">
<template scope="{row}">
<el-button size="mini" type="primary" @click="openChangeView(row)">查看</el-button>
<el-button v-if="row.processInstanceTaskStatus==='ACTIVE'" @click="openApproval(row)" size="mini" type="primary">
审核
</el-button>
<el-button
v-if="row.processInstanceTaskStatus==='COMPLETE' && !row.nextTaskIsComplete"
@click="openRevoke(row.processInstanceTaskId)"
size="mini"
type="danger"
>
撤回
</el-button>
</template>
</el-table-column>
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
</template>
<el-card shadow="never">
<common-query ref="commonQueryRef" @search="search"></common-query>
</el-card>
<el-card shadow="never" class="mt10">
<table-tool label="申请列表">
<el-radio-group @change="doSearch" 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>
</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"
align="center"
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="操作" fixed="right" width="200px" align="center">
<template scope="{row}">
<el-button size="mini" type="primary" @click="openView(row)">查看</el-button>
<el-button v-if="row.processInstanceTaskStatus==='ACTIVE'" @click="openApproval(row)" size="mini" type="primary">
审核
</el-button>
<el-button
v-if="row.processInstanceTaskStatus==='COMPLETE' && !row.nextTaskIsComplete"
@click="openRevoke(row.processInstanceTaskId)"
size="mini"
type="danger"
>
撤回
</el-button>
</template>
</el-table-column>
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
<template #view>
<member-info ref="memberInfoRef"></member-info>
</template>
<template #public>
<member-audit-change-info ref="memberAuditChangeInfoRef"></member-audit-change-info>
<info ref="infoRef"></info>
<div v-if="showApprovalForm">
<div class="process-title">{{formData.processInstanceNodeName}}</div>
<el-form :model="formData" ref="approvalFormRef" label-position="left" label-width="80px">
<el-form-item label="审核意见" prop="approvalOpinion" :rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<user-opinion-textarea v-model="formData.approvalOpinion"></user-opinion-textarea>
</el-form-item>
<el-form-item label="电子签名" prop="approvalSignature" :rules="[{required:false,message:'必填',trigger:['change','blur']}]">
<!--<el-form-item label="电子签名" prop="approvalSignature" :rules="[{required:false,message:'必填',trigger:['change','blur']}]">
<pc-signature v-model="formData.approvalSignature"></pc-signature>
</el-form-item>
</el-form-item>-->
</el-form>
<el-row type="flex" justify="end">
<el-button plain @click="$refs.guava.index()">取消</el-button>
@@ -114,17 +80,15 @@ layout("/layouts/platform.html"){
</guava>
</div>
<script>
<!--#include("../../common/info/memberInfo.js"){}#-->
<!--#include("../../common/audit/memberAuditChangeInfo.js"){}#-->
<!--#include("../common/info.js"){}#-->
<!--#include("../common/commonQuery.js"){}#-->
new Vue({
el: "#app",
store,
mixins: [initTableMixins],
data() {
return {
pageForm: {
audit: false
},
tableColumns: [
{ prop: "loginname", label: "工号", sortable: true },
{ prop: "username", label: "姓名", sortable: true },
@@ -135,32 +99,28 @@ layout("/layouts/platform.html"){
{ prop: "unitName", label: "所属单位", sortable: true },
{ prop: "processInstanceNodeName", label: "当前节点", sortable: true }
],
unions: [],
units: [],
showApprovalForm: false
showApprovalForm: false,
formData: {},
}
},
components: {
"member-info": MEMBER_INFO,
"member-audit-change-info": MEMBER_AUDIT_CHANGE_INFO
'info': INFO,
'common-query': COMMON_QUERY,
},
methods: {
openView(row) {
this.$refs.guava.view(() => {
this.$refs.memberInfoRef.onOpen(row.userId)
})
},
openChangeView(row) {
this.$refs.guava.public(() => {
this.showApprovalForm = false
this.$refs.memberAuditChangeInfoRef.onOpen({ recordId: row.id, userId: row.userId })
this.showApprovalForm = false
this.$refs.infoRef.onOpen(row.id)
})
},
openApproval(row) {
this.$refs.guava.public(() => {
this.$refs.guava.view(() => {
this.showApprovalForm = true
this.formData = row.approvalParam
this.$refs.memberAuditChangeInfoRef.onOpen({ recordId: row.id, userId: row.userId })
this.$refs.infoRef.onOpen(row.id)
})
},
doApproval(approvalType) {
@@ -195,36 +155,15 @@ layout("/layouts/platform.html"){
})
})
},
initData() {
if (this.$auth.hasRoleOr(["SYSADMIN", "SCHOOL_UNION_ADMIN"])) {
this.$businessTool.listUnion(this.pageForm.unionId).then((data) => {
this.unions = data
})
this.$businessTool.listUnit().then((data) => {
this.units = data
})
} else {
this.$businessTool.listUnion(this.$store.state.user.union.id).then((data) => {
this.unions = data
})
this.$businessTool.listUnit(this.$store.state.user.union.id).then((data) => {
this.units = data
})
}
this.doSearch()
},
flushUnits() {
this.$set(this.pageForm, "unitId", null)
this.units = []
if (this.pageForm.unionId) {
this.$businessTool.listUnit(this.pageForm.unionId).then((data) => {
this.units = data
})
}
}
search(pageForm){
if (pageForm) {
this.pageForm = {...this.pageForm, ...pageForm}
}
this.doSearch()
},
},
created() {
this.initData()
this.pageData()
}
})
</script>
@@ -0,0 +1,85 @@
const COMMON_QUERY = {
template: /*language=HTML*/ `
<search @search="doSearch">
<search-item label="姓名/工号">
<el-input placeholder="请输入内容" clearable v-model="pageForm.searchKeyword"></el-input>
</search-item>
<template v-if="$auth.hasRoleOr(['SYSADMIN', 'SCHOOL_UNION_ADMIN', 'BRANCH_UNION_CHAIRMAN'])">
<search-item label="所属工会">
<el-select
@change="flushUnits"
@clear="flushUnits"
clearable
filterable
placeholder="所属工会"
style="width: 100%"
v-model="pageForm.unionId"
>
<el-option :key="item.id" :label="item.name" :value="item.id" v-for="item in unions"></el-option>
</el-select>
</search-item>
<search-item label="所属单位">
<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>
</search-item>
<search-item label="在职状态">
<dict-select v-model="pageForm.userState" placeholder="在职状态" @change="doSearch" code="USER_STATE"></dict-select>
</search-item>
<search-item label="聘用方式">
<dict-select v-model="pageForm.preparedBy" placeholder="聘用方式" @change="doSearch" code="PREPARED_BY"></dict-select>
</search-item>
<search-item label="人员类型">
<dict-select v-model="pageForm.personType" placeholder="人员类型" @change="doSearch" code="PERSON_TYPE"></dict-select>
</search-item>
</template>
</search>
`,
store,
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", "SCHOOL_UNION_ADMIN"])) {
this.$businessTool.listUnion(this.pageForm.unionId).then((data) => {
this.unions = data
})
this.$businessTool.listUnit().then((data) => {
this.units = data
})
} else if (this.$auth.hasRole("BRANCH_UNION_CHAIRMAN")) {
this.$businessTool.listUnion(this.$store.state.user.union.id).then((data) => {
this.unions = data
})
this.$businessTool.listUnit(this.$store.state.user.union.id).then((data) => {
this.units = data
})
}
},
async flushUnits(){
this.$set(this.pageForm, "unitId", null)
this.units = []
if (this.pageForm.unionId) {
this.units = await this.$businessTool.listUnit(this.pageForm.unionId)
}
}
},
async created() {
this.initData()
}
}
@@ -0,0 +1,127 @@
const 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.preparedBy }}</el-descriptions-item>
<el-descriptions-item label="人员类型">{{ viewData.personType }}</el-descriptions-item>
<template v-if="viewData.loginname == $store.state.user.loginname">
<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">
<div v-if="viewData.vita" class="text-left" v-html="viewData.vita"></div>
<el-tag type="warning" v-else>暂无</el-tag>
</el-descriptions-item>
</template>
<el-descriptions-item label="签字信息" :span="3" v-if="viewData.sign">
<el-image :src="viewData.sign"
class="signature-image"></el-image>
</el-descriptions-item>
</el-descriptions>
</el-tab-pane>
<el-tab-pane v-if="nodeTasks && nodeTasks.length > 0" label="审核信息" name="audit">
<div>
<div v-for="nodeTask in nodeTasks" :key="nodeTask.id">
<div class="process-title">
{{nodeTask.nodeName}}
</div>
<el-descriptions :column="3" border v-for="task in nodeTask.tasks" :key="task.id"
style="margin-bottom: 10px">
<el-descriptions-item label="审核人">
{{ task.actualOwnerLoginName + '-' + task.actualOwnerUserName}}
</el-descriptions-item>
<el-descriptions-item label="审核时间">{{ task.endOn}}</el-descriptions-item>
<el-descriptions-item label="审核结果">
<div v-if="task.extVariable">
<el-tag type="success" size="mini"
v-if="task.extVariable.bpmTaskApprovalType === 'PASS'">同意
</el-tag>
<el-tag type="danger" size="mini"
v-if="task.extVariable.bpmTaskApprovalType === 'BACK'">退回
</el-tag>
<el-tag type="danger" size="mini"
v-if="task.extVariable.bpmTaskApprovalType === 'REJECT'">拒绝
</el-tag>
</div>
</el-descriptions-item>
<el-descriptions-item label="审核意见" :span="3">
{{ task.extVariable.approvalOpinion }}
</el-descriptions-item>
<template v-if="$auth.hasRoleOr('SYSADMIN') && task.extVariable.approvalRemark">
<el-descriptions-item label="审核说明" :span="3">
{{ task.extVariable.approvalRemark }}
</el-descriptions-item>
</template>
<el-descriptions-item label="签字" :span="3">
<el-image :src="task.extVariable.approvalSignature"
v-if="task.extVariable && task.extVariable.approvalSignature"
class="signature-image"></el-image>
</el-descriptions-item>
</el-descriptions>
</div>
</div>
</el-tab-pane>
</el-tabs>
</div>
`,
data() {
return{
activeName: "basicInfo",
viewData: {},
nodeTasks: [],
}
},
methods: {
async onOpen(id){
const resp = await $.post('/platform/member/apply/mine/findMemberApplyRecord', {id})
if (resp.code === 0) {
this.viewData = resp.data
this.nodeTasks = resp.data.nodeTasks
if (this.viewData.families) {
this.viewData.families = JSON.parse(this.viewData.families)
} else {
this.viewData.families = []
}
}
}
}
}
@@ -0,0 +1,172 @@
<!--#
layout("/layouts/platform.html"){
#-->
<div id="app" v-cloak>
<guava ref="guava">
<el-card shadow="never">
<common-query ref="commonQueryRef" @search="search"></common-query>
</el-card>
<el-card shadow="never" class="mt10">
<table-tool label="申请列表">
<el-radio-group @change="doSearch" 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>
</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"
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="操作" fixed="right" width="200px" align="center">
<template scope="{row}">
<el-button size="mini" type="primary" @click="openView(row)">查看</el-button>
<el-button v-if="row.processInstanceTaskStatus==='ACTIVE'" @click="openApproval(row)" size="mini" type="primary">
审核
</el-button>
<el-button
v-if="row.processInstanceTaskStatus==='COMPLETE' && !row.nextTaskIsComplete"
@click="openRevoke(row.processInstanceTaskId)"
size="mini"
type="danger"
>
撤回
</el-button>
</template>
</el-table-column>
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
<template #view>
<info ref="infoRef"></info>
<div v-if="showApprovalForm">
<div class="process-title">{{formData.processInstanceNodeName}}</div>
<el-form :model="formData" ref="approvalFormRef" label-position="left" label-width="80px">
<el-form-item label="审核意见" prop="approvalOpinion" :rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<user-opinion-textarea v-model="formData.approvalOpinion"></user-opinion-textarea>
</el-form-item>
<!--<el-form-item label="电子签名" prop="approvalSignature" :rules="[{required:false,message:'必填',trigger:['change','blur']}]">
<pc-signature v-model="formData.approvalSignature"></pc-signature>
</el-form-item>-->
</el-form>
<el-row type="flex" justify="end">
<el-button plain @click="$refs.guava.index()">取消</el-button>
<el-button type="danger" @click="doApproval('BACK')">退回重新申请</el-button>
<el-button type="danger" @click="doApproval('REJECT')">拒绝申请</el-button>
<el-button type="primary" @click="doApproval('PASS')">同意申请</el-button>
</el-row>
</div>
</template>
</guava>
</div>
<script>
<!--#include("../common/info.js"){}#-->
<!--#include("../common/commonQuery.js"){}#-->
new Vue({
el: "#app",
store,
mixins: [initTableMixins],
data() {
return {
tableColumns: [
{ prop: "loginname", label: "工号", sortable: true },
{ prop: "username", label: "姓名", sortable: true },
{ prop: "userState", label: "在职状态", sortable: true },
{ prop: "preparedBy", label: "聘用方式", sortable: true },
{ prop: "personType", label: "人员类型", sortable: true },
{ prop: "unionName", label: "所属工会", sortable: true },
{ prop: "unitName", label: "所属单位", sortable: true },
{ prop: "processInstanceNodeName", label: "当前节点", sortable: true }
],
showApprovalForm: false,
formData: {},
}
},
components: {
'info': INFO,
'common-query': COMMON_QUERY,
},
methods: {
openView(row) {
this.$refs.guava.view(() => {
this.showApprovalForm = false
this.$refs.infoRef.onOpen(row.id)
})
},
openApproval(row) {
this.$refs.guava.view(() => {
this.showApprovalForm = true
this.formData = row.approvalParam
this.$refs.infoRef.onOpen(row.id)
})
},
doApproval(approvalType) {
this.formData.bpmTaskApprovalType = approvalType
this.$refs.approvalFormRef.validate((valid) => {
if (valid) {
this.$axios
.post(loc() + "/approval", {
approval: JSON.stringify(this.formData)
})
.then((res) => {
if (res.code === 0) {
this.$refs.guava.index()
this.$message.success(res.msg)
this.doSearch()
}
})
}
})
},
openRevoke(taskId) {
this.$confirm("您确定要撤回吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "info"
}).then(() => {
this.$axios.post(loc() + "/revoke", { taskId }).then((res) => {
if (res.code === 0) {
this.$message.success(res.msg)
this.doSearch()
}
})
})
},
search(pageForm){
if (pageForm) {
this.pageForm = {...this.pageForm, ...pageForm}
}
this.doSearch()
},
},
created() {
this.pageData()
}
})
</script>
<!--#
}
#-->
@@ -3,113 +3,87 @@ layout("/layouts/platform.html"){
#-->
<div id="app" v-cloak>
<guava ref="guava">
<template>
<el-card shadow="never">
<search @search="doSearch">
<search-item label="姓名/工号">
<el-input placeholder="请输入内容" clearable v-model="pageForm.searchKeyword"></el-input>
</search-item>
<template v-if="$auth.hasRoleOr(['SYSADMIN', 'SCHOOL_UNION_ADMIN', 'BRANCH_UNION_CHAIRMAN'])">
<search-item label="所属工会">
<el-select
@change="flushUnits"
@clear="flushUnits"
clearable
filterable
placeholder="所属工会"
style="width: 100%"
v-model="pageForm.unionId"
>
<el-option :key="item.id" :label="item.name" :value="item.id" v-for="item in unions"></el-option>
</el-select>
</search-item>
<search-item label="所属单位">
<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>
</search-item>
<search-item label="在职状态">
<dict-select v-model="pageForm.userState" placeholder="在职状态" @change="doSearch" code="USER_STATE"></dict-select>
</search-item>
<search-item label="聘用方式">
<dict-select v-model="pageForm.preparedBy" placeholder="聘用方式" @change="doSearch" code="PREPARED_BY"></dict-select>
</search-item>
<search-item label="人员类型">
<dict-select v-model="pageForm.personType" placeholder="人员类型" @change="doSearch" code="PERSON_TYPE"></dict-select>
</search-item>
</template>
</search>
</el-card>
<el-card shadow="never" class="mt10">
<table-tool label="申请列表">
<el-button size="small" type="primary" @click="$store.dispatch('pjaxRoute', '/platform/member/apply/submit')">申请入会</el-button>
</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="openChangeView(row)" size="mini" type="primary">查看</el-button>
<el-button
v-if="[10,40,70].includes(row.processInstanceNodeCode)"
size="mini"
type="primary"
@click="$store.dispatch('pjaxRoute', '/platform/member/apply/submit?id='+row.id)"
>
编辑
</el-button>
<el-button
v-if="[20].includes(row.processInstanceNodeCode) && !row.nextTaskIsComplete"
size="mini"
type="danger"
@click="openRevoke(row)"
>
撤销
</el-button>
<el-button v-if="[10].includes(row.processInstanceNodeCode)" size="mini" type="danger" @click="doDelete(row)">
删除
</el-button>
</template>
</el-table-column>
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
</template>
<el-card shadow="never">
<common-query ref="commonQueryRef" @search="search"></common-query>
</el-card>
<el-card shadow="never" class="mt10">
<table-tool label="申请列表">
<el-button size="small" type="primary" @click="$store.dispatch('pjaxRoute', '/platform/member/apply/submit')">申请入会</el-button>
</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"
align="center"
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" align="center">
<template slot-scope="{row}">
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
<el-button
v-if="[10,40,70].includes(row.processInstanceNodeCode)"
size="mini"
type="primary"
@click="$store.dispatch('pjaxRoute', '/platform/member/apply/submit?id='+row.id)"
>
编辑
</el-button>
<template v-if="row.groupName">
<el-button
v-if="[20].includes(row.processInstanceNodeCode) && !row.nextTaskIsComplete"
size="mini"
type="danger"
@click="openRevoke(row)"
>
撤销
</el-button>
</template>
<template v-else>
<el-button
v-if="[50].includes(row.processInstanceNodeCode) && !row.nextTaskIsComplete"
size="mini"
type="danger"
@click="openRevoke(row)"
>
撤销
</el-button>
</template>
<el-button v-if="[10].includes(row.processInstanceNodeCode)" size="mini" type="danger" @click="doDelete(row)">
删除
</el-button>
</template>
</el-table-column>
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
<template #view>
<member-info ref="memberInfoRef"></member-info>
</template>
<template #public>
<member-audit-change-info ref="memberAuditChangeInfoRef"></member-audit-change-info>
<info ref="infoRef"></info>
</template>
</guava>
</div>
<script>
<!--#include("../../common/info/memberInfo.js"){}#-->
<!--#include("../../common/audit/memberAuditChangeInfo.js"){}#-->
<!--#include("../common/info.js"){}#-->
<!--#include("../common/commonQuery.js"){}#-->
new Vue({
el: "#app",
@@ -127,27 +101,18 @@ layout("/layouts/platform.html"){
{ prop: "unitName", label: "所属单位", sortable: true },
{ prop: "processInstanceNodeName", label: "当前节点", sortable: true }
],
unions: [],
units: []
}
},
components: {
"member-info": MEMBER_INFO,
"member-audit-change-info": MEMBER_AUDIT_CHANGE_INFO
"info": INFO,
'common-query': COMMON_QUERY,
},
methods: {
doDelete(row) {
this.$confirm("您确定要删除吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(() => {
this.$axios.post(loc() + "/delete", { id: row.id }).then((resp) => {
this.$message.success(resp.msg)
this.doSearch()
})
})
},
openView(row) {
this.$refs.guava.view(() => {
this.$refs.infoRef.onOpen(row.id)
})
},
openRevoke(row) {
this.$confirm("您确定要撤销申请吗?", "提示", {
confirmButtonText: "确定",
@@ -160,47 +125,27 @@ layout("/layouts/platform.html"){
})
})
},
openView(row) {
this.$refs.guava.view(() => {
this.$refs.memberInfoRef.onOpen(row.userId)
})
},
openChangeView(row) {
this.$refs.guava.public(() => {
this.$refs.memberAuditChangeInfoRef.onOpen({ recordId: row.id, userId: row.userId })
})
},
initData() {
if (this.$auth.hasRoleOr(["SYSADMIN", "SCHOOL_UNION_ADMIN"])) {
this.$businessTool.listUnion(this.pageForm.unionId).then((data) => {
this.unions = data
})
this.$businessTool.listUnit().then((data) => {
this.units = data
})
} else if (this.$auth.hasRole("BRANCH_UNION_CHAIRMAN")) {
this.$businessTool.listUnion(this.$store.state.user.union.id).then((data) => {
this.unions = data
})
this.$businessTool.listUnit(this.$store.state.user.union.id).then((data) => {
this.units = data
})
}
this.doSearch()
},
flushUnits() {
this.$set(this.pageForm, "unitId", null)
this.units = []
if (this.pageForm.unionId) {
this.$businessTool.listUnit(this.pageForm.unionId).then((data) => {
this.units = data
})
}
}
doDelete(row) {
this.$confirm("您确定要删除吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(() => {
this.$axios.post(loc() + "/delete", { id: row.id }).then((resp) => {
this.$message.success(resp.msg)
this.doSearch()
})
})
},
search(pageForm){
if (pageForm) {
this.pageForm = {...this.pageForm, ...pageForm}
}
this.doSearch()
},
},
created() {
debugger
this.initData()
this.pageData()
}
})
</script>
@@ -2,234 +2,170 @@
layout("/layouts/platform.html"){
#-->
<div id="app" v-cloak>
<guava ref="guava">
<template>
<el-card shadow="never">
<search @search="doSearch">
<search-item label="姓名/工号">
<el-input placeholder="请输入内容" clearable v-model="pageForm.searchKeyword"></el-input>
</search-item>
<search-item label="所属工会">
<el-select
@change="flushUnits"
@clear="flushUnits"
clearable
filterable
placeholder="所属工会"
style="width: 100%"
v-model="pageForm.unionId"
>
<el-option :key="item.id" :label="item.name" :value="item.id" v-for="item in unions"></el-option>
</el-select>
</search-item>
<search-item label="所属单位">
<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>
</search-item>
<search-item label="在职状态">
<dict-select v-model="pageForm.userState" placeholder="在职状态" @change="doSearch" code="USER_STATE"></dict-select>
</search-item>
<search-item label="聘用方式">
<dict-select v-model="pageForm.preparedBy" placeholder="聘用方式" @change="doSearch" code="PREPARED_BY"></dict-select>
</search-item>
<search-item label="人员类型">
<dict-select v-model="pageForm.personType" placeholder="人员类型" @change="doSearch" code="PERSON_TYPE"></dict-select>
</search-item>
</search>
</el-card>
<el-card shadow="never" class="mt10">
<table-tool label="申请列表">
<el-radio-group @change="doSearch" 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>
</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="操作" fixed="right" width="200px">
<template scope="{row}">
<el-button size="mini" type="primary" @click="openChangeView(row)">查看</el-button>
<el-button v-if="row.processInstanceTaskStatus==='ACTIVE'" @click="openApproval(row)" size="mini" type="primary">
审核
</el-button>
<!--<el-button
v-if="row.processInstanceTaskStatus==='COMPLETE' && !row.nextTaskIsComplete"
@click="openRevoke(row.processInstanceTaskId)"
size="mini"
type="danger"
>
撤回
</el-button>-->
</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-audit-change-info ref="memberAuditChangeInfoRef"></member-audit-change-info>
<div v-if="showApprovalForm">
<div class="process-title">{{formData.processInstanceNodeName}}</div>
<el-form :model="formData" ref="approvalFormRef" label-position="left" label-width="80px">
<el-form-item label="审核意见" prop="approvalOpinion" :rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<user-opinion-textarea v-model="formData.approvalOpinion"></user-opinion-textarea>
</el-form-item>
<el-form-item label="审核说明" prop="approvalRemark">
<el-input v-model="formData.approvalRemark" type="textarea" :rows="4" placeholder="请输入审核说明"></el-input>
</el-form-item>
<el-form-item label="电子签名" prop="approvalSignature" :rules="[{required:false,message:'必填',trigger:['change','blur']}]">
<pc-signature v-model="formData.approvalSignature"></pc-signature>
</el-form-item>
</el-form>
<el-row type="flex" justify="end">
<el-button plain @click="$refs.guava.index()">取消</el-button>
<el-button type="danger" @click="doApproval('BACK')">退回重新申请</el-button>
<el-button type="danger" @click="doApproval('REJECT')">拒绝申请</el-button>
<el-button type="primary" @click="doApproval('PASS')">同意申请</el-button>
</el-row>
</div>
</template>
</guava>
<guava ref="guava">
<el-card shadow="never">
<common-query ref="commonQueryRef" @search="search"></common-query>
</el-card>
<el-card shadow="never" class="mt10">
<table-tool label="申请列表">
<el-radio-group @change="doSearch" 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>
</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"
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="操作" fixed="right" width="200px" align="center">
<template scope="{row}">
<el-button size="mini" type="primary" @click="openView(row)">查看</el-button>
<el-button v-if="row.processInstanceTaskStatus==='ACTIVE'" @click="openApproval(row)" size="mini" type="primary">
审核
</el-button>
<el-button
v-if="row.processInstanceTaskStatus==='COMPLETE' && !row.nextTaskIsComplete"
@click="openRevoke(row.processInstanceTaskId)"
size="mini"
type="danger"
>
撤回
</el-button>
</template>
</el-table-column>
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
<template #view>
<info ref="infoRef"></info>
<div v-if="showApprovalForm">
<div class="process-title">{{formData.processInstanceNodeName}}</div>
<el-form :model="formData" ref="approvalFormRef" label-position="left" label-width="80px">
<el-form-item label="审核意见" prop="approvalOpinion" :rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<user-opinion-textarea v-model="formData.approvalOpinion"></user-opinion-textarea>
</el-form-item>
<!--<el-form-item label="电子签名" prop="approvalSignature" :rules="[{required:false,message:'必填',trigger:['change','blur']}]">
<pc-signature v-model="formData.approvalSignature"></pc-signature>
</el-form-item>-->
</el-form>
<el-row type="flex" justify="end">
<el-button plain @click="$refs.guava.index()">取消</el-button>
<el-button type="danger" @click="doApproval('BACK')">退回重新申请</el-button>
<el-button type="danger" @click="doApproval('REJECT')">拒绝申请</el-button>
<el-button type="primary" @click="doApproval('PASS')">同意申请</el-button>
</el-row>
</div>
</template>
</guava>
</div>
<script>
<!--#include("../../common/info/memberInfo.js"){}#-->
<!--#include("../../common/audit/memberAuditChangeInfo.js"){}#-->
new Vue({
el: "#app",
store,
mixins: [initTableMixins],
data() {
return {
pageForm: {
audit: false
},
tableColumns: [
{ prop: "loginname", label: "工号", sortable: true },
{ prop: "username", label: "姓名", sortable: true },
{ prop: "userState", label: "在职状态", sortable: true },
{ prop: "preparedBy", label: "聘用方式", sortable: true },
{ prop: "personType", label: "人员类型", sortable: true },
{ prop: "unionName", label: "所属工会", sortable: true },
{ prop: "unitName", label: "所属单位", sortable: true },
{ prop: "processInstanceNodeName", label: "当前节点", sortable: true }
],
unions: [],
units: [],
showApprovalForm: false
}
},
components: {
"member-info": MEMBER_INFO,
"member-audit-change-info": MEMBER_AUDIT_CHANGE_INFO
},
methods: {
openView(row) {
this.$refs.guava.view(() => {
this.$refs.memberInfoRef.onOpen(row.userId)
})
},
openChangeView(row) {
this.$refs.guava.public(() => {
this.showApprovalForm = false
this.$refs.memberAuditChangeInfoRef.onOpen({ recordId: row.id, userId: row.userId })
})
},
openApproval(row) {
this.$refs.guava.public(() => {
this.showApprovalForm = true
this.formData = row.approvalParam
this.$refs.memberAuditChangeInfoRef.onOpen({ recordId: row.id, userId: row.userId })
})
},
doApproval(approvalType) {
this.formData.bpmTaskApprovalType = approvalType
this.$refs.approvalFormRef.validate((valid) => {
if (valid) {
this.$axios
.post(loc() + "/approval", {
approval: JSON.stringify(this.formData)
})
.then((res) => {
if (res.code === 0) {
this.$refs.guava.index()
this.$message.success(res.msg)
this.doSearch()
}
})
}
})
},
openRevoke(taskId) {
this.$confirm("您确定要撤回吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "info"
}).then(() => {
this.$axios.post(loc() + "/revoke", { taskId }).then((res) => {
if (res.code === 0) {
this.$message.success(res.msg)
this.doSearch()
}
})
})
},
initData() {
if (this.$auth.hasRoleOr(["SYSADMIN", "SCHOOL_UNION_ADMIN"])) {
this.$businessTool.listUnion(this.pageForm.unionId).then((data) => {
this.unions = data
})
this.$businessTool.listUnit().then((data) => {
this.units = data
})
} else {
this.$businessTool.listUnion(this.$store.state.user.union.id).then((data) => {
this.unions = data
})
this.$businessTool.listUnit(this.$store.state.user.union.id).then((data) => {
this.units = data
})
}
this.doSearch()
},
flushUnits() {
this.$set(this.pageForm, "unitId", null)
this.units = []
if (this.pageForm.unionId) {
this.$businessTool.listUnit(this.pageForm.unionId).then((data) => {
this.units = data
})
}
}
},
created() {
this.initData()
}
})
<!--#include("../common/info.js"){}#-->
<!--#include("../common/commonQuery.js"){}#-->
new Vue({
el: "#app",
store,
mixins: [initTableMixins],
data() {
return {
tableColumns: [
{ prop: "loginname", label: "工号", sortable: true },
{ prop: "username", label: "姓名", sortable: true },
{ prop: "userState", label: "在职状态", sortable: true },
{ prop: "preparedBy", label: "聘用方式", sortable: true },
{ prop: "personType", label: "人员类型", sortable: true },
{ prop: "unionName", label: "所属工会", sortable: true },
{ prop: "unitName", label: "所属单位", sortable: true },
{ prop: "processInstanceNodeName", label: "当前节点", sortable: true }
],
showApprovalForm: false,
formData: {},
}
},
components: {
'info': INFO,
'common-query': COMMON_QUERY,
},
methods: {
openView(row) {
this.$refs.guava.view(() => {
this.showApprovalForm = false
this.$refs.infoRef.onOpen(row.id)
})
},
openApproval(row) {
this.$refs.guava.view(() => {
this.showApprovalForm = true
this.formData = row.approvalParam
this.$refs.infoRef.onOpen(row.id)
})
},
doApproval(approvalType) {
this.formData.bpmTaskApprovalType = approvalType
this.$refs.approvalFormRef.validate((valid) => {
if (valid) {
this.$axios
.post(loc() + "/approval", {
approval: JSON.stringify(this.formData)
})
.then((res) => {
if (res.code === 0) {
this.$refs.guava.index()
this.$message.success(res.msg)
this.doSearch()
}
})
}
})
},
openRevoke(taskId) {
this.$confirm("您确定要撤回吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "info"
}).then(() => {
this.$axios.post(loc() + "/revoke", { taskId }).then((res) => {
if (res.code === 0) {
this.$message.success(res.msg)
this.doSearch()
}
})
})
},
search(pageForm){
if (pageForm) {
this.pageForm = {...this.pageForm, ...pageForm}
}
this.doSearch()
},
},
created() {
this.pageData()
}
})
</script>
<!--#
}
@@ -6,6 +6,11 @@ layout("/layouts/platform.html"){
<h3 style="color: var(--color-primary)" slot="header">入会申请</h3>
<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>
@@ -14,16 +19,11 @@ layout("/layouts/platform.html"){
<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 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="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="nation">
<dict-select style="width: 100%" placeholder="请选择民族" v-model="formData.nation" code="USER_NATION"></dict-select>
@@ -73,23 +73,28 @@ layout("/layouts/platform.html"){
<el-descriptions-item label="在职状态">
<el-form-item prop="userState">
<dict-select v-model="formData.userState" code="USER_STATE" style="width: 100%"></dict-select>
<dict-select v-model="formData.userState" disabled code="USER_STATE" style="width: 100%"></dict-select>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="聘用方式">
<el-form-item prop="preparedBy">
<dict-select v-model="formData.preparedBy" code="PREPARED_BY" style="width: 100%"></dict-select>
<dict-select v-model="formData.preparedBy" disabled code="PREPARED_BY" 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>
<dict-select v-model="formData.personType" disabled code="PERSON_TYPE" style="width: 100%"></dict-select>
</el-form-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-input v-model="formData.mobile" placeholder="请输入联系电话" maxlength="11"></el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="电子邮箱">
@@ -97,7 +102,6 @@ layout("/layouts/platform.html"){
<el-input v-model="formData.email" placeholder="请输入电子邮箱" maxlength="50"></el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item></el-descriptions-item>
<el-descriptions-item label="家庭主要成员及其工作单位" :span="3">
<el-form-item prop="families">
@@ -145,6 +149,23 @@ layout("/layouts/platform.html"){
<text-editor v-model="formData.personalData"></text-editor>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="入会意愿" :span="3">
<el-form-item prop="isVoluntary">
<el-checkbox size="medium" style="width: 95%; color: #F56C6C; display: flex; align-items: center;" v-model="formData.isVoluntary">
<div>
<span style="flex: 1; word-wrap: break-word; word-break: break-all; white-space: normal;">
我自愿申请加入学校工会,并委托学校按规定代为扣缴工会会员会费。
</span>
</div>
<div>
<span style="flex: 1; word-wrap: break-word; word-break: break-all; white-space: normal;">
我将严格遵守工会章程,认真执行工会决议,积极参与工会活动,主动融入“学校健康幸福家”建设,为营造温暖、和谐、奋进的校园氛围贡献力量,以实际行动助力学校各项事业发展。
</span>
</div>
</el-checkbox>
</el-form-item>
</el-descriptions-item>
</el-descriptions>
</el-form>
<el-row v-if="!this.$store.state.user.member" justify="end" type="flex" class="mt10">
@@ -172,70 +193,75 @@ layout("/layouts/platform.html"){
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"
}
]
isVoluntary: [{required: true, 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"]
}
]
}
}
},
methods: {
init() {
if (this.id) {
this.$axios.post(loc() + "/findApplyById", { id: this.id }).then((res) => {
if (res.code === 0) {
this.formData = res.data
}
})
} else {
const {
id,
username,
loginname,
sex,
idCard,
nation,
political,
education,
governmentPosition,
mobile,
email,
wantJoinLoveMutualAidAssociation,
families,
personalData,
unit,
union
} = this.$store.state.user
this.$set(this.formData, "userId", id)
this.$set(this.formData, "username", username)
this.$set(this.formData, "loginname", loginname)
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, "education", education)
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.name : null)
this.$set(this.formData, "unionId", union ? union.id : null)
this.$set(this.formData, "governmentPosition", governmentPosition)
this.$set(this.formData, "mobile", mobile)
this.$set(this.formData, "email", email)
this.$set(this.formData, "wantJoinLoveMutualAidAssociation", wantJoinLoveMutualAidAssociation)
this.$set(this.formData, "families", families ? families : [])
this.$set(this.formData, "personalData", personalData)
}
},
doSave() {
this.$confirm("保存后可在我的申请里面再次编辑,您确定要保存吗?", "提示", { type: "warning" })
.then(() => {
this.$axios.post(loc() + "/doSave", this.formData).then((res) => {
this.$axios.post("/platform/member/apply/submit/doSave", this.formData).then((res) => {
if (res.code === 0) {
this.$message.success(res.msg)
this.$store.dispatch("pjaxRoute", "/platform/member/apply/mine")
@@ -248,9 +274,7 @@ layout("/layouts/platform.html"){
this.$confirm("您确定要提交申请吗?", "提示", { type: "warning" })
.then(() => {
this.$axios
.post(loc() + "/doSubmit", {
...this.formData
})
.post("/platform/member/apply/submit/doSubmit", this.formData)
.then((res) => {
if (res.code === 0) {
this.$message.success(res.msg)
@@ -259,7 +283,79 @@ layout("/layouts/platform.html"){
})
})
.catch()
}
},
async init() {
let user
const resp = await $.post('/platform/member/apply/submit/getSelfUserInfo')
if (resp.code === 0) {
if (!resp.data) {
user = this.$store.state.user
} else {
user = resp.data
}
} else {
user = this.$store.state.user
}
if (this.id) {
const res = await this.$axios.post("/platform/member/apply/submit/findApplyById", { id: this.id })
debugger
if (res.code === 0) {
this.formData = res.data
}
} else {
const {
id,
username,
loginname,
sex,
nation,
birthday,
political,
education,
academicDegree,
position,
unitId,
unitName,
unit,
unionId,
unionName,
union,
campus,
userState,
personType,
idCard,
mobile,
email,
families,
personalData
} = 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 : unitName)
this.$set(this.formData, "unitId", unit ? unit.id : unitId)
this.$set(this.formData, "unionName", union ? union.name : unionName)
this.$set(this.formData, "unionId", union ? union.id : unionId)
this.$set(this.formData, "mobile", mobile)
this.$set(this.formData, "email", email)
this.$set(this.formData, "families", families ? families : [])
this.$set(this.formData, "personalData", personalData)
}
},
},
async created() {
this.init()
@@ -1,118 +0,0 @@
<!--#
layout("/layouts/platform.html"){
#-->
<div id="app" v-cloak>
<guava ref="guava">
<member-audit-table ref="tableRef" @open-change-view="openChangeInfo" @open-edit="openEdit"
@open-approval="openApproval" @open-view="openView"></member-audit-table>
<template #view>
<member-info ref="memberInfoRef"></member-info>
</template>
<template #public>
<member-audit-change-info ref="memberAuditChangeInfoViewRef"></member-audit-change-info>
<div v-if="showApprovalForm">
<el-form :model="formData" ref="approvalFormRef" label-position="left" label-width="80px">
<el-form-item label="审核意见" prop="approvalOpinion" :rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<user-opinion-textarea v-model="formData.approvalOpinion"></user-opinion-textarea>
</el-form-item>
<el-form-item label="电子签名" prop="approvalSignature" :rules="[{required:false,message:'必填',trigger:['change','blur']}]">
<pc-signature v-model="formData.approvalSignature"></pc-signature>
</el-form-item>
</el-form>
<el-row type="flex" justify="end">
<el-button plain @click="$refs.guava.index()">取消</el-button>
<el-button type="danger" @click="doApproval('BACK')">退回重新填写</el-button>
<el-button type="danger" @click="doApproval('REJECT')">拒绝</el-button>
<el-button type="primary" @click="doApproval('PASS')">同意</el-button>
</el-row>
</div>
</template>
<template #edit>
<member-change :id="id" :url="url" :edit="true" ref="memberChangeRef" @submit-ready="changeSuccess"></member-change>
</template>
</guava>
</div>
<script>
<!--#include("../../common/audit/memberAuditTable.js"){}#-->
<!--#include("../../common/audit/memberAuditChangeInfo.js"){}#-->
<!--#include("../../common/info/memberInfo.js"){}#-->
<!--#include("../../common/change/memberChange.js"){}#-->
new Vue({
el: "#app",
store,
mixins: [initTableMixins],
data: {
showApprovalForm: false,
id: '',
url: '',
},
components: {
"member-audit-table": MEMBER_AUDIT_TABLE,
"member-audit-change-info": MEMBER_AUDIT_CHANGE_INFO,
"member-info": MEMBER_INFO,
"member-change": MEMBER_CHANGE,
},
methods: {
doApproval(approvalType) {
this.formData.bpmTaskApprovalType = approvalType
this.$refs.approvalFormRef.validate((valid) => {
if (valid) {
this.$axios
.post(loc() + "/approval", {
approval: JSON.stringify(this.formData)
})
.then((res) => {
if (res.code === 0) {
this.$refs.guava.index()
this.$message.success(res.msg)
this.doSearch()
}
})
}
})
},
openApproval(data) {
this.$refs.guava.public(() => {
this.showApprovalForm = true
this.formData = row.approvalParam
this.$refs.memberAuditChangeInfoViewRef.onOpen({recordId: data.id, userId: data.userId})
})
},
openChangeInfo(data){
this.$refs.guava.public(() => {
this.showApprovalForm = false
this.$refs.memberAuditChangeInfoViewRef.onOpen({recordId: data.id, userId: data.userId})
})
},
openView(userId){
this.$refs.guava.view(() => {
this.$refs.memberInfoRef.onOpen(userId)
})
},
doSearch() {
this.$refs.tableRef.doSearch()
},
changeSuccess() {
this.$refs.guava.index(() => {
this.doSearch()
})
},
openEdit(row) {
this.id = row.id
this.url = '/platform/member/branchUnion/manage/list/generalMemberChange'
this.$refs.guava.edit(() => {
this.$refs.memberChangeRef.init()
})
}
}
});
</script>
<!--#
}
#-->
@@ -1,102 +0,0 @@
<!--#
layout("/layouts/platform.html"){
#-->
<div id="app" v-cloak>
<guava ref="guava">
<member-manage-query ref="queryRef" @query-ready="onQueryReady"></member-manage-query>
<member-manage-table
ref="tableRef"
v-if="isQueryReady"
@refresh="tableReady"
@change-member="changeMember"
@view-member="viewMember"
@add-member="addMember"
@refresh-table="changeSuccess"
></member-manage-table>
<template #view>
<member-info ref="memberInfoRef"></member-info>
</template>
<template #edit>
<member-apply :admin-operate="true"></member-apply>
</template>
<template #public>
<member-change :id="id" :url="url" ref="memberChangeRef" @submit-ready="changeSuccess"></member-change>
</template>
</guava>
</div>
<script>
<!--#include("../../common/manage/memberManageQuery.js"){}#-->
<!--#include("../../common/manage/memberManageTable.js"){}#-->
<!--#include("../../common/info/memberInfo.js"){}#-->
<!--#include("../../common/apply/memberApply.js"){}#-->
<!--#include("../../common/change/memberChange.js"){}#-->
new Vue({
el: "#app",
store,
mixins: [initTableMixins],
data: {
id: "",
username: "",
url: "",
isQueryReady: false,
hasShownMessage: false
},
components: {
"member-manage-query": MEMBER_MANAGE_QUERY,
"member-manage-table": MEMBER_MANAGE_TABLE,
"member-info": MEMBER_INFO,
"member-apply": MEMBER_APPLY,
"member-change": MEMBER_CHANGE
},
methods: {
changeMember(data) {
this.id = data.id
this.username = data.username
this.url = "/platform/member/branchUnion/manage/list/generalMemberChange"
this.$refs.guava.public(() => {
this.$refs.memberChangeRef.init()
})
},
viewMember(val) {
this.$refs.guava.view(() => {
this.$refs.memberInfoRef.onOpen(val)
})
},
addMember() {
this.$refs.guava.edit()
},
onQueryReady(pageForm) {
this.isQueryReady = true
this.$nextTick(() => {
if (this.$refs.tableRef) {
this.$refs.tableRef.pageData()
this.$refs.tableRef.pageForm = pageForm
}
})
},
tableReady(pageForm) {
this.$refs.queryRef.pageForm = pageForm
},
changeSuccess() {
this.$refs.guava.index()
this.$nextTick(() => {
this.$refs.tableRef.pageData()
})
if (this.hasShownMessage) return
// setTimeout(() => {
// this.$message.success('您已成功提交【'+ this.username +'】老师的变更,可前往分工会审核菜单查看审核记录');
// }, 1000);
this.hasShownMessage = true
}
},
created() {}
})
</script>
<!--#
}
#-->
@@ -1,51 +0,0 @@
<!--#
layout("/layouts/platform.html"){
#-->
<div id="app" v-cloak>
<guava ref="guava">
<template>
<member-record @open-view="openView" @open-change-info="openChangeInfo"></member-record>
</template>
<template #view>
<member-info ref="memberInfoRef"></member-info>
</template>
<template #public>
<member-audit-change-info ref="memberAuditChangeInfoRef"></member-audit-change-info>
</template>
</guava>
</div>
<script>
<!--#include("../../common/record/memberRecord.js"){}#-->
<!--#include("../../common/info/memberInfo.js"){}#-->
<!--#include("../../common/audit/memberAuditChangeInfo.js"){}#-->
new Vue({
el: "#app",
mixins: [initTableMixins],
store,
components: {
"member-record": MEMBER_RECORD,
"member-info": MEMBER_INFO,
"member-audit-change-info": MEMBER_AUDIT_CHANGE_INFO
},
data: {
userId: ''
},
methods: {
openChangeInfo(row) {
this.$refs.guava.public(() => {
this.$refs.memberAuditChangeInfoRef.onOpen({recordId: row.id, userId: row.userId})
})
},
openView(data) {
this.$refs.guava.view(() => {
this.$refs.memberInfoRef.onOpen(data)
})
}
}
})
</script>
<!--#
}
#-->
@@ -0,0 +1,180 @@
<!--#
layout("/layouts/platform.html"){
#-->
<div id="app" v-cloak>
<guava ref="guava">
<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="申请列表">
<el-radio-group @change="doSearch" 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>
</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"
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" align="center">
<template slot-scope="{row}">
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
<el-button v-if="row.processInstanceTaskStatus==='ACTIVE'" @click="openApproval(row)" size="mini" type="primary">
审核
</el-button>
<el-button
v-if="row.processInstanceTaskStatus==='COMPLETE' && !row.nextTaskIsComplete"
@click="openRevoke(row.processInstanceTaskId)"
size="mini"
type="danger"
>
撤回
</el-button>
</template>
</el-table-column>
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
<template #view>
<info ref="infoRef"></info>
<div v-if="showApprovalForm">
<div class="process-title">{{formData.processInstanceNodeName}}</div>
<el-form :model="formData" ref="approvalFormRef" label-position="left" label-width="80px">
<el-form-item label="审核意见" prop="approvalOpinion" :rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<user-opinion-textarea v-model="formData.approvalOpinion"></user-opinion-textarea>
</el-form-item>
<!--<el-form-item label="电子签名" prop="approvalSignature" :rules="[{required:false,message:'必填',trigger:['change','blur']}]">
<pc-signature v-model="formData.approvalSignature"></pc-signature>
</el-form-item>-->
</el-form>
<el-row type="flex" justify="end">
<el-button plain @click="$refs.guava.index()">取消</el-button>
<el-button type="danger" @click="doApproval('BACK')">退回重新填写</el-button>
<el-button type="danger" @click="doApproval('REJECT')">拒绝</el-button>
<el-button type="primary" @click="doApproval('PASS')">同意</el-button>
</el-row>
</div>
</template>
</guava>
</div>
<script>
<!--#include("../common/info.js"){}#-->
<!--#include("../common/commonQuery.js"){}#-->
new Vue({
el: "#app",
store,
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: "processInstanceNodeName", label: "当前节点", sortable: true }
],
showApprovalForm: false,
formData: {}
}
},
components: {
'info': INFO,
'common-query': COMMON_QUERY,
},
methods: {
openView(row){
this.$refs.guava.view(() => {
this.showApprovalForm = false
this.$refs.infoRef.onOpen(row)
})
},
openApproval(row) {
this.$refs.guava.view(() => {
this.showApprovalForm = true
this.formData = row.approvalParam
this.$refs.infoRef.onOpen(row)
})
},
doApproval(approvalType) {
this.formData.bpmTaskApprovalType = approvalType
this.$refs.approvalFormRef.validate((valid) => {
if (valid) {
this.$axios
.post(loc() + "/approval", {
approval: JSON.stringify(this.formData)
})
.then((res) => {
if (res.code === 0) {
this.$refs.guava.index()
this.$message.success(res.msg)
this.doSearch()
}
})
}
})
},
search(pageForm){
if (pageForm) {
this.pageForm = {...this.pageForm, ...pageForm}
}
this.doSearch()
},
getChangeTypes(changeTypes){
// const changeTypesList = JSON.parse(changeTypes)
if (changeTypes) {
if (!changeTypes || changeTypes.length === 0 || !this.changeTypeData || this.changeTypeData.length === 0) return null
return changeTypes
.map((v) => {
return this.changeTypeData.find((item) => item.code === v).changeTypeName
})
.join(",")
}
return null
}
},
async created() {
this.pageData()
this.changeTypeData = await this.$businessTool.getEnumOptions("MemberChangeType")
}
});
</script>
<!--#
}
#-->
@@ -0,0 +1,83 @@
const COMMON_QUERY = {
template: /*language=HTML*/ `
<search @search="doSearch">
<search-item label="姓名/工号">
<el-input placeholder="请输入内容" clearable v-model="pageForm.searchKeyword"></el-input>
</search-item>
<search-item label="所属工会">
<el-select @change="flushUnits" @clear="flushUnits" clearable filterable
placeholder="所属工会" style="width: 100%;" v-model="pageForm.unionId">
<el-option :key="item.id" :label="item.name" :value="item.id"
v-for="item in unions"></el-option>
</el-select>
</search-item>
<search-item label="所属单位">
<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>
</search-item>
<search-item label="在职状态">
<dict-select v-model="pageForm.userState" placeholder="在职状态" @change="doSearch"
code="USER_STATE"></dict-select>
</search-item>
<search-item label="人事编制">
<dict-select v-model="pageForm.preparedBy" placeholder="人事编制" @change="doSearch"
code="PREPARED_BY"></dict-select>
</search-item>
<search-item label="人员类型">
<dict-select v-model="pageForm.personType" placeholder="人员类型" @change="doSearch"
code="PERSON_TYPE"></dict-select>
</search-item>
</search>
`,
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, SCHOOL_UNION_ADMIN, SCHOOL_UNION_MEMBER_ADMIN")) {
this.$businessTool.listUnion(this.pageForm.unionId).then((data) => {
this.unions = data
})
this.$businessTool.listUnit().then((data) => {
this.units = data
})
} else {
this.$businessTool.listUnion(this.$store.state.user.union.id).then((data) => {
this.unions = data
})
this.$businessTool.listUnit(this.$store.state.user.union.id).then((data) => {
this.units = data
})
}
},
async flushUnits(){
this.$set(this.pageForm, "unitId", null)
this.units = []
if (this.pageForm.unionId) {
this.$businessTool.listUnit(this.pageForm.unionId).then((data) => {
this.units = data
})
}
}
},
async created() {
this.initData()
}
}
@@ -0,0 +1,175 @@
const 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.schoolTime }}</el-descriptions-item>
<template v-if="viewData.userState == '退休'">
<el-descriptions-item label="退休日期">{{ viewData.retireDate ?
$moment(viewData.retireDate).format("YYYY-MM-DD") : '暂无' }}
</el-descriptions-item>
<el-descriptions-item label="福利享受截止日期">{{
$moment(viewData.welfareStopDate).format("YYYY-MM-DD") }}
</el-descriptions-item>
<el-descriptions-item></el-descriptions-item>
</template>
<el-descriptions-item label="会员状态">{{ viewData.member ? '会员' : '非会员' }}
</el-descriptions-item>
<el-descriptions-item label="福利会员状态">{{ viewData.welfareMember ? '福利会员' : '非福利会员'
}}
</el-descriptions-item>
<el-descriptions-item></el-descriptions-item>
<template v-if="$store.state.user.loginname == viewData.loginname">
<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.personalData" class="text-left" v-html="viewData.personalData"></div>
<span v-else>无数据</span>
</el-descriptions-item>
</template>
</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" align="center"></el-table-column>
<el-table-column prop="sourceValue" label="原数据" header-align="center" 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" align="center">
<template slot-scope="{row}">
<div v-html="row.newValue"></div>
</template>
</el-table-column>
</el-table>
</el-tab-pane>
<el-tab-pane v-if="nodeTasks && nodeTasks.length > 0" label="审核信息" name="audit">
<div>
<div v-for="nodeTask in nodeTasks" :key="nodeTask.id">
<div class="process-title">
{{nodeTask.nodeName}}
</div>
<el-descriptions :column="3" border v-for="task in nodeTask.tasks" :key="task.id"
style="margin-bottom: 10px">
<el-descriptions-item label="审核人">
{{ task.actualOwnerLoginName + '-' + task.actualOwnerUserName}}
</el-descriptions-item>
<el-descriptions-item label="审核时间">{{ task.endOn}}</el-descriptions-item>
<el-descriptions-item label="审核结果">
<div v-if="task.extVariable">
<el-tag type="success" size="mini"
v-if="task.extVariable.bpmTaskApprovalType === 'PASS'">同意
</el-tag>
<el-tag type="danger" size="mini"
v-if="task.extVariable.bpmTaskApprovalType === 'BACK'">退回
</el-tag>
<el-tag type="danger" size="mini"
v-if="task.extVariable.bpmTaskApprovalType === 'REJECT'">拒绝
</el-tag>
</div>
</el-descriptions-item>
<el-descriptions-item label="审核意见" :span="3">
{{ task.extVariable.approvalOpinion }}
</el-descriptions-item>
<template v-if="$auth.hasRoleOr('SYSADMIN') && task.extVariable.approvalRemark">
<el-descriptions-item label="审核说明" :span="3">
{{ task.extVariable.approvalRemark }}
</el-descriptions-item>
</template>
<el-descriptions-item label="签字" :span="3" v-if="task.extVariable && task.extVariable.approvalSignature">
<el-image :src="task.extVariable.approvalSignature"
class="signature-image"></el-image>
</el-descriptions-item>
</el-descriptions>
</div>
</div>
</el-tab-pane>
</el-tabs>
</div>
`,
store,
mixins: [initTableMixins],
data(){
return {
viewData: {
changeInfos: [],
remark: "",
},
nodeTasks: [],
row: null,
activeName: "basicInfo",
}
},
methods: {
// 打开
onOpen(row) {
this.row = row
this.info()
},
// 获取申请信息
info() {
this.$axios.post("/platform/member/change/mine/findMemberChangeRecord", { id: this.row.id }).then((res) => {
if (res.code === 0) {
this.viewData = res.data
this.nodeTasks = res.data.nodeTasks
if (this.viewData.families) {
this.viewData.families = JSON.parse(this.viewData.families)
} else {
this.viewData.families = []
}
}
})
},
}
}
@@ -0,0 +1,117 @@
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 label="进校时间">{{ viewData.schoolTime }}</el-descriptions-item>
<template v-if="viewData.userState == '退休'">
<el-descriptions-item label="退休日期">{{ viewData.retireDate ? $moment(viewData.retireDate).format("YYYY-MM-DD") : '暂无' }}</el-descriptions-item>
<el-descriptions-item label="福利享受截止日期">{{ $moment(viewData.welfareStopDate).format("YYYY-MM-DD") }}</el-descriptions-item>
<el-descriptions-item></el-descriptions-item>
</template>
<el-descriptions-item label="会员状态">{{ viewData.member ? '会员' : '非会员' }}</el-descriptions-item>
<el-descriptions-item label="福利会员状态">{{ viewData.welfareMember ? '福利会员' : '非福利会员' }}</el-descriptions-item>
<template v-if="viewData.welfareMember">
<el-descriptions-item label="福利号码">{{ viewData.welfareMobile }}</el-descriptions-item>
</template>
<template v-else>
<el-descriptions-item></el-descriptions-item>
</template>
<template v-if="viewData.loginname == $store.state.user.loginname">
<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>
</template>
</el-descriptions>
</el-tab-pane>
<el-tab-pane label="历史变更记录" name="changeInfo" v-if="viewData.allChangeInfo">
<el-timeline style="margin-top: 20px">
<el-timeline-item placement="top" v-for="(changeData, index) in viewData.allChangeInfo"
:key="index" :timestamp="changeData.timestamp">
<el-card>
<h5 style="color: #006DB9;font-weight: bolder;margin-bottom: 5px">{{ changeData.changeOriginName }}</h5>
<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" align="center"></el-table-column>
<el-table-column prop="sourceValue" label="原数据" header-align="center" 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" 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>
`,
store,
mixins: [initTableMixins],
data(){
return{
viewData: {},
activeName: "basicInfo"
}
},
methods:{
onOpen(userId){
this.$axios.post('/platform/member/change/manage/getAllChangeMemberInfo', {userId})
.then(resp => {
if (resp.code === 0) {
this.viewData = resp.data
} else {
this.$message.warning(resp.msg)
}
})
}
}
}
@@ -0,0 +1,421 @@
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" class="flow-task-form">
<el-descriptions :column="3" border class="descriptions-form">
<el-descriptions-item label="姓名">
<el-form-item prop="username">
<el-input :value="formData.username + '(' + formData.loginname + ')'" 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="political">
<dict-select style="width: 100%" placeholder="请选择政治面貌" v-model="formData.political"
:disabled="allowFields('political')" code="POLITICAL_STATUS"></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="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="unitId">
<el-select clearable filterable placeholder="请选择工作单位" style="width: 100%"
:disabled="allowFields('unitId')" @change="getUnionName"
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"
:disabled="allowFields('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"
: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></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>
<template v-if="formData.welfareMember">
<el-descriptions-item label="福利联系方式">
<el-form-item prop="welfareMember">
<el-input v-model="formData.welfareMobile" placeholder="请输入选择福利联系方式"
maxlength="11" show-word-limit></el-input>
</el-form-item>
</el-descriptions-item>
</template>
<template v-else>
<el-descriptions-item></el-descriptions-item>
</template>
<template v-if="formData.loginname == $store.state.user.loginname">
<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="personalData">
<text-editor v-model="formData.personalData"></text-editor>
</el-form-item>
</el-descriptions-item>
</template>
</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],
store,
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: {
getUnionName(val){
const data = this.units.find(v => v.id === val)
this.$set(this.formData, 'unionName', data ? data.unionname : '')
},
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 onOpen(userId){
if (userId) {
this.isShow = false
await this.getUserById(userId)
} else {
this.isShow = true
this.user = this.$store.state.user
}
this.getFormDataValue(this.id)
this.allowChangeFields = await this.$businessTool.getDictOptions("MEMBER_ALLOW_CHANGES_FIELD")
if (this.$auth.hasRoleOr('SYSADMIN, SCHOOL_UNION_MEMBER_ADMIN, SCHOOL_UNION_ADMIN')) {
this.units = await this.$businessTool.listUnit()
this.unions = await this.$businessTool.listUnion()
} else {
this.units = await this.$businessTool.listUnit(this.user.union.id)
}
},
async getUserById(userId){
const resp = await $.post("/platform/member/change/submit/getUserByIdForMemberChange", { userId })
if (resp.code === 0) {
this.user = resp.data
}
},
getFormDataValue(id){
if (id) {
$.post("/platform/member/change/submit/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,
welfareMobile,
email,
families,
personalData
} = 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.name : null)
this.$set(this.formData, "unionId", union ? union.id : null)
this.$set(this.formData, "mobile", mobile)
this.$set(this.formData, "welfareMobile", welfareMobile)
this.$set(this.formData, "email", email)
this.$set(this.formData, "families", families ? families : [])
this.$set(this.formData, "personalData", personalData)
}
}
},
created(){
// this.init()
},
style: /*language=CSS*/ `
.el-descriptions-item__label {
width: 15% !important;
}
`
}
@@ -0,0 +1,182 @@
<!--#
layout("/layouts/platform.html"){
#-->
<div id="app" v-cloak>
<guava ref="guava">
<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="申请列表">
<el-radio-group @change="doSearch" 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>
</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"
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" align="center">
<template slot-scope="{row}">
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
<el-button v-if="row.processInstanceTaskStatus==='ACTIVE'" @click="openApproval(row)" size="mini" type="primary">
审核
</el-button>
<el-button
v-if="row.processInstanceTaskStatus==='COMPLETE' && !row.nextTaskIsComplete"
@click="openRevoke(row.processInstanceTaskId)"
size="mini"
type="danger"
>
撤回
</el-button>
</template>
</el-table-column>
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
<template #view>
<info ref="infoRef"></info>
<div v-if="showApprovalForm">
<div class="process-title">{{formData.processInstanceNodeName}}</div>
<el-form :model="formData" ref="approvalFormRef" label-position="left" label-width="80px">
<el-form-item label="审核意见" prop="approvalOpinion" :rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<user-opinion-textarea v-model="formData.approvalOpinion"></user-opinion-textarea>
</el-form-item>
<!--<el-form-item label="电子签名" prop="approvalSignature" :rules="[{required:false,message:'必填',trigger:['change','blur']}]">
<pc-signature v-model="formData.approvalSignature"></pc-signature>
</el-form-item>-->
</el-form>
<el-row type="flex" justify="end">
<el-button plain @click="$refs.guava.index()">取消</el-button>
<el-button type="danger" @click="doApproval('BACK')">退回重新填写</el-button>
<el-button type="danger" @click="doApproval('REJECT')">拒绝</el-button>
<el-button type="primary" @click="doApproval('PASS')">同意</el-button>
</el-row>
</div>
</template>
</guava>
</div>
<script>
<!--#include("../common/info.js"){}#-->
<!--#include("../common/commonQuery.js"){}#-->
new Vue({
el: "#app",
store,
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: "processInstanceNodeName", label: "当前节点", sortable: true }
],
changeTypeData: [],
showApprovalForm: false,
formData: {},
}
},
components: {
'info': INFO,
'common-query': COMMON_QUERY,
},
methods: {
openView(row){
this.$refs.guava.view(() => {
this.showApprovalForm = false
this.$refs.infoRef.onOpen(row)
})
},
openApproval(row) {
this.$refs.guava.view(() => {
this.showApprovalForm = true
this.formData = row.approvalParam
this.$refs.infoRef.onOpen(row)
})
},
doApproval(approvalType) {
this.formData.bpmTaskApprovalType = approvalType
this.$refs.approvalFormRef.validate((valid) => {
if (valid) {
this.$axios
.post(loc() + "/approval", {
approval: JSON.stringify(this.formData)
})
.then((res) => {
if (res.code === 0) {
this.$refs.guava.index()
this.$message.success(res.msg)
this.doSearch()
}
})
}
})
},
search(pageForm){
if (pageForm) {
this.pageForm = {...this.pageForm, ...pageForm}
}
this.doSearch()
},
getChangeTypes(changeTypes){
// const changeTypesList = JSON.parse(changeTypes)
if (changeTypes) {
if (!changeTypes || changeTypes.length === 0 || !this.changeTypeData || this.changeTypeData.length === 0) return null
return changeTypes
.map((v) => {
return this.changeTypeData.find((item) => item.code === v).changeTypeName
})
.join(",")
}
return null
}
},
async created() {
this.pageData()
this.changeTypeData = await this.$businessTool.getEnumOptions("MemberChangeType")
}
});
</script>
<!--#
}
#-->
@@ -68,7 +68,12 @@ layout("/layouts/platform.html"){
code="UserType"></dict-select>
</div>-->
<el-button @click="addMember" type="primary" size="small">新增会员</el-button>
<!-- <el-button @click="addMember" type="primary" size="small">新增会员</el-button>-->
<el-button type="primary" size="small" icon="el-icon-printer" @click="exportExcel">导出会员名单</el-button>
<el-button type="primary" size="small" icon="el-icon-printer" @click="exportNotEqPhoneExcel"
v-if="$auth.hasRoleOr('SYSADMIN,SCHOOL_UNION_ADMIN')">导出会员福利号码不一致名单
</el-button>
</table-tool>
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder"
@@ -137,9 +142,14 @@ layout("/layouts/platform.html"){
</el-dropdown-item>
<el-dropdown-item
:command="{type:'change',data:row}"
v-if="$auth.hasRoleOr(['SYSADMIN','SCHOOL_UNION_ADMIN','BRANCH_UNION_CHAIRMAN','BRANCH_UNION_CHAIRMAN'])">
v-if="$auth.hasRoleOr(['SYSADMIN','SCHOOL_UNION_ADMIN','BRANCH_UNION_CHAIRMAN','BRANCH_UNION_CHAIRMAN','BRANCH_UNION_GROUP_LEADER'])">
变更
</el-dropdown-item>
<el-dropdown-item
:command="{type:'changeWelfareMobile',data:row}"
v-if="$auth.hasRoleOr(['SYSADMIN','SCHOOL_UNION_ADMIN'])">
修改福利号码
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</template>
@@ -150,24 +160,53 @@ layout("/layouts/platform.html"){
</template>
<template #view>
<member-info :id="id"></member-info>
<member-info ref="memberInfoRef"></member-info>
</template>
<template #edit>
<member-apply :admin-operate="true"></member-apply>
</template>
<template #public>
<member-change :id="id" :url="url" ref="memberChangeRef"></member-change>
<member-change ref="memberChangeRef" @do-back="$refs.guava.index()" @do-submit="doChangeSubmit"></member-change>
</template>
<template #edit>
<member-all-change ref="memberAllChangeRef"></member-all-change>
</template>
</guava>
<el-dialog title="修改福利号码" :visible.sync="changeWelfareMobileVisible" append-to-body width="30%">
<el-form :model="welfareFormData" label-width="80px">
<el-form-item label="姓名">
<el-input :value="welfareFormData.username" disabled></el-input>
</el-form-item>
<el-form-item label="工号">
<el-input :value="welfareFormData.loginname" disabled></el-input>
</el-form-item>
<el-form-item label="手机号">
<el-input :value="welfareFormData.mobile" disabled></el-input>
</el-form-item>
<el-form-item label="福利号码" prop="welfareMobile"
:rules="[
{required: true, message: '请输入福利号码', trigger: 'blur'},
{
pattern: /^1[3-9]\d{9}$/,
message: '请输入有效的手机号码',
trigger: 'blur'
}]">
<el-input v-model="welfareFormData.welfareMobile"></el-input>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="changeWelfareMobileVisible = false">取消</el-button>
<el-button type="primary" @click="changeWelfareMobile">确定</el-button>
</div>
</el-dialog>
</div>
<script>
<!--#include("../../common/info/memberInfo.js"){}#-->
<!--#include("../../common/apply/memberApply.js"){}#-->
<!--#include("../../common/change/memberChange.js"){}#-->
<!--#include("../common/memberChange.js"){}#-->
<!--#include("../common/memberAllChangeInfo.js"){}#-->
new Vue({
el: "#app",
@@ -213,9 +252,7 @@ layout("/layouts/platform.html"){
},
unions: [],
units: [],
changeType: {},
id: "",
url: "",
tableColumns: [
{prop: 'loginname', label: '工号', sortable: true},
{prop: 'username', label: '姓名', sortable: true},
@@ -226,11 +263,14 @@ layout("/layouts/platform.html"){
{prop: 'unionName', label: '所属工会', sortable: true},
{prop: 'unitName', label: '所属单位', sortable: true},
],
changeWelfareMobileVisible: false,
welfareFormData: {}
},
components: {
"member-info": MEMBER_INFO,
"member-apply": MEMBER_APPLY,
"member-change": MEMBER_CHANGE,
"member-all-change": MEMBER_ALL_CHANGE_INFO,
},
methods: {
dropdownCommand(command) {
@@ -239,57 +279,108 @@ layout("/layouts/platform.html"){
this.openView(data.id)
} else if (type === 'change') {
this.openChange(data.id)
} else if (type === "changeWelfareMobile") {
this.welfareFormData = {
id: data.id,
username: data.username,
loginname: data.loginname,
mobile: data.mobile,
welfareMobile: data.welfareMobile
}
this.changeWelfareMobileVisible = true
}
},
changeWelfareMobile() {
this.$confirm("确定要将" + this.welfareFormData.username + "的福利号码修改为:" + this.welfareFormData.welfareMobile + "吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
})
.then(() => {
this.$axios.post("/platform/member/change/manage/changeWelfareMobile", this.welfareFormData).then((res) => {
if (res.code === 0) {
this.$message.success(res.msg)
this.pageData()
this.changeWelfareMobileVisible = false
}
})
})
},
openChange(id) {
this.id = null
this.id = id
this.$refs.guava.public()
this.$nextTick(() => {
this.$refs.memberChangeRef.findOne(id)
this.$refs.guava.public(() => {
this.$refs.memberChangeRef.onOpen(id)
})
},
openView(id) {
this.id = null
this.id = id
this.$refs.guava.view()
this.$refs.guava.view(() => {
this.$refs.memberInfoRef.onOpen(id)
})
},
openUserChangeInfo(row) {
this.$refs.guava.edit(() => {
this.$refs.memberAllChangeRef.onOpen(row.id)
})
},
addMember() {
this.$refs.guava.edit()
},
openUserChangeInfo() {
},
getChangeTypes(changeTypes) {
if (changeTypes) {
const c = JSON.parse(changeTypes)
return c.map(v => {
return this.changeType[v]
}).join(',')
}
return null
},
async doChangeSubmit(formData) {
const resp = await this.$axios.post('/platform/member/change/manage/doSubmitChange', {
record: JSON.stringify(formData),
approvalRemark: ""
})
if (resp.code === 0) {
this.pageData()
this.$message.success(resp.msg)
this.$refs.guava.index()
} else {
this.$message.error(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.code === v).changeTypeName
})
.join(",")
}
return null
},
changeDateRangeChange(val) {
if (val && val.length > 0) {
this.pageForm.changeDateBefore = val[0]
this.pageForm.changeDateEnd = val[1]
}
},
/**
* 导出会员名单
*/
exportExcel() {
const pageForm = clone(this.pageForm)
this.$downLoad("/platform/member/change/manage/doExport", pageForm)
},
exportNotEqPhoneExcel(){
const pageForm = clone(this.pageForm)
this.$downLoad("/platform/member/change/manage/doExportNotEqPhone", pageForm)
},
async initData() {
const isAdmin = this.$auth.hasRoleOr(["SYSADMIN", "SCHOOL_UNION_ADMIN"])
if (isAdmin) {
this.$businessTool.listUnion(this.pageForm.unionId).then(data => {
this.unions = data
})
this.unions = await this.$businessTool.listUnion(this.pageForm.unionId)
} else {
this.$businessTool.listUnion(this.$store.state.user.union.id).then(data => {
this.unions = data
})
this.unions = await this.$businessTool.listUnion(this.$store.state.user.union.id)
}
this.$businessTool.getDictOptions("MEMBER_CHANGE_TYPE").then(data => {
this.changeType = data
})
this.url = isAdmin ? "/platform/member/school/manage/generalMemberChange" : "/platform/member/branch/manage/generalMemberChange"
this.changeTypeData = await this.$businessTool.getEnumOptions("MemberChangeType")
},
async flushUnits() {
this.$set(this.pageForm, "unitId", null)
@@ -0,0 +1,175 @@
<!--#
layout("/layouts/platform.html"){
#-->
<div id="app">
<guava ref="guava">
<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"
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" align="center">
<template slot-scope="{row}">
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
<el-button
v-if="[10,40,70].includes(row.processInstanceNodeCode)"
size="mini"
type="primary"
@click="$store.dispatch('pjaxRoute', '/platform/member/change/submit?id='+row.id)"
>
编辑
</el-button>
<template v-if="row.groupName">
<el-button
v-if="[20].includes(row.processInstanceNodeCode) && !row.nextTaskIsComplete"
size="mini"
type="danger"
@click="openRevoke(row)"
>
撤销
</el-button>
</template>
<template v-else>
<el-button
v-if="[50].includes(row.processInstanceNodeCode) && !row.nextTaskIsComplete"
size="mini"
type="danger"
@click="openRevoke(row)"
>
撤销
</el-button>
</template>
<el-button v-if="[10].includes(row.processInstanceNodeCode)" size="mini" type="danger" @click="doDelete(row)">
删除
</el-button>
</template>
</el-table-column>
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
<template #view>
<info ref="infoRef"></info>
</template>
</guava>
</div>
<script>
<!--#include("../common/info.js"){}#-->
<!--#include("../common/commonQuery.js"){}#-->
new Vue({
el: "#app",
store,
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: "processInstanceNodeName", label: "当前节点", sortable: true }
]
}
},
components: {
'info': INFO,
'common-query': COMMON_QUERY,
},
methods: {
doDelete(row) {
this.$confirm("您确定要删除吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(() => {
this.$axios.post(loc() + "/delete", { id: row.id }).then((resp) => {
this.$message.success(resp.msg)
this.doSearch()
})
})
},
openRevoke(row) {
this.$confirm("您确定要撤销申请吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(() => {
this.$axios.post(loc() + "/revokeApply", { id: row.id }).then((resp) => {
this.$message.success(resp.msg)
this.doSearch()
})
})
},
openView(row) {
this.$refs.guava.view(() => {
this.$refs.infoRef.onOpen(row)
})
},
search(pageForm){
if (pageForm) {
this.pageForm = {...this.pageForm, ...pageForm}
}
this.doSearch()
},
getChangeTypes(changeTypes){
// const changeTypesList = JSON.parse(changeTypes)
if (changeTypes) {
if (!changeTypes || changeTypes.length === 0 || !this.changeTypeData || this.changeTypeData.length === 0) return null
return changeTypes
.map((v) => {
return this.changeTypeData.find((item) => item.code === v).changeTypeName
})
.join(",")
}
return null
}
},
async created() {
this.pageData()
this.changeTypeData = await this.$businessTool.getEnumOptions("MemberChangeType")
}
})
</script>
<!--#
}
#-->
@@ -5,105 +5,91 @@ layout("/layouts/platform.html"){
<guava ref="guava">
<template>
<el-card shadow="never">
<search @search="doSearch">
<search-item label="姓名/工号">
<el-input placeholder="请输入内容" clearable v-model="pageForm.searchKeyword"></el-input>
</search-item>
<search-item label="所属工会">
<el-select @change="flushUnits" @clear="flushUnits" clearable filterable
placeholder="所属工会" style="width: 100%;" v-model="pageForm.unionId">
<el-option :key="item.id" :label="item.name" :value="item.id"
v-for="item in unions"></el-option>
</el-select>
</search-item>
<search-item label="所属单位">
<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>
</search-item>
<search-item label="在职状态">
<dict-select v-model="pageForm.userState" placeholder="在职状态" @change="doSearch"
code="USER_STATE"></dict-select>
</search-item>
<search-item label="人员类型">
<dict-select v-model="pageForm.personType" placeholder="人员类型" @change="doSearch"
code="PERSON_TYPE"></dict-select>
</search-item>
<search-item label="变更类型">
<dict-select v-model="pageForm.changeType" placeholder="变更类型" @change="doSearch"
code="MEMBER_CHANGE_TYPE"></dict-select>
</search-item>
</search>
</el-card>
<el-card shadow="never">
<table-tool label="变更列表"></table-tool>
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder"
class="vi-table" 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"
align="center" 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.id)" type="primary">{{row.loginname}}</el-link>
</template>
</el-table-column>
<el-table-column header-align="center" label="异动信息">
<el-table-column align="center" header-align="center" label="更新时间"
min-width="145px" prop="changeTime"
show-overflow-tooltip sortable>
</el-table-column>
<el-table-column align="center" header-align="center" label="异动类型"
prop="changeType" show-overflow-tooltip sortable>
<template scope="{row}">
<!--<span style="color: #0e78c5;cursor: pointer" @click="openUserChangeInfo(row)">
{{getChangeTypes(row.changeTypes)}}
</span>-->
</template>
</el-table-column>
</el-table-column>
<!--<el-table-column align="center" header-align="center" label="操作"
prop="userOnline"
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 :command="{type:'view',data:row}">
查看
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</template>
</el-table-column>-->
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
<common-query ref="commonQueryRef" @search="search"></common-query>
</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="changeTime" 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-info :id="userId"></member-info>
</template>
<template #view>
<member-all-change ref="memberAllChangeRef"></member-all-change>
</template>
<template #edit>
<member-info ref="memberInfoRef"></member-info>
</template>
</guava>
</div>
<script>
<!--#include("../../common/info/memberInfo.js"){}#-->
<!--#include("../../common/info/memberInfo.js"){}#-->
<!--#include("../common/memberAllChangeInfo.js"){}#-->
<!--#include("../common/commonQuery.js"){}#-->
new Vue({
el:'#app',
mixins: [initTableMixins],
components: {
"member-info": MEMBER_INFO,
'common-query': COMMON_QUERY,
"member-all-change": MEMBER_ALL_CHANGE_INFO,
},
data(){
return{
@@ -118,46 +104,43 @@ layout("/layouts/platform.html"){
{prop: 'unionName', label: '所属工会', sortable: true},
{prop: 'unitName', label: '所属单位', sortable: true},
],
unions: [],
units: []
changeTypeData: [],
}
},
methods:{
getChangeTypes(changeTypes) {
if (changeTypes) {
const c = JSON.parse(changeTypes)
return this.userChangeTypeOptions.filter(v => c.includes(v.code)).map(v => v.description).join()
}
return null
},
openView(userId) {
this.id = userId
this.$refs.guava.view()
},
async initData() {
if (this.$auth.hasRoleOr(["SYSADMIN", "SCHOOL_UNION_ADMIN"])) {
this.$businessTool.listUnion().then(data => {
this.unions = data
})
} else {
this.$businessTool.listUnion(this.$store.state.user.union.id).then(data => {
this.unions = data
})
}
},
async flushUnits() {
this.$set(this.pageForm, "unitId", null)
this.units = []
if (this.pageForm.unionId) {
this.$businessTool.listUnit(this.pageForm.unionId).then(data => {
this.units = data
})
}
}
openUserView(row){
this.$refs.guava.edit(() => {
this.$refs.memberInfoRef.onOpen(row.userId)
})
},
openView(row){
this.$refs.guava.view(() => {
this.$refs.memberAllChangeRef.onOpen(row.userId)
})
},
getChangeTypes(changeTypes){
if (!changeTypes) return null
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.code === v).changeTypeName
})
.join(",")
}
return null
},
search(pageForm){
if (pageForm) {
this.pageForm = {...this.pageForm, ...pageForm}
}
this.doSearch()
},
},
created(){
this.pageData()
this.initData()
async created(){
this.changeTypeData = await this.$businessTool.getEnumOptions("MemberChangeType")
this.pageData()
}
})
</script>
@@ -0,0 +1,180 @@
<!--#
layout("/layouts/platform.html"){
#-->
<div id="app" v-cloak>
<guava ref="guava">
<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="申请列表">
<el-radio-group @change="doSearch" 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>
</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"
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" align="center">
<template slot-scope="{row}">
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
<el-button v-if="row.processInstanceTaskStatus==='ACTIVE'" @click="openApproval(row)" size="mini" type="primary">
审核
</el-button>
<el-button
v-if="row.processInstanceTaskStatus==='COMPLETE' && !row.nextTaskIsComplete"
@click="openRevoke(row.processInstanceTaskId)"
size="mini"
type="danger"
>
撤回
</el-button>
</template>
</el-table-column>
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
<template #view>
<info ref="infoRef"></info>
<div v-if="showApprovalForm">
<div class="process-title">{{formData.processInstanceNodeName}}</div>
<el-form :model="formData" ref="approvalFormRef" label-position="left" label-width="80px">
<el-form-item label="审核意见" prop="approvalOpinion" :rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<user-opinion-textarea v-model="formData.approvalOpinion"></user-opinion-textarea>
</el-form-item>
<!--<el-form-item label="电子签名" prop="approvalSignature" :rules="[{required:false,message:'必填',trigger:['change','blur']}]">
<pc-signature v-model="formData.approvalSignature"></pc-signature>
</el-form-item>-->
</el-form>
<el-row type="flex" justify="end">
<el-button plain @click="$refs.guava.index()">取消</el-button>
<el-button type="danger" @click="doApproval('BACK')">退回重新填写</el-button>
<el-button type="danger" @click="doApproval('REJECT')">拒绝</el-button>
<el-button type="primary" @click="doApproval('PASS')">同意</el-button>
</el-row>
</div>
</template>
</guava>
</div>
<script>
<!--#include("../common/info.js"){}#-->
<!--#include("../common/commonQuery.js"){}#-->
new Vue({
el: "#app",
store,
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: "processInstanceNodeName", label: "当前节点", sortable: true }
],
showApprovalForm: false,
formData: {}
}
},
components: {
'info': INFO,
'common-query': COMMON_QUERY,
},
methods: {
openView(row){
this.$refs.guava.view(() => {
this.showApprovalForm = false
this.$refs.infoRef.onOpen(row)
})
},
openApproval(row) {
this.$refs.guava.view(() => {
this.showApprovalForm = true
this.formData = row.approvalParam
this.$refs.infoRef.onOpen(row)
})
},
doApproval(approvalType) {
this.formData.bpmTaskApprovalType = approvalType
this.$refs.approvalFormRef.validate((valid) => {
if (valid) {
this.$axios
.post(loc() + "/approval", {
approval: JSON.stringify(this.formData)
})
.then((res) => {
if (res.code === 0) {
this.$refs.guava.index()
this.$message.success(res.msg)
this.doSearch()
}
})
}
})
},
search(pageForm){
if (pageForm) {
this.pageForm = {...this.pageForm, ...pageForm}
}
this.doSearch()
},
getChangeTypes(changeTypes){
// const changeTypesList = JSON.parse(changeTypes)
if (changeTypes) {
if (!changeTypes || changeTypes.length === 0 || !this.changeTypeData || this.changeTypeData.length === 0) return null
return changeTypes
.map((v) => {
return this.changeTypeData.find((item) => item.code === v).changeTypeName
})
.join(",")
}
return null
}
},
async created() {
this.pageData()
this.changeTypeData = await this.$businessTool.getEnumOptions("MemberChangeType")
}
});
</script>
<!--#
}
#-->
@@ -0,0 +1,421 @@
<!--#
layout("/layouts/platform.html"){
#-->
<div id="app">
<el-card shadow="never">
<h3 style="color: var(--color-primary)" slot="header">会员变更申请</h3>
<el-form :model="formData" ref="formRef" :rules="formRules" label-width="0" label-suffix="">
<el-descriptions :column="3" border class="descriptions-form">
<el-descriptions-item label="姓名">
<el-form-item prop="username">
<el-input :value="formData.username + '(' + formData.loginname + ')'" 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="political">
<dict-select style="width: 100%" placeholder="请选择政治面貌" v-model="formData.political"
:disabled="allowFields('political')" code="POLITICAL_STATUS"></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="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="unitId">
<el-select clearable filterable placeholder="请选择工作单位" style="width: 100%"
:disabled="allowFields('unitId')" @change="getUnionName"
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"
:disabled="allowFields('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"
: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></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>
<template v-if="formData.welfareMember">
<el-descriptions-item label="福利联系方式">
<el-form-item prop="welfareMember">
<el-input v-model="formData.welfareMobile" placeholder="请输入选择福利联系方式" maxlength="11" show-word-limit></el-input>
</el-form-item>
</el-descriptions-item>
</template>
<template v-else>
<el-descriptions-item></el-descriptions-item>
</template>
<template v-if="formData.loginname == $store.state.user.loginname">
<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="personalData">
<text-editor v-model="formData.personalData"></text-editor>
</el-form-item>
</el-descriptions-item>
</template>
</el-descriptions>
</el-form>
<el-row type="flex" justify="end" class="mt20">
<el-button type="primary" plain @click="onSave">保存</el-button>
<el-button type="primary" @click="onSubmit">提交</el-button>
</el-row>
</el-card>
</div>
<script>
new Vue({
el: "#app",
store,
data() {
return {
bizId: GetQueryString("bizId"),
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"]
}
]
},
}
},
methods: {
// 保存
onSave() {
this.$confirm("您确定保存吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(() => {
this.$axios.post('/platform/member/change/submit/save', {data: JSON.stringify(this.formData)}).then(res => {
if (res.code === 0) {
this.$message.success("保存成功")
this.$store.dispatch("pjaxRoute", "/platform/member/change/mine")
}
})
})
},
// 提交
onSubmit() {
this.$confirm("您确定要提交吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(() => {
this.$axios.post('/platform/member/change/submit/submit', {
data: JSON.stringify(this.formData)
}).then(res => {
if (res.code === 0) {
this.$message.success("提交成功")
this.$store.dispatch("pjaxRoute", "/platform/member/change/mine")
}
})
})
},
// 获取表单工会名称
getUnionName(val){
const data = this.units.find(v => v.id === val)
this.$set(this.formData, 'unionName', data ? data.unionname : '')
},
// 获取表单可编辑的字段信息
allowFields(prop) {
return !this.allowChangeFields.map(v => v.code).includes(prop)
},
// 初始化表单数据
async init(userId){
if (userId) {
this.isShow = false
await this.getUserById(userId)
} else {
this.isShow = true
this.user = this.$store.state.user
}
this.getFormDataValue()
this.allowChangeFields = await this.$businessTool.getDictOptions("MEMBER_ALLOW_CHANGES_FIELD")
if (this.$auth.hasRoleOr('SYSADMIN, SCHOOL_UNION_MEMBER_ADMIN, SCHOOL_UNION_ADMIN')) {
this.units = await this.$businessTool.listUnit()
this.unions = await this.$businessTool.listUnion()
} else {
this.units = await this.$businessTool.listUnit(this.user.union.id)
}
},
// 获取根据userId获取用户信息
async getUserById(userId){
const resp = await this.$axios.post("/platform/member/change/apply/getUserByIdForMemberChange", { userId })
if (resp.code === 0) {
this.user = resp.data
}
},
getFormDataValue(){
if (this.bizId) {
this.$axios.post("/platform/member/change/apply/findChangeById", { id: this.bizId }).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,
personalData,
welfareMobile
} = 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.name : null)
this.$set(this.formData, "unionId", union ? union.id : null)
this.$set(this.formData, "mobile", mobile)
this.$set(this.formData, "mobile", welfareMobile)
this.$set(this.formData, "email", email)
this.$set(this.formData, "families", families ? families : [])
this.$set(this.formData, "personalData", personalData)
}
}
},
created() {
this.init()
}
})
</script>
<!--#
}
#-->
@@ -1,151 +1,150 @@
const MEMBER_APPLY = {
template: `
<!-- <flow-start @task_id="(val)=>{this.TASK_ID = val}" @business_id="(val)=>{this.id = val}">-->
<el-card shadow="never">
<h3 style="color: var(--color-primary)" slot="header">入会申请</h3>
<el-form :model="formData" ref="formRef" label-width="0" :rules="formRules" size="small">
<el-descriptions :column="3" border>
<el-descriptions-item label="姓名">
<template v-if="adminOperate">
<el-form-item prop="userId">
<user-select v-model="formData.userId"
api="/platform/member/apply/submit/getApplyUserByUnionOperate"
api_input_key_name="keyWord"
placeholder="请输入工号或姓名进行查询"
:option_label_func="(item)=>{return item.userName + item.loginName + '(' + item.unitName + ')'}"
@change="findOne(formData.userId)"
style="width: 100%"></user-select>
</el-form-item>
</template>
<template v-else>
<el-form-item prop="userName">
<el-input :value="formData.userName" readonly size="small"></el-input>
</el-form-item>
</template>
</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="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="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="political">
<dict-select style="width: 100%" placeholder="请选择政治面貌" v-model="formData.political" code="POLITICAL_STATUS"></dict-select>
<!-- <el-input v-model="formData.political" maxlength="100"></el-input>-->
</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="unitId">
<el-select clearable filterable placeholder="请选择工作单位" style="width: 100%" :disabled="isAdmin"
@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-input v-model="formData.unitName" placeholder="请输入工作单位" readonly maxlength="100"></el-input>-->
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="所属工会">
<el-form-item prop="unionName">
<el-input v-model="formData.unionName" readonly placeholder="请输入所属工会"></el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="职务">
<el-form-item prop="governmentPosition">
<el-input v-model="formData.governmentPosition" placeholder="请输入职务" maxlength="50"></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></el-descriptions-item>
<el-descriptions-item label="是否愿意加入重大疾病爱心互助会" :span="3">
<el-form-item prop="wantJoinLoveMutualAidAssociation">
<el-radio-group v-model="formData.wantJoinLoveMutualAidAssociation" size="small">
<el-radio :label="true" border></el-radio>
<el-radio :label="false" border>否</el-radio>
</el-radio-group>
</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="personalData">
<el-input type="textarea" placeholder="请输入个人简况(简历、获奖情况、有何特长)" v-model="formData.personalData" clearable></el-input>
</el-form-item>
</el-descriptions-item>
</el-descriptions>
</el-form>
</el-card>
`,
template: /*language=HTML*/ `
<el-card shadow="never">
<h3 style="color: var(--color-primary)" slot="header">入会申请</h3>
<el-form :model="formData" ref="formRef" label-width="0" :rules="formRules" size="small">
<el-descriptions :column="3" border>
<el-descriptions-item label="姓名">
<template v-if="adminOperate">
<el-form-item prop="userId">
<user-select v-model="formData.userId"
api="/platform/member/apply/submit/getApplyUserByUnionOperate"
api_input_key_name="keyWord"
placeholder="请输入工号或姓名进行查询"
:option_label_func="(item)=>{return item.userName + item.loginName + '(' + item.unitName + ')'}"
@change="findOne(formData.userId)"
style="width: 100%"></user-select>
</el-form-item>
</template>
<template v-else>
<el-form-item prop="userName">
<el-input :value="formData.userName" readonly size="small"></el-input>
</el-form-item>
</template>
</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="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="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="political">
<dict-select style="width: 100%" placeholder="请选择政治面貌" v-model="formData.political" code="POLITICAL_STATUS"></dict-select>
<!-- <el-input v-model="formData.political" maxlength="100"></el-input>-->
</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="unitId">
<el-select clearable filterable placeholder="请选择工作单位" style="width: 100%" :disabled="isAdmin"
@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-input v-model="formData.unitName" placeholder="请输入工作单位" readonly maxlength="100"></el-input>-->
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="所属工会">
<el-form-item prop="unionName">
<el-input v-model="formData.unionName" readonly placeholder="请输入所属工会"></el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="职务">
<el-form-item prop="governmentPosition">
<el-input v-model="formData.governmentPosition" placeholder="请输入职务" maxlength="50"></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></el-descriptions-item>
<el-descriptions-item label="是否愿意加入重大疾病爱心互助会" :span="3">
<el-form-item prop="wantJoinLoveMutualAidAssociation">
<el-radio-group v-model="formData.wantJoinLoveMutualAidAssociation" size="small">
<el-radio :label="true" border>是</el-radio>
<el-radio :label="false" border></el-radio>
</el-radio-group>
</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="personalData">
<el-input type="textarea" placeholder="请输入个人简况(简历、获奖情况、有何特长)" v-model="formData.personalData" clearable></el-input>
</el-form-item>
</el-descriptions-item>
</el-descriptions>
</el-form>
</el-card>
`,
props: {
adminOperate: { type: Boolean, default: false },
id: { type: String },
@@ -1,163 +0,0 @@
const MEMBER_AUDIT_CHANGE_INFO = {
template:
/*language=HTML*/
`
<el-card shadow="never">
<el-tabs v-model="activeName">
<el-tab-pane label="基础信息及变更信息" name="basicInfo">
<div>
<div class="process-title">
当前信息
</div>
<el-descriptions :column="3" border class="descriptions-form">
<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.userState }}</el-descriptions-item>
<template v-if="viewData.retireDate">
<el-descriptions-item label="退休时间">{{ $moment(viewData.retireDate).format('YYYY-MM-DD') }}</el-descriptions-item>
<el-descriptions-item label="人员类型">{{ viewData.personType }}</el-descriptions-item>
</template>
<template>
<el-descriptions-item label="人员类型">{{ viewData.personType }}</el-descriptions-item>
<el-descriptions-item></el-descriptions-item>
</template>
<el-descriptions-item label="学历">{{ viewData.education }}</el-descriptions-item>
<el-descriptions-item label="政治面貌">{{ viewData.political }}</el-descriptions-item>
<el-descriptions-item label="婚姻状况">{{ viewData.marriage || '' }}</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.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">
<template slot="label">工作部门(学院)及岗位</template>
<div class="text-left">
{{ viewData.unionName + '-' + viewData.unitName + ( viewData.governmentPosition ? ( '('
+ viewData.governmentPosition + ')' ) : '' ) }}
</div>
</el-descriptions-item>
</el-descriptions>
</div>
<div v-if="changeList && changeList.length > 0">
<div class="process-title">
{{ '变更记录' + (remark ? ('(变更/审核说明:' + remark + ')') : '') }}
</div>
<el-table ref="changeTable" :data="changeList" row-key="id" style="width: 100%" border>
<el-table-column label="序号" type="index" width="50"></el-table-column>
<el-table-column label="变更字段" prop="name"></el-table-column>
<el-table-column label="原数据" prop="value">
<template slot-scope="scope">
<div v-html="scope.row.value"></div>
</template>
</el-table-column>
<el-table-column label="新数据" prop="newValue">
<template slot-scope="scope">
<div v-html="scope.row.newValue"></div>
</template>
</el-table-column>
</el-table>
</div>
</el-tab-pane>
<el-tab-pane v-if="nodeTasks && nodeTasks.length > 0" label="审核信息" name="audit">
<div>
<div v-for="nodeTask in nodeTasks" :key="nodeTask.id">
<div class="process-title">
{{nodeTask.nodeName}}
</div>
<el-descriptions :column="3" border v-for="task in nodeTask.tasks" :key="task.id"
style="margin-bottom: 10px">
<el-descriptions-item label="审核人">
{{ task.actualOwnerLoginName + '-' + task.actualOwnerUserName}}
</el-descriptions-item>
<el-descriptions-item label="审核时间">{{ task.endOn}}</el-descriptions-item>
<el-descriptions-item label="审核结果">
<div v-if="task.extVariable">
<el-tag type="success" size="mini"
v-if="task.extVariable.bpmTaskApprovalType === 'PASS'">同意
</el-tag>
<el-tag type="danger" size="mini"
v-if="task.extVariable.bpmTaskApprovalType === 'BACK'">退回
</el-tag>
<el-tag type="danger" size="mini"
v-if="task.extVariable.bpmTaskApprovalType === 'REJECT'">拒绝
</el-tag>
</div>
</el-descriptions-item>
<el-descriptions-item label="审核意见" :span="3">
{{ task.extVariable.approvalOpinion }}
</el-descriptions-item>
<template v-if="$auth.hasRoleOr('SYSADMIN') && task.extVariable.approvalRemark">
<el-descriptions-item label="审核说明" :span="3">
{{ task.extVariable.approvalRemark }}
</el-descriptions-item>
</template>
<el-descriptions-item label="签字" :span="3">
<el-image :src="task.extVariable.approvalSignature"
v-if="task.extVariable && task.extVariable.approvalSignature"
class="signature-image"></el-image>
</el-descriptions-item>
</el-descriptions>
</div>
</div>
</el-tab-pane>
</el-tabs>
</el-card>
`,
props: {
is_default_url: {
type: Boolean,
default: false
}
},
data() {
return {
activeName: "basicInfo",
changeList: [],
nodeTasks: [],
viewData: {},
remark: ""
}
},
methods: {
findAuditChangeInfo(recordId) {
if (!recordId) {
return
}
let url = loc() + "/findAuditChangeInfo"
if (this.is_default_url) {
url = "/platform/sourcechange/manage/findAuditChangeInfo"
}
this.$axios.post(url, { recordId: recordId }).then((res) => {
if (res.code === 0) {
this.changeList = res.data.changeList
this.nodeTasks = res.data.nodeTasks
this.remark = res.data.remark
}
})
},
findUserInfo(userId) {
if (!userId) {
return
}
this.$axios.post("/platform/member/apply/common/findOne", { id: userId }).then((res) => {
if (res.code === 0) {
this.viewData = res.data
}
})
},
onOpen(data) {
console.log(data)
this.findAuditChangeInfo(data.recordId)
this.$nextTick(() => {
this.findUserInfo(data.userId)
})
}
}
}
@@ -1,71 +0,0 @@
const MEMBER_AUDIT_RECORD = {
template: `
<div class="process-task-record">
<template v-if="approvalRecord.length > 0" v-for="item in approvalRecord">
<div v-if="item.taskName === '2a9632c6-710f-4d3b-89e4-86566238ce8e'" class="mb25">
<div class="process-title">
{{item.displayName}}
</div>
<el-descriptions :column="3" border :key="item.displayName + item.taskParentId">
<template v-for="task in item.processTaskVOList">
<el-descriptions-item label="姓名">{{task.taskActor?.actorUserName}}</el-descriptions-item>
<el-descriptions-item label="工号">{{task.taskActor?.actorId}}</el-descriptions-item>
<el-descriptions-item label="填写时间">{{$moment(task.createdAt).format('YYYY-MM-DD HH:mm:ss')}}</el-descriptions-item>
</template>
</el-descriptions>
</div>
<div v-else>
<div class="process-title">
{{item.displayName}}
</div>
<el-descriptions :column="3" border :key="item.displayName + item.taskParentId">
<template v-for="task in item.processTaskVOList">
<el-descriptions-item label="姓名">{{task.taskActor?.actorUserName}}</el-descriptions-item>
<el-descriptions-item label="工号">{{task.taskActor?.actorId}}</el-descriptions-item>
<el-descriptions-item label="审核时间">{{task.finishTime ? task.finishTime : '暂无'}}</el-descriptions-item>
<el-descriptions-item label="审核结果">
{{Object.keys(task.ext.submitTypeText).length !== 0 ? task.ext.submitTypeText : '暂无'}}
</el-descriptions-item>
<el-descriptions-item label="审核意见" :span="3">{{task.ext.comment ? task.ext.comment : '暂无'}}</el-descriptions-item>
</template>
</el-descriptions>
</div>
</template>
<el-empty v-else description="暂无审核记录"></el-empty>
</div>
`,
dicts: ["PROCESS_TASK_SUBMIT_TYPE"],
props: {
id: {
type: String,
required: true
}
},
watch: {
id: {
handler: function (val) {
if (val) {
this.findOne()
}
},
immediate: true
}
},
data() {
return {
approvalRecord: []
}
},
methods: {
findOne() {
if (!this.id) {
return
}
this.$axios.post("/platform/wf/processCommon/approvalRecord", { businessNo: this.id }).then((res) => {
if (res.code === 0) {
this.approvalRecord = res.data
}
})
}
}
}
@@ -1,202 +0,0 @@
const MEMBER_AUDIT_TABLE = {
template: `
<div>
<el-card shadow="never">
<search @search="doSearch">
<search-item label="姓名/工号">
<el-input placeholder="请输入内容" clearable v-model="pageForm.searchKeyword"></el-input>
</search-item>
<search-item label="所属工会">
<el-select @change="flushUnits" @clear="flushUnits" clearable filterable
placeholder="所属工会" style="width: 100%;" v-model="pageForm.unionId">
<el-option :key="item.id" :label="item.name" :value="item.id"
v-for="item in unions"></el-option>
</el-select>
</search-item>
<search-item label="所属单位">
<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>
</search-item>
<search-item label="在职状态">
<dict-select v-model="pageForm.userState" placeholder="在职状态" @change="doSearch"
code="USER_STATE"></dict-select>
</search-item>
<search-item label="聘用方式">
<dict-select v-model="pageForm.preparedBy" placeholder="聘用方式" @change="doSearch"
code="PREPARED_BY"></dict-select>
</search-item>
<search-item label="人员类型">
<dict-select v-model="pageForm.personType" placeholder="人员类型" @change="doSearch"
code="PERSON_TYPE"></dict-select>
</search-item>
<search-item label="变更类型">
<dict-select v-model="pageForm.changeType" placeholder="人员类型" @change="doSearch"
code="MEMBER_CHANGE_TYPE"></dict-select>
</search-item>
</search>
</el-card>
<el-card shadow="never">
<table-tool label="审核列表">
<el-radio-group @change="doSearch" 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>
</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 v-for="column in tableColumns" :label="column.label"
:prop="column.prop" :key="column.prop"
:sortable="column.sortable" :width="column.width"
align="center" header-align="center" min-width="100px"
show-overflow-tooltip>
<template scope="{row}" v-if="column.prop=='loginname'">
<el-link @click="openView(row.userId)" type="primary">{{row.loginname}}</el-link>
</template>
</el-table-column>
<el-table-column header-align="center" label="变更类型" prop="changeType" show-overflow-tooltip sortable>
<template slot-scope="{row}">
<span style="color: #0e78c5;cursor: pointer" @click="openChangeView(row)">
{{getChangeTypes(row.changeTypes)}}
</span>
</template>
</el-table-column>
<el-table-column header-align="center" label="变更时间" prop="applyDateTime" show-overflow-tooltip sortable>
<template slot-scope="{row}">
<span>{{ row.applyDateTime }}</span>
</template>
</el-table-column>
<el-table-column label="操作" fixed="right" width="200px">
<template slot-scope="{row}">
<el-button size="mini" type="primary" @click="openChangeView(row)">查看</el-button>
<el-button v-if="row.processInstanceTaskStatus==='ACTIVE'
&& !(row.processInstanceNodeCode == 10 && row.changeOrigin == 'BRANCH_UNION')"
@click="openApproval(row)"
size="mini"
type="primary">
审核
</el-button>
<el-button v-if="(row.processInstanceTaskStatus==='ACTIVE' || row.processInstanceStatus==='RUNNING')
&& [10,40].includes(row.processInstanceNodeCode) && $auth.hasRole('BRANCH_UNION_CHAIRMAN')"
@click="openEdit(row)"
size="mini"
type="primary">
编辑
</el-button>
<el-button
v-if="row.processInstanceTaskStatus==='COMPLETE' && !row.nextTaskIsComplete && row.processInstanceNodeCode != 50"
@click="openRevoke(row.processInstanceTaskId)"
size="mini"
type="danger">
撤回
</el-button>
</template>
</el-table-column>
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
</div>
`,
mixins: [initTableMixins],
data() {
return {
pageForm: {
audit: false
},
tableColumns: [
{ prop: "loginname", label: "工号", sortable: true },
{ prop: "username", label: "姓名", sortable: true },
{ prop: "userState", label: "在职状态", sortable: true },
{ prop: "preparedBy", label: "聘用方式", sortable: true },
{ prop: "personType", label: "人员类型", sortable: true },
{ prop: "unionName", label: "所属工会", sortable: true },
{ prop: "unitName", label: "所属单位", sortable: true },
{ prop: "processInstanceNodeName", label: "当前节点", sortable: true }
],
unions: [],
units: [],
changeTypeData: [],
auditChangeVisible: false,
userId: "",
recordId: ""
}
},
methods: {
// 审核
openApproval(row) {
this.$emit("open-approval", row)
},
// 退回
openRevoke(taskId) {
this.$confirm("您确定要撤回吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(() => {
this.$axios.post(loc() + "/revoke", { taskId }).then((resp) => {
this.$message.success(resp.msg)
this.doSearch()
})
})
},
openEdit(row) {
this.$emit("open-edit", row)
},
openUserChangeInfo(row) {
this.$emit("open-change-view", row)
},
getChangeTypes(changeTypes) {
if (changeTypes) {
if (!changeTypes || changeTypes.length === 0 || !this.changeTypeData || this.changeTypeData.length === 0) return null
return changeTypes
.map((v) => {
return this.changeTypeData.find((item) => item.code === v).name
})
.join(",")
}
return null
},
openView(userId) {
this.$emit("open-view", userId)
},
openChangeView(row) {
this.$emit("open-change-view", row)
},
pageData() {
this.$axios.post(loc() + "/pageData", this.pageForm).then((res) => {
if (res.code === 0) {
this.tableData = res.data.list
this.pageForm.totalCount = res.data.totalCount
}
})
},
initData() {
if (this.$auth.hasRoleOr(["SYSADMIN", "SCHOOL_UNION_ADMIN"])) {
this.$businessTool.listUnion(this.pageForm.unionId).then((data) => {
this.unions = data
})
} else {
this.$businessTool.listUnion(this.$store.state.user.union.id).then((data) => {
this.unions = data
})
}
this.doSearch()
},
flushUnits() {
this.$set(this.pageForm, "unitId", null)
this.units = []
if (this.pageForm.unionId) {
this.$businessTool.listUnit(this.pageForm.unionId).then((data) => {
this.units = data
})
}
}
},
async created() {
this.initData()
this.changeTypeData = await this.$businessTool.getAllDictOptions("MEMBER_CHANGE_TYPE")
}
}
@@ -1,368 +0,0 @@
const MEMBER_CHANGE = {
template: /*language=HTML*/ `
<el-card shadow="never">
<h3 style="color: var(--color-primary)" slot="header">信息变更</h3>
<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="username">
<el-input :value="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="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="nation">
<dict-select style="width: 100%" placeholder="请选择民族" :disabled="allowFields('nation')" v-model="formData.nation" code="USER_NATION"></dict-select>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="政治面貌">
<el-form-item prop="political">
<dict-select style="width: 100%" placeholder="请选择政治面貌" :disabled="allowFields('political')" v-model="formData.political" code="POLITICAL_STATUS"></dict-select>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="学历">
<el-form-item prop="education">
<dict-select style="width: 100%" placeholder="请选择学历" :disabled="allowFields('education')" v-model="formData.education" code="USER_EDUCATION"></dict-select>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="工作单位">
<el-form-item prop="unitId">
<el-select clearable filterable placeholder="请选择工作单位" style="width: 100%"
@change="getUnionName(formData.unitId)"
:disabled="allowFields('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" readonly placeholder="请输入所属工会"></el-input>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="职务">
<el-form-item prop="governmentPosition">
<el-input v-model="formData.governmentPosition" :disabled="allowFields('governmentPosition')" 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"
style="width: 100%"
:disabled="allowFields('userState')"></dict-select>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="聘用方式">
<el-form-item prop="preparedBy">
<dict-select v-model="formData.preparedBy" code="PREPARED_BY" style="width: 100%"
:disabled="allowFields('preparedBy')"></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%"
:disabled="allowFields('personType')"></dict-select>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="进站时间" v-show="formData.preparedBy === '博士后'">
<el-form-item prop="postDoctoralJoinDate">
<el-date-picker
v-model="formData.postDoctoralJoinDate"
type="date"
value-format="yyyy-MM-dd"
placeholder="选择日期">
</el-date-picker>
</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="32"></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="member">
<span style="color: #0e9558" v-if="formData.member">是</span>
<span style="color: #ac2925" v-else>否</span>
</el-form-item>
</el-descriptions-item>
<!-- <el-descriptions-item label="是否福利会员">-->
<!-- <el-form-item prop="welfareMember">-->
<!-- <span style="color: #0e9558" v-if="formData.welfareMember">是</span>-->
<!-- <span style="color: #ac2925" v-else>否</span>-->
<!-- </el-form-item>-->
<!-- </el-descriptions-item>-->
<el-descriptions-item></el-descriptions-item>
<el-descriptions-item></el-descriptions-item>
<!--<el-descriptions-item label="是否重大疾病爱心互助会会员">
<el-form-item prop="wantJoinLoveMutualAidAssociation">
<span style="color: #0e9558" v-if="formData.wantJoinLoveMutualAidAssociation">是</span>
<span style="color: #ac2925" v-else>否</span>
</el-form-item>
</el-descriptions-item>-->
<el-descriptions-item label="变更类型" :span="3">
<el-form-item prop="changeType">
<el-radio-group v-model="formData.changeType">
<el-radio v-for="item in changeTypeOptions" border size="small"
@click.native.prevent="clickDataType(item.code)"
:key="item.id" :label="item.code">{{item.name}}</el-radio>
</el-radio-group>
</el-form-item>
</el-descriptions-item>
<template v-if="formData.changeType">
<el-descriptions-item label="会员状态" :span="1.5">
<el-form-item prop="changeMember">
<el-radio-group v-model="formData.changeMember" size="mini">
<el-radio :label="true" border>{{ formData.member ? '保留' : '成为' }}会员</el-radio>
<el-radio :label="false" border>取消会员</el-radio>
</el-radio-group>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="福利会员状态" :span="1.5">
<el-form-item prop="changeWelfareMember">
<el-radio-group v-model="formData.changeWelfareMember" size="mini">
<el-radio :label="true" border>{{ formData.welfareMember ? '保留' : '成为' }}会员</el-radio>
<el-radio :label="false" border>取消会员</el-radio>
</el-radio-group>
</el-form-item>
</el-descriptions-item>
</template>
<template v-if="formData.loginname == $store.state.user.loginname">
<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="personalData">
<text-editor v-model="formData.personalData"></text-editor>
</el-form-item>
</el-descriptions-item>
</template>
<el-descriptions-item label="变更说明" :span="3">
<el-form-item prop="approvalRemark">
<el-input v-model="formData.approvalRemark" type="textarea" :rows="4" placeholder="请输入变更说明"></el-input>
</el-form-item>
</el-descriptions-item>
</el-descriptions>
</el-form>
<el-row justify="end" type="flex" class="mt10">
<el-button v-if="showClose" @click="$emit('close')">关 闭</el-button>
<el-button @click="doSubmit" type="primary">提 交</el-button>
</el-row>
</el-card>
`,
props: {
id: { type: String, required: true },
url: { type: String, required: true },
edit: { type: Boolean, default: false },
showClose: { type: Boolean, default: false }
},
store,
data() {
return {
formDisabled: false,
formData: {
families: [],
changeMember: null,
changeWelfareMember: null,
changeWantJoinLoveMutualAidAssociation: null,
verificationProjectId: ""
},
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"
}
],
nation: [{ required: false, message: "必填", trigger: "change" }],
political: [{ required: false, message: "必填", trigger: "change" }],
education: [{ required: false, message: "必填", trigger: "change" }],
unitName: [{ required: false, message: "必填", trigger: "change" }],
governmentPosition: [{ required: false, message: "必填", trigger: "change" }],
mobile: [
{ required: true, message: "手机号不能为空", trigger: "blur" },
{ pattern: /^1[3-9]\d{9}$/, message: "手机号格式不正确", trigger: "blur" }
],
email: [{ required: false, message: "必填", trigger: "change" }],
changeWantJoinLoveMutualAidAssociation: [{ required: false, message: "必填", trigger: "change" }],
personalData: [{ required: false, message: "必填", trigger: "change" }]
},
allowChangeFields: [],
units: [],
changeTypeOptions: []
}
},
methods: {
clickDataType(e) {
e === this.formData.changeType ? (this.formData.changeType = "") : (this.formData.changeType = e)
this.doSetMemberStatus(e)
},
doSetMemberStatus(name) {
this.$set(this.formData, "changeMember", name ? name === "RESTORE" : "")
this.$set(this.formData, "changeWelfareMember", name ? name === "RESTORE" : "")
this.$set(this.formData, "changeWantJoinLoveMutualAidAssociation", name ? name === "RESTORE" : "")
},
init() {
if (this.id) {
this.findOne(this.id, this.edit)
}
if (!this.allowChangeFields || this.allowChangeFields.length === 0) {
this.$businessTool.getDictOptions("MEMBER_ALLOW_CHANGES_FIELD").then((data) => {
this.allowChangeFields = data.map((v) => v.code)
})
}
if (this.$auth.hasRoleOr(["SYSADMIN", "SCHOOL_UNION_ADMIN"])) {
this.$businessTool.listUnit().then((data) => {
this.units = data
})
} else {
this.$businessTool.listUnit(this.$store.state.user.union.id).then((data) => {
this.units = data
})
}
this.$businessTool.getDictOptions("MEMBER_CHANGE_TYPE").then((data) => {
this.changeTypeOptions = data
})
},
assignmentFormData(data) {
const source = data
// 特定字段的默认值映射
const defaultValues = {
families: []
}
const setField = (key) => {
// 检查字段是否在 defaultValues 映射中,如果在,则使用其默认值,否则从 source 获取值
const value = defaultValues.hasOwnProperty(key) ? defaultValues[key] : source[key]
this.$set(this.formData, key, value)
}
// 遍历表单项并设置值
this.$refs.formRef.fields.forEach((formItem) => {
setField(formItem.prop)
})
this.$set(this.formData, "loginname", data.loginname)
this.$set(this.formData, "userId", data.id)
},
findOne(id, isEdit) {
this.$axios.post("/platform/member/apply/submit/findOne", { id: id, isEdit: isEdit }).then((res) => {
if (res.code === 0) {
this.assignmentFormData(res.data)
}
})
},
allowFields(prop) {
return !this.allowChangeFields.includes(prop)
},
getUnionName(unitId) {
const data = this.units.find((v) => v.id === unitId)
this.$set(this.formData, "unionName", data.unionName)
},
doSubmit() {
//是否确认提交?
this.$confirm("是否确认提交?提交后将进入审核流程,请仔细核对变更数据是否准确!", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
}).then(() => {
this.setSubmitUserMemberStatus()
if (this.edit) {
this.formData.edit = this.edit
this.formData.id = this.id
}
this.$axios
.post(this.url, {
record: JSON.stringify(this.formData),
approvalRemark: this.formData.approvalRemark
})
.then((res) => {
if (res.code === 0) {
this.$message.success(res.msg)
this.$emit("submit-ready", null)
}
})
})
},
setSubmitUserMemberStatus() {
if (this.formData.changeType) {
this.formData.member = this.formData.changeMember
this.formData.welfareMember = this.formData.changeWelfareMember
}
},
verificationInit(data) {
this.allowChangeFields = data.renewFields
this.$set(this.formData, "changeOrigin", data.changeOrigin)
this.$set(this.formData, "verificationProjectId", data.verificationProjectId)
this.init()
}
},
created() {}
}
@@ -1,112 +0,0 @@
const MEMBER_CHANGE_INFO = {
template: /*language=html*/ `
<el-card shadow="never">
<div>
<div class="process-title">
当前信息
</div>
<el-descriptions :column="3" border class="descriptions-form">
<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.userState }}</el-descriptions-item>
<template v-if="viewData.retireDate">
<el-descriptions-item label="退休时间">{{ $moment(viewData.retireDate).format('YYYY-MM-DD') }}</el-descriptions-item>
<el-descriptions-item label="人员类型">{{ viewData.personType }}</el-descriptions-item>
</template>
<template>
<el-descriptions-item label="人员类型">{{ viewData.personType }}</el-descriptions-item>
<el-descriptions-item></el-descriptions-item>
</template>
<el-descriptions-item label="学历">{{ viewData.education }}</el-descriptions-item>
<el-descriptions-item label="政治面貌">{{ viewData.political }}</el-descriptions-item>
<el-descriptions-item label="婚姻状况">{{ viewData.marriage || '' }}</el-descriptions-item>
<el-descriptions-item label="证件号码" span="2">{{ 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.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">
<template slot="label">工作部门(学院)及岗位</template>
<div class="text-left">
{{ viewData.unionName + '-' + viewData.unitName + ( viewData.governmentPosition ? ( '(' + viewData.governmentPosition + ')' ) : '' ) }}
</div>
</el-descriptions-item>
</el-descriptions>
</div>
<div style="margin-top: 20px">
<div class="process-title">
变更信息
</div>
<el-tabs tab-position="left" style="height: 300px;" v-model="activeName">
<el-tab-pane :key="item.changeTime" v-for="(item, index) in viewList"
:name="item.changeTime">
<span slot="label" style="display: flex; align-items: center;" v-html="formattedTitle(item.title)">
<i class="el-icon-date"></i>
</span>
<div style="padding: 0 30px;display: flex;justify-content: flex-start;align-content: center" v-if="item.remark">
<div>
<h5 style="color: var(--color-primary);font-weight: bolder">变更/审核说明:</h5>
</div>
<div style="margin-top: 5px">
<span>{{ item.remark }}</span>
</div>
</div>
<el-table v-if="item.changeList && item.changeList.length > 0" ref="changeTable" :data="item.changeList" row-key="id"
style="width: 95%;margin-left: 20px" border>
<el-table-column label="序号" type="index" width="50"></el-table-column>
<el-table-column label="变更字段" prop="name"></el-table-column>
<el-table-column label="原数据" prop="newValue">
<template slot-scope="scope">
<div v-html="scope.row.newValue"></div>
</template>
</el-table-column>
<el-table-column label="新数据" prop="value">
<template slot-scope="scope">
<div v-html="scope.row.value"></div>
</template>
</el-table-column>
</el-table>
<el-empty v-else :image-size="50" description="未获取到变更信息"></el-empty>
</el-tab-pane>
</el-tabs>
</div>
</el-card>
`,
data() {
return {
viewList: [],
activeName: "",
viewData: {}
}
},
methods: {
formattedTitle(title) {
const datePattern = /\(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\)/
return title.replace(datePattern, '<span style="display: block;">$&</span>')
},
onOpen(id, changeTime) {
if (!id) {
return
}
this.$axios.post(loc() + "/getChangeInfoByUserId", { userId: id }).then((res) => {
if (res.code === 0) {
this.viewList = res.data.sort((a, b) => new Date(b.title) - new Date(a.title))
this.activeName = changeTime || (this.viewList && this.viewList.length > 0 ? this.viewList[0].changeTime : "")
this.findUserInfo(id)
}
})
},
findUserInfo(id) {
this.$axios.post("/platform/member/apply/common/findOne", { id }).then((res) => {
if (res.code === 0) {
this.viewData = res.data
}
})
}
}
}
@@ -17,9 +17,9 @@
<el-descriptions-item label="入党时间">{{ viewData.joinPartyDate ? $moment(viewData.joinPartyDate).format('YYYY-MM-DD') : null }}</el-descriptions-item>
<el-descriptions-item label="来校时间">{{ viewData.arrivalAtSchoolDate ? $moment(viewData.arrivalAtSchoolDate).format('YYYY-MM-DD') : null}}</el-descriptions-item>
<el-descriptions-item label="身份类别">{{ viewData.identityType }}</el-descriptions-item>
<el-descriptions-item label="在职状态">{{ viewData.userState }}</el-descriptions-item>
<el-descriptions-item label="聘用方式">{{ viewData.preparedBy }}</el-descriptions-item>
<el-descriptions-item label="教职工类别">{{ viewData.personType }}</el-descriptions-item>
<el-descriptions-item label="在职状态">{{ viewData.userState }}</el-descriptions-item>
<el-descriptions-item label="预计离退休时间">{{ viewData.retireDate ?
$moment(viewData.retireDate).format('YYYY-MM-DD') : null }}
</el-descriptions-item>
@@ -1,136 +0,0 @@
const MEMBER_MANAGE_QUERY = {
template: `
<el-card shadow="never">
<search @search="doSearch">
<search-item label="姓名/工号">
<el-input placeholder="请输入内容" clearable v-model="pageForm.searchKeyword"></el-input>
</search-item>
<search-item label="所属工会">
<el-select @change="flushUnits" @clear="flushUnits" clearable filterable
placeholder="所属工会" style="width: 100%;" v-model="pageForm.unionId">
<el-option :key="item.id" :label="item.name" :value="item.id"
v-for="item in unions"></el-option>
</el-select>
</search-item>
<search-item label="所属单位">
<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>
</search-item>
<search-item label="性别">
<dict-select v-model="pageForm.sex" placeholder="性别" @change="doSearch"
code="USER_SEX"></dict-select>
</search-item>
<search-item label="在职状态">
<dict-select v-model="pageForm.userState" placeholder="在职状态" @change="doSearch"
code="USER_STATE"></dict-select>
</search-item>
<search-item label="聘用方式">
<dict-select v-model="pageForm.preparedBy" placeholder="聘用方式" @change="doSearch"
code="USER_PREPARED_BY_TYPE"></dict-select>
</search-item>
<search-item label="人员类型">
<dict-select v-model="pageForm.personType" placeholder="人员类型" @change="doSearch"
code="USER_PERSON_TYPE"></dict-select>
</search-item>
<search-item label="更新日期">
<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>
</search-item>
</search>
</el-card>
`,
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: {
unionId: null,
unitId: null,
sex: null,
searchKeyword: null,
changed: 2,
isMember: 1,
isWelfareMember: null,
changeTypes: []
},
unions: [],
units: []
}
},
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()
},
async initData() {
if (this.$auth.hasRoleOr(["SYSADMIN", "SCHOOL_UNION_ADMIN"])) {
this.unions = await this.$businessTool.listUnion(this.pageForm.unionId)
this.units = await this.$businessTool.listUnit()
} else {
this.unions = await this.$businessTool.listUnion(this.$store.state.user.union.id)
this.units = await this.$businessTool.listUnit(this.$store.state.user.union.id)
}
// this.$businessTool.getDictOptions("MEMBER_CHANGE_TYPE").then((data) => {
// this.changeTypes = data
// })
this.doSearch()
},
async flushUnits() {
this.$set(this.pageForm, "unitId", null)
this.units = []
if (this.pageForm.unionId) {
this.$businessTool.listUnit(this.pageForm.unionId).then((data) => {
this.units = data
})
}
},
doSearch() {
this.$emit("query-ready", this.pageForm)
}
},
created() {
this.initData()
}
}
@@ -1,339 +0,0 @@
<!--#include("../change/memberChangeInfo.js"){}#-->
const MEMBER_MANAGE_TABLE = {
template: /*language=HTML*/ `
<div>
<el-card shadow="never" class="mt10">
<table-tool label="人员列表">
<span class="text-danger">会员:</span>
<el-radio-group @change="doSearch" class="mr5" size="small" v-model="pageForm.isMember">
<el-radio-button :label="null">全部</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 @change="doSearch" class="mr5" size="small" v-model="pageForm.isWelfareMember">-->
<!-- <el-radio-button :label="null">全部</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 @change="doSearch" class="mr5" size="small"
v-model="pageForm.changed">
<el-radio-button :label="2">全部</el-radio-button>
<el-radio-button :label="1">异动</el-radio-button>
<el-radio-button :label="0">未异动</el-radio-button>
</el-radio-group>
<!--<div v-if="pageForm.changed == '1'" class="div-enum">
<dict-select v-model="pageForm.USER_CHANGE_TYPE" placeholder="异动类型" @change="doSearch"
code="UserType"></dict-select>
</div>-->
<!--<el-button @click="addMember" type="primary" size="small">新增会员</el-button>-->
<el-button type="primary" size="small" icon="el-icon-printer" @click="exportExcel">导出会员名单
</el-button>
<el-button type="primary" size="small" icon="el-icon-printer" @click="exportNotEqPhoneExcel" v-if="$auth.hasRoleOr('SYSADMIN,SCHOOL_UNION_ADMIN')">导出会员福利号码不一致名单
</el-button>
</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"
align="center" 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.id)" type="primary">{{row.loginname}}</el-link>
</template>
</el-table-column>
<el-table-column header-align="center" label="异动信息">
<el-table-column align="center" header-align="center" label="更新时间"
min-width="145px" prop="changeTime"
show-overflow-tooltip sortable>
</el-table-column>
<el-table-column align="center" header-align="center" label="异动类型"
prop="changeType" show-overflow-tooltip sortable>
<template scope="{row}">
<span style="color: #0e78c5;cursor: pointer" @click="openUserChangeInfo(row)">
{{getChangeTypes(row.changeTypes)}}
</span>
</template>
</el-table-column>
</el-table-column>
<el-table-column v-if="$auth.hasRole('BRANCH_UNION_CHAIRMAN')" header-align="center"
label="审核状态"
prop="auditState">
</el-table-column>
<el-table-column align="center" header-align="center" label="会员" prop="member"
show-overflow-tooltip sortable>
<template scope="{row}">
<span class="text-success" v-if="row.member==1">
<i class="fa fa-circle ml5"></i> 是
</span>
<span class="text-danger" v-else>
<i class="fa fa-circle ml5"></i> 否
</span>
</template>
</el-table-column>
<!-- <el-table-column align="center" header-align="center" label="福利会员" prop="member"-->
<!-- show-overflow-tooltip sortable>-->
<!-- <template scope="{row}">-->
<!-- <span class="text-success" v-if="row.welfareMember==1">-->
<!-- <i class="fa fa-circle ml5"></i> 是-->
<!-- </span>-->
<!-- <span class="text-danger" v-else>-->
<!-- <i class="fa fa-circle ml5"></i> 否-->
<!-- </span>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!--<el-table-column align="center" header-align="center" label="劳模" prop="member"
show-overflow-tooltip sortable>
<template scope="{row}">
<span class="text-success " v-if="row.isModelWorker==1">
<i class="fa fa-circle ml5"></i> 是
</span>
<span class="text-danger" v-else>
<i class="fa fa-circle ml5"></i> 否
</span>
</template>
</el-table-column>-->
<el-table-column align="center" header-align="center" label="操作"
prop="userOnline"
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 :command="{type:'view',data:row}">
查看
</el-dropdown-item>
<el-dropdown-item
:command="{type:'change',data:row}"
v-if="$auth.hasRoleOr(['SYSADMIN','SCHOOL_UNION_ADMIN','BRANCH_UNION_CHAIRMAN','BRANCH_UNION_CHAIRMAN'])">
变更
</el-dropdown-item>
<el-dropdown-item
:command="{type:'changeWelfareMobile',data:row}"
v-if="$auth.hasRoleOr(['SYSADMIN','SCHOOL_UNION_ADMIN','BRANCH_UNION_CHAIRMAN','BRANCH_UNION_CHAIRMAN'])">
修改福利号码
</el-dropdown-item>
<!--<el-dropdown-item
:command="{type:'setModelWorker',data:row}"
v-if="$auth.hasRoleOr(['SYSADMIN','SCHOOL_UNION_ADMIN','BRANCH_UNION_CHAIRMAN','BRANCH_UNION_CHAIRMAN']) && !row.isModelWorker">
设为劳模
</el-dropdown-item>
<el-dropdown-item
:command="{type:'cancelModelWorker',data:row}"
v-if="$auth.hasRoleOr(['SYSADMIN','SCHOOL_UNION_ADMIN','BRANCH_UNION_CHAIRMAN','BRANCH_UNION_CHAIRMAN']) && row.isModelWorker">
取消劳模
</el-dropdown-item>-->
</el-dropdown-menu>
</el-dropdown>
</template>
</el-table-column>
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
<el-dialog title="变更信息" :visible.sync="changeInfoVisible" width="70%">
<member-change-info ref="memberChangeInfoRef"></member-change-info>
</el-dialog>
<el-dialog title="修改福利号码" :visible.sync="changeWelfareMobileVisible" append-to-body width="30%">
<el-form :model="welfareFormData" label-width="80px">
<el-form-item label="姓名">
<el-input :value="welfareFormData.username" disabled></el-input>
</el-form-item>
<el-form-item label="工号">
<el-input :value="welfareFormData.loginname" disabled></el-input>
</el-form-item>
<el-form-item label="手机号">
<el-input :value="welfareFormData.mobile" disabled></el-input>
</el-form-item>
<el-form-item label="福利号码" prop="welfareMobile"
:rules="[
{required: true, message: '请输入福利号码', trigger: 'blur'},
{
pattern: /^1[3-9]\\d{9}$/,
message: '请输入有效的手机号码',
trigger: 'blur'
}]">
<el-input v-model="welfareFormData.welfareMobile"></el-input>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="changeWelfareMobileVisible = false">取消</el-button>
<el-button type="primary" @click="changeWelfareMobile">确定</el-button>
</div>
</el-dialog>
</div>
`,
mixins: [initTableMixins],
components: {
"member-change-info": MEMBER_CHANGE_INFO
},
data() {
return {
changeTypeData: [],
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: "preparedBy", label: "聘用方式", sortable: true },
{ prop: "postDoctoralJoinDate", label: "进站时间", sortable: true },
{ prop: "personType", label: "人员类型", sortable: true },
{ prop: "unionName", label: "所属工会", sortable: true },
{ prop: "unitName", label: "所属单位", sortable: true }
],
changeInfoVisible: false,
userId: "",
pageForm: {
isMember: 1,
changed: 2
},
changeWelfareMobileVisible: false,
welfareFormData: {}
}
},
methods: {
dropdownCommand(command) {
const { type, data } = command
if (type === "view") {
this.openView(data.id)
} else if (type === "change") {
this.openChange(data)
} else if (type === "setModelWorker") {
this.setModelWorker(data.id)
} else if (type === "cancelModelWorker") {
this.cancelModelWorker(data.id)
} else if (type === "changeWelfareMobile") {
this.welfareFormData = {
id: data.id,
username: data.username,
loginname: data.loginname,
mobile: data.mobile,
welfareMobile: data.welfareMobile
}
this.changeWelfareMobileVisible = true
}
},
changeWelfareMobile() {
this.$confirm("确定要将" + this.welfareFormData.username + "的福利号码修改为:" + this.welfareFormData.welfareMobile + "吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
})
.then(() => {
this.$axios.post("/platform/member/branchUnion/manage/list/changeWelfareMobile", this.welfareFormData).then((res) => {
if (res.code === 0) {
this.$message.success(res.msg)
this.$emit("refresh-table")
this.changeWelfareMobileVisible = false
}
})
})
},
setModelWorker(userId) {
this.$confirm("确定要将此教工设置为劳模吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
})
.then(() => {
this.$axios.post("/platform/member/modelWorker/manage/setModelWorker", { userId: userId }).then((res) => {
if (res.code === 0) {
this.$message.success(res.msg)
this.$emit("refresh-table")
} else {
this.$message.error(res.msg)
}
})
})
},
cancelModelWorker(userId) {
this.$confirm("确定要取消此教工的劳模身份码?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning"
})
.then(() => {
this.$axios.post("/platform/member/modelWorker/manage/cancelModelWorker", { userIds: JSON.stringify([userId]) })
.then((res) => {
if (res.code === 0) {
this.$message.success(res.msg)
this.$emit("refresh-table")
} else {
this.$message.error(res.msg)
}
})
})
},
openChange(data) {
this.$emit("change-member", { id: data.id, username: data.username })
},
openView(id) {
this.$emit("view-member", id)
},
addMember() {
this.$emit("add-member")
},
openUserChangeInfo(row) {
this.changeInfoVisible = true
this.$nextTick(() => {
this.$refs.memberChangeInfoRef.onOpen(row.id, null)
})
},
getChangeTypes(changeTypes) {
if (changeTypes) {
const c = JSON.parse(changeTypes)
return c
.map((v) => {
return this.changeTypeData.find((item) => item.code === v).name
})
.join(",")
}
return null
},
pageData() {
this.$axios.post(loc() + "/pageData", this.pageForm).then((res) => {
if (res.code === 0) {
this.tableData = res.data.list
this.pageForm.totalCount = res.data.totalCount
this.$emit("refresh", this.pageForm)
}
})
},
exportExcel() {
const pageForm = clone(this.pageForm)
this.$downLoad(loc() + "/doExport", pageForm)
},
exportNotEqPhoneExcel(){
const pageForm = clone(this.pageForm)
this.$downLoad(loc() + "/doExportNotEqPhone", pageForm)
}
},
created() {
this.$businessTool.getAllDictOptions("MEMBER_CHANGE_TYPE").then((res) => {
this.changeTypeData = res
})
}
}
@@ -1,143 +0,0 @@
const MEMBER_RECORD = {
template: `
<div>
<el-card shadow="never">
<search @search="doSearch">
<search-item label="姓名/工号">
<el-input placeholder="请输入内容" clearable v-model="pageForm.searchKeyword"></el-input>
</search-item>
<search-item label="所属工会">
<el-select @change="flushUnits" @clear="flushUnits" clearable filterable
placeholder="所属工会" style="width: 100%;" v-model="pageForm.unionId">
<el-option :key="item.id" :label="item.name" :value="item.id"
v-for="item in unions"></el-option>
</el-select>
</search-item>
<search-item label="所属单位">
<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>
</search-item>
<search-item label="在职状态">
<dict-select v-model="pageForm.userState" placeholder="在职状态" @change="doSearch"
code="USER_STATE"></dict-select>
</search-item>
<search-item label="人员类型">
<dict-select v-model="pageForm.personType" placeholder="人员类型" @change="doSearch"
code="PERSON_TYPE"></dict-select>
</search-item>
<search-item label="聘用方式">
<dict-select v-model="pageForm.preparedBy" placeholder="聘用方式" @change="doSearch"
code="PREPARED_BY"></dict-select>
</search-item>
<search-item label="变更类型">
<dict-select v-model="pageForm.changeType" placeholder="变更类型" @change="doSearch"
code="MEMBER_CHANGE_TYPE"></dict-select>
</search-item>
</search>
</el-card>
<el-card shadow="never">
<table-tool label="变更列表"></table-tool>
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder"
class="vi-table" 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"
align="center" 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.userId)" type="primary">{{row.loginname}}</el-link>
</template>
</el-table-column>
<el-table-column header-align="center" label="异动信息">
<el-table-column align="center" header-align="center" label="更新时间"
min-width="145px" prop="changeTime"
show-overflow-tooltip sortable>
</el-table-column>
<el-table-column align="center" header-align="center" label="异动类型"
prop="changeType" show-overflow-tooltip sortable>
<template scope="{row}">
<span style="color: var(--color-primary);cursor: pointer" @click="openUserChangeInfo(row)">
{{getChangeTypes(row.changeTypes)}}
</span>
</template>
</el-table-column>
</el-table-column>
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
</div>
`,
mixins: [initTableMixins],
data() {
return {
userId: "",
recordId: "",
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: "unionName", label: "所属工会", sortable: true },
{ prop: "unitName", label: "所属单位", sortable: true },
{ prop: "remark", label: "变更说明", sortable: true }
],
unions: [],
units: [],
changeTypeData: [],
changeInfoVisible: false,
changeTime: ""
}
},
methods: {
openUserChangeInfo(row) {
this.$emit("open-change-info", row)
},
getChangeTypes(changeTypes) {
if (changeTypes) {
const c = JSON.parse(changeTypes)
if (!c || c.length === 0 || !this.changeTypeData || this.changeTypeData.length === 0) return null
return c
.map((v) => {
return this.changeTypeData.find((item) => item.code === v).name
})
.join(",")
}
return null
},
openView(userId) {
this.$emit("open-view", userId)
},
async initData() {
if (this.$auth.hasRoleOr(["SYSADMIN", "SCHOOL_UNION_ADMIN"])) {
this.unions = await this.$businessTool.listUnion(this.pageForm.unionId)
this.units = await this.$businessTool.listUnit()
} else {
this.unions = await this.$businessTool.listUnion(this.$store.state.user.union.id)
this.units = await this.$businessTool.listUnit(this.$store.state.user.union.id)
}
this.pageData()
},
async flushUnits() {
this.$set(this.pageForm, "unitId", null)
this.units = []
if (this.pageForm.unionId) {
this.$businessTool.listUnit(this.pageForm.unionId).then((data) => {
this.units = data
})
}
}
},
created() {
this.pageData()
this.$businessTool.getAllDictOptions("MEMBER_CHANGE_TYPE").then((res) => {
this.changeTypeData = res
})
}
}
@@ -1,236 +0,0 @@
<!--#
layout("/layouts/platform.html"){
#-->
<div id="app" v-cloak>
<guava ref="guava">
<el-card shadow="never">
<search @search="doSearch">
<search-item label="姓名/工号">
<el-input placeholder="请输入内容" clearable v-model="pageForm.searchKeyword"></el-input>
</search-item>
<search-item label="所属工会">
<el-select @change="flushUnits" @clear="flushUnits" clearable filterable
placeholder="所属工会" style="width: 100%;" v-model="pageForm.unionId">
<el-option :key="item.id" :label="item.name" :value="item.id"
v-for="item in unions"></el-option>
</el-select>
</search-item>
<search-item label="所属单位">
<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>
</search-item>
<search-item label="在职状态">
<dict-select v-model="pageForm.userState" placeholder="在职状态" @change="doSearch"
code="USER_STATE"></dict-select>
</search-item>
<search-item label="人员类型">
<dict-select v-model="pageForm.personType" placeholder="人员类型" @change="doSearch"
code="PERSON_TYPE"></dict-select>
</search-item>
</search>
</el-card>
<el-card shadow="never">
<table-tool label="劳模列表">
<el-select v-model="pageForm.memberState" placeholder="会员筛选" clearable
style="width: 120px" @change="doSearch" class="mr10" size="small">
<el-option label="全部会员" value="all"></el-option>
<el-option label="会员" value="true"></el-option>
<el-option label="非会员" value="false"></el-option>
</el-select>
<el-select v-model="pageForm.welfareMemberState" placeholder="福利会员筛选" clearable
style="width: 120px" @change="doSearch" class="mr10" size="small">
<el-option label="全部福利会员" value="all"></el-option>
<el-option label="福利会员" value="true"></el-option>
<el-option label="非福利会员" value="false"></el-option>
</el-select>
<el-button size="small" @click="batchDelete" type="danger">
批量取消劳模
</el-button>
<!--<el-button size="small" @click="openImport" type="primary">
导入
</el-button>-->
<el-button size="small" @click="doExport" type="primary">
导出
</el-button>
</table-tool>
<el-table ref="table" :data="tableData" style="width: 100%" row-key="id" @sort-change="pageOrder"
:size="tableSize" @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
:label="column.label"
:prop="column.prop"
:sortable="column.sortable"
>
<template v-if="column.prop==='member'" 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>
<template v-else-if="column.prop==='welfareMember'" scope="{row}">
<span v-if="row.welfareMember==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 prop="userOnline" align="center" header-align="center"
label="操作"
width="180px">
<template scope="{row}">
<el-button size="mini" type="primary" @click="openView(row.id)">查看</el-button>
<el-button size="mini" type="danger" @click="doDelete(row.id)">取消劳模</el-button>
</template>
</el-table-column>
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
<template #view>
<member-info ref="memberInfoRef" :id="userId"></member-info>
</template>
</guava>
</div>
<script>
<!--#include("../../common/info/memberInfo.js"){}#-->
new Vue({
el: '#app',
mixins: [initTableMixins],
data: {
pageForm: {
searchKeyword: '',
unionId: '',
unitId: '',
threeUnitId: '',
unionGroupId: '',
personType: '',
userState: '',
memberState: '',
welfareMemberState: ''
},
unions: [],
units: [],
tableColumns: [
{prop: 'loginname', label: '工号'},
{prop: 'username', label: '姓名'},
{prop: 'sex', label: '性别'},
{prop: 'mobile', label: '联系电话'},
{prop: 'personType', label: '人员类型'},
{prop: 'userState', label: '在职状态'},
{prop: 'unionName', label: '所属工会'},
{prop: 'unitName', label: '所属单位'},
{prop: 'member', label: '是否会员'},
{prop: 'welfareMember', label: '是否福利员'},
],
checkUsers: [],
userId: '',
},
components: {
"member-info": MEMBER_INFO,
},
methods: {
openView(userId) {
this.userId = userId
this.$refs.guava.view()
this.$nextTick(() => {
this.$refs.memberInfoRef.findOne()
})
},
openImport() {
},
doExport() {
this.$downLoad('/platform/member/modelWorker/manage/doExport', this.pageForm)
},
tableHandleSelectionChange(val) {
this.checkUsers = val;
},
batchDelete() {
if (!this.checkUsers.length) {
this.$message.warning("请先勾选需要取消劳模身份的数据!")
return
}
this.$confirm('您确定要取消这些教工的劳模身份吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
const userIds = this.checkUsers.map(obj => obj.id);
this.$axios.post('/platform/member/modelWorker/manage/cancelModelWorker', {userIds: JSON.stringify(userIds)} )
.then((res) => {
if (res.code === 0) {
this.pageData()
this.$refs.table.clearSelection();
this.$message.success(res.msg)
} else {
this.$message.error(res.msg)
}
})
})
},
doDelete(userId) {
this.$confirm('您确定要取消该教工的劳模身份吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.checkUsers = []
this.checkUsers.push(userId)
this.$axios.post('/platform/member/modelWorker/manage/cancelModelWorker', {userIds: JSON.stringify(this.checkUsers)})
.then((res) => {
if (res.code === 0) {
this.pageData()
this.$message.success(res.msg)
} else {
this.$message.error(res.msg)
}
})
})
},
initData() {
const resp = this.$auth.hasRoleOr(["SYSADMIN", "SCHOOL_UNION_ADMIN"]) ? this.pageForm.unionId : this.$store.state.user.union.id
this.$businessTool.listUnion(resp).then(data => {
this.unions = data
})
this.pageData()
},
flushUnits() {
this.$set(this.pageForm, "unitId", null)
this.units = []
if (this.pageForm.unionId) {
this.$businessTool.listUnit(this.pageForm.unionId).then(data => {
this.units = data
})
}
}
},
created() {
this.initData()
}
})
</script>
<!--#
}
#-->
@@ -1,104 +0,0 @@
<!--#
layout("/layouts/platform.html"){
#-->
<div id="app" v-cloak>
<guava ref="guava">
<member-audit-table ref="tableRef" @open-change-view="openChangeInfo" @open-approval="openApproval"
@open-view="openView"></member-audit-table>
<template #view>
<member-info ref="memberInfoRef"></member-info>
</template>
<template #public>
<member-audit-change-info ref="memberAuditChangeInfoViewRef"></member-audit-change-info>
<div v-if="showApprovalForm">
<el-form :model="formData" ref="approvalFormRef" label-position="left" label-width="80px">
<el-form-item label="审核意见" prop="approvalOpinion" :rules="[{required:true,message:'必填',trigger:['change','blur']}]">
<user-opinion-textarea v-model="formData.approvalOpinion"></user-opinion-textarea>
</el-form-item>
<el-form-item label="审核说明" prop="approvalRemark">
<el-input v-model="formData.approvalRemark" type="textarea" :rows="4" placeholder="请输入审核说明"></el-input>
</el-form-item>
<el-form-item label="电子签名" prop="approvalSignature" :rules="[{required:false,message:'必填',trigger:['change','blur']}]">
<pc-signature v-model="formData.approvalSignature"></pc-signature>
</el-form-item>
</el-form>
<el-row type="flex" justify="end">
<el-button plain @click="$refs.guava.index()">取消</el-button>
<el-button type="danger" @click="doApproval('BACK')">退回重新填写</el-button>
<el-button type="danger" @click="doApproval('REJECT')">拒绝</el-button>
<el-button type="primary" @click="doApproval('PASS')">同意</el-button>
</el-row>
</div>
</template>
</guava>
</div>
<script>
<!--#include("../../common/audit/memberAuditTable.js"){}#-->
<!--#include("../../common/audit/memberAuditRecord.js"){}#-->
<!--#include("../../common/audit/memberAuditChangeInfo.js"){}#-->
<!--#include("../../common/info/memberInfo.js"){}#-->
new Vue({
el: "#app",
store,
mixins: [initTableMixins],
data: {
showApprovalForm: false,
},
components: {
"member-audit-table": MEMBER_AUDIT_TABLE,
"member-audit-record": MEMBER_AUDIT_RECORD,
"member-audit-change-info": MEMBER_AUDIT_CHANGE_INFO,
"member-info": MEMBER_INFO,
},
methods: {
doApproval(approvalType) {
this.formData.bpmTaskApprovalType = approvalType
this.$refs.approvalFormRef.validate((valid) => {
if (valid) {
this.$axios
.post(loc() + "/approval", {
approval: JSON.stringify(this.formData)
})
.then((res) => {
if (res.code === 0) {
this.$refs.guava.index()
this.$message.success(res.msg)
this.doSearch()
}
})
}
})
},
openApproval(data) {
this.$refs.guava.public(() => {
this.showApprovalForm = true
this.formData = data.approvalParam
this.$refs.memberAuditChangeInfoViewRef.onOpen({recordId: data.id, userId: data.userId})
})
},
openView(userId){
this.$refs.guava.view(() => {
this.$refs.memberInfoRef.onOpen(userId)
})
},
openChangeInfo(data){
this.$refs.guava.public(() => {
this.showApprovalForm = false
this.$refs.memberAuditChangeInfoViewRef.onOpen({recordId: data.id, userId: data.userId})
})
},
doSearch() {
this.$refs.tableRef.doSearch()
},
}
});
</script>
<!--#
}
#-->
@@ -1,93 +0,0 @@
<!--#
layout("/layouts/platform.html"){
#-->
<div id="app" v-cloak>
<guava ref="guava">
<member-manage-query ref="queryRef" @query-ready="onQueryReady"></member-manage-query>
<member-manage-table ref="tableRef" v-if="isQueryReady" @refresh="tableReady" @change-member="changeMember"
@view-member="viewMember" @add-member="addMember" @refresh-table="changeSuccess"></member-manage-table>
<template #view>
<member-info ref="memberInfoRef"></member-info>
</template>
<template #edit>
<member-apply :admin-operate="true"></member-apply>
</template>
<template #public>
<member-change :id="id" :url="url" ref="memberChangeRef"
@submit-ready="changeSuccess"></member-change>
</template>
</guava>
</div>
<script>
<!--#include("../../common/manage/memberManageQuery.js"){}#-->
<!--#include("../../common/manage/memberManageTable.js"){}#-->
<!--#include("../../common/info/memberInfo.js"){}#-->
<!--#include("../../common/apply/memberApply.js"){}#-->
<!--#include("../../common/change/memberChange.js"){}#-->
const vue = new Vue({
el: "#app",
store,
mixins: [initTableMixins],
data: {
id: '',
url:'',
username: '',
isQueryReady: false,
hasShownMessage: false
},
components: {
"member-manage-query": MEMBER_MANAGE_QUERY,
"member-manage-table": MEMBER_MANAGE_TABLE,
"member-info": MEMBER_INFO,
"member-apply": MEMBER_APPLY,
"member-change": MEMBER_CHANGE,
},
methods: {
changeMember(data){
this.id = data.id
this.url = '/platform/member/schoolUnion/manage/list/generalMemberChange'
this.$refs.guava.public()
this.$nextTick(()=>{
this.$refs.memberChangeRef.init()
})
},
viewMember(val){
this.$refs.guava.view(() => {
this.$refs.memberInfoRef.onOpen(val)
})
},
addMember(){
this.$refs.guava.edit()
},
onQueryReady(pageForm) {
this.isQueryReady = true;
this.$nextTick(() => {
if (this.$refs.tableRef) {
this.$refs.tableRef.pageForm = pageForm
this.$refs.tableRef.pageData();
}
})
},
tableReady(pageForm){
this.$refs.queryRef.pageForm = pageForm
},
changeSuccess(){
this.$refs.guava.index(() => {
this.$refs.tableRef.pageData()
})
}
},
created() {
}
})
</script>
<!--#
}
#-->
@@ -1,51 +0,0 @@
<!--#
layout("/layouts/platform.html"){
#-->
<div id="app" v-cloak>
<guava ref="guava">
<template>
<member-record @open-view="openView" @open-change-info="openChangeInfo"></member-record>
</template>
<template #view>
<member-info ref="memberInfoRef"></member-info>
</template>
<template #public>
<member-audit-change-info ref="memberAuditChangeInfoRef" is_default_url></member-audit-change-info>
</template>
</guava>
</div>
<script>
<!--#include("../../common/record/memberRecord.js"){}#-->
<!--#include("../../common/info/memberInfo.js"){}#-->
<!--#include("../../common/audit/memberAuditChangeInfo.js"){}#-->
new Vue({
el: "#app",
mixins: [initTableMixins],
store,
components: {
"member-record": MEMBER_RECORD,
"member-info": MEMBER_INFO,
"member-audit-change-info": MEMBER_AUDIT_CHANGE_INFO
},
data: {
userId: ''
},
methods: {
openChangeInfo(row) {
this.$refs.guava.public(() => {
this.$refs.memberAuditChangeInfoRef.onOpen({recordId: row.id, userId: row.userId})
})
},
openView(data) {
this.$refs.guava.view(() => {
this.$refs.memberInfoRef.onOpen(data)
})
}
}
})
</script>
<!--#
}
#-->
@@ -1,7 +1,240 @@
const MEMBER_STATISTICS_COMPREHENSIVE_QUERY_FORM = {
template: /*language=HTML*/ `
<el-card shadow="never">
<search @search="doSearch">
<el-row type="flex" align="middle" class="query-row">
<el-col class="query-row-title">年&emsp;&emsp;度:</el-col>
<el-col class="query-row-content" :span="12">
<el-row style="margin-left: 3px">
<el-date-picker @change="doSearch()"
style="width: 85%"
: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="setNowYear();doSearch()">
本年
</el-link>
</el-row>
</el-col>
<el-col class="query-row-title">姓名/工号:</el-col>
<el-col class="query-row-content" :span="12">
<el-row style="width: 92%">
<el-input placeholder="请输入内容" clearable v-model="pageForm.searchKeyword"></el-input>
</el-row>
</el-col>
</el-row>
<el-row type="flex" align="middle" class="query-row">
<el-col class="query-row-content">
<el-row>
<el-col :span="12">
<span>所属工会:</span>
<el-select placeholder="所属工会" v-model="pageForm.unionId"
clearable multiple style="margin-left: 33px;width: 80%"
@change="flushUnits();doSearch()"
@clear="flushUnits();doSearch()"
filterable>
<el-option v-for="item in unions" :label="item.name"
:value="item.id"></el-option>
</el-select>
</el-col>
<el-col :span="12">
<span>所属单位:</span>
<el-select placeholder="所属单位" v-model="pageForm.unitId"
clearable multiple style="margin-left: 33px;width: 80%" filterable>
<el-option v-for="item in units" :label="item.name"
:value="item.id"></el-option>
</el-select>
</el-col>
</el-row>
</el-col>
</el-row>
<el-row class="query-row">
<el-col class="query-row-title">性别:</el-col>
<el-col class="query-row-content">
<el-tag
:effect="pageForm.sexTypes.includes(item.name)?'dark':'plain'"
:key="item.code"
:type="item.name"
@click="tagClick('sexTypes',item.name)"
style="margin-right: 10px;cursor: pointer"
v-for="item in sexTypeOptions">
{{ item.name }}
</el-tag>
</el-col>
</el-row>
<el-row type="flex" align="middle" class="query-row query-row-tag">
<el-col class="query-row-title">人员类型:</el-col>
<el-col class="query-row-content query-row-content-tag">
<el-tag
style="margin-right: 10px;cursor: pointer"
v-for="item in personTypeOptions"
:key="item.code"
:type="item.name"
:effect="pageForm.personTypes.includes(item.name)?'dark':'plain'"
@click="tagClick('personTypes',item.name)">
{{ item.name }}
</el-tag>
<el-link type="danger"
v-if="personTypeOptions.length&&pageForm.personTypes.length"
:underline="false"
@click="pageForm.personTypes=[];doSearch()">清空
</el-link>
<el-link :underline="false"
@click="pageForm.personTypes=personTypeOptions.map(p=>p.code);doSearch()"
type="success">全部
</el-link>
</el-col>
</el-row>
<el-row type="flex" align="middle" class="query-row query-row-tag">
<el-col class="query-row-title">人事编制:</el-col>
<el-col class="query-row-content query-row-content-tag">
<el-tag
style="margin-right: 10px;cursor: pointer"
v-for="item in preparedByOptions"
:key="item.code"
:type="item.name"
:effect="pageForm.preparedBys.includes(item.name)?'dark':'plain'"
@click="tagClick('preparedBys',item.name)">
{{ item.name }}
</el-tag>
<el-link type="danger"
v-if="preparedByOptions.length&&pageForm.preparedBys.length"
:underline="false"
@click="pageForm.preparedBys=[];doSearch()">清空
</el-link>
<el-link :underline="false"
@click="pageForm.preparedBys=preparedByOptions.map(p=>p.code);doSearch()"
type="success">全部
</el-link>
</el-col>
</el-row>
<el-row type="flex" align="middle" class="query-row query-row-tag">
<el-col class="query-row-title">在职状态:</el-col>
<el-col class="query-row-content query-row-content-tag">
<el-tag
style="margin-right: 10px;cursor: pointer"
v-for="item in userStateOptions"
:key="item.code"
:type="item.name"
:effect="pageForm.userStates.includes(item.name)?'dark':'plain'"
@click="tagClick('userStates',item.name)">
{{ item.name }}
</el-tag>
<el-link type="danger"
v-if="userStateOptions.length&&pageForm.userStates.length"
:underline="false"
@click="pageForm.userStates=[];doSearch()">清空
</el-link>
<el-link :underline="false"
@click="pageForm.userStates=userStateOptions.map(p=>p.code);doSearch()"
type="success">全部
</el-link>
</el-col>
</el-row>
<el-row class="query-row" type="flex" align="middle">
<el-col class="query-row-title">出生日期:</el-col>
<el-col class="query-row-content">
<el-date-picker
v-model="pageForm.startDate"
type="date"
@change="determineStartDate"
placeholder="选择开始日期">
</el-date-picker>
<el-date-picker
v-model="pageForm.endDate"
type="date"
@change="determineEndDate"
placeholder="选择结束日期">
</el-date-picker>
</el-col>
</el-row>
<el-row class="query-row" type="flex" align="middle">
<el-col class="query-row-title">入会日期:</el-col>
<el-col class="query-row-content">
<el-date-picker
v-model="pageForm.startJoinDate"
type="date"
@change="determineStartDate"
placeholder="选择开始日期">
</el-date-picker>
<el-date-picker
v-model="pageForm.endJoinDate"
type="date"
@change="determineEndDate"
placeholder="选择结束日期">
</el-date-picker>
</el-col>
</el-row>
<el-row class="query-row" type="flex" align="middle">
<el-col class="query-row-title">离会日期:</el-col>
<el-col class="query-row-content">
<el-date-picker
v-model="pageForm.startLeaveDate"
type="date"
@change="determineStartDate"
placeholder="选择开始日期">
</el-date-picker>
<el-date-picker
v-model="pageForm.endLeaveDate"
type="date"
@change="determineEndDate"
placeholder="选择结束日期">
</el-date-picker>
</el-col>
</el-row>
<el-row class="query-row" type="flex" align="middle">
<el-col class="query-row-title">年龄范围:</el-col>
<el-col class="query-row-content">
<el-row type="flex" style="align-items: center">
<el-col :span="15">
<el-slider
v-model="pageForm.age"
range
show-stops
:max="100">
</el-slider>
</el-col>
<el-col :span="9" class="pl20">
当前范围:{{ pageForm.age }}
</el-col>
</el-row>
</el-col>
</el-row>
<el-row type="flex" align="middle" class="query-row">
<el-col class="query-row-title">模糊查询:</el-col>
<el-col class="query-row-content">
<member-cnd @cnd="(v)=>pageForm={...pageForm,...v}"></member-cnd>
</el-col>
</el-row>
<el-row class="query-row" style="justify-content: end">
<el-checkbox v-model="pageForm.reverseSelection" label="是否反选" border
@change="doSearch"
class="reverseCheckBox"></el-checkbox>
<el-button type="danger" icon="el-icon-circle-close" @click="doReset">重置
</el-button>
<el-button type="primary" icon="el-icon-search" @click="doSearch">搜索</el-button>
</el-row>
<!--<search @search="doSearch">
<search-item label="年度">
<el-date-picker @change="doSearch"
:picker-options="pickerOptions"
@@ -53,8 +286,8 @@ const MEMBER_STATISTICS_COMPREHENSIVE_QUERY_FORM = {
</search-item>
<search-item label="性别">
<el-select v-model="pageForm.sexTypes" clearable multiple placeholder="性别">
<el-option label="男" value="男"></el-option>
<el-option label="女" value="女"></el-option>
<el-option label="男"></el-option>
<el-option label="女"></el-option>
</el-select>
</search-item>
<search-item label="人员类型">
@@ -133,7 +366,7 @@ const MEMBER_STATISTICS_COMPREHENSIVE_QUERY_FORM = {
</div>
</div>
</search-item>
</search>
</search>-->
<!-- <el-row type="flex" align="middle" class="query-row">-->
@@ -187,7 +420,6 @@ const MEMBER_STATISTICS_COMPREHENSIVE_QUERY_FORM = {
personTypeOptions: [],
preparedByOptions: [],
userStateOptions: [],
memberStatusOptions: [],
unions: [],
units: [],
sexTypeOptions: [
@@ -224,6 +456,15 @@ const MEMBER_STATISTICS_COMPREHENSIVE_QUERY_FORM = {
}
this.pageForm.endDate = this.pageForm.endDate.toLocaleDateString().replaceAll("/", "-")
},
determineStartDate() {
if (this.pageForm.endDate) {
if (Date.parse(this.pageForm.startDate) > Date.parse(this.pageForm.endDate)) {
this.pageForm.startDate = ""
this.$notify.warning("开始时间不能大于结束时间")
}
}
this.pageForm.startDate = this.pageForm.startDate.toLocaleDateString().replaceAll("/", "-")
},
tagClick(key, val) {
let idx = this.pageForm[key].indexOf(val)
if (idx !== -1) {
@@ -308,18 +549,15 @@ const MEMBER_STATISTICS_COMPREHENSIVE_QUERY_FORM = {
this.unions = await this.$businessTool.listUnion(this.$store.state.user.union.id)
this.units = await this.$businessTool.listUnit(this.$store.state.user.union.id)
}
this.$businessTool.getDictOptions("USER_STAFF_TYPE").then((data) => {
this.$businessTool.getDictOptions("USER_PERSON_TYPE").then((data) => {
this.personTypeOptions = data
})
this.$businessTool.getDictOptions("USER_EMPLOYMENT_TYPE").then((data) => {
this.$businessTool.getDictOptions("USER_PREPARED_BY_TYPE").then((data) => {
this.preparedByOptions = data
})
this.$businessTool.getDictOptions("USER_STATE").then((data) => {
this.userStateOptions = data
})
this.$businessTool.getAllDictOptions("MEMBER_CHANGE_TYPE").then((data) => {
this.memberStatusOptions = data
})
},
flushUnits() {
this.$set(this.pageForm, "unitId", null)
@@ -342,5 +580,54 @@ const MEMBER_STATISTICS_COMPREHENSIVE_QUERY_FORM = {
created() {
this.initData()
this.doSearch()
}
},
style: /*language=CSS*/ `
.reverseCheckBox {
margin: 0 10px 0 0 !important;
}
.query-row {
min-height: 60px;
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;
}
.query-row > .query-title {
width: 100px;
max-width: 100px;
min-width: 100px;
overflow: hidden;
}
.query-row > .query-content {
min-width: 200px;
overflow: hidden;
}
.query-row > .query-content > .el-tag {
margin-bottom: 5px;
margin-top: 5px;
}
.query-row-tag {
padding: 10px 0;
}
.query-row-content-tag {
display: flex;
flex-wrap: wrap; /* 标签自动换行 */
align-items: center;
gap: 4px 6px; /* 横纵向间距 */
}
`
}