Files
UNION_HUTB/target/classes/views/platform/activity/school/ActivityReading.html
T
2026-09-09 09:14:28 +08:00

936 lines
48 KiB
HTML
Raw 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"){
#-->
<style>
.mb10 {
margin-bottom: 10px;
}
.d .el-card__header {
padding: 10px 20px;
}
.d .el-card__body {
padding: 0;
}
.search .search-item {
width: 25%;
}
.search .search-item-label {
min-width: 70px;
}
.el-row-title {
margin-bottom: 20px;
font-weight: 600;
}
</style>
<div id="app" class="platform" v-cloak>
<guava ref="guava">
<template>
<el-card shadow="never">
<div class="search">
<div class="search-item">
<div class="search-item-label">活动年份</div>
<el-date-picker v-model="pageForm.year" type="year" placeholder="选择年份"
style="width: 100%" :clearable="false" value-format="yyyy"
@change="yearChange()"></el-date-picker>
</div>
<div class="search-item">
<div class="search-item-label">活动级别</div>
<div class="search-item-option">
<el-select v-model="pageForm.activityLevel" placeholder="请选择活动级别"
clearable
style="width: 100%" @change="changeLevel">
<el-option
v-for="item in activityTypeList"
:key="item.code"
:label="item.name"
:value="item.code">
</el-option>
</el-select>
</div>
</div>
<div class="search-item">
<div class="search-item-label">活动名称</div>
<el-select v-model="pageForm.id" filterable
style="width: 100%;font-weight:bold;"
placeholder="请选择活动"
@change="getData()">
<el-option v-for="item in activities" :label="item.name"
:value="item.id"></el-option>
</el-select>
</div>
<div class="search-item">
<div class="search-item-label" v-if="pageForm.activityLevel!=='40003'">
院级工会
</div>
<div class="search-item-label" v-if="pageForm.activityLevel==='40003'">
协会名称
</div>
<div class="search-item-option">
<el-select style="width: 100%;font-weight:bold;"
v-model="pageForm.unionid"
placeholder="院级工会筛选"
filterable clearable
@change="changeVVV" @clear="changeVVV">
<el-option
v-for="item in unions"
:key="item.id"
:label="item.unionname"
:value="item.id">
</el-option>
</el-select>
</div>
</div>
<!--#if(!@shiro.hasRole('H04')){#-->
<div class="search-item">
<div class="search-item-label">报名状态</div>
<div class="search-item-option">
<el-radio-group v-model="pageForm.applyed">
<el-radio style="background-color: white" label="1" border>未报名
</el-radio>
<el-radio style="background-color: white" label="2" border>已报名
</el-radio>
</el-radio-group>
</div>
</div>
<!--#}#-->
<!-- <div class="search-item">
<div class="search-item-label">导入导出</div>
<div class="search-item-option">
<el-button type="primary" plain @click="openImport">导入报名人员</el-button>
<el-button @click="doExportByEnroll" plain
type="primary">导出报名信息
</el-button>
&lt;!&ndash; <el-button @click="doExportByEnroll" icon="el-icon-printer" plain size="small"
style="position: absolute;right: 0px" type="primary">导出报名信息
</el-button>&ndash;&gt;
</div>
</div>-->
</div>
</el-card>
<el-card shadow="never" class="mt10 d" style="padding: 20px">
<el-row :gutter="20" class="el-row-title" style="margin-left: 0;margin-right: 0;">
<el-col :span="2">序号</el-col>
<el-col :span="4">年度</el-col>
<el-col :span="6">
<span v-if="pageForm.activityLevel!=='40003'">分工会名称</span>
<span v-if="pageForm.activityLevel==='40003'">协会名称</span>
</el-col>
<el-col :span="6">活动名称</el-col>
<el-col :span="4">人数</el-col>
<el-col :span="2">
<!-- <el-button style="position: absolute;right: 0px" plain size="small" icon="el-icon-printer"
type="primary" @click="doExport">导 出
</el-button>-->
</el-col>
</el-row>
<el-table :data="[]" size="mini" v-if="noneData||tabLoading"
v-loading="tabLoading"></el-table>
<el-card v-else class="box-card mb10" v-for="app,tabIdx in apply" shadow="hover"
v-loading="tabLoading">
<div slot="header" class="clearfix">
<el-row :gutter="20">
<el-col :span="2">{{tabIdx + 1}}</el-col>
<el-col :span="4">{{pageForm.year}}</el-col>
<el-col :span="6">
{{isDisPlayCode?''+app.unioncode+'':null}}{{app.unionname}}
</el-col>
<el-col :span="6">{{pageForm.activityName || '暂无'}}</el-col>
<el-col :span="2">{{app.num |money}} 人</el-col>
<el-col :span="4">
<el-button style="float: right; padding: 3px 5px"
@click="$set(app,'show',!app.show)"
type="text">{{app.show?'折叠':'展开'}}
</el-button>
</el-col>
</el-row>
</div>
<transition name="el-fade-in-linear">
<div v-show="app.show" class="text item transition-box"
style="padding: 20px 20px">
<el-timeline v-if="pageForm.applyType===1||pageForm.applyType===3">
<!-- <el-timeline-item timestamp="领队信息" placement="top" v-if="app.leader.username!=null">
<el-card shadow="never">
<el-form label-suffix="" label-position="right" label-width="80px"
style="margin-top: 30px">
<el-row gutter="20">
<el-col :span="4">
<el-form-item label="姓名">
{{ app.leader.username | str }}
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="性别">
{{ app.leader.sex | str }}
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="工号">
{{ app.leader.loginname | str }}
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="电话">
{{ app.leader.mobile | str }}
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="单位">
{{ app.leader.unitname | str }}
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-card>
</el-timeline-item>
<el-timeline-item timestamp="教练信息" placement="top" v-if="app.coach.username!=null">
<el-card shadow="never">
<el-form label-suffix="" label-position="right" label-width="80px"
style="margin-top: 30px">
<el-row gutter="20">
<el-col :span="4">
<el-form-item label="姓名">
{{ app.coach.username | str }}
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="性别">
{{ app.coach.sex | str }}
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="工号">
{{ app.coach.loginname | str }}
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="电话">
{{ app.coach.mobile | str }}
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="单位">
{{ app.coach.unitname | str }}
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-card>
</el-timeline-item>-->
<el-timeline-item timestamp="运动员信息" placement="top">
<el-table border stripe :data="app.apply2" size="mini"
:key="tableKey">
<el-table-column
type="index" label="序号" header-align="center"
align="center" sortable
width="100">
</el-table-column>
<el-table-column
align="center"
header-align="center"
v-for="column in tableColumns"
:label="column.label"
:prop="column.prop"
:sortable="column.sortable"
:width="column.width">
<template scope="{row}" v-if="column.prop=='team'">
<span v-if="row.team">{{ row.team }}</span>
<span v-if="!row.team">暂无</span>
</template>
<template scope="{row:{projectType}}"
v-else-if="column.prop=='projectType'">
{{projectType==1?'单项':'团体'}}
</template>
<!-- <template scope="{row:{divisionLevelLeadership}}"
v-else-if="column.prop=='divisionLevelLeadership'">
<span v-if="divisionLevelLeadership" class="text-primary">是</span>
<span v-else class="text-danger">否</span>
</template>-->
<template scope="{row}"
v-else-if="column.prop=='identity'">
<el-tag v-if="row.identity.includes(1)"
effect="light">运动员
</el-tag>
<el-tag v-if="row.identity.includes(2)"
type="success" effect="light">教练
</el-tag>
<el-tag v-if="row.identity.includes(3)"
type="warning" effect="light">领队
</el-tag>
<el-tag v-if="row.identity.includes(4)"
type="warning"
effect="light">处级领导
</el-tag>
<el-tag v-if="row.identity.includes(5)"
type="warning" effect="light">替补
</el-tag>
</template>
</el-table-column>
</el-table>
</el-timeline-item>
</el-timeline>
<el-timeline v-else-if="pageForm.applyType===2">
<el-timeline-item timestamp="领队信息" placement="top"
v-if="app.leader.username!=null">
<el-card shadow="never">
<el-form label-suffix="" label-position="right"
label-width="80px"
style="margin-top: 30px">
<el-row gutter="20">
<el-col :span="4">
<el-form-item label="姓名">
{{ app.leader.username | str }}
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="性别">
{{ app.leader.sex | str }}
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="工号">
{{ app.leader.loginname | str }}
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="电话">
{{ app.leader.mobile | str }}
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="单位">
{{ app.leader.unitname | str }}
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-card>
</el-timeline-item>
<el-timeline-item timestamp="教练信息" placement="top"
v-if="app.coach.username!=null">
<el-card shadow="never">
<el-form label-suffix="" label-position="right"
label-width="80px"
style="margin-top: 30px">
<el-row gutter="20">
<el-col :span="4">
<el-form-item label="姓名">
{{ app.coach.username | str }}
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="性别">
{{ app.coach.sex | str }}
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="工号">
{{ app.coach.loginname | str }}
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="电话">
{{ app.coach.mobile | str }}
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="单位">
{{ app.coach.unitname | str }}
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-card>
</el-timeline-item>
<el-timeline-item timestamp="团长信息" placement="top"
v-if="app.head.username!=null">
<el-card shadow="never">
<el-form label-suffix="" label-position="right"
label-width="80px"
style="margin-top: 30px">
<el-row gutter="20">
<el-col :span="4">
<el-form-item label="姓名">
{{ app.head.username | str }}
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="性别">
{{ app.head.sex | str }}
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="工号">
{{ app.head.loginname | str }}
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="电话">
{{ app.head.mobile | str }}
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="单位">
{{ app.head.unitname | str }}
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-card>
</el-timeline-item>
<el-timeline-item timestamp="工作人员信息" placement="top"
v-if="app.staff.username!=null">
<el-card shadow="never">
<el-form label-suffix="" label-position="right"
label-width="80px"
style="margin-top: 30px">
<el-row gutter="20">
<el-col :span="4">
<el-form-item label="姓名">
{{ app.staff.username | str }}
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="性别">
{{ app.staff.sex | str }}
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="工号">
{{ app.staff.loginname | str }}
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="电话">
{{ app.staff.mobile | str }}
</el-form-item>
</el-col>
<el-col :span="4">
<el-form-item label="单位">
{{ app.staff.unitname | str }}
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-card>
</el-timeline-item>
<el-timeline-item timestamp="运动员信息" placement="top">
<el-row gutter="40">
<el-col :span="4">
<div class="search-item">
<div class="search-item-option">
<el-select v-model="app.eventId"
placeholder="请选择活动项目"
filterable clearable
style="width: 100%"
@change="doEvent(app)">
<el-option
v-for="item in events"
:key="item.id"
:label="item.allname"
:value="item.eventid">
</el-option>
</el-select>
</div>
</div>
</el-col>
<el-col :span="4">
<div class="search-item">
<div class="search-item-option">
<el-select v-model="app.projectType"
placeholder="请选择项目类型"
allow-create filterable
default-first-option clearable
style="width: 100%"
@change="doEventType(app)">
<el-option
v-for="item in projectTypeList"
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</div>
</div>
</el-col>
</el-row>
<el-table border stripe :data="app.apply2" size="mini"
:key="tableKey">
<el-table-column
type="index" label="序号" header-align="center"
align="center" sortable
width="100">
</el-table-column>
<el-table-column
align="center"
header-align="center"
v-for="column in tableColumns"
:label="column.label"
:prop="column.prop"
:sortable="column.sortable"
:width="column.width"
show-overflow-tooltip>
<template scope="{row}" v-if="column.prop=='team'">
<span v-if="row.team">{{ row.team }}</span>
<span v-if="!row.team">暂无</span>
</template>
<!-- <template scope="{row:{divisionLevelLeadership}}"
v-else-if="column.prop=='divisionLevelLeadership'">
<span v-if="divisionLevelLeadership" class="text-primary">是</span>
<span v-else class="text-danger">否</span>
</template>-->
<template scope="{row:{projectType}}"
v-else-if="column.prop=='projectType'">
{{projectType==1?'单项':'团体'}}
</template>
<template scope="{row}"
v-else-if="column.prop=='identity'">
<el-tag v-if="row.identity.includes(1)"
effect="light">运动员
</el-tag>
<el-tag v-if="row.identity.includes(2)"
type="success" effect="light">教练
</el-tag>
<el-tag v-if="row.identity.includes(3)"
type="warning" effect="light">领队
</el-tag>
<el-tag v-if="row.identity.includes(4)"
type="warning"
effect="light">处级领导
</el-tag>
<el-tag v-if="row.identity.includes(5)"
type="warning" effect="light">替补
</el-tag>
</template>
</el-table-column>
</el-table>
</el-timeline-item>
</el-timeline>
</div>
</transition>
</el-card>
</el-card>
</template>
</guava>
<el-dialog
:close-on-click-modal="false"
:visible.sync="importVisible"
title="导入"
width="50%"
>
<el-timeline>
<el-timeline-item placement="top" timestamp="下载模板">
<el-card>
<el-button
@click="location.href='/platform/basics/downloadTemplate?filePath=activity/ActivityApplyUser.xlsx&fileName=导入模板.xlsx'"
icon="el-icon-download" size="medium"
style="width: 200px"
type="">下载模板
</el-button>
</el-card>
</el-timeline-item>
<el-timeline-item placement="top" timestamp="上传文件">
<el-card>
<el-upload
:auto-upload="false"
:file-list="importData.fileList"
:limit="1"
:on-change="(file, fileList) => {
importData.fileList = fileHandleChange(file, fileList,{type:['xls','xlsx']})
}"
:on-remove="(file, fileList) => {
importData.fileList = fileHandleRemove(file, fileList)
}"
name="file"
ref="upload">
<el-button icon="el-icon-upload" size="medium" style="width: 200px" type="">
选择文件
</el-button>
</el-upload>
</el-card>
</el-timeline-item>
</el-timeline>
<span class="dialog-footer" slot="footer">
<el-button :disabled="importLoading" @click="importVisible = false">取 消</el-button>
<el-button :loading="importLoading" @click="doImport" type="primary">确定</el-button>
</span>
</el-dialog>
</div>
<script>
const vue = new Vue({
el: '#app',
mixins: [initTableMixins],
data() {
return {
importData: {},
importLoading: false,
importVisible: false,
events: [],
activityTypeList: [],
noneData: true,
tabLoading: true,
activities: [],
apply: [],
apply2: [],
unions: [],
rootData: [],
tableKey: '',
pageForm: {
id: '',
unionid: "",
year: new Date().getFullYear() + '',
},
tableColumns: [
{prop: 'allName', label: '项目名称', sortable: true, width: '200px'},
{prop: 'team', label: '所属队', sortable: true},
{prop: 'username', label: '姓名'},
{prop: 'loginname', label: '教工号'},
{prop: 'sex', label: '性别'},
/* {prop: 'divisionLevelLeadership', label: '是否处级领导', sortable: true},*/
{prop: 'unitname', label: '单位', sortable: true},
{prop: 'mobile', label: '电话'},
{prop: 'projectType', label: '项目类型', sortable: true},
{prop: 'identity', label: '身份', sortable: true, width: '300px'},
],
projectTypeList: [
{id: '1', name: '单项'},
{id: '2', name: '团体'},
],
}
},
components: {
'guava': httpVueLoader('/components/plugins/Guava.vue'),
'info': httpVueLoader('/components/activity/school/Info.vue'),
},
filters: {
money(val) {
return val ? val : 0
},
str(val) {
return val ? val : '暂无'
}
},
watch: {
'pageForm.applyed': (val) => {
vue.changeVVV(val)
}
},
methods: {
doImport() {
if (!this.importData.fileList.length) {
this.notifyWarning("请选择文件!")
return
}
const data = new FormData();
this.importData.fileList.forEach((val) => {
data.append("file", val.raw, val.raw.name);
data.append("activityId", this.pageForm.id);
});
this.importLoading = true
$.ajax({
url: loc() + "/importUserActivitys",
type: "post",
data: data,
processData: false,
contentType: false,
success: (data) => {
if (!data.code) {
this.notifySuccess(data.msg);
this.getData();
this.importVisible = false
} else {
this.notifyWarning(data.msg)
}
this.importLoading = false
},
error: (data) => {
this.notifyWarning(data.msg)
this.importLoading = false
}
});
},
openImport() {
this.importData = {
fileList: []
}
if (!this.pageForm.id) {
this.notifyWarning("请先选择活动名称")
return
}
this.importVisible = true;
},
doExportByEnroll() {
const {id, unionid} = this.pageForm
if (unionid === "") {
this.$notify.warning({title: '警告', message: "请选择要导出的工会"});
return
}
window.open(loc() + "/doExportByEnroll?id=" + id + "&unionId=" + unionid)
},
async changeLevel() {
await this.getNearActivity()
},
doExport() {
const {id, unionid} = this.pageForm
location.href = "/platform/activity/common/exportXlsx?id=" + id
},
async yearChange() {
this.pageForm.id = null
await this.getNearActivity()
},
changeVVV() {
if (this.pageForm.unionid) {
this.apply = this.rootData.filter(v => {
return v.id === this.pageForm.unionid
})
} else {
this.apply = JSON.parse(JSON.stringify(this.rootData))
}
if (this.pageForm.applyed === '1') {
this.apply = this.apply.filter(v => {
return v.num === 0
})
} else if (this.pageForm.applyed === '2') {
this.apply = this.apply.filter(v => {
return v.num > 0
})
}
this.tableKey = new Date().getTime()
},
async getNearActivity() {
const resp = await $.get(loc() + "/getNearActivity", {
year: this.pageForm.year,
activityLevel: this.pageForm.activityLevel
})
if (resp.code === 0) {
this.activities = resp.data
if (resp.data.length) {
this.pageForm.id = resp.data[0].id
this.getData()
} else {
this.pageForm.unionid = ""
this.unionis = []
this.pageForm.id = ""
this.noneData = true
this.tabLoading = false
}
} else {
this.notifyWarning(resp.msg)
}
},
async changeActivit() {
const resp = await $.post("/platform/activity/apply/getEvents", {activityId: this.pageForm.id})
this.events = resp
},
doEventType(app) {
const {apply, projectType} = app
if (!app.projectType) {
this.$set(app, "apply2", apply)
} else {
const arr = apply.filter(i => {
return i.projectType == projectType
})
this.$set(app, "apply2", arr)
}
},
doEvent(app) {
const {apply, eventId} = app
if (!app.eventId) {
this.$set(app, "apply2", apply)
} else {
const arr = apply.filter(i => {
return !i.unionLeader && !i.unionCoach && i.evid == eventId
})
this.$set(app, "apply2", arr)
}
},
async getData() {
this.noneData = true
this.tabLoading = true
await this.changeActivit()
const activity = this.activities.filter(v => {
return v.id === this.pageForm.id
})
this.pageForm.activityName = activity.length > 0 ? activity[0].name : null
this.pageForm.applyType = activity[0].applyType
const resp = await $.get(loc() + "/getData", this.pageForm)
this.tabLoading = false
if (resp.code === 0) {
const v = resp.data
if (v.length) {
/* if (activity[0].applyType == 2) {*/
v.forEach(x => {
const leaders = x.apply.filter(i => {
return i.unionLeader
})
x.leader = {}
if (leaders.length) {
x.leader = leaders[0]
}
const coachs = x.apply.filter(i => {
return i.unionCoach
})
x.coach = {}
if (coachs.length) {
x.coach = coachs[0]
}
const heads = x.apply.filter(i => {
return i.unionHead
})
x.head = {}
if (heads.length) {
x.head = heads[0]
}
const staffs = x.apply.filter(i => {
return i.unionStaff
})
x.staff = {}
if (staffs.length) {
x.staff = staffs[0]
}
x.apply = x.apply.filter(i => {
return !i.unionLeader && !i.unionCoach && !i.unionHead && !i.unionStaff
})
})
/*}*//* else {
v.forEach(x => {
const leaders = x.apply.filter(i => {
return i.identity.includes(3)
})
x.leader = {}
if (leaders.length) {
x.leader = leaders[0]
}
const coachs = x.apply.filter(i => {
return i.identity.includes(2)
})
x.coach = {}
if (coachs.length) {
x.coach = coachs[0]
}
x.apply = x.apply.filter(i => {
return i.identity.includes(1)
})
})
}*/
v.sort((a, b) => {
return b.num - a.num
})
this.unions = v.map(v => {
return {id: v.id, unionname: v.unionname}
})
if (this.unions.length == 1) {
this.pageForm.unionid = this.unions[0].id
}
this.rootData = JSON.parse(JSON.stringify(v))
this.rootData.forEach(x => {
x.apply2 = clone(x.apply)
})
this.noneData = false
} else {
this.unions = []
this.pageForm.unionid = ""
this.noneData = true
}
if (this.pageForm.activityLevel !== '40001' && this.rootData && this.rootData.length > 0) {
this.$set(this.rootData[0], "show", true)
}
this.apply = this.rootData
this.tableKey = new Date().getTime()
} else {
this.notifyWarning(resp.msg)
this.noneData = true
}
},
async getActivityTypeList(code) {
const {data} = await $.get("/platform/activity/basic/basic/settings/getActivityTwoLevelType", {code: code})
return data;
},
},
async created() {
await this.changeActivit()
this.activityTypeList = await this.getActivityTypeList("40000")
this.$set(this.pageForm, "activityLevel", this.activityTypeList[0].code)
await this.getNearActivity()
}
})
</script>
<!--#
}
#-->