first commit

This commit is contained in:
2026-09-09 09:14:28 +08:00
commit 5343198112
5199 changed files with 1052895 additions and 0 deletions
@@ -0,0 +1,277 @@
<!--#
layout("/layouts/platform.html"){
#-->
<style>
.table_fixed {
table-layout: fixed !important;
}
</style>
<div id="app" v-cloak>
<guava ref="guava">
<el-card shadow="never">
<div class="search">
<div class="search-item">
<div class="search-item-label">&emsp;&emsp;度:</div>
<div class="search-item-option">
<el-date-picker
placeholder="选择年度"
type="year" style="width: 100%"
v-model="pageForm.year"
value-format="yyyy">
</el-date-picker>
</div>
</div>
<div class="search-item">
<div class="search-item-label">社团名称:</div>
<div class="search-item-option">
<el-input @keyup.enter.native="doSearch" clearable placeholder="请输入内容"
clearable
style="width: 100%" v-model="pageForm.name">
</el-input>
</div>
</div>
<div class="search-query">
<el-button @click="doSearch" icon="el-icon-search" type="primary">搜索</el-button>
</div>
</div>
</el-card>
<el-card class="mt10" shadow="never">
<table-tool :app="this" label="申请列表">
<template #func>
<el-radio-group v-model="pageForm.isAudit" @change="doSearch">
<el-radio-button :label="null">全部</el-radio-button>
<el-radio-button :label="true">已确认</el-radio-button>
<el-radio-button :label="false">未确认</el-radio-button>
</el-radio-group>
</template>
</table-tool>
<el-table :data="tableData" :size="tableSize">
<el-table-column :index="indexMethod" align="center" header-align="center" label="序号" type="index"
width="80px"></el-table-column>
<el-table-column label="社团名称" prop="name" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="社团类型" prop="typeName" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="申请时间" prop="create_time" sortable align="center" header-align="center"
show-overflow-tooltip>
<template slot-scope="{row}">
<span>{{ moment(row.create_time).format('YYYY-MM-DD') }}</span>
</template>
</el-table-column>
<el-table-column label="联系人" prop="fzrName" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="发起人" prop="sponsorName" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="状态" prop="stateName" sortable align="center" header-align="center"
show-overflow-tooltip>
<template slot-scope="{row}">
<span :style="'color: ' + row.stateColor">{{ row.stateName }}</span>
</template>
</el-table-column>
<el-table-column label="操作" width="300px">
<template scope="{row}">
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
<el-button v-if="[900].includes(row.state)" @click="openAudit(row)" size="mini" type="primary">确认</el-button>
</template>
</el-table-column>
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
<template #edit>
<club-regist-info ref="info2" :handle="true" label="社团确认" :panes="[2, 3, 4, 5]">
<template #handle>
<vi-title title="确认信息(以下信息如没有调整,请忽略,否则请修改)"></vi-title>
<el-form :model="formData" ref="form" :rules="formRules" label-position="right"
style="padding: 20px 0"
label-width="150px">
<el-row gutter="40">
<el-col :span="24">
<el-form-item label="会费标准" prop="dues_standard">
<el-input placeholder="请填写会费标准" v-model="formData.dues_standard"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="QQ群二维码" prop="QQGroupCode">
<file-upload :files.sync="formData.QQGroupCode" :max="1" :type="['png','jpg', 'jpeg']">
</file-upload>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="微信群二维码" prop="wechatGroupCode">
<file-upload :files.sync="formData.wechatGroupCode" :max="1" :type="['png','jpg', 'jpeg']">
</file-upload>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="申请成立报告" prop="establishReport">
<file-upload :files.sync="formData.establishReport" :max="5" :type="['doc','docx']">
</file-upload>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="社团章程" prop="rulesFile">
<file-upload :files.sync="formData.rulesFile" :max="5" :type="['doc','docx']">
</file-upload>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="经费来源及管理办法" prop="manageFile">
<file-upload :files.sync="formData.manageFile" :max="5" :type="['doc','docx']">
</file-upload>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="年度活动计划" prop="yearPlanFile">
<file-upload :files.sync="formData.yearPlanFile" :max="5" :type="['doc','docx']">
</file-upload>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="其他附件" prop="files">
<file-upload :files.sync="formData.files" :max="5"
:type="['doc','docx','xls','xlsx','pdf','ppt', 'jpg', 'png', 'jpeg']">
<template #el-upload__tip>
<div class="el-upload__tip" slot="tip">其他补充附件,如有请上传</div>
</template>
</file-upload>
</el-form-item>
</el-row>
</el-form>
<div style="float: right;margin: 20px 0">
<el-button type="primary" @click="doReview()">确认</el-button>
</div>
</template>
</club-regist-info>
</template>
<template #view>
<club-regist-info ref="info"></club-regist-info>
</template>
</guava>
</div>
<script>
const vue = new Vue({
el: '#app',
mixins: [initTableMixins],
data() {
return {
pageForm: {
name: '',
isAudit: false,
},
tableData: [],
viewData: {},
}
},
components: {
'club-regist-info': httpVueLoader('/components/club/clubRegistInfo.vue'),
},
methods: {
async doReview() {
await this.$refs["form"].validate(async(valid) => {
if (valid) {
this.formData.QQGroupCode = JSON.stringify(this.formData.QQGroupCode)
this.formData.wechatGroupCode = JSON.stringify(this.formData.wechatGroupCode)
this.formData.establishReport = JSON.stringify(this.formData.establishReport)
this.formData.rulesFile = JSON.stringify(this.formData.rulesFile)
this.formData.manageFile = JSON.stringify(this.formData.manageFile)
this.formData.yearPlanFile = JSON.stringify(this.formData.yearPlanFile)
this.formData.files = JSON.stringify(this.formData.files)
const resp = await $.post('/platform/sys/club/clubConfirm/doReview', this.formData)
if(resp.code === 0) {
await this.pageData()
this.notifySuccess(resp.msg)
this.$refs['guava'].index()
} else {
this.notifyWarning(resp.msg)
}
}
})
},
doSearch() {
this.pageForm.pageNumber = 1
this.pageData()
},
openView(row) {
const {id} = row
this.$refs.guava.view()
this.$nextTick(() => {
this.$refs.info.getInfo(id)
})
},
async openAudit(row) {
this.formData = {
clubId: row.id,
userName: "${@shiro.getPrincipalProperty('username')}",
auditTime: moment().format('YYYY-MM-DD HH:mm:ss'),
auditOpinion: '',
dues_standard: '',
files: [],
establishReport: [],
rulesFile: [],
manageFile: [],
yearPlanFile: [],
}
this.$refs.guava.edit()
this.$nextTick(async () => {
await this.$refs.info2.getInfo(row.id)
this.viewData = this.$refs.info2.viewData
this.formData.dues_standard = this.viewData.dues_standard
if(this.viewData.files) {
this.formData.files = JSON.parse(this.viewData.files)
}
if(this.viewData.establishReport) {
this.formData.establishReport = JSON.parse(this.viewData.establishReport)
}
if(this.viewData.rulesFile) {
this.formData.rulesFile = JSON.parse(this.viewData.rulesFile)
}
if(this.viewData.manageFile) {
this.formData.manageFile = JSON.parse(this.viewData.manageFile)
}
if(this.viewData.yearPlanFile) {
this.formData.yearPlanFile = JSON.parse(this.viewData.yearPlanFile)
}
})
},
async pageData() {
let form = clone(this.pageForm)
if(form.isAudit === null) {
delete form.isAudit
}
const resp = await $.post("/platform/sys/club/clubConfirm/pageData", form);
if (resp.code === 0) {
this.tableData = resp.data.list;
this.pageForm.totalCount = resp.data.totalCount;
} else {
this.$message({
message: resp.msg,
type: 'error'
});
}
},
},
async created() {
await this.pageData()
}
})
</script>
<!--#
}
#-->
@@ -0,0 +1,164 @@
<!--#
layout("/layouts/platform.html"){
#-->
<style>
.table_fixed {
table-layout: fixed !important;
}
</style>
<div id="app" v-cloak>
<guava ref="guava">
<template>
<el-card shadow="never">
<div class="search">
<div class="search-item">
<div class="search-item-label">&emsp;&emsp;度:</div>
<div class="search-item-option">
<el-date-picker
placeholder="选择年度"
type="year" style="width: 100%"
v-model="pageForm.year"
value-format="yyyy">
</el-date-picker>
</div>
</div>
<div class="search-item">
<div class="search-item-label">社团名称:</div>
<div class="search-item-option">
<el-input @keyup.enter.native="doSearch" clearable placeholder="请输入内容"
clearable
style="width: 100%" v-model="pageForm.name">
</el-input>
</div>
</div>
<div class="search-query">
<el-button @click="doSearch" icon="el-icon-search" type="primary">搜索</el-button>
</div>
</div>
</el-card>
<el-card class="mt10" shadow="never">
<table-tool :app="this" label="申请列表">
<template #func>
<el-button @click="openAdd" size="medium" type="primary">社团注册</el-button>
</template>
</table-tool>
<el-table :data="tableData" :size="tableSize">
<el-table-column :index="indexMethod" align="center" header-align="center" label="序号" type="index"
width="80px"></el-table-column>
<el-table-column label="社团名称" prop="name" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="社团类型" prop="typeName" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="申请时间" prop="create_time" sortable align="center" header-align="center"
show-overflow-tooltip>
<template slot-scope="{row}">
<span>{{ moment(row.create_time).format('YYYY-MM-DD') }}</span>
</template>
</el-table-column>
<el-table-column label="联系人" prop="fzrName" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="发起人" prop="sponsorName" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="状态" prop="stateName" sortable align="center" header-align="center"
show-overflow-tooltip>
<template slot-scope="{row}">
<span :style="'color: ' + row.stateColor">{{ row.stateName }}</span>
</template>
</el-table-column>
<el-table-column label="操作" width="300px">
<template scope="{row}">
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
<el-button :disabled="![800,820,850,880].includes(row.state)" @click="openEdit(row)" size="mini" type="primary">编辑</el-button>
<el-button v-if="${@shiro.hasRole('sysadmin')} || ${@shiro.hasRole('A06')} || ${@shiro.hasRole('xxhgly')}"
@click="deleteDo(row)" size="mini" type="danger">删除</el-button>
<el-button v-else :disabled="![800,820,850,880].includes(row.state)" @click="deleteDo(row)" size="mini" type="danger">删除</el-button>
</template>
</el-table-column>
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
</template>
<template #view>
<club-regist-info ref="info"></club-regist-info>
</template>
</guava>
</div>
<script>
const vue = new Vue({
el: '#app',
mixins: [initTableMixins],
components: {
'club-regist-info': httpVueLoader('/components/club/clubRegistInfo.vue'),
},
data() {
return {
pageForm: {
name: ''
},
tableData: [],
schoolAudit: false,
}
},
methods: {
doSearch() {
this.pageForm.pageNumber = 1
this.pageData()
},
openAdd() {
sublime.jumpPagePjax('/platform/sys/club/clubRegistApply')
},
openView(row) {
const {id} = row
this.$refs.guava.view()
this.$nextTick(() => {
this.$refs.info.getInfo(id)
})
},
openEdit(row) {
sublime.jumpPagePjax('/platform/sys/club/clubRegistApply?id=' + row.id)
},
async deleteDo(row) {
const confirm = await this.$confirm('此操作将永久删除, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
if (confirm === "confirm") {
const resp = await $.post('/platform/sys/club/clubMyApply/doDelete', {id: row.id})
this.notifySuccess("删除成功")
this.doSearch()
}
},
async pageData() {
const resp = await $.post("/platform/sys/club/clubMyApply/pageData", this.pageForm);
if (resp.code === 0) {
this.tableData = resp.data.list;
this.pageForm.totalCount = resp.data.totalCount;
} else {
this.$message({
message: resp.msg,
type: 'error'
});
}
},
},
async created() {
await this.pageData()
}
})
</script>
<!--#
}
#-->
@@ -0,0 +1,576 @@
<!--#
layout("/layouts/platform.html"){
#-->
<style>
.w-e-text-container {
height: 200px !important;
}
</style>
<div id="app" v-cloak>
<guava ref="guava">
<el-card shadow="never">
<div slot="header" class="clearfix">
<h3 style="color: rgb(24, 103, 176);font-family: Microsoft YaHei;">注册社团</h3>
</div>
<el-steps :active="activeName" finish-status="success" align-center>
<el-step title="社团基本信息"></el-step>
<el-step title="社团发起人"></el-step>
<el-step title="社团理事机构"></el-step>
</el-steps>
<div style="margin-top: 10px">
<div v-show="activeName === '1'">
<vi-title title="请填写以下社团信息"></vi-title>
<el-form :model="formData" ref="form" :rules="formRules" label-width="150px" style="padding: 0 30px">
<el-row gutter="30">
<el-col :span="12">
<el-form-item label="社团名称" prop="name">
<el-input maxlength="100" placeholder="请填写社团名称" v-model="formData.name"
type="text"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="社团编码" prop="code">
<el-input placeholder="请填写社团编码" v-model="formData.code"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row gutter="30">
<el-col :span="12">
<el-form-item label="社团类型" prop="type">
<el-select v-model="formData.type" style="width: 100%"
placeholder="请选择社团类型">
<el-option
v-for="item in typeOptions"
:key="item.id"
:label="item.name"
:value="item.code">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="会费标准" prop="dues_standard">
<el-input placeholder="请填写会费标准" v-model="formData.dues_standard"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row gutter="30">
<el-col :span="12">
<el-form-item label="报名联系人" prop="concatPerson">
<el-select
style="width: 100%"
v-model="formData.concatPerson"
filterable
remote
@change="fzrChange"
reserve-keyword
placeholder="请输入姓名或工号查找"
:remote-method="userRemoteMethod"
:loading="userLoading">
<el-option
v-for="item in userOptions"
:key="item.id"
:label="item.username+''+item.loginname+''"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="所属单位" prop="concatPersonUnitName">
<el-input placeholder="此项自动填充" readonly v-model="formData.concatPersonUnitName"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="联系人电话" prop="concatPersonMobile">
<el-input placeholder="请填写联系人电话" v-model="formData.concatPersonMobile"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="联系人邮箱" prop="concatPersonEmail"
:rules="[{ type: 'email', message: '请输入正确的邮箱地址', trigger: ['blur', 'change'] }]">
<el-input placeholder="请填写联系人邮箱" type="email"
v-model="formData.concatPersonEmail"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="社团介绍" prop="stjs">
<div id="stjsEditor"></div>
</el-form-item>
<el-form-item label="社团宗旨" prop="stzz">
<div id="stzzEditor"></div>
</el-form-item>
<el-row gutter="30">
<el-col :span="12">
<el-form-item label="申请成立报告" prop="establishReport">
<file-upload :files.sync="formData.establishReport" :max="5" :type="['doc','docx']">
<template #el-upload__tip>
<div class="el-upload__tip" slot="tip">请上传申请成立报告,格式为word</div>
</template>
</file-upload>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="章程草案" prop="rulesFile">
<file-upload :files.sync="formData.rulesFile" :max="5" :type="['doc','docx']">
<template #el-upload__tip>
<div class="el-upload__tip" slot="tip">请上传章程草案,格式为word</div>
</template>
</file-upload>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="经费来源及管理办法" prop="manageFile">
<file-upload :files.sync="formData.manageFile" :max="5" :type="['doc','docx']">
<template #el-upload__tip>
<div class="el-upload__tip" slot="tip">请上传经费来源及管理办法,格式为word</div>
</template>
</file-upload>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="年度活动计划" prop="yearPlanFile">
<file-upload :files.sync="formData.yearPlanFile" :max="5" :type="['doc','docx']">
<template #el-upload__tip>
<div class="el-upload__tip" slot="tip">请上传年度活动计划,格式为word</div>
</template>
</file-upload>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="其他附件" prop="files" >
<file-upload :files.sync="formData.files" :max="5" :type="['doc','docx','xls','xlsx','pdf','ppt']">
<template #el-upload__tip>
<div class="el-upload__tip" slot="tip">其他补充附件,如有请上传</div>
</template>
</file-upload>
</el-form-item>
</el-form>
</div>
<div v-show="activeName === '2'">
<vi-title title="请填写社团发起人信息"></vi-title>
<el-table :data="sponsorData">
<el-table-column label="姓名" prop="userId">
<template slot-scope="scope">
<el-select
style="width: 100%"
v-model="scope.row.userId"
filterable remote
@change="(val) => { sponsorPersonChange(val, scope.row, scope.$index) }"
reserve-keyword
placeholder="请输入姓名或工号查找"
:remote-method="userRemoteMethod"
:loading="userLoading">
<el-option
v-for="item in userOptions"
:key="item.id"
:label="item.username"
:value="item.id">
</el-option>
</el-select>
</template>
</el-table-column>
<el-table-column label="工号" prop="loginname">
<template slot-scope="scope">
<el-input :value="scope.row.loginname" readonly></el-input>
</template>
</el-table-column>
<el-table-column label="所属单位" prop="unitname">
<template slot-scope="scope">
<el-input :value="scope.row.unitname" readonly></el-input>
</template>
</el-table-column>
<el-table-column label="联系电话" prop="mobile">
<template slot-scope="scope">
<el-input :value="scope.row.mobile" readonly></el-input>
</template>
</el-table-column>
<el-table-column>
<template slot="header" slot-scope="scope">
<el-button type="primary" @click="sponsorData.push({})" size="mini">增加</el-button>
</template>
<template slot-scope="scope">
<el-button type="danger" :disabled="scope.$index <= 4"
@click="sponsorDeleteRow(scope.row, scope.$index)" size="mini">删除</el-button>
</template>
</el-table-column>
</el-table>
</div>
<div v-show="activeName === '3'">
<vi-title title="请填写社团理事机构信息"></vi-title>
<el-table :data="managePerson">
<el-table-column label="职务" prop="roleId">
<template slot-scope="scope">
<el-select @change="(val) => {sfChange(val, scope.row, scope.$index)}"
placeholder="请选择职务" v-model="scope.row.roleId">
<el-option v-for="item in roleList"
:key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select>
</template>
</el-table-column>
<el-table-column label="姓名" prop="userId">
<template slot-scope="scope">
<el-select
style="width: 100%"
v-model="scope.row.userId"
filterable remote
@change="(val) => { managePersonChange(val, scope.row, scope.$index) }"
reserve-keyword
placeholder="请输入姓名或工号查找"
:remote-method="userRemoteMethod"
:loading="userLoading">
<el-option
v-for="item in userOptions"
:key="item.id"
:label="item.username"
:value="item.id">
</el-option>
</el-select>
</template>
</el-table-column>
<el-table-column label="工号" prop="loginname">
<template slot-scope="scope">
<el-input :value="scope.row.loginname" readonly></el-input>
</template>
</el-table-column>
<el-table-column label="所属单位" prop="unitname">
<template slot-scope="scope">
<el-input :value="scope.row.unitname" readonly></el-input>
</template>
</el-table-column>
<el-table-column label="联系电话" prop="mobile">
<template slot-scope="scope">
<el-input :value="scope.row.mobile" readonly></el-input>
</template>
</el-table-column>
<el-table-column>
<template slot="header" slot-scope="scope">
<el-button type="primary" @click="managePerson.push({})" size="mini">增加</el-button>
</template>
<template slot-scope="scope">
<el-button type="danger" :disabled="scope.$index <= 1"
@click="deleteRow(scope.row, scope.$index)" size="mini">删除</el-button>
</template>
</el-table-column>
</el-table>
</div>
</div>
<el-row class="mt20" justify="end" type="flex">
<el-button v-if="GetQueryString('id') !== '' || GetQueryString('from') !== ''" @click="doBack">返回</el-button>
<el-button v-if="activeName === '2'" type="primary" @click="activeName = '1'">上一步</el-button>
<el-button v-if="activeName === '3'" type="primary" @click="activeName = '2'">上一步</el-button>
<el-button v-if="activeName === '1'" type="primary" @click="activeName = '2'">下一步</el-button>
<el-button v-if="activeName === '2'" type="primary" @click="activeName = '3'">下一步</el-button>
<el-button type="primary" @click="doHandle(true)">保存</el-button>
<el-button type="primary" @click="doHandle(false)">提交</el-button>
</el-row>
</el-card>
</guava>
</div>
<script>
const E = window.wangEditor
let stjsEditor, stzzEditor = null
const vue = new Vue({
el: '#app',
mixins: [initTableMixins],
data() {
return {
sponsorData: [
{},
{},
{},
{},
{},
],
activeName: '1',
formData: {
name: ''
},
formRules: {
name: [{required: true, message: '请填写社团名称', trigger: ['blur', 'change']}],
code: [{required: true, message: '请填写社团编码', trigger: ['blur', 'change']}],
type: [{required: true, message: '请选择社团类型', trigger: ['blur', 'change']}],
fzr: [{required: true, message: '请选择社团联系人', trigger: ['blur', 'change']}],
},
typeOptions: [],
userLoading: false,
userOptions: [],
managePerson: [
{roleId: '79b1ecf9d2904393b8a96de599390f39', sf: 1},
// {roleId: '348b76648efe4383ae675a324945a690', sf: 4},
],
roleList: [
{id: '79b1ecf9d2904393b8a96de599390f39', name: '会长', sf: 1},
{id: '5f10726f24df45459ce3b4b8d9a6c873', name: '副会长', sf: 3},
{id: '348b76648efe4383ae675a324945a690', name: '秘书长', sf: 4},
{id: '1efa41c5852045369c527ec818569608', name: '副秘书长', sf: 5},
],
deleteIds: [],
}
},
components: {
},
methods: {
deleteRow(row, index) {
if (row.id) {
this.deleteIds.push(row.id)
}
this.managePerson.splice(index, 1)
},
sponsorDeleteRow(row, index) {
this.sponsorData.splice(index, 1)
},
sfChange(val, row, index) {
const cloneData = clone(this.managePerson)
cloneData.splice(index, 1)
const u = cloneData.find(o => o.userId && o.userId === row.userId && o.roleId === val)
if (u) {
this.$message.warning('理事机构不能重复')
this.$set(row, 'loginname', '')
this.$set(row, 'unitname', '')
this.$set(row, 'mobile', '')
this.$set(row, 'userId', '')
return
}
const role = this.roleList.find(o => o.id === val)
row.sf = role.sf
},
managePersonChange(val, row, index) {
const cloneData = clone(this.managePerson)
cloneData.splice(index, 1)
const u = cloneData.find(o => val && o.userId === val && o.roleId === row.roleId)
if (u) {
this.$message.warning('理事机构不能重复')
this.$set(row, 'loginname', '')
this.$set(row, 'unitname', '')
this.$set(row, 'mobile', '')
this.$set(row, 'userId', '')
return
}
const user = this.userOptions.find(o => o.id === val)
row.loginname = user.loginname
row.unitname = user.unitname
row.mobile = user.mobile
},
sponsorPersonChange(val, row, index) {
const cloneData = clone(this.sponsorData)
cloneData.splice(index, 1)
const u = cloneData.find(o => o.userId === val)
if (u) {
this.$message.warning('社团发起人不能重复')
row.userId = ''
row.loginname = ''
row.unitname = ''
row.mobile = ''
return
}
const user = this.userOptions.find(o => o.id === val)
row.loginname = user.loginname
row.unitname = user.unitname
row.mobile = user.mobile
},
fzrChange(id) {
const user = this.userOptions.find(v => {
return v.id === id
})
this.$set(this.formData, 'concatPersonUnitName', user.unitname)
this.$set(this.formData, 'concatPersonMobile', user.mobile)
this.$set(this.formData, 'concatPersonEmail', user.email)
},
async userRemoteMethod(query) {
if (query) {
this.userOptions = []
this.userLoading = true
this.userOptions = await searchUser(query)
this.userLoading = false
}
},
doBack() {
if (GetQueryString("id") !== '' && GetQueryString("from") === '') {
sublime.jumpPagePjax('/platform/sys/club/clubMyApply')
}
if (GetQueryString("from") !== '') {
sublime.jumpPagePjax('/platform/sys/club/clubInfoManage')
}
},
async initData() {
const id = GetQueryString("id")
$("#stjsEditor").html("")
$("#stzzEditor").html("")
this.$nextTick(() => {
stjsEditor = new E("#stjsEditor")
stjsEditor.config.onchange = (html) => {
this.formData.stjs = html
}
stjsEditor.create()
stzzEditor = new E("#stzzEditor")
stzzEditor.config.onchange = (html) => {
this.formData.stzz = html
}
stzzEditor.create()
})
this.formData = {}
if (this.$refs["form"])
this.$refs["form"].resetFields()
if(id !== '') {
const resp = await $.get('/platform/sys/club/clubMyApply/findOne', {id})
if (resp.code === 0) {
await this.userRemoteMethod(resp.data.fzrName)
this.formData = resp.data
if(this.formData.files) {
this.formData.files = JSON.parse(this.formData.files)
}
if(this.formData.establishReport) {
this.formData.establishReport = JSON.parse(this.formData.establishReport)
}
if(this.formData.rulesFile) {
this.formData.rulesFile = JSON.parse(this.formData.rulesFile)
}
if(this.formData.manageFile) {
this.formData.manageFile = JSON.parse(this.formData.manageFile)
}
if(this.formData.yearPlanFile) {
this.formData.yearPlanFile = JSON.parse(this.formData.yearPlanFile)
}
resp.data.clubuser = resp.data.clubuser.filter(o => o.sf !== 2)
resp.data.clubuser.forEach(item => {
const role = this.roleList.find(o => o.sf === item.sf)
if (role) {
item.roleId = role.id
item.userId = item.userid
}
})
this.managePerson = clone(resp.data.clubuser)
let users = resp.data.clubuser.map(o => o.userId)
let array = []
if(resp.data.sponsor) {
this.sponsorData = []
array = resp.data.sponsor.split(',')
this.formData.sponsor = array
}
users = [...new Set(users.concat(array))]
this.userOptions = await queryUserByIds(users)
array.forEach(item => {
let row = {}
row.userId = item
this.sponsorPersonChange(item, row)
this.sponsorData.push(row)
})
}
stjsEditor.txt.html(resp.data.stjs ? resp.data.stjs : '')
stzzEditor.txt.html(resp.data.stzz ? resp.data.stzz : '')
}
},
async doHandle(flag) {
try {
let valid = true
if(flag) {
this.$refs.form.validateField('name', errMsg => {
if (errMsg) {
valid = false
}
})
}else {
valid = await this.$refs['form'].validate()
}
if (!valid) return
let hz = this.managePerson.filter(o => o.sf === 1)
if(hz.length !== 1) {
this.$notify.warning({title: '警告', message: '会长需要有1人!'})
return
}
let msz = this.managePerson.filter(o => o.sf === 4)
// if(msz.length !== 1) {
// this.$notify.warning({title: '警告', message: '秘书长需要有1人!'})
// return
// }
this.formData.sponsor = this.sponsorData.filter(o => o.userId !== '' && o.userId !== undefined).map(o => o.userId)
// if(!flag && this.formData.sponsor && this.formData.sponsor.length < 5) {
// this.$notify.warning({title: '警告', message: '发起人要求不少于5人!'})
// return
// }
let manageValid = false
this.managePerson.forEach(item => {
if(!item.userId) {
manageValid = true
return
}
})
if (!flag && (this.managePerson.length === 0 || manageValid)) {
this.$notify.warning({title: '警告', message: '请填写理事机构信息!'})
return
}
const cloneData = clone(this.formData)
let array = []
if(this.formData.sponsor) {
this.formData.sponsor.forEach(item => {
array.push({
sponsorId: item
})
})
}
cloneData.sponsors = array
const url = GetQueryString("id") !== '' ? '/platform/sys/club/clubRegistApply/doEdit' : '/platform/sys/club/clubRegistApply/doAdd'
const resp = await $.post(url, {
club: JSON.stringify(cloneData),
isSave: flag,
isSchool: false,
managePerson: this.managePerson,
deleteIds: JSON.stringify(this.deleteIds),
})
if (resp.code === 0) {
this.$notify({
title: '成功',
message: resp.msg,
type: 'success',
duration: 500,
onClose: () => {
sublime.jumpPagePjax('/platform/sys/club/clubMyApply')
}
});
}
} catch (e) {
this.$notify.warning({title: '警告', message: '存在必填项未填写!'})
}
}
},
async created() {
this.typeOptions = await getClubType()
setTimeout(() => {
this.initData()
}, 200)
},
})
</script>
<!--#
}
#-->
@@ -0,0 +1,129 @@
<el-tabs v-model="activeName">
<el-tab-pane label="基础信息" name="1">
<vi-title title="社团信息"></vi-title>
<el-descriptions :column="3" border class="table_fixed">
<el-descriptions-item :span="2" label="社团名称">
{{viewData.name}}
</el-descriptions-item>
<el-descriptions-item label="成立时间">
{{viewData.create_time}}
</el-descriptions-item>
<el-descriptions-item label="社团编码">
{{viewData.code}}
</el-descriptions-item>
<el-descriptions-item label="社团类型">
{{viewData.typeName}}
</el-descriptions-item>
<el-descriptions-item label="发起人">
{{viewData.sponsorName}}
</el-descriptions-item>
<el-descriptions-item label="社团联系人">
{{viewData.fzrName}}
</el-descriptions-item>
<el-descriptions-item label="所属单位">
{{viewData.concatPersonUnitName}}
</el-descriptions-item>
<el-descriptions-item label="联系人电话">
{{viewData.concatPersonMobile}}
</el-descriptions-item>
<el-descriptions-item label="联系人邮箱">
{{viewData.concatPersonEmail}}
</el-descriptions-item>
<el-descriptions-item label="申请时间">
{{viewData.create_time}}
</el-descriptions-item>
<el-descriptions-item label="会费标准">
{{viewData.dues_standard}}
</el-descriptions-item>
<el-descriptions-item label="介绍链接">
<span style="cursor: pointer; color: #236eb4"
@click="window.open(viewData.introduce_href.indexOf('http') !== -1 ? viewData.introduce_href : 'https://' + viewData.introduce_href)">{{viewData.introduce_href}}</span>
</el-descriptions-item>
<el-descriptions-item label="限定人数">
{{viewData.number}}
</el-descriptions-item>
<el-descriptions-item label="状态">
{{viewData.stateName}}
</el-descriptions-item>
<el-descriptions-item span="3">
<template slot="label">附件</template>
<file-upload v-if="viewData.files && viewData.files.length > 0"
:files="JSON.parse(viewData.files)"
:view="true"></file-upload>
</el-descriptions-item>
<el-descriptions-item span="3">
<template slot="label">年度计划</template>
<div class="text-left" v-html="viewData.yearPlan"></div>
</el-descriptions-item>
<el-descriptions-item span="3">
<template slot="label">社团介绍</template>
<div class="text-left" v-html="viewData.stjs"></div>
</el-descriptions-item>
<el-descriptions-item span="3">
<template slot="label">社团章程</template>
<div class="text-left" v-html="viewData.stzc"></div>
</el-descriptions-item>
</el-descriptions>
<vi-title title="成员列表" style="margin-top: 20px"></vi-title>
<el-table :data="viewData.clubuser" size="small" border
:header-cell-style="{background:'#F5F5F5',color:'#606266'}">
<el-table-column label="人员身份" width="150px" prop="sf" header-align="center"
align="center">
<template slot-scope="scope">
<el-lable v-if="scope.row.sf==1">会长</el-lable>
<el-lable v-if="scope.row.sf==2">成员</el-lable>
<el-lable v-if="scope.row.sf==3">副会长</el-lable>
<el-lable v-if="scope.row.sf==4">秘书长</el-lable>
<el-lable v-if="scope.row.sf==5">副秘书长</el-lable>
</template>
</el-table-column>
<el-table-column label="工号" width="150px" prop="loginname" header-align="center"
align="center"></el-table-column>
<el-table-column label="姓名" width="150px" prop="username" header-align="center"
align="center"></el-table-column>
<el-table-column label="性别" width="150px" prop="sex" header-align="center"
align="center"></el-table-column>
<el-table-column label="电话" width="150px" prop="mobile" header-align="center"
align="center"></el-table-column>
<el-table-column label="所属单位" prop="unitname" header-align="center" show-overflow-tooltip="true"
align="center"></el-table-column>
</el-table>
</el-tab-pane>
<el-tab-pane name="2" label="校工会审核信息" v-if="viewData.schoolAuditUser">
<el-descriptions :column="2" border class="table_fixed">
<el-descriptions-item label="审核人">
{{viewData.schoolAuditUserName}}
</el-descriptions-item>
<el-descriptions-item label="审核时间">
{{viewData.schoolAuditTime}}
</el-descriptions-item>
<el-descriptions-item label="审核意见">
{{viewData.schoolAuditOpinion}}
</el-descriptions-item>
</el-descriptions>
</el-tab-pane>
<el-tab-pane name="99" label="校工会审核" v-if="schoolAudit === true">
<el-descriptions :column="2" border class="table_fixed">
<el-descriptions-item label="审核人">
{{ '${@shiro.getPrincipalProperty('username')}' }}
</el-descriptions-item>
<el-descriptions-item label="审核时间">
{{ moment().format('YYYY-MM-DD HH:mm:ss') }}
</el-descriptions-item>
<el-descriptions-item label="审核意见">
<el-input type="textarea" v-model="opinion" rows="6" maxlength="500"
placeholder="请填写您的审核意见"></el-input>
</el-descriptions-item>
</el-descriptions>
<el-row style="margin: 40px 0; text-align: right">
<el-button type="danger" @click="doReview(2)">驳回</el-button>
<el-button type="info" @click="doReview(1)">退回修改</el-button>
<el-button type="primary" @click="doReview(3)">通过</el-button>
</el-row>
</el-tab-pane>
</el-tabs>
@@ -0,0 +1,257 @@
<!--#
layout("/layouts/platform.html"){
#-->
<style>
.table_fixed {
table-layout: fixed !important;
}
</style>
<div id="app" v-cloak>
<guava ref="guava">
<el-card shadow="never">
<div class="search">
<div class="search-item">
<div class="search-item-label">&emsp;&emsp;度:</div>
<div class="search-item-option">
<el-date-picker
placeholder="选择年度"
type="year" style="width: 100%"
v-model="pageForm.year"
value-format="yyyy">
</el-date-picker>
</div>
</div>
<div class="search-item">
<div class="search-item-label">社团名称:</div>
<div class="search-item-option">
<el-input @keyup.enter.native="doSearch" clearable placeholder="请输入内容"
clearable
style="width: 100%" v-model="pageForm.name">
</el-input>
</div>
</div>
<div class="search-query">
<el-button @click="doSearch" icon="el-icon-search" type="primary">搜索</el-button>
</div>
</div>
</el-card>
<el-card class="mt10" shadow="never">
<table-tool :app="this" label="申请列表">
<template #func>
<el-radio-group v-model="pageForm.isAudit" @change="doSearch">
<el-radio-button :label="null">全部</el-radio-button>
<el-radio-button :label="true">已批复</el-radio-button>
<el-radio-button :label="false">未批复</el-radio-button>
</el-radio-group>
</template>
</table-tool>
<el-table :data="tableData" :size="tableSize">
<el-table-column :index="indexMethod" align="center" header-align="center" label="序号" type="index"
width="80px"></el-table-column>
<el-table-column label="社团名称" prop="name" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="社团类型" prop="typeName" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="申请时间" prop="create_time" sortable align="center" header-align="center"
show-overflow-tooltip>
<template slot-scope="{row}">
<span>{{ moment(row.create_time).format('YYYY-MM-DD') }}</span>
</template>
</el-table-column>
<el-table-column label="联系人" prop="fzrName" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="发起人" prop="sponsorName" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="状态" prop="stateName" sortable align="center" header-align="center"
show-overflow-tooltip>
<template slot-scope="{row}">
<span :style="'color: ' + row.stateColor">{{ row.stateName }}</span>
</template>
</el-table-column>
<el-table-column label="操作" width="300px">
<template scope="{row}">
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
<el-button v-if="[870].includes(row.state)" @click="openAudit(row)" size="mini" type="primary">批复</el-button>
<el-button v-if="[880, 890, 900].includes(row.state)" @click="rollback(row)" size="mini" type="primary">撤回</el-button>
</template>
</el-table-column>
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
<template #edit>
<club-regist-info ref="info2" :handle="true" label="校工会批复" :panes="[2, 3, 4]">
<template #handle>
<vi-title title="批复信息"></vi-title>
<el-form :model="formData" ref="form" :rules="formRules" label-position="right"
style="padding: 20px 0"
label-width="120px">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item prop="userName" label="批复人员">
<el-input v-model="formData.userName" readonly></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="auditTime" label="批复时间">
<el-input v-model="formData.auditTime" readonly></el-input>
</el-form-item>
</el-col>
</el-row>
<!--<el-form-item prop="auditOpinion" label="审核意见">
<el-input type="textarea" v-model="formData.auditOpinion" rows="4" maxlength="500"
placeholder="请填写您的审核意见"></el-input>
</el-form-item>-->
<el-row :gutter="20">
<el-col :span="12">
<el-form-item prop="foundTime" label="成立时间">
<el-date-picker
v-model="formData.foundTime"
placeholder="成立时间"
style="width: 100%"
type="date"
value-format="yyyy-MM-dd">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="schoolReplyFile" label="批复附件">
<file-upload :files.sync="formData.schoolReplyFile" :max="5" :type="['doc','docx']">
<template #el-upload__tip>
<div class="el-upload__tip" slot="tip">请上传批复附件,格式为word</div>
</template>
</file-upload>
</el-form-item>
</el-col>
</el-row>
</el-form>
<div style="float: right;margin: 20px 0">
<el-button @click="doReview(1)">拒绝</el-button>
<el-button type="danger" @click="doReview(2)">退回修改</el-button>
<el-button type="primary" @click="doReview(3)">通过</el-button>
</div>
</template>
</club-regist-info>
</template>
<template #view>
<club-regist-info ref="info"></club-regist-info>
</template>
</guava>
</div>
<script>
const vue = new Vue({
el: '#app',
mixins: [initTableMixins],
data() {
return {
pageForm: {
name: '',
isAudit: false,
},
tableData: [],
viewData: {},
}
},
components: {
'club-regist-info': httpVueLoader('/components/club/clubRegistInfo.vue'),
},
methods: {
async rollback(row) {
const confirm = await this.$confirm('您确定要撤回吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
if (confirm === "confirm") {
const resp = await $.post('/platform/sys/club/xghReply/rollback', {
id: row.id
})
if(resp.code === 0) {
await this.pageData()
this.notifySuccess(resp.msg)
} else {
this.notifyWarning(resp.msg)
}
}
},
async doReview(flag) {
await this.$refs["form"].validate(async(valid) => {
if (valid) {
this.formData.pass = flag
this.formData.schoolReplyFile = JSON.stringify(this.formData.schoolReplyFile)
const resp = await $.post('/platform/sys/club/xghReply/doReview', this.formData)
if(resp.code === 0) {
await this.pageData()
this.notifySuccess(resp.msg)
this.$refs['guava'].index()
} else {
this.notifyWarning(resp.msg)
}
}
})
},
doSearch() {
this.pageForm.pageNumber = 1
this.pageData()
},
openView(row) {
const {id} = row
this.$refs.guava.view()
this.$nextTick(() => {
this.$refs.info.getInfo(id)
})
},
async openAudit(row) {
this.formData = {
clubId: row.id,
userName: "${@shiro.getPrincipalProperty('username')}",
auditTime: moment().format('YYYY-MM-DD HH:mm:ss'),
auditOpinion: '',
foundTime: moment().format('YYYY-MM-DD'),
}
this.$refs.guava.edit()
this.$nextTick(() => {
this.$refs.info2.getInfo(row.id)
})
},
async pageData() {
let form = clone(this.pageForm)
if(form.isAudit === null) {
delete form.isAudit
}
const resp = await $.post("/platform/sys/club/xghReply/pageData", form);
if (resp.code === 0) {
this.tableData = resp.data.list;
this.pageForm.totalCount = resp.data.totalCount;
} else {
this.$message({
message: resp.msg,
type: 'error'
});
}
},
},
async created() {
await this.pageData()
}
})
</script>
<!--#
}
#-->
@@ -0,0 +1,232 @@
<!--#
layout("/layouts/platform.html"){
#-->
<style>
.table_fixed {
table-layout: fixed !important;
}
</style>
<div id="app" v-cloak>
<guava ref="guava">
<el-card shadow="never">
<div class="search">
<div class="search-item">
<div class="search-item-label">&emsp;&emsp;度:</div>
<div class="search-item-option">
<el-date-picker
placeholder="选择年度"
type="year" style="width: 100%"
v-model="pageForm.year"
value-format="yyyy">
</el-date-picker>
</div>
</div>
<div class="search-item">
<div class="search-item-label">社团名称:</div>
<div class="search-item-option">
<el-input @keyup.enter.native="doSearch" clearable placeholder="请输入内容"
clearable
style="width: 100%" v-model="pageForm.name">
</el-input>
</div>
</div>
<div class="search-query">
<el-button @click="doSearch" icon="el-icon-search" type="primary">搜索</el-button>
</div>
</div>
</el-card>
<el-card class="mt10" shadow="never">
<table-tool :app="this" label="申请列表">
<template #func>
<el-radio-group v-model="pageForm.isAudit" @change="doSearch">
<el-radio-button :label="null">全部</el-radio-button>
<el-radio-button :label="true">已审核</el-radio-button>
<el-radio-button :label="false">未审核</el-radio-button>
</el-radio-group>
</template>
</table-tool>
<el-table :data="tableData" :size="tableSize">
<el-table-column :index="indexMethod" align="center" header-align="center" label="序号" type="index"
width="80px"></el-table-column>
<el-table-column label="社团名称" prop="name" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="社团类型" prop="typeName" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="申请时间" prop="create_time" sortable align="center" header-align="center"
show-overflow-tooltip>
<template slot-scope="{row}">
<span>{{ moment(row.create_time).format('YYYY-MM-DD') }}</span>
</template>
</el-table-column>
<el-table-column label="联系人" prop="fzrName" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="发起人" prop="sponsorName" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="状态" prop="stateName" sortable align="center" header-align="center"
show-overflow-tooltip>
<template slot-scope="{row}">
<span :style="'color: ' + row.stateColor">{{ row.stateName }}</span>
</template>
</el-table-column>
<el-table-column label="操作" width="300px">
<template scope="{row}">
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
<el-button v-if="[840].includes(row.state)" @click="openAudit(row)" size="mini" type="primary">审核</el-button>
<el-button v-if="[850, 860, 870].includes(row.state)" @click="rollback(row)" size="mini" type="primary">撤回</el-button>
</template>
</el-table-column>
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
<template #edit>
<club-regist-info ref="info2" :handle="true" label="分管副主席审核" :panes="[2, 3]">
<template #handle>
<vi-title title="审核信息"></vi-title>
<el-form :model="formData" ref="form" :rules="formRules" label-position="right"
style="padding: 20px 0"
label-width="120px">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item prop="userName" label="审核人员">
<el-input v-model="formData.userName" readonly></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="auditTime" label="审核时间">
<el-input v-model="formData.auditTime" readonly></el-input>
</el-form-item>
</el-col>
</el-row>
<el-form-item prop="auditOpinion" label="审核意见">
<el-input type="textarea" v-model="formData.auditOpinion" rows="4" maxlength="500"
placeholder="请填写您的审核意见"></el-input>
</el-form-item>
</el-form>
<div style="float: right;margin: 20px 0">
<el-button @click="doReview(1)">拒绝</el-button>
<el-button type="danger" @click="doReview(2)">退回修改</el-button>
<el-button type="primary" @click="doReview(3)">通过</el-button>
</div>
</template>
</club-regist-info>
</template>
<template #view>
<club-regist-info ref="info"></club-regist-info>
</template>
</guava>
</div>
<script>
const vue = new Vue({
el: '#app',
mixins: [initTableMixins],
data() {
return {
pageForm: {
name: '',
isAudit: false,
},
tableData: [],
viewData: {},
}
},
components: {
'club-regist-info': httpVueLoader('/components/club/clubRegistInfo.vue'),
},
methods: {
async rollback(row) {
const confirm = await this.$confirm('您确定要撤回吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
if (confirm === "confirm") {
const resp = await $.post('/platform/sys/club/xldAudit/rollback', {
id: row.id
})
if(resp.code === 0) {
await this.pageData()
this.notifySuccess(resp.msg)
} else {
this.notifyWarning(resp.msg)
}
}
},
async doReview(flag) {
await this.$refs["form"].validate(async(valid) => {
if (valid) {
this.formData.pass = flag
const resp = await $.post('/platform/sys/club/xldAudit/doReview', this.formData)
if(resp.code === 0) {
await this.pageData()
this.notifySuccess(resp.msg)
this.$refs['guava'].index()
} else {
this.notifyWarning(resp.msg)
}
}
})
},
doSearch() {
this.pageForm.pageNumber = 1
this.pageData()
},
openView(row) {
const {id} = row
this.$refs.guava.view()
this.$nextTick(() => {
this.$refs.info.getInfo(id)
})
},
async openAudit(row) {
this.formData = {
clubId: row.id,
userName: "${@shiro.getPrincipalProperty('username')}",
auditTime: moment().format('YYYY-MM-DD HH:mm:ss'),
auditOpinion: '',
}
this.$refs.guava.edit()
this.$nextTick(() => {
this.$refs.info2.getInfo(row.id)
})
},
async pageData() {
let form = clone(this.pageForm)
if(form.isAudit === null) {
delete form.isAudit
}
const resp = await $.post("/platform/sys/club/xldAudit/pageData", form);
if (resp.code === 0) {
this.tableData = resp.data.list;
this.pageForm.totalCount = resp.data.totalCount;
} else {
this.$message({
message: resp.msg,
type: 'error'
});
}
},
},
async created() {
await this.pageData()
}
})
</script>
<!--#
}
#-->
@@ -0,0 +1,232 @@
<!--#
layout("/layouts/platform.html"){
#-->
<style>
.table_fixed {
table-layout: fixed !important;
}
</style>
<div id="app" v-cloak>
<guava ref="guava">
<el-card shadow="never">
<div class="search">
<div class="search-item">
<div class="search-item-label">&emsp;&emsp;度:</div>
<div class="search-item-option">
<el-date-picker
placeholder="选择年度"
type="year" style="width: 100%"
v-model="pageForm.year"
value-format="yyyy">
</el-date-picker>
</div>
</div>
<div class="search-item">
<div class="search-item-label">社团名称:</div>
<div class="search-item-option">
<el-input @keyup.enter.native="doSearch" clearable placeholder="请输入内容"
clearable
style="width: 100%" v-model="pageForm.name">
</el-input>
</div>
</div>
<div class="search-query">
<el-button @click="doSearch" icon="el-icon-search" type="primary">搜索</el-button>
</div>
</div>
</el-card>
<el-card class="mt10" shadow="never">
<table-tool :app="this" label="申请列表">
<template #func>
<el-radio-group v-model="pageForm.isAudit" @change="doSearch">
<el-radio-button :label="null">全部</el-radio-button>
<el-radio-button :label="true">已审核</el-radio-button>
<el-radio-button :label="false">未审核</el-radio-button>
</el-radio-group>
</template>
</table-tool>
<el-table :data="tableData" :size="tableSize">
<el-table-column :index="indexMethod" align="center" header-align="center" label="序号" type="index"
width="80px"></el-table-column>
<el-table-column label="社团名称" prop="name" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="社团类型" prop="typeName" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="申请时间" prop="create_time" sortable align="center" header-align="center"
show-overflow-tooltip>
<template slot-scope="{row}">
<span>{{ moment(row.create_time).format('YYYY-MM-DD') }}</span>
</template>
</el-table-column>
<el-table-column label="联系人" prop="fzrName" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="发起人" prop="sponsorName" sortable align="center" header-align="center"
show-overflow-tooltip></el-table-column>
<el-table-column label="状态" prop="stateName" sortable align="center" header-align="center"
show-overflow-tooltip>
<template slot-scope="{row}">
<span :style="'color: ' + row.stateColor">{{ row.stateName }}</span>
</template>
</el-table-column>
<el-table-column label="操作" width="300px">
<template scope="{row}">
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
<el-button v-if="[810].includes(row.state)" @click="openAudit(row)" size="mini" type="primary">审核</el-button>
<el-button v-if="[820, 830, 840].includes(row.state)" @click="rollback(row)" size="mini" type="primary">撤回</el-button>
</template>
</el-table-column>
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
<template #edit>
<club-regist-info ref="info2" :handle="true" label="宣传与文体办公室审核" :panes="[2]">
<template #handle>
<vi-title title="审核信息"></vi-title>
<el-form :model="formData" ref="form" :rules="formRules" label-position="right"
style="padding: 20px 0"
label-width="120px">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item prop="userName" label="审核人员">
<el-input v-model="formData.userName" readonly></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="auditTime" label="审核时间">
<el-input v-model="formData.auditTime" readonly></el-input>
</el-form-item>
</el-col>
</el-row>
<el-form-item prop="auditOpinion" label="审核意见">
<el-input type="textarea" v-model="formData.auditOpinion" rows="4" maxlength="500"
placeholder="请填写您的审核意见"></el-input>
</el-form-item>
</el-form>
<div style="float: right;margin: 20px 0">
<el-button @click="doReview(1)">拒绝</el-button>
<el-button type="danger" @click="doReview(2)">退回修改</el-button>
<el-button type="primary" @click="doReview(3)">通过</el-button>
</div>
</template>
</club-regist-info>
</template>
<template #view>
<club-regist-info ref="info"></club-regist-info>
</template>
</guava>
</div>
<script>
const vue = new Vue({
el: '#app',
mixins: [initTableMixins],
data() {
return {
pageForm: {
name: '',
isAudit: false,
},
tableData: [],
viewData: {},
}
},
components: {
'club-regist-info': httpVueLoader('/components/club/clubRegistInfo.vue'),
},
methods: {
async rollback(row) {
const confirm = await this.$confirm('您确定要撤回吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
})
if (confirm === "confirm") {
const resp = await $.post('/platform/sys/club/xtAudit/rollback', {
id: row.id
})
if(resp.code === 0) {
await this.pageData()
this.notifySuccess(resp.msg)
} else {
this.notifyWarning(resp.msg)
}
}
},
async doReview(flag) {
await this.$refs["form"].validate(async(valid) => {
if (valid) {
this.formData.pass = flag
const resp = await $.post('/platform/sys/club/xtAudit/doReview', this.formData)
if(resp.code === 0) {
await this.pageData()
this.notifySuccess(resp.msg)
this.$refs['guava'].index()
} else {
this.notifyWarning(resp.msg)
}
}
})
},
doSearch() {
this.pageForm.pageNumber = 1
this.pageData()
},
openView(row) {
const {id} = row
this.$refs.guava.view()
this.$nextTick(() => {
this.$refs.info.getInfo(id)
})
},
async openAudit(row) {
this.formData = {
clubId: row.id,
userName: "${@shiro.getPrincipalProperty('username')}",
auditTime: moment().format('YYYY-MM-DD HH:mm:ss'),
auditOpinion: '',
}
this.$refs.guava.edit()
this.$nextTick(() => {
this.$refs.info2.getInfo(row.id)
})
},
async pageData() {
let form = clone(this.pageForm)
if(form.isAudit === null) {
delete form.isAudit
}
const resp = await $.post("/platform/sys/club/xtAudit/pageData", form);
if (resp.code === 0) {
this.tableData = resp.data.list;
this.pageForm.totalCount = resp.data.totalCount;
} else {
this.$message({
message: resp.msg,
type: 'error'
});
}
},
},
async created() {
await this.pageData()
}
})
</script>
<!--#
}
#-->