This commit is contained in:
2026-04-16 19:37:37 +08:00
25 changed files with 685 additions and 182 deletions
@@ -258,6 +258,7 @@
//挂载
Vue.prototype.$moment = moment
Vue.prototype.$businessTool = businessTool
Vue.prototype.$commonUtil = commonUtil
Vue.prototype.$auth = commonUtil.authService()
Vue.prototype.$axios = commonUtil.axiosService()
Vue.prototype.$downLoad = commonUtil.downLoadService.bind(commonUtil)
@@ -277,6 +278,7 @@
Vue.component("enum-tag", httpVueLoader("/components/plugins/sysEnum/EnumTag.vue?v=" + new Date().getTime()))
Vue.component("table-list", httpVueLoader("/components/plugins/h5/TableList.vue?v=" + new Date().getTime()))
Vue.component("table-column", httpVueLoader("/components/plugins/h5/TableColumn.vue?v=" + new Date().getTime()))
Vue.component("file-preview", httpVueLoader("/components/plugins/sysFilePreview/H5Index.vue?v=" + new Date().getTime()))
</script>
</head>
<body>
@@ -153,6 +153,8 @@ layout("/layouts/platform.html"){
this.$axios.post("/platform/club/join/apply/checkApplyClub", { clubId: row.id }).then((res) => {
if (res.code === 0) {
this.$store.dispatch("pjaxRoute", "/platform/club/join/apply?clubId=" + row.id)
} else {
this.$message.warning(res.msg || "网络请求失败,请稍后重试!");
}
})
@@ -31,6 +31,11 @@ layout("/layouts/platform.html"){
<el-option v-for="item in unitList" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select>
</search-item>
<search-item label="所属协会:" v-if="$auth.hasRole('SYSADMIN')">
<el-select v-model="pageForm.clubId" placeholder="请选择所属单位" filterable clearable style="width: 100%">
<el-option v-for="item in clubList" :key="item.id" :label="item.clubName" :value="item.id"></el-option>
</el-select>
</search-item>
</search>
</el-card>
@@ -121,6 +126,7 @@ layout("/layouts/platform.html"){
},
unionList: [],
unitList: [],
clubList: [],
showApprovalForm: false
}
},
@@ -174,6 +180,7 @@ layout("/layouts/platform.html"){
async created() {
this.unitList = await this.$businessTool.listUnit()
this.unionList = await this.$businessTool.listUnion()
this.clubList = await this.$businessTool.listClub()
this.pageData()
}
})
@@ -15,6 +15,12 @@ layout("/layouts/platform.html"){
style="width: 100%"
></el-date-picker>
</search-item>
<search-item label="姓名:">
<el-input placeholder="请输入姓名查询" clearable v-model="pageForm.userName"></el-input>
</search-item>
<search-item label="工号:">
<el-input placeholder="请输入工号查询" clearable v-model="pageForm.loginName"></el-input>
</search-item>
</search>
</el-card>
@@ -163,7 +163,7 @@ const CLUB_FORM_TEMPLATE = {
clubType: [{ required: true, message: "请选择协会类型", trigger: ["blur", "change"] }],
concatPerson: [{ required: true, message: "请选择协会联系人", trigger: ["blur", "change"] }],
foundTime: [{ required: true, message: "请选择成立时间", trigger: ["blur", "change"] }],
due: [{ required: true, message: "请输入会费标准", trigger: ["blur", "change"] }],
// due: [{ required: true, message: "请输入会费标准", trigger: ["blur", "change"] }],
// establishReport: [{ required: true, message: "请上传申请成立报告", trigger: ["blur", "change"] }]
rulesFile: [{ required: true, message: "请上传章程", trigger: ["blur", "change"] }],
//manageFile: [{ required: true, message: "请上传经费来源及管理办法", trigger: ["blur", "change"] }],
@@ -35,7 +35,10 @@ layout("/layouts/platform.html"){
<table-tool label="协会统计">
<el-button @click="exportData" type="primary" size="small">导出全部统计数据</el-button>
<el-button @click="exportUserData(null)" v-if="$auth.hasRoleOr(['SYSADMIN', 'SCHOOL_UNION_ADMIN'])" type="primary" size="small">
导出全部人员明细
导出全部人员明细zip
</el-button>
<el-button @click="exportExcel(null)" v-if="$auth.hasRoleOr(['SYSADMIN', 'SCHOOL_UNION_ADMIN'])" type="primary" size="small">
导出全部人员明细(EXCEL)
</el-button>
<el-button @click="exportFiles(null)" v-if="$auth.hasRoleOr(['SYSADMIN', 'SCHOOL_UNION_ADMIN'])" type="primary" size="small">
导出全部上传资料
@@ -159,6 +162,14 @@ layout("/layouts/platform.html"){
const id = row === null ? "" : row.id
this.$downLoad("/platform/club/statistics/exportFiles", { clubId: id })
},
exportExcel(){
let params = {
clubId: this.pageForm.clubId,
userState: this.pageForm.userState,
sex: this.pageForm.sex
}
this.$downLoad("/platform/club/statistics/exportExcel", params)
},
async openView(row) {
this.clickRow = row
await this.userPageData()
@@ -53,7 +53,7 @@ const applyForm = {
:name="index + ''"
:title="activity.keyWord + (index + 1)"
:key="index">
<train-dynamic-form v-model="formData.mobileColumnsValue[index]"></train-dynamic-form>
<train-dynamic-form v-model="formData.mobileColumnsValue[index]" :key="index"></train-dynamic-form>
</van-tab>
</van-tabs>
</div>
@@ -49,7 +49,7 @@ layout("/layouts/platform_h5.html"){
<table-column label="类型">{{row.typeName}}</table-column>
<table-column label="校区">{{row.campus}}</table-column>
<table-column label="地点">{{row.courseLocation}}</table-column>
<table-column label="联系人">{{row.courseInstructor}}</table-column>
<table-column label="联系人"><span v-html="row.courseInstructor"></span></table-column>
<table-column label="时间">
<span v-if="row.courseTimes && row.courseTimes.length === 1" class="primary-color" @click="onTime(row)">
{{ weekdayCNMap[$moment(row.courseTimes[0].courseDate).day()]
@@ -91,19 +91,30 @@ layout("/layouts/platform_h5.html"){
<!-- 表单容器 -->
<van-form @submit="doSubmit" ref="formRef" class="form-container">
<!-- 协会信息 -->
<van-cell-group title="协会信息" class="form-section">
<van-field
:rules="[{ required: true }]"
v-model="formData.clubName"
label="协会"
placeholder="选择协会"
placeholder="点击选择协会"
required
is-link
readonly
@click="showClubPopup = true"
class="club-field"
></van-field>
border="false"
>
<template #right-icon>
<van-button
type="info"
size="small"
style="margin-right: -4px;"
@click.stop.prevent="onOpen(formData.clubId)"
:disabled="!formData.clubId"
>查看
</van-button>
</template>
</van-field>
<van-popup v-model:show="showClubPopup" position="bottom">
<van-picker
show-toolbar
@@ -195,15 +206,27 @@ layout("/layouts/platform_h5.html"){
<van-button round block type="info">提交申请</van-button>
</div>
</van-form>
<van-popup :style="{ height: '100%',width: '100%'}" position="right" safe-area-inset-bottom v-model="viewShow">
<van-sticky>
<van-nav-bar @click-left="viewShow = false" left-arrow left-text="返回" title="详细信息"></van-nav-bar>
</van-sticky>
<div style="height: calc(100vh - 44px); overflow-y: auto">
<info ref="infoRef"></info>
</div>
</van-popup>
</div>
<script>
<!--#include('../common/clubInfo.js'){}#-->
const vue = new Vue({
el: "#app",
store,
components: {},
components: {
info: clubInfo
},
data() {
return {
viewShow: false,
formData: {
clubId: "",
clubName: "",
@@ -230,6 +253,12 @@ layout("/layouts/platform_h5.html"){
}
},
methods: {
onOpen(clubId) {
this.viewShow = true
this.$nextTick(() => {
this.$refs.infoRef.onOpen(clubId)
})
},
onClubConfirm(value, index) {
this.formData.clubId = this.clubOptions[index].id;
this.formData.clubName = value;
@@ -0,0 +1,62 @@
const clubInfo = {
template:
/*language=HTML*/
`
<div>
<van-cell-group>
<!-- <van-cell>-->
<!-- <div slot="title" class="font-size4 bold">-->
<!-- 协会信息-->
<!-- </div>-->
<!-- </van-cell>-->
<van-cell title="协会名称">{{ viewData.clubName }}</van-cell>
<van-cell title="成立时间">{{ viewData.foundTime }}</van-cell>
<van-cell title="协会编码">{{ viewData.clubCode }}</van-cell>
<van-cell title="协会类型">{{ viewData.typeName }}</van-cell>
<van-cell title="发起人">{{ viewData.sponsorName }}</van-cell>
<van-cell title="会费标准">{{ viewData.due }}</van-cell>
<van-cell title="当前人数">{{ viewData.currentPeopleNum }}</van-cell>
<van-cell class="more-text" title="协会介绍">
<div v-html="viewData.introduce"></div>
</van-cell>
<van-cell class="more-text" title="协会宗旨">
<div v-html="viewData.purpose"></div>
</van-cell>
<van-cell class="more-text" title="协会章程" v-if="viewData.rulesFile">
<file-preview :files="viewData.rulesFile" complete_result></file-preview>
</van-cell>
<van-cell class="more-text" title="年度活动计划" v-if="viewData.yearPlanFile">
<file-preview :files="viewData.yearPlanFile" complete_result></file-preview>
</van-cell>
</van-cell-group>
</div>
`,
data() {
return {
viewData: {},
activeName: "first",
isScrollNow: "0"
}
},
methods: {
onOpen(id) {
this.$axios.post("/platform/club/applyJoin/apply/findOne", { id }).then((res) => {
if (res.code === 0) {
this.viewData = res.data
}
})
}
},
style: /*language=CSS*/ `
.more-text .van-field__label{
width: 100%;
}
.more-text {
display: inline-block;
}
.more-text .van-cell__value{
text-align: left;
}
`
}