Files
UNION_NSI/target/classes/views/platform/lxy/HdMange.html
T
2026-09-08 19:49:21 +08:00

868 lines
42 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!--#
layout("/layouts/platform.html"){
#-->
<style>
input[type="file"] {
display: none
}
.w-e-text-container {
height: 250px !important;
}
.v-box .el-card__header {
padding: 5px 15px;
}
.el-select-dropdown {
z-index: 99999999 !important;
}
.el-loading-mask {
z-index: 99999999 !important;
}
.el-picker-panel {
z-index: 99999999 !important;
}
.d-select {
width: 300px;
}
.hdnr .el-form-item__label:before {
content: '*';
color: #F56C6C;
margin-right: 4px;
}
</style>
<div id="app" v-cloak>
<guava>
<el-row class="transition-row">
<transition name="el-zoom-in-center">
<div v-show="v=='index'" class="transition-item">
<el-card shadow="never">
<div class="btn-group tool-button mt5">
<el-date-picker
v-model="pageForm.year"
type="year"
value-format="yyyy"
placeholder="选择年度">
</el-date-picker>
</div>
<div class="btn-group tool-button mt5">
<el-select class="d-select" v-model="pageForm.pastQuota" filterable clearable
width="300px"
placeholder="请选择活动">
<el-option
v-for="item in lxyHd"
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</div>
<div class="btn-group tool-button mt5">
<el-select class="d-select" v-model="pageForm.hdcd" filterable clearable
width="300px"
placeholder="请选择场地">
<el-option
v-for="item in lxyHdCd"
:key="item.id"
:label="item.hdcd"
: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-card>
<el-card shadow="never" class="mt10">
<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="序号" width="100px">
<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" width="300px"
align="center">
<template scope="scope">
<el-link type="primary" @click="lxy_app.openView(scope.row.id)">
{{scope.row.name}}
</el-link>
</template>
</el-table-column>
<el-table-column label="活动场地" prop="hdcd" header-align="center" show-overflow-tooltip
align="center"></el-table-column>
<el-table-column label="活动时间" prop="hdkssj" header-align="center" sortable
align="center">
<template scope="scope">
{{scope.row.hdkssj}} 至 {{scope.row.hdjssj}}
</template>
</el-table-column>
<el-table-column label="报名时间" prop="bmsj" header-align="center" sortable
align="center" width="330px">
<template scope="scope">
{{scope.row.bmkssj}} 至 {{scope.row.bmjzsj}}
</template>
</el-table-column>
<el-table-column label="状态" prop="name" header-align="center"
align="center">
<template scope="scope">
<span :class="lxy_app.getStatus(scope.row).class">{{lxy_app.getStatus(scope.row).name}}</span>
</template>
</el-table-column>
<el-table-column align="center" header-align="center" label="操作" fixed="right"
width="250px">
<template scope="scope">
<!-- <el-button size="mini" @click="openView(scope.row.id)">查看</el-button>-->
<el-button size="mini" type="primary" @click="openEdit(scope.row.id)" plain>编辑
</el-button>
<el-button size="mini" type="danger" @click="doDelete(scope.row.id)" plain>删除
</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>
</div>
</transition>
<!-- 新增 -->
<transition name="el-zoom-in-center">
<div v-show="v=='add'" class="transition-item">
<el-card class="box-card v-box" shadow="never">
<div slot="header" class="clearfix">
<el-button icon="el-icon-back" type="text" @click="v='index'" style="font-size: 18px">返回
</el-button>
</div>
<el-row style="padding: 0 10%;" v-loading="loading">
<el-steps :active="stepActive" simple finish-status="success">
<el-step title="活动信息" description="">
</el-step>
<el-step title="名额分配" description="">
</el-step>
</el-steps>
<transition name="el-zoom-in-top">
<div v-show="stepActive==0" class="transition-box" style="margin-top: 20px;">
<el-form :model="formData" ref="form" :rules="formRules"
label-width="120px">
<el-form-item label="填写活动信息&emsp;" label-width="135px" class="view-header">
</el-form-item>
<el-form-item label="活动名称" prop="name">
<el-input type="text" v-model="formData.name" maxlength="100"
placeholder="请填写活动名称"></el-input>
</el-form-item>
<el-row gutter="20">
<el-col :span="12">
<el-form-item label="报名时间" label-width="120px" prop="bmsj">
<el-date-picker
style="width: 100%"
v-model="formData.bmsj"
type="datetimerange"
align="right"
start-placeholder="开始日期"
end-placeholder="结束日期"
value-format="yyyy-MM-dd HH:mm:ss">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="活动时间" prop="hdsj">
<el-date-picker
style="width: 100%"
v-model="formData.hdsj"
type="daterange"
align="right"
start-placeholder="开始日期"
end-placeholder="结束日期"
value-format="yyyy-MM-dd">
</el-date-picker>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="活动场地" prop="hdcd">
<el-input type="text" v-model="formData.hdcd" maxlength="100"
placeholder="请填写活动场地"></el-input>
</el-form-item>
<el-form-item label="报名条件" prop="hdzysx">
<el-input type="textarea" rows="4" v-model="formData.hdzysx" maxlength="500"
placeholder="请填写报名条件"></el-input>
</el-form-item>
<div class="hdnr">
<el-form-item label="具体要求" prop="hdnr">
<div id="lrEditor"></div>
</el-form-item>
</div>
<el-form-item prop="accessory" label="附件上传">
<el-upload
name="file"
ref="upload"
action="**"
:on-remove="handleRemove"
:on-change="handleChange"
:auto-upload="false"
limit="5"
:file-list="fileList">
<el-button size="small" type="primary">选择文件</el-button>
</el-upload>
</el-form-item>
</el-form>
<div style="float: right;margin: 20px 0">
<el-button type="primary" @click="next">下一步</el-button>
</div>
</div>
</transition>
<transition name="el-zoom-in-bottom">
<div v-show="stepActive==1" class="transition-box" style="margin-top: 20px;">
<div class="pull-right offscreen-right mt5">
<span style="color:#409EFF">沿用之前活动名额&nbsp;&nbsp;</span>
<el-select class="d-select" v-model="pastQuota" filterable clearable
width="300px"
placeholder="请选择活动" @change="mefpChange">
<el-option
v-for="item in lxyHd"
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</div>
<el-table :data="unions_" size="medium" height="70vh">
<el-table-column align="center" type="index" header-align="center"
label="序号"></el-table-column>
<el-table-column label="院级工会" prop="unionname" sortable>
<template scope="{row}">
{{isDisPlayCode?''+row.unioncode+'':null}}{{row.unionname}}
</template>
</el-table-column>
<el-table-column label="会员人数" prop="membercount" sortable></el-table-column>
<el-table-column label="名额" prop="number" header-align="center" width="200px"
align="center">
<template scope="scope">
<el-input-number v-model="scope.row.number" placeholder="请填写名额数"
controls-position="right" :min="0"
:max="1000"></el-input-number>
</template>
</el-table-column>
</el-table>
<div style="float: right;margin: 20px 0">
<el-button @click="stepActive=0">上一步</el-button>
<el-button type="primary" :disabled="subDis" @click="doAdd()">
</el-button>
</div>
</div>
</transition>
</el-row>
</el-card>
</div>
</transition>
<!-- 编辑 -->
<transition name="el-zoom-in-center">
<div v-show="v=='edit'" class="transition-item">
<el-card class="box-card v-box" shadow="never">
<div slot="header" class="clearfix">
<el-button icon="el-icon-back" type="text" @click="v='index'" style="font-size: 18px">返回
</el-button>
</div>
<el-row style="padding: 0 10%;" v-loading="loading">
<el-tabs v-model="tabs_active" stretch>
<el-tab-pane label="活动信息" name="1">
<el-form :model="formData" ref="form" :rules="formRules"
label-width="120px">
<vi-title title="修改活动信息"></vi-title>
<el-form-item label="活动名称" prop="name">
<el-input type="text" v-model="formData.name" maxlength="100"
placeholder="请填写活动名称"></el-input>
</el-form-item>
<el-row gutter="20">
<el-col :span="12">
<el-form-item label="报名时间" label-width="120px" prop="bmsj">
<el-date-picker
style="width: 100%"
v-model="formData.bmsj"
type="datetimerange"
align="right"
start-placeholder="开始日期"
end-placeholder="结束日期"
value-format="yyyy-MM-dd HH:mm:ss">
</el-date-picker>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="活动时间" prop="hdsj">
<el-date-picker
style="width: 100%"
v-model="formData.hdsj"
type="daterange"
align="right"
start-placeholder="开始日期"
end-placeholder="结束日期"
value-format="yyyy-MM-dd">
</el-date-picker>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="活动场地" prop="hdcd">
<el-input type="text" v-model="formData.hdcd" maxlength="100"
placeholder="请填写活动场地"></el-input>
</el-form-item>
<el-form-item label="报名条件" prop="hdzysx">
<el-input type="textarea" rows="4" v-model="formData.hdzysx" maxlength="500"
placeholder="请填写报名条件"></el-input>
</el-form-item>
<el-form-item label="活动内容" prop="hdnr">
<div v-if="v=='edit'" id="lrEditor"></div>
</el-form-item>
<el-form-item prop="accessory" label="附件上传">
<el-upload
name="file"
ref="upload"
action="**"
:on-remove="handleRemove"
:on-change="handleChange"
:auto-upload="false"
limit="5"
:file-list="fileList">
<el-button size="small" type="primary">选择文件</el-button>
</el-upload>
</el-form-item>
</el-form>
<div style="float: right;margin: 20px 0">
<el-button type="primary" :disabled="subDis" @click="doEdit()">修 改</el-button>
</div>
</el-tab-pane>
<el-tab-pane label="名额分配" name="2">
<el-form label-width="120px">
<vi-title title="修改名额分配"></vi-title>
<div class="pull-right offscreen-right mt5">
<span style="color:#409EFF">沿用之前活动名额&nbsp;&nbsp;</span>
<el-select class="d-select" v-model="pastQuota" filterable clearable
width="300px"
placeholder="请选择活动" @change="mefpChange">
<el-option
v-for="item in lxyHd"
:key="item.id"
:label="item.name"
:value="item.id">
</el-option>
</el-select>
</div>
</el-form>
<el-table :data="unions_" size="medium" height="70vh">
<el-table-column align="center" type="index" header-align="center"
label="序号"></el-table-column>
<el-table-column label="院级工会" prop="unionname" sortable>
<template scope="{row}">
{{isDisPlayCode?''+row.unioncode+'':null}}{{row.unionname}}
</template>
</el-table-column>
<el-table-column label="会员人数" prop="membercount" sortable></el-table-column>
<el-table-column label="名额" prop="number" header-align="center" width="200px"
align="center">
<template scope="scope">
<el-input-number v-model="scope.row.number" placeholder="请填写名额数"
controls-position="right" :min="0"
:max="1000"></el-input-number>
</template>
</el-table-column>
</el-table>
<div style="float: right;margin: 20px 0">
<el-button type="primary" :disabled="subDis" @click="doEditMefp">提 交</el-button>
</div>
</el-tab-pane>
</el-tabs>
</el-row>
</el-card>
</div>
</transition>
</el-row>
</guava>
</div>
<script>
let E = window.wangEditor
let lrEditor = {}
var vue = new Vue({
el: '#app',
data() {
let validHdnr = (rule, value, callback) => {
if (!this.formData.hdnr || !dd3s.html2txt(this.formData.hdnr)) {
callback(new Error('请填写活动内容'));
} else {
callback();
}
};
return {
pastQuota: "",
tabs_active: '1',
unions: [],
unions_: [],
lxyHd: [],
lxyHdCd: [],
stepActive: 0,
v: "index",
userOptions: [],
addDialogVisible: false,
editDialogVisible: false,
loading: false,
tabLoading: false,
userLoading: false,
formData: {},
tableData: [],
pageForm: {
year: new Date().getFullYear() + "",
searchName: "id",
searchKeyword: "",
pageNumber: 1,
pageSize: 10,
totalCount: 0,
pageOrderName: "",
pageOrderBy: ""
},
formRules: {
name: [{required: true, message: '请填写活动名称', trigger: ['blur', 'change']}],
bmsj: [{required: true, message: '请选择报名时间', trigger: ['blur', 'change']}],
hdsj: [{required: true, message: '请选择活动时间', trigger: ['blur', 'change']}],
hdcd: [{required: true, message: '请填写活动场地', trigger: ['blur', 'change']}],
hdzysx: [{required: true, message: '请填写活动场地', trigger: ['blur', 'change']}],
hdnr: [{validator: validHdnr, trigger: ['blur', 'change']}],
},
subDis: false,
fileList: [],
delFiles: [],
}
},
methods: {
mefpChange() {
if (this.pastQuota === '') {
this.unions_ = this.unions.map(v => {
const o = {
ghid: v.id,
unionname: v.unionname,
number: 0,
unioncode: v.unioncode,
membercount: v.membercount
}
return o
})
return
}
$.post(base + "/platform/zgfw/lxy/hd/getPastQuota", {pastQuota: this.pastQuota}, res => {
this.unions_ = res.data
})
},
doEditMefp() {
const loading = this.$loading({
lock: true,
text: '数据提交中...',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
});
$.post(base + "/platform/zgfw/lxy/hd/doEditMefp", {mefp: JSON.stringify(this.unions_)}, (data) => {
loading.close()
if (data.code == 0) {
this.v = 'index'
this.$message({
message: '修改成功',
type: 'success'
});
this.pageData()
} else {
this.$message({
message: data.msg,
type: 'error'
});
}
}, "json");
},
async next() {
if (!this.formData.hdnr || !dd3s.html2txt(this.formData.hdnr)) {
this.$message.warning("请填写具体要求")
}
this.$refs["form"].validate((valid) => {
if (valid) {
if (moment(this.formData.hdsj[0].valueOf()) < moment(this.formData.bmsj[1]).valueOf()) {
this.$message.warning('报名截止时间必须早于活动时间!');
return
}
this.stepActive = 1
}
})
this.lxyHd = await getLxyHd()
},
handleRemove(file, fileList) {
this.fileList = fileList;
if (file.status === "success") {
this.delFiles.push(file.id);
}
},
handleChange(file, fileList) {
const delFile = () => {
for (let i = 0; i < fileList.length; i++) {
if (file === fileList[i]) {
fileList.splice(i, 1);
}
}
}
if (this.size === 0) {
this.$message.warning("您选择的是空文件!");
delFile()
}
if (!uploadFileType.includes(file.name.split('.')[1])) {
this.$message.warning("文件格式不支持!");
delFile()
}
this.fileList = fileList;
},
async userRemoteMethod(query) {
if (query) {
this.userLoading = true
const arr = await searchUser(query)
this.userOptions = this.userOptions.filter(v => {
return v.id == this.formData.hdfzr
}).concat(arr.filter(v => {
return v.id != this.formData.hdfzr
}));
this.userLoading = false
}
},
doEdit() {
this.$refs["form"].validate((valid) => {
if (valid) {
this.formData.bmkssj = this.formData.bmsj[0]
this.formData.bmjzsj = this.formData.bmsj[1]
this.formData.hdkssj = this.formData.hdsj[0]
this.formData.hdjssj = this.formData.hdsj[1]
let formdata = new FormData();
for (let key in this.formData) {
if (key != 'mefp') {
formdata.append(key, this.formData[key] ? this.formData[key] : '');
}
}
this.fileList.forEach(function (val) {
if (val.status === 'ready') {
formdata.append("files", val.raw, val.raw.name);
}
});
formdata.append("delFiles", this.delFiles)
this.subDis = true
const loading = this.$loading({
lock: true,
text: '数据提交中...',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
});
$.ajax({
url: "/platform/zgfw/lxy/hd/doEdit",
type: "post",
data: formdata,
processData: false,
contentType: false,
success: (data) => {
this.subDis = false
loading.close()
if (data.code === 0) {
this.v = 'index'
this.$message({
message: data.msg,
type: 'success'
});
this.pageData();
} else {
this.$message({
message: data.msg,
type: 'error'
});
}
},
error: data => {
this.subDis = false
loading.close()
this.$message({
message: data.msg,
type: 'error'
});
}
});
}
});
},
openEdit(id) {
this.pastQuota = ""
this.fileList = []
this.delFiles = []
this.formData = {}
this.stepActive = 0
this.v = 'edit'
this.tabs_active = '1'
this.loading = true
$.get(base + "/platform/zgfw/lxy/common/getHdInfo", {id}, (data) => {
if (data.code == 0) {
data.data.hdsj = [data.data.hdkssj, data.data.hdjssj]
data.data.bmsj = [data.data.bmkssj, data.data.bmjzsj]
this.unions_ = data.data.mefp
this.formData = data.data
//files
data.data.files.forEach(v => {
this.fileList.push({id: v.id, name: v.filename, url: v.filepath, status: 'success'})
})
this.$nextTick(() => {
$("#lrEditor").html("")
lrEditor = new E("#lrEditor")
lrEditor.config.onchange = (html) => {
this.formData.hdnr = html
}
lrEditor.create()
lrEditor.txt.html(data.data.hdnr)
})
} else {
this.$message({
message: data.msg,
type: 'error'
});
}
this.loading = false
}, "json");
},
doDelete(id) {
this.$confirm('确定要删除吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
callback: (a, b) => {
if ("confirm" == a) {//确认后再执行
$.post(base + "/platform/zgfw/lxy/hd/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");
}
}
});
},
doAdd() {
this.$refs["form"].validate((valid) => {
if (valid) {
this.formData.bmkssj = this.formData.bmsj[0]
this.formData.bmjzsj = this.formData.bmsj[1]
this.formData.hdkssj = this.formData.hdsj[0]
this.formData.hdjssj = this.formData.hdsj[1]
let formdata = new FormData();
for (let key in this.formData) {
formdata.append(key, this.formData[key] ? this.formData[key] : '');
}
this.fileList.forEach(function (val) {
formdata.append("files", val.raw, val.raw.name);
});
//const unions_ = this.unions_.filter(v => v.number)
formdata.append('mefp', JSON.stringify(this.unions_))
this.subDis = true
const loading = this.$loading({
lock: true,
text: '数据提交中...',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
});
$.ajax({
url: "/platform/zgfw/lxy/hd/doAdd",
type: "post",
data: formdata,
processData: false,
contentType: false,
success: (data) => {
this.subDis = false
loading.close()
if (data.code === 0) {
this.v = 'index'
this.$message({
message: data.msg,
type: 'success'
});
this.v = 'index'
this.pageData();
} else {
this.$message({
message: data.msg,
type: 'error'
});
}
},
error: data => {
this.subDis = false
loading.close()
this.$message({
message: data.msg,
type: 'error'
});
}
});
}
});
},
openAdd() {
this.pastQuota = ""
this.fileList = []
this.delFiles = []
this.formData = {}
this.unions_ = []
this.unions.map(v => {
this.unions_.push({
ghid: v.id,
unionname: v.unionname,
number: 0,
unioncode: v.unioncode,
membercount: v.membercount
})
})
this.stepActive = 0
this.v = 'add';
this.$nextTick(() => {
$("#lrEditor").html("")
lrEditor = new E("#lrEditor")
lrEditor.config.onchange = (html) => {
this.formData.hdnr = html
}
lrEditor.create()
})
if (this.$refs['form']) {
this.$refs['form'].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/zgfw/lxy/hd/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() {
const unions_resp = await $.get(loc() + '/getUnions')
this.unions = unions_resp.data
this.lxyHd = await getLxyHd()
this.lxyHdCd = await getlxyHdCd()
this.pageData();
}
})
</script>
<!--#layout("/platform/zgfw/lxy/dialogView.html"){}#-->
<!--#
}
#-->