This commit is contained in:
2025-08-14 14:28:27 +08:00
parent 6203a06eaa
commit 8f563d361e
7 changed files with 673 additions and 592 deletions
@@ -95,7 +95,7 @@
<dict-select v-model="pageForm.personType" style="width: 100%" clearable
placeholder="人员类型"
@change="doSearch"
code="PERSON_TYPE"></dict-select>
code="UserType"></dict-select>
</div>
</div>
@@ -105,7 +105,7 @@
<dict-select v-model="pageForm.userState" style="width: 100%" clearable
placeholder="在职状态"
@change="doSearch"
code="USER_STATE"></dict-select>
code="UserState"></dict-select>
</div>
</div>
@@ -118,10 +118,13 @@
<el-card shadow="never" class="mt10">
<table-tool :label="currentGroupName" :app="this">
<template #label_end>
<!-- <span class="text-danger pl5">提醒删除活动分组操作请先选择某个活动分组后再点击右边的删除按钮</span>-->
<!-- <span class="text-danger pl5">提醒删除活动分组操作请先选择某个活动分组后再点击右边的删除按钮</span>-->
</template>
<template #func>
<el-button v-if="is_sysadmin||is_A06"
type="primary" size="medium" icon="el-icon-printer" @click="dialogVisible = true">
导入XLSX查询
</el-button>
<el-button @click="doExportUser" icon="el-icon-printer"
size="medium" type="primary" :disabled="!pageForm.groupId">
导出活动分组人员xlsx
@@ -133,7 +136,7 @@
</el-button>
</template>
</table-tool>
<el-table ref="userTable" :data="tableData" stripe border :size="tableSize">
<el-table ref="userTable" :data="tableData" stripe border :size="tableSize" @sort-change="pageOrder">
<el-table-column type="index" label="序号" width="80px"></el-table-column>
<el-table-column
align="center"
@@ -164,6 +167,68 @@
</el-row>
</el-card>
<el-dialog title="人员导入" :visible.sync="dialogVisible" width="50%" :close-on-click-modal="false" append-to-body>
<el-timeline>
<el-timeline-item timestamp="下载模板" placement="top">
<el-card>
<el-button size="medium" type=""
@click="window.open('/platform/activity/basic/user/downloadImport')"
icon="el-icon-download">下载模板
</el-button>
</el-card>
</el-timeline-item>
<el-timeline-item timestamp="上传文件" placement="top">
<el-card>
<el-upload
name="file"
ref="upload"
:on-remove="(file, fileList) => {
importData.fileList = fileHandleRemove(file, fileList)
}"
:on-change="(file, fileList) => {
importData.fileList = fileHandleChange(file, fileList,{type:['xls','xlsx']})
}"
:auto-upload="false"
:limit="1"
:file-list="importData.fileList">
<el-button size="medium" type="" icon="el-icon-upload"
style="width: 200px">选择文件
</el-button>
<div class="el-upload__tip" slot="tip" style="color: #F56C6C">
只能上传 xls/xlsx 文件
</div>
</el-upload>
</el-card>
</el-timeline-item>
<el-timeline-item placement="top" timestamp="导入结果">
<el-card shadow="never">
<p>总记录数:{{ errorInfoData.totalCount }}</p>
<p>成功数:<span class="text-success">{{ errorInfoData.successCount }}</span></p>
<p>错误数:<span class="text-danger">{{ errorInfoData.errorCount }}</span></p>
<el-link @click="exportErrors" type="primary" v-if="errorInfoData.errorCount>0">下载错误记录
</el-link>
</el-card>
</el-timeline-item>
</el-timeline>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false" type="primary"
:disabled="importLoading">取 消</el-button>
<el-button type="primary" @click="clearSearchCnd"
:loading="importLoading">清空查询条件</el-button>
<el-button type="primary" @click="doImport" :loading="importLoading">核对人员</el-button>
<el-button type="primary" @click="doImportSearch"
:loading="importLoading">查询人员</el-button>
</span>
</el-dialog>
</div>
@@ -218,7 +283,7 @@ module.exports = {
tableColumns: [
{prop: 'loginName', label: '工号'},
{prop: 'userName', label: '姓名'},
{prop: 'sex', label: '性别'},
{prop: 'sex', label: '性别', sortable: true},
{prop: 'birthday', label: '出生年月'},
{prop: 'mobile', label: '联系电话'},
{prop: 'personType', label: '人员类型', sortable: true},
@@ -230,13 +295,122 @@ module.exports = {
],
roleData: {},
currentGroupName: null,
errorInfoData: {
totalCount: 0,
successCount: 0,
errorCount: 0,
errorList: 0,
},
dialogVisible: false,
importLoading: false,
importData: {
fileList: [],
},
successUserIdList: []
}
},
mixins: [initTableMixins],
components: {
'dict-select': httpVueLoader('/components/plugins/DictSelect.vue?v=1.0.0')
'dict-select': httpVueLoader('/components/plugins/DictSelect.vue?v=1.0.0'),
'file-import': httpVueLoader('/components/plugins/FileImport.vue')
},
methods: {
clearSearchCnd() {
this.importData = {
fileList: [],
}
this.errorInfoData = {
totalCount: 0,
successCount: 0,
errorCount: 0,
errorList: [],
}
this.pageForm.userIds = []
this.successUserIdList = []
this.doSearch()
this.dialogVisible = false;
$.get('/platform/activity/basic/user/clearSearchCnd', {existsLoginNameRedisKey: this.pageForm.existsLoginNameRedisKey}).then(res => {
if (res.code === 0) {
this.$message.success(res.msg)
} else {
this.$message.error(res.msg)
}
})
},
doImportSearch() {
this.doSearch()
this.dialogVisible = false
},
exportErrors() {
const data = this.errorInfoData.errorList
// 创建工作簿
const workbook = XLSX.utils.book_new();
// 创建工作表
const worksheet = XLSX.utils.json_to_sheet(data);
// 将工作表添加到工作簿
XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1');
// 将工作簿转换为二进制对象
const excelBuffer = XLSX.write(workbook, {bookType: 'xlsx', type: 'array'});
// 将二进制对象转换为Blob对象
const blob = new Blob([excelBuffer], {type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'});
// 创建下载链接并设置相关属性
const url = window.URL.createObjectURL(blob);
const link = document.createElement('a');
link.href = url;
link.download = '核对记录.xlsx';
// 模拟点击下载链接
document.body.appendChild(link);
link.click();
// 清理下载链接
document.body.removeChild(link);
window.URL.revokeObjectURL(url);
},
doImport() {
if (this.importData.fileList.length === 0) {
this.notifyWarning("请选择文件")
return
}
const data = new FormData();
data.append("groupId", this.pageForm.groupId)
this.importData.fileList.forEach((val) => {
data.append("file", val.raw, val.raw.name);
});
this.importLoading = true
$.ajax({
url: "/platform/activity/basic/user/doImport",
type: "post",
data: data,
processData: false,
contentType: false,
success: (data) => {
this.importLoading = false
if (data.code === 0) {
this.notifySuccess("核对成功")
this.errorInfoData = data.data
} else {
this.notifyWarning("核对失败")
}
this.errorInfoData = data.data
this.pageForm.existsLoginNameRedisKey = data.data.existsLoginNameRedisKey
},
error: (data) => {
this.notifyWarning("导入失败")
this.importLoading = false
}
});
},
viewGroupName() {
if (this.pageForm.groupId) {
const group = this.activityGroupList.find(v => v.groupId === this.pageForm.groupId)
@@ -259,7 +433,9 @@ module.exports = {
type: 'warning'
})
if (confirm === 'confirm') {
const resp = await $.post('/platform/activity/basic/user/doDelete', {id, groupId})
this.pageForm.id=id
this.pageForm.groupId=groupId
const resp = await $.post('/platform/activity/basic/user/doDelete', this.pageForm)
if (resp.code === 0) {
this.$message.success(resp.msg)
this.$set(this.pageForm, "groupId", null)
@@ -271,13 +447,12 @@ module.exports = {
},
async flushUnits() {
this.$set(this.pageForm, "unitId", "")
this.units = await getUnits(this.pageForm.unionId)
/* if (this.is_A06 || this.is_sysadmin || this.is_H03) {
if (this.is_A06 || this.is_sysadmin || this.is_H03) {
this.units = await getUnits(this.pageForm.unionId)
this.ActivityUnits = await getActivityUnits(this.pageForm.activityUnionId)
} else {
this.units = await getUnits(this.unionid)
}*/
}
},
async getActivityGroup() {
this.pageForm.groupId = ''
@@ -288,6 +463,11 @@ module.exports = {
}
await this.pageData()
},
pageOrder(column) {
this.pageForm.pageOrderName = column.prop
this.pageForm.pageOrderBy = column.order
this.pageData()
},
async pageData() {
sublime.showLoadingbar()
const resp = await $.post('/platform/activity/basic/user/pageData', this.pageForm)
@@ -297,14 +477,19 @@ module.exports = {
}
sublime.closeLoadingbar()
},
async getRolesAndUnion() {
const {data} = await $.post("/platform/activity/basic/scope/getRolesAndUnion")
this.roleData = data
}
},
async created() {
this.unions = await getUnions(null)
// this.ActivityUnions = await getActivityUnions()
this.ActivityUnions = await getActivityUnions()
await this.flushUnits()
await this.getActivityGroup()
this.viewGroupName()
await this.getRolesAndUnion()
}
}
@@ -17,7 +17,7 @@
</el-row>
<el-row class="query-row"
v-if="is_H10===true||is_A06===true||is_sysadmin===true||is_H02===true||is_H04===true">
v-if="is_H10===true||is_A06===true||is_sysadmin===true||is_H02===true">
<el-col class="query-title hidden-xs-only">会员类型</el-col>
<el-col class="query-content">
<el-tag
@@ -48,7 +48,7 @@
</el-row>
<el-row class="query-row"
v-if="is_H10===true||is_A06===true||is_sysadmin===true||is_H02===true||is_H04===true">
v-if="is_H10===true||is_A06===true||is_sysadmin===true||is_H04===true">
<el-col class="query-title">人员类型</el-col>
<el-col class="query-content">
<el-tag
@@ -75,7 +75,7 @@
</el-row>
<el-row class="query-row"
v-if="is_H10===true||is_A06===true||is_sysadmin===true||is_H02===true||is_H04===true">
v-if="is_H10===true||is_A06===true||is_sysadmin===true||is_H04===true">
<el-col class="query-title">在职状态</el-col>
<el-col class="query-content">
<el-tag
@@ -101,7 +101,7 @@
<el-row class="query-row"
v-if="is_H10===true||is_A06===true||is_sysadmin===true||is_H02===true||is_H04===true">
v-if="is_H10===true||is_A06===true||is_sysadmin===true||is_H04===true">
<el-col class="query-title">部门查询</el-col>
<el-col class="query-content">
<el-row :gutter="20">
@@ -130,7 +130,7 @@
</el-col>
</el-row>
<template v-if="is_H10===true||is_A06===true||is_sysadmin===true||is_H02===true||is_H04===true">
<template v-if="is_H10===true||is_A06===true||is_sysadmin===true">
<!--<el-row class="query-row">
<el-col class="query-title">活动部门</el-col>
@@ -208,11 +208,12 @@
</template>
<el-row class="query-row"
v-if="is_H10===true||is_A06===true||is_sysadmin===true||is_H02===true||is_H04===true">
v-if="is_H10===true||is_A06===true||is_sysadmin===true||is_H02===true">
<el-col class="query-title">协会</el-col>
<el-col class="query-content">
<el-select v-model="pageForm.clubId" placeholder="请选择协会" @change="doSearch"
filterable
:clearable="is_H10===true||is_A06===true||is_sysadmin===true||(is_H04===true&&is_H02===true)"
style="width: 100%">
<el-option
v-for="item in clubOptions"
@@ -237,7 +238,7 @@
</el-row>
<el-row class="query-row"
v-if="is_H10===true||is_A06===true||is_sysadmin===true||is_H02===true||is_H04===true">
v-if="is_H10===true||is_A06===true||is_sysadmin===true||is_H04===true">
<el-col class="query-title">年龄范围</el-col>
<el-col class="query-content">
<el-row type="flex" style="align-items: center">
@@ -258,7 +259,7 @@
<el-row class="query-row"
v-if="is_H10===true||is_A06===true||is_sysadmin===true||is_H02===true||is_H04===true">
v-if="is_H10===true||is_A06===true||is_sysadmin===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>
@@ -279,6 +280,10 @@
<el-card class="mt10" shadow="never">
<table-tool :app="this" label="筛选人员">
<template #func>
<el-button v-if="is_sysadmin||is_A06"
type="primary" size="medium" icon="el-icon-printer" @click="dialogVisible = true">
导入XLSX设置分组
</el-button>
<el-button @click="doExportUser"
size="medium"
type="primary" icon="el-icon-download">
@@ -349,6 +354,67 @@
v-loading="settingLoading"> </el-button>
</span>
</el-dialog>
<el-dialog title="人员导入" :visible.sync="dialogVisible" width="50%" :close-on-click-modal="false" append-to-body>
<el-timeline>
<el-timeline-item timestamp="下载模板" placement="top">
<el-card>
<el-button size="medium" type=""
@click="window.open('/platform/activity/basic/user/downloadImport')"
icon="el-icon-download">下载模板
</el-button>
</el-card>
</el-timeline-item>
<el-timeline-item timestamp="上传文件" placement="top">
<el-card>
<el-upload
name="file"
ref="upload"
:on-remove="(file, fileList) => {
importData.fileList = fileHandleRemove(file, fileList)
}"
:on-change="(file, fileList) => {
importData.fileList = fileHandleChange(file, fileList,{type:['xls','xlsx']})
}"
:auto-upload="false"
:limit="1"
:file-list="importData.fileList">
<el-button size="medium" type="" icon="el-icon-upload"
style="width: 200px">选择文件
</el-button>
<div class="el-upload__tip" slot="tip" style="color: #F56C6C">
只能上传 xls/xlsx 文件
</div>
</el-upload>
</el-card>
</el-timeline-item>
<el-timeline-item placement="top" timestamp="导入结果">
<el-card shadow="never">
<p>总记录数:{{ errorInfoData.totalCount }}</p>
<p>成功数:<span class="text-success">{{ errorInfoData.successCount }}</span></p>
<p>错误数:<span class="text-danger">{{ errorInfoData.errorCount }}</span></p>
<el-link @click="exportErrors" type="primary" v-if="errorInfoData.errorCount>0">下载错误记录
</el-link>
</el-card>
</el-timeline-item>
</el-timeline>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false" type="primary"
:disabled="importLoading">取 消</el-button>
<el-button type="primary" @click="clearSearchCnd"
:loading="importLoading">清空查询条件</el-button>
<el-button type="primary" @click="doImport" :loading="importLoading">核对人员</el-button>
<el-button type="primary" @click="doImportSearch"
:loading="importLoading">查询人员</el-button>
</span>
</el-dialog>
</div>
</template>
@@ -434,7 +500,19 @@ module.exports = {
setGroupName: [{required: true, message: '请输入分组名称', trigger: ['blur', 'change']}]
},
relatedSessionMenus: ['aca4d14498c145ceb5b24ed70776aae2', '733d7266652740a3aeac9da97ab5eeca', 'fe2d0768e26d4a80beeb159306bb8d01'],
roleData: {}
roleData: {},
dialogVisible: false,
importLoading: false,
importData: {
fileList: [],
},
errorInfoData: {
totalCount: 0,
successCount: 0,
errorCount: 0,
errorList: 0,
},
}
},
computed: {
@@ -461,6 +539,98 @@ module.exports = {
'user-cnd': httpVueLoader('/components/plugins/UserCnd.vue'),
},
methods: {
exportErrors() {
const data = this.errorInfoData.errorList
// 创建工作簿
const workbook = XLSX.utils.book_new();
// 创建工作表
const worksheet = XLSX.utils.json_to_sheet(data);
// 将工作表添加到工作簿
XLSX.utils.book_append_sheet(workbook, worksheet, 'Sheet1');
// 将工作簿转换为二进制对象
const excelBuffer = XLSX.write(workbook, {bookType: 'xlsx', type: 'array'});
// 将二进制对象转换为Blob对象
const blob = new Blob([excelBuffer], {type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'});
// 创建下载链接并设置相关属性
const url = window.URL.createObjectURL(blob);
const link = document.createElement('a');
link.href = url;
link.download = '核对记录.xlsx';
// 模拟点击下载链接
document.body.appendChild(link);
link.click();
// 清理下载链接
document.body.removeChild(link);
window.URL.revokeObjectURL(url);
},
doImportSearch() {
this.doSearch()
this.dialogVisible = false
},
doImport() {
if (this.importData.fileList.length === 0) {
this.notifyWarning("请选择文件")
return
}
const data = new FormData();
this.importData.fileList.forEach((val) => {
data.append("file", val.raw, val.raw.name);
});
this.importLoading = true
$.ajax({
url: "/platform/activity/basic/scope/doImport",
type: "post",
data: data,
processData: false,
contentType: false,
success: (data) => {
this.importLoading = false
if (data.code === 0) {
this.notifySuccess("核对成功")
this.errorInfoData = data.data
} else {
this.notifyWarning("核对失败")
}
this.errorInfoData = data.data
this.pageForm.existsLoginNameRedisKey = data.data.existsLoginNameRedisKey
},
error: (data) => {
this.notifyWarning("导入失败")
this.importLoading = false
}
});
},
clearSearchCnd() {
this.importData = {
fileList: [],
}
this.errorInfoData = {
totalCount: 0,
successCount: 0,
errorCount: 0,
errorList: [],
}
this.pageForm.userIds = []
this.successUserIdList = []
this.doSearch()
this.dialogVisible = false;
$.get('/platform/activity/basic/scope/clearSearchCnd', {existsLoginNameRedisKey: this.pageForm.existsLoginNameRedisKey}).then(res => {
if (res.code === 0) {
this.$message.success(res.msg)
} else {
this.$message.error(res.msg)
}
})
},
doExportUser() {
const {
userId,
@@ -476,7 +646,8 @@ module.exports = {
activityGroupId,
age,
reverseSelection,
activityUserCnd
activityUserCnd,
existsLoginNameRedisKey
} = this.pageForm
let props = {}
@@ -497,7 +668,8 @@ module.exports = {
"&activityGroupId=" + activityGroupId +
"&teacherMeetingId=" + teacherMeetingId +
"&unionId=" + unionId +
"&unitId=" + unitId
"&unitId=" + unitId+
"&existsLoginNameRedisKey=" + existsLoginNameRedisKey
)
},
doReset() {
@@ -534,13 +706,12 @@ module.exports = {
},
async flushUnits() {
this.$set(this.pageForm, "unitId", "")
this.units = await getUnits(this.pageForm.unionId)
/*if (this.is_sysadmin || this.is_A06) {
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()
@@ -562,7 +733,7 @@ module.exports = {
this.tableData = resp.data.list
this.pageForm.totalCount = resp.data.totalCount
} else {
this.$message.warning(resp.msg)
this.notifyWarning(resp.msg)
}
},
async doSetActivityUser() {
@@ -600,7 +771,7 @@ module.exports = {
// this.userScopeDialog = false
await this.getActivityGroup()
this.doSearch()
this.$message.success(resp.msg)
this.notifySuccess(resp.msg)
this.formData = {
setGroupType: null,
setGroupId: null,
@@ -649,9 +820,8 @@ module.exports = {
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) {
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 {
@@ -662,11 +832,11 @@ module.exports = {
if (this.clubOptions.length > 0) {
this.$set(this.pageForm, "clubId", this.clubOptions[0].stid)
}
}*/
}
await this.flushUnits()
await this.getActivityGroup()
this.personTypeOptions = await getDictOptions("PERSON_TYPE")
this.userStateOptions = await getDictOptions("USER_STATE")
this.personTypeOptions = await getDictOptions("UserType")
this.userStateOptions = await getDictOptions("UserState")
await this.getMenuOptions()
await this.pageData()
},
@@ -3,46 +3,8 @@ layout("/layouts/platform.html"){
#-->
<style>
.query-row {
display: flex;
align-items: center;
padding: 10px 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;
}
}
.reverseCheckBox {
margin: 0 10px 0 0 !important;
}
</style>
@@ -59,247 +21,20 @@ layout("/layouts/platform.html"){
mixins: [initTableMixins],
data() {
return {
/* userList: [],
is_H04: "${@shiro.hasRole('H04')}" === 'true',
is_A06: "${@shiro.hasRole('A06')}" === 'true',
is_H10: "${@shiro.hasRole('H10')}" === 'true',
is_H02: "${@shiro.hasRole('club01')}" === 'true',
is_sysadmin: "${@shiro.hasRole('sysadmin')}" === 'true',
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: {
unionId: "",
unitId: "",
searchName: "u.username",
personTypes: [],
userStates: [],
memberStatus: [],
memberTypes: [],
sexTypes: [],
minAge: 0,
maxAge: 0,
year: moment().format('YYYY'),
module: "",
teacherMeetingId: "",
roleIds: [],
userId: []
},
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']*/
}
},
components: {
'user-scope': httpVueLoader('/components/plugins/UserScope.vue'),
'user-scope': httpVueLoader('/components/plugins/UserScope.vue?v=' + new Date().getTime()),
},
methods: {
/* doReset() {
this.pageForm.userId = []
this.pageForm.memberTypes = []
this.pageForm.sexTypes = []
this.pageForm.personTypes = []
this.pageForm.userStates = []
this.pageForm.unionId = null
this.pageForm.module = null
this.pageForm.teacherMeetingId = null
this.pageForm.roleIds = []
this.pageForm.clubId = null
this.pageForm.activityGroupId = null
this.pageForm.age = [0, 100]
this.pageForm.reverseSelection = false
},
async queryUser(val) {
const {list} = await selectUser(val, 10)
this.userList = list
},
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", "")
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')||@shiro.hasRole('H03')}" === 'true') {
this.units = await getUnits(this.pageForm.unionId)
this.activityUnits = await getActivityUnits(this.pageForm.activityUnionId)
} else {
this.units = await getUnits("${@shiro.getPrincipalProperty('unit').getUnionid()}")
}
},
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)
const resp = await $.post(loc() + '/pageData', pageForm)
if (resp.code === 0) {
this.tableData = resp.data.list
this.pageForm.totalCount = resp.data.totalCount
}
sublime.closeLoadingbar()
},
async doSetActivityUser() {
const valid = await this.$refs.setForm.validate()
if (!valid) {
return
}
// const {personTypes, userState, unionId, unitId} = this.pageForm
// if (personTypes.length === 0 && userState.length === 0 && unionId === '' && unitId === '') {
// this.$message.warning('请先指定筛选条件!')
// 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.clubId = pageForm.clubId
Object.assign(pageForm, this.formData)
const resp = await $.post(loc() + '/doSetActivityUser', pageForm)
if (resp.code === 0) {
this.setDialogVisible = false
await this.getActivityGroup()
this.doSearch()
this.$message.success(resp.msg)
this.formData = {
setGroupType: null,
setGroupId: null,
setGroupName: null
}
}
this.settingLoading = false
}
},*/
/* async getActivityGroup() {
const resp = await $.get(loc() + '/getActivityUserScopeGroup')
this.activityGroupList = resp.data
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(loc() + "/getRoleListByMenuId", {menuId: this.pageForm.module})
this.roleList = data
},*/
},
mounted() {
setTimeout(() => {
/**
* .el-table::before 下有1px边框 故减1
*/
// this.tableHeight = window.innerHeight - (this.$refs.userTable.$el.getBoundingClientRect().top) - 20 - 50 - 10 - 1 + 'px'
// window.onresize = () => {
// this.tableHeight = window.innerHeight - (this.$refs.userTable.$el.getBoundingClientRect().top) - 20 - 50 - 10 - 1 + 'px'
// }
}, 500)
},
async created() {
/* this.clubOptions = await getClubsByRole()
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')||@shiro.hasRole('club01')}" === 'false' && "${@shiro.hasRole('H04')}" === 'true') {
this.unions = await getUnionList("${@shiro.getPrincipalProperty('unit').getUnionid()}")
this.$set(this.pageForm, "unionId", this.unions[0].id)
} else {
this.unions = await getUnions(null)
this.activityUnions = await getActivityUnions()
}
if ("${@shiro.hasRole('H04')}" === 'false' && "${@shiro.hasRole('club01')}" === 'true') {
if (this.clubOptions.length > 0) {
this.$set(this.pageForm, "clubId", this.clubOptions[0].stid)
}
}
this.flushUnits()
await this.getActivityGroup()
this.personTypeOptions = await getDictOptions("PERSON_TYPE")
this.userStateOptions = await getDictOptions("USER_STATE")
await this.getMenuOptions()
this.pageData()*/
}
})
@@ -3,19 +3,6 @@ layout("/layouts/platform.html"){
#-->
<style>
.query-row {
}
.query-title {
color: rgb(100, 100, 100);
margin-right: 10px;
min-width: 75px;
}
.query-content {
}
</style>
<div id="app" v-cloak>
@@ -25,156 +12,6 @@ layout("/layouts/platform.html"){
:group_id.sync="formData.activityGroupId"
></user-data-scope>
</guava>
<!--<guava>
<el-card shadow="never">
<div class="search">
<div class="search-item">
<div class="search-item-label">活动分组:</div>
<div class="search-item-option">
<el-select placeholder="活动分组" v-model="pageForm.groupId"
style="width: 100%;"
@change="doSearch"
filterable>
<el-option v-for="item in activityGroupList" :label="item.groupName"
:value="item.groupId"></el-option>
</el-select>
</div>
</div>
<div class="search-item">
<div class="search-item-label">姓名工号:</div>
<div class="search-item-option">
<el-input placeholder="请输入内容" clearable v-model="pageForm.searchKeyword"
style="width: 100%"
@keyup.enter.native="doSearch">
<el-select v-model="pageForm.searchName" slot="prepend"
placeholder="查询类型"
style="width: 80px;">
<el-option label="姓名" value="username"></el-option>
<el-option label="工号" value="loginname"></el-option>
</el-select>
</el-input>
</div>
</div>
<div class="search-item"
v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')||@shiro.hasRole('H03')}">
<div class="search-item-label">所属工会:</div>
<div class="search-item-option">
<el-select placeholder="所属工会" v-model="pageForm.unionId"
style="width: 100%;"
clearable="true"
@change="flushUnits" @clear="flushUnits"
filterable="true">
<el-option v-for="item in unions" :label="item.unionname"
:value="item.id"></el-option>
</el-select>
</div>
</div>
<div class="search-item">
<div class="search-item-label">所属单位:</div>
<div class="search-item-option">
<el-select placeholder="所属单位" v-model="pageForm.unitId" style="width: 100%;"
clearable="true"
@change="doSearch"
filterable="true">
<el-option v-for="item in units" :label="item.name"
:value="item.id"></el-option>
</el-select>
</div>
</div>
&lt;!&ndash;<div class="search-item"
v-if="${@shiro.hasRole('sysadmin')}">
<div class="search-item-label">活动工会:</div>
<div class="search-item-option">
<el-select placeholder="所属工会" v-model="pageForm.activityUnionId"
style="width: 100%;"
clearable="true"
@change="flushUnits" @clear="flushUnits"
filterable="true">
<el-option v-for="item in ActivityUnions" :label="item.unionname"
:value="item.id"></el-option>
</el-select>
</div>
</div>
<div class="search-item" v-if="${@shiro.hasRole('sysadmin')}">
<div class="search-item-label">活动单位:</div>
<div class="search-item-option">
<el-select placeholder="所属单位" v-model="pageForm.activityUnitId"
style="width: 100%;"
clearable="true"
@change="doSearch"
filterable="true">
<el-option v-for="item in ActivityUnits" :label="item.name"
:value="item.id"></el-option>
</el-select>
</div>
</div>&ndash;&gt;
<div class="search-item">
<div class="search-item-label">人员类型:</div>
<div class="search-item-option">
<dict-select v-model="pageForm.personType" style="width: 100%" clearable
placeholder="人员类型"
@change="doSearch"
code="PERSON_TYPE"></dict-select>
</div>
</div>
<div class="search-item">
<div class="search-item-label">在职状态:</div>
<div class="search-item-option">
<dict-select v-model="pageForm.userState" style="width: 100%" clearable
placeholder="在职状态"
@change="doSearch"
code="USER_STATE"></dict-select>
</div>
</div>
<div class="search-query">
<el-button type="primary" icon="el-icon-search" @click="doSearch">搜索</el-button>
</div>
</div>
</el-card>
<el-card shadow="never" class="mt10">
<table-tool :label="currentGroupName" :app="this">
<template #label_end>
<span class="text-danger pl5">提醒:删除活动分组操作,请先选择某个活动分组后,再点击右边的删除按钮。</span>
</template>
<template #func>
<el-button @click="doDelete(null,pageForm.groupId)"
type="danger"
size="medium" :disabled="tableData.length===0">
删除{{currentGroupName}}
</el-button>
</template>
</table-tool>
<el-table ref="userTable" :data="tableData" stripe border :size="tableSize">
<el-table-column type="index" 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"
></el-table-column>
<el-table-column align="center" header-align="center" label="操作" width="100">
<template scope="{row}">
<el-button size="mini" type="danger" @click="doDelete(row.id,null)">删除
</el-button>
</template>
</el-table-column>
</el-table>
&lt;!&ndash;#include("/layouts/pagination.html"){}#&ndash;&gt;
</el-card>
</guava>-->
</div>
<script>
@@ -182,89 +19,20 @@ layout("/layouts/platform.html"){
el: '#app',
mixins: [initTableMixins],
components: {
'dict-select': httpVueLoader('/components/plugins/DictSelect.vue?v=1.0.0'),
'user-data-scope': httpVueLoader('/components/plugins/UserDataScope.vue'),
'user-data-scope': httpVueLoader('/components/plugins/UserDataScope.vue?v=' + new Date().getTime()),
},
computed: {
currentGroupName() {
if (this.pageForm.groupId) {
const group = this.activityGroupList.find(v => v.groupId === this.pageForm.groupId)
return group.groupName + '人员'
}
return '全部人员'
}
},
data() {
return {
activityGroupList: [],
ActivityUnions: [],
ActivityUnits: [],
unions: [],
units: [],
pageForm: {
unionId: "",
unitId: "",
searchName: "username",
personTypes: [],
userStates: [],
memberStatus: [],
year: moment().format('YYYY')
},
tableColumns: [
{prop: 'loginName', label: '工号'},
{prop: 'userName', label: '姓名'},
{prop: 'sex', label: '性别'},
{prop: 'birthday', label: '出生年月'},
{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},
{prop: 'groupName', label: '所属分组', sortable: true},
],
}
},
methods: {
async doDelete(id, groupId) {
const confirm = await this.$confirm('您确定要删除吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
if (confirm === 'confirm') {
this.pageForm.id = id
const resp = await $.post(loc() + '/doDelete', this.pageForm)
if (resp.code === 0) {
this.$message.success(resp.msg)
this.doSearch()
}
}
},
async flushUnits() {
this.$set(this.pageForm, "unitId", "")
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')||@shiro.hasRole('H03')}" === 'true') {
this.units = await getUnits(this.pageForm.unionId)
this.ActivityUnits = await getActivityUnits(this.pageForm.activityUnionId)
} else {
this.units = await getClubUnits()
}
this.doSearch()
},
async getActivityGroup() {
const resp = await $.get('/platform/activity/basic/scope/getActivityUserScopeGroup')
this.activityGroupList = resp.data
if (resp.data && resp.data.length > 0) {
this.$set(this.pageForm, "groupId", resp.data[0].groupId)
}
}
},
async created() {
this.pageData()
await this.getActivityGroup()
this.unions = await getUnions(null)
this.ActivityUnions = await getActivityUnions()
this.flushUnits()
}
})