This commit is contained in:
Paidax
2024-11-29 09:03:59 +08:00
commit 2ffadd89a7
3480 changed files with 879405 additions and 0 deletions
@@ -0,0 +1,745 @@
<template>
<div>
<template>
<el-card shadow="never">
<el-row class="query-row">
<el-col class="query-title">姓名/工号</el-col>
<el-select clearable
v-model="pageForm.userId" filterable remote collapse-tags
placeholder="输入工号或者姓名查找" :remote-method="queryUser" @change="doSearch"
style="width: 100%"
multiple>
<el-option v-for="o in userList"
:label="o.username+'('+o.loginname+')-'+o.unitname" :value="o.id"
:key="o.id"></el-option>
</el-select>
</el-row>
<el-row class="query-row"
v-if="is_H10===true||is_A06===true||is_sysadmin===true||is_H02===true||is_H04===true">
<el-col class="query-title hidden-xs-only">会员类型</el-col>
<el-col class="query-content">
<el-tag
:effect="pageForm.memberTypes.includes(item.name)?'dark':'plain'"
:key="item.code"
:type="item.name"
@click="tagClick('memberTypes',item.name)"
style="margin-right: 10px;cursor: pointer"
v-for="item in memberTypeOptions">
{{ item.name }}
</el-tag>
</el-col>
</el-row>
<el-row class="query-row">
<el-col class="query-title hidden-xs-only">性别</el-col>
<el-col class="query-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 class="query-row"
v-if="is_H10===true||is_A06===true||is_sysadmin===true||is_H02===true||is_H04===true">
<el-col class="query-title">人员类型</el-col>
<el-col class="query-content">
<el-tag
:effect="pageForm.personTypes.includes(item.name)?'dark':'plain'"
:key="item.code"
:type="item.name"
@click="tagClick('personTypes',item.name)"
style="margin-right: 10px;cursor: pointer"
v-for="item in personTypeOptions">
{{ item.name }}
</el-tag>
<el-link :underline="false" @click="pageForm.personTypes=[];doSearch()"
type="danger"
v-if="personTypeOptions.length&&pageForm.personTypes.length">清空
</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 class="query-row"
v-if="is_H10===true||is_A06===true||is_sysadmin===true||is_H02===true||is_H04===true">
<el-col class="query-title">在职状态</el-col>
<el-col class="query-content">
<el-tag
:effect="pageForm.userStates.includes(item.name)?'dark':'plain'"
:key="item.code"
:type="item.name"
@click="tagClick('userStates',item.name)"
style="margin-right: 10px;cursor: pointer"
v-for="item in userStateOptions">
{{ item.name }}
</el-tag>
<el-link :underline="false" @click="pageForm.userStates=[];doSearch()"
type="danger"
v-if="userStateOptions.length&&pageForm.userStates.length">清空
</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"
v-if="is_H10===true||is_A06===true||is_sysadmin===true||is_H02===true||is_H04===true">
<el-col class="query-title">部门查询</el-col>
<el-col class="query-content">
<el-row :gutter="20">
<el-col :lg="12" :md="12" :sm="24" :xl="12" :xs="24">
<el-select @change="flushUnits();doSearch()"
@clear="flushUnits();doSearch()"
:clearable="is_H10===true||is_A06===true||is_sysadmin===true"
filterable="true"
placeholder="所属工会" style="width: 100%"
v-model="pageForm.unionId">
<el-option :label="item.unionname" :value="item.id"
v-for="item in unions"></el-option>
</el-select>
</el-col>
<el-col :lg="12" :md="12" :sm="24" :xl="12" :xs="24">
<el-select @change="doSearch" @clear="doSearch" clearable="true"
filterable="true"
placeholder="所属单位"
style="width: 100%"
v-model="pageForm.unitId">
<el-option :label="item.name" :value="item.id"
v-for="item in units"></el-option>
</el-select>
</el-col>
</el-row>
</el-col>
</el-row>
<template v-if="is_H10===true||is_A06===true||is_sysadmin===true||is_H02===true||is_H04===true">
<!--<el-row class="query-row">
<el-col class="query-title">活动部门</el-col>
<el-col class="query-content">
<el-row :gutter="20">
<el-col :lg="12" :md="12" :sm="24" :xl="12" :xs="24">
<el-select @change="flushUnits();doSearch()" @clear="flushUnits();doSearch()"
:clearable="is_A06===true||is_sysadmin===true"
filterable="true"
placeholder="所属工会" style="width: 100%"
v-model="pageForm.activityUnionId">
<el-option :label="item.unionname" :value="item.id"
v-for="item in activityUnions"></el-option>
</el-select>
</el-col>
<el-col :lg="12" :md="12" :sm="24" :xl="12" :xs="24">
<el-select @change="doSearch" @clear="doSearch" clearable="true"
filterable="true"
placeholder="所属单位"
style="width: 100%"
v-model="pageForm.activityUnitId">
<el-option :label="item.name" :value="item.id"
v-for="item in activityUnits"></el-option>
</el-select>
</el-col>
</el-row>
</el-col>
</el-row>-->
<el-row class="query-row">
<el-col class="query-title">系统角色</el-col>
<el-col class="query-content">
<el-row :gutter="20">
<el-col :span="6">
<el-select @change="getRoleListByMenuId" v-model="pageForm.module"
clearable
filterable
style="width: 100%" placeholder="请选择角色所属的系统">
<el-option
:key="item.id"
:label="item.name"
:value="item.id"
v-for="item in menuOptions">
</el-option>
</el-select>
</el-col>
<el-col :span="6" v-if="relatedSessionMenus.includes(pageForm.module)">
<el-select filterable
placeholder="届次"
style="width: 100%"
:disabled="!relatedSessionMenus.includes(pageForm.module)"
v-model="pageForm.teacherMeetingId">
<el-option :key="item.id" :label="item.name"
:value="item.id"
v-for="item in meetingOptions">
</el-option>
</el-select>
</el-col>
<el-col :span="12">
<el-select
@change="doSearch" clearable filterable
placeholder="请选择角色"
multiple
style="width: 100%"
v-model="pageForm.roleIds">
<el-option :label="item.name" :value="item.id"
v-for="item in roleList"></el-option>
</el-select>
</el-col>
</el-row>
</el-col>
</el-row>
</template>
<el-row class="query-row"
v-if="is_H10===true||is_A06===true||is_sysadmin===true||is_H02===true||is_H04===true">
<el-col class="query-title">协会</el-col>
<el-col class="query-content">
<el-select v-model="pageForm.clubId" placeholder="请选择协会" @change="doSearch"
filterable
style="width: 100%">
<el-option
v-for="item in clubOptions"
:key="item.stid"
:label="item.name"
:value="item.stid">
</el-option>
</el-select>
</el-col>
</el-row>
<el-row class="query-row">
<el-col class="query-title">活动组别</el-col>
<el-col class="query-content">
<el-select @change="doSearch()" placeholder="请选择活动组别范围之外的人员" clearable
style="width: 100%" v-model="pageForm.activityGroupId">
<el-option :label="item.groupName"
:value="item.groupId"
v-for="item in activityGroupList2"></el-option>
</el-select>
</el-col>
</el-row>
<el-row class="query-row"
v-if="is_H10===true||is_A06===true||is_sysadmin===true||is_H02===true||is_H04===true">
<el-col class="query-title">年龄范围</el-col>
<el-col class="query-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 class="query-row"
v-if="is_H10===true||is_A06===true||is_sysadmin===true||is_H02===true||is_H04===true">
<el-col class="query-title">条件匹配</el-col>
<el-col class="query-content">
<user-cnd @cnd="(v)=>{this.$set(this.pageForm,'activityUserCnd',v)}"></user-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>
</el-card>
<el-card class="mt10" shadow="never">
<table-tool :app="this" label="筛选人员">
<template #func>
<el-button @click="doExportUser"
size="medium"
type="primary" icon="el-icon-download">
导出查询人员
</el-button>
<el-button @click="setDialogVisible=true"
size="medium"
type="primary">
设置为活动人员
</el-button>
</template>
</table-tool>
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder" border
ref="userTable" stripe>
<el-table-column label="序号" type="index" width="80px"></el-table-column>
<el-table-column
:label="column.label"
:prop="column.prop"
:sortable="column.sortable"
align="center"
header-align="center"
show-overflow-tooltip
v-for="column in tableColumns"
></el-table-column>
</el-table>
<el-row class="el-pagination-container">
<el-pagination
@size-change="pageSizeChange"
@current-change="pageNumberChange"
:current-page="pageForm.pageNumber"
:page-size="pageForm.pageSize"
layout="total, prev, pager, next"
:total="pageForm.totalCount">
</el-pagination>
</el-row>
</el-card>
</template>
<el-dialog :visible.sync="setDialogVisible" title="设置活动人员" width="45%" :append-to-body="true"
:close-on-click-modal="false">
<el-form :model="formData" :rules="rules" label-width="100px" ref="setForm">
<el-form-item label="添加方式" prop="setGroupType">
<el-radio-group size="small" v-model="formData.setGroupType">
<el-radio :label="1">添加至原有分组</el-radio>
<el-radio :label="2">添加到新分组</el-radio>
</el-radio-group>
</el-form-item>
<el-row v-if="formData.setGroupType===1">
<el-form-item label="原有分组" prop="setGroupId">
<el-radio-group size="small" v-model="formData.setGroupId">
<el-radio :disabled="item.groupId!=pageForm.activityGroupId" :label="item.groupId"
border v-for="item in activityGroupList">
{{ item.groupName }}
</el-radio>
</el-radio-group>
</el-form-item>
</el-row>
<el-row v-if="formData.setGroupType===2">
<el-form-item label="新分组" prop="setGroupName">
<el-input placeholder="请输入新分组名称" v-model="formData.setGroupName"></el-input>
</el-form-item>
</el-row>
</el-form>
<span class="dialog-footer" slot="footer">
<el-button @click="setDialogVisible = false"> </el-button>
<el-button @click="doSetActivityUser" type="primary"
v-loading="settingLoading"> </el-button>
</span>
</el-dialog>
</div>
</template>
<script>
module.exports = {
props: {},
model: {},
mixins: [initTableMixins],
data() {
return {
userList: [],
clubOptions: [],
settingLoading: false,
setDialogVisible: false,
setGroupType: null,
setGroupId: null,
setGroupName: null,
personTypeOptions: [],
userStateOptions: [],
activityGroupList: [],
activityGroupList2: [],
memberTypeOptions: [{
code: 'unionMember',
name: '工会会员'
}, {
code: 'welfareMember',
name: '福利会员'
}, {
code: 'sickFundMember',
name: '基金会员'
}],
sexTypeOptions: [
{code: '男', name: '男'},
{code: '女', name: '女'}
],
pageForm: {
age: [0, 0],
unionId: '',
unitId: '',
clubId: '',
searchName: "u.username",
personTypes: [],
userStates: [],
memberStatus: [],
memberTypes: [],
sexTypes: [],
minAge: 0,
maxAge: 0,
year: moment().format('YYYY'),
module: '',
teacherMeetingId: '',
activityGroupId: '',
roleIds: [],
userId: [],
activityUserCnd: '',
reverseSelection: false
},
activityUnions: [],
unions: [],
units: [],
activityUnits: [],
menuOptions: [],
meetingOptions: [],
roleList: [],
tableHeight: '0px',
tableColumns: [
{prop: 'loginName', label: '工号'},
{prop: 'userName', label: '姓名'},
{prop: 'sex', label: '性别'},
{prop: 'birthday', label: '出生年月', sortable: true},
{prop: 'age', label: '年龄', sortable: true},
{prop: 'mobile', label: '联系电话'},
{prop: 'personType', label: '人员类型', sortable: true},
{prop: 'userState', label: '在职状态', sortable: true},
{prop: 'unitName', label: '所属单位', sortable: true},
{prop: 'unionName', label: '所属工会', sortable: true},
// {prop: 'activityUnionName', label: '活动工会', sortable: true},
],
rules: {
setGroupType: [{required: true, message: '请选择添加方式', trigger: ['blur', 'change']}],
setGroupId: [{required: true, message: '请选择分组', trigger: ['blur', 'change']}],
setGroupName: [{required: true, message: '请输入分组名称', trigger: ['blur', 'change']}]
},
relatedSessionMenus: ['aca4d14498c145ceb5b24ed70776aae2', '733d7266652740a3aeac9da97ab5eeca', 'fe2d0768e26d4a80beeb159306bb8d01'],
roleData: {}
}
},
computed: {
is_H10() {
return this.roleData.is_H10
},
is_A06() {
return this.roleData.is_A06
},
is_H04() {
return this.roleData.is_H04
},
is_H02() {
return this.roleData.is_H02
},
is_sysadmin() {
return this.roleData.is_sysadmin
},
unionid() {
return this.roleData.unionid
},
},
components: {
'user-cnd': httpVueLoader('/components/plugins/UserCnd.vue'),
},
methods: {
doExportUser() {
const {
userId,
memberTypes,
sexTypes,
personTypes,
userStates,
unionId,
unitId,
teacherMeetingId,
roleIds,
clubId,
activityGroupId,
age,
reverseSelection,
activityUserCnd
} = this.pageForm
let props = {}
this.tableColumns.forEach(v => {
props[v.prop] = v.label
})
window.open("/platform/activity/basic/scope/doExportUser?userId=" + JSON.stringify(userId) +
"&props=" + JSON.stringify(props) +
"&memberTypes=" + JSON.stringify(memberTypes) +
"&sexTypes=" + JSON.stringify(sexTypes) +
"&personTypes=" + JSON.stringify(personTypes) +
"&userStates=" + JSON.stringify(userStates) +
"&roleIds=" + JSON.stringify(roleIds) +
"&age=" + JSON.stringify(age) +
"&activityUserCnd=" + (activityUserCnd ? JSON.stringify(activityUserCnd) : activityUserCnd) +
"&reverseSelection=" + reverseSelection +
"&clubId=" + clubId +
"&activityGroupId=" + activityGroupId +
"&teacherMeetingId=" + teacherMeetingId +
"&unionId=" + unionId +
"&unitId=" + unitId
)
},
doReset() {
this.pageForm.userId = []
this.pageForm.memberTypes = []
this.pageForm.sexTypes = []
this.pageForm.personTypes = []
this.pageForm.userStates = []
this.pageForm.unionId = ''
this.pageForm.unitId = ''
this.pageForm.module = ''
this.pageForm.teacherMeetingId = ''
this.pageForm.roleIds = []
this.pageForm.clubId = ''
this.pageForm.activityGroupId = ''
this.pageForm.activityUserCnd = ''
this.pageForm.age = [0, 0]
this.pageForm.reverseSelection = false
this.doSearch()
},
async queryUser(val) {
this.userList = await searchUser(val)
},
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.doSearch()
},
async flushUnits() {
this.$set(this.pageForm, "unitId", "")
this.units = await getUnits(this.pageForm.unionId)
/*if (this.is_sysadmin || this.is_A06) {
this.units = await getUnits(this.pageForm.unionId)
this.activityUnits = await getActivityUnits(this.pageForm.activityUnionId)
} else {
this.units = await getUnits(this.unionid)
}*/
},
async pageData() {
sublime.showLoadingbar()
const pageForm = clone(this.pageForm)
pageForm.personTypes = JSON.stringify(pageForm.personTypes)
pageForm.userStates = JSON.stringify(pageForm.userStates)
pageForm.memberStatus = JSON.stringify(pageForm.memberStatus)
pageForm.memberTypes = JSON.stringify(pageForm.memberTypes)
pageForm.sexTypes = JSON.stringify(pageForm.sexTypes)
pageForm.roleIds = JSON.stringify(pageForm.roleIds)
pageForm.userId = JSON.stringify(pageForm.userId)
pageForm.age = JSON.stringify(pageForm.age)
pageForm.activityUserCnd = pageForm.activityUserCnd ? JSON.stringify(pageForm.activityUserCnd) : pageForm.activityUserCnd
const resp = await $.post('/platform/activity/basic/scope/pageData', pageForm)
sublime.closeLoadingbar()
if (resp.code === 0) {
this.tableData = resp.data.list
this.pageForm.totalCount = resp.data.totalCount
} else {
this.notifyWarning(resp.msg)
}
},
async doSetActivityUser() {
const valid = await this.$refs.setForm.validate()
if (!valid) {
return
}
if (this.tableData.length === 0) {
this.$message.warning('请先指定筛选条件!')
return
}
const confirm = await this.$confirm('是否将符合搜索条件的用户设为活动人员?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
if (confirm === 'confirm') {
this.settingLoading = true
const pageForm = clone(this.pageForm)
pageForm.personTypes = JSON.stringify(pageForm.personTypes)
pageForm.userStates = JSON.stringify(pageForm.userStates)
pageForm.memberStatus = JSON.stringify(pageForm.memberStatus)
pageForm.memberTypes = JSON.stringify(pageForm.memberTypes)
pageForm.sexTypes = JSON.stringify(pageForm.sexTypes)
pageForm.roleIds = JSON.stringify(pageForm.roleIds)
pageForm.userId = JSON.stringify(pageForm.userId)
pageForm.age = JSON.stringify(pageForm.age)
pageForm.activityUserCnd = pageForm.activityUserCnd ? JSON.stringify(pageForm.activityUserCnd) : pageForm.activityUserCnd
Object.assign(pageForm, this.formData)
const resp = await $.post('/platform/activity/basic/scope/doSetActivityUser', pageForm)
if (resp.code === 0) {
this.setDialogVisible = false
// this.userScopeDialog = false
await this.getActivityGroup()
this.doSearch()
this.notifySuccess(resp.msg)
this.formData = {
setGroupType: null,
setGroupId: null,
setGroupName: null
}
} else {
this.notifyError(resp.msg)
}
this.settingLoading = false
this.$emit("update:group_id", resp.data)
this.$emit('group_change')
}
},
async getActivityGroup() {
const resp = await $.get('/platform/activity/basic/scope/getActivityUserScopeGroup')
this.activityGroupList = resp.data
this.activityGroupList2 = []
resp.data.forEach(v => {
this.activityGroupList2.push({groupId: v.groupId, groupName: v.groupName + "范围之外人员"})
})
},
async getMenuOptions() {
const {data} = await $.get("/platform/sys/role/getMenuOptions")
this.menuOptions = data
},
async getRoleListByMenuId() {
if (['aca4d14498c145ceb5b24ed70776aae2', '733d7266652740a3aeac9da97ab5eeca'].includes(this.pageForm.module)) {
//教代会
let meets = await proposal.getOpenMeeting()
this.meetingOptions = meets.map(v => ({...v, name: v.jdhallname}))
} else if (['fe2d0768e26d4a80beeb159306bb8d01'].includes(this.pageForm.module)) {
//工代会
let meets = await getGdh(true)
this.meetingOptions = meets.map(v => ({...v, name: v.gdhAllName}))
}
this.pageForm.teacherMeetingId = ''
const {data} = await $.post("/platform/activity/basic/scope/getRoleListByMenuId", {menuId: this.pageForm.module})
this.roleList = data
},
async getRolesAndUnion() {
const {data} = await $.post("/platform/activity/basic/scope/getRolesAndUnion")
this.roleData = data
}
},
async created() {
await this.getRolesAndUnion()
this.clubOptions = await getClubsByRole()
this.unions = await getUnions(null)
/* if (((this.is_sysadmin || this.is_A06 || this.is_H02) === false) && this.is_H04 === true) {
this.unions = await getUnionList(this.unionid)
this.$set(this.pageForm, "unionId", this.unions[0].id)
} else {
this.unions = await getUnions(null)
this.activityUnions = await getActivityUnions()
}
if (this.is_H04 === false && this.is_H02 === true) {
if (this.clubOptions.length > 0) {
this.$set(this.pageForm, "clubId", this.clubOptions[0].stid)
}
}*/
await this.flushUnits()
await this.getActivityGroup()
this.personTypeOptions = await getDictOptions("UserType")
this.userStateOptions = await getDictOptions("UserState")
await this.getMenuOptions()
await this.pageData()
},
}
</script>
<style>
.query-row {
display: flex;
align-items: center;
padding: 6px 0;
}
.query-row:not(:last-child) {
border-bottom: 1px dashed rgb(230, 230, 230);
}
.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;
}
@media screen and (max-width: 992px) {
.query-row:nth-child(4) .query-content .el-col:not(:last-child) {
margin-bottom: 5px;
}
.query-title {
display: none;
}
}
.header_card .el-card__body {
padding: 2px 20px;
}
.user_card .el-card__body {
padding: 2px 20px;
}
.user_card {
border: none !important;
}
.user_table {
max-height: 260px;
}
.user_table .el-table__cell {
padding: 0;
}
.el-pagination {
height: 40px;
}
.el-popover {
height: 250px;
}
.reverseCheckBox {
margin: 0 10px 0 0 !important;
}
</style>