first commit

This commit is contained in:
2026-09-23 09:38:39 +08:00
commit 98a8b8cace
6257 changed files with 1266718 additions and 0 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="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="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,242 @@
<!--#
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 === 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 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="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="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
}
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}, (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,397 @@
<!--#
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" 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>
</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: {
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>
<!--#
}
#-->