first commit

This commit is contained in:
2026-09-20 15:46:34 +08:00
parent 72fb5eae10
commit e558339dcc
3340 changed files with 671310 additions and 251 deletions
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,142 @@
<!--#
layout("/layouts/platform.html"){
#-->
<style>
.el-table-container {
padding-left: 0px;
margin-top: 5px;
padding-right: 0px;
}
</style>
<div id="app" v-cloak>
<guava>
<div style="padding-right: 10px">
<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-row class="el-table-container" style="padding-top: 0">
<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="协会名称" width="250px"
prop="name"></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>
</el-row>
<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>
</div>
</guava>
</div>
<script>
const vue = new Vue({
el: '#app',
data() {
return {
tableData: [],
pageForm: {
searchKeyword: "",
pageNumber: 1,
pageSize: 10,
totalCount: 0,
searchName: 'club.name',
},
tabLoading: false,
}
},
methods: {
doSearch() {
this.pageForm.pageNumber = 1
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/clubUserCount/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 created() {
this.pageData();
}
})
</script>
<!--#
}
#-->
@@ -0,0 +1,784 @@
<!--#
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="club.name"></el-option>
</el-select>
</el-input>
</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">
<!--#if(@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')){#-->
<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="name" width="300px"></el-table-column>
<el-table-column align="center" header-align="center" label="成立时间" prop="create_time" show-overflow-tooltip
sortable
width="100px"></el-table-column>
<el-table-column align="center" header-align="center" label="主要负责人" prop="fzrname" show-overflow-tooltip
sortable></el-table-column>
<el-table-column align="center" header-align="center" label="负责人单位" prop="fzr_unit_name"
show-overflow-tooltip
sortable></el-table-column>
<el-table-column align="center" header-align="center" label="负责人电话" prop="fzr_mobile"
show-overflow-tooltip></el-table-column>
<el-table-column align="center" header-align="center" label="负责人邮箱" prop="fzr_email"
show-overflow-tooltip></el-table-column>
<el-table-column align="center" header-align="center" label="协会人数" prop="cynum" show-overflow-tooltip
sortable
width="100px"></el-table-column>
<el-table-column align="center" header-align="center" label="状态" prop="isjs" show-overflow-tooltip
sortable
width="100px">
<template slot-scope="scope">
<el-tooltip content="正常" placement="top" v-if="!scope.row.isjs">
<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>
<!--#if(@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')){#-->
<el-table-column align="center" fixed="right" header-align="center" label="操作" width="300px">
<template slot-scope="scope">
<el-button @click="openDetail(scope.row.id)" size="mini">查看</el-button>
<el-button @click="openEdit(scope.row.id)" size="mini" type="primary" v-if="!scope.row.isjs">编辑
</el-button>
<el-button @click="doDelete(scope.row.id)" size="mini" type="danger">删除</el-button>
<el-button @click="doDissolve(scope.row.id)" size="mini" type="danger" v-if="!scope.row.isjs">解散
</el-button>
</template>
</el-table-column>
<!--#}else if(@shiro.hasRole('D02')){#-->
<el-table-column align="center" fixed="right" header-align="center" label="操作" width="200px">
<template slot-scope="scope">
<el-button @click="openDetail(scope.row.id)" size="mini">查看</el-button>
<el-button @click="openEdit(scope.row.id)" size="mini" type="primary" v-if="!scope.row.isjs">编辑
</el-button>
</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="创建协会" top="3%" width="60%">
<el-divider content-position="left"><span style="color: rgb(121, 187, 255)">请填写以下协会信息</span>
</el-divider>
<el-form :model="formData" :rules="formRules" label-position="top" label-width="120px" ref="addForm"
size="small"
style="padding: 0 30px">
<el-row gutter="30">
<el-col :span="12">
<el-form-item label="协会名称" prop="name">
<el-input maxlength="100" placeholder="请输入协会名称" type="text"
v-model="formData.name"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="协会类型" prop="type">
<el-select placeholder="请选择协会类型" style="width: 100%"
v-model="formData.type">
<el-option
:key="item.id"
:label="item.name"
:value="item.code"
v-for="item in typeOptions">
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row gutter="30">
<el-col :span="12">
<el-form-item label="协会负责人" prop="fzr">
<el-select
:loading="userLoading"
:remote-method="userRemoteMethod"
@change="fzrChange"
filterable
placeholder="请输入姓名或工号查找"
remote
reserve-keyword
style="width: 100%"
v-model="formData.fzr">
<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-col>
<el-col :span="12">
<el-form-item label="负责人单位" prop="fzr_unit_name">
<el-input disabled placeholder="" v-model="formData.fzr_unit_name"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row gutter="30">
<el-col :span="12">
<el-form-item label="负责人电话" prop="fzr_mobile">
<el-input placeholder="请填写负责人电话" v-model="formData.fzr_mobile"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item :rules="[
{ type: 'email', message: '请输入正确的邮箱地址', trigger: ['blur', 'change'] }
]" label="负责人邮箱" prop="fzr_email">
<el-input placeholder="请填写负责人邮箱" type="email" v-model="formData.fzr_email"></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="stzc">
<div id="stzcEditor"></div>
</el-form-item>
<el-form-item label="附件上传" prop="accessory">
<el-upload
:auto-upload="false"
:file-list="fileList"
:on-change="handleChange"
:on-remove="handleRemove"
action="**"
limit="1"
name="file"
ref="upload">
<el-button size="small" type="primary">选择文件</el-button>
</el-upload>
</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>
<el-dialog
:close-on-click-modal="false"
:visible.sync="editDialogVisible"
title="修改协会信息" top="3%" width="60%">
<el-divider content-position="left"><span style="color: rgb(121, 187, 255)">请填写以下协会信息</span>
</el-divider>
<el-form :model="formData" :rules="formRules" label-position="top" label-width="120px" ref="editForm"
size="small"
style="padding: 0 30px">
<el-row gutter="30">
<el-col :span="12">
<el-form-item label="协会名称" prop="name">
<el-input maxlength="100" placeholder="请输入协会名称" type="text"
v-model="formData.name"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="协会类型" prop="type">
<el-select placeholder="请选择协会类型" style="width: 100%"
v-model="formData.type">
<el-option
:key="item.id"
:label="item.name"
:value="item.code"
v-for="item in typeOptions">
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row gutter="30">
<el-col :span="12">
<el-form-item disabled label="协会负责人" prop="fzrname">
<el-input disabled placeholder="" v-model="formData.fzrname"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="负责人单位" prop="fzr_unit_name">
<el-input disabled placeholder="" v-model="formData.fzr_unit_name"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row gutter="30">
<el-col :span="12">
<el-form-item label="负责人电话" prop="fzr_mobile">
<el-input placeholder="请填写负责人电话" v-model="formData.fzr_mobile"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item :rules="[
{ type: 'email', message: '请输入正确的邮箱地址', trigger: ['blur', 'change'] }
]" label="负责人邮箱" prop="fzr_email">
<el-input placeholder="请填写负责人邮箱" type="email" v-model="formData.fzr_email"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="协会介绍" prop="stjs">
<div id="stjsEditor2"></div>
</el-form-item>
<el-form-item label="协会章程" prop="stzc">
<div id="stzcEditor2"></div>
</el-form-item>
<el-form-item label="附件上传" prop="accessory">
<el-upload
:auto-upload="false"
:file-list="fileList"
:on-change="handleChange"
:on-exceed="function(files, fileList){
$notify({
title: '警告',
message: '最多可选择一个文件!',
type: 'warning'
});
}"
:on-remove="handleRemove"
action="**"
limit="1"
name="file" ref="upload">
<el-button size="small" type="primary">选择文件</el-button>
</el-upload>
</el-form-item>
</el-form>
<span class="dialog-footer" slot="footer">
<el-button @click="editDialogVisible = false">取 消</el-button>
<el-button :disabled="subDis" @click="doEdit" type="primary">确 定</el-button>
</span>
</el-dialog>
<el-dialog
:close-on-click-modal="false"
:visible.sync="viewDialogVisible"
custom-class="ViewDialogClass" title="详细信息" top="3%" width="60%">
<el-collapse accordion v-model="activeName">
<el-collapse-item name="1" title="协会详细信息">
<table class="tabInfo">
<tr>
<td class="title" colspan="4" style="font-size: 18px;">{{detailData.name}}</td>
</tr>
<tr>
<td class="title">协会负责人</td>
<td class="content">{{detailData.fzrname}}</td>
<td class="title">负责人单位</td>
<td class="content">{{detailData.fzr_unit_name}}</td>
</tr>
<tr>
<td class="title">负责人电话</td>
<td class="content">{{detailData.fzr_mobile}}</td>
<td class="title">负责人邮箱</td>
<td class="content">{{detailData.fzr_email}}</td>
</tr>
<tr>
<td class="title">成立时间</td>
<td class="content">{{detailData.create_time}}</td>
<td class="title">协会人数</td>
<td class="content">{{detailData.cynum}}</td>
</tr>
<tr>
<td class="title" colspan="4">协会介绍</td>
</tr>
<tr>
<td class="content" colspan="4">
<div class="textareaDiv" v-html="detailData.stjs"></div>
</td>
</tr>
<tr>
<td class="title" colspan="4">协会章程</td>
</tr>
<tr>
<td class="content" colspan="4">
<div class="textareaDiv" v-html="detailData.stzc"></div>
</td>
</tr>
</table>
</el-collapse-item>
<el-collapse-item name="2" title="协会成员列表">
<el-table :data="detailData.clubuser" :header-cell-style="{background:'#F5F5F5',color:'#606266'}" border
size="small">
<el-table-column align="center" header-align="center" label="人员身份" prop="sf" width="150px">
<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="loginname"
width="150px"></el-table-column>
<el-table-column align="center" header-align="center" label="姓名" prop="username"
width="150px"></el-table-column>
<el-table-column align="center" header-align="center" label="性别" prop="sex"
width="150px"></el-table-column>
<el-table-column align="center" header-align="center" label="电话" prop="mobile"
width="150px"></el-table-column>
<el-table-column align="center" header-align="center" label="所属单位"
prop="unitname"></el-table-column>
<el-table-column align="center" header-align="center" label="是否缴费" prop="isjf"
width="150px">
<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>
</el-collapse-item>
</el-collapse>
<span class="dialog-footer" slot="footer">
<el-button @click="viewDialogVisible = false">关 闭</el-button>
</span>
</el-dialog>
</div>
<script>
var E = window.wangEditor
const vue = new Vue({
el: '#app',
data() {
return {
activeName: ['1'],
detailData: {clubuser: []},
typeOptions: [],
addDialogVisible: false,
editDialogVisible: false,
viewDialogVisible: false,
tabloading: false,
formData: {},
tableData: [],
pageForm: {
searchName: "club.name",
searchKeyword: "",
pageNumber: 1,
pageSize: 10,
totalCount: 0,
pageOrderName: "",
pageOrderBy: ""
},
formRules: {
name: [{required: true, message: '必填', trigger: ['blur', 'change']}],
type: [{required: false, message: '必填', trigger: ['blur', 'change']}],
fzr: [{required: true, message: '必填', trigger: ['blur', 'change']}],
fzr_unit_name: [{required: true, message: '必填', trigger: ['blur', 'change']}],
fzrname: [{required: true, message: '必填', trigger: ['blur', 'change']}],
},
subDis: false,
userOptions: [],
userLoading: false,
fileList: [],
delFiles: [],
}
},
methods: {
openDetail(id) {
$.get(base + "/platform/sys/club/mange/findOne", {id}, (data) => {
if (data.code == 0) {
this.detailData = data.data
this.activeName = ['1']
this.viewDialogVisible = true
} else {
this.$message({
message: data.msg,
type: 'error'
});
}
}, "json");
},
doDissolve(id) {
this.$confirm('确定要解散该协会吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
callback: (a, b) => {
if ("confirm" == a) {//确认后再执行
$.post(base + "/platform/sys/club/mange/dissolve", {id: id}, (data) => {
if (data.code == 0) {
this.$message({
message: data.msg,
type: 'success'
});
this.pageData();
} else {
this.$message({
message: data.msg,
type: 'error'
});
}
}, "json");
}
}
});
},
doDelete(id) {
this.$confirm('确定要删除该协会吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
callback: (a, b) => {
if ("confirm" == a) {//确认后再执行
$.post(base + "/platform/sys/club/mange/delete", {id: id}, (data) => {
if (data.code == 0) {
this.$message({
message: data.msg,
type: 'success'
});
this.pageData();
} else {
this.$message({
message: data.msg,
type: 'error'
});
}
}, "json");
}
}
});
},
doEdit() {
this.$refs["editForm"].validate((valid) => {
if (valid) {
var formdata = new FormData();
for (let key in this.formData) {
formdata.append(key, this.formData[key] ? this.formData[key] : '');
}
this.fileList.forEach(function (val) {
if (val.status === 'ready') {
formdata.append("files", val.raw, val.raw.name);
}
});
formdata.append("delFiles", this.delFiles)
this.subDis = true
const loading = this.$loading({
lock: true,
text: '数据提交中...',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
});
$.ajax({
url: "/platform/sys/club/mange/doEdit",
type: "post",
data: formdata,
processData: false,
contentType: false,
success: (data) => {
this.subDis = false
loading.close()
if (data.code === 0) {
this.$message({
message: data.msg,
type: 'success'
});
this.pageData();
this.editDialogVisible = false;
} else {
this.$message({
message: data.msg,
type: 'error'
});
}
},
error: data => {
this.subDis = false
loading.close()
this.$message({
message: data.msg,
type: 'error'
});
}
});
}
});
},
openEdit(id) {
this.fileList = []
this.delFiles = []
this.userOptions = []
this.formData = {}
$.get(base + "/platform/sys/club/mange/findOne", {id}, (data) => {
if (data.code == 0) {
this.formData = data.data
//files
data.data.files.forEach(v => {
this.fileList.push({id: v.id, name: v.filename, url: v.filepath, status: 'success'})
})
this.editDialogVisible = true
this.$nextTick(() => {
$("#stjsEditor2").html("")
$("#stzcEditor2").html("")
var stjsEditor = new E("#stjsEditor2")
stjsEditor.config.onchange = (html) => {
this.formData.stjs = html
}
var stzcEditor = new E("#stzcEditor2")
stzcEditor.config.onchange = (html) => {
this.formData.stzc = html
}
stjsEditor.create()
stzcEditor.create()
stjsEditor.txt.html(data.data.stjs)
stzcEditor.txt.html(data.data.stzc)
})
} else {
this.$message({
message: data.msg,
type: 'error'
});
}
}, "json");
},
doAdd() {
this.$refs["addForm"].validate((valid) => {
if (valid) {
var formdata = new FormData();
for (let key in this.formData) {
formdata.append(key, this.formData[key] ? this.formData[key] : '');
}
this.fileList.forEach(function (val) {
formdata.append("files", val.raw, val.raw.name);
});
this.subDis = true
const loading = this.$loading({
lock: true,
text: '数据提交中...',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
});
$.ajax({
url: "/platform/sys/club/mange/doAdd",
type: "post",
data: formdata,
processData: false,
contentType: false,
success: (data) => {
this.subDis = false
loading.close()
if (data.code === 0) {
this.$message({
message: data.msg,
type: 'success'
});
this.pageData();
this.addDialogVisible = false;
} else {
this.$message({
message: data.msg,
type: 'error'
});
}
},
error: data => {
this.subDis = false
loading.close()
this.$message({
message: data.msg,
type: 'error'
});
}
});
}
});
},
handleRemove(file, fileList) {
this.fileList = fileList;
if (file.status === "success") {
this.delFiles.push(file.id);
}
},
handleChange(file, fileList) {
const delFile = () => {
for (let i = 0; i < fileList.length; i++) {
if (file === fileList[i]) {
fileList.splice(i, 1);
}
}
}
if (this.size === 0) {
this.$message.warning("您选择的是空文件!");
delFile()
}
if (!uploadFileType.includes(file.name.split('.')[1])) {
this.$message.warning("文件格式不支持!");
delFile()
}
this.fileList = fileList;
},
fzrChange(id) {
const user = this.userOptions.find(v => {
return v.id == id
})
this.$set(this.formData, 'fzr_unit_name', user.unitname)
this.$set(this.formData, 'fzr_mobile', user.mobile)
this.$set(this.formData, 'fzr_email', user.email)
},
async userRemoteMethod(query) {
if (query) {
this.userOptions = []
this.userLoading = true
this.userOptions = await searchUser(query)
this.userLoading = false
}
},
openAdd() {
this.fileList = []
this.delFiles = []
this.userOptions = []
this.formData = {}
this.addDialogVisible = true;
this.$nextTick(() => {
$("#stjsEditor").html("")
$("#stzcEditor").html("")
var stjsEditor = new E("#stjsEditor")
stjsEditor.config.onchange = (html) => {
this.formData.stjs = html
}
var stzcEditor = new E("#stzcEditor")
stzcEditor.config.onchange = (html) => {
this.formData.stzc = html
}
stjsEditor.create()
stzcEditor.create()
})
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/mange/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 created() {
this.typeOptions = await getClubType()
this.pageData();
}
})
</script>
<!--#
}
#-->
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,251 @@
<!--#
layout("/layouts/platform.html"){
#-->
<div id="app" v-cloak>
<guava>
<div style="padding-right: 10px">
<el-card shadow="never">
<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="u.username"></el-option>
<el-option label="工号" value="u.loginname"></el-option>
</el-select>
</el-input>
</div>
<div class="btn-group tool-button mt5">
<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="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 :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>
<div class="pull-right offscreen-right mt5" style="margin-right: 40px">
<el-radio-group v-model="pageForm.radioType" @change="(val) => doSearch()">
<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>
</el-card>
<el-card class="mt10" shadow="never">
<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="协会名称" 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 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="personType"></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="status">
<template slot-scope="scope">
<el-tag v-if="scope.row.status==1" type="primary">待协会审核</el-tag>
<el-tag v-if="scope.row.status==2" type="danger">协会拒绝</el-tag>
<el-tag v-if="scope.row.status==3" type="primary">待校工会审核</el-tag>
<el-tag v-if="scope.row.status==4" type="danger">校工会拒绝</el-tag>
<el-tag v-if="scope.row.status==5" type="success">审核通过</el-tag>
</template>
</el-table-column>
</el-table>
<el-row class="el-pagination-container">
<el-pagination
:current-page="pageForm.pageNumber"
:page-size="pageForm.pageSize"
:page-sizes="[10, 20, 30, 50]"
:total="pageForm.totalCount"
@current-change="pageNumberChange"
@size-change="pageSizeChange"
layout="total, sizes, prev, pager, next">
</el-pagination>
</el-row>
</el-card>
</div>
</guava>
</div>
<script>
const vue = new Vue({
el: '#app',
data() {
return {
tabKey: '',
multipleSelection: [],
clubOptions: [],
tabloading: false,
formData: {},
tableData: [],
pageForm: {
searchName: "u.username",
searchKeyword: "",
pageNumber: 1,
pageSize: 10,
totalCount: 0,
pageOrderName: "",
pageOrderBy: "",
radioType: 3
},
formRules: {
code: [{required: true, message: '必填', trigger: ['blur', 'change']}],
name: [{required: true, message: '必填', trigger: ['blur', 'change']}],
},
subDis: false,
}
},
methods: {
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
$.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();
}
})
</script>
<!--#
}
#-->
@@ -0,0 +1,265 @@
<!--#
layout("/layouts/platform.html"){
#-->
<div id="app" v-cloak>
<guava>
<div style="padding-right: 10px">
<el-card shadow="never">
<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="u.username"></el-option>
<el-option label="工号" value="u.loginname"></el-option>
</el-select>
</el-input>
</div>
<div class="btn-group tool-button mt5">
<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="btn-group tool-button mt5">
<el-button @click="doSearch" icon="el-icon-search" type="primary"></el-button>
</div>
</el-card>
<el-card class="mt10" shadow="never">
<vi-title2 title="温馨提醒:如下方没有数据,可能是其他理事成员已审核,审核信息请切换已审核查看">
<template #func>
<el-radio-group @change="(val) => doSearch()" style="margin-right: 6px"
v-model="pageForm.applyType">
<el-radio-button :label="1">申请加入</el-radio-button>
<el-radio-button :label="2">申请退会</el-radio-button>
</el-radio-group>
<el-radio-group @change="(val) => doSearch()" style="margin-right: 6px"
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>
<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>
</template>
</vi-title2>
<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" :selectable="(row, index) => {return row.status === 1 || row.exitStatus === 1}"
type="selection"
v-if="pageForm.radioType !== '2'"
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 width="80" align="center" header-align="center" label="性别" prop="sex" 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="personType"></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 v-if="pageForm.applyType === 1" align="center" header-align="center" label="入会状态"
prop="status">
<template slot-scope="scope">
<el-tag type="primary" v-if="scope.row.status==1">待社团审核</el-tag>
<el-tag type="danger" v-if="scope.row.status==2">社团不通过</el-tag>
<el-tag type="primary" v-if="scope.row.status==3">待校工会审核</el-tag>
<el-tag type="danger" v-if="scope.row.status==4">校工会不通过</el-tag>
<el-tag type="success" v-if="scope.row.status==5">审核通过</el-tag>
</template>
</el-table-column>
<el-table-column v-if="pageForm.applyType === 2" align="center" header-align="center" label="退会状态"
prop="exitStatus">
<template slot-scope="scope">
<el-tag type="primary" v-if="scope.row.exitStatus==1">待社团审核</el-tag>
<el-tag type="danger" v-if="scope.row.exitStatus==2">社团不通过</el-tag>
<el-tag type="primary" v-if="scope.row.exitStatus==3">待校工会审核</el-tag>
<el-tag type="danger" v-if="scope.row.exitStatus==4">校工会不通过</el-tag>
<el-tag type="success" v-if="scope.row.exitStatus==5">审核通过</el-tag>
</template>
</el-table-column>
</el-table>
<el-row class="el-pagination-container">
<el-pagination
:current-page="pageForm.pageNumber"
:page-size="pageForm.pageSize"
:page-sizes="[10, 20, 30, 50]"
:total="pageForm.totalCount"
@current-change="pageNumberChange"
@size-change="pageSizeChange"
layout="total, sizes, prev, pager, next">
</el-pagination>
</el-row>
</el-card>
</div>
</guava>
</div>
<script>
const vue = new Vue({
el: '#app',
data() {
return {
tabKey: '',
multipleSelection: [],
clubOptions: [],
tabloading: false,
formData: {},
tableData: [],
pageForm: {
searchName: "u.username",
searchKeyword: "",
pageNumber: 1,
pageSize: 10,
totalCount: 0,
pageOrderName: "",
pageOrderBy: "",
radioType: 3,
applyType: 1,
},
formRules: {
code: [{required: true, message: '必填', trigger: ['blur', 'change']}],
name: [{required: true, message: '必填', trigger: ['blur', 'change']}],
},
subDis: false,
}
},
methods: {
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
}
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: 1,
applyType: this.pageForm.applyType,
}, (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 = 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();
}
})
</script>
<!--#
}
#-->
@@ -0,0 +1,455 @@
<!--#
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: 0px;
}
.el-tabs--card>.el-tabs__header .el-tabs__nav {
border: none;
}
.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;
}
</style>
<div id="app" v-cloak>
<guava>
<transition name="el-zoom-in-center">
<div v-show="v=='index'" style="width: 100%;height: 100%;padding-right: 10px">
<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-row class="el-table-container" style="padding-top: 0">
<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="协会名称" width="250px"
prop="name"></el-table-column>
<el-table-column align="center" sortable header-align="center" label="协会编码" width="100px"
show-overflow-tooltip
prop="code"></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="fzr_mobile"></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="number"></el-table-column>
<el-table-column align="center" sortable header-align="center" label="当前人数"
show-overflow-tooltip
prop="cynum"></el-table-column>
<el-table-column align="center" header-align="center" label="在职人数" show-overflow-tooltip
prop="worknum"></el-table-column>
<el-table-column align="center" header-align="center" label="退休人数" show-overflow-tooltip
prop="outnum"></el-table-column>
<el-table-column align="center" v-if="activeName=='true'" header-align="center" label="入会状态" sortable>
<template slot-scope="scope">
<el-tag v-if="scope.row.status==1" type="primary">待协会审核</el-tag>
<el-tag v-if="scope.row.status==2" type="danger">协会拒绝</el-tag>
<el-tag v-if="scope.row.status==3" type="primary">待校工会审核</el-tag>
<el-tag v-if="scope.row.status==4" type="danger">校工会拒绝</el-tag>
<el-tag v-if="scope.row.status==5" type="success">审核通过</el-tag>
</template>
</el-table-column>
<el-table-column align="center" v-if="activeName=='true'" header-align="center" label="退会状态" sortable>
<template slot-scope="scope">
<el-tag type="primary" v-if="scope.row.exitstatus==1">待社团审核</el-tag>
<el-tag type="danger" v-if="scope.row.exitstatus==2">社团不通过</el-tag>
<el-tag type="primary" v-if="scope.row.exitstatus==3">待校工会审核</el-tag>
<el-tag type="danger" v-if="scope.row.exitstatus==4">校工会不通过</el-tag>
<el-tag type="success" v-if="scope.row.exitstatus==5">审核通过</el-tag>
<el-tag type="success" v-if="!scope.row.exitstatus">暂无</el-tag>
</template>
</el-table-column>
<el-table-column align="center" header-align="center" label="操作" fixed="right" width="250px">
<template slot-scope="scope">
<el-button size="mini" @click="openDetail(scope.row.id)">查看</el-button>
<el-button size="mini" v-if="activeName=='false'" type="primary" @click="doSubmit(scope.row)">
申请加入
</el-button>
<el-button size="mini" v-if="activeName=='true'&&scope.row.status==1" type="danger"
@click="doRevocation(scope.row.id)">
撤销加入申请
</el-button>
<el-button size="mini" v-if="activeName=='true' && scope.row.status==5 && !scope.row.exitstatus" type="primary" @click="exitClub(scope.row)">
申请退会
</el-button>
<el-button size="mini" v-if="activeName=='true' && scope.row.status!=1 && scope.row.exitstatus==1"
type="danger"
@click="cancelExitClub(scope.row.id)">
撤销退会申请
</el-button>
</template>
</el-table-column>
</el-table>
</el-row>
<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>
</div>
</transition>
<transition name="el-zoom-in-center">
<div v-show="v=='view'" style="width: 100%;padding-right: 10px">
<el-card class="box-card v-box" shadow="never">
<div slot="header" class="clearfix">
<el-button icon="el-icon-back" type="text" @click="v='index'" style="font-size: 18px">返回
</el-button>
</div>
<div style="padding: 0 10%;height: calc(100vh - 150px);overflow: auto">
<vi-title title="协会信息"></vi-title>
<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>
<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.fzr_mobile}}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">联系人邮箱</template>
{{detailData.fzr_email}}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">成立时间</template>
{{detailData.create_time}}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">会费标准</template>
{{detailData.dues_standard}}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">介绍链接</template>
<span style="cursor: pointer; color: #236eb4"
@click="window.open(detailData.introduce_href.indexOf('http') !== -1 ? detailData.introduce_href : 'https://' + detailData.introduce_href)">{{detailData.introduce_href}}</span>
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">限定人数</template>
{{detailData.number}}
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">当前人数</template>
{{detailData.cynum}}
</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.stzc"></div>
</el-descriptions-item>
</el-descriptions>
</div>
</el-card>
</div>
</transition>
</guava>
</div>
<script>
const vue = new Vue({
el: '#app',
data() {
return {
v: 'index',
detailData: {},
activeNames: [],
activeName: 'false',
addDialogVisible: false,
tabloading: false,
viewDialogVisible: false,
formData: {},
tableData: [],
pageForm: {
isjr: false,
searchName: "club.name",
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,
hasJoinCount: 0,
noJoinCount: 0,
}
},
methods: {
exitClub(row) {
this.$confirm('您确定要申请退会吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
callback: async (a, b) => {
if ("confirm" === a) {//确认后再执行
const resp = await $.post('/platform/sys/club/sq/exitClub', {id: row.id})
if (resp.code === 0) {
await this.getCount()
this.pageData()
this.$message.success(resp.msg)
} else {
this.$message.warning(resp.msg)
}
}
}
});
},
cancelExitClub(id) {
this.$confirm('您确定要撤销申请吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
callback: async (a, b) => {
if ("confirm" === a) {//确认后再执行
const resp = await $.post('/platform/sys/club/sq/cancelExitClub', {id: id})
if (resp.code === 0) {
await this.getCount()
this.pageData()
this.$message.success(resp.msg)
} else {
this.$message.warning(resp.msg)
}
}
}
});
},
doRevocation(id) {
this.$confirm('是否撤销申请?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
callback: (a, b) => {
if ("confirm" === a) {//确认后再执行
$.post(base + "/platform/sys/club/sq/revocation", {id}, (data) => {
if (data.code === 0) {
this.$message({
message: '撤销申请成功!',
type: 'success'
});
this.pageData();
} else {
this.$message({
message: data.msg,
type: 'error'
});
}
}, "json");
}
}
});
},
async doSubmit(row) {
//当前人数+待审核人数
const num = row.cynum + row.approvalnum
if (num >= row.number) {
const str = '抱歉,该协会限定人数<span style="color: red">' + row.number + '</span>人,' +
'当前人数<span style="color: red">' + row.cynum + '</span>人,' +
'待审核人数<span style="color: red">' + row.approvalnum + '</span>人,名额不足!'
this.$alert(str, '提示', {
dangerouslyUseHTMLString: true,
type: 'warning'
});
return;
}
const {code, data} = await $.post('/platform/sys/club/sq/getInClubByCurUser')
let str = '您还没有参加协会'
if (data && data.length > 0) {
str = '您已经加入了'
data.forEach((item) => {
str += '【' + item.name + '】'
})
}
str += ',请确认是否申请加入【' + row.name + '】?'
this.$confirm(str, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
callback: (a, b) => {
if ("confirm" === a) {//确认后再执行
const id = row.id
$.post(base + "/platform/sys/club/sq/submit", {id}, (data) => {
if (data.code === 0) {
this.$message({
message: '提交申请成功!',
type: 'success'
});
this.pageData();
} else {
this.$message({
message: data.msg,
type: 'error'
});
}
}, "json");
}
}
});
},
openDetail(id) {
$.get(base + "/platform/sys/club/mange/findOne", {id}, (data) => {
if (data.code === 0) {
this.detailData = data.data
this.activeNames = ['1']
this.v = 'view'
this.viewDialogVisible = true
} else {
this.$message({
message: data.msg,
type: 'error'
});
}
}, "json");
},
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
this.tabloading = true
$.post(base + "/platform/sys/club/sq/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 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,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>
const 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>
<!--#
}
#-->