first commit
This commit is contained in:
@@ -0,0 +1,326 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.query-row {
|
||||
height: 55px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.query-row:not(:last-child) {
|
||||
border-bottom: 1px dashed rgb(230, 230, 230);
|
||||
}
|
||||
|
||||
.query-row-title {
|
||||
width: 120px;
|
||||
}
|
||||
</style>
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<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="USER_PERSON_TYPE"></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.changeType" placeholder="变更类型" @change="doSearch"-->
|
||||
<!-- code="MEMBER_CHANGE_TYPE"></dict-select>-->
|
||||
<!-- </search-item>-->
|
||||
<search-item label="变更来源">
|
||||
<el-select clearable filterable placeholder="请选择变更来源" style="width: 100%"
|
||||
v-model="pageForm.changeOrigin">
|
||||
<el-option :key="item.name" :label="item.changeOriginName" :value="item.name"
|
||||
v-for="item in changeOriginData"></el-option>
|
||||
</el-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>
|
||||
|
||||
<el-card shadow="never" class="mt10">
|
||||
<el-row type="flex" align="middle" class="query-row">
|
||||
<el-col class="query-row-title">异动类型:</el-col>
|
||||
<el-col class="query-row-content">
|
||||
<el-tag
|
||||
style="margin-right: 10px;margin-top: 5px;cursor: pointer"
|
||||
v-for="item in changeTypeData"
|
||||
:key="item.code"
|
||||
:type="item.name"
|
||||
:effect="pageForm.changeTypes.includes(item.code)?'dark':'plain'"
|
||||
@click="tagClick('changeTypes',item.code)">
|
||||
{{ item.changeTypeName }}
|
||||
</el-tag>
|
||||
<el-link type="danger"
|
||||
v-if="changeTypeData.length && pageForm.changeTypes.length"
|
||||
:underline="false"
|
||||
@click="pageForm.changeTypes=[];doSearch()">清空
|
||||
</el-link>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" class="mt10">
|
||||
<table-tool 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"
|
||||
header-align="center"
|
||||
label="序号" type="index" width="80px"></el-table-column>
|
||||
<el-table-column :label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
:width="column.width"
|
||||
header-align="center"
|
||||
min-width="100px"
|
||||
show-overflow-tooltip
|
||||
v-for="column in tableColumns">
|
||||
<template scope="{row}" v-if="column.prop == 'loginname'">
|
||||
<el-link @click="openView(row)" type="primary">{{row.loginname}}</el-link>
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop == 'changeTypes'">
|
||||
<span style="color: #0e78c5;cursor: pointer" @click="openUserChangeInfo(row)">
|
||||
{{getChangeTypes(row.changeTypes)}}
|
||||
</span>
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop == 'changeOrigin'">
|
||||
<span style="color: #0e78c5">
|
||||
{{getChangeOrigin(row.changeOrigin)}}
|
||||
</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="130px">
|
||||
<template slot-scope="{row}">
|
||||
<el-button @click="openUserChangeInfo(row)" size="mini" type="primary">查看变更</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-all-change-info ref="memberAllChangeInfoRef"></member-all-change-info>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
<script nonce="${cspNonce!}">
|
||||
<!--#include("../../member/common/info/memberInfo.js"){}#-->
|
||||
<!--#include("../../member/change/common/memberAllChangeInfo.js"){}#-->
|
||||
|
||||
new Vue({
|
||||
el: "#app",
|
||||
mixins: [initTableMixins],
|
||||
store,
|
||||
data() {
|
||||
return{
|
||||
pickerOptions: {
|
||||
shortcuts: [
|
||||
{
|
||||
text: "最近一周",
|
||||
onClick(picker) {
|
||||
const end = new Date()
|
||||
const start = new Date()
|
||||
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7)
|
||||
picker.$emit("pick", [start, end])
|
||||
}
|
||||
},
|
||||
{
|
||||
text: "最近一个月",
|
||||
onClick(picker) {
|
||||
const end = new Date()
|
||||
const start = new Date()
|
||||
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30)
|
||||
picker.$emit("pick", [start, end])
|
||||
}
|
||||
},
|
||||
{
|
||||
text: "最近三个月",
|
||||
onClick(picker) {
|
||||
const end = new Date()
|
||||
const start = new Date()
|
||||
start.setTime(start.getTime() - 3600 * 1000 * 24 * 90)
|
||||
picker.$emit("pick", [start, end])
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
pageForm: {
|
||||
searchKeyword: "",
|
||||
unionId: "",
|
||||
unitId: "",
|
||||
userState: "",
|
||||
preparedBy: "",
|
||||
personType: "",
|
||||
changeDateRange: [],
|
||||
changeTypes: [],
|
||||
},
|
||||
tableColumns: [
|
||||
{ prop: "loginname", label: "工号", sortable: true },
|
||||
{ prop: "username", label: "姓名", sortable: true },
|
||||
{ prop: "sex", label: "性别", sortable: true, width: "100px" },
|
||||
{ prop: "userState", label: "在职状态", sortable: true },
|
||||
{ prop: "personType", label: "人员类型", sortable: true },
|
||||
// { prop: "preparedBy", label: "编制类别", sortable: true },
|
||||
{ prop: "unionName", label: "所属工会", sortable: true },
|
||||
{ prop: "unitName", label: "所属单位", sortable: true },
|
||||
{ prop: "changeTypes", label: "变更类型", sortable: true },
|
||||
{ prop: "changeOrigin", label: "变更来源", sortable: true },
|
||||
// { prop: "remark", label: "变更说明", sortable: true },
|
||||
],
|
||||
unions: [],
|
||||
units: [],
|
||||
changeOriginData: [],
|
||||
changeTypeData: [],
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'member-info': MEMBER_INFO,
|
||||
'member-all-change-info': MEMBER_ALL_CHANGE_INFO,
|
||||
},
|
||||
methods: {
|
||||
tagClick(key, val) {
|
||||
let idx = this.pageForm[key].indexOf(val)
|
||||
if (idx !== -1) {
|
||||
this.pageForm[key].splice(idx, 1)
|
||||
} else {
|
||||
this.pageForm[key].push(val)
|
||||
}
|
||||
this.pageData()
|
||||
},
|
||||
setDefaultDateRange() {
|
||||
const end = new Date(); // 当前时间
|
||||
const start = new Date();
|
||||
start.setTime(start.getTime() - 3600 * 1000 * 24 * 90); // 当前时间往前推90天
|
||||
this.$set(this.pageForm, "changeDateRange", [start, end])
|
||||
this.pageForm.changeDateBefore = start
|
||||
this.pageForm.changeDateEnd = end
|
||||
this.doSearch()
|
||||
},
|
||||
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()
|
||||
},
|
||||
// 查看当前人员信息
|
||||
openView(row) {
|
||||
this.$refs.guava.view(() => {
|
||||
return this.$refs.memberInfoRef.onOpen(row.userId)
|
||||
})
|
||||
},
|
||||
// 全部变更
|
||||
openUserChangeInfo(row) {
|
||||
this.$refs.guava.public(() => {
|
||||
return this.$refs.memberAllChangeInfoRef.onOpen(row.userId)
|
||||
})
|
||||
},
|
||||
// // 当前变更
|
||||
// openCurrentUserChangeInfo(row) {
|
||||
// this.$refs.guava.public(() => {
|
||||
// this.$refs.memberAuditChangeInfoRef.onOpen({userId:row.userId, recordId:row.id})
|
||||
// })
|
||||
// },
|
||||
getChangeTypes(changeTypes) {
|
||||
const changeTypesList = JSON.parse(changeTypes)
|
||||
if (changeTypesList) {
|
||||
if (!changeTypesList || changeTypesList.length === 0 || !this.changeTypeData || this.changeTypeData.length === 0) return null
|
||||
return changeTypesList
|
||||
.map((v) => {
|
||||
return this.changeTypeData.find((item) => item.code === v).changeTypeName
|
||||
})
|
||||
.join(",")
|
||||
}
|
||||
return null
|
||||
},
|
||||
getChangeOrigin(changeOrigin) {
|
||||
if (changeOrigin) {
|
||||
return this.changeOriginData.find((item) => item.name === changeOrigin).changeOriginName
|
||||
}
|
||||
return null
|
||||
},
|
||||
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 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.changeTypeData = await this.$businessTool.getEnumOptions("MemberChangeType")
|
||||
this.changeOriginData = await this.$businessTool.getEnumOptions("MemberChangeOrigin")
|
||||
},
|
||||
async pageData() {
|
||||
const pageForm = clone(this.pageForm)
|
||||
pageForm.changeTypes = JSON.stringify(this.pageForm.changeTypes)
|
||||
const resp = await $.post('/platform/sourcechange/manage/pageData', pageForm)
|
||||
if (resp.code === 0) {
|
||||
this.tableData = resp.data.list
|
||||
this.pageForm.totalCount = resp.data.totalCount
|
||||
} else {
|
||||
this.$message.warning(resp.msg)
|
||||
}
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
await this.initData()
|
||||
await this.setDefaultDateRange()
|
||||
},
|
||||
});
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
|
||||
@@ -0,0 +1,450 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
/* 待确认人员变更沿用原会员变更表单的字段宽度及单选框布局。 */
|
||||
.pending-member-change-form .el-descriptions-item__label {
|
||||
width: 15% !important;
|
||||
}
|
||||
|
||||
.pending-member-change-form .welfare-member-radio-group {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
flex-wrap: nowrap;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.pending-member-change-form .welfare-member-radio-group .el-radio {
|
||||
margin-right: 12px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
/* 批量按钮位于状态切换左侧,并保留少量操作间距。 */
|
||||
.pending-list-toolbar-actions {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.pending-list-toolbar-actions .pending-batch-change-button {
|
||||
margin-right: 8px;
|
||||
}
|
||||
|
||||
/* 批量变更弹窗固定在当前浏览器可视区域正中间。 */
|
||||
.el-dialog.pending-batch-change-dialog {
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
margin: 0 !important;
|
||||
transform: translate(-50%, -50%);
|
||||
}
|
||||
|
||||
/* 待确认人员列表固定占满平台内容区,页面本身不产生纵向滚动条。 */
|
||||
#app .pending-confirm-list-layout {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
min-height: 0;
|
||||
height: calc(100vh - 82px);
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
#app .pending-confirm-query-card {
|
||||
flex: 0 0 auto;
|
||||
}
|
||||
|
||||
/* 列表卡片填充剩余高度,超出数据仅在表格内部滚动。 */
|
||||
#app .pending-confirm-table-card {
|
||||
flex: 1 1 auto;
|
||||
min-height: 0;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
#app .pending-confirm-table-card > .el-card__body {
|
||||
box-sizing: border-box;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
min-height: 0;
|
||||
height: 100%;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
#app .pending-confirm-table-card .ele-table-tool,
|
||||
#app .pending-confirm-table-card .el-pagination-container {
|
||||
flex: 0 0 auto;
|
||||
}
|
||||
</style>
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava" @vchange="handleGuavaChange">
|
||||
<div class="pending-confirm-list-layout">
|
||||
<el-card class="pending-confirm-query-card" shadow="never">
|
||||
<search @search="doSearch">
|
||||
<search-item label="姓名/工号">
|
||||
<el-input clearable placeholder="请输入姓名或工号"
|
||||
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 @change="doSearch" code="USER_PERSON_TYPE" placeholder="请选择人员类型"
|
||||
v-model="pageForm.personType"></dict-select>
|
||||
</search-item>
|
||||
<search-item label="在职状态">
|
||||
<dict-select @change="doSearch" code="USER_STATE" placeholder="请选择在职状态"
|
||||
v-model="pageForm.userState"></dict-select>
|
||||
</search-item>
|
||||
</search>
|
||||
</el-card>
|
||||
|
||||
<el-card class="mt10 pending-confirm-table-card" shadow="never">
|
||||
<table-tool label="待确认人员记录">
|
||||
<div class="pending-list-toolbar-actions">
|
||||
<el-button class="pending-batch-change-button" type="primary"
|
||||
icon="el-icon-edit" size="small"
|
||||
v-if="pageForm.pendingConfirmStatus === 1"
|
||||
@click="openBatchChange">批量变更</el-button>
|
||||
<el-radio-group @change="handleConfirmStatusChange" size="small"
|
||||
v-model="pageForm.pendingConfirmStatus">
|
||||
<el-radio-button :label="1">待确认</el-radio-button>
|
||||
<el-radio-button :label="2">已确认</el-radio-button>
|
||||
</el-radio-group>
|
||||
</div>
|
||||
</table-tool>
|
||||
|
||||
<el-table :data="tableData" :size="tableSize" :height="pendingTableHeight"
|
||||
@sort-change="pageOrder"
|
||||
@selection-change="handleSelectionChange"
|
||||
class="vi-table" ref="table" row-key="id" style="width: 100%">
|
||||
<el-table-column v-if="pageForm.pendingConfirmStatus === 1" type="selection"
|
||||
align="center" fixed="left" width="55"></el-table-column>
|
||||
<el-table-column :index="indexMethod" align="center" fixed="left"
|
||||
header-align="center" label="序号" type="index" width="80"></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="工号" min-width="120"
|
||||
prop="loginname" show-overflow-tooltip sortable></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="姓名" min-width="100"
|
||||
prop="username" show-overflow-tooltip sortable></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="性别" min-width="80"
|
||||
prop="sex" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="所属工会" min-width="150"
|
||||
prop="unionName" show-overflow-tooltip sortable></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="所属单位" min-width="180"
|
||||
prop="unitName" show-overflow-tooltip sortable></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="人员类型" min-width="120"
|
||||
prop="personType" show-overflow-tooltip sortable></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="在职状态" min-width="100"
|
||||
prop="userState" show-overflow-tooltip sortable></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="确认状态" min-width="100"
|
||||
prop="pendingConfirmStatus">
|
||||
<template slot-scope="{row}">
|
||||
<el-tag type="warning" v-if="row.pendingConfirmStatus === 1">待确认</el-tag>
|
||||
<el-tag type="success" v-else-if="row.pendingConfirmStatus === 2">已确认</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" fixed="right" header-align="center" label="操作" width="100">
|
||||
<template slot-scope="{row}">
|
||||
<el-button @click="openChange(row.id)" size="mini" type="primary"
|
||||
v-if="row.pendingConfirmStatus === 1"
|
||||
:loading="pendingChangeLoading && pendingChangeLoadingUserId === row.id"
|
||||
:disabled="pendingChangeLoading">变更</el-button>
|
||||
<el-button @click="openView(row.id)" size="mini" type="primary"
|
||||
v-else-if="row.pendingConfirmStatus === 2"
|
||||
:loading="pendingChangeLoading && pendingChangeLoadingUserId === row.id"
|
||||
:disabled="pendingChangeLoading">查看</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</div>
|
||||
|
||||
<template #public>
|
||||
<!--#include("memberChange.html"){}#-->
|
||||
</template>
|
||||
</guava>
|
||||
|
||||
<el-dialog title="批量变更人员类型" :visible.sync="batchDialogVisible"
|
||||
append-to-body width="480px" custom-class="pending-batch-change-dialog"
|
||||
@closed="resetBatchChange">
|
||||
<el-form :model="batchChangeForm" :rules="batchChangeRules"
|
||||
ref="batchChangeFormRef" label-width="100px">
|
||||
<el-form-item label="人员类型" prop="personType">
|
||||
<el-select v-model="batchChangeForm.personType" filterable
|
||||
placeholder="请选择人员类型" style="width: 100%">
|
||||
<el-option v-for="item in pendingPersonTypeOptions" :key="item.code"
|
||||
:label="item.name" :value="item.code"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template slot="footer">
|
||||
<el-button @click="batchDialogVisible = false">取消</el-button>
|
||||
<el-button type="primary" :loading="batchSubmitting"
|
||||
@click="confirmBatchChange">确认</el-button>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</div>
|
||||
|
||||
<script nonce="${cspNonce!}">
|
||||
<!--#include("memberChange.js"){}#-->
|
||||
|
||||
new Vue({
|
||||
el: "#app",
|
||||
store,
|
||||
mixins: [initTableMixins, PENDING_MEMBER_CHANGE],
|
||||
data() {
|
||||
return {
|
||||
pageForm: {
|
||||
searchKeyword: "",
|
||||
unionId: "",
|
||||
unitId: "",
|
||||
personType: "",
|
||||
userState: "",
|
||||
pendingConfirmStatus: 1
|
||||
},
|
||||
unions: [],
|
||||
units: [],
|
||||
selectedPendingUsers: [],
|
||||
batchDialogVisible: false,
|
||||
batchSubmitting: false,
|
||||
batchChangeForm: {
|
||||
personType: ""
|
||||
},
|
||||
batchChangeRules: {
|
||||
personType: [{required: true, message: "请选择人员类型", trigger: "change"}]
|
||||
},
|
||||
pendingTableHeight: 300,
|
||||
pendingTableResizeObserver: null
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
/** 分页查询待确认或已确认人员。 */
|
||||
pageData() {
|
||||
this.selectedPendingUsers = []
|
||||
return $.post("/platform/sourcechange/pending/pageData", this.pageForm).then((resp) => {
|
||||
if (resp.code === 0) {
|
||||
this.tableData = resp.data.list
|
||||
this.pageForm.totalCount = resp.data.totalCount
|
||||
this.$nextTick(() => {
|
||||
if (this.$refs.table) {
|
||||
this.$refs.table.clearSelection()
|
||||
}
|
||||
this.updatePendingTableHeight()
|
||||
})
|
||||
} else {
|
||||
this.$message.warning(resp.msg)
|
||||
}
|
||||
})
|
||||
},
|
||||
/** 根据列表卡片可用空间固定表格高度,使大量数据仅在表格内部滚动。 */
|
||||
updatePendingTableHeight() {
|
||||
this.$nextTick(() => {
|
||||
const cardBody = this.$el.querySelector(".pending-confirm-table-card > .el-card__body")
|
||||
if (!cardBody || cardBody.clientHeight <= 0) {
|
||||
return
|
||||
}
|
||||
const getOuterHeight = (element) => {
|
||||
if (!element) {
|
||||
return 0
|
||||
}
|
||||
const style = window.getComputedStyle(element)
|
||||
return element.offsetHeight
|
||||
+ (parseFloat(style.marginTop) || 0)
|
||||
+ (parseFloat(style.marginBottom) || 0)
|
||||
}
|
||||
const bodyStyle = window.getComputedStyle(cardBody)
|
||||
const bodyPadding = (parseFloat(bodyStyle.paddingTop) || 0)
|
||||
+ (parseFloat(bodyStyle.paddingBottom) || 0)
|
||||
const tableTool = cardBody.querySelector(".ele-table-tool")
|
||||
const pagination = cardBody.querySelector(".el-pagination-container")
|
||||
const reservedHeight = bodyPadding
|
||||
+ getOuterHeight(tableTool)
|
||||
+ getOuterHeight(pagination)
|
||||
const nextHeight = Math.max(1, Math.floor(cardBody.clientHeight - reservedHeight))
|
||||
if (this.pendingTableHeight !== nextHeight) {
|
||||
this.pendingTableHeight = nextHeight
|
||||
}
|
||||
this.$nextTick(() => {
|
||||
if (this.$refs.table) {
|
||||
this.$refs.table.doLayout()
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
/** 切换确认状态时清空已勾选人员,并从第一页重新查询。 */
|
||||
handleConfirmStatusChange() {
|
||||
this.selectedPendingUsers = []
|
||||
this.doSearch()
|
||||
},
|
||||
/** 保存当前页勾选的待确认人员,供批量变更使用。 */
|
||||
handleSelectionChange(selection) {
|
||||
this.selectedPendingUsers = (selection || []).filter((item) => item.pendingConfirmStatus === 1)
|
||||
},
|
||||
/** 校验勾选结果后打开批量人员类型弹窗。 */
|
||||
openBatchChange() {
|
||||
if (this.selectedPendingUsers.length === 0) {
|
||||
this.$message.warning("请先勾选需要变更的人员")
|
||||
return
|
||||
}
|
||||
this.batchChangeForm.personType = ""
|
||||
this.batchDialogVisible = true
|
||||
},
|
||||
/** 二次确认批量操作,防止误改多名人员。 */
|
||||
confirmBatchChange() {
|
||||
this.$refs.batchChangeFormRef.validate((valid) => {
|
||||
if (!valid) {
|
||||
return
|
||||
}
|
||||
const selectedCount = this.selectedPendingUsers.length
|
||||
this.$confirm("是否确认变更已勾选的" + selectedCount + "名人员?", "提示", {
|
||||
type: "warning"
|
||||
}).then(() => {
|
||||
this.submitBatchChange()
|
||||
}).catch(() => {})
|
||||
})
|
||||
},
|
||||
/** 调用批量接口,在一个事务中修改人员类型并完成确认。 */
|
||||
submitBatchChange() {
|
||||
const userIds = this.selectedPendingUsers.map((item) => item.id)
|
||||
this.batchSubmitting = true
|
||||
this.$axios.post("/platform/sourcechange/pending/batchChange", {
|
||||
userIds: JSON.stringify(userIds),
|
||||
personType: this.batchChangeForm.personType
|
||||
}).then((resp) => {
|
||||
if (resp.code === 0) {
|
||||
this.$message.success(resp.msg)
|
||||
this.batchDialogVisible = false
|
||||
this.doSearch()
|
||||
} else {
|
||||
this.$message.error(resp.msg)
|
||||
}
|
||||
}).catch(() => {
|
||||
this.$message.error("批量变更失败,请稍后重试")
|
||||
}).finally(() => {
|
||||
this.batchSubmitting = false
|
||||
})
|
||||
},
|
||||
/** 关闭弹窗后清理表单,避免保留上次选择的人员类型。 */
|
||||
resetBatchChange() {
|
||||
this.batchSubmitting = false
|
||||
this.batchChangeForm.personType = ""
|
||||
if (this.$refs.batchChangeFormRef) {
|
||||
this.$refs.batchChangeFormRef.clearValidate()
|
||||
}
|
||||
},
|
||||
/** 切换工会时重新加载所属单位。 */
|
||||
flushUnits() {
|
||||
this.$set(this.pageForm, "unitId", "")
|
||||
this.units = []
|
||||
if (this.pageForm.unionId) {
|
||||
this.$businessTool.listUnit(this.pageForm.unionId).then((data) => {
|
||||
this.units = data
|
||||
})
|
||||
} else {
|
||||
this.$businessTool.listUnit().then((data) => {
|
||||
this.units = data
|
||||
})
|
||||
}
|
||||
},
|
||||
/** 打开人员详情,根据只读参数进入变更或查看模式。 */
|
||||
async openPendingMemberDetail(userId, readonly) {
|
||||
if (this.pendingChangeLoading) {
|
||||
return
|
||||
}
|
||||
this.pendingChangeLoading = true
|
||||
this.pendingChangeLoadingUserId = userId
|
||||
try {
|
||||
await this.initPendingMemberChange(userId, readonly)
|
||||
this.$refs.guava.public()
|
||||
} catch (error) {
|
||||
this.$message.error(error && error.message ? error.message : "人员信息加载失败,请稍后重试")
|
||||
} finally {
|
||||
this.pendingChangeLoading = false
|
||||
this.pendingChangeLoadingUserId = ""
|
||||
}
|
||||
},
|
||||
/** 打开待确认人员可编辑页面。 */
|
||||
openChange(userId) {
|
||||
return this.openPendingMemberDetail(userId, false)
|
||||
},
|
||||
/** 打开已确认人员只读查看页面。 */
|
||||
openView(userId) {
|
||||
return this.openPendingMemberDetail(userId, true)
|
||||
},
|
||||
/** 关闭变更页面并刷新列表。 */
|
||||
closeChange() {
|
||||
this.$refs.guava.index()
|
||||
},
|
||||
/** Guava 返回列表时统一清理编辑状态并重新加载列表。 */
|
||||
handleGuavaChange({newValue}) {
|
||||
if (newValue === "index") {
|
||||
this.resetPendingMemberChange()
|
||||
this.pageData()
|
||||
this.updatePendingTableHeight()
|
||||
}
|
||||
},
|
||||
/** 调用待确认人员专用接口,直接更新人员及历史记录。 */
|
||||
doSubmitPendingMemberChange(data) {
|
||||
const loading = createLoading("正在提交中")
|
||||
this.$axios.post("/platform/sourcechange/pending/submitChange", data).then((resp) => {
|
||||
loading.close()
|
||||
if (resp.code === 0) {
|
||||
this.$message.success(resp.msg)
|
||||
this.closeChange()
|
||||
} else {
|
||||
this.$message.error(resp.msg)
|
||||
}
|
||||
}).catch(() => {
|
||||
loading.close()
|
||||
this.$message.error("提交失败,请稍后重试")
|
||||
})
|
||||
},
|
||||
/** 初始化工会和单位查询选项。 */
|
||||
initData() {
|
||||
return Promise.all([
|
||||
this.$businessTool.listUnion().then((data) => {
|
||||
this.unions = data
|
||||
}),
|
||||
this.$businessTool.listUnit().then((data) => {
|
||||
this.units = data
|
||||
}),
|
||||
this.loadPendingPersonTypeOptions()
|
||||
])
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.initData().then(() => {
|
||||
this.pageData()
|
||||
})
|
||||
},
|
||||
mounted() {
|
||||
const listCardBody = this.$el.querySelector(".pending-confirm-table-card > .el-card__body")
|
||||
if (listCardBody && window.ResizeObserver) {
|
||||
// 查询区换行或窗口尺寸变化时同步调整表格内部滚动区域。
|
||||
this.pendingTableResizeObserver = new ResizeObserver(this.updatePendingTableHeight)
|
||||
this.pendingTableResizeObserver.observe(listCardBody)
|
||||
}
|
||||
this.updatePendingTableHeight()
|
||||
window.addEventListener("resize", this.updatePendingTableHeight)
|
||||
},
|
||||
beforeDestroy() {
|
||||
if (this.pendingTableResizeObserver) {
|
||||
this.pendingTableResizeObserver.disconnect()
|
||||
this.pendingTableResizeObserver = null
|
||||
}
|
||||
window.removeEventListener("resize", this.updatePendingTableHeight)
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
+232
@@ -0,0 +1,232 @@
|
||||
<el-card shadow="never">
|
||||
<table-tool :label="pendingChangeReadonly ? '待确认人员查看' : '待确认人员变更'"></table-tool>
|
||||
<el-form :model="pendingChangeForm" ref="pendingChangeFormRef" :rules="pendingChangeRules"
|
||||
:disabled="pendingChangeReadonly"
|
||||
label-width="0" label-suffix=":" class="flow-task-form pending-member-change-form">
|
||||
<el-descriptions :column="3" border>
|
||||
<el-descriptions-item label="工号">
|
||||
<el-form-item prop="loginname">
|
||||
<el-input v-model="pendingChangeForm.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="pendingChangeForm.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="pendingAllowFields('sex')" v-model="pendingChangeForm.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 v-model="pendingChangeForm.nation" code="USER_NATION"
|
||||
:disabled="pendingAllowFields('nation')" placeholder="请选择民族"
|
||||
style="width: 100%"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="出生日期">
|
||||
<el-form-item prop="birthday">
|
||||
<el-date-picker v-model="pendingChangeForm.birthday" type="date"
|
||||
:disabled="pendingAllowFields('birthday')" placeholder="请选择出生日期"
|
||||
format="yyyy-MM-dd" value-format="yyyy-MM-dd"
|
||||
style="width: 100%"></el-date-picker>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="政治面貌">
|
||||
<el-form-item prop="political">
|
||||
<dict-select v-model="pendingChangeForm.political" code="USER_POLITICAL"
|
||||
:disabled="pendingAllowFields('political')" placeholder="请选择政治面貌"
|
||||
style="width: 100%"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="学历">
|
||||
<el-form-item prop="education">
|
||||
<dict-select v-model="pendingChangeForm.education" code="USER_EDUCATION"
|
||||
:disabled="pendingAllowFields('education')" placeholder="请选择学历"
|
||||
style="width: 100%"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="学位">
|
||||
<el-form-item prop="academicDegree">
|
||||
<dict-select v-model="pendingChangeForm.academicDegree" code="USER_ACADEMIC_DEGREE"
|
||||
:disabled="pendingAllowFields('academicDegree')" placeholder="请选择学位"
|
||||
style="width: 100%"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="工作单位">
|
||||
<el-form-item prop="unitId">
|
||||
<el-input v-model="pendingChangeForm.unitName" disabled placeholder="暂无工作单位"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="所属工会">
|
||||
<el-form-item prop="unionName">
|
||||
<el-input v-model="pendingChangeForm.unionName" disabled placeholder="暂无所属工会"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="三级单位">
|
||||
<el-form-item prop="threeUnitId">
|
||||
<el-select v-model="pendingChangeForm.threeUnitId" clearable filterable
|
||||
:disabled="pendingAllowFields('threeUnitId')"
|
||||
placeholder="请选择三级单位" style="width: 100%">
|
||||
<el-option v-for="item in pendingThreeUnits" :key="item.id" :label="item.name"
|
||||
:value="item.id"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="身份证号码">
|
||||
<el-form-item prop="idCard">
|
||||
<el-input v-model="pendingChangeForm.idCard" :disabled="pendingAllowFields('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="pendingChangeForm.mobile" :disabled="pendingAllowFields('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="pendingChangeForm.email" :disabled="pendingAllowFields('email')"
|
||||
placeholder="请输入电子邮箱" maxlength="50"></el-input>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<el-descriptions-item label="在职状态">
|
||||
<el-form-item prop="userState">
|
||||
<dict-select v-model="pendingChangeForm.userState" code="USER_STATE"
|
||||
:disabled="pendingAllowFields('userState')" style="width: 100%"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="人员类型">
|
||||
<el-form-item prop="personType">
|
||||
<el-input v-if="pendingChangeReadonly" v-model="pendingChangeForm.personType"
|
||||
readonly></el-input>
|
||||
<el-select v-else v-model="pendingChangeForm.personType" filterable
|
||||
placeholder="请选择人员类型" style="width: 100%">
|
||||
<el-option v-for="item in pendingPersonTypeOptions" :key="item.code"
|
||||
:label="item.name" :value="item.code"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="人员属性">
|
||||
<el-form-item prop="userAttribute">
|
||||
<dict-select v-model="pendingChangeForm.userAttribute" code="USER_ATTRIBUTE"
|
||||
:disabled="pendingAllowFields('userAttribute')"
|
||||
style="width: 100%"></dict-select>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<template v-if="pendingChangeForm.userState === '退休'">
|
||||
<el-descriptions-item label="退休日期">
|
||||
<el-form-item prop="retireDate">
|
||||
<el-date-picker v-model="pendingChangeForm.retireDate" type="date"
|
||||
:disabled="pendingAllowFields('retireDate')"
|
||||
placeholder="请选择退休日期" format="yyyy-MM-dd"
|
||||
value-format="yyyy-MM-dd" style="width: 100%"></el-date-picker>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="福利享受截止日期">
|
||||
<el-form-item prop="welfareStopDate">
|
||||
<el-date-picker v-model="pendingChangeForm.welfareStopDate" type="date"
|
||||
:disabled="pendingAllowFields('welfareStopDate')"
|
||||
placeholder="请选择福利享受截止日期" format="yyyy-MM-dd"
|
||||
value-format="yyyy-MM-dd" style="width: 100%"></el-date-picker>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
</template>
|
||||
|
||||
<el-descriptions-item label="会员状态">
|
||||
<el-form-item prop="member">
|
||||
<el-radio-group v-model="pendingChangeForm.member" size="small"
|
||||
:disabled="pendingAllowFields('member')">
|
||||
<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="pendingChangeForm.welfareMember" size="small"
|
||||
:disabled="pendingAllowFields('welfareMember')"
|
||||
class="welfare-member-radio-group">
|
||||
<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="arrivalAtSchoolDate">
|
||||
<el-date-picker v-model="pendingChangeForm.arrivalAtSchoolDate" type="date"
|
||||
:disabled="pendingAllowFields('arrivalAtSchoolDate')"
|
||||
placeholder="请选择入校时间" format="yyyy-MM-dd"
|
||||
value-format="yyyy-MM-dd" style="width: 100%"></el-date-picker>
|
||||
</el-form-item>
|
||||
</el-descriptions-item>
|
||||
|
||||
<template v-if="pendingChangeForm.loginname === $store.state.user.loginname">
|
||||
<el-descriptions-item label="家庭主要成员" :span="3">
|
||||
<el-form-item prop="families">
|
||||
<el-table :data="pendingChangeForm.families" border size="small">
|
||||
<el-table-column label="关系" prop="relation">
|
||||
<template slot-scope="{row}">
|
||||
<el-input v-model="row.relation" maxlength="50" :disabled="pendingAllowFields('families')"
|
||||
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" :disabled="pendingAllowFields('families')"
|
||||
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" :disabled="pendingAllowFields('families')"
|
||||
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" :disabled="pendingAllowFields('families')"
|
||||
placeholder="请输入备注"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column width="100">
|
||||
<template slot="header">
|
||||
<el-button type="primary" size="mini"
|
||||
:disabled="pendingChangeReadonly || pendingAllowFields('families')"
|
||||
@click="pendingChangeForm.families.push({})">添加</el-button>
|
||||
</template>
|
||||
<template slot-scope="scope">
|
||||
<el-button type="danger" icon="el-icon-delete" size="mini"
|
||||
:disabled="pendingChangeReadonly || pendingChangeForm.families.length === 0 || pendingAllowFields('families')"
|
||||
@click="pendingChangeForm.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-if="!pendingAllowFields('personalData')" v-model="pendingChangeForm.personalData"></text-editor>
|
||||
<div v-else v-html="pendingChangeForm.personalData"></div>
|
||||
</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="closeChange">返回</el-button>
|
||||
<el-button type="primary" v-if="!pendingChangeReadonly"
|
||||
@click="submitPendingMemberChange">提交变更</el-button>
|
||||
</el-row>
|
||||
</el-card>
|
||||
@@ -0,0 +1,141 @@
|
||||
/**
|
||||
* 待确认人员变更页面逻辑。
|
||||
* 该对象作为页面 mixin 使用,不注册 Vue 子组件,也不包含审批流程相关处理。
|
||||
*/
|
||||
const PENDING_MEMBER_CHANGE = {
|
||||
data() {
|
||||
return {
|
||||
pendingChangeUser: {},
|
||||
pendingChangeForm: {
|
||||
families: []
|
||||
},
|
||||
pendingChangeRules: {
|
||||
username: [{required: false, message: "必填", trigger: ["change", "blur"]}],
|
||||
sex: [{required: false, message: "必填", trigger: ["change", "blur"]}]
|
||||
},
|
||||
pendingPersonTypeOptions: [],
|
||||
pendingThreeUnits: [],
|
||||
pendingChangeReadonly: false,
|
||||
pendingChangeLoading: false,
|
||||
pendingChangeLoadingUserId: ""
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
/** 编辑模式仅允许修改人员类型;查看模式下所有字段均为只读。 */
|
||||
pendingAllowFields(prop) {
|
||||
return this.pendingChangeReadonly || prop !== "personType"
|
||||
},
|
||||
|
||||
/** 从人员类型字典中仅保留待确认业务允许变更的两种类型。 */
|
||||
loadPendingPersonTypeOptions() {
|
||||
return this.$businessTool.getDictOptions("USER_PERSON_TYPE").then((options) => {
|
||||
const allowedNames = ["离退休人员", "其他"]
|
||||
this.pendingPersonTypeOptions = (options || []).filter((item) => allowedNames.includes(item.name))
|
||||
})
|
||||
},
|
||||
|
||||
/** 初始化人员详情数据;已确认记录进入只读模式,不再提供编辑能力。 */
|
||||
async initPendingMemberChange(userId, readonly) {
|
||||
this.pendingChangeReadonly = readonly === true
|
||||
const resp = await $.post("/platform/member/change/apply/getUserByIdForMemberChange", {userId: userId})
|
||||
if (resp.code !== 0 || !resp.data) {
|
||||
throw new Error(resp.msg || "未获取到人员基础信息")
|
||||
}
|
||||
|
||||
this.pendingChangeUser = resp.data
|
||||
this.fillPendingChangeForm(resp.data)
|
||||
await this.loadPendingThreeUnits()
|
||||
},
|
||||
|
||||
/** 清理待确认人员变更页面状态,避免返回后残留上一次请求数据。 */
|
||||
resetPendingMemberChange() {
|
||||
this.pendingChangeUser = {}
|
||||
this.pendingChangeForm = {families: []}
|
||||
this.pendingThreeUnits = []
|
||||
this.pendingChangeReadonly = false
|
||||
this.pendingChangeLoading = false
|
||||
this.pendingChangeLoadingUserId = ""
|
||||
if (this.$refs.pendingChangeFormRef) {
|
||||
this.$refs.pendingChangeFormRef.clearValidate()
|
||||
}
|
||||
},
|
||||
|
||||
/** 将人员基础信息转换为待确认变更表单数据。 */
|
||||
fillPendingChangeForm(user) {
|
||||
const unit = user.unit || {}
|
||||
const union = user.union || {}
|
||||
const form = {
|
||||
userId: user.id,
|
||||
username: user.username,
|
||||
loginname: user.loginname,
|
||||
sex: user.sex,
|
||||
member: user.member === 1 || user.member === true,
|
||||
welfareMember: user.welfareMember === 1 || user.welfareMember === true,
|
||||
nation: user.nation,
|
||||
birthday: user.birthday,
|
||||
political: user.political,
|
||||
education: user.education,
|
||||
academicDegree: user.academicDegree,
|
||||
position: user.position,
|
||||
unitId: unit.id ? String(unit.id) : null,
|
||||
unitName: unit.name || null,
|
||||
unionId: union.id || null,
|
||||
unionName: union.name || null,
|
||||
campus: user.campus,
|
||||
threeUnitId: user.threeUnitId,
|
||||
idCard: user.idCard,
|
||||
mobile: user.mobile,
|
||||
email: user.email,
|
||||
userState: user.userState,
|
||||
personType: user.personType,
|
||||
preparedBy: user.preparedBy,
|
||||
userAttribute: user.userAttribute,
|
||||
aidFundMemberUserType: user.aidFundMemberUserType,
|
||||
retireDate: user.retireDate,
|
||||
welfareStopDate: user.welfareStopDate,
|
||||
arrivalAtSchoolDate: user.arrivalAtSchoolDate,
|
||||
families: user.families || [],
|
||||
personalData: user.personalData
|
||||
}
|
||||
this.pendingChangeForm = form
|
||||
},
|
||||
|
||||
/** 查询人员所属二级单位下的三级单位。 */
|
||||
loadPendingThreeUnits() {
|
||||
this.pendingThreeUnits = []
|
||||
if (!this.pendingChangeForm.unitId) {
|
||||
this.$message.warning("当前人员未配置所属单位,无法查询三级单位")
|
||||
return Promise.resolve()
|
||||
}
|
||||
return this.$axios.post("/platform/sys/unit/child", {pid: this.pendingChangeForm.unitId})
|
||||
.then((resp) => {
|
||||
if (resp.code === 0) {
|
||||
this.pendingThreeUnits = resp.data || []
|
||||
} else {
|
||||
this.$message.error(resp.msg || "三级单位查询失败")
|
||||
}
|
||||
})
|
||||
.catch(() => {
|
||||
this.$message.error("三级单位查询失败,请稍后重试")
|
||||
})
|
||||
},
|
||||
|
||||
/** 校验表单后调用待确认人员专用接口直接完成变更。 */
|
||||
submitPendingMemberChange() {
|
||||
this.$refs.pendingChangeFormRef.validate((valid) => {
|
||||
if (!valid) {
|
||||
return
|
||||
}
|
||||
this.$confirm("提交后将直接更新人员信息,确定提交本次变更吗?", "提示", {type: "warning"})
|
||||
.then(() => {
|
||||
const submitData = Object.assign({}, this.pendingChangeForm)
|
||||
if (submitData.families) {
|
||||
submitData.families = JSON.stringify(submitData.families)
|
||||
}
|
||||
this.doSubmitPendingMemberChange(submitData)
|
||||
})
|
||||
.catch(() => {})
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user