|
|
@ -1,20 +1,29 @@ |
|
|
|
<template> |
|
|
|
<template> |
|
|
|
<div> |
|
|
|
<div> |
|
|
|
<el-card shadow="hover" |
|
|
|
<div v-show="!setVisible" |
|
|
|
class="m-b-20"> |
|
|
|
class="page"> |
|
|
|
<div> |
|
|
|
<div class="page-content"> |
|
|
|
<p class="m-b-20">比赛名称</p> |
|
|
|
<div class="p-title">比赛内容设置</div> |
|
|
|
{{ form.stageName }} |
|
|
|
<el-form label-width="170px" |
|
|
|
|
|
|
|
label-suffix=":" |
|
|
|
|
|
|
|
size="small" |
|
|
|
|
|
|
|
:disabled="!editing && id"> |
|
|
|
|
|
|
|
<div v-for="(item, i) in form" |
|
|
|
|
|
|
|
:key="i" |
|
|
|
|
|
|
|
class="step"> |
|
|
|
|
|
|
|
<div class="title"> |
|
|
|
|
|
|
|
<span>{{ item.stageName }}(第{{ nums[i] }}阶段) | {{ methods.find(e => e.id === item.method).name }} </span> |
|
|
|
|
|
|
|
<el-button v-if="item.method !== 2" |
|
|
|
|
|
|
|
type="primary" |
|
|
|
|
|
|
|
@click="toSet(i)">设置</el-button> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</el-card> |
|
|
|
<el-form-item class="req" |
|
|
|
<el-card shadow="hover" |
|
|
|
prop="time" |
|
|
|
class="m-b-20"> |
|
|
|
label="比赛时间"> |
|
|
|
<div> |
|
|
|
<span v-if="item.method !== 2 && item.startTime">{{ item.startTime + ' 至 ' + item.endTime }}</span> |
|
|
|
<p class="m-b-20">比赛时间</p> |
|
|
|
<div style="display: flex;align-items: center;" |
|
|
|
<div class="date-inputs"> |
|
|
|
v-if="item.method === 2"> |
|
|
|
起止时间: |
|
|
|
<el-date-picker v-model="item.time" |
|
|
|
<div style="display: inline-flex;align-items: center;"> |
|
|
|
|
|
|
|
<el-date-picker v-model="form.time" |
|
|
|
|
|
|
|
type="datetimerange" |
|
|
|
type="datetimerange" |
|
|
|
range-separator="~" |
|
|
|
range-separator="~" |
|
|
|
start-placeholder="开始日期" |
|
|
|
start-placeholder="开始日期" |
|
|
@ -23,124 +32,127 @@ |
|
|
|
value-format="yyyy-MM-dd HH:mm:ss" |
|
|
|
value-format="yyyy-MM-dd HH:mm:ss" |
|
|
|
@change="timeChange"> |
|
|
|
@change="timeChange"> |
|
|
|
</el-date-picker> |
|
|
|
</el-date-picker> |
|
|
|
<el-alert style="width: auto;padding: 4px 16px;margin-left: 10px;" |
|
|
|
<el-alert style="width: auto;padding: 0px 16px;margin-left: 10px;" |
|
|
|
:title="'(请设置在 ' + step1.playStartTime + ' ~ ' + step1.playEndTime + '间)'" |
|
|
|
:title="'(请设置在 ' + step1.playStartTime + ' ~ ' + step1.playEndTime + '间)'" |
|
|
|
type="error" |
|
|
|
type="error" |
|
|
|
:closable="false" |
|
|
|
:closable="false" |
|
|
|
effect="dark"> |
|
|
|
effect="dark"> |
|
|
|
</el-alert> |
|
|
|
</el-alert> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
|
|
|
|
</el-form-item> |
|
|
|
|
|
|
|
<template v-if="item.method === 2"> |
|
|
|
|
|
|
|
<el-form-item class="req" |
|
|
|
|
|
|
|
label="比赛地点"> |
|
|
|
|
|
|
|
<el-input v-model="item.offlineAddress" |
|
|
|
|
|
|
|
style="width: 80%"></el-input> |
|
|
|
|
|
|
|
</el-form-item> |
|
|
|
|
|
|
|
<el-form-item class="req" |
|
|
|
|
|
|
|
label="比赛内容"> |
|
|
|
|
|
|
|
<el-input v-model="item.contentDescription" |
|
|
|
|
|
|
|
type="textarea" |
|
|
|
|
|
|
|
style="width: 80%"></el-input> |
|
|
|
|
|
|
|
</el-form-item> |
|
|
|
|
|
|
|
<el-form-item class="req" |
|
|
|
|
|
|
|
label="评分规则"> |
|
|
|
|
|
|
|
<el-input v-model="item.scoreRule" |
|
|
|
|
|
|
|
type="textarea" |
|
|
|
|
|
|
|
style="width: 80%"></el-input> |
|
|
|
|
|
|
|
</el-form-item> |
|
|
|
|
|
|
|
</template> |
|
|
|
|
|
|
|
<template v-else> |
|
|
|
|
|
|
|
<el-form-item class="req" |
|
|
|
|
|
|
|
prop="cid" |
|
|
|
|
|
|
|
label="课程系统"> |
|
|
|
|
|
|
|
{{ item.systemName }} |
|
|
|
|
|
|
|
</el-form-item> |
|
|
|
|
|
|
|
<el-form-item class="req" |
|
|
|
|
|
|
|
prop="assessmentId" |
|
|
|
|
|
|
|
label="已选择考核"> |
|
|
|
|
|
|
|
{{ item.projectName }} |
|
|
|
|
|
|
|
</el-form-item> |
|
|
|
|
|
|
|
<el-form-item class="req" |
|
|
|
|
|
|
|
prop="resultAnnouncementTime" |
|
|
|
|
|
|
|
label="比赛地点"> |
|
|
|
|
|
|
|
<div class="line"> |
|
|
|
|
|
|
|
<el-checkbox v-model="item.onlineButton">线上</el-checkbox> |
|
|
|
|
|
|
|
<el-input v-model="item.onlineAddress" |
|
|
|
|
|
|
|
clearable |
|
|
|
|
|
|
|
placeholder="请输入比赛网址" |
|
|
|
|
|
|
|
:disabled="!item.onlineButton" |
|
|
|
|
|
|
|
style="width: 400px;margin-left: 10px"></el-input> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
|
|
|
|
<div class="line"> |
|
|
|
|
|
|
|
<el-checkbox v-model="item.offlineButton">线下</el-checkbox> |
|
|
|
|
|
|
|
<el-input v-model="item.offlineAddress" |
|
|
|
|
|
|
|
clearable |
|
|
|
|
|
|
|
placeholder="请输入地址" |
|
|
|
|
|
|
|
:disabled="!item.offlineButton" |
|
|
|
|
|
|
|
style="width: 400px;margin-left: 10px"></el-input> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</el-card> |
|
|
|
</el-form-item> |
|
|
|
<el-card shadow="hover" |
|
|
|
</template> |
|
|
|
class="mgr20 m-b-20"> |
|
|
|
|
|
|
|
<div> |
|
|
|
|
|
|
|
<p class="m-b-20">课程</p> |
|
|
|
|
|
|
|
<div class="inline-input"> |
|
|
|
|
|
|
|
<el-select v-model="form.cid" |
|
|
|
|
|
|
|
@change="courseChange"> |
|
|
|
|
|
|
|
<el-option v-for="item in curriculumList" |
|
|
|
|
|
|
|
:key="item.cid" |
|
|
|
|
|
|
|
:label="item.curriculumName" |
|
|
|
|
|
|
|
:value="item.cid"> |
|
|
|
|
|
|
|
</el-option> |
|
|
|
|
|
|
|
</el-select> |
|
|
|
|
|
|
|
</div> |
|
|
|
|
|
|
|
</div> |
|
|
|
|
|
|
|
</el-card> |
|
|
|
|
|
|
|
<el-card shadow="hover" |
|
|
|
|
|
|
|
class="m-b-20"> |
|
|
|
|
|
|
|
<div class="flex-between m-b-20"> |
|
|
|
|
|
|
|
<span>实训项目</span> |
|
|
|
|
|
|
|
<div style="display: inline-flex;"> |
|
|
|
|
|
|
|
<div> |
|
|
|
|
|
|
|
<el-input placeholder="请输入项目名称" |
|
|
|
|
|
|
|
prefix-icon="el-icon-search" |
|
|
|
|
|
|
|
v-model.trim="keyword" |
|
|
|
|
|
|
|
clearable></el-input> |
|
|
|
|
|
|
|
</div> |
|
|
|
|
|
|
|
<el-button style="margin-left: 5px" |
|
|
|
|
|
|
|
type="primary" |
|
|
|
|
|
|
|
round |
|
|
|
|
|
|
|
@click="toProject">自定义实验项目</el-button> |
|
|
|
|
|
|
|
</div> |
|
|
|
</div> |
|
|
|
|
|
|
|
</el-form> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
<!-- 实训项目表格 --> |
|
|
|
|
|
|
|
<el-table :data="projects" |
|
|
|
|
|
|
|
class="table" |
|
|
|
|
|
|
|
stripe |
|
|
|
|
|
|
|
header-align="center"> |
|
|
|
|
|
|
|
<el-table-column width="60" |
|
|
|
|
|
|
|
label="选择" |
|
|
|
|
|
|
|
align="center"> |
|
|
|
|
|
|
|
<template slot-scope="scope"> |
|
|
|
|
|
|
|
<el-radio v-model="form.projectId" |
|
|
|
|
|
|
|
:label="scope.row.projectId"> </el-radio> |
|
|
|
|
|
|
|
</template> |
|
|
|
|
|
|
|
</el-table-column> |
|
|
|
|
|
|
|
<el-table-column prop="projectName" |
|
|
|
|
|
|
|
label="项目名称" |
|
|
|
|
|
|
|
align="center"></el-table-column> |
|
|
|
|
|
|
|
<el-table-column prop="auth" |
|
|
|
|
|
|
|
label="项目权限" |
|
|
|
|
|
|
|
align="center"> |
|
|
|
|
|
|
|
<template slot-scope="scope"> |
|
|
|
|
|
|
|
{{ permissionsKeys[scope.row.permissions] }} |
|
|
|
|
|
|
|
</template> |
|
|
|
|
|
|
|
</el-table-column> |
|
|
|
|
|
|
|
<el-table-column prop="founder" |
|
|
|
|
|
|
|
label="创建人" |
|
|
|
|
|
|
|
align="center"> |
|
|
|
|
|
|
|
<template slot-scope="scope"> |
|
|
|
|
|
|
|
{{ scope.row.founder ? '老师创建' : '系统内置' }} |
|
|
|
|
|
|
|
</template> |
|
|
|
|
|
|
|
</el-table-column> |
|
|
|
|
|
|
|
<el-table-column prop="createTime" |
|
|
|
|
|
|
|
label="创建时间" |
|
|
|
|
|
|
|
align="center"></el-table-column> |
|
|
|
|
|
|
|
<!-- <el-table-column label="操作" align="center"> |
|
|
|
|
|
|
|
<template slot-scope="scope"> |
|
|
|
|
|
|
|
<el-button type="text" @click="showProject(scope.row)">查看</el-button> |
|
|
|
|
|
|
|
</template> |
|
|
|
|
|
|
|
</el-table-column> --> |
|
|
|
|
|
|
|
</el-table> |
|
|
|
|
|
|
|
<div class="pagination"> |
|
|
|
|
|
|
|
<el-pagination background |
|
|
|
|
|
|
|
:page-size="pageSize" |
|
|
|
|
|
|
|
@current-change="handleCurrentChange" |
|
|
|
|
|
|
|
layout="total,prev, pager, next" |
|
|
|
|
|
|
|
:total="total"></el-pagination> |
|
|
|
|
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</el-card> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div style="text-align: center"> |
|
|
|
<set v-if="setVisible" |
|
|
|
<el-button @click="back">返回</el-button> |
|
|
|
:form.sync="form[curStep]" |
|
|
|
<el-button type="primary" |
|
|
|
:step1.sync="step1" |
|
|
|
@click="save">保存</el-button> |
|
|
|
@hideSet="hideSet" /> |
|
|
|
</div> |
|
|
|
|
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</template> |
|
|
|
</template> |
|
|
|
|
|
|
|
|
|
|
|
<script> |
|
|
|
<script> |
|
|
|
import util from "@/libs/util"; |
|
|
|
import util from "@/libs/util"; |
|
|
|
import { Loading } from 'element-ui' |
|
|
|
import set from './set' |
|
|
|
export default { |
|
|
|
export default { |
|
|
|
props: ['form', 'step1'], |
|
|
|
props: ['setupId', 'competitionId', 'editing'], |
|
|
|
data () { |
|
|
|
data () { |
|
|
|
return { |
|
|
|
return { |
|
|
|
loadIns: null, |
|
|
|
id: this.$route.query.id, |
|
|
|
curriculumList: [], |
|
|
|
updateTime: 0, |
|
|
|
keyword: '', |
|
|
|
step1: this.$parent.$refs.step1.form, |
|
|
|
projects: [], |
|
|
|
cache: this.$store.state.match.cache, |
|
|
|
page: 1, |
|
|
|
nums: ['一', '二', '三'], |
|
|
|
pageSize: 5, |
|
|
|
methods: [ |
|
|
|
total: 0, |
|
|
|
{ |
|
|
|
sysId: '', |
|
|
|
id: 0, |
|
|
|
permissionsKeys: ['练习', '考核', '竞赛'], |
|
|
|
name: '实操' |
|
|
|
timeInvalid: false |
|
|
|
}, |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
id: 1, |
|
|
|
|
|
|
|
name: '理论' |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
id: 2, |
|
|
|
|
|
|
|
name: '线下' |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
], |
|
|
|
|
|
|
|
originForm: { |
|
|
|
|
|
|
|
cid: '', |
|
|
|
|
|
|
|
mallId: '', |
|
|
|
|
|
|
|
contentDescription: '', |
|
|
|
|
|
|
|
endTime: '', |
|
|
|
|
|
|
|
scoreRule: '', |
|
|
|
|
|
|
|
stageId: '', |
|
|
|
|
|
|
|
startTime: '', |
|
|
|
|
|
|
|
systemId: '', |
|
|
|
|
|
|
|
offlineAddress: '', |
|
|
|
|
|
|
|
offlineButton: 0, |
|
|
|
|
|
|
|
onlineAddress: '', |
|
|
|
|
|
|
|
onlineButton: 0, |
|
|
|
|
|
|
|
time: [] |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
form: [], |
|
|
|
|
|
|
|
setVisible: false, |
|
|
|
|
|
|
|
curStep: 0, |
|
|
|
|
|
|
|
pass: 0 |
|
|
|
}; |
|
|
|
}; |
|
|
|
}, |
|
|
|
}, |
|
|
|
|
|
|
|
components: { |
|
|
|
|
|
|
|
set |
|
|
|
|
|
|
|
}, |
|
|
|
watch: { |
|
|
|
watch: { |
|
|
|
// 监听信息是否有更改,有的话页面离开的时候要询问是否要保存 |
|
|
|
// 监听信息是否有更改,有的话页面离开的时候要询问是否要保存 |
|
|
|
form: { |
|
|
|
form: { |
|
|
@ -149,70 +161,55 @@ export default { |
|
|
|
}, |
|
|
|
}, |
|
|
|
deep: true |
|
|
|
deep: true |
|
|
|
}, |
|
|
|
}, |
|
|
|
keyword: function (val) { |
|
|
|
|
|
|
|
clearTimeout(this.searchTimer); |
|
|
|
|
|
|
|
this.searchTimer = setTimeout(() => { |
|
|
|
|
|
|
|
this.initData(); |
|
|
|
|
|
|
|
}, 500); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}, |
|
|
|
}, |
|
|
|
mounted () { |
|
|
|
mounted () { |
|
|
|
this.getCourse() |
|
|
|
this.handleForm() |
|
|
|
}, |
|
|
|
}, |
|
|
|
methods: { |
|
|
|
methods: { |
|
|
|
// 获取课程 |
|
|
|
// 如果是从自定义项目入口进去后返回的,要恢复上次的阶段和数据 |
|
|
|
getCourse () { |
|
|
|
resumeData () { |
|
|
|
this.loadIns = Loading.service() |
|
|
|
if (this.cache) { |
|
|
|
this.$get(this.api.curriculumList).then(({ data }) => { |
|
|
|
this.curStep = this.cache.curStep |
|
|
|
const list = data |
|
|
|
if (this.cache.form) this.form = this.cache.form |
|
|
|
this.curriculumList = data |
|
|
|
this.setVisible = true |
|
|
|
if (!this.form.cid && list.length) this.form.cid = list[0].cid |
|
|
|
this.$store.commit('match/setCache', null) |
|
|
|
this.courseChange() |
|
|
|
} |
|
|
|
}).catch(err => { |
|
|
|
|
|
|
|
this.loadIns.close() |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
// 课程选择回调 |
|
|
|
|
|
|
|
courseChange (val) { |
|
|
|
|
|
|
|
const { systemId } = this.curriculumList.find(e => e.cid == this.form.cid) |
|
|
|
|
|
|
|
this.sysId = systemId |
|
|
|
|
|
|
|
if (val) this.loadIns = Loading.service() |
|
|
|
|
|
|
|
this.getProject() |
|
|
|
|
|
|
|
}, |
|
|
|
|
|
|
|
// 查询项目 |
|
|
|
|
|
|
|
getProject () { |
|
|
|
|
|
|
|
this.$post(this.api.getProjectAssessmentByCompetition, { |
|
|
|
|
|
|
|
pageNum: this.page, |
|
|
|
|
|
|
|
pageSize: this.pageSize, |
|
|
|
|
|
|
|
cid: this.form.cid, |
|
|
|
|
|
|
|
projectName: this.keyword, |
|
|
|
|
|
|
|
systemId: this.sysId, |
|
|
|
|
|
|
|
permissions: 2 |
|
|
|
|
|
|
|
}).then(({ data }) => { |
|
|
|
|
|
|
|
this.projects = data.records |
|
|
|
|
|
|
|
this.total = data.total |
|
|
|
|
|
|
|
this.loadIns.close() |
|
|
|
|
|
|
|
}).catch(err => { |
|
|
|
|
|
|
|
this.loadIns.close() |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
}, |
|
|
|
}, |
|
|
|
initData () { |
|
|
|
// 处理form |
|
|
|
this.page = 1; |
|
|
|
handleForm () { |
|
|
|
this.getProject(); |
|
|
|
// 根据赛事id查询赛事规则 |
|
|
|
|
|
|
|
this.$post(`${this.api.queryCompetitionStageBySetupId}?setupId=${this.setupId}`).then(res => { |
|
|
|
|
|
|
|
res.competitionStages.map(e => { |
|
|
|
|
|
|
|
const form = e.competitionContent || JSON.parse(JSON.stringify(this.originForm)) |
|
|
|
|
|
|
|
if (form.startTime) { |
|
|
|
|
|
|
|
form.time = [form.startTime, form.endTime] |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
form.time = [] |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
form.offlineButton = !!form.offlineButton |
|
|
|
|
|
|
|
form.onlineButton = !!form.onlineButton |
|
|
|
|
|
|
|
form.method = e.method |
|
|
|
|
|
|
|
form.stageId = e.stageId |
|
|
|
|
|
|
|
form.stageName = e.stageName |
|
|
|
|
|
|
|
this.form.push(form) |
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
this.resumeData() |
|
|
|
|
|
|
|
this.$nextTick(() => { |
|
|
|
|
|
|
|
this.updateTime = 0 |
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
}).catch(res => { }) |
|
|
|
}, |
|
|
|
}, |
|
|
|
handleCurrentChange (val) { |
|
|
|
// 显示设置页面 |
|
|
|
this.page = val; |
|
|
|
toSet (i) { |
|
|
|
this.getProject(); |
|
|
|
this.curStep = i |
|
|
|
|
|
|
|
this.$parent.showBtns = false |
|
|
|
|
|
|
|
this.setVisible = true |
|
|
|
}, |
|
|
|
}, |
|
|
|
// 自定义项目 |
|
|
|
// 隐藏设置 |
|
|
|
toProject () { |
|
|
|
hideSet (form) { |
|
|
|
const { form, curStep } = this.$parent |
|
|
|
if (form) this.form[this.curStep] = form |
|
|
|
form[curStep] = this.form |
|
|
|
this.setVisible = false |
|
|
|
this.$store.commit('match/setCache', { |
|
|
|
this.$parent.showBtns = true |
|
|
|
form, |
|
|
|
|
|
|
|
curStep |
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
this.$router.push(`/project/list?show=1`) |
|
|
|
|
|
|
|
}, |
|
|
|
}, |
|
|
|
// 时间选择回调 |
|
|
|
// 时间选择回调 |
|
|
|
timeChange (val) { |
|
|
|
timeChange (val) { |
|
|
@ -220,12 +217,8 @@ export default { |
|
|
|
const startTime = new Date(val[0]) |
|
|
|
const startTime = new Date(val[0]) |
|
|
|
const endTime = new Date(val[1]) |
|
|
|
const endTime = new Date(val[1]) |
|
|
|
const { playStartTime, playEndTime } = this.step1 |
|
|
|
const { playStartTime, playEndTime } = this.step1 |
|
|
|
if (startTime < new Date(playStartTime) || endTime > new Date(playEndTime)) { |
|
|
|
if (startTime < new Date(playStartTime) || endTime > new Date(playEndTime)) return util.warningMsg('设置的阶段比赛时间必须要在第一步设置的竞赛时间范围内,请重新设置。') |
|
|
|
this.timeInvalid = true |
|
|
|
const { form, curStep } = this |
|
|
|
return util.warningMsg('设置的阶段比赛时间必须要在第一步设置的竞赛时间范围内,请重新设置。') |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
this.timeInvalid = false |
|
|
|
|
|
|
|
const { form, curStep } = this.$parent |
|
|
|
|
|
|
|
for (const i in form) { |
|
|
|
for (const i in form) { |
|
|
|
// 判断其他阶段的时间跟当前选的时间是否重叠 |
|
|
|
// 判断其他阶段的时间跟当前选的时间是否重叠 |
|
|
|
if (i !== curStep) { |
|
|
|
if (i !== curStep) { |
|
|
@ -239,29 +232,124 @@ export default { |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
}, |
|
|
|
}, |
|
|
|
|
|
|
|
// 发布赛事 |
|
|
|
|
|
|
|
publish () { |
|
|
|
|
|
|
|
this.competitionId && this.$post(`${this.api.publishCompetition}?competitionId=${this.competitionId}&publishStatus=1`).then(res => { }).catch(err => { }) |
|
|
|
|
|
|
|
}, |
|
|
|
// 提交 |
|
|
|
// 提交 |
|
|
|
save () { |
|
|
|
save (status, next = 0, releaseType, cb) { |
|
|
|
const { form } = this |
|
|
|
const { form } = this |
|
|
|
if (!form.time.length) return util.warningMsg('请选择比赛时间') |
|
|
|
if (!form.length) { |
|
|
|
|
|
|
|
this.$parent.hideLoad() |
|
|
|
|
|
|
|
util.successMsg('保存成功') |
|
|
|
|
|
|
|
this.$emit('next', next) |
|
|
|
|
|
|
|
return |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
// 发布才需要判断必填 |
|
|
|
|
|
|
|
if (status) { |
|
|
|
|
|
|
|
let invalid = 0 |
|
|
|
const { playStartTime, playEndTime } = this.step1 |
|
|
|
const { playStartTime, playEndTime } = this.step1 |
|
|
|
if (new Date(form.time[0]) < new Date(playStartTime) || new Date(form.time[1]) > new Date(playEndTime)) return util.warningMsg('设置的阶段比赛时间必须要在第一步设置的竞赛时间范围内,请重新设置。') |
|
|
|
for (const e of form) { |
|
|
|
if (!form.cid) return util.warningMsg('请选择课程') |
|
|
|
if (!e.time.length) { |
|
|
|
if (!form.projectId) return util.warningMsg('请选择项目') |
|
|
|
invalid = 1 |
|
|
|
const { systemId, systemName, projectName } = this.projects.find(e => e.projectId == form.projectId) |
|
|
|
util.errorMsg('请选择比赛时间') |
|
|
|
if (systemId) form.systemId = systemId |
|
|
|
break |
|
|
|
if (projectName) form.projectName = projectName |
|
|
|
} |
|
|
|
if (systemName) form.systemName = systemName |
|
|
|
if (new Date(e.time[0]) < new Date(playStartTime) || new Date(e.time[1]) > new Date(playEndTime)) { |
|
|
|
form.startTime = form.time[0] |
|
|
|
invalid = 1 |
|
|
|
form.endTime = form.time[1] |
|
|
|
util.errorMsg('设置的阶段比赛时间必须要在第一步设置的竞赛时间范围内,请重新设置。') |
|
|
|
this.$emit('hideSet', this.form) |
|
|
|
break |
|
|
|
}, |
|
|
|
} |
|
|
|
// 返回 |
|
|
|
e.startTime = e.time[0] |
|
|
|
back () { |
|
|
|
e.endTime = e.time[1] |
|
|
|
this.$emit('hideSet') |
|
|
|
if (e.method !== 2 && !e.cid) { |
|
|
|
|
|
|
|
invalid = 1 |
|
|
|
|
|
|
|
util.errorMsg('请选择课程') |
|
|
|
|
|
|
|
break |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (e.method === 2) { // 线下 |
|
|
|
|
|
|
|
if (!e.offlineAddress) { |
|
|
|
|
|
|
|
invalid = 1 |
|
|
|
|
|
|
|
util.errorMsg('请输入比赛地点') |
|
|
|
|
|
|
|
break |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (!e.contentDescription) { |
|
|
|
|
|
|
|
invalid = 1 |
|
|
|
|
|
|
|
util.errorMsg('请输入比赛内容') |
|
|
|
|
|
|
|
break |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (!e.scoreRule) { |
|
|
|
|
|
|
|
invalid = 1 |
|
|
|
|
|
|
|
util.errorMsg('请输入评分规则') |
|
|
|
|
|
|
|
break |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
if (e.onlineButton && !e.onlineAddress) { |
|
|
|
|
|
|
|
invalid = 1 |
|
|
|
|
|
|
|
util.errorMsg('请输入线上地点') |
|
|
|
|
|
|
|
break |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (e.offlineButton && !e.offlineAddress) { |
|
|
|
|
|
|
|
invalid = 1 |
|
|
|
|
|
|
|
util.errorMsg('请输入线下地点') |
|
|
|
|
|
|
|
break |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (!e.onlineAddress && !e.offlineAddress) { |
|
|
|
|
|
|
|
invalid = 1 |
|
|
|
|
|
|
|
util.errorMsg('请输入比赛地点') |
|
|
|
|
|
|
|
break |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (invalid) return |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
// 处理单选框 |
|
|
|
|
|
|
|
for (const e of form) { |
|
|
|
|
|
|
|
e.offlineButton = e.offlineButton ? 1 : 0 |
|
|
|
|
|
|
|
e.onlineButton = e.onlineButton ? 1 : 0 |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
this.$parent.showLoad() |
|
|
|
|
|
|
|
this.$post(this.api[form[0].contentId ? 'editCompetitionContent' : 'addCompetitionContent'], { |
|
|
|
|
|
|
|
competitionContents: form |
|
|
|
|
|
|
|
}).then(res => { |
|
|
|
|
|
|
|
this.$parent.hideLoad() |
|
|
|
|
|
|
|
// 新增赛事,并且点的是发布按钮,则发布该赛事 |
|
|
|
|
|
|
|
status && this.publish(status) |
|
|
|
|
|
|
|
util.successMsg((status ? '发布' : '保存') + '成功') |
|
|
|
|
|
|
|
this.$emit('next', next, cb) |
|
|
|
|
|
|
|
}).catch(err => { |
|
|
|
|
|
|
|
this.$parent.hideLoad() |
|
|
|
|
|
|
|
}) |
|
|
|
|
|
|
|
}, |
|
|
|
} |
|
|
|
} |
|
|
|
}; |
|
|
|
}; |
|
|
|
</script> |
|
|
|
</script> |
|
|
|
|
|
|
|
|
|
|
|
<style scoped lang="scss"> |
|
|
|
<style scoped lang="scss"> |
|
|
|
|
|
|
|
.step { |
|
|
|
|
|
|
|
padding-bottom: 10px; |
|
|
|
|
|
|
|
background-color: #f9f9f9; |
|
|
|
|
|
|
|
.title { |
|
|
|
|
|
|
|
display: flex; |
|
|
|
|
|
|
|
justify-content: space-between; |
|
|
|
|
|
|
|
align-items: center; |
|
|
|
|
|
|
|
padding: 10px 15px; |
|
|
|
|
|
|
|
margin-bottom: 10px; |
|
|
|
|
|
|
|
background-color: #ededed; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
.line { |
|
|
|
|
|
|
|
margin-bottom: 10px; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
/deep/.req { |
|
|
|
|
|
|
|
.el-form-item__label { |
|
|
|
|
|
|
|
&:before { |
|
|
|
|
|
|
|
content: '*'; |
|
|
|
|
|
|
|
margin-right: 5px; |
|
|
|
|
|
|
|
font-size: 18px; |
|
|
|
|
|
|
|
vertical-align: middle; |
|
|
|
|
|
|
|
color: #f00; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
</style> |
|
|
|
</style> |