first commit

This commit is contained in:
2026-09-08 19:49:21 +08:00
commit ebffbab428
7320 changed files with 1477614 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>
let 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>
let 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,882 @@
<!--#
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;
}
.required-form-item::before{
content:'*';
color:#f56c6c;
margin-right: 3px;
}
th {
width: 130px;
text-align: center !important;
}
.el-form-item__content {
text-align: center;
}
</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 v-if="activeName=='true'" align="center" header-align="center" label="年审状态" show-overflow-tooltip
prop="yearauditstatus">
<template slot-scope="scope">
<span v-if="scope.row.yearauditstatus==1" type="primary">待协会审核</span>
<span v-else-if="scope.row.yearauditstatus==2" type="danger">协会拒绝</span>
<span v-else-if="scope.row.yearauditstatus==3" type="primary">待校工会审核</span>
<span v-else-if="scope.row.yearauditstatus==4" type="danger">校工会拒绝</span>
<span v-else-if="scope.row.yearauditstatus==5" type="success">审核通过</span>
<span v-else>未年审</span>
</template>
</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 size="mini" type="primary" @click="yearAudit(scope.row)" v-if="activeName=='true' && !scope.row.yearauditstatus && scope.row.status == 5">
年审
</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">
<border-table>
<table>
<tr>
<th>姓名</th>
<td>{{formData.username}}</td>
<th>性别</th>
<th>{{formData.sex}}</th>
<th rowspan="4">
<el-form-item prop="photo">
<image-Upload :limit="1"
:file-type="['png', 'jpg','jpeg']"
:file-size="5"
width="150"
height="200"
:file-size="1"
v-model="formData.photo"></image-Upload>
</el-form-item>
</th>
</tr>
<tr>
<th class="required-form-item">出生年月</th>
<td>
<el-form-item prop="birthday">
<el-date-picker
v-model="formData.birthday"
type="date"
style="width: 100%"
value-format="yyyy-MM-dd"
placeholder="请选择出生年月">
</el-date-picker>
</el-form-item>
</td>
<th class="required-form-item">出生地</th>
<td>
<el-form-item prop="birthPlace">
<el-input v-model="formData.birthPlace"
maxlength="50"
placeholder="请填写出生地"></el-input>
</el-form-item>
</td>
</tr>
<tr>
<th class="required-form-item">文化程度</th>
<td>
<el-form-item prop="education">
<el-input v-model="formData.education" placeholder="请填写文化程度"
maxlength="20"
></el-input>
</el-form-item>
</td>
<th class="required-form-item">爱好</th>
<td>
<el-form-item prop="hobby">
<el-input v-model="formData.hobby" placeholder="请填写爱好" maxlength="100"></el-input>
</el-form-item>
</td>
</tr>
<tr>
<th class="required-form-item">工作部门</th>
<td>
<el-form-item prop="unitName">
<el-input v-model="formData.unitName" disabled maxlength="100"></el-input>
</el-form-item>
</td>
<th class="required-form-item">职务</th>
<td>
<el-form-item prop="position">
<el-input v-model="formData.position" placeholder="请填写职务" maxlength="100"></el-input>
</el-form-item>
</td>
</tr>
<tr>
<th class="required-form-item">电话</th>
<td>
<el-form-item prop="mobile">
<el-input v-model="formData.mobile" placeholder="请填写电话" maxlength="20"></el-input>
</el-form-item>
</td>
<th>电子邮箱</th>
<td colspan="2">
<el-form-item prop="email">
<el-input v-model="formData.email" placeholder="请填写电子邮箱" maxlength="100"></el-input>
</el-form-item>
</td>
</tr>
<tr>
<th class="required-form-item">家庭住址</th>
<td>
<el-form-item prop="homeAddress">
<el-input v-model="formData.homeAddress" placeholder="请填写家庭住址" maxlength="100"></el-input>
</el-form-item>
</td>
<th>QQ</th>
<td colspan="2">
<el-form-item prop="QQNumber">
<el-input v-model="formData.QQNumber" placeholder="请填写QQ" maxlength="12"></el-input>
</el-form-item>
</td>
</tr>
<tr>
<th class="required-form-item">身高</th>
<td>
<el-form-item prop="bodyHeight">
<el-input v-model="formData.bodyHeight" placeholder="请填写身高" maxlength="10"></el-input>
</el-form-item>
</td>
<th class="required-form-item">体重</th>
<td colspan="2">
<el-form-item prop="bodyWeight">
<el-input v-model="formData.bodyWeight" placeholder="请填写体重" maxlength="10"></el-input>
</el-form-item>
</td>
</tr>
<tr>
<th class="required-form-item">身体状况</th>
<td>
<el-form-item prop="health">
<el-input v-model="formData.health" placeholder="请填写身体状况" maxlength="10"></el-input>
</el-form-item>
</td>
<th class="required-form-item">经常从事的运动</th>
<td colspan="2">
<el-form-item prop="sport">
<el-input v-model="formData.sport" placeholder="请填写经常从事的运动" maxlength="100"></el-input>
</el-form-item>
</td>
</tr>
<tr>
<th class="required-form-item">是否有过特殊病史</th>
<td colspan="4">
<el-form-item prop="medicalHistory">
<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>
</td>
</tr>
<tr>
<th class="required-form-item">是否愿意参加本协会的活动</th>
<td colspan="4">
<el-form-item prop="joinActivity">
<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>
</td>
</tr>
<tr>
<th class="required-form-item">是否有特别需要说明的问题(身体或心理)</th>
<td colspan="4">
<el-form-item prop="otherThing">
<el-input maxlength="100" v-model="formData.otherThing"
placeholder="如有,请填写特别需要说明的问题"
type="textarea" :autosize="{ minRows: 4, maxRows: 8}"></el-input>
</el-form-item>
</td>
</tr>
</table>
</border-table>
<!-- <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>
let 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: false, 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: {
async yearAudit(row) {
this.$confirm('您确定要提交今年的年审吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
callback: async (a, b) => {
if ("confirm" === a) {//确认后再执行
const resp = await $.post("/platform/sys/club/sq/yearAudit", {id: row.id});
if (resp.code === 0) {
this.$message.success(resp.msg)
this.pageData()
} else {
this.$message.warning(resp.msg)
}
}
}
});
},
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')
// if(data && data.length >= 0) {
// this.$alert('申请失败,您已参加三个协会', '温馨提示', {
// confirmButtonText: '确定',
// callback: action => {}
// })
// return
// }
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)
}
}
}
});
},
async 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");
},
async openApply(row) {
// const {code, data} = await $.post('/platform/sys/club/sq/getInClubByCurUser')
// if (data && data.length >= 3) {
// this.$alert('申请失败,您已参加三个协会', '温馨提示', {
// confirmButtonText: '确定',
// callback: action => {
// }
// })
// return
// }
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>
<!--#
}
#-->
@@ -0,0 +1,390 @@
<!--#
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-button v-if="pageForm.radioType == 3" @click="openManyAudit()" size="mini" type="primary">一键审核</el-button>
<el-radio-group class="ml10" @change="(val) => doSearch()" v-model="pageForm.radioType" size="small">
<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" @selection-change="handleSelectionChange"
style="width: 100%" v-loading="tabloading" :key="tabKey" ref="multipleTable">
<el-table-column :reserve-selection="true" v-if="pageForm.radioType !== '2'"
:selectable="(row, index) => {return row.yearauditstatus === 1}"
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="协会名称" 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 width="120" align="center" header-align="center" label="电话"
prop="mobile"></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="status">
<template slot-scope="scope">
<el-tag v-if="scope.row.yearauditstatus==1" type="primary">待协会审核</el-tag>
<el-tag v-if="scope.row.yearauditstatus==2" type="danger">协会拒绝</el-tag>
<el-tag v-if="scope.row.yearauditstatus==3" type="primary">待校工会审核</el-tag>
<el-tag v-if="scope.row.yearauditstatus==4" type="danger">校工会拒绝</el-tag>
<el-tag v-if="scope.row.yearauditstatus==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 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>
<el-dialog title="一键审核" :visible.sync="auditDialogVisible" width="50%"
:close-on-click-modal="false">
<el-form :model="formData" ref="form" :rules="formRules" label-position="right"
style="padding: 20px 0" label-width="80px">
<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 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="margin: 20px 0; text-align: right">
<el-button @click="auditDialogVisible = false">取消</el-button>
<el-button @click="doManyReview(false)" type="danger">拒绝</el-button>
<el-button type="primary" @click="doManyReview(true)">通过</el-button>
</div>
</el-dialog>
</div>
<script>
const vue = new Vue({
el: '#app',
mixins: [initTableMixins],
data() {
return {
auditDialogVisible: false,
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: {
auditOpinion: [{required: true, message: '必填', trigger: ['blur', 'change']}],
auditSign:[{required: true, message: '必填', trigger: ['blur', 'change']}]
},
multipleSelection: [],
}
},
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: {
openManyAudit() {
if(this.multipleSelection.length === 0) {
this.$message.warning('请先勾选需要进行审核的人员')
return
}
this.formData = {
username: "${@shiro.getPrincipalProperty('username')}",
auditTime: moment().format('YYYY-MM-DD')
}
if (this.$refs['form']) {
this.$refs['form'].resetFields()
}
this.auditDialogVisible = true
},
async doManyReview(flag) {
const ids = this.multipleSelection.map(v => {
return v.id
})
const valid = await this.$refs.form.validate()
if (!valid) return
this.formData.flag = flag
this.formData.id = JSON.stringify(ids)
const resp = await $.post(base + "/platform/sys/club/yearAudit/check", this.formData)
if (resp.code === 0) {
this.doSearch()
this.multipleSelection = []
this.$refs.multipleTable.clearSelection()
this.$message({message: resp.msg, type: 'success'})
this.auditDialogVisible = false
} else {
this.$message({message: resp.msg, type: 'warning'})
}
},
handleSelectionChange(val) {
this.multipleSelection = val;
},
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/yearAudit/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/yearAudit/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,209 @@
<!--#
layout("/layouts/platform.html"){
#-->
<style>
.w-e-text-container {
height: 500px !important;
}
</style>
<div id="app" v-cloak>
<guava ref="guava">
<el-card shadow="never">
<vi-title title="年度优秀社团申报(温馨提示:申报范围为当年年度考核结果为合格的教职工社团)"></vi-title>
<el-form :model="formData" ref="form" :rules="formRules" label-width="120px" style="padding: 0 30px">
<el-row gutter="30">
<el-col :span="8">
<el-form-item label="开始年份" prop="applyStartYear" :rules="{required: true, message: '请选择开始年份', trigger: 'blur'}">
<el-date-picker
placeholder="请选择开始年份" :clearable="false"
style="width: 100%" :disabled="isCanApply === false"
type="year" v-model="formData.applyStartYear"
value-format="yyyy">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="结束年份" prop="applyEndYear" :rules="{required: true, message: '请选择结束年份', trigger: 'blur'}">
<el-date-picker
placeholder="请选择结束年份" :clearable="false"
style="width: 100%" :disabled="isCanApply === false"
type="year" v-model="formData.applyEndYear"
value-format="yyyy">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="社团名称" prop="clubId" :rules="{required: true, message: '请选择社团', trigger: 'blur'}">
<el-select v-model="formData.clubId" placeholder="请选择社团" filterable clearable
style="width: 100%" :disabled="isCanApply === false">
<el-option
v-for="item in clubList"
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="近两年获得的集体荣誉称号" prop="evaluateName"
:rules="{required: true, message: '请填写近两年获得的集体荣誉称号', trigger: 'blur'}">
<div id="evaluateName"></div>
</el-form-item>
<el-form-item label="近两年组织活动及完成情况" prop="yearActivity"
:rules="{required: true, message: '请填写近两年年度组织活动及完成情况', trigger: 'blur'}">
<div id="yearActivity"></div>
</el-form-item>
<el-form-item required label="附件上传" prop="files">
<file-upload :files.sync="formData.files" card :max="5"
:type="['doc','docx','xls','xlsx','pdf','ppt','mp4', 'jpg', 'png', 'jpeg']">
<template #el-upload__tip>
</template>
</file-upload>
<div class="el-upload__tip">可上传照片、视频、文档等资料</div>
</el-form-item>
</el-form>
<el-row class="mt20" justify="end" type="flex">
<el-button v-if="GetQueryString('id') !== ''" @click="doBack">返回</el-button>
<el-button :disabled="isCanApply === false" type="primary" @click="doHandle(true)">保存</el-button>
<el-button :disabled="isCanApply === false" type="primary" @click="doHandle(false)">提交</el-button>
</el-row>
</el-card>
</guava>
</div>
<script>
const E = window.wangEditor
let evaluateName, yearActivity = null
let vue = new Vue({
el: '#app',
mixins: [initTableMixins],
data() {
let validFiles = (rule, value, callback) => {
if (!this.formData.files || this.formData.files.length === 0) {
callback(new Error('请上传附件'))
} else {
callback()
}
}
return {
formRules: {
files: [{validator: validFiles, trigger: ['blur', 'change']}],
},
clubList: [],
formData: {
applyStartYear: '',
applyEndYear: '',
clubId: '',
evaluateName: '',
yearActivity: '',
},
isCanApply: true,
}
},
components: {
},
methods: {
doBack() {
if (GetQueryString("id") !== '') {
sublime.jumpPagePjax('/platform/sys/club/clubEvaluateMine')
}
},
async doHandle(flag) {
const valid = await this.$refs['form'].validate()
if (valid) {
const url = GetQueryString("id") !== '' ? '/platform/sys/club/clubEvaluateApply/doEdit' : '/platform/sys/club/clubEvaluateApply/doAdd'
const resp = await $.post(url, {
evaluate: JSON.stringify(this.formData),
isSave: flag,
})
if (resp.code === 0) {
this.$notify({
title: '成功',
message: resp.msg,
type: 'success',
duration: 500,
onClose: () => {
sublime.jumpPagePjax('/platform/sys/club/clubEvaluateMine')
}
});
}
}
},
async initData() {
this.$set(this.formData, "applyStartYear", (new Date().getFullYear() - 1) + '')
this.$set(this.formData, "applyEndYear", new Date().getFullYear() + '')
const id = GetQueryString("id")
$("#evaluateName").html("")
$("#yearActivity").html("")
this.$nextTick(() => {
evaluateName = new E("#evaluateName")
evaluateName.config.onchange = (html) => {
this.formData.evaluateName = html
}
yearActivity = new E("#yearActivity")
yearActivity.config.onchange = (html) => {
this.formData.yearActivity = html
}
evaluateName.create()
yearActivity.create()
})
if(id !== '') {
const resp = await $.get('/platform/sys/club/clubEvaluateMine/findOne', {id})
if (resp.code === 0) {
this.formData = resp.data
if(this.formData.files) {
this.formData.files = JSON.parse(this.formData.files)
}
}
evaluateName.txt.html(resp.data.evaluateName ? resp.data.evaluateName : '')
yearActivity.txt.html(resp.data.yearActivity ? resp.data.yearActivity : '')
}
},
//获取当前登录用户管理的社团并且年度审核通过的
async getMyClubAndYearAuditPass() {
const resp = await $.get('/platform/sys/club/clubEvaluateApply/getMyClubAndYearAuditPass', {
year: new Date().getFullYear()
})
this.clubList = resp.data
},
},
async created() {
const year = moment().format('YYYY')
this.isCanApply = year % 2 === 0
if(this.isCanApply === false) {
this.$alert('当前年份(' + year + ')不能进行年度优秀社团申报', '温馨提示', {
confirmButtonText: '确定',
})
}
await this.getMyClubAndYearAuditPass()
setTimeout(() => {
this.initData()
}, 200)
},
})
</script>
<!--#
}
#-->
@@ -0,0 +1,253 @@
<!--#
layout("/layouts/platform.html"){
#-->
<style>
.table_fixed {
table-layout: fixed !important;
}
</style>
<div id="app" v-cloak>
<guava ref="guava">
<el-card shadow="never">
<div class="search">
<div class="search-item">
<div class="search-item-label">&emsp;&emsp;度:</div>
<div class="search-item-option">
<el-date-picker
placeholder="选择年度"
type="year" style="width: 100%"
v-model="pageForm.year"
value-format="yyyy">
</el-date-picker>
</div>
</div>
<div class="search-item">
<div class="search-item-label">社团名称:</div>
<div class="search-item-option">
<el-select v-model="pageForm.clubId" placeholder="请选择社团" filterable clearable
style="width: 100%">
<el-option
v-for="item in clubList"
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</div>
</div>
<div class="search-query">
<el-button @click="doSearch" icon="el-icon-search" type="primary">搜索</el-button>
</div>
</div>
</el-card>
<el-card class="mt10" shadow="never">
<table-tool :app="this" label="申请列表">
<template #func>
<el-radio-group v-model="pageForm.isAudit" @change="doSearch">
<el-radio-button :label="null">全部</el-radio-button>
<el-radio-button :label="true">已审核</el-radio-button>
<el-radio-button :label="false">未审核</el-radio-button>
</el-radio-group>
</template>
</table-tool>
<el-table :data="tableData" :size="tableSize">
<el-table-column :index="indexMethod" align="center" header-align="center" label="序号" type="index"
width="80px"></el-table-column>
<el-table-column label="社团名称" prop="name" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="社团编码" prop="code" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="社团类型" prop="typeName" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="成立时间" prop="create_time" sortable align="center" header-align="center"
show-overflow-tooltip>
<template slot-scope="{row}">
<span>{{ moment(row.foundTime).format('YYYY-MM-DD') }}</span>
</template>
</el-table-column>
<el-table-column label="年度" prop="applyTime" sortable align="center" header-align="center"
show-overflow-tooltip>
<template slot-scope="{row}">
<span>{{ moment(row.applyTime).format('YYYY') }}</span>
</template>
</el-table-column>
<el-table-column label="申请时间" prop="applyTime" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="状态" prop="stateName" sortable align="center" header-align="center"
show-overflow-tooltip>
<template slot-scope="{row}">
<span :style="'color: ' + row.stateColor">{{ row.stateName }}</span>
</template>
</el-table-column>
<el-table-column label="操作" width="300px">
<template scope="{row}">
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
<el-button v-if="[2040].includes(row.state)" @click="openAudit(row)" size="mini" type="primary">审核</el-button>
<el-button v-if="[2050, 2060, 2070].includes(row.state)" @click="rollback(row)" size="mini" type="primary">撤回</el-button>
</template>
</el-table-column>
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
<template #edit>
<club-evaluate-info ref="info2" :handle="true" label="会长审核" :panes="[2, 3]">
<template #handle>
<vi-title title="审核信息"></vi-title>
<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" readonly></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="auditTime" label="审核时间">
<el-input v-model="formData.auditTime" readonly></el-input>
</el-form-item>
</el-col>
</el-row>
<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>
<div style="float: right;margin: 20px 0">
<el-button @click="doReview(1)">拒绝</el-button>
<el-button type="danger" @click="doReview(2)">退回修改</el-button>
<el-button type="primary" @click="doReview(3)">通过</el-button>
</div>
</template>
</club-evaluate-info>
</template>
<template #view>
<club-evaluate-info ref="info"></club-evaluate-info>
</template>
</guava>
</div>
<script>
let vue = new Vue({
el: '#app',
mixins: [initTableMixins],
data() {
return {
pageForm: {
clubId: '',
year: moment().format('YYYY'),
isAudit: false,
},
tableData: [],
viewData: {},
clubList: [],
}
},
components: {
'club-evaluate-info': httpVueLoader('/components/club/clubEvaluateInfo.vue'),
},
methods: {
async rollback(row) {
const confirm = await this.$confirm('您确定要撤回吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
if (confirm === "confirm") {
const resp = await $.post('/platform/sys/club/clubEvaluateHzAudit/rollback', {
id: row.id
})
if(resp.code === 0) {
await this.pageData()
this.notifySuccess(resp.msg)
} else {
this.notifyWarning(resp.msg)
}
}
},
async doReview(flag) {
await this.$refs["form"].validate(async(valid) => {
if (valid) {
this.formData.pass = flag
const resp = await $.post('/platform/sys/club/clubEvaluateHzAudit/doReview', this.formData)
if(resp.code === 0) {
await this.pageData()
this.notifySuccess(resp.msg)
this.$refs['guava'].index()
} else {
this.notifyWarning(resp.msg)
}
}
})
},
doSearch() {
this.pageForm.pageNumber = 1
this.pageData()
},
openView(row) {
const {id} = row
this.$refs.guava.view()
this.$nextTick(() => {
this.$refs.info.getInfo(id)
})
},
async openAudit(row) {
this.formData = {
id: row.id,
userName: "${@shiro.getPrincipalProperty('username')}",
auditTime: moment().format('YYYY-MM-DD HH:mm:ss'),
auditOpinion: '',
}
this.$refs.guava.edit()
this.$nextTick(() => {
this.$refs.info2.getInfo(row.id)
})
},
async pageData() {
let form = clone(this.pageForm)
if(form.isAudit === null) {
delete form.isAudit
}
const resp = await $.post("/platform/sys/club/clubEvaluateHzAudit/pageData", form);
if (resp.code === 0) {
this.tableData = resp.data.list;
this.pageForm.totalCount = resp.data.totalCount;
} else {
this.$message({
message: resp.msg,
type: 'error'
});
}
},
//获取当前登录用户管理的社团并且年度审核通过的
async getMyClubAndYearAuditPass() {
const resp = await $.get('/platform/sys/club/clubEvaluateApply/getMyClubAndYearAuditPass', {
year: this.pageForm.year
})
this.clubList = resp.data
},
},
async created() {
await this.getMyClubAndYearAuditPass()
await this.pageData()
}
})
</script>
<!--#
}
#-->
@@ -0,0 +1,184 @@
<!--#
layout("/layouts/platform.html"){
#-->
<style>
.table_fixed {
table-layout: fixed !important;
}
</style>
<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">&emsp;&emsp;度:</div>
<div class="search-item-option">
<el-date-picker
placeholder="选择年度"
type="year" style="width: 100%"
v-model="pageForm.applyYear"
value-format="yyyy">
</el-date-picker>
</div>
</div>
<div class="search-item">
<div class="search-item-label">社团名称:</div>
<div class="search-item-option">
<el-select v-model="pageForm.clubId" placeholder="请选择社团" filterable clearable
style="width: 100%">
<el-option
v-for="item in clubList"
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</div>
</div>
<div class="search-query">
<el-button @click="doSearch" icon="el-icon-search" type="primary">搜索</el-button>
</div>
</div>
</el-card>
<el-card class="mt10" shadow="never">
<table-tool :app="this" label="申请列表">
<template #func>
<el-button @click="openAdd" size="medium" type="primary">评优申请</el-button>
</template>
</table-tool>
<el-table :data="tableData" :size="tableSize">
<el-table-column :index="indexMethod" align="center" header-align="center" label="序号" type="index"
width="80px"></el-table-column>
<el-table-column label="社团名称" prop="name" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="社团编码" prop="code" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="社团类型" prop="typeName" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="成立时间" prop="create_time" sortable align="center" header-align="center"
show-overflow-tooltip>
<template slot-scope="{row}">
<span>{{ moment(row.foundTime).format('YYYY-MM-DD') }}</span>
</template>
</el-table-column>
<el-table-column label="年度" prop="applyTime" sortable align="center" header-align="center"
show-overflow-tooltip>
<template slot-scope="{row}">
<span>{{ moment(row.applyTime).format('YYYY') }}</span>
</template>
</el-table-column>
<el-table-column label="申请时间" prop="applyTime" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="状态" prop="stateName" sortable align="center" header-align="center"
show-overflow-tooltip>
<template slot-scope="{row}">
<span :style="'color: ' + row.stateColor">{{ row.stateName }}</span>
</template>
</el-table-column>
<el-table-column label="操作" width="300px">
<template scope="{row}">
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
<el-button :disabled="![2000,2020,2050,2080].includes(row.state)" @click="openEdit(row)" size="mini" type="primary">编辑</el-button>
<el-button v-if="${@shiro.hasRole('sysadmin')} || ${@shiro.hasRole('A06')} || ${@shiro.hasRole('xxhgly')}"
@click="deleteDo(row)" size="mini" type="danger">删除</el-button>
<el-button v-else :disabled="![2000,2020,2050,2080].includes(row.state)" @click="deleteDo(row)" size="mini" type="danger">删除</el-button>
</template>
</el-table-column>
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
</template>
<template #view>
<club-evaluate-info ref="info"></club-evaluate-info>
</template>
</guava>
</div>
<script>
let vue = new Vue({
el: '#app',
mixins: [initTableMixins],
components: {
'club-evaluate-info': httpVueLoader('/components/club/clubEvaluateInfo.vue'),
},
data() {
return {
pageForm: {
clubId: '',
applyYear: moment().format('YYYY'),
},
tableData: [],
clubList: [],
}
},
methods: {
doSearch() {
this.pageForm.pageNumber = 1
this.pageData()
},
openAdd() {
sublime.jumpPagePjax('/platform/sys/club/clubEvaluateApply')
},
openView(row) {
const {id} = row
this.$refs.guava.view()
this.$nextTick(() => {
this.$refs.info.getInfo(id)
})
},
openEdit(row) {
sublime.jumpPagePjax('/platform/sys/club/clubEvaluateApply?id=' + row.id)
},
async deleteDo(row) {
const confirm = await this.$confirm('此操作将永久删除, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
if (confirm === "confirm") {
const resp = await $.post('/platform/sys/club/clubEvaluateMine/doDelete', {id: row.id})
this.notifySuccess("删除成功")
this.doSearch()
}
},
async pageData() {
const resp = await $.post("/platform/sys/club/clubEvaluateMine/pageData", this.pageForm);
if (resp.code === 0) {
this.tableData = resp.data.list;
this.pageForm.totalCount = resp.data.totalCount;
} else {
this.$message({
message: data.msg,
type: 'error'
});
}
},
//获取当前登录用户管理的社团并且年度审核通过的
async getMyClubAndYearAuditPass() {
const resp = await $.get('/platform/sys/club/clubEvaluateApply/getMyClubAndYearAuditPass', {
applyYear: this.pageForm.applyYear
})
this.clubList = resp.data
},
},
async created() {
await this.getMyClubAndYearAuditPass()
await this.pageData()
}
})
</script>
<!--#
}
#-->
@@ -0,0 +1,249 @@
<!--#
layout("/layouts/platform.html"){
#-->
<style>
.table_fixed {
table-layout: fixed !important;
}
</style>
<div id="app" v-cloak>
<guava ref="guava">
<el-card shadow="never">
<div class="search">
<div class="search-item">
<div class="search-item-label">&emsp;&emsp;度:</div>
<div class="search-item-option">
<el-date-picker
placeholder="选择年度"
type="year" style="width: 100%"
v-model="pageForm.year"
value-format="yyyy">
</el-date-picker>
</div>
</div>
<div class="search-item">
<div class="search-item-label">社团名称:</div>
<div class="search-item-option">
<el-select v-model="pageForm.clubId" placeholder="请选择社团" filterable clearable
style="width: 100%">
<el-option
v-for="item in clubList"
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</div>
</div>
<div class="search-query">
<el-button @click="doSearch" icon="el-icon-search" type="primary">搜索</el-button>
</div>
</div>
</el-card>
<el-card class="mt10" shadow="never">
<table-tool :app="this" label="申请列表">
<template #func>
<el-radio-group v-model="pageForm.isAudit" @change="doSearch">
<el-radio-button :label="null">全部</el-radio-button>
<el-radio-button :label="true">已审核</el-radio-button>
<el-radio-button :label="false">未审核</el-radio-button>
</el-radio-group>
</template>
</table-tool>
<el-table :data="tableData" :size="tableSize">
<el-table-column :index="indexMethod" align="center" header-align="center" label="序号" type="index"
width="80px"></el-table-column>
<el-table-column label="社团名称" prop="name" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="社团编码" prop="code" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="社团类型" prop="typeName" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="成立时间" prop="create_time" sortable align="center" header-align="center"
show-overflow-tooltip>
<template slot-scope="{row}">
<span>{{ moment(row.create_time).format('YYYY-MM-DD') }}</span>
</template>
</el-table-column>
<el-table-column label="年度" prop="applyYear" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="申请时间" prop="applyTime" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="状态" prop="stateName" sortable align="center" header-align="center"
show-overflow-tooltip>
<template slot-scope="{row}">
<span :style="'color: ' + row.stateColor">{{ row.stateName }}</span>
</template>
</el-table-column>
<el-table-column label="操作" width="300px">
<template scope="{row}">
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
<el-button v-if="[2010].includes(row.state)" @click="openAudit(row)" size="mini" type="primary">审核</el-button>
<el-button v-if="[2020, 2030, 2040].includes(row.state)" @click="rollback(row)" size="mini" type="primary">撤回</el-button>
</template>
</el-table-column>
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
<template #edit>
<club-evaluate-info ref="info2" :handle="true" label="秘书长审核" :panes="[2]">
<template #handle>
<vi-title title="审核信息"></vi-title>
<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" readonly></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="auditTime" label="审核时间">
<el-input v-model="formData.auditTime" readonly></el-input>
</el-form-item>
</el-col>
</el-row>
<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>
<div style="float: right;margin: 20px 0">
<el-button @click="doReview(1)">拒绝</el-button>
<el-button type="danger" @click="doReview(2)">退回修改</el-button>
<el-button type="primary" @click="doReview(3)">通过</el-button>
</div>
</template>
</club-evaluate-info>
</template>
<template #view>
<club-evaluate-info ref="info"></club-evaluate-info>
</template>
</guava>
</div>
<script>
let vue = new Vue({
el: '#app',
mixins: [initTableMixins],
data() {
return {
pageForm: {
clubId: '',
year: moment().format('YYYY'),
isAudit: false,
},
tableData: [],
viewData: {},
clubList: [],
}
},
components: {
'club-evaluate-info': httpVueLoader('/components/club/clubEvaluateInfo.vue'),
},
methods: {
async rollback(row) {
const confirm = await this.$confirm('您确定要撤回吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
if (confirm === "confirm") {
const resp = await $.post('/platform/sys/club/clubEvaluateMszAudit/rollback', {
id: row.id
})
if(resp.code === 0) {
await this.pageData()
this.notifySuccess(resp.msg)
} else {
this.notifyWarning(resp.msg)
}
}
},
async doReview(flag) {
await this.$refs["form"].validate(async(valid) => {
if (valid) {
this.formData.pass = flag
const resp = await $.post('/platform/sys/club/clubEvaluateMszAudit/doReview', this.formData)
if(resp.code === 0) {
await this.pageData()
this.notifySuccess(resp.msg)
this.$refs['guava'].index()
} else {
this.notifyWarning(resp.msg)
}
}
})
},
doSearch() {
this.pageForm.pageNumber = 1
this.pageData()
},
openView(row) {
const {id} = row
this.$refs.guava.view()
this.$nextTick(() => {
this.$refs.info.getInfo(id)
})
},
async openAudit(row) {
this.formData = {
id: row.id,
userName: "${@shiro.getPrincipalProperty('username')}",
auditTime: moment().format('YYYY-MM-DD HH:mm:ss'),
auditOpinion: '',
}
this.$refs.guava.edit()
this.$nextTick(() => {
this.$refs.info2.getInfo(row.id)
})
},
async pageData() {
let form = clone(this.pageForm)
if(form.isAudit === null) {
delete form.isAudit
}
const resp = await $.post("/platform/sys/club/clubEvaluateMszAudit/pageData", form);
if (resp.code === 0) {
this.tableData = resp.data.list;
this.pageForm.totalCount = resp.data.totalCount;
} else {
this.$message({
message: resp.msg,
type: 'error'
});
}
},
//获取当前登录用户管理的社团并且年度审核通过的
async getMyClubAndYearAuditPass() {
const resp = await $.get('/platform/sys/club/clubEvaluateApply/getMyClubAndYearAuditPass', {
year: this.pageForm.year
})
this.clubList = resp.data
},
},
async created() {
await this.getMyClubAndYearAuditPass()
await this.pageData()
}
})
</script>
<!--#
}
#-->
@@ -0,0 +1,256 @@
<!--#
layout("/layouts/platform.html"){
#-->
<style>
.table_fixed {
table-layout: fixed !important;
}
</style>
<div id="app" v-cloak>
<guava ref="guava">
<el-card shadow="never">
<div class="search">
<div class="search-item">
<div class="search-item-label">&emsp;&emsp;度:</div>
<div class="search-item-option">
<el-date-picker
placeholder="选择年度"
type="year" style="width: 100%"
v-model="pageForm.year"
value-format="yyyy">
</el-date-picker>
</div>
</div>
<div class="search-item">
<div class="search-item-label">社团名称:</div>
<div class="search-item-option">
<el-select v-model="pageForm.clubId" placeholder="请选择社团" filterable clearable
style="width: 100%">
<el-option
v-for="item in clubList"
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</div>
</div>
<div class="search-query">
<el-button @click="doSearch" icon="el-icon-search" type="primary">搜索</el-button>
</div>
</div>
</el-card>
<el-card class="mt10" shadow="never">
<table-tool :app="this" label="申请列表">
<template #func>
<el-radio-group v-model="pageForm.isAudit" @change="doSearch">
<el-radio-button :label="null">全部</el-radio-button>
<el-radio-button :label="true">已审核</el-radio-button>
<el-radio-button :label="false">未审核</el-radio-button>
</el-radio-group>
</template>
</table-tool>
<el-table :data="tableData" :size="tableSize">
<el-table-column :index="indexMethod" align="center" header-align="center" label="序号" type="index"
width="80px"></el-table-column>
<el-table-column label="社团名称" prop="name" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="社团编码" prop="code" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="社团类型" prop="typeName" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="成立时间" prop="create_time" sortable align="center" header-align="center"
show-overflow-tooltip>
<template slot-scope="{row}">
<span>{{ moment(row.foundTime).format('YYYY-MM-DD') }}</span>
</template>
</el-table-column>
<el-table-column label="年度" prop="applyYear" sortable align="center" header-align="center"
show-overflow-tooltip>
<template slot-scope="{row}">
<span>{{ moment(row.applyTime).format('YYYY') }}</span>
</template>
</el-table-column>
<el-table-column label="申请时间" prop="applyTime" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="状态" prop="stateName" sortable align="center" header-align="center"
show-overflow-tooltip>
<template slot-scope="{row}">
<span :style="'color: ' + row.stateColor">{{ row.stateName }}</span>
</template>
</el-table-column>
<el-table-column label="操作" width="300px">
<template scope="{row}">
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
<el-button v-if="[2070].includes(row.state)" @click="openAudit(row)" size="mini" type="primary">审核</el-button>
<el-button v-if="[2080, 2090, 2100].includes(row.state)" @click="rollback(row)" size="mini" type="primary">撤回</el-button>
</template>
</el-table-column>
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
<template #edit>
<club-evaluate-info ref="info2" :handle="true" label="校工会审核" :panes="[2, 3, 4]">
<template #handle>
<vi-title title="审核信息"></vi-title>
<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" readonly></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="auditTime" label="审核时间">
<el-input v-model="formData.auditTime" readonly></el-input>
</el-form-item>
</el-col>
</el-row>
<el-form-item prop="auditOpinion" label="审核结果">
<el-radio-group v-model="formData.auditOpinion">
<el-radio label="优秀" border>优秀</el-radio>
<el-radio label="合格" border>合格</el-radio>
<el-radio label="不合格" border>不合格</el-radio>
</el-radio-group>
</el-form-item>
</el-form>
<div style="float: right;margin: 20px 0">
<el-button @click="doReview(1)">拒绝</el-button>
<el-button type="danger" @click="doReview(2)">退回修改</el-button>
<el-button type="primary" @click="doReview(3)">通过</el-button>
</div>
</template>
</club-evaluate-info>
</template>
<template #view>
<club-evaluate-info ref="info"></club-evaluate-info>
</template>
</guava>
</div>
<script>
let vue = new Vue({
el: '#app',
mixins: [initTableMixins],
data() {
return {
pageForm: {
clubId: '',
year: moment().format('YYYY'),
isAudit: false,
},
tableData: [],
viewData: {},
clubList: [],
}
},
components: {
'club-evaluate-info': httpVueLoader('/components/club/clubEvaluateInfo.vue'),
},
methods: {
async rollback(row) {
const confirm = await this.$confirm('您确定要撤回吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
if (confirm === "confirm") {
const resp = await $.post('/platform/sys/club/clubEvaluateSchoolAudit/rollback', {
id: row.id
})
if(resp.code === 0) {
await this.pageData()
this.notifySuccess(resp.msg)
} else {
this.notifyWarning(resp.msg)
}
}
},
async doReview(flag) {
await this.$refs["form"].validate(async(valid) => {
if (valid) {
this.formData.pass = flag
const resp = await $.post('/platform/sys/club/clubEvaluateSchoolAudit/doReview', this.formData)
if(resp.code === 0) {
await this.pageData()
this.notifySuccess(resp.msg)
this.$refs['guava'].index()
} else {
this.notifyWarning(resp.msg)
}
}
})
},
doSearch() {
this.pageForm.pageNumber = 1
this.pageData()
},
openView(row) {
const {id} = row
this.$refs.guava.view()
this.$nextTick(() => {
this.$refs.info.getInfo(id)
})
},
async openAudit(row) {
this.formData = {
id: row.id,
userName: "${@shiro.getPrincipalProperty('username')}",
auditTime: moment().format('YYYY-MM-DD HH:mm:ss'),
auditOpinion: '优秀',
}
this.$refs.guava.edit()
this.$nextTick(() => {
this.$refs.info2.getInfo(row.id)
})
},
async pageData() {
let form = clone(this.pageForm)
if(form.isAudit === null) {
delete form.isAudit
}
const resp = await $.post("/platform/sys/club/clubEvaluateSchoolAudit/pageData", form);
if (resp.code === 0) {
this.tableData = resp.data.list;
this.pageForm.totalCount = resp.data.totalCount;
} else {
this.$message({
message: resp.msg,
type: 'error'
});
}
},
//获取当前登录用户管理的社团并且年度审核通过的
async getMyClubAndYearAuditPass() {
const resp = await $.get('/platform/sys/club/clubEvaluateApply/getMyClubAndYearAuditPass', {
year: this.pageForm.year
})
this.clubList = resp.data
},
},
async created() {
await this.getMyClubAndYearAuditPass()
await this.pageData()
}
})
</script>
<!--#
}
#-->
@@ -0,0 +1,336 @@
<!--#
layout("/layouts/platform.html"){
#-->
<style>
.el-table-container {
padding-left: 0px;
margin-top: 5px;
padding-right: 0px;
}
</style>
<div id="app" v-cloak>
<guava ref="guava">
<div style="padding-right: 10px">
<el-card shadow="never">
<div class="btn-group tool-button mt5">
<el-select @change="getClub" v-model="pageForm.auditState" placeholder="请选择年审状态">
<el-option label="全部" :value="null"></el-option>
<el-option label="年审通过" :value="true"></el-option>
<el-option label="年审未通过" :value="false"></el-option>
</el-select>
</div>
<div class="btn-group tool-button mt5">
<el-select v-model="pageForm.clubId" placeholder="请选择社团">
<el-option v-for="item in clubList"
:label="item.name" :value="item.id" :key="item.id">
</el-option>
</el-select>
</div>
<div class="btn-group tool-button mt5">
<dict-select clearable code="userState" placeholder="请选择在职状态"
v-model="pageForm.userState"></dict-select>
</div>
<div class="btn-group tool-button mt5">
<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="btn-group tool-button mt5">
<el-button type="primary" icon="el-icon-search" @click="doSearch"></el-button>
</div>
<div class="pull-right offscreen-right mt5">
<el-radio-group @change="(val) => doSearch()"
v-model="pageForm.giveMoney">
<el-radio-button :label="null">全部</el-radio-button>
<el-radio-button :label="true">可拨付</el-radio-button>
<el-radio-button :label="false">不可拨付</el-radio-button>
</el-radio-group>
</div>
</el-card>
<el-card shadow="never" class="mt10">
<table-tool :app="this" label="社团统计">
<template #func>
<el-button @click="exportData" type="primary" size="medium">导出全部统计数据</el-button>
<el-button @click="exportUserData(null)" v-if="${@shiro.hasAnyRoles('sysadmin', 'A06', 'xxhgly')}"
type="primary" size="medium">导出全部人员明细</el-button>
<el-button @click="exportFiles(null)" v-if="${@shiro.hasAnyRoles('sysadmin', 'A06', 'xxhgly')}"
type="primary" size="medium">导出全部上传资料</el-button>
</template>
</table-tool>
<el-table :data="tableData" style="width: 100%" row-key="id" 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="name" show-overflow-tooltip></el-table-column>
<el-table-column align="center" header-align="center" label="社团编码"
prop="code"></el-table-column>
<el-table-column align="center" sortable header-align="center" label="社团总人数"
prop="total"></el-table-column>
<el-table-column align="center" sortable header-align="center" label="在职人数"
prop="work"></el-table-column>
<el-table-column align="center" header-align="center" label="退休人数"
prop="retire"></el-table-column>
<el-table-column align="center" sortable header-align="center" label="男"
prop="man"></el-table-column>
<el-table-column align="center" sortable header-align="center" label="女"
prop="woman"></el-table-column>
<el-table-column align="center" sortable header-align="center" label="理事机构人数"
prop="governing_body"></el-table-column>
<!--<el-table-column align="center" header-align="center" label="社团确认" sortable
prop="club_has_confirm"></el-table-column>
<el-table-column align="center" header-align="center" label="社团待确认" sortable
prop="club_no_confirm"></el-table-column>
<el-table-column align="center" header-align="center" label="校工会确认" sortable
prop="school_has_confirm"></el-table-column>
<el-table-column align="center" header-align="center" label="校工会待确认" sortable width="160"
prop="school_no_confirm"></el-table-column>-->
<el-table-column align="center" fixed="right" header-align="center" label="操作">
<template scope="{row}">
<el-dropdown @command="dropdownCommand">
<el-button plain size="mini">
<i class="ti-settings"></i>
<span class="ti-angle-down"></span>
</el-button>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item :command="{action:openView,value:row}">
查看人员明细
</el-dropdown-item>
<!--<el-dropdown-item :command="{action:exportData,value:row}">
导出统计数据
</el-dropdown-item>-->
<el-dropdown-item :command="{action:exportUserData,value:row}">
导出人员明细
</el-dropdown-item>
<el-dropdown-item :command="{action:exportFiles,value:row}">
导出上传资料
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</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>
</div>
<template #view>
<vi-title :title="userTitle"></vi-title>
<el-table :data="userTableData" v-loading="userTableLoading">
<el-table-column label="姓名" prop="username" show-overflow-tooltip></el-table-column>
<el-table-column label="工号" prop="loginname" show-overflow-tooltip></el-table-column>
<el-table-column label="性别" prop="sex" show-overflow-tooltip></el-table-column>
<el-table-column label="联系方式" prop="mobile" show-overflow-tooltip></el-table-column>
<el-table-column label="所属单位" prop="unitname" show-overflow-tooltip></el-table-column>
<el-table-column label="在职状态" prop="userState" show-overflow-tooltip></el-table-column>
<el-table-column label="是否拨付" prop="giveMoney" show-overflow-tooltip>
<template scope="scope">
<span class="text-success" v-if="scope.row.giveMoney">拨付</span>
<span class="text-danger" v-else>不拨付</span>
</template>
</el-table-column>
<el-table-column label="是否缴费" prop="isjf" show-overflow-tooltip>
<template slot-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 label="职务" prop="sf" show-overflow-tooltip>
<template slot-scope="scope">
<el-lable v-if="scope.row.sf==1">会长</el-lable>
<el-lable v-if="scope.row.sf==2">会员</el-lable>
<el-lable v-if="scope.row.sf==3">副会长</el-lable>
<el-lable v-if="scope.row.sf==4">秘书长</el-lable>
<el-lable v-if="scope.row.sf==5">副秘书长</el-lable>
</template>
</el-table-column>
</el-table>
<el-row class="el-pagination-container">
<el-pagination
@current-change="userPageNumberChange"
:current-page="userPageForm.pageNumber"
:page-sizes="[10, 20, 30, 50]"
:page-size="userPageForm.pageSize"
layout="total, sizes, prev, pager, next"
:total="userPageForm.totalCount">
</el-pagination>
</el-row>
</template>
</guava>
</div>
<script>
let vue = new Vue({
el: '#app',
mixins: [initTableMixins],
data() {
return {
userTableData: [],
tableData: [],
pageForm: {
pageNumber: 1,
pageSize: 10,
totalCount: 0,
giveMoney: null,
sex: '',
userState: '',
auditState: null,
clubId: '',
},
userPageForm: {
pageNumber: 1,
pageSize: 10,
totalCount: 0,
},
tabLoading: false,
clubList: [],
userTitle: '',
clickRow: {},
userTableLoading: false,
}
},
components: {
'dict-select': httpVueLoader('/components/plugins/DictSelect.vue?v=1.0.0'),
},
methods: {
exportUserData(row) {
const id = row === null ? '' : row.id
let url = '/platform/sys/club/clubUserCount/exportUserData?clubId=' + id +
'&userState=' + this.pageForm.userState +
'&sex=' + this.pageForm.sex
if (this.pageForm.giveMoney !== null) {
url += '&giveMoney=' + this.pageForm.giveMoney
}
window.open(url)
},
exportFiles(row) {
const id = row === null ? '' : row.id
let url = '/platform/sys/club/clubUserCount/exportFiles?clubId=' + id
window.open(url)
},
async openView(row) {
this.clickRow = row
await this.userPageData()
this.userTitle = row.name + '人员明细信息'
this.$refs.guava.view()
},
exportData() {
const url = loc() + "/exportData?giveMoney=" + this.pageForm.giveMoney +
"&sex=" + this.pageForm.sex +
"&clubId" + this.pageForm.clubId +
"&auditState" + this.pageForm.auditState +
"&userState=" + this.pageForm.userState
window.open(url)
},
doSearch() {
this.pageForm.pageNumber = 1
this.pageData()
},
pageNumberChange(val) {//页码更新操作
this.pageForm.pageNumber = val
this.pageData()
},
pageSizeChange(val) {//分页大小更新操作
this.pageForm.pageSize = val
this.pageData()
},
userPageNumberChange(val) {//页码更新操作
this.userPageForm.pageNumber = val
this.userPageData()
},
userPageSizeChange(val) {//分页大小更新操作
this.userPageForm.pageSize = val
this.userPageData()
},
async userPageData() {
this.userTableLoading = true
this.userPageForm.clubId = this.clickRow.id
this.userPageForm.userState = this.pageForm.userState
this.userPageForm.sex = this.pageForm.sex
if (this.pageForm.giveMoney === null) {
this.userPageForm.giveMoney = undefined
} else {
this.userPageForm.giveMoney = this.pageForm.giveMoney
}
const resp = await $.post("/platform/sys/club/clubUserCount/userPageData", this.userPageForm);
if (resp.code === 0) {
this.userTableData = resp.data.list;
this.userPageForm.totalCount = resp.data.totalCount;
this.userTableLoading = false
} else {
this.$message({message: resp.msg, type: 'error'});
this.userTableLoading = false
}
},
pageData() {//加载分页数据
sublime.showLoadingbar();//显示loading
this.tabLoading = true
const form = clone(this.pageForm)
if (form.giveMoney === null) {
delete form.giveMoney
}
if (form.auditState === null) {
delete form.auditState
}
$.post(base + "/platform/sys/club/clubUserCount/pageData", form, (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 getClub() {
const resp = await $.get(loc() + '/getClub', {
auditState: this.pageForm.auditState !== null ? this.pageForm.auditState : undefined
})
this.clubList = resp.data
},
},
async created() {
await this.getClub()
this.pageData()
}
})
</script>
<!--#
}
#-->
@@ -0,0 +1,526 @@
<!--#
layout("/layouts/platform.html"){
#-->
<style>
[v-cloak] {
display: none;
}
</style>
<div id="app" v-cloak>
<guava>
<el-card shadow="never">
<div slot="header" class="clearfix">
<el-button icon="el-icon-back" style="font-size: 16px" type="text" @click="fh"
v-if="jc.id">返回
</el-button>
<h3 style="color: rgb(24, 103, 176);font-family: Microsoft YaHei;">考核登记</h3>
</div>
<el-steps :active="registerTypeName" finish-status="success">
<el-step title="基础信息">
</el-step>
<el-step title="财务收支情况">
</el-step>
<el-step title="年末理事机构人员">
</el-step>
</el-steps>
<el-form v-show="registerTypeName===0" :model="jc" ref="addForm1" :rules="rules"
label-width="120px"
style="margin: 50px 0px 0px 0px">
<vi-title title="基础信息"></vi-title>
<el-row :gutter="20" type="flex">
<el-col :span="8">
<el-form-item prop="clubId" label="社团名称">
<el-select v-model="jc.clubId" placeholder="请选择所属社团" filterable
clearable
@change="changeClub"
style="width: 100%">
<el-option
v-for="item in clubOptions"
:key="item.stid"
:label="item.name"
:value="item.stid">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item prop="foundTime" label="成立时间">
<el-input v-model="jc.foundTime" placeholder="请输入成立时间"
readonly></el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item prop="dues_standard" label="会费标准">
<el-input v-model="jc.dues_standard" placeholder="请输入会费标准"
readonly></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20" type="flex">
<el-col :span="8">
<el-form-item prop="yearActivity" label="年度活动情况">
<file-upload :files.sync="jc.yearActivity"
:type="['doc','docx']"></file-upload>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item prop="summaryFiles" label="工作总结">
<file-upload :files.sync="jc.summaryFiles"
:type="['doc','docx']"></file-upload>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item prop="planFiles" label="工作计划">
<file-upload :files.sync="jc.planFiles"
:type="['doc','docx']"></file-upload>
</el-form-item>
</el-col>
</el-row>
<vi-title title="社团成员变化情况"></vi-title>
<el-row :gutter="20" type="flex">
<el-col :span="24">
<el-form-item prop="" label="">
<el-table :data="jc.changeUserNum" max-height="300">
<el-table-column label="序号" type="index"
width="50"></el-table-column>
<el-table-column label="人员类型" prop="userState"></el-table-column>
<el-table-column label="年初人员" prop="yearFirstNum"></el-table-column>
<el-table-column label="年度增加" prop="yearAddNum"></el-table-column>
<el-table-column label="年度减少" prop="yearEditNum"></el-table-column>
<el-table-column label="年末人数" prop="thisYearNum"></el-table-column>
</el-table>
</el-form-item>
</el-col>
</el-row>
</el-form>
<el-form v-show="registerTypeName===1" :model="cwsz" ref="addForm2" :rules="rules"
label-width="120px"
style="margin: 50px 0px 0px 0px">
<div>
<vi-title title="明细"></vi-title>
<el-table :data="cwsz.incomeDetailed" max-height="300">
<el-table-column label="序号" type="index" width="50"></el-table-column>
<el-table-column label="日期" prop="date" width="250">
<template slot-scope="{row}">
<el-date-picker
v-model="row.date"
type="date"
value-format="yyyy-MM-dd"
placeholder="选择日期">
</el-date-picker>
</template>
</el-table-column>
<el-table-column label="项目内容" prop="nr">
<template slot-scope="{row}">
<el-input v-model="row.nr" maxlength="15"></el-input>
</template>
</el-table-column>
<el-table-column label="收支类型" prop="incomeType" width="200">
<template slot-scope="{row,$index}">
<el-select :clearable="![0,1,2].includes($index)"
:disabled="[0,1,2].includes($index)"
placeholder="请选择收支类型"
v-model="row.incomeType"
@change="changeIncomeType">
<el-option key="会费收入" disabled label="会费收入"
value="会费收入"></el-option>
<el-option disabled key="校工会拨款" label="校工会拨款"
value="校工会拨款"></el-option>
<el-option disabled key="年度结余" label="年度结余"
value="年度结余"></el-option>
<el-option key="社会赞助" label="社会赞助" value="社会赞助"></el-option>
<el-option key="支出" label="支出" value="支出"></el-option>
<el-option key="其它" label="其它" value="其它"></el-option>
</el-select>
</template>
</el-table-column>
<el-table-column label="年初余额(元)" prop="qcMoney" width="100">
<template slot-scope="{row,$index}">
<el-input :disabled="$index!=0" @input="inputQcMoney(row)"
v-model="row.qcMoney" type="number"></el-input>
</template>
</el-table-column>
<el-table-column label="收入(元)" prop="income" width="100">
<template slot-scope="{row,$index}">
<el-input v-model="row.income" @input="inputIncome(row)"
type="number"
:disabled="!['社会赞助','其它'].includes(row.incomeType)||$index===0"
maxlength="15"></el-input>
</template>
</el-table-column>
<el-table-column label="支出(元)" prop="expend" width="100">
<template slot-scope="{row,$index}">
<el-input v-model="row.expend"
type="number"
:disabled="!['支出','其它'].includes(row.incomeType)||$index===0"
@input="inputExpend"
maxlength="15"></el-input>
</template>
</el-table-column>
<el-table-column label="年度结余(元)" prop="qmMoney" width="100">
<template slot-scope="{row}">
<el-input v-model="row.qmMoney" disabled
type="number"
maxlength="15"></el-input>
</template>
</el-table-column>
<el-table-column label="备注" prop="notes">
<template slot-scope="{row}">
<el-input v-model="row.notes"></el-input>
</template>
</el-table-column>
<el-table-column label="操作" width="150">
<template slot="header" slot-scope="{row,$index}">
<el-button @click="cwsz.incomeDetailed.push({})" round size="mini"
type="primary">添加明细
</el-button>
</template>
<template slot-scope="{row,$index}">
<el-button
@click="deleteIncomeDetailed(row,$index)"
icon="el-icon-delete" round
size="mini"
type="danger"
:disabled="[0,1,2].includes($index)"></el-button>
</template>
</el-table-column>
</el-table>
</div>
<div class="mt10">
<vi-title title="统计"></vi-title>
<el-table :data="cwsz.incomeCensus" max-height="300">
<el-table-column label="去年年度结余(元)" prop="lasYearSurplus">
<template slot-scope="{row}">
{{row.lasYearSurplus=lasYearSurplus}}
</template>
</el-table-column>
<el-table-column label="会费收入(元)" prop="income">
<template slot-scope="{row}">
{{row.income=income}}
</template>
</el-table-column>
<el-table-column label="校工会拨款(元)" prop="allocate">
<template slot-scope="{row}">
{{row.allocate=allocate}}
</template>
</el-table-column>
<el-table-column label="社会赞助(元)" prop="support">
</el-table-column>
<el-table-column label="年度总支出(元)" prop="totalExpend">
</el-table-column>
<el-table-column label="年度结余(元)" prop="surplus">
<template slot-scope="{row}">
{{row.surplus=row.income+row.support+row.allocate+row.lasYearSurplus-row.totalExpend}}
</template>
</el-table-column>
</el-table>
</div>
</el-form>
<el-form v-show="registerTypeName===2" ref="addForm3" :rules="rules"
label-width="120px"
style="margin: 50px 0px 0px 0px">
<vi-title title="年末理事机构人员"></vi-title>
<el-table :data="jgUser" max-height="300">
<el-table-column label="序号" type="index" width="50"></el-table-column>
<el-table-column label="职务" prop="roleName">
<template scope="scope">
<span v-if="scope.row.roleName">{{scope.row.roleName.replace('社团', '')}}</span>
<span v-else></span>
</template>
</el-table-column>
<el-table-column label="姓名" prop="username"></el-table-column>
<el-table-column label="工号" prop="loginname"></el-table-column>
<el-table-column label="所属部门" prop="unitname"></el-table-column>
<el-table-column label="联系电话" prop="mobile"></el-table-column>
</el-table>
</el-form>
<el-row v-if="isRegist === false" class="mt10" justify="center" type="flex">
<el-button @click="doSave" style="width: 300px" type="primary">保存
</el-button>
<el-button type="primary" style="width: 300px"
@click="registerTypeName=registerTypeName-1"
v-show="registerTypeName!==0">上一步
</el-button>
<el-button type="primary" style="width: 300px" @click="next"
v-show="registerTypeName!=2">下一步
</el-button>
<el-button @click="doSubmit" style="width: 300px" type="primary"
v-show="registerTypeName===2">提交
</el-button>
</el-row>
<el-row v-else class="mt10" justify="center" type="flex">
<el-button type="info">{{jc.clubName}}当前年度已提交考核登记</el-button>
</el-row>
</el-card>
</guava>
</div>
<script>
let vue = new Vue({
el: '#app',
mixins: [initTableMixins],
data() {
return {
jcClubId: "",
isRegist: false,
allocate: 0,
income: 0,
lasYearSurplus: 0,
jc: {activityQk: ""},
jgUser: [],
cwsz: {
incomeDetailed: [],
incomeCensus: [{income: 0, allocate: 0, support: 0, totalExpend: 0, surplus: 0}]
},
clubOptions: [],
registerTypeName: 0,
rules: {
activityQk: [{required: true, message: '必填', trigger: ['blur', 'change']}],
clubId: [{required: true, message: '必填', trigger: ['blur', 'change']}],
},
}
},
methods: {
fh() {
sublime.jumpPagePjax("/platform/sys/club/examine/registerManage")
},
async doSave() {
const resp = await $.post(loc() + (this.jc.id ? "/doEdit" : "/doSave"), {
jc: JSON.stringify(this.jc),
incomeDetailed: JSON.stringify(this.cwsz.incomeDetailed),
incomeCensus: JSON.stringify(this.cwsz.incomeCensus),
flag: false
})
if (resp.code === 0) {
this.notifySuccess(resp.msg)
sublime.jumpPagePjax("/platform/sys/club/examine/registerManage")
}
},
async doSubmit() {
const resp = await $.post(loc() + (this.jc.id ? "/doEdit" : "/doSave"), {
jc: JSON.stringify(this.jc),
incomeDetailed: JSON.stringify(this.cwsz.incomeDetailed),
incomeCensus: JSON.stringify(this.cwsz.incomeCensus),
flag: true
})
if (resp.code === 0) {
this.notifySuccess(resp.msg)
sublime.jumpPagePjax("/platform/sys/club/examine/registerManage")
}
},
async next() {
let a = true
this.$refs["addForm1"].validate(valid => {
if (!valid) {
a = false
}
})
if ((this.registerTypeName === 0 && a) || this.registerTypeName === 1) {
if (!this.formData.id && this.registerTypeName === 0) {
await this.getClubMemberMoney(this.jc.clubId)
await this.getXghBkMoney(this.jc.clubId)
await this.getLasYearSurplus(this.jc.clubId)
}
if (!this.jcClubId) {
this.cwsz.incomeDetailed = []
this.setIncomeDetailed()
}
this.jcClubId = this.jc.clubId
this.registerTypeName++
} else {
this.notifyWarning("请填写完整")
}
},
setIncomeDetailed() {
this.cwsz.incomeDetailed.push({
index: 0,
date: null,
nr: new Date().getFullYear() - 1 + "年度结余",
incomeType: "年度结余",
qcMoney: this.lasYearSurplus,
})
this.cwsz.incomeDetailed.push({
index: 1,
date: null,
nr: "会费收入",
incomeType: "会费收入",
qcMoney: null,
income: this.income,
})
this.cwsz.incomeDetailed.push({
index: 2,
date: null,
nr: "校工会拨款",
incomeType: "校工会拨款",
qcMoney: null,
income: this.allocate,
})
},
async getClubMemberMoney(id) {
const refs = await $.post(loc() + "/getClubMemberMoney", {id: id})
this.income = refs.data ? refs.data : 0
},
async getXghBkMoney(id) {
const refs = await $.post(loc() + "/getXghBkMoney", {id: id})
this.allocate = refs.data ? refs.data : 0
},
async getLasYearSurplus(id) {
const refs = await $.post(loc() + "/getLasYearSurplus", {id: id})
this.lasYearSurplus = refs.data
},
deleteIncomeDetailed(row, index) {
if (this.cwsz.incomeCensus[0].income !== 0) {
this.cwsz.incomeCensus[0].income = this.cwsz.incomeCensus[0].income - (Number(row.income) ? Number(row.income) : 0)
}
if (this.cwsz.incomeCensus[0].support !== 0) {
this.cwsz.incomeCensus[0].support = this.cwsz.incomeCensus[0].support - (Number(row.income) ? Number(row.income) : 0)
}
this.cwsz.incomeCensus[0].totalExpend = this.cwsz.incomeCensus[0].totalExpend - (Number(row.expend) ? Number(row.expend) : 0)
this.cwsz.incomeDetailed.splice(index, 1)
if (this.cwsz.incomeDetailed.length === 0) {
this.cwsz.incomeCensus = [{
income: this.income,
allocate: this.allocate,
support: 0,
totalExpend: 0,
surplus: 0
}]
}
},
changeIncomeType(val) {
if (val === "校工会拨款") {
const incomeTypeList = this.cwsz.incomeDetailed.filter(v => v.incomeType === "校工会拨款")
let aa = 0
incomeTypeList.map(v => {
aa = aa + (Number(v.income) ? Number(v.income) : 0)
})
this.cwsz.incomeCensus[0].allocate = aa
} else {
const incomeTypeList = this.cwsz.incomeDetailed.filter(v => v.incomeType === "社会赞助")
let aa = 0
incomeTypeList.map(v => {
aa = aa + (Number(v.income) ? Number(v.income) : 0)
})
this.cwsz.incomeCensus[0].support = aa
}
},
inputExpend() {
let aa = 0
this.cwsz.incomeDetailed.map(v => {
aa = aa + (Number(v.expend) ? Number(v.expend) : 0)
})
this.cwsz.incomeCensus[0].totalExpend = aa
},
inputIncome(row) {
let sr = 0
this.cwsz.incomeDetailed.map(v => {
sr = sr + (Number(v.income) ? Number(v.income) : 0)
})
this.cwsz.incomeCensus[0].income = sr
this.changeIncomeType(row.incomeType)
},
inputQcMoney(row) {
this.lasYearSurplus = Number(row.qcMoney)
},
async changeClub(val) {
const club = this.clubOptions.find(v => v.stid === val)
this.$set(this.jc, "dues_standard", club.dues_standard)
this.$set(this.jc, "foundTime", moment(club.foundTime).format('YYYY-MM-DD'))
this.$set(this.jc, "clubName", club.name)
await this.getClubUserNum(val)
await this.getJgUser(val)
await this.getCount()
this.jcClubId = ""
},
async getClubUserNum(clubId) {
const resp = await $.post(loc() + "/getClubUserNum", {
clubId: clubId
})
if (resp.code === 1) {
this.notifyWarning(resp.msg)
return
}
this.$set(this.jc, "changeUserNum", resp.data)
},
async getJgUser(clubId) {
const resp = await $.post(loc() + "/getJgUser", {
clubId: clubId
})
this.jgUser = resp.data
},
init() {
},
async getClub() {
this.clubOptions = await getClubsByRole()
if (this.clubOptions && this.clubOptions.length > 0) {
this.$set(this.jc, "clubId", this.clubOptions[0].stid)
}
await this.changeClub(this.jc.clubId)
await this.getClubUserNum(this.jc.clubId)
await this.getJgUser(this.jc.clubId)
},
async openEdit(id) {
this.clubOptions = await getClubsByRole()
const {data} = await $.post("/platform/sys/club/examine/register/findOne", {id: id})
this.jc = data.register
this.cwsz.incomeCensus = data.register.incomeCensus
this.cwsz.incomeDetailed = data.detaileds
await this.getClubUserNum(this.jc.clubId)
await this.getJgUser(this.jc.clubId)
},
//获取当前年度社团有没有登记
async getCount() {
const resp = await $.get(loc() + '/getCount', {id: this.jc.clubId})
this.isRegist = resp.data > 0
},
},
async created() {
const id = getQueryVariable("id")
if (id) {
this.openEdit(id)
} else {
this.init()
await this.getClub()
}
this.getCount()
}
})
</script>
<!--#
}
#-->
@@ -0,0 +1,216 @@
<!--#
layout("/layouts/platform.html"){
#-->
<div id="app" v-cloak>
<guava ref="guava">
<el-card shadow="never">
<div class="search">
<div class="search-item">
<div class="search-item-label">&emsp;&emsp;</div>
<div class="search-item-option">
<el-date-picker
v-model="pageForm.year"
@change="doSearch"
type="year"
value-format="yyyy" style="width: 100%"
placeholder="选择年">
</el-date-picker>
</div>
</div>
</div>
</el-card>
<el-card shadow="never" class="mt20">
<table-tool label="登记列表" :app="this">
<template #func>
<el-radio-group @change="doSearch" style="margin-bottom: -7.5px"
v-model="pageForm.flag">
<el-radio-button :label="true">已审核</el-radio-button>
<el-radio-button :label="false">未审核</el-radio-button>
</el-radio-group>
</template>
</table-tool>
<el-table :data="tableData" style="width: 100%" row-key="id" @sort-change="pageOrder"
:size="tableSize"
v-loading="tableLoading" ref="table" class="vi-table">
<el-table-column align="center" header-align="center" type="index"
:index="indexMethod" label="序号"
width="80px"></el-table-column>
<el-table-column
align="center"
header-align="center"
v-for="column in tableColumns"
show-overflow-tooltip
:sortable="column.sortable"
:label="column.label"
:prop="column.prop" :width="column.width" min-width="100px">
<template v-if="column.prop=='year'" scope="{row}">
{{moment(row.registerDate).format('YYYY')}}
</template>
<template v-else-if="column.prop=='auditId'" scope="{row}">
<vi-table-state :state="row"></vi-table-state>
</template>
</el-table-column>
<el-table-column prop="userOnline" align="center" header-align="center" label="操作"
width="200"
fixed="right">
<template scope="{row}">
<el-button plain size="mini" @click="openView(row)" type="primary">查看
</el-button>
<el-button size="mini" @click="openEdit(row)" type="primary"
v-if="row.auditId===5080">审核
</el-button>
<el-button size="mini" @click="doRecall(row)" type="primary"
v-if="[5083,5085,5090].includes(row.auditId)">撤回
</el-button>
</template>
</el-table-column>
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
<template #view>
<club-register-info ref="info"></club-register-info>
</template>
<template #edit>
<club-register-info ref="edit" label="审核" handle>
<template #handle>
<el-form :model="formData" ref="form" :rules="formRules" label-position="right"
style="padding: 20px 0"
label-width="120px">
<vi-title title="审核信息"></vi-title>
<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 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 :qz.sync="formData.auditSign"></sign>
</el-form-item>
</el-form>
<div style="float: right;margin: 20px 0">
<el-button @click="doReview(1)">拒绝</el-button>
<el-button type="danger" @click="doReview(2)">退回修改</el-button>
<el-button type="primary" @click="doReview(3)">通过</el-button>
</div>
</template>
</club-register-info>
</template>
</guava>
</div>
<script>
let vue = new Vue({
el: '#app',
mixins: [initTableMixins],
data() {
return {
pageForm: {
flag: false,
year: new Date().getFullYear() + ""
},
tableColumns: [
{prop: 'year', label: '年度'},
{prop: 'clubName', label: '社团名称'},
{prop: 'foundTime', label: '成立时间'},
{prop: 'username', label: '联系人', sortable: true},
{prop: 'concatPersonMobile', label: '联系方式', sortable: true},
{prop: 'registerDate', label: '登记时间'},
{prop: 'auditId', label: '登记状态', sortable: true},
]
}
},
components: {
'club-register-info': httpVueLoader('/components/club/clubRegisterInfo.vue'),
},
methods: {
openView(row) {
this.$refs.info.getInfo(row.id)
this.$refs.guava.view()
},
openEdit(row) {
this.formData = {
id: row.id,
username: "${@shiro.getPrincipalProperty('username')}",
auditTime: moment().format('YYYY-MM-DD'),
}
this.$refs.edit.getInfo(row.id)
this.$refs.guava.edit()
},
async doReview(flag) {
let msg = flag === 1 ? "拒绝" : flag === 2 ? "退回修改" : "通过"
const confirm = await this.$confirm('确定要' + msg + '吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
if (confirm === "confirm") {
this.formData.flag = flag
const resp = await $.post(loc() + "/doReview", this.formData)
if (resp.code === 0) {
this.notifySuccess(resp.msg)
this.doSearch()
this.$refs.guava.index()
} else {
this.notifyError(resp.msg)
}
}
},
async doRecall(row) {
const confirm = await this.$confirm('此操作将会撤回您审核的内容, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
if (confirm === "confirm") {
const resp = await $.post(loc() + '/doRecall', {
id: row.id
})
if (resp.code === 0) {
this.doSearch()
this.notifySuccess(resp.msg)
}
}
}
},
created() {
this.pageData()
}
})
</script>
<!--#
}
#-->
@@ -0,0 +1,215 @@
<!--#
layout("/layouts/platform.html"){
#-->
<div id="app" v-cloak>
<guava ref="guava">
<el-card shadow="never">
<div class="search">
<div class="search-item">
<div class="search-item-label">&emsp;&emsp;</div>
<div class="search-item-option">
<el-date-picker
v-model="pageForm.year"
@change="doSearch"
type="year"
value-format="yyyy" style="width: 100%"
placeholder="选择年">
</el-date-picker>
</div>
</div>
</div>
</el-card>
<el-card shadow="never" class="mt20">
<table-tool label="登记列表" :app="this">
<template #func>
<el-radio-group @change="doSearch" style="margin-bottom: -7.5px"
v-model="pageForm.flag">
<el-radio-button :label="true">已审核</el-radio-button>
<el-radio-button :label="false">未审核</el-radio-button>
</el-radio-group>
</template>
</table-tool>
<el-table :data="tableData" style="width: 100%" row-key="id" @sort-change="pageOrder"
:size="tableSize"
v-loading="tableLoading" ref="table" class="vi-table">
<el-table-column align="center" header-align="center" type="index"
:index="indexMethod" label="序号"
width="80px"></el-table-column>
<el-table-column
align="center"
header-align="center"
v-for="column in tableColumns"
show-overflow-tooltip
:sortable="column.sortable"
:label="column.label"
:prop="column.prop" :width="column.width" min-width="100px">
<template v-if="column.prop=='year'" scope="{row}">
{{moment(row.registerDate).format('YYYY')}}
</template>
<template v-else-if="column.prop=='auditId'" scope="{row}">
<vi-table-state :state="row"></vi-table-state>
</template>
</el-table-column>
<el-table-column prop="userOnline" align="center" header-align="center" label="操作"
width="200">
<template scope="{row}">
<el-button plain size="mini" @click="openView(row)" type="primary">查看
</el-button>
<el-button size="mini" @click="openEdit(row)" type="primary"
v-if="row.auditId===5090">审核
</el-button>
<el-button size="mini" @click="doRecall(row)" type="primary"
v-if="[5093,5095,6010].includes(row.auditId)">撤回
</el-button>
</template>
</el-table-column>
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
<template #view>
<club-register-info ref="info"></club-register-info>
</template>
<template #edit>
<club-register-info ref="edit" label="审核" handle>
<template #handle>
<el-form :model="formData" ref="form" :rules="formRules" label-position="right"
style="padding: 20px 0"
label-width="120px">
<vi-title title="审核信息"></vi-title>
<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 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 :qz.sync="formData.auditSign"></sign>
</el-form-item>
</el-form>
<div style="float: right;margin: 20px 0">
<el-button @click="doReview(1)">拒绝</el-button>
<el-button type="danger" @click="doReview(2)">退回修改</el-button>
<el-button type="primary" @click="doReview(3)">通过</el-button>
</div>
</template>
</club-register-info>
</template>
</guava>
</div>
<script>
let vue = new Vue({
el: '#app',
mixins: [initTableMixins],
data() {
return {
pageForm: {
flag: false,
year: new Date().getFullYear() + ""
},
tableColumns: [
{prop: 'year', label: '年度'},
{prop: 'clubName', label: '社团名称'},
{prop: 'foundTime', label: '成立时间'},
{prop: 'username', label: '联系人', sortable: true},
{prop: 'concatPersonMobile', label: '联系方式', sortable: true},
{prop: 'registerDate', label: '登记时间'},
{prop: 'auditId', label: '登记状态', sortable: true},
]
}
},
components: {
'club-register-info': httpVueLoader('/components/club/clubRegisterInfo.vue'),
},
methods: {
openView(row) {
this.$refs.info.getInfo(row.id)
this.$refs.guava.view()
},
openEdit(row) {
this.formData = {
id: row.id,
username: "${@shiro.getPrincipalProperty('username')}",
auditTime: moment().format('YYYY-MM-DD'),
}
this.$refs.edit.getInfo(row.id)
this.$refs.guava.edit()
},
async doReview(flag) {
let msg = flag === 1 ? "拒绝" : flag === 2 ? "退回修改" : "通过"
const confirm = await this.$confirm('确定要' + msg + '吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
if (confirm === "confirm") {
this.formData.flag = flag
const resp = await $.post(loc() + "/doReview", this.formData)
if (resp.code === 0) {
this.notifySuccess(resp.msg)
this.doSearch()
this.$refs.guava.index()
} else {
this.notifyError(resp.msg)
}
}
},
async doRecall(row) {
const confirm = await this.$confirm('此操作将会撤回您审核的内容, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
if (confirm === "confirm") {
const resp = await $.post(loc() + '/doRecall', {
id: row.id
})
if (resp.code === 0) {
this.doSearch()
this.notifySuccess(resp.msg)
}
}
}
},
created() {
this.pageData()
}
})
</script>
<!--#
}
#-->
@@ -0,0 +1,134 @@
<!--#
layout("/layouts/platform.html"){
#-->
<div id="app" v-cloak>
<guava ref="guava">
<el-card shadow="never">
<div class="search">
<div class="search-item">
<div class="search-item-label">&emsp;&emsp;</div>
<div class="search-item-option">
<el-date-picker
v-model="pageForm.year"
@change="doSearch"
type="year"
value-format="yyyy" style="width: 100%"
placeholder="选择年">
</el-date-picker>
</div>
</div>
</div>
</el-card>
<el-card shadow="never" class="mt20">
<table-tool label="登记列表" :app="this">
<template #func>
</template>
</table-tool>
<el-table :data="tableData" style="width: 100%" row-key="id" @sort-change="pageOrder"
:size="tableSize"
v-loading="tableLoading" ref="table" class="vi-table">
<el-table-column align="center" header-align="center" type="index"
:index="indexMethod" label="序号"
width="80px"></el-table-column>
<el-table-column
align="center"
header-align="center"
v-for="column in tableColumns"
show-overflow-tooltip
:sortable="column.sortable"
:label="column.label"
:prop="column.prop" :width="column.width" min-width="100px">
<template v-if="column.prop=='year'" scope="{row}">
{{moment(row.registerDate).format('YYYY')}}
</template>
<template v-else-if="column.prop=='auditId'" scope="{row}">
<vi-table-state :state="row"></vi-table-state>
</template>
</el-table-column>
<el-table-column prop="userOnline" align="center" header-align="center" label="操作" width="300">
<template scope="{row}">
<el-button plain size="mini" @click="openView(row)" type="primary">查看</el-button>
<el-button size="mini" @click="openEdit(row)" type="primary" v-if="[5070,5083,5093,6013].includes(row.auditId)">编辑</el-button>
<el-button size="mini" @click="doDelete(row)" type="danger" v-if="${@shiro.hasRole('sysadmin')}">删除</el-button>
<el-button size="mini" @click="doDelete(row)" type="danger" v-if="row.auditId===5080&&${!@shiro.hasRole('sysadmin')}">删除</el-button>
<el-button plain size="mini" @click="doExport(row)" v-if="row.auditId===6020">导出</el-button>
</template>
</el-table-column>
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
<template #view>
<club-register-info ref="info"></club-register-info>
</template>
</guava>
</div>
<script>
let vue = new Vue({
el: '#app',
mixins: [initTableMixins],
data() {
return {
pageForm: {
year: new Date().getFullYear() + ""
},
tableColumns: [
{prop: 'year', label: '年度'},
{prop: 'clubName', label: '社团名称'},
{prop: 'foundTime', label: '成立时间'},
{prop: 'username', label: '联系人', sortable: true},
{prop: 'concatPersonMobile', label: '联系方式', sortable: true},
{prop: 'registerDate', label: '登记时间'},
{prop: 'auditId', label: '登记状态', sortable: true},
]
}
},
components: {
'club-register-info': httpVueLoader('/components/club/clubRegisterInfo.vue'),
},
methods: {
openView(row) {
this.$refs.info.getInfo(row.id)
this.$refs.guava.view()
},
openEdit(row) {
sublime.jumpPagePjax("/platform/sys/club/examine/registerAdd?id=" + row.id)
},
async doDelete(row) {
const confirm = await this.$confirm('此操作将永久删除, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
if (confirm === "confirm") {
const resp = await $.post(loc() + "/doDelete", {id: row.id})
if (resp.code === 0) {
this.notifySuccess(resp.msg)
this.doSearch()
} else {
this.notifyError(resp.msg)
}
}
},
doExport(row) {
window.open(loc() + "/doExport?id=" + row.id)
},
},
created() {
this.pageData()
}
})
</script>
<!--#
}
#-->
@@ -0,0 +1,233 @@
<!--#
layout("/layouts/platform.html"){
#-->
<div id="app" v-cloak>
<guava ref="guava">
<el-card shadow="never">
<div class="search">
<div class="search-item">
<div class="search-item-label">&emsp;&emsp;</div>
<div class="search-item-option">
<el-date-picker
v-model="pageForm.year"
type="year"
@change="doSearch"
value-format="yyyy" style="width: 100%"
placeholder="选择年">
</el-date-picker>
</div>
</div>
<div class="search-item">
<div class="search-item-label">&emsp;&emsp;</div>
<div class="search-item-option">
<el-select v-model="pageForm.clubId" placeholder="请选择社团" filterable
clearable
@change="doSearch"
style="width: 100%">
<el-option
v-for="item in clubOptions"
:key="item.stid"
:label="item.name"
:value="item.stid">
</el-option>
</el-select>
</div>
</div>
</div>
</el-card>
<el-card shadow="never" class="mt20">
<table-tool label="登记列表" :app="this">
<template #func>
<el-radio-group @change="doSearch" style="margin-bottom: -7.5px"
v-model="pageForm.flag">
<el-radio-button :label="true">已审核</el-radio-button>
<el-radio-button :label="false">未审核</el-radio-button>
</el-radio-group>
</template>
</table-tool>
<el-table :data="tableData" style="width: 100%" row-key="id" @sort-change="pageOrder"
:size="tableSize"
v-loading="tableLoading" ref="table" class="vi-table">
<el-table-column align="center" header-align="center" type="index"
:index="indexMethod" label="序号"
width="80px"></el-table-column>
<el-table-column
align="center"
header-align="center"
v-for="column in tableColumns"
show-overflow-tooltip
:sortable="column.sortable"
:label="column.label"
:prop="column.prop" :width="column.width" min-width="100px">
<template v-if="column.prop=='year'" scope="{row}">
{{moment(row.registerDate).format('YYYY')}}
</template>
<template v-else-if="column.prop=='auditId'" scope="{row}">
<vi-table-state :state="row"></vi-table-state>
</template>
</el-table-column>
<el-table-column prop="userOnline" align="center" header-align="center" label="操作"
width="200">
<template scope="{row}">
<el-button plain size="mini" @click="openView(row)" type="primary">查看
</el-button>
<el-button size="mini" @click="openEdit(row)" type="primary"
v-if="row.auditId===6010">审核
</el-button>
<el-button size="mini" @click="doRecall(row)" type="primary"
v-if="[6013,6015,6020].includes(row.auditId)">撤回
</el-button>
</template>
</el-table-column>
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
<template #view>
<club-register-info ref="info"></club-register-info>
</template>
<template #edit>
<club-register-info ref="edit" label="审核" handle>
<template #handle>
<el-form :model="formData" ref="form" :rules="formRules" label-position="right"
style="padding: 20px 0"
label-width="120px">
<vi-title title="审核信息"></vi-title>
<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 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 :qz.sync="formData.auditSign"></sign>
</el-form-item>
</el-form>
<div style="float: right;margin: 20px 0">
<el-button @click="doReview(1)">拒绝</el-button>
<el-button type="danger" @click="doReview(2)">退回修改</el-button>
<el-button type="primary" @click="doReview(3)">通过</el-button>
</div>
</template>
</club-register-info>
</template>
</guava>
</div>
<script>
let vue = new Vue({
el: '#app',
mixins: [initTableMixins],
data() {
return {
pageForm: {
flag: false,
year: new Date().getFullYear() + ""
},
clubOptions: [],
tableColumns: [
{prop: 'year', label: '年度'},
{prop: 'clubName', label: '社团名称'},
{prop: 'foundTime', label: '成立时间'},
{prop: 'username', label: '联系人', sortable: true},
{prop: 'concatPersonMobile', label: '联系方式', sortable: true},
{prop: 'registerDate', label: '登记时间'},
{prop: 'auditId', label: '登记状态', sortable: true},
]
}
},
components: {
'club-register-info': httpVueLoader('/components/club/clubRegisterInfo.vue'),
},
methods: {
openView(row) {
this.$refs.info.getInfo(row.id)
this.$refs.guava.view()
},
openEdit(row) {
this.formData = {
id: row.id,
username: "${@shiro.getPrincipalProperty('username')}",
auditTime: moment().format('YYYY-MM-DD'),
}
this.$refs.edit.getInfo(row.id)
this.$refs.guava.edit()
},
async doReview(flag) {
let msg = flag === 1 ? "拒绝" : flag === 2 ? "退回修改" : "通过"
const confirm = await this.$confirm('确定要' + msg + '吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
if (confirm === "confirm") {
this.formData.flag = flag
const resp = await $.post(loc() + "/doReview", this.formData)
if (resp.code === 0) {
this.notifySuccess(resp.msg)
this.doSearch()
this.$refs.guava.index()
} else {
this.notifyError(resp.msg)
}
}
},
async doRecall(row) {
const confirm = await this.$confirm('此操作将会撤回您审核的内容, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
if (confirm === "confirm") {
const resp = await $.post(loc() + '/doRecall', {
id: row.id
})
if (resp.code === 0) {
this.doSearch()
this.notifySuccess(resp.msg)
}
}
}
},
async created() {
this.clubOptions = await getClubsByRole()
this.pageData()
}
})
</script>
<!--#
}
#-->
@@ -0,0 +1,122 @@
<el-tabs v-model="activeName">
<el-tab-pane label="基础信息" name="1">
<vi-title title="社团信息"></vi-title>
<el-descriptions :column="3" border class="table_fixed">
<el-descriptions-item :span="3" label="社团名称">
{{viewData.name}}
</el-descriptions-item>
<el-descriptions-item label="社团编码">
{{viewData.code}}
</el-descriptions-item>
<el-descriptions-item label="社团类型">
{{viewData.typeName}}
</el-descriptions-item>
<el-descriptions-item label="发起人">
{{viewData.sponsorName}}
</el-descriptions-item>
<el-descriptions-item label="社团联系人">
{{viewData.fzrName}}
</el-descriptions-item>
<el-descriptions-item label="所在单位">
{{viewData.fzr_unit_name}}
</el-descriptions-item>
<el-descriptions-item label="联系人电话">
{{viewData.fzr_mobile}}
</el-descriptions-item>
<el-descriptions-item label="联系人邮箱">
{{viewData.fzr_email}}
</el-descriptions-item>
<el-descriptions-item label="申请时间">
{{viewData.create_time}}
</el-descriptions-item>
<el-descriptions-item label="会费标准">
{{viewData.dues_standard}}
</el-descriptions-item>
<el-descriptions-item label="介绍链接">
<span style="cursor: pointer; color: #236eb4"
@click="window.open(viewData.introduce_href.indexOf('http') !== -1 ? viewData.introduce_href : 'https://' + viewData.introduce_href)">{{viewData.introduce_href}}</span>
</el-descriptions-item>
<el-descriptions-item label="限定人数">
{{viewData.number}}
</el-descriptions-item>
<el-descriptions-item label="状态">
{{viewData.stateName}}
</el-descriptions-item>
<el-descriptions-item span="3">
<template slot="label">附件</template>
<file-upload v-if="viewData.files && viewData.files.length > 0"
:files="JSON.parse(viewData.files)"
:view="true"></file-upload>
</el-descriptions-item>
<el-descriptions-item span="3">
<template slot="label">社团介绍</template>
<div class="text-left" v-html="viewData.stjs"></div>
</el-descriptions-item>
<el-descriptions-item span="3">
<template slot="label">社团章程</template>
<div class="text-left" v-html="viewData.stzc"></div>
</el-descriptions-item>
</el-descriptions>
<vi-title title="成员列表" style="margin-top: 20px"></vi-title>
<el-table :data="viewData.clubuser" size="small" border
:header-cell-style="{background:'#F5F5F5',color:'#606266'}">
<el-table-column label="人员身份" width="150px" prop="sf" header-align="center"
align="center">
<template slot-scope="scope">
<el-lable v-if="scope.row.sf==1">会长</el-lable>
<el-lable v-if="scope.row.sf==2">成员</el-lable>
<el-lable v-if="scope.row.sf==3">副会长</el-lable>
<el-lable v-if="scope.row.sf==4">秘书长</el-lable>
<el-lable v-if="scope.row.sf==5">副秘书长</el-lable>
</template>
</el-table-column>
<el-table-column label="工号" width="150px" prop="loginname" header-align="center"
align="center"></el-table-column>
<el-table-column label="姓名" width="150px" prop="username" header-align="center"
align="center"></el-table-column>
<el-table-column label="性别" width="150px" prop="sex" header-align="center"
align="center"></el-table-column>
<el-table-column label="电话" width="150px" prop="mobile" header-align="center"
align="center"></el-table-column>
<el-table-column label="所属单位" prop="unitname" header-align="center" show-overflow-tooltip="true"
align="center"></el-table-column>
</el-table>
</el-tab-pane>
<el-tab-pane name="2" label="校工会审核信息" v-if="viewData.schoolAuditUser">
<el-descriptions :column="2" border class="table_fixed">
<el-descriptions-item label="审核人">
{{viewData.schoolAuditUserName}}
</el-descriptions-item>
<el-descriptions-item label="审核时间">
{{viewData.schoolAuditTime}}
</el-descriptions-item>
<el-descriptions-item label="审核意见">
{{viewData.schoolAuditOpinion}}
</el-descriptions-item>
</el-descriptions>
</el-tab-pane>
<el-tab-pane name="99" label="校工会审核" v-if="schoolAudit === true">
<el-descriptions :column="2" border class="table_fixed">
<el-descriptions-item label="审核人">
{{ '${@shiro.getPrincipalProperty('username')}' }}
</el-descriptions-item>
<el-descriptions-item label="审核时间">
{{ moment().format('YYYY-MM-DD HH:mm:ss') }}
</el-descriptions-item>
<el-descriptions-item label="审核意见">
<el-input type="textarea" v-model="opinion" rows="6" maxlength="500"
placeholder="请填写您的审核意见"></el-input>
</el-descriptions-item>
</el-descriptions>
<el-row style="margin: 40px 0; text-align: right">
<el-button type="danger" @click="doReview(2)">驳回</el-button>
<el-button type="info" @click="doReview(1)">退回修改</el-button>
<el-button type="primary" @click="doReview(3)">通过</el-button>
</el-row>
</el-tab-pane>
</el-tabs>
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,200 @@
<!--#
layout("/layouts/platform.html"){
#-->
<style>
</style>
<div id="app" v-cloak>
<guava ref="guava">
<el-card shadow="never">
<div class="search">
<div class="search-item">
<div class="search-item-label">社团名称:</div>
<div class="search-item-option">
<el-select filterable placeholder="请选择社团" style="width: 100%;"
v-model="pageForm.clubId">
<el-option :label="item.name" :value="item.id" v-for="item in clubList"></el-option>
</el-select>
</div>
</div>
<div class="search-query">
<el-button @click="doSearch" icon="el-icon-search" type="primary">搜索</el-button>
</div>
</div>
</el-card>
<el-card class="mt10" shadow="never">
<table-tool :app="this" label="理事机构审核">
<template #func>
<el-button @click="doReview(false)" size="small" type="danger">批量拒绝</el-button>
<el-button @click="doReview(true)" size="small" type="primary">批量通过</el-button>
</template>
</table-tool>
<el-table :data="tableData" :size="tableSize" @selection-change="handleSelectionChange"
ref="table" :row-key="()=>{new Date().getTime()}">
<el-table-column :reserve-selection="true"
type="selection"
width="40">
</el-table-column>
<el-table-column :index="indexMethod" align="center" header-align="center" label="序号" type="index"
width="80px"></el-table-column>
<el-table-column label="社团名称" prop="name" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="社团编码" prop="code" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="社团类型" prop="typeName" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="成员" prop="username" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="职务" prop="sf" sortable align="center" header-align="center"
show-overflow-tooltip>
<template slot-scope="scope">
<el-lable v-if="scope.row.sf==1">会长</el-lable>
<el-lable v-if="scope.row.sf==2">会员</el-lable>
<el-lable v-if="scope.row.sf==3">副会长</el-lable>
<el-lable v-if="scope.row.sf==4">秘书长</el-lable>
<el-lable v-if="scope.row.sf==5">副秘书长</el-lable>
</template>
</el-table-column>
<el-table-column label="职务变更" prop="changeSf" sortable align="center" header-align="center"
show-overflow-tooltip>
<template slot-scope="scope">
<div v-if="scope.row.changeSf">
<el-lable v-if="scope.row.changeSf==1">会长</el-lable>
<el-lable v-if="scope.row.changeSf==2">会员</el-lable>
<el-lable v-if="scope.row.changeSf==3">副会长</el-lable>
<el-lable v-if="scope.row.changeSf==4">秘书长</el-lable>
<el-lable v-if="scope.row.changeSf==5">副秘书长</el-lable>
</div>
<span v-else>暂无变更</span>
</template>
</el-table-column>
<el-table-column label="变更时间" prop="sfChangeTime" sortable align="center" header-align="center"
show-overflow-tooltip>
<template slot-scope="{row}">
<span v-if="row.changeSf !== undefined">{{ moment(row.create_time).format('YYYY-MM-DD') }}</span>
<span v-else>暂无变更</span>
</template>
</el-table-column>
<el-table-column label="状态" prop="state" sortable align="center" header-align="center"
show-overflow-tooltip>
<template slot-scope="{row}">
<span v-if="row.state === 1 || row.status === 3">待校工会审核</span>
</template>
<template v-else slot-scope="scope">
暂无状态
</template>
</el-table-column>
<el-table-column label="换届报告" prop="replaceReport" sortable align="center" header-align="center"
show-overflow-tooltip>
<template scope="scope">
<span style="color: #0e78c5; text-decoration: underline; cursor: pointer"
@click="showDoc(scope.row)">{{getFileName(scope.row)}}</span>
</template>
</el-table-column>
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
<template #view>
<club-regist-info ref="info"></club-regist-info>
</template>
</guava>
</div>
<script>
let vue = new Vue({
el: '#app',
mixins: [initTableMixins],
data() {
return {
clubList: [],
multipleSelection: [],
}
},
components: {
},
methods: {
showDoc(row) {
if(row.replaceReport) {
const file = JSON.parse(row.replaceReport)
let pdfStreamUrl = encodeURIComponent(FILE_STREAM_PREVIEW_ADDRESS + '?id=' + file[0].id) //将路径转码
window.open('/assets/platform/plugins/pdfJs/web/viewer.html?file=' + pdfStreamUrl, file[0].filename)
}
},
getFileName(row) {
if(row.replaceReport) {
const file = JSON.parse(row.replaceReport)
return file[0].filename
} else {
return ''
}
},
doReview(flag) {
if(this.multipleSelection.length === 0) {
this.$notify.warning({title: '警告', message: '请先在多选框中选择!'})
return
}
const str = flag ? '通过' : '拒绝'
this.$confirm('确定要批量审核' + str + '吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
callback: async (a, b) => {
if ("confirm" === a) {//确认后再执行
const array = this.multipleSelection.map(o => o.id)
const resp = await $.post("/platform/sys/club/clubManagePersonAudit/doReview", {
ids: JSON.stringify(array),
isPass: flag,
})
if (resp.code === 0) {
this.$message({message: '操作成功', type: 'success'})
this.$refs.table.clearSelection()
this.pageData()
}
}
}
})
},
handleSelectionChange(val) {
this.multipleSelection = val;
},
async pageData() {
const resp = await $.post("/platform/sys/club/clubManagePersonAudit/pageData", this.pageForm);
if (resp.code === 0) {
this.tableData = resp.data.list;
this.pageForm.totalCount = resp.data.totalCount;
} else {
this.$message({
message: resp.msg,
type: 'error'
});
}
},
async getAllClub() {
const resp = await $.post("/platform/sys/club/clubManagePersonAudit/getAllClub");
if (resp.code === 0) {
this.clubList = resp.data;
}
},
},
async created(){
await this.getAllClub()
await this.pageData()
}
})
</script>
<!--#
}
#-->
@@ -0,0 +1,174 @@
<!--#
layout("/layouts/platform.html"){
#-->
<style>
.table_fixed {
table-layout: fixed !important;
}
</style>
<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">&emsp;&emsp;度:</div>
<div class="search-item-option">
<el-date-picker
placeholder="选择年度"
type="year" style="width: 100%"
v-model="pageForm.year"
value-format="yyyy">
</el-date-picker>
</div>
</div>
<div class="search-item">
<div class="search-item-label">社团名称:</div>
<div class="search-item-option">
<el-input @keyup.enter.native="doSearch" clearable placeholder="请输入内容"
clearable
style="width: 100%" v-model="pageForm.name">
</el-input>
</div>
</div>
<div class="search-query">
<el-button @click="doSearch" icon="el-icon-search" type="primary">搜索</el-button>
</div>
</div>
</el-card>
<el-card class="mt10" shadow="never">
<el-table :data="tableData" :size="tableSize">
<el-table-column :index="indexMethod" align="center" header-align="center" label="序号" type="index"
width="80px"></el-table-column>
<el-table-column label="社团名称" prop="name" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="社团类型" prop="typeName" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="申请时间" prop="create_time" sortable align="center" header-align="center"
show-overflow-tooltip>
<template slot-scope="{row}">
<span>{{ moment(row.create_time).format('YYYY-MM-DD') }}</span>
</template>
</el-table-column>
<el-table-column label="成立时间" prop="create_time" sortable align="center" header-align="center"
show-overflow-tooltip>
<template slot-scope="{row}">
<span>{{ moment(row.foundTime).format('YYYY-MM-DD') }}</span>
</template>
</el-table-column>
<el-table-column label="联系人" prop="fzrName" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="发起人" prop="sponsorName" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="操作" width="300px">
<template scope="{row}">
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
<el-button @click="uploadRefreshReport(row)" size="mini" type="primary">上传换届报告</el-button>
</template>
</el-table-column>
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
</template>
<template #view>
<club-regist-info ref="info"></club-regist-info>
</template>
</guava>
<el-dialog width="40%" :visible.sync="refreshDialogVisible" title="上传换届报告">
<file-upload card :files.sync="replaceReport" :max="1" :type="['doc','docx']">
</file-upload>
<span slot="footer" class="dialog-footer">
<el-button @click="refreshDialogVisible = false">取消</el-button>
<el-button type="primary" @click="refreshDo">确定</el-button>
</span>
</el-dialog>
</div>
<script>
let vue = new Vue({
el: '#app',
mixins: [initTableMixins],
components: {
'club-regist-info': httpVueLoader('/components/club/clubRegistInfo.vue'),
},
data() {
return {
pageForm: {
name: ''
},
tableData: [],
refreshDialogVisible: false,
replaceReport: [],
clickRow: {},
}
},
methods: {
async refreshDo() {
const confirm = await this.$confirm('您确定要上传换届报告吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
if (confirm === "confirm") {
const resp = await $.post('/platform/sys/club/clubInfoManage/refreshDo', {
id: this.clickRow.id,
replaceReport: JSON.stringify(this.replaceReport)
})
if(resp.code === 0) {
this.$message.success(resp.msg)
this.refreshDialogVisible = false
this.doSearch()
}
}
},
uploadRefreshReport(row) {
this.clickRow = row
this.replaceReport = []
this.refreshDialogVisible = true
},
doSearch() {
this.pageForm.pageNumber = 1
this.pageData()
},
openView(row) {
const {id} = row
this.$refs.guava.view()
this.$nextTick(() => {
this.$refs.info.getInfo(id)
})
},
async pageData() {
const resp = await $.post("/platform/sys/club/clubInfoManage/refreshReportData", this.pageForm);
if (resp.code === 0) {
this.tableData = resp.data.list;
this.pageForm.totalCount = resp.data.totalCount;
} else {
this.$message({
message: data.msg,
type: 'error'
});
}
},
},
async created() {
await this.pageData()
}
})
</script>
<!--#
}
#-->
@@ -0,0 +1,210 @@
<!--#
layout("/layouts/platform.html"){
#-->
<style>
.table_fixed {
table-layout: fixed !important;
}
</style>
<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">&emsp;&emsp;度:</div>
<div class="search-item-option">
<el-date-picker
placeholder="选择年度"
type="year" style="width: 100%"
v-model="pageForm.year"
value-format="yyyy">
</el-date-picker>
</div>
</div>
<div class="search-item">
<div class="search-item-label">社团名称:</div>
<div class="search-item-option">
<el-input @keyup.enter.native="doSearch" clearable placeholder="请输入内容"
clearable
style="width: 100%" v-model="pageForm.name">
</el-input>
</div>
</div>
<div class="search-query">
<el-button @click="doSearch" icon="el-icon-search" type="primary">搜索</el-button>
</div>
</div>
</el-card>
<el-card class="mt10" shadow="never">
<el-table :data="tableData" :size="tableSize">
<el-table-column :index="indexMethod" align="center" header-align="center" label="序号" type="index"
width="80px"></el-table-column>
<el-table-column label="社团名称" prop="name" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="社团类型" prop="typeName" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="申请时间" prop="create_time" sortable align="center" header-align="center"
show-overflow-tooltip>
<template slot-scope="{row}">
<span>{{ moment(row.create_time).format('YYYY-MM-DD') }}</span>
</template>
</el-table-column>
<el-table-column label="成立时间" prop="create_time" sortable align="center" header-align="center"
show-overflow-tooltip>
<template slot-scope="{row}">
<span>{{ moment(row.foundTime).format('YYYY-MM-DD') }}</span>
</template>
</el-table-column>
<el-table-column label="联系人" prop="fzrName" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="发起人" prop="sponsorName" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="社团章程" prop="afterRulesFile" sortable align="center" header-align="center"
show-overflow-tooltip>
<template scope="scope">
<span style="color: #0e78c5; text-decoration: underline; cursor: pointer"
@click="showDoc(scope.row)">{{getFileName(scope.row)}}</span>
</template>
</el-table-column>
<el-table-column label="审核状态" prop="ruleState" sortable align="center" header-align="center"
show-overflow-tooltip>
<template scope="scope">
<span v-if="scope.row.ruleState === 1">待校工会审核</span>
<span v-if="scope.row.ruleState === 2">校工会审核拒绝</span>
<span v-if="scope.row.ruleState === 3">审核通过</span>
</template>
</el-table-column>
<el-table-column label="操作" width="200px">
<template scope="{row}">
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
<el-button @click="uploadRule(row)" size="mini" type="primary">章程修订</el-button>
</template>
</el-table-column>
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
</template>
<template #view>
<club-regist-info ref="info"></club-regist-info>
</template>
</guava>
<el-dialog width="40%" :visible.sync="ruleDialogVisible" title="章程修订">
<file-upload card :files.sync="ruleReport" :max="1" :type="['doc','docx']">
</file-upload>
<span slot="footer" class="dialog-footer">
<el-button @click="ruleDialogVisible = false">取消</el-button>
<el-button type="primary" @click="ruleDo">确定</el-button>
</span>
</el-dialog>
</div>
<script>
let vue = new Vue({
el: '#app',
mixins: [initTableMixins],
components: {
'club-regist-info': httpVueLoader('/components/club/clubRegistInfo.vue'),
},
data() {
return {
pageForm: {
name: ''
},
tableData: [],
ruleDialogVisible: false,
ruleReport: [],
clickRow: {},
}
},
methods: {
showDoc(row) {
if(row.afterRulesFile) {
const file = JSON.parse(row.afterRulesFile)
let pdfStreamUrl = encodeURIComponent(FILE_STREAM_PREVIEW_ADDRESS + '?id=' + file[0].id) //将路径转码
window.open('/assets/platform/plugins/pdfJs/web/viewer.html?file=' + pdfStreamUrl, file[0].filename)
}
},
getFileName(row) {
if(row.afterRulesFile && row.afterRulesFile !== '[]') {
const file = JSON.parse(row.afterRulesFile)
return file[0].filename
} else {
return ''
}
},
async ruleDo() {
const confirm = await this.$confirm('您确定要修订章程吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
if (confirm === "confirm") {
const resp = await $.post('/platform/sys/club/clubInfoManage/ruleDo', {
id: this.clickRow.id,
afterRulesFile: JSON.stringify(this.ruleReport)
})
if(resp.code === 0) {
this.$message.success(resp.msg)
this.ruleDialogVisible = false
this.doSearch()
}
}
},
uploadRule(row) {
/*if(row.afterRulesFile && row.ruleState === 1) {
this.$message.warning('您已上传新的社团章程,待校工会审核')
return
}*/
this.clickRow = row
this.ruleReport = []
this.ruleDialogVisible = true
},
doSearch() {
this.pageForm.pageNumber = 1
this.pageData()
},
openView(row) {
const {id} = row
this.$refs.guava.view()
this.$nextTick(() => {
this.$refs.info.getInfo(id)
})
},
async pageData() {
const resp = await $.post("/platform/sys/club/clubInfoManage/refreshReportData", this.pageForm);
if (resp.code === 0) {
this.tableData = resp.data.list;
this.pageForm.totalCount = resp.data.totalCount;
} else {
this.$message({
message: data.msg,
type: 'error'
});
}
},
},
async created() {
await this.pageData()
}
})
</script>
<!--#
}
#-->
@@ -0,0 +1,220 @@
<!--#
layout("/layouts/platform.html"){
#-->
<style>
.table_fixed {
table-layout: fixed !important;
}
</style>
<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">&emsp;&emsp;度:</div>
<div class="search-item-option">
<el-date-picker
placeholder="选择年度"
type="year" style="width: 100%"
v-model="pageForm.year"
value-format="yyyy">
</el-date-picker>
</div>
</div>
<div class="search-item">
<div class="search-item-label">社团名称:</div>
<div class="search-item-option">
<el-input @keyup.enter.native="doSearch" clearable placeholder="请输入内容"
clearable
style="width: 100%" v-model="pageForm.name">
</el-input>
</div>
</div>
<div class="search-query">
<el-button @click="doSearch" icon="el-icon-search" type="primary">搜索</el-button>
</div>
</div>
</el-card>
<el-card class="mt10" shadow="never">
<el-table :data="tableData" :size="tableSize">
<el-table-column :index="indexMethod" align="center" header-align="center" label="序号" type="index"
width="80px"></el-table-column>
<el-table-column label="社团名称" prop="name" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="社团类型" prop="typeName" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="申请时间" prop="create_time" sortable align="center" header-align="center"
show-overflow-tooltip>
<template slot-scope="{row}">
<span>{{ moment(row.create_time).format('YYYY-MM-DD') }}</span>
</template>
</el-table-column>
<el-table-column label="成立时间" prop="create_time" sortable align="center" header-align="center"
show-overflow-tooltip>
<template slot-scope="{row}">
<span>{{ moment(row.foundTime).format('YYYY-MM-DD') }}</span>
</template>
</el-table-column>
<el-table-column label="联系人" prop="fzrName" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="发起人" prop="sponsorName" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="社团章程" prop="afterRulesFile" sortable align="center" header-align="center"
show-overflow-tooltip>
<template scope="scope">
<span style="color: #0e78c5; text-decoration: underline; cursor: pointer"
@click="showDoc(scope.row)">{{getFileName(scope.row)}}</span>
</template>
</el-table-column>
<el-table-column label="审核状态" prop="ruleState" sortable align="center" header-align="center"
show-overflow-tooltip>
<template scope="scope">
<span v-if="scope.row.ruleState === 1">待校工会审核</span>
<span v-if="scope.row.ruleState === 2">校工会审核拒绝</span>
<span v-if="scope.row.ruleState === 3">审核通过</span>
</template>
</el-table-column>
<el-table-column label="操作" width="200px">
<template scope="{row}">
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
<el-button @click="audit(row)" size="mini" type="primary">审核</el-button>
</template>
</el-table-column>
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
</template>
<template #view>
<club-regist-info ref="info"></club-regist-info>
</template>
</guava>
<el-dialog width="40%" :visible.sync="dialogVisible" title="校工会审核">
<el-descriptions :column="2" border class="table_fixed">
<el-descriptions-item :span="2" label="旧社团章程">
<file-upload :files.sync="clickRow.rulesFile" view>
</file-upload>
</el-descriptions-item>
<el-descriptions-item label="新社团章程">
<file-upload :files.sync="clickRow.afterRulesFile" view>
</file-upload>
</el-descriptions-item>
</el-descriptions>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false">取消</el-button>
<el-button type="primary" @click="auditDo(false)">拒绝</el-button>
<el-button type="primary" @click="auditDo(true)">通过</el-button>
</span>
</el-dialog>
</div>
<script>
let vue = new Vue({
el: '#app',
mixins: [initTableMixins],
components: {
'club-regist-info': httpVueLoader('/components/club/clubRegistInfo.vue'),
},
data() {
return {
pageForm: {
name: ''
},
tableData: [],
dialogVisible: false,
clickRow: {},
}
},
methods: {
showDoc(row) {
if(row.afterRulesFile) {
const file = JSON.parse(row.afterRulesFile)
let pdfStreamUrl = encodeURIComponent(FILE_STREAM_PREVIEW_ADDRESS + '?id=' + file[0].id) //将路径转码
window.open('/assets/platform/plugins/pdfJs/web/viewer.html?file=' + pdfStreamUrl, file[0].filename)
}
},
getFileName(row) {
if(row.afterRulesFile) {
const file = JSON.parse(row.afterRulesFile)
return file[0].filename
} else {
return ''
}
},
async auditDo(pass) {
const str = pass ? '通过' : '拒绝'
const confirm = await this.$confirm('您确定要审核' + str + '吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
if (confirm === "confirm") {
const resp = await $.post('/platform/sys/club/schoolAuditRule/auditDo', {
id: this.clickRow.id,
pass: pass,
})
if(resp.code === 0) {
this.$message.success(resp.msg)
this.dialogVisible = false
this.doSearch()
}
}
},
audit(row) {
this.clickRow = clone(row)
if(this.clickRow.afterRulesFile) {
this.clickRow.afterRulesFile = JSON.parse(this.clickRow.afterRulesFile)
}
if(this.clickRow.rulesFile) {
this.clickRow.rulesFile = JSON.parse(this.clickRow.rulesFile)
}
this.dialogVisible = true
},
doSearch() {
this.pageForm.pageNumber = 1
this.pageData()
},
openView(row) {
const {id} = row
this.$refs.guava.view()
this.$nextTick(() => {
this.$refs.info.getInfo(id)
})
},
async pageData() {
const resp = await $.post("/platform/sys/club/schoolAuditRule/pageData", this.pageForm);
if (resp.code === 0) {
this.tableData = resp.data.list;
this.pageForm.totalCount = resp.data.totalCount;
} else {
this.$message({
message: data.msg,
type: 'error'
});
}
},
},
async created() {
await this.pageData()
}
})
</script>
<!--#
}
#-->
@@ -0,0 +1,277 @@
<!--#
layout("/layouts/platform.html"){
#-->
<style>
.table_fixed {
table-layout: fixed !important;
}
</style>
<div id="app" v-cloak>
<guava ref="guava">
<el-card shadow="never">
<div class="search">
<div class="search-item">
<div class="search-item-label">&emsp;&emsp;度:</div>
<div class="search-item-option">
<el-date-picker
placeholder="选择年度"
type="year" style="width: 100%"
v-model="pageForm.year"
value-format="yyyy">
</el-date-picker>
</div>
</div>
<div class="search-item">
<div class="search-item-label">社团名称:</div>
<div class="search-item-option">
<el-input @keyup.enter.native="doSearch" clearable placeholder="请输入内容"
clearable
style="width: 100%" v-model="pageForm.name">
</el-input>
</div>
</div>
<div class="search-query">
<el-button @click="doSearch" icon="el-icon-search" type="primary">搜索</el-button>
</div>
</div>
</el-card>
<el-card class="mt10" shadow="never">
<table-tool :app="this" label="申请列表">
<template #func>
<el-radio-group v-model="pageForm.isAudit" @change="doSearch">
<el-radio-button :label="null">全部</el-radio-button>
<el-radio-button :label="true">已确认</el-radio-button>
<el-radio-button :label="false">未确认</el-radio-button>
</el-radio-group>
</template>
</table-tool>
<el-table :data="tableData" :size="tableSize">
<el-table-column :index="indexMethod" align="center" header-align="center" label="序号" type="index"
width="80px"></el-table-column>
<el-table-column label="社团名称" prop="name" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="社团类型" prop="typeName" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="申请时间" prop="create_time" sortable align="center" header-align="center"
show-overflow-tooltip>
<template slot-scope="{row}">
<span>{{ moment(row.create_time).format('YYYY-MM-DD') }}</span>
</template>
</el-table-column>
<el-table-column label="联系人" prop="fzrName" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="发起人" prop="sponsorName" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="状态" prop="stateName" sortable align="center" header-align="center"
show-overflow-tooltip>
<template slot-scope="{row}">
<span :style="'color: ' + row.stateColor">{{ row.stateName }}</span>
</template>
</el-table-column>
<el-table-column label="操作" width="300px">
<template scope="{row}">
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
<el-button v-if="[900].includes(row.state)" @click="openAudit(row)" size="mini" type="primary">确认</el-button>
</template>
</el-table-column>
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
<template #edit>
<club-regist-info ref="info2" :handle="true" label="社团确认" :panes="[2, 3, 4, 5]">
<template #handle>
<vi-title title="确认信息(以下信息如没有调整,请忽略,否则请修改)"></vi-title>
<el-form :model="formData" ref="form" :rules="formRules" label-position="right"
style="padding: 20px 0"
label-width="150px">
<el-row gutter="40">
<el-col :span="24">
<el-form-item label="会费标准" prop="dues_standard">
<el-input placeholder="请填写会费标准" v-model="formData.dues_standard"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="QQ群二维码" prop="QQGroupCode">
<file-upload :files.sync="formData.QQGroupCode" :max="1" :type="['png','jpg', 'jpeg']">
</file-upload>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="微信群二维码" prop="wechatGroupCode">
<file-upload :files.sync="formData.wechatGroupCode" :max="1" :type="['png','jpg', 'jpeg']">
</file-upload>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="申请成立报告" prop="establishReport">
<file-upload :files.sync="formData.establishReport" :max="5" :type="['doc','docx']">
</file-upload>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="社团章程" prop="rulesFile">
<file-upload :files.sync="formData.rulesFile" :max="5" :type="['doc','docx']">
</file-upload>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="经费来源及管理办法" prop="manageFile">
<file-upload :files.sync="formData.manageFile" :max="5" :type="['doc','docx']">
</file-upload>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="年度活动计划" prop="yearPlanFile">
<file-upload :files.sync="formData.yearPlanFile" :max="5" :type="['doc','docx']">
</file-upload>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="其他附件" prop="files">
<file-upload :files.sync="formData.files" :max="5"
:type="['doc','docx','xls','xlsx','pdf','ppt', 'jpg', 'png', 'jpeg']">
<template #el-upload__tip>
<div class="el-upload__tip" slot="tip">其他补充附件,如有请上传</div>
</template>
</file-upload>
</el-form-item>
</el-row>
</el-form>
<div style="float: right;margin: 20px 0">
<el-button type="primary" @click="doReview()">确认</el-button>
</div>
</template>
</club-regist-info>
</template>
<template #view>
<club-regist-info ref="info"></club-regist-info>
</template>
</guava>
</div>
<script>
let vue = new Vue({
el: '#app',
mixins: [initTableMixins],
data() {
return {
pageForm: {
name: '',
isAudit: false,
},
tableData: [],
viewData: {},
}
},
components: {
'club-regist-info': httpVueLoader('/components/club/clubRegistInfo.vue'),
},
methods: {
async doReview() {
await this.$refs["form"].validate(async(valid) => {
if (valid) {
this.formData.QQGroupCode = JSON.stringify(this.formData.QQGroupCode)
this.formData.wechatGroupCode = JSON.stringify(this.formData.wechatGroupCode)
this.formData.establishReport = JSON.stringify(this.formData.establishReport)
this.formData.rulesFile = JSON.stringify(this.formData.rulesFile)
this.formData.manageFile = JSON.stringify(this.formData.manageFile)
this.formData.yearPlanFile = JSON.stringify(this.formData.yearPlanFile)
this.formData.files = JSON.stringify(this.formData.files)
const resp = await $.post('/platform/sys/club/clubConfirm/doReview', this.formData)
if(resp.code === 0) {
await this.pageData()
this.notifySuccess(resp.msg)
this.$refs['guava'].index()
} else {
this.notifyWarning(resp.msg)
}
}
})
},
doSearch() {
this.pageForm.pageNumber = 1
this.pageData()
},
openView(row) {
const {id} = row
this.$refs.guava.view()
this.$nextTick(() => {
this.$refs.info.getInfo(id)
})
},
async openAudit(row) {
this.formData = {
clubId: row.id,
userName: "${@shiro.getPrincipalProperty('username')}",
auditTime: moment().format('YYYY-MM-DD HH:mm:ss'),
auditOpinion: '',
dues_standard: '',
files: [],
establishReport: [],
rulesFile: [],
manageFile: [],
yearPlanFile: [],
}
this.$refs.guava.edit()
this.$nextTick(async () => {
await this.$refs.info2.getInfo(row.id)
this.viewData = this.$refs.info2.viewData
this.formData.dues_standard = this.viewData.dues_standard
if(this.viewData.files) {
this.formData.files = JSON.parse(this.viewData.files)
}
if(this.viewData.establishReport) {
this.formData.establishReport = JSON.parse(this.viewData.establishReport)
}
if(this.viewData.rulesFile) {
this.formData.rulesFile = JSON.parse(this.viewData.rulesFile)
}
if(this.viewData.manageFile) {
this.formData.manageFile = JSON.parse(this.viewData.manageFile)
}
if(this.viewData.yearPlanFile) {
this.formData.yearPlanFile = JSON.parse(this.viewData.yearPlanFile)
}
})
},
async pageData() {
let form = clone(this.pageForm)
if(form.isAudit === null) {
delete form.isAudit
}
const resp = await $.post("/platform/sys/club/clubConfirm/pageData", form);
if (resp.code === 0) {
this.tableData = resp.data.list;
this.pageForm.totalCount = resp.data.totalCount;
} else {
this.$message({
message: resp.msg,
type: 'error'
});
}
},
},
async created() {
await this.pageData()
}
})
</script>
<!--#
}
#-->
@@ -0,0 +1,164 @@
<!--#
layout("/layouts/platform.html"){
#-->
<style>
.table_fixed {
table-layout: fixed !important;
}
</style>
<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">&emsp;&emsp;度:</div>
<div class="search-item-option">
<el-date-picker
placeholder="选择年度"
type="year" style="width: 100%"
v-model="pageForm.year"
value-format="yyyy">
</el-date-picker>
</div>
</div>
<div class="search-item">
<div class="search-item-label">社团名称:</div>
<div class="search-item-option">
<el-input @keyup.enter.native="doSearch" clearable placeholder="请输入内容"
clearable
style="width: 100%" v-model="pageForm.name">
</el-input>
</div>
</div>
<div class="search-query">
<el-button @click="doSearch" icon="el-icon-search" type="primary">搜索</el-button>
</div>
</div>
</el-card>
<el-card class="mt10" shadow="never">
<table-tool :app="this" label="申请列表">
<template #func>
<el-button @click="openAdd" size="medium" type="primary">社团注册</el-button>
</template>
</table-tool>
<el-table :data="tableData" :size="tableSize">
<el-table-column :index="indexMethod" align="center" header-align="center" label="序号" type="index"
width="80px"></el-table-column>
<el-table-column label="社团名称" prop="name" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="社团类型" prop="typeName" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="申请时间" prop="create_time" sortable align="center" header-align="center"
show-overflow-tooltip>
<template slot-scope="{row}">
<span>{{ moment(row.create_time).format('YYYY-MM-DD') }}</span>
</template>
</el-table-column>
<el-table-column label="联系人" prop="fzrName" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="发起人" prop="sponsorName" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="状态" prop="stateName" sortable align="center" header-align="center"
show-overflow-tooltip>
<template slot-scope="{row}">
<span :style="'color: ' + row.stateColor">{{ row.stateName }}</span>
</template>
</el-table-column>
<el-table-column label="操作" width="300px">
<template scope="{row}">
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
<el-button :disabled="![800,820,850,880].includes(row.state)" @click="openEdit(row)" size="mini" type="primary">编辑</el-button>
<el-button v-if="${@shiro.hasRole('sysadmin')} || ${@shiro.hasRole('A06')} || ${@shiro.hasRole('xxhgly')}"
@click="deleteDo(row)" size="mini" type="danger">删除</el-button>
<el-button v-else :disabled="![800,820,850,880].includes(row.state)" @click="deleteDo(row)" size="mini" type="danger">删除</el-button>
</template>
</el-table-column>
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
</template>
<template #view>
<club-regist-info ref="info"></club-regist-info>
</template>
</guava>
</div>
<script>
let vue = new Vue({
el: '#app',
mixins: [initTableMixins],
components: {
'club-regist-info': httpVueLoader('/components/club/clubRegistInfo.vue'),
},
data() {
return {
pageForm: {
name: ''
},
tableData: [],
schoolAudit: false,
}
},
methods: {
doSearch() {
this.pageForm.pageNumber = 1
this.pageData()
},
openAdd() {
sublime.jumpPagePjax('/platform/sys/club/clubRegistApply')
},
openView(row) {
const {id} = row
this.$refs.guava.view()
this.$nextTick(() => {
this.$refs.info.getInfo(id)
})
},
openEdit(row) {
sublime.jumpPagePjax('/platform/sys/club/clubRegistApply?id=' + row.id)
},
async deleteDo(row) {
const confirm = await this.$confirm('此操作将永久删除, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
if (confirm === "confirm") {
const resp = await $.post('/platform/sys/club/clubMyApply/doDelete', {id: row.id})
this.notifySuccess("删除成功")
this.doSearch()
}
},
async pageData() {
const resp = await $.post("/platform/sys/club/clubMyApply/pageData", this.pageForm);
if (resp.code === 0) {
this.tableData = resp.data.list;
this.pageForm.totalCount = resp.data.totalCount;
} else {
this.$message({
message: resp.msg,
type: 'error'
});
}
},
},
async created() {
await this.pageData()
}
})
</script>
<!--#
}
#-->
@@ -0,0 +1,576 @@
<!--#
layout("/layouts/platform.html"){
#-->
<style>
.w-e-text-container {
height: 200px !important;
}
</style>
<div id="app" v-cloak>
<guava ref="guava">
<el-card shadow="never">
<div slot="header" class="clearfix">
<h3 style="color: rgb(24, 103, 176);font-family: Microsoft YaHei;">注册社团</h3>
</div>
<el-steps :active="activeName" finish-status="success" align-center>
<el-step title="社团基本信息"></el-step>
<el-step title="社团发起人"></el-step>
<el-step title="社团理事机构"></el-step>
</el-steps>
<div style="margin-top: 10px">
<div v-show="activeName === '1'">
<vi-title title="请填写以下社团信息"></vi-title>
<el-form :model="formData" ref="form" :rules="formRules" label-width="150px" style="padding: 0 30px">
<el-row gutter="30">
<el-col :span="12">
<el-form-item label="社团名称" prop="name">
<el-input maxlength="100" placeholder="请填写社团名称" v-model="formData.name"
type="text"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="社团编码" prop="code">
<el-input placeholder="请填写社团编码" v-model="formData.code"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row gutter="30">
<el-col :span="12">
<el-form-item label="社团类型" prop="type">
<el-select v-model="formData.type" style="width: 100%"
placeholder="请选择社团类型">
<el-option
v-for="item in typeOptions"
:key="item.id"
:label="item.name"
:value="item.code">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="会费标准" prop="dues_standard">
<el-input placeholder="请填写会费标准" v-model="formData.dues_standard"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row gutter="30">
<el-col :span="12">
<el-form-item label="报名联系人" prop="concatPerson">
<el-select
style="width: 100%"
v-model="formData.concatPerson"
filterable
remote
@change="fzrChange"
reserve-keyword
placeholder="请输入姓名或工号查找"
:remote-method="userRemoteMethod"
:loading="userLoading">
<el-option
v-for="item in userOptions"
:key="item.id"
:label="item.username+''+item.loginname+''"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="所属单位" prop="concatPersonUnitName">
<el-input placeholder="此项自动填充" readonly v-model="formData.concatPersonUnitName"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="联系人电话" prop="concatPersonMobile">
<el-input placeholder="请填写联系人电话" v-model="formData.concatPersonMobile"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="联系人邮箱" prop="concatPersonEmail"
:rules="[{ type: 'email', message: '请输入正确的邮箱地址', trigger: ['blur', 'change'] }]">
<el-input placeholder="请填写联系人邮箱" type="email"
v-model="formData.concatPersonEmail"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="社团介绍" prop="stjs">
<div id="stjsEditor"></div>
</el-form-item>
<el-form-item label="社团宗旨" prop="stzz">
<div id="stzzEditor"></div>
</el-form-item>
<el-row gutter="30">
<el-col :span="12">
<el-form-item label="申请成立报告" prop="establishReport">
<file-upload :files.sync="formData.establishReport" :max="5" :type="['doc','docx']">
<template #el-upload__tip>
<div class="el-upload__tip" slot="tip">请上传申请成立报告,格式为word</div>
</template>
</file-upload>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="章程草案" prop="rulesFile">
<file-upload :files.sync="formData.rulesFile" :max="5" :type="['doc','docx']">
<template #el-upload__tip>
<div class="el-upload__tip" slot="tip">请上传章程草案,格式为word</div>
</template>
</file-upload>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="经费来源及管理办法" prop="manageFile">
<file-upload :files.sync="formData.manageFile" :max="5" :type="['doc','docx']">
<template #el-upload__tip>
<div class="el-upload__tip" slot="tip">请上传经费来源及管理办法,格式为word</div>
</template>
</file-upload>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="年度活动计划" prop="yearPlanFile">
<file-upload :files.sync="formData.yearPlanFile" :max="5" :type="['doc','docx']">
<template #el-upload__tip>
<div class="el-upload__tip" slot="tip">请上传年度活动计划,格式为word</div>
</template>
</file-upload>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="其他附件" prop="files" >
<file-upload :files.sync="formData.files" :max="5" :type="['doc','docx','xls','xlsx','pdf','ppt']">
<template #el-upload__tip>
<div class="el-upload__tip" slot="tip">其他补充附件,如有请上传</div>
</template>
</file-upload>
</el-form-item>
</el-form>
</div>
<div v-show="activeName === '2'">
<vi-title title="请填写社团发起人信息"></vi-title>
<el-table :data="sponsorData">
<el-table-column label="姓名" prop="userId">
<template slot-scope="scope">
<el-select
style="width: 100%"
v-model="scope.row.userId"
filterable remote
@change="(val) => { sponsorPersonChange(val, scope.row, scope.$index) }"
reserve-keyword
placeholder="请输入姓名或工号查找"
:remote-method="userRemoteMethod"
:loading="userLoading">
<el-option
v-for="item in userOptions"
:key="item.id"
:label="item.username"
:value="item.id">
</el-option>
</el-select>
</template>
</el-table-column>
<el-table-column label="工号" prop="loginname">
<template slot-scope="scope">
<el-input :value="scope.row.loginname" readonly></el-input>
</template>
</el-table-column>
<el-table-column label="所属单位" prop="unitname">
<template slot-scope="scope">
<el-input :value="scope.row.unitname" readonly></el-input>
</template>
</el-table-column>
<el-table-column label="联系电话" prop="mobile">
<template slot-scope="scope">
<el-input :value="scope.row.mobile" readonly></el-input>
</template>
</el-table-column>
<el-table-column>
<template slot="header" slot-scope="scope">
<el-button type="primary" @click="sponsorData.push({})" size="mini">增加</el-button>
</template>
<template slot-scope="scope">
<el-button type="danger" :disabled="scope.$index <= 4"
@click="sponsorDeleteRow(scope.row, scope.$index)" size="mini">删除</el-button>
</template>
</el-table-column>
</el-table>
</div>
<div v-show="activeName === '3'">
<vi-title title="请填写社团理事机构信息"></vi-title>
<el-table :data="managePerson">
<el-table-column label="职务" prop="roleId">
<template slot-scope="scope">
<el-select @change="(val) => {sfChange(val, scope.row, scope.$index)}"
placeholder="请选择职务" v-model="scope.row.roleId">
<el-option v-for="item in roleList"
:key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select>
</template>
</el-table-column>
<el-table-column label="姓名" prop="userId">
<template slot-scope="scope">
<el-select
style="width: 100%"
v-model="scope.row.userId"
filterable remote
@change="(val) => { managePersonChange(val, scope.row, scope.$index) }"
reserve-keyword
placeholder="请输入姓名或工号查找"
:remote-method="userRemoteMethod"
:loading="userLoading">
<el-option
v-for="item in userOptions"
:key="item.id"
:label="item.username"
:value="item.id">
</el-option>
</el-select>
</template>
</el-table-column>
<el-table-column label="工号" prop="loginname">
<template slot-scope="scope">
<el-input :value="scope.row.loginname" readonly></el-input>
</template>
</el-table-column>
<el-table-column label="所属单位" prop="unitname">
<template slot-scope="scope">
<el-input :value="scope.row.unitname" readonly></el-input>
</template>
</el-table-column>
<el-table-column label="联系电话" prop="mobile">
<template slot-scope="scope">
<el-input :value="scope.row.mobile" readonly></el-input>
</template>
</el-table-column>
<el-table-column>
<template slot="header" slot-scope="scope">
<el-button type="primary" @click="managePerson.push({})" size="mini">增加</el-button>
</template>
<template slot-scope="scope">
<el-button type="danger"
@click="deleteRow(scope.row, scope.$index)" size="mini">删除</el-button>
</template>
</el-table-column>
</el-table>
</div>
</div>
<el-row class="mt20" justify="end" type="flex">
<el-button v-if="GetQueryString('id') !== '' || GetQueryString('from') !== ''" @click="doBack">返回</el-button>
<el-button v-if="activeName === '2'" type="primary" @click="activeName = '1'">上一步</el-button>
<el-button v-if="activeName === '3'" type="primary" @click="activeName = '2'">上一步</el-button>
<el-button v-if="activeName === '1'" type="primary" @click="activeName = '2'">下一步</el-button>
<el-button v-if="activeName === '2'" type="primary" @click="activeName = '3'">下一步</el-button>
<el-button type="primary" @click="doHandle(true)">保存</el-button>
<el-button type="primary" @click="doHandle(false)">提交</el-button>
</el-row>
</el-card>
</guava>
</div>
<script>
const E = window.wangEditor
let stjsEditor, stzzEditor = null
let vue = new Vue({
el: '#app',
mixins: [initTableMixins],
data() {
return {
sponsorData: [
{},
{},
{},
{},
{},
],
activeName: '1',
formData: {
name: ''
},
formRules: {
name: [{required: true, message: '请填写社团名称', trigger: ['blur', 'change']}],
code: [{required: true, message: '请填写社团编码', trigger: ['blur', 'change']}],
type: [{required: true, message: '请选择社团类型', trigger: ['blur', 'change']}],
fzr: [{required: true, message: '请选择社团联系人', trigger: ['blur', 'change']}],
},
typeOptions: [],
userLoading: false,
userOptions: [],
managePerson: [
{roleId: '79b1ecf9d2904393b8a96de599390f39', sf: 1},
{roleId: '9a89861023974fc0a5a1511d6b6c2b8f', sf: 4},
],
roleList: [
{id: '79b1ecf9d2904393b8a96de599390f39', name: '会长', sf: 1},
{id: 'b48539d87c2b43f999604affdfaae44f', name: '副会长', sf: 3},
{id: '9a89861023974fc0a5a1511d6b6c2b8f', name: '秘书长', sf: 4},
{id: 'e63de2a29285445abfaede2f76102621', name: '副秘书长', sf: 5},
],
deleteIds: [],
}
},
components: {
},
methods: {
deleteRow(row, index) {
if (row.id) {
this.deleteIds.push(row.id)
}
this.managePerson.splice(index, 1)
},
sponsorDeleteRow(row, index) {
this.sponsorData.splice(index, 1)
},
sfChange(val, row, index) {
const cloneData = clone(this.managePerson)
cloneData.splice(index, 1)
const u = cloneData.find(o => o.userId && o.userId === row.userId && o.roleId === val)
if (u) {
this.$message.warning('理事机构不能重复')
this.$set(row, 'loginname', '')
this.$set(row, 'unitname', '')
this.$set(row, 'mobile', '')
this.$set(row, 'userId', '')
return
}
const role = this.roleList.find(o => o.id === val)
row.sf = role.sf
},
managePersonChange(val, row, index) {
const cloneData = clone(this.managePerson)
cloneData.splice(index, 1)
const u = cloneData.find(o => val && o.userId === val && o.roleId === row.roleId)
if (u) {
this.$message.warning('理事机构不能重复')
this.$set(row, 'loginname', '')
this.$set(row, 'unitname', '')
this.$set(row, 'mobile', '')
this.$set(row, 'userId', '')
return
}
const user = this.userOptions.find(o => o.id === val)
row.loginname = user.loginname
row.unitname = user.unitname
row.mobile = user.mobile
},
sponsorPersonChange(val, row, index) {
const cloneData = clone(this.sponsorData)
cloneData.splice(index, 1)
const u = cloneData.find(o => o.userId === val)
if (u) {
this.$message.warning('社团发起人不能重复')
row.userId = ''
row.loginname = ''
row.unitname = ''
row.mobile = ''
return
}
const user = this.userOptions.find(o => o.id === val)
row.loginname = user.loginname
row.unitname = user.unitname
row.mobile = user.mobile
},
fzrChange(id) {
const user = this.userOptions.find(v => {
return v.id === id
})
this.$set(this.formData, 'concatPersonUnitName', user.unitname)
this.$set(this.formData, 'concatPersonMobile', user.mobile)
this.$set(this.formData, 'concatPersonEmail', user.email)
},
async userRemoteMethod(query) {
if (query) {
this.userOptions = []
this.userLoading = true
this.userOptions = await searchUser(query)
this.userLoading = false
}
},
doBack() {
if (GetQueryString("id") !== '' && GetQueryString("from") === '') {
sublime.jumpPagePjax('/platform/sys/club/clubMyApply')
}
if (GetQueryString("from") !== '') {
sublime.jumpPagePjax('/platform/sys/club/clubInfoManage')
}
},
async initData() {
const id = GetQueryString("id")
$("#stjsEditor").html("")
$("#stzzEditor").html("")
this.$nextTick(() => {
stjsEditor = new E("#stjsEditor")
stjsEditor.config.onchange = (html) => {
this.formData.stjs = html
}
stjsEditor.create()
stzzEditor = new E("#stzzEditor")
stzzEditor.config.onchange = (html) => {
this.formData.stzz = html
}
stzzEditor.create()
})
this.formData = {}
if (this.$refs["form"])
this.$refs["form"].resetFields()
if(id !== '') {
const resp = await $.get('/platform/sys/club/clubMyApply/findOne', {id})
if (resp.code === 0) {
await this.userRemoteMethod(resp.data.fzrName)
this.formData = resp.data
if(this.formData.files) {
this.formData.files = JSON.parse(this.formData.files)
}
if(this.formData.establishReport) {
this.formData.establishReport = JSON.parse(this.formData.establishReport)
}
if(this.formData.rulesFile) {
this.formData.rulesFile = JSON.parse(this.formData.rulesFile)
}
if(this.formData.manageFile) {
this.formData.manageFile = JSON.parse(this.formData.manageFile)
}
if(this.formData.yearPlanFile) {
this.formData.yearPlanFile = JSON.parse(this.formData.yearPlanFile)
}
resp.data.clubuser = resp.data.clubuser.filter(o => o.sf !== 2)
resp.data.clubuser.forEach(item => {
const role = this.roleList.find(o => o.sf === item.sf)
if (role) {
item.roleId = role.id
item.userId = item.userid
}
})
this.managePerson = clone(resp.data.clubuser)
let users = resp.data.clubuser.map(o => o.userId)
let array = []
if(resp.data.sponsor) {
this.sponsorData = []
array = resp.data.sponsor.split(',')
this.formData.sponsor = array
}
users = [...new Set(users.concat(array))]
this.userOptions = await queryUserByIds(users)
array.forEach(item => {
let row = {}
row.userId = item
this.sponsorPersonChange(item, row)
this.sponsorData.push(row)
})
}
stjsEditor.txt.html(resp.data.stjs ? resp.data.stjs : '')
stzzEditor.txt.html(resp.data.stzz ? resp.data.stzz : '')
}
},
async doHandle(flag) {
try {
let valid = true
if(flag) {
this.$refs.form.validateField('name', errMsg => {
if (errMsg) {
valid = false
}
})
}else {
valid = await this.$refs['form'].validate()
}
if (!valid) return
let hz = this.managePerson.filter(o => o.sf === 1)
if(hz.length !== 1) {
this.$notify.warning({title: '警告', message: '会长需要有1人!'})
return
}
let msz = this.managePerson.filter(o => o.sf === 4)
if(msz.length !== 1) {
this.$notify.warning({title: '警告', message: '秘书长需要有1人!'})
return
}
this.formData.sponsor = this.sponsorData.filter(o => o.userId !== '' && o.userId !== undefined).map(o => o.userId)
if(!flag && this.formData.sponsor && this.formData.sponsor.length < 5) {
this.$notify.warning({title: '警告', message: '发起人要求不少于5人!'})
return
}
let manageValid = false
this.managePerson.forEach(item => {
if(!item.userId) {
manageValid = true
return
}
})
if (!flag && (this.managePerson.length === 0 || manageValid)) {
this.$notify.warning({title: '警告', message: '请填写理事机构信息!'})
return
}
const cloneData = clone(this.formData)
let array = []
if(this.formData.sponsor) {
this.formData.sponsor.forEach(item => {
array.push({
sponsorId: item
})
})
}
cloneData.sponsors = array
const url = GetQueryString("id") !== '' ? '/platform/sys/club/clubRegistApply/doEdit' : '/platform/sys/club/clubRegistApply/doAdd'
const resp = await $.post(url, {
club: JSON.stringify(cloneData),
isSave: flag,
isSchool: false,
managePerson: this.managePerson,
deleteIds: JSON.stringify(this.deleteIds),
})
if (resp.code === 0) {
this.$notify({
title: '成功',
message: resp.msg,
type: 'success',
duration: 500,
onClose: () => {
sublime.jumpPagePjax('/platform/sys/club/clubMyApply')
}
});
}
} catch (e) {
this.$notify.warning({title: '警告', message: '存在必填项未填写!'})
}
}
},
async created() {
this.typeOptions = await getClubType()
setTimeout(() => {
this.initData()
}, 200)
},
})
</script>
<!--#
}
#-->
@@ -0,0 +1,129 @@
<el-tabs v-model="activeName">
<el-tab-pane label="基础信息" name="1">
<vi-title title="社团信息"></vi-title>
<el-descriptions :column="3" border class="table_fixed">
<el-descriptions-item :span="2" label="社团名称">
{{viewData.name}}
</el-descriptions-item>
<el-descriptions-item label="成立时间">
{{viewData.create_time}}
</el-descriptions-item>
<el-descriptions-item label="社团编码">
{{viewData.code}}
</el-descriptions-item>
<el-descriptions-item label="社团类型">
{{viewData.typeName}}
</el-descriptions-item>
<el-descriptions-item label="发起人">
{{viewData.sponsorName}}
</el-descriptions-item>
<el-descriptions-item label="社团联系人">
{{viewData.fzrName}}
</el-descriptions-item>
<el-descriptions-item label="所属单位">
{{viewData.concatPersonUnitName}}
</el-descriptions-item>
<el-descriptions-item label="联系人电话">
{{viewData.concatPersonMobile}}
</el-descriptions-item>
<el-descriptions-item label="联系人邮箱">
{{viewData.concatPersonEmail}}
</el-descriptions-item>
<el-descriptions-item label="申请时间">
{{viewData.create_time}}
</el-descriptions-item>
<el-descriptions-item label="会费标准">
{{viewData.dues_standard}}
</el-descriptions-item>
<el-descriptions-item label="介绍链接">
<span style="cursor: pointer; color: #236eb4"
@click="window.open(viewData.introduce_href.indexOf('http') !== -1 ? viewData.introduce_href : 'https://' + viewData.introduce_href)">{{viewData.introduce_href}}</span>
</el-descriptions-item>
<el-descriptions-item label="限定人数">
{{viewData.number}}
</el-descriptions-item>
<el-descriptions-item label="状态">
{{viewData.stateName}}
</el-descriptions-item>
<el-descriptions-item span="3">
<template slot="label">附件</template>
<file-upload v-if="viewData.files && viewData.files.length > 0"
:files="JSON.parse(viewData.files)"
:view="true"></file-upload>
</el-descriptions-item>
<el-descriptions-item span="3">
<template slot="label">年度计划</template>
<div class="text-left" v-html="viewData.yearPlan"></div>
</el-descriptions-item>
<el-descriptions-item span="3">
<template slot="label">社团介绍</template>
<div class="text-left" v-html="viewData.stjs"></div>
</el-descriptions-item>
<el-descriptions-item span="3">
<template slot="label">社团章程</template>
<div class="text-left" v-html="viewData.stzc"></div>
</el-descriptions-item>
</el-descriptions>
<vi-title title="成员列表" style="margin-top: 20px"></vi-title>
<el-table :data="viewData.clubuser" size="small" border
:header-cell-style="{background:'#F5F5F5',color:'#606266'}">
<el-table-column label="人员身份" width="150px" prop="sf" header-align="center"
align="center">
<template slot-scope="scope">
<el-lable v-if="scope.row.sf==1">会长</el-lable>
<el-lable v-if="scope.row.sf==2">成员</el-lable>
<el-lable v-if="scope.row.sf==3">副会长</el-lable>
<el-lable v-if="scope.row.sf==4">秘书长</el-lable>
<el-lable v-if="scope.row.sf==5">副秘书长</el-lable>
</template>
</el-table-column>
<el-table-column label="工号" width="150px" prop="loginname" header-align="center"
align="center"></el-table-column>
<el-table-column label="姓名" width="150px" prop="username" header-align="center"
align="center"></el-table-column>
<el-table-column label="性别" width="150px" prop="sex" header-align="center"
align="center"></el-table-column>
<el-table-column label="电话" width="150px" prop="mobile" header-align="center"
align="center"></el-table-column>
<el-table-column label="所属单位" prop="unitname" header-align="center" show-overflow-tooltip="true"
align="center"></el-table-column>
</el-table>
</el-tab-pane>
<el-tab-pane name="2" label="校工会审核信息" v-if="viewData.schoolAuditUser">
<el-descriptions :column="2" border class="table_fixed">
<el-descriptions-item label="审核人">
{{viewData.schoolAuditUserName}}
</el-descriptions-item>
<el-descriptions-item label="审核时间">
{{viewData.schoolAuditTime}}
</el-descriptions-item>
<el-descriptions-item label="审核意见">
{{viewData.schoolAuditOpinion}}
</el-descriptions-item>
</el-descriptions>
</el-tab-pane>
<el-tab-pane name="99" label="校工会审核" v-if="schoolAudit === true">
<el-descriptions :column="2" border class="table_fixed">
<el-descriptions-item label="审核人">
{{ '${@shiro.getPrincipalProperty('username')}' }}
</el-descriptions-item>
<el-descriptions-item label="审核时间">
{{ moment().format('YYYY-MM-DD HH:mm:ss') }}
</el-descriptions-item>
<el-descriptions-item label="审核意见">
<el-input type="textarea" v-model="opinion" rows="6" maxlength="500"
placeholder="请填写您的审核意见"></el-input>
</el-descriptions-item>
</el-descriptions>
<el-row style="margin: 40px 0; text-align: right">
<el-button type="danger" @click="doReview(2)">驳回</el-button>
<el-button type="info" @click="doReview(1)">退回修改</el-button>
<el-button type="primary" @click="doReview(3)">通过</el-button>
</el-row>
</el-tab-pane>
</el-tabs>
@@ -0,0 +1,257 @@
<!--#
layout("/layouts/platform.html"){
#-->
<style>
.table_fixed {
table-layout: fixed !important;
}
</style>
<div id="app" v-cloak>
<guava ref="guava">
<el-card shadow="never">
<div class="search">
<div class="search-item">
<div class="search-item-label">&emsp;&emsp;度:</div>
<div class="search-item-option">
<el-date-picker
placeholder="选择年度"
type="year" style="width: 100%"
v-model="pageForm.year"
value-format="yyyy">
</el-date-picker>
</div>
</div>
<div class="search-item">
<div class="search-item-label">社团名称:</div>
<div class="search-item-option">
<el-input @keyup.enter.native="doSearch" clearable placeholder="请输入内容"
clearable
style="width: 100%" v-model="pageForm.name">
</el-input>
</div>
</div>
<div class="search-query">
<el-button @click="doSearch" icon="el-icon-search" type="primary">搜索</el-button>
</div>
</div>
</el-card>
<el-card class="mt10" shadow="never">
<table-tool :app="this" label="申请列表">
<template #func>
<el-radio-group v-model="pageForm.isAudit" @change="doSearch">
<el-radio-button :label="null">全部</el-radio-button>
<el-radio-button :label="true">已批复</el-radio-button>
<el-radio-button :label="false">未批复</el-radio-button>
</el-radio-group>
</template>
</table-tool>
<el-table :data="tableData" :size="tableSize">
<el-table-column :index="indexMethod" align="center" header-align="center" label="序号" type="index"
width="80px"></el-table-column>
<el-table-column label="社团名称" prop="name" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="社团类型" prop="typeName" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="申请时间" prop="create_time" sortable align="center" header-align="center"
show-overflow-tooltip>
<template slot-scope="{row}">
<span>{{ moment(row.create_time).format('YYYY-MM-DD') }}</span>
</template>
</el-table-column>
<el-table-column label="联系人" prop="fzrName" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="发起人" prop="sponsorName" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="状态" prop="stateName" sortable align="center" header-align="center"
show-overflow-tooltip>
<template slot-scope="{row}">
<span :style="'color: ' + row.stateColor">{{ row.stateName }}</span>
</template>
</el-table-column>
<el-table-column label="操作" width="300px">
<template scope="{row}">
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
<el-button v-if="[870].includes(row.state)" @click="openAudit(row)" size="mini" type="primary">批复</el-button>
<el-button v-if="[880, 890, 900].includes(row.state)" @click="rollback(row)" size="mini" type="primary">撤回</el-button>
</template>
</el-table-column>
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
<template #edit>
<club-regist-info ref="info2" :handle="true" label="校工会批复" :panes="[2, 3, 4]">
<template #handle>
<vi-title title="批复信息"></vi-title>
<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" readonly></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="auditTime" label="批复时间">
<el-input v-model="formData.auditTime" readonly></el-input>
</el-form-item>
</el-col>
</el-row>
<!--<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-row :gutter="20">
<el-col :span="12">
<el-form-item prop="foundTime" label="成立时间">
<el-date-picker
v-model="formData.foundTime"
placeholder="成立时间"
style="width: 100%"
type="date"
value-format="yyyy-MM-dd">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="schoolReplyFile" label="批复附件">
<file-upload :files.sync="formData.schoolReplyFile" :max="5" :type="['doc','docx']">
<template #el-upload__tip>
<div class="el-upload__tip" slot="tip">请上传批复附件,格式为word</div>
</template>
</file-upload>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div style="float: right;margin: 20px 0">
<el-button @click="doReview(1)">拒绝</el-button>
<el-button type="danger" @click="doReview(2)">退回修改</el-button>
<el-button type="primary" @click="doReview(3)">通过</el-button>
</div>
</template>
</club-regist-info>
</template>
<template #view>
<club-regist-info ref="info"></club-regist-info>
</template>
</guava>
</div>
<script>
let vue = new Vue({
el: '#app',
mixins: [initTableMixins],
data() {
return {
pageForm: {
name: '',
isAudit: false,
},
tableData: [],
viewData: {},
}
},
components: {
'club-regist-info': httpVueLoader('/components/club/clubRegistInfo.vue'),
},
methods: {
async rollback(row) {
const confirm = await this.$confirm('您确定要撤回吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
if (confirm === "confirm") {
const resp = await $.post('/platform/sys/club/xghReply/rollback', {
id: row.id
})
if(resp.code === 0) {
await this.pageData()
this.notifySuccess(resp.msg)
} else {
this.notifyWarning(resp.msg)
}
}
},
async doReview(flag) {
await this.$refs["form"].validate(async(valid) => {
if (valid) {
this.formData.pass = flag
this.formData.schoolReplyFile = JSON.stringify(this.formData.schoolReplyFile)
const resp = await $.post('/platform/sys/club/xghReply/doReview', this.formData)
if(resp.code === 0) {
await this.pageData()
this.notifySuccess(resp.msg)
this.$refs['guava'].index()
} else {
this.notifyWarning(resp.msg)
}
}
})
},
doSearch() {
this.pageForm.pageNumber = 1
this.pageData()
},
openView(row) {
const {id} = row
this.$refs.guava.view()
this.$nextTick(() => {
this.$refs.info.getInfo(id)
})
},
async openAudit(row) {
this.formData = {
clubId: row.id,
userName: "${@shiro.getPrincipalProperty('username')}",
auditTime: moment().format('YYYY-MM-DD HH:mm:ss'),
auditOpinion: '',
foundTime: moment().format('YYYY-MM-DD'),
}
this.$refs.guava.edit()
this.$nextTick(() => {
this.$refs.info2.getInfo(row.id)
})
},
async pageData() {
let form = clone(this.pageForm)
if(form.isAudit === null) {
delete form.isAudit
}
const resp = await $.post("/platform/sys/club/xghReply/pageData", form);
if (resp.code === 0) {
this.tableData = resp.data.list;
this.pageForm.totalCount = resp.data.totalCount;
} else {
this.$message({
message: resp.msg,
type: 'error'
});
}
},
},
async created() {
await this.pageData()
}
})
</script>
<!--#
}
#-->
@@ -0,0 +1,232 @@
<!--#
layout("/layouts/platform.html"){
#-->
<style>
.table_fixed {
table-layout: fixed !important;
}
</style>
<div id="app" v-cloak>
<guava ref="guava">
<el-card shadow="never">
<div class="search">
<div class="search-item">
<div class="search-item-label">&emsp;&emsp;度:</div>
<div class="search-item-option">
<el-date-picker
placeholder="选择年度"
type="year" style="width: 100%"
v-model="pageForm.year"
value-format="yyyy">
</el-date-picker>
</div>
</div>
<div class="search-item">
<div class="search-item-label">社团名称:</div>
<div class="search-item-option">
<el-input @keyup.enter.native="doSearch" clearable placeholder="请输入内容"
clearable
style="width: 100%" v-model="pageForm.name">
</el-input>
</div>
</div>
<div class="search-query">
<el-button @click="doSearch" icon="el-icon-search" type="primary">搜索</el-button>
</div>
</div>
</el-card>
<el-card class="mt10" shadow="never">
<table-tool :app="this" label="申请列表">
<template #func>
<el-radio-group v-model="pageForm.isAudit" @change="doSearch">
<el-radio-button :label="null">全部</el-radio-button>
<el-radio-button :label="true">已审核</el-radio-button>
<el-radio-button :label="false">未审核</el-radio-button>
</el-radio-group>
</template>
</table-tool>
<el-table :data="tableData" :size="tableSize">
<el-table-column :index="indexMethod" align="center" header-align="center" label="序号" type="index"
width="80px"></el-table-column>
<el-table-column label="社团名称" prop="name" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="社团类型" prop="typeName" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="申请时间" prop="create_time" sortable align="center" header-align="center"
show-overflow-tooltip>
<template slot-scope="{row}">
<span>{{ moment(row.create_time).format('YYYY-MM-DD') }}</span>
</template>
</el-table-column>
<el-table-column label="联系人" prop="fzrName" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="发起人" prop="sponsorName" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="状态" prop="stateName" sortable align="center" header-align="center"
show-overflow-tooltip>
<template slot-scope="{row}">
<span :style="'color: ' + row.stateColor">{{ row.stateName }}</span>
</template>
</el-table-column>
<el-table-column label="操作" width="300px">
<template scope="{row}">
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
<el-button v-if="[840].includes(row.state)" @click="openAudit(row)" size="mini" type="primary">审核</el-button>
<el-button v-if="[850, 860, 870].includes(row.state)" @click="rollback(row)" size="mini" type="primary">撤回</el-button>
</template>
</el-table-column>
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
<template #edit>
<club-regist-info ref="info2" :handle="true" label="分管副主席审核" :panes="[2, 3]">
<template #handle>
<vi-title title="审核信息"></vi-title>
<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" readonly></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="auditTime" label="审核时间">
<el-input v-model="formData.auditTime" readonly></el-input>
</el-form-item>
</el-col>
</el-row>
<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>
<div style="float: right;margin: 20px 0">
<el-button @click="doReview(1)">拒绝</el-button>
<el-button type="danger" @click="doReview(2)">退回修改</el-button>
<el-button type="primary" @click="doReview(3)">通过</el-button>
</div>
</template>
</club-regist-info>
</template>
<template #view>
<club-regist-info ref="info"></club-regist-info>
</template>
</guava>
</div>
<script>
let vue = new Vue({
el: '#app',
mixins: [initTableMixins],
data() {
return {
pageForm: {
name: '',
isAudit: false,
},
tableData: [],
viewData: {},
}
},
components: {
'club-regist-info': httpVueLoader('/components/club/clubRegistInfo.vue'),
},
methods: {
async rollback(row) {
const confirm = await this.$confirm('您确定要撤回吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
if (confirm === "confirm") {
const resp = await $.post('/platform/sys/club/xldAudit/rollback', {
id: row.id
})
if(resp.code === 0) {
await this.pageData()
this.notifySuccess(resp.msg)
} else {
this.notifyWarning(resp.msg)
}
}
},
async doReview(flag) {
await this.$refs["form"].validate(async(valid) => {
if (valid) {
this.formData.pass = flag
const resp = await $.post('/platform/sys/club/xldAudit/doReview', this.formData)
if(resp.code === 0) {
await this.pageData()
this.notifySuccess(resp.msg)
this.$refs['guava'].index()
} else {
this.notifyWarning(resp.msg)
}
}
})
},
doSearch() {
this.pageForm.pageNumber = 1
this.pageData()
},
openView(row) {
const {id} = row
this.$refs.guava.view()
this.$nextTick(() => {
this.$refs.info.getInfo(id)
})
},
async openAudit(row) {
this.formData = {
clubId: row.id,
userName: "${@shiro.getPrincipalProperty('username')}",
auditTime: moment().format('YYYY-MM-DD HH:mm:ss'),
auditOpinion: '',
}
this.$refs.guava.edit()
this.$nextTick(() => {
this.$refs.info2.getInfo(row.id)
})
},
async pageData() {
let form = clone(this.pageForm)
if(form.isAudit === null) {
delete form.isAudit
}
const resp = await $.post("/platform/sys/club/xldAudit/pageData", form);
if (resp.code === 0) {
this.tableData = resp.data.list;
this.pageForm.totalCount = resp.data.totalCount;
} else {
this.$message({
message: resp.msg,
type: 'error'
});
}
},
},
async created() {
await this.pageData()
}
})
</script>
<!--#
}
#-->
@@ -0,0 +1,232 @@
<!--#
layout("/layouts/platform.html"){
#-->
<style>
.table_fixed {
table-layout: fixed !important;
}
</style>
<div id="app" v-cloak>
<guava ref="guava">
<el-card shadow="never">
<div class="search">
<div class="search-item">
<div class="search-item-label">&emsp;&emsp;度:</div>
<div class="search-item-option">
<el-date-picker
placeholder="选择年度"
type="year" style="width: 100%"
v-model="pageForm.year"
value-format="yyyy">
</el-date-picker>
</div>
</div>
<div class="search-item">
<div class="search-item-label">社团名称:</div>
<div class="search-item-option">
<el-input @keyup.enter.native="doSearch" clearable placeholder="请输入内容"
clearable
style="width: 100%" v-model="pageForm.name">
</el-input>
</div>
</div>
<div class="search-query">
<el-button @click="doSearch" icon="el-icon-search" type="primary">搜索</el-button>
</div>
</div>
</el-card>
<el-card class="mt10" shadow="never">
<table-tool :app="this" label="申请列表">
<template #func>
<el-radio-group v-model="pageForm.isAudit" @change="doSearch">
<el-radio-button :label="null">全部</el-radio-button>
<el-radio-button :label="true">已审核</el-radio-button>
<el-radio-button :label="false">未审核</el-radio-button>
</el-radio-group>
</template>
</table-tool>
<el-table :data="tableData" :size="tableSize">
<el-table-column :index="indexMethod" align="center" header-align="center" label="序号" type="index"
width="80px"></el-table-column>
<el-table-column label="社团名称" prop="name" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="社团类型" prop="typeName" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="申请时间" prop="create_time" sortable align="center" header-align="center"
show-overflow-tooltip>
<template slot-scope="{row}">
<span>{{ moment(row.create_time).format('YYYY-MM-DD') }}</span>
</template>
</el-table-column>
<el-table-column label="联系人" prop="fzrName" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="发起人" prop="sponsorName" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="状态" prop="stateName" sortable align="center" header-align="center"
show-overflow-tooltip>
<template slot-scope="{row}">
<span :style="'color: ' + row.stateColor">{{ row.stateName }}</span>
</template>
</el-table-column>
<el-table-column label="操作" width="300px">
<template scope="{row}">
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
<el-button v-if="[810].includes(row.state)" @click="openAudit(row)" size="mini" type="primary">审核</el-button>
<el-button v-if="[820, 830, 840].includes(row.state)" @click="rollback(row)" size="mini" type="primary">撤回</el-button>
</template>
</el-table-column>
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
<template #edit>
<club-regist-info ref="info2" :handle="true" label="宣传与文体办公室审核" :panes="[2]">
<template #handle>
<vi-title title="审核信息"></vi-title>
<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" readonly></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="auditTime" label="审核时间">
<el-input v-model="formData.auditTime" readonly></el-input>
</el-form-item>
</el-col>
</el-row>
<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>
<div style="float: right;margin: 20px 0">
<el-button @click="doReview(1)">拒绝</el-button>
<el-button type="danger" @click="doReview(2)">退回修改</el-button>
<el-button type="primary" @click="doReview(3)">通过</el-button>
</div>
</template>
</club-regist-info>
</template>
<template #view>
<club-regist-info ref="info"></club-regist-info>
</template>
</guava>
</div>
<script>
let vue = new Vue({
el: '#app',
mixins: [initTableMixins],
data() {
return {
pageForm: {
name: '',
isAudit: false,
},
tableData: [],
viewData: {},
}
},
components: {
'club-regist-info': httpVueLoader('/components/club/clubRegistInfo.vue'),
},
methods: {
async rollback(row) {
const confirm = await this.$confirm('您确定要撤回吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
if (confirm === "confirm") {
const resp = await $.post('/platform/sys/club/xtAudit/rollback', {
id: row.id
})
if(resp.code === 0) {
await this.pageData()
this.notifySuccess(resp.msg)
} else {
this.notifyWarning(resp.msg)
}
}
},
async doReview(flag) {
await this.$refs["form"].validate(async(valid) => {
if (valid) {
this.formData.pass = flag
const resp = await $.post('/platform/sys/club/xtAudit/doReview', this.formData)
if(resp.code === 0) {
await this.pageData()
this.notifySuccess(resp.msg)
this.$refs['guava'].index()
} else {
this.notifyWarning(resp.msg)
}
}
})
},
doSearch() {
this.pageForm.pageNumber = 1
this.pageData()
},
openView(row) {
const {id} = row
this.$refs.guava.view()
this.$nextTick(() => {
this.$refs.info.getInfo(id)
})
},
async openAudit(row) {
this.formData = {
clubId: row.id,
userName: "${@shiro.getPrincipalProperty('username')}",
auditTime: moment().format('YYYY-MM-DD HH:mm:ss'),
auditOpinion: '',
}
this.$refs.guava.edit()
this.$nextTick(() => {
this.$refs.info2.getInfo(row.id)
})
},
async pageData() {
let form = clone(this.pageForm)
if(form.isAudit === null) {
delete form.isAudit
}
const resp = await $.post("/platform/sys/club/xtAudit/pageData", form);
if (resp.code === 0) {
this.tableData = resp.data.list;
this.pageForm.totalCount = resp.data.totalCount;
} else {
this.$message({
message: resp.msg,
type: 'error'
});
}
},
},
async created() {
await this.pageData()
}
})
</script>
<!--#
}
#-->
@@ -0,0 +1,352 @@
<!--#
layout("/layouts/platform.html"){
#-->
<style>
.w-e-text-container {
height: 200px !important;
}
input[type="file"] {
display: none
}
</style>
<div id="app" v-cloak>
<el-row class="header navbar bg-white shadow">
<div class="btn-group tool-button mt5">
<el-input @keyup.enter.native="doSearch" clearable placeholder="请输入内容"
v-model="pageForm.searchKeyword">
<el-select placeholder="查询类型" slot="prepend" style="width: 120px;"
v-model="pageForm.searchName">
<el-option label="姓名" value="username"></el-option>
<el-option label="工号" value="loginname"></el-option>
</el-select>
</el-input>
</div>
<div class="btn-group tool-button mt5">
<el-select 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="btn-group tool-button mt5">
<el-button @click="doSearch" icon="el-icon-search" type="primary"></el-button>
</div>
<div class="pull-right offscreen-right mt5">
<el-button @click="openAdd" icon="el-icon-plus">添加成员</el-button>
</div>
</el-row>
<el-row class="el-table-container">
<el-table :data="tableData" @sort-change="pageOrder" row-key="id" 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="loginname"></el-table-column>
<el-table-column align="center" header-align="center" label="姓名"
prop="username"></el-table-column>
<el-table-column align="center" header-align="center" label="性别" prop="sex" sortable
width="150px"></el-table-column>
<el-table-column align="center" header-align="center" label="电话"
prop="mobile"></el-table-column>
<el-table-column align="center" header-align="center" label="所属单位" prop="unitname"
sortable></el-table-column>
<el-table-column align="center" header-align="center" label="是否缴费" prop="isjf" sortable
width="150px">
<template slot-scope="scope">
<el-tooltip content="已缴费" placement="top" v-if="scope.row.isjf">
<i class="fa fa-circle text-success ml5"></i>
</el-tooltip>
<el-tooltip content="未缴费" placement="top" v-else>
<i class="fa fa-circle text-danger ml5"></i>
</el-tooltip>
</template>
</el-table-column>
<el-table-column align="center" header-align="center" label="人员身份" prop="sf">
<template slot-scope="scope">
<el-lable v-if="scope.row.sf==1">负责人</el-lable>
<el-lable v-if="scope.row.sf==2">成员</el-lable>
</template>
</el-table-column>
<el-table-column align="center" header-align="center" label="社团名称"
prop="clubname"></el-table-column>
<el-table-column align="center" fixed="right" header-align="center" label="操作">
<template slot-scope="scope">
<el-dropdown @command="dropdownCommand">
<el-button size="mini">
<i class="ti-settings"></i>
<span class="ti-angle-down"></span>
</el-button>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item :command="{type:'del',data:scope.row}" v-if="scope.row.sf==2">
移出社团
</el-dropdown-item>
<el-dropdown-item :command="{type:'jf',jf:true,data:scope.row}">
已缴费
</el-dropdown-item>
<el-dropdown-item :command="{type:'jf',jf:false,data:scope.row}">
未缴费
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</template>
</el-table-column>
</el-table>
</el-row>
<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-dialog
:close-on-click-modal="false"
:visible.sync="addDialogVisible" title="添加成员" width="40%">
<el-form :model="formData" :rules="formRules" label-width="100px"
ref="addForm">
<el-form-item label="成&emsp;&emsp;员" prop="users">
<el-select
:loading="userLoading"
:remote-method="userRemoteMethod"
filterable
multiple
placeholder="请输入姓名或工号查找"
remote
reserve-keyword
style="width: 100%"
v-model="formData.users">
<el-option
:key="item.id"
:label="item.username+''+item.loginname+''"
:value="item.id"
v-for="item in userOptions">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="是否缴费" prop="isjf">
<el-radio-group v-model="formData.isjf">
<el-radio border label="true">已缴费</el-radio>
<el-radio border label="false">未缴费</el-radio>
</el-radio-group>
</el-form-item>
</el-form>
<span class="dialog-footer" slot="footer">
<el-button @click="addDialogVisible = false">取 消</el-button>
<el-button :disabled="subDis" @click="doAdd" type="primary">确 定</el-button>
</span>
</el-dialog>
</div>
<script>
let vue = new Vue({
el: '#app',
data() {
return {
clubOptions: [],
addDialogVisible: false,
tabloading: false,
formData: {},
tableData: [],
pageForm: {
searchName: "username",
searchKeyword: "",
pageNumber: 1,
pageSize: 10,
totalCount: 0,
pageOrderName: "",
pageOrderBy: ""
},
formRules: {
users: [{required: true, message: '必选', trigger: ['blur', 'change']}],
isjf: [{required: true, message: '必选', trigger: ['blur', 'change']}],
},
subDis: false,
userOptions: [],
userLoading: false,
}
},
methods: {
dropdownCommand: function (command) {
const {type, jf, data} = command
if (type == 'del') {
this.$confirm('确定要将' + data.username + '移出社团吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
callback: (a, b) => {
if ("confirm" == a) {//确认后再执行
$.post(base + "/platform/sys/club/users/delUser", {
clubid: data.clubid,
userid: data.userid,
}, (data) => {
if (data.code == 0) {
this.$message({
message: data.msg,
type: 'success'
});
this.pageData()
} else {
this.$message({
message: data.msg,
type: 'error'
});
}
}, "json");
}
}
});
} else if (type == 'jf') {
$.post(base + "/platform/sys/club/users/jf", {
clubid: data.clubid,
userid: data.userid,
jf: jf
}, (data) => {
if (data.code == 0) {
this.$message({
message: data.msg,
type: 'success'
});
this.pageData()
} else {
this.$message({
message: data.msg,
type: 'error'
});
}
}, "json");
}
},
doAdd() {
this.$refs["addForm"].validate((valid) => {
if (valid) {
const loading = this.$loading({
lock: true,
text: '数据提交中...',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
});
$.post(base + "/platform/sys/club/users/doAddUser", {
clubid: this.pageForm.clubid,
users: JSON.stringify(this.formData.users),
isjf: this.formData.isjf
}, (data) => {
loading.close()
if (data.code == 0) {
this.addDialogVisible = false
this.$message({
message: '添加成功!',
type: 'success'
});
this.pageData()
} else {
this.$message({
message: data.msg,
type: 'error'
});
}
}, "json");
}
});
},
async queryUser(clubid, query) {
const {data} = await $.get("/platform/sys/club/users/queryUser", {clubid, query})
return data
},
async userRemoteMethod(query) {
if (query) {
this.userLoading = true
const arr = await this.queryUser(this.pageForm.clubid, query)
this.userOptions = this.userOptions.filter(v => {
return this.formData.users.includes(v.id)
}).concat(arr.filter(v => {
return !this.formData.users.includes(v.id)
}));
this.userLoading = false
}
},
openAdd() {
this.userOptions = []
this.formData = {isjf: 'true'}
this.addDialogVisible = true;
this.$nextTick(() => {
if (this.$refs['addForm']) {
this.$refs['addForm'].resetFields()
}
})
},
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
$.post(base + "/platform/sys/club/users/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.$set(this.pageForm, "clubid", this.clubOptions.length ? this.clubOptions[0].id : '')
this.pageData();
}
})
</script>
<!--#
}
#-->