This commit is contained in:
2026-09-09 16:16:22 +08:00
parent ebffbab428
commit ba3a985c40
3749 changed files with 29 additions and 608551 deletions
@@ -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="活动项目">
&lt;!&ndash;<el-input maxlength="50" placeholder="请填写活动项目" v-model="formData.event"
type="text"></el-input>&ndash;&gt;
<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="审核信息&emsp;" 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">
&lt;!&ndash;<template #func>
<el-button type="primary" icon="el-icon-edit-outline" size="small"
@click="openAdd">
创建活动计划
</el-button>
</template>&ndash;&gt;
</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"){}#-->
<!--#
}
#-->