Commit 534c062a authored by xiaoye's avatar xiaoye

更改交互

parent 67cab6fb
Pipeline #38808 canceled with stages
in 1 minute and 40 seconds
......@@ -128,9 +128,6 @@
rule : {
select : '',
settings : {
winScore : 3,
drawScore : 1,
byeScore : 3,
hasThirdPlaceMatch : true
} as ruleSettings,
range : [
......@@ -181,6 +178,14 @@
if (n > 0 && !Number.isInteger(n) || n <= 0)
throw new Error('出轮的人数必须是2的幂');
}
if (create.visibility.select = 'Swiss') {
if (!create.rule.settings.winScore && create.rule.settings.winScore == undefined)
throw new Error('请填写胜利分');
if (!create.rule.settings.drawScore && create.rule.settings.drawScore == undefined)
throw new Error('请填写平局分');
if (!create.rule.settings.byeScore && create.rule.settings.byeScore == undefined)
throw new Error('请填写轮空分');
}
const collaborators = create.collaborators.map(user => user.id);
const id = await Tabulator.Tournament.Create(Mycard.token, {
name: create.name,
......
<template>
<uni-card class = 'Setting' v-if = 'tournament'>
<uni-easyinput type = 'text' placeholder = '比赛名称' v-model = 'tournament.name' :disabled = 'tournament.operatorChk()'/>
<uni-easyinput type = 'text' placeholder = '比赛描述' v-model = 'tournament.description' :disabled = 'tournament.operatorChk()'/>
<uni-easyinput type = 'text' placeholder = '比赛名称' v-model = 'tournament.name' :disabled = '!operatorChk()'/>
<uni-easyinput type = 'text' placeholder = '比赛描述' v-model = 'tournament.description' :disabled = '!operatorChk()'/>
<uni-data-select
placeholder = '可见性'
v-model = 'tournament.visibility.select'
:localdata = 'tournament.visibility.range'
:disabled = 'tournament.operatorChk()'
:disabled = '!operatorChk()'
></uni-data-select>
<uni-data-select
placeholder = '规则'
v-model = 'tournament.rule.select'
:localdata = 'tournament.rule.range'
:disabled = "tournament.this?.status != 'Ready' || tournament.operatorChk()"
:disabled = "tournament.this?.status != 'Ready' || !operatorChk()"
></uni-data-select>
<view v-show = "tournament.rule.select == 'Swiss'">
<uni-easyinput type = 'number' placeholder = '轮数' v-model = 'tournament.rule.settings.rounds' :disabled = "tournament.this?.status != 'Ready' || tournament.operatorChk()"/>
<uni-easyinput type = 'number' placeholder = '胜利分' v-model = 'tournament.rule.settings.winScore' :disabled = "tournament.this?.status != 'Ready' || tournament.operatorChk()"/>
<uni-easyinput type = 'number' placeholder = '平局分' v-model = 'tournament.rule.settings.drawScore' :disabled = "tournament.this?.status != 'Ready' || tournament.operatorChk()"/>
<uni-easyinput type = 'number' placeholder = '轮空分' v-model = 'tournament.rule.settings.byeScore' :disabled = "tournament.this?.status != 'Ready' || tournament.operatorChk()"/>
<uni-easyinput type = 'number' placeholder = '轮数' v-model = 'tournament.rule.settings.rounds' :disabled = "tournament.this?.status != 'Ready' || !operatorChk()"/>
<uni-easyinput type = 'number' placeholder = '胜利分' v-model = 'tournament.rule.settings.winScore' :disabled = "tournament.this?.status != 'Ready' || !operatorChk()"/>
<uni-easyinput type = 'number' placeholder = '平局分' v-model = 'tournament.rule.settings.drawScore' :disabled = "tournament.this?.status != 'Ready' || !operatorChk()"/>
<uni-easyinput type = 'number' placeholder = '轮空分' v-model = 'tournament.rule.settings.byeScore' :disabled = "tournament.this?.status != 'Ready' || !operatorChk()"/>
</view>
<view v-show = "tournament.rule.select == 'SingleElimination'">
<checkbox-group @change = 'tournament.hasThirdPlaceMatch.select'>
<label>
<checkbox :checked = 'tournament.rule.settings.hasThirdPlaceMatch' :disabled = "tournament.this?.status != 'Ready' || tournament.operatorChk()"/>季军赛
<checkbox :checked = 'tournament.rule.settings.hasThirdPlaceMatch' :disabled = "tournament.this?.status != 'Ready' || !operatorChk()"/>季军赛
</label>
</checkbox-group>
</view>
<br>
<view v-show = 'operatorChk()'>
<view class = 'button click' @click = 'emit.on()'>
<span>{{ `切换状态:${status.text.get(tournament.this.status)}` }}</span>
<uni-icons type = 'circle-filled' :color = 'status.color.get(tournament.this.status)'></uni-icons>
</view>
<view class = 'button click' @click = 'emit.reset()'>
<span>重置比赛</span>
<uni-icons type = 'loop'></uni-icons>
</view>
<view class = 'button click' @click = 'emit.shuffle()'>
<span>打乱选手</span>
<uni-icons type = 'auth'></uni-icons>
</view>
<view class = 'button click' @click = 'emit.upload()'>
<span>上传选手</span>
<uni-icons type = 'cloud-upload'></uni-icons>
</view>
<view class = 'button click' @click = 'emit.empty()'>
<span>清空选手</span>
<uni-icons type = 'spinner-cycle' color = 'red'></uni-icons>
</view>
<view class = 'button click' @click = 'emit.del()'>
<span>删除比赛</span>
<uni-icons type = 'trash' color = 'red'></uni-icons>
</view>
</view>
<br>
<uni-card
id = 'collaborators'
title = '协作者'
......@@ -49,7 +76,7 @@
</view>
</view>
</uni-list-chat>
<uni-list-item>
<uni-list-item v-show = 'operatorChk()'>
<template v-slot:header>
<uni-forms>
<uni-forms-item id = 'header'>
......@@ -72,7 +99,7 @@
</uni-list>
</uni-card>
<br>
<uni-easyinput v-show = '!tournament.operatorChk()' type = 'text' placeholder = '卡图图床(例:https://example.com/api/)' v-model = 'tournament.pics'/>
<uni-easyinput v-show = 'operatorChk()' type = 'text' placeholder = '卡图图床(例:https://example.com/api/)' v-model = 'tournament.pics'/>
<br>
<view class = 'button' @click = 'tournament.update()'>
<view>
......@@ -86,17 +113,65 @@
import { ref, reactive, onMounted, onUnmounted, onBeforeMount, watch} from 'vue';
import emitter from '../../script/emitter.ts';
import Const from '../../script/const.ts'
import Mycard from '../../script/mycard.ts';
let tournament;
const operatorChk = () : boolean => {
return Mycard.id >= 0 && (Mycard.id == tournament.this?.creator || (tournament.this?.collaborators.includes(Mycard.id) ?? false));
}
const init = (t) : void => {
tournament = t;
};
const status = {
text : new Map([
['Ready', '开始'],
['Running', '结束'],
['Finished', '已结束']
]) as Map<string, string>,
color : new Map([
['Ready', 'rgb(84, 200, 17)'],
['Running', 'red'],
['Finished', 'darkgray']
]) as Map<string, string>,
}
const emit = {
on : () : void => {
emitter.emit(Const.tournamentOn);
},
reset : () : void => {
emitter.emit(Const.tournamentReset);
},
shuffle : () : void => {
emitter.emit(Const.tournamentShuffle);
},
upload : () : void => {
emitter.emit(Const.tournamentUpload);
},
empty : () : void => {
emitter.emit(Const.tournamentEmpty);
},
del : () : void => {
emitter.emit(Const.tournamentDel);
}
};
onBeforeMount(() : void => {
emitter.on(Const.settingInit, init)
});
onUnmounted(() : void => {
emitter.off(Const.settingInit, init)
});
</script>
\ No newline at end of file
</script>
<style lang = 'scss' scoped>
.button {
display: flex !important;
width: 100%;
justify-content: center !important;
font-size: 16px;
gap: 5%
}
</style>
\ No newline at end of file
This diff is collapsed.
......@@ -12,6 +12,12 @@ class ConstData {
showTournament = 'showTournament';
updateRounds = 'updateRounds';
newTournament = 'newTournament';
tournamentOn = 'tournamentOn';
tournamentReset = 'tournamentReset';
tournamentShuffle = 'tournamentShuffle';
tournamentUpload = 'tournamentUpload';
tournamentEmpty = 'tournamentEmpty';
tournamentDel = 'tournamentDel';
ot = {
CustomJpg : 0,
CustomPng : 1,
......
......@@ -25,6 +25,10 @@
}
}
#status {
font-size: 16px;
}
#body {
width: 80%;
min-width: 208px;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment