first commit

This commit is contained in:
2026-09-08 19:49:21 +08:00
commit ebffbab428
7320 changed files with 1477614 additions and 0 deletions
@@ -0,0 +1,404 @@
<!--#
layout("/layouts/platform.html"){
#-->
<style>
.box-card {
border-radius: 16px;
padding-right: 80px;
}
.el-divider {
background-color: #409EFF;
}
.el-divider__text.is-left {
color: #409EFF;
font-weight: 600;
font-size: 15px;
}
.el-date-editor.el-input, .el-date-editor.el-input__inner, .el-select {
width: 100%;
}
.item-button {
text-align: center;
}
.item-button .el-button {
padding: 12px 100px;
}
.el-select-dropdown, .el-picker-panel, .el-loading-mask {
z-index: 99999 !important;
}
</style>
<div id="app" v-cloak>
<guava>
<el-card shadow="never">
<template #header>
<h3 style="color:#1867b0">双代会请示</h3>
</template>
<el-form ref="addForm" :model="formData" :rules="formRules" label-width="120px">
<el-row :gutter="40">
<el-col :span="12">
<el-form-item prop="jdhjs" label="届数">
<el-select @change="jdhjsChange" v-model="formData.jdhjs" filterable clearable style="width: 100%"
placeholder="届数">
<el-option v-for="item in jsList" :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 prop="jdhcs" label="次数">
<el-select @change="jdhcsChange" v-model="formData.jdhcs" filterable clearable
style="width: 100%"
placeholder="次数">
<el-option v-for="item in csOptions" :key="item.id" :label="item.name"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="40">
<el-col :span="12">
<el-form-item label="会议名称" prop="meeting_name">
<el-input
placeholder="请填写会议名称"
v-model="formData.meeting_name"
clearable
maxlength="100">
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<!--<el-form-item label="有无选举事项" prop="have_elect">
<el-radio-group v-model="formData.have_elect">
<el-radio-button :label="true">有</el-radio-button>
<el-radio-button :label="false">无</el-radio-button>
</el-radio-group>
</el-form-item>-->
<el-form-item label="类型" prop="type">
<el-radio-group v-model="formData.type">
<el-radio-button label="换届会">换届会</el-radio-button>
<el-radio-button label="届中会">届中会</el-radio-button>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="40">
<el-col :span="12">
<el-form-item label="申请单位" prop="unit_name">
<el-input placeholder="申请单位"
:clearable="false"
readonly
v-model="formData.unit_name">
</el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="所在工会" prop="union_name">
<el-input placeholder="所在工会"
:clearable="false"
readonly
v-model="formData.union_name">
</el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="40">
<el-col :span="12">
<el-form-item label="会议时间" prop="meeting_time">
<el-date-picker
v-model="formData.meeting_time"
type="datetime"
format="yyyy-MM-dd HH:mm"
value-format="yyyy-MM-dd HH:mm"
:clearable="false"
placeholder="选择会议时间">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="申请时间" prop="create_time">
<el-input placeholder="申请时间"
:clearable="false"
readonly
v-model="formData.create_time">
</el-input>
</el-form-item>
</el-col>
<!--<el-col :span="12">
<el-form-item label="上一次会议时间" prop="before_meeting_time">
<el-date-picker
v-model="formData.before_meeting_time"
type="datetime"
format="yyyy-MM-dd HH:mm"
value-format="yyyy-MM-dd HH:mm"
:clearable="false"
placeholder="选择上一次会议时间">
</el-date-picker>
</el-form-item>
</el-col>-->
</el-row>
<!--<el-row :gutter="40">
<el-col :span="12">
<el-form-item label="正式代表人数" prop="official_delegate">
<el-input v-model="formData.official_delegate"
oninput="value=value.replace(/[^\d]/g,'')"
placeholder="请输入正式代表人数"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="其中教师" prop="teacher_delegate">
<el-input v-model="formData.teacher_delegate" oninput="value=value.replace(/[^\d]/g,'')"
placeholder="请输入教师代表人数"></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="40">
<el-col :span="12">
<el-form-item label="列席代表人数" prop="attend_delegate">
<el-input v-model="formData.attend_delegate" oninput="value=value.replace(/[^\d]/g,'')"
placeholder="请输入列席代表人数"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="其中特邀" prop="special_delegate">
<el-input v-model="formData.special_delegate" oninput="value=value.replace(/[^\d]/g,'')"
placeholder="请输入特邀代表人数"></el-input>
</el-form-item>
</el-col>
</el-row>-->
<el-form-item label="会议议程" prop="meeting_topic" class="is-required">
<div id="meetingTopicRich"></div>
</el-form-item>
<el-form-item label="备注" prop="remark">
<el-input maxlength="500" type="textarea" :rows="4" placeholder="请输入备注"
v-model="formData.remark"></el-input>
</el-form-item>
<el-form-item prop="files" label="请示附件" class="is-required">
<file-upload :max="1" :files.sync="formData.files">
<template #el-upload__tip>
<div class="el-upload__tip" slot="tip">图片类请上传jpg/png/jpeg等格式,文档类请上传doc/docx/xls/xlsx/pdf等格式,上传数量为1个</div>
</template>
</file-upload>
</el-form-item>
<el-form-item style="text-align: right">
<el-button type="danger" @click="resetForm">重 置
</el-button>
<el-button type="primary" @click="operation" :loading="subLoading">提 交</el-button>
</el-form-item>
</el-form>
</el-card>
</guava>
</div>
<script>
function getQueryVariable(variable) {
let query = window.location.search.substring(1);
let vars = query.split("&");
for (let i = 0; i < vars.length; i++) {
let pair = vars[i].split("=");
if (pair[0] == variable) {
return pair[1];
}
}
return '';
}
let E = window.wangEditor
let meetingTopicRich = null
var vue = new Vue({
el: '#app',
data() {
const meetingTopicValid = (rule, value, callback) => {
if (!this.formData.meeting_topic || !dd3s.html2txt(this.formData.meeting_topic)) {
callback(new Error('请填写会议议题'));
} else {
callback();
}
};
const filesValid = (rule, value, callback) => {
if (!this.formData.files || this.formData.files.length === 0) {
callback(new Error('请上传请示附件'));
} else {
callback();
}
};
return {
jsList: [],
csOptions: [
{id: "一", name: "一次"},
{id: "二", name: "二次"},
{id: "三", name: "三次"},
{id: "四", name: "四次"},
{id: "五", name: "五次"},
{id: "六", name: "六次"},
],
subLoading: false,
sessionOptions: [],
formData: {
meeting_name: '',
have_elect: false,
unit_name: '${@shiro.getPrincipalProperty("unit").getName()}',
union_name: '${@shiro.getPrincipalProperty("union").getUnionname()}',
create_time: moment(new Date()).format("YYYY-MM-DD"),
meeting_time: '',
before_meeting_time: '',
session_num: '',
frequency: '',
official_delegate: '',
teacher_delegate: '',
attend_delegate: '',
special_delegate: '',
meeting_topic: '',
remark: '',
files: [],
type: '届中会'
},
formRules: {
meeting_name: [{required: true, message: '请填写会议标题', trigger: ['blur', 'change']}],
session_id: [{required: true, message: '请选择届次', trigger: ['blur', 'change']}],
jdhjs: [{required: true, message: '请选择届数', trigger: ['blur', 'change']}],
type: [{required: true, message: '请选择类型', trigger: ['blur', 'change']}],
have_elect: [{required: true, message: '请选择有无选举事项', trigger: ['blur', 'change']}],
unit_name: [{required: true, message: '请选择填表单位', trigger: ['blur', 'change']}],
create_time: [{required: true, message: '请选择填表日期', trigger: ['blur', 'change']}],
meeting_time: [{required: true, message: '请选择会议时间', trigger: ['blur', 'change']}],
session_num: [{required: true, message: '请选择届数', trigger: ['blur', 'change']}],
frequency: [{required: true, message: '请选择次数', trigger: ['blur', 'change']}],
official_delegate: [{required: true, message: '请填写正式代表人数', trigger: ['blur', 'change']}],
meeting_topic: [{validator: meetingTopicValid, trigger: ['blur', 'change']}],
files: [{validator: filesValid, trigger: ['blur', 'change']}],
}
}
},
components: {
'file-upload': httpVueLoader('/components/plugins/FileUpload.vue')
},
methods: {
jdhjsChange(o) {
const j = this.formData.jdhjs ? ('第' + this.formData.jdhjs + '届') : ''
const c = this.formData.jdhcs ? ('第' + this.formData.jdhcs + '次') : ''
const str = '关于召开' + this.formData.unit_name + j + c + '教职工代表大会、工会会员代表大会的请示'
this.formData.meeting_name = str
},
jdhcsChange(o) {
const j = this.formData.jdhjs ? ('第' + this.formData.jdhjs + '届') : ''
const c = this.formData.jdhcs ? ('第' + this.formData.jdhcs + '次') : ''
const str = '关于召开' + this.formData.unit_name + j + c + '教职工代表大会、工会会员代表大会的请示'
this.formData.meeting_name = str
},
resetForm() {
this.$refs["addForm"].resetFields();
meetingTopicRich.txt.html('')
meetingTopicRich.create()
},
async openEdit(id) {
const resp = await $.get(loc() + "/findOne", {id})
if(resp.code===0){
const data = resp.data
data.files = JSON.parse(data.files)
this.formData = data
this.$nextTick(() => {
meetingTopicRich = new E('#meetingTopicRich')
meetingTopicRich.config.onchange = (html) => {
this.formData.meeting_topic = html
}
setTimeout(() => {
meetingTopicRich.create()
meetingTopicRich.txt.html(data.meeting_topic)
}, 100)
})
}else{
this.notifyWarning(resp.msg)
}
},
initPage() {
this.$nextTick(() => {
meetingTopicRich = new E('#meetingTopicRich')
meetingTopicRich.config.onchange = (html) => {
this.formData.meeting_topic = html
}
setTimeout(() => {
meetingTopicRich.create()
}, 100)
})
},
async operation() {
if (!this.formData.files || this.formData.files.length === 0) {
this.$notify.warning({title: '提示', message: '请上传请示附件!'});
return
}
let method = this.formData.id ? "/doEdit" : "/doAdd"
this.$refs["addForm"].validate(async (valid) => {
if (valid) {
/*this.subLoading = true
const loading = this.$loading({
lock: true,
text: '正在提交...',
spinner: 'el-icon-loading',
background: COVER_LAYER_COLOR
});*/
this.formData.jdhallname = this.formData.jdhjs + '届'
if(this.formData.jdhcs) {
this.formData.jdhallname += this.formData.jdhcs + '次'
}
const data = clone(this.formData)
data.files = JSON.stringify(data.files)
const resp = await $.post(loc() + method, {jdhLevel2: JSON.stringify(data)})
if (resp.code === 0) {
this.$notify({
title: '成功',
message: resp.msg,
type: 'success',
duration: 1000,
onClose: () => {
sublime.jumpPagePjax('/platform/jdh/level2/reading')
}
});
}
/*requestLaterFun(resp, () => {
window.location.href = '/platform/jdh/level2/reading'
}, () => {
this.$notify.error({title: '失败', message: resp.msg});
}, () => {
loading.close()
this.subLoading = false
})*/
}
});
}
},
async created() {
this.sessionOptions = await getOpenJdhByDb()
let id = getQueryVariable("id")
id ? this.openEdit(id) : this.initPage()
this.jsList = await getJc()
}
})
</script>
<!--#
}
#-->
@@ -0,0 +1,221 @@
<!--#
layout("/layouts/platform.html"){
#-->
<style>
.item-button {
text-align: center;
}
.item-button .el-button {
padding: 12px 100px;
}
</style>
<div id="app" v-cloak>
<guava ref="guava">
<template>
<jdh-two-search :page="pageForm" @search="doSearch" :isadmin="isAdmin" :unionid="unionId"></jdh-two-search>
<jdh-two-table :page="pageForm" :table="tableData" :loading="tableLoading">
<template #column>
<el-table-column align="center" header-align="center" label="操作" fixed="right" width="150px">
<template scope="scope">
<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="{type:'view',data:scope.row}">
查看
</el-dropdown-item>
<el-dropdown-item v-if="![100,300,500].includes(scope.row.audit_state)" :command="{type:'rollback',data:scope.row}">
撤回
</el-dropdown-item>
<el-dropdown-item v-if="[100,300].includes(scope.row.audit_state)"
:command="{type:'audit',data:scope.row}">
审核
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</template>
</el-table-column>
</template>
<template #pagination>
<!--#include("/layouts/pagination.html"){}#-->
</template>
</jdh-two-table>
</template>
<template #edit>
<jdh-two-info ref="audit" :label="title" handle>
<template #handle>
<el-form :model="formData" ref="auditForm" :rules="formRules" label-position="right"
label-width="120px">
<vi-title title="批复信息"></vi-title>
<el-row gutter="20">
<el-col :span="12">
<el-form-item prop="reply_username" label="批复人">
<el-input value="${@shiro.getPrincipalProperty('username')}" disabled></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="reply_time" label="批复时间">
<el-input v-model="formData.auditTime" disabled></el-input>
</el-form-item>
</el-col>
</el-row>
<el-form-item prop="opinion" label="批复意见">
<el-input type="textarea" v-model="formData.opinion" rows="4" maxlength="500"
placeholder="请填写您的批复意见"></el-input>
</el-form-item>
<el-form-item prop="files" label="批复附件" class="is-required">
<file-upload :max="1" :files.sync="formData.files">
<template #el-upload__tip>
<div class="el-upload__tip" slot="tip">图片类请上传jpg/png/jpeg等格式,文档类请上传doc/docx/xls/xlsx/pdf等格式,上传数量为1个</div>
</template>
</file-upload>
</el-form-item>
<el-form-item class="item-button">
<el-button type="danger" @click="doAudit(false)" style="margin-right: 20px">退&emsp;&emsp;
</el-button>
<el-button type="primary" @click="doAudit(true)">&emsp;&emsp;</el-button>
</el-form-item>
</el-form>
</template>
</jdh-two-info>
</template>
<template #view>
<jdh-two-info ref="view"></jdh-two-info>
</template>
</guava>
</div>
<script>
var vue = new Vue({
el: '#app',
mixins: [initTableMixins],
components: {
'guava': httpVueLoader('/components/plugins/Guava.vue'),
'file-upload': httpVueLoader('/components/plugins/FileUpload.vue'),
'jdh-two-search': httpVueLoader('/components/jdh/JdhTwoSearch.vue'),
'jdh-two-table': httpVueLoader('/components/jdh/JdhTwoTable.vue?v=1.0.0'),
'jdh-two-info': httpVueLoader('/components/jdh/JdhTwoInfo.vue?v=1.0.0')
},
data() {
const filesValid = (rule, value, callback) => {
if (!this.formData.files || this.formData.files.length === 0) {
callback(new Error('请上传批复附件'));
} else {
callback();
}
};
return {
title: '审核',
pageForm: {
searchName: "meeting_name",
isAudit: false
},
formData: {
auditTime: moment().format('YYYY-MM-DD')
},
formRules: {
opinion: [{required: true, message: '请填写审核意见', trigger: ['blur', 'change']}],
files: [{validator: filesValid, trigger: ['blur', 'change']}],
},
isAdmin: "${@shiro.hasAnyRoles('sysadmin', 'A06')}" === 'true',
unionId: "${@shiro.getPrincipalProperty('union').getId()}",
}
},
methods: {
dropdownCommand(command) {
const {type, data} = command
if (type == 'view') {
this.openView(data)
} else if (type == 'audit') {
this.openReview(data)
} else if (type == 'rollback') {
this.rollback(data)
}
},
rollback(data) {
this.$confirm('您确定要撤回吗!', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
callback: (a, b) => {
if ("confirm" == a) {//确认后再执行
$.post(loc() + "/callback", {id: data.id}, (data) => {
if (data.code === 0) {
this.$message({message: data.msg, type: 'success'});
this.pageData();
} else {
this.$message({message: data.msg, type: 'warning'});
}
}, "json");
}
}
});
},
openView(data) {
this.$refs.guava.view()
this.$refs.view.openView(data.id)
},
openReview(data) {
this.title = data.audit_state == 100 ? "院级党委审核" : "校工会审核"
this.formData.id = data.id
this.$refs.guava.edit()
this.$refs.audit.openView(data.id)
},
doAudit(flag) {
if (!this.formData.files || this.formData.files.length === 0) {
this.$notify.warning({title: '提示', message: '请上传批复附件!'});
return
}
this.$refs["auditForm"].validate(async (valid) => {
if (valid) {
const loading = this.$loading({
lock: true,
text: '正在提交...',
spinner: 'el-icon-loading',
background: COVER_LAYER_COLOR
});
const resp = await $.post(loc() + "/doAudit", {
id: this.formData.id,
opinion: this.formData.opinion,
flag: flag,
files: JSON.stringify(this.formData.files)
})
loading.close()
if(resp.code===0){
this.pageData()
this.$refs.guava.index()
this.notifySuccess(resp.msg)
}else{
this.notifyWarning(resp.msg)
}
}
})
}
},
async created() {
this.pageData();
}
})
</script>
<!--#
}
#-->
@@ -0,0 +1,234 @@
<!--#
layout("/layouts/platform.html"){
#-->
<div id="app" v-cloak>
<guava ref="guava">
<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: 100px;">
<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">
<el-select clearable v-model="pageForm.unionid" placeholder="请选择分工会" @change="getJdhList">
<el-option v-for="i in fghList" :label="i.unionname" :value="i.id" :key="i.id"></el-option>
</el-select>
</div>
<div class="btn-group tool-button">
<el-select v-model="pageForm.jdhid" placeholder="请选择教代会">
<el-option v-for="i in jdhList" :label="i.jdhallname" :value="i.id" :key="i.id"></el-option>
</el-select>
</div>
<div class="btn-group tool-button">
<el-button type="primary" @click="doSearch" icon="el-icon-search"></el-button>
</div>
<div class="pull-right offscreen-right mt5">
<el-button type="primary" @click="openAdd">添加代表</el-button>
</div>
</el-card>
<el-card shadow="never" class="mt20">
<el-table
:data="tableData"
@sort-change='pageOrder'>
<el-table-column label="序号" type="index" width="50"></el-table-column>
<el-table-column
align="center"
header-align="center"
v-for="column in tableColumns"
:label="column.label"
:prop="column.prop"
:sortable="column.sortable"
show-overflow-tooltip></el-table-column>
<el-table-column prop="userOnline" align="center" header-align="center" label="操作"
width="150px">
<template scope="{row}">
<el-button size="mini" type="danger" :loading="row.loading" @click="doDelete(row)">删除
</el-button>
</template>
</el-table-column>
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
</guava>
<el-dialog :title="dbTitle" :visible.sync="addDialogVisible" width="40%">
<el-form :model="formData" ref="AddForm" :rules="rules" label-width="80px">
<el-form-item prop="unionid" label="分工会:">
<el-select clearable v-model="formData.unionid" placeholder="请选择分工会" @change="getJdhList2"
style="width: 100%">
<el-option v-for="i in fghList" :label="i.unionname" :value="i.id" :key="i.id"></el-option>
</el-select>
</el-form-item>
<el-form-item prop="jdhid" label="教代会:">
<el-select v-model="formData.jdhid" placeholder="请选择教代会" style="width: 100%">
<el-option v-for="i in jdhList2" :label="i.jdhallname" :value="i.id" :key="i.id"></el-option>
</el-select>
</el-form-item>
<el-form-item prop="userList" label="用户">
<el-select
v-model="formData.userList"
value-key="id"
filterable
remote
multiple
reserve-keyword
placeholder="请输入工号或者姓名"
:remote-method="queryNotDbUser" style="width: 100%">
<el-option
v-for="item in notUserList"
:key="item.id"
:label="item.username+'-'+item.loginname+'-'+item.unitname"
:value="item.id">
</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>
</div>
<script>
var vue = new Vue({
el: '#app',
mixins: [initTableMixins],
data() {
return {
dbTitle: "新增代表",
addDialogVisible: false,
pageForm: {
searchName: "u.username",
jdhid: ""
},
fghList: [],
jdhList: [],
jdhList2: [],
notUserList: [],
tableColumns: [
{prop: 'loginname', label: '工号', sortable: true},
{prop: 'username', label: '姓名', sortable: true},
{prop: 'sex', label: '性别', sortable: true},
{prop: 'mobile', label: '联系方式', sortable: true},
{prop: 'unitname', label: '所属单位', sortable: true},
{prop: 'unionname', label: '所属工会', sortable: true},
{prop: 'jdhallname', label: '教代会', sortable: true},
],
formData: {
jdhid: "",
userList: ""
},
rules: {
unionid: [{required: true, trigger: ['blur', 'change'], message: '请选择工会'}],
userList: [{required: true, trigger: ['blur', 'change'], message: '请选择代表'}],
},
}
},
methods: {
doDelete(row) {
const {id, userid, jdhid} = row
this.$confirm('确定要删除该代表吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
callback: async (a, b) => {
if ("confirm" === a) {//确认后再执行
this.$set(row, "loading", true)
const resp = await $.post(loc() + "/doDelete", {id: id, userid: userid, jdhid: jdhid});
this.$set(row, "loading", false)
this.pageData()
}
}
})
},
doAdd() {
this.$refs['AddForm'].validate(async valid => {
if (valid) {
const loading = this.$loading({
lock: true,
text: '正在添加中,请稍后...',
spinner: 'el-icon-loading',
background: "rgba(0,0,0,.45)"
});
this.formData.userList = JSON.stringify(this.formData.userList)
const {data} = await $.post(loc() + "/doAdd", this.formData)
this.pageData()
this.addDialogVisible = false
loading.close()
}
})
},
async openAdd() {
this.fghList = await getUnion()
if ("${@shiro.hasRole('H04')}" === 'true') {
this.formData.unionid = this.fghList[0].id
await this.getJdhList2()
}
this.addDialogVisible = true
if (this.$refs["AddForm"]) this.$refs["AddForm"].resetFields()
},
async queryNotDbUser(key) {
if (this.formData.unionid === '') {
this.$message.info('请先选择分工会')
return
}
this.formData.keyword = key
const {data} = await $.post(loc() + "/queryNotUser", this.formData)
this.notUserList = data.list
},
async getJdhList() {
this.jdhList = []
this.pageForm.jdhid = ""
const resp = await $.post(loc() + "/getJdhList", {unionid: this.pageForm.unionid})
if (resp.length > 0 && this.pageForm.unionid) {
this.jdhList = resp
this.pageForm.jdhid = resp[0].id
} else {
this.jdhList = []
}
},
async getJdhList2() {
this.jdhList2 = []
this.formData.jdhid = ""
const resp = await $.post(loc() + "/getJdhList", {unionid: this.formData.unionid})
if (resp.length > 0 && this.formData.unionid) {
this.jdhList2 = resp
this.formData.jdhid = resp[0].id
} else {
this.jdhList2 = []
}
},
},
async created() {
this.fghList = await getUnions()
if ("${@shiro.hasRole('H04')}" === 'true') {
this.pageForm.unionid = this.fghList[0].id
await this.getJdhList()
}
this.pageData()
}
})
</script>
<!--#
}
#-->
@@ -0,0 +1,510 @@
<!--#
layout("/layouts/platform.html"){
#-->
<!-- 教代会管理-->
<style>
.el-loading-spinner {
font-size: 30px !important;
}
.el-checkbox__label {
padding-left: 20px;
}
.el-checkbox__input {
position: absolute;
/*line-height: unset!important;*/
}
</style>
<div id="app" v-cloak>
<guava ref="guava">
<el-card shadow="never">
<div class="btn-group tool-button">
<el-date-picker
v-model="pageForm.searchYear"
value-format="yyyy"
formData="yyyy"
type="year"
placeholder="选择年度">
</el-date-picker>
</div>
<div class="btn-group tool-button">
<el-input placeholder="输入届数" v-model="pageForm.jdhjs" style="width: 200px" clearable
@keyup.enter.native="doSearch">
<template slot="prepend">届数</template>
</el-input>
</div>
<div class="btn-group tool-button">
<el-input placeholder="输入次数" v-model="pageForm.jdhcs" style="width: 200px" clearable
@keyup.enter.native="doSearch">
<template slot="prepend">次数</template>
</el-input>
</div>
<div class="btn-group tool-button">
<el-select clearable v-model="pageForm.unionid" placeholder="请选择分工会">
<el-option v-for="i in fghList" :label="i.unionname" :value="i.id" :key="i.id"></el-option>
</el-select>
</div>
<div class="btn-group tool-button">
<el-button type="primary" @click="doSearch" icon="el-icon-search"></el-button>
</div>
<div class="pull-right offscreen-right">
<el-button size="medium" @click="openAdd"><i class="ti-plus"></i> 新建届次</el-button>
</div>
</el-card>
<el-card shadow="never" class="mt20">
<el-table
:data="tableData"
@sort-change='pageOrder'>
<el-table-column
label="序号"
type="index"
width="50">
</el-table-column>
<el-table-column
sortable
prop="jdhnf"
label="年度">
</el-table-column>
<el-table-column
sortable
prop="jdhjs"
label="届数">
<template slot-scope="scope">
{{scope.row.jdhjs}}届
</template>
</el-table-column>
<el-table-column
sortable
prop="jdhcs"
label="次数">
<template slot-scope="scope">
{{scope.row.jdhcs}}次
</template>
</el-table-column>
<el-table-column
sortable
prop="unionname"
label="所属工会">
</el-table-column>
<el-table-column
prop="jdhallname"
label="届次全称">
</el-table-column>
<el-table-column
prop="jdhms"
label="描述">
</el-table-column>
<el-table-column
prop="jdhcjsj"
label="创建时间">
</el-table-column>
<el-table-column
prop="jdhkqzt"
label="开启状态">
<template slot-scope="scope">
<el-switch active-color="#13ce66"
inactive-color="#ff4949"
:value="scope.row.jdhkqzt===1"
@change="jdhztChange(scope.row.jdhkqzt,scope.row.id)">
</el-switch>
</template>
</el-table-column>
<el-table-column
label="操作"
width="200">
<template slot-scope="scope">
<el-button size="mini" type="primary" @click="openEdit(scope)">编辑</el-button>
<el-button size="mini" type="danger" @click="doDelete(scope.row.id)">删除</el-button>
</template>
</el-table-column>
</el-table>
<!--#include("/layouts/pagination.html"){}#-->
</el-card>
<el-dialog
title="新建届次"
:visible.sync="addDialogVisible"
width="45%">
<el-form :model="formData" ref="addForm" :rules="rules" label-width="120px">
<el-form-item prop="jdhnf" label="教代会年份">
<el-date-picker style="width:250px;"
v-model="formData.jdhnf"
value-format="yyyy"
formData="yyyy"
type="year"
placeholder="选择年">
</el-date-picker>
</el-form-item>
<el-form-item prop="jdhjs" label="教代会届数">
<el-select v-model="formData.jdhjs" filterable placeholder="请选择届数" style="width:250px;">
<el-option v-for="i in jsList" :label="i.name" :key="i.id" :value="i.code"></el-option>
</el-select>
</el-form-item>
<el-form-item prop="jdhcs" label="教代会次数">
<el-select v-model="formData.jdhcs" @change="csChange" filterable placeholder="请选择次数"
style="width:250px;">
<el-option v-for="i in cslist" :key="i" :label="i+'次'" :value="i"></el-option>
</el-select>
</el-form-item>
<el-form-item prop="unionid" label="所属工会">
<el-select clearable v-model="formData.unionid" placeholder="请选择分工会">
<el-option v-for="i in fghList" :label="i.unionname" :value="i.id" :key="i.id"></el-option>
</el-select>
</el-form-item>
<el-form-item prop="jdhms" label="教代会描述">
<el-input type="textarea"
:rows="2"
placeholder="请输入教代会主题描述"
v-model="formData.jdhms">
</el-input>
</el-form-item>
<el-form-item prop="sfjc" class="is-required" label="" label-width="30px" style="margin-top: 20px;">
<el-checkbox v-model="formData.isExtend"
:disabled="formData.jdhcs=='一' || formData.jdhcs==''"
style="font-size: 14px;color: #ff6a00;width: 98%">
<span>
延用上一次教代会的代表信息。
</span>
</el-checkbox>
</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"
:close-on-click-modal="false"
width="45%">
<el-form :model="formData" ref="editForm" :rules="rules" label-width="120px">
<el-form-item prop="jdhnf" label="教代会年份">
<div class="block">
<el-date-picker style="width:250px;"
v-model="formData.jdhnf"
value-format="yyyy"
formData="yyyy"
type="year"
placeholder="选择年">
</el-date-picker>
</div>
</el-form-item>
<el-form-item prop="jdhjs" label="教代会届数">
<el-select v-model="formData.jdhjs" filterable placeholder="请选择届数" style="width:250px;">
<el-option v-for="i in 30" :label="i+'届'" :key="i" :value="i"></el-option>
</el-select>
</el-form-item>
<el-form-item prop="jdhcs" label="教代会次数">
<el-select v-model="formData.jdhcs" filterable placeholder="请选择次数" style="width:250px;">
<el-option v-for="i in cslist" :key="i" :label="i+'次'" :value="i"></el-option>
</el-select>
</el-form-item>
<el-form-item prop="unionid" label="所属工会">
<el-select clearable v-model="formData.unionid" placeholder="请选择分工会" disabled>
<el-option v-for="i in fghList" :label="i.unionname" :value="i.id" :key="i.id"></el-option>
</el-select>
</el-form-item>
<el-form-item prop="jdhms" label="教代会描述">
<el-input style="width:450px;"
type="textarea"
:rows="2"
placeholder="请输入教代会主题描述"
auto-complete="off"
v-model="formData.jdhms">
</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>
</guava>
</div>
<script>
const rules = {
jdhnf: [
{required: true, message: '请选择教代会年份', trigger: ['blur', 'change']}
],
jdhjs: [
{required: true, message: '请输入教代会届数', trigger: ['blur', 'change']}
],
jdhcs: [
{required: true, message: '请输入教代会次数', trigger: ['blur', 'change']}
]
}
let vue = new Vue({
el: "#app",
mixins: [initTableMixins],
data() {
return {
addDialogVisible: false,
editDialogVisible: false,
tableData: [],
fghList: [],
pageForm: {
searchYear: '',
jdhjs: '',
jdhcs: '',
pageNumber: 1,
pageSize: 10,
totalCount: 0,
pageOrderName: '',
pageOrderBy: ''
},
formData: {
jdhid: "",
jdhnf: "",
jdhjs: "",
jdhcs: "",
jdhms: "",
jdhkqzt: "",
sfjc: "",
isExtend: false
},
rules: rules,
jsList: [],
cslist: ['一', '二', '三', '四', '五']
}
},
methods: {
doDelete(id) {
this.$confirm('删除此次教代会将会删除该教代会下面所有的数据(包括代表)', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then((res) => {
const loading = this.$loading({
lock: true,
text: '删除中',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
});
$.post(base + '/platform/jdh2/cb/jcgl/doDelete', {id: id}).then(res => {
if (res.code === 0) {
setTimeout(() => {
loading.spinner = 'el-icon-circle-check'
loading.text = '删除成功'
setTimeout(() => {
loading.close()
this.doSearch()
}, 1500)
}, 1000)
} else {
setTimeout(() => {
loading.spinner = 'el-icon-circle-close'
loading.text = '删除失败'
setTimeout(() => {
loading.close()
this.doSearch()
}, 1500)
}, 1000)
}
})
}).catch(() => {
})
},
jsChange(val) {
console.log(val)
$.post(base + "/platform/jdh/cb/jcgl/getcs", {jdhjs: val}).then(res => {
if (res.code == 0) {
this.cslist = res.data;
} else {
this.$message.error(res.msg)
}
})
},
csChange(val) {
if (val === '一') {
this.$set(this.formData, 'isExtend', false)
}
},
pageOrder(column) {
this.pageForm.pageOrderName = column.prop
this.pageForm.pageOrderBy = column.order
this.pageData()
},
pageNumberChange(val) {
this.pageForm.pageNumber = val
this.pageData()
},
pageData() {
sublime.showLoadingbar()
$.post(base + "/platform/jdh2/cb/jcgl/pageData", this.pageForm).then(res => {
sublime.closeLoadingbar()
if (res.code == 0) {
this.tableData = res.data.list;
this.pageForm.totalCount = res.data.totalCount;
} else {
this.$message.error(res.msg)
}
})
},
formatAt(val) {
if (val > 0)
return moment(val * 1000).format("YYYY-MM-DD HH:mm")
return ""
},
doSearch() {
this.pageForm.pageNumber = 1
this.pageData()
},
openAdd() {
if ("${@shiro.hasRole('H04')}" === 'true') {
this.formData.unionid = this.fghList[0].id
}
this.addDialogVisible = true
if (this.$refs["addForm"])
this.$refs["addForm"].resetFields()
},
doAdd() {
if (!this.formData.isExtend && this.formData.jdhcs !== '一') {
this.$confirm('确定不延用上一次教代会的组织及人员数据吗?这将导致此次教代会的组织及人员都将为空必须重新组建!', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
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/jdh2/cb/jcgl/doAdd', this.formData).then(res => {
if (res.code === 0) {
setTimeout(() => {
loading.close()
this.$message.success(res.msg)
this.doSearch()
this.addDialogVisible = false
}, 1500)
} else {
loading.close()
this.$message.error(res.msg)
}
})
}
})
}).catch(() => {
})
} else {
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/jdh2/cb/jcgl/doAdd", this.formData).then(res => {
if (res.code == 0) {
setTimeout(() => {
loading.close()
this.$message.success(res.msg)
this.doSearch()
this.addDialogVisible = false
}, 1500)
} else {
loading.close()
this.$message.error(res.msg)
}
})
}
})
}
},
openEdit(scope) {
this.formData = JSON.parse(JSON.stringify(scope.row))
console.log(this.formData)
this.editDialogVisible = true
},
doEdit() {
this.$refs["editForm"].validate(valid => {
if (valid) {
$.post(base + "/platform/jdh2/cb/jcgl/editDo", this.formData).then(res => {
if (res.code == 0) {
this.$message.success(res.msg)
this.doSearch()
this.editDialogVisible = false
} else {
this.$message.error(res.msg)
}
})
}
})
},
jdhztChange(status, id) {
let cz = status === 1 ? '关闭' : '开启'
this.$confirm('此操作将' + cz + '此次教代会!', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}).then(() => {
$.post(base + "/platform/jdh2/cb/jcgl/jdhztChange", {id: id, status: status}).then(res => {
if (res.code == 0) {
this.doSearch()
}
})
}).catch(() => {
})
}
},
async created() {
this.jsList = await getJc()
this.fghList = await getUnions()
if ("${@shiro.hasRole('H04')}" === 'true') {
this.pageForm.unionid = this.fghList[0].id
}
this.pageData()
}
})
</script>
<!--#
}
#-->
@@ -0,0 +1,134 @@
<!--#
layout("/layouts/platform.html"){
#-->
<style>
</style>
<div id="app" v-cloak>
<guava ref="guava">
<template>
<jdh-two-search :page="pageForm" @search="doSearch" :audit="false" :isadmin="isAdmin" :unionid="unionId"></jdh-two-search>
<div class="mt20">
<jdh-two-table :page="pageForm" :table="tableData" :loading="tableLoading">
<template #column>
<el-table-column align="center" header-align="center" label="操作" fixed="right" width="150px">
<template scope="scope">
<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="{type:'view',data:scope.row}">
查看
</el-dropdown-item>
<el-dropdown-item :command="{type:'edit',data:scope.row}"
v-if="[100].includes(scope.row.audit_state)">
编辑
</el-dropdown-item>
<el-dropdown-item :command="{type:'delete',data:scope.row}"
:loading="scope.row.delLoading">
删除
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</template>
</el-table-column>
</template>
<template #pagination>
<!--#include("/layouts/pagination.html"){}#-->
</template>
</jdh-two-table>
</div>
</template>
<template #view>
<jdh-two-info ref="twoInfo"></jdh-two-info>
</template>
</guava>
</div>
<script>
var vue = new Vue({
el: '#app',
mixins: [initTableMixins],
components: {
'guava': httpVueLoader('/components/plugins/Guava.vue'),
'file-upload': httpVueLoader('/components/plugins/FileUpload.vue'),
'jdh-two-search': httpVueLoader('/components/jdh/JdhTwoSearch.vue'),
'jdh-two-table': httpVueLoader('/components/jdh/JdhTwoTable.vue'),
'jdh-two-info': httpVueLoader('/components/jdh/JdhTwoInfo.vue')
},
data() {
return {
viewData: {},
pageForm: {
searchName: "meeting_name",
isAudit: false,
},
isAdmin: "${@shiro.hasAnyRoles('sysadmin', 'A06')}" === 'true',
unionId: "${@shiro.getPrincipalProperty('union').getId()}",
}
},
methods: {
dropdownCommand(command) {
const {type, data} = command
if (type == 'view') {
this.openView(data)
} else if (type == 'delete') {
this.doDelete(data)
} else if (type == 'edit') {
this.openEdit(data.id)
}
},
openView(row) {
const {id} = row
this.$refs.twoInfo.openView(id)
this.$refs.guava.view()
},
async pageData() {
const {data} = await $.post('/platform/jdh/level2/info/pageData', this.pageForm, true)
this.tableData = data.list
this.pageForm.totalCount = data.totalCount
},
openEdit(id) {
window.location.href = '/platform/jdh/level2/info?id=' + id
},
async doDelete(row) {
const {id} = row
this.$confirm('确定要删除吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
callback: async (a, b) => {
if ("confirm" == a) {//确认后再执行
this.$set(row, "delLoading", true)
const resp = await $.get('/platform/jdh/level2/info/doDelete', {id: id})
this.$set(row, "delLoading", false)
if(resp.code===0){
this.pageData()
}else{
this.notifyWarning(resp.msg)
}
}
}
});
}
},
async created() {
this.pageData();
}
})
</script>
<!--#
}
#-->
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,570 @@
<!--#
layout("/layouts/platform.html"){
#-->
<style>
.el-descriptions__table {
table-layout: fixed !important;
}
.el-descriptions-item__cell {
text-align: center !important;
}
</style>
<div id="app" v-cloak>
<guava>
<tree-layout style="height: calc(100vh - 50px)">
<template #tree>
<div style="padding: 20px;">
<el-input
placeholder="输入关键字进行查找"
v-model="filterText">
</el-input>
</div>
<el-tree ref="tree" :data="treeData" class="v-tree" node-key="id"
:props="defaultProps"
default-expand-all :expand-on-click-node="false"
@node-click="handleNodeClick" accordion
highlight-current :filter-node-method="filterNode">
<div class="custom-tree-node" slot-scope="{ node, data }">
<div v-if="node.level==1" style="font-size: 16px;" class="v-node"><i
class="el-icon-s-home"></i>&nbsp;
{{ data.unionname }}
</div>
<div v-if="node.level==2"
style="font-size: 15px" :title="data.name" class="v-node">
<i class="el-icon-star-on" v-if="checkData.name==data.name"></i>
<i class="el-icon-star-off" v-else></i>
&nbsp; {{ data.unionname }}
<span style="color: #f76c6c">{{ '' + data.zlCount + ''}}</span>
</div>
</div>
</el-tree>
</template>
<template>
<el-card shadow="never">
<div class="btn-group tool-button">
<el-date-picker
placeholder="选择年度" style="width: 100%"
type="year"
v-model="pageForm.year"
value-format="yyyy">
</el-date-picker>
</div>
<!--<div class="btn-group tool-button">
<el-input style="width: 250px;" placeholder="请输入关键字查询" v-model="pageForm.zlname">
</el-input>
</div>-->
<div class="btn-group tool-button">
<el-select v-model="pageForm.jdhid" filterable placeholder="请选择教代会"
@change="addButtonIsDisabled">
<el-option
v-for="item in jdhList"
:key="item.id"
:label="item.jdhallname"
:value="item.jdhallname">
</el-option>
</el-select>
</div>
<!--<div class="btn-group tool-button" v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')}">
<el-select clearable v-model="pageForm.union_id" filterable placeholder="请选择工会" @change="unionChange">
<el-option
v-for="item in unionOptions"
:key="item.id"
:label="item.unionname"
:value="item.id">
</el-option>
</el-select>
</div>-->
<div class="btn-group tool-button">
<el-select clearable v-model="pageForm.zllx" filterable placeholder="请选择工作资料类型">
<el-option
v-for="item in filelxList"
:key="item.id"
:label="item.lxname"
:value="item.id">
</el-option>
</el-select>
</div>
<div class="btn-group tool-button">
<el-button type="primary" @click="doSearch" icon="el-icon-search"></el-button>
</div>
<div class="pull-right offscreen-right">
<el-button type="primary" size="medium" :disabled="addDisabled" @click="openAdd"><i
class="ti-plus"></i> 添加工作资料
</el-button>
</div>
</el-card>
<el-card shadow="never" class="mt10">
<vi-title2 title="资料列表">
<template #func>
<el-button v-if="${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')}" type="primary"
size="small" @click="oneAudit">一键审核
</el-button>
</template>
</vi-title2>
<el-table :data="tableData" @sort-change='pageOrder'>
<el-table-column label="序号" type="index" header-align="center" align="center">
<template scope="scope"><span>{{scope.$index+(pageForm.pageNumber - 1) * pageForm.pageSize + 1}} </span>
</template>
</el-table-column>
<el-table-column prop="zlname" label="资料名称">
</el-table-column>
<el-table-column sortable prop="jdhid" label="所属教代会">
</el-table-column>
<el-table-column sortable prop="lxname" label="资料类型">
</el-table-column>
<el-table-column sortable prop="username" label="上传人">
</el-table-column>
<el-table-column sortable prop="unionname" label="工会">
</el-table-column>
<el-table-column sortable prop="time" label="上传时间">
</el-table-column>
<!--<el-table-column sortable prop="ispass" label="是否通过">
<template slot-scope="scope">
<i v-if="scope.row.ispass === 0" class="fa fa-circle text-danger ml5"> 未通过</i>
<i v-if="scope.row.ispass === 1" class="fa fa-circle text-success ml5"> 通过</i>
</template>
</el-table-column>-->
<el-table-column sortable prop="state" label="状态">
<template slot-scope="scope">
<span v-if="scope.row.state === 0" class="text-primary">待审核</span>
<span v-if="scope.row.state === 1" class="text-danger">审核拒绝</span>
<span v-if="scope.row.state === 2" class="text-success">审核通过</span>
</template>
</el-table-column>
<el-table-column prop="userOnline" label="操作" width="100px">
<template slot-scope="scope">
<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="{type:'view',data:scope.row}">
预览
</el-dropdown-item>
<el-dropdown-item
v-if="(${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')}) || scope.row.state == 0"
:command="{type:'edit',data:scope.row}">
编辑
</el-dropdown-item>
<el-dropdown-item
v-if="(${@shiro.hasRole('sysadmin')||@shiro.hasRole('A06')}) || scope.row.state == 0"
:command="{type:'delete',data:scope.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, jumper"
:total="pageForm.totalCount">
</el-pagination>
</el-row>
</el-card>
</template>
</tree-layout>
</guava>
<el-dialog title="新建工作资料" :visible.sync="addDialogVisible">
<el-form :model="formData" ref="addForm" :rules="rules" label-width="100px">
<el-form-item label="上传人">
<el-input readonly value="${@shiro.getPrincipalProperty('username')}"></el-input>
</el-form-item>
<el-form-item prop="jdhid" label="所属教代会">
<el-select v-model="formData.jdhid" placeholder="选择教代会" style="width: 100%">
<el-option
v-for="item in jdhList"
:key="item.id"
:label="item.jdhallname"
:value="item.jdhallname">
</el-option>
</el-select>
</el-form-item>
<el-form-item prop="zlname" label="资料名称">
<el-input placeholder="请填写工作资料名称" v-model="formData.zlname"></el-input>
</el-form-item>
<el-form-item prop="zllx" label="资料类型">
<el-select v-model="formData.zllx" placeholder="选择资料类型" style="width: 100%">
<el-option
v-for="item in filelxList"
:key="item.id"
:label="item.lxname"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
<!--<el-form-item prop="ispass" label="是否通过">
<template>
<el-switch
v-model="formData.ispass"
active-color="#13ce66"
inactive-color="#ff4949">
</el-switch>
</template>
</el-form-item>-->
<el-form-item prop="files" label="附件上传">
<file-upload :files.sync="formData.files"></file-upload>
</el-form-item>
</el-form>
</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">
<el-form :model="formData" ref="editForm" :rules="rules" label-width="100px">
<el-form-item label="上传人">
<el-input readonly v-model="formData.username"></el-input>
</el-form-item>
<el-form-item prop="jdhid" label="所属教代会">
<el-select v-model="formData.jdhid" placeholder="选择教代会" style="width: 100%">
<el-option
v-for="item in jdhList"
:key="item.id"
:label="item.jdhallname"
:value="item.jdhallname">
</el-option>
</el-select>
</el-form-item>
<el-form-item prop="zlname" label="资料名称">
<el-input placeholder="请填写工作资料名称" v-model="formData.zlname"></el-input>
</el-form-item>
<el-form-item prop="zllx" label="资料类型">
<el-select v-model="formData.zllx" placeholder="选择资料类型" style="width: 100%">
<el-option
v-for="item in filelxList"
:key="item.id"
:label="item.lxname"
:value="item.id">
</el-option>
</el-select>
</el-form-item>
<!--<el-form-item prop="ispass" label="是否通过">
<template>
<el-switch
v-model="formData.ispass"
active-color="#13ce66"
inactive-color="#ff4949">
</el-switch>
</template>
</el-form-item>-->
<el-form-item prop="files" label="附件上传">
<file-upload :files.sync="formData.files"></file-upload>
</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="viewDialogVisible">
<el-descriptions class="margin-top" title="" :column="2" border>
<el-descriptions-item span="2">
<template slot="label">资料名称</template>
<div v-html="formData.zlname"></div>
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">上传人</template>
<div v-html="formData.username"></div>
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">上传时间</template>
<div v-html="formData.time"></div>
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">所属工会</template>
<div v-html="formData.unionname"></div>
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">教代会届次</template>
<div v-html="formData.jdhid"></div>
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">资料类型</template>
<div v-html="formData.lxname"></div>
</el-descriptions-item>
<el-descriptions-item>
<template slot="label">是否通过</template>
<div>{{formData.ispass?'通过':'不通过'}}</div>
</el-descriptions-item>
<el-descriptions-item span="2">
<template slot="label">附件</template>
<div>
<file-upload :files.sync="formData.files" view></file-upload>
</div>
</el-descriptions-item>
</el-descriptions>
<span slot="footer" class="dialog-footer">
<el-button @click="viewDialogVisible = false">关 闭</el-button>
</span>
</el-dialog>
</div>
<script>
let vue = new Vue({
el: "#app",
components: {
'file-upload': httpVueLoader('/components/plugins/FileUpload.vue'),
'tree-layout': httpVueLoader('/components/plugins/TreeLayout.vue'),
},
watch: {
filterText(val) {
this.$refs.tree.filter(val);
},
},
data() {
return {
filterText: '',
treeData: [],
defaultProps: {
children: 'child',
label: 'unionname',
},
addDialogVisible: false,
editDialogVisible: false,
viewDialogVisible: false,
tableData: [],
jdhList: [],
filelxList: [],
fileList: [],
pageForm: {
pageNumber: 1,
pageSize: 10,
totalCount: 0,
pageOrderName: "",
pageOrderBy: "",
zlname: "",
union_id: ""
},
formData: {},
rules: {
jdhid: [{required: true, message: '请填写所属教代会', trigger: ['blur', 'change']}],
zlname: [{required: true, message: '请填写所属教代会', trigger: ['blur', 'change']}],
zllx: [{required: true, message: '请填写资料类型', trigger: ['blur', 'change']}],
},
delFiles: [],
unionOptions: [],
checkData: {},
checkNode: {},
addDisabled: false,
}
},
methods: {
addButtonIsDisabled(val) {
const obj = this.jdhList.find(o => o.jdhallname === val)
this.addDisabled = obj.audit_state === 500
},
async oneAudit() {
this.$confirm('您确定要一键审核吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}).then(async () => {
const ids = this.tableData.map(o => o.id)
const resp = await $.post('/platform/jdh2/gzzlgl/oneAudit', {
ids: JSON.stringify(ids),
jdhid: this.pageForm.jdhid
})
if (resp.code === 0) {
this.doSearch()
this.$message.success(resp.msg)
}
}).catch(() => {
})
},
async handleNodeClick(data, node) {
this.checkData = data
this.checkNode = node
this.pageData()
},
filterNode(value, data, node) {
if (!value) return true;
return data.unionname.indexOf(value) !== -1
},
openView(row) {
const formData = clone(row)
formData.files = JSON.parse(formData.files || "[]")
this.formData = formData
this.viewDialogVisible = true
},
dropdownCommand(command) {
const {type, data} = command
if (type == 'view') {
this.openView(data)
} else if (type == 'edit') {
this.openEdit(data)
} else if (type == 'delete') {
this.doDelete(data.id)
}
},
handleChange: function (file, filelist) {
this.fileList = filelist;
},
handleRemove(file, filelist) {
if (file.status === 'success') {
this.fileList = filelist;
this.delFiles.push({fileid: file.id, filepath: file.url})
}
},
onDeleteFile(file) {
if (file.status === 2) {
console.log(file)
this.delFiles.push({fileid: file.fileDes.id, filepath: file.fileDes.filepath})
}
},
doDelete(id) {
this.$confirm('确定要删除吗', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}).then(() => {
$.post(base + '/platform/jdh2/gzzlgl/doDelete', {id: id}).then(res => {
if (res.code === 0) {
this.doSearch()
this.$message.success(res.msg)
}
})
}).catch(() => {
})
},
doEdit() {
this.$refs['editForm'].validate(async (valid) => {
if (valid) {
const formData = clone(this.formData)
formData.files = JSON.stringify(formData.files)
const resp = await $.post('/platform/jdh2/gzzlgl/doEdit', formData)
if (resp.code===0){
this.editDialogVisible = false
this.doSearch()
}
}
})
},
doSearch() {
this.pageForm.pageNumber = 1
this.loadTree()
},
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()
this.pageForm.unionId = this.checkData.id
$.post(base + '/platform/jdh2/gzzlgl/pageData', this.pageForm).then(res => {
sublime.closeLoadingbar()
if (res.code === 0) {
this.tableData = res.data.list
this.pageForm.totalCount = res.data.totalCount
}
})
},
openEdit(obj) {
if (this.$refs["editForm"])
this.$refs["editForm"].resetFields()
const formData = clone(obj)
formData.files = JSON.parse(formData.files || "[]")
formData.ispass = formData.ispass === 1
this.formData = formData
this.editDialogVisible = true
},
openAdd() {
if (this.$refs["addForm"])
this.$refs["addForm"].resetFields()
this.formData = {ispass: true, files: []}
this.addDialogVisible = true
},
doAdd() {
const loading = this.$loading({
lock: true,
text: '正在提交...',
spinner: 'el-icon-loading',
background: COVER_LAYER_COLOR
});
this.$refs['addForm'].validate(async valid => {
if (valid) {
const formData = clone(this.formData)
formData.files = JSON.stringify(formData.files)
const resp = await $.post('/platform/jdh2/gzzlgl/doAdd', formData)
if (resp.code===0){
this.addDialogVisible = false
this.doSearch()
loading.close()
}
}
})
},
async getJdh2(val) {
const {data} = await $.post('/platform/jdh2/gzzlgl/getJdh2', {unionId: val})
return data
},
async unionChange(val) {
this.jdhList = await this.getJdh2(val)
},
async loadTree() {
const res = await $.post('/platform/jdh2/gzzlgl/getTreeData', this.pageForm)
if (res.code === 0) {
this.treeData = res.data
const isAdmin = "${@shiro.hasAnyRoles('sysadmin', 'A06')}" === 'true'
if (isAdmin) {
const data = res.data[0].children && res.data[0].children.length > 0 ? {id: res.data[0].children[0].id} : {id: ''}
await this.handleNodeClick({data}, {level: 2})
} else {
const data = res.data[0].children && res.data[0].children.length > 0 ? {id: res.data[0].children[0].id} : {id: ''}
await this.handleNodeClick(data, {level: 2})
}
}
},
},
async created() {
this.jdhList = await this.getJdh2(null)
if (this.jdhList && this.jdhList.length > 0) {
this.pageForm.jdhid = this.jdhList[0].jdhallname
this.addButtonIsDisabled(this.pageForm.jdhid)
}
this.filelxList = await getJdh2Gzzllx()
this.unionOptions = await getUnions()
const isAdmin = "${@shiro.hasAnyRoles('sysadmin', 'A06')}" === 'true'
if (!isAdmin) {
const selfUnion = "${@shiro.getPrincipalProperty('union').getId()}";
this.unionOptions = this.unionOptions.find(x => x.id === selfUnion)
}
this.loadTree()
}
})
</script>
<!--#
}
#-->
@@ -0,0 +1,217 @@
<!--#
layout("/layouts/platform.html"){
#-->
<div id="app" v-cloak>
<guava>
<el-card shadow="never">
<div class="btn-group tool-button">
<el-input style="width: 350px;" clearable placeholder="请输入工作资料类型名称" v-model="pageForm.lxname"></el-input>
</div>
<div class="btn-group tool-button">
<el-button type="primary" @click="doSearch" icon="el-icon-search"></el-button>
</div>
<div class="pull-right offscreen-right">
<el-button type="primary" size="medium" @click="openAdd"><i class="ti-plus"></i> 新增工作资料类型</el-button>
</div>
</el-card>
<el-card shadow="never" class="mt20">
<el-table :data="tableData">
<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"></el-table-column>
<el-table-column align="center" header-align="center" label="工作资料类型名称" prop="lxname"></el-table-column>
<el-table-column align="center" header-align="center" label="操作" width="150px">
<template scope="scope">
<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="{type:'top',data:scope.row}" v-if="scope.row.xh!==1">
上移
</el-dropdown-item>
<el-dropdown-item :command="{type:'edit',data:scope.row}">
编辑
</el-dropdown-item>
<el-dropdown-item :command="{type:'delete',data:scope.row}">
删除
</el-dropdown-item>
<el-dropdown-item :command="{type:'bottom',data:scope.row}"
v-if="scope.row.xh!==pageForm.totalCount">
下移
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</template>
</el-table-column>
</el-table>
<el-row class="el-pagination-container">
<el-pagination
@current-change="pageNumberChange"
:current-page="pageForm.pageNumber"
layout="total, prev, pager, next, jumper"
:total="pageForm.totalCount">
</el-pagination>
</el-row>
</el-card>
</guava>
<el-dialog title="新增工作资料类型" :visible.sync="addDialogVisible" width="30%">
<el-form :model="formData" ref="addForm" :rules="rules">
<el-form-item prop="code" label="类型编码">
<el-input v-model="formData.code" placeholder="请输入工作资料类型编码"></el-input>
</el-form-item>
<el-form-item prop="lxname" label="类型名称">
<el-input v-model="formData.lxname" 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" @click="doAdd">确 定</el-button>
</span>
</el-dialog>
<el-dialog title="编辑工作资料类型" :visible.sync="editDialogVisible" width="30%">
<el-form :model="formData" ref="editForm" :rules="rules">
<el-form-item prop="code" label="类型编码">
<el-input v-model="formData.code" placeholder="请输入工作资料类型编码"></el-input>
</el-form-item>
<el-form-item prop="lxname" label="类型名称">
<el-input v-model="formData.lxname" 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" @click="doEdit">确 定</el-button>
</span>
</el-dialog>
</div>
<script>
new Vue({
el: '#app',
data() {
return {
pageForm: {
pageNumber: 1,
pageSize: 10,
totalCount: 0,
lxname: ''
},
addDialogVisible: false,
editDialogVisible: false,
formData: {},
rules: {
lxname: [{required: true, message: '请输入工作资料类型名称', trigger: ['change', 'blur']}],
code: [{required: true, message: '请输入工作资料类型编码', trigger: ['change', 'blur']}]
},
tableData: []
}
},
methods: {
dropdownCommand(command) {
const {type, data} = command
if (type == 'top') {
this.rowChange(data, false)
} else if (type == 'edit') {
this.openEdit(data)
} else if (type == 'delete') {
this.doDelete(data.id)
} else if (type == 'bottom') {
this.rowChange(data, true)
}
},
rowChange(row, toDown) {
$.post(base + '/platform/jdh2/gzzllx/xhChange', {id: row.id, xh: row.xh, toDown}).then(res => {
if (res.code === 0) {
this.doSearch()
}
})
},
openAdd() {
this.formData = {}
this.addDialogVisible = true
if (this.$refs["addForm"])
this.$refs["addForm"].resetFields()
},
doAdd() {
this.$refs['addForm'].validate(valid => {
if (valid) {
$.post(base + '/platform/jdh2/gzzllx/doAdd', this.formData).then(res => {
if (res.code === 0) {
this.addDialogVisible = false
this.pageData()
this.$message.success(res.msg)
} else {
this.$message.error(res.msg)
}
})
}
})
},
pageData() {
sublime.showLoadingbar()
$.post(base + '/platform/jdh2/gzzllx/pageData', this.pageForm).then(res => {
sublime.closeLoadingbar()
if (res.code === 0) {
this.tableData = res.data.list
this.pageForm.totalCount = res.data.totalCount
}
})
},
doSearch() {
this.pageForm.pageNumber = 1
this.pageData()
},
pageNumberChange(val) {
this.pageForm.pageNumber = val
this.pageData()
},
openEdit(obj) {
this.formData = JSON.parse(JSON.stringify(obj))
this.editDialogVisible = true
},
doEdit() {
this.$refs['editForm'].validate(valid => {
if (valid) {
$.post(base + '/platform/jdh2/gzzllx/doEdit', this.formData).then(res => {
if (res.code === 0) {
this.editDialogVisible = false
this.pageData()
this.$message.success(res.msg)
} else {
this.$message.error(res.msg)
}
})
}
})
},
doDelete(id) {
this.$confirm('此操作将删除工作资料类型,确认删除吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
$.post(base + '/platform/jdh2/gzzllx/doDelete', {id: id}).then(res => {
if (res.code === 0) {
this.doSearch()
this.$message.success(res.msg)
}
})
}).catch(() => {
})
}
},
created() {
this.pageData()
}
})
</script>
<!--#
}
#-->