mand-mobile/components/number-keyboard/board.vue

271 lines
7.0 KiB
Vue
Raw Normal View History

2018-03-26 16:04:04 +08:00
<template>
<div
class="md-number-keyboard-container"
:class="[type, disabled ? 'disabled' : '']"
>
2018-03-26 16:04:04 +08:00
<div class="keyboard-number">
<ul class="keyboard-number-list">
<md-number-key
class="keyboard-number-item"
2018-03-26 16:04:04 +08:00
v-for="n in 9"
:key="n-1"
:value="keyNumberList[n-1]"
@press="$_onNumberKeyClick"
></md-number-key>
2018-03-26 16:04:04 +08:00
<template v-if="type === 'professional'">
<md-number-key
class="keyboard-number-item"
v-if="!hideDot"
2023-10-11 15:59:31 +08:00
:value="duplicateZero ? zeroValue : dotText"
@press="$_onNumberKeyClick"
></md-number-key>
<md-number-key
class="keyboard-number-item"
:class="{'large-item': hideDot}"
2023-10-11 15:59:31 +08:00
:value="duplicateZero ? duplicateZeroValue : keyNumberList[9]"
@press="$_onNumberKeyClick"
></md-number-key>
<md-number-key
class="keyboard-number-item"
v-if="duplicateZero"
:value="dotText"
@press="$_onNumberKeyClick"
></md-number-key>
<template v-if="!duplicateZero">
<li class="keyboard-number-item" v-if="isView"></li>
<md-number-key
v-else
class="keyboard-number-item slidedown"
no-touch
no-prevent
@press="$_onSlideDoneClick"
></md-number-key>
</template>
2018-03-26 16:04:04 +08:00
</template>
<template v-else>
<li class="keyboard-number-item no-bg"></li>
<md-number-key
class="keyboard-number-item"
:value="keyNumberList[9]"
@press="$_onNumberKeyClick"
></md-number-key>
<md-number-key
class="keyboard-number-item no-bg delete"
@press="$_onDeleteClick"
></md-number-key>
2018-03-26 16:04:04 +08:00
</template>
</ul>
</div>
<div class="keyboard-operate" v-if="type === 'professional'">
<ul class="keyboard-operate-list">
<md-number-key
class="keyboard-operate-item delete"
@press="$_onDeleteClick"
></md-number-key>
<md-number-key
class="keyboard-operate-item confirm"
:value="okText"
no-touch
no-prevent
@press="$_onConfirmeClick"
></md-number-key>
2018-03-26 16:04:04 +08:00
</ul>
</div>
</div>
</template>
<script> import {noop} from '../_util'
import {t} from '../_locale'
import Key from './key'
export default {
2018-03-26 16:04:04 +08:00
name: 'md-number-keyboard-container',
components: {
[Key.name]: Key,
},
2018-03-26 16:04:04 +08:00
props: {
type: {
// simple, professional
type: String,
default: 'professional',
},
disorder: {
type: Boolean,
default: false,
},
hideDot: {
type: Boolean,
default: false,
},
2018-03-26 16:04:04 +08:00
okText: {
type: String,
default: t('md.number_keyboard.confirm'),
2018-03-26 16:04:04 +08:00
},
isView: {
type: Boolean,
},
textRender: {
type: Function,
default: noop,
},
disabled: {
type: Boolean,
},
duplicateZero: {
type: Boolean,
default: false,
},
2018-03-26 16:04:04 +08:00
},
data() {
return {
keyNumberList: [],
}
},
computed: {
dotText() {
return this.textRender('.') || '.'
},
2023-10-11 15:59:31 +08:00
duplicateZeroValue() {
return this.textRender('00') || '00'
},
zeroValue() {
return this.textRender('0') || '0'
},
},
2018-03-26 16:04:04 +08:00
created() {
this.$_generateKeyNumber()
},
methods: {
// MARK: private methods
$_generateKeyNumber() {
const baseStack = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
const baseStackTmp = [...baseStack]
2018-03-26 16:04:04 +08:00
/* istanbul ignore next */
this.keyNumberList = baseStack.map(item => {
const val = this.disorder ? baseStackTmp.splice(parseInt(Math.random() * baseStackTmp.length), 1)[0] || 0 : item
return this.textRender(val) || val
})
2018-03-26 16:04:04 +08:00
},
// MARK: events handler, 如 $_onButtonClick
$_onNumberKeyClick(val) {
if (this.disabled) {
return
}
2018-03-26 16:04:04 +08:00
this.$emit('enter', val)
},
$_onDeleteClick() {
if (this.disabled) {
return
}
2018-03-26 16:04:04 +08:00
this.$emit('delete')
},
$_onConfirmeClick() {
if (this.disabled) {
return
}
2018-03-26 16:04:04 +08:00
this.$emit('confirm')
},
$_onSlideDoneClick() {
this.$emit('hide')
},
},
}
</script>
<style lang="stylus">
.md-number-keyboard-container
2018-09-26 20:10:47 +08:00
position relative
2018-03-26 16:04:04 +08:00
-webkit-user-select none
-webkit-tap-highlight-color transparent
display flex
width number-keyboard-width
height number-keyboard-height
2018-12-03 19:10:34 +08:00
hairline(top, number-keyboard-key-border-color)
2018-03-26 16:04:04 +08:00
.keyboard-number, .keyboard-operate
display flex
.keyboard-number
flex 3
2018-06-09 20:44:42 +08:00
background number-keyboard-bg
2018-03-26 16:04:04 +08:00
.keyboard-number-list
float left
width 100%
.keyboard-number-item
2018-09-26 20:10:47 +08:00
position relative
2018-03-26 16:04:04 +08:00
float left
width 33.3%
height number-keyboard-key-height
2018-12-03 19:10:34 +08:00
padding-top 5px
hairline(right, number-keyboard-key-border-color)
hairline(top, number-keyboard-key-border-color)
2018-03-26 16:04:04 +08:00
text-align center
line-height number-keyboard-key-height
font-size number-keyboard-key-font-size
font-weight number-keyboard-key-font-weight
2018-12-03 19:10:34 +08:00
font-family font-family-number
2018-03-26 16:04:04 +08:00
color number-keyboard-key-color
transition background .3s
2018-06-09 20:44:42 +08:00
background number-keyboard-key-bg
2018-12-03 19:10:34 +08:00
box-sizing border-box
2018-03-26 16:04:04 +08:00
&.no-bg
background transparent
&:nth-of-type(-n+3)
remove-hairline(top)
&:nth-of-type(3n)
width 33.4%
2018-03-26 16:04:04 +08:00
&.delete
background url(../_style/images/keyboard-del.png) center no-repeat
2018-03-26 16:04:04 +08:00
background-size 46px
&.slidedown
2018-06-09 20:44:42 +08:00
background number-keyboard-key-bg url(../_style/images/keyboard-hide.png) center no-repeat
background-size 54px
&.large-item
width 66.6%
&:active, &.active
2018-03-26 16:04:04 +08:00
background-color number-keyboard-key-bg-tap
&:before, &:after
pointer-events none
2018-03-26 16:04:04 +08:00
.keyboard-operate
flex 1
.keyboard-operate-list
position relative
2018-03-26 16:04:04 +08:00
float left
width 100%
display flex
flex-direction column
.keyboard-operate-item
position relative
float left
width 100%
2018-06-09 20:44:42 +08:00
background number-keyboard-key-bg
2018-03-26 16:04:04 +08:00
transition background .3s
&.delete
height number-keyboard-key-height
2018-06-09 20:44:42 +08:00
background number-keyboard-key-bg url(../_style/images/keyboard-del.png) center no-repeat
2018-03-26 16:04:04 +08:00
background-size 42px
display flex
flex 1
&:active
background-color number-keyboard-key-bg-tap
&.confirm
padding-top 5px
2018-06-09 20:44:42 +08:00
color number-keyboard-key-confirm-color
font-size font-caption-large
2018-03-26 16:04:04 +08:00
background number-keyboard-key-confirm-bg
display flex
flex 1
2018-03-26 16:04:04 +08:00
align-items center
justify-content center
&:active
background-color number-keyboard-key-confirm-bg-tap
&.disabled
.keyboard-operate-item.confirm
background-color color-text-disabled !important
2018-03-26 16:04:04 +08:00
</style>