人员管理

This commit is contained in:
2026-10-30 14:02:26 +08:00
parent fad8a37dfb
commit 7dacfd7e5a
21 changed files with 110 additions and 50 deletions
@@ -403,6 +403,12 @@ const PROPOSAL_INFO = {
},
openChart(){
// 仅保存的提案尚未创建 WF 实例,按提案流程 KEY 预览流程定义图。
if (!this.row.instanceId) {
this.$refs.snakerChartRef.onOpen("JDHTA_NC")
return
}
// 已提交提案使用实例对应的流程版本,保留实际办理节点和审批进度。
this.$refs.snakerChartRef.onOpenFull(this.row.instanceProcessDefineId, this.row.instanceId)
}
},
@@ -40,7 +40,8 @@
<dict-select v-model="pageForm.aidFundMemberUserType" code="AIDFUND_MEMBER_USER_TYPE"
style="width: 100%"></dict-select>
</search-item>-->
<search-item label="人员属性">
<!-- 会员模块屏蔽人员属性查询入口。 -->
<search-item label="人员属性" v-if="false">
<dict-select v-if="userAttributeMultiple" v-model="pageForm.userAttributes" code="USER_ATTRIBUTE"
multiple collapse-tags clearable style="width: 100%"></dict-select>
<dict-select v-else v-model="pageForm.userAttribute" code="USER_ATTRIBUTE"
@@ -32,7 +32,9 @@ const COMMON_QUERY = {
pageForm.userStates = JSON.stringify(this.pageForm.userStates)
pageForm.personTypes = JSON.stringify(this.pageForm.personTypes)
pageForm.preparedBys = JSON.stringify(this.pageForm.preparedBys)
pageForm.userAttributes = JSON.stringify(this.pageForm.userAttributes)
// 人员属性已屏蔽,查询和导出均不再按该字段过滤。
pageForm.userAttribute = ""
pageForm.userAttributes = "[]"
this.$emit('search', pageForm)
},
async initData(){
@@ -29,7 +29,8 @@
<dict-select v-model="pageForm.aidFundMemberUserType" placeholder="请选择人员分类" @change="doSearch"
code="AIDFUND_MEMBER_USER_TYPE"></dict-select>
</search-item>-->
<search-item label="人员属性">
<!-- 会员模块屏蔽人员属性查询入口。 -->
<search-item label="人员属性" v-if="false">
<dict-select v-if="userAttributeMultiple" v-model="pageForm.userAttributes"
placeholder="请选择人员属性" @change="doSearch" code="USER_ATTRIBUTE"
multiple collapse-tags clearable></dict-select>
@@ -32,8 +32,10 @@ const COMMON_QUERY = {
pageForm.userStates = JSON.stringify(this.pageForm.userStates)
pageForm.personTypes = JSON.stringify(this.pageForm.personTypes)
pageForm.preparedBys = JSON.stringify(this.pageForm.preparedBys)
// 多选人员属性沿用现有数组查询参数的JSON提交方式。
pageForm.userAttributes = JSON.stringify(this.pageForm.userAttributes)
// 保持其他业务筛选条件,排除已屏蔽字段。
// 人员属性已屏蔽,查询和导出均不再按该字段过滤。
pageForm.userAttribute = ""
pageForm.userAttributes = "[]"
this.$emit('search', pageForm)
},
async initData(){
@@ -149,7 +149,8 @@ const MEMBER_CHANGE = {
:disabled="allowFields('personType')" style="width: 100%"></dict-select>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="人员属性">
<!-- 屏蔽人员属性展示和编辑,保留回填值以免保存时覆盖历史数据。 -->
<el-descriptions-item label="人员属性" v-if="false">
<el-form-item prop="userAttribute">
<dict-select v-model="formData.userAttribute" code="USER_ATTRIBUTE"
style="width: 100%"></dict-select>
@@ -50,7 +50,8 @@ layout("/layouts/platform.html"){
<!-- <dict-select v-model="pageForm.aidFundMemberUserType" placeholder="请选择人员分类" @change="doSearch"-->
<!-- code="AIDFUND_MEMBER_USER_TYPE"></dict-select>-->
<!-- </search-item>-->
<search-item label="人员属性">
<!-- 会员模块屏蔽人员属性查询入口。 -->
<search-item label="人员属性" v-if="false">
<dict-select v-model="pageForm.userAttributes" placeholder="请选择人员属性" @change="doSearch"
code="USER_ATTRIBUTE" multiple collapse-tags clearable></dict-select>
</search-item>
@@ -76,7 +77,7 @@ layout("/layouts/platform.html"){
设置人员分类
</el-button>
<el-button :disabled="!checkUsers.length" @click="openBatchEditUserAttribute" class="ml5" icon="el-icon-edit"
<el-button v-if="false" :disabled="!checkUsers.length" @click="openBatchEditUserAttribute" class="ml5" icon="el-icon-edit"
size="small" type="primary">
设置人员属性
</el-button>
@@ -240,6 +241,7 @@ layout("/layouts/platform.html"){
<el-drawer
:before-close="handleClose"
v-if="false"
:visible.sync="batchEditUserAttributeVisible"
size="1000px" title="批量设置人员属性">
<el-timeline style="margin-right: 40px">
@@ -569,7 +571,8 @@ layout("/layouts/platform.html"){
{ prop: "personType", label: "人员类型", width: 120, sortable: true },
// 临时屏蔽“人员分类”列表字段,不删除配置,后续需要可恢复。
// { prop: "aidFundMemberUserType", label: "人员分类", width: 120, sortable: true },
{ prop: "userAttribute", label: "人员属性", width: 120, sortable: true },
// 屏蔽人员属性列,同时从导出可选列中排除。
// { prop: "userAttribute", label: "人员属性", width: 120, sortable: true },
{ prop: "idCardType", label: "证件类型", width: 120, sortable: true, checked: 0 },
{ prop: "idCard", label: "证件号码", width: 120, sortable: true, checked: 0 },
{ prop: "marriage", label: "婚姻状况", width: 120, sortable: true, checked: 0 },
@@ -597,13 +600,15 @@ layout("/layouts/platform.html"){
"member-all-change": MEMBER_ALL_CHANGE_INFO,
},
methods: {
// 分页和导出共用该参数构建方法,保证人员属性多选值始终按 JSON 数组提交。
// 分页和导出共用查询参数,排除已屏蔽的人员属性条件。
buildQueryPageForm(source = this.pageForm) {
const pageForm = clone(source)
pageForm.userAttributes = JSON.stringify(source.userAttributes || [])
// 人员属性已屏蔽,查询和导出均不再按该字段过滤。
pageForm.userAttribute = ""
pageForm.userAttributes = "[]"
return pageForm
},
// 覆盖公共分页方法,使后端按人员属性集合执行查询。
// 复用公共分页方法,提交已清理的业务查询参数。
pageData(data = null) {
return initTableMixins.methods.pageData.call(this, this.buildQueryPageForm(data || this.pageForm))
},
@@ -42,7 +42,8 @@ layout("/layouts/platform.html"){
<dict-select v-model="pageForm.aidFundMemberUserType" placeholder="请选择人员分类" @change="doSearch"
code="AIDFUND_MEMBER_USER_TYPE"></dict-select>
</search-item>-->
<search-item label="人员属性">
<!-- 会员模块屏蔽人员属性查询入口。 -->
<search-item label="人员属性" v-if="false">
<dict-select v-model="pageForm.userAttributes" placeholder="请选择人员属性" @change="doSearch"
code="USER_ATTRIBUTE" multiple collapse-tags clearable></dict-select>
</search-item>
@@ -198,8 +199,10 @@ layout("/layouts/platform.html"){
pageForm.personTypes = JSON.stringify(pageForm.personTypes)
pageForm.changeTypes = JSON.stringify(pageForm.changeTypes)
pageForm.changeOrigins = JSON.stringify(pageForm.changeOrigins)
// 人员属性为多选条件,提交前转换为后端可解析的 JSON 数组。
pageForm.userAttributes = JSON.stringify(pageForm.userAttributes)
// 人员属性已停用,不参与变更记录筛选。
// 人员属性已屏蔽,查询和导出均不再按该字段过滤。
pageForm.userAttribute = ""
pageForm.userAttributes = "[]"
this.$axios.post(loc() + '/pageData', pageForm)
.then(res => {
@@ -73,7 +73,8 @@ const MEMBER_INFO = {
<el-descriptions-item label="人员类型">{{ viewData.personType }}</el-descriptions-item>
<!-- 第 4 行 -->
<el-descriptions-item label="人员属性">{{ viewData.userAttribute }}</el-descriptions-item>
<!-- 屏蔽人员属性展示和编辑,保留回填值以免保存时覆盖历史数据。 -->
<el-descriptions-item label="人员属性" v-if="false">{{ viewData.userAttribute }}</el-descriptions-item>
<el-descriptions-item label="职称">{{ viewData.professionalTitle }}</el-descriptions-item>
<el-descriptions-item label="职级">{{ viewData.professionalLevel }}</el-descriptions-item>
@@ -85,6 +86,7 @@ const MEMBER_INFO = {
<el-descriptions-item label="行政岗级">{{ viewData.administrativePositionLevel }}</el-descriptions-item>
<el-descriptions-item label="人员分类" v-if="false">{{ viewData.aidFundMemberUserType }}</el-descriptions-item>
</el-descriptions>
<slot></slot>
</div>
`,
store,
@@ -43,7 +43,8 @@
<dict-select v-model="pageForm.aidFundMemberUserType" placeholder="请选择人员分类" @change="doSearch"
code="AIDFUND_MEMBER_USER_TYPE"></dict-select>
</search-item>-->
<search-item label="人员属性">
<!-- 会员模块屏蔽人员属性查询入口。 -->
<search-item label="人员属性" v-if="false">
<dict-select v-model="pageForm.userAttributes" placeholder="请选择人员属性" @change="doSearch"
code="USER_ATTRIBUTE" multiple collapse-tags clearable></dict-select>
</search-item>
@@ -37,8 +37,10 @@ const COMMON_QUERY = {
pageForm.userStates = JSON.stringify(this.pageForm.userStates)
pageForm.personTypes = JSON.stringify(this.pageForm.personTypes)
pageForm.preparedBys = JSON.stringify(this.pageForm.preparedBys)
// 人员属性多选值按现有数组查询参数口径提交。
pageForm.userAttributes = JSON.stringify(this.pageForm.userAttributes)
// 保持其他业务筛选条件,排除已屏蔽字段。
// 人员属性已屏蔽,查询和导出均不再按该字段过滤。
pageForm.userAttribute = ""
pageForm.userAttributes = "[]"
this.$emit('search', pageForm)
},
handleUnionChange() {
@@ -102,7 +102,8 @@
style="width: 100%"></dict-select>
</el-form-item>
</el-descriptions-item>
<el-descriptions-item label="人员属性">
<!-- 屏蔽人员属性展示和编辑,保留回填值以免保存时覆盖历史数据。 -->
<el-descriptions-item label="人员属性" v-if="false">
<el-form-item prop="userAttribute">
<dict-select v-model="formData.userAttribute" code="USER_ATTRIBUTE"
style="width: 100%"></dict-select>
@@ -49,7 +49,8 @@ layout("/layouts/platform.html"){
<search-item label="人员分类" v-if="false">
<dict-select v-model="pageForm.aidFundMemberUserType" placeholder="请选择人员分类" @change="doSearch" code="AIDFUND_MEMBER_USER_TYPE"></dict-select>
</search-item>
<search-item label="人员属性">
<!-- 会员模块屏蔽人员属性查询入口。 -->
<search-item label="人员属性" v-if="false">
<dict-select v-model="pageForm.userAttributes" placeholder="请选择人员属性" @change="doSearch"
code="USER_ATTRIBUTE" multiple collapse-tags clearable></dict-select>
</search-item>
@@ -133,13 +134,15 @@ layout("/layouts/platform.html"){
"member-info": MEMBER_INFO
},
methods: {
// 分页和导出共用该参数构建方法,保证人员属性多选值始终按 JSON 数组提交。
// 分页和导出共用查询参数,排除已屏蔽的人员属性条件。
buildQueryPageForm() {
const pageForm = clone(this.pageForm)
pageForm.userAttributes = JSON.stringify(this.pageForm.userAttributes || [])
// 人员属性已屏蔽,查询和导出均不再按该字段过滤。
pageForm.userAttribute = ""
pageForm.userAttributes = "[]"
return pageForm
},
// 覆盖公共分页方法,使后端按人员属性集合执行查询。
// 复用公共分页方法,提交已清理的业务查询参数。
pageData() {
return initTableMixins.methods.pageData.call(this, this.buildQueryPageForm())
},
@@ -49,7 +49,8 @@ layout("/layouts/platform.html"){
<search-item label="人员分类" v-if="false">
<dict-select v-model="pageForm.aidFundMemberUserType" placeholder="请选择人员分类" @change="doSearch" code="AIDFUND_MEMBER_USER_TYPE"></dict-select>
</search-item>
<search-item label="人员属性">
<!-- 会员模块屏蔽人员属性查询入口。 -->
<search-item label="人员属性" v-if="false">
<dict-select v-model="pageForm.userAttributes" placeholder="请选择人员属性" @change="doSearch"
code="USER_ATTRIBUTE" multiple collapse-tags clearable></dict-select>
</search-item>
@@ -141,10 +142,12 @@ layout("/layouts/platform.html"){
"member-add-form": MEMBER_ADD_FORM
},
methods: {
// 人员属性为多选条件,分页查询前统一转换为后端可接收的 JSON 数组。
// 分页查询前排除已屏蔽的人员属性条件。
pageData(data = null) {
const pageForm = clone(data || this.pageForm)
pageForm.userAttributes = JSON.stringify(this.pageForm.userAttributes || [])
// 人员属性已屏蔽,查询和导出均不再按该字段过滤。
pageForm.userAttribute = ""
pageForm.userAttributes = "[]"
return initTableMixins.methods.pageData.call(this, pageForm)
},
openAdd() {
@@ -129,7 +129,7 @@ layout("/layouts/platform.html"){
</span>
</el-col>
</el-row>
<el-row type="flex" align="middle" class="query-row query-row-tag">
<el-row type="flex" align="middle" class="query-row query-row-tag" v-if="false">
<el-col class="query-row-title">人员属性:</el-col>
<el-col class="query-row-content query-row-content-tag">
<el-tag class="query-tag-item"
@@ -280,7 +280,9 @@ layout("/layouts/platform.html"){
const pageForm = clone(this.pageForm)
pageForm.personTypes = JSON.stringify(this.pageForm.personTypes)
pageForm.aidFundMemberUserTypes = JSON.stringify(this.pageForm.aidFundMemberUserTypes)
pageForm.userAttributes = JSON.stringify(this.pageForm.userAttributes)
// 人员属性已屏蔽,查询和导出均不再按该字段过滤。
pageForm.userAttribute = ""
pageForm.userAttributes = "[]"
this.$axios.post(loc() + "/pageData", pageForm).then((res) => {
if (res.code === 0) {
this.tableData = res.data
@@ -165,7 +165,8 @@ layout("/layouts/platform.html"){
{ prop: "unitName", label: "所属单位", width: 120, sortable: true },
// 临时屏蔽“人员分类”列表字段,不删除配置,后续需要可恢复。
// { prop: "aidFundMemberUserType", label: "人员分类", width: 120, sortable: true },
{ prop: "userAttribute", label: "人员属性", width: 120, sortable: true },
// 屏蔽人员属性列,同时从导出可选列中排除。
// { prop: "userAttribute", label: "人员属性", width: 120, sortable: true },
{ prop: "idCardType", label: "证件类型", width: 120, sortable: true, checked: 0 },
{ prop: "idCard", label: "证件号码", width: 120, sortable: true, checked: 0 },
{ prop: "marriage", label: "婚姻状况", width: 120, sortable: true, checked: 0 },
@@ -205,7 +206,9 @@ layout("/layouts/platform.html"){
pageForm.memberTypes = JSON.stringify(this.pageForm.memberTypes)
pageForm.personTypes = JSON.stringify(this.pageForm.personTypes)
pageForm.aidFundMemberUserTypes = JSON.stringify(this.pageForm.aidFundMemberUserTypes)
pageForm.userAttributes = JSON.stringify(this.pageForm.userAttributes)
// 人员属性已屏蔽,查询和导出均不再按该字段过滤。
pageForm.userAttribute = ""
pageForm.userAttributes = "[]"
pageForm.userStates = JSON.stringify(this.pageForm.userStates)
const data = this.tableColumns.filter(item => this.checkedFields.includes(item.prop)).map(item => {
return {prop: item.prop, label: item.label}
@@ -230,7 +233,9 @@ layout("/layouts/platform.html"){
pageForm.memberTypes = JSON.stringify(this.pageForm.memberTypes)
pageForm.personTypes = JSON.stringify(this.pageForm.personTypes)
pageForm.aidFundMemberUserTypes = JSON.stringify(this.pageForm.aidFundMemberUserTypes)
pageForm.userAttributes = JSON.stringify(this.pageForm.userAttributes)
// 人员属性已屏蔽,查询和导出均不再按该字段过滤。
pageForm.userAttribute = ""
pageForm.userAttributes = "[]"
pageForm.preparedBys = JSON.stringify(this.pageForm.preparedBys)
pageForm.memberStatus = JSON.stringify(this.pageForm.memberStatus)
pageForm.userStates = JSON.stringify(this.pageForm.userStates)
@@ -113,7 +113,7 @@ const MEMBER_STATISTICS_COMPREHENSIVE_QUERY_FORM = {
</el-col>
</el-row>
<el-row type="flex" align="middle" class="query-row query-row-tag">
<el-row type="flex" align="middle" class="query-row query-row-tag" v-if="false">
<el-col class="query-row-title">人员属性:</el-col>
<el-col class="query-row-content query-row-content-tag">
<el-tag
@@ -129,7 +129,7 @@ layout("/layouts/platform.html"){
</span>
</el-col>
</el-row>
<el-row type="flex" align="middle" class="query-row query-row-tag">
<el-row type="flex" align="middle" class="query-row query-row-tag" v-if="false">
<el-col class="query-row-title">人员属性:</el-col>
<el-col class="query-row-content query-row-content-tag">
<el-tag class="query-tag-item"
@@ -265,7 +265,9 @@ layout("/layouts/platform.html"){
// 统计接口按 JSON 字符串接收多选条件,这里把人员分类和人员属性统一成同一提交口径。
pageForm.personTypes = JSON.stringify(this.pageForm.personTypes)
pageForm.aidFundMemberUserTypes = JSON.stringify(this.pageForm.aidFundMemberUserTypes)
pageForm.userAttributes = JSON.stringify(this.pageForm.userAttributes)
// 人员属性已屏蔽,查询和导出均不再按该字段过滤。
pageForm.userAttribute = ""
pageForm.userAttributes = "[]"
this.$axios.post(loc() + "/pageData", pageForm).then((res) => {
if (res.code === 0) {
this.tableData = res.data