This commit is contained in:
@jyuhsin
2025-11-04 16:58:56 +08:00
parent 6dcf896f14
commit d2cdc72f3c
2 changed files with 359 additions and 264 deletions
@@ -247,7 +247,7 @@ public class ActivityBasicScopeController {
COLUMN_COMMENT COLUMN_COMMENT
FROM INFORMATION_SCHEMA.COLUMNS FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'sys_user' WHERE TABLE_NAME = 'sys_user'
AND TABLE_SCHEMA = 'budwk_v5_mini' AND TABLE_SCHEMA = 'zhgh_njnu'
"""); """);
List<NutMap> sqlDataList = activityBasicScopeService.listMap(sql); List<NutMap> sqlDataList = activityBasicScopeService.listMap(sql);
// sqlDataList.forEach(v -> v.put("DATA_TYPE", new String((byte[]) v.get("DATA_TYPE")))); // sqlDataList.forEach(v -> v.put("DATA_TYPE", new String((byte[]) v.get("DATA_TYPE"))));
@@ -1,273 +1,371 @@
const MEMBER_STATISTICS_COMPREHENSIVE_QUERY_FORM = { const MEMBER_STATISTICS_COMPREHENSIVE_QUERY_FORM = {
template: /*language=HTML*/ ` template: /*language=HTML*/ `
<el-card shadow="never"> <el-card shadow="never">
<div :style="{ height: rootExtend ? 'auto' : '60px', 'overflow-y': 'hidden' }"> <el-row type="flex" align="middle" class="query-row">
<el-row type="flex" align="middle" class="query-row"> <el-col class="query-row-title">年&emsp;&emsp;度:</el-col>
<el-col class="query-row-title">年&emsp;&emsp;度:</el-col> <el-col class="query-row-content" :span="12">
<el-col class="query-row-content" :span="12"> <el-row style="margin-left: 3px">
<el-row style="margin-left: 3px"> <el-date-picker @change="doSearch()"
<el-date-picker @change="doSearch()" style="width: 85%"
style="width: 85%" :picker-options="pickerOptions"
:picker-options="pickerOptions" v-model="pageForm.year"
v-model="pageForm.year" type="year"
type="year" value-format="yyyy"
value-format="yyyy" placeholder="选择年" :clearable="false">
placeholder="选择年" :clearable="false"> </el-date-picker>
</el-date-picker> <el-link type="primary" style="margin-left: 10px"
<el-link type="primary" style="margin-left: 10px"
:underline="false"
@click="setNowYear();doSearch()">
本年
</el-link>
</el-row>
</el-col>
<el-col class="query-row-title">姓名/工号:</el-col>
<el-col class="query-row-content" :span="12">
<el-row style="width: 92%">
<el-input placeholder="请输入内容" clearable v-model="pageForm.searchKeyword"></el-input>
</el-row>
</el-col>
</el-row>
<el-row type="flex" align="middle" class="query-row">
<el-col class="query-row-content">
<el-row>
<el-col :span="12">
<span>所属工会:</span>
<el-select placeholder="所属工会" v-model="pageForm.unionId"
clearable multiple style="margin-left: 33px;width: 80%"
@change="flushUnits();doSearch()"
@clear="flushUnits();doSearch()"
filterable>
<el-option v-for="item in unions" :label="item.name"
:value="item.id"></el-option>
</el-select>
</el-col>
<el-col :span="12">
<span>所属单位:</span>
<el-select placeholder="所属单位" v-model="pageForm.unitId"
clearable multiple style="margin-left: 33px;width: 80%" filterable>
<el-option v-for="item in units" :label="item.name"
:value="item.id"></el-option>
</el-select>
</el-col>
</el-row>
</el-col>
</el-row>
<el-row class="query-row">
<el-col class="query-row-title">性别:</el-col>
<el-col class="query-row-content query-row-content-tag">
<el-tag
:effect="pageForm.sexTypes.includes(item.name)?'dark':'plain'"
:key="item.code"
:type="item.name"
@click="tagClick('sexTypes',item.name)"
size="small"
style="cursor: pointer;margin: 0;"
v-for="item in sexTypeOptions">
{{ item.name }}
</el-tag>
</el-col>
</el-row>
<el-row type="flex" align="middle" class="query-row query-row-tag">
<el-col class="query-row-title">人员类型:</el-col>
<el-col class="query-row-content query-row-content-tag"
:style="{ height: personTypeExtend ? 'auto' : '24px', 'overflow-y': 'hidden' }"
>
<el-tag
size="small"
style="cursor: pointer;margin: 0;"
v-for="item in personTypeOptions"
:key="item.code"
:type="item.name"
:effect="pageForm.personTypes.includes(item.name)?'dark':'plain'"
@click="tagClick('personTypes',item.name)">
{{ item.name }}
</el-tag>
<el-link type="danger"
v-if="personTypeOptions.length&&pageForm.personTypes.length"
:underline="false" :underline="false"
@click="pageForm.personTypes=[];doSearch()">清空 @click="setNowYear();doSearch()">
本年
</el-link> </el-link>
<el-link :underline="false" </el-row>
@click="pageForm.personTypes=personTypeOptions.map(p=>p.code);doSearch()" </el-col>
type="success">全部 <el-col class="query-row-title">姓名/工号:</el-col>
</el-link> <el-col class="query-row-content" :span="12">
</el-col> <el-row style="width: 92%">
<el-col style="width: 50px"> <el-input placeholder="请输入内容" clearable v-model="pageForm.searchKeyword"></el-input>
<el-link type="primary" </el-row>
:underline="false" </el-col>
@click="personTypeExtend = !personTypeExtend"> </el-row>
<span v-if="!personTypeExtend">展开<i class="el-icon-caret-bottom"></i></span>
<span v-if="personTypeExtend">收起<i class="el-icon-caret-top"></i></span>
</el-link>
</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">
<el-col class="query-row-title">人事编制:</el-col> <el-col class="query-row-content">
<el-col class="query-row-content query-row-content-tag"> <el-row>
<el-tag <el-col :span="12">
size="small" <span>所属工会:</span>
style="cursor: pointer;margin: 0;" <el-select placeholder="所属工会" v-model="pageForm.unionId"
v-for="item in preparedByOptions" clearable multiple style="margin-left: 33px;width: 80%"
:key="item.code" @change="flushUnits();doSearch()"
:type="item.name" @clear="flushUnits();doSearch()"
:effect="pageForm.preparedBys.includes(item.name)?'dark':'plain'" filterable>
@click="tagClick('preparedBys',item.name)"> <el-option v-for="item in unions" :label="item.name"
{{ item.name }} :value="item.id"></el-option>
</el-tag> </el-select>
</el-col>
<el-col :span="12">
<span>所属单位:</span>
<el-select placeholder="所属单位" v-model="pageForm.unitId"
clearable multiple style="margin-left: 33px;width: 80%" filterable>
<el-option v-for="item in units" :label="item.name"
:value="item.id"></el-option>
</el-select>
</el-col>
</el-row>
</el-col>
</el-row>
<el-link type="danger" <!--<el-row class="query-row">
v-if="preparedByOptions.length&&pageForm.preparedBys.length" <el-col class="query-row-title">性别:</el-col>
:underline="false" <el-col class="query-row-content query-row-content-tag">
@click="pageForm.preparedBys=[];doSearch()">清空 <el-tag
</el-link> :effect="pageForm.sexTypes.includes(item.name)?'dark':'plain'"
<el-link :underline="false" :key="item.code"
@click="pageForm.preparedBys=preparedByOptions.map(p=>p.code);doSearch()" :type="item.name"
type="success">全部 @click="tagClick('sexTypes',item.name)"
</el-link> size="small"
</el-col> style="cursor: pointer;margin: 0;"
</el-row> v-for="item in sexTypeOptions">
{{ item.name }}
</el-tag>
</el-col>
</el-row>-->
<el-row type="flex" align="middle" class="query-row query-row-tag"> <el-row type="flex" align="middle" class="query-row">
<el-col class="query-row-title">在职状态:</el-col> <el-col class="query-row-content">
<el-col class="query-row-content query-row-content-tag" <el-row>
:style="{ height: userStateExtend ? 'auto' : '24px', 'overflow-y': 'hidden' }" <el-col :span="12">
> <span>人员类型:</span>
<el-tag <el-select placeholder="人员类型" v-model="pageForm.personTypes"
size="small" clearable multiple style="margin-left: 33px;width: 80%"
style="cursor: pointer;margin: 0;" @change="doSearch()"
v-for="item in userStateOptions" @clear="doSearch()"
:key="item.code" filterable>
:type="item.name" <el-option v-for="item in personTypeOptions" :label="item.name"
:effect="pageForm.userStates.includes(item.name)?'dark':'plain'" :value="item.code"></el-option>
@click="tagClick('userStates',item.name)"> </el-select>
{{ item.name }} </el-col>
</el-tag> <el-col :span="12">
<span>在职状态:</span>
<el-select placeholder="在职状态" v-model="pageForm.userStates"
clearable multiple style="margin-left: 33px;width: 80%" filterable>
<el-option v-for="item in userStateOptions" :label="item.name"
:value="item.code"></el-option>
</el-select>
</el-col>
</el-row>
</el-col>
</el-row>
<el-link type="danger" <el-row type="flex" align="middle" class="query-row">
v-if="userStateOptions.length&&pageForm.userStates.length" <el-col class="query-row-content">
:underline="false" <el-row>
@click="pageForm.userStates=[];doSearch()">清空 <el-col :span="12">
</el-link> <span>人事编制:</span>
<el-link :underline="false" <el-select placeholder="人事编制" v-model="pageForm.preparedBys"
@click="pageForm.userStates=userStateOptions.map(p=>p.code);doSearch()" clearable multiple style="margin-left: 33px;width: 80%"
type="success">全部 @change="doSearch()"
</el-link> @clear="doSearch()"
</el-col> filterable>
<el-col style="width: 50px"> <el-option v-for="item in preparedByOptions" :label="item.name"
<el-link type="primary" :value="item.code"></el-option>
:underline="false" </el-select>
@click="userStateExtend = !userStateExtend"> </el-col>
<span v-if="!userStateExtend">展开<i class="el-icon-caret-bottom"></i></span> <el-col :span="12">
<span v-if="userStateExtend">收起<i class="el-icon-caret-top"></i></span> <span>姓&emsp;&emsp;别:</span>
</el-link> <el-select placeholder="姓别" v-model="pageForm.sexTypes"
</el-col> clearable multiple style="margin-left: 33px;width: 80%"
</el-row> @change="doSearch()"
@clear="doSearch()"
filterable>
<el-option v-for="item in sexTypeOptions" :label="item.name"
:value="item.name"></el-option>
</el-select>
</el-col>
</el-row>
</el-col>
</el-row>
<el-row class="query-row" type="flex" align="middle"> <!--<el-row type="flex" align="middle" class="query-row query-row-tag">
<el-col class="query-row-title">出生日期</el-col> <el-col class="query-row-title">人员类型</el-col>
<el-col class="query-row-content"> <el-col class="query-row-content query-row-content-tag">
<el-date-picker <el-tag
v-model="pageForm.startDate" size="small"
type="date" style="cursor: pointer;margin: 0;"
@change="determineStartDate" v-for="item in personTypeOptions"
placeholder="选择开始日期"> :key="item.code"
</el-date-picker> :type="item.name"
<el-date-picker :effect="pageForm.personTypes.includes(item.name)?'dark':'plain'"
v-model="pageForm.endDate" @click="tagClick('personTypes',item.name)">
type="date" {{ item.name }}
@change="determineEndDate" </el-tag>
placeholder="选择结束日期">
</el-date-picker>
</el-col>
</el-row>
<el-row class="query-row" type="flex" align="middle"> <el-link type="danger"
<el-col class="query-row-title">入会日期:</el-col> v-if="personTypeOptions.length&&pageForm.personTypes.length"
<el-col class="query-row-content"> :underline="false"
<el-date-picker @click="pageForm.personTypes=[];doSearch()">清空
v-model="pageForm.startJoinDate" </el-link>
type="date" <el-link :underline="false"
@change="determineStartDate" @click="pageForm.personTypes=personTypeOptions.map(p=>p.code);doSearch()"
placeholder="选择开始日期"> type="success">全部
</el-date-picker> </el-link>
<el-date-picker </el-col>
v-model="pageForm.endJoinDate" </el-row>-->
type="date"
@change="determineEndDate"
placeholder="选择结束日期">
</el-date-picker>
</el-col>
</el-row>
<el-row class="query-row" type="flex" align="middle"> <!--<el-row type="flex" align="middle" class="query-row query-row-tag">
<el-col class="query-row-title">离会日期</el-col> <el-col class="query-row-title">人事编制</el-col>
<el-col class="query-row-content"> <el-col class="query-row-content query-row-content-tag">
<el-date-picker <el-tag
v-model="pageForm.startLeaveDate" size="small"
type="date" style="cursor: pointer;margin: 0;"
@change="determineStartDate" v-for="item in preparedByOptions"
placeholder="选择开始日期"> :key="item.code"
</el-date-picker> :type="item.name"
<el-date-picker :effect="pageForm.preparedBys.includes(item.name)?'dark':'plain'"
v-model="pageForm.endLeaveDate" @click="tagClick('preparedBys',item.name)">
type="date" {{ item.name }}
@change="determineEndDate" </el-tag>
placeholder="选择结束日期">
</el-date-picker>
</el-col>
</el-row>
<el-row class="query-row" type="flex" align="middle"> <el-link type="danger"
<el-col class="query-row-title">年龄范围:</el-col> v-if="preparedByOptions.length&&pageForm.preparedBys.length"
<el-col class="query-row-content"> :underline="false"
<el-row type="flex" style="align-items: center"> @click="pageForm.preparedBys=[];doSearch()">清空
<el-col :span="15"> </el-link>
<el-slider <el-link :underline="false"
v-model="pageForm.age" @click="pageForm.preparedBys=preparedByOptions.map(p=>p.code);doSearch()"
range type="success">全部
show-stops </el-link>
:max="100"> </el-col>
</el-slider> </el-row>-->
</el-col>
<el-col :span="9" class="pl20">
当前范围:{{ pageForm.age }}
</el-col>
</el-row>
</el-col>
</el-row>
<el-row type="flex" align="middle" class="query-row"> <!--<el-row type="flex" align="middle" class="query-row query-row-tag">
<el-col class="query-row-title">模糊查询</el-col> <el-col class="query-row-title">在职状态</el-col>
<el-col class="query-row-content"> <el-col class="query-row-content query-row-content-tag">
<member-cnd @cnd="(v)=>pageForm={...pageForm,...v}"></member-cnd> <el-tag
</el-col> size="small"
</el-row> style="cursor: pointer;margin: 0;"
v-for="item in userStateOptions"
:key="item.code"
:type="item.name"
:effect="pageForm.userStates.includes(item.name)?'dark':'plain'"
@click="tagClick('userStates',item.name)">
{{ item.name }}
</el-tag>
<el-row class="query-row" style="justify-content: end"> <el-link type="danger"
<el-checkbox v-model="pageForm.reverseSelection" label="是否反选" border v-if="userStateOptions.length&&pageForm.userStates.length"
@change="doSearch" :underline="false"
class="reverseCheckBox"></el-checkbox> @click="pageForm.userStates=[];doSearch()">清空
<el-button type="danger" icon="el-icon-circle-close" @click="doReset">重置 </el-link>
</el-button> <el-link :underline="false"
<el-button type="primary" icon="el-icon-search" @click="doSearch">搜索</el-button> @click="pageForm.userStates=userStateOptions.map(p=>p.code);doSearch()"
</el-row> type="success">全部
</div> </el-link>
</el-col>
</el-row>-->
<div class="mt10" style="text-align: center;"> <el-row type="flex" align="middle" class="query-row">
<el-link type="primary" <el-col class="query-row-content">
:underline="false" <el-row>
@click="rootExtend = !rootExtend"> <el-col :span="12">
<span v-if="!rootExtend" style="font-weight: bold">展开<i class="el-icon-caret-bottom"></i></span> <span>入会日期:</span>
<span v-if="rootExtend" style="font-weight: bold">收起<i class="el-icon-caret-top"></i></span> <div style="margin-left: 33px;width: 80%; display: inline-block">
</el-link> <el-date-picker
</div> style="width: 50%"
v-model="pageForm.startJoinDate"
type="date"
@change="determineStartDate"
placeholder="选择开始日期">
</el-date-picker>
<el-date-picker
style="width: 49%"
v-model="pageForm.endJoinDate"
type="date"
@change="determineEndDate"
placeholder="选择结束日期">
</el-date-picker>
</div>
</el-col>
<el-col :span="12">
<span>离会日期:</span>
<div style="margin-left: 33px;width: 80%; display: inline-block">
<el-date-picker
style="width: 50%"
v-model="pageForm.startLeaveDate"
type="date"
@change="determineStartDate"
placeholder="选择开始日期">
</el-date-picker>
<el-date-picker
style="width: 49%"
v-model="pageForm.endLeaveDate"
type="date"
@change="determineEndDate"
placeholder="选择结束日期">
</el-date-picker>
</div>
</el-col>
</el-row>
</el-col>
</el-row>
<el-row type="flex" align="middle" class="query-row">
<el-col class="query-row-content">
<el-row>
<el-col :span="12">
<span>出生日期:</span>
<div style="margin-left: 33px;width: 80%; display: inline-block">
<el-date-picker
style="width: 50%"
v-model="pageForm.startDate"
type="date"
@change="determineStartDate"
placeholder="选择开始日期">
</el-date-picker>
<el-date-picker
style="width: 49%"
v-model="pageForm.endDate"
type="date"
@change="determineEndDate"
placeholder="选择结束日期">
</el-date-picker>
</div>
</el-col>
<el-col :span="12">
<span>模糊查询:</span>
<member-cnd @cnd="(v)=>pageForm={...pageForm,...v}" style="margin-left: 33px;width: 80%; display: inline-block"></member-cnd>
</el-col>
</el-row>
</el-col>
</el-row>
<!--<el-row class="query-row" type="flex" align="middle">
<el-col class="query-row-title">出生日期:</el-col>
<el-col class="query-row-content">
<el-date-picker
v-model="pageForm.startDate"
type="date"
@change="determineStartDate"
placeholder="选择开始日期">
</el-date-picker>
<el-date-picker
v-model="pageForm.endDate"
type="date"
@change="determineEndDate"
placeholder="选择结束日期">
</el-date-picker>
</el-col>
</el-row>-->
<!--<el-row class="query-row" type="flex" align="middle">
<el-col class="query-row-title">入会日期:</el-col>
<el-col class="query-row-content">
<el-date-picker
v-model="pageForm.startJoinDate"
type="date"
@change="determineStartDate"
placeholder="选择开始日期">
</el-date-picker>
<el-date-picker
v-model="pageForm.endJoinDate"
type="date"
@change="determineEndDate"
placeholder="选择结束日期">
</el-date-picker>
</el-col>
</el-row>-->
<!--<el-row class="query-row" type="flex" align="middle">
<el-col class="query-row-title">离会日期:</el-col>
<el-col class="query-row-content">
<el-date-picker
v-model="pageForm.startLeaveDate"
type="date"
@change="determineStartDate"
placeholder="选择开始日期">
</el-date-picker>
<el-date-picker
v-model="pageForm.endLeaveDate"
type="date"
@change="determineEndDate"
placeholder="选择结束日期">
</el-date-picker>
</el-col>
</el-row>-->
<el-row class="query-row" type="flex" align="middle">
<el-col class="query-row-title">年龄范围:</el-col>
<el-col class="query-row-content">
<el-row type="flex" style="align-items: center">
<el-col :span="15">
<el-slider
v-model="pageForm.age"
range
show-stops
:max="100">
</el-slider>
</el-col>
<el-col :span="9" class="pl20">
当前范围:{{ pageForm.age }}
</el-col>
</el-row>
</el-col>
</el-row>
<!--<el-row type="flex" align="middle" class="query-row">
<el-col class="query-row-title">模糊查询:</el-col>
<el-col class="query-row-content">
<member-cnd @cnd="(v)=>pageForm={...pageForm,...v}"></member-cnd>
</el-col>
</el-row>-->
<el-row class="query-row" style="justify-content: end">
<el-checkbox v-model="pageForm.reverseSelection" label="是否反选" border
@change="doSearch"
class="reverseCheckBox"></el-checkbox>
<el-button type="danger" icon="el-icon-circle-close" @click="doReset">重置
</el-button>
<el-button type="primary" icon="el-icon-search" @click="doSearch">搜索</el-button>
</el-row>
<!--<search @search="doSearch"> <!--<search @search="doSearch">
<search-item label="年度"> <search-item label="年度">
@@ -425,9 +523,6 @@ const MEMBER_STATISTICS_COMPREHENSIVE_QUERY_FORM = {
store, store,
data() { data() {
return { return {
personTypeExtend: false,
userStateExtend: false,
rootExtend: false,
pageForm: { pageForm: {
isUnit: "", isUnit: "",
isUnion: "", isUnion: "",