1067 lines
41 KiB
Vue
1067 lines
41 KiB
Vue
<template>
|
||
<div>
|
||
<el-steps :active="active" finish-status="success" simple>
|
||
<el-step title="活动信息"></el-step>
|
||
<el-step title="项目信息"></el-step>
|
||
</el-steps>
|
||
|
||
<div v-if="active===0" style="margin-top: 20px">
|
||
<el-form :model="form" ref="activityForm" :rules="formRules" label-width="120px" label-position="top"
|
||
label-suffix=":">
|
||
<vi-title title="填写活动信息"></vi-title>
|
||
|
||
<el-row gutter="40">
|
||
<el-col :span="8">
|
||
<el-form-item prop="activityLevel" label="活动级别">
|
||
<el-radio-group v-model="form.activityLevel" @change="activityLevelChange">
|
||
<template v-if="is_sysadmin">
|
||
<el-radio :label="40001" border>校级</el-radio>
|
||
<el-radio :label="40002" border>分工会</el-radio>
|
||
<el-radio :label="40003" border>社团或协会</el-radio>
|
||
</template>
|
||
<template v-if="!is_sysadmin">
|
||
<el-radio :label="40001" border v-if="is_a06">校级</el-radio>
|
||
<el-radio :label="40002" border v-if="is_union">分工会</el-radio>
|
||
<el-radio :label="40003" border v-if="is_club">社团或协会</el-radio>
|
||
</template>
|
||
|
||
</el-radio-group>
|
||
</el-form-item>
|
||
</el-col>
|
||
<!-- <el-col :span="8">
|
||
<el-form-item prop="planId" label="活动计划">
|
||
<el-select v-model="form.planId" placeholder="请选择活动计划" clearable style="width: 100%">
|
||
<el-option
|
||
v-for="item in planList"
|
||
:key="item.id"
|
||
:label="item.name"
|
||
:value="item.id">
|
||
</el-option>
|
||
</el-select>
|
||
</el-form-item>
|
||
</el-col>-->
|
||
<el-col :span="8">
|
||
<el-form-item prop="name" label="活动名称">
|
||
<el-input maxlength="50" placeholder="请填写活动名称" v-model="form.name"
|
||
type="text"></el-input>
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col :span="8">
|
||
<el-form-item prop="activityCode" label="活动编号">
|
||
<el-input maxlength="50" disabled v-model="form.activityCode"
|
||
type="text"></el-input>
|
||
</el-form-item>
|
||
</el-col>
|
||
</el-row>
|
||
<el-row gutter="40">
|
||
|
||
|
||
<el-col :span="8">
|
||
<el-form-item prop="unitSponsor" label="主办单位">
|
||
<el-select v-model="form.unitSponsor" multiple placeholder="请选择主办单位" filterable clearable
|
||
style="width: 100%">
|
||
<el-option
|
||
v-for="item in unitOptions"
|
||
:key="item.id"
|
||
:label="item.name"
|
||
:value="item.id">
|
||
</el-option>
|
||
</el-select>
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col :span="8">
|
||
<el-form-item prop="undertakeUnit" label="承办单位">
|
||
<el-select v-model="form.undertakeUnit" multiple placeholder="请选择承办单位" filterable clearable
|
||
style="width: 100%">
|
||
<el-option
|
||
v-for="item in unitOptions"
|
||
:key="item.id"
|
||
:label="item.name"
|
||
:value="item.id">
|
||
</el-option>
|
||
</el-select>
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col :span="8">
|
||
<el-form-item prop="unitJointly" label="协办单位">
|
||
<el-select v-model="form.unitJointly" multiple placeholder="请选择协办单位" filterable
|
||
clearable
|
||
style="width: 100%">
|
||
<el-option
|
||
v-for="item in unitOptions"
|
||
:key="item.id"
|
||
:label="item.name"
|
||
:value="item.id">
|
||
</el-option>
|
||
</el-select>
|
||
</el-form-item>
|
||
</el-col>
|
||
|
||
<el-col :span="8">
|
||
<el-form-item prop="address" label="活动地址">
|
||
<el-input maxlength="100" placeholder="请填写活动地址" v-model="form.address"
|
||
type="text"></el-input>
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col :span="8">
|
||
<el-form-item prop="applyTime" label="报名日期">
|
||
<el-date-picker
|
||
style="width: 100%"
|
||
v-model="form.applyTime"
|
||
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 :span="8">
|
||
<el-form-item prop="time" label="活动时间">
|
||
<el-date-picker
|
||
style="width: 100%"
|
||
v-model="form.time"
|
||
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 :span="8">
|
||
<el-form-item prop="activityGroupId" label="可报名人员范围">
|
||
<el-select v-model="form.activityGroupId" placeholder="请选择可报名人员范围" filterable clearable
|
||
style="width: 100%">
|
||
<el-option v-for="item in activityGroupList"
|
||
:value="item.groupId"
|
||
:key="item.groupId"
|
||
:label="item.groupName"></el-option>
|
||
</el-select>
|
||
</el-form-item>
|
||
</el-col>
|
||
|
||
<el-col :span="8">
|
||
<el-form-item prop="funding" label="经费预算">
|
||
<el-input-number style="width: 100%" v-model="form.funding"
|
||
placeholder="请填写活动经费预算" controls-position="right" precision="2"
|
||
:max="1000000000"></el-input-number>
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col :span="8" v-if="form.activityLevel===40003||(form.activityLevel===40001&&is_club)">
|
||
<el-form-item prop="belongClubId" label="活动所属协会">
|
||
<el-select v-model="form.belongClubId" placeholder="请选择活动所属协会" filterable clearable
|
||
style="width: 100%">
|
||
<el-option
|
||
v-for="item in clubOptions"
|
||
:key="item.stid"
|
||
:label="item.name"
|
||
:value="item.stid">
|
||
</el-option>
|
||
</el-select>
|
||
</el-form-item>
|
||
</el-col>
|
||
</el-row>
|
||
|
||
|
||
<el-row gutter="40">
|
||
<!-- <el-col :span="8">
|
||
<el-form-item prop="gameStyle" label="活动方式">
|
||
<el-radio-group v-model="form.gameStyle" @change="gameChange">
|
||
<el-radio :label="1" border>竞赛类</el-radio>
|
||
<el-radio :label="2" border>非竞赛类</el-radio>
|
||
</el-radio-group>
|
||
</el-form-item>
|
||
</el-col>
|
||
|
||
<el-col :span="8">
|
||
<el-form-item prop="personType" label="报名人员类型">
|
||
<el-radio-group v-model="form.personType">
|
||
<el-radio :label="1" border>会员</el-radio>
|
||
<el-radio :label="2" border>所有教职工</el-radio>
|
||
</el-radio-group>
|
||
</el-form-item>
|
||
</el-col>
|
||
|
||
<el-col :span="8">
|
||
<el-form-item prop="activityLevel" label="活动级别">
|
||
<el-radio-group v-model="form.activityLevel" @change="activityLevelChange">
|
||
<el-radio :label="1" border>校级</el-radio>
|
||
<el-radio :label="2" border>分工会</el-radio>
|
||
<el-radio :label="3" border>社团或协会</el-radio>
|
||
</el-radio-group>
|
||
</el-form-item>
|
||
</el-col>-->
|
||
|
||
<el-col :span="8">
|
||
<el-form-item prop="applyType" label="活动类型">
|
||
<el-radio-group v-model="form.applyType" @change="applyTypeChange">
|
||
<el-radio :label="1" border>单一团体赛</el-radio>
|
||
<el-radio :label="2" border :disabled="form.activityLevel!==40001">综合赛</el-radio>
|
||
<el-radio :label="3" border>个人赛</el-radio>
|
||
</el-radio-group>
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col :span="8">
|
||
<el-form-item prop="applyWay" label="报名方式">
|
||
<el-checkbox-group v-model="form.applyWay" @change="applyWayChange">
|
||
<el-checkbox :label="2" border :disabled="form.activityLevel!==40001">基层工会报名</el-checkbox>
|
||
<el-checkbox :label="1" border>个人报名</el-checkbox>
|
||
<!-- <el-checkbox :label="3" border>小程序报名</el-checkbox>-->
|
||
</el-checkbox-group>
|
||
</el-form-item>
|
||
</el-col>
|
||
|
||
|
||
<!-- <el-col :span="8">
|
||
<el-form-item prop="restrictRegNumber" label="每人限报项目数">
|
||
<el-input v-model="form.restrictRegNumber" placeholder="请填写每人限报项目数"></el-input>
|
||
</el-form-item>
|
||
</el-col>-->
|
||
</el-row>
|
||
|
||
<el-row>
|
||
<!-- <el-col :span="24">
|
||
<el-form-item prop="eventsIds" label="活动项目">
|
||
<el-select v-model="form.eventsIds" placeholder="请选择活动项目" filterable multiple
|
||
style="width: 100%" class="act_event" @remove-tag="eventRemoveTag">
|
||
<el-option
|
||
v-for="item in events"
|
||
:key="item.id"
|
||
:label="item.allName"
|
||
:value="item.id">
|
||
</el-option>
|
||
</el-select>
|
||
</el-form-item>
|
||
</el-col>-->
|
||
|
||
<el-col :span="24">
|
||
<el-transfer
|
||
@right-check-change="rightCheckChange"
|
||
@change="rightChange"
|
||
ref="transfer"
|
||
:titles="['可选择项目', '当前选择']"
|
||
filterable
|
||
:props="{key: 'id',label: 'allName'}"
|
||
:filter-method="filterMethod"
|
||
:right-default-checked="rightChecked"
|
||
v-model="form.eventsIds"
|
||
:data="events">
|
||
</el-transfer>
|
||
</el-col>
|
||
|
||
|
||
</el-row>
|
||
|
||
|
||
<el-row gutter="40" v-if="form.gameStyle===1&&!form.applyWay.includes(3)">
|
||
<el-col :span="24">
|
||
<el-form-item :prop="form.gameStyle===1?'athleteQualification':'-'" label="运动员资格">
|
||
<div id="athleteQualification"></div>
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col :span="24">
|
||
<el-form-item :prop="form.gameStyle===1?'registrationMethod':'-'" label="报名方法">
|
||
<div id="registrationMethod"></div>
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col :span="24">
|
||
<el-form-item :prop="form.gameStyle===1?'competitionMethod':'-'" label="竞赛方法">
|
||
<div id="competitionMethod"></div>
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col :span="24">
|
||
<el-form-item :prop="form.gameStyle===1?'rewardMethod':'-'" label="奖励方法">
|
||
<div id="rewardMethod"></div>
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col :span="24">
|
||
<el-form-item :prop="form.gameStyle===1?'precautions':'-'" label="注意事项">
|
||
<div id="precautions"></div>
|
||
</el-form-item>
|
||
</el-col>
|
||
</el-row>
|
||
|
||
<el-row gutter="40" v-if="form.gameStyle===2||form.applyWay.includes(3)">
|
||
<el-col :span="24">
|
||
<el-form-item :prop="form.gameStyle===2?'eventNotification':'-'" label="活动通知">
|
||
<div id="eventNotification"></div>
|
||
</el-form-item>
|
||
</el-col>
|
||
</el-row>
|
||
|
||
<el-form-item prop="files" label="封面图" v-if="form.applyWay.includes(1)">
|
||
<file-upload :max="1" :type="['jpg', 'jpeg', 'png']" :files.sync="form.image" card></file-upload>
|
||
</el-form-item>
|
||
</el-form>
|
||
</div>
|
||
|
||
<div v-if="active===1" style="margin-top: 20px">
|
||
<el-form :model="eventForm" ref="eventForm" :rules="formRules" label-width="120px" label-position="top"
|
||
label-suffix=":" :key="new Date().getTime()">
|
||
<template v-if="projectType==='2'">
|
||
<vi-title title="领队、教练信息"></vi-title>
|
||
<el-row gutter="40">
|
||
<el-col :span="12">
|
||
<el-form-item prop="leanderNum" label="领队人数(可兼运动员)">
|
||
|
||
<el-input-number style="width: 100%" v-model="eventForm.leanderNum"
|
||
placeholder="请填写领队人数" controls-position="right" precision="0"
|
||
:max="100000" :min="0"></el-input-number>
|
||
</el-form-item>
|
||
</el-col>
|
||
|
||
<el-col :span="12">
|
||
<el-form-item prop="coachNum" label="教练人数(可兼运动员)">
|
||
<el-input-number style="width: 100%" v-model="eventForm.coachNum"
|
||
placeholder="请填写教练人数" controls-position="right" precision="0"
|
||
:max="100000" :min="0"></el-input-number>
|
||
</el-form-item>
|
||
</el-col>
|
||
</el-row>
|
||
</template>
|
||
|
||
<template>
|
||
<vi-title title="项目报名信息"></vi-title>
|
||
|
||
|
||
<el-row gutter="40">
|
||
<el-col :span="12">
|
||
<el-form-item label="比赛项目">
|
||
<el-select v-model="eventForm.checkedEventId" @change="eventChange" placeholder="请选择活动项目" filterable
|
||
clearable
|
||
style="width: 100%">
|
||
<el-option
|
||
v-for="item in checkedEvents"
|
||
:key="item.id"
|
||
:label="item.allName"
|
||
:value="item.id">
|
||
</el-option>
|
||
</el-select>
|
||
</el-form-item>
|
||
</el-col>
|
||
|
||
<el-col :span="12" v-if="eventForm.checkedEventId==='allItems'||projectType==='1'">
|
||
<el-form-item label="年龄限制功能">
|
||
<el-button type="primary" @click="doAssignmentDate">根据比赛项目基础表统赋</el-button>
|
||
</el-form-item>
|
||
</el-col>
|
||
|
||
<el-col :span="12" v-if="projectType==='2'&&form.applyType===2">
|
||
<el-form-item label="是否只需报领队" class="isLeaderColor">
|
||
<el-checkbox v-model="eventForm.isLeader" @change="isLeaderChange">是否只需报领队
|
||
</el-checkbox>
|
||
</el-form-item>
|
||
</el-col>
|
||
</el-row>
|
||
|
||
<el-row gutter="40">
|
||
<el-col :span="8" v-if="form.applyType===3||form.applyType===1||(form.applyType===2&&projectType==='1')">
|
||
<el-form-item prop="athletesMaxNum" label="每队(项)运动员人数">
|
||
<el-input-number style="width: 100%" v-model="eventForm.athletesMaxNum"
|
||
placeholder="请填写每队运动员人数" controls-position="right" precision="0"
|
||
:max="1000000000" :min="0"></el-input-number>
|
||
</el-form-item>
|
||
</el-col>
|
||
|
||
<el-col :span="8" v-if="form.applyType===2&&projectType==='1'">
|
||
<el-form-item prop="restrictRegNumber" label="每人限报项目">
|
||
<el-input-number style="width: 100%" v-model="eventForm.restrictRegNumber"
|
||
placeholder="请填写每人限报项目数" controls-position="right" precision="0"
|
||
:max="1000000000" :min="0"></el-input-number>
|
||
</el-form-item>
|
||
</el-col>
|
||
|
||
<el-col :span="8"
|
||
v-if="form.applyType===3||form.applyType===2&&projectType==='1'&&eventForm.checkedEventId!='allItems'">
|
||
<el-form-item prop="ageDate" label="年龄限制范围">
|
||
<el-date-picker
|
||
@change="ageDateChange"
|
||
style="width: 100%;z-index: 1"
|
||
v-model="eventForm.ageDate"
|
||
type="daterange"
|
||
range-separator="-"
|
||
start-placeholder="开始日期"
|
||
end-placeholder="结束日期"
|
||
format="yyyy 年 MM 月 dd 日"
|
||
value-format="yyyy-MM-dd">
|
||
</el-date-picker>
|
||
</el-form-item>
|
||
</el-col>
|
||
|
||
<el-col :span="12" v-if="form.applyType===1">
|
||
<el-form-item prop="substituteNum" label="替补人员最少人数">
|
||
<el-input-number style="width: 100%" v-model="eventForm.substituteNum"
|
||
placeholder="请填写替补人员最少人数" controls-position="right" precision="0"
|
||
:max="100000" :min="0"></el-input-number>
|
||
</el-form-item>
|
||
</el-col>
|
||
|
||
<el-col :span="8" v-if="form.applyType===1">
|
||
<el-form-item prop="restrictMaxNum" label="每队最多人数">
|
||
<el-input-number style="width: 100%"
|
||
:value="eventForm.leanderNum+eventForm.coachNum+eventForm.athletesMaxNum+eventForm.substituteNum"
|
||
placeholder="请填写每队最多人数" controls-position="right" precision="0"
|
||
:max="100000" :min="0" disabled></el-input-number>
|
||
</el-form-item>
|
||
</el-col>
|
||
|
||
<el-col :span="8" v-if="form.applyType===1">
|
||
<el-form-item prop="restrictMinNum" label="每队最少人数">
|
||
<el-input-number style="width: 100%" :value="eventForm.athletesMaxNum"
|
||
placeholder="请填写每队最少人数" controls-position="right" precision="0" disabled
|
||
:max="100000" :min="0"></el-input-number>
|
||
</el-form-item>
|
||
</el-col>
|
||
|
||
<el-col :span="8" v-if="form.applyType===1||(form.applyType===2&&projectType==='2')">
|
||
<el-form-item prop="restrictTotalTeam" label="最多创建几队">
|
||
<el-input-number style="width: 100%" v-model="eventForm.restrictTotalTeam"
|
||
placeholder="请填写最多创建几队" controls-position="right" precision="0"
|
||
:max="100000" :min="1"></el-input-number>
|
||
</el-form-item>
|
||
</el-col>
|
||
|
||
<el-col :span="8" v-if="form.applyType===1||(form.applyType===2&&projectType==='2'&&!eventForm.isLeader)">
|
||
<el-form-item :label="form.applyType===2&&projectType==='2'&&!eventForm.isLeader?'每队男运动员人数':'每队男运动员最少人数'"
|
||
prop="restrictBoyNum">
|
||
<el-input-number style="width: 100%" v-model="eventForm.restrictBoyNum"
|
||
placeholder="请填写男运动员人数" controls-position="right" precision="0"
|
||
:max="100000" :min="0"></el-input-number>
|
||
</el-form-item>
|
||
</el-col>
|
||
|
||
<el-col :span="8" v-if="form.applyType===1||(form.applyType===2&&projectType==='2'&&!eventForm.isLeader)">
|
||
<el-form-item :label="form.applyType===2&&projectType==='2'&&!eventForm.isLeader?'每队女运动员人数':'每队女运动员最少人数'"
|
||
prop="restrictGirlNum">
|
||
<el-input-number style="width: 100%" v-model="eventForm.restrictGirlNum"
|
||
placeholder="请填写女运动员人数" controls-position="right" precision="0"
|
||
:max="100000" :min="0"></el-input-number>
|
||
</el-form-item>
|
||
</el-col>
|
||
|
||
<el-col :span="8" v-if="form.applyType===1">
|
||
<el-form-item prop="deputyDirectorNum" label="每队副处长(级)以上最少人数">
|
||
<el-input-number style="width: 100%" v-model="eventForm.deputyDirectorNum"
|
||
placeholder="请填写每队副处长(级)以上最少人数" controls-position="right" precision="0"
|
||
:max="100000" :min="0"></el-input-number>
|
||
</el-form-item>
|
||
</el-col>
|
||
</el-row>
|
||
|
||
</template>
|
||
</el-form>
|
||
</div>
|
||
|
||
<el-row style="margin: 40px 0;text-align: right" v-if="!form.applyWay.includes(3)">
|
||
<el-button type="primary" @click="prev" :disabled="active===0">上一步</el-button>
|
||
<el-button type="primary" @click="next" v-if="active <= 0">下一步</el-button>
|
||
<el-button type="primary" @click="saveEvent" v-else> 保存项目信息</el-button>
|
||
</el-row>
|
||
|
||
</div>
|
||
</template>
|
||
|
||
<script>
|
||
let E = window.wangEditor
|
||
const editors = {}
|
||
module.exports = {
|
||
props: {
|
||
form: {
|
||
type: Object,
|
||
default: {},
|
||
},
|
||
is_club: {type: Boolean, default: false,},
|
||
is_union: {type: Boolean, default: false,},
|
||
is_sysadmin: {type: Boolean, default: false,},
|
||
is_a06: {type: Boolean, default: false,}
|
||
},
|
||
components: {
|
||
'file-upload': httpVueLoader('/components/plugins/FileUpload.vue')
|
||
},
|
||
data() {
|
||
return {
|
||
activityGroupList: [],
|
||
active: 0,
|
||
eventForm: {
|
||
isLeader: false,
|
||
},
|
||
eventsIds: [],
|
||
rightChecked: [],
|
||
checkedEventInfo: [],
|
||
checkedEventInfo2: [],
|
||
checkedEvents: [],
|
||
unitOptions: [],
|
||
clubOptions: [],
|
||
planList: [],
|
||
events: [],
|
||
projectType: "",
|
||
formRules: {
|
||
name: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||
address: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||
typeId: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||
eventsIds: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||
applyTime: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||
unitSponsor: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||
undertakeUnit: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||
// unitJointly: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||
time: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||
activityGroupId: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||
gameStyle: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||
applyWay: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||
restrictTotalPeople: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||
restrictTotalTeam: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||
// registrationMethod: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||
// competitionMethod: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||
// rewardMethod: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||
// precautions: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||
// eventNotification: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||
personType: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||
// athleteQualification: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||
activityLevel: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||
// belongClubId: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||
applyType: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||
athletesMaxNum: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||
restrictRegNumber: [{required: true, message: '必填', trigger: ['blur', 'change']}],
|
||
}
|
||
}
|
||
},
|
||
methods: {
|
||
ageDateChange() {
|
||
this.$set(this.eventForm, "startAgeDate", null)
|
||
this.$set(this.eventForm, "endAgeDate", null)
|
||
},
|
||
async doAssignmentDate() {
|
||
|
||
await this.saveEvent()
|
||
const form = clone(this.form)
|
||
|
||
const loading = this.$loading({
|
||
lock: true,
|
||
text: '正在提交...',
|
||
spinner: 'el-icon-loading',
|
||
background: COVER_LAYER_COLOR
|
||
});
|
||
const resp = await $.post(loc() + "/doAssignmentDate", {
|
||
eventIds: JSON.stringify(this.checkedEventInfo.map(v => v.id)),
|
||
events: JSON.stringify(this.checkedEventInfo)
|
||
})
|
||
closeLoadingFunc(loading, resp, async (data) => {
|
||
await this.openEdit(this.form, false)
|
||
}, (data, msg) => {
|
||
this.$message.error(msg);
|
||
})
|
||
|
||
},
|
||
filterMethod(query, item) {
|
||
return item.allName.indexOf(query) > -1;
|
||
},
|
||
rightChange(v) {
|
||
},
|
||
rightCheckChange(v, v2) {
|
||
this.rightChecked = v
|
||
},
|
||
/* async eventRemoveTag(val) {
|
||
this.$confirm('确定要删除该活动吗?', '提示', {
|
||
type: 'warning'
|
||
}).then(async () => {
|
||
const {data} = await $.get(loc() + "/getEventApply", {activityId: this.form.id, eventId: val})
|
||
if (data > 0) {
|
||
|
||
}
|
||
}).catch(() => {
|
||
this.form.eventsIds.push(val)
|
||
console.log(this.form.eventsIds)
|
||
});
|
||
|
||
|
||
},*/
|
||
async applyTypeChange() {
|
||
this.form.eventsIds = []
|
||
if (this.form.applyType === 1) {
|
||
this.events = await activity.getEvents(1)
|
||
} else if (this.form.applyType === 2) {
|
||
this.events = await activity.getEvents(2)
|
||
} else {
|
||
this.$set(this.form, "applyWay", [1])
|
||
this.events = await activity.getEvents(3)
|
||
|
||
}
|
||
},
|
||
initCheckedEventInfo() {
|
||
this.checkedEventInfo = this.checkedEvents.map(v => {
|
||
v.eventId = v.id
|
||
|
||
if (v.projectType === '1') {
|
||
v.athletesMaxNum = 3
|
||
v.restrictRegNumber = 2
|
||
v.leanderNum = 0
|
||
v.coachNum = 0
|
||
} else if (v.projectType === '2') {
|
||
v.leanderNum = 0
|
||
v.coachNum = 0
|
||
v.restrictTotalTeam = 1
|
||
}
|
||
return v
|
||
})
|
||
},
|
||
applyWayChange() {
|
||
this.$nextTick(() => {
|
||
this.initEditor()
|
||
})
|
||
},
|
||
async eventChange(val) {
|
||
const data = this.checkedEventInfo.find(v => v.eventId === val)
|
||
const resp = await $.get("/platform/activity/school/info/mange/getEventData", {id: val})
|
||
await this.$nextTick()
|
||
if (data) {
|
||
this.eventForm = clone(data)
|
||
this.projectType = data.projectType
|
||
} else {
|
||
this.eventForm = {
|
||
projectType: resp.data.projectType,
|
||
leanderNum: 0,
|
||
coachNum: 0,
|
||
athletesMaxNum: resp.data.projectType == 1 ? 3 : null,
|
||
restrictTotalTeam: 1,
|
||
substituteNum: 0,
|
||
restrictRegNumber: resp.data.projectType == 1 ? 2 : null,
|
||
isLeader: false
|
||
}
|
||
this.projectType = resp.data.projectType
|
||
}
|
||
this.$set(this.eventForm, "checkedEventId", val)
|
||
}
|
||
,
|
||
async saveEvent() {
|
||
const data = clone(this.eventForm)
|
||
if (data.checkedEventId === 'allItems') {
|
||
this.checkedEventInfo.forEach(v => {
|
||
if (v.projectType === '1') {
|
||
v.athletesMaxNum = data.athletesMaxNum
|
||
v.restrictRegNumber = data.restrictRegNumber
|
||
}
|
||
})
|
||
} else {
|
||
const info = this.checkedEventInfo.find(v => v.eventId === data.checkedEventId)
|
||
if (info != null) {
|
||
const index = this.checkedEventInfo.findIndex(v => v.eventId === data.checkedEventId)
|
||
this.checkedEventInfo.splice(index, 1)
|
||
if (info.projectType === '1') {
|
||
this.$set(this.eventForm, "athletesMaxNum", data.athletesMaxNum)
|
||
this.$set(this.eventForm, "restrictRegNumber", data.restrictRegNumber)
|
||
}
|
||
this.$set(this.eventForm, "checkedEventId", info.eventId)
|
||
}
|
||
data.eventId = data.checkedEventId
|
||
this.checkedEventInfo.push(data)
|
||
}
|
||
|
||
await this.doSave()
|
||
}
|
||
,
|
||
prev() {
|
||
this.active--
|
||
this.$nextTick(() => {
|
||
this.initEditor()
|
||
})
|
||
},
|
||
getArrDifference(arr1, arr2) {
|
||
return arr1.concat(arr2).filter(function (v, i, arr) {
|
||
return arr.indexOf(v) === arr.lastIndexOf(v);
|
||
});
|
||
},
|
||
next() {
|
||
this.$refs["activityForm"].validate(async (valid) => {
|
||
const form = clone(this.form)
|
||
|
||
if (!valid) {
|
||
this.$notify.warning({title: '警告', message: '存在未填的必填项'});
|
||
return
|
||
}
|
||
const arrDifference = this.getArrDifference(this.form.unitJointly, this.form.unitSponsor);
|
||
if (arrDifference.length === 0) {
|
||
this.$notify.error({title: '错误', message: '协办单位里存在主办单位'});
|
||
return
|
||
}
|
||
|
||
if (moment(this.form.time[0]).valueOf() <= moment(this.form.applyTime[0]).valueOf()) {
|
||
this.$notify.error({title: '错误', message: '活动时间必须晚于报名时间'});
|
||
return
|
||
}
|
||
|
||
if (form.applyWay.includes(3) && !form.image) {
|
||
this.$notify.error({title: '错误', message: '请上传小程序活动封面图'});
|
||
return
|
||
}
|
||
|
||
this.checkedEvents = this.events.filter(v => this.form.eventsIds.some(x => x === v.id))
|
||
|
||
if (this.form.applyType === 2 && !this.checkedEvents.find(v => v.id === "allItems")) {
|
||
const data = this.checkedEventInfo2.find(v => v.projectType === '1')
|
||
const item = {
|
||
id: "allItems",
|
||
eventId: "allItems",
|
||
allName: "所有单项",
|
||
projectType: "1",
|
||
athletesMaxNum: data ? data.athletesMaxNum : 3,
|
||
restrictRegNumber: data ? data.restrictRegNumber : 2,
|
||
}
|
||
this.checkedEventInfo.unshift(item)
|
||
this.checkedEvents.unshift(item)
|
||
}
|
||
|
||
this.eventForm.checkedEventId = this.checkedEvents[0].id
|
||
this.projectType = this.checkedEvents[0].projectType
|
||
|
||
if (!form.id || this.checkedEventInfo2.length <= 0) {
|
||
this.eventForm = {
|
||
checkedEventId: this.checkedEvents[0].id,
|
||
leanderNum: 0,
|
||
coachNum: 0,
|
||
athletesMaxNum: 3,
|
||
substituteNum: 0
|
||
}
|
||
this.initCheckedEventInfo()
|
||
}
|
||
|
||
this.eventChange(this.checkedEvents[0].id)
|
||
|
||
this.active++
|
||
})
|
||
}
|
||
,
|
||
async activityLevelChange() {
|
||
this.form.planId = null
|
||
this.planList = await activity.getSchoolActivityPlan(this.form.activityLevel)
|
||
const data = await this.getActivityCode(this.form.activityLevel)
|
||
this.$set(this.form, "activityCode", data)
|
||
if (this.form.activityCode !== 40001) {
|
||
this.$set(this.form, "applyWay", [1])
|
||
this.$set(this.form, "applyType", 1)
|
||
|
||
}
|
||
if (this.form.activityLevel === 40003 || (this.form.activityLevel === 40001 && this.is_club)) {
|
||
this.clubOptions = await getClubsByRole()
|
||
if (this.clubOptions && this.clubOptions.length > 0) {
|
||
this.$set(this.form, "belongClubId", this.clubOptions[0].stid)
|
||
}
|
||
}
|
||
|
||
await this.applyTypeChange()
|
||
this.$forceUpdate();
|
||
|
||
}
|
||
,
|
||
async openAdd() {
|
||
this.events = await activity.getEvents(2)
|
||
this.planList = await activity.getSchoolActivityPlan(this.form.activityLevel)
|
||
await this.getActivityGroup()
|
||
this.active = 0
|
||
this.eventForm = {}
|
||
|
||
this.$nextTick(async () => {
|
||
if (this.$refs['activityForm']) {
|
||
this.$refs['activityForm'].resetFields()
|
||
}
|
||
this.initEditor()
|
||
const data = await this.getActivityCode(40001)
|
||
this.form = {
|
||
planId: '',
|
||
gameStyle: 1,
|
||
applyWay: [1],
|
||
eventsIds: [],
|
||
unitJointly: [],
|
||
applyType: 2,
|
||
activityCode: data,
|
||
activityLevel: 40001,
|
||
}
|
||
await this.activityLevelChange()
|
||
})
|
||
},
|
||
async getActivityCode(activity_type) {
|
||
const {data} = await $.get('/platform/activity/apply/generateActivityCode', {activity_type: activity_type})
|
||
return data;
|
||
},
|
||
async openEdit(row, flag) {
|
||
this.active = flag ? 0 : this.active
|
||
this.events = await activity.getEvents(2)
|
||
this.planList = await activity.getSchoolActivityPlan(1)
|
||
await this.getActivityGroup()
|
||
const {id} = row
|
||
this.$set(row, "loading", true)
|
||
|
||
const resp = await $.get("/platform/activity/school/info/mange/findOne", {id})
|
||
|
||
requestLaterFun(resp, async (v) => {
|
||
this.$set(row, "loading", false)
|
||
this.clubOptions = await getClubsByRole()
|
||
this.eventsIds = clone(JSON.parse(v.eventsIds))
|
||
v.applyTime = [v.applyStartTime, v.applyEndTime]
|
||
v.time = [v.startTime, v.endTime]
|
||
v.eventsIds = JSON.parse(v.eventsIds)
|
||
v.applyWay = JSON.parse(v.applyWay)
|
||
v.unitSponsor = JSON.parse(v.unitSponsor)
|
||
v.undertakeUnit = JSON.parse(v.undertakeUnit)
|
||
v.unitJointly = JSON.parse(v.unitJointly)
|
||
v.activityGroupId = parseInt(v.activityGroupId)
|
||
v.activityLevel = parseInt(v.activityLevel)
|
||
if (v.image && v.image.length > 0) v.image = JSON.parse(v.image)
|
||
this.form = clone(v)
|
||
this.checkedEventInfo = clone(v.schoolEvents)
|
||
this.checkedEventInfo2 = v.schoolEvents
|
||
this.checkedEventInfo.map(v => {
|
||
if (v.startAgeDate) {
|
||
this.$set(v, "ageDate", [v.startAgeDate, v.endAgeDate])
|
||
this.$set(this.eventForm, "ageDate", [v.startAgeDate, v.endAgeDate])
|
||
}
|
||
})
|
||
const data = v.schoolEvents.find(v => v.projectType === '1')
|
||
|
||
if (this.form.applyType === 2 && !v.schoolEvents.some(v => v.eventId === "allItems")) {
|
||
const item = {
|
||
id: "allItems",
|
||
eventId: "allItems",
|
||
allName: "所有单项",
|
||
projectType: "1",
|
||
athletesMaxNum: data ? data.athletesMaxNum : 3,
|
||
restrictRegNumber: data ? data.restrictRegNumber : 2,
|
||
}
|
||
this.checkedEventInfo.unshift(item)
|
||
}
|
||
|
||
this.$nextTick(async () => {
|
||
this.initEditor()
|
||
|
||
})
|
||
})
|
||
},
|
||
async doOperate() {
|
||
const method = this.form.id ? "/doEdit" : "/doAdd"
|
||
const form = clone(this.form)
|
||
const events = clone(this.checkedEventInfo)
|
||
|
||
form.restrictMaxNum = form.leanderNum + form.coachNum + form.athletesMaxNum + form.substituteNum
|
||
form.restrictMinNum = form.athletesMaxNum
|
||
form.isSave = false
|
||
|
||
this.examineTrans(form)
|
||
|
||
const loading = this.$loading({
|
||
lock: true,
|
||
text: '正在提交...',
|
||
spinner: 'el-icon-loading',
|
||
background: COVER_LAYER_COLOR
|
||
});
|
||
const resp = await $.post(base + "/platform/activity/school/info/mange" + method, {
|
||
data: JSON.stringify(form),
|
||
events: JSON.stringify(events)
|
||
})
|
||
|
||
closeLoadingFunc(loading, resp, async () => {
|
||
this.$emit('flip')
|
||
window.location.reload();
|
||
}, (data, msg) => {
|
||
this.$notify.error({title: '错误', message: msg});
|
||
})
|
||
|
||
}
|
||
,
|
||
async operate() {
|
||
|
||
const deleteEventIds = this.eventsIds.filter(v => !this.form.eventsIds.includes(v))
|
||
const {data} = await $.get(loc() + "/getEventApply", {
|
||
activityId: this.form.id,
|
||
eventId: JSON.stringify(deleteEventIds)
|
||
})
|
||
if (data.length > 0) {
|
||
this.$confirm(data.map(v => v.allname).join(",") + '项目下有报名人员是否要删除?', '提示', {
|
||
type: 'warning'
|
||
}).then(async () => {
|
||
await this.doOperate()
|
||
}).catch(() => {
|
||
|
||
});
|
||
} else {
|
||
await this.doOperate()
|
||
}
|
||
},
|
||
async doSave() {
|
||
let url = this.form.id ? "/doEdit" : "/doAdd"
|
||
|
||
this.checkedEventInfo.forEach(v => {
|
||
if (this.eventForm.projectType === '1' && this.eventForm.eventId === 'eventId') {
|
||
v.athletesMaxNum = this.checkedEventInfo[0].athletesMaxNum
|
||
v.restrictRegNumber = this.checkedEventInfo[0].restrictRegNumber
|
||
}
|
||
if (v.ageDate && v.ageDate.length > 0) {
|
||
v.startAgeDate = v.ageDate[0]
|
||
v.endAgeDate = v.ageDate[1]
|
||
} else {
|
||
v.startAgeDate = null
|
||
v.endAgeDate = null
|
||
}
|
||
})
|
||
|
||
let events = clone(this.checkedEventInfo)
|
||
|
||
const form = clone(this.form)
|
||
form.restrictMaxNum = form.leanderNum + form.coachNum + form.athletesMaxNum + form.substituteNum
|
||
form.restrictMinNum = form.athletesMaxNum
|
||
form.isSave = true
|
||
|
||
const {time, applyTime} = form
|
||
if (applyTime && applyTime.length) {
|
||
form.applyStartTime = applyTime[0]
|
||
form.applyEndTime = applyTime[1]
|
||
form.applyTime = undefined
|
||
}
|
||
|
||
if (time && time.length) {
|
||
form.startTime = time[0]
|
||
form.endTime = time[1]
|
||
form.time = undefined
|
||
}
|
||
|
||
if (this.eventForm.checkedEventId == "allItems") {
|
||
events = events.filter(v => v.projectType == 1 && v.id != "allItems")
|
||
|
||
} else {
|
||
this.$set(this.eventForm, "activityId", this.form.id)
|
||
this.$set(this.eventForm, "eventId", this.eventForm.checkedEventId)
|
||
if (this.eventForm.ageDate && this.eventForm.ageDate.length > 0) {
|
||
this.$set(this.eventForm, "startAgeDate", this.eventForm.ageDate[0])
|
||
this.$set(this.eventForm, "endAgeDate", this.eventForm.ageDate[1])
|
||
}
|
||
events = this.eventForm
|
||
}
|
||
const loading = this.$loading({
|
||
lock: true,
|
||
text: '正在提交...',
|
||
spinner: 'el-icon-loading',
|
||
background: COVER_LAYER_COLOR
|
||
});
|
||
|
||
const resp = await $.post("/platform/activity/school/info/mange" + url, {
|
||
data: JSON.stringify(form),
|
||
events: JSON.stringify(events)
|
||
})
|
||
|
||
closeLoadingFunc(loading, resp, async (data) => {
|
||
|
||
this.$emit('flush')
|
||
if (!this.form.id) form.id = data
|
||
await this.openEdit(form, false)
|
||
|
||
}, (data, msg) => {
|
||
this.$message.error(msg);
|
||
})
|
||
}
|
||
,
|
||
examineTrans(form) {
|
||
const {unitJointly, unitSponsor, time, applyTime, applyWay, image} = form
|
||
|
||
const arrDifference = this.getArrDifference(unitJointly, unitSponsor);
|
||
if (arrDifference.length === 0) {
|
||
this.$notify.error({title: '错误', message: '协办单位里存在主办单位'});
|
||
return
|
||
}
|
||
|
||
if (moment(time[0]).valueOf() <= moment(applyTime[0]).valueOf()) {
|
||
this.$notify.error({title: '错误', message: '活动时间必须晚于报名时间'});
|
||
return
|
||
}
|
||
|
||
if (applyWay.includes(3) && !image) {
|
||
this.$notify.error({title: '错误', message: '请上传小程序活动封面图'});
|
||
return
|
||
}
|
||
|
||
if (applyTime && applyTime.length) {
|
||
form.applyStartTime = applyTime[0]
|
||
form.applyEndTime = applyTime[1]
|
||
form.applyTime = undefined
|
||
}
|
||
|
||
if (time && time.length) {
|
||
form.startTime = time[0]
|
||
form.endTime = time[1]
|
||
form.time = undefined
|
||
}
|
||
}
|
||
,
|
||
initEditor() {
|
||
let keys = ['athleteQualification', 'registrationMethod', 'competitionMethod', 'rewardMethod', 'precautions', 'eventNotification']
|
||
keys.forEach(key => {
|
||
$("#" + key).html("")
|
||
editors[key] = new E('#' + key)
|
||
editors[key].config.onchange = (html) => {
|
||
this.form[key] = html
|
||
}
|
||
editors[key].create()
|
||
if (this.form[key]) {
|
||
editors[key].txt.html(this.form[key])
|
||
}
|
||
})
|
||
}
|
||
,
|
||
isLeaderChange() {
|
||
this.$set(this.eventForm, "leanderNum", 1)
|
||
this.$set(this.eventForm, "coachNum", 0)
|
||
this.$set(this.eventForm, "restrictBoyNum", 0)
|
||
this.$set(this.eventForm, "restrictGirlNum", 0)
|
||
},
|
||
async getActivityGroup() {
|
||
const {data} = await $.get('/platform/activity/basic/scope/getActivityUserScopeGroup')
|
||
this.activityGroupList = data
|
||
}
|
||
},
|
||
async created() {
|
||
|
||
const clubs = await getClubs()
|
||
const units = await getUnits(null)
|
||
this.unitOptions = clubs.concat(units)
|
||
}
|
||
}
|
||
</script>
|
||
|
||
<style>
|
||
.el-transfer {
|
||
display: flex;
|
||
align-items: center;
|
||
}
|
||
|
||
.el-transfer-panel {
|
||
width: unset !important;
|
||
flex: 2 !important;
|
||
}
|
||
|
||
.el-transfer-panel__body {
|
||
|
||
}
|
||
|
||
.el-transfer__buttons {
|
||
flex: 1 !important;
|
||
text-align: center;
|
||
}
|
||
|
||
#athleteQualification > div {
|
||
z-index: 1 !important;
|
||
}
|
||
|
||
.act_event .el-select__tags .el-tag {
|
||
color: #409eff;
|
||
}
|
||
|
||
.act_event .el-select__tags .el-tag.el-tag--info .el-tag__close {
|
||
color: red;
|
||
background-color: #ffffff;
|
||
}
|
||
|
||
.isLeaderColor .el-form-item__label {
|
||
color: white;
|
||
}
|
||
</style> |