commit
This commit is contained in:
@@ -1,443 +0,0 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.el-divider {
|
||||
background-color: #409EFF !important;
|
||||
}
|
||||
|
||||
.el-divider__text {
|
||||
color: #409EFF !important;
|
||||
}
|
||||
|
||||
.el-timeline-item__timestamp {
|
||||
color: #409EFF;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" class="platform" 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
|
||||
style="width: 100%"
|
||||
v-model="pageForm.year"
|
||||
value-format="yyyy"
|
||||
type="year"
|
||||
placeholder="选择年">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">活动名称:</div>
|
||||
<div class="search-item-option">
|
||||
<el-input v-model="pageForm.name" placeholder="请输入活动名称" clearable></el-input>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">工会名称:</div>
|
||||
<div class="search-item-option">
|
||||
<el-select v-model="pageForm.unionId" placeholder="请选择工会" filterable clearable
|
||||
style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in unionList"
|
||||
:key="item.id"
|
||||
:label="item.unionname"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-query">
|
||||
<el-button type="primary" icon="el-icon-search" @click="pageData">搜索</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" class="mt10">
|
||||
<table-tool label="活动列表" :app="this">
|
||||
<template #func>
|
||||
<el-button type="primary" icon="el-icon-edit-outline" size="small"
|
||||
@click="openAdd">
|
||||
创建活动
|
||||
</el-button>
|
||||
</template>
|
||||
</table-tool>
|
||||
|
||||
<el-table :data="tableData" style="width: 100%;margin-bottom: 20px" row-key="id"
|
||||
@sort-change="pageOrder" v-loading="tableLoading" :size="tableSize" 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"
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable">
|
||||
|
||||
<template v-if="column.prop=='time'" scope="{row}">
|
||||
<span>
|
||||
{{moment(row.startTime).format('YYYY-MM-DD')}} - {{moment(row.endTime).format('YYYY-MM-DD')}}
|
||||
</span>
|
||||
</template>
|
||||
|
||||
<template v-else-if="column.prop=='type'" scope="{row}">
|
||||
<span v-if="row.type==40001">分工会活动计划</span>
|
||||
<span v-if="row.type==40003">社团活动计划</span>
|
||||
<span v-if="row.type==40003">校工会活动计划</span>
|
||||
</template>
|
||||
|
||||
<template v-else-if="column.prop=='tussueName'" scope="{row}">
|
||||
<span v-if="row.type==40002">{{row.unionname?row.unionname:'暂无'}}</span>
|
||||
<span v-if="row.type==40003">{{row.clubName?row.clubName:'暂无'}}</span>
|
||||
<span v-else>暂无</span>
|
||||
</template>
|
||||
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column prop="userOnline" align="center" header-align="center" label="操作" width="150px">
|
||||
<template scope="{row}">
|
||||
<el-dropdown @command="dropdownCommand">
|
||||
<el-button size="mini" :loading="row.loading">
|
||||
<i class="ti-settings"></i>
|
||||
<span class="ti-angle-down"></span>
|
||||
</el-button>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item :command="{type:'view',row}">
|
||||
查看
|
||||
</el-dropdown-item>
|
||||
<!--# if(!@shiro.hasRole('A06')){ #-->
|
||||
<el-dropdown-item :command="{type:'export',row}">
|
||||
导出
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item :command="{type:'edit',row}">
|
||||
编辑
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item :command="{type:'delete',row}">
|
||||
删除
|
||||
</el-dropdown-item>
|
||||
<!--# } #-->
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<template #edit_func>
|
||||
<el-button type="primary" @click="operation">确 定</el-button>
|
||||
</template>
|
||||
|
||||
<template #edit>
|
||||
<vi-title title="填写活动信息"></vi-title>
|
||||
<el-form :model="formData" ref="addForm" :rules="formRules" label-width="100px" label-position="left"
|
||||
label-suffix=":" style="padding: 0 2%">
|
||||
|
||||
<el-form-item prop="name" label="活动名称">
|
||||
<el-input maxlength="50" placeholder="请填写活动名称" v-model="formData.name"
|
||||
type="text"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<!--<el-row :gutter="40">
|
||||
<el-col :span="12">
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="type" label="活动类型">
|
||||
<el-radio-group v-model="formData.type">
|
||||
<el-radio label="1" border>分工会活动</el-radio>
|
||||
<el-radio label="2" border>社团活动</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>-->
|
||||
|
||||
<el-row :gutter="40">
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="time" label="活动时间">
|
||||
<el-date-picker
|
||||
style="width: 100%"
|
||||
v-model="formData.time"
|
||||
type="daterange"
|
||||
value-format="yyyy-MM-dd"
|
||||
range-separator="-"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="peopleNum" label="活动人数">
|
||||
<el-input maxlength="10" placeholder="请填写活动人数" v-model="formData.peopleNum"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<el-row :gutter="40">
|
||||
<el-col :span="12">
|
||||
<el-form-item prop="address" label="活动地址">
|
||||
<el-input maxlength="50" placeholder="请填写活动地址" v-model="formData.address"
|
||||
type="text"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
<div style="display: flex;margin: 20px 0">
|
||||
<el-divider content-position="left">活动人员列表</el-divider>
|
||||
|
||||
<div style="padding-left: 10px">
|
||||
<el-tooltip class="item" effect="dark" content="点击添加活动人员" placement="top">
|
||||
<el-button icon="el-icon-plus" circle @click="openAddUser" type="primary"></el-button>
|
||||
</el-tooltip>
|
||||
</div>
|
||||
</div>
|
||||
<el-table style="margin-bottom: 20px" border stripe :data="userData" size="small"
|
||||
v-loading="userTabLoading">
|
||||
<el-table-column
|
||||
type="index" label="序号" header-align="center" align="center" width="100">
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column
|
||||
align="center"
|
||||
header-align="center"
|
||||
v-for="column in userColumns"
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable">
|
||||
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column prop="userOnline" align="center" header-align="center" label="操作"
|
||||
width="150px">
|
||||
<template scope="{row}">
|
||||
<el-button type="danger" icon="el-icon-delete" circle @click="delUser"></el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
</el-table>
|
||||
|
||||
<el-divider content-position="left">活动资料</el-divider>
|
||||
<file-upload :files.sync="formData.files"></file-upload>
|
||||
|
||||
</el-form>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<tissue-info ref="info"></tissue-info>
|
||||
</template>
|
||||
</guava>
|
||||
|
||||
<el-dialog title="添加人员" :visible.sync="dialogVisible" width="40%">
|
||||
|
||||
<el-form :model="formData" ref="form" :rules="formRules" label-width="100px">
|
||||
<el-form-item prop="userId" label="参加人员">
|
||||
<el-select v-model="formData.tissuePersonList" placeholder="请选择参加人员"
|
||||
multiple
|
||||
filterable
|
||||
remote
|
||||
reserve-keyword
|
||||
:remote-method="remoteMethod"
|
||||
:loading="selectLoading"
|
||||
style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in userList"
|
||||
:key="item.userId"
|
||||
:label="item.userName+'-'+item.loginName+'-'+item.unitName"
|
||||
:value="item.userId">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||
<el-button type="primary" @click="doAddUser">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
var vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
selectLoading: false,
|
||||
userTabLoading: false,
|
||||
dialogVisible: false,
|
||||
userData: [],
|
||||
userList: [],
|
||||
unionList: [],
|
||||
formData: {
|
||||
tissuePersonList: []
|
||||
},
|
||||
tableColumns: [
|
||||
{prop: 'name', label: '活动名称'},
|
||||
{prop: 'address', label: '活动地点'},
|
||||
{prop: 'type', label: '活动类型'},
|
||||
{prop: 'tussueName', label: '所属组织'},
|
||||
{prop: 'time', label: '活动日期'},
|
||||
{prop: 'peopleNum', label: '活动人数'}
|
||||
],
|
||||
userColumns: [
|
||||
{prop: 'userName', label: '姓名'},
|
||||
{prop: 'loginName', label: '工号'},
|
||||
{prop: 'sex', label: '性别'},
|
||||
{prop: 'mobile', label: '联系方式'},
|
||||
{prop: 'unitName', label: '所属单位'},
|
||||
{prop: 'unionName', label: '所属工会'}
|
||||
],
|
||||
formRules: {
|
||||
name: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
address: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
peopleNum: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
time: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
type: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
}
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'guava': httpVueLoader('/components/plugins/Guava.vue'),
|
||||
'file-upload': httpVueLoader('/components/plugins/FileUpload.vue'),
|
||||
'tissue-info': httpVueLoader('/components/activity/school/tissueInfo.vue')
|
||||
},
|
||||
methods: {
|
||||
dropdownCommand(command) {
|
||||
const {type, row} = command
|
||||
if (type === 'view') {
|
||||
this.openView(row)
|
||||
} else if (type === 'edit') {
|
||||
this.openEdit(row)
|
||||
} else if (type === 'delete') {
|
||||
this.doDelete(row)
|
||||
} else if (type === 'export') {
|
||||
location.href = "/platform/activity/union/info/mange/export?id=" + row.id
|
||||
}
|
||||
},
|
||||
async remoteMethod(query) {
|
||||
if (query) {
|
||||
this.selectLoading = true;
|
||||
const {data} = await $.post(loc() + "/findUser", {serachWord: query})
|
||||
this.userList = data
|
||||
this.selectLoading = false;
|
||||
}
|
||||
},
|
||||
openAddUser() {
|
||||
this.formData.tissuePersonList = []
|
||||
this.dialogVisible = true
|
||||
},
|
||||
doAddUser() {
|
||||
this.formData.tissuePersonList = this.userList.filter(v => this.formData.tissuePersonList.some(x => v.userId === x))
|
||||
this.userData = this.userData.concat(this.formData.tissuePersonList)
|
||||
this.dialogVisible = false
|
||||
},
|
||||
delUser(row) {
|
||||
this.userData.splice(this.userData.indexOf(row.userId), 1)
|
||||
this.formData.tissuePersonList.splice(this.formData.tissuePersonList.indexOf(row.userId), 1)
|
||||
},
|
||||
openView(row) {
|
||||
const {id} = row
|
||||
this.$refs.info.getInfo(id)
|
||||
this.$refs.guava.view()
|
||||
},
|
||||
async openEdit(row) {
|
||||
const {id} = row
|
||||
const resp = await $.post(loc() + "/findOne", {id})
|
||||
if(resp.code===0){
|
||||
const data = resp.data
|
||||
data.type = data.type + ''
|
||||
data.files = JSON.parse(data.files)
|
||||
data.time = [data.startTime, data.endTime]
|
||||
this.userData = clone(data.tissuePersonList)
|
||||
this.formData = data
|
||||
}else{
|
||||
this.notifyWarning(resp.msg)
|
||||
}
|
||||
this.$refs.guava.edit()
|
||||
},
|
||||
async openAdd() {
|
||||
this.$refs.guava.edit()
|
||||
this.userData = []
|
||||
this.$nextTick(() => {
|
||||
this.formData = {
|
||||
name: '',
|
||||
time: '',
|
||||
peopleNum: '',
|
||||
address: '',
|
||||
files: [],
|
||||
type: "40002",
|
||||
tissuePersonList: []
|
||||
}
|
||||
if (this.$refs['addForm']) {
|
||||
this.$refs['addForm'].resetFields()
|
||||
}
|
||||
})
|
||||
},
|
||||
async operation() {
|
||||
let url = this.formData.id ? "/doEdit" : "/doAdd"
|
||||
this.$refs["addForm"].validate(async (valid) => {
|
||||
if (valid) {
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '正在提交...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: COVER_LAYER_COLOR
|
||||
});
|
||||
|
||||
const formData = JSON.parse(JSON.stringify(this.formData))
|
||||
|
||||
if (formData.time && formData.time.length) {
|
||||
formData.startTime = formData.time[0]
|
||||
formData.endTime = formData.time[1]
|
||||
formData.time = undefined
|
||||
}
|
||||
|
||||
const resp = await $.post(loc() + url, {tissue: JSON.stringify(formData),})
|
||||
|
||||
loading.close()
|
||||
if(resp.code===0){
|
||||
this.pageData()
|
||||
this.$refs.guava.index()
|
||||
}else{
|
||||
this.notifyWarning(resp.msg)
|
||||
}
|
||||
} else {
|
||||
this.$notify.error({title: '错误', message: '存在未填写的的必填项'});
|
||||
}
|
||||
});
|
||||
},
|
||||
doDelete(row) {
|
||||
const {id} = row
|
||||
this.$confirm('确定要删除该活动吗?', '提示', {type: 'warning'}).then(async () => {
|
||||
this.$set(row, "loading", true)
|
||||
const resp = await $.post(loc() + "/doDelete", {id: id});
|
||||
this.$set(row, "loading", false)
|
||||
if(resp.code===0){
|
||||
this.pageData()
|
||||
}else{
|
||||
this.notifyWarning(resp.msg)
|
||||
}
|
||||
})
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
this.pageData()
|
||||
this.unionList = await getUnions(null)
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -1,341 +0,0 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<div id="app" class="platform" 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
|
||||
style="width: 100%"
|
||||
v-model="pageForm.year"
|
||||
value-format="yyyy"
|
||||
type="year"
|
||||
placeholder="选择年">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">计划名称:</div>
|
||||
<div class="search-item-option">
|
||||
<el-input v-model="pageForm.name" placeholder="请输入计划名称" clearable></el-input>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">工会名称:</div>
|
||||
<div class="search-item-option">
|
||||
<el-select v-model="pageForm.tissueId" placeholder="请选择工会" filterable clearable
|
||||
style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in unionList"
|
||||
:key="item.id"
|
||||
:label="item.unionname"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<template v-if="searchMore">
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">项目名称:</div>
|
||||
<div class="search-item-option">
|
||||
<el-select v-model="pageForm.eventId" placeholder="请选择活动项目" filterable clearable
|
||||
style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in eventList"
|
||||
:key="item.id"
|
||||
:label="item.allName"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
|
||||
<div class="search-query">
|
||||
<el-button type="primary" icon="el-icon-search" @click="pageData">搜索</el-button>
|
||||
<more v-model="searchMore"></more>
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" class="mt10">
|
||||
<table-tool label="计划列表" :app="this">
|
||||
<template #func>
|
||||
<el-button type="primary" icon="el-icon-edit-outline" size="small"
|
||||
@click="openAdd">
|
||||
创建活动计划
|
||||
</el-button>
|
||||
</template>
|
||||
</table-tool>
|
||||
|
||||
<el-table :data="tableData" style="width: 100%;margin-bottom: 20px" row-key="id"
|
||||
@sort-change="pageOrder" v-loading="tableLoading" :size="tableSize" 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"
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable">
|
||||
|
||||
<template v-if="column.prop=='carryOut'" scope="{row}">
|
||||
<span v-if="row.carryOut" class="text-success">已执行</span>
|
||||
<span v-if="!row.carryOut" class="text-primary">未执行</span>
|
||||
</template>
|
||||
|
||||
<template v-else-if="column.prop=='type'" scope="{row}">
|
||||
<span v-if="row.type==40001">分工会活动计划</span>
|
||||
<span v-if="row.type==40003">社团活动计划</span>
|
||||
<span v-if="row.type==40003">校工会活动计划</span>
|
||||
</template>
|
||||
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column prop="userOnline" align="center" header-align="center" label="操作" width="150px">
|
||||
<template scope="{row}">
|
||||
<el-dropdown @command="dropdownCommand">
|
||||
<el-button size="mini" :loading="row.loading">
|
||||
<i class="ti-settings"></i>
|
||||
<span class="ti-angle-down"></span>
|
||||
</el-button>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item :command="{type:'view',row}">
|
||||
查看
|
||||
</el-dropdown-item>
|
||||
<!--# if(!@shiro.hasRole('A06')){ #-->
|
||||
<el-dropdown-item :command="{type:'edit',row}">
|
||||
编辑
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item :command="{type:'delete',row}">
|
||||
删除
|
||||
</el-dropdown-item>
|
||||
<!--# } #-->
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<template #edit_func>
|
||||
<el-button type="primary" @click="operation">确 定</el-button>
|
||||
</template>
|
||||
|
||||
<template #edit>
|
||||
<vi-title title="填写计划信息"></vi-title>
|
||||
<el-form :model="formData" ref="form" :rules="formRules" label-width="100px" label-position="left"
|
||||
label-suffix=":" style="padding: 0 2%">
|
||||
|
||||
<el-form-item prop="type" label="活动类型">
|
||||
<el-radio-group v-model="formData.type">
|
||||
<el-radio label="2" border>分工会活动计划</el-radio>
|
||||
<el-radio label="3" border>社团活动计划</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item prop="name" label="计划名称">
|
||||
<el-input maxlength="50" placeholder="请填写计划名称" v-model="formData.name"
|
||||
type="text"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item prop="time" label="计划时间">
|
||||
<el-date-picker
|
||||
v-model="formData.time"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="选择日期"
|
||||
style="width: 100%">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item prop="eventId" label="活动项目">
|
||||
<el-select v-model="formData.eventId" placeholder="请选择活动项目" filterable clearable
|
||||
style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in eventList"
|
||||
:key="item.id"
|
||||
:label="item.allName"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item prop="content" label="计划内容" class="is-required">
|
||||
<div id="content"></div>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<plan-info ref="info"></plan-info>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
let E = window.wangEditor
|
||||
const editors = {}
|
||||
|
||||
var vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
let validContent = (rule, value, callback) => {
|
||||
if (!this.formData.content || !dd3s.html2txt(this.formData.content)) {
|
||||
callback(new Error('请填写计划内容'));
|
||||
} else {
|
||||
callback();
|
||||
}
|
||||
};
|
||||
return {
|
||||
unionList: [],
|
||||
eventList: [],
|
||||
flag: false,
|
||||
formData: {
|
||||
name: '',
|
||||
time: '',
|
||||
eventId: '',
|
||||
content: ''
|
||||
},
|
||||
tableColumns: [
|
||||
{prop: 'name', label: '计划名称'},
|
||||
{prop: 'time', label: '计划预计时间'},
|
||||
{prop: 'allName', label: '活动项目'},
|
||||
{prop: 'type', label: '类型'},
|
||||
{prop: 'carryOut', label: '计划状态'}
|
||||
],
|
||||
formRules: {
|
||||
type: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
name: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
time: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
eventId: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
content: [{validator: validContent, trigger: ['blur', 'change']}]
|
||||
},
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'guava': httpVueLoader('/components/plugins/Guava.vue'),
|
||||
'plan-info': httpVueLoader('/components/activity/school/planInfo.vue'),
|
||||
},
|
||||
methods: {
|
||||
dropdownCommand(command) {
|
||||
const {type, row} = command
|
||||
if (type === 'view') {
|
||||
this.openView(row)
|
||||
} else if (type === 'edit') {
|
||||
this.openEdit(row)
|
||||
} else if (type === 'delete') {
|
||||
this.doDelete(row)
|
||||
}
|
||||
},
|
||||
openView(row) {
|
||||
const {id} = row
|
||||
this.$refs.info.getInfo(id)
|
||||
this.$refs.guava.view()
|
||||
},
|
||||
async openEdit(row) {
|
||||
this.flag = false
|
||||
row.type = row.type + ''
|
||||
this.formData = row
|
||||
this.$refs.guava.edit()
|
||||
this.$nextTick(() => {
|
||||
this.initEditor()
|
||||
})
|
||||
},
|
||||
async openAdd() {
|
||||
this.formData = {}
|
||||
this.flag = false
|
||||
this.$refs.guava.edit()
|
||||
this.$nextTick(() => {
|
||||
this.initEditor()
|
||||
if (this.$refs['form']) {
|
||||
this.$refs['form'].resetFields()
|
||||
}
|
||||
|
||||
this.formData = {
|
||||
type: '2',
|
||||
name: '',
|
||||
time: '',
|
||||
eventId: '',
|
||||
content: ''
|
||||
}
|
||||
})
|
||||
},
|
||||
async operation() {
|
||||
let url = this.formData.id ? "/doEdit" : "/doAdd"
|
||||
this.$refs["form"].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() + url, {
|
||||
data: JSON.stringify(this.formData),
|
||||
})
|
||||
loading.close()
|
||||
if (resp.code === 0) {
|
||||
this.pageData()
|
||||
this.$refs.guava.index()
|
||||
} else {
|
||||
this.notifyWarning(resp.msg)
|
||||
}
|
||||
} else {
|
||||
this.$notify.error({title: '错误', message: '存在未填写的的必填项'});
|
||||
}
|
||||
});
|
||||
},
|
||||
doDelete(row) {
|
||||
const {id} = row
|
||||
this.$confirm('确定要删除该计划吗?', '提示', {type: 'warning'}).then(async () => {
|
||||
const resp = await $.post(loc() + "/doDelete", {id: id});
|
||||
if(resp.code===0){
|
||||
this.pageData()
|
||||
}else{
|
||||
this.notifyWarning(resp.msg)
|
||||
}
|
||||
})
|
||||
},
|
||||
initEditor() {
|
||||
let keys = ['content']
|
||||
keys.forEach(key => {
|
||||
$("#" + key).html("")
|
||||
editors[key] = new E('#' + key)
|
||||
editors[key].config.onchange = (html) => {
|
||||
this.formData[key] = html
|
||||
}
|
||||
editors[key].create()
|
||||
if (this.formData[key]) {
|
||||
editors[key].txt.html(this.formData[key])
|
||||
}
|
||||
})
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.pageData()
|
||||
this.eventList = await activity.getEvents()
|
||||
this.unionList = await getUnions(null);
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -1,152 +0,0 @@
|
||||
<!--#
|
||||
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 ref="guava">
|
||||
<el-card shadow="never">
|
||||
<!--#include("/platform/activity/union/addPlanCommon.html"){}#-->
|
||||
</el-card>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
let E = window.wangEditor
|
||||
const editors = {}
|
||||
var vue = new Vue({
|
||||
el: '#app',
|
||||
components: {
|
||||
'guava': httpVueLoader('/components/plugins/Guava.vue'),
|
||||
'plan-info': httpVueLoader('/components/activity/school/planInfo.vue'),
|
||||
},
|
||||
data() {
|
||||
let validContent = (rule, value, callback) => {
|
||||
if (!this.formData.content || !dd3s.html2txt(this.formData.content)) {
|
||||
callback(new Error('请填写计划内容'));
|
||||
} else {
|
||||
callback();
|
||||
}
|
||||
};
|
||||
return {
|
||||
activityTypeList: [],
|
||||
eventList: [],
|
||||
formData: {
|
||||
type: '40003',
|
||||
name: '',
|
||||
time: '',
|
||||
event: '',
|
||||
content: ''
|
||||
},
|
||||
formRules: {
|
||||
type: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
name: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
time: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
money: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
event: [{required: true, message: '必填', trigger: ['blur']}],
|
||||
activityType: [{required: true, message: '必填', trigger: ['blur']}],
|
||||
content: [{validator: validContent, trigger: ['blur', 'change']}]
|
||||
},
|
||||
id: '',
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
cancel() {
|
||||
if (this.id) {
|
||||
sublime.jumpPagePjax('/platform/activity/plan/club')
|
||||
}
|
||||
},
|
||||
doHandle() {
|
||||
let url = this.formData.id ? "/doEdit" : "/doAdd"
|
||||
this.$refs["form"].validate(async (valid) => {
|
||||
if (valid) {
|
||||
|
||||
const resp = await $.post('/platform/activity/plan' + url, {
|
||||
id: this.formData.id,
|
||||
name: this.formData.name,
|
||||
time: this.formData.time,
|
||||
content: this.formData.content,
|
||||
money: this.formData.money,
|
||||
event: JSON.stringify(this.formData.event),
|
||||
type: '40003',
|
||||
activityType: this.formData.activityType,
|
||||
})
|
||||
|
||||
if (resp.code === 0) {
|
||||
this.$notify({
|
||||
title: '成功',
|
||||
message: resp.msg,
|
||||
type: 'success',
|
||||
duration: 500,
|
||||
onClose: () => {
|
||||
sublime.jumpPagePjax('/platform/activity/plan/club')
|
||||
}
|
||||
});
|
||||
}
|
||||
} else {
|
||||
this.$notify.error({title: '错误', message: '存在未填写的的必填项'});
|
||||
}
|
||||
});
|
||||
},
|
||||
initEditor() {
|
||||
let keys = ['content']
|
||||
keys.forEach(key => {
|
||||
$("#" + key).html("")
|
||||
editors[key] = new E('#' + key)
|
||||
editors[key].config.onchange = (html) => {
|
||||
this.formData[key] = html
|
||||
}
|
||||
editors[key].create()
|
||||
if (this.formData[key]) {
|
||||
editors[key].txt.html(this.formData[key])
|
||||
}
|
||||
})
|
||||
},
|
||||
async getEvents() {
|
||||
const {code, data, msg} = await $.get("/platform/activity/common/getEvents")
|
||||
return data
|
||||
},
|
||||
async getActivityType() {
|
||||
const {code, data, msg} = await $.get("/platform/activity/common/getActivityType")
|
||||
return data
|
||||
},
|
||||
async initData() {
|
||||
const id = GetQueryString("id")
|
||||
this.id = id
|
||||
if (id) {
|
||||
const resp = await $.post('/platform/activity/plan/findOne', {id})
|
||||
if (resp.code === 0) {
|
||||
const cloneRow = clone(resp.data)
|
||||
cloneRow.event = JSON.parse(cloneRow.event)
|
||||
this.formData = cloneRow
|
||||
this.$nextTick(() => {
|
||||
this.initEditor()
|
||||
})
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
const self = this
|
||||
setTimeout(function () {
|
||||
self.initEditor()
|
||||
}, 100)
|
||||
//this.eventList = await this.getEvents()
|
||||
this.activityTypeList = await this.getActivityType()
|
||||
await this.initData()
|
||||
},
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -1,65 +0,0 @@
|
||||
<vi-title title="填写计划信息"></vi-title>
|
||||
<el-form :model="formData" ref="form" :rules="formRules" label-width="100px" label-position="left"
|
||||
label-suffix=":" style="padding: 0 2%">
|
||||
|
||||
<!-- <el-form-item prop="type" label="活动类型">
|
||||
<el-radio-group v-model="formData.type">
|
||||
<el-radio label="2" border>分工会活动计划</el-radio>
|
||||
<el-radio label="3" border>社团活动计划</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>-->
|
||||
|
||||
<el-form-item prop="name" label="计划名称">
|
||||
<el-input maxlength="50" placeholder="请填写计划名称" v-model="formData.name"
|
||||
type="text"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item prop="time" label="活动时间">
|
||||
<el-date-picker
|
||||
v-model="formData.time"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="选择日期"
|
||||
style="width: 100%">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
|
||||
<!--<el-form-item prop="event" label="活动项目">
|
||||
<!–<el-input maxlength="50" placeholder="请填写活动项目" v-model="formData.event"
|
||||
type="text"></el-input>–>
|
||||
<el-select v-model="formData.event" placeholder="请选择活动项目" filterable clearable multiple
|
||||
style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in eventList"
|
||||
:key="item.id"
|
||||
:label="item.allName"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>-->
|
||||
|
||||
<el-form-item prop="activityType" label="活动类型">
|
||||
<el-select v-model="formData.activityType" placeholder="请选择活动类型" filterable clearable
|
||||
style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in activityTypeList"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item prop="money" label="预算费用" class="is-required">
|
||||
<el-input maxlength="50" placeholder="请填写整数或者小数" v-model="formData.money"
|
||||
type="number"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item prop="content" label="计划内容" class="is-required">
|
||||
<div id="content"></div>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<el-row class="mt10" justify="end" type="flex">
|
||||
<el-button @click="cancel">取消</el-button>
|
||||
<el-button @click="doHandle" type="primary">提交</el-button>
|
||||
</el-row>
|
||||
@@ -1,152 +0,0 @@
|
||||
<!--#
|
||||
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 ref="guava">
|
||||
<el-card shadow="never">
|
||||
<!--#include("/platform/activity/union/addPlanCommon.html"){}#-->
|
||||
</el-card>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
let E = window.wangEditor
|
||||
const editors = {}
|
||||
var vue = new Vue({
|
||||
el: '#app',
|
||||
components: {
|
||||
'guava': httpVueLoader('/components/plugins/Guava.vue'),
|
||||
'plan-info': httpVueLoader('/components/activity/school/planInfo.vue'),
|
||||
},
|
||||
data() {
|
||||
let validContent = (rule, value, callback) => {
|
||||
if (!this.formData.content || !dd3s.html2txt(this.formData.content)) {
|
||||
callback(new Error('请填写计划内容'));
|
||||
} else {
|
||||
callback();
|
||||
}
|
||||
};
|
||||
return {
|
||||
activityTypeList: [],
|
||||
eventList: [],
|
||||
formData: {
|
||||
type: '40001',
|
||||
name: '',
|
||||
time: '',
|
||||
event: '',
|
||||
content: ''
|
||||
},
|
||||
formRules: {
|
||||
type: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
name: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
time: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
money: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
event: [{required: true, message: '必填', trigger: ['blur']}],
|
||||
activityType: [{required: true, message: '必填', trigger: ['blur']}],
|
||||
content: [{validator: validContent, trigger: ['blur', 'change']}]
|
||||
},
|
||||
id: '',
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
cancel() {
|
||||
if (this.id) {
|
||||
sublime.jumpPagePjax('/platform/activity/plan/school')
|
||||
}
|
||||
},
|
||||
doHandle() {
|
||||
let url = this.formData.id ? "/doEdit" : "/doAdd"
|
||||
this.$refs["form"].validate(async (valid) => {
|
||||
if (valid) {
|
||||
|
||||
const resp = await $.post('/platform/activity/plan' + url, {
|
||||
id: this.formData.id,
|
||||
name: this.formData.name,
|
||||
time: this.formData.time,
|
||||
content: this.formData.content,
|
||||
money: this.formData.money,
|
||||
event: JSON.stringify(this.formData.event),
|
||||
type: '40001',
|
||||
activityType: this.formData.activityType,
|
||||
})
|
||||
|
||||
if (resp.code === 0) {
|
||||
this.$notify({
|
||||
title: '成功',
|
||||
message: resp.msg,
|
||||
type: 'success',
|
||||
duration: 500,
|
||||
onClose: () => {
|
||||
sublime.jumpPagePjax('/platform/activity/plan/school')
|
||||
}
|
||||
});
|
||||
}
|
||||
} else {
|
||||
this.$notify.error({title: '错误', message: '存在未填写的的必填项'});
|
||||
}
|
||||
});
|
||||
},
|
||||
initEditor() {
|
||||
let keys = ['content']
|
||||
keys.forEach(key => {
|
||||
$("#" + key).html("")
|
||||
editors[key] = new E('#' + key)
|
||||
editors[key].config.onchange = (html) => {
|
||||
this.formData[key] = html
|
||||
}
|
||||
editors[key].create()
|
||||
if (this.formData[key]) {
|
||||
editors[key].txt.html(this.formData[key])
|
||||
}
|
||||
})
|
||||
},
|
||||
async getEvents() {
|
||||
const {code, data, msg} = await $.get("/platform/activity/common/getEvents")
|
||||
return data
|
||||
},
|
||||
async getActivityType() {
|
||||
const {code, data, msg} = await $.get("/platform/activity/common/getActivityType")
|
||||
return data
|
||||
},
|
||||
async initData() {
|
||||
const id = GetQueryString("id")
|
||||
this.id = id
|
||||
if (id) {
|
||||
const resp = await $.post('/platform/activity/plan/findOne', {id})
|
||||
if (resp.code === 0) {
|
||||
const cloneRow = clone(resp.data)
|
||||
cloneRow.event = JSON.parse(cloneRow.event)
|
||||
this.formData = cloneRow
|
||||
this.$nextTick(() => {
|
||||
this.initEditor()
|
||||
})
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
const self = this
|
||||
setTimeout(function () {
|
||||
self.initEditor()
|
||||
}, 100)
|
||||
//this.eventList = await this.getEvents()
|
||||
this.activityTypeList = await this.getActivityType()
|
||||
await this.initData()
|
||||
},
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -1,152 +0,0 @@
|
||||
<!--#
|
||||
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 ref="guava">
|
||||
<el-card shadow="never">
|
||||
<!--#include("/platform/activity/union/addPlanCommon.html"){}#-->
|
||||
</el-card>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
let E = window.wangEditor
|
||||
const editors = {}
|
||||
var vue = new Vue({
|
||||
el: '#app',
|
||||
components: {
|
||||
'guava': httpVueLoader('/components/plugins/Guava.vue'),
|
||||
'plan-info': httpVueLoader('/components/activity/school/planInfo.vue'),
|
||||
},
|
||||
data() {
|
||||
let validContent = (rule, value, callback) => {
|
||||
if (!this.formData.content || !dd3s.html2txt(this.formData.content)) {
|
||||
callback(new Error('请填写计划内容'));
|
||||
} else {
|
||||
callback();
|
||||
}
|
||||
};
|
||||
return {
|
||||
activityTypeList: [],
|
||||
eventList: [],
|
||||
formData: {
|
||||
type: '40002',
|
||||
name: '',
|
||||
time: '',
|
||||
event: '',
|
||||
content: ''
|
||||
},
|
||||
formRules: {
|
||||
type: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
name: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
time: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
money: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
event: [{required: true, message: '必填', trigger: ['blur']}],
|
||||
activityType: [{required: true, message: '必填', trigger: ['blur']}],
|
||||
content: [{validator: validContent, trigger: ['blur', 'change']}]
|
||||
},
|
||||
id: '',
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
cancel() {
|
||||
if (this.id) {
|
||||
sublime.jumpPagePjax('/platform/activity/plan/union')
|
||||
}
|
||||
},
|
||||
doHandle() {
|
||||
let url = this.formData.id ? "/doEdit" : "/doAdd"
|
||||
this.$refs["form"].validate(async (valid) => {
|
||||
if (valid) {
|
||||
|
||||
const resp = await $.post('/platform/activity/plan' + url, {
|
||||
id: this.formData.id,
|
||||
name: this.formData.name,
|
||||
time: this.formData.time,
|
||||
content: this.formData.content,
|
||||
money: this.formData.money,
|
||||
event: JSON.stringify(this.formData.event),
|
||||
type: '40002',
|
||||
activityType: this.formData.activityType,
|
||||
})
|
||||
|
||||
if (resp.code === 0) {
|
||||
this.$notify({
|
||||
title: '成功',
|
||||
message: resp.msg,
|
||||
type: 'success',
|
||||
duration: 500,
|
||||
onClose: () => {
|
||||
sublime.jumpPagePjax('/platform/activity/plan/union')
|
||||
}
|
||||
});
|
||||
}
|
||||
} else {
|
||||
this.$notify.error({title: '错误', message: '存在未填写的的必填项'});
|
||||
}
|
||||
});
|
||||
},
|
||||
initEditor() {
|
||||
let keys = ['content']
|
||||
keys.forEach(key => {
|
||||
$("#" + key).html("")
|
||||
editors[key] = new E('#' + key)
|
||||
editors[key].config.onchange = (html) => {
|
||||
this.formData[key] = html
|
||||
}
|
||||
editors[key].create()
|
||||
if (this.formData[key]) {
|
||||
editors[key].txt.html(this.formData[key])
|
||||
}
|
||||
})
|
||||
},
|
||||
async getEvents() {
|
||||
const {code, data, msg} = await $.get("/platform/activity/common/getEvents")
|
||||
return data
|
||||
},
|
||||
async getActivityType() {
|
||||
const {code, data, msg} = await $.get("/platform/activity/common/getActivityType")
|
||||
return data
|
||||
},
|
||||
async initData() {
|
||||
const id = GetQueryString("id")
|
||||
this.id = id
|
||||
if (id) {
|
||||
const resp = await $.post('/platform/activity/plan/findOne', {id})
|
||||
if (resp.code === 0) {
|
||||
const cloneRow = clone(resp.data)
|
||||
cloneRow.event = JSON.parse(cloneRow.event)
|
||||
this.formData = cloneRow
|
||||
this.$nextTick(() => {
|
||||
this.initEditor()
|
||||
})
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
const self = this
|
||||
setTimeout(function () {
|
||||
self.initEditor()
|
||||
}, 100)
|
||||
//this.eventList = await this.getEvents()
|
||||
this.activityTypeList = await this.getActivityType()
|
||||
await this.initData()
|
||||
},
|
||||
})
|
||||
</script>
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -1,999 +0,0 @@
|
||||
<style>
|
||||
.avatar-uploader .el-upload {
|
||||
border: 1px dashed #d9d9d9;
|
||||
border-radius: 6px;
|
||||
cursor: pointer;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.avatar-uploader .el-upload:hover {
|
||||
border-color: #409EFF;
|
||||
}
|
||||
|
||||
.avatar-uploader-icon {
|
||||
font-size: 28px;
|
||||
color: #8c939d;
|
||||
width: 178px;
|
||||
height: 178px;
|
||||
line-height: 178px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.avatar {
|
||||
width: 178px;
|
||||
height: 178px;
|
||||
display: block;
|
||||
}
|
||||
|
||||
#signMap .amap-icon img {
|
||||
position: absolute !important;
|
||||
width: 100% !important;
|
||||
height: 100% !important;
|
||||
top: 0 !important;
|
||||
left: 0 !important;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" v-cloak>
|
||||
<guava ref="guava">
|
||||
<el-card shadow="never" style="min-height: calc(100vh - 70px);position: relative">
|
||||
<el-form :model="formData" ref="addForm" :rules="formRules" label-width="130px"
|
||||
label-suffix=":">
|
||||
<el-tabs tab-position="top" v-model="activeName">
|
||||
<el-tab-pane label="活动基础信息" name="1">
|
||||
<vi-title title="填写活动信息"></vi-title>
|
||||
|
||||
<el-row :gutter="40">
|
||||
<el-col :xs="24" :lg="12" :xl="12">
|
||||
<el-form-item prop="name" label="活动名称">
|
||||
<el-input maxlength="50" placeholder="请填写活动名称"
|
||||
v-model="formData.name"
|
||||
type="text"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :lg="12" :xl="12">
|
||||
<el-form-item prop="activityCode" label="活动编号">
|
||||
<el-input maxlength="50" disabled
|
||||
v-model="formData.activityCode"
|
||||
type="text"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :xs="24" :lg="12" :xl="12">
|
||||
<el-form-item prop="projectTypeCode" label="活动项目类型">
|
||||
<el-select v-model="formData.projectTypeCode"
|
||||
placeholder="请选择活动类型"
|
||||
style="width: 100%;">
|
||||
<el-option
|
||||
v-for="item in projectType"
|
||||
:key="item.id"
|
||||
:label="item.name+' ('+item.code+')'"
|
||||
:value="item.code">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :xs="24" :lg="12" :xl="12">
|
||||
<el-form-item prop="isEnrollSystem" label="是否用于报名">
|
||||
<el-radio-group v-model="formData.isEnrollSystem">
|
||||
<el-radio-button :label="true">活动报名</el-radio-button>
|
||||
<el-radio-button :label="false">活动管理</el-radio-button>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :xs="24" :lg="12" :xl="12">
|
||||
<el-form-item prop="address" label="活动地址">
|
||||
<el-input maxlength="50" placeholder="请填写活动地址"
|
||||
v-model="formData.address"
|
||||
type="text"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :xs="24" :lg="12" :xl="12">
|
||||
<el-form-item prop="userId" label="联系人">
|
||||
<el-select v-model="formData.userId" placeholder="请选择联系人"
|
||||
filterable
|
||||
remote
|
||||
clearable
|
||||
reserve-keyword
|
||||
:remote-method="remoteMethod"
|
||||
:loading="selectLoading"
|
||||
style="width: 100%" @change="userChang">
|
||||
<el-option
|
||||
v-for="item in userList"
|
||||
:key="item.userId"
|
||||
:label="item.userName+'-'+item.loginName+'-'+item.unitName"
|
||||
:value="item.userId">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :lg="12" :xl="12">
|
||||
<el-form-item prop="mobile" label="联系方式">
|
||||
<el-input maxlength="50" placeholder="请填写联系方式"
|
||||
v-model="formData.mobile"
|
||||
type="text"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :xs="24" :lg="12" :xl="12" v-if="formData.isEnrollSystem">
|
||||
<el-form-item prop="plannedDate" label="活动计划时间">
|
||||
<!--<el-input maxlength="50" placeholder="活动计划时间"
|
||||
v-model="formData.plannedDate"></el-input>-->
|
||||
<el-date-picker
|
||||
style="width: 100%"
|
||||
v-model="formData.plannedDate"
|
||||
type="daterange"
|
||||
value-format="yyyy-MM-dd"
|
||||
range-separator="-"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期" @change="plannedDateChange">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :xs="24" :lg="12" :xl="12">
|
||||
<el-form-item prop="time" label="实际活动时间">
|
||||
<el-date-picker
|
||||
style="width: 100%"
|
||||
v-model="formData.time"
|
||||
type="daterange"
|
||||
value-format="yyyy-MM-dd"
|
||||
range-separator="-"
|
||||
start-placeholder="开始日期"
|
||||
end-placeholder="结束日期">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :xs="24" :lg="12" :xl="12">
|
||||
<el-form-item
|
||||
:rules="[{required:[1,2].includes(formData.signUpMethod),message:'请选择报名日期',trigger:['change','blur']}]"
|
||||
label="报名日期"
|
||||
prop="applyTime2">
|
||||
<el-date-picker
|
||||
style="width: 100%"
|
||||
v-model="formData.applyTime2"
|
||||
type="datetimerange"
|
||||
value-format="yyyy-MM-dd HH:mm"
|
||||
range-separator="-"
|
||||
start-placeholder="开始时间"
|
||||
end-placeholder="结束时间">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :xs="24" :lg="12" :xl="12" >
|
||||
<el-form-item prop="peopleNum" label="活动人数">
|
||||
<el-input-number maxlength="10" placeholder="请填写活动人数"
|
||||
:step="1"
|
||||
:precision="0"
|
||||
:disabled="[1,2].includes(formData.signUpMethod)"
|
||||
v-model.number="formData.peopleNum"></el-input-number>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :xs="24" :lg="12" :xl="12">
|
||||
<el-form-item prop="groupId" label="参加人员范围">
|
||||
<div style="display: flex; justify-content: space-between">
|
||||
<div style="width: 99%">
|
||||
<el-select prop="groupId" placeholder="参加人员范围"
|
||||
v-model="formData.groupId"
|
||||
style="width: 99%;"
|
||||
clearable
|
||||
filterable>
|
||||
<el-option v-for="item in activityGroupList"
|
||||
:label="item.groupName"
|
||||
:value="item.groupId"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
<div>
|
||||
<el-button
|
||||
@click="$refs.drawerUserScope.userScopeDialog = true"
|
||||
type="primary">设置
|
||||
</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
<el-col :lg="12" :xl="12" :xs="24" v-if="formData.isEnrollSystem">
|
||||
<el-form-item prop="signUpMethod" label="报名方式">
|
||||
<el-radio-group v-model="formData.signUpMethod"
|
||||
@change="signUpMethodChange">
|
||||
<!-- <el-radio :label="null">无需报名</el-radio>-->
|
||||
<el-radio :label="1">个人报名</el-radio>
|
||||
<el-radio :label="3">组队报名</el-radio>
|
||||
<el-radio :label="2" v-if="type===40001">分工会报名</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :lg="12" :xl="12" :xs="24">
|
||||
<el-form-item prop="xlFlag" label="活动提醒">
|
||||
<el-switch
|
||||
v-model="formData.xlFlag"
|
||||
active-color="#13ce66"
|
||||
inactive-color="#ff4949">
|
||||
</el-switch>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
<el-col :xs="12" :lg="12" :xl="12"
|
||||
v-if="[1,2,3].includes(formData.signUpMethod)">
|
||||
<el-form-item prop="userNumberLimit" label="报名人数限制">
|
||||
<el-radio-group v-model="formData.userNumberLimit">
|
||||
<el-radio :label="1"
|
||||
:disabled="formData.signUpMethod===2">
|
||||
总人数限制
|
||||
</el-radio>
|
||||
<el-radio :label="2" v-if="type===40001">分工会人数限制
|
||||
</el-radio>
|
||||
<el-radio :label="null">不限制</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="12" :lg="12" :xl="12"
|
||||
v-if="[3].includes(formData.signUpMethod)">
|
||||
<el-form-item prop="totalUserNumberLimit" label="组队人数">
|
||||
<el-input-number v-model="formData.teamNum" :min="1"
|
||||
:max="2000"
|
||||
:precision="0"
|
||||
></el-input-number>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :xs="12" :lg="12" :xl="12"
|
||||
v-if="[1,2,3].includes(formData.signUpMethod) && formData.userNumberLimit===1">
|
||||
<el-form-item prop="totalUserNumberLimit" label="总人数限制">
|
||||
<el-input-number v-model="formData.totalUserNumberLimit"
|
||||
:min="1" :max="2000"
|
||||
:precision="0"
|
||||
></el-input-number>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="24"
|
||||
v-if="[1,2,3].includes(formData.signUpMethod) && formData.userNumberLimit===2">
|
||||
<el-form-item prop="unionUserNumberLimit" label="分工会人数限制">
|
||||
<vi-title2 title="分段设置">
|
||||
<template #func>
|
||||
<el-button size="small" type="primary" @click="unionLimitQuickSetting">
|
||||
应用分段设置
|
||||
</el-button>
|
||||
</template>
|
||||
</vi-title2>
|
||||
<el-row v-for="(item,index) in unionUserNumCalc" :gutter="20" class="mb5">
|
||||
<el-col :span="7">
|
||||
<el-input-number v-model="item.startNum" :precision="0" :step="1" :min="1"
|
||||
placeholder="请输入最小人数"
|
||||
style="width: 100%"></el-input-number>
|
||||
</el-col>
|
||||
<el-col :span="7">
|
||||
<el-input-number v-model="item.endNum" :precision="0" :step="1" :min="1"
|
||||
placeholder="请输入最大人数"
|
||||
style="width: 100%"></el-input-number>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-input-number v-model="item.resultNum" :precision="0" :step="1" :min="1"
|
||||
placeholder="请输入限制人数"
|
||||
style="width: 100%"></el-input-number>
|
||||
</el-col>
|
||||
<el-col :span="4" class="text-right">
|
||||
<el-button icon="el-icon-plus" @click="unionUserNumCalc.push({})"></el-button>
|
||||
<el-button icon="el-icon-minus" @click="unionUserNumCalc.splice(index,1)"
|
||||
:disabled="unionUserNumCalc.length===1"></el-button>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row class="mt10">
|
||||
<div v-for="(item,index) in unionUserNumCalcTips" class="text-danger">
|
||||
<span class="mr10">({{index+1}}).</span> {{item}}
|
||||
</div>
|
||||
</el-row>
|
||||
|
||||
<vi-title2 title="比例设置" class="mt20">
|
||||
<template #func>
|
||||
一键比例:
|
||||
<el-input-number v-model="unionUserNumOneKeyRatio" :precision="0" :step="1" :min="0"
|
||||
placeholder="请输入一键比例"
|
||||
size="small"
|
||||
:max="100"></el-input-number>
|
||||
<el-button size="small" type="primary" @click="applyScaleSettings" class="ml5">应用比例设置
|
||||
</el-button>
|
||||
</template>
|
||||
</vi-title2>
|
||||
<el-table :data="formData.unionUserNumberLimit" max-height="500px">
|
||||
<el-table-column prop="unionname" label="分工会"></el-table-column>
|
||||
<el-table-column prop="teacherCount" label="人数"></el-table-column>
|
||||
<el-table-column prop="ratio" label="比例(%)">
|
||||
<template scope="{row}">
|
||||
<el-input-number v-model="row.ratio" :precision="0" :step="1" :min="0"
|
||||
:max="100"></el-input-number>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="limitNum" label="限制人数">
|
||||
<template scope="{row}">
|
||||
<el-input-number v-model="row.limitNum" :precision="0" :step="1" :min="0"
|
||||
:max="row.teacherCount"
|
||||
@change="calSummaryCount"></el-input-number>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<el-row class="mt20" justify="end" type="flex">
|
||||
<div class="text-danger"
|
||||
style="width: 100%;font-size: 18px;display: flex;align-items: center;font-weight: bold">
|
||||
限制总人数:{{summaryCount}}人
|
||||
</div>
|
||||
<!-- <el-button @click="clearUnionLimit" type="danger">清空分工会人数限制</el-button>
|
||||
<el-button @click="setUpUnionLimitDialog=false">取消</el-button>
|
||||
<el-button @click="doConfirmSetUpUnionLimit" type="primary">确定</el-button>-->
|
||||
</el-row>
|
||||
<!-- <el-table border stripe
|
||||
:data="formData.unionUserNumberLimit"
|
||||
size="small"
|
||||
height="500">
|
||||
<el-table-column type="index" label="序号"
|
||||
header-align="center" align="center"
|
||||
width="100">
|
||||
</el-table-column>
|
||||
<el-table-column label="分工会名称"
|
||||
prop="unionName"></el-table-column>
|
||||
<el-table-column label="分工会人数"
|
||||
prop="unionNum"></el-table-column>
|
||||
<el-table-column label="限制人数" prop="limitNum">
|
||||
<template slot-scope="{row}">
|
||||
<el-input-number v-model="row.limitNum" :min="1"
|
||||
:max="row.unionNum"
|
||||
:precision="0"
|
||||
></el-input-number>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>-->
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12" v-if="[1,2,3].includes(formData.signUpMethod)">
|
||||
<el-form-item label="是否需要签到">
|
||||
<el-radio-group v-model="formData.needSign"
|
||||
@change="(val)=>{formData.needSign?initMap():null}">
|
||||
<el-radio :label="true">需要</el-radio>
|
||||
<el-radio :label="false">不需要</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="12" v-if="formData.needSign">
|
||||
<el-form-item label="签到半径(m)">
|
||||
<el-input-number v-model="formData.rangeMeter"
|
||||
@change="rangeMeterChange"
|
||||
:precision="0" :step="1"
|
||||
:min="50"
|
||||
:max="1000"></el-input-number>
|
||||
<!-- <el-button type="primary" @click="marker.setMap(null);">清除点位</el-button>-->
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
<el-col :span="24" v-show="formData.needSign">
|
||||
<el-form-item label="活动签到点位">
|
||||
<el-card shadow="never">
|
||||
<div style="width: 100%;height: 300px"
|
||||
id="signMap"></div>
|
||||
</el-card>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
|
||||
<el-col :span="24">
|
||||
<el-form-item prop="activityContent" label="活动内容">
|
||||
<el-input
|
||||
type="textarea"
|
||||
:rows="7"
|
||||
placeholder="请输入活动内容"
|
||||
v-model="formData.activityContent">
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="24" v-if="!formData.isEnrollSystem">
|
||||
<el-form-item prop="activityExamineContent" label="活动考核内容">
|
||||
<el-input
|
||||
type="textarea"
|
||||
:rows="7"
|
||||
placeholder="请输入活动考核内容"
|
||||
v-model="formData.activityExamineContent">
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="24" v-if="formData.signUpMethod!=null">
|
||||
<el-form-item prop="cover" label="封面图">
|
||||
<el-upload
|
||||
class="avatar-uploader"
|
||||
:action="FILE_UPLOAD_ADDRESS"
|
||||
:show-file-list="false"
|
||||
:on-success="handleAvatarSuccess"
|
||||
:before-upload="beforeAvatarUpload">
|
||||
<img v-if="formData.cover"
|
||||
:src="FILE_DOMAIN + '/fileStreamPreview?id=' + formData.cover"
|
||||
class="avatar">
|
||||
<i v-else class="el-icon-plus avatar-uploader-icon"></i>
|
||||
</el-upload>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
</el-row>
|
||||
|
||||
</el-tab-pane>
|
||||
|
||||
<el-tab-pane label="活动费用" name="2" v-if="!formData.isEnrollSystem">
|
||||
<div style="display: flex;margin: 20px 0">
|
||||
<el-divider content-position="left">购置物品及价格</el-divider>
|
||||
|
||||
<div style="padding-left: 10px">
|
||||
<el-tooltip class="item" effect="dark" content="点击添加购置物品及价格"
|
||||
placement="top">
|
||||
<el-button icon="el-icon-plus" circle
|
||||
@click="formData.goods.push({})"
|
||||
type="primary"></el-button>
|
||||
</el-tooltip>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<el-form-item>
|
||||
<el-table :data="formData.goods" border size="mini" style="width: 100%"
|
||||
height="200">
|
||||
|
||||
<el-table-column sortable type="index" width="100" label="序号"
|
||||
align="center" header-align="center">
|
||||
</el-table-column>
|
||||
<el-table-column prop="name" label="物品名称" align="center"
|
||||
header-align="center">
|
||||
<template slot-scope="{row}">
|
||||
<el-input maxlength="50" placeholder="物品名称"
|
||||
v-model="row.name"
|
||||
type="text"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="price" label="预算费用" align="center"
|
||||
header-align="center">
|
||||
<template slot-scope="{row}">
|
||||
<el-input maxlength="50" placeholder="预算费用"
|
||||
v-model="row.price"
|
||||
type="number" @input="blur"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="actualPrice" label="实际费用" align="center"
|
||||
header-align="center">
|
||||
<template slot-scope="{row}">
|
||||
<el-input maxlength="50" placeholder="实际费用"
|
||||
v-model="row.actualPrice"
|
||||
type="number" @input="blur"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="操作" fixed="right" align="center"
|
||||
header-align="center"
|
||||
width="80px"
|
||||
fixed="right">
|
||||
<template slot-scope="scope">
|
||||
<el-button type="danger" icon="el-icon-delete" circle
|
||||
:disabled="formData.goods.length==0"
|
||||
@click="delNotesItem(scope)"></el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-form-item>
|
||||
|
||||
<el-divider content-position="left" class="dia"><span
|
||||
style="color: #3ea1ec;">附件</span>
|
||||
</el-divider>
|
||||
<el-row :gutter="40">
|
||||
|
||||
<el-col :xs="24" :lg="12" :xl="12" class="mb25">
|
||||
<el-form-item prop="billFiles" label="发票">
|
||||
<file-upload :files.sync="formData.billFiles"
|
||||
card></file-upload>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :xs="24" :lg="12" :xl="12" class="mb25">
|
||||
<el-form-item prop="photoFiles" label="照片">
|
||||
<file-upload :files.sync="formData.photoFiles"
|
||||
card></file-upload>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
</el-row>
|
||||
|
||||
<el-row>
|
||||
<el-col :xs="24" :lg="12" :xl="12">
|
||||
<el-form-item prop="otherFiles" label="其他">
|
||||
<file-upload :files.sync="formData.otherFiles"
|
||||
card></file-upload>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
</el-tab-pane>
|
||||
|
||||
<el-tab-pane label="活动人员信息" name="3" v-if="!formData.isEnrollSystem">
|
||||
<table-tool label="活动人员信息" :app="this">
|
||||
<template #func>
|
||||
<el-button icon="el-icon-plus" @click="openAddUser"
|
||||
type="primary">添加活动人员
|
||||
</el-button>
|
||||
</template>
|
||||
</table-tool>
|
||||
<el-table border stripe :data="userData" size="small"
|
||||
v-loading="userTabLoading" height="500">
|
||||
<el-table-column
|
||||
type="index" label="序号" header-align="center" align="center"
|
||||
width="100">
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column
|
||||
align="center"
|
||||
header-align="center"
|
||||
v-for="column in userColumns"
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable">
|
||||
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column prop="userOnline" align="center" header-align="center"
|
||||
label="操作"
|
||||
width="150px">
|
||||
<template scope="{row}">
|
||||
<el-button type="danger" size="mini"
|
||||
@click="delUser(row)">删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
</el-table>
|
||||
</el-tab-pane>
|
||||
|
||||
<el-tab-pane label="活动总结" name="4" v-if="!formData.isEnrollSystem">
|
||||
<el-form-item prop="activitySummary" label="活动总结">
|
||||
<el-input
|
||||
:disabled="!formData.time || Date.now() < Date.parse(formData.time[1])"
|
||||
type="textarea"
|
||||
:rows="5"
|
||||
placeholder="请输入活动内容"
|
||||
v-model="formData.activitySummary">
|
||||
</el-input>
|
||||
</el-form-item>
|
||||
<el-alert
|
||||
class="mb20"
|
||||
style="margin-left: 130px"
|
||||
v-if="!formData.time || Date.now() < Date.parse(formData.time[1])"
|
||||
show-icon
|
||||
title="活动结束后可输入活动总结"
|
||||
type="info">
|
||||
</el-alert>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</el-form>
|
||||
<div style="padding: 20px;text-align: center;">
|
||||
<el-button type="primary" @click="operation" style="width: 300px">确 定</el-button>
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
</guava>
|
||||
|
||||
<el-dialog title="添加人员" :visible.sync="dialogVisible" width="40%" :close-on-click-modal="false">
|
||||
|
||||
<el-form :model="formData" label-width="100px">
|
||||
<el-form-item prop="userId" label="参加人员">
|
||||
<el-select v-model="formData.tissuePersonList" placeholder="请选择参加人员"
|
||||
multiple
|
||||
filterable
|
||||
remote
|
||||
:remote-method="remoteMethod"
|
||||
:loading="selectLoading"
|
||||
style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in userList"
|
||||
:disabled="userData.map(v=>v.userId).includes(item.userId)"
|
||||
:key="item.userId"
|
||||
:label="item.userName+'-'+item.loginName+'-'+item.unitName"
|
||||
:value="item.userId">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="dialogVisible = false">取 消</el-button>
|
||||
<el-button type="primary" @click="doAddUser">确 定</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
|
||||
<drawer-user-scope
|
||||
@group_change="getActivityGroup"
|
||||
ref="drawerUserScope"
|
||||
:group_id.sync="formData.groupId"
|
||||
></drawer-user-scope>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
let marker = null
|
||||
let map = null
|
||||
let circle = null
|
||||
var vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
unionUserNumOneKeyRatio: null,
|
||||
summaryCount: 0,
|
||||
unionUserNumCalc: [{}],
|
||||
activeName: '1',
|
||||
actvivtyUrl: "/platform/activity/info/mange",
|
||||
selectLoading: false,
|
||||
userTabLoading: false,
|
||||
dialogVisible: false,
|
||||
userData: [],
|
||||
userList: [],
|
||||
unionList: [],
|
||||
projectType: [],
|
||||
pageForm: {
|
||||
type: type,
|
||||
year: new Date().getFullYear() + ''
|
||||
},
|
||||
formRules: {
|
||||
groupId: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
name: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
type: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
projectTypeCode: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
address: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
plannedDate: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
},
|
||||
userColumns: [
|
||||
{prop: 'userName', label: '姓名'},
|
||||
{prop: 'loginName', label: '工号'},
|
||||
{prop: 'sex', label: '性别'},
|
||||
{prop: 'mobile', label: '联系方式'},
|
||||
{prop: 'unitName', label: '所属单位'},
|
||||
{prop: 'unionName', label: '所属工会'}
|
||||
],
|
||||
/*ZXY - ADD*/
|
||||
activityGroupList: [],
|
||||
userScopeDialog: false
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
unionUserNumCalcTips() {
|
||||
return this.unionUserNumCalc.map(v => {
|
||||
return (v.startNum ? v.startNum : '?') + '-' + (v.endNum ? v.endNum : '?') + '人的分工会,限报' + (v.resultNum ? v.resultNum : '?') + '人'
|
||||
})
|
||||
},
|
||||
},
|
||||
components: {
|
||||
'drawer-user-scope': httpVueLoader('/components/plugins/DrawerUserScope.vue'),
|
||||
},
|
||||
methods: {
|
||||
//应用比例设置
|
||||
applyScaleSettings() {
|
||||
this.formData.unionUserNumberLimit.forEach(v => {
|
||||
v.limitNum = parseFloat((v.teacherCount * this.unionUserNumOneKeyRatio / 100).toFixed(0))
|
||||
if (v.ratio) {
|
||||
v.limitNum = parseFloat((v.teacherCount * v.ratio / 100).toFixed(0))
|
||||
}
|
||||
})
|
||||
this.calSummaryCount()
|
||||
},
|
||||
calSummaryCount() {
|
||||
const array = this.formData.unionUserNumberLimit
|
||||
if (array) {
|
||||
this.summaryCount = array.reduce((prev, curr) => {
|
||||
const value = Number(curr.limitNum);
|
||||
if (!isNaN(value)) {
|
||||
return prev + curr.limitNum;
|
||||
} else {
|
||||
return prev;
|
||||
}
|
||||
}, 0)
|
||||
}
|
||||
},
|
||||
unionLimitQuickSetting() {
|
||||
this.unionUserNumCalc.forEach((v, i) => {
|
||||
const startNum = v.startNum
|
||||
const endNum = v.endNum
|
||||
const resultNum = v.resultNum
|
||||
if (startNum > endNum) {
|
||||
this.$message.warning('第' + (i + 1) + '行设置错误')
|
||||
} else {
|
||||
this.formData.unionUserNumberLimit.forEach(x => {
|
||||
if (x.teacherCount >= startNum && x.teacherCount <= endNum) {
|
||||
x.limitNum = resultNum
|
||||
}
|
||||
})
|
||||
this.calSummaryCount()
|
||||
}
|
||||
})
|
||||
},
|
||||
beforeAvatarUpload(file) {
|
||||
const isLt4M = file.size / 1024 / 1024 / 1024 / 1024 < 2;
|
||||
if (!isLt4M) {
|
||||
this.$message.warning('上传头像图片大小不能超过 4MB!');
|
||||
}
|
||||
return isLt4M;
|
||||
},
|
||||
rangeMeterChange(val) {
|
||||
if (!marker || !this.formData.location || !Array.isArray(this.formData.location)) {
|
||||
return
|
||||
}
|
||||
const lng = parseFloat(this.formData.location[0])
|
||||
const lat = parseFloat(this.formData.location[1])
|
||||
if (circle) {
|
||||
map.remove(circle)
|
||||
circle = null
|
||||
}
|
||||
circle = new AMap.Circle({
|
||||
center: new AMap.LngLat(lng, lat), // 圆心位置
|
||||
radius: val, //半径
|
||||
strokeColor: "#F33", //线颜色
|
||||
strokeOpacity: 1, //线透明度
|
||||
strokeWeight: 1, //线粗细度
|
||||
fillColor: "#ee2200", //填充颜色
|
||||
fillOpacity: 0.35 //填充透明度
|
||||
})
|
||||
map.add(circle)
|
||||
map.setFitView()
|
||||
},
|
||||
|
||||
async handleAvatarSuccess(res, file) {
|
||||
this.$set(this.formData, 'cover', res.data.filepath)
|
||||
await this.$refs['addForm'].validate()
|
||||
},
|
||||
plannedDateChange(val) {
|
||||
this.$set(this.formData, "time", val)
|
||||
},
|
||||
userChang(val) {
|
||||
this.$set(this.formData, "mobile", val ? this.userList.find(v => v.userId === val).mobile : null)
|
||||
},
|
||||
delNotesItem(scope) {
|
||||
this.delNotesList.push(scope.row.id)
|
||||
this.formData.goods.splice(scope.$index, 1)
|
||||
},
|
||||
async remoteMethod(query) {
|
||||
if (query) {
|
||||
this.selectLoading = true;
|
||||
const {data} = await $.post(this.actvivtyUrl + "/findUser", {
|
||||
serachWord: query,
|
||||
activity_type: type
|
||||
})
|
||||
this.userList = data
|
||||
this.selectLoading = false;
|
||||
}
|
||||
},
|
||||
openAddUser() {
|
||||
this.formData.tissuePersonList = []
|
||||
this.dialogVisible = true
|
||||
},
|
||||
doAddUser() {
|
||||
this.formData.tissuePersonList = this.userList.filter(v => this.formData.tissuePersonList.some(x => v.userId === x))
|
||||
this.userData = this.userData.concat(this.formData.tissuePersonList)
|
||||
this.dialogVisible = false
|
||||
},
|
||||
async delUser(row) {
|
||||
this.userData.splice(this.userData.indexOf(row.userId), 1)
|
||||
this.formData.tissuePersonList.splice(this.formData.tissuePersonList.indexOf(row.userId), 1)
|
||||
|
||||
// const confirm = await this.$confirm('您确定要删除吗?', '提示', {
|
||||
// confirmButtonText: '确定',
|
||||
// cancelButtonText: '取消',
|
||||
// type: 'warning'
|
||||
// })
|
||||
// if (confirm === 'confirm') {
|
||||
// this.userData.splice(this.userData.indexOf(row.userId), 1)
|
||||
// this.formData.tissuePersonList.splice(this.formData.tissuePersonList.indexOf(row.userId), 1)
|
||||
// const resp = await $.post('/platform/activity/apply/doDeleteActivityRegister', {
|
||||
// activityId: row.tissueId,
|
||||
// userId: row.userId
|
||||
// })
|
||||
// }
|
||||
},
|
||||
async groupIdChange(val) {
|
||||
const resp = await $.get('/platform/activity/apply/getUnionData', {activityScopeGroupId: val})
|
||||
this.formData.unionUserNumberLimit = resp.data
|
||||
},
|
||||
|
||||
async operation() {
|
||||
if (this.formData.applyTime2 && this.formData.applyTime2.length > 0) {
|
||||
if (moment(this.formData.time[0]).valueOf() <= moment(this.formData.applyTime2[0]).valueOf()) {
|
||||
this.$notify.error({title: '错误', message: '活动时间必须晚于报名时间'});
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
let url = this.formData.id ? "/doEdit" : "/doAdd"
|
||||
this.$refs["addForm"].validate(async (valid) => {
|
||||
if (valid) {
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '正在提交...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: COVER_LAYER_COLOR
|
||||
});
|
||||
|
||||
const formData = JSON.parse(JSON.stringify(this.formData))
|
||||
formData.type = this.pageForm.type
|
||||
formData.apply_type = 1
|
||||
const {time, applyTime2, plannedDate} = formData
|
||||
if (applyTime2 && applyTime2.length) {
|
||||
formData.applyStartTime = applyTime2[0]
|
||||
formData.applyEndTime = applyTime2[1]
|
||||
formData.applyTime2 = undefined
|
||||
}
|
||||
if (time && time.length) {
|
||||
formData.startTime = formData.time[0]
|
||||
formData.endTime = formData.time[1]
|
||||
formData.time = undefined
|
||||
}
|
||||
if (plannedDate && plannedDate.length) {
|
||||
formData.startPlannedDate = formData.plannedDate[0]
|
||||
formData.endPlannedDate = formData.plannedDate[1]
|
||||
formData.plannedDate = undefined
|
||||
}
|
||||
|
||||
const resp = await $.post(this.actvivtyUrl + url, {tissue: JSON.stringify(formData)})
|
||||
loading.close()
|
||||
if (resp.code === 0) {
|
||||
if (type === 40002) {
|
||||
sublime.jumpPagePjax("/platform/activity/info/mange/union")
|
||||
} else if (type === 40003) {
|
||||
sublime.jumpPagePjax("/platform/activity/info/mange/club")
|
||||
} else {
|
||||
sublime.jumpPagePjax("/platform/activity/info/mange/school")
|
||||
}
|
||||
} else {
|
||||
this.notifyWarning(resp.msg)
|
||||
}
|
||||
} else {
|
||||
this.$notify.error({title: '错误', message: '存在未填写的的必填项'});
|
||||
}
|
||||
});
|
||||
},
|
||||
async init() {
|
||||
this.delNotesList = []
|
||||
this.formData = {
|
||||
time: [],
|
||||
applyTime2: [],
|
||||
plannedDate: [],
|
||||
goods: [],
|
||||
billFiles: [],
|
||||
photoFiles: [],
|
||||
otherFiles: [],
|
||||
tissuePersonList: [],
|
||||
unionUserNumberLimit: [],
|
||||
signUpMethod: null,
|
||||
rangerMeter: 100,
|
||||
isEnrollSystem: true,
|
||||
}
|
||||
const {data} = await $.get('/platform/activity/apply/generateActivityCode', {activity_type: type})
|
||||
this.$set(this.formData, 'activityCode', data)
|
||||
this.unionList = await getUnions(null)
|
||||
const resp = await $.get('/platform/activity/apply/getUnionData', {activityScopeGroupId: this.formData.groupId})
|
||||
this.formData.unionUserNumberLimit = resp.data
|
||||
await this.initMap()
|
||||
},
|
||||
async findOne(id) {
|
||||
const {data, code, msg} = await $.post(this.actvivtyUrl + "/findOne", {id})
|
||||
if (code === 0) {
|
||||
if (data.userId) {
|
||||
const user = await queryUserByIds([data.userId])
|
||||
await this.remoteMethod(user[0].loginname)
|
||||
}
|
||||
data.type = data.type + ''
|
||||
if (data.billFiles && data.billFiles.length > 0) data.billFiles = JSON.parse(data.billFiles)
|
||||
if (data.photoFiles && data.photoFiles.length > 0) data.photoFiles = JSON.parse(data.photoFiles)
|
||||
if (data.otherFiles && data.otherFiles.length > 0) data.otherFiles = JSON.parse(data.otherFiles)
|
||||
if (data.applyStartTime) data.applyTime2 = [data.applyStartTime, data.applyEndTime]
|
||||
if (data.startTime) data.time = [data.startTime, data.endTime]
|
||||
if (data.startPlannedDate) data.plannedDate = [data.startPlannedDate, data.endPlannedDate]
|
||||
this.userData = clone(data.tissuePersonList)
|
||||
data.unionUserNumberLimit = JSON.parse(data.unionUserNumberLimit)
|
||||
data.location = JSON.parse(data.location)
|
||||
this.formData = data
|
||||
if (!this.formData.unionUserNumberLimit) {
|
||||
const resp = await $.get('/platform/activity/apply/getUnionData', {activityScopeGroupId: this.formData.groupId})
|
||||
this.formData.unionUserNumberLimit = resp.data
|
||||
}
|
||||
if (this.formData.needSign) {
|
||||
await this.initMap()
|
||||
}
|
||||
} else {
|
||||
this.notifyWarning(msg)
|
||||
}
|
||||
},
|
||||
initMap() {
|
||||
this.$nextTick(() => {
|
||||
// if (map == null) {
|
||||
map = new AMap.Map("signMap", {
|
||||
resizeEnable: true,
|
||||
center: [118.640081, 32.082496],
|
||||
zoom: 16
|
||||
})
|
||||
// }
|
||||
|
||||
if (!this.formData.needSign) {
|
||||
return
|
||||
}
|
||||
|
||||
if (this.formData.location && Array.isArray(this.formData.location)) {
|
||||
const lng = parseFloat(this.formData.location[0])
|
||||
const lat = parseFloat(this.formData.location[1])
|
||||
if (marker) {
|
||||
map.remove(marker)
|
||||
marker = null
|
||||
}
|
||||
|
||||
marker = new AMap.Marker({
|
||||
position: [lng, lat],
|
||||
offset: new AMap.Pixel(-13, -30)
|
||||
})
|
||||
console.log(marker)
|
||||
map.add(marker)
|
||||
this.rangeMeterChange(this.formData.rangeMeter)
|
||||
}
|
||||
map.on('click', (e) => {
|
||||
if (!this.formData.rangeMeter) {
|
||||
this.$message.warning('请先设置签到半径')
|
||||
return
|
||||
}
|
||||
|
||||
if (marker) {
|
||||
map.remove(marker)
|
||||
}
|
||||
if (circle) {
|
||||
map.remove(circle)
|
||||
}
|
||||
marker = new AMap.Marker({
|
||||
position: [e.lnglat.getLng(), e.lnglat.getLat()],
|
||||
offset: new AMap.Pixel(-13, -30)
|
||||
})
|
||||
map.add(marker)
|
||||
this.formData.location = []
|
||||
this.formData.location.push(e.lnglat.getLng())
|
||||
this.formData.location.push(e.lnglat.getLat())
|
||||
this.rangeMeterChange(this.formData.rangeMeter)
|
||||
|
||||
});
|
||||
})
|
||||
},
|
||||
signUpMethodChange(val) {
|
||||
if (val == null) {
|
||||
this.$set(this.formData, 'userNumberLimit', null)
|
||||
this.$set(this.formData, 'needSign', false)
|
||||
this.$set(this.formData, 'rangeMeter', null)
|
||||
}
|
||||
},
|
||||
async getActivityGroup() {
|
||||
const resp = await $.get('/platform/activity/basic/scope/getActivityUserScopeGroup')
|
||||
this.activityGroupList = resp.data
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
await this.getActivityGroup()
|
||||
const projectType = await getActivityTwoLevelType("50000")
|
||||
projectType.forEach(v => {
|
||||
if (v.code !== "50004") {
|
||||
this.projectType.push(v)
|
||||
}
|
||||
})
|
||||
const id = GetQueryString("id")
|
||||
id ? await this.findOne(id) : this.init()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
@@ -1,12 +0,0 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<script>
|
||||
window.type = 40003
|
||||
</script>
|
||||
<!--#include("/platform/activity/union/layoutActivity.html"){}#-->
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -1,12 +0,0 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<script>
|
||||
window.type = 40003
|
||||
</script>
|
||||
<!--#include("/platform/activity/union/applyActivity.html"){}#-->
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -1,20 +0,0 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.el-descriptions__table {
|
||||
table-layout: fixed !important;
|
||||
}
|
||||
|
||||
.el-descriptions-item__cell {
|
||||
text-align: center !important;
|
||||
}
|
||||
</style>
|
||||
<script>
|
||||
window.type = 40003
|
||||
</script>
|
||||
<!--#include("/platform/activity/union/layoutAuditActivity.html"){}#-->
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -1,20 +0,0 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.el-descriptions__table {
|
||||
table-layout: fixed !important;
|
||||
}
|
||||
|
||||
.el-descriptions-item__cell {
|
||||
text-align: center !important;
|
||||
}
|
||||
</style>
|
||||
<script>
|
||||
window.type = 40003
|
||||
</script>
|
||||
<!--#include("/platform/activity/union/layoutPlan.html"){}#-->
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -1,12 +0,0 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<script>
|
||||
window.type = 40003
|
||||
</script>
|
||||
<!--#include("/platform/activity/union/layoutStatisticsActivity.html"){}#-->
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -1,367 +0,0 @@
|
||||
<style>
|
||||
.el-divider {
|
||||
background-color: #409EFF !important;
|
||||
}
|
||||
|
||||
.el-divider__text {
|
||||
color: #409EFF !important;
|
||||
}
|
||||
|
||||
.el-timeline-item__timestamp {
|
||||
color: #409EFF;
|
||||
}
|
||||
</style>
|
||||
|
||||
<div id="app" class="platform" 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
|
||||
style="width: 100%"
|
||||
v-model="pageForm.year"
|
||||
value-format="yyyy"
|
||||
type="year"
|
||||
placeholder="选择年">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">活动名称</div>
|
||||
<div class="search-item-option">
|
||||
<el-input v-model="pageForm.name" placeholder="请输入活动名称"
|
||||
clearable></el-input>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item" v-if="type==1">
|
||||
<div class="search-item-label">工会名称</div>
|
||||
<div class="search-item-option">
|
||||
<el-select v-model="pageForm.unionId" placeholder="请选择工会" filterable
|
||||
clearable
|
||||
style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in unionList"
|
||||
:key="item.id"
|
||||
:label="item.unionname"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-query">
|
||||
<el-button type="primary" icon="el-icon-search" @click="pageData">搜索
|
||||
</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" class="mt10">
|
||||
<table-tool label="活动列表" :app="this">
|
||||
</table-tool>
|
||||
|
||||
<el-table :data="tableData" style="width: 100%;margin-bottom: 20px" row-key="id"
|
||||
@sort-change="pageOrder" v-loading="tableLoading" :size="tableSize"
|
||||
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"
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:width="column.width"
|
||||
show-overflow-tooltip
|
||||
:sortable="column.sortable">
|
||||
|
||||
<template v-if="column.prop=='time'" scope="{row}">
|
||||
<span>
|
||||
{{moment(row.startTime).format('YYYY-MM-DD')}} - {{moment(row.endTime).format('YYYY-MM-DD')}}
|
||||
</span>
|
||||
</template>
|
||||
<template scope="{row}" v-else-if="column.prop=='time2'">
|
||||
{{row.applyStartTime}}-{{row.applyEndTime}}
|
||||
</template>
|
||||
|
||||
<template v-else-if="column.prop=='projectTypeName'" scope="{row}">
|
||||
{{row.projectTypeName}}({{row.projectTypeCode}})
|
||||
</template>
|
||||
|
||||
<template v-else-if="column.prop=='tussueName'" scope="{row}">
|
||||
<span v-if="row.type==40002">{{row.unionname?row.unionname:'暂无'}}</span>
|
||||
<span v-if="row.type==40003">{{row.clubName?row.clubName:'暂无'}}</span>
|
||||
<span v-if="row.type==40001">校工会</span>
|
||||
</template>
|
||||
<template v-else-if="column.prop=='state'" scope="{row}">
|
||||
{{row.state===1?'未审核':row.state===2?'审核不通过':'审核通过'}}
|
||||
</template>
|
||||
|
||||
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column prop="userOnline" align="center" header-align="center"
|
||||
label="操作" width="150px">
|
||||
<template scope="{row}">
|
||||
<el-dropdown @command="dropdownCommand">
|
||||
<el-button size="mini" :loading="row.loading">
|
||||
<i class="ti-settings"></i>
|
||||
<span class="ti-angle-down"></span>
|
||||
</el-button>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item :command="{type:'view',row}">
|
||||
查看
|
||||
</el-dropdown-item>
|
||||
|
||||
<el-dropdown-item :command="{type:'edit',row}"
|
||||
:disabled="row.projectTypeCode==50004">
|
||||
编辑
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item :command="{type:'delete',row}"
|
||||
:disabled="row.projectTypeCode==50004">
|
||||
删除
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item :command="{type:'sendMsg',row}">
|
||||
通知
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item :command="{type:'openCode',row}">
|
||||
二维码
|
||||
</el-dropdown-item>
|
||||
<!-- <el-dropdown-item :command="{type:'export',row}">
|
||||
导出人员名单
|
||||
</el-dropdown-item>-->
|
||||
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
|
||||
<template #view>
|
||||
<tissue-info ref="info"></tissue-info>
|
||||
</template>
|
||||
</guava>
|
||||
|
||||
<send-msg ref="sendMsg" :url="url"></send-msg>
|
||||
|
||||
<open-qr-code ref="openQRCode" :url="url"></open-qr-code>
|
||||
|
||||
</div>
|
||||
|
||||
<script>
|
||||
var vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
actvivtyUrl: "/platform/activity/info/mange",
|
||||
selectLoading: false,
|
||||
userTabLoading: false,
|
||||
dialogVisible: false,
|
||||
url: "",
|
||||
userData: [],
|
||||
userList: [],
|
||||
unionList: [],
|
||||
pageForm: {
|
||||
type: type,
|
||||
year: new Date().getFullYear() + ''
|
||||
},
|
||||
formData: {
|
||||
tissuePersonList: []
|
||||
},
|
||||
tableColumns: [
|
||||
{prop: 'name', label: '活动名称'},
|
||||
{prop: 'address', label: '活动地点'},
|
||||
{prop: 'projectTypeName', label: '活动项目类型'},
|
||||
{prop: 'tussueName', label: '举办单位'},
|
||||
{prop: 'time', label: '活动日期'},
|
||||
{prop: 'time2', label: '报名日期', width: '300'},
|
||||
{prop: 'applyTime', label: '创建时间', sortable: true},
|
||||
{prop: 'state', label: '审核状态', sortable: true},
|
||||
|
||||
],
|
||||
userColumns: [
|
||||
{prop: 'userName', label: '姓名'},
|
||||
{prop: 'loginName', label: '工号'},
|
||||
{prop: 'sex', label: '性别'},
|
||||
{prop: 'mobile', label: '联系方式'},
|
||||
{prop: 'unitName', label: '所属单位'},
|
||||
{prop: 'unionName', label: '所属工会'}
|
||||
],
|
||||
formRules: {
|
||||
name: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
address: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
peopleNum: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
time: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
type: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
}
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'guava': httpVueLoader('/components/plugins/Guava.vue'),
|
||||
'file-upload': httpVueLoader('/components/plugins/FileUpload.vue'),
|
||||
'tissue-info': httpVueLoader('/components/activity/school/tissueInfo.vue'),
|
||||
'send-msg': httpVueLoader('/components/plugins/SendMsgByGroupId.vue'),
|
||||
'open-qr-code': httpVueLoader('/components/plugins/OpenQRCode.vue'),
|
||||
},
|
||||
methods: {
|
||||
dropdownCommand(command) {
|
||||
const {type, row} = command
|
||||
if (type === 'view') {
|
||||
this.openView(row)
|
||||
} else if (type === 'edit') {
|
||||
this.openEdit(row)
|
||||
} else if (type === 'delete') {
|
||||
this.doDelete(row)
|
||||
} else if (type === 'sendMsg') {
|
||||
this.sendMsg(row)
|
||||
} else if (type === 'openCode') {
|
||||
this.openCode(row)
|
||||
} else if (type === 'export') {
|
||||
location.href = "/platform/activity/info/mange/export?id=" + row.id
|
||||
}
|
||||
},
|
||||
openCode(row) {
|
||||
this.$refs.openQRCode.openCode("/mobile/activity/unionActivity/goReg?id=" + row.id + "&signUpMethod=" + row.signUpMethod)
|
||||
},
|
||||
sendMsg(row) {
|
||||
this.url = `<a href="` + (APP_DOMAIN + "/mobile/activity/unionActivity/goReg?id=" + row.id + "&signUpMethod=" + row.signUpMethod) + `">点击参与</a>`
|
||||
this.$refs.sendMsg.openDialog(row.groupId)
|
||||
},
|
||||
async remoteMethod(query) {
|
||||
if (query) {
|
||||
this.selectLoading = true;
|
||||
const {data} = await $.post(this.actvivtyUrl + "/findUser", {serachWord: query})
|
||||
this.userList = data
|
||||
this.selectLoading = false;
|
||||
}
|
||||
},
|
||||
openAddUser() {
|
||||
this.formData.tissuePersonList = []
|
||||
this.dialogVisible = true
|
||||
},
|
||||
doAddUser() {
|
||||
this.formData.tissuePersonList = this.userList.filter(v => this.formData.tissuePersonList.some(x => v.userId === x))
|
||||
this.userData = this.userData.concat(this.formData.tissuePersonList)
|
||||
this.dialogVisible = false
|
||||
},
|
||||
delUser(row) {
|
||||
this.userData.splice(this.userData.indexOf(row.userId), 1)
|
||||
this.formData.tissuePersonList.splice(this.formData.tissuePersonList.indexOf(row.userId), 1)
|
||||
},
|
||||
openView(row) {
|
||||
const {id} = row
|
||||
this.$refs.info.getInfo(id)
|
||||
this.$refs.guava.view()
|
||||
},
|
||||
async openEdit(row) {
|
||||
const {id, type} = row
|
||||
if (type == 40002) {
|
||||
sublime.jumpPagePjax("/platform/activity/apply/union?id=" + id)
|
||||
} else if (type == 40003) {
|
||||
sublime.jumpPagePjax("/platform/activity/apply/club?id=" + id)
|
||||
} else {
|
||||
sublime.jumpPagePjax("/platform/activity/apply/school?id=" + id)
|
||||
}
|
||||
/*this.$refs.guava.edit()*/
|
||||
},
|
||||
async openAdd() {
|
||||
this.$refs.guava.edit()
|
||||
this.userData = []
|
||||
this.$nextTick(() => {
|
||||
this.formData = {
|
||||
name: '',
|
||||
time: '',
|
||||
peopleNum: '',
|
||||
address: '',
|
||||
files: [],
|
||||
type: "40002",
|
||||
tissuePersonList: []
|
||||
}
|
||||
if (this.$refs['addForm']) {
|
||||
this.$refs['addForm'].resetFields()
|
||||
}
|
||||
})
|
||||
},
|
||||
async operation() {
|
||||
let url = this.formData.id ? "/doEdit" : "/doAdd"
|
||||
this.$refs["addForm"].validate(async (valid) => {
|
||||
if (valid) {
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '正在提交...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: COVER_LAYER_COLOR
|
||||
});
|
||||
|
||||
const formData = JSON.parse(JSON.stringify(this.formData))
|
||||
formData.type = this.pageForm.type
|
||||
if (formData.time && formData.time.length) {
|
||||
formData.startTime = formData.time[0]
|
||||
formData.endTime = formData.time[1]
|
||||
formData.time = undefined
|
||||
}
|
||||
|
||||
const resp = await $.post(this.actvivtyUrl + url, {tissue: JSON.stringify(formData),})
|
||||
if (resp.code === 0) {
|
||||
this.pageData()
|
||||
this.$refs.guava.index()
|
||||
this.notifySuccess(resp.msg)
|
||||
} else {
|
||||
this.notifyError(resp.msg)
|
||||
}
|
||||
} else {
|
||||
this.$notify.error({title: '错误', message: '存在未填写的的必填项'});
|
||||
}
|
||||
});
|
||||
},
|
||||
doDelete(row) {
|
||||
const {id} = row
|
||||
this.$confirm('确定要删除该活动吗?', '提示', {type: 'warning'}).then(async () => {
|
||||
this.$set(row, "loading", true)
|
||||
const resp = await $.post(this.actvivtyUrl + "/doDelete", {id: id});
|
||||
if (resp.code === 0) {
|
||||
this.pageData()
|
||||
this.$refs.guava.index()
|
||||
this.notifySuccess(resp.msg)
|
||||
} else {
|
||||
this.notifyError(resp.msg)
|
||||
}
|
||||
this.$set(row, "loading", false)
|
||||
})
|
||||
},
|
||||
pageData() {
|
||||
sublime.showLoadingbar();
|
||||
this.tableLoading = true
|
||||
$.post("/platform/activity/info/mange/pageData", this.pageForm, (data) => {
|
||||
sublime.closeLoadingbar();
|
||||
this.tableLoading = false
|
||||
if (data.code === 0) {
|
||||
this.tableData = data.data.list;
|
||||
this.pageForm.totalCount = data.data.totalCount;
|
||||
} else {
|
||||
this.$message.error(data.msg);
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.pageData()
|
||||
this.unionList = await getUnions(null)
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
@@ -1,281 +0,0 @@
|
||||
<div id="app" class="platform" 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
|
||||
style="width: 100%"
|
||||
v-model="pageForm.year"
|
||||
value-format="yyyy"
|
||||
type="year"
|
||||
placeholder="选择年">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">活动名称</div>
|
||||
<div class="search-item-option">
|
||||
<el-input v-model="pageForm.name" placeholder="请输入活动名称"
|
||||
clearable></el-input>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item" v-if="type==40002">
|
||||
<div class="search-item-label">工会名称</div>
|
||||
<div class="search-item-option">
|
||||
<el-select v-model="pageForm.unionId" placeholder="请选择工会" filterable
|
||||
clearable
|
||||
style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in unionList"
|
||||
:key="item.id"
|
||||
:label="item.unionname"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-query">
|
||||
<el-button type="primary" icon="el-icon-search" @click="pageData">搜索
|
||||
</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
|
||||
<el-card shadow="never" class="mt10">
|
||||
<table-tool label="活动列表" :app="this">
|
||||
<template #func>
|
||||
<el-radio-group @change="doSearch" size="small" v-model="pageForm.state">
|
||||
<el-radio-button :label="i.code" v-for="i in auditList">{{i.name}}
|
||||
</el-radio-button>
|
||||
</el-radio-group>
|
||||
</template>
|
||||
</table-tool>
|
||||
|
||||
|
||||
<el-table :data="tableData" style="width: 100%;margin-bottom: 20px" row-key="id"
|
||||
@sort-change="pageOrder" v-loading="tableLoading" :size="tableSize"
|
||||
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"
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
:sortable="column.sortable">
|
||||
|
||||
<template v-if="column.prop=='time'" scope="{row}">
|
||||
<span>
|
||||
{{moment(row.startTime).format('YYYY-MM-DD')}} - {{moment(row.endTime).format('YYYY-MM-DD')}}
|
||||
</span>
|
||||
</template>
|
||||
|
||||
<template v-else-if="column.prop=='projectTypeName'" scope="{row}">
|
||||
{{row.projectTypeName}}({{row.projectTypeCode}})
|
||||
</template>
|
||||
|
||||
<template v-else-if="column.prop=='tussueName'" scope="{row}">
|
||||
<span v-if="row.type==40002">{{row.unionname?row.unionname:'暂无'}}</span>
|
||||
<span v-if="row.type==40003">{{row.clubName?row.clubName:'暂无'}}</span>
|
||||
<span v-if="row.type==40001">校工会</span>
|
||||
</template>
|
||||
|
||||
<template v-else-if="column.prop=='state'" scope="{row}">
|
||||
{{row.state===1?'未审核':row.state===2?'审核不通过':'审核通过'}}
|
||||
</template>
|
||||
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column prop="userOnline" align="center" header-align="center"
|
||||
label="操作" width="150px">
|
||||
<template scope="{row}">
|
||||
<el-button size="mini" :loading="row.loading" @click="openView(row)">
|
||||
查看
|
||||
</el-button>
|
||||
<el-button size="mini" :loading="row.loading" type="primary"
|
||||
@click="openAudit(row)"
|
||||
v-if="row.state===1">
|
||||
审核
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<tissue-info ref="info"></tissue-info>
|
||||
</template>
|
||||
|
||||
<template #edit>
|
||||
<tissue-info ref="editInfo" :handle="true" label="校工会审核">
|
||||
<template #handle>
|
||||
<el-form :model="formData" label-position="right"
|
||||
style="padding: 20px 0"
|
||||
label-width="120px">
|
||||
<el-form-item label="审核信息 " label-width="135px" class="view-header">
|
||||
</el-form-item>
|
||||
|
||||
|
||||
<el-row gutter="20">
|
||||
<el-col :span="8">
|
||||
<el-form-item prop="username" label="审核人">
|
||||
<el-input v-model="formData.username"
|
||||
disabled></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item prop="time" label="审核时间">
|
||||
<el-input v-model="formData.auditTime" disabled></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
|
||||
<el-col :span="24">
|
||||
<el-form-item prop="idea" label="审核意见">
|
||||
<el-input type="textarea" v-model="formData.auditOpinion"
|
||||
rows="4" maxlength="500"
|
||||
placeholder="请填写您的审核意见"></el-input>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
|
||||
|
||||
</el-form>
|
||||
|
||||
|
||||
<div style="float: right;margin: 20px 0">
|
||||
<el-button type="danger" @click="doReview(false)" :disabled="subDis"
|
||||
:loading="subLoading1">拒
|
||||
绝
|
||||
</el-button>
|
||||
<el-button type="success" @click="doReview(true)" :disabled="subDis"
|
||||
:loading="subLoading2">通
|
||||
过
|
||||
</el-button>
|
||||
</div>
|
||||
|
||||
</template>
|
||||
</tissue-info>
|
||||
</template>
|
||||
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
|
||||
<script>
|
||||
var vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
auditList: [{code: true, name: "已审核"}, {code: false, name: "未审核"}],
|
||||
selectLoading: false,
|
||||
userTabLoading: false,
|
||||
dialogVisible: false,
|
||||
userData: [],
|
||||
userList: [],
|
||||
unionList: [],
|
||||
subDis: false,
|
||||
subLoading1: false,
|
||||
subLoading2: false,
|
||||
pageForm: {
|
||||
state: false,
|
||||
type: type,
|
||||
year: new Date().getFullYear() + ''
|
||||
},
|
||||
tableColumns: [
|
||||
{prop: 'name', label: '活动名称'},
|
||||
{prop: 'address', label: '活动地点'},
|
||||
{prop: 'projectTypeName', label: '活动项目类型'},
|
||||
{prop: 'tussueName', label: '举办单位'},
|
||||
{prop: 'time', label: '活动日期'},
|
||||
{prop: 'applyTime', label: '创建时间', sortable: true},
|
||||
{prop: 'state', label: '审核状态', sortable: true},
|
||||
|
||||
],
|
||||
userColumns: [
|
||||
{prop: 'userName', label: '姓名'},
|
||||
{prop: 'loginName', label: '工号'},
|
||||
{prop: 'sex', label: '性别'},
|
||||
{prop: 'mobile', label: '联系方式'},
|
||||
{prop: 'unitName', label: '所属单位'},
|
||||
{prop: 'unionName', label: '所属工会'}
|
||||
],
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'guava': httpVueLoader('/components/plugins/Guava.vue'),
|
||||
'file-upload': httpVueLoader('/components/plugins/FileUpload.vue'),
|
||||
'tissue-info': httpVueLoader('/components/activity/school/tissueInfo.vue')
|
||||
},
|
||||
methods: {
|
||||
openAudit(row) {
|
||||
this.$refs.editInfo.getInfo(row.id)
|
||||
this.$refs.guava.edit()
|
||||
this.formData = {
|
||||
id: row.id,
|
||||
username: "${@shiro.getPrincipalProperty('username')}",
|
||||
auditTime: moment().format('YYYY-MM-DD'),
|
||||
}
|
||||
},
|
||||
async doReview(flag) {
|
||||
const confirm = await this.$confirm('确定要审核' + (flag ? '通过' : '拒绝') + '吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
})
|
||||
if (confirm === "confirm") {
|
||||
this.formData.flag = flag
|
||||
this.subDis = true
|
||||
flag ? this.subLoading2 = true : this.subLoading1 = true
|
||||
const resp = await $.post("/platform/activity/audit/doReview", this.formData)
|
||||
if (resp.code === 0) {
|
||||
this.pageData()
|
||||
this.$refs.guava.index()
|
||||
this.notifySuccess(resp.msg)
|
||||
} else {
|
||||
this.notifyError(resp.msg)
|
||||
}
|
||||
}
|
||||
|
||||
},
|
||||
openView(row) {
|
||||
const {id} = row
|
||||
this.$refs.info.getInfo(id)
|
||||
this.$refs.guava.view()
|
||||
},
|
||||
pageData() {
|
||||
sublime.showLoadingbar();
|
||||
this.tableLoading = true
|
||||
$.post("/platform/activity/audit/pageData", this.pageForm, (data) => {
|
||||
sublime.closeLoadingbar();
|
||||
this.tableLoading = false
|
||||
if (data.code === 0) {
|
||||
this.tableData = data.data.list;
|
||||
this.pageForm.totalCount = data.data.totalCount;
|
||||
} else {
|
||||
this.$message.error(data.msg);
|
||||
}
|
||||
}, "json");
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.unionList = await getUnions(null)
|
||||
this.pageData()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
@@ -1,406 +0,0 @@
|
||||
<div id="app" class="platform" 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
|
||||
style="width: 100%"
|
||||
v-model="pageForm.year"
|
||||
value-format="yyyy"
|
||||
type="year"
|
||||
placeholder="选择年">
|
||||
</el-date-picker>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">计划名称</div>
|
||||
<div class="search-item-option">
|
||||
<el-input v-model="pageForm.name" placeholder="请输入计划名称" clearable></el-input>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div v-if="window.type === 40002" class="search-item">
|
||||
<div class="search-item-label">工会名称</div>
|
||||
<div class="search-item-option">
|
||||
<el-select v-model="pageForm.tissueId" placeholder="请选择工会" filterable clearable
|
||||
style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in unionList"
|
||||
:key="item.id"
|
||||
:label="item.unionname"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div v-if="window.type === 40003" class="search-item">
|
||||
<div class="search-item-label">社团</div>
|
||||
<div class="search-item-option">
|
||||
<el-select v-model="pageForm.tissueId" 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>
|
||||
|
||||
<!-- <template v-if="searchMore">
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">项目名称</div>
|
||||
<div class="search-item-option">
|
||||
<el-select v-model="pageForm.eventId" placeholder="请选择活动项目" filterable clearable
|
||||
style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in eventList"
|
||||
:key="item.id"
|
||||
:label="item.allName"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
</template>-->
|
||||
|
||||
|
||||
<div class="search-query">
|
||||
<el-button type="primary" icon="el-icon-search" @click="pageData">搜索</el-button>
|
||||
<!-- <more v-model="searchMore"></more>-->
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
<el-card shadow="never" class="mt10">
|
||||
<!--<table-tool label="计划列表" :app="this">
|
||||
<!–<template #func>
|
||||
<el-button type="primary" icon="el-icon-edit-outline" size="small"
|
||||
@click="openAdd">
|
||||
创建活动计划
|
||||
</el-button>
|
||||
</template>–>
|
||||
</table-tool>-->
|
||||
|
||||
<el-table :data="tableData" style="width: 100%;margin-bottom: 20px" row-key="id"
|
||||
@sort-change="pageOrder" v-loading="tableLoading" :size="tableSize">
|
||||
|
||||
<el-table-column align="center" header-align="center" type="index" :index="indexMethod" label="序号"
|
||||
width="80px"></el-table-column>
|
||||
|
||||
<el-table-column prop="year" label="年度"></el-table-column>
|
||||
|
||||
<el-table-column v-if="window.type === 40002" prop="unionname" label="所属工会" show-overflow-tooltip>
|
||||
<template scope="{row}">
|
||||
<span>{{unionList.find(x => x.id == row.tissueId) === undefined ? '' : unionList.find(x => x.id == row.tissueId).unionname}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column v-if="window.type === 40003" prop="clubname" label="社团" show-overflow-tooltip>
|
||||
<template scope="{row}">
|
||||
<span>{{clubList.find(x => x.id == row.tissueId) === undefined ? '' : clubList.find(x => x.id == row.tissueId).name}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column prop="name" label="计划名称" show-overflow-tooltip></el-table-column>
|
||||
<!--<el-table-column prop="allName" label="活动项目" show-overflow-tooltip>
|
||||
</el-table-column>-->
|
||||
<el-table-column prop="activityTypeName" label="活动类型" show-overflow-tooltip></el-table-column>
|
||||
<el-table-column prop="time" label="计划预计时间" sortable></el-table-column>
|
||||
<el-table-column prop="money" label="预算费用"></el-table-column>
|
||||
<!--<el-table-column prop="carryOut" label="计划状态">
|
||||
<template scope="{row}">
|
||||
<span v-if="row.carryOut" class="text-success">已执行</span>
|
||||
<span v-if="!row.carryOut" class="text-primary">未执行</span>
|
||||
</template>
|
||||
</el-table-column>-->
|
||||
|
||||
<el-table-column prop="userOnline" align="center" header-align="center" label="操作" width="150px">
|
||||
<template scope="{row}">
|
||||
<el-dropdown @command="dropdownCommand">
|
||||
<el-button size="mini" :loading="row.loading">
|
||||
<i class="ti-settings"></i>
|
||||
<span class="ti-angle-down"></span>
|
||||
</el-button>
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
<el-dropdown-item :command="{type:'view',row}">
|
||||
查看
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item :command="{type:'edit',row}">
|
||||
编辑
|
||||
</el-dropdown-item>
|
||||
<el-dropdown-item :command="{type:'delete',row}">
|
||||
删除
|
||||
</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</el-dropdown>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
</el-card>
|
||||
</template>
|
||||
|
||||
<template #edit_func>
|
||||
<el-button type="primary" @click="operation">确 定</el-button>
|
||||
</template>
|
||||
|
||||
<template #edit>
|
||||
<vi-title title="填写计划信息"></vi-title>
|
||||
<el-form :model="formData" ref="form" :rules="formRules" label-width="100px" label-position="left"
|
||||
label-suffix=":" style="padding: 0 2%">
|
||||
|
||||
<!-- <el-form-item prop="type" label="活动类型">
|
||||
<el-radio-group v-model="formData.type">
|
||||
<el-radio label="2" border>分工会活动计划</el-radio>
|
||||
<el-radio label="3" border>社团活动计划</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>-->
|
||||
|
||||
<el-form-item prop="name" label="计划名称">
|
||||
<el-input maxlength="50" placeholder="请填写计划名称" v-model="formData.name"
|
||||
type="text"></el-input>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item prop="time" label="计划时间">
|
||||
<el-date-picker
|
||||
v-model="formData.time"
|
||||
type="date"
|
||||
value-format="yyyy-MM-dd"
|
||||
placeholder="选择日期"
|
||||
style="width: 100%">
|
||||
</el-date-picker>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item prop="event" label="活动项目">
|
||||
<!--<el-input maxlength="50" placeholder="请填写活动项目" v-model="formData.event"
|
||||
type="text"></el-input>-->
|
||||
<el-select v-model="formData.event" placeholder="请选择活动项目" filterable clearable multiple
|
||||
style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in eventList"
|
||||
:key="item.id"
|
||||
:label="item.allName"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item prop="content" label="计划内容" class="is-required">
|
||||
<div id="content"></div>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
</template>
|
||||
|
||||
<template #view>
|
||||
<plan-info ref="info"></plan-info>
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
let E = window.wangEditor
|
||||
const editors = {}
|
||||
|
||||
var vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
let validContent = (rule, value, callback) => {
|
||||
if (!this.formData.content || !dd3s.html2txt(this.formData.content)) {
|
||||
callback(new Error('请填写计划内容'));
|
||||
} else {
|
||||
callback();
|
||||
}
|
||||
};
|
||||
return {
|
||||
clubList: [],
|
||||
planUrl: "/platform/activity/plan",
|
||||
unionList: [],
|
||||
eventList: [],
|
||||
flag: false,
|
||||
pageForm: {
|
||||
type: type,
|
||||
year: new Date().getFullYear() + ''
|
||||
},
|
||||
formData: {
|
||||
name: '',
|
||||
time: '',
|
||||
event: '',
|
||||
content: ''
|
||||
},
|
||||
tableColumns: [
|
||||
{prop: 'name', label: '计划名称'},
|
||||
{prop: 'time', label: '计划预计时间'},
|
||||
{prop: 'allName', label: '活动项目'},
|
||||
{prop: 'carryOut', label: '计划状态'}
|
||||
],
|
||||
formRules: {
|
||||
type: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
name: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
time: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
event: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||||
content: [{validator: validContent, trigger: ['blur', 'change']}]
|
||||
},
|
||||
}
|
||||
},
|
||||
components: {
|
||||
'guava': httpVueLoader('/components/plugins/Guava.vue'),
|
||||
'plan-info': httpVueLoader('/components/activity/school/planInfo.vue'),
|
||||
},
|
||||
methods: {
|
||||
dropdownCommand(command) {
|
||||
const {type, row} = command
|
||||
if (type === 'view') {
|
||||
this.openView(row)
|
||||
} else if (type === 'edit') {
|
||||
this.openEdit(row)
|
||||
} else if (type === 'delete') {
|
||||
this.doDelete(row)
|
||||
}
|
||||
},
|
||||
openView(row) {
|
||||
const {id} = row
|
||||
this.$refs.info.getInfo(id)
|
||||
this.$refs.guava.view()
|
||||
},
|
||||
async openEdit(row) {
|
||||
|
||||
if (window.type === 40002) {
|
||||
sublime.jumpPagePjax('/platform/activity/plan/addUnionPlan?id=' + row.id)
|
||||
} else if (window.type === 40003) {
|
||||
sublime.jumpPagePjax('/platform/activity/plan/addClubPlan?id=' + row.id)
|
||||
} else if (window.type === 40001) {
|
||||
sublime.jumpPagePjax('/platform/activity/plan/addSchoolPlan?id=' + row.id)
|
||||
}
|
||||
},
|
||||
async openAdd() {
|
||||
this.formData = {}
|
||||
this.flag = false
|
||||
this.$refs.guava.edit()
|
||||
this.$nextTick(() => {
|
||||
this.initEditor()
|
||||
if (this.$refs['form']) {
|
||||
this.$refs['form'].resetFields()
|
||||
}
|
||||
|
||||
this.formData = {
|
||||
type: '40003',
|
||||
name: '',
|
||||
time: '',
|
||||
event: '',
|
||||
content: ''
|
||||
}
|
||||
})
|
||||
},
|
||||
async operation() {
|
||||
let url = this.formData.id ? "/doEdit" : "/doAdd"
|
||||
this.$refs["form"].validate(async (valid) => {
|
||||
if (valid) {
|
||||
const loading = this.$loading({
|
||||
lock: true,
|
||||
text: '正在提交...',
|
||||
spinner: 'el-icon-loading',
|
||||
background: COVER_LAYER_COLOR
|
||||
});
|
||||
|
||||
this.formData.type = this.pageForm.type
|
||||
|
||||
const resp = await $.post(this.planUrl + url, {
|
||||
id: this.formData.id,
|
||||
name: this.formData.name,
|
||||
time: this.formData.time,
|
||||
content: this.formData.content,
|
||||
event: JSON.stringify(this.formData.event),
|
||||
type: this.pageForm.type,
|
||||
})
|
||||
if (resp.code === 0) {
|
||||
this.pageData()
|
||||
this.$refs.guava.index()
|
||||
this.notifySuccess(resp.msg)
|
||||
} else {
|
||||
this.notifyError(resp.msg)
|
||||
}
|
||||
loading.close()
|
||||
|
||||
} else {
|
||||
this.$notify.error({title: '错误', message: '存在未填写的的必填项'});
|
||||
}
|
||||
});
|
||||
},
|
||||
doDelete(row) {
|
||||
const {id} = row
|
||||
this.$confirm('确定要删除该计划吗?', '提示', {type: 'warning'}).then(async () => {
|
||||
const resp = await $.post(this.planUrl + "/doDelete", {id: id});
|
||||
if (resp.code === 0) {
|
||||
this.pageData()
|
||||
this.$refs.guava.index()
|
||||
this.notifySuccess(resp.msg)
|
||||
} else {
|
||||
this.notifyError(resp.msg)
|
||||
}
|
||||
})
|
||||
},
|
||||
initEditor() {
|
||||
let keys = ['content']
|
||||
keys.forEach(key => {
|
||||
$("#" + key).html("")
|
||||
editors[key] = new E('#' + key)
|
||||
editors[key].config.onchange = (html) => {
|
||||
this.formData[key] = html
|
||||
}
|
||||
editors[key].create()
|
||||
if (this.formData[key]) {
|
||||
editors[key].txt.html(this.formData[key])
|
||||
}
|
||||
})
|
||||
},
|
||||
pageData() {
|
||||
sublime.showLoadingbar();
|
||||
this.tableLoading = true
|
||||
$.post("/platform/activity/plan/pageData", this.pageForm, (data) => {
|
||||
sublime.closeLoadingbar();
|
||||
this.tableLoading = false
|
||||
if (data.code === 0) {
|
||||
this.tableData = data.data.list;
|
||||
this.pageForm.totalCount = data.data.totalCount;
|
||||
} else {
|
||||
this.$message.error(data.msg);
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
async getMyClub() {
|
||||
return await $.post('/platform/activity/yearSummary/getMyClub')
|
||||
}
|
||||
},
|
||||
async created() {
|
||||
this.pageData()
|
||||
this.eventList = await activity.getEvents()
|
||||
this.unionList = await getUnions(null);
|
||||
this.clubList = await getClubs()
|
||||
const isAdmin = "${@shiro.hasAnyRoles('sysadmin', 'A06')}" === 'true'
|
||||
if (!isAdmin) {
|
||||
const selfUnion = "${@shiro.getPrincipalProperty('union').getId()}";
|
||||
this.unionList = [this.unionList.find(x => x.id === selfUnion)]
|
||||
|
||||
const clubs = await this.getMyClub()
|
||||
let clubArray = []
|
||||
for (let c of Array.from(clubs)) {
|
||||
const cl = this.clubList.find(x => x.id === c)
|
||||
if (cl) {
|
||||
clubArray.push(cl)
|
||||
}
|
||||
}
|
||||
this.clubList = clubArray
|
||||
}
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
@@ -1,178 +0,0 @@
|
||||
<div id="app" class="platform" 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
|
||||
@change="getActivityByYearOrType"
|
||||
style="width: 100%"
|
||||
v-model="pageForm.year"
|
||||
value-format="yyyy"
|
||||
type="year"
|
||||
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.activityId" placeholder="请选择活动" filterable
|
||||
style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in activityList"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item" v-if="type==40002||type==40001">
|
||||
<div class="search-item-label">工会名称</div>
|
||||
<div class="search-item-option">
|
||||
<el-select v-model="pageForm.unionId" placeholder="请选择工会" filterable
|
||||
clearable
|
||||
style="width: 100%">
|
||||
<el-option
|
||||
v-for="item in unionList"
|
||||
:key="item.id"
|
||||
:label="item.unionname"
|
||||
:value="item.id">
|
||||
</el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-item">
|
||||
<div class="search-item-label">姓名/工号</div>
|
||||
<div class="search-item-option">
|
||||
<el-input placeholder="请输入姓名/工号" clearable
|
||||
v-model="pageForm.searchKeyword"
|
||||
@keyup.enter.native="doSearch">
|
||||
<el-select v-model="pageForm.searchName" slot="prepend"
|
||||
placeholder="姓名/工号"
|
||||
style="width: 80px;">
|
||||
<el-option label="姓名" value="u.username"></el-option>
|
||||
<el-option label="工号" value="u.loginanme"></el-option>
|
||||
</el-select>
|
||||
</el-input>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="search-query">
|
||||
<el-button type="primary" icon="el-icon-search" @click="doSearch">搜索
|
||||
</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
|
||||
|
||||
<el-card shadow="never" class="mt10">
|
||||
<table-tool label="人员列表" :app="this">
|
||||
<template #func>
|
||||
<el-button icon="el-icon-s-promotion" type="primary" @click="doExport" size="medium">导出
|
||||
</el-button>
|
||||
</template>
|
||||
</table-tool>
|
||||
|
||||
<el-table :data="tableData" style="width: 100%;margin-bottom: 20px" row-key="id"
|
||||
@sort-change="pageOrder" v-loading="tableLoading" :size="tableSize"
|
||||
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"
|
||||
:label="column.label"
|
||||
:prop="column.prop"
|
||||
sortable>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<!--#include("/layouts/pagination.html"){}#-->
|
||||
|
||||
|
||||
</el-card>
|
||||
|
||||
</template>
|
||||
</guava>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
var vue = new Vue({
|
||||
el: '#app',
|
||||
mixins: [initTableMixins],
|
||||
data() {
|
||||
return {
|
||||
unionList: {},
|
||||
activityList: {},
|
||||
pageForm: {
|
||||
unionId: '',
|
||||
searchName: "u.username",
|
||||
type: type,
|
||||
year: new Date().getFullYear() + ''
|
||||
},
|
||||
tableColumns: [
|
||||
{prop: 'username', label: '姓名'},
|
||||
{prop: 'loginname', label: '工号'},
|
||||
{prop: 'sex', label: '性别'},
|
||||
{prop: 'mobile', label: '联系方式'},
|
||||
{prop: 'unitname', label: '所属单位'},
|
||||
{prop: 'unionname', label: '所属工会'},
|
||||
{prop: 'applyDateTime', label: '报名时间'},
|
||||
// {prop: 'notes', label: '备注'},
|
||||
],
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
async doExport() {
|
||||
const {activityId, unionId} = this.pageForm
|
||||
window.open("/platform/activity/info/mange/doExportUser?id=" + activityId +
|
||||
"&unionId=" + unionId)
|
||||
},
|
||||
pageData() {
|
||||
sublime.showLoadingbar();
|
||||
this.tableLoading = true
|
||||
$.post("/platform/activity/user/statistics/pageData", this.pageForm, (data) => {
|
||||
sublime.closeLoadingbar();
|
||||
this.tableLoading = false
|
||||
if (data.code === 0) {
|
||||
this.tableData = data.data.list;
|
||||
this.pageForm.totalCount = data.data.totalCount;
|
||||
} else {
|
||||
this.notifyError(data.msg)
|
||||
}
|
||||
}, "json");
|
||||
},
|
||||
async getActivityByYearOrType() {
|
||||
const resp = await $.get("/platform/activity/user/statistics/getActivityByYearOrType", {
|
||||
type: this.pageForm.type,
|
||||
year: this.pageForm.year,
|
||||
})
|
||||
if (resp.code === 0) {
|
||||
this.activityList = resp.data
|
||||
if (resp.data && resp.data.length > 0) {
|
||||
this.$set(this.pageForm, "activityId", resp.data[0].id)
|
||||
} else {
|
||||
this.$set(this.pageForm, "activityId", null)
|
||||
}
|
||||
this.pageData()
|
||||
}
|
||||
},
|
||||
},
|
||||
async created() {
|
||||
await this.getActivityByYearOrType()
|
||||
this.unionList = await getUnions(null)
|
||||
|
||||
}
|
||||
})
|
||||
</script>
|
||||
@@ -1,12 +0,0 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<script>
|
||||
window.type = 40001
|
||||
</script>
|
||||
<!--#include("/platform/activity/union/layoutActivity.html"){}#-->
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -1,12 +0,0 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<script>
|
||||
window.type = 40001
|
||||
</script>
|
||||
<!--#include("/platform/activity/union/applyActivity.html"){}#-->
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -1,20 +0,0 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.el-descriptions__table {
|
||||
table-layout: fixed !important;
|
||||
}
|
||||
|
||||
.el-descriptions-item__cell {
|
||||
text-align: center !important;
|
||||
}
|
||||
</style>
|
||||
<script>
|
||||
window.type = 40001
|
||||
</script>
|
||||
<!--#include("/platform/activity/union/layoutPlan.html"){}#-->
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -1,12 +0,0 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<script>
|
||||
window.type = 40001
|
||||
</script>
|
||||
<!--#include("/platform/activity/union/layoutStatisticsActivity.html"){}#-->
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -1,12 +0,0 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<script>
|
||||
window.type = 40002
|
||||
</script>
|
||||
<!--#include("/platform/activity/union/layoutActivity.html"){}#-->
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -1,12 +0,0 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<script>
|
||||
window.type = 40002
|
||||
</script>
|
||||
<!--#include("/platform/activity/union/applyActivity.html"){}#-->
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -1,20 +0,0 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.el-descriptions__table {
|
||||
table-layout: fixed !important;
|
||||
}
|
||||
|
||||
.el-descriptions-item__cell {
|
||||
text-align: center !important;
|
||||
}
|
||||
</style>
|
||||
<script>
|
||||
window.type = 40002
|
||||
</script>
|
||||
<!--#include("/platform/activity/union/layoutAuditActivity.html"){}#-->
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -1,20 +0,0 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
<style>
|
||||
.el-descriptions__table {
|
||||
table-layout: fixed !important;
|
||||
}
|
||||
|
||||
.el-descriptions-item__cell {
|
||||
text-align: center !important;
|
||||
}
|
||||
</style>
|
||||
<script>
|
||||
window.type = 40002
|
||||
</script>
|
||||
<!--#include("/platform/activity/union/layoutPlan.html"){}#-->
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
@@ -1,12 +0,0 @@
|
||||
<!--#
|
||||
layout("/layouts/platform.html"){
|
||||
#-->
|
||||
|
||||
<script>
|
||||
window.type = 40002
|
||||
</script>
|
||||
<!--#include("/platform/activity/union/layoutStatisticsActivity.html"){}#-->
|
||||
|
||||
<!--#
|
||||
}
|
||||
#-->
|
||||
Reference in New Issue
Block a user