64 lines
1.1 KiB
Vue
64 lines
1.1 KiB
Vue
![]() |
<template>
|
||
|
<view @click.stop="switchCheckbox">
|
||
|
<view class="checkbox" :style="{backgroundColor: selectable? '#fff': '#d0d0d0'}">
|
||
|
<view :class="{'checked': checked}" :style="{color: selectable? '#007aff': '#a2a2a2'}" v-show="checked">√</view>
|
||
|
</view>
|
||
|
</view>
|
||
|
</template>
|
||
|
|
||
|
<script>
|
||
|
export default{
|
||
|
name: 'MyCheckBox',
|
||
|
props: {
|
||
|
value: Boolean,
|
||
|
selectable: {
|
||
|
type: Boolean,
|
||
|
default: true
|
||
|
}
|
||
|
},
|
||
|
data(){
|
||
|
return {
|
||
|
checked: false
|
||
|
}
|
||
|
},
|
||
|
watch:{
|
||
|
value:{
|
||
|
immediate:true,
|
||
|
handler(val){
|
||
|
// if(val){
|
||
|
this.checked = val
|
||
|
// }
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
methods: {
|
||
|
switchCheckbox(){
|
||
|
if(this.selectable){
|
||
|
this.checked = !this.checked
|
||
|
this.$emit('input', this.checked)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
</script>
|
||
|
|
||
|
<style scoped>
|
||
|
.checkbox{
|
||
|
width: 20px;
|
||
|
height: 20px;
|
||
|
border: solid lightgray 1px;
|
||
|
position: relative;
|
||
|
margin: 10px 0;
|
||
|
}
|
||
|
|
||
|
.checked{
|
||
|
font: normal normal normal 14px/1 uni;
|
||
|
/* content: "\EA08"; */
|
||
|
font-size: 22px;
|
||
|
position: absolute;
|
||
|
top: 50%;
|
||
|
left: 50%;
|
||
|
transform: translate(-50%,-48%) scale(.73);
|
||
|
-webkit-transform: translate(-50%,-48%) scale(.73);
|
||
|
}
|
||
|
</style>
|