Files
2026-09-08 19:49:21 +08:00

696 lines
32 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!--#
layout("/layouts/platform.html"){
#-->
<div id="app" v-cloak>
<guava ref="guava">
<template>
<el-card shadow="never">
<div class="search">
<div class="search-item">
<div class="search-item-label">年度:</div>
<div class="search-item-option">
<el-date-picker
style="width: 100%"
@change="yearChange"
:clearable="false"
value-format="yyyy"
v-model="pageForm.year"
type="year"
placeholder="选择年">
</el-date-picker>
</div>
</div>
<div class="search-item">
<div class="search-item-label">福利项目:</div>
<div class="search-item-option">
<el-select placeholder="福利项目" v-model="pageForm.projectId"
@change="doSearch();getWelfareOptions();"
style="width: 100%;"
filterable="true">
<el-option v-for="item in welfareProjectList" :label="item.name"
: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-date-picker
style="width: 100%"
v-model="pageForm.month"
type="month"
value-format="yyyy-MM"
placeholder="请选择发放生日蛋糕的月份">
</el-date-picker>
</div>
</div>-->
<div class="search-item">
<div class="search-item-label">所属工会:</div>
<div class="search-item-option">
<el-select @change="pageData();getUnionGroup()" clearable filterable
placeholder="所属工会" style="width: 100%;"
:clearable="clearable"
v-model="pageForm.welfareUnitCode">
<el-option :label="item.unionname" :value="item.unioncode"
v-for="item in unions"></el-option>
</el-select>
</div>
</div>
<!-- <div class="search-item">-->
<!-- <div class="search-item-label">工会小组:</div>-->
<!-- <div class="search-item-option">-->
<!-- <el-select v-model="pageForm.unionGroupId" style="width: 100%"-->
<!-- filterable-->
<!-- :clearable="clearable"-->
<!-- @change="pageData"-->
<!-- placeholder="请选择">-->
<!-- <el-option-->
<!-- v-for="item in unionGroups"-->
<!-- :key="item.id"-->
<!-- :label="item.groupName"-->
<!-- :value="item.id">-->
<!-- </el-option>-->
<!-- </el-select>-->
<!-- </div>-->
<!-- </div>-->
<div class="search-query">
<el-button type="primary" icon="el-icon-search"
@click="doSearch();unionGroupChange()">搜索
</el-button>
</div>
</div>
</el-card>
<el-card shadow="never" class="mt10" v-loading="tableLoading">
<table-tool label="工会列表" :app="this">
<template #func>
<!-- <el-button type="primary" size="small" icon="el-icon-printer"
:disabled="provideMode!==3"
@click="openImportExpressExcel">
导入快递单号
</el-button>-->
<!--<el-button @click="sendMsg" icon="el-icon-s-promotion" size="small"
type="primary">
短信通知
</el-button>-->
<el-button
v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')}"
@click="allExportReceiveDetailByUnionIdWord"
icon="el-icon-printer"
size="small"
type="primary">导出全部福利签领表(压缩包)
</el-button>
<el-button
v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')||@shiro.hasRole('H04')}"
@click="welfareProjectGroupExport" icon="el-icon-printer"
size="small"
type="primary">按品牌导出(xlsx
</el-button>
<!-- <el-button
@click="allShopExport" icon="el-icon-printer"
size="small"
type="primary">按品牌导出全部(蛋糕券)
</el-button>-->
<template
v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')||@shiro.hasRole('H04')}">
<el-button :disabled="!pageForm.projectId" type="primary"
size="small"
icon="el-icon-printer"
@click="exportReceiveDetail(true)">按分工会导出已选名单
</el-button>
<el-button
:disabled="!pageForm.projectId" type="primary"
size="small"
icon="el-icon-printer"
@click="exportReceiveDetail(false)">按分工会导出未选名单
</el-button>
<el-button
:disabled="!pageForm.projectId||!pageForm.welfareUnitCode"
type="primary" size="small"
icon="el-icon-printer"
@click="exportByUnit">按单位导出汇总表
</el-button>
<!-- <el-button-->
<!-- :disabled="!pageForm.projectId||!pageForm.welfareUnitCode"-->
<!-- type="primary" size="small"-->
<!-- icon="el-icon-printer"-->
<!-- @click="exportByUnionGroup">按工会小组导出汇总表-->
<!-- </el-button>-->
</template>
<template
v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')}">
<el-button :disabled="!pageForm.projectId" type="primary" size="small"
icon="el-icon-printer"
@click="exportByUnion">导出汇总表
</el-button>
<el-button @click="selectOptionByAdmin"
icon="el-icon-printer"
size="small"
type="primary">管理员代选择
</el-button>
</template>
</template>
</table-tool>
<el-table :data="tableData"
@sort-change="pageOrder"
row-key="welfareUnitId" show-summary style="width: 100%"
ref="table" class="vi-table" :size="tableSize" lazy
@expand-change="unionGroupChange">
<!-- <el-table-column type="expand">-->
<!-- <template scope="{row}">-->
<!-- <el-table :data="row.unionGroupTableData" style="width: 100%"-->
<!-- row-key="id"-->
<!-- v-loading="tableLoading" class="vi-table" :size="tableSize">-->
<!-- <el-table-column type="index" width="50"></el-table-column>-->
<!-- <el-table-column-->
<!-- align="center"-->
<!-- v-for="column in row.unionGroupTableColumns"-->
<!-- show-overflow-tooltip-->
<!-- :label="column.label"-->
<!-- :prop="column.prop"-->
<!-- :sortable="column.sortable"-->
<!-- >-->
<!-- </el-table-column>-->
<!-- </el-table>-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column type="index" width="50"></el-table-column>
<el-table-column
align="center"
v-for="column in tableColumns"
show-overflow-tooltip
:label="column.label"
:prop="column.prop"
:sortable="column.sortable"
>
<template scope="{row}" v-if="column.prop=='welfareUnitName'">
({{row.welfareUnitCode}}){{row.welfareUnitName}}
</template>
<template scope="{row}" v-else-if="column.prop=='unselectedTeacherSum'">
<el-link @click="openUnclaimed(row.welfareUnitCode)" type="primary">
{{row.unselectedTeacherSum}}
</el-link>
</template>
</el-table-column>
<el-table-column header-align="center" label="操作" v-if="tableColumns.length>0"
width="400px">
<template scope="{ row }">
<!-- <el-button plain
@click="shopExport(row.welfareUnitId)"
size="mini"
type="primary">导出蛋糕券签领表
</el-button>-->
<el-button plain
@click="exportReceiveDetailByUnionIdWord(row.welfareUnitId)"
size="mini"
type="primary">导出福利签领表
</el-button>
<el-button @click="openView(row.welfareUnitCode)" size="mini"
type="primary">查看已选人员
</el-button>
</template>
</el-table-column>
</el-table>
</el-card>
</template>
<template #view>
<el-table :data="receiveTableData" style="width: 100%" row-key="id"
height="100%"
v-loading="tableLoading" class="vi-table" :size="tableSize">
<el-table-column type="index" width="50"></el-table-column>
<el-table-column
align="center"
v-for="column in receive_tableColumns"
show-overflow-tooltip
:label="column.label"
:prop="column.prop"
:sortable="column.sortable"
>
</el-table-column>
</el-table>
<el-row class="el-pagination-container" style="margin-bottom: 0px">
<el-pagination
@size-change="receivePageSizeChange"
@current-change="receivePageNumberChange"
:current-page="receivePageForm.pageNumber"
:page-sizes="[5,10, 20, 30, 50]"
:page-size="receivePageForm.pageSize"
layout="total, sizes, prev, pager, next"
:total="receivePageForm.totalCount">
</el-pagination>
</el-row>
</template>
</guava>
<el-dialog :visible.sync="unclaimedDialog" title="未领取人员" width="65%">
<el-button type="primary"
class="pull-right"
icon="el-icon-printer"
@click="exportReceiveDetailByUnionId(false)">导出未选名单
</el-button>
<el-table :data="unclaimedTableData" style="width: 100%" row-key="id" max-height="650"
v-loading="tableLoading" class="vi-table" :size="tableSize">
<el-table-column type="index" width="50"></el-table-column>
<el-table-column
align="center"
v-for="column in unclaimed_tableColumns"
show-overflow-tooltip
:label="column.label"
:prop="column.prop"
:sortable="column.sortable"
>
</el-table-column>
</el-table>
<el-row class="el-pagination-container" style="margin-bottom: 0px">
<el-pagination
@size-change="unclaimedPageSizeChange"
@current-change="unclaimedPageNumberChange"
:current-page="unclaimedPageForm.pageNumber"
:page-sizes="[5,10, 20, 30, 50]"
:page-size="receivePageForm.pageSize"
layout="total, sizes, prev, pager, next"
:total="unclaimedPageForm.totalCount">
</el-pagination>
</el-row>
</el-dialog>
<el-dialog :visible.sync="importExpressExcelDialog" title="导入快递单号" width="65%">
<el-row type="flex" style="justify-content: space-between;align-items: center">
<span>只能导入已选人员名单,导入未选人员名单无效。</span>
<el-button size="small" type="primary" @click="downLoadExpressTemplate">下载模板</el-button>
</el-row>
<el-row type="flex" justify="center">
<el-upload
ref="expressExcelUpload"
:auto-upload="false"
:file-list="importExpressExcelFile"
:limit="1"
:data="{projectId:pageForm.projectId}"
drag
:action="loc()+'/importCourierNumber'"
:on-success="expressExcelHandleSuccess"
>
<i class="el-icon-upload"></i>
<div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
<div class="el-upload__tip" slot="tip">只能上传xls,xlsx文件</div>
</el-upload>
</el-row>
<el-row type="flex" justify="end">
<el-button @click="importExpressExcelDialog=false">取消</el-button>
<el-button type="primary" @click="doImportExpressExcel">提交</el-button>
</el-row>
</el-dialog>
<el-dialog :visible.sync="selectByAdminDialogVisible" title="" width="35%"
v-loading="doSelectByAdminLoading">
<el-form label-width="120px" label-position="right">
<el-form-item label="福利选项">
<el-select v-model="noSelectOptionId" style="width: 100%">
<el-option v-for="item in welfareOptions" :key="item.id" :value="item.id"
:label="item.optionName"></el-option>
</el-select>
</el-form-item>
</el-form>
<el-row type="flex" justify="end">
<el-button @click="selectByAdminDialogVisible=false">取消</el-button>
<el-button type="primary" @click="doSelectByAdmin">提交</el-button>
</el-row>
</el-dialog>
</div>
<script>
<!--#include("/platform/welfare/include/common.js"){}#-->
var vue = new Vue({
el: '#app',
mixins: [initTableMixins],
data() {
return {
clearable: false,
dgkMonth: "",
isDgk: false,
welfareProjectList: [],
pageForm: {
month: '',
unionGroupId: '',
year: '',
welfareUnitCode: ''
},
unions: [],
tableColumns: [],
receive_tableColumns: [
{label: '工号', prop: 'loginName'},
{label: '姓名', prop: 'userName'},
{label: '身份证', prop: 'idCard'},
{label: '单位', prop: 'unitName'},
{label: '部门', prop: 'threeUnitName'},
{label: '所选福利', prop: 'optionName'},
],
receiveTableData: [],
receivePageForm: {
searchName: "",
searchKeyword: "",
pageNumber: 1,
pageSize: 10,
totalCount: 0,
pageOrderName: "",
pageOrderBy: ""
},
unclaimedDialog: false,
unclaimedTableData: [],
unclaimedPageForm: {
searchName: "",
searchKeyword: "",
pageNumber: 1,
pageSize: 10,
totalCount: 0,
pageOrderName: "",
pageOrderBy: ""
},
unclaimed_tableColumns: [
{label: '姓名', prop: 'userName'},
{label: '工号', prop: 'loginName'},
{label: '单位', prop: 'unitName'},
{label: '工会', prop: 'unionName'},
{label: '联系方式', prop: 'mobile'},
],
unionGroupTableData: [],
unionGroupTableColumns: [],
welfare,
welfareUnitCode: null,
importExpressExcelDialog: false,
importExpressExcelFile: [],
selectByAdminDialogVisible: false,
noSelectUsers: [],
welfareOptions: [],
noSelectOptionId: null,
doSelectByAdminLoading: false,
unionGroups: [],
viewTableWrapHeight: 500
}
},
computed: {
provideMode() {
const project = this.welfareProjectList.find(v => v.id === this.pageForm.projectId)
if (project) {
return project.provideMode
}
return null
}
},
methods: {
async unionGroupChange(row, expandedRows) {
if (expandedRows.length) {
this.tableLoading = true
const resp = await $.get(loc() + '/unionGroupPageData', {
projectId: this.pageForm.projectId,
month: this.pageForm.month,
unionGroupId: this.pageForm.unionGroupId,
unionId: row.welfareUnitId,
})
if (resp.code === 0) {
this.$set(row, "unionGroupTableData", resp.data.tableList)
this.$set(row, "unionGroupTableColumns", resp.data.tableColumn)
}
this.tableLoading = false
}
},
async getUnionGroup() {
const un = this.unions.find(v => v.unioncode === this.pageForm.welfareUnitCode)
this.unionGroups = await unionGroupsByUnionId(un.id)
},
async selectOptionByAdmin() {
this.selectByAdminDialogVisible = true
// const resp = await $.get(loc() + '/getNoSelectUsers', {projectId: this.pageForm.projectId})
// this.noSelectUsers = resp.data
},
doSelectByAdmin() {
if (this.noSelectOptionId == null || this.noSelectOptionId === '') {
this.notifyWarning('请选择福利')
return
}
const {optionName} = this.welfareOptions.find(v => v.id === this.noSelectOptionId)
this.$confirm('请确定是否把【' + optionName + '】福利赋给未选择的教职工?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(async () => {
this.doSelectByAdminLoading = true
const resp = await $.get(loc() + '/doSelectByAdmin', {
optionId: this.noSelectOptionId,
projectId: this.pageForm.projectId
})
this.doSelectByAdminLoading = false
if (resp.code === 0) {
this.pageData()
this.selectByAdminDialogVisible = false
this.notifySuccess(resp.msg)
} else {
this.notifyWarning(resp.msg)
}
})
},
allExportReceiveDetailByUnionIdWord() {
window.open(loc() + '/allExportReceiveDetailByUnionIdWord?projectId=' + this.pageForm.projectId + "&month=" + this.pageForm.month)
},
exportReceiveDetailByUnionIdWord(welfareUnitId) {
window.open(loc() + '/exportReceiveDetailByUnionIdWord?welfareUnitId=' + welfareUnitId +
'&projectId=' + this.pageForm.projectId +
"&month=" + this.pageForm.month +
"&unionGroupId=" + this.pageForm.unionGroupId)
},
downLoadExpressTemplate() {
window.open(loc() + '/downLoadExpressTemplate')
},
openImportExpressExcel() {
this.importExpressExcelDialog = true
if (this.$refs.expressExcelUpload) {
this.$refs.expressExcelUpload.clearFiles()
}
},
expressExcelHandleSuccess(response, file, fileList) {
if (response.code !== 0) {
this.notifyWarning(response.msg)
this.$refs.expressExcelUpload.clearFiles()
} else {
this.notifySuccess(response.msg)
this.$refs.expressExcelUpload.clearFiles()
this.importExpressExcelDialog = false
this.doSearch()
}
},
doImportExpressExcel() {
this.$refs.expressExcelUpload.submit()
},
async init() {
if ("${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')||@shiro.hasRole('club01')}" === 'false' && ("${@shiro.hasRole('H04')}" === 'true' || "${@shiro.hasRole('ghxzzz')}" === 'true')) {
this.unions = await getUnionList("${@shiro.getPrincipalProperty('unit').getUnionid()}")
this.$set(this.pageForm, "welfareUnitCode", this.unions[0].unioncode)
await this.getUnionGroup()
if ("${@shiro.hasRole('ghxzzz')}" === 'true') {
this.$set(this.pageForm, "unionGroupId", this.unionGroups[0].id)
} else {
this.clearable = true
}
} else {
this.unions = await getUnions(null)
this.clearable = true
}
this.pageForm.year = new Date().getFullYear().toString()
await this.getWelfareProjectList()
},
async getWelfareProjectList() {
const resp = await $.get(loc() + '/welfareProjectList', {year: this.pageForm.year})
this.welfareProjectList = resp.data
if (this.welfareProjectList && this.welfareProjectList.length > 0) {
this.$set(this.pageForm, "projectId", this.welfareProjectList[0].id)
await this.pageData()
await this.getWelfareOptions()
} else {
this.tableData = []
this.tableColumns = []
}
},
async yearChange() {
this.$set(this.pageForm, "projectId", null)
this.$set(this.pageForm, "welfareUnitCode", '')
await this.getWelfareProjectList()
},
async pageData() {
const loading = this.$loading({
lock: true,
text: '努力加载中。。。',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
});
sublime.showLoadingbar()
const resp = await $.post(loc() + '/pageData', this.pageForm)
sublime.closeLoadingbar()
if (resp.code === 0) {
this.tableColumns = [{
prop: 'welfareUnitName',
label: welfare.welfareUnitModeName
}].concat(resp.data.tableColumn)
this.tableData = resp.data.tableList
}
loading.close()
},
receivePageSizeChange(val) {
this.receivePageForm.pageSize = val;
this.receivePageData();
},
receivePageNumberChange(val) {
this.receivePageForm.pageNumber = val;
this.receivePageData();
},
async openView(welfareUnitCode) {
this.receivePageForm.pageNumber = 1;
this.receivePageForm.pageSize = 10;
this.welfareUnitCode = welfareUnitCode
await this.receivePageData()
this.$refs.guava.view()
},
async receivePageData() {
this.tableLoading = true
const resp = await $.post(loc() + '/receivePageData', {
welfareUnitCode: this.welfareUnitCode,
projectId: this.pageForm.projectId,
month: this.pageForm.month,
unionGroupId: this.pageForm.unionGroupId,
pageNumber: this.receivePageForm.pageNumber,
pageSize: this.receivePageForm.pageSize,
})
this.receiveTableData = resp.data.list;
this.receivePageForm.totalCount = resp.data.totalCount;
this.tableLoading = false
},
async openUnclaimed(welfareUnitCode) {
this.unclaimedPageForm.pageNumber = 1;
this.unclaimedPageForm.pageSize = 10;
this.welfareUnitCode = welfareUnitCode
await this.unclaimedPageData()
this.unclaimedDialog = true
},
async unclaimedPageData() {
this.tableLoading = true
const resp = await $.post(loc() + '/unclaimedData', {
welfareUnitCode: this.welfareUnitCode,
projectId: this.pageForm.projectId,
month: this.pageForm.month,
unionGroupId: this.pageForm.unionGroupId,
pageNumber: this.unclaimedPageForm.pageNumber,
pageSize: this.unclaimedPageForm.pageSize,
})
this.unclaimedTableData = resp.data.list;
this.unclaimedPageForm.totalCount = resp.data.totalCount;
this.tableLoading = false
},
unclaimedPageSizeChange(val) {
this.unclaimedPageForm.pageSize = val;
this.unclaimedPageData();
},
unclaimedPageNumberChange(val) {
this.unclaimedPageForm.pageNumber = val;
this.unclaimedPageData();
},
exportByUnion() {
const {projectId, welfareUnitCode} = this.pageForm
window.open(loc() + '/exportByUnion?projectId=' + projectId + '&welfareUnitCode=' + (welfareUnitCode ? welfareUnitCode : '') + "&month=" + this.pageForm.month)
},
exportByUnit() {
const {projectId, welfareUnitCode} = this.pageForm
window.open(loc() + '/exportByUnit?projectId=' + projectId + '&welfareUnitCode=' + (welfareUnitCode ? welfareUnitCode : ''))
},
exportByUnionGroup() {
const {projectId, welfareUnitCode} = this.pageForm
window.open(loc() + '/exportByUnionGroup?projectId=' + projectId + '&welfareUnitCode=' + (welfareUnitCode ? welfareUnitCode : ''))
},
exportReceiveDetail(flag) {
const {projectId, welfareUnitCode} = this.pageForm
window.open(loc() + '/exportReceiveDetail?projectId=' + projectId + '&welfareUnitCode=' + (welfareUnitCode ? welfareUnitCode : '') + '&flag=' + flag + "&month=" + this.pageForm.month)
},
exportReceiveDetailByUnionId(flag) {
const {projectId} = this.pageForm
const welfareUnitCode = this.welfareUnitCode ? this.welfareUnitCode : ''
window.open(loc() + '/exportReceiveDetail?projectId=' + projectId + '&welfareUnitCode=' + welfareUnitCode + '&flag=' + flag + "&month=" + this.pageForm.month)
},
shopExport(welfareUnitId) {
window.open(loc() + "/shopExport?projectId=" + this.pageForm.projectId + "&month=" + this.pageForm.month + "&welfareUnitId=" + welfareUnitId)
},
allShopExport() {
window.open(loc() + "/allShopExport?projectId=" + this.pageForm.projectId + "&month=" + this.pageForm.month)
},
welfareProjectGroupExport() {
window.open(loc() + "/welfareProjectGroupExport?projectId=" + this.pageForm.projectId + "&welfareUnitCode=" + this.pageForm.welfareUnitCode)
},
sendMsg() {
this.$confirm('您确定要向未领取人员发送短信提醒吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(async () => {
const resp = await $.post('/sendMsg', {projectId: this.pageForm.projectId})
if (resp.code === 0) {
this.$message.success(resp.msg)
} else {
this.$message.error(resp.msg)
}
}).catch(() => {
});
},
async getWelfareOptions() {
const resp = await $.post('/platform/welfare/list/mange/welfareOptions', {projectId: this.pageForm.projectId})
this.welfareOptions = resp.data
}
},
created() {
this.init()
}
})
</script>
<!--#
}
#-->