mand-mobile/components/agree/index.vue

83 lines
1.3 KiB
Vue
Raw Normal View History

2018-03-26 16:04:04 +08:00
<template>
<div
class="md-agree"
:class="[
disabled ? 'disabled' : ''
]">
<div
2018-06-24 16:14:23 +08:00
class="md-agree-icon"
2018-03-26 16:04:04 +08:00
:class="[
value ? 'checked' : ''
]"
@click="$_onChange($event)">
<md-icon
:name="iconName"
:size="size"></md-icon>
</div>
2018-06-24 16:14:23 +08:00
<div class="md-agree-content">
<slot></slot>
</div>
2018-03-26 16:04:04 +08:00
</div>
</template>
<script> import Icon from '../icon'
export default {
name: 'md-agree',
components: {
[Icon.name]: Icon,
},
props: {
value: {
type: Boolean,
default: false,
},
disabled: {
type: Boolean,
default: false,
},
size: {
type: String,
default: 'md',
},
},
data() {
return {}
},
computed: {
iconName() {
return this.value ? 'circle-right' : 'circle'
},
},
methods: {
// MARK: events handler, 如 $_onButtonClick
$_onChange(event) {
if (this.disabled) {
return
}
this.$emit('input', !this.value)
this.$emit('change', event)
},
},
}
</script>
<style lang="stylus">
.md-agree
display flex
&.disabled
opacity agree-disabled-opacity
2018-06-24 16:14:23 +08:00
.md-agree-icon
2018-03-26 16:04:04 +08:00
margin-right 10px
2018-06-24 16:14:23 +08:00
flex-shrink 0
2018-03-26 16:04:04 +08:00
color agree-fill-inverse
&.checked
color agree-fill
2018-06-24 16:14:23 +08:00
.md-agree-content
flex 1 1 0%
2018-03-26 16:04:04 +08:00
</style>