dev_review
yujialong 1 year ago
parent 354171d454
commit 266ec21e9b
  1. 7
      src/components/quill/index.vue
  2. 2
      src/setting.js
  3. 189
      src/views/match/add/step2.vue
  4. 3
      src/views/serve/projectAdd.vue

@ -1,6 +1,6 @@
<template> <template>
<div> <div>
<el-radio-group v-if="!readonly" <el-radio-group v-if="!readonly && radio"
class="type-radio" class="type-radio"
v-model="editorType" v-model="editorType"
@change="typeChange"> @change="typeChange">
@ -80,6 +80,11 @@ export default {
elseRead: { elseRead: {
type: String, default: 'false' type: String, default: 'false'
}, },
//
radio: {
type: Boolean,
default: false
},
// //
type: { type: {
type: String, type: String,

@ -12,7 +12,7 @@ if (isDev) {
host = 'http://121.37.12.51/' host = 'http://121.37.12.51/'
// host = 'https://huorantech.cn/' // host = 'https://huorantech.cn/'
// host = 'http://192.168.31.217:9000/'// 榕 // host = 'http://192.168.31.217:9000/'// 榕
host = 'http://192.168.31.51:9000/'// 赓 // host = 'http://192.168.31.51:9000/'// 赓
} else if (isPro) { } else if (isPro) {
jumpPath = 'https://www.huorantech.cn/judgmentPoint/' jumpPath = 'https://www.huorantech.cn/judgmentPoint/'
} }

@ -3,103 +3,163 @@
<div class="page"> <div class="page">
<div class="page-content"> <div class="page-content">
<div class="p-title">赛程与规则设置</div> <div class="p-title">赛程与规则设置</div>
<el-form :model="form" :rules="validRules" label-width="170px" label-suffix=":" size="small" :disabled="!editing && id"> <el-form :model="form"
:rules="validRules"
label-width="170px"
label-suffix=":"
size="small"
:disabled="!editing && id">
<el-form-item label="竞赛类型"> <el-form-item label="竞赛类型">
{{ step1.completeCompetitionSetup.competitionType ? '团队赛(' + step1.completeCompetitionSetup.minTeamSize + '-' + step1.completeCompetitionSetup.maxTeamSize + '人/队)' : '个人赛' }} <span class="tips">如需修改请返回上一步</span> {{ step1.completeCompetitionSetup.competitionType ? '团队赛(' + step1.completeCompetitionSetup.minTeamSize + '-' + step1.completeCompetitionSetup.maxTeamSize + '人/队)' : '个人赛' }} <span class="tips">如需修改请返回上一步</span>
</el-form-item> </el-form-item>
<el-form-item prop="rule" label="赛制"> <el-form-item prop="rule"
<el-radio v-for="(rule, i) in rules" :key="i" v-model="form.rule" :label="rule.id">{{ rule.name }}</el-radio> label="赛制">
<el-radio v-for="(rule, i) in rules"
:key="i"
v-model="form.rule"
:label="rule.id">{{ rule.name }}</el-radio>
<p class="tips">积分赛包含多个竞赛阶段每个阶段的成绩都包含在最终总成绩里最后一轮结束后总成绩排名靠前的参赛者得到获奖资格</p> <p class="tips">积分赛包含多个竞赛阶段每个阶段的成绩都包含在最终总成绩里最后一轮结束后总成绩排名靠前的参赛者得到获奖资格</p>
<p class="tips">淘汰赛包含多个竞赛阶段每个阶段结束后之后只有部分参赛者能晋级下一阶段晋级最后一轮且在最后一轮排名靠前的参赛者得到获奖资格</p> <p class="tips">淘汰赛包含多个竞赛阶段每个阶段结束后之后只有部分参赛者能晋级下一阶段晋级最后一轮且在最后一轮排名靠前的参赛者得到获奖资格</p>
<p class="tips">单项赛仅包含一个竞赛阶段单项的成绩排名即为最终排名排名靠前的参赛者得到获奖资格</p> <p class="tips">单项赛仅包含一个竞赛阶段单项的成绩排名即为最终排名排名靠前的参赛者得到获奖资格</p>
<p class="tips">系统默认排名规则优先按分数排名分数高则排名靠前分数相同则按用时排名用时短则排名靠前</p> <p class="tips">系统默认排名规则优先按分数排名分数高则排名靠前分数相同则按用时排名用时短则排名靠前</p>
</el-form-item> </el-form-item>
<template v-if="form.rule !== 2"> <template v-if="form.rule !== 2">
<el-form-item prop="stageNum" label="阶段数量"> <el-form-item prop="stageNum"
label="阶段数量">
<div class="input-center"> <div class="input-center">
<el-select v-model="form.stageNum" @change="stageChange"> <el-select v-model="form.stageNum"
<el-option v-for="i in 10" :key="i" :label="i" :value="i"></el-option> @change="stageChange">
<el-option v-for="i in 10"
:key="i"
:label="i"
:value="i"></el-option>
</el-select> </el-select>
</div> </div>
<div v-if="step1.completeCompetitionSetup.competitionType" class="tips"> <div v-if="step1.completeCompetitionSetup.competitionType"
class="tips">
(团队赛是否限制队内每个成员只能参加一个阶段赛项 (团队赛是否限制队内每个成员只能参加一个阶段赛项
<el-radio v-model="form.teamLimit" :label="1"></el-radio> <el-radio v-model="form.teamLimit"
<el-radio v-model="form.teamLimit" :label="0"></el-radio> :label="1"></el-radio>
<el-radio v-model="form.teamLimit"
:label="0"></el-radio>
) )
</div> </div>
</el-form-item> </el-form-item>
<el-form-item v-if="!form.rule" prop="resultCalculationMethod" label="总成绩计算方式"> <el-form-item v-if="!form.rule"
<el-radio v-model="form.resultCalculationMethod" :label="0">各阶段成绩加权求和</el-radio> prop="resultCalculationMethod"
<el-radio v-model="form.resultCalculationMethod" :label="1">各阶段成绩直接求和</el-radio> label="总成绩计算方式">
<el-radio v-model="form.resultCalculationMethod" :label="2">各阶段成绩取平均值</el-radio> <el-radio v-model="form.resultCalculationMethod"
:label="0">各阶段成绩加权求和</el-radio>
<el-radio v-model="form.resultCalculationMethod"
:label="1">各阶段成绩直接求和</el-radio>
<el-radio v-model="form.resultCalculationMethod"
:label="2">各阶段成绩取平均值</el-radio>
<p class="tips">若选择加权求和则需要设置每个阶段成绩所占权重且权重总和须为100%</p> <p class="tips">若选择加权求和则需要设置每个阶段成绩所占权重且权重总和须为100%</p>
</el-form-item> </el-form-item>
<el-form-item prop="stageNum" label="阶段设置"> <el-form-item prop="stageNum"
<div v-for="(item, i) in form.competitionStageList" :key="i" class="step-set"> label="阶段设置">
<div v-for="(item, i) in form.competitionStageList"
:key="i"
class="step-set">
<div class="line"> <div class="line">
{{ serials[i] }}阶段 <el-input v-model="item.stageName" clearable placeholder="请输入阶段名称,如“初赛”" style="width: 200px"></el-input> {{ serials[i] }}阶段 <el-input v-model="item.stageName"
clearable
placeholder="请输入阶段名称,如“初赛”"
style="width: 200px"></el-input>
</div> </div>
<div class="line"> <div class="line">
<span class="req">*</span> <span class="req">*</span>
比赛方式 比赛方式
<el-radio v-for="(method, i) in methods" :key="i" v-model="item.method" :label="method.id">{{ method.name }}</el-radio> <el-radio v-for="(method, i) in methods"
:key="i"
v-model="item.method"
:label="method.id">{{ method.name }}</el-radio>
</div> </div>
<div v-if="step1.completeCompetitionSetup.competitionType" class="line"> <div v-if="step1.completeCompetitionSetup.competitionType"
class="line">
<span class="req">*</span> <span class="req">*</span>
团队参赛人数限制 团队参赛人数限制
<el-radio v-model="item.teamNumLimitOpt" :label="0">不限制</el-radio> <el-radio v-model="item.teamNumLimitOpt"
<el-radio v-model="item.teamNumLimitOpt" :label="1">自定义</el-radio> :label="0">不限制</el-radio>
<el-input v-model.number="item.teamNumLimit" type="number" style="width: 150px;" :disabled="item.teamNumLimitOpt === 0"></el-input> <el-radio v-model="item.teamNumLimitOpt"
:label="1">自定义</el-radio>
<el-input v-model.number="item.teamNumLimit"
type="number"
style="width: 150px;"
:disabled="item.teamNumLimitOpt === 0"></el-input>
<span class="tips">可限制本阶段单个团队的出战人数</span> <span class="tips">可限制本阶段单个团队的出战人数</span>
</div> </div>
<div v-if="step1.completeCompetitionSetup.competitionType" class="line"> <div v-if="step1.completeCompetitionSetup.competitionType"
class="line">
<span class="req">*</span> <span class="req">*</span>
团队成绩计算方式 团队成绩计算方式
<el-radio v-for="(j, i) in teamCalculationMethods" :key="i" v-model="item.teamCalculationMethod" :label="j.id">{{ j.name }}</el-radio> <el-radio v-for="(j, i) in teamCalculationMethods"
:key="i"
v-model="item.teamCalculationMethod"
:label="j.id">{{ j.name }}</el-radio>
<span class="tips">可设置本阶段的团队取分规则</span> <span class="tips">可设置本阶段的团队取分规则</span>
</div> </div>
<div v-if="form.rule === 1 && i !== form.competitionStageList.length - 1" class="line" style="display: flex;"> <div v-if="form.rule === 1 && i !== form.competitionStageList.length - 1"
class="line"
style="display: flex;">
<p> <p>
<span class="req">*</span>晋级规则 <span class="req">*</span>晋级规则
</p> </p>
<div> <div>
<div class="line"> <div class="line">
本阶段成绩排名前 本阶段成绩排名前
<el-input v-model.number="item.peopleLimit" type="number" style="width: 100px"></el-input> <el-input v-model.number="item.peopleLimit"
type="number"
style="width: 100px"></el-input>
可晋级下一阶段比赛 可晋级下一阶段比赛
</div> </div>
<div class="line"> <div class="line">
本阶段成绩排名前 本阶段成绩排名前
<el-input v-model.number="item.percentageLimit" type="number" style="width: 100px"></el-input> <el-input v-model.number="item.percentageLimit"
type="number"
style="width: 100px"></el-input>
%可晋级下一阶段比赛 %可晋级下一阶段比赛
</div> </div>
<div> <div>
本阶段成绩 本阶段成绩
<el-select v-model="item.operator" style="width: 80px;margin-right: 10px"> <el-select v-model="item.operator"
<el-option v-for="i in operators" :key="i" :label="i" :value="i"></el-option> style="width: 80px;margin-right: 10px">
<el-option v-for="i in operators"
:key="i"
:label="i"
:value="i"></el-option>
</el-select> </el-select>
<el-input v-model="item.score" type="number" style="width: 100px"></el-input> <el-input v-model="item.score"
type="number"
style="width: 100px"></el-input>
可晋级下一阶段比赛 可晋级下一阶段比赛
</div> </div>
</div> </div>
</div> </div>
<div v-if="!form.rule" class="line"> <div v-if="!form.rule"
class="line">
<span class="req">*</span> <span class="req">*</span>
占总成绩权重 占总成绩权重
<el-input v-model.number="item.pointWeight" type="number" :disabled="form.resultCalculationMethod != 0" style="width: 150px;"></el-input> % <el-input v-model.number="item.pointWeight"
type="number"
:disabled="form.resultCalculationMethod != 0"
style="width: 150px;"></el-input> %
</div> </div>
<div class="line"> <div class="line">
<span class="req">*</span>
成绩公布时间 成绩公布时间
阶段比赛结束后 阶段比赛结束后
<el-input v-model.number="item.resultAnnouncementTime" type="number" style="width: 120px"></el-input> <el-input v-model.number="item.resultAnnouncementTime"
type="number"
style="width: 120px"></el-input>
小时公布阶段比赛成绩 小时公布阶段比赛成绩
</div> </div>
<div class="line"> <div v-if="item.resultAnnouncementTime != 0"
<span class="req">*</span> class="line">
是否公布成绩详情 是否公布成绩详情
<el-radio v-model="item.resultsDetails" :label="0"></el-radio> <el-radio v-model="item.resultsDetails"
<el-radio v-model="item.resultsDetails" :label="1"></el-radio> :label="0"></el-radio>
<el-radio v-model="item.resultsDetails"
:label="1"></el-radio>
<p class="tips">若选择则公布成绩详情竞赛结束后参赛者可查看自己的比赛成绩得分详情</p> <p class="tips">若选择则公布成绩详情竞赛结束后参赛者可查看自己的比赛成绩得分详情</p>
<p class="tips">若选择则不公布成绩详情参赛者只能知晓自己的分数及排名不能查看得分详情</p> <p class="tips">若选择则不公布成绩详情参赛者只能知晓自己的分数及排名不能查看得分详情</p>
</div> </div>
@ -107,29 +167,43 @@
</el-form-item> </el-form-item>
</template> </template>
<template v-else> <template v-else>
<el-form-item prop="stageNum" label="规则设置"> <el-form-item prop="stageNum"
label="规则设置">
<div class="step-set"> <div class="step-set">
<div class="line"> <div class="line">
<span class="req">*</span> <span class="req">*</span>
比赛方式 比赛方式
<el-radio v-for="(method, i) in methods" :key="i" v-model="form.competitionStageList[0].method" :label="method.id">{{ method.name }}</el-radio> <el-radio v-for="(method, i) in methods"
:key="i"
v-model="form.competitionStageList[0].method"
:label="method.id">{{ method.name }}</el-radio>
</div> </div>
<div v-if="step1.completeCompetitionSetup.competitionType" class="line"> <div v-if="step1.completeCompetitionSetup.competitionType"
class="line">
<span class="req">*</span> <span class="req">*</span>
团队成绩计算方式 团队成绩计算方式
<el-radio v-for="(j, i) in teamCalculationMethods" :key="i" v-model="form.competitionStageList[0].teamCalculationMethod" :label="j.id">{{ j.name }}</el-radio> <el-radio v-for="(j, i) in teamCalculationMethods"
:key="i"
v-model="form.competitionStageList[0].teamCalculationMethod"
:label="j.id">{{ j.name }}</el-radio>
<span class="tips">可设置本阶段的团队取分规则</span> <span class="tips">可设置本阶段的团队取分规则</span>
</div> </div>
</div> </div>
</el-form-item> </el-form-item>
<el-form-item prop="rule" label="成绩公布时间"> <el-form-item prop="rule"
label="成绩公布时间">
阶段比赛结束后 阶段比赛结束后
<el-input v-model.number="form.competitionStageList[0].resultAnnouncementTime" type="number" style="width: 120px"></el-input> <el-input v-model.number="form.competitionStageList[0].resultAnnouncementTime"
type="number"
style="width: 120px"></el-input>
小时公布阶段比赛成绩 小时公布阶段比赛成绩
</el-form-item> </el-form-item>
<el-form-item prop="resultsDetails" label="是否公布成绩详情"> <el-form-item prop="resultsDetails"
<el-radio v-model="form.competitionStageList[0].resultsDetails" :label="0"></el-radio> label="是否公布成绩详情">
<el-radio v-model="form.competitionStageList[0].resultsDetails" :label="1"></el-radio> <el-radio v-model="form.competitionStageList[0].resultsDetails"
:label="0"></el-radio>
<el-radio v-model="form.competitionStageList[0].resultsDetails"
:label="1"></el-radio>
<p class="tips">若选择则公布成绩详情竞赛结束后参赛者可查看自己的比赛成绩得分详情</p> <p class="tips">若选择则公布成绩详情竞赛结束后参赛者可查看自己的比赛成绩得分详情</p>
<p class="tips">若选择则不公布成绩详情参赛者只能知晓自己的分数及排名不能查看得分详情</p> <p class="tips">若选择则不公布成绩详情参赛者只能知晓自己的分数及排名不能查看得分详情</p>
</el-form-item> </el-form-item>
@ -172,7 +246,7 @@ export default {
teamNumLimit: '', teamNumLimit: '',
teamNumLimitOpt: 0, teamNumLimitOpt: 0,
resultAnnouncementTime: '', resultAnnouncementTime: '',
resultsDetails: 0, resultsDetails: '',
}, },
{ {
method: 0, method: 0,
@ -188,7 +262,7 @@ export default {
teamNumLimit: '', teamNumLimit: '',
teamNumLimitOpt: 0, teamNumLimitOpt: 0,
resultAnnouncementTime: '', resultAnnouncementTime: '',
resultsDetails: 0, resultsDetails: '',
}, },
{ {
method: 0, method: 0,
@ -204,7 +278,7 @@ export default {
teamNumLimit: '', teamNumLimit: '',
teamNumLimitOpt: 0, teamNumLimitOpt: 0,
resultAnnouncementTime: '', resultAnnouncementTime: '',
resultsDetails: 0, resultsDetails: '',
} }
] ]
}, },
@ -312,10 +386,7 @@ export default {
if (form.rule === 2) { // if (form.rule === 2) { //
const e = stages[0] const e = stages[0]
e.stageName = step1.name e.stageName = step1.name
if (!e.resultsDetails) { if (e.resultsDetails === 0 && e.resultAnnouncementTime !== '') {
if (e.resultAnnouncementTime === '') {
return util.errorMsg('请填写成绩公布时间')
}
if (e.resultAnnouncementTime < 0) { if (e.resultAnnouncementTime < 0) {
return util.errorMsg('成绩公布时间不得小于0') return util.errorMsg('成绩公布时间不得小于0')
} }
@ -368,12 +439,7 @@ export default {
break break
} }
} }
if (!e.resultsDetails) { if (e.resultsDetails === 0 && e.resultAnnouncementTime !== '') {
if (e.resultAnnouncementTime === '') {
invalid = 1
util.errorMsg('请填写成绩公布时间')
break
}
if (e.resultAnnouncementTime < 0) { if (e.resultAnnouncementTime < 0) {
invalid = 1 invalid = 1
util.errorMsg('成绩公布时间不得小于0') util.errorMsg('成绩公布时间不得小于0')
@ -423,7 +489,8 @@ export default {
<style scoped lang="scss"> <style scoped lang="scss">
/deep/ .d-inline-block { /deep/ .d-inline-block {
width: 216px; width: 216px;
.el-select, .el-input { .el-select,
.el-input {
width: 100%; width: 100%;
} }
} }
@ -442,7 +509,7 @@ export default {
.remove { .remove {
width: 16px; width: 16px;
height: 16px; height: 16px;
background: url("../../../assets/img/close.png") 0 0/cover no-repeat; background: url('../../../assets/img/close.png') 0 0 / cover no-repeat;
cursor: pointer; cursor: pointer;
} }
} }

@ -71,6 +71,7 @@
:readonly="isDetail" :readonly="isDetail"
v-model="projectManage.experimentTarget" v-model="projectManage.experimentTarget"
:type.sync="projectManage.experimentTargetType" :type.sync="projectManage.experimentTargetType"
radio
:minHeight="150" :minHeight="150"
:height="150" /> :height="150" />
</el-form-item> </el-form-item>
@ -92,6 +93,7 @@
:readonly="isDetail" :readonly="isDetail"
v-model="projectManage.experimentDescription" v-model="projectManage.experimentDescription"
:type.sync="projectManage.experimentDescriptionType" :type.sync="projectManage.experimentDescriptionType"
radio
:minHeight="150" :minHeight="150"
:height="150" /> :height="150" />
</el-form-item> </el-form-item>
@ -244,6 +246,7 @@
:readonly="isDetail" :readonly="isDetail"
v-model="projectManage.experimentHint" v-model="projectManage.experimentHint"
:type.sync="projectManage.experimentHintType" :type.sync="projectManage.experimentHintType"
radio
:minHeight="150" :minHeight="150"
:height="150" /> :height="150" />
</el-form-item> </el-form-item>

Loading…
Cancel
Save