first commit
This commit is contained in:
@@ -0,0 +1,16 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app" v-cloak>
|
||||
<el-alert
|
||||
title="对不起,您没有权限访问该页面。"
|
||||
type="error">
|
||||
</el-alert>
|
||||
</div>
|
||||
<script>
|
||||
new Vue({
|
||||
el: "#app"
|
||||
});
|
||||
</script>
|
||||
|
||||
<!--#}#-->
|
||||
@@ -0,0 +1,17 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app" v-cloak>
|
||||
<div style="text-align: center;">
|
||||
<img src="https://el-admin.xin/static/img/404.a57b6f31.png" />
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
new Vue({
|
||||
el: "#app"
|
||||
});
|
||||
</script>
|
||||
<style>
|
||||
|
||||
</style>
|
||||
<!--#}#-->
|
||||
@@ -0,0 +1,16 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app" v-cloak>
|
||||
<el-alert
|
||||
title="对不起,服务器异常,请联系管理员。"
|
||||
type="error">
|
||||
</el-alert>
|
||||
</div>
|
||||
<script>
|
||||
new Vue({
|
||||
el: "#app"
|
||||
});
|
||||
</script>
|
||||
|
||||
<!--#}#-->
|
||||
@@ -0,0 +1,286 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app" v-cloak>
|
||||
<el-row class="header navbar bg-white shadow">
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-button size="medium" @click="openAdd">
|
||||
<i class="ti-plus"></i>
|
||||
新建密钥
|
||||
</el-button>
|
||||
</div>
|
||||
</el-row>
|
||||
<el-row class="el-table-container">
|
||||
<el-table
|
||||
:data="tableData"
|
||||
@sort-change='pageOrder'
|
||||
size="small"
|
||||
header-align="center"
|
||||
style="width: 100%"
|
||||
>
|
||||
<el-table-column
|
||||
sortable
|
||||
prop="name"
|
||||
label="应用名称"
|
||||
header-align="center"
|
||||
align="center"
|
||||
width="120"
|
||||
>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="appid"
|
||||
label="App Id"
|
||||
header-align="center"
|
||||
width="160"
|
||||
>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="appkey"
|
||||
label="App Key"
|
||||
header-align="center"
|
||||
width="320">
|
||||
<template slot-scope="scope">
|
||||
<span v-if="isVisable(scope.row.appid)" class="bg-success">{{scope.row.appkey}}</span><a v-if="!isVisable(scope.row.appid)" @click="visiableData.push(scope.row.appid)" style="padding-left:5px;color: #06C;cursor: pointer;">显示</a><a v-if="isVisable(scope.row.appid)" @click="setNotVisable(scope.row.appid)" style="padding-left:5px;color: #06C;cursor: pointer;">隐藏</a>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
sortable
|
||||
prop="opAt"
|
||||
label="创建时间"
|
||||
header-align="center" align="center">
|
||||
<template slot-scope="scope">
|
||||
{{formatAt(scope.row.opAt)}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
sortable
|
||||
prop="disabled"
|
||||
label="启用状态"
|
||||
header-align="center"
|
||||
align="center"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<i v-if="scope.row.disabled" class="fa fa-circle text-danger ml5"></i>
|
||||
<i v-if="!scope.row.disabled" class="fa fa-circle text-success ml5"></i>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="操作"
|
||||
width="120">
|
||||
<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:'enable',appid:scope.row.appid,name:scope.row.name,row:scope.row}">
|
||||
启用
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item
|
||||
:command="{type:'disable',appid:scope.row.appid,name:scope.row.name,row:scope.row}">
|
||||
禁用
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item divided :command="{type:'delete',appid:scope.row.appid,name:scope.row.name}">
|
||||
删除
|
||||
</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</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, jumper"
|
||||
:total="pageForm.totalCount">
|
||||
</el-pagination>
|
||||
</el-row>
|
||||
<el-dialog
|
||||
title="新建密钥"
|
||||
:visible.sync="addDialogVisible"
|
||||
width="50%">
|
||||
<el-form :model="formData" ref="addForm" :rules="formRules" size="small" label-width="80px">
|
||||
<el-form-item prop="name" label="应用名称">
|
||||
<el-input maxlength="100" placeholder="应用名称"
|
||||
v-model="formData.name"
|
||||
auto-complete="off" tabindex="1" type="text"></el-input>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="addDialogVisible = false">取 消</el-button>
|
||||
<el-button type="primary" @click="doAdd">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
</div>
|
||||
<script>
|
||||
new Vue({
|
||||
el: "#app",
|
||||
data: function () {
|
||||
return {
|
||||
addDialogVisible: false,
|
||||
editDialogVisible: false,
|
||||
visiableData:[],
|
||||
tableData: [],
|
||||
pageForm: {
|
||||
pageNumber: 1,
|
||||
pageSize: 10,
|
||||
totalCount: 0,
|
||||
pageOrderName: "",
|
||||
pageOrderBy: ""
|
||||
},
|
||||
formData: {
|
||||
id: ""
|
||||
},
|
||||
formRules: {
|
||||
name: [
|
||||
{required: true, message: '应用名称', trigger: 'blur'}
|
||||
]
|
||||
},
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
isVisable:function(appid){
|
||||
if(this.visiableData.indexOf(appid)>=0){
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
},
|
||||
setNotVisable:function(appid){
|
||||
var index=this.visiableData.indexOf(appid);
|
||||
if(index>=0){
|
||||
this.visiableData.splice(index,1);
|
||||
}
|
||||
},
|
||||
pageOrder: function (column) {//按字段排序
|
||||
this.pageForm.pageOrderName = column.prop;
|
||||
this.pageForm.pageOrderBy = column.order;
|
||||
this.pageData();
|
||||
},
|
||||
pageNumberChange: function (val) {//页码更新操作
|
||||
this.pageForm.pageNumber = val;
|
||||
this.pageData();
|
||||
},
|
||||
pageSizeChange: function (val) {//分页大小更新操作
|
||||
this.pageForm.pageSize = val;
|
||||
this.pageData();
|
||||
},
|
||||
pageData: function () {//加载分页数据
|
||||
var self = this;
|
||||
sublime.showLoadingbar();//显示loading
|
||||
$.post(base + "/platform/sys/api/data", self.pageForm, function (data) {
|
||||
sublime.closeLoadingbar();//关闭loading
|
||||
if (data.code == 0) {
|
||||
self.tableData = data.data.list;
|
||||
self.pageForm.totalCount = data.data.totalCount;
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
formatAt: function (val) {
|
||||
if (val && val > 0)
|
||||
return moment(val * 1000).format("YYYY-MM-DD HH:mm");
|
||||
return "";
|
||||
},
|
||||
doSearch: function () {
|
||||
this.pageForm.pageNumber = 1;
|
||||
this.pageData();
|
||||
},
|
||||
openAdd: function () {
|
||||
var self = this;
|
||||
this.addDialogVisible = true;
|
||||
this.formData = {};//打开新增窗口,表单先清空
|
||||
if (this.$refs["addForm"])
|
||||
this.$refs["addForm"].resetFields();
|
||||
},
|
||||
doAdd: function () {
|
||||
var self = this;
|
||||
self.$refs["addForm"].validate(function (valid) {
|
||||
if (valid) {
|
||||
$.post(base + "/platform/sys/api/addDo", self.formData, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
self.addDialogVisible = false;
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
self.pageData();//添加失败也可以入库,所以加载一下看看
|
||||
}, "json");
|
||||
}
|
||||
});
|
||||
},
|
||||
dropdownCommand: function (command) {//监听下拉框事件
|
||||
var self = this;
|
||||
if ("enable" == command.type || "disable" == command.type) {
|
||||
$.post(base + "/platform/sys/api/" + command.type + "/" + command.appid, {}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
if ("disable" == command.type) {
|
||||
command.row.disabled = true;
|
||||
}
|
||||
if ("enable" == command.type) {
|
||||
command.row.disabled = false;
|
||||
}
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
if ("delete" == command.type) {
|
||||
self.$confirm('此操作将删除密钥 ' + command.name, '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
callback: function (a, b) {
|
||||
if ("confirm" == a) {//确认后再执行
|
||||
$.post(base + "/platform/sys/api/delete/" + command.appid, {}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
self.doSearch();
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
created: function () {
|
||||
this.pageData();
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,425 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<link rel="stylesheet" href="${base!}/assets/platform/plugins/codemirror/codemirror.css">
|
||||
<script src="${base!}/assets/platform/plugins/codemirror/codemirror.js"></script>
|
||||
<script src="${base!}/assets/platform/plugins/codemirror/vue-codemirror.js"></script>
|
||||
<div id="app" v-cloak>
|
||||
<el-row class="header navbar bg-white shadow">
|
||||
<div class="btn-group tool-button mt5">
|
||||
<a class="el-button el-button--default el-button--medium" href="${base}/platform/sys/app" data-pjax><i
|
||||
class="ti-angle-left"></i>返回</a>
|
||||
<el-button size="medium" @click="openAdd">
|
||||
<i class="ti-plus"></i>
|
||||
添加配置
|
||||
</el-button>
|
||||
</div>
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-input @keyup.native="doSearch" placeholder="请输入内容" v-model="pageForm.confName" size="medium">
|
||||
<template slot="prepend">实例名称</template>
|
||||
</el-input>
|
||||
</div>
|
||||
</el-row>
|
||||
<el-row class="el-table-container">
|
||||
<el-table
|
||||
:data="tableData"
|
||||
@sort-change='pageOrder'
|
||||
size="small"
|
||||
header-align="center"
|
||||
style="width: 100%"
|
||||
:default-sort="{prop: 'opAt', order: 'descending'}"
|
||||
>
|
||||
<el-table-column
|
||||
sortable
|
||||
prop="confName"
|
||||
label="实例名称"
|
||||
header-align="center"
|
||||
align="center"
|
||||
>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
sortable
|
||||
prop="confVersion"
|
||||
label="版本号"
|
||||
width="100"
|
||||
>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="文件下载"
|
||||
header-align="center"
|
||||
align="center">
|
||||
<template slot-scope="scope">
|
||||
<a style="color: #0e5996" :href="'${base!}/platform/sys/app/conf/download/'+scope.row.id"
|
||||
target="_blank">{{scope.row.confName}}-{{scope.row.confVersion}}.properties</a>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
sortable
|
||||
prop="opAt"
|
||||
label="上传时间"
|
||||
header-align="center" align="center">
|
||||
<template slot-scope="scope">
|
||||
{{formatAt(scope.row.opAt)}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
sortable
|
||||
prop="opAt"
|
||||
label="上传人"
|
||||
header-align="center" align="center">
|
||||
<template slot-scope="scope">
|
||||
{{scope.row.user.loginname}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
sortable
|
||||
prop="disabled"
|
||||
label="启用状态"
|
||||
header-align="center"
|
||||
align="center"
|
||||
width="100"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<i v-if="scope.row.disabled" class="fa fa-circle text-danger ml5"></i>
|
||||
<i v-if="!scope.row.disabled" class="fa fa-circle text-success ml5"></i>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="操作"
|
||||
width="120">
|
||||
<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:'copy',row:scope.row}">
|
||||
复制
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item
|
||||
:command="{type:'edit',row:scope.row}">
|
||||
修改
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item
|
||||
:command="{type:'enable',row:scope.row}">
|
||||
启用
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item
|
||||
:command="{type:'disable',row:scope.row}">
|
||||
禁用
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item divided
|
||||
:command="{type:'delete',row: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
|
||||
@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, jumper"
|
||||
:total="pageForm.totalCount">
|
||||
</el-pagination>
|
||||
</el-row>
|
||||
<el-dialog
|
||||
title="添加配置"
|
||||
:visible.sync="addDialogVisible"
|
||||
:close-on-click-modal="false"
|
||||
width="60%">
|
||||
<el-form :model="formData" ref="addForm" :rules="formRules" size="small" label-width="80px">
|
||||
<el-form-item prop="confName" label="实例名称">
|
||||
<el-autocomplete
|
||||
class="inline-input"
|
||||
v-model="formData.confName"
|
||||
:fetch-suggestions="queryConfName"
|
||||
placeholder="保持和配置文件中实例名称一致"
|
||||
style="width: 220px;"
|
||||
></el-autocomplete>
|
||||
</el-form-item>
|
||||
<el-form-item prop="confVersion" label="版本号">
|
||||
<el-input maxlength="20" placeholder="版本号不可用特殊字符"
|
||||
v-model="formData.confVersion"
|
||||
auto-complete="off" tabindex="2" type="text"
|
||||
style="width: 220px;"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="confData" label-width="2px">
|
||||
<codemirror v-model="formData.confData" :options="cmOptions"
|
||||
style="line-height:20px;border:1px solid silver;"></codemirror>
|
||||
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="addDialogVisible = false">取 消</el-button>
|
||||
<el-button type="primary" @click="doAdd">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
<el-dialog
|
||||
title="修改配置"
|
||||
:visible.sync="editDialogVisible"
|
||||
:close-on-click-modal="false"
|
||||
width="60%">
|
||||
<el-form :model="formData" ref="editForm" :rules="formRules" size="small" label-width="80px">
|
||||
<el-form-item prop="confName" label="实例名称">
|
||||
{{formData.confName}}
|
||||
</el-form-item>
|
||||
<el-form-item prop="confVersion" label="版本号">
|
||||
{{formData.confVersion}}
|
||||
</el-form-item>
|
||||
<el-form-item prop="confData" label-width="2px">
|
||||
<codemirror v-model="formData.confData" :options="cmOptions"
|
||||
style="line-height:20px;border:1px solid silver;"></codemirror>
|
||||
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="editDialogVisible = false">取 消</el-button>
|
||||
<el-button type="primary" @click="doEdit">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
</div>
|
||||
<script>
|
||||
Vue.use(window.VueCodemirror);
|
||||
new Vue({
|
||||
el: "#app",
|
||||
data: function () {
|
||||
return {
|
||||
addDialogVisible: false,
|
||||
editDialogVisible: false,
|
||||
visiableData: [],
|
||||
tableData: [],
|
||||
pageForm: {
|
||||
pageNumber: 1,
|
||||
pageSize: 10,
|
||||
totalCount: 0,
|
||||
pageOrderName: "opAt",
|
||||
pageOrderBy: "descending",
|
||||
confName: ""
|
||||
},
|
||||
formData: {
|
||||
id: "",
|
||||
},
|
||||
formRules: {
|
||||
confName: [
|
||||
{required: true, message: '实例名称', trigger: 'blur'}
|
||||
],
|
||||
confVersion: [
|
||||
{required: true, message: '版本号', trigger: 'blur'}
|
||||
],
|
||||
confData: [
|
||||
{required: true, message: '配置内容', trigger: 'blur'}
|
||||
],
|
||||
},
|
||||
cmOptions: {
|
||||
// codemirror options
|
||||
tabSize: 4,
|
||||
mode: 'text/javascript',
|
||||
theme: 'elegant',
|
||||
lineNumbers: true,
|
||||
line: true,
|
||||
// more codemirror options, 更多 codemirror 的高级配置...
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
pageOrder: function (column) {//按字段排序
|
||||
this.pageForm.pageOrderName = column.prop;
|
||||
this.pageForm.pageOrderBy = column.order;
|
||||
this.pageData();
|
||||
},
|
||||
pageNumberChange: function (val) {//页码更新操作
|
||||
this.pageForm.pageNumber = val;
|
||||
this.pageData();
|
||||
},
|
||||
pageSizeChange: function (val) {//分页大小更新操作
|
||||
this.pageForm.pageSize = val;
|
||||
this.pageData();
|
||||
},
|
||||
pageData: function () {//加载分页数据
|
||||
var self = this;
|
||||
sublime.showLoadingbar();//显示loading
|
||||
$.post(base + "/platform/sys/app/conf/data", self.pageForm, function (data) {
|
||||
sublime.closeLoadingbar();//关闭loading
|
||||
if (data.code == 0) {
|
||||
self.tableData = data.data.list;
|
||||
self.pageForm.totalCount = data.data.totalCount;
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
formatAt: function (val) {
|
||||
if (val && val > 0)
|
||||
return moment(val * 1000).format("YYYY-MM-DD HH:mm");
|
||||
return "";
|
||||
},
|
||||
doSearch: function () {
|
||||
this.pageForm.pageNumber = 1;
|
||||
this.pageData();
|
||||
},
|
||||
openAdd: function () {
|
||||
this.addDialogVisible = true;
|
||||
this.formData = {
|
||||
id: "",
|
||||
confName: "",
|
||||
confVersion: "",
|
||||
confData: ""
|
||||
};//打开新增窗口,表单先清空
|
||||
if (this.$refs["addForm"])
|
||||
this.$refs["addForm"].resetFields();
|
||||
},
|
||||
doAdd: function () {
|
||||
var self = this;
|
||||
self.$refs["addForm"].validate(function (valid) {
|
||||
if (valid) {
|
||||
$.post(base + "/platform/sys/app/conf/addDo", self.formData, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
self.addDialogVisible = false;
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
self.pageData();//添加失败也可以入库,所以加载一下看看
|
||||
}, "json");
|
||||
}
|
||||
});
|
||||
},
|
||||
doEdit: function () {
|
||||
var self = this;
|
||||
var url = base + "/platform/sys/app/conf/editDo";
|
||||
self.$refs["editForm"].validate(function (valid) {
|
||||
if (valid) {
|
||||
$.post(url, self.formData, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
self.editDialogVisible = false;
|
||||
self.pageData();//重新加载分页数据
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
});
|
||||
},
|
||||
dropdownCommand: function (command) {//监听下拉框事件
|
||||
var self = this;
|
||||
if ("copy" == command.type) {
|
||||
$.post(base + "/platform/sys/app/conf/edit/" + command.row.id, {}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.formData = data.data;//加载后台表单数据
|
||||
self.formData.confVersion="";
|
||||
self.addDialogVisible = true;//打开编辑窗口
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
if ("edit" == command.type) {
|
||||
$.post(base + "/platform/sys/app/conf/edit/" + command.row.id, {}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.formData = data.data;//加载后台表单数据
|
||||
self.editDialogVisible = true;//打开编辑窗口
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
if ("enable" == command.type || "disable" == command.type) {
|
||||
$.post(base + "/platform/sys/app/conf/" + command.type + "/" + command.row.id, {}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
if ("disable" == command.type) {
|
||||
command.row.disabled = true;
|
||||
}
|
||||
if ("enable" == command.type) {
|
||||
command.row.disabled = false;
|
||||
}
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
if ("delete" == command.type) {
|
||||
self.$confirm('此操作将删除 ' + command.row.confName + '-' + command.row.confVersion + '.properties', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
callback: function (a, b) {
|
||||
if ("confirm" == a) {//确认后再执行
|
||||
$.post(base + "/platform/sys/app/conf/delete/" + command.row.id, {}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
self.doSearch();
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
queryConfName: function (confName, cb) {
|
||||
$.post(base + "/platform/sys/app/conf/search", {confName: confName}, function (data) {
|
||||
if (data.code == 0) {
|
||||
var list = data.data;
|
||||
var names = [];
|
||||
list.forEach(function (obj) {
|
||||
names.push({value: obj});
|
||||
});
|
||||
cb(names);
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
},
|
||||
created: function () {
|
||||
this.pageData();
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,402 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.el-upload input[type=file] {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.el-upload__text {
|
||||
color: #606266;
|
||||
font-size: 14px;
|
||||
text-align: center;
|
||||
}
|
||||
</style>
|
||||
<div id="app" v-cloak>
|
||||
<el-row class="header navbar bg-white shadow">
|
||||
<div class="btn-group tool-button mt5">
|
||||
<a class="el-button el-button--default el-button--medium" href="${base}/platform/sys/app" data-pjax><i
|
||||
class="ti-angle-left"></i>返回</a>
|
||||
<el-button size="medium" @click="openAdd">
|
||||
<i class="ti-plus"></i>
|
||||
添加安装包
|
||||
</el-button>
|
||||
</div>
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-input @keyup.native="doSearch" placeholder="请输入内容" v-model="pageForm.appName" size="medium">
|
||||
<template slot="prepend">实例名称</template>
|
||||
</el-input>
|
||||
</div>
|
||||
</el-row>
|
||||
<el-row class="el-table-container">
|
||||
<el-table
|
||||
:data="tableData"
|
||||
@sort-change='pageOrder'
|
||||
size="small"
|
||||
header-align="center"
|
||||
style="width: 100%"
|
||||
:default-sort = "{prop: 'opAt', order: 'descending'}"
|
||||
>
|
||||
<el-table-column
|
||||
sortable
|
||||
prop="appName"
|
||||
label="实例名称"
|
||||
header-align="center"
|
||||
align="center"
|
||||
>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
sortable
|
||||
prop="appVersion"
|
||||
label="版本号"
|
||||
width="100"
|
||||
>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="fileSize"
|
||||
label="文件大小"
|
||||
width="120"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
{{(scope.row.fileSize/1024/1024).toFixed(2)}}MB
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="filePath"
|
||||
label="文件下载"
|
||||
header-align="center">
|
||||
<template slot-scope="scope">
|
||||
{{scope.row.appName}}-{{scope.row.appVersion}}.jar
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
sortable
|
||||
prop="opAt"
|
||||
label="上传时间"
|
||||
header-align="center" align="center">
|
||||
<template slot-scope="scope">
|
||||
{{formatAt(scope.row.opAt)}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
sortable
|
||||
prop="opAt"
|
||||
label="上传人"
|
||||
header-align="center" align="center">
|
||||
<template slot-scope="scope">
|
||||
{{scope.row.user.loginname}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
sortable
|
||||
prop="disabled"
|
||||
label="启用状态"
|
||||
header-align="center"
|
||||
align="center"
|
||||
width="100"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<i v-if="scope.row.disabled" class="fa fa-circle text-danger ml5"></i>
|
||||
<i v-if="!scope.row.disabled" class="fa fa-circle text-success ml5"></i>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="操作"
|
||||
width="120">
|
||||
<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:'enable',row:scope.row}">
|
||||
启用
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item
|
||||
:command="{type:'disable',row:scope.row}">
|
||||
禁用
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item divided
|
||||
:command="{type:'delete',row: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
|
||||
@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, jumper"
|
||||
:total="pageForm.totalCount">
|
||||
</el-pagination>
|
||||
</el-row>
|
||||
<el-dialog
|
||||
title="添加安装包"
|
||||
:visible.sync="addDialogVisible"
|
||||
width="50%">
|
||||
<el-form :model="formData" ref="addForm" :rules="formRules" size="small" label-width="80px">
|
||||
<el-form-item prop="appName" label="实例名称">
|
||||
<el-autocomplete
|
||||
class="inline-input"
|
||||
v-model="formData.appName"
|
||||
:fetch-suggestions="queryAppName"
|
||||
placeholder="保持和配置文件中实例名称一致"
|
||||
style="width: 220px;"
|
||||
></el-autocomplete>
|
||||
</el-form-item>
|
||||
<el-form-item prop="appVersion" label="版本号">
|
||||
<el-input maxlength="20" placeholder="版本号不可用特殊字符"
|
||||
v-model="formData.appVersion"
|
||||
auto-complete="off" tabindex="2" type="text"
|
||||
style="width: 220px;"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="filePath" label="文件上传">
|
||||
<el-upload
|
||||
class="upload-demo"
|
||||
drag
|
||||
action="${base}/open/file/upload/file"
|
||||
name="Filedata"
|
||||
:show-file-list="false"
|
||||
:before-upload="beforeJarUpload"
|
||||
:on-success="function(resp,file,fileList){return handleJarSuccess(resp,file,fileList)}"
|
||||
:on-progress="uploadFileProcess"
|
||||
style="height:180px;"
|
||||
v-if="!formData.fileSize||formData.fileSize==0"
|
||||
>
|
||||
<i class="el-icon-upload" v-if="!fileUploadFlag"></i>
|
||||
<div class="el-upload__text" v-if="!fileUploadFlag">将文件拖到此处,或<em>点击上传</em></div>
|
||||
<div class="el-upload__tip" slot="tip">只能上传 jar 文件,且不超过200MB</div>
|
||||
<el-progress v-if="fileUploadFlag == true" type="circle" :percentage="fileUploadPercent" style="margin-top:20px;"></el-progress>
|
||||
</el-upload>
|
||||
<div v-if="formData.fileSize>0" style="color: green;font-size: 12px;">
|
||||
文件大小: {{(formData.fileSize/1024/1024).toFixed(2)}}MB
|
||||
</div>
|
||||
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="addDialogVisible = false">取 消</el-button>
|
||||
<el-button type="primary" @click="doAdd">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
</div>
|
||||
<script>
|
||||
new Vue({
|
||||
el: "#app",
|
||||
data: function () {
|
||||
return {
|
||||
addDialogVisible: false,
|
||||
editDialogVisible: false,
|
||||
visiableData: [],
|
||||
tableData: [],
|
||||
pageForm: {
|
||||
pageNumber: 1,
|
||||
pageSize: 10,
|
||||
totalCount: 0,
|
||||
pageOrderName: "opAt",
|
||||
pageOrderBy: "descending",
|
||||
appName: ""
|
||||
},
|
||||
formData: {
|
||||
id: "",
|
||||
fileSize: 0,
|
||||
filePath: ""
|
||||
},
|
||||
formRules: {
|
||||
appName: [
|
||||
{required: true, message: '实例名称', trigger: 'blur'}
|
||||
],
|
||||
appVersion: [
|
||||
{required: true, message: '版本号', trigger: 'blur'}
|
||||
],
|
||||
filePath: [
|
||||
{required: true, message: '上传文件', trigger: 'blur'}
|
||||
],
|
||||
},
|
||||
fileUploadFlag:false,
|
||||
fileUploadPercent:0
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
pageOrder: function (column) {//按字段排序
|
||||
this.pageForm.pageOrderName = column.prop;
|
||||
this.pageForm.pageOrderBy = column.order;
|
||||
this.pageData();
|
||||
},
|
||||
pageNumberChange: function (val) {//页码更新操作
|
||||
this.pageForm.pageNumber = val;
|
||||
this.pageData();
|
||||
},
|
||||
pageSizeChange: function (val) {//分页大小更新操作
|
||||
this.pageForm.pageSize = val;
|
||||
this.pageData();
|
||||
},
|
||||
pageData: function () {//加载分页数据
|
||||
var self = this;
|
||||
sublime.showLoadingbar();//显示loading
|
||||
$.post(base + "/platform/sys/app/jar/data", self.pageForm, function (data) {
|
||||
sublime.closeLoadingbar();//关闭loading
|
||||
if (data.code == 0) {
|
||||
self.tableData = data.data.list;
|
||||
self.pageForm.totalCount = data.data.totalCount;
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
formatAt: function (val) {
|
||||
if (val && val > 0)
|
||||
return moment(val * 1000).format("YYYY-MM-DD HH:mm");
|
||||
return "";
|
||||
},
|
||||
doSearch: function () {
|
||||
this.pageForm.pageNumber = 1;
|
||||
this.pageData();
|
||||
},
|
||||
openAdd: function () {
|
||||
this.addDialogVisible = true;
|
||||
this.formData = {
|
||||
id: "",
|
||||
fileSize: 0,
|
||||
filePath: ""
|
||||
};//打开新增窗口,表单先清空
|
||||
if (this.$refs["addForm"])
|
||||
this.$refs["addForm"].resetFields();
|
||||
},
|
||||
doAdd: function () {
|
||||
var self = this;
|
||||
self.$refs["addForm"].validate(function (valid) {
|
||||
if (valid) {
|
||||
$.post(base + "/platform/sys/app/jar/addDo", self.formData, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
self.addDialogVisible = false;
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
self.pageData();//添加失败也可以入库,所以加载一下看看
|
||||
}, "json");
|
||||
}
|
||||
});
|
||||
},
|
||||
dropdownCommand: function (command) {//监听下拉框事件
|
||||
var self = this;
|
||||
if ("enable" == command.type || "disable" == command.type) {
|
||||
$.post(base + "/platform/sys/app/jar/" + command.type + "/" + command.row.id, {}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
if ("disable" == command.type) {
|
||||
command.row.disabled = true;
|
||||
}
|
||||
if ("enable" == command.type) {
|
||||
command.row.disabled = false;
|
||||
}
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
if ("delete" == command.type) {
|
||||
self.$confirm('此操作将删除 ' + command.row.appName+'-'+command.row.appVersion+'.jar', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
callback: function (a, b) {
|
||||
if ("confirm" == a) {//确认后再执行
|
||||
$.post(base + "/platform/sys/app/jar/delete/" + command.row.id, {}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
self.doSearch();
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
beforeJarUpload: function (file) {
|
||||
var isLt120M = file.size / 1024 / 1024 < 200;
|
||||
if (".jar" != file.name.substring(file.name.lastIndexOf("."), file.name.length)) {
|
||||
this.$message.error('只可上传jar文件');
|
||||
return false;
|
||||
}
|
||||
if (!isLt120M) {
|
||||
this.$message.error('文件大小不能超过200MB');
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
},
|
||||
handleJarSuccess: function (response, file, fileList) {
|
||||
if (response.code == 0) {
|
||||
// 对象属性直接赋值不会触发试图更新,采用 Vue.set 、this.$set或者Object.assign({},this.obj)创建新对象
|
||||
// 或者也可以定义一个 refresh 属性 ,当数据发生改变时,该属性同时变化,也会触发视图更新
|
||||
this.$set(this.formData, "fileSize", response.data.file_size);
|
||||
this.$set(this.formData, "filePath", response.data.file_url);
|
||||
} else {
|
||||
this.$message({
|
||||
message: response.msg,
|
||||
type: 'error'
|
||||
});
|
||||
this.$set(this.formData, "fileSize", 0);
|
||||
this.$set(this.formData, "filePath", "");
|
||||
}
|
||||
this.fileUploadFlag=false;
|
||||
},
|
||||
uploadFileProcess:function(event, file, fileList){
|
||||
this.fileUploadFlag=true;
|
||||
this.fileUploadPercent = parseInt(event.percent);
|
||||
},
|
||||
queryAppName: function (appName, cb) {
|
||||
$.post(base + "/platform/sys/app/jar/search", {appName: appName}, function (data) {
|
||||
if (data.code == 0) {
|
||||
var list=data.data;
|
||||
var names=[];
|
||||
list.forEach(function (obj) {
|
||||
names.push({value:obj});
|
||||
});
|
||||
cb(names);
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
},
|
||||
created: function () {
|
||||
this.pageData();
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,463 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<style>
|
||||
.module_content {
|
||||
padding-top: 5px;
|
||||
height: calc(100vh - 155px);
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.right-tabs {
|
||||
height: calc(100vh - 110px);
|
||||
}
|
||||
|
||||
.module_wrap {
|
||||
height: calc(100vh - 110px);
|
||||
overflow-y: scroll;
|
||||
width: 300px;
|
||||
}
|
||||
|
||||
.module_wrap .module_box {
|
||||
display: flex;
|
||||
width: 250px;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.module_wrap .module_box .module_icon {
|
||||
background-color: #31b48d;
|
||||
width: 50px;
|
||||
height: 50px;
|
||||
color: #fff;
|
||||
text-align: center;
|
||||
line-height: 50px;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.module_wrap .module_box .module_icon i {
|
||||
font-size: 24px;
|
||||
}
|
||||
|
||||
.module_wrap .module_box .module_info {
|
||||
width: 150px;
|
||||
border-radius: 0 5px 5px 0;
|
||||
border: 1px solid #eee;
|
||||
border-left: none;
|
||||
background-color: #fff;
|
||||
flex: 1;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.module_wrap .module_box .module_info .title {
|
||||
font-size: 20px;
|
||||
line-height: 20px;
|
||||
text-align: center;
|
||||
color: #31b48d;
|
||||
}
|
||||
|
||||
.el-tree-node {
|
||||
padding: 5px 0;
|
||||
}
|
||||
|
||||
.el-tree-node__label {
|
||||
width: calc(100% - 24px);
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding: 10px 0;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
<div id="app">
|
||||
<guava ref="guava">
|
||||
<el-row :gutter="10" style="height: calc(100vh - 70px)">
|
||||
<el-col :span="5">
|
||||
<el-card shadow="never">
|
||||
<div>
|
||||
<el-input placeholder="请输入内容" v-model="moduleFilterText">
|
||||
<template slot="append">
|
||||
<span @click="openAddModule" style="cursor: pointer">
|
||||
新增模块
|
||||
</span>
|
||||
</template>
|
||||
</el-input>
|
||||
</div>
|
||||
|
||||
<div class="module_content">
|
||||
<el-tree :data="leftTreeData" :props="{label:'moduleName'}" @node-click="moduleClick"
|
||||
highlight-current>
|
||||
<span class="el-tree-node__label" slot-scope="{ node,data }">
|
||||
<span style="max-width: calc(100% - 70px);overflow: hidden;text-overflow: ellipsis; ">
|
||||
<i :class="node.level=== 1 ? 'el-icon-s-home' : node.level=== 2 ?'el-icon-coin' :''"></i>
|
||||
{{ (node || {}).label }}
|
||||
</span>
|
||||
<span style="width: 70px">
|
||||
<el-button type="text" size="mini"
|
||||
@click="openEditModule(data)">编辑</el-button>
|
||||
<el-button type="text" size="mini"
|
||||
@click="delModule(data)">删除</el-button>
|
||||
</span>
|
||||
</span>
|
||||
</el-tree>
|
||||
</div>
|
||||
</el-card>
|
||||
</el-col>
|
||||
<el-col :span="19" style="height: 100%">
|
||||
<el-card shadow="never" style="height: 100%">
|
||||
<el-row>
|
||||
<el-col :span="14" style="display: flex">
|
||||
<el-input v-model="queryForm.menuName" placeholder="请输入名称" size="small"
|
||||
clearable></el-input>
|
||||
<el-button type="primary" style="margin-left: 10px;"
|
||||
size="small"
|
||||
icon="el-icon-search" @click="menuList">查询
|
||||
</el-button>
|
||||
</el-col>
|
||||
<el-col :span="10" style="text-align: right">
|
||||
<el-button type="primary" icon="el-icon-circle-plus-outline"
|
||||
size="small"
|
||||
@click="openAdd">
|
||||
新增菜单
|
||||
</el-button>
|
||||
|
||||
<el-button type="primary" icon="el-icon-sort"
|
||||
size="small"
|
||||
@click="openSort">
|
||||
菜单排序
|
||||
</el-button>
|
||||
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row class="mt10" id="tableWrap" data-bottom="30">
|
||||
<el-table :data="tableData" style="width: 100%" border v-loading="tableLoading" height="100%">
|
||||
<el-table-column type="index" label="序号" width="60" align="center"
|
||||
:index="indexMethod"></el-table-column>
|
||||
<el-table-column prop="menuName" label="菜单名称" width="250"
|
||||
align="center"></el-table-column>
|
||||
<el-table-column prop="menuIcon" label="菜单图标" width="100" align="center">
|
||||
<template scope="{row}">
|
||||
<el-image @click="PREVIEW_IMAGE(row.menuIcon)"
|
||||
:src="CREATE_PREVIEW_URL(row.menuIcon)"
|
||||
style="width: 20px;height: 20px"/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="url" label="菜单路由" width="350" align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="menuRoles" label="可见角色" align="center"
|
||||
show-overflow-tooltip>
|
||||
<template scope="{row}">
|
||||
{{roles.filter(v=>row.menuRoles.includes(v.code)).map(v=>v.name).join('、') }}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="enable" label="是否开启" align="center" show-overflow-tooltip>
|
||||
<template scope="{row}">
|
||||
<span :class="[row.enable?'text-success':'text-danger']">{{row.enable?'是':'否'}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="300" align="center">
|
||||
<template slot-scope="{row}">
|
||||
<el-button type="primary" size="mini" @click="openEditMenu(row)">编辑</el-button>
|
||||
<el-button type="danger" size="mini" @click="delMenu(row.menuId)">删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-row>
|
||||
</el-card>
|
||||
</el-col>
|
||||
|
||||
<el-dialog :title="formData.menuId?'编辑':'新增'" :visible.sync="menuDialogVisible" width="60%"
|
||||
:close-on-click-modal="false">
|
||||
<el-form :model="formData" ref="menuForm" :rules="formRules" label-width="100px">
|
||||
<el-form-item label="" prop="" v-show="false">
|
||||
<el-input type="text" v-model="formData.menuId"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="菜单名称" prop="menuName">
|
||||
<el-input maxlength="100"
|
||||
placeholder="菜单名称"
|
||||
type="text" v-model="formData.menuName"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="菜单图标" prop="menuIcon">
|
||||
<image-Upload v-if="menuDialogVisible" ref="imageUpload" :height="100" :width="100" :limit="1"
|
||||
:file-type="['png']" :file-size="10"
|
||||
v-model="formData.menuIcon"></image-Upload>
|
||||
{{formData.menuIcon}}
|
||||
</el-form-item>
|
||||
<el-form-item label="菜单路由" prop="url">
|
||||
<el-input maxlength="255"
|
||||
placeholder="菜单路由"
|
||||
type="text" v-model="formData.url"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="排序" prop="orderNum">
|
||||
<el-input-number v-model="formData.orderNum" controls-position="" :min="0"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="可见角色" prop="menuRoles">
|
||||
<el-select multiple filterable clearable v-model="formData.menuRoles"
|
||||
placeholder="请选择可见角色"
|
||||
style="width: 100%">
|
||||
<el-option v-for="item in roles"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.code"
|
||||
></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="是否开启" prop="enable">
|
||||
<el-switch
|
||||
v-model="formData.enable"
|
||||
active-color="#13ce66"
|
||||
inactive-color="#ff4949">
|
||||
</el-switch>
|
||||
</el-form-item>
|
||||
|
||||
</el-form>
|
||||
|
||||
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="menuDialogVisible = false">取 消</el-button>
|
||||
<el-button type="primary" @click="saveMenu">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog title="模块" :visible.sync="moduleDialogVisible" width="40%">
|
||||
<el-form :model="moduleForm" ref="moduleForm" label-width="100px">
|
||||
<el-form-item label="" prop="" v-show="false">
|
||||
<el-input type="text" v-model="formData.menuId"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="模块名称" prop="moduleName"
|
||||
:rules="[{required: true, message: '菜单名称不能为空', trigger: 'blur'}]">
|
||||
<el-input maxlength="100"
|
||||
placeholder="模块名称"
|
||||
type="text" v-model="moduleForm.moduleName"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="序号" prop="orderNum">
|
||||
<el-input-number maxlength="100"
|
||||
placeholder="模块序号"
|
||||
v-model="moduleForm.orderNum"></el-input-number>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="moduleDialogVisible = false">取 消</el-button>
|
||||
<el-button type="primary" @click="saveModule">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog title="排序" :visible.sync="sortMenuDialogVisible">
|
||||
<el-tree
|
||||
:props="{label:'menuName'}"
|
||||
:data="sortMenus"
|
||||
node-key="menuId"
|
||||
default-expand-all
|
||||
draggable
|
||||
:allow-drop="allowMenuDrop"
|
||||
allow-drag>
|
||||
</el-tree>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="sortMenuDialogVisible = false">取 消</el-button>
|
||||
<el-button type="primary" @click="sortMenu">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
|
||||
</el-row>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
moduleFilterText: null,
|
||||
|
||||
leftTreeOption: {
|
||||
addBtn: true,
|
||||
editBtn: true,
|
||||
delBtn: true,
|
||||
props: {
|
||||
label: 'moduleName',
|
||||
value: 'moduleId',
|
||||
},
|
||||
formOption: {
|
||||
labelWidth: 100,
|
||||
column: [
|
||||
{label: '模块名称', prop: 'moduleName'},
|
||||
{label: '序号', prop: 'orderNum'},
|
||||
],
|
||||
},
|
||||
defaultExpandAll: true
|
||||
},
|
||||
leftTreeData: [],
|
||||
moduleForm: {},
|
||||
selectModule: [],
|
||||
|
||||
menuDialogVisible: false,
|
||||
// menuForm: {},
|
||||
formRules: {
|
||||
menuName: [{required: true, message: "菜单名称不能为空", trigger: "blur"}],
|
||||
menuIcon: [{required: true, message: "菜单图标不能为空", trigger: "blur"}],
|
||||
url: [{required: true, message: "菜单路由不能为空", trigger: "blur"}],
|
||||
orderNum: [{required: true, message: "排序不能为空", trigger: "blur"}],
|
||||
menuRoles: [{required: true, message: "可见角色不能为空", trigger: ['change']}],
|
||||
},
|
||||
formData: {
|
||||
menuRoles: []
|
||||
},
|
||||
|
||||
roles: [],
|
||||
|
||||
queryForm: {},
|
||||
|
||||
moduleDialogVisible: false,
|
||||
|
||||
sortMenuDialogVisible: false,
|
||||
sortMenus: []
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
openSort() {
|
||||
this.sortMenus = [...this.tableData]
|
||||
this.sortMenuDialogVisible = true
|
||||
},
|
||||
allowMenuDrop(draggingNode, dropNode, type) {
|
||||
return type !== 'inner'
|
||||
},
|
||||
async sortMenu() {
|
||||
const menuIds = this.sortMenus.map(v => v.menuId)
|
||||
const resp = await $.post(loc() + '/sortMenus', {
|
||||
moduleId: this.selectModule.moduleId,
|
||||
menuIds: JSON.stringify(menuIds)
|
||||
})
|
||||
if (resp.code === 0) {
|
||||
this.notifySuccess(resp.msg)
|
||||
this.sortMenuDialogVisible = false
|
||||
this.menuList()
|
||||
}
|
||||
},
|
||||
openAddModule() {
|
||||
this.moduleDialogVisible = true
|
||||
this.moduleForm = {}
|
||||
},
|
||||
openEditModule(row) {
|
||||
this.moduleDialogVisible = true
|
||||
this.$nextTick(() => {
|
||||
this.moduleForm = {...row}
|
||||
})
|
||||
},
|
||||
saveModule() {
|
||||
this.$refs.moduleForm.validate(valid => {
|
||||
if (valid) {
|
||||
$.post('/platform/sys/appMenu/' + (this.moduleForm.moduleId ? 'updateModule' : 'saveModule'), this.moduleForm).then(({msg}) => {
|
||||
this.moduleDialogVisible = false
|
||||
this.notifySuccess(msg)
|
||||
this.moduleList()
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
delModule({moduleId}) {
|
||||
this.$confirm('您确定要删除吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
$.post('/platform/sys/appMenu/delModule', {id: moduleId}).then(({msg}) => {
|
||||
this.notifySuccess(msg)
|
||||
this.moduleList()
|
||||
})
|
||||
})
|
||||
},
|
||||
async moduleList() {
|
||||
return new Promise(resolve => {
|
||||
$.post('/platform/sys/appMenu/moduleList').then(({data}) => {
|
||||
this.leftTreeData = data
|
||||
resolve()
|
||||
})
|
||||
})
|
||||
},
|
||||
moduleClick(data, node) {
|
||||
this.selectModule = data
|
||||
this.menuList()
|
||||
},
|
||||
|
||||
openAdd() {
|
||||
this.formData = {
|
||||
moduleId: this.selectModule.moduleId,
|
||||
menuRoles: []
|
||||
}
|
||||
this.menuDialogVisible = true
|
||||
},
|
||||
openEditMenu(row) {
|
||||
this.formData = {...row}
|
||||
this.menuDialogVisible = true
|
||||
},
|
||||
|
||||
saveMenu() {
|
||||
this.$refs.menuForm.validate(valid => {
|
||||
if (valid) {
|
||||
$.post('/platform/sys/appMenu/' + (this.formData.menuId ? 'updateMenu' : 'saveMenu'), {appMenu: JSON.stringify(this.formData)}).then((res) => {
|
||||
this.menuDialogVisible = false
|
||||
this.notifySuccess(res.msg)
|
||||
this.menuList()
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
delMenu(id) {
|
||||
this.$confirm('您确定要删除吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
$.post('/platform/sys/appMenu/delMenu', {id}).then(({msg}) => {
|
||||
this.notifySuccess(msg)
|
||||
this.moduleList()
|
||||
this.menuList()
|
||||
})
|
||||
})
|
||||
},
|
||||
async menuList() {
|
||||
this.tableLoading = true
|
||||
const {data} = await $.get('/platform/sys/appMenu/menuList', {
|
||||
moduleId: this.selectModule.moduleId, menuName: this.queryForm.menuName
|
||||
})
|
||||
this.tableLoading = false
|
||||
this.tableData = data
|
||||
},
|
||||
|
||||
roleList() {
|
||||
$.get('/platform/sys/appMenu/roles').then(res => {
|
||||
this.roles = res.data
|
||||
})
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.moduleList().then(() => {
|
||||
if (this.leftTreeData) {
|
||||
this.selectModule = this.leftTreeData[0]
|
||||
this.menuList()
|
||||
}
|
||||
})
|
||||
this.roleList()
|
||||
},
|
||||
async mounted() {
|
||||
await httpVueLoader('/components/plugins/Guava.vue', 'Guava')()
|
||||
calcTableHeight(['tableWrap'])
|
||||
window.onresize = () => {
|
||||
calcTableHeight(['tableWrap'])
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
</script>
|
||||
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,342 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.btn-group {
|
||||
width: 20%;
|
||||
}
|
||||
|
||||
.el-select {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.el-date-editor.el-input, .el-date-editor.el-input__inner {
|
||||
width: auto;
|
||||
}
|
||||
|
||||
.el-date-editor .el-range-separator {
|
||||
width: 8%;
|
||||
}
|
||||
</style>
|
||||
<div id="app" v-cloak>
|
||||
<guava>
|
||||
<div style="padding-right: 10px">
|
||||
<el-card shadow="never" style="position:relative;">
|
||||
<div class="d-search-item btn-group tool-button">
|
||||
<el-input @keyup.enter.native="doSearch" clearable placeholder="请输入内容"
|
||||
v-model="pageForm.searchKeyword">
|
||||
<el-select placeholder="查询类型" slot="prepend" style="width: 80px;"
|
||||
v-model="pageForm.searchName">
|
||||
<el-option label="姓名" value="u.username"></el-option>
|
||||
<el-option label="工号" value="u.loginname"></el-option>
|
||||
</el-select>
|
||||
</el-input>
|
||||
</div>
|
||||
<div class="d-search-item btn-group tool-button">
|
||||
<el-select clearable filterable placeholder="请选择社团"
|
||||
v-model="pageForm.clubid">
|
||||
<el-option
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
v-for="item in clubOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
<div class="d-search-item btn-group tool-button">
|
||||
<dict-select clearable code="UserType" placeholder="请选择人员类型"
|
||||
v-model="pageForm.personType"></dict-select>
|
||||
</div>
|
||||
<div class="d-search-item btn-group tool-button">
|
||||
<dict-select clearable code="UserState" placeholder="请选择在职状态"
|
||||
v-model="pageForm.userState"></dict-select>
|
||||
</div>
|
||||
<div class="mt10">
|
||||
<div class="d-search-item btn-group tool-button">
|
||||
<el-date-picker
|
||||
end-placeholder="结束日期"
|
||||
format="yyyy-MM-dd"
|
||||
range-separator="至"
|
||||
start-placeholder="开始日期"
|
||||
type="daterange"
|
||||
v-model="pageForm.birthday"
|
||||
value-format="yyyy-MM-dd">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
<div class="d-search-item btn-group tool-button">
|
||||
<el-select clearable filterable placeholder="请选择性别"
|
||||
v-model="pageForm.sex">
|
||||
<el-option label="男" value="男"></el-option>
|
||||
<el-option label="女" value="女"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
<div class="d-search-item btn-group tool-button">
|
||||
<el-select clearable filterable placeholder="请选择所属单位"
|
||||
v-model="pageForm.unitid">
|
||||
<el-option :label="item.name" :value="item.id" v-for="item in units"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
<div class="btn-group tool-button">
|
||||
<el-button @click="doSearch" icon="el-icon-search" type="primary"></el-button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div style="position: absolute;right: 20px;top: 20px;">
|
||||
<template>
|
||||
<div class="pull-right offscreen-right">
|
||||
<el-radio-group @change="(val) => doSearch()" v-model="pageForm.radioType">
|
||||
<el-radio-button label="1">全部</el-radio-button>
|
||||
<el-radio-button label="2">已审核</el-radio-button>
|
||||
<el-radio-button label="3">未审核</el-radio-button>
|
||||
</el-radio-group>
|
||||
</div>
|
||||
</template>
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
<el-card class="mt10" shadow="never">
|
||||
<div style="text-align: right">
|
||||
<el-button :disabled="subDis" @click="check(true)" icon="el-icon-check" plain type="success">同意
|
||||
</el-button>
|
||||
<el-button :disabled="subDis" @click="check(false)" icon="el-icon-close" plain type="danger">拒绝
|
||||
</el-button>
|
||||
</div>
|
||||
<el-table :data="tableData" :key="tabKey" @selection-change="handleSelectionChange"
|
||||
@sort-change="pageOrder"
|
||||
ref="multipleTable"
|
||||
row-key="id"
|
||||
style="width: 100%" v-loading="tabloading">
|
||||
<el-table-column :reserve-selection="true" v-if="pageForm.radioType !== '2'"
|
||||
:selectable="(row, index) => {return row.status === 3}"
|
||||
type="selection"
|
||||
width="55">
|
||||
</el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="序号" type="index">
|
||||
<template scope="scope">
|
||||
<span>{{scope.$index+(pageForm.pageNumber - 1) * pageForm.pageSize + 1}} </span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="社团编码" prop="code" show-overflow-tooltip
|
||||
sortable></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="社团名称" show-overflow-tooltip sortable
|
||||
prop="clubname"></el-table-column>
|
||||
<el-table-column width="100" align="center" header-align="center" label="工号" sortable
|
||||
prop="loginname"></el-table-column>
|
||||
<el-table-column width="100" align="center" header-align="center" label="姓名" sortable
|
||||
prop="username"></el-table-column>
|
||||
<el-table-column width="80" align="center" header-align="center" label="性别" prop="sex" sortable
|
||||
></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="出生年月" prop="birthday" sortable>
|
||||
</el-table-column>
|
||||
<el-table-column width="60" align="center" header-align="center" label="年龄"
|
||||
prop="birthday">
|
||||
<template scope="scope">
|
||||
<span>{{getAge(scope.row)}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column width="120" align="center" header-align="center" label="电话"
|
||||
prop="mobile"></el-table-column>
|
||||
<el-table-column width="80" align="center" header-align="center" label="是否会员"
|
||||
prop="status">
|
||||
<template scope="scope">
|
||||
<span v-if="scope.row.status != 5">否</span>
|
||||
<span v-if="scope.row.status === 5" style="color: #236eb4">是</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="人员类型" show-overflow-tooltip
|
||||
prop="rylx"></el-table-column>
|
||||
<el-table-column width="100" align="center" header-align="center" label="在职状态"
|
||||
prop="userstate"></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="所属单位" prop="unitname"
|
||||
show-overflow-tooltip
|
||||
sortable></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="申请时间" prop="join_time"
|
||||
show-overflow-tooltip
|
||||
sortable></el-table-column>
|
||||
<!--<el-table-column align="center" header-align="center" label="审核时间" prop="join_time"
|
||||
show-overflow-tooltip>
|
||||
<template scope="scope">
|
||||
{{ formatAuditTime(scope.row) }}
|
||||
</template>
|
||||
</el-table-column>-->
|
||||
<el-table-column align="center" header-align="center" label="是否缴费" prop="isjf"
|
||||
width="80">
|
||||
<template scope="scope">
|
||||
<span class="text-success" v-if="scope.row.isjf">已缴费</span>
|
||||
<span class="text-danger" v-else>未缴费</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="审核状态"
|
||||
prop="status">
|
||||
<template slot-scope="scope">
|
||||
<el-tag v-if="scope.row.status==1" type="primary">待社团审核</el-tag>
|
||||
<el-tag v-if="scope.row.status==2" type="danger">社团拒绝</el-tag>
|
||||
<el-tag v-if="scope.row.status==3" type="primary">待校工会审核</el-tag>
|
||||
<el-tag v-if="scope.row.status==4" type="danger">校工会拒绝</el-tag>
|
||||
<el-tag v-if="scope.row.status==5" type="success">审核通过</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<el-row class="el-pagination-container">
|
||||
<el-pagination
|
||||
:current-page="pageForm.pageNumber"
|
||||
:page-size="pageForm.pageSize"
|
||||
:page-sizes="[10, 20, 30, 50]"
|
||||
:total="pageForm.totalCount"
|
||||
@current-change="pageNumberChange"
|
||||
@size-change="pageSizeChange"
|
||||
layout="total, sizes, prev, pager, next">
|
||||
</el-pagination>
|
||||
</el-row>
|
||||
</el-card>
|
||||
</div>
|
||||
</guava>
|
||||
</div>
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
data() {
|
||||
return {
|
||||
units: [],
|
||||
tabKey: '',
|
||||
multipleSelection: [],
|
||||
clubOptions: [],
|
||||
tabloading: false,
|
||||
formData: {},
|
||||
tableData: [],
|
||||
pageForm: {
|
||||
searchName: "u.username",
|
||||
searchKeyword: "",
|
||||
pageNumber: 1,
|
||||
pageSize: 10,
|
||||
totalCount: 0,
|
||||
pageOrderName: "",
|
||||
pageOrderBy: "",
|
||||
radioType: 3,
|
||||
birthday: [],
|
||||
},
|
||||
formRules: {
|
||||
code: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
name: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
},
|
||||
subDis: false,
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'dict-select': httpVueLoader('/components/plugins/DictSelect.vue?v=1.0.0'),
|
||||
},
|
||||
methods: {
|
||||
formatAuditTime(row) {
|
||||
if (!row.auditlist) {
|
||||
return ''
|
||||
}
|
||||
const auditArray = JSON.parse(row.auditlist)
|
||||
const audit = auditArray.find(o => o.auditType === 'school')
|
||||
return audit === undefined ? '' : audit.auditTime
|
||||
},
|
||||
getAge(row) {
|
||||
if (row.birthday === null || row.birthday === undefined) {
|
||||
return
|
||||
}
|
||||
const birthdayTime = new Date(row.birthday).getTime()
|
||||
const nowTime = new Date().getTime()
|
||||
return Math.ceil((nowTime - birthdayTime) / 31536000000)
|
||||
},
|
||||
check(flag) {
|
||||
if (!this.multipleSelection.length) {
|
||||
this.$notify({
|
||||
title: '提示',
|
||||
message: '请先勾选需要进行审核的人员!',
|
||||
type: 'warning'
|
||||
});
|
||||
return
|
||||
}
|
||||
this.$confirm('您选择了' + this.multipleSelection.length + '个人,请确定是否' + (flag ? '同意?' : '拒绝?'), '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
callback: (a, b) => {
|
||||
if ("confirm" === a) {
|
||||
const ids = this.multipleSelection.map(v => {
|
||||
return v.id
|
||||
})
|
||||
this.subDis = true
|
||||
$.post(base + "/platform/sys/club/sh/check", {ids: JSON.stringify(ids), flag: flag, type: 2}, (data) => {
|
||||
this.subDis = false
|
||||
if (data.code === 0) {
|
||||
this.$message({
|
||||
message: '提交成功',
|
||||
type: 'success'
|
||||
});
|
||||
this.multipleSelection = []
|
||||
this.$refs.multipleTable.clearSelection();
|
||||
this.doSearch()
|
||||
} else {
|
||||
this.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
handleSelectionChange(val) {
|
||||
this.multipleSelection = val;
|
||||
},
|
||||
doSearch() {
|
||||
// this.tabKey = new Date().getTime()
|
||||
this.pageForm.pageNumber = 1
|
||||
this.pageData()
|
||||
}
|
||||
,
|
||||
pageOrder(column) {//按字段排序
|
||||
this.pageForm.pageOrderName = column.prop;
|
||||
this.pageForm.pageOrderBy = column.order;
|
||||
this.pageData();
|
||||
}
|
||||
,
|
||||
pageNumberChange(val) {//页码更新操作
|
||||
this.pageForm.pageNumber = val;
|
||||
this.pageData();
|
||||
}
|
||||
,
|
||||
pageSizeChange(val) {//分页大小更新操作
|
||||
this.pageForm.pageSize = val;
|
||||
this.pageData();
|
||||
}
|
||||
,
|
||||
pageData() {//加载分页数据
|
||||
sublime.showLoadingbar();//显示loading
|
||||
this.tabloading = true
|
||||
this.pageForm.type = 2
|
||||
this.pageForm.birthday = this.pageForm.birthday.length > 0 ? JSON.stringify(this.pageForm.birthday) : []
|
||||
$.post(base + "/platform/sys/club/sh/pageData", this.pageForm, (data) => {
|
||||
sublime.closeLoadingbar();//关闭loading
|
||||
this.tabloading = false
|
||||
if (data.code === 0) {
|
||||
this.tableData = data.data.list;
|
||||
this.pageForm.totalCount = data.data.totalCount;
|
||||
} else {
|
||||
this.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
async getMyMangeClub() {
|
||||
const {data} = await $.get("/platform/sys/club/users/getMyMangeClub")
|
||||
return data
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
this.clubOptions = await this.getMyMangeClub()
|
||||
this.pageData();
|
||||
this.units = await getUnits()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,338 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.el-select {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.el-date-editor.el-input, .el-date-editor.el-input__inner {
|
||||
width: auto;
|
||||
}
|
||||
|
||||
.el-date-editor .el-range-separator {
|
||||
width: 8%;
|
||||
}
|
||||
</style>
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<template>
|
||||
<div style="padding-right: 10px">
|
||||
|
||||
<el-card shadow="never" style="position:relative;">
|
||||
<div class="d-search-item btn-group tool-button">
|
||||
<el-input @keyup.enter.native="doSearch" clearable placeholder="请输入内容"
|
||||
v-model="pageForm.searchKeyword">
|
||||
<el-select placeholder="查询类型" slot="prepend" style="width: 80px;"
|
||||
v-model="pageForm.searchName">
|
||||
<el-option label="姓名" value="u.username"></el-option>
|
||||
<el-option label="工号" value="u.loginname"></el-option>
|
||||
</el-select>
|
||||
</el-input>
|
||||
</div>
|
||||
<div class="d-search-item btn-group tool-button">
|
||||
<el-select clearable filterable placeholder="请选择协会"
|
||||
v-model="pageForm.clubid">
|
||||
<el-option
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
v-for="item in clubOptions">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
<div class="d-search-item btn-group tool-button">
|
||||
<dict-select clearable code="UserType" placeholder="请选择人员类型"
|
||||
v-model="pageForm.personType"></dict-select>
|
||||
</div>
|
||||
<div class="d-search-item btn-group tool-button">
|
||||
<dict-select clearable code="UserState" placeholder="请选择在职状态"
|
||||
v-model="pageForm.userState"></dict-select>
|
||||
</div>
|
||||
<div class="d-search-item btn-group tool-button">
|
||||
<el-select clearable filterable placeholder="请选择性别"
|
||||
v-model="pageForm.sex">
|
||||
<el-option label="男" value="男"></el-option>
|
||||
<el-option label="女" value="女"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
<div class="d-search-item btn-group tool-button">
|
||||
<el-select clearable filterable placeholder="请选择所属单位"
|
||||
v-model="pageForm.unitid">
|
||||
<el-option :label="item.name" :value="item.id" v-for="item in units"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
<div class="btn-group tool-button">
|
||||
<el-button @click="doSearch" icon="el-icon-search" type="primary"></el-button>
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
<el-card class="mt10" shadow="never">
|
||||
<table-tool :app="this" label="审核列表" ref="tableTool">
|
||||
<template #func>
|
||||
<el-radio-group @change="(val) => doSearch()" v-model="pageForm.radioType">
|
||||
<el-radio-button label="1">全部</el-radio-button>
|
||||
<el-radio-button label="2">已审核</el-radio-button>
|
||||
<el-radio-button label="3">未审核</el-radio-button>
|
||||
</el-radio-group>
|
||||
</template>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" @sort-change="pageOrder"
|
||||
style="width: 100%" v-loading="tabloading">
|
||||
<el-table-column align="center" header-align="center" label="序号" type="index">
|
||||
<template scope="scope">
|
||||
<span>{{scope.$index+(pageForm.pageNumber - 1) * pageForm.pageSize + 1}} </span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<!--<el-table-column align="center" header-align="center" label="协会编码" prop="code" show-overflow-tooltip
|
||||
sortable></el-table-column>-->
|
||||
<el-table-column align="center" header-align="center" label="协会名称" show-overflow-tooltip sortable
|
||||
prop="clubname"></el-table-column>
|
||||
<el-table-column width="100" align="center" header-align="center" label="工号" sortable
|
||||
prop="loginname"></el-table-column>
|
||||
<el-table-column width="100" align="center" header-align="center" label="姓名" sortable
|
||||
prop="username"></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="性别" prop="sex" sortable width="80">
|
||||
</el-table-column>
|
||||
<!-- <el-table-column align="center" header-align="center" label="出生年月" prop="birthday" sortable>-->
|
||||
<!-- </el-table-column>-->
|
||||
<!-- <el-table-column width="60" align="center" header-align="center" label="年龄"-->
|
||||
<!-- prop="birthday">-->
|
||||
<!-- <template scope="scope">-->
|
||||
<!-- <span>{{getAge(scope.row)}}</span>-->
|
||||
<!-- </template>-->
|
||||
<!-- </el-table-column>-->
|
||||
<el-table-column width="120" align="center" header-align="center" label="电话"
|
||||
prop="mobile"></el-table-column>
|
||||
<!--<el-table-column width="80" align="center" header-align="center" label="是否会员"
|
||||
prop="status">
|
||||
<template scope="scope">
|
||||
<span v-if="scope.row.status != 5">否</span>
|
||||
<span v-if="scope.row.status === 5" style="color: #236eb4">是</span>
|
||||
</template>
|
||||
</el-table-column>-->
|
||||
<!--<el-table-column align="center" header-align="center" label="人员类型" show-overflow-tooltip
|
||||
prop="rylx"></el-table-column>
|
||||
<el-table-column width="100" align="center" header-align="center" label="在职状态"
|
||||
prop="userstate"></el-table-column>-->
|
||||
<el-table-column align="center" header-align="center" label="所属单位" prop="unitname"
|
||||
show-overflow-tooltip
|
||||
sortable></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="申请时间" prop="join_time"
|
||||
show-overflow-tooltip
|
||||
sortable></el-table-column>
|
||||
<!--<el-table-column align="center" header-align="center" label="审核时间" prop="join_time"
|
||||
show-overflow-tooltip>
|
||||
<template scope="scope">
|
||||
{{ formatAuditTime(scope.row) }}
|
||||
</template>
|
||||
</el-table-column>-->
|
||||
<el-table-column align="center" header-align="center" label="审核状态"
|
||||
prop="status">
|
||||
<template slot-scope="scope">
|
||||
<el-tag v-if="scope.row.status==1" type="primary">待协会审核</el-tag>
|
||||
<el-tag v-if="scope.row.status==2" type="danger">协会拒绝</el-tag>
|
||||
<el-tag v-if="scope.row.status==3" type="primary">待校工会审核</el-tag>
|
||||
<el-tag v-if="scope.row.status==4" type="danger">校工会拒绝</el-tag>
|
||||
<el-tag v-if="scope.row.status==5" type="success">审核通过</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="操作"
|
||||
width="300px">
|
||||
<template scope="{row}">
|
||||
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
|
||||
<el-button v-if="pageForm.radioType == 3" @click="openAudit(row)" size="mini" type="primary">审核</el-button>
|
||||
<!-- <el-button type="primary" size="mini" @click="doExportApply(row)">导出申请表</el-button>-->
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
</el-table>
|
||||
<el-row class="el-pagination-container">
|
||||
<el-pagination
|
||||
:current-page="pageForm.pageNumber"
|
||||
:page-size="pageForm.pageSize"
|
||||
:page-sizes="[10, 20, 30, 50]"
|
||||
:total="pageForm.totalCount"
|
||||
@current-change="pageNumberChange"
|
||||
@size-change="pageSizeChange"
|
||||
layout="total, sizes, prev, pager, next">
|
||||
</el-pagination>
|
||||
</el-row>
|
||||
</el-card>
|
||||
</div></template>
|
||||
<template #edit>
|
||||
<club-user-apply-info ref="clubUserApplyInfo" handle label="协会审核">
|
||||
<template #handle>
|
||||
<el-form :model="formData" ref="form" :rules="formRules" label-position="right"
|
||||
style="padding: 20px 0" label-width="120px">
|
||||
<el-row gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="username" label="审核人员">
|
||||
<el-input v-model="formData.username"
|
||||
disabled></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="auditTime" label="审核时间">
|
||||
<el-input v-model="formData.auditTime" disabled></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<!-- <el-form-item label="是否缴费" prop="isjf">-->
|
||||
<!-- <el-radio :label="true" border v-model="formData.isjf">已缴费</el-radio>-->
|
||||
<!-- <el-radio :label="false" border v-model="formData.isjf">未缴费</el-radio>-->
|
||||
<!-- </el-form-item>-->
|
||||
|
||||
<el-form-item prop="auditOpinion" label="审核意见">
|
||||
<el-input type="textarea" v-model="formData.auditOpinion" rows="4"
|
||||
maxlength="500"
|
||||
placeholder="请填写您的审核意见"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<!-- <el-form-item prop="auditSign" label="签  字">-->
|
||||
<!-- <sign prefix="club" :qz.sync="formData.auditSign"></sign>-->
|
||||
<!-- </el-form-item>-->
|
||||
|
||||
</el-form>
|
||||
|
||||
<div style="float: right;margin: 20px 0">
|
||||
<el-button @click="doReview(false)">拒绝</el-button>
|
||||
<el-button type="primary" @click="doReview(true)">通过</el-button>
|
||||
</div>
|
||||
|
||||
</template>
|
||||
</club-user-apply-info>
|
||||
</template>
|
||||
<template #view>
|
||||
<club-user-apply-info ref="applyInfo"></club-user-apply-info>
|
||||
</template>
|
||||
</guava>
|
||||
|
||||
</div>
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
units: [],
|
||||
tabKey: '',
|
||||
clubOptions: [],
|
||||
tabloading: false,
|
||||
formData: {
|
||||
sign: ''
|
||||
},
|
||||
tableData: [],
|
||||
pageForm: {
|
||||
searchName: "u.username",
|
||||
searchKeyword: "",
|
||||
pageNumber: 1,
|
||||
pageSize: 10,
|
||||
totalCount: 0,
|
||||
pageOrderName: "",
|
||||
pageOrderBy: "",
|
||||
radioType: 3,
|
||||
birthday: [],
|
||||
},
|
||||
formRules: {
|
||||
isjf: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
auditOpinion: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
auditSign:[{required: true, message: '必填', trigger: ['blur', 'change']}]
|
||||
},
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'club-user-apply-info': httpVueLoader('/components/club/clubUserApplyInfo.vue?v=1.0.1'),
|
||||
'dict-select': httpVueLoader('/components/plugins/DictSelect.vue?v=1.0.0'),
|
||||
},
|
||||
methods: {
|
||||
doExportApply(row){
|
||||
location.href = '/platform/sys/club/clubInfoManage/exportInfo?id=' + row.id
|
||||
},
|
||||
getAge(row) {
|
||||
if (row.birthday === null || row.birthday === undefined) {
|
||||
return
|
||||
}
|
||||
const birthdayTime = new Date(row.birthday).getTime()
|
||||
const nowTime = new Date().getTime()
|
||||
return Math.ceil((nowTime - birthdayTime) / 31536000000)
|
||||
},
|
||||
openView(row) {
|
||||
this.$refs.applyInfo.getInfo(row.id)
|
||||
this.$refs.guava.view()
|
||||
},
|
||||
openAudit(row) {
|
||||
this.formData = {
|
||||
id: row.id,
|
||||
username: "${@shiro.getPrincipalProperty('username')}",
|
||||
auditTime: moment().format('YYYY-MM-DD')
|
||||
}
|
||||
this.$refs.clubUserApplyInfo.getInfo(row.id)
|
||||
if (this.$refs['form']) {
|
||||
this.$refs['form'].resetFields()
|
||||
}
|
||||
this.$refs.guava.edit()
|
||||
},
|
||||
async doReview(flag) {
|
||||
const valid = await this.$refs.form.validate()
|
||||
if (!valid) return
|
||||
this.formData.flag = flag
|
||||
const resp = await $.post(base + "/platform/sys/club/sh/check", this.formData)
|
||||
if(resp.code === 0) {
|
||||
this.doSearch()
|
||||
this.$refs.guava.index()
|
||||
this.$message({message: resp.msg, type: 'success'})
|
||||
} else {
|
||||
this.$message({message: resp.msg, type: 'warning'})
|
||||
}
|
||||
},
|
||||
doSearch() {
|
||||
this.pageForm.pageNumber = 1
|
||||
this.pageData()
|
||||
},
|
||||
pageOrder(column) {//按字段排序
|
||||
this.pageForm.pageOrderName = column.prop;
|
||||
this.pageForm.pageOrderBy = column.order;
|
||||
this.pageData();
|
||||
},
|
||||
pageNumberChange(val) {//页码更新操作
|
||||
this.pageForm.pageNumber = val;
|
||||
this.pageData();
|
||||
},
|
||||
pageSizeChange(val) {//分页大小更新操作
|
||||
this.pageForm.pageSize = val;
|
||||
this.pageData();
|
||||
},
|
||||
pageData() {//加载分页数据
|
||||
sublime.showLoadingbar();//显示loading
|
||||
this.tabloading = true
|
||||
this.pageForm.type = 1
|
||||
$.post(base + "/platform/sys/club/sh/pageData", this.pageForm, (data) => {
|
||||
sublime.closeLoadingbar();//关闭loading
|
||||
this.tabloading = false
|
||||
if (data.code === 0) {
|
||||
this.tableData = data.data.list;
|
||||
this.pageForm.totalCount = data.data.totalCount;
|
||||
} else {
|
||||
this.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
async getMyMangeClub() {
|
||||
const {data} = await $.get("/platform/sys/club/users/getMyMangeClub")
|
||||
return data
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
this.clubOptions = await this.getMyMangeClub()
|
||||
this.pageData();
|
||||
this.units = await getUnits()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,802 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.w-e-text-container {
|
||||
height: 200px !important;
|
||||
}
|
||||
|
||||
input[type="file"] {
|
||||
display: none
|
||||
}
|
||||
|
||||
.el-descriptions :not(.is-bordered) .el-descriptions-item__cell {
|
||||
width: 10%;
|
||||
}
|
||||
|
||||
.el_tab {
|
||||
margin-top: 6px;
|
||||
}
|
||||
|
||||
.el-table-container {
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
.el-table-container {
|
||||
padding-top: 6px;
|
||||
padding-right: 0;
|
||||
}
|
||||
|
||||
.el-tabs__header {
|
||||
margin: 0 0 6px;
|
||||
background-color: white;
|
||||
}
|
||||
|
||||
.el-tabs--card > .el-tabs__header .el-tabs__item {
|
||||
border-bottom: none;
|
||||
font-weight: bold;
|
||||
font-size: 15px;
|
||||
}
|
||||
|
||||
.el-descriptions-item__cell {
|
||||
text-align: center !important;
|
||||
}
|
||||
|
||||
.el-form--label-top .el-form-item__label {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.el-form-item__label {
|
||||
line-height: 22px;
|
||||
}
|
||||
|
||||
.el-form-item {
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
#join_tab .el-tabs__header {
|
||||
margin: 0 0 18px;
|
||||
}
|
||||
|
||||
</style>
|
||||
<div id="app" v-cloak>
|
||||
|
||||
<guava ref="guava">
|
||||
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-input placeholder="请输入内容" clearable v-model="pageForm.searchKeyword"
|
||||
@keyup.enter.native="doSearch">
|
||||
<el-select v-model="pageForm.searchName" slot="prepend" placeholder="查询类型"
|
||||
style="width: 120px;">
|
||||
<el-option label="协会名称" value="club.name"></el-option>
|
||||
</el-select>
|
||||
</el-input>
|
||||
</div>
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-button type="primary" icon="el-icon-search" @click="doSearch"></el-button>
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
<el-tabs class="el-table-container el_tab" v-model="activeName" stretch @tab-click="handleClick"
|
||||
type="card">
|
||||
<el-tab-pane :label="'可加入(申请)协会' + noJoinCount" name="false">
|
||||
</el-tab-pane>
|
||||
<el-tab-pane :label="'已加入(申请)协会' + hasJoinCount" name="true">
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
|
||||
<el-card shadow="never">
|
||||
<el-table :data="tableData" style="width: 100%" row-key="id" @sort-change="pageOrder">
|
||||
|
||||
<el-table-column align="center" header-align="center" label="序号" type="index">
|
||||
<template scope="scope">
|
||||
<span>{{scope.$index+(pageForm.pageNumber - 1) * pageForm.pageSize + 1}} </span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" header-align="center" label="协会编码" sortable
|
||||
prop="code"></el-table-column>
|
||||
|
||||
<el-table-column align="center" header-align="center" label="协会名称" prop="name"
|
||||
show-overflow-tooltip width="200px"></el-table-column>
|
||||
|
||||
<!-- <el-table-column align="center" header-align="center" label="成立时间" prop="name">-->
|
||||
<!-- <template scope="scope">-->
|
||||
<!-- <span>{{moment(scope.row.create_time).format('YYYY-MM-DD')}}</span>-->
|
||||
<!-- </template>-->
|
||||
<!-- </el-table-column>-->
|
||||
|
||||
<!-- <el-table-column align="center" header-align="center" label="会长" prop="hz"-->
|
||||
<!-- show-overflow-tooltip></el-table-column>-->
|
||||
|
||||
<el-table-column align="center" sortable header-align="center" label="联系人" show-overflow-tooltip
|
||||
prop="fzrname"></el-table-column>
|
||||
|
||||
<!-- <el-table-column align="center" header-align="center" label="联系人电话" show-overflow-tooltip-->
|
||||
<!-- prop="concatpersonmobile"></el-table-column>-->
|
||||
|
||||
<!--<el-table-column align="center" sortable header-align="center" label="联系人单位"
|
||||
show-overflow-tooltip
|
||||
prop="fzr_unit_name"></el-table-column>-->
|
||||
|
||||
<el-table-column align="center" sortable header-align="center" label="当前人数"
|
||||
show-overflow-tooltip
|
||||
prop="cynum"></el-table-column>
|
||||
|
||||
<el-table-column align="center" header-align="center" label="在职人数" show-overflow-tooltip
|
||||
prop="worknum"></el-table-column>
|
||||
|
||||
<el-table-column align="center" header-align="center" label="退休人数" show-overflow-tooltip
|
||||
prop="outnum"></el-table-column>
|
||||
|
||||
<el-table-column align="center" v-if="activeName=='true'" header-align="center" label="申请状态"
|
||||
sortable>
|
||||
<template slot-scope="scope">
|
||||
<el-tag v-if="scope.row.status==1" type="primary">待协会审核</el-tag>
|
||||
<el-tag v-if="scope.row.status==2" type="danger">协会拒绝</el-tag>
|
||||
<el-tag v-if="scope.row.status==3" type="primary">待校工会审核</el-tag>
|
||||
<el-tag v-if="scope.row.status==4" type="danger">校工会拒绝</el-tag>
|
||||
<el-tag v-if="scope.row.status==5" type="success">审核通过</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column align="center" header-align="center" label="操作" width="350px">
|
||||
<template slot-scope="scope">
|
||||
<el-button size="mini" type="primary" @click="openDetail(scope.row, 'view')">查看
|
||||
</el-button>
|
||||
<!-- <el-button type="primary" size="mini" v-if="activeName=='true'" @click="doExportApply(scope.row)">导出申请表</el-button>-->
|
||||
<!-- <el-button size="mini" v-if="activeName=='false'" type="primary"-->
|
||||
<!-- @click="openDetail(scope.row, 'join')">-->
|
||||
<!-- 申请加入-->
|
||||
<!-- </el-button>-->
|
||||
<el-button size="mini" type="primary" @click="openApply(scope.row)" v-if="activeName=='false'">申请</el-button>
|
||||
<el-button size="mini" v-if="activeName=='true'&&scope.row.status==1" type="danger"
|
||||
@click="doRevocation(scope.row.id)">
|
||||
撤销申请
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
</el-table>
|
||||
<el-row class="el-pagination-container">
|
||||
<el-pagination
|
||||
@size-change="pageSizeChange"
|
||||
@current-change="pageNumberChange"
|
||||
:current-page="pageForm.pageNumber"
|
||||
:page-sizes="[10, 20, 30, 50]"
|
||||
:page-size="pageForm.pageSize"
|
||||
layout="total, sizes, prev, pager, next"
|
||||
:total="pageForm.totalCount">
|
||||
</el-pagination>
|
||||
</el-row>
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<el-tabs v-model="infoActive" id="join_tab">
|
||||
<el-tab-pane name="first" label="协会信息">
|
||||
<el-descriptions class="margin-top" title="" :column="3" border>
|
||||
<el-descriptions-item :span="3">
|
||||
<template slot="label">协会名称</template>
|
||||
<div v-html="detailData.name"></div>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="成立时间">
|
||||
{{detailData.foundtime}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="协会编码">
|
||||
{{detailData.code}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="协会类型">
|
||||
{{detailData.typename}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="发起人">
|
||||
{{detailData.sponsorname}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item>
|
||||
<template slot="label">报名联系人</template>
|
||||
{{detailData.fzrname}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item>
|
||||
<template slot="label">所属单位</template>
|
||||
{{detailData.fzr_unit_name}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item>
|
||||
<template slot="label">联系人电话</template>
|
||||
{{detailData.concatpersonmobile}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item>
|
||||
<template slot="label">联系人邮箱</template>
|
||||
{{detailData.concatpersonemail}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item>
|
||||
<template slot="label">会费标准</template>
|
||||
{{detailData.dues_standard}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item>
|
||||
<template slot="label">当前人数</template>
|
||||
{{detailData.cynum}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item :span="2"></el-descriptions-item>
|
||||
<el-descriptions-item :span="3">
|
||||
<template slot="label">协会介绍</template>
|
||||
<div class="text-left" v-html="detailData.stjs"></div>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item :span="3">
|
||||
<template slot="label">协会宗旨</template>
|
||||
<div class="text-left" v-html="detailData.stzz"></div>
|
||||
</el-descriptions-item>
|
||||
<!-- <el-descriptions-item span="1.5">-->
|
||||
<!-- <template slot="label">QQ群二维码</template>-->
|
||||
<!-- <file-upload v-if="detailData.qqgroupcode && detailData.qqgroupcode.length > 0"-->
|
||||
<!-- :files="JSON.parse(detailData.qqgroupcode)"-->
|
||||
<!-- :view="true"></file-upload>-->
|
||||
<!-- </el-descriptions-item>-->
|
||||
<!-- <el-descriptions-item span="2">-->
|
||||
<!-- <template slot="label">微信群二维码</template>-->
|
||||
<!-- <file-upload v-if="detailData.wechatgroupcode && detailData.wechatgroupcode.length > 0"-->
|
||||
<!-- :files="JSON.parse(detailData.wechatgroupcode)"-->
|
||||
<!-- :view="true"></file-upload>-->
|
||||
<!-- </el-descriptions-item>-->
|
||||
<el-descriptions-item span="1.5">
|
||||
<template slot="label">协会章程</template>
|
||||
<file-upload v-if="detailData.rulesfile && detailData.rulesfile.length > 0"
|
||||
:files="JSON.parse(detailData.rulesfile)"
|
||||
:view="true"></file-upload>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item span="2">
|
||||
<template slot="label">年度活动计划</template>
|
||||
<file-upload v-if="detailData.yearplanfile && detailData.yearplanfile.length > 0"
|
||||
:files="JSON.parse(detailData.yearplanfile)"
|
||||
:view="true"></file-upload>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane v-if="viewType === 'join'" name="second" label="个人信息">
|
||||
<el-form :model="formData" ref="form" :rules="formRules" label-position="top"
|
||||
label-width="120px">
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="username" label="姓名">
|
||||
<el-input v-model="formData.username" disabled></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="sex" label="性别">
|
||||
<el-input v-model="formData.sex" disabled></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="birthday" label="出生年月">
|
||||
<el-date-picker
|
||||
v-model="formData.birthday"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
style="width: 100%"
|
||||
placeholder="请选择出生年月">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="birthPlace" label="出生地">
|
||||
<el-input v-model="formData.birthPlace"
|
||||
placeholder="请填写出生地"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="education" label="文化程度">
|
||||
<el-input v-model="formData.education" placeholder="请填写文化程度"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="hobby" label="爱好">
|
||||
<el-input v-model="formData.hobby" placeholder="请填写爱好"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="unitName" label="工作部门">
|
||||
<el-input v-model="formData.unitName" disabled></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="position" label="职务">
|
||||
<el-input v-model="formData.position" placeholder="请填写职务"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="mobile" label="电话">
|
||||
<el-input v-model="formData.mobile" placeholder="请填写电话"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="email" label="电子邮箱">
|
||||
<el-input v-model="formData.email" placeholder="请填写电子邮箱"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="homeAddress" label="家庭住址">
|
||||
<el-input v-model="formData.homeAddress" placeholder="请填写家庭住址"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="QQNumber" label="QQ">
|
||||
<el-input v-model="formData.QQNumber" placeholder="请填写QQ"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="bodyHeight" label="身高">
|
||||
<el-input v-model="formData.bodyHeight" placeholder="请填写身高"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="bodyWeight" label="体重">
|
||||
<el-input v-model="formData.bodyWeight" placeholder="请填写体重"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="health" label="身体状况">
|
||||
<el-input v-model="formData.health" placeholder="请填写身体状况"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="sport" label="经常从事的运动">
|
||||
<el-input v-model="formData.sport" placeholder="请填写经常从事的运动"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="medicalHistory" label="是否有过特殊病史">
|
||||
<el-radio-group v-model="formData.medicalHistory">
|
||||
<el-radio :label="true" border>是</el-radio>
|
||||
<el-radio :label="false" border>否</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="joinActivity" label="是否愿意参加本协会的活动">
|
||||
<el-radio-group v-model="formData.joinActivity">
|
||||
<el-radio :label="true" border>是</el-radio>
|
||||
<el-radio :label="false" border>否</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="24">
|
||||
<el-form-item prop="otherThing" label="是否有特别需要说明的问题(身体或心理)">
|
||||
<el-input maxlength="500" v-model="formData.otherThing"
|
||||
placeholder="如有,请填写特别需要说明的问题"
|
||||
type="textarea" :autosize="{ minRows: 4, maxRows: 8}"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<!-- <el-row :gutter="20">-->
|
||||
<!-- <el-col :span="24">-->
|
||||
<!-- <el-form-item prop="remark" label="备注">-->
|
||||
<!-- <el-input maxlength="100" v-model="formData.remark" placeholder="请填写备注"-->
|
||||
<!-- type="textarea" :autosize="{ minRows: 4, maxRows: 8}"></el-input>-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- </el-col>-->
|
||||
<!-- </el-row>-->
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="24">
|
||||
<el-form-item prop="photo" label="两寸登记照">
|
||||
<image-Upload :height="50" :limit="1" :file-type="['png', 'jpg']" :file-size="1"
|
||||
v-model="formData.photo"></image-Upload>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
<div style="float: right;margin: 20px 0">
|
||||
<el-button @click="doSubmit()" type="primary">申请加入</el-button>
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</template>
|
||||
|
||||
<template #edit>
|
||||
<div style="width: 900px;margin:0 auto">
|
||||
<h3 style="text-align: center">{{clickRow.name}}入会申请</h3>
|
||||
<div style="display: flex;justify-content: space-between;padding: 20px 0;font-size: 16px;font-weight: bold;}">
|
||||
<div>填表时间:{{moment().format('YYYY年MM月DD日')}}</div>
|
||||
<div>编号:NO._____(自动生成)</div>
|
||||
</div>
|
||||
<el-form :model="formData"
|
||||
ref="form"
|
||||
:rules="formRules"
|
||||
label-position="top"
|
||||
class="applyForm"
|
||||
label-width="0">
|
||||
|
||||
<div style="border: 1px solid #EBEEF5; border-radius: 4px; padding: 20px; background: #fff;">
|
||||
|
||||
<el-row :gutter="20" style="margin-bottom: 20px;">
|
||||
<el-col :span="18">
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="username" label="姓名">
|
||||
<el-input v-model="formData.username" disabled></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="sex" label="性别">
|
||||
<el-input v-model="formData.sex" disabled></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="birthday" label="出生年月">
|
||||
<el-date-picker v-model="formData.birthday" type="date" value-format="yyyy-MM-dd" style="width: 100%" placeholder="请选择"></el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="birthPlace" label="出生地">
|
||||
<el-input v-model="formData.birthPlace" maxlength="50" placeholder="请填写"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="education" label="文化程度">
|
||||
<el-input v-model="formData.education" maxlength="20" placeholder="请填写"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="hobby" label="爱好">
|
||||
<el-input v-model="formData.hobby" maxlength="50" placeholder="请填写"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="unitName" label="工作部门">
|
||||
<el-input v-model="formData.unitName" disabled></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="position" label="职务">
|
||||
<el-input v-model="formData.position" maxlength="50" placeholder="请填写"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-col>
|
||||
|
||||
<!-- 照片区域:右侧独立展示 -->
|
||||
<el-col :span="6" style="text-align: center; border-left: 1px solid #eee; padding-left: 20px;">
|
||||
<el-form-item prop="photo" label="两寸登记照">
|
||||
<image-Upload :limit="1"
|
||||
:file-type="['png', 'jpg','jpeg']"
|
||||
:file-size="1"
|
||||
width="100%"
|
||||
height="200"
|
||||
v-model="formData.photo"></image-Upload>
|
||||
<div style="font-size: 12px; color: #999; margin-top: 5px;">请上传免冠证件照</div>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-divider></el-divider>
|
||||
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="8">
|
||||
<el-form-item prop="mobile" label="电话">
|
||||
<el-input v-model="formData.mobile" maxlength="20" placeholder="请填写"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item prop="email" label="电子邮箱">
|
||||
<el-input v-model="formData.email" maxlength="50" placeholder="请填写"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item prop="QQNumber" label="QQ号码">
|
||||
<el-input v-model="formData.QQNumber" maxlength="12" placeholder="请填写"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="24">
|
||||
<el-form-item prop="homeAddress" label="家庭住址">
|
||||
<el-input v-model="formData.homeAddress" maxlength="100" placeholder="请填写"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-divider></el-divider>
|
||||
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="6">
|
||||
<el-form-item prop="bodyHeight" label="身高 (cm)">
|
||||
<el-input v-model="formData.bodyHeight" maxlength="5" placeholder="如:175"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item prop="bodyWeight" label="体重 (kg)">
|
||||
<el-input v-model="formData.bodyWeight" maxlength="5" placeholder="如:65"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="sport" label="经常从事的运动">
|
||||
<el-input v-model="formData.sport" maxlength="50" placeholder="请填写"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="medicalHistory" label="是否有过特殊病史">
|
||||
<el-radio-group v-model="formData.medicalHistory">
|
||||
<el-radio :label="true" border>是</el-radio>
|
||||
<el-radio :label="false" border>否</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="joinActivity" label="是否愿意参加活动">
|
||||
<el-radio-group v-model="formData.joinActivity">
|
||||
<el-radio :label="true" border>是</el-radio>
|
||||
<el-radio :label="false" border>否</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-divider></el-divider>
|
||||
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="24">
|
||||
<el-form-item prop="otherThing" label="特别需要说明的问题(身体或心理)">
|
||||
<el-input type="textarea" :rows="4" maxlength="500"
|
||||
placeholder="如有特殊情况请详细说明"
|
||||
v-model="formData.otherThing"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
</div>
|
||||
<!-- <el-row :gutter="20">-->
|
||||
<!-- <el-col :span="24">-->
|
||||
<!-- <el-form-item prop="remark" label="备注">-->
|
||||
<!-- <el-input maxlength="100" v-model="formData.remark" placeholder="请填写备注"-->
|
||||
<!-- type="textarea" :autosize="{ minRows: 4, maxRows: 8}"></el-input>-->
|
||||
<!-- </el-form-item>-->
|
||||
<!-- </el-col>-->
|
||||
<!-- </el-row>-->
|
||||
</el-form>
|
||||
<div style="text-align: center;margin: 20px 0">
|
||||
<el-button @click="doSubmit()" type="primary">申请加入</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
</guava>
|
||||
</div>
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
data() {
|
||||
return {
|
||||
formData: {},
|
||||
formRules: {
|
||||
username: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
sex: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
birthday: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
birthPlace: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
education: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
hobby: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
unitName: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
position: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
mobile: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
email: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
homeAddress: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
QQNumber: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
bodyHeight: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
bodyWeight: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
health: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
sport: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
medicalHistory: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
joinActivity: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
// photo: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
},
|
||||
infoActive: 'first',
|
||||
detailData: {},
|
||||
activeName: 'false',
|
||||
tableData: [],
|
||||
pageForm: {
|
||||
isjr: false,
|
||||
searchName: "club.name",
|
||||
searchKeyword: "",
|
||||
pageNumber: 1,
|
||||
pageSize: 10,
|
||||
totalCount: 0,
|
||||
pageOrderName: "",
|
||||
pageOrderBy: ""
|
||||
},
|
||||
hasJoinCount: 0,
|
||||
noJoinCount: 0,
|
||||
clickRow: {},
|
||||
viewType: '',
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
doExportApply(row){
|
||||
location.href = '/platform/sys/club/clubInfoManage/exportInfo?clubId=' + row.id
|
||||
},
|
||||
doRevocation(id) {
|
||||
this.$confirm('是否撤销申请?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
callback: async (a, b) => {
|
||||
if ("confirm" === a) {//确认后再执行
|
||||
const resp = await $.post("/platform/sys/club/sq/revocation", {id},);
|
||||
if (resp.code === 0) {
|
||||
this.$message.success('撤销申请成功!')
|
||||
await this.getCount()
|
||||
this.pageData()
|
||||
} else {
|
||||
this.$message.warning(resp.msg)
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
async doSubmit() {
|
||||
const row = this.clickRow
|
||||
const valid = await this.$refs.form.validate()
|
||||
if (!valid) return
|
||||
const {code, data} = await $.post('/platform/sys/club/sq/getInClubByCurUser')
|
||||
let str = '您还没有参加协会'
|
||||
if (data && data.length > 0) {
|
||||
str = '您已经加入了'
|
||||
data.forEach((item) => {
|
||||
str += '【' + item.name + '】'
|
||||
})
|
||||
}
|
||||
str += ',请确认是否申请加入【' + row.name + '】?'
|
||||
this.$confirm(str, '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
callback: async (a, b) => {
|
||||
if ("confirm" === a) {//确认后再执行
|
||||
this.formData.clubid = row.id
|
||||
const resp = await $.post("/platform/sys/club/sq/submit", this.formData);
|
||||
if (resp.code === 0) {
|
||||
this.$message.success(resp.msg)
|
||||
await this.getCount()
|
||||
this.pageData()
|
||||
this.$refs.guava.index()
|
||||
} else {
|
||||
this.$message.warning(resp.msg)
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
openDetail(row, type) {
|
||||
this.viewType = type
|
||||
this.infoActive = type === 'view' ? 'first' : 'second'
|
||||
if (type === 'join') {
|
||||
this.formData = {
|
||||
username: "${@shiro.getPrincipalProperty('username')}",
|
||||
sex: "${@shiro.getPrincipalProperty('sex')}",
|
||||
birthday: "${@shiro.getPrincipalProperty('birthday')}",
|
||||
birthPlace: "${@shiro.getPrincipalProperty('birthPlace')}",
|
||||
education: "${@shiro.getPrincipalProperty('education')}",
|
||||
hobby: "${@shiro.getPrincipalProperty('hobby')}",
|
||||
unitName: "${@shiro.getPrincipalProperty('unit').getName()}",
|
||||
position: "${@shiro.getPrincipalProperty('position')}",
|
||||
mobile: "${@shiro.getPrincipalProperty('mobile')}",
|
||||
email: "${@shiro.getPrincipalProperty('email')}",
|
||||
homeAddress: "${@shiro.getPrincipalProperty('homeAddress')}",
|
||||
}
|
||||
this.$nextTick(() => {
|
||||
this.$refs.form.clearValidate()
|
||||
})
|
||||
}
|
||||
this.clickRow = row
|
||||
$.get(base + "/platform/sys/club/mange/findOne", {id: row.id}, (data) => {
|
||||
if (data.code === 0) {
|
||||
this.detailData = data.data
|
||||
this.$refs.guava.view()
|
||||
} else {
|
||||
this.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
|
||||
openApply(row) {
|
||||
this.$refs.guava.edit()
|
||||
this.clickRow = row
|
||||
this.formData = {
|
||||
username: "${@shiro.getPrincipalProperty('username')}",
|
||||
sex: "${@shiro.getPrincipalProperty('sex')}",
|
||||
birthday: "${@shiro.getPrincipalProperty('birthday')}",
|
||||
birthPlace: "${@shiro.getPrincipalProperty('birthPlace')}",
|
||||
education: "${@shiro.getPrincipalProperty('education')}",
|
||||
hobby: "${@shiro.getPrincipalProperty('hobby')}",
|
||||
unitName: "${@shiro.getPrincipalProperty('unit').getName()}",
|
||||
position: "${@shiro.getPrincipalProperty('position')}",
|
||||
mobile: "${@shiro.getPrincipalProperty('mobile')}",
|
||||
email: "${@shiro.getPrincipalProperty('email')}",
|
||||
homeAddress: "${@shiro.getPrincipalProperty('homeAddress')}",
|
||||
}
|
||||
this.$nextTick(() => {
|
||||
this.$refs.form.clearValidate()
|
||||
})
|
||||
},
|
||||
|
||||
handleClick(tab, event) {
|
||||
this.pageForm.searchKeyword = ''
|
||||
this.pageForm.isjr = tab.name
|
||||
this.tableData = []
|
||||
this.doSearch()
|
||||
},
|
||||
doSearch() {
|
||||
this.tabKey = new Date().getTime()
|
||||
this.pageForm.pageNumber = 1
|
||||
this.pageData()
|
||||
},
|
||||
pageOrder(column) {//按字段排序
|
||||
this.pageForm.pageOrderName = column.prop;
|
||||
this.pageForm.pageOrderBy = column.order;
|
||||
this.pageData();
|
||||
},
|
||||
pageNumberChange(val) {//页码更新操作
|
||||
this.pageForm.pageNumber = val;
|
||||
this.pageData();
|
||||
},
|
||||
pageSizeChange(val) {//分页大小更新操作
|
||||
this.pageForm.pageSize = val;
|
||||
this.pageData();
|
||||
},
|
||||
pageData() {//加载分页数据
|
||||
sublime.showLoadingbar();//显示loading
|
||||
$.post(base + "/platform/sys/club/sq/pageData", this.pageForm, (data) => {
|
||||
sublime.closeLoadingbar();//关闭loading
|
||||
if (data.code === 0) {
|
||||
this.tableData = data.data.list;
|
||||
this.pageForm.totalCount = data.data.totalCount;
|
||||
} else {
|
||||
this.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
async getCount() {
|
||||
const resp = await $.post('/platform/sys/club/sq/getCount')
|
||||
this.hasJoinCount = resp.data.hasJoinCount
|
||||
this.noJoinCount = resp.data.noJoinCount
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
await this.getCount()
|
||||
this.pageData()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,209 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<style>
|
||||
|
||||
.w-e-text-container {
|
||||
height: 500px !important;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<el-card shadow="never">
|
||||
|
||||
<vi-title title="年度优秀社团申报(温馨提示:申报范围为当年年度考核结果为合格的教职工社团)"></vi-title>
|
||||
|
||||
<el-form :model="formData" ref="form" :rules="formRules" label-width="120px" style="padding: 0 30px">
|
||||
<el-row gutter="30">
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="开始年份" prop="applyStartYear" :rules="{required: true, message: '请选择开始年份', trigger: 'blur'}">
|
||||
<el-date-picker
|
||||
placeholder="请选择开始年份" :clearable="false"
|
||||
style="width: 100%" :disabled="isCanApply === false"
|
||||
type="year" v-model="formData.applyStartYear"
|
||||
value-format="yyyy">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="结束年份" prop="applyEndYear" :rules="{required: true, message: '请选择结束年份', trigger: 'blur'}">
|
||||
<el-date-picker
|
||||
placeholder="请选择结束年份" :clearable="false"
|
||||
style="width: 100%" :disabled="isCanApply === false"
|
||||
type="year" v-model="formData.applyEndYear"
|
||||
value-format="yyyy">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="8">
|
||||
<el-form-item label="社团名称" prop="clubId" :rules="{required: true, message: '请选择社团', trigger: 'blur'}">
|
||||
<el-select v-model="formData.clubId" placeholder="请选择社团" filterable clearable
|
||||
style="width: 100%" :disabled="isCanApply === false">
|
||||
<el-option
|
||||
v-for="item in clubList"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
</el-row>
|
||||
|
||||
<el-form-item label="近两年获得的集体荣誉称号" prop="evaluateName"
|
||||
:rules="{required: true, message: '请填写近两年获得的集体荣誉称号', trigger: 'blur'}">
|
||||
<div id="evaluateName"></div>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="近两年组织活动及完成情况" prop="yearActivity"
|
||||
:rules="{required: true, message: '请填写近两年年度组织活动及完成情况', trigger: 'blur'}">
|
||||
<div id="yearActivity"></div>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item required label="附件上传" prop="files">
|
||||
<file-upload :files.sync="formData.files" card :max="5"
|
||||
:type="['doc','docx','xls','xlsx','pdf','ppt','mp4', 'jpg', 'png', 'jpeg']">
|
||||
<template #el-upload__tip>
|
||||
|
||||
</template>
|
||||
</file-upload>
|
||||
<div class="el-upload__tip">可上传照片、视频、文档等资料</div>
|
||||
</el-form-item>
|
||||
|
||||
</el-form>
|
||||
|
||||
<el-row class="mt20" justify="end" type="flex">
|
||||
<el-button v-if="GetQueryString('id') !== ''" @click="doBack">返回</el-button>
|
||||
<el-button :disabled="isCanApply === false" type="primary" @click="doHandle(true)">保存</el-button>
|
||||
<el-button :disabled="isCanApply === false" type="primary" @click="doHandle(false)">提交</el-button>
|
||||
</el-row>
|
||||
</el-card>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const E = window.wangEditor
|
||||
let evaluateName, yearActivity = null
|
||||
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
let validFiles = (rule, value, callback) => {
|
||||
if (!this.formData.files || this.formData.files.length === 0) {
|
||||
callback(new Error('请上传附件'))
|
||||
} else {
|
||||
callback()
|
||||
}
|
||||
}
|
||||
return {
|
||||
formRules: {
|
||||
files: [{validator: validFiles, trigger: ['blur', 'change']}],
|
||||
},
|
||||
clubList: [],
|
||||
formData: {
|
||||
applyStartYear: '',
|
||||
applyEndYear: '',
|
||||
clubId: '',
|
||||
evaluateName: '',
|
||||
yearActivity: '',
|
||||
},
|
||||
isCanApply: true,
|
||||
}
|
||||
},
|
||||
components: {
|
||||
|
||||
},
|
||||
methods: {
|
||||
doBack() {
|
||||
if (GetQueryString("id") !== '') {
|
||||
sublime.jumpPagePjax('/platform/sys/club/clubEvaluateMine')
|
||||
}
|
||||
},
|
||||
async doHandle(flag) {
|
||||
const valid = await this.$refs['form'].validate()
|
||||
if (valid) {
|
||||
const url = GetQueryString("id") !== '' ? '/platform/sys/club/clubEvaluateApply/doEdit' : '/platform/sys/club/clubEvaluateApply/doAdd'
|
||||
const resp = await $.post(url, {
|
||||
evaluate: JSON.stringify(this.formData),
|
||||
isSave: flag,
|
||||
})
|
||||
if (resp.code === 0) {
|
||||
this.$notify({
|
||||
title: '成功',
|
||||
message: resp.msg,
|
||||
type: 'success',
|
||||
duration: 500,
|
||||
onClose: () => {
|
||||
sublime.jumpPagePjax('/platform/sys/club/clubEvaluateMine')
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
async initData() {
|
||||
this.$set(this.formData, "applyStartYear", (new Date().getFullYear() - 1) + '')
|
||||
this.$set(this.formData, "applyEndYear", new Date().getFullYear() + '')
|
||||
const id = GetQueryString("id")
|
||||
$("#evaluateName").html("")
|
||||
$("#yearActivity").html("")
|
||||
this.$nextTick(() => {
|
||||
evaluateName = new E("#evaluateName")
|
||||
evaluateName.config.onchange = (html) => {
|
||||
this.formData.evaluateName = html
|
||||
}
|
||||
yearActivity = new E("#yearActivity")
|
||||
yearActivity.config.onchange = (html) => {
|
||||
this.formData.yearActivity = html
|
||||
}
|
||||
evaluateName.create()
|
||||
yearActivity.create()
|
||||
})
|
||||
|
||||
if(id !== '') {
|
||||
const resp = await $.get('/platform/sys/club/clubEvaluateMine/findOne', {id})
|
||||
if (resp.code === 0) {
|
||||
this.formData = resp.data
|
||||
if(this.formData.files) {
|
||||
this.formData.files = JSON.parse(this.formData.files)
|
||||
}
|
||||
}
|
||||
evaluateName.txt.html(resp.data.evaluateName ? resp.data.evaluateName : '')
|
||||
yearActivity.txt.html(resp.data.yearActivity ? resp.data.yearActivity : '')
|
||||
}
|
||||
},
|
||||
//获取当前登录用户管理的社团并且年度审核通过的
|
||||
async getMyClubAndYearAuditPass() {
|
||||
const resp = await $.get('/platform/sys/club/clubEvaluateApply/getMyClubAndYearAuditPass', {
|
||||
year: new Date().getFullYear()
|
||||
})
|
||||
this.clubList = resp.data
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
const year = moment().format('YYYY')
|
||||
this.isCanApply = year % 2 === 0
|
||||
if(this.isCanApply === false) {
|
||||
this.$alert('当前年份(' + year + ')不能进行年度优秀社团申报', '温馨提示', {
|
||||
confirmButtonText: '确定',
|
||||
})
|
||||
}
|
||||
await this.getMyClubAndYearAuditPass()
|
||||
setTimeout(() => {
|
||||
this.initData()
|
||||
}, 200)
|
||||
},
|
||||
})
|
||||
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,253 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.table_fixed {
|
||||
table-layout: fixed !important;
|
||||
}
|
||||
</style>
|
||||
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
|
||||
<el-card shadow="never">
|
||||
<div class="search">
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">年  度:</div>
|
||||
<div class="search-item-option">
|
||||
<el-date-picker
|
||||
placeholder="选择年度"
|
||||
type="year" style="width: 100%"
|
||||
v-model="pageForm.year"
|
||||
value-format="yyyy">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
</div>
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">社团名称:</div>
|
||||
<div class="search-item-option">
|
||||
<el-select v-model="pageForm.clubId" placeholder="请选择社团" filterable clearable
|
||||
style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in clubList"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="search-query">
|
||||
<el-button @click="doSearch" icon="el-icon-search" type="primary">搜索</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
<el-card class="mt10" shadow="never">
|
||||
<table-tool :app="this" label="申请列表">
|
||||
<template #func>
|
||||
<el-radio-group v-model="pageForm.isAudit" @change="doSearch">
|
||||
<el-radio-button :label="null">全部</el-radio-button>
|
||||
<el-radio-button :label="true">已审核</el-radio-button>
|
||||
<el-radio-button :label="false">未审核</el-radio-button>
|
||||
</el-radio-group>
|
||||
</template>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" :size="tableSize">
|
||||
<el-table-column :index="indexMethod" align="center" header-align="center" label="序号" type="index"
|
||||
width="80px"></el-table-column>
|
||||
|
||||
<el-table-column label="社团名称" prop="name" sortable align="center" header-align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="社团编码" prop="code" sortable align="center" header-align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="社团类型" prop="typeName" sortable align="center" header-align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="成立时间" prop="create_time" sortable align="center" header-align="center"
|
||||
show-overflow-tooltip>
|
||||
<template slot-scope="{row}">
|
||||
<span>{{ moment(row.foundTime).format('YYYY-MM-DD') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="年度" prop="applyTime" sortable align="center" header-align="center"
|
||||
show-overflow-tooltip>
|
||||
<template slot-scope="{row}">
|
||||
<span>{{ moment(row.applyTime).format('YYYY') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="申请时间" prop="applyTime" sortable align="center" header-align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="状态" prop="stateName" sortable align="center" header-align="center"
|
||||
show-overflow-tooltip>
|
||||
<template slot-scope="{row}">
|
||||
<span :style="'color: ' + row.stateColor">{{ row.stateName }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="操作" width="300px">
|
||||
<template scope="{row}">
|
||||
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
|
||||
<el-button v-if="[2040].includes(row.state)" @click="openAudit(row)" size="mini" type="primary">审核</el-button>
|
||||
<el-button v-if="[2050, 2060, 2070].includes(row.state)" @click="rollback(row)" size="mini" type="primary">撤回</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
|
||||
<template #edit>
|
||||
<club-evaluate-info ref="info2" :handle="true" label="会长审核" :panes="[2, 3]">
|
||||
<template #handle>
|
||||
<vi-title title="审核信息"></vi-title>
|
||||
<el-form :model="formData" ref="form" :rules="formRules" label-position="right"
|
||||
style="padding: 20px 0"
|
||||
label-width="120px">
|
||||
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="userName" label="审核人员">
|
||||
<el-input v-model="formData.userName" readonly></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="auditTime" label="审核时间">
|
||||
<el-input v-model="formData.auditTime" readonly></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-form-item prop="auditOpinion" label="审核意见">
|
||||
<el-input type="textarea" v-model="formData.auditOpinion" rows="4" maxlength="500"
|
||||
placeholder="请填写您的审核意见"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
</el-form>
|
||||
|
||||
<div style="float: right;margin: 20px 0">
|
||||
<el-button @click="doReview(1)">拒绝</el-button>
|
||||
<el-button type="danger" @click="doReview(2)">退回修改</el-button>
|
||||
<el-button type="primary" @click="doReview(3)">通过</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</club-evaluate-info>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<club-evaluate-info ref="info"></club-evaluate-info>
|
||||
</template>
|
||||
</guava>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
pageForm: {
|
||||
clubId: '',
|
||||
year: moment().format('YYYY'),
|
||||
isAudit: false,
|
||||
},
|
||||
tableData: [],
|
||||
viewData: {},
|
||||
clubList: [],
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'club-evaluate-info': httpVueLoader('/components/club/clubEvaluateInfo.vue'),
|
||||
},
|
||||
methods: {
|
||||
async rollback(row) {
|
||||
const confirm = await this.$confirm('您确定要撤回吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
if (confirm === "confirm") {
|
||||
const resp = await $.post('/platform/sys/club/clubEvaluateHzAudit/rollback', {
|
||||
id: row.id
|
||||
})
|
||||
if(resp.code === 0) {
|
||||
await this.pageData()
|
||||
this.notifySuccess(resp.msg)
|
||||
} else {
|
||||
this.notifyWarning(resp.msg)
|
||||
}
|
||||
}
|
||||
},
|
||||
async doReview(flag) {
|
||||
await this.$refs["form"].validate(async(valid) => {
|
||||
if (valid) {
|
||||
this.formData.pass = flag
|
||||
const resp = await $.post('/platform/sys/club/clubEvaluateHzAudit/doReview', this.formData)
|
||||
if(resp.code === 0) {
|
||||
await this.pageData()
|
||||
this.notifySuccess(resp.msg)
|
||||
this.$refs['guava'].index()
|
||||
} else {
|
||||
this.notifyWarning(resp.msg)
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
doSearch() {
|
||||
this.pageForm.pageNumber = 1
|
||||
this.pageData()
|
||||
},
|
||||
openView(row) {
|
||||
const {id} = row
|
||||
this.$refs.guava.view()
|
||||
this.$nextTick(() => {
|
||||
this.$refs.info.getInfo(id)
|
||||
})
|
||||
},
|
||||
async openAudit(row) {
|
||||
this.formData = {
|
||||
id: row.id,
|
||||
userName: "${@shiro.getPrincipalProperty('username')}",
|
||||
auditTime: moment().format('YYYY-MM-DD HH:mm:ss'),
|
||||
auditOpinion: '',
|
||||
}
|
||||
this.$refs.guava.edit()
|
||||
this.$nextTick(() => {
|
||||
this.$refs.info2.getInfo(row.id)
|
||||
})
|
||||
},
|
||||
async pageData() {
|
||||
let form = clone(this.pageForm)
|
||||
if(form.isAudit === null) {
|
||||
delete form.isAudit
|
||||
}
|
||||
const resp = await $.post("/platform/sys/club/clubEvaluateHzAudit/pageData", form);
|
||||
if (resp.code === 0) {
|
||||
this.tableData = resp.data.list;
|
||||
this.pageForm.totalCount = resp.data.totalCount;
|
||||
} else {
|
||||
this.$message({
|
||||
message: resp.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
},
|
||||
//获取当前登录用户管理的社团并且年度审核通过的
|
||||
async getMyClubAndYearAuditPass() {
|
||||
const resp = await $.get('/platform/sys/club/clubEvaluateApply/getMyClubAndYearAuditPass', {
|
||||
year: this.pageForm.year
|
||||
})
|
||||
this.clubList = resp.data
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
await this.getMyClubAndYearAuditPass()
|
||||
await this.pageData()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,184 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.table_fixed {
|
||||
table-layout: fixed !important;
|
||||
}
|
||||
</style>
|
||||
|
||||
|
||||
<div id="app" v-cloak>
|
||||
|
||||
<guava ref="guava">
|
||||
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<div class="search">
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">年  度:</div>
|
||||
<div class="search-item-option">
|
||||
<el-date-picker
|
||||
placeholder="选择年度"
|
||||
type="year" style="width: 100%"
|
||||
v-model="pageForm.applyYear"
|
||||
value-format="yyyy">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
</div>
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">社团名称:</div>
|
||||
<div class="search-item-option">
|
||||
<el-select v-model="pageForm.clubId" placeholder="请选择社团" filterable clearable
|
||||
style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in clubList"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="search-query">
|
||||
<el-button @click="doSearch" icon="el-icon-search" type="primary">搜索</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
<el-card class="mt10" shadow="never">
|
||||
<table-tool :app="this" label="申请列表">
|
||||
<template #func>
|
||||
<el-button @click="openAdd" size="medium" type="primary">评优申请</el-button>
|
||||
</template>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" :size="tableSize">
|
||||
<el-table-column :index="indexMethod" align="center" header-align="center" label="序号" type="index"
|
||||
width="80px"></el-table-column>
|
||||
|
||||
<el-table-column label="社团名称" prop="name" sortable align="center" header-align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="社团编码" prop="code" sortable align="center" header-align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="社团类型" prop="typeName" sortable align="center" header-align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="成立时间" prop="create_time" sortable align="center" header-align="center"
|
||||
show-overflow-tooltip>
|
||||
<template slot-scope="{row}">
|
||||
<span>{{ moment(row.foundTime).format('YYYY-MM-DD') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="年度" prop="applyTime" sortable align="center" header-align="center"
|
||||
show-overflow-tooltip>
|
||||
<template slot-scope="{row}">
|
||||
<span>{{ moment(row.applyTime).format('YYYY') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="申请时间" prop="applyTime" sortable align="center" header-align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="状态" prop="stateName" sortable align="center" header-align="center"
|
||||
show-overflow-tooltip>
|
||||
<template slot-scope="{row}">
|
||||
<span :style="'color: ' + row.stateColor">{{ row.stateName }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="操作" width="300px">
|
||||
<template scope="{row}">
|
||||
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
|
||||
<el-button :disabled="![2000,2020,2050,2080].includes(row.state)" @click="openEdit(row)" size="mini" type="primary">编辑</el-button>
|
||||
<el-button v-if="${@shiro.hasRole('sysadmin')} || ${@shiro.hasRole('A06')} || ${@shiro.hasRole('xxhgly')}"
|
||||
@click="deleteDo(row)" size="mini" type="danger">删除</el-button>
|
||||
<el-button v-else :disabled="![2000,2020,2050,2080].includes(row.state)" @click="deleteDo(row)" size="mini" type="danger">删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<club-evaluate-info ref="info"></club-evaluate-info>
|
||||
</template>
|
||||
|
||||
</guava>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
components: {
|
||||
'club-evaluate-info': httpVueLoader('/components/club/clubEvaluateInfo.vue'),
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
pageForm: {
|
||||
clubId: '',
|
||||
applyYear: moment().format('YYYY'),
|
||||
},
|
||||
tableData: [],
|
||||
clubList: [],
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
doSearch() {
|
||||
this.pageForm.pageNumber = 1
|
||||
this.pageData()
|
||||
},
|
||||
openAdd() {
|
||||
sublime.jumpPagePjax('/platform/sys/club/clubEvaluateApply')
|
||||
},
|
||||
openView(row) {
|
||||
const {id} = row
|
||||
this.$refs.guava.view()
|
||||
this.$nextTick(() => {
|
||||
this.$refs.info.getInfo(id)
|
||||
})
|
||||
},
|
||||
openEdit(row) {
|
||||
sublime.jumpPagePjax('/platform/sys/club/clubEvaluateApply?id=' + row.id)
|
||||
},
|
||||
async deleteDo(row) {
|
||||
const confirm = await this.$confirm('此操作将永久删除, 是否继续?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
if (confirm === "confirm") {
|
||||
const resp = await $.post('/platform/sys/club/clubEvaluateMine/doDelete', {id: row.id})
|
||||
this.notifySuccess("删除成功")
|
||||
this.doSearch()
|
||||
}
|
||||
},
|
||||
async pageData() {
|
||||
const resp = await $.post("/platform/sys/club/clubEvaluateMine/pageData", this.pageForm);
|
||||
if (resp.code === 0) {
|
||||
this.tableData = resp.data.list;
|
||||
this.pageForm.totalCount = resp.data.totalCount;
|
||||
} else {
|
||||
this.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
},
|
||||
//获取当前登录用户管理的社团并且年度审核通过的
|
||||
async getMyClubAndYearAuditPass() {
|
||||
const resp = await $.get('/platform/sys/club/clubEvaluateApply/getMyClubAndYearAuditPass', {
|
||||
applyYear: this.pageForm.applyYear
|
||||
})
|
||||
this.clubList = resp.data
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
await this.getMyClubAndYearAuditPass()
|
||||
await this.pageData()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,249 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.table_fixed {
|
||||
table-layout: fixed !important;
|
||||
}
|
||||
</style>
|
||||
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
|
||||
<el-card shadow="never">
|
||||
<div class="search">
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">年  度:</div>
|
||||
<div class="search-item-option">
|
||||
<el-date-picker
|
||||
placeholder="选择年度"
|
||||
type="year" style="width: 100%"
|
||||
v-model="pageForm.year"
|
||||
value-format="yyyy">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
</div>
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">社团名称:</div>
|
||||
<div class="search-item-option">
|
||||
<el-select v-model="pageForm.clubId" placeholder="请选择社团" filterable clearable
|
||||
style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in clubList"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="search-query">
|
||||
<el-button @click="doSearch" icon="el-icon-search" type="primary">搜索</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
<el-card class="mt10" shadow="never">
|
||||
<table-tool :app="this" label="申请列表">
|
||||
<template #func>
|
||||
<el-radio-group v-model="pageForm.isAudit" @change="doSearch">
|
||||
<el-radio-button :label="null">全部</el-radio-button>
|
||||
<el-radio-button :label="true">已审核</el-radio-button>
|
||||
<el-radio-button :label="false">未审核</el-radio-button>
|
||||
</el-radio-group>
|
||||
</template>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" :size="tableSize">
|
||||
<el-table-column :index="indexMethod" align="center" header-align="center" label="序号" type="index"
|
||||
width="80px"></el-table-column>
|
||||
|
||||
<el-table-column label="社团名称" prop="name" sortable align="center" header-align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="社团编码" prop="code" sortable align="center" header-align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="社团类型" prop="typeName" sortable align="center" header-align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="成立时间" prop="create_time" sortable align="center" header-align="center"
|
||||
show-overflow-tooltip>
|
||||
<template slot-scope="{row}">
|
||||
<span>{{ moment(row.create_time).format('YYYY-MM-DD') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="年度" prop="applyYear" sortable align="center" header-align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="申请时间" prop="applyTime" sortable align="center" header-align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="状态" prop="stateName" sortable align="center" header-align="center"
|
||||
show-overflow-tooltip>
|
||||
<template slot-scope="{row}">
|
||||
<span :style="'color: ' + row.stateColor">{{ row.stateName }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="操作" width="300px">
|
||||
<template scope="{row}">
|
||||
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
|
||||
<el-button v-if="[2010].includes(row.state)" @click="openAudit(row)" size="mini" type="primary">审核</el-button>
|
||||
<el-button v-if="[2020, 2030, 2040].includes(row.state)" @click="rollback(row)" size="mini" type="primary">撤回</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
|
||||
<template #edit>
|
||||
<club-evaluate-info ref="info2" :handle="true" label="秘书长审核" :panes="[2]">
|
||||
<template #handle>
|
||||
<vi-title title="审核信息"></vi-title>
|
||||
<el-form :model="formData" ref="form" :rules="formRules" label-position="right"
|
||||
style="padding: 20px 0"
|
||||
label-width="120px">
|
||||
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="userName" label="审核人员">
|
||||
<el-input v-model="formData.userName" readonly></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="auditTime" label="审核时间">
|
||||
<el-input v-model="formData.auditTime" readonly></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-form-item prop="auditOpinion" label="审核意见">
|
||||
<el-input type="textarea" v-model="formData.auditOpinion" rows="4" maxlength="500"
|
||||
placeholder="请填写您的审核意见"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
</el-form>
|
||||
|
||||
<div style="float: right;margin: 20px 0">
|
||||
<el-button @click="doReview(1)">拒绝</el-button>
|
||||
<el-button type="danger" @click="doReview(2)">退回修改</el-button>
|
||||
<el-button type="primary" @click="doReview(3)">通过</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</club-evaluate-info>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<club-evaluate-info ref="info"></club-evaluate-info>
|
||||
</template>
|
||||
</guava>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
pageForm: {
|
||||
clubId: '',
|
||||
year: moment().format('YYYY'),
|
||||
isAudit: false,
|
||||
},
|
||||
tableData: [],
|
||||
viewData: {},
|
||||
clubList: [],
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'club-evaluate-info': httpVueLoader('/components/club/clubEvaluateInfo.vue'),
|
||||
},
|
||||
methods: {
|
||||
async rollback(row) {
|
||||
const confirm = await this.$confirm('您确定要撤回吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
if (confirm === "confirm") {
|
||||
const resp = await $.post('/platform/sys/club/clubEvaluateMszAudit/rollback', {
|
||||
id: row.id
|
||||
})
|
||||
if(resp.code === 0) {
|
||||
await this.pageData()
|
||||
this.notifySuccess(resp.msg)
|
||||
} else {
|
||||
this.notifyWarning(resp.msg)
|
||||
}
|
||||
}
|
||||
},
|
||||
async doReview(flag) {
|
||||
await this.$refs["form"].validate(async(valid) => {
|
||||
if (valid) {
|
||||
this.formData.pass = flag
|
||||
const resp = await $.post('/platform/sys/club/clubEvaluateMszAudit/doReview', this.formData)
|
||||
if(resp.code === 0) {
|
||||
await this.pageData()
|
||||
this.notifySuccess(resp.msg)
|
||||
this.$refs['guava'].index()
|
||||
} else {
|
||||
this.notifyWarning(resp.msg)
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
doSearch() {
|
||||
this.pageForm.pageNumber = 1
|
||||
this.pageData()
|
||||
},
|
||||
openView(row) {
|
||||
const {id} = row
|
||||
this.$refs.guava.view()
|
||||
this.$nextTick(() => {
|
||||
this.$refs.info.getInfo(id)
|
||||
})
|
||||
},
|
||||
async openAudit(row) {
|
||||
this.formData = {
|
||||
id: row.id,
|
||||
userName: "${@shiro.getPrincipalProperty('username')}",
|
||||
auditTime: moment().format('YYYY-MM-DD HH:mm:ss'),
|
||||
auditOpinion: '',
|
||||
}
|
||||
this.$refs.guava.edit()
|
||||
this.$nextTick(() => {
|
||||
this.$refs.info2.getInfo(row.id)
|
||||
})
|
||||
},
|
||||
async pageData() {
|
||||
let form = clone(this.pageForm)
|
||||
if(form.isAudit === null) {
|
||||
delete form.isAudit
|
||||
}
|
||||
const resp = await $.post("/platform/sys/club/clubEvaluateMszAudit/pageData", form);
|
||||
if (resp.code === 0) {
|
||||
this.tableData = resp.data.list;
|
||||
this.pageForm.totalCount = resp.data.totalCount;
|
||||
} else {
|
||||
this.$message({
|
||||
message: resp.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
},
|
||||
//获取当前登录用户管理的社团并且年度审核通过的
|
||||
async getMyClubAndYearAuditPass() {
|
||||
const resp = await $.get('/platform/sys/club/clubEvaluateApply/getMyClubAndYearAuditPass', {
|
||||
year: this.pageForm.year
|
||||
})
|
||||
this.clubList = resp.data
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
await this.getMyClubAndYearAuditPass()
|
||||
await this.pageData()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,256 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.table_fixed {
|
||||
table-layout: fixed !important;
|
||||
}
|
||||
</style>
|
||||
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
|
||||
<el-card shadow="never">
|
||||
<div class="search">
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">年  度:</div>
|
||||
<div class="search-item-option">
|
||||
<el-date-picker
|
||||
placeholder="选择年度"
|
||||
type="year" style="width: 100%"
|
||||
v-model="pageForm.year"
|
||||
value-format="yyyy">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
</div>
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">社团名称:</div>
|
||||
<div class="search-item-option">
|
||||
<el-select v-model="pageForm.clubId" placeholder="请选择社团" filterable clearable
|
||||
style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in clubList"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="search-query">
|
||||
<el-button @click="doSearch" icon="el-icon-search" type="primary">搜索</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
<el-card class="mt10" shadow="never">
|
||||
<table-tool :app="this" label="申请列表">
|
||||
<template #func>
|
||||
<el-radio-group v-model="pageForm.isAudit" @change="doSearch">
|
||||
<el-radio-button :label="null">全部</el-radio-button>
|
||||
<el-radio-button :label="true">已审核</el-radio-button>
|
||||
<el-radio-button :label="false">未审核</el-radio-button>
|
||||
</el-radio-group>
|
||||
</template>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" :size="tableSize">
|
||||
<el-table-column :index="indexMethod" align="center" header-align="center" label="序号" type="index"
|
||||
width="80px"></el-table-column>
|
||||
|
||||
<el-table-column label="社团名称" prop="name" sortable align="center" header-align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="社团编码" prop="code" sortable align="center" header-align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="社团类型" prop="typeName" sortable align="center" header-align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="成立时间" prop="create_time" sortable align="center" header-align="center"
|
||||
show-overflow-tooltip>
|
||||
<template slot-scope="{row}">
|
||||
<span>{{ moment(row.foundTime).format('YYYY-MM-DD') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="年度" prop="applyYear" sortable align="center" header-align="center"
|
||||
show-overflow-tooltip>
|
||||
<template slot-scope="{row}">
|
||||
<span>{{ moment(row.applyTime).format('YYYY') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="申请时间" prop="applyTime" sortable align="center" header-align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="状态" prop="stateName" sortable align="center" header-align="center"
|
||||
show-overflow-tooltip>
|
||||
<template slot-scope="{row}">
|
||||
<span :style="'color: ' + row.stateColor">{{ row.stateName }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="操作" width="300px">
|
||||
<template scope="{row}">
|
||||
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
|
||||
<el-button v-if="[2070].includes(row.state)" @click="openAudit(row)" size="mini" type="primary">审核</el-button>
|
||||
<el-button v-if="[2080, 2090, 2100].includes(row.state)" @click="rollback(row)" size="mini" type="primary">撤回</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
|
||||
<template #edit>
|
||||
<club-evaluate-info ref="info2" :handle="true" label="校工会审核" :panes="[2, 3, 4]">
|
||||
<template #handle>
|
||||
<vi-title title="审核信息"></vi-title>
|
||||
<el-form :model="formData" ref="form" :rules="formRules" label-position="right"
|
||||
style="padding: 20px 0"
|
||||
label-width="120px">
|
||||
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="userName" label="审核人员">
|
||||
<el-input v-model="formData.userName" readonly></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="auditTime" label="审核时间">
|
||||
<el-input v-model="formData.auditTime" readonly></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-form-item prop="auditOpinion" label="审核结果">
|
||||
<el-radio-group v-model="formData.auditOpinion">
|
||||
<el-radio label="优秀" border>优秀</el-radio>
|
||||
<el-radio label="合格" border>合格</el-radio>
|
||||
<el-radio label="不合格" border>不合格</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
|
||||
</el-form>
|
||||
|
||||
<div style="float: right;margin: 20px 0">
|
||||
<el-button @click="doReview(1)">拒绝</el-button>
|
||||
<el-button type="danger" @click="doReview(2)">退回修改</el-button>
|
||||
<el-button type="primary" @click="doReview(3)">通过</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</club-evaluate-info>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<club-evaluate-info ref="info"></club-evaluate-info>
|
||||
</template>
|
||||
</guava>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
pageForm: {
|
||||
clubId: '',
|
||||
year: moment().format('YYYY'),
|
||||
isAudit: false,
|
||||
},
|
||||
tableData: [],
|
||||
viewData: {},
|
||||
clubList: [],
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'club-evaluate-info': httpVueLoader('/components/club/clubEvaluateInfo.vue'),
|
||||
},
|
||||
methods: {
|
||||
async rollback(row) {
|
||||
const confirm = await this.$confirm('您确定要撤回吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
if (confirm === "confirm") {
|
||||
const resp = await $.post('/platform/sys/club/clubEvaluateSchoolAudit/rollback', {
|
||||
id: row.id
|
||||
})
|
||||
if(resp.code === 0) {
|
||||
await this.pageData()
|
||||
this.notifySuccess(resp.msg)
|
||||
} else {
|
||||
this.notifyWarning(resp.msg)
|
||||
}
|
||||
}
|
||||
},
|
||||
async doReview(flag) {
|
||||
await this.$refs["form"].validate(async(valid) => {
|
||||
if (valid) {
|
||||
this.formData.pass = flag
|
||||
const resp = await $.post('/platform/sys/club/clubEvaluateSchoolAudit/doReview', this.formData)
|
||||
if(resp.code === 0) {
|
||||
await this.pageData()
|
||||
this.notifySuccess(resp.msg)
|
||||
this.$refs['guava'].index()
|
||||
} else {
|
||||
this.notifyWarning(resp.msg)
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
doSearch() {
|
||||
this.pageForm.pageNumber = 1
|
||||
this.pageData()
|
||||
},
|
||||
openView(row) {
|
||||
const {id} = row
|
||||
this.$refs.guava.view()
|
||||
this.$nextTick(() => {
|
||||
this.$refs.info.getInfo(id)
|
||||
})
|
||||
},
|
||||
async openAudit(row) {
|
||||
this.formData = {
|
||||
id: row.id,
|
||||
userName: "${@shiro.getPrincipalProperty('username')}",
|
||||
auditTime: moment().format('YYYY-MM-DD HH:mm:ss'),
|
||||
auditOpinion: '优秀',
|
||||
}
|
||||
this.$refs.guava.edit()
|
||||
this.$nextTick(() => {
|
||||
this.$refs.info2.getInfo(row.id)
|
||||
})
|
||||
},
|
||||
async pageData() {
|
||||
let form = clone(this.pageForm)
|
||||
if(form.isAudit === null) {
|
||||
delete form.isAudit
|
||||
}
|
||||
const resp = await $.post("/platform/sys/club/clubEvaluateSchoolAudit/pageData", form);
|
||||
if (resp.code === 0) {
|
||||
this.tableData = resp.data.list;
|
||||
this.pageForm.totalCount = resp.data.totalCount;
|
||||
} else {
|
||||
this.$message({
|
||||
message: resp.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
},
|
||||
//获取当前登录用户管理的社团并且年度审核通过的
|
||||
async getMyClubAndYearAuditPass() {
|
||||
const resp = await $.get('/platform/sys/club/clubEvaluateApply/getMyClubAndYearAuditPass', {
|
||||
year: this.pageForm.year
|
||||
})
|
||||
this.clubList = resp.data
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
await this.getMyClubAndYearAuditPass()
|
||||
await this.pageData()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,346 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.el-table-container {
|
||||
padding-left: 0px;
|
||||
margin-top: 5px;
|
||||
padding-right: 0px;
|
||||
}
|
||||
</style>
|
||||
<div id="app" v-cloak>
|
||||
|
||||
<guava ref="guava">
|
||||
<div style="padding-right: 10px">
|
||||
<el-card shadow="never">
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-select @change="getClub" v-model="pageForm.auditState" placeholder="请选择年审状态">
|
||||
<el-option label="全部" :value="null"></el-option>
|
||||
<el-option label="年审通过" :value="true"></el-option>
|
||||
<el-option label="年审未通过" :value="false"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-select v-model="pageForm.clubId" placeholder="请选择社团">
|
||||
<el-option v-for="item in clubList"
|
||||
:label="item.name" :value="item.id" :key="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
<div class="btn-group tool-button mt5">
|
||||
<dict-select clearable code="userState" placeholder="请选择在职状态"
|
||||
v-model="pageForm.userState"></dict-select>
|
||||
</div>
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-select clearable filterable placeholder="请选择性别"
|
||||
v-model="pageForm.sex">
|
||||
<el-option label="男" value="男"></el-option>
|
||||
<el-option label="女" value="女"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-button type="primary" icon="el-icon-search" @click="doSearch"></el-button>
|
||||
</div>
|
||||
|
||||
<div class="pull-right offscreen-right mt5">
|
||||
<el-radio-group @change="(val) => doSearch()"
|
||||
v-model="pageForm.giveMoney">
|
||||
<el-radio-button :label="null">全部</el-radio-button>
|
||||
<el-radio-button :label="true">可拨付</el-radio-button>
|
||||
<el-radio-button :label="false">不可拨付</el-radio-button>
|
||||
</el-radio-group>
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" class="mt10">
|
||||
<table-tool :app="this" label="社团统计">
|
||||
<template #func>
|
||||
<el-button @click="exportData" type="primary" size="small">导出全部统计数据</el-button>
|
||||
<el-button @click="exportUserData(null)" v-if="${@shiro.hasAnyRoles('sysadmin', 'A06', 'xxhgly')}"
|
||||
type="primary" size="small">导出全部人员明细(zip)</el-button>
|
||||
<el-button @click="exportExcel(null)" v-if="${@shiro.hasAnyRoles('sysadmin', 'A06', 'xxhgly')}"
|
||||
type="primary" size="small">导出全部人员明细(EXCEL)</el-button>
|
||||
<el-button @click="exportFiles(null)" v-if="${@shiro.hasAnyRoles('sysadmin', 'A06', 'xxhgly')}"
|
||||
type="primary" size="small">导出全部上传资料</el-button>
|
||||
</template>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" style="width: 100%" row-key="id" v-loading="tabLoading">
|
||||
<el-table-column align="center" header-align="center" label="序号" type="index">
|
||||
<template scope="scope">
|
||||
<span>{{scope.$index+(pageForm.pageNumber - 1) * pageForm.pageSize + 1}} </span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="社团名称"
|
||||
prop="name" show-overflow-tooltip></el-table-column>
|
||||
|
||||
<el-table-column align="center" header-align="center" label="社团编码"
|
||||
prop="code"></el-table-column>
|
||||
|
||||
<el-table-column align="center" sortable header-align="center" label="社团总人数"
|
||||
prop="total"></el-table-column>
|
||||
|
||||
<el-table-column align="center" sortable header-align="center" label="在职人数"
|
||||
prop="work"></el-table-column>
|
||||
|
||||
<el-table-column align="center" header-align="center" label="退休人数"
|
||||
prop="retire"></el-table-column>
|
||||
|
||||
<el-table-column align="center" sortable header-align="center" label="男"
|
||||
prop="man"></el-table-column>
|
||||
|
||||
<el-table-column align="center" sortable header-align="center" label="女"
|
||||
prop="woman"></el-table-column>
|
||||
|
||||
<el-table-column align="center" sortable header-align="center" label="理事机构人数"
|
||||
prop="governing_body"></el-table-column>
|
||||
|
||||
<!--<el-table-column align="center" header-align="center" label="社团确认" sortable
|
||||
prop="club_has_confirm"></el-table-column>
|
||||
|
||||
<el-table-column align="center" header-align="center" label="社团待确认" sortable
|
||||
prop="club_no_confirm"></el-table-column>
|
||||
|
||||
<el-table-column align="center" header-align="center" label="校工会确认" sortable
|
||||
prop="school_has_confirm"></el-table-column>
|
||||
|
||||
<el-table-column align="center" header-align="center" label="校工会待确认" sortable width="160"
|
||||
prop="school_no_confirm"></el-table-column>-->
|
||||
|
||||
<el-table-column align="center" fixed="right" header-align="center" label="操作">
|
||||
<template scope="{row}">
|
||||
<el-dropdown @command="dropdownCommand">
|
||||
<el-button plain size="mini">
|
||||
<i class="ti-settings"></i>
|
||||
<span class="ti-angle-down"></span>
|
||||
</el-button>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item :command="{action:openView,value:row}">
|
||||
查看人员明细
|
||||
</el-dropdown-item>
|
||||
<!--<el-dropdown-item :command="{action:exportData,value:row}">
|
||||
导出统计数据
|
||||
</el-dropdown-item>-->
|
||||
<el-dropdown-item :command="{action:exportUserData,value:row}">
|
||||
导出人员明细
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item :command="{action:exportFiles,value:row}">
|
||||
导出上传资料
|
||||
</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
</el-table>
|
||||
<el-row class="el-pagination-container">
|
||||
<el-pagination
|
||||
@size-change="pageSizeChange"
|
||||
@current-change="pageNumberChange"
|
||||
:current-page="pageForm.pageNumber"
|
||||
:page-sizes="[10, 20, 30, 50]"
|
||||
:page-size="pageForm.pageSize"
|
||||
layout="total, sizes, prev, pager, next"
|
||||
:total="pageForm.totalCount">
|
||||
</el-pagination>
|
||||
</el-row>
|
||||
</el-card>
|
||||
|
||||
</div>
|
||||
|
||||
<template #view>
|
||||
<vi-title :title="userTitle"></vi-title>
|
||||
<el-table :data="userTableData" v-loading="userTableLoading">
|
||||
<el-table-column label="姓名" prop="username" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="工号" prop="loginname" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="性别" prop="sex" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="联系方式" prop="mobile" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="所属单位" prop="unitname" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="在职状态" prop="userState" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="是否拨付" prop="giveMoney" show-overflow-tooltip>
|
||||
<template scope="scope">
|
||||
<span class="text-success" v-if="scope.row.giveMoney">拨付</span>
|
||||
<span class="text-danger" v-else>不拨付</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="是否缴费" prop="isjf" show-overflow-tooltip>
|
||||
<template slot-scope="scope">
|
||||
<span class="text-success" v-if="scope.row.isjf">已缴费</span>
|
||||
<span class="text-danger" v-else>未缴费</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="职务" prop="sf" show-overflow-tooltip>
|
||||
<template slot-scope="scope">
|
||||
<el-lable v-if="scope.row.sf==1">会长</el-lable>
|
||||
<el-lable v-if="scope.row.sf==2">会员</el-lable>
|
||||
<el-lable v-if="scope.row.sf==3">副会长</el-lable>
|
||||
<el-lable v-if="scope.row.sf==4">秘书长</el-lable>
|
||||
<el-lable v-if="scope.row.sf==5">副秘书长</el-lable>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<el-row class="el-pagination-container">
|
||||
<el-pagination
|
||||
@current-change="userPageNumberChange"
|
||||
:current-page="userPageForm.pageNumber"
|
||||
:page-sizes="[10, 20, 30, 50]"
|
||||
:page-size="userPageForm.pageSize"
|
||||
layout="total, sizes, prev, pager, next"
|
||||
:total="userPageForm.totalCount">
|
||||
</el-pagination>
|
||||
</el-row>
|
||||
</template>
|
||||
</guava>
|
||||
|
||||
</div>
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
userTableData: [],
|
||||
tableData: [],
|
||||
pageForm: {
|
||||
pageNumber: 1,
|
||||
pageSize: 10,
|
||||
totalCount: 0,
|
||||
giveMoney: null,
|
||||
sex: '',
|
||||
userState: '',
|
||||
auditState: null,
|
||||
clubId: '',
|
||||
},
|
||||
userPageForm: {
|
||||
pageNumber: 1,
|
||||
pageSize: 10,
|
||||
totalCount: 0,
|
||||
},
|
||||
tabLoading: false,
|
||||
clubList: [],
|
||||
userTitle: '',
|
||||
clickRow: {},
|
||||
userTableLoading: false,
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'dict-select': httpVueLoader('/components/plugins/DictSelect.vue?v=1.0.0'),
|
||||
},
|
||||
methods: {
|
||||
exportUserData(row) {
|
||||
const id = row === null ? '' : row.id
|
||||
let url = '/platform/sys/club/clubUserCount/exportUserData?clubId=' + id +
|
||||
'&userState=' + this.pageForm.userState +
|
||||
'&sex=' + this.pageForm.sex
|
||||
if (this.pageForm.giveMoney !== null) {
|
||||
url += '&giveMoney=' + this.pageForm.giveMoney
|
||||
}
|
||||
window.open(url)
|
||||
},
|
||||
exportExcel(){
|
||||
let params = {
|
||||
clubId: this.pageForm.clubId,
|
||||
userState: this.pageForm.userState,
|
||||
sex: this.pageForm.sex
|
||||
}
|
||||
window.open("/platform/sys/club/clubUserCount/exportExcel", params)
|
||||
},
|
||||
exportFiles(row) {
|
||||
const id = row === null ? '' : row.id
|
||||
let url = '/platform/sys/club/clubUserCount/exportFiles?clubId=' + id
|
||||
window.open(url)
|
||||
},
|
||||
async openView(row) {
|
||||
this.clickRow = row
|
||||
await this.userPageData()
|
||||
this.userTitle = row.name + '人员明细信息'
|
||||
this.$refs.guava.view()
|
||||
},
|
||||
exportData() {
|
||||
const url = loc() + "/exportData?giveMoney=" + this.pageForm.giveMoney +
|
||||
"&sex=" + this.pageForm.sex +
|
||||
"&clubId" + this.pageForm.clubId +
|
||||
"&auditState" + this.pageForm.auditState +
|
||||
"&userState=" + this.pageForm.userState
|
||||
window.open(url)
|
||||
},
|
||||
doSearch() {
|
||||
this.pageForm.pageNumber = 1
|
||||
this.pageData()
|
||||
},
|
||||
pageNumberChange(val) {//页码更新操作
|
||||
this.pageForm.pageNumber = val
|
||||
this.pageData()
|
||||
},
|
||||
pageSizeChange(val) {//分页大小更新操作
|
||||
this.pageForm.pageSize = val
|
||||
this.pageData()
|
||||
},
|
||||
userPageNumberChange(val) {//页码更新操作
|
||||
this.userPageForm.pageNumber = val
|
||||
this.userPageData()
|
||||
},
|
||||
userPageSizeChange(val) {//分页大小更新操作
|
||||
this.userPageForm.pageSize = val
|
||||
this.userPageData()
|
||||
},
|
||||
async userPageData() {
|
||||
this.userTableLoading = true
|
||||
this.userPageForm.clubId = this.clickRow.id
|
||||
this.userPageForm.userState = this.pageForm.userState
|
||||
this.userPageForm.sex = this.pageForm.sex
|
||||
if (this.pageForm.giveMoney === null) {
|
||||
this.userPageForm.giveMoney = undefined
|
||||
} else {
|
||||
this.userPageForm.giveMoney = this.pageForm.giveMoney
|
||||
}
|
||||
const resp = await $.post("/platform/sys/club/clubUserCount/userPageData", this.userPageForm);
|
||||
if (resp.code === 0) {
|
||||
this.userTableData = resp.data.list;
|
||||
this.userPageForm.totalCount = resp.data.totalCount;
|
||||
this.userTableLoading = false
|
||||
} else {
|
||||
this.$message({message: resp.msg, type: 'error'});
|
||||
this.userTableLoading = false
|
||||
}
|
||||
},
|
||||
pageData() {//加载分页数据
|
||||
sublime.showLoadingbar();//显示loading
|
||||
this.tabLoading = true
|
||||
const form = clone(this.pageForm)
|
||||
if (form.giveMoney === null) {
|
||||
delete form.giveMoney
|
||||
}
|
||||
if (form.auditState === null) {
|
||||
delete form.auditState
|
||||
}
|
||||
$.post(base + "/platform/sys/club/clubUserCount/pageData", form, (data) => {
|
||||
sublime.closeLoadingbar();//关闭loading
|
||||
this.tabLoading = false
|
||||
if (data.code === 0) {
|
||||
this.tableData = data.data.list;
|
||||
this.pageForm.totalCount = data.data.totalCount;
|
||||
} else {
|
||||
this.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
async getClub() {
|
||||
const resp = await $.get(loc() + '/getClub', {
|
||||
auditState: this.pageForm.auditState !== null ? this.pageForm.auditState : undefined
|
||||
})
|
||||
this.clubList = resp.data
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
await this.getClub()
|
||||
this.pageData()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,526 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<style>
|
||||
|
||||
[v-cloak] {
|
||||
display: none;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
|
||||
<guava>
|
||||
<el-card shadow="never">
|
||||
|
||||
<div slot="header" class="clearfix">
|
||||
<el-button icon="el-icon-back" style="font-size: 16px" type="text" @click="fh"
|
||||
v-if="jc.id">返回
|
||||
</el-button>
|
||||
<h3 style="color: rgb(24, 103, 176);font-family: Microsoft YaHei;">考核登记</h3>
|
||||
</div>
|
||||
<el-steps :active="registerTypeName" finish-status="success">
|
||||
<el-step title="基础信息">
|
||||
|
||||
</el-step>
|
||||
<el-step title="财务收支情况">
|
||||
|
||||
</el-step>
|
||||
<el-step title="年末理事机构人员">
|
||||
|
||||
</el-step>
|
||||
</el-steps>
|
||||
|
||||
<el-form v-show="registerTypeName===0" :model="jc" ref="addForm1" :rules="rules"
|
||||
label-width="120px"
|
||||
style="margin: 50px 0px 0px 0px">
|
||||
<vi-title title="基础信息"></vi-title>
|
||||
<el-row :gutter="20" type="flex">
|
||||
<el-col :span="8">
|
||||
<el-form-item prop="clubId" label="社团名称">
|
||||
<el-select v-model="jc.clubId" placeholder="请选择所属社团" filterable
|
||||
clearable
|
||||
@change="changeClub"
|
||||
style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in clubOptions"
|
||||
:key="item.stid"
|
||||
:label="item.name"
|
||||
:value="item.stid">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item prop="foundTime" label="成立时间">
|
||||
<el-input v-model="jc.foundTime" placeholder="请输入成立时间"
|
||||
readonly></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item prop="dues_standard" label="会费标准">
|
||||
<el-input v-model="jc.dues_standard" placeholder="请输入会费标准"
|
||||
readonly></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="20" type="flex">
|
||||
<el-col :span="8">
|
||||
<el-form-item prop="yearActivity" label="年度活动情况">
|
||||
<file-upload :files.sync="jc.yearActivity"
|
||||
:type="['doc','docx']"></file-upload>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item prop="summaryFiles" label="工作总结">
|
||||
<file-upload :files.sync="jc.summaryFiles"
|
||||
:type="['doc','docx']"></file-upload>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item prop="planFiles" label="工作计划">
|
||||
<file-upload :files.sync="jc.planFiles"
|
||||
:type="['doc','docx']"></file-upload>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<vi-title title="社团成员变化情况"></vi-title>
|
||||
<el-row :gutter="20" type="flex">
|
||||
<el-col :span="24">
|
||||
<el-form-item prop="" label="">
|
||||
<el-table :data="jc.changeUserNum" max-height="300">
|
||||
<el-table-column label="序号" type="index"
|
||||
width="50"></el-table-column>
|
||||
<el-table-column label="人员类型" prop="userState"></el-table-column>
|
||||
<el-table-column label="年初人员" prop="yearFirstNum"></el-table-column>
|
||||
<el-table-column label="年度增加" prop="yearAddNum"></el-table-column>
|
||||
<el-table-column label="年度减少" prop="yearEditNum"></el-table-column>
|
||||
<el-table-column label="年末人数" prop="thisYearNum"></el-table-column>
|
||||
</el-table>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
|
||||
</el-form>
|
||||
|
||||
<el-form v-show="registerTypeName===1" :model="cwsz" ref="addForm2" :rules="rules"
|
||||
label-width="120px"
|
||||
style="margin: 50px 0px 0px 0px">
|
||||
|
||||
<div>
|
||||
<vi-title title="明细"></vi-title>
|
||||
|
||||
<el-table :data="cwsz.incomeDetailed" max-height="300">
|
||||
<el-table-column label="序号" type="index" width="50"></el-table-column>
|
||||
<el-table-column label="日期" prop="date" width="250">
|
||||
<template slot-scope="{row}">
|
||||
<el-date-picker
|
||||
v-model="row.date"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="选择日期">
|
||||
</el-date-picker>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="项目内容" prop="nr">
|
||||
<template slot-scope="{row}">
|
||||
<el-input v-model="row.nr" maxlength="15"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="收支类型" prop="incomeType" width="200">
|
||||
<template slot-scope="{row,$index}">
|
||||
<el-select :clearable="![0,1,2].includes($index)"
|
||||
:disabled="[0,1,2].includes($index)"
|
||||
placeholder="请选择收支类型"
|
||||
v-model="row.incomeType"
|
||||
@change="changeIncomeType">
|
||||
<el-option key="会费收入" disabled label="会费收入"
|
||||
value="会费收入"></el-option>
|
||||
<el-option disabled key="校工会拨款" label="校工会拨款"
|
||||
value="校工会拨款"></el-option>
|
||||
<el-option disabled key="年度结余" label="年度结余"
|
||||
value="年度结余"></el-option>
|
||||
<el-option key="社会赞助" label="社会赞助" value="社会赞助"></el-option>
|
||||
<el-option key="支出" label="支出" value="支出"></el-option>
|
||||
<el-option key="其它" label="其它" value="其它"></el-option>
|
||||
</el-select>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="年初余额(元)" prop="qcMoney" width="100">
|
||||
<template slot-scope="{row,$index}">
|
||||
<el-input :disabled="$index!=0" @input="inputQcMoney(row)"
|
||||
v-model="row.qcMoney" type="number"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="收入(元)" prop="income" width="100">
|
||||
<template slot-scope="{row,$index}">
|
||||
<el-input v-model="row.income" @input="inputIncome(row)"
|
||||
type="number"
|
||||
:disabled="!['社会赞助','其它'].includes(row.incomeType)||$index===0"
|
||||
maxlength="15"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="支出(元)" prop="expend" width="100">
|
||||
<template slot-scope="{row,$index}">
|
||||
<el-input v-model="row.expend"
|
||||
type="number"
|
||||
:disabled="!['支出','其它'].includes(row.incomeType)||$index===0"
|
||||
@input="inputExpend"
|
||||
maxlength="15"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="年度结余(元)" prop="qmMoney" width="100">
|
||||
<template slot-scope="{row}">
|
||||
<el-input v-model="row.qmMoney" disabled
|
||||
type="number"
|
||||
maxlength="15"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="备注" prop="notes">
|
||||
<template slot-scope="{row}">
|
||||
<el-input v-model="row.notes"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="150">
|
||||
<template slot="header" slot-scope="{row,$index}">
|
||||
<el-button @click="cwsz.incomeDetailed.push({})" round size="mini"
|
||||
type="primary">添加明细
|
||||
</el-button>
|
||||
</template>
|
||||
<template slot-scope="{row,$index}">
|
||||
<el-button
|
||||
@click="deleteIncomeDetailed(row,$index)"
|
||||
icon="el-icon-delete" round
|
||||
size="mini"
|
||||
type="danger"
|
||||
:disabled="[0,1,2].includes($index)"></el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
|
||||
|
||||
<div class="mt10">
|
||||
<vi-title title="统计"></vi-title>
|
||||
<el-table :data="cwsz.incomeCensus" max-height="300">
|
||||
<el-table-column label="去年年度结余(元)" prop="lasYearSurplus">
|
||||
<template slot-scope="{row}">
|
||||
{{row.lasYearSurplus=lasYearSurplus}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="会费收入(元)" prop="income">
|
||||
<template slot-scope="{row}">
|
||||
{{row.income=income}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="校工会拨款(元)" prop="allocate">
|
||||
<template slot-scope="{row}">
|
||||
{{row.allocate=allocate}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="社会赞助(元)" prop="support">
|
||||
</el-table-column>
|
||||
<el-table-column label="年度总支出(元)" prop="totalExpend">
|
||||
</el-table-column>
|
||||
<el-table-column label="年度结余(元)" prop="surplus">
|
||||
<template slot-scope="{row}">
|
||||
{{row.surplus=row.income+row.support+row.allocate+row.lasYearSurplus-row.totalExpend}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
|
||||
</el-form>
|
||||
|
||||
<el-form v-show="registerTypeName===2" ref="addForm3" :rules="rules"
|
||||
label-width="120px"
|
||||
style="margin: 50px 0px 0px 0px">
|
||||
<vi-title title="年末理事机构人员"></vi-title>
|
||||
<el-table :data="jgUser" max-height="300">
|
||||
<el-table-column label="序号" type="index" width="50"></el-table-column>
|
||||
<el-table-column label="职务" prop="roleName">
|
||||
<template scope="scope">
|
||||
<span v-if="scope.row.roleName">{{scope.row.roleName.replace('社团', '')}}</span>
|
||||
<span v-else></span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="姓名" prop="username"></el-table-column>
|
||||
<el-table-column label="工号" prop="loginname"></el-table-column>
|
||||
<el-table-column label="所属部门" prop="unitname"></el-table-column>
|
||||
<el-table-column label="联系电话" prop="mobile"></el-table-column>
|
||||
</el-table>
|
||||
|
||||
</el-form>
|
||||
|
||||
<el-row v-if="isRegist === false" class="mt10" justify="center" type="flex">
|
||||
<el-button @click="doSave" style="width: 300px" type="primary">保存
|
||||
</el-button>
|
||||
<el-button type="primary" style="width: 300px"
|
||||
@click="registerTypeName=registerTypeName-1"
|
||||
v-show="registerTypeName!==0">上一步
|
||||
</el-button>
|
||||
<el-button type="primary" style="width: 300px" @click="next"
|
||||
v-show="registerTypeName!=2">下一步
|
||||
</el-button>
|
||||
<el-button @click="doSubmit" style="width: 300px" type="primary"
|
||||
v-show="registerTypeName===2">提交
|
||||
</el-button>
|
||||
</el-row>
|
||||
<el-row v-else class="mt10" justify="center" type="flex">
|
||||
<el-button type="info">{{jc.clubName}}当前年度已提交考核登记</el-button>
|
||||
</el-row>
|
||||
|
||||
|
||||
</el-card>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
jcClubId: "",
|
||||
isRegist: false,
|
||||
allocate: 0,
|
||||
income: 0,
|
||||
lasYearSurplus: 0,
|
||||
jc: {activityQk: ""},
|
||||
jgUser: [],
|
||||
cwsz: {
|
||||
incomeDetailed: [],
|
||||
incomeCensus: [{income: 0, allocate: 0, support: 0, totalExpend: 0, surplus: 0}]
|
||||
},
|
||||
clubOptions: [],
|
||||
registerTypeName: 0,
|
||||
rules: {
|
||||
activityQk: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
clubId: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
},
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
|
||||
fh() {
|
||||
sublime.jumpPagePjax("/platform/sys/club/examine/registerManage")
|
||||
},
|
||||
async doSave() {
|
||||
const resp = await $.post(loc() + (this.jc.id ? "/doEdit" : "/doSave"), {
|
||||
jc: JSON.stringify(this.jc),
|
||||
incomeDetailed: JSON.stringify(this.cwsz.incomeDetailed),
|
||||
incomeCensus: JSON.stringify(this.cwsz.incomeCensus),
|
||||
flag: false
|
||||
})
|
||||
if (resp.code === 0) {
|
||||
this.notifySuccess(resp.msg)
|
||||
sublime.jumpPagePjax("/platform/sys/club/examine/registerManage")
|
||||
}
|
||||
|
||||
|
||||
},
|
||||
async doSubmit() {
|
||||
const resp = await $.post(loc() + (this.jc.id ? "/doEdit" : "/doSave"), {
|
||||
jc: JSON.stringify(this.jc),
|
||||
incomeDetailed: JSON.stringify(this.cwsz.incomeDetailed),
|
||||
incomeCensus: JSON.stringify(this.cwsz.incomeCensus),
|
||||
flag: true
|
||||
})
|
||||
if (resp.code === 0) {
|
||||
this.notifySuccess(resp.msg)
|
||||
sublime.jumpPagePjax("/platform/sys/club/examine/registerManage")
|
||||
}
|
||||
},
|
||||
async next() {
|
||||
|
||||
let a = true
|
||||
this.$refs["addForm1"].validate(valid => {
|
||||
if (!valid) {
|
||||
a = false
|
||||
}
|
||||
})
|
||||
if ((this.registerTypeName === 0 && a) || this.registerTypeName === 1) {
|
||||
if (!this.formData.id && this.registerTypeName === 0) {
|
||||
await this.getClubMemberMoney(this.jc.clubId)
|
||||
await this.getXghBkMoney(this.jc.clubId)
|
||||
await this.getLasYearSurplus(this.jc.clubId)
|
||||
}
|
||||
if (!this.jcClubId) {
|
||||
this.cwsz.incomeDetailed = []
|
||||
this.setIncomeDetailed()
|
||||
}
|
||||
this.jcClubId = this.jc.clubId
|
||||
this.registerTypeName++
|
||||
} else {
|
||||
this.notifyWarning("请填写完整")
|
||||
}
|
||||
},
|
||||
setIncomeDetailed() {
|
||||
this.cwsz.incomeDetailed.push({
|
||||
index: 0,
|
||||
date: null,
|
||||
nr: new Date().getFullYear() - 1 + "年度结余",
|
||||
incomeType: "年度结余",
|
||||
qcMoney: this.lasYearSurplus,
|
||||
})
|
||||
this.cwsz.incomeDetailed.push({
|
||||
index: 1,
|
||||
date: null,
|
||||
nr: "会费收入",
|
||||
incomeType: "会费收入",
|
||||
qcMoney: null,
|
||||
income: this.income,
|
||||
})
|
||||
this.cwsz.incomeDetailed.push({
|
||||
index: 2,
|
||||
date: null,
|
||||
nr: "校工会拨款",
|
||||
incomeType: "校工会拨款",
|
||||
qcMoney: null,
|
||||
income: this.allocate,
|
||||
})
|
||||
},
|
||||
async getClubMemberMoney(id) {
|
||||
const refs = await $.post(loc() + "/getClubMemberMoney", {id: id})
|
||||
this.income = refs.data ? refs.data : 0
|
||||
},
|
||||
async getXghBkMoney(id) {
|
||||
const refs = await $.post(loc() + "/getXghBkMoney", {id: id})
|
||||
this.allocate = refs.data ? refs.data : 0
|
||||
},
|
||||
async getLasYearSurplus(id) {
|
||||
const refs = await $.post(loc() + "/getLasYearSurplus", {id: id})
|
||||
this.lasYearSurplus = refs.data
|
||||
},
|
||||
deleteIncomeDetailed(row, index) {
|
||||
if (this.cwsz.incomeCensus[0].income !== 0) {
|
||||
this.cwsz.incomeCensus[0].income = this.cwsz.incomeCensus[0].income - (Number(row.income) ? Number(row.income) : 0)
|
||||
}
|
||||
if (this.cwsz.incomeCensus[0].support !== 0) {
|
||||
this.cwsz.incomeCensus[0].support = this.cwsz.incomeCensus[0].support - (Number(row.income) ? Number(row.income) : 0)
|
||||
}
|
||||
this.cwsz.incomeCensus[0].totalExpend = this.cwsz.incomeCensus[0].totalExpend - (Number(row.expend) ? Number(row.expend) : 0)
|
||||
this.cwsz.incomeDetailed.splice(index, 1)
|
||||
if (this.cwsz.incomeDetailed.length === 0) {
|
||||
this.cwsz.incomeCensus = [{
|
||||
income: this.income,
|
||||
allocate: this.allocate,
|
||||
support: 0,
|
||||
totalExpend: 0,
|
||||
surplus: 0
|
||||
}]
|
||||
}
|
||||
},
|
||||
changeIncomeType(val) {
|
||||
if (val === "校工会拨款") {
|
||||
const incomeTypeList = this.cwsz.incomeDetailed.filter(v => v.incomeType === "校工会拨款")
|
||||
let aa = 0
|
||||
incomeTypeList.map(v => {
|
||||
aa = aa + (Number(v.income) ? Number(v.income) : 0)
|
||||
})
|
||||
this.cwsz.incomeCensus[0].allocate = aa
|
||||
} else {
|
||||
const incomeTypeList = this.cwsz.incomeDetailed.filter(v => v.incomeType === "社会赞助")
|
||||
let aa = 0
|
||||
incomeTypeList.map(v => {
|
||||
aa = aa + (Number(v.income) ? Number(v.income) : 0)
|
||||
})
|
||||
this.cwsz.incomeCensus[0].support = aa
|
||||
}
|
||||
},
|
||||
inputExpend() {
|
||||
let aa = 0
|
||||
this.cwsz.incomeDetailed.map(v => {
|
||||
aa = aa + (Number(v.expend) ? Number(v.expend) : 0)
|
||||
})
|
||||
this.cwsz.incomeCensus[0].totalExpend = aa
|
||||
},
|
||||
inputIncome(row) {
|
||||
let sr = 0
|
||||
this.cwsz.incomeDetailed.map(v => {
|
||||
sr = sr + (Number(v.income) ? Number(v.income) : 0)
|
||||
})
|
||||
this.cwsz.incomeCensus[0].income = sr
|
||||
this.changeIncomeType(row.incomeType)
|
||||
},
|
||||
inputQcMoney(row) {
|
||||
this.lasYearSurplus = Number(row.qcMoney)
|
||||
},
|
||||
async changeClub(val) {
|
||||
const club = this.clubOptions.find(v => v.stid === val)
|
||||
this.$set(this.jc, "dues_standard", club.dues_standard)
|
||||
this.$set(this.jc, "foundTime", moment(club.foundTime).format('YYYY-MM-DD'))
|
||||
this.$set(this.jc, "clubName", club.name)
|
||||
await this.getClubUserNum(val)
|
||||
await this.getJgUser(val)
|
||||
await this.getCount()
|
||||
this.jcClubId = ""
|
||||
},
|
||||
async getClubUserNum(clubId) {
|
||||
const resp = await $.post(loc() + "/getClubUserNum", {
|
||||
clubId: clubId
|
||||
})
|
||||
if (resp.code === 1) {
|
||||
this.notifyWarning(resp.msg)
|
||||
return
|
||||
}
|
||||
this.$set(this.jc, "changeUserNum", resp.data)
|
||||
},
|
||||
async getJgUser(clubId) {
|
||||
const resp = await $.post(loc() + "/getJgUser", {
|
||||
clubId: clubId
|
||||
})
|
||||
this.jgUser = resp.data
|
||||
},
|
||||
init() {
|
||||
|
||||
|
||||
},
|
||||
|
||||
async getClub() {
|
||||
this.clubOptions = await getClubsByRole()
|
||||
if (this.clubOptions && this.clubOptions.length > 0) {
|
||||
this.$set(this.jc, "clubId", this.clubOptions[0].stid)
|
||||
}
|
||||
await this.changeClub(this.jc.clubId)
|
||||
await this.getClubUserNum(this.jc.clubId)
|
||||
await this.getJgUser(this.jc.clubId)
|
||||
},
|
||||
async openEdit(id) {
|
||||
this.clubOptions = await getClubsByRole()
|
||||
|
||||
const {data} = await $.post("/platform/sys/club/examine/register/findOne", {id: id})
|
||||
this.jc = data.register
|
||||
this.cwsz.incomeCensus = data.register.incomeCensus
|
||||
this.cwsz.incomeDetailed = data.detaileds
|
||||
await this.getClubUserNum(this.jc.clubId)
|
||||
await this.getJgUser(this.jc.clubId)
|
||||
},
|
||||
//获取当前年度社团有没有登记
|
||||
async getCount() {
|
||||
const resp = await $.get(loc() + '/getCount', {id: this.jc.clubId})
|
||||
this.isRegist = resp.data > 0
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
const id = getQueryVariable("id")
|
||||
if (id) {
|
||||
this.openEdit(id)
|
||||
} else {
|
||||
this.init()
|
||||
await this.getClub()
|
||||
}
|
||||
this.getCount()
|
||||
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,216 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
|
||||
<el-card shadow="never">
|
||||
<div class="search">
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">年  度</div>
|
||||
<div class="search-item-option">
|
||||
<el-date-picker
|
||||
v-model="pageForm.year"
|
||||
@change="doSearch"
|
||||
type="year"
|
||||
value-format="yyyy" style="width: 100%"
|
||||
placeholder="选择年">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
|
||||
<el-card shadow="never" class="mt20">
|
||||
<table-tool label="登记列表" :app="this">
|
||||
<template #func>
|
||||
<el-radio-group @change="doSearch" style="margin-bottom: -7.5px"
|
||||
v-model="pageForm.flag">
|
||||
<el-radio-button :label="true">已审核</el-radio-button>
|
||||
<el-radio-button :label="false">未审核</el-radio-button>
|
||||
</el-radio-group>
|
||||
</template>
|
||||
</table-tool>
|
||||
|
||||
<el-table :data="tableData" style="width: 100%" row-key="id" @sort-change="pageOrder"
|
||||
:size="tableSize"
|
||||
v-loading="tableLoading" ref="table" class="vi-table">
|
||||
|
||||
<el-table-column align="center" header-align="center" type="index"
|
||||
:index="indexMethod" label="序号"
|
||||
width="80px"></el-table-column>
|
||||
|
||||
<el-table-column
|
||||
align="center"
|
||||
header-align="center"
|
||||
v-for="column in tableColumns"
|
||||
show-overflow-tooltip
|
||||
:sortable="column.sortable"
|
||||
:label="column.label"
|
||||
:prop="column.prop" :width="column.width" min-width="100px">
|
||||
<template v-if="column.prop=='year'" scope="{row}">
|
||||
{{moment(row.registerDate).format('YYYY')}}
|
||||
</template>
|
||||
<template v-else-if="column.prop=='auditId'" scope="{row}">
|
||||
<vi-table-state :state="row"></vi-table-state>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="userOnline" align="center" header-align="center" label="操作"
|
||||
width="200"
|
||||
fixed="right">
|
||||
<template scope="{row}">
|
||||
<el-button plain size="mini" @click="openView(row)" type="primary">查看
|
||||
</el-button>
|
||||
<el-button size="mini" @click="openEdit(row)" type="primary"
|
||||
v-if="row.auditId===5080">审核
|
||||
</el-button>
|
||||
<el-button size="mini" @click="doRecall(row)" type="primary"
|
||||
v-if="[5083,5085,5090].includes(row.auditId)">撤回
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
|
||||
</el-card>
|
||||
|
||||
|
||||
<template #view>
|
||||
<club-register-info ref="info"></club-register-info>
|
||||
</template>
|
||||
|
||||
<template #edit>
|
||||
<club-register-info ref="edit" label="审核" handle>
|
||||
<template #handle>
|
||||
<el-form :model="formData" ref="form" :rules="formRules" label-position="right"
|
||||
style="padding: 20px 0"
|
||||
label-width="120px">
|
||||
<vi-title title="审核信息"></vi-title>
|
||||
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="username" label="审核人员">
|
||||
<el-input v-model="formData.username"
|
||||
disabled></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="auditTime" label="审核时间">
|
||||
<el-input v-model="formData.auditTime" disabled></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
</el-row>
|
||||
<el-form-item prop="auditOpinion" label="审核意见">
|
||||
<el-input type="textarea" v-model="formData.auditOpinion" rows="4"
|
||||
maxlength="500"
|
||||
placeholder="请填写您的审核意见"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="auditSign" label="签  字">
|
||||
<sign :qz.sync="formData.auditSign"></sign>
|
||||
</el-form-item>
|
||||
|
||||
</el-form>
|
||||
<div style="float: right;margin: 20px 0">
|
||||
<el-button @click="doReview(1)">拒绝</el-button>
|
||||
<el-button type="danger" @click="doReview(2)">退回修改</el-button>
|
||||
<el-button type="primary" @click="doReview(3)">通过</el-button>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
</club-register-info>
|
||||
</template>
|
||||
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
|
||||
<script>
|
||||
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
pageForm: {
|
||||
flag: false,
|
||||
year: new Date().getFullYear() + ""
|
||||
},
|
||||
tableColumns: [
|
||||
{prop: 'year', label: '年度'},
|
||||
{prop: 'clubName', label: '社团名称'},
|
||||
{prop: 'foundTime', label: '成立时间'},
|
||||
{prop: 'username', label: '联系人', sortable: true},
|
||||
{prop: 'concatPersonMobile', label: '联系方式', sortable: true},
|
||||
{prop: 'registerDate', label: '登记时间'},
|
||||
{prop: 'auditId', label: '登记状态', sortable: true},
|
||||
]
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'club-register-info': httpVueLoader('/components/club/clubRegisterInfo.vue'),
|
||||
},
|
||||
methods: {
|
||||
openView(row) {
|
||||
this.$refs.info.getInfo(row.id)
|
||||
this.$refs.guava.view()
|
||||
},
|
||||
openEdit(row) {
|
||||
this.formData = {
|
||||
id: row.id,
|
||||
username: "${@shiro.getPrincipalProperty('username')}",
|
||||
auditTime: moment().format('YYYY-MM-DD'),
|
||||
}
|
||||
this.$refs.edit.getInfo(row.id)
|
||||
this.$refs.guava.edit()
|
||||
},
|
||||
async doReview(flag) {
|
||||
let msg = flag === 1 ? "拒绝" : flag === 2 ? "退回修改" : "通过"
|
||||
const confirm = await this.$confirm('确定要' + msg + '吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
if (confirm === "confirm") {
|
||||
this.formData.flag = flag
|
||||
const resp = await $.post(loc() + "/doReview", this.formData)
|
||||
if (resp.code === 0) {
|
||||
this.notifySuccess(resp.msg)
|
||||
this.doSearch()
|
||||
this.$refs.guava.index()
|
||||
} else {
|
||||
this.notifyError(resp.msg)
|
||||
}
|
||||
}
|
||||
},
|
||||
async doRecall(row) {
|
||||
const confirm = await this.$confirm('此操作将会撤回您审核的内容, 是否继续?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
if (confirm === "confirm") {
|
||||
const resp = await $.post(loc() + '/doRecall', {
|
||||
id: row.id
|
||||
})
|
||||
if (resp.code === 0) {
|
||||
this.doSearch()
|
||||
this.notifySuccess(resp.msg)
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.pageData()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,215 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
|
||||
<el-card shadow="never">
|
||||
<div class="search">
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">年  度</div>
|
||||
<div class="search-item-option">
|
||||
<el-date-picker
|
||||
v-model="pageForm.year"
|
||||
@change="doSearch"
|
||||
type="year"
|
||||
value-format="yyyy" style="width: 100%"
|
||||
placeholder="选择年">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
|
||||
<el-card shadow="never" class="mt20">
|
||||
<table-tool label="登记列表" :app="this">
|
||||
<template #func>
|
||||
<el-radio-group @change="doSearch" style="margin-bottom: -7.5px"
|
||||
v-model="pageForm.flag">
|
||||
<el-radio-button :label="true">已审核</el-radio-button>
|
||||
<el-radio-button :label="false">未审核</el-radio-button>
|
||||
</el-radio-group>
|
||||
</template>
|
||||
</table-tool>
|
||||
|
||||
<el-table :data="tableData" style="width: 100%" row-key="id" @sort-change="pageOrder"
|
||||
:size="tableSize"
|
||||
v-loading="tableLoading" ref="table" class="vi-table">
|
||||
|
||||
<el-table-column align="center" header-align="center" type="index"
|
||||
:index="indexMethod" label="序号"
|
||||
width="80px"></el-table-column>
|
||||
|
||||
<el-table-column
|
||||
align="center"
|
||||
header-align="center"
|
||||
v-for="column in tableColumns"
|
||||
show-overflow-tooltip
|
||||
:sortable="column.sortable"
|
||||
:label="column.label"
|
||||
:prop="column.prop" :width="column.width" min-width="100px">
|
||||
<template v-if="column.prop=='year'" scope="{row}">
|
||||
{{moment(row.registerDate).format('YYYY')}}
|
||||
</template>
|
||||
<template v-else-if="column.prop=='auditId'" scope="{row}">
|
||||
<vi-table-state :state="row"></vi-table-state>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="userOnline" align="center" header-align="center" label="操作"
|
||||
width="200">
|
||||
<template scope="{row}">
|
||||
<el-button plain size="mini" @click="openView(row)" type="primary">查看
|
||||
</el-button>
|
||||
<el-button size="mini" @click="openEdit(row)" type="primary"
|
||||
v-if="row.auditId===5090">审核
|
||||
</el-button>
|
||||
<el-button size="mini" @click="doRecall(row)" type="primary"
|
||||
v-if="[5093,5095,6010].includes(row.auditId)">撤回
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
|
||||
</el-card>
|
||||
|
||||
|
||||
<template #view>
|
||||
<club-register-info ref="info"></club-register-info>
|
||||
</template>
|
||||
|
||||
<template #edit>
|
||||
<club-register-info ref="edit" label="审核" handle>
|
||||
<template #handle>
|
||||
<el-form :model="formData" ref="form" :rules="formRules" label-position="right"
|
||||
style="padding: 20px 0"
|
||||
label-width="120px">
|
||||
<vi-title title="审核信息"></vi-title>
|
||||
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="username" label="审核人员">
|
||||
<el-input v-model="formData.username"
|
||||
disabled></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="auditTime" label="审核时间">
|
||||
<el-input v-model="formData.auditTime" disabled></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
</el-row>
|
||||
<el-form-item prop="auditOpinion" label="审核意见">
|
||||
<el-input type="textarea" v-model="formData.auditOpinion" rows="4"
|
||||
maxlength="500"
|
||||
placeholder="请填写您的审核意见"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="auditSign" label="签  字">
|
||||
<sign :qz.sync="formData.auditSign"></sign>
|
||||
</el-form-item>
|
||||
|
||||
</el-form>
|
||||
<div style="float: right;margin: 20px 0">
|
||||
<el-button @click="doReview(1)">拒绝</el-button>
|
||||
<el-button type="danger" @click="doReview(2)">退回修改</el-button>
|
||||
<el-button type="primary" @click="doReview(3)">通过</el-button>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
</club-register-info>
|
||||
</template>
|
||||
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
|
||||
<script>
|
||||
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
pageForm: {
|
||||
flag: false,
|
||||
year: new Date().getFullYear() + ""
|
||||
},
|
||||
tableColumns: [
|
||||
{prop: 'year', label: '年度'},
|
||||
{prop: 'clubName', label: '社团名称'},
|
||||
{prop: 'foundTime', label: '成立时间'},
|
||||
{prop: 'username', label: '联系人', sortable: true},
|
||||
{prop: 'concatPersonMobile', label: '联系方式', sortable: true},
|
||||
{prop: 'registerDate', label: '登记时间'},
|
||||
{prop: 'auditId', label: '登记状态', sortable: true},
|
||||
]
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'club-register-info': httpVueLoader('/components/club/clubRegisterInfo.vue'),
|
||||
},
|
||||
methods: {
|
||||
openView(row) {
|
||||
this.$refs.info.getInfo(row.id)
|
||||
this.$refs.guava.view()
|
||||
},
|
||||
openEdit(row) {
|
||||
this.formData = {
|
||||
id: row.id,
|
||||
username: "${@shiro.getPrincipalProperty('username')}",
|
||||
auditTime: moment().format('YYYY-MM-DD'),
|
||||
}
|
||||
this.$refs.edit.getInfo(row.id)
|
||||
this.$refs.guava.edit()
|
||||
},
|
||||
async doReview(flag) {
|
||||
let msg = flag === 1 ? "拒绝" : flag === 2 ? "退回修改" : "通过"
|
||||
const confirm = await this.$confirm('确定要' + msg + '吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
if (confirm === "confirm") {
|
||||
this.formData.flag = flag
|
||||
const resp = await $.post(loc() + "/doReview", this.formData)
|
||||
if (resp.code === 0) {
|
||||
this.notifySuccess(resp.msg)
|
||||
this.doSearch()
|
||||
this.$refs.guava.index()
|
||||
} else {
|
||||
this.notifyError(resp.msg)
|
||||
}
|
||||
}
|
||||
},
|
||||
async doRecall(row) {
|
||||
const confirm = await this.$confirm('此操作将会撤回您审核的内容, 是否继续?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
if (confirm === "confirm") {
|
||||
const resp = await $.post(loc() + '/doRecall', {
|
||||
id: row.id
|
||||
})
|
||||
if (resp.code === 0) {
|
||||
this.doSearch()
|
||||
this.notifySuccess(resp.msg)
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.pageData()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,134 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
|
||||
<el-card shadow="never">
|
||||
<div class="search">
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">年  度</div>
|
||||
<div class="search-item-option">
|
||||
<el-date-picker
|
||||
v-model="pageForm.year"
|
||||
@change="doSearch"
|
||||
type="year"
|
||||
value-format="yyyy" style="width: 100%"
|
||||
placeholder="选择年">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" class="mt20">
|
||||
<table-tool label="登记列表" :app="this">
|
||||
<template #func>
|
||||
</template>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" style="width: 100%" row-key="id" @sort-change="pageOrder"
|
||||
:size="tableSize"
|
||||
v-loading="tableLoading" ref="table" class="vi-table">
|
||||
|
||||
<el-table-column align="center" header-align="center" type="index"
|
||||
:index="indexMethod" label="序号"
|
||||
width="80px"></el-table-column>
|
||||
|
||||
<el-table-column
|
||||
align="center"
|
||||
header-align="center"
|
||||
v-for="column in tableColumns"
|
||||
show-overflow-tooltip
|
||||
:sortable="column.sortable"
|
||||
:label="column.label"
|
||||
:prop="column.prop" :width="column.width" min-width="100px">
|
||||
<template v-if="column.prop=='year'" scope="{row}">
|
||||
{{moment(row.registerDate).format('YYYY')}}
|
||||
</template>
|
||||
<template v-else-if="column.prop=='auditId'" scope="{row}">
|
||||
<vi-table-state :state="row"></vi-table-state>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="userOnline" align="center" header-align="center" label="操作" width="300">
|
||||
<template scope="{row}">
|
||||
<el-button plain size="mini" @click="openView(row)" type="primary">查看</el-button>
|
||||
<el-button size="mini" @click="openEdit(row)" type="primary" v-if="[5070,5083,5093,6013].includes(row.auditId)">编辑</el-button>
|
||||
<el-button size="mini" @click="doDelete(row)" type="danger" v-if="${@shiro.hasRole('sysadmin')}">删除</el-button>
|
||||
<el-button size="mini" @click="doDelete(row)" type="danger" v-if="row.auditId===5080&&${!@shiro.hasRole('sysadmin')}">删除</el-button>
|
||||
<el-button plain size="mini" @click="doExport(row)" v-if="row.auditId===6020">导出</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
|
||||
<template #view>
|
||||
<club-register-info ref="info"></club-register-info>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
pageForm: {
|
||||
year: new Date().getFullYear() + ""
|
||||
},
|
||||
tableColumns: [
|
||||
{prop: 'year', label: '年度'},
|
||||
{prop: 'clubName', label: '社团名称'},
|
||||
{prop: 'foundTime', label: '成立时间'},
|
||||
{prop: 'username', label: '联系人', sortable: true},
|
||||
{prop: 'concatPersonMobile', label: '联系方式', sortable: true},
|
||||
{prop: 'registerDate', label: '登记时间'},
|
||||
{prop: 'auditId', label: '登记状态', sortable: true},
|
||||
]
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'club-register-info': httpVueLoader('/components/club/clubRegisterInfo.vue'),
|
||||
},
|
||||
methods: {
|
||||
openView(row) {
|
||||
this.$refs.info.getInfo(row.id)
|
||||
this.$refs.guava.view()
|
||||
},
|
||||
openEdit(row) {
|
||||
sublime.jumpPagePjax("/platform/sys/club/examine/registerAdd?id=" + row.id)
|
||||
},
|
||||
async doDelete(row) {
|
||||
const confirm = await this.$confirm('此操作将永久删除, 是否继续?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
if (confirm === "confirm") {
|
||||
const resp = await $.post(loc() + "/doDelete", {id: row.id})
|
||||
if (resp.code === 0) {
|
||||
this.notifySuccess(resp.msg)
|
||||
this.doSearch()
|
||||
} else {
|
||||
this.notifyError(resp.msg)
|
||||
}
|
||||
}
|
||||
},
|
||||
doExport(row) {
|
||||
window.open(loc() + "/doExport?id=" + row.id)
|
||||
},
|
||||
},
|
||||
created() {
|
||||
this.pageData()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,233 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
|
||||
<el-card shadow="never">
|
||||
<div class="search">
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">年  度</div>
|
||||
<div class="search-item-option">
|
||||
<el-date-picker
|
||||
v-model="pageForm.year"
|
||||
type="year"
|
||||
@change="doSearch"
|
||||
value-format="yyyy" style="width: 100%"
|
||||
placeholder="选择年">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
</div>
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">协  会</div>
|
||||
<div class="search-item-option">
|
||||
<el-select v-model="pageForm.clubId" placeholder="请选择社团" filterable
|
||||
clearable
|
||||
@change="doSearch"
|
||||
style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in clubOptions"
|
||||
:key="item.stid"
|
||||
:label="item.name"
|
||||
:value="item.stid">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
|
||||
<el-card shadow="never" class="mt20">
|
||||
<table-tool label="登记列表" :app="this">
|
||||
<template #func>
|
||||
<el-radio-group @change="doSearch" style="margin-bottom: -7.5px"
|
||||
v-model="pageForm.flag">
|
||||
<el-radio-button :label="true">已审核</el-radio-button>
|
||||
<el-radio-button :label="false">未审核</el-radio-button>
|
||||
</el-radio-group>
|
||||
</template>
|
||||
</table-tool>
|
||||
|
||||
<el-table :data="tableData" style="width: 100%" row-key="id" @sort-change="pageOrder"
|
||||
:size="tableSize"
|
||||
v-loading="tableLoading" ref="table" class="vi-table">
|
||||
|
||||
<el-table-column align="center" header-align="center" type="index"
|
||||
:index="indexMethod" label="序号"
|
||||
width="80px"></el-table-column>
|
||||
|
||||
<el-table-column
|
||||
align="center"
|
||||
header-align="center"
|
||||
v-for="column in tableColumns"
|
||||
show-overflow-tooltip
|
||||
:sortable="column.sortable"
|
||||
:label="column.label"
|
||||
:prop="column.prop" :width="column.width" min-width="100px">
|
||||
<template v-if="column.prop=='year'" scope="{row}">
|
||||
{{moment(row.registerDate).format('YYYY')}}
|
||||
</template>
|
||||
<template v-else-if="column.prop=='auditId'" scope="{row}">
|
||||
<vi-table-state :state="row"></vi-table-state>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="userOnline" align="center" header-align="center" label="操作"
|
||||
width="200">
|
||||
<template scope="{row}">
|
||||
<el-button plain size="mini" @click="openView(row)" type="primary">查看
|
||||
</el-button>
|
||||
<el-button size="mini" @click="openEdit(row)" type="primary"
|
||||
v-if="row.auditId===6010">审核
|
||||
</el-button>
|
||||
<el-button size="mini" @click="doRecall(row)" type="primary"
|
||||
v-if="[6013,6015,6020].includes(row.auditId)">撤回
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
|
||||
</el-card>
|
||||
|
||||
|
||||
<template #view>
|
||||
<club-register-info ref="info"></club-register-info>
|
||||
</template>
|
||||
|
||||
<template #edit>
|
||||
<club-register-info ref="edit" label="审核" handle>
|
||||
<template #handle>
|
||||
<el-form :model="formData" ref="form" :rules="formRules" label-position="right"
|
||||
style="padding: 20px 0"
|
||||
label-width="120px">
|
||||
<vi-title title="审核信息"></vi-title>
|
||||
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="username" label="审核人员">
|
||||
<el-input v-model="formData.username"
|
||||
disabled></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="auditTime" label="审核时间">
|
||||
<el-input v-model="formData.auditTime" disabled></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
</el-row>
|
||||
<el-form-item prop="auditOpinion" label="审核意见">
|
||||
<el-input type="textarea" v-model="formData.auditOpinion" rows="4"
|
||||
maxlength="500"
|
||||
placeholder="请填写您的审核意见"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="auditSign" label="签  字">
|
||||
<sign :qz.sync="formData.auditSign"></sign>
|
||||
</el-form-item>
|
||||
|
||||
</el-form>
|
||||
<div style="float: right;margin: 20px 0">
|
||||
<el-button @click="doReview(1)">拒绝</el-button>
|
||||
<el-button type="danger" @click="doReview(2)">退回修改</el-button>
|
||||
<el-button type="primary" @click="doReview(3)">通过</el-button>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
|
||||
</club-register-info>
|
||||
</template>
|
||||
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
|
||||
<script>
|
||||
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
pageForm: {
|
||||
flag: false,
|
||||
year: new Date().getFullYear() + ""
|
||||
},
|
||||
clubOptions: [],
|
||||
tableColumns: [
|
||||
{prop: 'year', label: '年度'},
|
||||
{prop: 'clubName', label: '社团名称'},
|
||||
{prop: 'foundTime', label: '成立时间'},
|
||||
{prop: 'username', label: '联系人', sortable: true},
|
||||
{prop: 'concatPersonMobile', label: '联系方式', sortable: true},
|
||||
{prop: 'registerDate', label: '登记时间'},
|
||||
{prop: 'auditId', label: '登记状态', sortable: true},
|
||||
]
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'club-register-info': httpVueLoader('/components/club/clubRegisterInfo.vue'),
|
||||
},
|
||||
methods: {
|
||||
openView(row) {
|
||||
this.$refs.info.getInfo(row.id)
|
||||
this.$refs.guava.view()
|
||||
},
|
||||
openEdit(row) {
|
||||
this.formData = {
|
||||
id: row.id,
|
||||
username: "${@shiro.getPrincipalProperty('username')}",
|
||||
auditTime: moment().format('YYYY-MM-DD'),
|
||||
}
|
||||
this.$refs.edit.getInfo(row.id)
|
||||
this.$refs.guava.edit()
|
||||
},
|
||||
async doReview(flag) {
|
||||
let msg = flag === 1 ? "拒绝" : flag === 2 ? "退回修改" : "通过"
|
||||
const confirm = await this.$confirm('确定要' + msg + '吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
if (confirm === "confirm") {
|
||||
this.formData.flag = flag
|
||||
const resp = await $.post(loc() + "/doReview", this.formData)
|
||||
if (resp.code === 0) {
|
||||
this.notifySuccess(resp.msg)
|
||||
this.doSearch()
|
||||
this.$refs.guava.index()
|
||||
} else {
|
||||
this.notifyError(resp.msg)
|
||||
}
|
||||
}
|
||||
},
|
||||
async doRecall(row) {
|
||||
const confirm = await this.$confirm('此操作将会撤回您审核的内容, 是否继续?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
if (confirm === "confirm") {
|
||||
const resp = await $.post(loc() + '/doRecall', {
|
||||
id: row.id
|
||||
})
|
||||
if (resp.code === 0) {
|
||||
this.doSearch()
|
||||
this.notifySuccess(resp.msg)
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.clubOptions = await getClubsByRole()
|
||||
this.pageData()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,122 @@
|
||||
<el-tabs v-model="activeName">
|
||||
<el-tab-pane label="基础信息" name="1">
|
||||
|
||||
<vi-title title="社团信息"></vi-title>
|
||||
<el-descriptions :column="3" border class="table_fixed">
|
||||
<el-descriptions-item :span="3" label="社团名称">
|
||||
{{viewData.name}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="社团编码">
|
||||
{{viewData.code}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="社团类型">
|
||||
{{viewData.typeName}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="发起人">
|
||||
{{viewData.sponsorName}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="社团联系人">
|
||||
{{viewData.fzrName}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="所在单位">
|
||||
{{viewData.fzr_unit_name}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="联系人电话">
|
||||
{{viewData.fzr_mobile}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="联系人邮箱">
|
||||
{{viewData.fzr_email}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="申请时间">
|
||||
{{viewData.create_time}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="会费标准">
|
||||
{{viewData.dues_standard}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="介绍链接">
|
||||
<span style="cursor: pointer; color: #236eb4"
|
||||
@click="window.open(viewData.introduce_href.indexOf('http') !== -1 ? viewData.introduce_href : 'https://' + viewData.introduce_href)">{{viewData.introduce_href}}</span>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="限定人数">
|
||||
{{viewData.number}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="状态">
|
||||
{{viewData.stateName}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item span="3">
|
||||
<template slot="label">附件</template>
|
||||
<file-upload v-if="viewData.files && viewData.files.length > 0"
|
||||
:files="JSON.parse(viewData.files)"
|
||||
:view="true"></file-upload>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item span="3">
|
||||
<template slot="label">社团介绍</template>
|
||||
<div class="text-left" v-html="viewData.stjs"></div>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item span="3">
|
||||
<template slot="label">社团章程</template>
|
||||
<div class="text-left" v-html="viewData.stzc"></div>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
|
||||
<vi-title title="成员列表" style="margin-top: 20px"></vi-title>
|
||||
<el-table :data="viewData.clubuser" size="small" border
|
||||
:header-cell-style="{background:'#F5F5F5',color:'#606266'}">
|
||||
<el-table-column label="人员身份" width="150px" prop="sf" header-align="center"
|
||||
align="center">
|
||||
<template slot-scope="scope">
|
||||
<el-lable v-if="scope.row.sf==1">会长</el-lable>
|
||||
<el-lable v-if="scope.row.sf==2">成员</el-lable>
|
||||
<el-lable v-if="scope.row.sf==3">副会长</el-lable>
|
||||
<el-lable v-if="scope.row.sf==4">秘书长</el-lable>
|
||||
<el-lable v-if="scope.row.sf==5">副秘书长</el-lable>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="工号" width="150px" prop="loginname" header-align="center"
|
||||
align="center"></el-table-column>
|
||||
<el-table-column label="姓名" width="150px" prop="username" header-align="center"
|
||||
align="center"></el-table-column>
|
||||
<el-table-column label="性别" width="150px" prop="sex" header-align="center"
|
||||
align="center"></el-table-column>
|
||||
<el-table-column label="电话" width="150px" prop="mobile" header-align="center"
|
||||
align="center"></el-table-column>
|
||||
<el-table-column label="所属单位" prop="unitname" header-align="center" show-overflow-tooltip="true"
|
||||
align="center"></el-table-column>
|
||||
</el-table>
|
||||
|
||||
</el-tab-pane>
|
||||
|
||||
<el-tab-pane name="2" label="校工会审核信息" v-if="viewData.schoolAuditUser">
|
||||
<el-descriptions :column="2" border class="table_fixed">
|
||||
<el-descriptions-item label="审核人">
|
||||
{{viewData.schoolAuditUserName}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="审核时间">
|
||||
{{viewData.schoolAuditTime}}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="审核意见">
|
||||
{{viewData.schoolAuditOpinion}}
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
</el-tab-pane>
|
||||
|
||||
<el-tab-pane name="99" label="校工会审核" v-if="schoolAudit === true">
|
||||
<el-descriptions :column="2" border class="table_fixed">
|
||||
<el-descriptions-item label="审核人">
|
||||
{{ '${@shiro.getPrincipalProperty('username')}' }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="审核时间">
|
||||
{{ moment().format('YYYY-MM-DD HH:mm:ss') }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="审核意见">
|
||||
<el-input type="textarea" v-model="opinion" rows="6" maxlength="500"
|
||||
placeholder="请填写您的审核意见"></el-input>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
<el-row style="margin: 40px 0; text-align: right">
|
||||
<el-button type="danger" @click="doReview(2)">驳回</el-button>
|
||||
<el-button type="info" @click="doReview(1)">退回修改</el-button>
|
||||
<el-button type="primary" @click="doReview(3)">通过</el-button>
|
||||
</el-row>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,200 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
|
||||
</style>
|
||||
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
|
||||
<el-card shadow="never">
|
||||
<div class="search">
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">社团名称:</div>
|
||||
<div class="search-item-option">
|
||||
<el-select filterable placeholder="请选择社团" style="width: 100%;"
|
||||
v-model="pageForm.clubId">
|
||||
<el-option :label="item.name" :value="item.id" v-for="item in clubList"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="search-query">
|
||||
<el-button @click="doSearch" icon="el-icon-search" type="primary">搜索</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
<el-card class="mt10" shadow="never">
|
||||
<table-tool :app="this" label="理事机构审核">
|
||||
<template #func>
|
||||
<el-button @click="doReview(false)" size="small" type="danger">批量拒绝</el-button>
|
||||
<el-button @click="doReview(true)" size="small" type="primary">批量通过</el-button>
|
||||
</template>
|
||||
</table-tool>
|
||||
<el-table :data="tableData" :size="tableSize" @selection-change="handleSelectionChange"
|
||||
ref="table" :row-key="()=>{new Date().getTime()}">
|
||||
|
||||
<el-table-column :reserve-selection="true"
|
||||
type="selection"
|
||||
width="40">
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column :index="indexMethod" align="center" header-align="center" label="序号" type="index"
|
||||
width="80px"></el-table-column>
|
||||
|
||||
<el-table-column label="社团名称" prop="name" sortable align="center" header-align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="社团编码" prop="code" sortable align="center" header-align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="社团类型" prop="typeName" sortable align="center" header-align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="成员" prop="username" sortable align="center" header-align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="职务" prop="sf" sortable align="center" header-align="center"
|
||||
show-overflow-tooltip>
|
||||
<template slot-scope="scope">
|
||||
<el-lable v-if="scope.row.sf==1">会长</el-lable>
|
||||
<el-lable v-if="scope.row.sf==2">会员</el-lable>
|
||||
<el-lable v-if="scope.row.sf==3">副会长</el-lable>
|
||||
<el-lable v-if="scope.row.sf==4">秘书长</el-lable>
|
||||
<el-lable v-if="scope.row.sf==5">副秘书长</el-lable>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="职务变更" prop="changeSf" sortable align="center" header-align="center"
|
||||
show-overflow-tooltip>
|
||||
<template slot-scope="scope">
|
||||
<div v-if="scope.row.changeSf">
|
||||
<el-lable v-if="scope.row.changeSf==1">会长</el-lable>
|
||||
<el-lable v-if="scope.row.changeSf==2">会员</el-lable>
|
||||
<el-lable v-if="scope.row.changeSf==3">副会长</el-lable>
|
||||
<el-lable v-if="scope.row.changeSf==4">秘书长</el-lable>
|
||||
<el-lable v-if="scope.row.changeSf==5">副秘书长</el-lable>
|
||||
</div>
|
||||
<span v-else>暂无变更</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="变更时间" prop="sfChangeTime" sortable align="center" header-align="center"
|
||||
show-overflow-tooltip>
|
||||
<template slot-scope="{row}">
|
||||
<span v-if="row.changeSf !== undefined">{{ moment(row.create_time).format('YYYY-MM-DD') }}</span>
|
||||
<span v-else>暂无变更</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="状态" prop="state" sortable align="center" header-align="center"
|
||||
show-overflow-tooltip>
|
||||
<template slot-scope="{row}">
|
||||
<span v-if="row.state === 1 || row.status === 3">待校工会审核</span>
|
||||
</template>
|
||||
<template v-else slot-scope="scope">
|
||||
暂无状态
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="换届报告" prop="replaceReport" sortable align="center" header-align="center"
|
||||
show-overflow-tooltip>
|
||||
<template scope="scope">
|
||||
<span style="color: #0e78c5; text-decoration: underline; cursor: pointer"
|
||||
@click="showDoc(scope.row)">{{getFileName(scope.row)}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
|
||||
<template #view>
|
||||
<club-regist-info ref="info"></club-regist-info>
|
||||
</template>
|
||||
|
||||
</guava>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
clubList: [],
|
||||
multipleSelection: [],
|
||||
}
|
||||
},
|
||||
components: {
|
||||
|
||||
},
|
||||
methods: {
|
||||
showDoc(row) {
|
||||
if(row.replaceReport) {
|
||||
const file = JSON.parse(row.replaceReport)
|
||||
let pdfStreamUrl = encodeURIComponent(FILE_STREAM_PREVIEW_ADDRESS + '?id=' + file[0].id) //将路径转码
|
||||
window.open('/assets/platform/plugins/pdfJs/web/viewer.html?file=' + pdfStreamUrl, file[0].filename)
|
||||
}
|
||||
},
|
||||
getFileName(row) {
|
||||
if(row.replaceReport) {
|
||||
const file = JSON.parse(row.replaceReport)
|
||||
return file[0].filename
|
||||
} else {
|
||||
return ''
|
||||
}
|
||||
},
|
||||
doReview(flag) {
|
||||
if(this.multipleSelection.length === 0) {
|
||||
this.$notify.warning({title: '警告', message: '请先在多选框中选择!'})
|
||||
return
|
||||
}
|
||||
const str = flag ? '通过' : '拒绝'
|
||||
this.$confirm('确定要批量审核' + str + '吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
callback: async (a, b) => {
|
||||
if ("confirm" === a) {//确认后再执行
|
||||
const array = this.multipleSelection.map(o => o.id)
|
||||
const resp = await $.post("/platform/sys/club/clubManagePersonAudit/doReview", {
|
||||
ids: JSON.stringify(array),
|
||||
isPass: flag,
|
||||
})
|
||||
if (resp.code === 0) {
|
||||
this.$message({message: '操作成功', type: 'success'})
|
||||
this.$refs.table.clearSelection()
|
||||
this.pageData()
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
handleSelectionChange(val) {
|
||||
this.multipleSelection = val;
|
||||
},
|
||||
async pageData() {
|
||||
const resp = await $.post("/platform/sys/club/clubManagePersonAudit/pageData", this.pageForm);
|
||||
if (resp.code === 0) {
|
||||
this.tableData = resp.data.list;
|
||||
this.pageForm.totalCount = resp.data.totalCount;
|
||||
} else {
|
||||
this.$message({
|
||||
message: resp.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
},
|
||||
async getAllClub() {
|
||||
const resp = await $.post("/platform/sys/club/clubManagePersonAudit/getAllClub");
|
||||
if (resp.code === 0) {
|
||||
this.clubList = resp.data;
|
||||
}
|
||||
},
|
||||
},
|
||||
async created(){
|
||||
await this.getAllClub()
|
||||
await this.pageData()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,174 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.table_fixed {
|
||||
table-layout: fixed !important;
|
||||
}
|
||||
</style>
|
||||
|
||||
|
||||
<div id="app" v-cloak>
|
||||
|
||||
<guava ref="guava">
|
||||
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<div class="search">
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">年  度:</div>
|
||||
<div class="search-item-option">
|
||||
<el-date-picker
|
||||
placeholder="选择年度"
|
||||
type="year" style="width: 100%"
|
||||
v-model="pageForm.year"
|
||||
value-format="yyyy">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
</div>
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">社团名称:</div>
|
||||
<div class="search-item-option">
|
||||
<el-input @keyup.enter.native="doSearch" clearable placeholder="请输入内容"
|
||||
clearable
|
||||
style="width: 100%" v-model="pageForm.name">
|
||||
</el-input>
|
||||
</div>
|
||||
</div>
|
||||
<div class="search-query">
|
||||
<el-button @click="doSearch" icon="el-icon-search" type="primary">搜索</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
<el-card class="mt10" shadow="never">
|
||||
<el-table :data="tableData" :size="tableSize">
|
||||
<el-table-column :index="indexMethod" align="center" header-align="center" label="序号" type="index"
|
||||
width="80px"></el-table-column>
|
||||
|
||||
<el-table-column label="社团名称" prop="name" sortable align="center" header-align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="社团类型" prop="typeName" sortable align="center" header-align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="申请时间" prop="create_time" sortable align="center" header-align="center"
|
||||
show-overflow-tooltip>
|
||||
<template slot-scope="{row}">
|
||||
<span>{{ moment(row.create_time).format('YYYY-MM-DD') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="成立时间" prop="create_time" sortable align="center" header-align="center"
|
||||
show-overflow-tooltip>
|
||||
<template slot-scope="{row}">
|
||||
<span>{{ moment(row.foundTime).format('YYYY-MM-DD') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="联系人" prop="fzrName" sortable align="center" header-align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="发起人" prop="sponsorName" sortable align="center" header-align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
|
||||
<el-table-column label="操作" width="300px">
|
||||
<template scope="{row}">
|
||||
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
|
||||
<el-button @click="uploadRefreshReport(row)" size="mini" type="primary">上传换届报告</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<club-regist-info ref="info"></club-regist-info>
|
||||
</template>
|
||||
|
||||
</guava>
|
||||
|
||||
<el-dialog width="40%" :visible.sync="refreshDialogVisible" title="上传换届报告">
|
||||
|
||||
<file-upload card :files.sync="replaceReport" :max="1" :type="['doc','docx']">
|
||||
</file-upload>
|
||||
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="refreshDialogVisible = false">取消</el-button>
|
||||
<el-button type="primary" @click="refreshDo">确定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
components: {
|
||||
'club-regist-info': httpVueLoader('/components/club/clubRegistInfo.vue'),
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
pageForm: {
|
||||
name: ''
|
||||
},
|
||||
tableData: [],
|
||||
refreshDialogVisible: false,
|
||||
replaceReport: [],
|
||||
clickRow: {},
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async refreshDo() {
|
||||
const confirm = await this.$confirm('您确定要上传换届报告吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
if (confirm === "confirm") {
|
||||
const resp = await $.post('/platform/sys/club/clubInfoManage/refreshDo', {
|
||||
id: this.clickRow.id,
|
||||
replaceReport: JSON.stringify(this.replaceReport)
|
||||
})
|
||||
if(resp.code === 0) {
|
||||
this.$message.success(resp.msg)
|
||||
this.refreshDialogVisible = false
|
||||
this.doSearch()
|
||||
}
|
||||
}
|
||||
},
|
||||
uploadRefreshReport(row) {
|
||||
this.clickRow = row
|
||||
this.replaceReport = []
|
||||
this.refreshDialogVisible = true
|
||||
},
|
||||
doSearch() {
|
||||
this.pageForm.pageNumber = 1
|
||||
this.pageData()
|
||||
},
|
||||
openView(row) {
|
||||
const {id} = row
|
||||
this.$refs.guava.view()
|
||||
this.$nextTick(() => {
|
||||
this.$refs.info.getInfo(id)
|
||||
})
|
||||
},
|
||||
async pageData() {
|
||||
const resp = await $.post("/platform/sys/club/clubInfoManage/refreshReportData", this.pageForm);
|
||||
if (resp.code === 0) {
|
||||
this.tableData = resp.data.list;
|
||||
this.pageForm.totalCount = resp.data.totalCount;
|
||||
} else {
|
||||
this.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
await this.pageData()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,210 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.table_fixed {
|
||||
table-layout: fixed !important;
|
||||
}
|
||||
</style>
|
||||
|
||||
|
||||
<div id="app" v-cloak>
|
||||
|
||||
<guava ref="guava">
|
||||
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<div class="search">
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">年  度:</div>
|
||||
<div class="search-item-option">
|
||||
<el-date-picker
|
||||
placeholder="选择年度"
|
||||
type="year" style="width: 100%"
|
||||
v-model="pageForm.year"
|
||||
value-format="yyyy">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
</div>
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">社团名称:</div>
|
||||
<div class="search-item-option">
|
||||
<el-input @keyup.enter.native="doSearch" clearable placeholder="请输入内容"
|
||||
clearable
|
||||
style="width: 100%" v-model="pageForm.name">
|
||||
</el-input>
|
||||
</div>
|
||||
</div>
|
||||
<div class="search-query">
|
||||
<el-button @click="doSearch" icon="el-icon-search" type="primary">搜索</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
<el-card class="mt10" shadow="never">
|
||||
<el-table :data="tableData" :size="tableSize">
|
||||
<el-table-column :index="indexMethod" align="center" header-align="center" label="序号" type="index"
|
||||
width="80px"></el-table-column>
|
||||
|
||||
<el-table-column label="社团名称" prop="name" sortable align="center" header-align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="社团类型" prop="typeName" sortable align="center" header-align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="申请时间" prop="create_time" sortable align="center" header-align="center"
|
||||
show-overflow-tooltip>
|
||||
<template slot-scope="{row}">
|
||||
<span>{{ moment(row.create_time).format('YYYY-MM-DD') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="成立时间" prop="create_time" sortable align="center" header-align="center"
|
||||
show-overflow-tooltip>
|
||||
<template slot-scope="{row}">
|
||||
<span>{{ moment(row.foundTime).format('YYYY-MM-DD') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="联系人" prop="fzrName" sortable align="center" header-align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="发起人" prop="sponsorName" sortable align="center" header-align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
|
||||
<el-table-column label="社团章程" prop="afterRulesFile" sortable align="center" header-align="center"
|
||||
show-overflow-tooltip>
|
||||
<template scope="scope">
|
||||
<span style="color: #0e78c5; text-decoration: underline; cursor: pointer"
|
||||
@click="showDoc(scope.row)">{{getFileName(scope.row)}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="审核状态" prop="ruleState" sortable align="center" header-align="center"
|
||||
show-overflow-tooltip>
|
||||
<template scope="scope">
|
||||
<span v-if="scope.row.ruleState === 1">待校工会审核</span>
|
||||
<span v-if="scope.row.ruleState === 2">校工会审核拒绝</span>
|
||||
<span v-if="scope.row.ruleState === 3">审核通过</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="操作" width="200px">
|
||||
<template scope="{row}">
|
||||
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
|
||||
<el-button @click="uploadRule(row)" size="mini" type="primary">章程修订</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<club-regist-info ref="info"></club-regist-info>
|
||||
</template>
|
||||
|
||||
</guava>
|
||||
|
||||
<el-dialog width="40%" :visible.sync="ruleDialogVisible" title="章程修订">
|
||||
|
||||
<file-upload card :files.sync="ruleReport" :max="1" :type="['doc','docx']">
|
||||
</file-upload>
|
||||
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="ruleDialogVisible = false">取消</el-button>
|
||||
<el-button type="primary" @click="ruleDo">确定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
components: {
|
||||
'club-regist-info': httpVueLoader('/components/club/clubRegistInfo.vue'),
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
pageForm: {
|
||||
name: ''
|
||||
},
|
||||
tableData: [],
|
||||
ruleDialogVisible: false,
|
||||
ruleReport: [],
|
||||
clickRow: {},
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
showDoc(row) {
|
||||
if(row.afterRulesFile) {
|
||||
const file = JSON.parse(row.afterRulesFile)
|
||||
let pdfStreamUrl = encodeURIComponent(FILE_STREAM_PREVIEW_ADDRESS + '?id=' + file[0].id) //将路径转码
|
||||
window.open('/assets/platform/plugins/pdfJs/web/viewer.html?file=' + pdfStreamUrl, file[0].filename)
|
||||
}
|
||||
},
|
||||
getFileName(row) {
|
||||
if(row.afterRulesFile && row.afterRulesFile !== '[]') {
|
||||
const file = JSON.parse(row.afterRulesFile)
|
||||
return file[0].filename
|
||||
} else {
|
||||
return ''
|
||||
}
|
||||
},
|
||||
async ruleDo() {
|
||||
const confirm = await this.$confirm('您确定要修订章程吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
if (confirm === "confirm") {
|
||||
const resp = await $.post('/platform/sys/club/clubInfoManage/ruleDo', {
|
||||
id: this.clickRow.id,
|
||||
afterRulesFile: JSON.stringify(this.ruleReport)
|
||||
})
|
||||
if(resp.code === 0) {
|
||||
this.$message.success(resp.msg)
|
||||
this.ruleDialogVisible = false
|
||||
this.doSearch()
|
||||
}
|
||||
}
|
||||
},
|
||||
uploadRule(row) {
|
||||
/*if(row.afterRulesFile && row.ruleState === 1) {
|
||||
this.$message.warning('您已上传新的社团章程,待校工会审核')
|
||||
return
|
||||
}*/
|
||||
this.clickRow = row
|
||||
this.ruleReport = []
|
||||
this.ruleDialogVisible = true
|
||||
},
|
||||
doSearch() {
|
||||
this.pageForm.pageNumber = 1
|
||||
this.pageData()
|
||||
},
|
||||
openView(row) {
|
||||
const {id} = row
|
||||
this.$refs.guava.view()
|
||||
this.$nextTick(() => {
|
||||
this.$refs.info.getInfo(id)
|
||||
})
|
||||
},
|
||||
async pageData() {
|
||||
const resp = await $.post("/platform/sys/club/clubInfoManage/refreshReportData", this.pageForm);
|
||||
if (resp.code === 0) {
|
||||
this.tableData = resp.data.list;
|
||||
this.pageForm.totalCount = resp.data.totalCount;
|
||||
} else {
|
||||
this.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
await this.pageData()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,220 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.table_fixed {
|
||||
table-layout: fixed !important;
|
||||
}
|
||||
</style>
|
||||
|
||||
|
||||
<div id="app" v-cloak>
|
||||
|
||||
<guava ref="guava">
|
||||
|
||||
<template>
|
||||
<el-card shadow="never">
|
||||
<div class="search">
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">年  度:</div>
|
||||
<div class="search-item-option">
|
||||
<el-date-picker
|
||||
placeholder="选择年度"
|
||||
type="year" style="width: 100%"
|
||||
v-model="pageForm.year"
|
||||
value-format="yyyy">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
</div>
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">社团名称:</div>
|
||||
<div class="search-item-option">
|
||||
<el-input @keyup.enter.native="doSearch" clearable placeholder="请输入内容"
|
||||
clearable
|
||||
style="width: 100%" v-model="pageForm.name">
|
||||
</el-input>
|
||||
</div>
|
||||
</div>
|
||||
<div class="search-query">
|
||||
<el-button @click="doSearch" icon="el-icon-search" type="primary">搜索</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
<el-card class="mt10" shadow="never">
|
||||
<el-table :data="tableData" :size="tableSize">
|
||||
<el-table-column :index="indexMethod" align="center" header-align="center" label="序号" type="index"
|
||||
width="80px"></el-table-column>
|
||||
|
||||
<el-table-column label="社团名称" prop="name" sortable align="center" header-align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="社团类型" prop="typeName" sortable align="center" header-align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="申请时间" prop="create_time" sortable align="center" header-align="center"
|
||||
show-overflow-tooltip>
|
||||
<template slot-scope="{row}">
|
||||
<span>{{ moment(row.create_time).format('YYYY-MM-DD') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="成立时间" prop="create_time" sortable align="center" header-align="center"
|
||||
show-overflow-tooltip>
|
||||
<template slot-scope="{row}">
|
||||
<span>{{ moment(row.foundTime).format('YYYY-MM-DD') }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="联系人" prop="fzrName" sortable align="center" header-align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
<el-table-column label="发起人" prop="sponsorName" sortable align="center" header-align="center"
|
||||
show-overflow-tooltip></el-table-column>
|
||||
|
||||
<el-table-column label="社团章程" prop="afterRulesFile" sortable align="center" header-align="center"
|
||||
show-overflow-tooltip>
|
||||
<template scope="scope">
|
||||
<span style="color: #0e78c5; text-decoration: underline; cursor: pointer"
|
||||
@click="showDoc(scope.row)">{{getFileName(scope.row)}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="审核状态" prop="ruleState" sortable align="center" header-align="center"
|
||||
show-overflow-tooltip>
|
||||
<template scope="scope">
|
||||
<span v-if="scope.row.ruleState === 1">待校工会审核</span>
|
||||
<span v-if="scope.row.ruleState === 2">校工会审核拒绝</span>
|
||||
<span v-if="scope.row.ruleState === 3">审核通过</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="操作" width="200px">
|
||||
<template scope="{row}">
|
||||
<el-button @click="openView(row)" size="mini" type="primary">查看</el-button>
|
||||
<el-button @click="audit(row)" size="mini" type="primary">审核</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<club-regist-info ref="info"></club-regist-info>
|
||||
</template>
|
||||
|
||||
</guava>
|
||||
|
||||
<el-dialog width="40%" :visible.sync="dialogVisible" title="校工会审核">
|
||||
|
||||
<el-descriptions :column="2" border class="table_fixed">
|
||||
<el-descriptions-item :span="2" label="旧社团章程">
|
||||
<file-upload :files.sync="clickRow.rulesFile" view>
|
||||
</file-upload>
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="新社团章程">
|
||||
<file-upload :files.sync="clickRow.afterRulesFile" view>
|
||||
</file-upload>
|
||||
</el-descriptions-item>
|
||||
</el-descriptions>
|
||||
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="dialogVisible = false">取消</el-button>
|
||||
<el-button type="primary" @click="auditDo(false)">拒绝</el-button>
|
||||
<el-button type="primary" @click="auditDo(true)">通过</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
components: {
|
||||
'club-regist-info': httpVueLoader('/components/club/clubRegistInfo.vue'),
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
pageForm: {
|
||||
name: ''
|
||||
},
|
||||
tableData: [],
|
||||
dialogVisible: false,
|
||||
clickRow: {},
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
showDoc(row) {
|
||||
if(row.afterRulesFile) {
|
||||
const file = JSON.parse(row.afterRulesFile)
|
||||
let pdfStreamUrl = encodeURIComponent(FILE_STREAM_PREVIEW_ADDRESS + '?id=' + file[0].id) //将路径转码
|
||||
window.open('/assets/platform/plugins/pdfJs/web/viewer.html?file=' + pdfStreamUrl, file[0].filename)
|
||||
}
|
||||
},
|
||||
getFileName(row) {
|
||||
if(row.afterRulesFile) {
|
||||
const file = JSON.parse(row.afterRulesFile)
|
||||
return file[0].filename
|
||||
} else {
|
||||
return ''
|
||||
}
|
||||
},
|
||||
async auditDo(pass) {
|
||||
const str = pass ? '通过' : '拒绝'
|
||||
const confirm = await this.$confirm('您确定要审核' + str + '吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
if (confirm === "confirm") {
|
||||
const resp = await $.post('/platform/sys/club/schoolAuditRule/auditDo', {
|
||||
id: this.clickRow.id,
|
||||
pass: pass,
|
||||
})
|
||||
if(resp.code === 0) {
|
||||
this.$message.success(resp.msg)
|
||||
this.dialogVisible = false
|
||||
this.doSearch()
|
||||
}
|
||||
}
|
||||
},
|
||||
audit(row) {
|
||||
this.clickRow = clone(row)
|
||||
if(this.clickRow.afterRulesFile) {
|
||||
this.clickRow.afterRulesFile = JSON.parse(this.clickRow.afterRulesFile)
|
||||
}
|
||||
if(this.clickRow.rulesFile) {
|
||||
this.clickRow.rulesFile = JSON.parse(this.clickRow.rulesFile)
|
||||
}
|
||||
this.dialogVisible = true
|
||||
},
|
||||
doSearch() {
|
||||
this.pageForm.pageNumber = 1
|
||||
this.pageData()
|
||||
},
|
||||
openView(row) {
|
||||
const {id} = row
|
||||
this.$refs.guava.view()
|
||||
this.$nextTick(() => {
|
||||
this.$refs.info.getInfo(id)
|
||||
})
|
||||
},
|
||||
async pageData() {
|
||||
const resp = await $.post("/platform/sys/club/schoolAuditRule/pageData", this.pageForm);
|
||||
if (resp.code === 0) {
|
||||
this.tableData = resp.data.list;
|
||||
this.pageForm.totalCount = resp.data.totalCount;
|
||||
} else {
|
||||
this.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
await this.pageData()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,277 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.table_fixed {
|
||||
table-layout: fixed !important;
|
||||
}
|
||||
</style>
|
||||
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
|
||||
<el-card shadow="never">
|
||||
<div class="search">
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">年  度:</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">年  度:</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">年  度:</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">年  度:</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">年  度:</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>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -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="成  员" 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>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,290 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app" v-cloak>
|
||||
<el-row class="header navbar bg-white shadow">
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-button size="medium" @click="openAdd"><i class="ti-plus"></i> 添加配置项</el-button>
|
||||
</div>
|
||||
</el-row>
|
||||
<el-row class="el-table-container">
|
||||
<el-table
|
||||
:data="tableData"
|
||||
@sort-change='pageOrder'
|
||||
size="small"
|
||||
header-align="center"
|
||||
style="width: 100%">
|
||||
<el-table-column
|
||||
sortable
|
||||
prop="configKey"
|
||||
label="参数名"
|
||||
header-align="center"
|
||||
width="200">
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="configValue"
|
||||
label="参数值"
|
||||
header-align="center"
|
||||
:show-overflow-tooltip="true"
|
||||
width="200">
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="note"
|
||||
header-align="center"
|
||||
:show-overflow-tooltip="true"
|
||||
label="说明">
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="note"
|
||||
label="操作"
|
||||
width="120">
|
||||
<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:'edit',id:scope.row.configKey}">
|
||||
修改
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item :command="{type:'delete',id:scope.row.configKey}"
|
||||
v-if="scope.row.configKey.indexOf('App')<0">
|
||||
删除
|
||||
</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</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, jumper"
|
||||
:total="pageForm.totalCount">
|
||||
</el-pagination>
|
||||
</el-row>
|
||||
<el-dialog
|
||||
title="新增参数"
|
||||
:visible.sync="addDialogVisible"
|
||||
:close-on-click-modal="false"
|
||||
width="40%">
|
||||
<el-form :model="formData" ref="addForm" :rules="formRules" label-width="80px">
|
||||
<el-form-item prop="configKey" label="参数名">
|
||||
<el-input maxlength="100" placeholder="参数名"
|
||||
v-model="formData.configKey"
|
||||
auto-complete="off" tabindex="1" type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="configValue" label="参数值">
|
||||
<el-input maxlength="100" placeholder="参数值"
|
||||
v-model="formData.configValue"
|
||||
auto-complete="off" tabindex="2" type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="note" label="说 明">
|
||||
<el-input type="textarea" v-model="formData.note"></el-input>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="addDialogVisible = false">取 消</el-button>
|
||||
<el-button type="primary" @click="doAdd">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
<el-dialog
|
||||
title="修改参数"
|
||||
:visible.sync="editDialogVisible"
|
||||
:close-on-click-modal="false"
|
||||
width="40%">
|
||||
<el-form :model="formData" ref="editForm" :rules="formRules" label-width="80px">
|
||||
<el-form-item prop="configKey" label="参数名">
|
||||
<el-input maxlength="100" placeholder="参数名"
|
||||
v-model="formData.configKey"
|
||||
auto-complete="off" tabindex="1" type="text" disabled></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="configValue" label="参数值">
|
||||
<div v-if="'true'===formData.configValue||'false'===formData.configValue">
|
||||
<el-radio-group v-model="formData.configValue">
|
||||
<el-radio label="true">是</el-radio>
|
||||
<el-radio label="false">否</el-radio>
|
||||
</el-radio-group>
|
||||
</div>
|
||||
<div v-else>
|
||||
<el-input maxlength="100" placeholder="参数值"
|
||||
v-model="formData.configValue"
|
||||
auto-complete="off" tabindex="2" type="text"></el-input>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item prop="note" label="说 明">
|
||||
<el-input type="textarea" v-model="formData.note"></el-input>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="editDialogVisible = false">取 消</el-button>
|
||||
<el-button type="primary" @click="doEdit">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
</div>
|
||||
<script>
|
||||
new Vue({
|
||||
el: "#app",
|
||||
data: function () {
|
||||
return {
|
||||
addDialogVisible: false,
|
||||
editDialogVisible: false,
|
||||
tableData: [],
|
||||
pageForm:{
|
||||
pageSize: 10,
|
||||
pageNumber: 1,
|
||||
pageOrderName: "",
|
||||
pageOrderBy: "",
|
||||
totalCount: 0,
|
||||
},
|
||||
formData: {
|
||||
configKey: "",
|
||||
configValue: "",
|
||||
note: ""
|
||||
},
|
||||
formRules: {
|
||||
configKey: [
|
||||
{required: true, message: '请输入参数名', trigger: 'blur'},
|
||||
],
|
||||
configValue: [
|
||||
{required: true, message: '请输入参数值', trigger: 'blur'},
|
||||
],
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
openAdd: function () {
|
||||
this.addDialogVisible = true;
|
||||
this.formData = {};//打开新增窗口,表单先清空
|
||||
},
|
||||
doAdd: function () {
|
||||
var self = this;
|
||||
var url = base + "/platform/sys/conf/addDo";
|
||||
self.$refs["addForm"].validate(function (valid) {
|
||||
if (valid) {//表单验证通过
|
||||
$.post(url, self.formData, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
self.addDialogVisible = false;
|
||||
self.pageData();//重新加载分页数据
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
});
|
||||
},
|
||||
doEdit: function () {
|
||||
var self = this;
|
||||
var url = base + "/platform/sys/conf/editDo";
|
||||
self.$refs["editForm"].validate(function (valid) {
|
||||
if (valid) {
|
||||
$.post(url, self.formData, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
self.editDialogVisible = false;
|
||||
self.pageData();//重新加载分页数据
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
});
|
||||
},
|
||||
pageOrder: function (column) {//按字段排序
|
||||
this.pageForm.pageOrderName = column.prop;
|
||||
this.pageForm.pageOrderBy = column.order;
|
||||
this.pageData();
|
||||
},
|
||||
pageNumberChange: function (val) {//页码更新操作
|
||||
this.pageForm.pageNumber = val;
|
||||
this.pageData();
|
||||
},
|
||||
pageSizeChange: function (val) {//分页大小更新操作
|
||||
this.pageForm.pageSize = val;
|
||||
this.pageData();
|
||||
},
|
||||
pageData: function () {//加载分页数据
|
||||
var self = this;
|
||||
sublime.showLoadingbar();//显示loading
|
||||
$.post(base + "/platform/sys/conf/data", self.pageForm, function (data) {
|
||||
sublime.closeLoadingbar();//关闭loading
|
||||
if (data.code == 0) {
|
||||
self.tableData = data.data.list;
|
||||
self.pageForm.totalCount = data.data.totalCount;
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
dropdownCommand: function (command) {//监听下拉框事件
|
||||
var self = this;
|
||||
if ("edit" == command.type) {
|
||||
$.post(base + "/platform/sys/conf/edit/" + command.id, {}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.formData = data.data;//加载后台表单数据
|
||||
self.editDialogVisible = true;//打开编辑窗口
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
if ("delete" == command.type) {
|
||||
self.$confirm('此操作将删除 ' + command.id, '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
callback: function (a, b) {
|
||||
if ("confirm" == a) {//确认后再执行
|
||||
$.post(base + "/platform/sys/conf/delete/" + command.id, {}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
self.pageData();
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
created: function () {
|
||||
this.pageData();
|
||||
}
|
||||
});
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,425 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app" v-cloak>
|
||||
<el-row class="header navbar bg-white shadow">
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-button size="medium" @click="openAdd">
|
||||
<i class="ti-plus"></i>
|
||||
新建字典
|
||||
</el-button>
|
||||
</div>
|
||||
<div class="pull-right offscreen-right mt5">
|
||||
<el-button size="medium" @click="openSort">
|
||||
排序
|
||||
</el-button>
|
||||
</div>
|
||||
</el-row>
|
||||
<el-row class="el-table-container">
|
||||
<el-table :key="tableKey" :data="tableData" style="width: 100%" size="small"
|
||||
:highlight-current-row="true" row-key="id" lazy
|
||||
:load="loadChild">
|
||||
<el-table-column label="字典名称" header-align="center" prop="name"
|
||||
width="200" :show-overflow-tooltip="true" align="left">
|
||||
</el-table-column>
|
||||
|
||||
|
||||
<el-table-column label="字典代码" header-align="center" prop="code"
|
||||
:show-overflow-tooltip="true">
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="启用状态" header-align="center" prop="disabled" align="center"
|
||||
:show-overflow-tooltip="true">
|
||||
<template slot-scope="scope">
|
||||
<i v-if="scope.row.disabled"
|
||||
class="fa fa-circle text-danger ml5"></i>
|
||||
<i v-if="!scope.row.disabled"
|
||||
class="fa fa-circle text-success ml5"></i>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="操作" header-align="center" prop="website"
|
||||
:show-overflow-tooltip="true" align="center" width="120">
|
||||
<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:'add',id:scope.row.id,name:scope.row.name}">
|
||||
添加子级
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item divided
|
||||
:command="{type:'enable',id:scope.row.id,name:scope.row.name,row:scope.row}">
|
||||
启用
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item
|
||||
:command="{type:'disable',id:scope.row.id,name:scope.row.name,row:scope.row}">
|
||||
禁用
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item divided
|
||||
:command="{type:'edit',id:scope.row.id,name:scope.row.name}">
|
||||
修改
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item :command="{type:'delete',id:scope.row.id,name:scope.row.name}">
|
||||
删除
|
||||
</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
</el-row>
|
||||
<el-dialog
|
||||
title="新建字典"
|
||||
:visible.sync="addDialogVisible"
|
||||
:close-on-click-modal="false"
|
||||
width="50%">
|
||||
<el-form :model="formData" ref="addForm" :rules="formRules" size="small" label-width="80px">
|
||||
<el-form-item prop="parentId" label="上级字典" label-width="80px">
|
||||
<el-cascader v-if="!isAddFromSub" :props="props" :options="menuOptions" v-model="parentMenu"
|
||||
placeholder="不选择则为顶级" style="width: 100%"></el-cascader>
|
||||
<el-input v-if="isAddFromSub" type="text" v-model="formData.parentName" :disabled="true"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="name" label="字典名称">
|
||||
<el-input maxlength="100" placeholder="字典名称"
|
||||
v-model="formData.name"
|
||||
auto-complete="off" tabindex="3" type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="code" label="字典代码">
|
||||
<el-input maxlength="100" placeholder="字典代码"
|
||||
v-model="formData.code"
|
||||
auto-complete="off" tabindex="5" type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="disabled" label="启用状态">
|
||||
<el-switch
|
||||
v-model="formData.disabled"
|
||||
active-color="#ff4949"
|
||||
inactive-color="#13ce66">
|
||||
</el-switch>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="addDialogVisible = false">取 消</el-button>
|
||||
<el-button type="primary" @click="doAdd">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
<el-dialog
|
||||
title="修改字典"
|
||||
:visible.sync="editDialogVisible"
|
||||
:close-on-click-modal="false"
|
||||
width="50%">
|
||||
<el-form :model="formData" ref="editForm" :rules="formRules" size="small" label-width="80px">
|
||||
<el-form-item prop="name" label="字典名称">
|
||||
<el-input maxlength="100" placeholder="字典名称"
|
||||
v-model="formData.name"
|
||||
auto-complete="off" tabindex="1" type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="code" label="字典代码">
|
||||
<el-input maxlength="100" placeholder="字典代码"
|
||||
v-model="formData.code"
|
||||
auto-complete="off" tabindex="2" type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="disabled" label="启用状态">
|
||||
<el-switch
|
||||
v-model="formData.disabled"
|
||||
active-color="#ff4949"
|
||||
inactive-color="#13ce66">
|
||||
</el-switch>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="editDialogVisible = false">取 消</el-button>
|
||||
<el-button type="primary" @click="doEdit">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
<el-dialog
|
||||
title="字典排序"
|
||||
:visible.sync="sortDialogVisible"
|
||||
width="50%">
|
||||
<el-tree
|
||||
ref="sortMenuTree"
|
||||
:data="sortMenuData"
|
||||
draggable
|
||||
:allow-drop="sortAllowDrop"
|
||||
node-key="id"
|
||||
:props="defaultProps"
|
||||
>
|
||||
<span class="custom-tree-node" slot-scope="scope">
|
||||
<span>{{ scope.node.label }}</span>
|
||||
</span>
|
||||
</el-tree>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="sortDialogVisible = false">取 消</el-button>
|
||||
<el-button type="primary" @click="doSort">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
</div>
|
||||
<script>
|
||||
new Vue({
|
||||
el: "#app",
|
||||
data: function () {
|
||||
return {
|
||||
addDialogVisible: false,
|
||||
editDialogVisible: false,
|
||||
sortDialogVisible: false,
|
||||
isAddFromSub: false,
|
||||
tableData: [],//后台取出的数据
|
||||
tableKey: "",
|
||||
formData: {
|
||||
id: "",
|
||||
parentId: "",
|
||||
parentName: "",
|
||||
type: "menu",
|
||||
target: "data-pjax",
|
||||
children: "false",
|
||||
},
|
||||
formRules: {
|
||||
name: [
|
||||
{required: true, message: '字典名称', trigger: 'blur'}
|
||||
],
|
||||
code: [
|
||||
{required: true, message: '字典代码', trigger: ['blur', 'change']}
|
||||
]
|
||||
},
|
||||
menuOptions: [],
|
||||
props: {
|
||||
lazy: true,
|
||||
checkStrictly: true,
|
||||
multiple: false,
|
||||
lazyLoad: function (node, resolve) {
|
||||
var url = base + "/platform/sys/dict/tree";
|
||||
$.post(url, {pid: node.value}, function (data) {
|
||||
if (data.code == 0) {
|
||||
resolve(data.data);
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
},
|
||||
parentMenu: [],
|
||||
sortMenuData: [],
|
||||
defaultProps: {
|
||||
children: 'children',
|
||||
label: 'label'
|
||||
},
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
//排序树加载
|
||||
sortMenuLoad: function () {
|
||||
var self = this;
|
||||
$.post(base + "/platform/sys/dict/menuAll", {}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.sortMenuData = data.data;
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
//排序树控制不可跨级拖拽
|
||||
sortAllowDrop: function (moveNode, inNode, type) {
|
||||
if (moveNode.data.parentId == inNode.data.parentId) {
|
||||
return type == 'prev';
|
||||
}
|
||||
},
|
||||
//打开排序功能
|
||||
openSort: function () {
|
||||
this.sortDialogVisible = true;
|
||||
this.sortMenuLoad();
|
||||
},
|
||||
//递归获取所有的ID值
|
||||
getTreeIds: function (ids, data) {
|
||||
var self = this;
|
||||
data.forEach(function (obj) {
|
||||
ids.push(obj.id);
|
||||
if (obj.children && obj.children.length > 0) {
|
||||
self.getTreeIds(ids, obj.children);
|
||||
}
|
||||
});
|
||||
},
|
||||
//提交排序后的数据
|
||||
doSort: function () {
|
||||
var self = this;
|
||||
var ids = [];
|
||||
self.getTreeIds(ids, self.sortMenuData);
|
||||
$.post(base + "/platform/sys/dict/sortDo", {ids: ids.toString()}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
self.sortDialogVisible = false;
|
||||
self.initTreeTable();
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
openAdd: function () {
|
||||
var self = this;
|
||||
self.isAddFromSub = false;
|
||||
self.addDialogVisible = true;
|
||||
self.parentMenu = [];
|
||||
self.menuOptions = [];
|
||||
//表单还原为初始值
|
||||
self.formData = {
|
||||
id: "",
|
||||
parentId: "",
|
||||
parentName: "",
|
||||
type: "menu",
|
||||
target: "data-pjax",
|
||||
children: "false",
|
||||
};
|
||||
if (this.$refs["addForm"])
|
||||
this.$refs["addForm"].resetFields();
|
||||
},
|
||||
doAdd: function () {
|
||||
var self = this;
|
||||
var url = base + "/platform/sys/dict/addDo";
|
||||
self.$refs["addForm"].validate(function (valid) {
|
||||
if (valid) {//表单验证通过
|
||||
if (!self.isAddFromSub) {//如果不是添加子菜单,则从级联选择框取父节点ID
|
||||
self.formData.parentId = self.parentMenu[self.parentMenu.length - 1] || "";
|
||||
}
|
||||
$.post(url, self.formData, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
self.addDialogVisible = false;
|
||||
self.initTreeTable();
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
});
|
||||
},
|
||||
doEdit: function () {
|
||||
var self = this;
|
||||
var url = base + "/platform/sys/dict/editDo";
|
||||
self.$refs["editForm"].validate(function (valid) {
|
||||
if (valid) {//表单验证通过
|
||||
$.post(url, self.formData, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
self.editDialogVisible = false;
|
||||
self.initTreeTable();
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
});
|
||||
},
|
||||
initTreeTable: function () {
|
||||
var self = this;
|
||||
var url = base + "/platform/sys/dict/child";
|
||||
$.post(url, {pid: ""}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.tableData = data.data;
|
||||
self.tableKey = +new Date();
|
||||
}
|
||||
}, "json");
|
||||
|
||||
},
|
||||
loadChild: function (tree, treeNode, resolve) {
|
||||
var url = base + "/platform/sys/dict/child";
|
||||
$.post(url, {pid: tree.id}, function (data) {
|
||||
if (data.code == 0) {
|
||||
resolve(data.data);
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
dropdownCommand: function (command) {//监听下拉框事件
|
||||
var self = this;
|
||||
if ("add" == command.type) {
|
||||
self.openAdd();
|
||||
self.formData.parentId = command.id;
|
||||
self.formData.parentName = command.name;
|
||||
self.isAddFromSub = true;
|
||||
}
|
||||
if ("edit" == command.type) {
|
||||
$.post(base + "/platform/sys/dict/edit/" + command.id, {}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.formData = data.data;//加载后台表单数据
|
||||
self.editDialogVisible = true;//打开编辑窗口
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
if ("enable" == command.type || "disable" == command.type) {
|
||||
$.post(base + "/platform/sys/dict/" + command.type + "/" + command.id, {}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
if ("disable" == command.type) {
|
||||
command.row.disabled = true;
|
||||
}
|
||||
if ("enable" == command.type) {
|
||||
command.row.disabled = false;
|
||||
}
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
if ("delete" == command.type) {
|
||||
self.$confirm('此操作将删除 ' + command.name, '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
callback: function (a, b) {
|
||||
if ("confirm" == a) {//确认后再执行
|
||||
$.post(base + "/platform/sys/dict/delete/" + command.id, {}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
self.initTreeTable();
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
},
|
||||
created: function () {
|
||||
this.initTreeTable();
|
||||
}
|
||||
});
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,226 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<div id="app">
|
||||
<guava ref="guava">
|
||||
<!-- <el-card shadow="never">
|
||||
|
||||
</el-card>-->
|
||||
|
||||
<el-card class="mt10" shadow="never">
|
||||
<template #header>
|
||||
<div style="display:flex;justify-content: space-between;align-items: center">
|
||||
<h3 style="color: #1867b0">模块中心</h3>
|
||||
<el-button size="medium" type="primary" @click="openAdd">添加模块</el-button>
|
||||
</div>
|
||||
</template>
|
||||
<el-table :data="tableData" :size="tableSize" @sort-change="pageOrder"
|
||||
align="center"
|
||||
header-align="center">
|
||||
<!--<el-table-column :index="indexMethod" align="center" header-align="center" label="序号" type="index"
|
||||
width="80px"></el-table-column>-->
|
||||
<el-table-column
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable"
|
||||
align="center"
|
||||
header-align="center"
|
||||
show-overflow-tooltip
|
||||
v-for="column in tableColumns"
|
||||
>
|
||||
<template scope="{row}" v-if="column.prop=='icon'">
|
||||
<el-image
|
||||
lazy
|
||||
@click="viewImage(row.icon[0].id)"
|
||||
style="height: 30px;width: 30px"
|
||||
:src="APP_DOMAIN+FILE_STREAM_PREVIEW_ADDRESS+'?id='+row.icon[0].id"
|
||||
fit="cover">
|
||||
<div slot="error" class="image-slot">
|
||||
<i class="el-icon-picture-outline"></i>
|
||||
</div>
|
||||
</el-image>
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop=='containsMenu'">
|
||||
{{firstMenus.filter(v=>row.containsMenu.includes(v.id)).map(v=>v.name).join('、')}}
|
||||
</template>
|
||||
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" width="200px">
|
||||
<template scope="{row}">
|
||||
<el-button @click="openEdit(row)" size="mini" type="primary">编辑</el-button>
|
||||
<el-button @click="doDelete(row.id)" size="mini" type="danger">删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-card>
|
||||
|
||||
<template #edit>
|
||||
<el-form :model="formData" :rules="formRules" label-width="120px" ref="form">
|
||||
<el-form-item label="模块名称" prop="moduleName">
|
||||
<el-input v-model="formData.moduleName" maxlength="8"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="模块图标" prop="icon">
|
||||
<file-upload max="1" :type="['png']" :files.sync="formData.icon"></file-upload>
|
||||
</el-form-item>
|
||||
<el-form-item label="包含菜单" prop="containsMenu">
|
||||
<el-checkbox-group v-model="formData.containsMenu">
|
||||
<el-checkbox v-for="item in firstMenus" :label="item.id"
|
||||
:disabled="menuCheckBoxDisabled(item.id)">
|
||||
{{item.name}}
|
||||
</el-checkbox>
|
||||
</el-checkbox-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="排序编号" prop="sortNum">
|
||||
<el-input-number v-model="formData.sortNum" :min="1" :precision="0"></el-input-number>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<el-row type="flex" justify="end">
|
||||
<el-button @click="$refs.guava.index()">取消</el-button>
|
||||
<el-button type="primary" @click="doSubmit">确定</el-button>
|
||||
</el-row>
|
||||
|
||||
</template>
|
||||
|
||||
</guava>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
formDialogVisible: false,
|
||||
formData: {
|
||||
id: null,
|
||||
moduleName: null,
|
||||
icon: [],
|
||||
containsMenu: [],
|
||||
sortNum: null
|
||||
},
|
||||
formRules: {
|
||||
moduleName: [{required: true, message: '请填写', trigger: ['blur', 'change']}],
|
||||
icon: [{required: true, message: '请填写', trigger: ['blur', 'change']}],
|
||||
containsMenu: [{required: true, message: '请选择', trigger: ['blur', 'change']}],
|
||||
sortNum: [{required: true, message: '请输入', trigger: ['blur', 'change']}],
|
||||
},
|
||||
firstMenus: [],
|
||||
tableColumns: [
|
||||
{label: '排序编号', prop: 'sortNum', sortable: true},
|
||||
{label: '模块名称', prop: 'moduleName'},
|
||||
{label: '模块图标', prop: 'icon'},
|
||||
{label: '包含菜单', prop: 'containsMenu'}
|
||||
],
|
||||
hasSetMenus: [],
|
||||
cloneContainsMenu: []
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
'formData.icon'(val) {
|
||||
this.$refs.form.validateField('icon', (errMsg) => {
|
||||
console.log(errMsg)
|
||||
})
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async openAdd() {
|
||||
await this.getHasSetMenus()
|
||||
if (this.$refs.form) {
|
||||
this.$refs.form.resetFields()
|
||||
}
|
||||
this.formData = {
|
||||
id: null,
|
||||
moduleName: null,
|
||||
icon: [],
|
||||
containsMenu: [],
|
||||
sortNum: this.tableData.length + 1
|
||||
}
|
||||
this.$refs.guava.edit()
|
||||
},
|
||||
async findFirstMenus() {
|
||||
const resp = await $.get(loc() + '/findFirstMenus')
|
||||
if (resp.code === 0) {
|
||||
this.firstMenus = resp.data
|
||||
}
|
||||
},
|
||||
async doSubmit() {
|
||||
const valid = await this.$refs.form.validate()
|
||||
if (!valid) return
|
||||
const {id} = this.formData
|
||||
const url = loc() + (id ? '/doEdit' : '/doAdd')
|
||||
const resp = await $.post(url, {entranceModule: JSON.stringify(this.formData)})
|
||||
if (resp.code === 0) {
|
||||
this.pageData()
|
||||
this.notifySuccess(resp.msg)
|
||||
this.$refs.guava.index()
|
||||
if (headerNavBarVueApp) {
|
||||
headerNavBarVueApp.init()
|
||||
}
|
||||
} else {
|
||||
this.notifyWarning(resp.msg)
|
||||
}
|
||||
},
|
||||
async pageData() {
|
||||
sublime.showLoadingbar()
|
||||
const resp = await $.post(loc() + '/pageData')
|
||||
sublime.closeLoadingbar()
|
||||
if (resp.code === 0) {
|
||||
this.tableData = resp.data
|
||||
} else {
|
||||
this.notifyWarning(resp.msg)
|
||||
}
|
||||
},
|
||||
async doDelete(id) {
|
||||
const confirm = await this.$confirm('您确定要删除吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
if (confirm !== 'confirm') return
|
||||
const resp = await $.post(loc() + '/doDelete/' + id)
|
||||
if (resp.code === 0) {
|
||||
this.doSearch()
|
||||
this.notifySuccess(resp.msg)
|
||||
if (headerNavBarVueApp) {
|
||||
headerNavBarVueApp.init()
|
||||
}
|
||||
} else {
|
||||
this.notifyWarning(resp.msg)
|
||||
}
|
||||
},
|
||||
openEdit(row) {
|
||||
this.getHasSetMenus()
|
||||
this.$refs.guava.edit()
|
||||
this.formData = {...row}
|
||||
this.cloneContainsMenu = this.formData.containsMenu
|
||||
this.$nextTick(() => {
|
||||
this.$refs.form.validateField('icon', (errMsg) => {
|
||||
console.log(errMsg)
|
||||
})
|
||||
})
|
||||
},
|
||||
async getHasSetMenus() {
|
||||
const {data} = await $.get(loc() + '/getHasSetMenus')
|
||||
this.hasSetMenus = data
|
||||
console.log(data)
|
||||
},
|
||||
menuCheckBoxDisabled(id) {
|
||||
if (this.formData.id == null) {
|
||||
return this.hasSetMenus.includes(id)
|
||||
} else {
|
||||
return this.hasSetMenus.filter(v => !this.cloneContainsMenu.includes(v)).includes(id)
|
||||
}
|
||||
}
|
||||
},
|
||||
created() {
|
||||
this.pageData()
|
||||
this.findFirstMenus()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,40 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava>
|
||||
<el-card shadow="never">
|
||||
<template #header>
|
||||
<div style="display:flex;justify-content: space-between;align-items: center">
|
||||
<h3 style="color: #1867b0">上传文件</h3>
|
||||
<file-upload :files.sync="files" ref="fileUpload" :source="1"></file-upload>
|
||||
</div>
|
||||
</template>
|
||||
<el-table :data="files" border class="mt10" stripe>
|
||||
<el-table-column label="文件名" prop="filename"></el-table-column>
|
||||
<el-table-column label="文件路径" prop="url">
|
||||
<template scope="{row}">
|
||||
{{APP_DOMAIN + FILE_STREAM_PREVIEW_ADDRESS + "?id=" + row.id}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-card>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: "#app",
|
||||
data() {
|
||||
return {
|
||||
files: []
|
||||
}
|
||||
},
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,365 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
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 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="username"></el-option>
|
||||
<el-option label="工号" value="loginname"></el-option>
|
||||
</el-select>
|
||||
</el-input>
|
||||
</div>
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-select v-model="pageForm.gdhid" style="width: 200px" clearable
|
||||
placeholder="请选择届次">
|
||||
<el-option
|
||||
v-for="item in gdhOptions"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-select v-model="pageForm.roleid" style="width: 200px" clearable
|
||||
placeholder="请选择身份">
|
||||
<el-option
|
||||
v-for="item in roles"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-button type="primary" icon="el-icon-search" @click="doSearch"></el-button>
|
||||
</div>
|
||||
|
||||
<div class="pull-right offscreen-right mt5">
|
||||
<el-button icon="el-icon-plus" @click="openAdd">添加成员</el-button>
|
||||
</div>
|
||||
</el-row>
|
||||
|
||||
<el-row class="el-table-container">
|
||||
<el-table :data="tableData" style="width: 100%" row-key="id" @sort-change="pageOrder"
|
||||
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 label="工号" prop="loginname" header-align="center"
|
||||
align="center"></el-table-column>
|
||||
<el-table-column label="姓名" prop="username" header-align="center"
|
||||
align="center"></el-table-column>
|
||||
<el-table-column label="性别" prop="sex" header-align="center" sortable
|
||||
align="center"></el-table-column>
|
||||
<el-table-column label="电话" prop="mobile" header-align="center"
|
||||
align="center"></el-table-column>
|
||||
<el-table-column label="单位" prop="unitname" header-align="center" sortable
|
||||
align="center"></el-table-column>
|
||||
<el-table-column label="工代会" prop="gdhname" header-align="center" sortable
|
||||
align="center"></el-table-column>
|
||||
<el-table-column label="身份" prop="rolecode" header-align="center" sortable
|
||||
align="center">
|
||||
<template slot-scope="scope">
|
||||
{{getRoleName(scope.row.roleid)}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" header-align="center" align="center" width="200px">
|
||||
<template slot-scope="scope">
|
||||
|
||||
<el-dropdown placement="bottom" style="margin-left: 10px;">
|
||||
<el-button type="primary" size="mini">
|
||||
设置身份<i class="el-icon-arrow-down el-icon--right"></i>
|
||||
</el-button>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item v-for="item in roles.filter(v => {
|
||||
return v.id != scope.row.roleid
|
||||
})"
|
||||
@click.native="changeRole({userid:scope.row.userid,roleid:item.id,gdhid:scope.row.gdhid})">
|
||||
{{item.name}}
|
||||
</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
|
||||
<el-button size="mini" type="danger" @click="doDelete(scope.row)">删除</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>
|
||||
|
||||
<el-dialog
|
||||
title="添加成员"
|
||||
:visible.sync="addDialogVisible" :close-on-click-modal="false" width="40%">
|
||||
|
||||
<el-form :model="formData" ref="addForm" :rules="formRules"
|
||||
label-width="100px">
|
||||
|
||||
<el-form-item label="届  次" prop="gdhid">
|
||||
<el-select v-model="formData.gdhid" style="width: 100%"
|
||||
placeholder="请选择工代会">
|
||||
<el-option
|
||||
v-for="item in gdhOptions"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="成  员" prop="users">
|
||||
<el-select
|
||||
style="width: 100%"
|
||||
multiple
|
||||
v-model="formData.users"
|
||||
filterable
|
||||
remote
|
||||
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-form-item label="身  份" prop="roleid">
|
||||
<el-radio v-model="formData.roleid" v-for="item in roles" :label="item.id">{{item.name}}</el-radio>
|
||||
</el-form-item>
|
||||
|
||||
</el-form>
|
||||
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="addDialogVisible = false">取 消</el-button>
|
||||
<el-button type="primary" :disabled="subDis" @click="doAdd">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
|
||||
</div>
|
||||
<script>
|
||||
var E = window.wangEditor
|
||||
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
data() {
|
||||
return {
|
||||
roles: [],
|
||||
gdhOptions: [],
|
||||
addDialogVisible: false,
|
||||
editDialogVisible: false,
|
||||
viewDialogVisible: false,
|
||||
tabLoading: false,
|
||||
formData: {},
|
||||
tableData: [],
|
||||
pageForm: {
|
||||
searchName: "username",
|
||||
searchKeyword: "",
|
||||
pageNumber: 1,
|
||||
pageSize: 10,
|
||||
totalCount: 0,
|
||||
pageOrderName: "",
|
||||
pageOrderBy: ""
|
||||
},
|
||||
formRules: {
|
||||
gdhid: [{required: true, message: '必选', trigger: ['blur', 'change']}],
|
||||
role: [{required: true, message: '必选', trigger: ['blur', 'change']}],
|
||||
users: [{type: 'array', required: true, message: '必选', trigger: ['blur', 'change']}],
|
||||
},
|
||||
subDis: false,
|
||||
userOptions: [],
|
||||
userLoading: false,
|
||||
fileList: [],
|
||||
delFiles: [],
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
changeRole(e) {
|
||||
$.post(base + "/platform/sys/gdh/ghwyh/changeRole", e, (data) => {
|
||||
if (data.code == 0) {
|
||||
this.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
this.pageData()
|
||||
} else {
|
||||
this.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
getRoleName(roleid) {
|
||||
const o = this.roles.find(v => {
|
||||
return v.id == roleid
|
||||
})
|
||||
return o ? o.name : ''
|
||||
},
|
||||
doDelete(e) {
|
||||
this.$confirm('确定要移除该人员吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
callback: (a, b) => {
|
||||
if ("confirm" == a) {//确认后再执行
|
||||
$.post("/platform/sys/gdh/ghwyh/del", e, (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/gdh/ghwyh/addCy", {
|
||||
gdhid: this.formData.gdhid,
|
||||
roleid: this.formData.roleid,
|
||||
users: JSON.stringify(this.formData.users)
|
||||
}, (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 userRemoteMethod(query) {
|
||||
if (!this.formData.gdhid) {
|
||||
this.$message('请先选择届次');
|
||||
return
|
||||
}
|
||||
if (query) {
|
||||
this.userLoading = true
|
||||
const arr = await this.queryUser(this.formData.gdhid, 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
|
||||
}
|
||||
},
|
||||
async queryUser(gdhid, query) {
|
||||
const {data} = await $.get("/platform/sys/gdh/ghwyh/queryUser", {gdhid, query})
|
||||
return data
|
||||
},
|
||||
openAdd() {
|
||||
this.userOptions = []
|
||||
this.formData = {users: []}
|
||||
this.addDialogVisible = true;
|
||||
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/gdh/ghwyh/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 getRoles() {
|
||||
const {data} = await $.get("/platform/sys/gdh/ghwyh/getRoles")
|
||||
return data
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.gdhOptions = await getGdh()
|
||||
this.$set(this.pageForm, "gdhid", this.gdhOptions.length ? this.gdhOptions[0].id : '')
|
||||
this.pageData();
|
||||
this.roles = await this.getRoles()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,424 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
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">
|
||||
<div class="block">
|
||||
<el-date-picker
|
||||
v-model="pageForm.year"
|
||||
value-format="yyyy"
|
||||
formData="yyyy"
|
||||
type="year"
|
||||
placeholder="选择年份">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
</div>
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-input placeholder="输入届数" v-model="pageForm.js" style="width: 200px" clearable
|
||||
@keyup.enter.native="doSearch">
|
||||
<template slot="prepend">届数</template>
|
||||
</el-input>
|
||||
</div>
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-input placeholder="输入次数" v-model="pageForm.cs" style="width: 200px" clearable
|
||||
@keyup.enter.native="doSearch">
|
||||
<template slot="prepend">次数</template>
|
||||
</el-input>
|
||||
</div>
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-button type="primary" icon="el-icon-search" @click="doSearch"></el-button>
|
||||
</div>
|
||||
|
||||
<div class="pull-right offscreen-right mt5">
|
||||
<el-button icon="el-icon-plus" @click="openAdd">新建工代会</el-button>
|
||||
</div>
|
||||
</el-row>
|
||||
|
||||
<el-row class="el-table-container">
|
||||
<el-table :data="tableData" style="width: 100%" row-key="id" @sort-change="pageOrder"
|
||||
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 label="名称" prop="name" header-align="center"
|
||||
align="center"></el-table-column>
|
||||
<el-table-column label="年份" prop="year" header-align="center"
|
||||
align="center"></el-table-column>
|
||||
<el-table-column label="届数" prop="js" header-align="center"
|
||||
align="center"></el-table-column>
|
||||
<el-table-column label="次数" prop="cs" header-align="center"
|
||||
align="center"></el-table-column>
|
||||
<el-table-column label="创建时间" prop="create_time" header-align="center" sortable
|
||||
align="center"></el-table-column>
|
||||
<el-table-column label="开启状态" prop="open" header-align="center" sortable
|
||||
align="center">
|
||||
<template slot-scope="scope">
|
||||
<el-switch v-if="scope.row.open" active-color="#13ce66"
|
||||
inactive-color="#ff4949" :value="scope.row.open" @change="open(scope.row.id,false)">
|
||||
</el-switch>
|
||||
<el-switch v-if="!scope.row.open" active-color="#13ce66"
|
||||
inactive-color="#ff4949" :value="scope.row.open" @change="open(scope.row.id,true)">
|
||||
</el-switch>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" header-align="center"
|
||||
align="center">
|
||||
<template slot-scope="scope">
|
||||
<el-button size="mini" type="primary" @click="openEdit(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>
|
||||
|
||||
|
||||
<el-dialog
|
||||
title="新建工代会"
|
||||
:visible.sync="addDialogVisible" :close-on-click-modal="false" width="40%">
|
||||
|
||||
<el-form :model="formData" ref="addForm" :rules="formRules" size="small"
|
||||
label-width="120px">
|
||||
|
||||
<el-form-item label="工代会年份" prop="year">
|
||||
<el-date-picker
|
||||
v-model="formData.year"
|
||||
type="year"
|
||||
value-format="yyyy"
|
||||
style="width: 50%"
|
||||
placeholder="选择年份">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="工代会届数" prop="js">
|
||||
<el-select v-model="formData.js" style="width: 50%"
|
||||
placeholder="请选择届数">
|
||||
<el-option
|
||||
v-for="item in jsOptions"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.code">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="工代会次数" prop="cs">
|
||||
<el-select v-model="formData.cs" style="width: 50%"
|
||||
placeholder="请选择次数">
|
||||
<el-option
|
||||
v-for="item in csOptions"
|
||||
:label="item.name"
|
||||
:value="item.code">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="工代会描述" prop="ms">
|
||||
<el-input type="textarea" v-model="formData.ms" maxlength="500" placeholder="请填写描述"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
</el-form>
|
||||
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="addDialogVisible = false">取 消</el-button>
|
||||
<el-button type="primary" :disabled="subDis" @click="doAdd">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog
|
||||
title="修改工代会"
|
||||
:visible.sync="editDialogVisible" :close-on-click-modal="false" width="40%">
|
||||
|
||||
<el-form :model="formData" ref="editForm" :rules="formRules" size="small"
|
||||
label-width="120px">
|
||||
|
||||
<el-form-item label="工代会年份" prop="year">
|
||||
<el-date-picker
|
||||
v-model="formData.year"
|
||||
type="year"
|
||||
value-format="yyyy"
|
||||
style="width: 50%"
|
||||
placeholder="选择年份">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
<el-form-item label="工代会届数" prop="js">
|
||||
<el-select v-model="formData.js" style="width: 50%"
|
||||
placeholder="请选择届数">
|
||||
<el-option
|
||||
v-for="item in jsOptions"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.code">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="工代会次数" prop="cs">
|
||||
<el-select v-model="formData.cs" style="width: 50%"
|
||||
placeholder="请选择次数">
|
||||
<el-option
|
||||
v-for="item in csOptions"
|
||||
:label="item.name"
|
||||
:value="item.code">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="工代会描述" prop="ms">
|
||||
<el-input type="textarea" v-model="formData.ms" maxlength="500" placeholder="请填写描述"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
</el-form>
|
||||
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="editDialogVisible = false">取 消</el-button>
|
||||
<el-button type="primary" :disabled="subDis" @click="doEdit">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
|
||||
</div>
|
||||
<script>
|
||||
var E = window.wangEditor
|
||||
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
data() {
|
||||
return {
|
||||
csOptions: [
|
||||
{name: '第一次', code: '一'},
|
||||
{name: '第二次', code: '二'},
|
||||
{name: '第三次', code: '三'},
|
||||
],
|
||||
jsOptions: [],
|
||||
addDialogVisible: false,
|
||||
editDialogVisible: false,
|
||||
viewDialogVisible: false,
|
||||
tabLoading: false,
|
||||
formData: {},
|
||||
tableData: [],
|
||||
pageForm: {
|
||||
searchName: "club.name",
|
||||
searchKeyword: "",
|
||||
pageNumber: 1,
|
||||
pageSize: 10,
|
||||
totalCount: 0,
|
||||
pageOrderName: "",
|
||||
pageOrderBy: ""
|
||||
},
|
||||
formRules: {
|
||||
year: [{required: true, message: '必选', trigger: ['blur', 'change']}],
|
||||
js: [{required: true, message: '必选', trigger: ['blur', 'change']}],
|
||||
cs: [{required: true, message: '必选', trigger: ['blur', 'change']}],
|
||||
},
|
||||
subDis: false,
|
||||
userOptions: [],
|
||||
userLoading: false,
|
||||
fileList: [],
|
||||
delFiles: [],
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
open(id, open) {
|
||||
$.post(base + "/platform/sys/gdh/jc/open", {id, open}, (data) => {
|
||||
if (data.code == 0) {
|
||||
this.$message({
|
||||
message: '修改成功',
|
||||
type: 'success'
|
||||
});
|
||||
this.pageData()
|
||||
} else {
|
||||
this.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
openAdd() {
|
||||
this.formData = {}
|
||||
this.addDialogVisible = true;
|
||||
if (this.$refs['addForm']) {
|
||||
this.$refs['addForm'].resetFields()
|
||||
}
|
||||
},
|
||||
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");
|
||||
},
|
||||
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) {
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '数据提交中...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: 'rgba(0, 0, 0, 0.7)'
|
||||
});
|
||||
|
||||
$.post(base + "/platform/sys/gdh/jc/doEdit", this.formData, (data) => {
|
||||
loading.close()
|
||||
if (data.code == 0) {
|
||||
this.editDialogVisible = false
|
||||
this.$message({
|
||||
message: '修改成功',
|
||||
type: 'success'
|
||||
});
|
||||
this.pageData()
|
||||
} else {
|
||||
this.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
});
|
||||
},
|
||||
openEdit(id) {
|
||||
this.formData = {}
|
||||
|
||||
$.get(base + "/platform/sys/gdh/jc/findOne", {id}, (data) => {
|
||||
if (data.code == 0) {
|
||||
data.data.year = data.data.year + ""
|
||||
this.formData = data.data
|
||||
this.editDialogVisible = true
|
||||
} 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/gdh/jc/doAdd", this.formData, (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");
|
||||
}
|
||||
});
|
||||
},
|
||||
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/gdh/jc/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.jsOptions = await getJc()
|
||||
this.pageData();
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,365 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
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 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="username"></el-option>
|
||||
<el-option label="工号" value="loginname"></el-option>
|
||||
</el-select>
|
||||
</el-input>
|
||||
</div>
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-select v-model="pageForm.gdhid" style="width: 200px" clearable
|
||||
placeholder="请选择届次">
|
||||
<el-option
|
||||
v-for="item in gdhOptions"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-select v-model="pageForm.roleid" style="width: 200px" clearable
|
||||
placeholder="请选择身份">
|
||||
<el-option
|
||||
v-for="item in roles"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-button type="primary" icon="el-icon-search" @click="doSearch"></el-button>
|
||||
</div>
|
||||
|
||||
<div class="pull-right offscreen-right mt5">
|
||||
<el-button icon="el-icon-plus" @click="openAdd">添加成员</el-button>
|
||||
</div>
|
||||
</el-row>
|
||||
|
||||
<el-row class="el-table-container">
|
||||
<el-table :data="tableData" style="width: 100%" row-key="id" @sort-change="pageOrder"
|
||||
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 label="工号" prop="loginname" header-align="center"
|
||||
align="center"></el-table-column>
|
||||
<el-table-column label="姓名" prop="username" header-align="center"
|
||||
align="center"></el-table-column>
|
||||
<el-table-column label="性别" prop="sex" header-align="center" sortable
|
||||
align="center"></el-table-column>
|
||||
<el-table-column label="电话" prop="mobile" header-align="center"
|
||||
align="center"></el-table-column>
|
||||
<el-table-column label="单位" prop="unitname" header-align="center" sortable
|
||||
align="center"></el-table-column>
|
||||
<el-table-column label="工代会" prop="gdhname" header-align="center" sortable
|
||||
align="center"></el-table-column>
|
||||
<el-table-column label="身份" prop="rolecode" header-align="center" sortable
|
||||
align="center">
|
||||
<template slot-scope="scope">
|
||||
{{getRoleName(scope.row.roleid)}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" header-align="center" align="center" width="200px">
|
||||
<template slot-scope="scope">
|
||||
|
||||
<el-dropdown placement="bottom" style="margin-left: 10px;">
|
||||
<el-button type="primary" size="mini">
|
||||
设置身份<i class="el-icon-arrow-down el-icon--right"></i>
|
||||
</el-button>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item v-for="item in roles.filter(v => {
|
||||
return v.id != scope.row.roleid
|
||||
})"
|
||||
@click.native="changeRole({userid:scope.row.userid,roleid:item.id,gdhid:scope.row.gdhid})">
|
||||
{{item.name}}
|
||||
</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
|
||||
<el-button size="mini" type="danger" @click="doDelete(scope.row)">删除</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>
|
||||
|
||||
<el-dialog
|
||||
title="添加成员"
|
||||
:visible.sync="addDialogVisible" :close-on-click-modal="false" width="40%">
|
||||
|
||||
<el-form :model="formData" ref="addForm" :rules="formRules"
|
||||
label-width="100px">
|
||||
|
||||
<el-form-item label="届  次" prop="gdhid">
|
||||
<el-select v-model="formData.gdhid" style="width: 100%"
|
||||
placeholder="请选择工代会">
|
||||
<el-option
|
||||
v-for="item in gdhOptions"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="成  员" prop="users">
|
||||
<el-select
|
||||
style="width: 100%"
|
||||
multiple
|
||||
v-model="formData.users"
|
||||
filterable
|
||||
remote
|
||||
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-form-item label="身  份" prop="roleid">
|
||||
<el-radio v-model="formData.roleid" v-for="item in roles" :label="item.id">{{item.name}}</el-radio>
|
||||
</el-form-item>
|
||||
|
||||
</el-form>
|
||||
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="addDialogVisible = false">取 消</el-button>
|
||||
<el-button type="primary" :disabled="subDis" @click="doAdd">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
|
||||
</div>
|
||||
<script>
|
||||
var E = window.wangEditor
|
||||
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
data() {
|
||||
return {
|
||||
roles: [],
|
||||
gdhOptions: [],
|
||||
addDialogVisible: false,
|
||||
editDialogVisible: false,
|
||||
viewDialogVisible: false,
|
||||
tabLoading: false,
|
||||
formData: {},
|
||||
tableData: [],
|
||||
pageForm: {
|
||||
searchName: "username",
|
||||
searchKeyword: "",
|
||||
pageNumber: 1,
|
||||
pageSize: 10,
|
||||
totalCount: 0,
|
||||
pageOrderName: "",
|
||||
pageOrderBy: ""
|
||||
},
|
||||
formRules: {
|
||||
gdhid: [{required: true, message: '必选', trigger: ['blur', 'change']}],
|
||||
role: [{required: true, message: '必选', trigger: ['blur', 'change']}],
|
||||
users: [{type: 'array', required: true, message: '必选', trigger: ['blur', 'change']}],
|
||||
},
|
||||
subDis: false,
|
||||
userOptions: [],
|
||||
userLoading: false,
|
||||
fileList: [],
|
||||
delFiles: [],
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
changeRole(e) {
|
||||
$.post(base + "/platform/sys/gdh/jfscwyh/changeRole", e, (data) => {
|
||||
if (data.code == 0) {
|
||||
this.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
this.pageData()
|
||||
} else {
|
||||
this.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
getRoleName(roleid) {
|
||||
const o = this.roles.find(v => {
|
||||
return v.id == roleid
|
||||
})
|
||||
return o ? o.name : ''
|
||||
},
|
||||
doDelete(e) {
|
||||
this.$confirm('确定要移除该人员吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
callback: (a, b) => {
|
||||
if ("confirm" == a) {//确认后再执行
|
||||
$.post("/platform/sys/gdh/jfscwyh/del", e, (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/gdh/jfscwyh/addCy", {
|
||||
gdhid: this.formData.gdhid,
|
||||
roleid: this.formData.roleid,
|
||||
users: JSON.stringify(this.formData.users)
|
||||
}, (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 userRemoteMethod(query) {
|
||||
if (!this.formData.gdhid) {
|
||||
this.$message('请先选择届次');
|
||||
return
|
||||
}
|
||||
if (query) {
|
||||
this.userLoading = true
|
||||
const arr = await this.queryUser(this.formData.gdhid, 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
|
||||
}
|
||||
},
|
||||
async queryUser(gdhid, query) {
|
||||
const {data} = await $.get("/platform/sys/gdh/jfscwyh/queryUser", {gdhid, query})
|
||||
return data
|
||||
},
|
||||
openAdd() {
|
||||
this.userOptions = []
|
||||
this.formData = {users: []}
|
||||
this.addDialogVisible = true;
|
||||
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/gdh/jfscwyh/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 getRoles() {
|
||||
const {data} = await $.get("/platform/sys/gdh/jfscwyh/getRoles")
|
||||
return data
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.gdhOptions = await getGdh()
|
||||
this.$set(this.pageForm, "gdhid", this.gdhOptions.length ? this.gdhOptions[0].id : '')
|
||||
this.pageData();
|
||||
this.roles = await this.getRoles()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,365 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
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 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="username"></el-option>
|
||||
<el-option label="工号" value="loginname"></el-option>
|
||||
</el-select>
|
||||
</el-input>
|
||||
</div>
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-select v-model="pageForm.gdhid" style="width: 200px" clearable
|
||||
placeholder="请选择届次">
|
||||
<el-option
|
||||
v-for="item in gdhOptions"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-select v-model="pageForm.roleid" style="width: 200px" clearable
|
||||
placeholder="请选择身份">
|
||||
<el-option
|
||||
v-for="item in roles"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-button type="primary" icon="el-icon-search" @click="doSearch"></el-button>
|
||||
</div>
|
||||
|
||||
<div class="pull-right offscreen-right mt5">
|
||||
<el-button icon="el-icon-plus" @click="openAdd">添加成员</el-button>
|
||||
</div>
|
||||
</el-row>
|
||||
|
||||
<el-row class="el-table-container">
|
||||
<el-table :data="tableData" style="width: 100%" row-key="id" @sort-change="pageOrder"
|
||||
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 label="工号" prop="loginname" header-align="center"
|
||||
align="center"></el-table-column>
|
||||
<el-table-column label="姓名" prop="username" header-align="center"
|
||||
align="center"></el-table-column>
|
||||
<el-table-column label="性别" prop="sex" header-align="center" sortable
|
||||
align="center"></el-table-column>
|
||||
<el-table-column label="电话" prop="mobile" header-align="center"
|
||||
align="center"></el-table-column>
|
||||
<el-table-column label="单位" prop="unitname" header-align="center" sortable
|
||||
align="center"></el-table-column>
|
||||
<el-table-column label="工代会" prop="gdhname" header-align="center" sortable
|
||||
align="center"></el-table-column>
|
||||
<el-table-column label="身份" prop="rolecode" header-align="center" sortable
|
||||
align="center">
|
||||
<template slot-scope="scope">
|
||||
{{getRoleName(scope.row.roleid)}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" header-align="center" align="center" width="200px">
|
||||
<template slot-scope="scope">
|
||||
|
||||
<el-dropdown placement="bottom" style="margin-left: 10px;">
|
||||
<el-button type="primary" size="mini">
|
||||
设置身份<i class="el-icon-arrow-down el-icon--right"></i>
|
||||
</el-button>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item v-for="item in roles.filter(v => {
|
||||
return v.id != scope.row.roleid
|
||||
})"
|
||||
@click.native="changeRole({userid:scope.row.userid,roleid:item.id,gdhid:scope.row.gdhid})">
|
||||
{{item.name}}
|
||||
</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
|
||||
<el-button size="mini" type="danger" @click="doDelete(scope.row)">删除</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>
|
||||
|
||||
<el-dialog
|
||||
title="添加成员"
|
||||
:visible.sync="addDialogVisible" :close-on-click-modal="false" width="40%">
|
||||
|
||||
<el-form :model="formData" ref="addForm" :rules="formRules"
|
||||
label-width="100px">
|
||||
|
||||
<el-form-item label="届  次" prop="gdhid">
|
||||
<el-select v-model="formData.gdhid" style="width: 100%"
|
||||
placeholder="请选择工代会">
|
||||
<el-option
|
||||
v-for="item in gdhOptions"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="成  员" prop="users">
|
||||
<el-select
|
||||
style="width: 100%"
|
||||
multiple
|
||||
v-model="formData.users"
|
||||
filterable
|
||||
remote
|
||||
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-form-item label="身  份" prop="roleid">
|
||||
<el-radio v-model="formData.roleid" v-for="item in roles" :label="item.id">{{item.name}}</el-radio>
|
||||
</el-form-item>
|
||||
|
||||
</el-form>
|
||||
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="addDialogVisible = false">取 消</el-button>
|
||||
<el-button type="primary" :disabled="subDis" @click="doAdd">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
|
||||
</div>
|
||||
<script>
|
||||
var E = window.wangEditor
|
||||
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
data() {
|
||||
return {
|
||||
roles: [],
|
||||
gdhOptions: [],
|
||||
addDialogVisible: false,
|
||||
editDialogVisible: false,
|
||||
viewDialogVisible: false,
|
||||
tabLoading: false,
|
||||
formData: {},
|
||||
tableData: [],
|
||||
pageForm: {
|
||||
searchName: "username",
|
||||
searchKeyword: "",
|
||||
pageNumber: 1,
|
||||
pageSize: 10,
|
||||
totalCount: 0,
|
||||
pageOrderName: "",
|
||||
pageOrderBy: ""
|
||||
},
|
||||
formRules: {
|
||||
gdhid: [{required: true, message: '必选', trigger: ['blur', 'change']}],
|
||||
role: [{required: true, message: '必选', trigger: ['blur', 'change']}],
|
||||
users: [{type: 'array', required: true, message: '必选', trigger: ['blur', 'change']}],
|
||||
},
|
||||
subDis: false,
|
||||
userOptions: [],
|
||||
userLoading: false,
|
||||
fileList: [],
|
||||
delFiles: [],
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
changeRole(e) {
|
||||
$.post(base + "/platform/sys/gdh/njzgwyh/changeRole", e, (data) => {
|
||||
if (data.code == 0) {
|
||||
this.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
this.pageData()
|
||||
} else {
|
||||
this.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
getRoleName(roleid) {
|
||||
const o = this.roles.find(v => {
|
||||
return v.id == roleid
|
||||
})
|
||||
return o ? o.name : ''
|
||||
},
|
||||
doDelete(e) {
|
||||
this.$confirm('确定要移除该人员吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
callback: (a, b) => {
|
||||
if ("confirm" == a) {//确认后再执行
|
||||
$.post("/platform/sys/gdh/njzgwyh/del", e, (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/gdh/njzgwyh/addCy", {
|
||||
gdhid: this.formData.gdhid,
|
||||
roleid: this.formData.roleid,
|
||||
users: JSON.stringify(this.formData.users)
|
||||
}, (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 userRemoteMethod(query) {
|
||||
if (!this.formData.gdhid) {
|
||||
this.$message('请先选择届次');
|
||||
return
|
||||
}
|
||||
if (query) {
|
||||
this.userLoading = true
|
||||
const arr = await this.queryUser(this.formData.gdhid, 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
|
||||
}
|
||||
},
|
||||
async queryUser(gdhid, query) {
|
||||
const {data} = await $.get("/platform/sys/gdh/njzgwyh/queryUser", {gdhid, query})
|
||||
return data
|
||||
},
|
||||
openAdd() {
|
||||
this.userOptions = []
|
||||
this.formData = {users: []}
|
||||
this.addDialogVisible = true;
|
||||
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/gdh/njzgwyh/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 getRoles() {
|
||||
const {data} = await $.get("/platform/sys/gdh/njzgwyh/getRoles")
|
||||
return data
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.gdhOptions = await getGdh()
|
||||
this.$set(this.pageForm, "gdhid", this.gdhOptions.length ? this.gdhOptions[0].id : '')
|
||||
this.pageData();
|
||||
this.roles = await this.getRoles()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,365 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
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 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="username"></el-option>
|
||||
<el-option label="工号" value="loginname"></el-option>
|
||||
</el-select>
|
||||
</el-input>
|
||||
</div>
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-select v-model="pageForm.gdhid" style="width: 200px" clearable
|
||||
placeholder="请选择届次">
|
||||
<el-option
|
||||
v-for="item in gdhOptions"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-select v-model="pageForm.roleid" style="width: 200px" clearable
|
||||
placeholder="请选择身份">
|
||||
<el-option
|
||||
v-for="item in roles"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-button type="primary" icon="el-icon-search" @click="doSearch"></el-button>
|
||||
</div>
|
||||
|
||||
<div class="pull-right offscreen-right mt5">
|
||||
<el-button icon="el-icon-plus" @click="openAdd">添加成员</el-button>
|
||||
</div>
|
||||
</el-row>
|
||||
|
||||
<el-row class="el-table-container">
|
||||
<el-table :data="tableData" style="width: 100%" row-key="id" @sort-change="pageOrder"
|
||||
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 label="工号" prop="loginname" header-align="center"
|
||||
align="center"></el-table-column>
|
||||
<el-table-column label="姓名" prop="username" header-align="center"
|
||||
align="center"></el-table-column>
|
||||
<el-table-column label="性别" prop="sex" header-align="center" sortable
|
||||
align="center"></el-table-column>
|
||||
<el-table-column label="电话" prop="mobile" header-align="center"
|
||||
align="center"></el-table-column>
|
||||
<el-table-column label="单位" prop="unitname" header-align="center" sortable
|
||||
align="center"></el-table-column>
|
||||
<el-table-column label="工代会" prop="gdhname" header-align="center" sortable
|
||||
align="center"></el-table-column>
|
||||
<el-table-column label="身份" prop="rolecode" header-align="center" sortable
|
||||
align="center">
|
||||
<template slot-scope="scope">
|
||||
{{getRoleName(scope.row.roleid)}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" header-align="center" align="center" width="200px">
|
||||
<template slot-scope="scope">
|
||||
|
||||
<el-dropdown placement="bottom" style="margin-left: 10px;">
|
||||
<el-button type="primary" size="mini">
|
||||
设置身份<i class="el-icon-arrow-down el-icon--right"></i>
|
||||
</el-button>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item v-for="item in roles.filter(v => {
|
||||
return v.id != scope.row.roleid
|
||||
})"
|
||||
@click.native="changeRole({userid:scope.row.userid,roleid:item.id,gdhid:scope.row.gdhid})">
|
||||
{{item.name}}
|
||||
</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
|
||||
<el-button size="mini" type="danger" @click="doDelete(scope.row)">删除</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>
|
||||
|
||||
<el-dialog
|
||||
title="添加成员"
|
||||
:visible.sync="addDialogVisible" :close-on-click-modal="false" width="40%">
|
||||
|
||||
<el-form :model="formData" ref="addForm" :rules="formRules"
|
||||
label-width="100px">
|
||||
|
||||
<el-form-item label="届  次" prop="gdhid">
|
||||
<el-select v-model="formData.gdhid" style="width: 100%"
|
||||
placeholder="请选择工代会">
|
||||
<el-option
|
||||
v-for="item in gdhOptions"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="成  员" prop="users">
|
||||
<el-select
|
||||
style="width: 100%"
|
||||
multiple
|
||||
v-model="formData.users"
|
||||
filterable
|
||||
remote
|
||||
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-form-item label="身  份" prop="roleid">
|
||||
<el-radio v-model="formData.roleid" v-for="item in roles" :label="item.id">{{item.name}}</el-radio>
|
||||
</el-form-item>
|
||||
|
||||
</el-form>
|
||||
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="addDialogVisible = false">取 消</el-button>
|
||||
<el-button type="primary" :disabled="subDis" @click="doAdd">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
|
||||
</div>
|
||||
<script>
|
||||
var E = window.wangEditor
|
||||
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
data() {
|
||||
return {
|
||||
roles: [],
|
||||
gdhOptions: [],
|
||||
addDialogVisible: false,
|
||||
editDialogVisible: false,
|
||||
viewDialogVisible: false,
|
||||
tabLoading: false,
|
||||
formData: {},
|
||||
tableData: [],
|
||||
pageForm: {
|
||||
searchName: "username",
|
||||
searchKeyword: "",
|
||||
pageNumber: 1,
|
||||
pageSize: 10,
|
||||
totalCount: 0,
|
||||
pageOrderName: "",
|
||||
pageOrderBy: ""
|
||||
},
|
||||
formRules: {
|
||||
gdhid: [{required: true, message: '必选', trigger: ['blur', 'change']}],
|
||||
role: [{required: true, message: '必选', trigger: ['blur', 'change']}],
|
||||
users: [{type: 'array', required: true, message: '必选', trigger: ['blur', 'change']}],
|
||||
},
|
||||
subDis: false,
|
||||
userOptions: [],
|
||||
userLoading: false,
|
||||
fileList: [],
|
||||
delFiles: [],
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
changeRole(e) {
|
||||
$.post(base + "/platform/sys/gdh/zytjwyh/changeRole", e, (data) => {
|
||||
if (data.code == 0) {
|
||||
this.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
this.pageData()
|
||||
} else {
|
||||
this.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
getRoleName(roleid) {
|
||||
const o = this.roles.find(v => {
|
||||
return v.id == roleid
|
||||
})
|
||||
return o ? o.name : ''
|
||||
},
|
||||
doDelete(e) {
|
||||
this.$confirm('确定要移除该人员吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
callback: (a, b) => {
|
||||
if ("confirm" == a) {//确认后再执行
|
||||
$.post("/platform/sys/gdh/zytjwyh/del", e, (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/gdh/zytjwyh/addCy", {
|
||||
gdhid: this.formData.gdhid,
|
||||
roleid: this.formData.roleid,
|
||||
users: JSON.stringify(this.formData.users)
|
||||
}, (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 userRemoteMethod(query) {
|
||||
if (!this.formData.gdhid) {
|
||||
this.$message('请先选择届次');
|
||||
return
|
||||
}
|
||||
if (query) {
|
||||
this.userLoading = true
|
||||
const arr = await this.queryUser(this.formData.gdhid, 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
|
||||
}
|
||||
},
|
||||
async queryUser(gdhid, query) {
|
||||
const {data} = await $.get("/platform/sys/gdh/zytjwyh/queryUser", {gdhid, query})
|
||||
return data
|
||||
},
|
||||
openAdd() {
|
||||
this.userOptions = []
|
||||
this.formData = {users: []}
|
||||
this.addDialogVisible = true;
|
||||
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/gdh/zytjwyh/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 getRoles() {
|
||||
const {data} = await $.get("/platform/sys/gdh/zytjwyh/getRoles")
|
||||
return data
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.gdhOptions = await getGdh()
|
||||
this.$set(this.pageForm, "gdhid", this.gdhOptions.length ? this.gdhOptions[0].id : '')
|
||||
this.pageData();
|
||||
this.roles = await this.getRoles()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,759 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
#app {
|
||||
background-color: rgb(245, 245, 245);
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
.el-col {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.header-welcome {
|
||||
height: auto;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.header-item {
|
||||
line-height: 20px;
|
||||
background-color: white;
|
||||
border-radius: 7px;
|
||||
padding: 10px 15px 0;
|
||||
position: relative;
|
||||
transition: all 500ms;
|
||||
cursor: pointer;
|
||||
margin-top: 25px;
|
||||
box-shadow: 0 2px 4px rgba(0, 0, 0, .12), 0 0 6px rgba(0, 0, 0, .04)
|
||||
}
|
||||
|
||||
.header-item-title {
|
||||
text-align: center;
|
||||
font-size: 14px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.header-item-num {
|
||||
height: 60px;
|
||||
line-height: 70px;
|
||||
font-size: 28px;
|
||||
color: #409EFF
|
||||
}
|
||||
|
||||
.header-item-label {
|
||||
height: 40px;
|
||||
line-height: 40px;
|
||||
font-size: 14px;
|
||||
color: rgb(180, 180, 180);
|
||||
width: 100%;
|
||||
word-break: break-all;
|
||||
display: -webkit-box;
|
||||
-webkit-line-clamp: 1;
|
||||
-webkit-box-orient: vertical;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.header-item:hover {
|
||||
box-shadow: 0 0 20px rgb(220, 220, 220);
|
||||
}
|
||||
|
||||
.header-item-icon {
|
||||
position: absolute;
|
||||
height: 60px;
|
||||
width: 60px;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
right: 10px;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
.header-item-icon .fa {
|
||||
font-size: 46px;
|
||||
color: #409EFF;
|
||||
}
|
||||
|
||||
.v-header .el-col {
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
.v-item {
|
||||
border-radius: 7px;
|
||||
background-color: white;
|
||||
min-height: 100%;
|
||||
padding: 0 15px;
|
||||
}
|
||||
|
||||
.v-item-title {
|
||||
width: 100%;
|
||||
height: 50px;
|
||||
line-height: 50px;
|
||||
font-size: 14px;
|
||||
color: rgb(120, 120, 120);
|
||||
}
|
||||
|
||||
.v-item-col {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
height: 140px;
|
||||
}
|
||||
|
||||
.v-item-handle {
|
||||
width: 120px;
|
||||
height: 120px;
|
||||
background-color: rgb(248, 248, 248);
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
flex-direction: column;
|
||||
transition: all 500ms;
|
||||
color: #0779e4;
|
||||
cursor: pointer;
|
||||
border-radius: 5px;
|
||||
}
|
||||
|
||||
.v-item-handle .fa {
|
||||
font-size: 66px;
|
||||
color: #0779e4;
|
||||
transition: all 500ms;
|
||||
}
|
||||
|
||||
.v-item-handle-label {
|
||||
font-size: 14px;
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
.v-item-handle:hover {
|
||||
transform: scale(1.1);
|
||||
box-shadow: 0 0 20px rgb(220, 220, 220);
|
||||
}
|
||||
|
||||
/*.v-item-handle:hover .fa {
|
||||
color: white !important;
|
||||
}*/
|
||||
|
||||
.v-item-handle span {
|
||||
transition: all 500ms;
|
||||
}
|
||||
|
||||
/*.v-item-handle:hover span {
|
||||
color: white !important;
|
||||
}*/
|
||||
|
||||
.el-carousel__button {
|
||||
background-color: #c8c8cc !important;
|
||||
opacity: .24;
|
||||
}
|
||||
|
||||
.user-info-label {
|
||||
font-size: 14px;
|
||||
height: 50px;
|
||||
line-height: 50px;
|
||||
color: rgb(120, 120, 120);
|
||||
}
|
||||
|
||||
.user-info-val {
|
||||
font-size: 14px;
|
||||
height: 50px;
|
||||
line-height: 50px;
|
||||
color: #409EFF;
|
||||
}
|
||||
|
||||
|
||||
.el-calendar-table .current {
|
||||
height: 5px !important;
|
||||
}
|
||||
|
||||
#calendar .el-calendar-table .el-calendar-day {
|
||||
-webkit-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
height: calc(((1080px - 100vh) / 1080) * 40 + 45px);
|
||||
border-radius: 50%;
|
||||
}
|
||||
|
||||
.el-calendar__body {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.el-calendar__header {
|
||||
display: -webkit-box;
|
||||
display: -ms-flexbox;
|
||||
display: none;
|
||||
-webkit-box-pack: justify;
|
||||
-ms-flex-pack: justify;
|
||||
justify-content: space-between;
|
||||
padding: 12px 20px;
|
||||
border-bottom: 1px solid #EBEEF5;
|
||||
}
|
||||
|
||||
#bgrl .el-calendar-table .current {
|
||||
height: 120px !important;
|
||||
}
|
||||
|
||||
.none {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
flex-direction: column
|
||||
}
|
||||
|
||||
.none .none_title {
|
||||
margin-top: -40px;
|
||||
font-size: 14px;
|
||||
color: rgb(160, 160, 160);
|
||||
}
|
||||
|
||||
.avatar {
|
||||
position: absolute;
|
||||
right: 9.55vw;
|
||||
top: 70px;
|
||||
width: 6vw;
|
||||
height: 6vw;
|
||||
}
|
||||
|
||||
</style>
|
||||
<div id="app" v-cloak>
|
||||
|
||||
|
||||
<transition name="el-zoom-in-center">
|
||||
<div v-show="v=='index'" style="width: 100%;">
|
||||
|
||||
<!-- <el-row :gutter="15" class="v-header">-->
|
||||
<!-- <el-col :span="24">-->
|
||||
<!-- <div class="header-welcome">-->
|
||||
<!-- <img src="/nuaa_logo.gif" width="100%" height="100%">-->
|
||||
<!-- </div>-->
|
||||
<!-- </el-col>-->
|
||||
<!-- </el-row>-->
|
||||
|
||||
<el-row :gutter="15" type="flex" style=" align-items: stretch; ">
|
||||
<el-col :span="16">
|
||||
<div class="v-item">
|
||||
<div class="v-item-title">快速入口</div>
|
||||
<el-carousel v-if="handleItems.length" :autoplay="false" :height="handleHeight">
|
||||
<el-carousel-item v-for="index in Math.ceil(handleItems.length/12)" :key="index">
|
||||
<el-row style="padding: 0" id="handle">
|
||||
<el-col v-for="v in handleItems.slice((index-1)*12,index*12)" :sm="{span:8}"
|
||||
:md="{span:8}"
|
||||
:lg="{span:6}"
|
||||
:xl="{span:4}"
|
||||
class="v-item-col">
|
||||
<div class="v-item-handle" @click="JumpPjaxUrl(v.href)">
|
||||
<img :src="CREATE_PREVIEW_URL(v.iconClass)" style="width: 80px; height: 70px"/>
|
||||
<span class="v-item-handle-label"
|
||||
:style="'color: '+v.color"
|
||||
>{{ v.name }}</span>
|
||||
</div>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-carousel-item>
|
||||
</el-carousel>
|
||||
<div class="none" v-else>
|
||||
<img class="none_img" src="/none.png">
|
||||
<div class="none_title">暂无快速入口</div>
|
||||
</div>
|
||||
</div>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="9">
|
||||
<div class="v-item" id="calendar">
|
||||
<el-tabs v-model="activityAndRl" @tab-click="handleClick">
|
||||
<el-tab-pane label="日历" name="rl">
|
||||
<el-calendar>
|
||||
<template slot="dateCell" slot-scope="{date, data}">
|
||||
<p :class="data.isSelected ? 'is-selected' : ''" @click="v = 'calendar'">
|
||||
{{ data.day.split('-').slice(1)[1] }}
|
||||
<br/>
|
||||
<span style="display: flex;justify-content: center">
|
||||
<i v-for="item in noticeData"
|
||||
v-if="data.day.toString()==moment(item.startTime).format('YYYY-MM-DD')"
|
||||
style="color: #20A0FF;margin-right: 5px"
|
||||
class="fa fa-dot-circle-o"></i>
|
||||
</span>
|
||||
</p>
|
||||
</template>
|
||||
</el-calendar>
|
||||
</el-tab-pane>
|
||||
|
||||
<!--<el-tab-pane label="最新消息通知" name="xl">
|
||||
<div style="text-align: right">
|
||||
<el-radio-group v-model="pageForm.ywd" size="mini" @change="pageData">
|
||||
<el-radio-button label="read">已读</el-radio-button>
|
||||
<el-radio-button label="unread">未读</el-radio-button>
|
||||
|
||||
</el-radio-group>
|
||||
</div>
|
||||
<el-table :data="activityTableData" style="width: 100%;" v-loading="tableLoading"
|
||||
size="mini">
|
||||
|
||||
<el-table-column prop="note" label="活动名称">
|
||||
<template slot-scope="scope">
|
||||
<el-link type="primary" @click="isYy(scope.row)">
|
||||
{{scope.row.note}}
|
||||
</el-link>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="activitytime" label="活动时间"></el-table-column>
|
||||
<el-table-column prop="cz" label="操作" width="80px">
|
||||
<template slot-scope="scope">
|
||||
<el-button
|
||||
v-if="!scope.row.status"
|
||||
size="mini"
|
||||
type="primary"
|
||||
@click="isYy(scope.row)">查看
|
||||
</el-button>
|
||||
<el-button
|
||||
v-else
|
||||
size="mini"
|
||||
type="primary"
|
||||
@click="clickXlUrl(scope.row.url)">查看
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<div class="el-pagination-container">
|
||||
<el-pagination
|
||||
@size-change="pageSizeChange"
|
||||
@current-change="pageNumberChange"
|
||||
:current-page="pageForm.pageNumber"
|
||||
:page-sizes="[5,10, 20, 30]"
|
||||
:page-size="pageForm.pageSize"
|
||||
layout="total, sizes, prev, pager, next, jumper"
|
||||
:total="pageForm.totalCount">
|
||||
</el-pagination>
|
||||
</div>
|
||||
</el-tab-pane>-->
|
||||
</el-tabs>
|
||||
|
||||
</div>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="15" type="flex" style=" align-items: stretch;margin-top: 15px ">
|
||||
<el-col :span="16">
|
||||
<div class="v-item">
|
||||
<div class="v-item-title">待办事项</div>
|
||||
|
||||
<el-carousel v-if="needItems.length" :autoplay="false" :height="needHeight">
|
||||
<el-carousel-item v-for="index in Math.ceil(needItems.length/12)" :key="index">
|
||||
<el-row style="padding:0 10px" id="need">
|
||||
<el-col style="padding: 0 12px"
|
||||
v-for="item in needItems.slice((index-1)*12,index*12)"
|
||||
:xs="{span:12}" :sm="{span:12}" :md="{span:12}" :lg="{span:6}"
|
||||
:xl="{span:6}">
|
||||
<div class="header-item" @click="JumpPjaxUrl(item.href)">
|
||||
<div class="header-item-title">【{{ item.title }}】</div>
|
||||
<div class="header-item-num">{{ item.count }}</div>
|
||||
<div class="header-item-label">{{ item.name }}</div>
|
||||
<div class="header-item-icon">
|
||||
<img :src="CREATE_PREVIEW_URL(item.iconClass)" style="width: 60px; height: 60px"/>
|
||||
</div>
|
||||
</div>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-carousel-item>
|
||||
</el-carousel>
|
||||
|
||||
<div class="none" v-else>
|
||||
<img class="none_img" src="/none.png">
|
||||
<div class="none_title">暂无待办事项</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</el-col>
|
||||
<el-col :span="9">
|
||||
<div class="v-item" style="padding-bottom: 15px;">
|
||||
<div class="v-item-title">个人信息</div>
|
||||
|
||||
<div style="height: 40px;line-height: 40px;font-weight: bolder;color: #409EFF;font-size: 16px;margin-top: 40px">
|
||||
<span>${@shiro.getPrincipalProperty('username')}(${@shiro.getPrincipalProperty('sex')})</span>
|
||||
</div>
|
||||
|
||||
<div style="height: 40px;line-height: 30px;color: rgb(180,180,180)">
|
||||
<span>
|
||||
<!--#if(@shiro.getPrincipalProperty('unit')!=null){#-->
|
||||
${@shiro.getPrincipalProperty('unit').getName()}
|
||||
<!--#}else{#-->
|
||||
暂无单位信息
|
||||
<!--#}#-->
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<el-image
|
||||
class="avatar"
|
||||
:src="avatar"
|
||||
fit="cover">
|
||||
<div slot="error" class="image-slot" style="width: 100%;height: 100%">
|
||||
<div class="el-image__error">暂无照片</div>
|
||||
</div>
|
||||
</el-image>
|
||||
|
||||
<!-- <el-avatar shape="circle " :size="100" fit="cover" :src="avatar"></el-avatar>-->
|
||||
|
||||
<el-row style="margin-top: 60px">
|
||||
<el-col :span="12">
|
||||
<span class="user-info-label">工  号:</span>
|
||||
<span class="user-info-val">${@shiro.getPrincipalProperty('loginname')}</span>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<span class="user-info-label">工  会:</span>
|
||||
<span class="user-info-val"
|
||||
style="overflow:hidden;text-overflow:ellipsis;white-space:nowrap;">
|
||||
<!--#if(@shiro.getPrincipalProperty('union')!=null){#-->
|
||||
${@shiro.getPrincipalProperty('union').getUnionname()}
|
||||
<!--#}#-->
|
||||
</span>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<span class="user-info-label">联系电话:</span>
|
||||
<span class="user-info-val">${@shiro.getPrincipalProperty('mobile')}</span>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<span class="user-info-label">职  务:</span>
|
||||
<span class="user-info-val">
|
||||
<span class="user-info-val">${@shiro.getPrincipalProperty('position')}</span>
|
||||
</span>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<span class="user-info-label">在职状态:</span>
|
||||
<span class="user-info-val">${@shiro.getPrincipalProperty('userState')}</span>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<span class="user-info-label">民  族:</span>
|
||||
<span class="user-info-val">
|
||||
<span class="user-info-val">${@shiro.getPrincipalProperty('nation')}</span>
|
||||
</span>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row>
|
||||
<el-col :span="24">
|
||||
<span class="user-info-label">用户身份:</span>
|
||||
<span class="user-info-val" style="color: #f56c6c">
|
||||
<!--#
|
||||
for(role in @shiro.getPrincipalProperty('roles')){
|
||||
#-->
|
||||
${@role.getName()}
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
</span>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
</el-col>
|
||||
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="15" style="margin-top: 15px" style=" align-items: stretch; ">
|
||||
|
||||
</el-row>
|
||||
</div>
|
||||
</transition>
|
||||
|
||||
<transition name="el-zoom-in-center">
|
||||
<div v-show="v=='calendar'" class="transition-item transition-item2">
|
||||
<el-card class="box-card v-box guava-card" shadow="never">
|
||||
<div slot="header" class="clearfix">
|
||||
<el-button icon="el-icon-back" type="text" @click="v='index'" style="font-size: 16px">返回
|
||||
</el-button>
|
||||
</div>
|
||||
<div id="bgrl">
|
||||
<el-calendar>
|
||||
<template slot="dateCell" slot-scope="{date, data}">
|
||||
<p :class="data.isSelected ? 'is-selected' : ''">
|
||||
{{ data.day.split('-').slice(1).join('-') }} {{ data.isSelected ? '✔️' : ''}}
|
||||
</p>
|
||||
<div v-for="item in noticeData">
|
||||
<div v-if="data.day.toString()==moment(item.startTime).format('YYYY-MM-DD')">
|
||||
<el-link
|
||||
v-if="item.activityType===40001||item.activityType===40002||item.activityType===40003"
|
||||
style="font-size: 8px" type="primary" target="_blank" @click="doLink(item)">
|
||||
{{item.name}}
|
||||
</el-link>
|
||||
<el-link v-if="item.type===1" style="font-size: 8px" type="primary"
|
||||
target="_blank"
|
||||
@click="doLink(item)">
|
||||
{{item.name}}
|
||||
</el-link>
|
||||
|
||||
<el-link v-if="item.type===2" style="font-size: 8px" type="primary"
|
||||
target="_blank"
|
||||
@click="doLink(item)">
|
||||
{{item.name}}
|
||||
</el-link>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</el-calendar>
|
||||
</div>
|
||||
</el-card>
|
||||
</div>
|
||||
</transition>
|
||||
|
||||
</div>
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
data() {
|
||||
return {
|
||||
tableLoading: true,
|
||||
pageForm: {
|
||||
ywd: "unread",
|
||||
searchName: "",
|
||||
searchKeyword: "",
|
||||
pageNumber: 1,
|
||||
pageSize: 5,
|
||||
totalCount: 0,
|
||||
pageOrderName: "",
|
||||
pageOrderBy: ""
|
||||
},
|
||||
activityTableData: [],
|
||||
activityAndRl: "rl",
|
||||
noticeData: [],
|
||||
noticeKey: new Date().getTime(),
|
||||
avatar: "/avatar_boy.png",
|
||||
colors: ['#409EFF', '#67C23A', '#E6A23C', '#F56C6C', '#00a2ae', '#7265e6', '#ffbf00', '#00a854'],
|
||||
handleItems: [],
|
||||
needItems: [],
|
||||
handleHeight: '350px',
|
||||
needHeight: '420px',
|
||||
v: "index",
|
||||
day: "",
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async pageData() {
|
||||
sublime.showLoadingbar();
|
||||
this.tableLoading = true
|
||||
const data = await $.post("/platform/sys/msg/user/data/" + this.pageForm.ywd, this.pageForm)
|
||||
sublime.closeLoadingbar();//关闭loading
|
||||
if (data.code === 0) {
|
||||
this.activityTableData = data.data.list;
|
||||
this.pageForm.totalCount = data.data.totalCount;
|
||||
} else {
|
||||
this.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
this.tableLoading = false
|
||||
},
|
||||
pageNumberChange(val) {
|
||||
this.pageForm.pageNumber = val;
|
||||
this.pageData();
|
||||
},
|
||||
pageSizeChange(val) {
|
||||
this.pageForm.pageSize = val;
|
||||
this.pageData();
|
||||
},
|
||||
async isYy(row) {
|
||||
let ids = []
|
||||
ids.push(row.id)
|
||||
const resp = await $.get("/platform/sys/msg/user/status/read", {ids: JSON.stringify(ids)})
|
||||
this.clickXlUrl(row.url)
|
||||
|
||||
},
|
||||
clickXlUrl(url) {
|
||||
if (url) {
|
||||
if (url === "/platform/evaluate/apply") {
|
||||
sublime.jumpPagePjax(url)
|
||||
} else if ("${@shiro.hasRole('H04')}" === 'true' || "${@shiro.hasRole('sysadmin')}" === 'true' || "${@shiro.hasRole('H10')}" === 'true') {
|
||||
sublime.jumpPagePjax(url)
|
||||
} else {
|
||||
if ("${@shiro.hasRole('club01')}" === 'true' && url === "/platform/activity/info/mange/club") {
|
||||
sublime.jumpPagePjax(url)
|
||||
} else {
|
||||
this.pageData();
|
||||
this.$notify({
|
||||
title: '警告',
|
||||
message: '您已阅读,如需报名请前往手机端智慧工会!!',
|
||||
type: 'warning'
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
this.pageData();
|
||||
this.$notify({
|
||||
title: '警告',
|
||||
message: '您已阅读,如需报名请前往手机端智慧工会!!',
|
||||
type: 'warning'
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
},
|
||||
handleClick(val) {
|
||||
this.pageData();
|
||||
},
|
||||
doLink(item) {
|
||||
if (item.activityType) {
|
||||
this.$notify.warning('如需报名请前往手机端智慧工会')
|
||||
}
|
||||
if (item.type === 1) {
|
||||
if ("${@shiro.hasRole('H04')}" === 'false' && "${@shiro.hasRole('sysadmin')}" === 'false' && item.applyWay.includes("1")) {
|
||||
this.$notify.warning('如需报名请前往手机端智慧工会')
|
||||
} else {
|
||||
if ("${@shiro.hasRole('H04')}" === 'true' || "${@shiro.hasRole('sysadmin')}" === 'true') {
|
||||
this.JumpPjaxUrl('/platform/activity/apply')
|
||||
} else {
|
||||
this.$notify.warning('当前活动不支持个人报名,如需报名请联系分工会管理员!')
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
if (item.type === 2) {
|
||||
this.$notify.warning('如需报名请前往健身走小程序')
|
||||
}
|
||||
|
||||
},
|
||||
setSize() {
|
||||
this.$nextTick(() => {
|
||||
this.handleHeight = $('#handle').height() + 50 + 'px';
|
||||
this.needHeight = $('#need').height() + 50 + 'px';
|
||||
})
|
||||
},
|
||||
/**
|
||||
* 获取日历信息
|
||||
*/
|
||||
/*async getCalendarNotice() {
|
||||
const activityData = await this.getActivityData()
|
||||
const fitnessData = await this.getFitnessData()
|
||||
const activityWyData = await this.getWyActivityData()
|
||||
const noticeData = activityData.concat(fitnessData ? fitnessData : [])
|
||||
this.noticeData = noticeData.concat(activityWyData)
|
||||
},*/
|
||||
/**
|
||||
* 获取校级活动报名信息
|
||||
*/
|
||||
async getActivityData() {
|
||||
const {data} = await $.get(base + "/platform/activity/calendar/getData")
|
||||
if (data && data.length > 0) {
|
||||
data.forEach(v => {
|
||||
v.type = 1
|
||||
})
|
||||
}
|
||||
return data
|
||||
},
|
||||
/**
|
||||
* 获取活动报名信息
|
||||
*/
|
||||
async getWyActivityData() {
|
||||
const {data} = await $.get(base + "/platform/activity/calendar/getWyData")
|
||||
return data
|
||||
},
|
||||
/**
|
||||
* 获取健身走活动报名信息
|
||||
*/
|
||||
async getFitnessData() {
|
||||
const {data} = await $.get("/platform/jsz/hdMange/getFitnessData")
|
||||
if (data && data.length > 0) {
|
||||
data.forEach(v => {
|
||||
v.startTime = v.start_time
|
||||
v.type = 2
|
||||
})
|
||||
}
|
||||
return data
|
||||
},
|
||||
/**
|
||||
* 快速入口
|
||||
* @returns {Promise<void>}
|
||||
*/
|
||||
async getQuickentry() {
|
||||
const {data, code} = await $.get("/platform/quickEntry/getQuickentry")
|
||||
if (code == 0) {
|
||||
this.handleItems = data;
|
||||
this.setSize()
|
||||
}
|
||||
},
|
||||
async findMaxParenMenuId(menu) {
|
||||
const resp = await $.get('/platform/sys/entranceModule/getFirstMenus')
|
||||
if (resp.code !== 0) return
|
||||
if (!menu.path) return null
|
||||
const parentMenuPath = menu.path.substr(0, 4)
|
||||
const firstMenus = resp.data
|
||||
|
||||
const parentMenu = firstMenus.find(v => v.path === parentMenuPath)
|
||||
if (parentMenu) {
|
||||
return parentMenu.id
|
||||
}
|
||||
return null
|
||||
},
|
||||
async getNeedItems() {
|
||||
const { data, code } = await $.get('/platform/needItems/getNeedItems')
|
||||
if (code === 0) {
|
||||
this.needItems = data
|
||||
this.setSize()
|
||||
}
|
||||
},
|
||||
async JumpPjaxUrl(url) {
|
||||
const secondMenus = headerNavBarVueApp.secondMenus
|
||||
const allMenus = Object.values(secondMenus).reduce((a, b) => a.concat(b))
|
||||
const jumpMenu = allMenus.find(v => v.href === url)
|
||||
//找出在哪一个模块当中
|
||||
const entranceModules = headerNavBarVueApp.entranceModules
|
||||
|
||||
//找到这个菜单的一级父亲菜单
|
||||
const maxParenMenuId = await this.findMaxParenMenuId(jumpMenu)
|
||||
|
||||
const module = entranceModules.find(v => v.containsMenu.includes(maxParenMenuId))
|
||||
if (module) {
|
||||
headerNavBarVueApp.selectEntranceModule = module
|
||||
const resp = await $.get('/platform/sys/entranceModule/getFirstMenus', {entranceModuleId:module.id})
|
||||
if (resp.code === 0) {
|
||||
headerNavBarVueApp.firstMenus = resp.data
|
||||
headerNavBarVueApp.setAttr(()=>{
|
||||
sublime.jumpPagePjax(url)
|
||||
})
|
||||
}
|
||||
/*setTimeout(()=>{
|
||||
sublime.jumpPagePjax(url)
|
||||
},0)*/
|
||||
} else {
|
||||
$.pjax({
|
||||
url: url,
|
||||
container: '#container',
|
||||
fragment: '#container',
|
||||
timeout: 8000
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
beforeMount() {
|
||||
window.addEventListener('resize', () => {
|
||||
// this.setSize()
|
||||
}, false);
|
||||
},
|
||||
mounted() {
|
||||
this.setSize()
|
||||
const userAvatar = "${@shiro.getPrincipalProperty('avatar')}"
|
||||
const sex = "${@shiro.getPrincipalProperty('sex')}"
|
||||
if (userAvatar) {
|
||||
this.avatar = APP_DOMAIN+FILE_STREAM_PREVIEW_ADDRESS +'?id=' + "${@shiro.getPrincipalProperty('avatar')}"
|
||||
} else {
|
||||
this.avatar = sex === '女' ? '/avatar_girl.png' : '/avatar_boy.png'
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
await this.getQuickentry()
|
||||
await this.getNeedItems()
|
||||
//await this.getCalendarNotice()
|
||||
this.pageData()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--# } #-->
|
||||
@@ -0,0 +1,34 @@
|
||||
<!--#if(!isEmpty(path)){
|
||||
var secondMenus=@shiro.getPrincipalProperty('secondMenus');
|
||||
#-->
|
||||
|
||||
<!--# for(firstMenu in @secondMenus.get(perpath)){ #-->
|
||||
<li <!--# if(mpath==firstMenu.path){#-->class="active" <!--#}#--> <!--#if(@path.indexOf(firstMenu.path)==0){#-->class="open"<!--#}#-->>
|
||||
<a <!--# if(!isEmpty(firstMenu.href)){ #-->href="<!--#if(@string.startWith(firstMenu.href,'/')){#-->${base}${firstMenu.href!}<!--#}else{#-->${firstMenu.href!}<!--#}#-->" <!--#if(@string.startWith(firstMenu.target,'_')){#-->target="${firstMenu.target!}"<!--#}else{#-->${firstMenu.target!}<!--#}#--> <!--# }else{ #-->href="javascript:;"<!--# } #--> <!--# if(mpath==firstMenu.path){#--> class="active" <!--#}#--> <!--#if(@path.indexOf(firstMenu.path)==0){#--> class="active"<!--#}#-->>
|
||||
<!--# if(!isEmpty(@secondMenus.get(firstMenu.path))){ #-->
|
||||
<i class="toggle-accordion"></i>
|
||||
<!--# } #-->
|
||||
<!--# if(!isEmpty(firstMenu.icon)){ #-->
|
||||
<i class="${firstMenu.icon!}"></i>
|
||||
<!--# }else{ #-->
|
||||
<i class="ti-map"></i>
|
||||
<!--# } #-->
|
||||
<span><!--#if(lang=="zh_CN"){#-->${firstMenu.name}<!--#}else{#-->${firstMenu.aliasName}<!--#}#--></span>
|
||||
</a>
|
||||
<!--# if(!isEmpty(@secondMenus.get(firstMenu.path))){ #-->
|
||||
<ul class="sub-menu" <!--#if(@path.indexOf(firstMenu.path)==0){#-->style="display: block"<!--#}#-->>
|
||||
<!--# for(secondMenu in @secondMenus.get(firstMenu.path)){ #-->
|
||||
|
||||
<li <!--# if(mpath == secondMenu.path){ #-->class="active"<!--# }else if(path==secondMenu.path){ #-->class="open"<!--# } #--> >
|
||||
<a <!--# if(!isEmpty(secondMenu.href)){ #-->href="<!--#if(@string.startWith(secondMenu.href,'/')){#-->${base}${secondMenu.href!}<!--#}else{#-->${secondMenu.href!}<!--#}#-->" <!--#if(@string.startWith(secondMenu.target,'_')){#-->target="${secondMenu.target!}"<!--#}else{#-->${secondMenu.target!}<!--#}#--> <!--# }else{ #-->href="javascript:;"<!--# } #-->>
|
||||
<span>
|
||||
<!--#if(lang=="zh_CN"){#-->${secondMenu.name}<!--#}else{#-->${secondMenu.aliasName}<!--#}#-->
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
<!--# } #--><!--# } #-->
|
||||
</ul>
|
||||
<!--# } #-->
|
||||
</li>
|
||||
|
||||
<!--#}#-->
|
||||
@@ -0,0 +1,252 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app" v-cloak>
|
||||
<el-row class="header navbar bg-white shadow">
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-select v-model="pageForm.searchType" placeholder="请选择日志类型"
|
||||
size="medium"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in options"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
>
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-date-picker
|
||||
v-model="searchDate"
|
||||
type="datetimerange"
|
||||
:picker-options="pickerOptions"
|
||||
range-separator="至"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期"
|
||||
align="right"
|
||||
size="medium"
|
||||
:default-time="['00:00:00', '23:59:59']"
|
||||
value-format="yyyy-MM-dd HH:mm:ss"
|
||||
>
|
||||
</el-date-picker>
|
||||
</div>
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-button slot="append" icon="el-icon-search" @click="doSearch" size="medium"></el-button>
|
||||
</div>
|
||||
</el-row>
|
||||
<el-row class="el-table-container">
|
||||
<el-table
|
||||
:data="tableData"
|
||||
@sort-change='pageOrder'
|
||||
size="small"
|
||||
header-align="center"
|
||||
style="width: 100%"
|
||||
:default-sort = "{prop: 'opat', order: 'descending'}"
|
||||
>
|
||||
<el-table-column
|
||||
sortable
|
||||
prop="username"
|
||||
label="操作人"
|
||||
header-align="center" align="center">
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
sortable
|
||||
prop="opat"
|
||||
label="操作时间"
|
||||
header-align="center" align="center">
|
||||
<template slot-scope="scope">
|
||||
{{formatAt(scope.row.opat)}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="type"
|
||||
label="日志类型"
|
||||
header-align="center" align="center">
|
||||
<template slot-scope="scope">
|
||||
<span v-if="scope.row.type=='platform'">
|
||||
平台日志
|
||||
</span>
|
||||
<span v-if="scope.row.type=='info'">
|
||||
登录日志
|
||||
</span>
|
||||
<span v-if="scope.row.type=='api'">
|
||||
接口日志
|
||||
</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column
|
||||
prop="tag"
|
||||
label="执行动作"
|
||||
header-align="center" align="center">
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column
|
||||
prop="src"
|
||||
label="执行类"
|
||||
header-align="left"
|
||||
:show-overflow-tooltip="true"
|
||||
>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="msg"
|
||||
label="日志内容"
|
||||
header-align="left"
|
||||
:show-overflow-tooltip="true"
|
||||
>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="param"
|
||||
label="执行参数"
|
||||
header-align="left"
|
||||
:show-overflow-tooltip="true"
|
||||
>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="result"
|
||||
label="执行结果"
|
||||
header-align="left"
|
||||
:show-overflow-tooltip="true"
|
||||
>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="ip"
|
||||
label="IP"
|
||||
header-align="left"
|
||||
:show-overflow-tooltip="true"
|
||||
>
|
||||
</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, jumper"
|
||||
:total="pageForm.totalCount">
|
||||
</el-pagination>
|
||||
</el-row>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
new Vue({
|
||||
el: "#app",
|
||||
data: function () {
|
||||
return {
|
||||
options: [{
|
||||
value: '',
|
||||
label: '全部类型'
|
||||
}, {
|
||||
value: 'platform',
|
||||
label: '平台日志'
|
||||
}, {
|
||||
value: 'info',
|
||||
label: '登录日志'
|
||||
}, {
|
||||
value: 'api',
|
||||
label: '接口日志'
|
||||
}],
|
||||
pickerOptions: {
|
||||
disabledDate: function (time) {
|
||||
var threeMonths = moment().add(-3, 'months').valueOf();
|
||||
return time.getTime() > Date.now() || time.getTime() < threeMonths;
|
||||
},
|
||||
shortcuts: [{
|
||||
text: '最近一周',
|
||||
onClick:function(picker) {
|
||||
var end = new Date();
|
||||
var start = new Date();
|
||||
var temp = moment().add(-1, 'weeks').valueOf();
|
||||
start.setTime(temp);
|
||||
picker.$emit('pick', [start, end]);
|
||||
}
|
||||
}, {
|
||||
text: '最近一个月',
|
||||
onClick:function(picker) {
|
||||
var end = new Date();
|
||||
var start = new Date();
|
||||
var temp = moment().add(-1, 'months').valueOf();
|
||||
start.setTime(temp);
|
||||
picker.$emit('pick', [start, end]);
|
||||
}
|
||||
}, {
|
||||
text: '最近三个月',
|
||||
onClick:function(picker) {
|
||||
var end = new Date();
|
||||
var start = new Date();
|
||||
var temp = moment().add(-3, 'months').valueOf();
|
||||
start.setTime(temp);
|
||||
picker.$emit('pick', [start, end]);
|
||||
}
|
||||
}]
|
||||
},
|
||||
tableData: [],
|
||||
pageForm: {
|
||||
pageNumber: 1,
|
||||
pageSize: 10,
|
||||
totalCount: 0,
|
||||
pageOrderName: "opAt",
|
||||
pageOrderBy: "descending",
|
||||
searchDate: "",
|
||||
searchType: ""
|
||||
},
|
||||
searchDate: []
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
formatAt: function (val) {
|
||||
if (val > 0)
|
||||
return moment(val * 1000).format("YYYY-MM-DD HH:mm");
|
||||
return "";
|
||||
},
|
||||
pageOrder: function (column) {//按字段排序
|
||||
this.pageForm.pageOrderName = column.prop;
|
||||
this.pageForm.pageOrderBy = column.order;
|
||||
this.pageData();
|
||||
},
|
||||
pageNumberChange: function (val) {//页码更新操作
|
||||
this.pageForm.pageNumber = val;
|
||||
this.pageData();
|
||||
},
|
||||
pageSizeChange: function (val) {//分页大小更新操作
|
||||
this.pageForm.pageSize = val;
|
||||
this.pageData();
|
||||
},
|
||||
doSearch: function () {
|
||||
this.pageForm.pageNumber = 1;
|
||||
this.pageData();
|
||||
},
|
||||
pageData: function () {//加载分页数据
|
||||
var self = this;
|
||||
sublime.showLoadingbar();//显示loading
|
||||
if (self.searchDate) {
|
||||
self.pageForm.searchDate = self.searchDate.toString();
|
||||
}else {
|
||||
self.pageForm.searchDate="";
|
||||
}
|
||||
$.post(base + "/platform/sys/log/data", self.pageForm, function (data) {
|
||||
sublime.closeLoadingbar();//关闭loading
|
||||
if (data.code == 0) {
|
||||
self.tableData = data.data.list;
|
||||
self.pageForm.totalCount = data.data.totalCount;
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
},
|
||||
created: function () {
|
||||
this.pageData();
|
||||
}
|
||||
});
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,332 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="${lang,escape}">
|
||||
<head>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||
<meta name="viewport"
|
||||
content="width=device-width, user-scalable=no, initial-scale=1, maximum-scale=1">
|
||||
<meta name="description" content="${AppName!}">
|
||||
<title>${AppName!}</title>
|
||||
<meta charset="UTF-8">
|
||||
<!-- import CSS -->
|
||||
<link rel="stylesheet"
|
||||
href="${base!}/assets/platform/plugins/element-ui/lib/theme-chalk/index.css">
|
||||
|
||||
<style>
|
||||
html, body, #app {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, SimSun, sans-serif;
|
||||
font-weight: 400;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-webkit-tap-highlight-color: transparent;
|
||||
background-color: #f8f8f8;
|
||||
font-size: 14px;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.login-container {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
position: relative;
|
||||
background-color: #ffffff;
|
||||
background-image: url("/login.png");
|
||||
background-size: cover;
|
||||
}
|
||||
|
||||
.mobile-login-img {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.login-content {
|
||||
width: 500px;
|
||||
padding: 20px;
|
||||
position: absolute;
|
||||
left: 50% !important;
|
||||
transform: translate(-50%, -50%) translate(0) !important;
|
||||
top: 50%;
|
||||
background-color: #ffffff;
|
||||
border: 5px solid #d9ecff;
|
||||
border-radius: 5px;
|
||||
overflow: hidden;
|
||||
z-index: 1;
|
||||
min-height: 380px;
|
||||
}
|
||||
|
||||
.login-content-main {
|
||||
margin: 0 auto;
|
||||
width: 80%;
|
||||
}
|
||||
|
||||
.login-tabs {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.login-container .login-content .login-content-main .login-content-title {
|
||||
color: #303133;
|
||||
font-weight: 500;
|
||||
font-size: 22px;
|
||||
text-align: center;
|
||||
letter-spacing: 4px;
|
||||
margin: 15px 0 30px;
|
||||
white-space: nowrap;
|
||||
z-index: 5;
|
||||
position: relative;
|
||||
transition: all .3s ease;
|
||||
}
|
||||
|
||||
.login-form {
|
||||
margin-top: 20px;
|
||||
}
|
||||
|
||||
.login-button {
|
||||
width: 100%;
|
||||
border-radius: 20px;
|
||||
letter-spacing: 5px;
|
||||
font-weight: 300;
|
||||
margin-top: 15px;
|
||||
}
|
||||
|
||||
|
||||
@media screen and (max-width: 576px) {
|
||||
.login-container .login-content {
|
||||
width: 100% !important;
|
||||
height: 100% !important;
|
||||
padding: 20px 0 !important;
|
||||
border-radius: 0 !important;
|
||||
box-shadow: unset !important;
|
||||
border: none !important;
|
||||
}
|
||||
|
||||
.login-container .login-content-main {
|
||||
margin-top: 60px;
|
||||
}
|
||||
|
||||
.login-container .mobile-login-img {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.login-container {
|
||||
background-image: unset !important;
|
||||
background-size: unset !important;
|
||||
}
|
||||
}
|
||||
|
||||
.login-code{
|
||||
display: inline-block;
|
||||
float: right;
|
||||
width: 38%;
|
||||
height: 38px;
|
||||
}
|
||||
|
||||
.login-code img{
|
||||
vertical-align: middle;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
|
||||
</style>
|
||||
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<!--[if lt IE 9]>
|
||||
<div class="ie-must-go-die">
|
||||
<div class="ie-container">
|
||||
<h1>
|
||||
您正在IE的世界中
|
||||
</h1>
|
||||
<p>
|
||||
本系统不支持IE9以下版本浏览器访问。
|
||||
</p>
|
||||
<a href="https://browsehappy.com" target="_blank">
|
||||
您可以点击此处,下载Chrome/Firefox后再次访问本页面。
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<![endif]-->
|
||||
<div id="app" v-cloak>
|
||||
|
||||
<div class="login-container">
|
||||
<div class="login-content">
|
||||
<div class="mobile-login-img">
|
||||
<embed src="/m-login.svg" style="width: 100%" type="image/svg+xml"/>
|
||||
</div>
|
||||
|
||||
<div class="login-content-main">
|
||||
<h4 class="login-content-title ml15">
|
||||
${AppName!}系统登录
|
||||
</h4>
|
||||
<el-tabs class="login-tabs">
|
||||
<el-tab-pane label="用户名登录">
|
||||
<el-form :model="loginForm" :rules="loginRules" auto-complete="on"
|
||||
class="login-form"
|
||||
ref="loginForm">
|
||||
<el-form-item prop="username">
|
||||
<el-input
|
||||
placeholder="账号或手机号码"
|
||||
prefix-icon="el-icon-user"
|
||||
type="text"
|
||||
v-model="loginForm.username"
|
||||
>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="password">
|
||||
<el-input
|
||||
@keyup.enter.native="doLogin"
|
||||
placeholder="密码"
|
||||
prefix-icon="el-icon-lock"
|
||||
type="password"
|
||||
v-model="loginForm.password"
|
||||
>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="platformCaptcha">
|
||||
<el-input
|
||||
@keyup.enter.native="doLogin"
|
||||
placeholder="验证码"
|
||||
prefix-icon="el-icon-lock"
|
||||
style="width: 60%"
|
||||
type="password"
|
||||
v-model="loginForm.platformCaptcha"
|
||||
>
|
||||
</el-input>
|
||||
<div class="login-code">
|
||||
<img :src="codeUrl" @click="getCode" alt="">
|
||||
</div>
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-form-item>
|
||||
<el-button :disabled="disabled"
|
||||
:loading="loading"
|
||||
@click.native.prevent="doLogin"
|
||||
class="login-button"
|
||||
type="primary">
|
||||
<span v-if="!loading">登 录</span>
|
||||
<span v-else>登录中...</span>
|
||||
</el-button>
|
||||
</el-form-item>
|
||||
|
||||
</el-form>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
|
||||
<script src="${base!}/assets/platform/plugins/vue/vue.min.js"></script>
|
||||
<script src="${base!}/assets/platform/plugins/element-ui/lib/index.js"></script>
|
||||
<script src="${base!}/assets/platform/plugins/jquery/jquery-1.11.1.min.js"></script>
|
||||
<script>
|
||||
var vue = new Vue({
|
||||
el: '#app',
|
||||
data() {
|
||||
return {
|
||||
loginForm: {
|
||||
username: '',
|
||||
password: '',
|
||||
platformKey: '',
|
||||
platformCaptcha: "",
|
||||
},
|
||||
loginRules: {
|
||||
username: [
|
||||
{required: true, trigger: ['blur', 'change'], message: '用户名不能为空'},
|
||||
],
|
||||
password: [
|
||||
{required: true, trigger: ['blur', 'change'], message: '密码不能为空'},
|
||||
],
|
||||
platformCaptcha: [
|
||||
{required: true, trigger: ['blur', 'change'], message: '验证码不能为空'},
|
||||
],
|
||||
},
|
||||
loading: false,
|
||||
disabled: false,
|
||||
|
||||
codeUrl: "${base!}/platform/login/captcha",
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async doLogin() {
|
||||
try {
|
||||
const valid = await this.$refs['loginForm'].validate()
|
||||
if (valid) {
|
||||
this.loading = true
|
||||
const resp = await $.post("${base!}/platform/login/doLogin", this.loginForm)
|
||||
this.loading = false
|
||||
if (resp.code === 0) {
|
||||
this.$message.success(resp.msg)
|
||||
this.disabled = true
|
||||
setTimeout(() => {
|
||||
const redirect = this.getQueryString("redirect")
|
||||
if (redirect) {
|
||||
window.location.href = redirect
|
||||
} else if (this.isMobile()) {
|
||||
window.location.href = "${base!}/mobile/index"
|
||||
} else {
|
||||
window.location.href = "${base!}/platform/home"
|
||||
}
|
||||
}, 1000)
|
||||
} else {
|
||||
this.$message.error(resp.msg)
|
||||
this.getCode()
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
console.log(e)
|
||||
}
|
||||
},
|
||||
getQueryString(name) {
|
||||
const reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
|
||||
let r = window.location.search.substr(1).match(reg);
|
||||
if (r != null) return unescape(r[2]);
|
||||
return "";
|
||||
},
|
||||
isMobile() {
|
||||
const userAgentInfo = navigator.userAgent;
|
||||
const mobileAgents = ["Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod"];
|
||||
let isMobile = false;
|
||||
//根据userAgent判断是否是手机
|
||||
|
||||
isMobile = mobileAgents.some(v => userAgentInfo.includes(v))
|
||||
|
||||
const screen_width = window.screen.width;
|
||||
const screen_height = window.screen.height;
|
||||
|
||||
//根据屏幕分辨率判断是否是手机 电脑上调成手机模式 可进入手机端 (●'◡'●)
|
||||
if (screen_width < 500 && screen_height < 800) {
|
||||
isMobile = true;
|
||||
}
|
||||
return isMobile;
|
||||
},
|
||||
|
||||
async getCode() {
|
||||
const {data} = await $.get('/platform/login/captcha')
|
||||
this.codeUrl = data.codeUrl
|
||||
this.loginForm.platformKey = data.key
|
||||
}
|
||||
|
||||
},
|
||||
mounted() {
|
||||
window.addEventListener('pageshow', (event) => {
|
||||
console.log(event)
|
||||
this.loading = false
|
||||
this.disabled = false
|
||||
})
|
||||
},
|
||||
created(){
|
||||
this.getCode()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
|
||||
<script src="${base!}/assets/platform/plugins/vue/vue.min.js"></script>
|
||||
<script src="${base!}/assets/platform/plugins/element-ui/lib/index.js"></script>
|
||||
|
||||
</html>
|
||||
@@ -0,0 +1,665 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app" v-cloak>
|
||||
<el-row class="header navbar bg-white shadow">
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-button size="medium" @click="openAdd">
|
||||
<i class="ti-plus"></i>
|
||||
新建菜单
|
||||
</el-button>
|
||||
</div>
|
||||
<div class="pull-right offscreen-right mt5">
|
||||
<el-button size="medium" @click="openSort">
|
||||
排序
|
||||
</el-button>
|
||||
</div>
|
||||
</el-row>
|
||||
<el-row class="el-table-container">
|
||||
<el-table :key="tableKey" :data="tableData" style="width: 100%" size="small"
|
||||
:highlight-current-row="true" row-key="id" lazy
|
||||
:load="loadChild">
|
||||
<el-table-column label="菜单名称" header-align="center" prop="name"
|
||||
width="200" :show-overflow-tooltip="true" align="left">
|
||||
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="URL" header-align="center" prop="href"
|
||||
:show-overflow-tooltip="true">
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="资源类型" header-align="center" prop="type"
|
||||
:show-overflow-tooltip="true" align="center">
|
||||
<template slot-scope="scope">
|
||||
<i v-if="scope.row.type=='menu'" style="font-weight: bold">菜单</i>
|
||||
<i v-if="scope.row.type=='data'">数据</i>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="权限标识" header-align="center" prop="permission"
|
||||
:show-overflow-tooltip="true">
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="启用状态" header-align="center" prop="disabled" align="center"
|
||||
:show-overflow-tooltip="true">
|
||||
<template slot-scope="scope">
|
||||
<i v-if="scope.row.disabled"
|
||||
class="fa fa-circle text-danger ml5"></i>
|
||||
<i v-if="!scope.row.disabled"
|
||||
class="fa fa-circle text-success ml5"></i>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="操作" header-align="center" prop="website"
|
||||
:show-overflow-tooltip="true" align="center" width="120">
|
||||
<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 v-if="scope.row.type=='menu'"
|
||||
:command="{type:'add',id:scope.row.id,name:scope.row.name}">
|
||||
添加子菜单
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item divided
|
||||
:command="{type:'enable',id:scope.row.id,name:scope.row.name,row:scope.row}">
|
||||
启用
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item
|
||||
:command="{type:'disable',id:scope.row.id,name:scope.row.name,row:scope.row}">
|
||||
禁用
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item v-if="scope.row.type=='menu'" divided
|
||||
:command="{type:'editMenu',id:scope.row.id,name:scope.row.name}">
|
||||
修改
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item v-if="scope.row.type=='data'" divided
|
||||
:command="{type:'editData',id:scope.row.id,name:scope.row.name}">
|
||||
修改
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item :command="{type:'delete',id:scope.row.id,name:scope.row.name}"
|
||||
v-if="scope.row.path!='0001'">
|
||||
删除
|
||||
</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
</el-row>
|
||||
<el-dialog
|
||||
title="新建菜单"
|
||||
:visible.sync="addDialogVisible"
|
||||
:close-on-click-modal="false"
|
||||
width="50%">
|
||||
<el-form :model="formData" ref="addForm" :rules="formRules" size="small" label-width="80px">
|
||||
<el-form-item prop="parentId" label="上级菜单" label-width="80px">
|
||||
<el-cascader v-if="!isAddFromSub" :options="menuOptions" :props="props" v-model="parentMenu" placeholder="不选择则为顶级" style="width: 100%"></el-cascader>
|
||||
<el-input v-if="isAddFromSub" type="text" v-model="formData.parentName" :disabled="true"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="name" label="菜单名称">
|
||||
<el-input maxlength="100" placeholder="菜单名称"
|
||||
v-model="formData.name"
|
||||
auto-complete="off" tabindex="3" type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="aliasName" label="菜单别名">
|
||||
<el-input maxlength="100" placeholder="菜单名称"
|
||||
v-model="formData.aliasName"
|
||||
auto-complete="off" tabindex="4" type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="permission" label="权限标识">
|
||||
<el-input maxlength="100" placeholder="权限标识,如 sys.manager.menu"
|
||||
v-model="formData.permission"
|
||||
auto-complete="off" tabindex="5" type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="href" label="URL">
|
||||
<el-input maxlength="100" placeholder="URL"
|
||||
v-model="formData.href"
|
||||
auto-complete="off" tabindex="6" type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="icon" label="图标">
|
||||
<el-input maxlength="100" placeholder="图标"
|
||||
v-model="formData.icon"
|
||||
auto-complete="off" tabindex="7" type="text"></el-input>
|
||||
<span :class="formData.icon"></span>
|
||||
</el-form-item>
|
||||
<el-form-item prop="disabled" label="启用状态">
|
||||
<el-switch
|
||||
v-model="formData.disabled"
|
||||
active-color="#ff4949"
|
||||
inactive-color="#13ce66">
|
||||
</el-switch>
|
||||
</el-form-item>
|
||||
<el-form-item prop="type" label="数据权限">
|
||||
<el-radio-group @change="formRadioChange" v-model="formData.children" size="mini">
|
||||
<el-radio label="false">无</el-radio>
|
||||
<el-radio label="true">有</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item
|
||||
v-if="formData.children=='true'"
|
||||
v-for="(menu, index) in formData.buttons"
|
||||
:label="'权限' + (index+1)"
|
||||
:key="menu.key"
|
||||
:prop="'buttons[' + index + ']'"
|
||||
:rules="{required: true,validator: validateMenu,trigger: ['blur','change']}"
|
||||
>
|
||||
<el-row :gutter="2">
|
||||
<el-col :span="6">
|
||||
<el-input v-model="menu.name" placeholder="权限名称"></el-input>
|
||||
</el-col>
|
||||
<el-col :span="13">
|
||||
<el-input v-model="menu.permission" placeholder="权限标识,如 sys.manager.menu.add"></el-input>
|
||||
</el-col>
|
||||
<el-col :span="4">
|
||||
<el-button @click.prevent="formRemoveMenu(menu)" icon="el-icon-delete" size="small"></el-button>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form-item>
|
||||
<el-row v-if="formData.children=='true'" style="text-align: right;padding-right: 17px;">
|
||||
<el-button size="small" @click="formAddMenu" icon="el-icon-circle-plus">添加</el-button>
|
||||
</el-row>
|
||||
</el-form>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="addDialogVisible = false">取 消</el-button>
|
||||
<el-button type="primary" @click="doAdd">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
<el-dialog
|
||||
title="修改菜单"
|
||||
:visible.sync="editMenuDialogVisible"
|
||||
:close-on-click-modal="false"
|
||||
width="50%">
|
||||
<el-form :model="formData" ref="editMenuForm" :rules="formRules" size="small" label-width="80px">
|
||||
<el-form-item prop="parentId" label="上级菜单" label-width="80px">
|
||||
<el-input type="text" v-model="formData.parentName" :disabled="true"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="name" label="菜单名称">
|
||||
<el-input maxlength="100" placeholder="菜单名称"
|
||||
v-model="formData.name"
|
||||
auto-complete="off" tabindex="3" type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="aliasName" label="菜单别名">
|
||||
<el-input maxlength="100" placeholder="菜单名称"
|
||||
v-model="formData.aliasName"
|
||||
auto-complete="off" tabindex="4" type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="permission" label="权限标识">
|
||||
<el-input maxlength="100" placeholder="权限标识,如 sys.manager.menu"
|
||||
v-model="formData.permission"
|
||||
auto-complete="off" tabindex="5" type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="href" label="URL">
|
||||
<el-input maxlength="100" placeholder="URL"
|
||||
v-model="formData.href"
|
||||
auto-complete="off" tabindex="6" type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="icon" label="图标">
|
||||
<el-input maxlength="100" placeholder="图标"
|
||||
v-model="formData.icon"
|
||||
auto-complete="off" tabindex="7" type="text"></el-input>
|
||||
<span :class="formData.icon"></span>
|
||||
</el-form-item>
|
||||
<el-form-item prop="disabled" label="启用状态">
|
||||
<el-switch
|
||||
v-model="formData.disabled"
|
||||
active-color="#ff4949"
|
||||
inactive-color="#13ce66">
|
||||
</el-switch>
|
||||
</el-form-item>
|
||||
<el-form-item prop="type" label="数据权限">
|
||||
<el-radio-group @change="formRadioChange" v-model="formData.children" size="mini">
|
||||
<el-radio label="false">无</el-radio>
|
||||
<el-radio label="true">有</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item
|
||||
v-if="formData.children=='true'"
|
||||
v-for="(menu, index) in formData.buttons"
|
||||
:label="'权限' + (index+1)"
|
||||
:key="menu.key"
|
||||
:prop="'buttons[' + index + ']'"
|
||||
:rules="{required: true,validator: validateMenu,trigger: ['blur','change']}"
|
||||
>
|
||||
<el-row :gutter="2">
|
||||
<el-col :span="6">
|
||||
<el-input v-model="menu.name" placeholder="权限名称"></el-input>
|
||||
</el-col>
|
||||
<el-col :span="13">
|
||||
<el-input v-model="menu.permission" placeholder="权限标识,如 sys.manager.menu.add"></el-input>
|
||||
</el-col>
|
||||
<el-col :span="4">
|
||||
<el-button @click.prevent="formRemoveMenu(menu)" icon="el-icon-delete" size="small"></el-button>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form-item>
|
||||
<el-row v-if="formData.children=='true'" style="text-align: right;padding-right: 17px;">
|
||||
<el-button size="small" @click="formAddMenu" icon="el-icon-circle-plus">添加</el-button>
|
||||
</el-row>
|
||||
</el-form>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="editMenuDialogVisible = false">取 消</el-button>
|
||||
<el-button type="primary" @click="doEditMenu">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
<el-dialog
|
||||
title="修改权限"
|
||||
:visible.sync="editDataDialogVisible"
|
||||
width="50%">
|
||||
<el-form :model="formData2" ref="editDataForm" :rules="formRules2" size="small" label-width="80px">
|
||||
<el-form-item prop="name" label="权限名称">
|
||||
<el-input maxlength="100" placeholder="权限名称"
|
||||
v-model="formData2.name"
|
||||
auto-complete="off" tabindex="1" type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="permission" label="权限标识">
|
||||
<el-input maxlength="100" placeholder="权限标识,如 sys.manager.menu.add"
|
||||
v-model="formData2.permission"
|
||||
auto-complete="off" tabindex="2" type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="disabled" label="启用状态">
|
||||
<el-switch
|
||||
v-model="formData2.disabled"
|
||||
active-color="#ff4949"
|
||||
inactive-color="#13ce66">
|
||||
</el-switch>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="editDataDialogVisible = false">取 消</el-button>
|
||||
<el-button type="primary" @click="doEditData">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
<el-dialog
|
||||
title="菜单排序"
|
||||
:visible.sync="sortDialogVisible"
|
||||
width="50%">
|
||||
<el-tree
|
||||
ref="sortMenuTree"
|
||||
:data="sortMenuData"
|
||||
draggable
|
||||
:allow-drop="sortAllowDrop"
|
||||
node-key="id"
|
||||
:props="defaultProps"
|
||||
>
|
||||
<span class="custom-tree-node" slot-scope="scope">
|
||||
<span>{{ scope.node.label }}</span>
|
||||
</span>
|
||||
</el-tree>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="sortDialogVisible = false">取 消</el-button>
|
||||
<el-button type="primary" @click="doSort">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
</div>
|
||||
<script>
|
||||
new Vue({
|
||||
el: "#app",
|
||||
data: function () {
|
||||
return {
|
||||
addDialogVisible: false,
|
||||
editMenuDialogVisible: false,
|
||||
editDataDialogVisible: false,
|
||||
sortDialogVisible: false,
|
||||
isAddFromSub: false,
|
||||
tableData: [],//后台取出的数据
|
||||
tableKey:"",
|
||||
formData: {
|
||||
id: "",
|
||||
parentId: "",
|
||||
parentName: "",
|
||||
type: "menu",
|
||||
target: "data-pjax",
|
||||
children: "false",
|
||||
buttons: []
|
||||
},
|
||||
formRules: {
|
||||
name: [
|
||||
{required: true, message: '菜单名称', trigger: 'blur'}
|
||||
],
|
||||
permission: [
|
||||
{required: true, message: '权限标识', trigger: ['blur', 'change']}
|
||||
]
|
||||
},
|
||||
formData2: {},
|
||||
formRules2: {
|
||||
name: [
|
||||
{required: true, message: '权限名称', trigger: 'blur'}
|
||||
],
|
||||
permission: [
|
||||
{required: true, message: '权限标识', trigger: ['blur', 'change']}
|
||||
]
|
||||
},
|
||||
menuOptions: [],
|
||||
parentMenu: [],
|
||||
sortMenuData: [],
|
||||
defaultProps: {
|
||||
children: 'children',
|
||||
label: 'label'
|
||||
},
|
||||
props: {
|
||||
lazy: true,
|
||||
checkStrictly:true,
|
||||
multiple:false,
|
||||
lazyLoad: function (node, resolve) {
|
||||
var url = base + "/platform/sys/menu/tree";
|
||||
$.post(url, {pid: node.value}, function (data) {
|
||||
if (data.code == 0) {
|
||||
resolve(data.data);
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
//验证动态添加行数据
|
||||
validateMenu: function (rule, value, callback) {
|
||||
if (value.name == '') {
|
||||
callback(new Error('权限名称不能为空'));
|
||||
} else if (value.permission == '') {
|
||||
callback(new Error('权限标识不能为空'));
|
||||
} else {
|
||||
callback();
|
||||
}
|
||||
},
|
||||
formRadioChange: function (val) {
|
||||
this.formData.children = val;
|
||||
if ("true" == val) {
|
||||
this.formData.buttons = [{
|
||||
name: '',
|
||||
permission: '',
|
||||
key: Date.now()
|
||||
}];
|
||||
} else {
|
||||
this.formData.buttons = [];
|
||||
}
|
||||
},
|
||||
formRemoveMenu: function (menu) {
|
||||
var index = this.formData.buttons.indexOf(menu);
|
||||
if (index !== -1) {
|
||||
this.formData.buttons.splice(index, 1);
|
||||
}
|
||||
},
|
||||
formAddMenu: function () {
|
||||
this.formData.buttons.push({
|
||||
name: '',
|
||||
permission: '',
|
||||
key: Date.now()
|
||||
});
|
||||
},
|
||||
//排序树加载
|
||||
sortMenuLoad: function () {
|
||||
var self = this;
|
||||
$.post(base + "/platform/sys/menu/menuAll", {}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.sortMenuData = data.data;
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
//排序树控制不可跨级拖拽
|
||||
sortAllowDrop: function (moveNode, inNode, type) {
|
||||
if (moveNode.data.parentId == inNode.data.parentId) {
|
||||
return type == 'prev';
|
||||
}
|
||||
},
|
||||
//打开排序功能
|
||||
openSort: function () {
|
||||
this.sortDialogVisible = true;
|
||||
this.sortMenuLoad();
|
||||
},
|
||||
//递归获取所有的ID值
|
||||
getTreeIds: function (ids, data) {
|
||||
var self = this;
|
||||
data.forEach(function (obj) {
|
||||
ids.push(obj.id);
|
||||
if (obj.children && obj.children.length > 0) {
|
||||
self.getTreeIds(ids, obj.children);
|
||||
}
|
||||
});
|
||||
},
|
||||
//提交排序后的数据
|
||||
doSort: function () {
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '正在提交...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: COVER_LAYER_COLOR
|
||||
});
|
||||
var self = this;
|
||||
var ids = [];
|
||||
self.getTreeIds(ids, self.sortMenuData);
|
||||
$.post(base + "/platform/sys/menu/sortDo", {ids: ids.toString()}, function (data) {
|
||||
if (data.code == 0) {
|
||||
loading.close();
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
self.sortDialogVisible = false;
|
||||
self.initTreeTable();
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
openAdd: function () {
|
||||
var self = this;
|
||||
self.isAddFromSub = false;
|
||||
self.addDialogVisible = true;
|
||||
self.parentMenu = [];
|
||||
self.menuOptions= [];
|
||||
//表单还原为初始值
|
||||
self.formData = {
|
||||
id: "",
|
||||
parentId: "",
|
||||
parentName: "",
|
||||
type: "menu",
|
||||
target: "data-pjax",
|
||||
children: "false",
|
||||
buttons: []
|
||||
};
|
||||
if (this.$refs["addForm"])
|
||||
this.$refs["addForm"].resetFields();
|
||||
},
|
||||
doAdd: function () {
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '正在提交...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: COVER_LAYER_COLOR
|
||||
});
|
||||
var self = this;
|
||||
var url = base + "/platform/sys/menu/addDo";
|
||||
self.$refs["addForm"].validate(function (valid) {
|
||||
if (valid) {//表单验证通过
|
||||
if (!self.isAddFromSub) {//如果不是添加子菜单,则从级联选择框取父节点ID
|
||||
self.formData.parentId = self.parentMenu[self.parentMenu.length - 1] || "";
|
||||
}
|
||||
$.post(url, {
|
||||
menu: JSON.stringify(self.formData),
|
||||
buttons: JSON.stringify(self.formData.buttons)
|
||||
}, function (data) {
|
||||
if (data.code == 0) {
|
||||
loading.close();
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
self.addDialogVisible = false;
|
||||
self.initTreeTable();
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
});
|
||||
},
|
||||
doEditMenu: function () {
|
||||
var self = this;
|
||||
var url = base + "/platform/sys/menu/editMenuDo";
|
||||
self.$refs["editMenuForm"].validate(function (valid) {
|
||||
if (valid) {//表单验证通过
|
||||
$.post(url, {
|
||||
menu: JSON.stringify(self.formData),
|
||||
buttons: JSON.stringify(self.formData.buttons)
|
||||
}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
self.editMenuDialogVisible = false;
|
||||
self.initTreeTable();
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
});
|
||||
},
|
||||
doEditData: function () {
|
||||
var self = this;
|
||||
var url = base + "/platform/sys/menu/editDataDo";
|
||||
self.$refs["editDataForm"].validate(function (valid) {
|
||||
if (valid) {//表单验证通过
|
||||
$.post(url, self.formData2, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
self.editDataDialogVisible = false;
|
||||
self.initTreeTable();
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
});
|
||||
},
|
||||
initTreeTable: function () {
|
||||
var self = this;
|
||||
var url = base + "/platform/sys/menu/child";
|
||||
$.post(url, {pid: ""}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.tableData = data.data;
|
||||
self.tableKey=+new Date();
|
||||
}
|
||||
}, "json");
|
||||
|
||||
},
|
||||
loadChild: function (tree, treeNode, resolve) {
|
||||
var url = base + "/platform/sys/menu/child";
|
||||
$.post(url, {pid: tree.id}, function (data) {
|
||||
if (data.code == 0) {
|
||||
resolve(data.data);
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
dropdownCommand: function (command) {//监听下拉框事件
|
||||
var self = this;
|
||||
if ("add" == command.type) {
|
||||
self.openAdd();
|
||||
self.formData.parentId = command.id;
|
||||
self.formData.parentName = command.name;
|
||||
self.isAddFromSub = true;
|
||||
}
|
||||
if ("editMenu" == command.type) {
|
||||
$.post(base + "/platform/sys/menu/editMenu/" + command.id, {}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.formData = data.data;//加载后台表单数据
|
||||
self.editMenuDialogVisible = true;//打开编辑窗口
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
if ("editData" == command.type) {
|
||||
$.post(base + "/platform/sys/menu/editData/" + command.id, {}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.formData2 = data.data;//加载后台表单数据
|
||||
self.editDataDialogVisible = true;//打开编辑窗口
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
if ("enable" == command.type || "disable" == command.type) {
|
||||
$.post(base + "/platform/sys/menu/" + command.type + "/" + command.id, {}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
if ("disable" == command.type) {
|
||||
command.row.disabled = true;
|
||||
}
|
||||
if ("enable" == command.type) {
|
||||
command.row.disabled = false;
|
||||
}
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
if ("delete" == command.type) {
|
||||
self.$confirm('此操作将删除 ' + command.name, '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
callback: function (a, b) {
|
||||
if ("confirm" == a) {//确认后再执行
|
||||
$.post(base + "/platform/sys/menu/delete/" + command.id, {}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
self.initTreeTable();
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
},
|
||||
created: function () {
|
||||
this.initTreeTable();
|
||||
}
|
||||
});
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,634 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.el-msg-active {
|
||||
background-color: #546478;
|
||||
color: #ffffff;
|
||||
}
|
||||
|
||||
.note {
|
||||
width: 100%;
|
||||
height: 320px;
|
||||
}
|
||||
</style>
|
||||
<link href="${base!}/assets/platform/plugins/umeditor/themes/default/css/umeditor.min.css" type="text/css"
|
||||
rel="stylesheet">
|
||||
<script src="${base!}/assets/platform/plugins/umeditor/umeditor.config.js"></script>
|
||||
<script src="${base!}/assets/platform/plugins/umeditor/umeditor.js"></script>
|
||||
<div id="app" v-cloak>
|
||||
<el-row class="header navbar shadow">
|
||||
<div class="btn-group tool-button mt5">
|
||||
<a href="${base}/platform/sys/msg" data-pjax class="el-button el-button--default el-button--medium"
|
||||
:class="{'el-msg-active':'all'==pageForm.searchType}">
|
||||
全部类型消息
|
||||
</a>
|
||||
</div>
|
||||
<div class="btn-group tool-button mt5">
|
||||
<a href="${base}/platform/sys/msg/list/system" data-pjax
|
||||
class="el-button el-button--default el-button--medium"
|
||||
:class="{'el-msg-active':'system'==pageForm.searchType}">
|
||||
系统消息
|
||||
</a>
|
||||
</div>
|
||||
<div class="btn-group tool-button mt5">
|
||||
<a href="${base}/platform/sys/msg/list/user" data-pjax
|
||||
class="el-button el-button--default el-button--medium"
|
||||
:class="{'el-msg-active':'user'==pageForm.searchType}">
|
||||
用户消息
|
||||
</a>
|
||||
</div>
|
||||
<div class="pull-right offscreen-right mt5">
|
||||
<el-button size="medium" @click="openAdd"><i class="ti-plus"></i> 发送消息</el-button>
|
||||
</div>
|
||||
</el-row>
|
||||
<el-row class="el-table-container">
|
||||
<el-table
|
||||
:data="tableData"
|
||||
@sort-change='pageOrder'
|
||||
size="small"
|
||||
header-align="center"
|
||||
style="width: 100%"
|
||||
:default-sort="{prop: 'opAt', order: 'descending'}"
|
||||
>
|
||||
<el-table-column type="expand">
|
||||
<template slot-scope="scope">
|
||||
<el-form label-position="left" inline class="el-table-expand-line" size="mini">
|
||||
<el-form-item label="标题">
|
||||
<span>{{ scope.row.title }}</span>
|
||||
</el-form-item>
|
||||
<el-form-item label="链接">
|
||||
<span>{{ scope.row.url }}</span>
|
||||
</el-form-item>
|
||||
<el-form-item label="内容" :show-overflow-tooltip="true">
|
||||
<span v-html="scope.row.note"></span>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
sortable
|
||||
prop="type"
|
||||
label="消息类型"
|
||||
header-align="center" align="center">
|
||||
<template slot-scope="scope">
|
||||
<span v-if="'system'==scope.row.type">系统消息</span>
|
||||
<span v-if="'user'==scope.row.type">用户消息</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="title"
|
||||
label="标题"
|
||||
header-align="center"
|
||||
:show-overflow-tooltip="true">
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="all_num"
|
||||
label="总接收用户"
|
||||
header-align="center" align="center">
|
||||
<template slot-scope="scope">
|
||||
<el-button size="small" @click="viewUserList('all',scope.row.id)">{{scope.row.all_num}}</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="unread_num"
|
||||
label="未读用户"
|
||||
header-align="center" align="center">
|
||||
<template slot-scope="scope">
|
||||
<el-button size="small" @click="viewUserList('unread',scope.row.id)">{{scope.row.unread_num}}
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
sortable
|
||||
prop="opAt"
|
||||
label="发送时间"
|
||||
header-align="center">
|
||||
<template slot-scope="scope">
|
||||
{{formatAt(scope.row.opAt)}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
sortable
|
||||
prop="delFlag"
|
||||
label="消息状态"
|
||||
header-align="center" align="center">
|
||||
<template slot-scope="scope">
|
||||
<el-alert
|
||||
v-if="scope.row.delFlag"
|
||||
title="已删除"
|
||||
:closable="false"
|
||||
:center="true"
|
||||
style="width: 90px;"
|
||||
type="error">
|
||||
</el-alert>
|
||||
<el-alert
|
||||
v-if="!scope.row.delFlag"
|
||||
title="已发送"
|
||||
:closable="false"
|
||||
:center="true"
|
||||
style="width: 90px;"
|
||||
type="success">
|
||||
</el-alert>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="操作"
|
||||
width="120">
|
||||
<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:'delete',id:scope.row.id,name:scope.row.title}">
|
||||
删除
|
||||
</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</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, jumper"
|
||||
:total="pageForm.totalCount">
|
||||
</el-pagination>
|
||||
</el-row>
|
||||
|
||||
<el-dialog
|
||||
:title="viewUserTitle"
|
||||
:visible.sync="viewDialogVisible"
|
||||
width="65%">
|
||||
<el-table
|
||||
:data="viewTableData"
|
||||
@sort-change='viewPageOrder'
|
||||
header-align="center"
|
||||
style="width: 100%;margin-top: 10px;margin-bottom: 10px;"
|
||||
:default-sort="{prop: 'opAt', order: 'descending'}"
|
||||
size="small"
|
||||
>
|
||||
<el-table-column
|
||||
fixed
|
||||
prop="loginname"
|
||||
label="用户名"
|
||||
width="150">
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="username"
|
||||
label="姓名"
|
||||
width="120">
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="mobile"
|
||||
label="手机">
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="email"
|
||||
label="邮箱">
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="unitname"
|
||||
label="所属单位">
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<el-pagination
|
||||
@size-change="viewPageSizeChange"
|
||||
@current-change="viewPageNumberChange"
|
||||
:current-page="viewPageForm.pageNumber"
|
||||
:page-sizes="[10, 20, 30, 50]"
|
||||
:page-size="viewPageForm.pageSize"
|
||||
layout="total, sizes, prev, pager, next, jumper"
|
||||
:total="viewPageForm.totalCount">
|
||||
</el-pagination>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="viewDialogVisible = false"> 关 闭 </el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog
|
||||
title="选择用户"
|
||||
:visible.sync="selectDialogVisible"
|
||||
width="65%">
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-input placeholder="请输入内容" v-model="selectPageForm.searchKeyword" @keyup.enter.native="doSearch">
|
||||
<el-select v-model="selectPageForm.searchName" slot="prepend" placeholder="查询类型" style="width: 120px;">
|
||||
<el-option label="用户名" value="loginname"></el-option>
|
||||
<el-option label="姓名" value="username"></el-option>
|
||||
<el-option label="手机" value="mobile"></el-option>
|
||||
<el-option label="邮箱" value="email"></el-option>
|
||||
</el-select>
|
||||
<el-button slot="append" icon="el-icon-search" @click="doSelectSearch"></el-button>
|
||||
|
||||
</el-input>
|
||||
</div>
|
||||
<el-table
|
||||
:data="selectTableData"
|
||||
@sort-change='selectPageOrder'
|
||||
header-align="center"
|
||||
style="width: 100%;margin-top: 10px;margin-bottom: 10px;"
|
||||
:default-sort="{prop: 'opAt', order: 'descending'}"
|
||||
@selection-change="handleSelectionChange"
|
||||
size="mini"
|
||||
>
|
||||
<el-table-column
|
||||
type="selection"
|
||||
width="35">
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
fixed
|
||||
prop="loginname"
|
||||
label="用户名"
|
||||
width="150">
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="username"
|
||||
label="姓名"
|
||||
width="120">
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="mobile"
|
||||
label="手机"
|
||||
width="120">
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="email"
|
||||
label="邮箱"
|
||||
width="120">
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="unit"
|
||||
label="所属单位">
|
||||
<template slot-scope="scope">
|
||||
<span v-if="scope.row.unit!=null">
|
||||
{{scope.row.unit.name}}
|
||||
</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<el-pagination
|
||||
@size-change="selectPageSizeChange"
|
||||
@current-change="selectPageNumberChange"
|
||||
:current-page="selectPageForm.pageNumber"
|
||||
:page-sizes="[10, 20, 30, 50]"
|
||||
:page-size="selectPageForm.pageSize"
|
||||
layout="total, sizes, prev, pager, next, jumper"
|
||||
:total="selectPageForm.totalCount">
|
||||
</el-pagination>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="selectDialogVisible = false"> 取 消 </el-button>
|
||||
<el-button type="primary" @click="doSelect"> 确 定 </el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog
|
||||
title="发送消息"
|
||||
:visible.sync="addDialogVisible"
|
||||
width="60%">
|
||||
<el-form :model="formData" ref="addForm" :rules="formRules" size="small" label-width="80px">
|
||||
<el-form-item prop="title" label="标题">
|
||||
<el-input maxlength="255" placeholder="标题"
|
||||
v-model="formData.title"
|
||||
auto-complete="off" tabindex="1" type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="url" label="链接地址">
|
||||
<el-input placeholder="链接地址"
|
||||
v-model="formData.url"
|
||||
auto-complete="off" tabindex="2" type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="type" label="消息类型">
|
||||
<el-radio-group v-model="formData.type">
|
||||
<el-radio label="system">系统消息</el-radio>
|
||||
<el-radio label="user">用户消息</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="用户列表" v-if="'user'==formData.type">
|
||||
<el-row>
|
||||
<el-button icon="el-icon-search" @click="openSelect">选择用户</el-button>
|
||||
<el-button icon="el-icon-delete" @click="clearSelect" type="danger">清空用户</el-button>
|
||||
|
||||
</el-row>
|
||||
<el-table
|
||||
:data="userTableData"
|
||||
style="width: 100%"
|
||||
size="small"
|
||||
height="200">
|
||||
<el-table-column
|
||||
fixed
|
||||
prop="loginname"
|
||||
label="用户名"
|
||||
width="150">
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="username"
|
||||
label="姓名"
|
||||
width="120">
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="mobile"
|
||||
label="手机号"
|
||||
width="120">
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="unit"
|
||||
label="所属单位">
|
||||
<template slot-scope="scope">
|
||||
<span v-if="scope.row.unit!=null">
|
||||
{{scope.row.unit.name}}
|
||||
</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-form-item>
|
||||
<el-form-item prop="note" label="消息内容">
|
||||
<!---->
|
||||
<script type="text/plain" id="note" class="note"></script>
|
||||
<!---->
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="addDialogVisible = false"> 取 消 </el-button>
|
||||
<el-button type="primary" @click="doAdd"> 确 定 </el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
</div>
|
||||
<script>
|
||||
var wo_shi_zhan_wei_fu;
|
||||
new Vue({
|
||||
el: "#app",
|
||||
data: function () {
|
||||
return {
|
||||
addDialogVisible: false,
|
||||
editDialogVisible: false,
|
||||
selectDialogVisible: false,
|
||||
viewDialogVisible: false,
|
||||
tableData: [],
|
||||
pageForm: {
|
||||
searchType: "${type!}",
|
||||
pageNumber: 1,
|
||||
pageSize: 10,
|
||||
totalCount: 0,
|
||||
pageOrderName: "opAt",
|
||||
pageOrderBy: "descending"
|
||||
},
|
||||
formData: {
|
||||
id: "",
|
||||
type: "system"
|
||||
},
|
||||
formRules: {
|
||||
title: [
|
||||
{required: true, message: '标题', trigger: 'blur'}
|
||||
],
|
||||
},
|
||||
selectPageForm: {
|
||||
searchName: "",
|
||||
searchKeyword: "",
|
||||
pageNumber: 1,
|
||||
pageSize: 10,
|
||||
totalCount: 0,
|
||||
pageOrderName: "loginname",
|
||||
pageOrderBy: "ascending"
|
||||
},
|
||||
selectTableData: [
|
||||
{loginname: 'xxx', realname: "xx", unitname: "ccccccc"}
|
||||
],
|
||||
userTableData: [],
|
||||
selectUsers: [],
|
||||
viewTableData: [],
|
||||
viewUserTitle: "",
|
||||
viewPageForm: {
|
||||
pageNumber: 1,
|
||||
pageSize: 10,
|
||||
totalCount: 0,
|
||||
pageOrderName: "loginname",
|
||||
pageOrderBy: "descending",
|
||||
type: "",
|
||||
id: ""
|
||||
},
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
pageOrder: function (column) {//按字段排序
|
||||
this.pageForm.pageOrderName = column.prop;
|
||||
this.pageForm.pageOrderBy = column.order;
|
||||
this.pageData();
|
||||
},
|
||||
pageNumberChange: function (val) {//页码更新操作
|
||||
this.pageForm.pageNumber = val;
|
||||
this.pageData();
|
||||
},
|
||||
pageSizeChange: function (val) {//分页大小更新操作
|
||||
this.pageForm.pageSize = val;
|
||||
this.pageData();
|
||||
},
|
||||
pageData: function () {//加载分页数据
|
||||
var self = this;
|
||||
sublime.showLoadingbar();//显示loading
|
||||
$.post(base + "/platform/sys/msg/data", self.pageForm, function (data) {
|
||||
sublime.closeLoadingbar();//关闭loading
|
||||
if (data.code == 0) {
|
||||
self.tableData = data.data.list;
|
||||
self.pageForm.totalCount = data.data.totalCount;
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
selectPageOrder: function (column) {//按字段排序
|
||||
this.selectPageForm.pageOrderName = column.prop;
|
||||
this.selectPageForm.pageOrderBy = column.order;
|
||||
this.selectPageData();
|
||||
},
|
||||
selectPageNumberChange: function (val) {//页码更新操作
|
||||
this.selectPageForm.pageNumber = val;
|
||||
this.selectPageData();
|
||||
},
|
||||
selectPageSizeChange: function (val) {//分页大小更新操作
|
||||
this.selectPageForm.pageSize = val;
|
||||
this.selectPageData();
|
||||
},
|
||||
doSelectSearch: function () {
|
||||
this.selectPageForm.pageNumber = 1;
|
||||
this.selectPageData();
|
||||
},
|
||||
selectPageData: function () {//加载分页数据
|
||||
var self = this;
|
||||
$.post(base + "/platform/sys/msg/user_data", self.selectPageForm, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.selectTableData = data.data.list;
|
||||
self.selectPageForm.totalCount = data.data.totalCount;
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
handleSelectionChange: function (val) {
|
||||
this.selectUsers = val;
|
||||
},
|
||||
formatAt: function (val) {
|
||||
if (val && val > 0)
|
||||
return moment(val * 1000).format("YYYY-MM-DD HH:mm");
|
||||
return "";
|
||||
},
|
||||
doSearch: function (val) {
|
||||
this.pageForm.pageNumber = 1;
|
||||
this.pageData();
|
||||
},
|
||||
openSelect: function () {
|
||||
this.selectDialogVisible = true;
|
||||
this.selectPageData();
|
||||
},
|
||||
clearSelect: function () {
|
||||
this.userTableData = [];
|
||||
},
|
||||
doSelect: function () {
|
||||
var self = this;
|
||||
this.selectDialogVisible = false;
|
||||
this.selectUsers.forEach(function (o) {
|
||||
self.userTableData.push(o);
|
||||
});
|
||||
},
|
||||
openAdd: function () {
|
||||
var self = this;
|
||||
this.addDialogVisible = true;
|
||||
this.formData = {
|
||||
id: "", type: "system"
|
||||
};//打开新增窗口,表单先清空
|
||||
if (this.$refs["addForm"])
|
||||
this.$refs["addForm"].resetFields();
|
||||
UM.getEditor("note");
|
||||
setTimeout(function () {
|
||||
UM.getEditor("note").setContent("",false);
|
||||
},200);
|
||||
},
|
||||
doAdd: function () {
|
||||
var self = this;
|
||||
self.$refs["addForm"].validate(function (valid) {
|
||||
if (valid) {
|
||||
var users = [];
|
||||
if (self.selectUsers) {
|
||||
self.selectUsers.forEach(function (o) {
|
||||
users.push(o.loginname);
|
||||
});
|
||||
}
|
||||
if (self.formData.type == 'user' && users.length == 0) {
|
||||
self.$message({
|
||||
message: "请选择用户",
|
||||
type: 'error'
|
||||
});
|
||||
return false;
|
||||
}
|
||||
$.post(base + "/platform/sys/msg/addDo", {
|
||||
note: UM.getEditor("note").getContent(),
|
||||
msg: JSON.stringify(self.formData),
|
||||
users: users.toString()
|
||||
}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
self.addDialogVisible = false;
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
self.pageData();//添加失败也可以入库,所以加载一下看看
|
||||
}, "json");
|
||||
}
|
||||
});
|
||||
},
|
||||
viewPageOrder: function (column) {//按字段排序
|
||||
this.viewPageForm.pageOrderName = column.prop;
|
||||
this.viewPageForm.pageOrderBy = column.order;
|
||||
this.viewPageLoad();
|
||||
},
|
||||
viewPageNumberChange: function (val) {//页码更新操作
|
||||
this.viewPageForm.pageNumber = val;
|
||||
this.viewPageLoad();
|
||||
},
|
||||
viewPageSizeChange: function (val) {//分页大小更新操作
|
||||
this.viewPageForm.pageSize = val;
|
||||
this.viewPageLoad();
|
||||
},
|
||||
viewPageLoad: function () {//加载分页数据
|
||||
var self = this;
|
||||
$.post(base + "/platform/sys/msg/user_view_data", self.viewPageForm, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.viewTableData = data.data.list;
|
||||
self.viewPageForm.totalCount = data.data.totalCount;
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
viewUserList: function (type, id) {
|
||||
var self = this;
|
||||
if ("all" == type) {
|
||||
self.viewUserTitle = "全部用户";
|
||||
}
|
||||
if ("unread" == type) {
|
||||
self.viewUserTitle = "未读用户";
|
||||
}
|
||||
self.viewDialogVisible = true;
|
||||
self.viewPageForm.type = type;
|
||||
self.viewPageForm.id = id;
|
||||
self.viewPageLoad();
|
||||
},
|
||||
dropdownCommand: function (command) {//监听下拉框事件
|
||||
var self = this;
|
||||
if ("delete" == command.type) {
|
||||
self.$confirm('此操作将删除 ' + command.name, '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
callback: function (a, b) {
|
||||
if ("confirm" == a) {//确认后再执行
|
||||
$.post(base + "/platform/sys/msg/delete/" + command.id, {}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
self.doSearch();
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
created: function () {
|
||||
this.pageData();
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,37 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<header class="header navbar bg-white shadow">
|
||||
<div class="btn-group tool-button m5">
|
||||
<a class="el-button el-button--default el-button--medium" href="${base}/platform/sys/msg/user/all" data-pjax><i
|
||||
class="ti-angle-left"></i>返回</a>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<div class="content-wrap">
|
||||
<div class="wrapper" style="min-height:500px;">
|
||||
<section class="panel">
|
||||
<div class="row mb10">
|
||||
<div class="col-lg-12">
|
||||
<!--#if(!isEmpty(obj)){#-->
|
||||
<div style="text-align:center">
|
||||
<h4>${obj.title!}</h4>
|
||||
</div>
|
||||
<div style="text-align:center;font-size: 14px;line-height: 24px;">
|
||||
${@date.getDate(obj.sendAt)}
|
||||
</div>
|
||||
<div style="margin-top: 16px !important;border-bottom: 1px solid #DDD;"></div>
|
||||
<div style="margin-top: 16px !important;">
|
||||
${obj.note!}
|
||||
</div>
|
||||
<!--#}else{#-->
|
||||
消息不存在,或您没有阅读权限!
|
||||
<!--#}#-->
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,37 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<header class="header navbar bg-white shadow">
|
||||
<div class="btn-group tool-button m5">
|
||||
<a class="el-button el-button--default el-button--medium" href="${base}/platform/sys/msg/user/read" data-pjax><i
|
||||
class="ti-angle-left"></i>返回</a>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<div class="content-wrap">
|
||||
<div class="wrapper" style="min-height:500px;">
|
||||
<section class="panel">
|
||||
<div class="row mb10">
|
||||
<div class="col-lg-12">
|
||||
<!--#if(!isEmpty(obj)){#-->
|
||||
<div style="text-align:center">
|
||||
<h4>${obj.title!}</h4>
|
||||
</div>
|
||||
<div style="text-align:center;font-size: 14px;line-height: 24px;">
|
||||
${@date.getDate(obj.sendAt)}
|
||||
</div>
|
||||
<div style="margin-top: 16px !important;border-bottom: 1px solid #DDD;"></div>
|
||||
<div style="margin-top: 16px !important;">
|
||||
${obj.note!}
|
||||
</div>
|
||||
<!--#}else{#-->
|
||||
消息不存在,或您没有阅读权限!
|
||||
<!--#}#-->
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,37 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<header class="header navbar bg-white shadow">
|
||||
<div class="btn-group tool-button m5">
|
||||
<a class="el-button el-button--default el-button--medium" href="${base}/platform/sys/msg/user/unread" data-pjax><i
|
||||
class="ti-angle-left"></i>返回</a>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<div class="content-wrap">
|
||||
<div class="wrapper" style="min-height:500px;">
|
||||
<section class="panel">
|
||||
<div class="row mb10">
|
||||
<div class="col-lg-12">
|
||||
<!--#if(!isEmpty(obj)){#-->
|
||||
<div style="text-align:center">
|
||||
<h4>${obj.title!}</h4>
|
||||
</div>
|
||||
<div style="text-align:center;font-size: 14px;line-height: 24px;">
|
||||
${@date.getDate(obj.sendAt)}
|
||||
</div>
|
||||
<div style="margin-top: 16px !important;border-bottom: 1px solid #DDD;"></div>
|
||||
<div style="margin-top: 16px !important;">
|
||||
${obj.note!}
|
||||
</div>
|
||||
<!--#}else{#-->
|
||||
消息不存在,或您没有阅读权限!
|
||||
<!--#}#-->
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,288 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.el-msg-active {
|
||||
background-color: #546478;
|
||||
color: #ffffff;
|
||||
}
|
||||
</style>
|
||||
<div id="app" v-cloak>
|
||||
<el-row class="header navbar shadow">
|
||||
<div class="btn-group tool-button mt5">
|
||||
<a href="${base}/platform/sys/msg/user/all" data-pjax class="el-button el-button--default el-button--medium"
|
||||
:class="{'el-msg-active':'all'==pageForm.searchType}">
|
||||
全部类型消息
|
||||
</a>
|
||||
</div>
|
||||
<div class="btn-group tool-button mt5">
|
||||
<a href="${base}/platform/sys/msg/user/all/system" data-pjax
|
||||
class="el-button el-button--default el-button--medium"
|
||||
:class="{'el-msg-active':'system'==pageForm.searchType}">
|
||||
系统消息<span v-if="unreadnum.system>0">({{unreadnum.system}})</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="btn-group tool-button mt5">
|
||||
<a href="${base}/platform/sys/msg/user/all/user" data-pjax
|
||||
class="el-button el-button--default el-button--medium"
|
||||
:class="{'el-msg-active':'user'==pageForm.searchType}">
|
||||
用户消息<span v-if="unreadnum.user>0">({{unreadnum.user}})</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="pull-right offscreen-right mt5">
|
||||
<el-button size="medium" @click="readMore" :disabled="selectData.length==0">标记已读</el-button>
|
||||
<el-button size="medium" @click="readAll" :disabled="tableData.length==0">全部已读</el-button>
|
||||
<el-button size="medium" @click="delMore" type="danger" :disabled="selectData.length==0"><i class="el-icon-delete"></i>删除</el-button>
|
||||
</div>
|
||||
</el-row>
|
||||
<el-row class="el-table-container">
|
||||
<el-table
|
||||
:data="tableData"
|
||||
@sort-change='pageOrder'
|
||||
size="small"
|
||||
header-align="center"
|
||||
style="width: 100%"
|
||||
@selection-change="handleSelectionChange"
|
||||
>
|
||||
<el-table-column
|
||||
type="selection"
|
||||
width="35">
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="status"
|
||||
width="45">
|
||||
<template slot-scope="scope">
|
||||
<span v-if="0==scope.row.status"><i class="fa fa-circle text-info ml5"></i></span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="type"
|
||||
label="消息类型"
|
||||
header-align="center" align="center" width="120">
|
||||
<template slot-scope="scope">
|
||||
<span v-if="'system'==scope.row.type">系统消息</span>
|
||||
<span v-if="'user'==scope.row.type">用户消息</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="title"
|
||||
label="标题"
|
||||
header-align="center"
|
||||
:show-overflow-tooltip="true">
|
||||
<template slot-scope="scope">
|
||||
<a :href="'${base}/platform/sys/msg/user/all/detail/'+scope.row.msgid" data-pjax>{{scope.row.title}}</a>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column
|
||||
prop="opat"
|
||||
label="接收时间"
|
||||
header-align="center" align="center">
|
||||
<template slot-scope="scope">
|
||||
{{formatAt(scope.row.opat)}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-row>
|
||||
|
||||
<el-row class="el-pagination-container">
|
||||
<el-pagination
|
||||
style="float: left"
|
||||
@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, jumper"
|
||||
:total="pageForm.totalCount">
|
||||
</el-pagination>
|
||||
</el-row>
|
||||
</div>
|
||||
<script>
|
||||
new Vue({
|
||||
el: "#app",
|
||||
data: function () {
|
||||
return {
|
||||
addDialogVisible: false,
|
||||
editDialogVisible: false,
|
||||
selectDialogVisible: false,
|
||||
viewDialogVisible: false,
|
||||
tableData: [],
|
||||
pageForm: {
|
||||
searchType: "${type!}",
|
||||
pageNumber: 1,
|
||||
pageSize: 10,
|
||||
totalCount: 0,
|
||||
pageOrderName: "opAt",
|
||||
pageOrderBy: "descending"
|
||||
},
|
||||
formData: {
|
||||
id: "",
|
||||
type: "system"
|
||||
},
|
||||
selectData: [],
|
||||
unreadnum: {
|
||||
system: 0,
|
||||
user: 0
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
pageOrder: function (column) {//按字段排序
|
||||
this.pageForm.pageOrderName = column.prop;
|
||||
this.pageForm.pageOrderBy = column.order;
|
||||
this.pageData();
|
||||
},
|
||||
pageNumberChange: function (val) {//页码更新操作
|
||||
this.pageForm.pageNumber = val;
|
||||
this.pageData();
|
||||
},
|
||||
pageSizeChange: function (val) {//分页大小更新操作
|
||||
this.pageForm.pageSize = val;
|
||||
this.pageData();
|
||||
},
|
||||
pageData: function () {//加载分页数据
|
||||
var self = this;
|
||||
sublime.showLoadingbar();//显示loading
|
||||
$.post(base + "/platform/sys/msg/user/data/all", self.pageForm, function (data) {
|
||||
sublime.closeLoadingbar();//关闭loading
|
||||
if (data.code == 0) {
|
||||
self.tableData = data.data.list;
|
||||
self.pageForm.totalCount = data.data.totalCount;
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
formatAt: function (val) {
|
||||
if (val && val > 0)
|
||||
return moment(val * 1000).format("YYYY-MM-DD HH:mm");
|
||||
return "";
|
||||
},
|
||||
handleSelectionChange: function (val) {
|
||||
this.selectData = val;
|
||||
},
|
||||
unreadData: function () {//加载分页数据
|
||||
var self = this;
|
||||
$.post(base + "/platform/sys/msg/user/unread_num", {}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.unreadnum = data.data;
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
readMore: function () {
|
||||
var self = this;
|
||||
if (self.selectData.length == 0) {
|
||||
self.$message({
|
||||
message: "请选择消息",
|
||||
type: 'warning'
|
||||
});
|
||||
return false;
|
||||
}
|
||||
var ids = [];
|
||||
self.selectData.forEach(function (val) {
|
||||
ids.push(val.id);
|
||||
});
|
||||
self.$confirm('您确定要标记选中的 '+ids.length+' 条消息为已读吗? ', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
callback: function (a, b) {
|
||||
if ("confirm" == a) {//确认后再执行
|
||||
$.post(base + "/platform/sys/msg/user/status/read", {ids: ids.toString()}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
self.pageData();
|
||||
self.unreadData();
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
readAll: function () {
|
||||
var self = this;
|
||||
self.$confirm('您确定要标记全部消息为已读吗? ', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
callback: function (a, b) {
|
||||
if ("confirm" == a) {//确认后再执行
|
||||
$.post(base + "/platform/sys/msg/user/status/readAll", {}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
self.pageData();
|
||||
self.unreadData();
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
delMore: function () {
|
||||
var self = this;
|
||||
if (self.selectData.length == 0) {
|
||||
self.$message({
|
||||
message: "请选择消息",
|
||||
type: 'warning'
|
||||
});
|
||||
return false;
|
||||
}
|
||||
var ids = [];
|
||||
self.selectData.forEach(function (val) {
|
||||
ids.push(val.id);
|
||||
});
|
||||
self.$confirm('您确定要删除选中的 '+ids.length+' 条消息? ', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
callback: function (a, b) {
|
||||
if ("confirm" == a) {//确认后再执行
|
||||
$.post(base + "/platform/sys/msg/user/delete", {ids: ids.toString()}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
self.pageData();
|
||||
self.unreadData();
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
created: function () {
|
||||
this.pageData();
|
||||
this.unreadData();
|
||||
}
|
||||
});
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,211 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.el-msg-active {
|
||||
background-color: #546478;
|
||||
color: #ffffff;
|
||||
}
|
||||
</style>
|
||||
<div id="app" v-cloak>
|
||||
<el-row class="header navbar shadow">
|
||||
<div class="btn-group tool-button mt5">
|
||||
<a href="${base}/platform/sys/msg/user/read" data-pjax class="el-button el-button--default el-button--medium"
|
||||
:class="{'el-msg-active':'all'==pageForm.searchType}">
|
||||
全部类型消息
|
||||
</a>
|
||||
</div>
|
||||
<div class="btn-group tool-button mt5">
|
||||
<a href="${base}/platform/sys/msg/user/read/system" data-pjax
|
||||
class="el-button el-button--default el-button--medium"
|
||||
:class="{'el-msg-active':'system'==pageForm.searchType}">
|
||||
系统消息<span v-if="unreadnum.system>0">({{unreadnum.system}})</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="btn-group tool-button mt5">
|
||||
<a href="${base}/platform/sys/msg/user/read/user" data-pjax
|
||||
class="el-button el-button--default el-button--medium"
|
||||
:class="{'el-msg-active':'user'==pageForm.searchType}">
|
||||
用户消息<span v-if="unreadnum.user>0">({{unreadnum.user}})</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="pull-right offscreen-right mt5">
|
||||
<el-button size="medium" @click="delMore" type="danger" :disabled="selectData.length==0"><i class="el-icon-delete"></i>删除</el-button>
|
||||
</div>
|
||||
</el-row>
|
||||
<el-row class="el-table-container">
|
||||
<el-table
|
||||
:data="tableData"
|
||||
@sort-change='pageOrder'
|
||||
size="small"
|
||||
header-align="center"
|
||||
style="width: 100%"
|
||||
@selection-change="handleSelectionChange"
|
||||
>
|
||||
<el-table-column
|
||||
type="selection"
|
||||
width="35">
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="status"
|
||||
width="45">
|
||||
<template slot-scope="scope">
|
||||
<span v-if="0==scope.row.status"><i class="fa fa-circle text-info ml5"></i></span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="type"
|
||||
label="消息类型"
|
||||
header-align="center" align="center" width="120">
|
||||
<template slot-scope="scope">
|
||||
<span v-if="'system'==scope.row.type">系统消息</span>
|
||||
<span v-if="'user'==scope.row.type">用户消息</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="title"
|
||||
label="标题"
|
||||
header-align="center"
|
||||
:show-overflow-tooltip="true">
|
||||
<template slot-scope="scope">
|
||||
<a :href="'${base}/platform/sys/msg/user/read/detail/'+scope.row.msgid" data-pjax>{{scope.row.title}}</a>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column
|
||||
prop="opat"
|
||||
label="接收时间"
|
||||
header-align="center" align="center">
|
||||
<template slot-scope="scope">
|
||||
{{formatAt(scope.row.opat)}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-row>
|
||||
|
||||
<el-row class="el-pagination-container">
|
||||
<el-pagination
|
||||
style="float: left"
|
||||
@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, jumper"
|
||||
:total="pageForm.totalCount">
|
||||
</el-pagination>
|
||||
</el-row>
|
||||
</div>
|
||||
<script>
|
||||
new Vue({
|
||||
el: "#app",
|
||||
data: function () {
|
||||
return {
|
||||
addDialogVisible: false,
|
||||
editDialogVisible: false,
|
||||
selectDialogVisible: false,
|
||||
viewDialogVisible: false,
|
||||
tableData: [],
|
||||
pageForm: {
|
||||
searchType: "${type!}",
|
||||
pageNumber: 1,
|
||||
pageSize: 10,
|
||||
totalCount: 0,
|
||||
pageOrderName: "opAt",
|
||||
pageOrderBy: "descending"
|
||||
},
|
||||
formData: {
|
||||
id: "",
|
||||
type: "system"
|
||||
},
|
||||
selectData: [],
|
||||
unreadnum: {
|
||||
system: 0,
|
||||
user: 0
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
pageOrder: function (column) {//按字段排序
|
||||
this.pageForm.pageOrderName = column.prop;
|
||||
this.pageForm.pageOrderBy = column.order;
|
||||
this.pageData();
|
||||
},
|
||||
pageNumberChange: function (val) {//页码更新操作
|
||||
this.pageForm.pageNumber = val;
|
||||
this.pageData();
|
||||
},
|
||||
pageSizeChange: function (val) {//分页大小更新操作
|
||||
this.pageForm.pageSize = val;
|
||||
this.pageData();
|
||||
},
|
||||
pageData: function () {//加载分页数据
|
||||
var self = this;
|
||||
sublime.showLoadingbar();//显示loading
|
||||
$.post(base + "/platform/sys/msg/user/data/read", self.pageForm, function (data) {
|
||||
sublime.closeLoadingbar();//关闭loading
|
||||
if (data.code == 0) {
|
||||
self.tableData = data.data.list;
|
||||
self.pageForm.totalCount = data.data.totalCount;
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
formatAt: function (val) {
|
||||
if (val && val > 0)
|
||||
return moment(val * 1000).format("YYYY-MM-DD HH:mm");
|
||||
return "";
|
||||
},
|
||||
handleSelectionChange: function (val) {
|
||||
this.selectData = val;
|
||||
},
|
||||
delMore: function () {
|
||||
var self = this;
|
||||
if (self.selectData.length == 0) {
|
||||
self.$message({
|
||||
message: "请选择消息",
|
||||
type: 'warning'
|
||||
});
|
||||
return false;
|
||||
}
|
||||
var ids = [];
|
||||
self.selectData.forEach(function (val) {
|
||||
ids.push(val.id);
|
||||
});
|
||||
self.$confirm('您确定要删除选中的 '+ids.length+' 条消息? ', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
callback: function (a, b) {
|
||||
if ("confirm" == a) {//确认后再执行
|
||||
$.post(base + "/platform/sys/msg/user/delete", {ids: ids.toString()}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
self.pageData();
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
created: function () {
|
||||
this.pageData();
|
||||
}
|
||||
});
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,288 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.el-msg-active {
|
||||
background-color: #546478;
|
||||
color: #ffffff;
|
||||
}
|
||||
</style>
|
||||
<div id="app" v-cloak>
|
||||
<el-row class="header navbar shadow">
|
||||
<div class="btn-group tool-button mt5">
|
||||
<a href="${base}/platform/sys/msg/user/unread" data-pjax class="el-button el-button--default el-button--medium"
|
||||
:class="{'el-msg-active':'all'==pageForm.searchType}">
|
||||
全部类型消息
|
||||
</a>
|
||||
</div>
|
||||
<div class="btn-group tool-button mt5">
|
||||
<a href="${base}/platform/sys/msg/user/unread/system" data-pjax
|
||||
class="el-button el-button--default el-button--medium"
|
||||
:class="{'el-msg-active':'system'==pageForm.searchType}">
|
||||
系统消息<span v-if="unreadnum.system>0">({{unreadnum.system}})</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="btn-group tool-button mt5">
|
||||
<a href="${base}/platform/sys/msg/user/unread/user" data-pjax
|
||||
class="el-button el-button--default el-button--medium"
|
||||
:class="{'el-msg-active':'user'==pageForm.searchType}">
|
||||
用户消息<span v-if="unreadnum.user>0">({{unreadnum.user}})</span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="pull-right offscreen-right mt5">
|
||||
<el-button size="medium" @click="readMore" :disabled="selectData.length==0">标记已读</el-button>
|
||||
<el-button size="medium" @click="readAll" :disabled="tableData.length==0">全部已读</el-button>
|
||||
<el-button size="medium" @click="delMore" type="danger" :disabled="selectData.length==0"><i class="el-icon-delete"></i>删除</el-button>
|
||||
</div>
|
||||
</el-row>
|
||||
<el-row class="el-table-container">
|
||||
<el-table
|
||||
:data="tableData"
|
||||
@sort-change='pageOrder'
|
||||
size="small"
|
||||
header-align="center"
|
||||
style="width: 100%"
|
||||
@selection-change="handleSelectionChange"
|
||||
>
|
||||
<el-table-column
|
||||
type="selection"
|
||||
width="35">
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="status"
|
||||
width="45">
|
||||
<template slot-scope="scope">
|
||||
<span v-if="0==scope.row.status"><i class="fa fa-circle text-info ml5"></i></span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="type"
|
||||
label="消息类型"
|
||||
header-align="center" align="center" width="120">
|
||||
<template slot-scope="scope">
|
||||
<span v-if="'system'==scope.row.type">系统消息</span>
|
||||
<span v-if="'user'==scope.row.type">用户消息</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="title"
|
||||
label="标题"
|
||||
header-align="center"
|
||||
:show-overflow-tooltip="true">
|
||||
<template slot-scope="scope">
|
||||
<a :href="'${base}/platform/sys/msg/user/unread/detail/'+scope.row.msgid" data-pjax>{{scope.row.title}}</a>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column
|
||||
prop="opat"
|
||||
label="接收时间"
|
||||
header-align="center" align="center">
|
||||
<template slot-scope="scope">
|
||||
{{formatAt(scope.row.opat)}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-row>
|
||||
|
||||
<el-row class="el-pagination-container">
|
||||
<el-pagination
|
||||
style="float: left"
|
||||
@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, jumper"
|
||||
:total="pageForm.totalCount">
|
||||
</el-pagination>
|
||||
</el-row>
|
||||
</div>
|
||||
<script>
|
||||
new Vue({
|
||||
el: "#app",
|
||||
data: function () {
|
||||
return {
|
||||
addDialogVisible: false,
|
||||
editDialogVisible: false,
|
||||
selectDialogVisible: false,
|
||||
viewDialogVisible: false,
|
||||
tableData: [],
|
||||
pageForm: {
|
||||
searchType: "${type!}",
|
||||
pageNumber: 1,
|
||||
pageSize: 10,
|
||||
totalCount: 0,
|
||||
pageOrderName: "opAt",
|
||||
pageOrderBy: "descending"
|
||||
},
|
||||
formData: {
|
||||
id: "",
|
||||
type: "system"
|
||||
},
|
||||
selectData: [],
|
||||
unreadnum: {
|
||||
system: 0,
|
||||
user: 0
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
pageOrder: function (column) {//按字段排序
|
||||
this.pageForm.pageOrderName = column.prop;
|
||||
this.pageForm.pageOrderBy = column.order;
|
||||
this.pageData();
|
||||
},
|
||||
pageNumberChange: function (val) {//页码更新操作
|
||||
this.pageForm.pageNumber = val;
|
||||
this.pageData();
|
||||
},
|
||||
pageSizeChange: function (val) {//分页大小更新操作
|
||||
this.pageForm.pageSize = val;
|
||||
this.pageData();
|
||||
},
|
||||
pageData: function () {//加载分页数据
|
||||
var self = this;
|
||||
sublime.showLoadingbar();//显示loading
|
||||
$.post(base + "/platform/sys/msg/user/data/unread", self.pageForm, function (data) {
|
||||
sublime.closeLoadingbar();//关闭loading
|
||||
if (data.code == 0) {
|
||||
self.tableData = data.data.list;
|
||||
self.pageForm.totalCount = data.data.totalCount;
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
formatAt: function (val) {
|
||||
if (val && val > 0)
|
||||
return moment(val * 1000).format("YYYY-MM-DD HH:mm");
|
||||
return "";
|
||||
},
|
||||
handleSelectionChange: function (val) {
|
||||
this.selectData = val;
|
||||
},
|
||||
unreadData: function () {//加载分页数据
|
||||
var self = this;
|
||||
$.post(base + "/platform/sys/msg/user/unread_num", {}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.unreadnum = data.data;
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
readMore: function () {
|
||||
var self = this;
|
||||
if (self.selectData.length == 0) {
|
||||
self.$message({
|
||||
message: "请选择消息",
|
||||
type: 'warning'
|
||||
});
|
||||
return false;
|
||||
}
|
||||
var ids = [];
|
||||
self.selectData.forEach(function (val) {
|
||||
ids.push(val.id);
|
||||
});
|
||||
self.$confirm('您确定要标记选中的 '+ids.length+' 条消息为已读吗? ', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
callback: function (a, b) {
|
||||
if ("confirm" == a) {//确认后再执行
|
||||
$.post(base + "/platform/sys/msg/user/status/read", {ids: ids.toString()}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
self.pageData();
|
||||
self.unreadData();
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
readAll: function () {
|
||||
var self = this;
|
||||
self.$confirm('您确定要标记全部消息为已读吗? ', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
callback: function (a, b) {
|
||||
if ("confirm" == a) {//确认后再执行
|
||||
$.post(base + "/platform/sys/msg/user/status/readAll", {}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
self.pageData();
|
||||
self.unreadData();
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
delMore: function () {
|
||||
var self = this;
|
||||
if (self.selectData.length == 0) {
|
||||
self.$message({
|
||||
message: "请选择消息",
|
||||
type: 'warning'
|
||||
});
|
||||
return false;
|
||||
}
|
||||
var ids = [];
|
||||
self.selectData.forEach(function (val) {
|
||||
ids.push(val.id);
|
||||
});
|
||||
self.$confirm('您确定要删除选中的 '+ids.length+' 条消息? ', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
callback: function (a, b) {
|
||||
if ("confirm" == a) {//确认后再执行
|
||||
$.post(base + "/platform/sys/msg/user/delete", {ids: ids.toString()}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
self.pageData();
|
||||
self.unreadData();
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
created: function () {
|
||||
this.pageData();
|
||||
this.unreadData();
|
||||
}
|
||||
});
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,18 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app" v-cloak>
|
||||
<el-alert
|
||||
title="对不起,您没有权限访问该页面。"
|
||||
type="error">
|
||||
</el-alert>
|
||||
</div>
|
||||
<script>
|
||||
new Vue({
|
||||
el: "#app"
|
||||
});
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,169 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava>
|
||||
<el-card shadow="never">
|
||||
<template #header>
|
||||
<div style="display:flex;justify-content: space-between;align-items: center">
|
||||
<h3 style="color: #1867b0">模板管理</h3>
|
||||
<el-button type="primary" size="small" @click="openAdd">
|
||||
上传模板
|
||||
</el-button>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<el-row type="flex" style="column-gap:10px">
|
||||
<el-input v-model="pageForm.templateCode" maxlength="50" style="width: 400px"
|
||||
clearable placeholder="请输入模板代码"></el-input>
|
||||
|
||||
<el-button @click="doSearch" icon="el-icon-search" type="primary">搜索</el-button>
|
||||
|
||||
</el-row>
|
||||
|
||||
<el-table :data="tableData" border class="mt10" stripe ref="table" :height="tableHeight"
|
||||
id="officeTable">
|
||||
<el-table-column label="序号" type="index" :index="indexMethod"
|
||||
width="70px"></el-table-column>
|
||||
<el-table-column label="模板代码" prop="templateCode"></el-table-column>
|
||||
<el-table-column label="模板名称" prop="templateName"></el-table-column>
|
||||
<!-- <el-table-column label="模板大小" prop="templateSize"></el-table-column>-->
|
||||
<el-table-column label="模板路径" prop="templatePath"></el-table-column>
|
||||
<el-table-column label="模板说明" prop="templateDesc"></el-table-column>
|
||||
<el-table-column label="操作" width="300px">
|
||||
<template scope="{row}">
|
||||
<el-button size="mini" type="primary"
|
||||
@click="download(row.templatePath)">下载
|
||||
</el-button>
|
||||
<el-button size="mini" type="primary"
|
||||
@click="preview(row.templatePath,row.templatePath)">预览
|
||||
</el-button>
|
||||
<el-button size="mini" type="primary" @click="openEdit(row)">编辑</el-button>
|
||||
<el-button size="mini" type="danger" @click="doDelete(row)">删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
|
||||
</el-card>
|
||||
|
||||
<el-dialog title="模板" :visible.sync="dialogVisible" :close-on-click-modal="false"
|
||||
width="60%">
|
||||
<el-form :model="formData" ref="ruleForm" :rules="formRules" label-width="80px">
|
||||
<el-form-item label="模板文件" prop="templatePath"
|
||||
:rules="[{required:true,message:'必传',trigger:['change']}]">
|
||||
<file-upload :files="files" @update:files="updateFiles" ref="fileUpload"
|
||||
:limit="1"
|
||||
:type="['doc','docx','xlsx','xls']"></file-upload>
|
||||
</el-form-item>
|
||||
<el-form-item label="模板名称" prop="templateName"
|
||||
:rules="[{required:true,message:'上传文件后自动读取',trigger:['change']}]">
|
||||
<el-input type="text" v-model="formData.templateName" maxlength="50"
|
||||
disabled
|
||||
placeholder="自动读取文件名"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="模板代码" prop="templateCode"
|
||||
:rules="[{required:true,message:'必填',trigger:['change']}]">
|
||||
<el-input type="text" v-model="formData.templateCode" maxlength="50"
|
||||
placeholder="请填写模板代码"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item label="模板说明" prop="templateDesc"
|
||||
:rules="[{required:true,message:'必填',trigger:['change']}]">
|
||||
<el-input type="text" v-model="formData.templateDesc" maxlength="50"
|
||||
placeholder="请填写模板说明"></el-input>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="dialogVisible = false">取消</el-button>
|
||||
<el-button type="primary" @click="save">确定</el-button>
|
||||
</span>
|
||||
|
||||
{{formData}}
|
||||
</el-dialog>
|
||||
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
files: [],
|
||||
dialogVisible: false,
|
||||
tableHeight: 700
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
openAdd() {
|
||||
this.dialogVisible = true
|
||||
this.formData = {}
|
||||
this.files = []
|
||||
},
|
||||
openEdit(row) {
|
||||
this.dialogVisible = true
|
||||
this.files = [{
|
||||
id: row.templatePath,
|
||||
filepath: row.templatePath,
|
||||
filename: row.templateName
|
||||
}]
|
||||
this.formData = {...row}
|
||||
},
|
||||
save() {
|
||||
this.$refs.ruleForm.validate(async valid => {
|
||||
if (valid) {
|
||||
const resp = await $.post(loc() + '/save', this.formData)
|
||||
if (resp.code === 0) {
|
||||
this.dialogVisible = false
|
||||
this.notifySuccess(resp.msg)
|
||||
this.pageData()
|
||||
} else {
|
||||
this.notifyWarning(resp.msg)
|
||||
}
|
||||
|
||||
}
|
||||
})
|
||||
},
|
||||
updateFiles(val) {
|
||||
this.files = val
|
||||
if (val && val.length > 0) {
|
||||
this.$set(this.formData, 'templatePath', val[0].filepath)
|
||||
this.$set(this.formData, 'templateName', val[0].filename)
|
||||
} else {
|
||||
this.$set(this.formData, 'templatePath', null)
|
||||
this.$set(this.formData, 'templateName', null)
|
||||
}
|
||||
},
|
||||
doDelete(row) {
|
||||
this.$confirm('您确定要删除吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'info',
|
||||
}).then(async () => {
|
||||
const resp = await $.post(loc() + '/delete', row)
|
||||
if (resp.code === 0) {
|
||||
this.notifySuccess(resp.msg)
|
||||
this.pageData()
|
||||
} else {
|
||||
this.notifyWarning(resp.msg)
|
||||
}
|
||||
|
||||
})
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
setTimeout(() => {
|
||||
this.tableHeight = window.innerHeight - document.querySelector("#officeTable").getBoundingClientRect().top - 80
|
||||
}, 200)
|
||||
},
|
||||
created() {
|
||||
this.pageData()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,357 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app" v-cloak>
|
||||
<el-row class="header navbar bg-white shadow">
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-button size="medium" @click="openAdd">
|
||||
<i class="ti-plus"></i>
|
||||
新建路由
|
||||
</el-button>
|
||||
</div>
|
||||
</el-row>
|
||||
<el-row class="el-table-container">
|
||||
<el-table
|
||||
:data="tableData"
|
||||
@sort-change='pageOrder'
|
||||
size="small"
|
||||
header-align="center"
|
||||
style="width: 100%"
|
||||
>
|
||||
<el-table-column
|
||||
sortable
|
||||
prop="url"
|
||||
label="原路径"
|
||||
header-align="center">
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="toUrl"
|
||||
label="指向路径"
|
||||
header-align="center"
|
||||
:show-overflow-tooltip="true">
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="type"
|
||||
label="转发方式"
|
||||
header-align="center" align="center">
|
||||
<template slot-scope="scope">
|
||||
<span v-if="scope.row.type=='hide'">隐性转发</span>
|
||||
<span v-if="scope.row.type=='show'">显性转发</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
sortable
|
||||
prop="disabled"
|
||||
label="启用状态"
|
||||
header-align="center"
|
||||
align="center"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<i v-if="scope.row.disabled" class="fa fa-circle text-danger ml5"></i>
|
||||
<i v-if="!scope.row.disabled" class="fa fa-circle text-success ml5"></i>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="操作"
|
||||
width="120">
|
||||
<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:'enable',id:scope.row.id,name:scope.row.name,row:scope.row}">
|
||||
启用
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item
|
||||
:command="{type:'disable',id:scope.row.id,name:scope.row.name,row:scope.row}">
|
||||
禁用
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item divided :command="{type:'edit',id:scope.row.id}">
|
||||
修改
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item :command="{type:'delete',id:scope.row.id,url:scope.row.url}">
|
||||
删除
|
||||
</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</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, jumper"
|
||||
:total="pageForm.totalCount">
|
||||
</el-pagination>
|
||||
</el-row>
|
||||
<el-dialog
|
||||
title="新建路由"
|
||||
:visible.sync="addDialogVisible"
|
||||
width="40%">
|
||||
<el-form :model="formData" ref="addForm" :rules="formRules" size="small" label-width="80px">
|
||||
<el-form-item prop="url" label="原路径">
|
||||
<el-input maxlength="100" placeholder="原路径"
|
||||
v-model="formData.url"
|
||||
auto-complete="off" tabindex="1" type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="toUrl" label="指向路径">
|
||||
<el-input placeholder="指向路径"
|
||||
v-model="formData.toUrl"
|
||||
auto-complete="off" tabindex="2" type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="type" label="指向路径">
|
||||
<el-radio-group v-model="formData.type">
|
||||
<el-radio label="hide">隐性转发</el-radio>
|
||||
<el-radio label="show">显性转发</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item prop="disabled" label="启用状态">
|
||||
<el-switch
|
||||
v-model="formData.disabled"
|
||||
active-color="#ff4949"
|
||||
inactive-color="#13ce66">
|
||||
</el-switch>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="addDialogVisible = false">取 消</el-button>
|
||||
<el-button type="primary" @click="doAdd">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
<el-dialog
|
||||
title="修改路由"
|
||||
:visible.sync="editDialogVisible"
|
||||
width="40%">
|
||||
<el-form :model="formData" ref="editForm" :rules="formRules" size="small" label-width="80px">
|
||||
<el-form-item prop="url" label="原路径">
|
||||
<el-input maxlength="100" placeholder="原路径"
|
||||
v-model="formData.url"
|
||||
auto-complete="off" tabindex="1" type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="toUrl" label="指向路径">
|
||||
<el-input placeholder="指向路径"
|
||||
v-model="formData.toUrl"
|
||||
auto-complete="off" tabindex="2" type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="type" label="指向路径">
|
||||
<el-radio-group v-model="formData.type">
|
||||
<el-radio label="hide">隐性转发</el-radio>
|
||||
<el-radio label="show">显性转发</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item prop="disabled" label="启用状态">
|
||||
<el-switch
|
||||
v-model="formData.disabled"
|
||||
active-color="#ff4949"
|
||||
inactive-color="#13ce66">
|
||||
</el-switch>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="editDialogVisible = false">取 消</el-button>
|
||||
<el-button type="primary" @click="doEdit">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
</div>
|
||||
<script>
|
||||
new Vue({
|
||||
el: "#app",
|
||||
data: function () {
|
||||
return {
|
||||
addDialogVisible: false,
|
||||
editDialogVisible: false,
|
||||
tableData: [],
|
||||
pageForm: {
|
||||
pageNumber: 1,
|
||||
pageSize: 10,
|
||||
totalCount: 0,
|
||||
pageOrderName: "",
|
||||
pageOrderBy: ""
|
||||
},
|
||||
formData: {
|
||||
id: "",
|
||||
type: "hide"
|
||||
},
|
||||
formRules: {
|
||||
url: [
|
||||
{required: true, message: '原路径', trigger: 'blur'}
|
||||
],
|
||||
toUrl: [
|
||||
{required: true, message: '指向路径', trigger: 'blur'}
|
||||
]
|
||||
},
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
pageOrder: function (column) {//按字段排序
|
||||
this.pageForm.pageOrderName = column.prop;
|
||||
this.pageForm.pageOrderBy = column.order;
|
||||
this.pageData();
|
||||
},
|
||||
pageNumberChange: function (val) {//页码更新操作
|
||||
this.pageForm.pageNumber = val;
|
||||
this.pageData();
|
||||
},
|
||||
pageSizeChange: function (val) {//分页大小更新操作
|
||||
this.pageForm.pageSize = val;
|
||||
this.pageData();
|
||||
},
|
||||
pageData: function () {//加载分页数据
|
||||
var self = this;
|
||||
sublime.showLoadingbar();//显示loading
|
||||
$.post(base + "/platform/sys/route/data", self.pageForm, function (data) {
|
||||
sublime.closeLoadingbar();//关闭loading
|
||||
if (data.code == 0) {
|
||||
self.tableData = data.data.list;
|
||||
self.pageForm.totalCount = data.data.totalCount;
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
formatAt: function (val) {
|
||||
if (val && val > 0)
|
||||
return moment(val * 1000).format("YYYY-MM-DD HH:mm");
|
||||
return "";
|
||||
},
|
||||
doSearch: function () {
|
||||
this.pageForm.pageNumber = 1;
|
||||
this.pageData();
|
||||
},
|
||||
openAdd: function () {
|
||||
var self = this;
|
||||
this.addDialogVisible = true;
|
||||
this.formData = {
|
||||
id: "", type: "hide"
|
||||
};//打开新增窗口,表单先清空
|
||||
if (this.$refs["addForm"])
|
||||
this.$refs["addForm"].resetFields();
|
||||
},
|
||||
doAdd: function () {
|
||||
var self = this;
|
||||
self.$refs["addForm"].validate(function (valid) {
|
||||
if (valid) {
|
||||
$.post(base + "/platform/sys/route/addDo", self.formData, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
self.addDialogVisible = false;
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
self.pageData();//添加失败也可以入库,所以加载一下看看
|
||||
}, "json");
|
||||
}
|
||||
});
|
||||
},
|
||||
doEdit: function () {
|
||||
var self = this;
|
||||
self.$refs["editForm"].validate(function (valid) {
|
||||
if (valid) {
|
||||
$.post(base + "/platform/sys/route/editDo", self.formData, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
self.doSearch();//查询是带条件的,加载新建用户选择的单位用户数据
|
||||
//self.pageData();
|
||||
self.editDialogVisible = false;
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
});
|
||||
},
|
||||
dropdownCommand: function (command) {//监听下拉框事件
|
||||
var self = this;
|
||||
if ("enable" == command.type || "disable" == command.type) {
|
||||
$.post(base + "/platform/sys/route/" + command.type + "/" + command.id, {}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
if ("disable" == command.type) {
|
||||
command.row.disabled = true;
|
||||
}
|
||||
if ("enable" == command.type) {
|
||||
command.row.disabled = false;
|
||||
}
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
if ("edit" == command.type) {
|
||||
$.post(base + "/platform/sys/route/edit/" + command.id, {}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.formData = data.data;//加载后台表单数据
|
||||
self.editDialogVisible = true;//打开编辑窗口
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
if ("delete" == command.type) {
|
||||
self.$confirm('此操作将删除 ' + command.url, '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
callback: function (a, b) {
|
||||
if ("confirm" == a) {//确认后再执行
|
||||
$.post(base + "/platform/sys/route/delete/" + command.id, {}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
self.doSearch();
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
created: function () {
|
||||
this.pageData();
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,575 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Cron表达式生成器</title>
|
||||
<link href="${base}/assets/platform/cron/css/easyui.min.css" rel="stylesheet" type="text/css"/>
|
||||
<style type="text/css">
|
||||
.line {
|
||||
height: 25px;
|
||||
line-height: 25px;
|
||||
margin: 3px;
|
||||
}
|
||||
|
||||
.imp {
|
||||
padding-left: 25px;
|
||||
}
|
||||
|
||||
.col {
|
||||
width: 95px;
|
||||
}
|
||||
|
||||
ul {
|
||||
list-style: none;
|
||||
padding-left: 10px;
|
||||
}
|
||||
|
||||
li {
|
||||
height: 20px;
|
||||
}
|
||||
|
||||
body {
|
||||
text-align: center; /*IE*/
|
||||
text-align: -moz-center; /*Firefox*/
|
||||
text-align: -webkit-center; /*Chrome*/
|
||||
}
|
||||
</style>
|
||||
<script>
|
||||
var base = "${base!}";
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<div class="easyui-layout" style="width:830px;height:560px; border: 1px rgb(202, 196, 196) solid;
|
||||
border-radius: 5px;">
|
||||
<div style="height: 100%;">
|
||||
<div class="easyui-tabs" data-options="fit:true,border:false">
|
||||
<div title="秒">
|
||||
<div class="line">
|
||||
<input type="radio" checked="checked" name="second" onclick="everyTime(this)">
|
||||
每秒 允许的通配符[, - * /]
|
||||
</div>
|
||||
<div class="line">
|
||||
<input type="radio" name="second" onclick="cycle(this)">
|
||||
周期从
|
||||
<input class="numberspinner" style="width: 60px;" data-options="min:1,max:58" value="1"
|
||||
id="secondStart_0">
|
||||
-
|
||||
<input class="numberspinner" style="width: 60px;" data-options="min:2,max:59" value="2"
|
||||
id="secondEnd_0">
|
||||
秒
|
||||
</div>
|
||||
<div class="line">
|
||||
<input type="radio" name="second" onclick="startOn(this)">
|
||||
从
|
||||
<input class="numberspinner" style="width: 60px;" data-options="min:0,max:59" value="0"
|
||||
id="secondStart_1">
|
||||
秒开始,每
|
||||
<input class="numberspinner" style="width: 60px;" data-options="min:1,max:59" value="1"
|
||||
id="secondEnd_1">
|
||||
秒执行一次
|
||||
</div>
|
||||
<div class="line">
|
||||
<input type="radio" name="second" id="sencond_appoint">
|
||||
指定
|
||||
</div>
|
||||
<div class="imp secondList">
|
||||
<input type="checkbox" value="0">00
|
||||
<input type="checkbox" value="1">01
|
||||
<input type="checkbox" value="2">02
|
||||
<input type="checkbox" value="3">03
|
||||
<input type="checkbox" value="4">04
|
||||
<input type="checkbox" value="5">05
|
||||
<input type="checkbox" value="6">06
|
||||
<input type="checkbox" value="7">07
|
||||
<input type="checkbox" value="8">08
|
||||
<input type="checkbox" value="9">09
|
||||
</div>
|
||||
<div class="imp secondList">
|
||||
<input type="checkbox" value="10">10
|
||||
<input type="checkbox" value="11">11
|
||||
<input type="checkbox" value="12">12
|
||||
<input type="checkbox" value="13">13
|
||||
<input type="checkbox" value="14">14
|
||||
<input type="checkbox" value="15">15
|
||||
<input type="checkbox" value="16">16
|
||||
<input type="checkbox" value="17">17
|
||||
<input type="checkbox" value="18">18
|
||||
<input type="checkbox" value="19">19
|
||||
</div>
|
||||
<div class="imp secondList">
|
||||
<input type="checkbox" value="20">20
|
||||
<input type="checkbox" value="21">21
|
||||
<input type="checkbox" value="22">22
|
||||
<input type="checkbox" value="23">23
|
||||
<input type="checkbox" value="24">24
|
||||
<input type="checkbox" value="25">25
|
||||
<input type="checkbox" value="26">26
|
||||
<input type="checkbox" value="27">27
|
||||
<input type="checkbox" value="28">28
|
||||
<input type="checkbox" value="29">29
|
||||
</div>
|
||||
<div class="imp secondList">
|
||||
<input type="checkbox" value="30">30
|
||||
<input type="checkbox" value="31">31
|
||||
<input type="checkbox" value="32">32
|
||||
<input type="checkbox" value="33">33
|
||||
<input type="checkbox" value="34">34
|
||||
<input type="checkbox" value="35">35
|
||||
<input type="checkbox" value="36">36
|
||||
<input type="checkbox" value="37">37
|
||||
<input type="checkbox" value="38">38
|
||||
<input type="checkbox" value="39">39
|
||||
</div>
|
||||
<div class="imp secondList">
|
||||
<input type="checkbox" value="40">40
|
||||
<input type="checkbox" value="41">41
|
||||
<input type="checkbox" value="42">42
|
||||
<input type="checkbox" value="43">43
|
||||
<input type="checkbox" value="44">44
|
||||
<input type="checkbox" value="45">45
|
||||
<input type="checkbox" value="46">46
|
||||
<input type="checkbox" value="47">47
|
||||
<input type="checkbox" value="48">48
|
||||
<input type="checkbox" value="49">49
|
||||
</div>
|
||||
<div class="imp secondList">
|
||||
<input type="checkbox" value="50">50
|
||||
<input type="checkbox" value="51">51
|
||||
<input type="checkbox" value="52">52
|
||||
<input type="checkbox" value="53">53
|
||||
<input type="checkbox" value="54">54
|
||||
<input type="checkbox" value="55">55
|
||||
<input type="checkbox" value="56">56
|
||||
<input type="checkbox" value="57">57
|
||||
<input type="checkbox" value="58">58
|
||||
<input type="checkbox" value="59">59
|
||||
</div>
|
||||
</div>
|
||||
<div title="分钟">
|
||||
<div class="line">
|
||||
<input type="radio" checked="checked" name="min" onclick="everyTime(this)">
|
||||
分钟 允许的通配符[, - * /]
|
||||
</div>
|
||||
<div class="line">
|
||||
<input type="radio" name="min" onclick="cycle(this)">
|
||||
周期从
|
||||
<input class="numberspinner" style="width: 60px;" data-options="min:1,max:58" value="1"
|
||||
id="minStart_0">
|
||||
-
|
||||
<input class="numberspinner" style="width: 60px;" data-options="min:2,max:59" value="2"
|
||||
id="minEnd_0">
|
||||
分钟
|
||||
</div>
|
||||
<div class="line">
|
||||
<input type="radio" name="min" onclick="startOn(this)">
|
||||
从
|
||||
<input class="numberspinner" style="width: 60px;" data-options="min:0,max:59" value="0"
|
||||
id="minStart_1">
|
||||
分钟开始,每
|
||||
<input class="numberspinner" style="width: 60px;" data-options="min:1,max:59" value="1"
|
||||
id="minEnd_1">
|
||||
分钟执行一次
|
||||
</div>
|
||||
<div class="line">
|
||||
<input type="radio" name="min" id="min_appoint">
|
||||
指定
|
||||
</div>
|
||||
<div class="imp minList">
|
||||
<input type="checkbox" value="0">00
|
||||
<input type="checkbox" value="1">01
|
||||
<input type="checkbox" value="2">02
|
||||
<input type="checkbox" value="3">03
|
||||
<input type="checkbox" value="4">04
|
||||
<input type="checkbox" value="5">05
|
||||
<input type="checkbox" value="6">06
|
||||
<input type="checkbox" value="7">07
|
||||
<input type="checkbox" value="8">08
|
||||
<input type="checkbox" value="9">09
|
||||
</div>
|
||||
<div class="imp minList">
|
||||
<input type="checkbox" value="10">10
|
||||
<input type="checkbox" value="11">11
|
||||
<input type="checkbox" value="12">12
|
||||
<input type="checkbox" value="13">13
|
||||
<input type="checkbox" value="14">14
|
||||
<input type="checkbox" value="15">15
|
||||
<input type="checkbox" value="16">16
|
||||
<input type="checkbox" value="17">17
|
||||
<input type="checkbox" value="18">18
|
||||
<input type="checkbox" value="19">19
|
||||
</div>
|
||||
<div class="imp minList">
|
||||
<input type="checkbox" value="20">20
|
||||
<input type="checkbox" value="21">21
|
||||
<input type="checkbox" value="22">22
|
||||
<input type="checkbox" value="23">23
|
||||
<input type="checkbox" value="24">24
|
||||
<input type="checkbox" value="25">25
|
||||
<input type="checkbox" value="26">26
|
||||
<input type="checkbox" value="27">27
|
||||
<input type="checkbox" value="28">28
|
||||
<input type="checkbox" value="29">29
|
||||
</div>
|
||||
<div class="imp minList">
|
||||
<input type="checkbox" value="30">30
|
||||
<input type="checkbox" value="31">31
|
||||
<input type="checkbox" value="32">32
|
||||
<input type="checkbox" value="33">33
|
||||
<input type="checkbox" value="34">34
|
||||
<input type="checkbox" value="35">35
|
||||
<input type="checkbox" value="36">36
|
||||
<input type="checkbox" value="37">37
|
||||
<input type="checkbox" value="38">38
|
||||
<input type="checkbox" value="39">39
|
||||
</div>
|
||||
<div class="imp minList">
|
||||
<input type="checkbox" value="40">40
|
||||
<input type="checkbox" value="41">41
|
||||
<input type="checkbox" value="42">42
|
||||
<input type="checkbox" value="43">43
|
||||
<input type="checkbox" value="44">44
|
||||
<input type="checkbox" value="45">45
|
||||
<input type="checkbox" value="46">46
|
||||
<input type="checkbox" value="47">47
|
||||
<input type="checkbox" value="48">48
|
||||
<input type="checkbox" value="49">49
|
||||
</div>
|
||||
<div class="imp minList">
|
||||
<input type="checkbox" value="50">50
|
||||
<input type="checkbox" value="51">51
|
||||
<input type="checkbox" value="52">52
|
||||
<input type="checkbox" value="53">53
|
||||
<input type="checkbox" value="54">54
|
||||
<input type="checkbox" value="55">55
|
||||
<input type="checkbox" value="56">56
|
||||
<input type="checkbox" value="57">57
|
||||
<input type="checkbox" value="58">58
|
||||
<input type="checkbox" value="59">59
|
||||
</div>
|
||||
</div>
|
||||
<div title="小时">
|
||||
<div class="line">
|
||||
<input type="radio" checked="checked" name="hour" onclick="everyTime(this)">
|
||||
小时 允许的通配符[, - * /]
|
||||
</div>
|
||||
<div class="line">
|
||||
<input type="radio" name="hour" onclick="cycle(this)">
|
||||
周期从
|
||||
<input class="numberspinner" style="width: 60px;" data-options="min:0,max:23" value="0"
|
||||
id="hourStart_0">
|
||||
-
|
||||
<input class="numberspinner" style="width: 60px;" data-options="min:2,max:23" value="2"
|
||||
id="hourEnd_1">
|
||||
小时
|
||||
</div>
|
||||
<div class="line">
|
||||
<input type="radio" name="hour" onclick="startOn(this)">
|
||||
从
|
||||
<input class="numberspinner" style="width: 60px;" data-options="min:0,max:23" value="0"
|
||||
id="hourStart_1">
|
||||
小时开始,每
|
||||
<input class="numberspinner" style="width: 60px;" data-options="min:1,max:23" value="1"
|
||||
id="hourEnd_1">
|
||||
小时执行一次
|
||||
</div>
|
||||
<div class="line">
|
||||
<input type="radio" name="hour" id="hour_appoint">
|
||||
指定
|
||||
</div>
|
||||
<div class="imp hourList">
|
||||
AM:
|
||||
<input type="checkbox" value="0">00
|
||||
<input type="checkbox" value="1">01
|
||||
<input type="checkbox" value="2">02
|
||||
<input type="checkbox" value="3">03
|
||||
<input type="checkbox" value="4">04
|
||||
<input type="checkbox" value="5">05
|
||||
<input type="checkbox" value="6">06
|
||||
<input type="checkbox" value="7">07
|
||||
<input type="checkbox" value="8">08
|
||||
<input type="checkbox" value="9">09
|
||||
<input type="checkbox" value="10">10
|
||||
<input type="checkbox" value="11">11
|
||||
</div>
|
||||
<div class="imp hourList">
|
||||
PM:
|
||||
<input type="checkbox" value="12">12
|
||||
<input type="checkbox" value="13">13
|
||||
<input type="checkbox" value="14">14
|
||||
<input type="checkbox" value="15">15
|
||||
<input type="checkbox" value="16">16
|
||||
<input type="checkbox" value="17">17
|
||||
<input type="checkbox" value="18">18
|
||||
<input type="checkbox" value="19">19
|
||||
<input type="checkbox" value="20">20
|
||||
<input type="checkbox" value="21">21
|
||||
<input type="checkbox" value="22">22
|
||||
<input type="checkbox" value="23">23
|
||||
</div>
|
||||
</div>
|
||||
<div title="日">
|
||||
<div class="line">
|
||||
<input type="radio" checked="checked" name="day" onclick="everyTime(this)">
|
||||
日 允许的通配符[, - * / L W]
|
||||
</div>
|
||||
<div class="line">
|
||||
<input type="radio" name="day" onclick="unAppoint(this)">
|
||||
不指定
|
||||
</div>
|
||||
<div class="line">
|
||||
<input type="radio" name="day" onclick="cycle(this)">
|
||||
周期从
|
||||
<input class="numberspinner" style="width: 60px;" data-options="min:1,max:31" value="1"
|
||||
id="dayStart_0">
|
||||
-
|
||||
<input class="numberspinner" style="width: 60px;" data-options="min:2,max:31" value="2"
|
||||
id="dayEnd_0">
|
||||
日
|
||||
</div>
|
||||
<div class="line">
|
||||
<input type="radio" name="day" onclick="startOn(this)">
|
||||
从
|
||||
<input class="numberspinner" style="width: 60px;" data-options="min:1,max:31" value="1"
|
||||
id="dayStart_1">
|
||||
日开始,每
|
||||
<input class="numberspinner" style="width: 60px;" data-options="min:1,max:31" value="1"
|
||||
id="dayEnd_1">
|
||||
天执行一次
|
||||
</div>
|
||||
<div class="line">
|
||||
<input type="radio" name="day" onclick="workDay(this)">
|
||||
每月
|
||||
<input class="numberspinner" style="width: 60px;" data-options="min:1,max:31" value="1"
|
||||
id="dayStart_2">
|
||||
号最近的那个工作日
|
||||
</div>
|
||||
<div class="line">
|
||||
<input type="radio" name="day" onclick="lastDay(this)">
|
||||
本月最后一天
|
||||
</div>
|
||||
<div class="line">
|
||||
<input type="radio" name="day" id="day_appoint">
|
||||
指定
|
||||
</div>
|
||||
<div class="imp dayList">
|
||||
<input type="checkbox" value="1">1
|
||||
<input type="checkbox" value="2">2
|
||||
<input type="checkbox" value="3">3
|
||||
<input type="checkbox" value="4">4
|
||||
<input type="checkbox" value="5">5
|
||||
<input type="checkbox" value="6">6
|
||||
<input type="checkbox" value="7">7
|
||||
<input type="checkbox" value="8">8
|
||||
<input type="checkbox" value="9">9
|
||||
<input type="checkbox" value="10">10
|
||||
<input type="checkbox" value="11">11
|
||||
<input type="checkbox" value="12">12
|
||||
<input type="checkbox" value="13">13
|
||||
<input type="checkbox" value="14">14
|
||||
<input type="checkbox" value="15">15
|
||||
<input type="checkbox" value="16">16
|
||||
</div>
|
||||
<div class="imp dayList">
|
||||
<input type="checkbox" value="17">17
|
||||
<input type="checkbox" value="18">18
|
||||
<input type="checkbox" value="19">19
|
||||
<input type="checkbox" value="20">20
|
||||
<input type="checkbox" value="21">21
|
||||
<input type="checkbox" value="22">22
|
||||
<input type="checkbox" value="23">23
|
||||
<input type="checkbox" value="24">24
|
||||
<input type="checkbox" value="25">25
|
||||
<input type="checkbox" value="26">26
|
||||
<input type="checkbox" value="27">27
|
||||
<input type="checkbox" value="28">28
|
||||
<input type="checkbox" value="29">29
|
||||
<input type="checkbox" value="30">30
|
||||
<input type="checkbox" value="31">31
|
||||
</div>
|
||||
</div>
|
||||
<div title="月">
|
||||
<div class="line">
|
||||
<input type="radio" checked="checked" name="mouth" onclick="everyTime(this)">
|
||||
月 允许的通配符[, - * /]
|
||||
</div>
|
||||
<div class="line">
|
||||
<input type="radio" name="mouth" onclick="unAppoint(this)">
|
||||
不指定
|
||||
</div>
|
||||
<div class="line">
|
||||
<input type="radio" name="mouth" onclick="cycle(this)">
|
||||
周期从
|
||||
<input class="numberspinner" style="width: 60px;" data-options="min:1,max:12" value="1"
|
||||
id="mouthStart_0">
|
||||
-
|
||||
<input class="numberspinner" style="width: 60px;" data-options="min:2,max:12" value="2"
|
||||
id="mouthEnd_0">
|
||||
月
|
||||
</div>
|
||||
<div class="line">
|
||||
<input type="radio" name="mouth" onclick="startOn(this)">
|
||||
从
|
||||
<input class="numberspinner" style="width: 60px;" data-options="min:1,max:12" value="1"
|
||||
id="mouthStart_1">
|
||||
日开始,每
|
||||
<input class="numberspinner" style="width: 60px;" data-options="min:1,max:12" value="1"
|
||||
id="mouthEnd_1">
|
||||
月执行一次
|
||||
</div>
|
||||
<div class="line">
|
||||
<input type="radio" name="mouth" id="mouth_appoint">
|
||||
指定
|
||||
</div>
|
||||
<div class="imp mouthList">
|
||||
<input type="checkbox" value="1">1
|
||||
<input type="checkbox" value="2">2
|
||||
<input type="checkbox" value="3">3
|
||||
<input type="checkbox" value="4">4
|
||||
<input type="checkbox" value="5">5
|
||||
<input type="checkbox" value="6">6
|
||||
<input type="checkbox" value="7">7
|
||||
<input type="checkbox" value="8">8
|
||||
<input type="checkbox" value="9">9
|
||||
<input type="checkbox" value="10">10
|
||||
<input type="checkbox" value="11">11
|
||||
<input type="checkbox" value="12">12
|
||||
</div>
|
||||
</div>
|
||||
<div title="周">
|
||||
<div class="line">
|
||||
<input type="radio" checked="checked" name="week" onclick="everyTime(this)">
|
||||
周 允许的通配符[, - * / L #]
|
||||
</div>
|
||||
<div class="line">
|
||||
<input type="radio" name="week" onclick="unAppoint(this)">
|
||||
不指定
|
||||
</div>
|
||||
<div class="line">
|
||||
<input type="radio" name="week" onclick="startOn(this)">
|
||||
周期 从星期<input class="numberspinner" style="width: 60px;" data-options="min:1,max:7"
|
||||
id="weekStart_0" value="1">
|
||||
-
|
||||
<input class="numberspinner" style="width: 60px;" data-options="min:2,max:7" value="2"
|
||||
id="weekEnd_0"></div>
|
||||
<div class="line">
|
||||
<input type="radio" name="week" onclick="weekOfDay(this)">
|
||||
第<input class="numberspinner" style="width: 60px;" data-options="min:1,max:4" value="1"
|
||||
id="weekStart_1">
|
||||
周 的星期<input class="numberspinner" style="width: 60px;" data-options="min:1,max:7"
|
||||
id="weekEnd_1" value="1"></div>
|
||||
<div class="line">
|
||||
<input type="radio" name="week" onclick="lastWeek(this)">
|
||||
本月最后一个星期<input class="numberspinner" style="width: 60px;" data-options="min:1,max:7"
|
||||
id="weekStart_2" value="1"></div>
|
||||
<div class="line">
|
||||
<input type="radio" name="week" id="week_appoint">
|
||||
指定
|
||||
</div>
|
||||
<div class="imp weekList">
|
||||
<input type="checkbox" value="1">1
|
||||
<input type="checkbox" value="2">2
|
||||
<input type="checkbox" value="3">3
|
||||
<input type="checkbox" value="4">4
|
||||
<input type="checkbox" value="5">5
|
||||
<input type="checkbox" value="6">6
|
||||
<input type="checkbox" value="7">7
|
||||
</div>
|
||||
</div>
|
||||
<div title="年">
|
||||
<div class="line">
|
||||
<input type="radio" checked="checked" name="year" onclick="unAppoint(this)">
|
||||
不指定 允许的通配符[, - * /] 非必填
|
||||
</div>
|
||||
<div class="line">
|
||||
<input type="radio" name="year" onclick="everyTime(this)">
|
||||
每年
|
||||
</div>
|
||||
<div class="line">
|
||||
<input type="radio" name="year" onclick="cycle(this)">周期 从
|
||||
<input class="numberspinner" style="width: 90px;" data-options="min:2018,max:3000"
|
||||
id="yearStart_0" value="2018">
|
||||
-
|
||||
<input class="numberspinner" style="width: 90px;" data-options="min:2020,max:3000"
|
||||
id="yearEnd_0" value="2020"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div data-options="region:'south',border:false" style="height:250px">
|
||||
<fieldset style="border-radius: 3px; height: 220px;">
|
||||
<legend>表达式</legend>
|
||||
<table style="height: 100px;">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>
|
||||
</td>
|
||||
<td align="center">
|
||||
秒
|
||||
</td>
|
||||
<td align="center">
|
||||
分钟
|
||||
</td>
|
||||
<td align="center">
|
||||
小时
|
||||
</td>
|
||||
<td align="center">
|
||||
日
|
||||
</td>
|
||||
<td align="center">
|
||||
月<br/>
|
||||
</td>
|
||||
<td align="center">
|
||||
星期
|
||||
</td>
|
||||
<td align="center">
|
||||
年
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
表达式字段:
|
||||
</td>
|
||||
<td>
|
||||
<input type="text" name="v_second" class="col" value="*" readonly="readonly"/>
|
||||
</td>
|
||||
<td>
|
||||
<input type="text" name="v_min" class="col" value="*" readonly="readonly"/>
|
||||
</td>
|
||||
<td>
|
||||
<input type="text" name="v_hour" class="col" value="*" readonly="readonly"/>
|
||||
</td>
|
||||
<td>
|
||||
<input type="text" name="v_day" class="col" value="*" readonly="readonly"/>
|
||||
</td>
|
||||
<td>
|
||||
<input type="text" name="v_mouth" class="col" value="*" readonly="readonly"/>
|
||||
</td>
|
||||
<td>
|
||||
<input type="text" name="v_week" class="col" value="?" readonly="readonly"/>
|
||||
</td>
|
||||
<td>
|
||||
<input type="text" name="v_year" class="col" readonly="readonly"/>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Cron 表达式:</td>
|
||||
<td colspan="6"><input type="text" name="cron" style="width: 100%;" value="* * * * * ?" id="cron"
|
||||
/></td>
|
||||
<td><input type="button" value="反解析到UI " id="btnFan" onclick="btnFan()"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="8">最近5次运行时间:</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="8" id="runTime">
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</fieldset>
|
||||
</div>
|
||||
<div>
|
||||
</div>
|
||||
</div>
|
||||
<script src="${base}/assets/platform/plugins/jquery/jquery-1.11.1.min.js" type="text/javascript"></script>
|
||||
<script src="${base}/assets/platform/cron/js/cron.js" type="text/javascript"></script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,379 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app" v-cloak>
|
||||
<el-row class="header navbar bg-white shadow">
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-button size="medium" @click="openAdd">
|
||||
<i class="ti-plus"></i>
|
||||
新建任务
|
||||
</el-button>
|
||||
</div>
|
||||
</el-row>
|
||||
<el-row class="el-table-container">
|
||||
<el-table
|
||||
:data="tableData"
|
||||
@sort-change='pageOrder'
|
||||
size="small"
|
||||
header-align="center"
|
||||
style="width: 100%"
|
||||
>
|
||||
<el-table-column
|
||||
sortable
|
||||
prop="name"
|
||||
label="任务名称"
|
||||
header-align="center">
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="jobClass"
|
||||
label="执行类"
|
||||
header-align="center"
|
||||
:show-overflow-tooltip="true">
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="data"
|
||||
label="执行参数"
|
||||
header-align="center"
|
||||
:show-overflow-tooltip="true">
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="cron"
|
||||
label="定时规则"
|
||||
header-align="center" align="center">
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="exeAt"
|
||||
label="执行时间"
|
||||
header-align="center" align="center">
|
||||
<template slot-scope="scope">
|
||||
{{formatAt(scope.row.exeAt)}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
sortable
|
||||
prop="disabled"
|
||||
label="启用状态"
|
||||
header-align="center"
|
||||
align="center"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<i v-if="scope.row.disabled" class="fa fa-circle text-danger ml5"></i>
|
||||
<i v-if="!scope.row.disabled" class="fa fa-circle text-success ml5"></i>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="操作"
|
||||
width="120">
|
||||
<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:'enable',id:scope.row.id,name:scope.row.name,row:scope.row}">
|
||||
启用
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item
|
||||
:command="{type:'disable',id:scope.row.id,name:scope.row.name,row:scope.row}">
|
||||
禁用
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item divided :command="{type:'edit',id:scope.row.id}">
|
||||
修改
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item :command="{type:'delete',id:scope.row.id,name:scope.row.name}">
|
||||
删除
|
||||
</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</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, jumper"
|
||||
:total="pageForm.totalCount">
|
||||
</el-pagination>
|
||||
</el-row>
|
||||
<el-dialog
|
||||
title="新建任务"
|
||||
:visible.sync="addDialogVisible"
|
||||
:close-on-click-modal="false"
|
||||
width="50%">
|
||||
<el-form :model="formData" ref="addForm" :rules="formRules" size="small" label-width="80px">
|
||||
<el-form-item prop="name" label="任务名称">
|
||||
<el-input maxlength="100" placeholder="任务名称"
|
||||
v-model="formData.name"
|
||||
auto-complete="off" tabindex="1" type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="jobClass" label="执行类">
|
||||
<el-input placeholder="执行类"
|
||||
v-model="formData.jobClass"
|
||||
auto-complete="off" tabindex="2" type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="cron" label="执行周期">
|
||||
<el-input placeholder="Cron表达式"
|
||||
v-model="formData.cron"
|
||||
auto-complete="off" tabindex="3" type="text">
|
||||
<template slot="append"><a href="${base}/platform/sys/task/cron" style="color: #409EFF" target="_blank">表达式生成器</a>
|
||||
</template>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="data" label="执行参数(Json)">
|
||||
<el-input type="textarea" v-model="formData.data" placeholder="{}" tabindex="4" ></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="disabled" label="启用状态">
|
||||
<el-switch
|
||||
v-model="formData.disabled"
|
||||
active-color="#ff4949"
|
||||
inactive-color="#13ce66">
|
||||
</el-switch>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="addDialogVisible = false">取 消</el-button>
|
||||
<el-button type="primary" @click="doAdd">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
<el-dialog
|
||||
title="修改任务"
|
||||
:visible.sync="editDialogVisible"
|
||||
:close-on-click-modal="false"
|
||||
width="50%">
|
||||
<el-form :model="formData" ref="editForm" :rules="formRules" size="small" label-width="80px">
|
||||
<el-form-item prop="name" label="任务名称">
|
||||
<el-input maxlength="100" placeholder="任务名称"
|
||||
v-model="formData.name"
|
||||
auto-complete="off" tabindex="1" type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="jobClass" label="执行类">
|
||||
<el-input placeholder="执行类"
|
||||
v-model="formData.jobClass"
|
||||
auto-complete="off" tabindex="2" type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="cron" label="执行周期">
|
||||
<el-input placeholder="Cron表达式"
|
||||
v-model="formData.cron"
|
||||
auto-complete="off" tabindex="3" type="text">
|
||||
<template slot="append"><a href="${base}/platform/sys/task/cron" style="color: #409EFF" target="_blank">表达式生成器</a>
|
||||
</template>
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="data" label="执行参数(Json)">
|
||||
<el-input type="textarea" v-model="formData.data" placeholder="{}" tabindex="4" ></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="disabled" label="启用状态">
|
||||
<el-switch
|
||||
v-model="formData.disabled"
|
||||
active-color="#ff4949"
|
||||
inactive-color="#13ce66">
|
||||
</el-switch>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="editDialogVisible = false">取 消</el-button>
|
||||
<el-button type="primary" @click="doEdit">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
</div>
|
||||
<script>
|
||||
new Vue({
|
||||
el: "#app",
|
||||
data: function () {
|
||||
return {
|
||||
addDialogVisible: false,
|
||||
editDialogVisible: false,
|
||||
tableData: [],
|
||||
pageForm: {
|
||||
pageNumber: 1,
|
||||
pageSize: 10,
|
||||
totalCount: 0,
|
||||
pageOrderName: "",
|
||||
pageOrderBy: ""
|
||||
},
|
||||
formData: {
|
||||
id: ""
|
||||
},
|
||||
formRules: {
|
||||
name: [
|
||||
{required: true, message: '任务名称', trigger: 'blur'}
|
||||
],
|
||||
jobClass: [
|
||||
{required: true, message: '执行类', trigger: 'blur'}
|
||||
],
|
||||
cron: [
|
||||
{required: true, message: '执行周期', trigger: 'blur'}
|
||||
],
|
||||
},
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
pageOrder: function (column) {//按字段排序
|
||||
this.pageForm.pageOrderName = column.prop;
|
||||
this.pageForm.pageOrderBy = column.order;
|
||||
this.pageData();
|
||||
},
|
||||
pageNumberChange: function (val) {//页码更新操作
|
||||
this.pageForm.pageNumber = val;
|
||||
this.pageData();
|
||||
},
|
||||
pageSizeChange: function (val) {//分页大小更新操作
|
||||
this.pageForm.pageSize = val;
|
||||
this.pageData();
|
||||
},
|
||||
pageData: function () {//加载分页数据
|
||||
var self = this;
|
||||
sublime.showLoadingbar();//显示loading
|
||||
$.post(base + "/platform/sys/task/data", self.pageForm, function (data) {
|
||||
sublime.closeLoadingbar();//关闭loading
|
||||
if (data.code == 0) {
|
||||
self.tableData = data.data.list;
|
||||
self.pageForm.totalCount = data.data.totalCount;
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
formatAt: function (val) {
|
||||
if (val && val > 0)
|
||||
return moment(val * 1000).format("YYYY-MM-DD HH:mm:ss");
|
||||
return "";
|
||||
},
|
||||
doSearch: function () {
|
||||
this.pageForm.pageNumber = 1;
|
||||
this.pageData();
|
||||
},
|
||||
openAdd: function () {
|
||||
var self = this;
|
||||
this.addDialogVisible = true;
|
||||
this.formData = {};//打开新增窗口,表单先清空
|
||||
if (this.$refs["addForm"])
|
||||
this.$refs["addForm"].resetFields();
|
||||
},
|
||||
doAdd: function () {
|
||||
var self = this;
|
||||
self.$refs["addForm"].validate(function (valid) {
|
||||
if (valid) {
|
||||
$.post(base + "/platform/sys/task/addDo", self.formData, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
self.addDialogVisible = false;
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
self.pageData();//添加失败也可以入库,所以加载一下看看
|
||||
}, "json");
|
||||
}
|
||||
});
|
||||
},
|
||||
doEdit: function () {
|
||||
var self = this;
|
||||
self.$refs["editForm"].validate(function (valid) {
|
||||
if (valid) {
|
||||
$.post(base + "/platform/sys/task/editDo", self.formData, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
self.doSearch();//查询是带条件的,加载新建用户选择的单位用户数据
|
||||
//self.pageData();
|
||||
self.editDialogVisible = false;
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
});
|
||||
},
|
||||
dropdownCommand: function (command) {//监听下拉框事件
|
||||
var self = this;
|
||||
if ("enable" == command.type || "disable" == command.type) {
|
||||
$.post(base + "/platform/sys/task/" + command.type + "/" + command.id, {}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
if ("disable" == command.type) {
|
||||
command.row.disabled = true;
|
||||
}
|
||||
if ("enable" == command.type) {
|
||||
command.row.disabled = false;
|
||||
}
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
if ("edit" == command.type) {
|
||||
$.post(base + "/platform/sys/task/edit/" + command.id, {}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.formData = data.data;//加载后台表单数据
|
||||
self.editDialogVisible = true;//打开编辑窗口
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
if ("delete" == command.type) {
|
||||
self.$confirm('此操作将删除 ' + command.name, '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
callback: function (a, b) {
|
||||
if ("confirm" == a) {//确认后再执行
|
||||
$.post(base + "/platform/sys/task/delete/" + command.id, {}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
self.doSearch();
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
created: function () {
|
||||
this.pageData();
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,203 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app" v-cloak>
|
||||
<el-row class="header navbar bg-white shadow">
|
||||
<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="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 v-model="pageForm.jc" filterable clearable
|
||||
placeholder="请选择届次">
|
||||
<el-option
|
||||
v-for="item in jcs"
|
||||
:label="item.name"
|
||||
:value="item.code">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-select v-model="pageForm.unionid" filterable clearable
|
||||
placeholder="请选择单位基层工会">
|
||||
<el-option
|
||||
v-for="item in unions"
|
||||
:label="item.unionname"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-button type="primary" icon="el-icon-search" @click="doSearch"></el-button>
|
||||
</div>
|
||||
|
||||
<div class="pull-right offscreen-right mt5">
|
||||
<el-button icon="el-icon-check" type="success" @click="check(true)" :disabled="subDis" plain>通过</el-button>
|
||||
<el-button icon="el-icon-close" type="danger" @click="check(false)" :disabled="subDis" plain>不通过</el-button>
|
||||
</div>
|
||||
</el-row>
|
||||
|
||||
<el-row class="el-table-container">
|
||||
<el-table :data="tableData" style="width: 100%" ref="multipleTable" row-key="id" @sort-change="pageOrder" :key="tabKey"
|
||||
@selection-change="handleSelectionChange" v-loading="tabloading">
|
||||
<el-table-column :reserve-selection="true"
|
||||
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" sortable header-align="center" label="届次" show-overflow-tooltip
|
||||
prop="loginname">
|
||||
<template slot-scope="scope">
|
||||
{{scope.row.jc?'第'+scope.row.jc+'届':''}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" header-align="center" sortable label="职务" show-overflow-tooltip
|
||||
prop="zw"></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="姓名" show-overflow-tooltip
|
||||
prop="username"></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="工号" show-overflow-tooltip
|
||||
prop="loginname"></el-table-column>
|
||||
<el-table-column align="center" header-align="center" sortable label="所属工会" show-overflow-tooltip
|
||||
prop="unionname"></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>
|
||||
<script>
|
||||
const vue = new Vue({
|
||||
el: '#app',
|
||||
data() {
|
||||
return {
|
||||
tabKey: '',
|
||||
multipleSelection: [],
|
||||
unions: [],
|
||||
jcs: [],
|
||||
jcgbjss: [],
|
||||
tabloading: false,
|
||||
formData: {},
|
||||
tableData: [],
|
||||
pageForm: {
|
||||
searchName: "u.username",
|
||||
searchKeyword: "",
|
||||
pageNumber: 1,
|
||||
pageSize: 10,
|
||||
totalCount: 0,
|
||||
pageOrderName: "",
|
||||
pageOrderBy: ""
|
||||
},
|
||||
formRules: {
|
||||
code: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
name: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
},
|
||||
subDis: false,
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
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/union/jcgbsh/check", {ids: JSON.stringify(ids), flag: flag}, (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
|
||||
$.post(base + "/platform/sys/union/jcgbsh/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.unions = await getUnions()
|
||||
this.jcs = await getJc()
|
||||
this.jcgbjss = await getJcgbJs()
|
||||
this.pageData();
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,225 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app">
|
||||
<el-row class="header navbar bg-white shadow">
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-select placeholder="请选择高校" v-model="pageForm.searchName" clearable="true">
|
||||
<el-option v-for="gx in gxlist" :value="gx.gxid" :label="gx.gxname"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-input placeholder="请输入名称" v-model="pageForm.searchKeyword">
|
||||
|
||||
</el-input>
|
||||
|
||||
</div>
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-button slot="append" icon="el-icon-search" @click="pageData()" type="primary"></el-button>
|
||||
</div>
|
||||
<div class="pull-right offscreen-right mt5" style="margin-right: 10px;">
|
||||
<el-button size="medium" @click="openAdd"><i class="ti-plus"></i> 新增校区</el-button>
|
||||
</div>
|
||||
</el-row>
|
||||
|
||||
<el-row class="el-table-container">
|
||||
<el-table :data="tableData" style="width: 100%" size="small"
|
||||
:highlight-current-row="true" >
|
||||
<el-table-column label="校区名称" header-align="center" prop="dq_name"
|
||||
:show-overflow-tooltip="true" align="center">
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="所属高校" header-align="center" prop="gxname"
|
||||
:show-overflow-tooltip="true" align="center">
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="操作" header-align="center" prop="website"
|
||||
:show-overflow-tooltip="true" align="center" width="300">
|
||||
<template slot-scope="scope">
|
||||
<el-row>
|
||||
<el-button type="primary" size="mini" @click="openEdit(scope.row)">修改
|
||||
</el-button>
|
||||
<el-button type="danger" size="mini" @click="dodel(scope.row.dq_id)">删除</el-button>
|
||||
</el-row>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-row>
|
||||
|
||||
<el-dialog
|
||||
title="新增校区"
|
||||
:visible.sync="addDialogVisible"
|
||||
custom-class="ViewDialogClass"
|
||||
width="30%">
|
||||
<el-form :model="formData" ref="addForm" :rules="formRules" size="small" label-width="80px">
|
||||
<el-form-item prop="dq_name" label="校区名称">
|
||||
<el-input maxlength="100" placeholder="校区名称"
|
||||
v-model="formData.dq_name"
|
||||
auto-complete="off" type="text"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item prop="gx_id" label="所属高校">
|
||||
<el-select placeholder="请选择高校" style="width: 100%" v-model="formData.gx_id" clearable="true">
|
||||
<el-option v-for="gx in gxlist" :value="gx.gxid" :label="gx.gxname"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="addDialogVisible = false">取 消</el-button>
|
||||
<el-button type="primary" @click="doadd">确 定</el-button>
|
||||
</span>
|
||||
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog
|
||||
title="修改校区"
|
||||
:visible.sync="editDialogVisible"
|
||||
custom-class="ViewDialogClass"
|
||||
width="30%">
|
||||
<el-form :model="formData" ref="editForm" :rules="formRules" size="small" label-width="80px">
|
||||
<el-form-item prop="dq_name" label="校区名称">
|
||||
<el-input maxlength="100" placeholder="校区名称"
|
||||
v-model="formData.dq_name"
|
||||
auto-complete="off" type="text"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item prop="gx_id" label="所属高校">
|
||||
<el-select placeholder="请选择高校" style="width: 100%" v-model="formData.gx_id" clearable="true">
|
||||
<el-option v-for="gx in gxlist" :value="gx.gxid" :label="gx.gxname"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="editDialogVisible = false">取 消</el-button>
|
||||
<el-button type="primary" @click="doedit">确 定</el-button>
|
||||
</span>
|
||||
|
||||
</el-dialog>
|
||||
</div>
|
||||
<script>
|
||||
var vm=new Vue({
|
||||
el:"#app",
|
||||
data:function () {
|
||||
|
||||
return{
|
||||
pageForm:{
|
||||
searchKeyword:"",
|
||||
searchName:""
|
||||
},
|
||||
tableData:[],
|
||||
formData:{},
|
||||
addDialogVisible:false,
|
||||
gxlist:[],
|
||||
editDialogVisible:false,
|
||||
formRules:{
|
||||
dq_name: [
|
||||
{ required: true, message: '请输入校区名称', trigger: 'blur' }
|
||||
],
|
||||
gx_id: [
|
||||
{ required: true, message: '请选择高校', trigger: ['change','blur'] }
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
methods:{
|
||||
pageData:function(){
|
||||
var self=this;
|
||||
$.post(base+"/platform/sys/dq/data",self.pageForm,function (data) {
|
||||
if (data.data.dq==undefined||data.data.dq==""){
|
||||
self.tableData=[]
|
||||
}else{
|
||||
self.tableData=data.data.dq;
|
||||
}
|
||||
|
||||
self.gxlist=data.data.gx;
|
||||
})
|
||||
},
|
||||
openAdd:function () {
|
||||
this.formData={}
|
||||
if (this.$refs["addForm"])
|
||||
this.$refs["addForm"].resetFields();
|
||||
this.addDialogVisible=true;
|
||||
},
|
||||
openEdit:function(row){
|
||||
this.formData=row
|
||||
this.editDialogVisible=true;
|
||||
},
|
||||
doadd:function () {
|
||||
var self=this;
|
||||
self.$refs["addForm"].validate(function (valid) {
|
||||
if (valid) {
|
||||
$.post(base+"/platform/sys/dq/add",self.formData,function (data) {
|
||||
if (data.code==0){
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
self.addDialogVisible=false;
|
||||
self.pageData();
|
||||
} else{
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
},
|
||||
doedit:function () {
|
||||
var self=this;
|
||||
$.post(base+"/platform/sys/dq/upd",self.formData,function (data) {
|
||||
if (data.code==0){
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
self.pageData();
|
||||
self.editDialogVisible=false;
|
||||
} else{
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
})
|
||||
},
|
||||
dodel:function (id) {
|
||||
var self=this;
|
||||
|
||||
self.$confirm('此操作将删除此校区', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
callback: function (a, b) {
|
||||
if ("confirm" == a) {//确认后再执行
|
||||
$.post(base+"/platform/sys/dq/del",{dq_id:id},function (data) {
|
||||
if (data.code==0){
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
self.pageData();
|
||||
} else{
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
}
|
||||
},
|
||||
created:function () {
|
||||
this.pageData();
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,248 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app" v-cloak>
|
||||
<el-row class="header navbar bg-white shadow">
|
||||
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-input placeholder="请输入内容" v-model="searchForm.searchKeyword" @keyup.enter.native="doSearch">
|
||||
<el-select v-model="searchForm.searchName" slot="prepend" placeholder="查询类型" style="width: 120px;">
|
||||
<el-option label="高校名称" value="gxname"></el-option>
|
||||
<el-option label="高校编号" value="gxid"></el-option>
|
||||
|
||||
</el-select>
|
||||
<el-button slot="append" icon="el-icon-search" @click="doSearch"></el-button>
|
||||
</el-input>
|
||||
</div>
|
||||
<div class="pull-right offscreen-right mt5" style="margin-right: 10px;">
|
||||
<el-button size="medium" @click="openAdd"><i class="ti-plus"></i> 新增高校</el-button>
|
||||
</div>
|
||||
</el-row>
|
||||
<el-row class="el-table-container">
|
||||
<el-table :data="tableData" style="width: 100%" size="small"
|
||||
:highlight-current-row="true" >
|
||||
<el-table-column label="高校编号" header-align="center" prop="gxid"
|
||||
:show-overflow-tooltip="true" align="center">
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="高校名称" header-align="center" prop="gxname"
|
||||
:show-overflow-tooltip="true" align="center">
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="操作" header-align="center" prop="website"
|
||||
:show-overflow-tooltip="true" align="center" width="300">
|
||||
<template slot-scope="scope">
|
||||
<el-row>
|
||||
<el-button type="primary" size="mini" @click="openedit(scope)" >修改
|
||||
</el-button>
|
||||
<el-button type="danger" size="mini" @click="deletegx(scope)" >删除</el-button>
|
||||
</el-row>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-row>
|
||||
|
||||
<el-dialog
|
||||
title="新增高校"
|
||||
:visible.sync="addDialogVisible"
|
||||
custom-class="ViewDialogClass"
|
||||
width="30%">
|
||||
<el-form :model="formData" ref="addForm" :rules="formRules" size="small" label-width="80px">
|
||||
<el-form-item prop="gxid" label="高校编码">
|
||||
<el-input maxlength="100" placeholder="高校编码"
|
||||
v-model="formData.gxid"
|
||||
auto-complete="off" type="text"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item prop="gxname" label="高校名称">
|
||||
<el-input maxlength="100" placeholder="高校名称"
|
||||
v-model="formData.gxname"
|
||||
auto-complete="off" type="text"></el-input>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="addDialogVisible = false">取 消</el-button>
|
||||
<el-button type="primary" @click="doAdd">确 定</el-button>
|
||||
</span>
|
||||
|
||||
</el-dialog>
|
||||
|
||||
<el-dialog
|
||||
title="编辑高校"
|
||||
:visible.sync="editDialogVisible"
|
||||
custom-class="ViewDialogClass"
|
||||
width="30%">
|
||||
<el-form :model="formData" ref="editForm" :rules="formRules" size="small" label-width="80px">
|
||||
<el-form-item prop="gxname" label="高校名称">
|
||||
<el-input maxlength="100" placeholder="高校名称"
|
||||
v-model="formData.gxname"
|
||||
auto-complete="off" tabindex="2" type="text"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
</el-form>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="editDialogVisible = false">取 消</el-button>
|
||||
<el-button type="primary" @click="doEdit">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
</div>
|
||||
<script>
|
||||
new Vue({
|
||||
el: "#app",
|
||||
data: function () {
|
||||
return {
|
||||
addDialogVisible: false,
|
||||
editDialogVisible: false,
|
||||
tableData: [],//后台取出的数据
|
||||
searchForm: {
|
||||
searchName: "",
|
||||
searchKeyword: "",
|
||||
},
|
||||
formData: {
|
||||
gxid: "",
|
||||
gxname: ""
|
||||
},
|
||||
formRules: {
|
||||
gxid: [
|
||||
{required: true, message: '高校编码', trigger: 'blur'}
|
||||
],
|
||||
gxname: [
|
||||
{required: true, message: '高校名称', trigger: 'blur'}
|
||||
]
|
||||
},
|
||||
options: [],
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
doplAdd: function () {
|
||||
var self = this;
|
||||
var url = base + "/platform/sys/unit/pleditDo";
|
||||
self.formData.parentId = self.parentUnit[self.parentUnit.length - 1] || "";
|
||||
$.post(url, self.formData, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
openAdd: function () {
|
||||
var self = this;
|
||||
this.addDialogVisible = true;
|
||||
this.formData = {};//打开新增窗口,表单先清空
|
||||
},
|
||||
doAdd: function () {
|
||||
var self = this;
|
||||
var url = base + "/platform/sys/gx/addDo";
|
||||
self.$refs["addForm"].validate(function (valid) {
|
||||
if (valid) {//表单验证通过
|
||||
$.post(url, self.formData, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
self.addDialogVisible = false;
|
||||
self.initTreeTable();
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
});
|
||||
},
|
||||
doEdit: function () {
|
||||
var self = this;
|
||||
var url = base + "/platform/sys/gx/editDo";
|
||||
self.$refs["editForm"].validate(function (valid) {
|
||||
if (valid) {//表单验证通过
|
||||
$.post(url, self.formData, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
self.editDialogVisible = false;
|
||||
self.initTreeTable();
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
});
|
||||
},
|
||||
initTreeTable: function () {
|
||||
var self = this;
|
||||
var url = base + "/platform/sys/gx/data";
|
||||
$.post(url, self.searchForm, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.tableData = data.data;
|
||||
}
|
||||
}, "json");
|
||||
|
||||
},
|
||||
|
||||
doSearch: function () {
|
||||
this.initTreeTable();
|
||||
},
|
||||
openedit: function (scope) {
|
||||
var self = this;
|
||||
$.post(base + "/platform/sys/gx/edit/" + scope.row.gxid, {}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.formData = data.data;//加载后台表单数据
|
||||
self.editDialogVisible = true;//打开编辑窗口
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
deletegx: function (scope) {
|
||||
var self = this;
|
||||
self.$confirm('此操作将删除 ' + scope.row.gxname, '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
callback: function (a, b) {
|
||||
if ("confirm" == a) {//确认后再执行
|
||||
$.post(base + "/platform/sys/gx/delete/" + scope.row.gxid, {}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
self.initTreeTable();
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
created: function () {
|
||||
this.initTreeTable();
|
||||
}
|
||||
});
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,911 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.el-loading-spinner i {
|
||||
font-size: 36px;
|
||||
}
|
||||
|
||||
.el-loading-spinner .el-loading-text {
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
|
||||
</style>
|
||||
<div id="app" v-cloak>
|
||||
<el-row>
|
||||
<transition name="el-zoom-in-center">
|
||||
<div v-show="!showRyxx" style="width: 100%;position: absolute;top: 0;left: 0">
|
||||
<el-row class="header navbar bg-white shadow">
|
||||
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-input placeholder="请输入内容" clearable v-model="searchForm.searchKeyword"
|
||||
@keyup.enter.native="doSearch">
|
||||
<el-select v-model="searchForm.searchName" slot="prepend" placeholder="查询类型"
|
||||
style="width: 120px;">
|
||||
<el-option label="单位名称" value="name"></el-option>
|
||||
|
||||
</el-select>
|
||||
</el-input>
|
||||
</div>
|
||||
<!-- <div class="btn-group tool-button mt5">-->
|
||||
<!-- <el-select v-model="searchForm.searchdj" placeholder="单位级别" clearable="true">-->
|
||||
<!-- <el-option-->
|
||||
<!-- v-for="item in optionsdj"-->
|
||||
<!-- :key="item.value"-->
|
||||
<!-- :label="item.label"-->
|
||||
<!-- :value="item.value">-->
|
||||
<!-- </el-option>-->
|
||||
<!-- </el-select>-->
|
||||
<!-- </div>-->
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-select v-model="searchForm.xqid" placeholder="所在校区" clearable="true">
|
||||
<el-option
|
||||
v-for="item in xqOption"
|
||||
:key="item.dq_id"
|
||||
:label="item.dq_name"
|
||||
:value="item.dq_id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-select v-model="searchForm.classid" placeholder="所属类别" clearable="true">
|
||||
<el-option
|
||||
v-for="item in classOption"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-button type="primary" slot="append" icon="el-icon-search"
|
||||
@click="doSearch"></el-button>
|
||||
</div>
|
||||
<!-- <div class="pull-right offscreen-right mt5">-->
|
||||
<!-- <el-button size="medium" @click="doplAdd"><i class="ti-plus"></i>批量更新单位</el-button>-->
|
||||
<!-- </div>-->
|
||||
<div class="pull-right offscreen-right mt5" style="margin-right: 10px;">
|
||||
<el-button size="medium" @click="openAdd"><i class="ti-plus"></i> 添加单位</el-button>
|
||||
</div>
|
||||
<div class="pull-right offscreen-right mt5" style="margin-right: 10px;">
|
||||
<el-button size="medium" @click="openSort">
|
||||
<i class="el-icon-sort"></i>
|
||||
排序
|
||||
</el-button>
|
||||
</div>
|
||||
</el-row>
|
||||
<el-row class="el-table-container">
|
||||
<el-table :data="tableData" style="width: 100%"
|
||||
:highlight-current-row="true" row-key="id" :key="tabKey" lazy
|
||||
:load="loadChild" :tree-props="{children: 'children', hasChildren: 'haschildren'}">
|
||||
|
||||
<el-table-column label="单位名称" header-align="center" prop="name"
|
||||
|
||||
:show-overflow-tooltip="true" align="left">
|
||||
</el-table-column>
|
||||
<el-table-column label="单位简称" header-align="center" prop="aliasname"
|
||||
:show-overflow-tooltip="true" align="center">
|
||||
</el-table-column>
|
||||
<el-table-column label="单位等级" header-align="center" prop="unitlevel"
|
||||
:show-overflow-tooltip="true" align="center">
|
||||
<template slot-scope="scope">
|
||||
<el-button v-if="scope.row.unitlevel==1" size="mini" type="success" round
|
||||
style=" vertical-align: middle;">1级
|
||||
</el-button>
|
||||
<el-button v-if="scope.row.unitlevel==2" size="mini" type="warning" round
|
||||
style=" vertical-align: middle;">2级
|
||||
</el-button>
|
||||
<el-button v-if="scope.row.unitlevel==3" size="mini" type="danger" round
|
||||
style=" vertical-align: middle;">3级
|
||||
</el-button>
|
||||
<el-button v-if="scope.row.unitlevel>3" size="mini" type="info" round
|
||||
style=" vertical-align: middle;">{{scope.row.unitlevel}}级
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="所在校区" header-align="center" prop="xqname"
|
||||
:show-overflow-tooltip="true" align="center">
|
||||
</el-table-column>
|
||||
<el-table-column label="类型" header-align="center" prop="classid"
|
||||
:show-overflow-tooltip="true" align="center">
|
||||
<template slot-scope="scope">
|
||||
{{classMap[scope.row.classid]==undefined?'暂无':classMap[scope.row.classid]}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<!-- <el-table-column label="所属高校" header-align="center" prop="gxname"-->
|
||||
<!-- :show-overflow-tooltip="true" align="center">-->
|
||||
<!-- </el-table-column>-->
|
||||
|
||||
|
||||
<el-table-column label="操作" header-align="center" prop="website"
|
||||
:show-overflow-tooltip="true" align="center" width="250">
|
||||
<template slot-scope="scope">
|
||||
<el-button size="mini"
|
||||
@click="openRyxx(scope.row.id)">人员信息
|
||||
</el-button>
|
||||
<el-button size="mini" type="primary"
|
||||
@click="dropdownCommand({type:'edit',id:scope.row.id,name:scope.row.name})">
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button size="mini" type="danger"
|
||||
@click="dropdownCommand({type:'delete',id:scope.row.id,name:scope.row.name})">
|
||||
删除
|
||||
</el-button>
|
||||
<!-- <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:'edit',id:scope.row.id,name:scope.row.name}">-->
|
||||
<!-- 修改-->
|
||||
<!-- </el-dropdown-item>-->
|
||||
<!-- <el-dropdown-item :command="{type:'delete',id:scope.row.id,name:scope.row.name}"-->
|
||||
<!-- v-if="scope.row.path!='0001'">-->
|
||||
<!-- 删除-->
|
||||
<!-- </el-dropdown-item>-->
|
||||
<!-- </el-dropdown-menu>-->
|
||||
<!-- </el-dropdown>-->
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-row>
|
||||
<!-- 分页-->
|
||||
<el-row class="el-pagination-container">
|
||||
<el-pagination
|
||||
@size-change="pageSizeChange"
|
||||
@current-change="pageNumberChange"
|
||||
:current-page="searchForm.pageNumber"
|
||||
:page-sizes="[10, 20, 30, 50]"
|
||||
:page-size="searchForm.pageSize"
|
||||
layout="total, sizes, prev, pager, next"
|
||||
:total="searchForm.totalCount">
|
||||
</el-pagination>
|
||||
</el-row>
|
||||
</div>
|
||||
</transition>
|
||||
<transition name="el-zoom-in-center">
|
||||
<div v-show="showRyxx" style="width: 100%;position: absolute;top: 0;left: 0">
|
||||
<el-row class="header navbar bg-white shadow">
|
||||
<div class="btn-group tool-button mt5 mr10">
|
||||
<el-button icon="el-icon-back" type="text" @click="showRyxx=!showRyxx">返回</el-button>
|
||||
</div>
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-input placeholder="请输入内容" clearable v-model="hyPageForm.searchKeyword"
|
||||
@keyup.enter.native="hyDoSearch">
|
||||
<el-select v-model="hyPageForm.searchName" slot="prepend" placeholder="查询类型"
|
||||
style="width: 120px;">
|
||||
<el-option label="姓名" value="u.username"></el-option>
|
||||
<el-option label="工号" value="u.loginanme"></el-option>
|
||||
</el-select>
|
||||
</el-input>
|
||||
</div>
|
||||
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-select v-model="hyPageForm.ishy" placeholder="是否会员" clearable="true" style="width: 120px">
|
||||
<el-option
|
||||
v-for="item in [{lab:'是',val:true},{lab:'否',val:false}]"
|
||||
:key="item.val"
|
||||
:label="item.lab"
|
||||
:value="item.val">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-button type="primary" slot="append" icon="el-icon-search"
|
||||
@click="hyDoSearch"></el-button>
|
||||
</div>
|
||||
|
||||
<div class="pull-right offscreen-right mt5" style="margin-right: 10px;">
|
||||
<el-button type="text" disabled><span style="font-size: 15px">{{unitData.name}}</span>
|
||||
</el-button>
|
||||
</div>
|
||||
|
||||
</el-row>
|
||||
|
||||
<el-row class="el-table-container">
|
||||
<el-table :data="hyTableData" size="medium" v-loading="tabloading">
|
||||
<el-table-column align="center" header-align="center" label="序号" type="index">
|
||||
<template scope="scope"><span>{{scope.$index+(hyPageForm.pageNumber - 1) * hyPageForm.pageSize + 1}} </span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="工号" show-overflow-tooltip
|
||||
prop="loginname"></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="姓名" show-overflow-tooltip
|
||||
prop="username"></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="性别" show-overflow-tooltip
|
||||
prop="sex"></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="电话" show-overflow-tooltip
|
||||
prop="mobile"></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="是否会员" show-overflow-tooltip
|
||||
prop="ishy">
|
||||
<template slot-scope="scope">
|
||||
<span v-if="scope.row.ishy">是</span>
|
||||
<span v-else>否</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="单位" show-overflow-tooltip
|
||||
prop="unitname"></el-table-column>
|
||||
<el-table-column align="center" header-align="center" label="院级工会" show-overflow-tooltip
|
||||
prop="unionname"></el-table-column>
|
||||
</el-table>
|
||||
</el-row>
|
||||
<el-row class="el-pagination-container">
|
||||
<el-pagination
|
||||
@size-change="hyPageSizeChange"
|
||||
@current-change="hyPageNumberChange"
|
||||
:current-page="hyPageForm.pageNumber"
|
||||
:page-sizes="[10, 20, 30, 50]"
|
||||
:page-size="hyPageForm.pageSize"
|
||||
layout="total, sizes, prev, pager, next"
|
||||
:total="hyPageForm.totalCount">
|
||||
</el-pagination>
|
||||
</el-row>
|
||||
|
||||
</div>
|
||||
</transition>
|
||||
</el-row>
|
||||
|
||||
|
||||
<el-dialog
|
||||
title="添加单位"
|
||||
:visible.sync="addDialogVisible"
|
||||
width="60%">
|
||||
<el-form :model="formData" ref="addForm" :rules="formRules" size="small" label-width="100px">
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="parentId" label="上级单位">
|
||||
<el-cascader
|
||||
:props="{checkStrictly: true}"
|
||||
style="width: 100%"
|
||||
tabindex="1"
|
||||
:options="options"
|
||||
:show-all-levels="false"
|
||||
v-model="parentUnit"
|
||||
:fetch-suggestions="unitQuery"
|
||||
@active-item-change="unitChange"
|
||||
@change="unitChange2"
|
||||
@select="unitSelect"
|
||||
placeholder="不选择则为顶级"
|
||||
></el-cascader>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="parentId" label="类  型">
|
||||
<el-select v-model="formData.classid" placeholder="类型" style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in classOption"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="name" label="单位名称">
|
||||
<el-input maxlength="100" placeholder="单位名称"
|
||||
v-model="formData.name"
|
||||
auto-complete="off" tabindex="2" type="text"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="aliasName" label="单位简称">
|
||||
<el-input maxlength="100" placeholder="单位简称"
|
||||
v-model="formData.aliasName"
|
||||
auto-complete="off" tabindex="3" type="text"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="xqid" label="所在校区">
|
||||
<el-select v-model="formData.xqid" clearable placeholder="所在校区" style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in xqOption"
|
||||
:key="item.dq_id"
|
||||
:label="item.dq_name"
|
||||
:value="item.dq_id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<!-- <el-form-item prop="unitcode" label="机构编码">-->
|
||||
<!-- <el-input maxlength="100" disabled placeholder="机构编码"-->
|
||||
<!-- v-model="formData.unitcode"-->
|
||||
<!-- auto-complete="off" tabindex="4" type="text"></el-input>-->
|
||||
<!-- </el-form-item>-->
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="telephone" label="联系电话">
|
||||
<el-input maxlength="100" placeholder="联系电话"
|
||||
v-model="formData.telephone"
|
||||
auto-complete="off" tabindex="6" type="text"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="email" label="单位邮箱">
|
||||
<el-input maxlength="100" placeholder="单位邮箱"
|
||||
v-model="formData.email"
|
||||
auto-complete="off" tabindex="7" type="text"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="website" label="单位网站">
|
||||
<el-input maxlength="100" placeholder="单位网站"
|
||||
v-model="formData.website"
|
||||
auto-complete="off" tabindex="8" type="text"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-form-item prop="address" label="单位地址">
|
||||
<el-input maxlength="100" placeholder="单位地址"
|
||||
v-model="formData.address"
|
||||
auto-complete="off" tabindex="5" type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="note" label="单位介绍">
|
||||
<el-input type="textarea" v-model="formData.note"></el-input>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="addDialogVisible = false">取 消</el-button>
|
||||
<el-button type="primary" @click="doAdd">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
|
||||
|
||||
<el-dialog
|
||||
title="编辑单位"
|
||||
:visible.sync="editDialogVisible"
|
||||
width="60%">
|
||||
<el-form :model="formData" ref="editForm" :rules="formRules" size="small" label-width="100px">
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="parentId" label="上级单位">
|
||||
<el-cascader
|
||||
:props="{checkStrictly: true}"
|
||||
style="width: 100%"
|
||||
tabindex="1"
|
||||
:options="options"
|
||||
:show-all-levels="false"
|
||||
v-model="parentUnit"
|
||||
:fetch-suggestions="unitQuery"
|
||||
@active-item-change="unitChange"
|
||||
@change="unitChange2"
|
||||
@select="unitSelect"
|
||||
placeholder="不选择则为顶级"
|
||||
></el-cascader>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="parentId" label="类  型">
|
||||
<el-select v-model="formData.classid" placeholder="类型" style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in classOption"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="name" label="单位名称">
|
||||
<el-input maxlength="100" placeholder="单位名称"
|
||||
v-model="formData.name"
|
||||
auto-complete="off" tabindex="2" type="text"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="aliasName" label="单位简称">
|
||||
<el-input maxlength="100" placeholder="单位简称"
|
||||
v-model="formData.aliasName"
|
||||
auto-complete="off" tabindex="3" type="text"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="xqid" label="所在校区">
|
||||
<el-select v-model="formData.xqid" clearable placeholder="所在校区" style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in xqOption"
|
||||
:key="item.dq_id"
|
||||
:label="item.dq_name"
|
||||
:value="item.dq_id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<!-- <el-form-item prop="unitcode" label="机构编码">-->
|
||||
<!-- <el-input maxlength="100" disabled placeholder="机构编码"-->
|
||||
<!-- v-model="formData.unitcode"-->
|
||||
<!-- auto-complete="off" tabindex="4" type="text"></el-input>-->
|
||||
<!-- </el-form-item>-->
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="telephone" label="联系电话">
|
||||
<el-input maxlength="100" placeholder="联系电话"
|
||||
v-model="formData.telephone"
|
||||
auto-complete="off" tabindex="6" type="text"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="email" label="单位邮箱">
|
||||
<el-input maxlength="100" placeholder="单位邮箱"
|
||||
v-model="formData.email"
|
||||
auto-complete="off" tabindex="7" type="text"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="website" label="单位网站">
|
||||
<el-input maxlength="100" placeholder="单位网站"
|
||||
v-model="formData.website"
|
||||
auto-complete="off" tabindex="8" type="text"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-form-item prop="address" label="单位地址">
|
||||
<el-input maxlength="100" placeholder="单位地址"
|
||||
v-model="formData.address"
|
||||
auto-complete="off" tabindex="5" type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="note" label="单位介绍">
|
||||
<el-input type="textarea" v-model="formData.note"></el-input>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="editDialogVisible = false">取 消</el-button>
|
||||
<el-button type="primary" @click="doEdit">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
|
||||
|
||||
<el-dialog
|
||||
title="单位排序"
|
||||
:visible.sync="sortDialogVisible"
|
||||
width="50%">
|
||||
<el-tree
|
||||
ref="sortMenuTree"
|
||||
:data="sortMenuData"
|
||||
draggable
|
||||
:allow-drop="sortAllowDrop"
|
||||
node-key="id"
|
||||
:props="defaultProps"
|
||||
>
|
||||
<span class="custom-tree-node" slot-scope="scope">
|
||||
<span>{{ scope.node.label }}</span>
|
||||
</span>
|
||||
</el-tree>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="sortDialogVisible = false">取 消</el-button>
|
||||
<el-button type="primary" @click="doSort">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
</div>
|
||||
<script>
|
||||
new Vue({
|
||||
el: "#app",
|
||||
data: function () {
|
||||
return {
|
||||
tabKey: new Date().getTime(),
|
||||
defaultProps: {
|
||||
children: 'children',
|
||||
label: 'label'
|
||||
},
|
||||
addDialogVisible: false,
|
||||
editDialogVisible: false,
|
||||
sortDialogVisible: false,
|
||||
sortMenuData: [],
|
||||
tableData: [],//后台取出的数据
|
||||
classOption: [],
|
||||
classMap: {},
|
||||
optionsdj: [{
|
||||
value: '1',
|
||||
label: '一级单位'
|
||||
}, {
|
||||
value: '2',
|
||||
label: '二级单位'
|
||||
}, {
|
||||
value: '3',
|
||||
label: '三级单位'
|
||||
}]
|
||||
,
|
||||
searchForm: {
|
||||
pid: "",
|
||||
searchName: "name",
|
||||
searchKeyword: "",
|
||||
searchdj: "",
|
||||
pageNumber: 1,
|
||||
pageSize: 10,
|
||||
totalCount: 0,
|
||||
},
|
||||
hyPageForm: {
|
||||
searchName: "u.username",
|
||||
searchKeyword: "",
|
||||
pageNumber: 1,
|
||||
pageSize: 10,
|
||||
totalCount: 0,
|
||||
},
|
||||
formData: {
|
||||
id: "",
|
||||
parentId: ""
|
||||
},
|
||||
formRules: {
|
||||
name: [
|
||||
{required: true, message: '单位名称', trigger: 'blur'}
|
||||
],
|
||||
email: [
|
||||
{required: false, message: '单位邮箱', trigger: 'blur'},
|
||||
{type: 'email', message: '请输入正确的邮箱地址', trigger: ['blur', 'change']}
|
||||
]
|
||||
},
|
||||
options: [],
|
||||
parentUnit: [],
|
||||
xqOption: [],
|
||||
showRyxx: false,
|
||||
unitData: {},
|
||||
hyTableData: [],
|
||||
tabloading: false,
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
hyDoSearch() {
|
||||
this.hyPageForm.pageNumber = 1
|
||||
this.hyPageData()
|
||||
},
|
||||
hyPageOrder(column) {//按字段排序
|
||||
this.hyPageForm.pageOrderName = column.prop;
|
||||
this.hyPageForm.pageOrderBy = column.order;
|
||||
this.hyPageData();
|
||||
},
|
||||
hyPageNumberChange(val) {//页码更新操作
|
||||
this.hyPageForm.pageNumber = val;
|
||||
this.hyPageData();
|
||||
},
|
||||
hyPageSizeChange(val) {//分页大小更新操作
|
||||
this.hyPageForm.pageSize = val;
|
||||
this.hyPageData();
|
||||
},
|
||||
hyPageData() {//加载分页数据
|
||||
sublime.showLoadingbar();//显示loading
|
||||
this.tabloading = true
|
||||
$.post(base + "/platform/sys/unit/userPageData", this.hyPageForm, (data) => {
|
||||
sublime.closeLoadingbar();//关闭loading
|
||||
if (data.code == 0) {
|
||||
this.hyTableData = data.data.list;
|
||||
this.hyPageForm.totalCount = data.data.totalCount;
|
||||
} else {
|
||||
this.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
this.tabloading = false
|
||||
}, "json");
|
||||
},
|
||||
|
||||
openRyxx(id) {
|
||||
$.post(base + "/platform/sys/unit/edit/" + id, {}, (data) => {
|
||||
if (data.code == 0) {
|
||||
this.unitData = data.data;//加载后台表单数据
|
||||
this.showRyxx = true;//打开编辑窗口
|
||||
this.hyPageForm.unitid = this.unitData.id
|
||||
this.hyDoSearch()
|
||||
} else {
|
||||
this.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
//递归获取所有的ID值
|
||||
getTreeIds: function (ids, data) {
|
||||
var self = this;
|
||||
data.forEach(function (obj) {
|
||||
ids.push(obj.id);
|
||||
if (obj.children && obj.children.length > 0) {
|
||||
self.getTreeIds(ids, obj.children);
|
||||
}
|
||||
});
|
||||
},
|
||||
//提交排序后的数据
|
||||
doSort: function () {
|
||||
var self = this;
|
||||
var ids = [];
|
||||
self.getTreeIds(ids, self.sortMenuData);
|
||||
|
||||
var loading = self.$loading({
|
||||
lock: true,
|
||||
text: '数据正在提交中,请稍后...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: 'rgba(0, 0, 0, 0.7)'
|
||||
});
|
||||
|
||||
$.post(base + "/platform/sys/unit/sortDo", {ids: ids.toString()}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
self.sortDialogVisible = false;
|
||||
self.initTreeTable();
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
loading.close()
|
||||
}, "json");
|
||||
},
|
||||
//排序树加载
|
||||
sortMenuLoad: function () {
|
||||
var self = this;
|
||||
$.post(base + "/platform/sys/unit/unitAll", {}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.sortMenuData = data.data;
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
//排序树控制不可跨级拖拽
|
||||
sortAllowDrop: function (moveNode, inNode, type) {
|
||||
if (moveNode.data.parentId == inNode.data.parentId) {
|
||||
return type == 'prev';
|
||||
}
|
||||
},
|
||||
//打开排序功能
|
||||
openSort: function () {
|
||||
this.sortDialogVisible = true;
|
||||
this.sortMenuLoad();
|
||||
},
|
||||
pageNumberChange: function (val) {//页码更新操作
|
||||
this.searchForm.pageNumber = val;
|
||||
this.initTreeTable();
|
||||
},
|
||||
pageSizeChange: function (val) {//分页大小更新操作
|
||||
this.searchForm.pageSize = val;
|
||||
this.initTreeTable();
|
||||
},
|
||||
//级联选择器从后台动态获取下级数据
|
||||
loadTree: function (val, cb) {
|
||||
var url = base + "/platform/sys/unit/tree";
|
||||
$.post(url, {pid: val}, function (data) {
|
||||
if (data.code == 0) {
|
||||
cb(data.data);
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
unitQuery: function (queryString, cb) {
|
||||
cb(this.options);
|
||||
},
|
||||
unitSelect: function (val) {
|
||||
},
|
||||
unitTree: function (table, data, pid) {//树形数据的级联查找很是头疼
|
||||
var self = this;
|
||||
table.findIndex(function (obj) {
|
||||
if (pid == obj.value) {
|
||||
obj.children = data;
|
||||
} else if (obj.children && obj.children.length > 0) {
|
||||
self.unitTree(obj.children, data, pid);
|
||||
}
|
||||
});
|
||||
},
|
||||
unitChange2: function (val) {
|
||||
var self = this;
|
||||
if (val[0] == "root") {
|
||||
self.parentUnit = [];
|
||||
}
|
||||
},
|
||||
unitChange: function (val) {
|
||||
var self = this;
|
||||
var pid = val[val.length - 1];
|
||||
self.parentUnit = val;
|
||||
this.loadTree(pid, function (tree) {
|
||||
self.unitTree(self.options, tree, pid);
|
||||
});
|
||||
},
|
||||
doplAdd: function () {
|
||||
var self = this;
|
||||
self.$confirm('是否确认批量更新单位?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
callback: function (a, b) {
|
||||
if ("confirm" == a) {//确认后再执行
|
||||
var url = base + "/platform/sys/unit/pleditDo";
|
||||
self.formData.parentId = self.parentUnit[self.parentUnit.length - 1] || "";
|
||||
$.post(url, self.formData, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
openAdd: function () {
|
||||
var self = this;
|
||||
this.addDialogVisible = true;
|
||||
this.formData = {};//打开新增窗口,表单先清空
|
||||
this.parentUnit = [];
|
||||
this.loadTree("", function (val) {
|
||||
self.options = val;
|
||||
});
|
||||
},
|
||||
doAdd: function () {
|
||||
var self = this;
|
||||
var url = base + "/platform/sys/unit/addDo";
|
||||
self.$refs["addForm"].validate(function (valid) {
|
||||
if (valid) {//表单验证通过
|
||||
self.formData.parentId = self.parentUnit[self.parentUnit.length - 1] || "";
|
||||
$.post(url, self.formData, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
self.addDialogVisible = false;
|
||||
self.initTreeTable();
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
});
|
||||
},
|
||||
doEdit: function () {
|
||||
var self = this;
|
||||
var url = base + "/platform/sys/unit/editDo";
|
||||
self.$refs["editForm"].validate(function (valid) {
|
||||
if (valid) {//表单验证通过
|
||||
self.formData.parentId = self.parentUnit[self.parentUnit.length - 1];
|
||||
$.post(url, self.formData, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
self.editDialogVisible = false;
|
||||
self.initTreeTable();
|
||||
self.tabKey = new Date().getTime()
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
});
|
||||
},
|
||||
initTreeTable: function () {
|
||||
var self = this;
|
||||
var url = base + "/platform/sys/unit/child";
|
||||
$.post(url, self.searchForm, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.tableData = data.data.list;
|
||||
self.tableData.forEach(function (v) {
|
||||
v.hasChildren = v.haschildren
|
||||
}
|
||||
)
|
||||
self.searchForm.totalCount = data.data.totalCount
|
||||
}
|
||||
}, "json");
|
||||
|
||||
},
|
||||
loadChild: function (tree, treeNode, resolve) {
|
||||
var url = base + "/platform/sys/unit/child";
|
||||
$.post(url, {pid: tree.id}, function (data) {
|
||||
if (data.code == 0) {
|
||||
resolve(data.data.list);
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
,
|
||||
doSearch: function () {
|
||||
this.searchForm.pageNumber = 1
|
||||
this.initTreeTable();
|
||||
}
|
||||
,
|
||||
dropdownCommand: function (command) {//监听下拉框事件
|
||||
var self = this;
|
||||
if ("edit" == command.type) {
|
||||
$.post(base + "/platform/sys/unit/edit/" + command.id, {}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.formData = data.data;//加载后台表单数据
|
||||
|
||||
self.loadTree("", function (val) {
|
||||
self.options = val;
|
||||
});
|
||||
self.parentUnit = [data.data.parentId]
|
||||
|
||||
self.editDialogVisible = true;//打开编辑窗口
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
if ("delete" == command.type) {
|
||||
self.$confirm('此操作将删除 ' + command.name, '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
callback: function (a, b) {
|
||||
if ("confirm" == a) {//确认后再执行
|
||||
$.post(base + "/platform/sys/unit/delete/" + command.id, {}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
self.tabKey = new Date().getTime()
|
||||
self.initTreeTable();
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
,
|
||||
getUnitClass: function () {
|
||||
var self = this
|
||||
$.get('/platform/sys/unit/getUnitClass', function (data) {
|
||||
if (data.code == 0) {
|
||||
self.classOption = data.data
|
||||
self.classOption.forEach(function (val) {
|
||||
self.classMap[val.id] = val.name
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
getXqData: function () {
|
||||
var self = this
|
||||
$.get('/platform/sys/unit/getXqData', function (data) {
|
||||
if (data.code == 0) {
|
||||
self.xqOption = data.data
|
||||
}
|
||||
})
|
||||
}
|
||||
},
|
||||
created: function () {
|
||||
this.getUnitClass();
|
||||
this.getXqData();
|
||||
this.initTreeTable();
|
||||
}
|
||||
})
|
||||
;
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,90 @@
|
||||
<div class="el-dialog__header">
|
||||
<button type="button" data-dismiss="modal" aria-hidden="true" aria-label="Close" class="el-dialog__headerbtn"><i
|
||||
class="el-dialog__close el-icon el-icon-close"></i></button>
|
||||
<h4 class="modal-title">${msg['index.custommenu']}</h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="list-group" style="text-align: center;">
|
||||
<table width="88%" id="menuTable">
|
||||
<!--#
|
||||
var firstMenus=@shiro.getPrincipalProperty('firstMenus');
|
||||
var secondMenus=@shiro.getPrincipalProperty('secondMenus');
|
||||
var customMenu=@shiro.getPrincipalProperty('customMenu');
|
||||
#-->
|
||||
<!--#for(firstMenu in firstMenus){#-->
|
||||
<tr>
|
||||
<td width="20%" align="left"><strong><!--#if(lang=="zh_CN"){#-->${firstMenu.name}<!--#}else{#-->${firstMenu.aliasName}<!--#}#--></strong></td>
|
||||
<td width="80%" align="left">
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<!--# if(!isEmpty(@secondMenus.get(firstMenu.path))){
|
||||
for(secondMenu in @secondMenus.get(firstMenu.path)){
|
||||
#-->
|
||||
<tr>
|
||||
<td width="20%" align="left" style="padding-left: 20px;"><!--#if(lang=="zh_CN"){#-->${secondMenu.name}<!--#}else{#-->${secondMenu.aliasName}<!--#}#--></td>
|
||||
<td width="80%" align="left">
|
||||
<!--# if(!isEmpty(@secondMenus.get(secondMenu.path))){
|
||||
for(thMenu in @secondMenus.get(secondMenu.path)){ #-->
|
||||
<input type="checkbox" value="${thMenu.id}" onclick="chk()" <!--#if(customMenu!=null&&@customMenu.indexOf(thMenu.id)>-1){#-->checked<!--#}#-->>
|
||||
<!--#if(lang=="zh_CN"){#-->${thMenu.name}<!--#}else{#-->${thMenu.aliasName}<!--#}#-->
|
||||
<!--#}}#-->
|
||||
</td>
|
||||
</tr>
|
||||
<!--#}}#-->
|
||||
<!--#}#-->
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div class="el-dialog__footer">
|
||||
<span class="dialog-footer">
|
||||
<button type="button" class="el-button el-button--default" data-dismiss="modal">
|
||||
<span>${msg['system.cancel']}</span>
|
||||
</button>
|
||||
<button type="button" class="el-button el-button--primary" id="okCustom">
|
||||
<span>${msg['system.confirm']}</span>
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
function chk(){
|
||||
var ids=[];
|
||||
$("#menuTable").find("input[type=checkbox]").each(function(){
|
||||
if($(this).prop("checked")){
|
||||
ids.push($(this).val());
|
||||
}
|
||||
});
|
||||
if(ids.length>5){
|
||||
ELEMENT.Message({
|
||||
message: "最多可选择5个菜单",
|
||||
type: 'error'
|
||||
});
|
||||
return ids;
|
||||
}
|
||||
return ids;
|
||||
}
|
||||
$(function () {
|
||||
$("#okCustom").on("click",function(){
|
||||
var ids =chk();
|
||||
if (ids.length<6) {
|
||||
$('#homeDetail').modal('hide');
|
||||
$.post("${base}/platform/sys/user/customDo", {ids: ids.toString()}, function (data) {
|
||||
if (data.code == 0) {
|
||||
ELEMENT.Message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
setTimeout(function () {
|
||||
window.location.reload();
|
||||
},520);
|
||||
} else {
|
||||
ELEMENT.Message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,60 @@
|
||||
<div class="el-dialog__header">
|
||||
<button type="button" data-dismiss="modal" aria-hidden="true" aria-label="Close" class="el-dialog__headerbtn"><i
|
||||
class="el-dialog__close el-icon el-icon-close"></i></button>
|
||||
<h4 class="modal-title">${msg['index.user.mode']}</h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<form id="modeForm" role="form" class="form-horizontal parsley-form" method="post">
|
||||
<div class="row" style="padding-top: 10px;">
|
||||
<div class="col-lg-12">
|
||||
<div class="form">
|
||||
<div class="col-sm-8">
|
||||
<input name="mode" value="true" type="radio"
|
||||
<!--#if(@shiro.getPrincipalProperty('loginPjax')){#-->checked<!--#}#--> > PJAX加载方式<br>优点:占用带宽少,加载速度快;<br>缺点:不能使用前进、后退功能。
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" style="padding-top: 10px;">
|
||||
<div class="col-lg-12">
|
||||
<div class="form">
|
||||
<div class="col-sm-8">
|
||||
<input name="mode" value="false" type="radio"
|
||||
<!--#if(!@shiro.getPrincipalProperty('loginPjax')){#-->checked<!--#}#--> > 传统加载方式<br>优点:可以使用前进、后退功能;<br>缺点:页面会重载、刷新,占用带宽大。
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</form>
|
||||
</div>
|
||||
<div class="el-dialog__footer">
|
||||
<span class="dialog-footer">
|
||||
<button type="button" class="el-button el-button--default" data-dismiss="modal">
|
||||
<span>${msg['system.cancel']}</span>
|
||||
</button>
|
||||
<button type="button" class="el-button el-button--primary" id="okMode">
|
||||
<span>${msg['system.confirm']}</span>
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
$(function () {
|
||||
$("#okMode").on("click", function () {
|
||||
$.post("${base}/platform/sys/user/modeDo", {mode: $("input[type='radio'][name='mode']:checked").val()}, function (data) {
|
||||
if (data.code == 0) {
|
||||
$('#homeDetail').modal('hide');
|
||||
ELEMENT.Message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
} else {
|
||||
ELEMENT.Message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@@ -0,0 +1,689 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<div id="app" v-cloak>
|
||||
<el-row class="header navbar bg-white shadow">
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-cascader :props="props" v-model="parentUnitSearch" placeholder="请选择单位"></el-cascader>
|
||||
</div>
|
||||
<div class="btn-group tool-button mt5">
|
||||
<el-input placeholder="请输入内容" v-model="pageForm.searchKeyword" @keyup.enter.native="doSearch">
|
||||
<el-select v-model="pageForm.searchName" slot="prepend" placeholder="查询类型" style="width: 120px;">
|
||||
<el-option label="用户名" value="loginname"></el-option>
|
||||
<el-option label="姓名" value="username"></el-option>
|
||||
<el-option label="手机" value="mobile"></el-option>
|
||||
<el-option label="邮箱" value="email"></el-option>
|
||||
</el-select>
|
||||
<el-button slot="append" icon="el-icon-search" @click="doSearch"></el-button>
|
||||
</el-input>
|
||||
</div>
|
||||
<div class="pull-right offscreen-right mt5">
|
||||
<el-button size="medium" @click="openAdd"><i class="ti-plus"></i> 新建用户</el-button>
|
||||
<el-dropdown @command="batchCommand">
|
||||
<el-button size="medium">
|
||||
批量操作
|
||||
<span class="ti-angle-down"></span>
|
||||
</el-button>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item :command="{type:'delete'}">
|
||||
批量删除
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item :command="{type:'export'}">
|
||||
导出XLS
|
||||
</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</div>
|
||||
</el-row>
|
||||
<el-row class="el-table-container">
|
||||
<el-table
|
||||
:key="tableKey"
|
||||
:data="tableData"
|
||||
@sort-change='pageOrder'
|
||||
size="small"
|
||||
header-align="center"
|
||||
:default-sort = "{prop: 'opAt', order: 'descending'}"
|
||||
style="width: 100%"
|
||||
@selection-change="handleSelectionChange"
|
||||
>
|
||||
<el-table-column
|
||||
type="selection"
|
||||
width="35">
|
||||
</el-table-column>
|
||||
<el-table-column type="expand">
|
||||
<template slot-scope="scope">
|
||||
<el-form label-position="left" inline class="el-table-expand" size="mini">
|
||||
<el-form-item label="Email">
|
||||
<span>{{ scope.row.email }}</span>
|
||||
</el-form-item>
|
||||
<el-form-item label="最后登录时间">
|
||||
<span>
|
||||
{{ formatAt(scope.row.loginAt) }}</span>
|
||||
</el-form-item>
|
||||
<el-form-item label="手机号">
|
||||
<span>{{ scope.row.mobile }}</span>
|
||||
</el-form-item>
|
||||
<el-form-item label="最后登录IP">
|
||||
<span>{{ scope.row.loginIp }}</span>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
sortable
|
||||
prop="loginname"
|
||||
label="用户名"
|
||||
header-align="center">
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="username"
|
||||
label="姓名"
|
||||
header-align="center"
|
||||
:show-overflow-tooltip="true">
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="unit"
|
||||
label="所属单位"
|
||||
header-align="center"
|
||||
align="center"
|
||||
:show-overflow-tooltip="true"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<span v-if="scope.row.unit!=null">
|
||||
{{scope.row.unit.name}}
|
||||
</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
sortable
|
||||
prop="disabled"
|
||||
label="帐号状态"
|
||||
header-align="center"
|
||||
align="center"
|
||||
:show-overflow-tooltip="true"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<i v-if="scope.row.disabled" class="fa fa-circle text-danger ml5"></i>
|
||||
<i v-if="!scope.row.disabled" class="fa fa-circle text-success ml5"></i>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
sortable
|
||||
prop="userOnline"
|
||||
label="在线状态"
|
||||
header-align="center"
|
||||
align="center"
|
||||
:show-overflow-tooltip="true"
|
||||
>
|
||||
<template slot-scope="scope">
|
||||
<i v-if="scope.row.userOnline" class="text-success ml5">在线</i>
|
||||
<i v-if="!scope.row.userOnline" class="text-danger ml5">离线</i>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
sortable
|
||||
prop="opAt"
|
||||
label="操作时间"
|
||||
header-align="center" align="center">
|
||||
<template slot-scope="scope">
|
||||
{{formatAt(scope.row.opAt)}}
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="userOnline"
|
||||
label="操作"
|
||||
width="120">
|
||||
<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:'role',id:scope.row.id,loginname:scope.row.loginname}">
|
||||
查看权限
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item :command="{type:'reset',id:scope.row.id,loginname:scope.row.loginname}">
|
||||
重置密码
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item divided :command="{type:'enable',id:scope.row.id,row:scope.row}">
|
||||
启用
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item :command="{type:'disable',id:scope.row.id,row:scope.row}">
|
||||
禁用
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item divided :command="{type:'edit',id:scope.row.id}">
|
||||
修改
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item :command="{type:'delete',id:scope.row.id,loginname:scope.row.loginname}"
|
||||
v-if="scope.row.loginname!='superadmin'">
|
||||
删除
|
||||
</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</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, jumper"
|
||||
:total="pageForm.totalCount">
|
||||
</el-pagination>
|
||||
</el-row>
|
||||
<el-dialog
|
||||
title="新建用户"
|
||||
:visible.sync="addDialogVisible"
|
||||
:close-on-click-modal="false"
|
||||
width="40%">
|
||||
<el-form :model="formData" ref="addForm" :rules="formRules" size="small" label-width="80px">
|
||||
<el-form-item class="is-required" prop="parentUnit" label="所属单位" label-width="80px">
|
||||
<el-cascader :props="props" v-model="parentUnit" placeholder="请选择单位" style="width: 100%"></el-cascader>
|
||||
</el-form-item>
|
||||
<el-form-item prop="loginname" label="用户名">
|
||||
<el-input maxlength="100" placeholder="用户名"
|
||||
v-model="formData.loginname"
|
||||
auto-complete="off" tabindex="2" type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="username" label="姓名">
|
||||
<el-input maxlength="20" placeholder="姓名"
|
||||
v-model="formData.username"
|
||||
auto-complete="off" tabindex="3" type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="password" label="登录密码">
|
||||
<el-input maxlength="20" placeholder="登录密码" v-model="formData.password"
|
||||
auto-complete="off" tabindex="4" type="password"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="passwordAgain" label="确认密码">
|
||||
<el-input maxlength="20" placeholder="再输一次密码"
|
||||
v-model="formData.passwordAgain"
|
||||
auto-complete="off" tabindex="5" type="password"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="mobile" label="手机号码">
|
||||
<el-input maxlength="20" placeholder="手机号码"
|
||||
v-model="formData.mobile"
|
||||
auto-complete="off" tabindex="6" type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="email" label="单位邮箱">
|
||||
<el-input maxlength="100" placeholder="单位邮箱"
|
||||
v-model="formData.email"
|
||||
auto-complete="off" tabindex="7" type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="disabled" label="启用状态">
|
||||
<el-switch
|
||||
v-model="formData.disabled"
|
||||
active-color="#ff4949"
|
||||
inactive-color="#13ce66">
|
||||
</el-switch>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="addDialogVisible = false">取 消</el-button>
|
||||
<el-button type="primary" @click="doAdd">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
<el-dialog
|
||||
title="编辑用户"
|
||||
:visible.sync="editDialogVisible"
|
||||
:close-on-click-modal="false"
|
||||
width="40%">
|
||||
<el-form :model="formData" ref="editForm" :rules="editRules" size="small" label-width="80px">
|
||||
<el-form-item prop="loginname" label="用户名">
|
||||
{{formData.loginname}}
|
||||
</el-form-item>
|
||||
<el-form-item prop="username" label="姓名">
|
||||
<el-input maxlength="20" placeholder="姓名"
|
||||
v-model="formData.username"
|
||||
auto-complete="off" tabindex="3" type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="mobile" label="手机号码">
|
||||
<el-input maxlength="20" placeholder="手机号码"
|
||||
v-model="formData.mobile"
|
||||
auto-complete="off" tabindex="6" type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="email" label="单位邮箱">
|
||||
<el-input maxlength="100" placeholder="单位邮箱"
|
||||
v-model="formData.email"
|
||||
auto-complete="off" tabindex="7" type="text"></el-input>
|
||||
</el-form-item>
|
||||
<el-form-item prop="disabled" label="启用状态">
|
||||
<el-switch
|
||||
v-model="formData.disabled"
|
||||
active-color="#ff4949"
|
||||
inactive-color="#13ce66">
|
||||
</el-switch>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="editDialogVisible = false">取 消</el-button>
|
||||
<el-button type="primary" @click="doEdit">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
<el-dialog
|
||||
:title="roleDialogTitle"
|
||||
:visible.sync="roleDialogVisible"
|
||||
width="70%">
|
||||
<el-table :data="roleTableData" style="width: 100%" size="small"
|
||||
:highlight-current-row="true" row-key="id" lazy
|
||||
:load="loadRoleChild">
|
||||
<el-table-column label="菜单名称" header-align="center" prop="name"
|
||||
width="200" :show-overflow-tooltip="true" align="left">
|
||||
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="URL" header-align="center" prop="href"
|
||||
:show-overflow-tooltip="true">
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="资源类型" header-align="center" prop="type"
|
||||
:show-overflow-tooltip="true" align="center">
|
||||
|
||||
<template slot-scope="scope">
|
||||
<i v-if="scope.row.type=='menu'" style="font-weight: bold">菜单</i>
|
||||
<i v-if="scope.row.type=='data'">数据</i>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="权限标识" header-align="center" prop="permission"
|
||||
:show-overflow-tooltip="true">
|
||||
</el-table-column>
|
||||
|
||||
</el-table>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="roleDialogVisible = false">关 闭</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
</div>
|
||||
<script>
|
||||
new Vue({
|
||||
el: "#app",
|
||||
data: function () {
|
||||
var self = this;
|
||||
var validateLoginname = function (rule, value, callback) {
|
||||
var regex = new RegExp("^[a-zA-Z][a-zA-Z0-9_]{1,19}$");
|
||||
if (!regex.test(value)) {
|
||||
callback(new Error('用户名以字母开头2-20字,允许使用字母/数字/下划线'));
|
||||
} else {
|
||||
callback();
|
||||
}
|
||||
};
|
||||
var validatePass = function (rule, value, callback) {
|
||||
if (value !== self.formData.password) {
|
||||
callback(new Error('两次输入密码不一致!'));
|
||||
} else {
|
||||
callback();
|
||||
}
|
||||
};
|
||||
var validateUnit = function (rule, value, callback) {
|
||||
if (self.parentUnit.length < 1 || self.parentUnit[self.parentUnit.length - 1] == ""|| self.parentUnit[self.parentUnit.length - 1] == "root") {
|
||||
callback(new Error('请选择所属单位!'));
|
||||
} else {
|
||||
callback();
|
||||
}
|
||||
};
|
||||
return {
|
||||
addDialogVisible: false,
|
||||
editDialogVisible: false,
|
||||
roleDialogVisible: false,
|
||||
treeData: {
|
||||
label: 'name',
|
||||
children: 'zones',
|
||||
id: 'id',
|
||||
isLeaf: 'leaf'
|
||||
},
|
||||
tableData: [],
|
||||
tableKey:"",
|
||||
options: [],
|
||||
parentUnit: [],
|
||||
parentUnitSearch:[],
|
||||
pageForm: {
|
||||
searchUnit: "",
|
||||
searchName: "",
|
||||
searchKeyword: "",
|
||||
pageNumber: 1,
|
||||
pageSize: 10,
|
||||
totalCount: 0,
|
||||
pageOrderName: "",
|
||||
pageOrderBy: ""
|
||||
},
|
||||
formData: {
|
||||
id: "",
|
||||
unitid: "",
|
||||
disabled: false
|
||||
},
|
||||
formRules: {
|
||||
parentUnit: [
|
||||
{validator: validateUnit, trigger: ['blur', 'change']}
|
||||
],
|
||||
loginname: [
|
||||
{required: true, message: '用户名', trigger: ['blur', 'change']},
|
||||
{validator: validateLoginname, trigger: ['blur', 'change']}
|
||||
],
|
||||
username: [
|
||||
{required: true, message: '姓名', trigger: ['blur', 'change']}
|
||||
],
|
||||
email: [
|
||||
{required: false, message: '邮箱地址', trigger: ['blur', 'change']},
|
||||
{type: 'email', message: '请输入正确的邮箱地址', trigger: ['blur', 'change']}
|
||||
],
|
||||
mobile: [
|
||||
{required: false, message: '手机号码', trigger: ['blur', 'change']},
|
||||
{pattern: /^1[3456789]\d{9}$/, message: '请输入正确的手机号码'}
|
||||
],
|
||||
password: [
|
||||
{required: true, message: '请输入密码', trigger: 'blur'},
|
||||
{min: 3, max: 20, message: '密码长度必须是3-20位', trigger: 'change'}
|
||||
],
|
||||
passwordAgain: [
|
||||
{required: true, message: '请再次输入新密码', trigger: 'blur'},
|
||||
{validator: validatePass, trigger: 'change'}
|
||||
]
|
||||
},
|
||||
editRules: {
|
||||
username: [
|
||||
{required: true, message: '姓名', trigger: ['blur', 'change']}
|
||||
],
|
||||
email: [
|
||||
{required: false, message: '邮箱地址', trigger: ['blur', 'change']},
|
||||
{type: 'email', message: '请输入正确的邮箱地址', trigger: ['blur', 'change']}
|
||||
],
|
||||
mobile: [
|
||||
{required: false, message: '手机号码', trigger: ['blur', 'change']},
|
||||
{pattern: /^1[3456789]\d{9}$/, message: '请输入正确的手机号码'}
|
||||
],
|
||||
},
|
||||
roleDialogTitle: "查看用户权限",
|
||||
roleTableData: [],//treeTable后台取出的数据
|
||||
userId: "",//当前用户ID
|
||||
multipleSelection: [],
|
||||
props: {
|
||||
lazy: true,
|
||||
checkStrictly:true,
|
||||
multiple:false,
|
||||
lazyLoad: function (node, resolve) {
|
||||
var url = base + "/platform/sys/unit/tree";
|
||||
$.post(url, {pid: node.value}, function (data) {
|
||||
if (data.code == 0) {
|
||||
resolve(data.data);
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
pageOrder: function (column) {//按字段排序
|
||||
this.pageForm.pageOrderName = column.prop;
|
||||
this.pageForm.pageOrderBy = column.order;
|
||||
this.pageData();
|
||||
},
|
||||
pageNumberChange: function (val) {//页码更新操作
|
||||
this.pageForm.pageNumber = val;
|
||||
this.pageData();
|
||||
},
|
||||
pageSizeChange: function (val) {//分页大小更新操作
|
||||
this.pageForm.pageSize = val;
|
||||
this.pageData();
|
||||
},
|
||||
pageData: function () {//加载分页数据
|
||||
var self = this;
|
||||
sublime.showLoadingbar();//显示loading
|
||||
$.post(base + "/platform/sys/user/data", self.pageForm, function (data) {
|
||||
sublime.closeLoadingbar();//关闭loading
|
||||
if (data.code == 0) {
|
||||
self.tableData = data.data.list;
|
||||
self.pageForm.totalCount = data.data.totalCount;
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
formatAt: function (val) {
|
||||
if (val > 0)
|
||||
return moment(val * 1000).format("YYYY-MM-DD HH:mm");
|
||||
return "";
|
||||
},
|
||||
doSearch: function () {
|
||||
var unit=this.parentUnitSearch[this.parentUnitSearch.length - 1];
|
||||
if("root"==unit){
|
||||
unit="";
|
||||
}
|
||||
this.pageForm.searchUnit = unit;
|
||||
this.pageForm.pageNumber = 1;
|
||||
this.pageData();
|
||||
},
|
||||
openAdd: function () {
|
||||
var self = this;
|
||||
this.addDialogVisible = true;
|
||||
this.formData = {};//打开新增窗口,表单先清空
|
||||
if (this.$refs["addForm"])
|
||||
this.$refs["addForm"].resetFields();
|
||||
},
|
||||
doAdd: function () {
|
||||
var self = this;
|
||||
self.$refs["addForm"].validate(function (valid) {
|
||||
if (valid) {
|
||||
self.formData.unitid = self.parentUnit[self.parentUnit.length - 1]||"";
|
||||
$.post(base + "/platform/sys/user/addDo", self.formData, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
self.parentUnitSearch=[];
|
||||
self.doSearch();//查询是带条件的,加载新建用户选择的单位用户数据
|
||||
//self.pageData();
|
||||
self.addDialogVisible = false;
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
});
|
||||
},
|
||||
doEdit: function () {
|
||||
var self = this;
|
||||
self.$refs["editForm"].validate(function (valid) {
|
||||
if (valid) {
|
||||
$.post(base + "/platform/sys/user/editDo", self.formData, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
self.doSearch();//查询是带条件的,加载新建用户选择的单位用户数据
|
||||
//self.pageData();
|
||||
self.editDialogVisible = false;
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
});
|
||||
},
|
||||
initRoleTreeTable: function () {
|
||||
var self = this;
|
||||
var url = base + "/platform/sys/user/menu/" + self.userId;
|
||||
$.post(url, {pid: ""}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.roleTableData = data.data;
|
||||
}
|
||||
}, "json");
|
||||
|
||||
},
|
||||
loadRoleChild: function (tree, treeNode, resolve) {
|
||||
var self = this;
|
||||
var url = base + "/platform/sys/user/menu/" + self.userId;
|
||||
$.post(url, {pid: tree.id}, function (data) {
|
||||
if (data.code == 0) {
|
||||
resolve(data.data);
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
dropdownCommand: function (command) {//监听下拉框事件
|
||||
var self = this;
|
||||
if ("role" == command.type) {
|
||||
self.roleDialogVisible = true;
|
||||
self.roleDialogTitle = "查看用户 " + command.loginname + " 的权限";
|
||||
self.userId = command.id;
|
||||
self.initRoleTreeTable();
|
||||
}
|
||||
if ("reset" == command.type) {
|
||||
self.$confirm('确定重置用户 ' + command.loginname + ' 的密码', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
callback: function (a, b) {
|
||||
if ("confirm" == a) {//确认后再执行
|
||||
$.post(base + "/platform/sys/user/resetPwd/" + command.id, {}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$alert('新密码为 ' + data.data, '新密码', {
|
||||
confirmButtonText: '确定'
|
||||
});
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
if ("enable" == command.type || "disable" == command.type) {
|
||||
$.post(base + "/platform/sys/user/" + command.type + "/" + command.id, {}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
if ("disable" == command.type) {
|
||||
command.row.disabled=true;
|
||||
}
|
||||
if ("enable" == command.type) {
|
||||
command.row.disabled=false;
|
||||
}
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
if ("edit" == command.type) {
|
||||
$.post(base + "/platform/sys/user/edit/" + command.id, {}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.formData = data.data;//加载后台表单数据
|
||||
self.editDialogVisible = true;//打开编辑窗口
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
if ("delete" == command.type) {
|
||||
self.$confirm('此操作将删除 ' + command.loginname, '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
callback: function (a, b) {
|
||||
if ("confirm" == a) {//确认后再执行
|
||||
$.post(base + "/platform/sys/user/delete/" + command.id, {}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
self.doSearch();
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
batchCommand: function (command) {
|
||||
var self = this;
|
||||
if ("delete" == command.type) {
|
||||
if (self.multipleSelection.length == 0) {
|
||||
self.$message({
|
||||
message: "请选择要删除的用户",
|
||||
type: 'warning'
|
||||
});
|
||||
} else {
|
||||
var loginnames = [];
|
||||
var ids = [];
|
||||
self.multipleSelection.forEach(function (val) {
|
||||
loginnames.push(val.loginname);
|
||||
ids.push(val.id);
|
||||
});
|
||||
self.$confirm('此操作将删除用户 ' + loginnames.toString(), '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning',
|
||||
callback: function (a, b) {
|
||||
if ("confirm" == a) {//确认后再执行
|
||||
$.post(base + "/platform/sys/user/delete", {ids: ids.toString()}, function (data) {
|
||||
if (data.code == 0) {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
self.doSearch();
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
if ("export" == command.type) {
|
||||
window.open(base + "/platform/sys/user/export?searchUnit=" + self.pageForm.searchUnit
|
||||
+ "&searchName=" + self.pageForm.searchName
|
||||
+ "&searchKeyword=" + self.pageForm.searchKeyword
|
||||
+ "&pageOrderName=" + self.pageForm.pageOrderName
|
||||
+ "&pageOrderBy=" + self.pageForm.pageOrderBy
|
||||
);
|
||||
}
|
||||
},
|
||||
handleSelectionChange: function (val) {
|
||||
this.multipleSelection = val;
|
||||
}
|
||||
},
|
||||
created: function () {
|
||||
this.pageData();
|
||||
}
|
||||
});
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -0,0 +1,98 @@
|
||||
<div id="passApp">
|
||||
<div class="el-dialog__header">
|
||||
<button type="button" data-dismiss="modal" aria-hidden="true" aria-label="Close" class="el-dialog__headerbtn"><i
|
||||
class="el-dialog__close el-icon el-icon-close"></i></button>
|
||||
<h4 class="modal-title">${msg['index.user.password']}</h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<el-form :model="passForm" ref="passForm" :rules="passRules">
|
||||
<el-row>
|
||||
<el-form-item prop="oldPassword">
|
||||
<el-input maxlength="20" placeholder="${msg['index.user.oldpass']}" v-model="passForm.oldPassword"
|
||||
auto-complete="off" tabindex="1" type="password"></el-input>
|
||||
</el-form-item>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-form-item prop="newPassword">
|
||||
<el-input maxlength="20" placeholder="${msg['index.user.newpass']}" v-model="passForm.newPassword"
|
||||
auto-complete="off" tabindex="2" type="password"></el-input>
|
||||
</el-form-item>
|
||||
</el-row>
|
||||
<el-row>
|
||||
<el-form-item prop="passwordAgain">
|
||||
<el-input maxlength="20" placeholder="${msg['index.user.rightpass']}"
|
||||
v-model="passForm.passwordAgain"
|
||||
auto-complete="off" tabindex="3" type="password"></el-input>
|
||||
</el-form-item>
|
||||
</el-row>
|
||||
</el-form>
|
||||
</div>
|
||||
<div class="el-dialog__footer">
|
||||
<span class="dialog-footer">
|
||||
<button type="button" class="el-button el-button--default" data-dismiss="modal">
|
||||
<span>${msg['system.cancel']}</span>
|
||||
</button>
|
||||
<button type="button" class="el-button el-button--primary" @click="doPass">
|
||||
<span>${msg['system.confirm']}</span>
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
new Vue({
|
||||
el: '#passApp',
|
||||
data: function () {
|
||||
var self = this;
|
||||
var validatePass = function (rule, value, callback) {
|
||||
if (value !== self.passForm.newPassword) {
|
||||
callback(new Error('两次输入密码不一致!'));
|
||||
} else {
|
||||
callback();
|
||||
}
|
||||
};
|
||||
return {
|
||||
passForm: {
|
||||
oldPassword: "",
|
||||
newPassword: "",
|
||||
passwordAgain: ""
|
||||
},
|
||||
passRules: {
|
||||
oldPassword: [
|
||||
{required: true, message: '请输入原密码', trigger: 'blur'}
|
||||
],
|
||||
newPassword: [
|
||||
{required: true, message: '请输入新密码', trigger: 'blur'},
|
||||
{min: 3, max: 20, message: '密码长度必须是3-20位', trigger: 'change'}
|
||||
],
|
||||
passwordAgain: [
|
||||
{required: true, message: '请再次输入新密码', trigger: 'blur'},
|
||||
{validator: validatePass, trigger: 'change'}
|
||||
]
|
||||
},
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
doPass: function () {
|
||||
var self = this
|
||||
self.$refs["passForm"].validate(function (valid) {
|
||||
if (valid) {
|
||||
$.post(base + "/platform/sys/user/doChangePassword", self.passForm, function (data) {
|
||||
if (data.code == 0) {
|
||||
$('#homeDetail').modal('hide');
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'success'
|
||||
});
|
||||
} else {
|
||||
self.$message({
|
||||
message: data.msg,
|
||||
type: 'error'
|
||||
});
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
</script>
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user