wip
This commit is contained in:
		
							parent
							
								
									0df093383d
								
							
						
					
					
						commit
						3f29a0382b
					
				
					 4 changed files with 165 additions and 61 deletions
				
			
		| 
						 | 
				
			
			@ -5,8 +5,8 @@
 | 
			
		|||
	<div>
 | 
			
		||||
		<p>%i18n:@settings-of-the-game%</p>
 | 
			
		||||
 | 
			
		||||
		<el-card class="map">
 | 
			
		||||
			<div slot="header">
 | 
			
		||||
		<div class="card">
 | 
			
		||||
			<header>
 | 
			
		||||
				<el-select :class="$style.mapSelect" v-model="mapName" placeholder="%i18n:@choose-map%" @change="onMapChange">
 | 
			
		||||
					<el-option label="%i18n:@random%" :value="null"/>
 | 
			
		||||
					<el-option-group v-for="c in mapCategories" :key="c" :label="c">
 | 
			
		||||
| 
						 | 
				
			
			@ -16,63 +16,80 @@
 | 
			
		|||
						</el-option>
 | 
			
		||||
					</el-option-group>
 | 
			
		||||
				</el-select>
 | 
			
		||||
			</div>
 | 
			
		||||
			</header>
 | 
			
		||||
 | 
			
		||||
			<div>
 | 
			
		||||
				<div :class="$style.board" v-if="game.settings.map != null" :style="{ 'grid-template-rows': `repeat(${ game.settings.map.length }, 1fr)`, 'grid-template-columns': `repeat(${ game.settings.map[0].length }, 1fr)` }">
 | 
			
		||||
					<div v-for="(x, i) in game.settings.map.join('')"
 | 
			
		||||
							:data-none="x == ' '"
 | 
			
		||||
					@click="onPixelClick(i, x)"
 | 
			
		||||
				>
 | 
			
		||||
							@click="onPixelClick(i, x)">
 | 
			
		||||
						<template v-if="x == 'b'">%fa:circle%</template>
 | 
			
		||||
						<template v-if="x == 'w'">%fa:circle R%</template>
 | 
			
		||||
					</div>
 | 
			
		||||
				</div>
 | 
			
		||||
		</el-card>
 | 
			
		||||
 | 
			
		||||
		<el-card class="bw">
 | 
			
		||||
			<div slot="header">
 | 
			
		||||
				<span>%i18n:@black-or-white%</span>
 | 
			
		||||
			</div>
 | 
			
		||||
		</div>
 | 
			
		||||
 | 
			
		||||
		<div class="card">
 | 
			
		||||
			<header>
 | 
			
		||||
				<span>%i18n:@black-or-white%</span>
 | 
			
		||||
			</header>
 | 
			
		||||
 | 
			
		||||
			<div>
 | 
			
		||||
				<el-radio v-model="game.settings.bw" label="random" @change="updateSettings">%i18n:@random%</el-radio>
 | 
			
		||||
				<el-radio v-model="game.settings.bw" :label="1" @change="updateSettings">{{ '%i18n:@black-is%'.split('{}')[0] }}{{ game.user1 | userName }}{{ '%i18n:@black-is%'.split('{}')[1] }}</el-radio>
 | 
			
		||||
				<el-radio v-model="game.settings.bw" :label="2" @change="updateSettings">{{ '%i18n:@black-is%'.split('{}')[0] }}{{ game.user2 | userName }}{{ '%i18n:@black-is%'.split('{}')[1] }}</el-radio>
 | 
			
		||||
		</el-card>
 | 
			
		||||
 | 
			
		||||
		<el-card class="rules">
 | 
			
		||||
			<div slot="header">
 | 
			
		||||
				<span>%i18n:@rules%</span>
 | 
			
		||||
			</div>
 | 
			
		||||
		</div>
 | 
			
		||||
 | 
			
		||||
		<div class="card">
 | 
			
		||||
			<header>
 | 
			
		||||
				<span>%i18n:@rules%</span>
 | 
			
		||||
			</header>
 | 
			
		||||
 | 
			
		||||
			<div>
 | 
			
		||||
				<mk-switch v-model="game.settings.isLlotheo" @change="updateSettings" text="%i18n:@is-llotheo%"/>
 | 
			
		||||
				<mk-switch v-model="game.settings.loopedBoard" @change="updateSettings" text="%i18n:@looped-map%"/>
 | 
			
		||||
				<mk-switch v-model="game.settings.canPutEverywhere" @change="updateSettings" text="%i18n:@can-put-everywhere%"/>
 | 
			
		||||
		</el-card>
 | 
			
		||||
 | 
			
		||||
		<el-card class="bot-form" v-if="form">
 | 
			
		||||
			<div slot="header">
 | 
			
		||||
				<span>%i18n:@settings-of-the-bot%</span>
 | 
			
		||||
			</div>
 | 
			
		||||
		</div>
 | 
			
		||||
 | 
			
		||||
		<div class="card" v-if="form">
 | 
			
		||||
			<header>
 | 
			
		||||
				<span>%i18n:@settings-of-the-bot%</span>
 | 
			
		||||
			</header>
 | 
			
		||||
 | 
			
		||||
			<div>
 | 
			
		||||
				<el-alert v-for="message in messages"
 | 
			
		||||
						:title="message.text"
 | 
			
		||||
						:type="message.type"
 | 
			
		||||
				:key="message.id"
 | 
			
		||||
			/>
 | 
			
		||||
						:key="message.id"/>
 | 
			
		||||
 | 
			
		||||
				<template v-for="item in form">
 | 
			
		||||
					<mk-switch v-if="item.type == 'button'" v-model="item.value" :key="item.id" :text="item.label" @change="onChangeForm($event, item)">{{ item.desc || '' }}</mk-switch>
 | 
			
		||||
 | 
			
		||||
				<el-card v-if="item.type == 'radio'" :key="item.id">
 | 
			
		||||
					<div slot="header">
 | 
			
		||||
					<div class="card" v-if="item.type == 'radio'" :key="item.id">
 | 
			
		||||
						<header>
 | 
			
		||||
							<span>{{ item.label }}</span>
 | 
			
		||||
					</div>
 | 
			
		||||
					<el-radio v-for="(r, i) in item.items" :key="item.id + ':' + i" v-model="item.value" :label="r.value" @change="onChangeForm($event, item)">{{ r.label }}</el-radio>
 | 
			
		||||
				</el-card>
 | 
			
		||||
						</header>
 | 
			
		||||
 | 
			
		||||
				<el-card v-if="item.type == 'textbox'" :key="item.id">
 | 
			
		||||
					<div slot="header">
 | 
			
		||||
						<span>{{ item.label }}</span>
 | 
			
		||||
						<div>
 | 
			
		||||
							<el-radio v-for="(r, i) in item.items" :key="item.id + ':' + i" v-model="item.value" :label="r.value" @change="onChangeForm($event, item)">{{ r.label }}</el-radio>
 | 
			
		||||
						</div>
 | 
			
		||||
					</div>
 | 
			
		||||
 | 
			
		||||
					<div class="card" v-if="item.type == 'textbox'" :key="item.id">
 | 
			
		||||
						<header>
 | 
			
		||||
							<span>{{ item.label }}</span>
 | 
			
		||||
						</header>
 | 
			
		||||
 | 
			
		||||
						<div>
 | 
			
		||||
							<el-input v-model="item.value" @change="onChangeForm($event, item)"/>
 | 
			
		||||
				</el-card>
 | 
			
		||||
						</div>
 | 
			
		||||
					</div>
 | 
			
		||||
				</template>
 | 
			
		||||
		</el-card>
 | 
			
		||||
			</div>
 | 
			
		||||
		</div>
 | 
			
		||||
	</div>
 | 
			
		||||
 | 
			
		||||
	<footer>
 | 
			
		||||
| 
						 | 
				
			
			@ -244,13 +261,24 @@ export default Vue.extend({
 | 
			
		|||
	> div
 | 
			
		||||
		padding 0 16px
 | 
			
		||||
 | 
			
		||||
		> .map
 | 
			
		||||
		> .bw
 | 
			
		||||
		> .rules
 | 
			
		||||
		> .bot-form
 | 
			
		||||
			max-width 400px
 | 
			
		||||
		> .card
 | 
			
		||||
			margin 0 auto 16px auto
 | 
			
		||||
 | 
			
		||||
		.card
 | 
			
		||||
			max-width 400px
 | 
			
		||||
			border-radius 4px
 | 
			
		||||
			border 1px solid #ebeef5
 | 
			
		||||
			background #fff
 | 
			
		||||
			color #303133
 | 
			
		||||
			box-shadow 0 2px 12px 0 rgba(#000, 0.1)
 | 
			
		||||
 | 
			
		||||
			> header
 | 
			
		||||
				padding 18px 20px
 | 
			
		||||
				border-bottom 1px solid #ebeef5
 | 
			
		||||
 | 
			
		||||
			> div
 | 
			
		||||
				padding 20px
 | 
			
		||||
 | 
			
		||||
	> footer
 | 
			
		||||
		position sticky
 | 
			
		||||
		bottom 0
 | 
			
		||||
| 
						 | 
				
			
			@ -290,8 +318,3 @@ export default Vue.extend({
 | 
			
		|||
			border-color transparent
 | 
			
		||||
 | 
			
		||||
</style>
 | 
			
		||||
 | 
			
		||||
<style lang="stylus">
 | 
			
		||||
.el-alert__content
 | 
			
		||||
	position initial !important
 | 
			
		||||
</style>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -14,7 +14,7 @@
 | 
			
		|||
		<p>%i18n:@sub-title%</p>
 | 
			
		||||
		<div class="play">
 | 
			
		||||
			<!--<el-button round>フリーマッチ(準備中)</el-button>-->
 | 
			
		||||
			<el-button type="primary" round @click="match">%i18n:@invite%</el-button>
 | 
			
		||||
			<form-button primary round @click="match">%i18n:@invite%</form-button>
 | 
			
		||||
			<details>
 | 
			
		||||
				<summary>%i18n:@rule%</summary>
 | 
			
		||||
				<div>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -37,6 +37,7 @@ import uiTextarea from './ui/textarea.vue';
 | 
			
		|||
import uiSwitch from './ui/switch.vue';
 | 
			
		||||
import uiRadio from './ui/radio.vue';
 | 
			
		||||
import uiSelect from './ui/select.vue';
 | 
			
		||||
import formButton from './ui/form/button.vue';
 | 
			
		||||
 | 
			
		||||
Vue.component('mk-analog-clock', analogClock);
 | 
			
		||||
Vue.component('mk-menu', menu);
 | 
			
		||||
| 
						 | 
				
			
			@ -75,3 +76,4 @@ Vue.component('ui-textarea', uiTextarea);
 | 
			
		|||
Vue.component('ui-switch', uiSwitch);
 | 
			
		||||
Vue.component('ui-radio', uiRadio);
 | 
			
		||||
Vue.component('ui-select', uiSelect);
 | 
			
		||||
Vue.component('form-button', formButton);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										79
									
								
								src/client/app/common/views/components/ui/form/button.vue
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										79
									
								
								src/client/app/common/views/components/ui/form/button.vue
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,79 @@
 | 
			
		|||
<template>
 | 
			
		||||
<div class="nvemkhtwcnnpkdrwfcbzuwhfulejhmzg" :class="{ round, primary }">
 | 
			
		||||
	<button :type="type" @click="$emit('click')">
 | 
			
		||||
		<slot></slot>
 | 
			
		||||
	</button>
 | 
			
		||||
</div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
<script lang="ts">
 | 
			
		||||
import Vue from 'vue';
 | 
			
		||||
export default Vue.extend({
 | 
			
		||||
	props: {
 | 
			
		||||
		round: {
 | 
			
		||||
			type: Boolean,
 | 
			
		||||
			required: false,
 | 
			
		||||
			default: false
 | 
			
		||||
		},
 | 
			
		||||
		primary: {
 | 
			
		||||
			type: Boolean,
 | 
			
		||||
			required: false,
 | 
			
		||||
			default: false
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
});
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<style lang="stylus" scoped>
 | 
			
		||||
@import '~const.styl'
 | 
			
		||||
 | 
			
		||||
root(isDark)
 | 
			
		||||
	> button
 | 
			
		||||
		display inline-block
 | 
			
		||||
		margin 0
 | 
			
		||||
		padding 12px 20px
 | 
			
		||||
		font-size 14px
 | 
			
		||||
		border 1px solid #dcdfe6
 | 
			
		||||
		border-radius 4px
 | 
			
		||||
		outline none
 | 
			
		||||
		box-shadow none
 | 
			
		||||
		color #606266
 | 
			
		||||
		transition 0.1s
 | 
			
		||||
 | 
			
		||||
		&:hover
 | 
			
		||||
		&:focus
 | 
			
		||||
			color $theme-color
 | 
			
		||||
			background rgba($theme-color, 0.12)
 | 
			
		||||
			border-color rgba($theme-color, 0.3)
 | 
			
		||||
 | 
			
		||||
		&:active
 | 
			
		||||
			color darken($theme-color, 20%)
 | 
			
		||||
			background rgba($theme-color, 0.12)
 | 
			
		||||
			border-color $theme-color
 | 
			
		||||
			transition all 0s
 | 
			
		||||
 | 
			
		||||
	&.primary
 | 
			
		||||
		> button
 | 
			
		||||
			border none
 | 
			
		||||
			background $theme-color
 | 
			
		||||
			color $theme-color-foreground
 | 
			
		||||
 | 
			
		||||
			&:hover
 | 
			
		||||
			&:focus
 | 
			
		||||
				background lighten($theme-color, 20%)
 | 
			
		||||
 | 
			
		||||
			&:active
 | 
			
		||||
				background darken($theme-color, 20%)
 | 
			
		||||
				transition all 0s
 | 
			
		||||
 | 
			
		||||
	&.round
 | 
			
		||||
		> button
 | 
			
		||||
			border-radius 64px
 | 
			
		||||
 | 
			
		||||
.nvemkhtwcnnpkdrwfcbzuwhfulejhmzg[data-darkmode]
 | 
			
		||||
	root(true)
 | 
			
		||||
 | 
			
		||||
.nvemkhtwcnnpkdrwfcbzuwhfulejhmzg:not([data-darkmode])
 | 
			
		||||
	root(false)
 | 
			
		||||
 | 
			
		||||
</style>
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue