first commit

This commit is contained in:
2026-09-09 09:14:28 +08:00
commit 5343198112
5199 changed files with 1052895 additions and 0 deletions
@@ -0,0 +1,342 @@
<!--#
layout("/layouts/platform.html"){
#-->
<style>
.btn-group {
width: 20%;
}
.el-select {
width: 100%;
}
.el-date-editor.el-input, .el-date-editor.el-input__inner {
width: auto;
}
.el-date-editor .el-range-separator {
width: 8%;
}
</style>
<div id="app" v-cloak>
<guava>
<div style="padding-right: 10px">
<el-card shadow="never" style="position:relative;">
<div class="d-search-item btn-group tool-button">
<el-input @keyup.enter.native="doSearch" clearable placeholder="请输入内容"
v-model="pageForm.searchKeyword">
<el-select placeholder="查询类型" slot="prepend" style="width: 80px;"
v-model="pageForm.searchName">
<el-option label="姓名" value="u.username"></el-option>
<el-option label="工号" value="u.loginname"></el-option>
</el-select>
</el-input>
</div>
<div class="d-search-item btn-group tool-button">
<el-select clearable filterable placeholder="请选择社团"
v-model="pageForm.clubid">
<el-option
:label="item.name"
:value="item.id"
v-for="item in clubOptions">
</el-option>
</el-select>
</div>
<div class="d-search-item btn-group tool-button">
<dict-select clearable code="UserType" placeholder="请选择人员类型"
v-model="pageForm.personType"></dict-select>
</div>
<div class="d-search-item btn-group tool-button">
<dict-select clearable code="UserState" placeholder="请选择在职状态"
v-model="pageForm.userState"></dict-select>
</div>
<div class="mt10">
<div class="d-search-item btn-group tool-button">
<el-date-picker
end-placeholder="结束日期"
format="yyyy-MM-dd"
range-separator="至"
start-placeholder="开始日期"
type="daterange"
v-model="pageForm.birthday"
value-format="yyyy-MM-dd">
</el-date-picker>
</div>
<div class="d-search-item btn-group tool-button">
<el-select clearable filterable placeholder="请选择性别"
v-model="pageForm.sex">
<el-option label="男" value="男"></el-option>
<el-option label="女" value="女"></el-option>
</el-select>
</div>
<div class="d-search-item btn-group tool-button">
<el-select clearable filterable placeholder="请选择所属单位"
v-model="pageForm.unitid">
<el-option :label="item.name" :value="item.id" v-for="item in units"></el-option>
</el-select>
</div>
<div class="btn-group tool-button">
<el-button @click="doSearch" icon="el-icon-search" type="primary"></el-button>
</div>
</div>
<div style="position: absolute;right: 20px;top: 20px;">
<template>
<div class="pull-right offscreen-right">
<el-radio-group @change="(val) => doSearch()" v-model="pageForm.radioType">
<el-radio-button label="1">全部</el-radio-button>
<el-radio-button label="2">已审核</el-radio-button>
<el-radio-button label="3">未审核</el-radio-button>
</el-radio-group>
</div>
</template>
</div>
</el-card>
<el-card class="mt10" shadow="never">
<div style="text-align: right">
<el-button :disabled="subDis" @click="check(true)" icon="el-icon-check" plain type="success">同意
</el-button>
<el-button :disabled="subDis" @click="check(false)" icon="el-icon-close" plain type="danger">拒绝
</el-button>
</div>
<el-table :data="tableData" :key="tabKey" @selection-change="handleSelectionChange"
@sort-change="pageOrder"
ref="multipleTable"
row-key="id"
style="width: 100%" v-loading="tabloading">
<el-table-column :reserve-selection="true" v-if="pageForm.radioType !== '2'"
:selectable="(row, index) => {return row.status === 3}"
type="selection"
width="55">
</el-table-column>
<el-table-column align="center" header-align="center" label="序号" type="index">
<template scope="scope">
<span>{{scope.$index+(pageForm.pageNumber - 1) * pageForm.pageSize + 1}} </span>
</template>
</el-table-column>
<el-table-column align="center" header-align="center" label="社团编码" prop="code" show-overflow-tooltip
sortable></el-table-column>
<el-table-column align="center" header-align="center" label="社团名称" show-overflow-tooltip sortable
prop="clubname"></el-table-column>
<el-table-column width="100" align="center" header-align="center" label="工号" sortable
prop="loginname"></el-table-column>
<el-table-column width="100" align="center" header-align="center" label="姓名" sortable
prop="username"></el-table-column>
<el-table-column width="80" align="center" header-align="center" label="性别" prop="sex" sortable
></el-table-column>
<el-table-column align="center" header-align="center" label="出生年月" prop="birthday" sortable>
</el-table-column>
<el-table-column width="60" align="center" header-align="center" label="年龄"
prop="birthday">
<template scope="scope">
<span>{{getAge(scope.row)}}</span>
</template>
</el-table-column>
<el-table-column width="120" align="center" header-align="center" label="电话"
prop="mobile"></el-table-column>
<el-table-column width="80" align="center" header-align="center" label="是否会员"
prop="status">
<template scope="scope">
<span v-if="scope.row.status != 5"></span>
<span v-if="scope.row.status === 5" style="color: #236eb4"></span>
</template>
</el-table-column>
<el-table-column align="center" header-align="center" label="人员类型" show-overflow-tooltip
prop="rylx"></el-table-column>
<el-table-column width="100" align="center" header-align="center" label="在职状态"
prop="userstate"></el-table-column>
<el-table-column align="center" header-align="center" label="所属单位" prop="unitname"
show-overflow-tooltip
sortable></el-table-column>
<el-table-column align="center" header-align="center" label="申请时间" prop="join_time"
show-overflow-tooltip
sortable></el-table-column>
<!--<el-table-column align="center" header-align="center" label="审核时间" prop="join_time"
show-overflow-tooltip>
<template scope="scope">
{{ formatAuditTime(scope.row) }}
</template>
</el-table-column>-->
<el-table-column align="center" header-align="center" label="是否缴费" prop="isjf"
width="80">
<template scope="scope">
<span class="text-success" v-if="scope.row.isjf">已缴费</span>
<span class="text-danger" v-else>未缴费</span>
</template>
</el-table-column>
<el-table-column align="center" header-align="center" label="审核状态"
prop="status">
<template slot-scope="scope">
<el-tag v-if="scope.row.status==1" type="primary">待社团审核</el-tag>
<el-tag v-if="scope.row.status==2" type="danger">社团拒绝</el-tag>
<el-tag v-if="scope.row.status==3" type="primary">待校工会审核</el-tag>
<el-tag v-if="scope.row.status==4" type="danger">校工会拒绝</el-tag>
<el-tag v-if="scope.row.status==5" type="success">审核通过</el-tag>
</template>
</el-table-column>
</el-table>
<el-row class="el-pagination-container">
<el-pagination
:current-page="pageForm.pageNumber"
:page-size="pageForm.pageSize"
:page-sizes="[10, 20, 30, 50]"
:total="pageForm.totalCount"
@current-change="pageNumberChange"
@size-change="pageSizeChange"
layout="total, sizes, prev, pager, next">
</el-pagination>
</el-row>
</el-card>
</div>
</guava>
</div>
<script>
const vue = new Vue({
el: '#app',
data() {
return {
units: [],
tabKey: '',
multipleSelection: [],
clubOptions: [],
tabloading: false,
formData: {},
tableData: [],
pageForm: {
searchName: "u.username",
searchKeyword: "",
pageNumber: 1,
pageSize: 10,
totalCount: 0,
pageOrderName: "",
pageOrderBy: "",
radioType: 3,
birthday: [],
},
formRules: {
code: [{required: true, message: '必填', trigger: ['blur', 'change']}],
name: [{required: true, message: '必填', trigger: ['blur', 'change']}],
},
subDis: false,
}
},
components: {
'dict-select': httpVueLoader('/components/plugins/DictSelect.vue?v=1.0.0'),
},
methods: {
formatAuditTime(row) {
if (!row.auditlist) {
return ''
}
const auditArray = JSON.parse(row.auditlist)
const audit = auditArray.find(o => o.auditType === 'school')
return audit === undefined ? '' : audit.auditTime
},
getAge(row) {
if (row.birthday === null || row.birthday === undefined) {
return
}
const birthdayTime = new Date(row.birthday).getTime()
const nowTime = new Date().getTime()
return Math.ceil((nowTime - birthdayTime) / 31536000000)
},
check(flag) {
if (!this.multipleSelection.length) {
this.$notify({
title: '提示',
message: '请先勾选需要进行审核的人员!',
type: 'warning'
});
return
}
this.$confirm('您选择了' + this.multipleSelection.length + '个人,请确定是否' + (flag ? '同意?' : '拒绝?'), '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
callback: (a, b) => {
if ("confirm" === a) {
const ids = this.multipleSelection.map(v => {
return v.id
})
this.subDis = true
$.post(base + "/platform/sys/club/sh/check", {ids: JSON.stringify(ids), flag: flag, type: 2}, (data) => {
this.subDis = false
if (data.code === 0) {
this.$message({
message: '提交成功',
type: 'success'
});
this.multipleSelection = []
this.$refs.multipleTable.clearSelection();
this.doSearch()
} else {
this.$message({
message: data.msg,
type: 'error'
});
}
}, "json");
}
}
});
},
handleSelectionChange(val) {
this.multipleSelection = val;
},
doSearch() {
// this.tabKey = new Date().getTime()
this.pageForm.pageNumber = 1
this.pageData()
}
,
pageOrder(column) {//按字段排序
this.pageForm.pageOrderName = column.prop;
this.pageForm.pageOrderBy = column.order;
this.pageData();
}
,
pageNumberChange(val) {//页码更新操作
this.pageForm.pageNumber = val;
this.pageData();
}
,
pageSizeChange(val) {//分页大小更新操作
this.pageForm.pageSize = val;
this.pageData();
}
,
pageData() {//加载分页数据
sublime.showLoadingbar();//显示loading
this.tabloading = true
this.pageForm.type = 2
this.pageForm.birthday = this.pageForm.birthday.length > 0 ? JSON.stringify(this.pageForm.birthday) : []
$.post(base + "/platform/sys/club/sh/pageData", this.pageForm, (data) => {
sublime.closeLoadingbar();//关闭loading
this.tabloading = false
if (data.code === 0) {
this.tableData = data.data.list;
this.pageForm.totalCount = data.data.totalCount;
} else {
this.$message({
message: data.msg,
type: 'error'
});
}
}, "json");
},
async getMyMangeClub() {
const {data} = await $.get("/platform/sys/club/users/getMyMangeClub")
return data
},
},
async created() {
this.clubOptions = await this.getMyMangeClub()
this.pageData();
this.units = await getUnits()
}
})
</script>
<!--#
}
#-->
@@ -0,0 +1,338 @@
<!--#
layout("/layouts/platform.html"){
#-->
<style>
.el-select {
width: 100%;
}
.el-date-editor.el-input, .el-date-editor.el-input__inner {
width: auto;
}
.el-date-editor .el-range-separator {
width: 8%;
}
</style>
<div id="app" v-cloak>
<guava ref="guava">
<template>
<div style="padding-right: 10px">
<el-card shadow="never" style="position:relative;">
<div class="d-search-item btn-group tool-button">
<el-input @keyup.enter.native="doSearch" clearable placeholder="请输入内容"
v-model="pageForm.searchKeyword">
<el-select placeholder="查询类型" slot="prepend" style="width: 80px;"
v-model="pageForm.searchName">
<el-option label="姓名" value="u.username"></el-option>
<el-option label="工号" value="u.loginname"></el-option>
</el-select>
</el-input>
</div>
<div class="d-search-item btn-group tool-button">
<el-select clearable filterable placeholder="请选择协会"
v-model="pageForm.clubid">
<el-option
:label="item.name"
:value="item.id"
v-for="item in clubOptions">
</el-option>
</el-select>
</div>
<div class="d-search-item btn-group tool-button">
<dict-select clearable code="UserType" placeholder="请选择人员类型"
v-model="pageForm.personType"></dict-select>
</div>
<div class="d-search-item btn-group tool-button">
<dict-select clearable code="UserState" placeholder="请选择在职状态"
v-model="pageForm.userState"></dict-select>
</div>
<div class="d-search-item btn-group tool-button">
<el-select clearable filterable placeholder="请选择性别"
v-model="pageForm.sex">
<el-option label="男" value="男"></el-option>
<el-option label="女" value="女"></el-option>
</el-select>
</div>
<div class="d-search-item btn-group tool-button">
<el-select clearable filterable placeholder="请选择所属单位"
v-model="pageForm.unitid">
<el-option :label="item.name" :value="item.id" v-for="item in units"></el-option>
</el-select>
</div>
<div class="btn-group tool-button">
<el-button @click="doSearch" icon="el-icon-search" type="primary"></el-button>
</div>
</el-card>
<el-card class="mt10" shadow="never">
<table-tool :app="this" label="审核列表" ref="tableTool">
<template #func>
<el-radio-group @change="(val) => doSearch()" v-model="pageForm.radioType">
<el-radio-button label="1">全部</el-radio-button>
<el-radio-button label="2">已审核</el-radio-button>
<el-radio-button label="3">未审核</el-radio-button>
</el-radio-group>
</template>
</table-tool>
<el-table :data="tableData" @sort-change="pageOrder"
style="width: 100%" v-loading="tabloading">
<el-table-column align="center" header-align="center" label="序号" type="index">
<template scope="scope">
<span>{{scope.$index+(pageForm.pageNumber - 1) * pageForm.pageSize + 1}} </span>
</template>
</el-table-column>
<!--<el-table-column align="center" header-align="center" label="协会编码" prop="code" show-overflow-tooltip
sortable></el-table-column>-->
<el-table-column align="center" header-align="center" label="协会名称" show-overflow-tooltip sortable
prop="clubname"></el-table-column>
<el-table-column width="100" align="center" header-align="center" label="工号" sortable
prop="loginname"></el-table-column>
<el-table-column width="100" align="center" header-align="center" label="姓名" sortable
prop="username"></el-table-column>
<el-table-column align="center" header-align="center" label="性别" prop="sex" sortable width="80">
</el-table-column>
<!-- <el-table-column align="center" header-align="center" label="出生年月" prop="birthday" sortable>-->
<!-- </el-table-column>-->
<!-- <el-table-column width="60" align="center" header-align="center" label="年龄"-->
<!-- prop="birthday">-->
<!-- <template scope="scope">-->
<!-- <span>{{getAge(scope.row)}}</span>-->
<!-- </template>-->
<!-- </el-table-column>-->
<el-table-column width="120" align="center" header-align="center" label="电话"
prop="mobile"></el-table-column>
<!--<el-table-column width="80" align="center" header-align="center" label="是否会员"
prop="status">
<template scope="scope">
<span v-if="scope.row.status != 5">否</span>
<span v-if="scope.row.status === 5" style="color: #236eb4">是</span>
</template>
</el-table-column>-->
<!--<el-table-column align="center" header-align="center" label="人员类型" show-overflow-tooltip
prop="rylx"></el-table-column>
<el-table-column width="100" align="center" header-align="center" label="在职状态"
prop="userstate"></el-table-column>-->
<el-table-column align="center" header-align="center" label="所属单位" prop="unitname"
show-overflow-tooltip
sortable></el-table-column>
<el-table-column align="center" header-align="center" label="申请时间" prop="join_time"
show-overflow-tooltip
sortable></el-table-column>
<!--<el-table-column align="center" header-align="center" label="审核时间" prop="join_time"
show-overflow-tooltip>
<template scope="scope">
{{ formatAuditTime(scope.row) }}
</template>
</el-table-column>-->
<el-table-column align="center" header-align="center" label="审核状态"
prop="status">
<template slot-scope="scope">
<el-tag v-if="scope.row.status==1" type="primary">待协会审核</el-tag>
<el-tag v-if="scope.row.status==2" type="danger">协会拒绝</el-tag>
<el-tag v-if="scope.row.status==3" type="primary">待校工会审核</el-tag>
<el-tag v-if="scope.row.status==4" type="danger">校工会拒绝</el-tag>
<el-tag v-if="scope.row.status==5" type="success">审核通过</el-tag>
</template>
</el-table-column>
<el-table-column align="center" header-align="center" label="操作"
width="300px">
<template scope="{row}">
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
<el-button v-if="pageForm.radioType == 3" @click="openAudit(row)" size="mini" type="primary">审核</el-button>
<!-- <el-button type="primary" size="mini" @click="doExportApply(row)">导出申请表</el-button>-->
</template>
</el-table-column>
</el-table>
<el-row class="el-pagination-container">
<el-pagination
:current-page="pageForm.pageNumber"
:page-size="pageForm.pageSize"
:page-sizes="[10, 20, 30, 50]"
:total="pageForm.totalCount"
@current-change="pageNumberChange"
@size-change="pageSizeChange"
layout="total, sizes, prev, pager, next">
</el-pagination>
</el-row>
</el-card>
</div></template>
<template #edit>
<club-user-apply-info ref="clubUserApplyInfo" handle label="协会审核">
<template #handle>
<el-form :model="formData" ref="form" :rules="formRules" label-position="right"
style="padding: 20px 0" label-width="120px">
<el-row gutter="20">
<el-col :span="12">
<el-form-item prop="username" label="审核人员">
<el-input v-model="formData.username"
disabled></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="auditTime" label="审核时间">
<el-input v-model="formData.auditTime" disabled></el-input>
</el-form-item>
</el-col>
</el-row>
<!-- <el-form-item label="是否缴费" prop="isjf">-->
<!-- <el-radio :label="true" border v-model="formData.isjf">已缴费</el-radio>-->
<!-- <el-radio :label="false" border v-model="formData.isjf">未缴费</el-radio>-->
<!-- </el-form-item>-->
<el-form-item prop="auditOpinion" label="审核意见">
<el-input type="textarea" v-model="formData.auditOpinion" rows="4"
maxlength="500"
placeholder="请填写您的审核意见"></el-input>
</el-form-item>
<!-- <el-form-item prop="auditSign" label="签&emsp;&emsp;字">-->
<!-- <sign prefix="club" :qz.sync="formData.auditSign"></sign>-->
<!-- </el-form-item>-->
</el-form>
<div style="float: right;margin: 20px 0">
<el-button @click="doReview(false)">拒绝</el-button>
<el-button type="primary" @click="doReview(true)">通过</el-button>
</div>
</template>
</club-user-apply-info>
</template>
<template #view>
<club-user-apply-info ref="applyInfo"></club-user-apply-info>
</template>
</guava>
</div>
<script>
const vue = new Vue({
el: '#app',
mixins: [initTableMixins],
data() {
return {
units: [],
tabKey: '',
clubOptions: [],
tabloading: false,
formData: {
sign: ''
},
tableData: [],
pageForm: {
searchName: "u.username",
searchKeyword: "",
pageNumber: 1,
pageSize: 10,
totalCount: 0,
pageOrderName: "",
pageOrderBy: "",
radioType: 3,
birthday: [],
},
formRules: {
isjf: [{required: true, message: '必填', trigger: ['blur', 'change']}],
auditOpinion: [{required: true, message: '必填', trigger: ['blur', 'change']}],
auditSign:[{required: true, message: '必填', trigger: ['blur', 'change']}]
},
}
},
components: {
'club-user-apply-info': httpVueLoader('/components/club/clubUserApplyInfo.vue?v=1.0.1'),
'dict-select': httpVueLoader('/components/plugins/DictSelect.vue?v=1.0.0'),
},
methods: {
doExportApply(row){
location.href = '/platform/sys/club/clubInfoManage/exportInfo?id=' + row.id
},
getAge(row) {
if (row.birthday === null || row.birthday === undefined) {
return
}
const birthdayTime = new Date(row.birthday).getTime()
const nowTime = new Date().getTime()
return Math.ceil((nowTime - birthdayTime) / 31536000000)
},
openView(row) {
this.$refs.applyInfo.getInfo(row.id)
this.$refs.guava.view()
},
openAudit(row) {
this.formData = {
id: row.id,
username: "${@shiro.getPrincipalProperty('username')}",
auditTime: moment().format('YYYY-MM-DD')
}
this.$refs.clubUserApplyInfo.getInfo(row.id)
if (this.$refs['form']) {
this.$refs['form'].resetFields()
}
this.$refs.guava.edit()
},
async doReview(flag) {
const valid = await this.$refs.form.validate()
if (!valid) return
this.formData.flag = flag
const resp = await $.post(base + "/platform/sys/club/sh/check", this.formData)
if(resp.code === 0) {
this.doSearch()
this.$refs.guava.index()
this.$message({message: resp.msg, type: 'success'})
} else {
this.$message({message: resp.msg, type: 'warning'})
}
},
doSearch() {
this.pageForm.pageNumber = 1
this.pageData()
},
pageOrder(column) {//按字段排序
this.pageForm.pageOrderName = column.prop;
this.pageForm.pageOrderBy = column.order;
this.pageData();
},
pageNumberChange(val) {//页码更新操作
this.pageForm.pageNumber = val;
this.pageData();
},
pageSizeChange(val) {//分页大小更新操作
this.pageForm.pageSize = val;
this.pageData();
},
pageData() {//加载分页数据
sublime.showLoadingbar();//显示loading
this.tabloading = true
this.pageForm.type = 1
$.post(base + "/platform/sys/club/sh/pageData", this.pageForm, (data) => {
sublime.closeLoadingbar();//关闭loading
this.tabloading = false
if (data.code === 0) {
this.tableData = data.data.list;
this.pageForm.totalCount = data.data.totalCount;
} else {
this.$message({
message: data.msg,
type: 'error'
});
}
}, "json");
},
async getMyMangeClub() {
const {data} = await $.get("/platform/sys/club/users/getMyMangeClub")
return data
},
},
async created() {
this.clubOptions = await this.getMyMangeClub()
this.pageData();
this.units = await getUnits()
}
})
</script>
<!--#
}
#-->
@@ -0,0 +1,802 @@
<!--#
layout("/layouts/platform.html"){
#-->
<style>
.w-e-text-container {
height: 200px !important;
}
input[type="file"] {
display: none
}
.el-descriptions :not(.is-bordered) .el-descriptions-item__cell {
width: 10%;
}
.el_tab {
margin-top: 6px;
}
.el-table-container {
padding-left: 0;
}
.el-table-container {
padding-top: 6px;
padding-right: 0;
}
.el-tabs__header {
margin: 0 0 6px;
background-color: white;
}
.el-tabs--card > .el-tabs__header .el-tabs__item {
border-bottom: none;
font-weight: bold;
font-size: 15px;
}
.el-descriptions-item__cell {
text-align: center !important;
}
.el-form--label-top .el-form-item__label {
padding: 0;
}
.el-form-item__label {
line-height: 22px;
}
.el-form-item {
margin-bottom: 16px;
}
#join_tab .el-tabs__header {
margin: 0 0 18px;
}
</style>
<div id="app" v-cloak>
<guava ref="guava">
<template>
<el-card shadow="never">
<div class="btn-group tool-button mt5">
<el-input placeholder="请输入内容" clearable v-model="pageForm.searchKeyword"
@keyup.enter.native="doSearch">
<el-select v-model="pageForm.searchName" slot="prepend" placeholder="查询类型"
style="width: 120px;">
<el-option label="协会名称" value="club.name"></el-option>
</el-select>
</el-input>
</div>
<div class="btn-group tool-button mt5">
<el-button type="primary" icon="el-icon-search" @click="doSearch"></el-button>
</div>
</el-card>
<el-tabs class="el-table-container el_tab" v-model="activeName" stretch @tab-click="handleClick"
type="card">
<el-tab-pane :label="'可加入(申请)协会' + noJoinCount" name="false">
</el-tab-pane>
<el-tab-pane :label="'已加入(申请)协会' + hasJoinCount" name="true">
</el-tab-pane>
</el-tabs>
<el-card shadow="never">
<el-table :data="tableData" style="width: 100%" row-key="id" @sort-change="pageOrder">
<el-table-column align="center" header-align="center" label="序号" type="index">
<template scope="scope">
<span>{{scope.$index+(pageForm.pageNumber - 1) * pageForm.pageSize + 1}} </span>
</template>
</el-table-column>
<el-table-column align="center" header-align="center" label="协会编码" sortable
prop="code"></el-table-column>
<el-table-column align="center" header-align="center" label="协会名称" prop="name"
show-overflow-tooltip width="200px"></el-table-column>
<!-- <el-table-column align="center" header-align="center" label="成立时间" prop="name">-->
<!-- <template scope="scope">-->
<!-- <span>{{moment(scope.row.create_time).format('YYYY-MM-DD')}}</span>-->
<!-- </template>-->
<!-- </el-table-column>-->
<!-- <el-table-column align="center" header-align="center" label="会长" prop="hz"-->
<!-- show-overflow-tooltip></el-table-column>-->
<el-table-column align="center" sortable header-align="center" label="联系人" show-overflow-tooltip
prop="fzrname"></el-table-column>
<!-- <el-table-column align="center" header-align="center" label="联系人电话" show-overflow-tooltip-->
<!-- prop="concatpersonmobile"></el-table-column>-->
<!--<el-table-column align="center" sortable header-align="center" label="联系人单位"
show-overflow-tooltip
prop="fzr_unit_name"></el-table-column>-->
<el-table-column align="center" sortable header-align="center" label="当前人数"
show-overflow-tooltip
prop="cynum"></el-table-column>
<el-table-column align="center" header-align="center" label="在职人数" show-overflow-tooltip
prop="worknum"></el-table-column>
<el-table-column align="center" header-align="center" label="退休人数" show-overflow-tooltip
prop="outnum"></el-table-column>
<el-table-column align="center" v-if="activeName=='true'" header-align="center" label="申请状态"
sortable>
<template slot-scope="scope">
<el-tag v-if="scope.row.status==1" type="primary">待协会审核</el-tag>
<el-tag v-if="scope.row.status==2" type="danger">协会拒绝</el-tag>
<el-tag v-if="scope.row.status==3" type="primary">待校工会审核</el-tag>
<el-tag v-if="scope.row.status==4" type="danger">校工会拒绝</el-tag>
<el-tag v-if="scope.row.status==5" type="success">审核通过</el-tag>
</template>
</el-table-column>
<el-table-column align="center" header-align="center" label="操作" width="350px">
<template slot-scope="scope">
<el-button size="mini" type="primary" @click="openDetail(scope.row, 'view')">查看
</el-button>
<!-- <el-button type="primary" size="mini" v-if="activeName=='true'" @click="doExportApply(scope.row)">导出申请表</el-button>-->
<!-- <el-button size="mini" v-if="activeName=='false'" type="primary"-->
<!-- @click="openDetail(scope.row, 'join')">-->
<!-- 申请加入-->
<!-- </el-button>-->
<el-button size="mini" type="primary" @click="openApply(scope.row)" v-if="activeName=='false'">申请</el-button>
<el-button size="mini" v-if="activeName=='true'&&scope.row.status==1" type="danger"
@click="doRevocation(scope.row.id)">
撤销申请
</el-button>
</template>
</el-table-column>
</el-table>
<el-row class="el-pagination-container">
<el-pagination
@size-change="pageSizeChange"
@current-change="pageNumberChange"
:current-page="pageForm.pageNumber"
:page-sizes="[10, 20, 30, 50]"
:page-size="pageForm.pageSize"
layout="total, sizes, prev, pager, next"
:total="pageForm.totalCount">
</el-pagination>
</el-row>
</el-card>
</template>
<template #view>
<el-tabs v-model="infoActive" id="join_tab">
<el-tab-pane name="first" label="协会信息">
<el-descriptions class="margin-top" title="" :column="3" border>
<el-descriptions-item :span="3">
<template slot="label">协会名称</template>
<div v-html="detailData.name"></div>
</el-descriptions-item>
<el-descriptions-item label="成立时间">
{{detailData.foundtime}}
</el-descriptions-item>
<el-descriptions-item label="协会编码">
{{detailData.code}}
</el-descriptions-item>
<el-descriptions-item label="协会类型">
{{detailData.typename}}
</el-descriptions-item>
<el-descriptions-item label="发起人">
{{detailData.sponsorname}}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">报名联系人</template>
{{detailData.fzrname}}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">所属单位</template>
{{detailData.fzr_unit_name}}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">联系人电话</template>
{{detailData.concatpersonmobile}}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">联系人邮箱</template>
{{detailData.concatpersonemail}}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">会费标准</template>
{{detailData.dues_standard}}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">当前人数</template>
{{detailData.cynum}}
</el-descriptions-item>
<el-descriptions-item :span="2"></el-descriptions-item>
<el-descriptions-item :span="3">
<template slot="label">协会介绍</template>
<div class="text-left" v-html="detailData.stjs"></div>
</el-descriptions-item>
<el-descriptions-item :span="3">
<template slot="label">协会宗旨</template>
<div class="text-left" v-html="detailData.stzz"></div>
</el-descriptions-item>
<!-- <el-descriptions-item span="1.5">-->
<!-- <template slot="label">QQ群二维码</template>-->
<!-- <file-upload v-if="detailData.qqgroupcode && detailData.qqgroupcode.length > 0"-->
<!-- :files="JSON.parse(detailData.qqgroupcode)"-->
<!-- :view="true"></file-upload>-->
<!-- </el-descriptions-item>-->
<!-- <el-descriptions-item span="2">-->
<!-- <template slot="label">微信群二维码</template>-->
<!-- <file-upload v-if="detailData.wechatgroupcode && detailData.wechatgroupcode.length > 0"-->
<!-- :files="JSON.parse(detailData.wechatgroupcode)"-->
<!-- :view="true"></file-upload>-->
<!-- </el-descriptions-item>-->
<el-descriptions-item span="1.5">
<template slot="label">协会章程</template>
<file-upload v-if="detailData.rulesfile && detailData.rulesfile.length > 0"
:files="JSON.parse(detailData.rulesfile)"
:view="true"></file-upload>
</el-descriptions-item>
<el-descriptions-item span="2">
<template slot="label">年度活动计划</template>
<file-upload v-if="detailData.yearplanfile && detailData.yearplanfile.length > 0"
:files="JSON.parse(detailData.yearplanfile)"
:view="true"></file-upload>
</el-descriptions-item>
</el-descriptions>
</el-tab-pane>
<el-tab-pane v-if="viewType === 'join'" name="second" label="个人信息">
<el-form :model="formData" ref="form" :rules="formRules" label-position="top"
label-width="120px">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item prop="username" label="姓名">
<el-input v-model="formData.username" disabled></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="sex" label="性别">
<el-input v-model="formData.sex" disabled></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item prop="birthday" label="出生年月">
<el-date-picker
v-model="formData.birthday"
type="date"
value-format="yyyy-MM-dd"
style="width: 100%"
placeholder="请选择出生年月">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="birthPlace" label="出生地">
<el-input v-model="formData.birthPlace"
placeholder="请填写出生地"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item prop="education" label="文化程度">
<el-input v-model="formData.education" placeholder="请填写文化程度"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="hobby" label="爱好">
<el-input v-model="formData.hobby" placeholder="请填写爱好"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item prop="unitName" label="工作部门">
<el-input v-model="formData.unitName" disabled></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="position" label="职务">
<el-input v-model="formData.position" placeholder="请填写职务"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item prop="mobile" label="电话">
<el-input v-model="formData.mobile" placeholder="请填写电话"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="email" label="电子邮箱">
<el-input v-model="formData.email" placeholder="请填写电子邮箱"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item prop="homeAddress" label="家庭住址">
<el-input v-model="formData.homeAddress" placeholder="请填写家庭住址"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="QQNumber" label="QQ">
<el-input v-model="formData.QQNumber" placeholder="请填写QQ"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item prop="bodyHeight" label="身高">
<el-input v-model="formData.bodyHeight" placeholder="请填写身高"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="bodyWeight" label="体重">
<el-input v-model="formData.bodyWeight" placeholder="请填写体重"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item prop="health" label="身体状况">
<el-input v-model="formData.health" placeholder="请填写身体状况"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="sport" label="经常从事的运动">
<el-input v-model="formData.sport" placeholder="请填写经常从事的运动"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item prop="medicalHistory" label="是否有过特殊病史">
<el-radio-group v-model="formData.medicalHistory">
<el-radio :label="true" border></el-radio>
<el-radio :label="false" border></el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="joinActivity" label="是否愿意参加本协会的活动">
<el-radio-group v-model="formData.joinActivity">
<el-radio :label="true" border></el-radio>
<el-radio :label="false" border></el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="24">
<el-form-item prop="otherThing" label="是否有特别需要说明的问题(身体或心理)">
<el-input maxlength="500" v-model="formData.otherThing"
placeholder="如有,请填写特别需要说明的问题"
type="textarea" :autosize="{ minRows: 4, maxRows: 8}"></el-input>
</el-form-item>
</el-col>
</el-row>
<!-- <el-row :gutter="20">-->
<!-- <el-col :span="24">-->
<!-- <el-form-item prop="remark" label="备注">-->
<!-- <el-input maxlength="100" v-model="formData.remark" placeholder="请填写备注"-->
<!-- type="textarea" :autosize="{ minRows: 4, maxRows: 8}"></el-input>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- </el-row>-->
<el-row :gutter="20">
<el-col :span="24">
<el-form-item prop="photo" label="两寸登记照">
<image-Upload :height="50" :limit="1" :file-type="['png', 'jpg']" :file-size="1"
v-model="formData.photo"></image-Upload>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div style="float: right;margin: 20px 0">
<el-button @click="doSubmit()" type="primary">申请加入</el-button>
</div>
</el-tab-pane>
</el-tabs>
</template>
<template #edit>
<div style="width: 900px;margin:0 auto">
<h3 style="text-align: center">{{clickRow.name}}入会申请</h3>
<div style="display: flex;justify-content: space-between;padding: 20px 0;font-size: 16px;font-weight: bold;}">
<div>填表时间:{{moment().format('YYYY年MM月DD日')}}</div>
<div>编号:NO._____(自动生成)</div>
</div>
<el-form :model="formData"
ref="form"
:rules="formRules"
label-position="top"
class="applyForm"
label-width="0">
<div style="border: 1px solid #EBEEF5; border-radius: 4px; padding: 20px; background: #fff;">
<el-row :gutter="20" style="margin-bottom: 20px;">
<el-col :span="18">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item prop="username" label="姓名">
<el-input v-model="formData.username" disabled></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="sex" label="性别">
<el-input v-model="formData.sex" disabled></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item prop="birthday" label="出生年月">
<el-date-picker v-model="formData.birthday" type="date" value-format="yyyy-MM-dd" style="width: 100%" placeholder="请选择"></el-date-picker>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="birthPlace" label="出生地">
<el-input v-model="formData.birthPlace" maxlength="50" placeholder="请填写"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item prop="education" label="文化程度">
<el-input v-model="formData.education" maxlength="20" placeholder="请填写"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="hobby" label="爱好">
<el-input v-model="formData.hobby" maxlength="50" placeholder="请填写"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item prop="unitName" label="工作部门">
<el-input v-model="formData.unitName" disabled></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="position" label="职务">
<el-input v-model="formData.position" maxlength="50" placeholder="请填写"></el-input>
</el-form-item>
</el-col>
</el-row>
</el-col>
<!-- 照片区域:右侧独立展示 -->
<el-col :span="6" style="text-align: center; border-left: 1px solid #eee; padding-left: 20px;">
<el-form-item prop="photo" label="两寸登记照">
<image-Upload :limit="1"
:file-type="['png', 'jpg','jpeg']"
:file-size="1"
width="100%"
height="200"
v-model="formData.photo"></image-Upload>
<div style="font-size: 12px; color: #999; margin-top: 5px;">请上传免冠证件照</div>
</el-form-item>
</el-col>
</el-row>
<el-divider></el-divider>
<el-row :gutter="20">
<el-col :span="8">
<el-form-item prop="mobile" label="电话">
<el-input v-model="formData.mobile" maxlength="20" placeholder="请填写"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item prop="email" label="电子邮箱">
<el-input v-model="formData.email" maxlength="50" placeholder="请填写"></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item prop="QQNumber" label="QQ号码">
<el-input v-model="formData.QQNumber" maxlength="12" placeholder="请填写"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="24">
<el-form-item prop="homeAddress" label="家庭住址">
<el-input v-model="formData.homeAddress" maxlength="100" placeholder="请填写"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-divider></el-divider>
<el-row :gutter="20">
<el-col :span="6">
<el-form-item prop="bodyHeight" label="身高 (cm)">
<el-input v-model="formData.bodyHeight" maxlength="5" placeholder="如:175"></el-input>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item prop="bodyWeight" label="体重 (kg)">
<el-input v-model="formData.bodyWeight" maxlength="5" placeholder="如:65"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="sport" label="经常从事的运动">
<el-input v-model="formData.sport" maxlength="50" placeholder="请填写"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item prop="medicalHistory" label="是否有过特殊病史">
<el-radio-group v-model="formData.medicalHistory">
<el-radio :label="true" border></el-radio>
<el-radio :label="false" border></el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="joinActivity" label="是否愿意参加活动">
<el-radio-group v-model="formData.joinActivity">
<el-radio :label="true" border></el-radio>
<el-radio :label="false" border></el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
<el-divider></el-divider>
<el-row :gutter="20">
<el-col :span="24">
<el-form-item prop="otherThing" label="特别需要说明的问题(身体或心理)">
<el-input type="textarea" :rows="4" maxlength="500"
placeholder="如有特殊情况请详细说明"
v-model="formData.otherThing"></el-input>
</el-form-item>
</el-col>
</el-row>
</div>
<!-- <el-row :gutter="20">-->
<!-- <el-col :span="24">-->
<!-- <el-form-item prop="remark" label="备注">-->
<!-- <el-input maxlength="100" v-model="formData.remark" placeholder="请填写备注"-->
<!-- type="textarea" :autosize="{ minRows: 4, maxRows: 8}"></el-input>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<!-- </el-row>-->
</el-form>
<div style="text-align: center;margin: 20px 0">
<el-button @click="doSubmit()" type="primary">申请加入</el-button>
</div>
</div>
</template>
</guava>
</div>
<script>
const vue = new Vue({
el: '#app',
data() {
return {
formData: {},
formRules: {
username: [{required: true, message: '必填', trigger: ['blur', 'change']}],
sex: [{required: true, message: '必填', trigger: ['blur', 'change']}],
birthday: [{required: true, message: '必填', trigger: ['blur', 'change']}],
birthPlace: [{required: true, message: '必填', trigger: ['blur', 'change']}],
education: [{required: true, message: '必填', trigger: ['blur', 'change']}],
hobby: [{required: true, message: '必填', trigger: ['blur', 'change']}],
unitName: [{required: true, message: '必填', trigger: ['blur', 'change']}],
position: [{required: true, message: '必填', trigger: ['blur', 'change']}],
mobile: [{required: true, message: '必填', trigger: ['blur', 'change']}],
email: [{required: true, message: '必填', trigger: ['blur', 'change']}],
homeAddress: [{required: true, message: '必填', trigger: ['blur', 'change']}],
QQNumber: [{required: true, message: '必填', trigger: ['blur', 'change']}],
bodyHeight: [{required: true, message: '必填', trigger: ['blur', 'change']}],
bodyWeight: [{required: true, message: '必填', trigger: ['blur', 'change']}],
health: [{required: true, message: '必填', trigger: ['blur', 'change']}],
sport: [{required: true, message: '必填', trigger: ['blur', 'change']}],
medicalHistory: [{required: true, message: '必填', trigger: ['blur', 'change']}],
joinActivity: [{required: true, message: '必填', trigger: ['blur', 'change']}],
// photo: [{required: true, message: '必填', trigger: ['blur', 'change']}],
},
infoActive: 'first',
detailData: {},
activeName: 'false',
tableData: [],
pageForm: {
isjr: false,
searchName: "club.name",
searchKeyword: "",
pageNumber: 1,
pageSize: 10,
totalCount: 0,
pageOrderName: "",
pageOrderBy: ""
},
hasJoinCount: 0,
noJoinCount: 0,
clickRow: {},
viewType: '',
}
},
methods: {
doExportApply(row){
location.href = '/platform/sys/club/clubInfoManage/exportInfo?clubId=' + row.id
},
doRevocation(id) {
this.$confirm('是否撤销申请?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
callback: async (a, b) => {
if ("confirm" === a) {//确认后再执行
const resp = await $.post("/platform/sys/club/sq/revocation", {id},);
if (resp.code === 0) {
this.$message.success('撤销申请成功!')
await this.getCount()
this.pageData()
} else {
this.$message.warning(resp.msg)
}
}
}
});
},
async doSubmit() {
const row = this.clickRow
const valid = await this.$refs.form.validate()
if (!valid) return
const {code, data} = await $.post('/platform/sys/club/sq/getInClubByCurUser')
let str = '您还没有参加协会'
if (data && data.length > 0) {
str = '您已经加入了'
data.forEach((item) => {
str += '【' + item.name + '】'
})
}
str += ',请确认是否申请加入【' + row.name + '】?'
this.$confirm(str, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
callback: async (a, b) => {
if ("confirm" === a) {//确认后再执行
this.formData.clubid = row.id
const resp = await $.post("/platform/sys/club/sq/submit", this.formData);
if (resp.code === 0) {
this.$message.success(resp.msg)
await this.getCount()
this.pageData()
this.$refs.guava.index()
} else {
this.$message.warning(resp.msg)
}
}
}
});
},
openDetail(row, type) {
this.viewType = type
this.infoActive = type === 'view' ? 'first' : 'second'
if (type === 'join') {
this.formData = {
username: "${@shiro.getPrincipalProperty('username')}",
sex: "${@shiro.getPrincipalProperty('sex')}",
birthday: "${@shiro.getPrincipalProperty('birthday')}",
birthPlace: "${@shiro.getPrincipalProperty('birthPlace')}",
education: "${@shiro.getPrincipalProperty('education')}",
hobby: "${@shiro.getPrincipalProperty('hobby')}",
unitName: "${@shiro.getPrincipalProperty('unit').getName()}",
position: "${@shiro.getPrincipalProperty('position')}",
mobile: "${@shiro.getPrincipalProperty('mobile')}",
email: "${@shiro.getPrincipalProperty('email')}",
homeAddress: "${@shiro.getPrincipalProperty('homeAddress')}",
}
this.$nextTick(() => {
this.$refs.form.clearValidate()
})
}
this.clickRow = row
$.get(base + "/platform/sys/club/mange/findOne", {id: row.id}, (data) => {
if (data.code === 0) {
this.detailData = data.data
this.$refs.guava.view()
} else {
this.$message({
message: data.msg,
type: 'error'
});
}
}, "json");
},
openApply(row) {
this.$refs.guava.edit()
this.clickRow = row
this.formData = {
username: "${@shiro.getPrincipalProperty('username')}",
sex: "${@shiro.getPrincipalProperty('sex')}",
birthday: "${@shiro.getPrincipalProperty('birthday')}",
birthPlace: "${@shiro.getPrincipalProperty('birthPlace')}",
education: "${@shiro.getPrincipalProperty('education')}",
hobby: "${@shiro.getPrincipalProperty('hobby')}",
unitName: "${@shiro.getPrincipalProperty('unit').getName()}",
position: "${@shiro.getPrincipalProperty('position')}",
mobile: "${@shiro.getPrincipalProperty('mobile')}",
email: "${@shiro.getPrincipalProperty('email')}",
homeAddress: "${@shiro.getPrincipalProperty('homeAddress')}",
}
this.$nextTick(() => {
this.$refs.form.clearValidate()
})
},
handleClick(tab, event) {
this.pageForm.searchKeyword = ''
this.pageForm.isjr = tab.name
this.tableData = []
this.doSearch()
},
doSearch() {
this.tabKey = new Date().getTime()
this.pageForm.pageNumber = 1
this.pageData()
},
pageOrder(column) {//按字段排序
this.pageForm.pageOrderName = column.prop;
this.pageForm.pageOrderBy = column.order;
this.pageData();
},
pageNumberChange(val) {//页码更新操作
this.pageForm.pageNumber = val;
this.pageData();
},
pageSizeChange(val) {//分页大小更新操作
this.pageForm.pageSize = val;
this.pageData();
},
pageData() {//加载分页数据
sublime.showLoadingbar();//显示loading
$.post(base + "/platform/sys/club/sq/pageData", this.pageForm, (data) => {
sublime.closeLoadingbar();//关闭loading
if (data.code === 0) {
this.tableData = data.data.list;
this.pageForm.totalCount = data.data.totalCount;
} else {
this.$message({
message: data.msg,
type: 'error'
});
}
}, "json");
},
async getCount() {
const resp = await $.post('/platform/sys/club/sq/getCount')
this.hasJoinCount = resp.data.hasJoinCount
this.noJoinCount = resp.data.noJoinCount
}
},
async created() {
await this.getCount()
this.pageData()
}
})
</script>
<!--#
}
#-->