parent
							
								
									04f8642c33
								
							
						
					
					
						commit
						61f60316f3
					
				
				 3 changed files with 127 additions and 13 deletions
			
			
		@ -0,0 +1,106 @@ | 
				
			||||
<template> | 
				
			||||
  <div class="theme-color" :style="{backgroundColor: color}" @click="toggle"> | 
				
			||||
    <a-icon v-if="sChecked" type="check" /> | 
				
			||||
  </div> | 
				
			||||
</template> | 
				
			||||
 | 
				
			||||
<script> | 
				
			||||
import AIcon from 'ant-design-vue/es/icon/icon' | 
				
			||||
 | 
				
			||||
const Group = { | 
				
			||||
  name: 'ColorCheckBoxGroup', | 
				
			||||
  props: { | 
				
			||||
    defaultValues: { | 
				
			||||
      type: Array, | 
				
			||||
      required: false, | 
				
			||||
      default: () => [] | 
				
			||||
    } | 
				
			||||
  }, | 
				
			||||
  data () { | 
				
			||||
    return { | 
				
			||||
      values: this.defaultValues | 
				
			||||
    } | 
				
			||||
  }, | 
				
			||||
  provide () { | 
				
			||||
    return { | 
				
			||||
      groupContext: this | 
				
			||||
    } | 
				
			||||
  }, | 
				
			||||
  methods: { | 
				
			||||
    handleChange (value) { | 
				
			||||
      if (!value.checked) { | 
				
			||||
        const values = this.values.filter(item => item.value !== value.value) | 
				
			||||
        this.values = values | 
				
			||||
      } else { | 
				
			||||
        this.values.push(value) | 
				
			||||
      } | 
				
			||||
      this.$emit('change', this.values) | 
				
			||||
    } | 
				
			||||
  }, | 
				
			||||
  render (h) { | 
				
			||||
    const clear = h('div', {attrs: {style: 'clear: both'}}) | 
				
			||||
    return h( | 
				
			||||
      'div', | 
				
			||||
      {}, | 
				
			||||
      [this.$slots.default, clear] | 
				
			||||
    ) | 
				
			||||
  } | 
				
			||||
} | 
				
			||||
 | 
				
			||||
export default { | 
				
			||||
  name: 'ColorCheckBox', | 
				
			||||
  Group: Group, | 
				
			||||
  components: {AIcon}, | 
				
			||||
  props: { | 
				
			||||
    color: { | 
				
			||||
      type: String, | 
				
			||||
      required: true | 
				
			||||
    }, | 
				
			||||
    value: { | 
				
			||||
      type: String, | 
				
			||||
      required: true | 
				
			||||
    }, | 
				
			||||
    checked: { | 
				
			||||
      type: Boolean, | 
				
			||||
      required: false, | 
				
			||||
      default: false | 
				
			||||
    } | 
				
			||||
  }, | 
				
			||||
  data () { | 
				
			||||
    return { | 
				
			||||
      sChecked: this.checked | 
				
			||||
    } | 
				
			||||
  }, | 
				
			||||
  inject: ['groupContext'], | 
				
			||||
  watch: { | 
				
			||||
    'sChecked': function (val) { | 
				
			||||
      const value = { | 
				
			||||
        value: this.value, | 
				
			||||
        color: this.color, | 
				
			||||
        checked: this.sChecked | 
				
			||||
      } | 
				
			||||
      this.$emit('change', value) | 
				
			||||
      this.groupContext.handleChange(value) | 
				
			||||
    } | 
				
			||||
  }, | 
				
			||||
  methods: { | 
				
			||||
    toggle () { | 
				
			||||
      this.sChecked = !this.sChecked | 
				
			||||
    } | 
				
			||||
  } | 
				
			||||
} | 
				
			||||
</script> | 
				
			||||
 | 
				
			||||
<style lang="less" scoped> | 
				
			||||
  .theme-color{ | 
				
			||||
    float: left; | 
				
			||||
    width: 20px; | 
				
			||||
    height: 20px; | 
				
			||||
    border-radius: 2px; | 
				
			||||
    cursor: pointer; | 
				
			||||
    margin-right: 8px; | 
				
			||||
    text-align: center; | 
				
			||||
    color: #fff; | 
				
			||||
    font-weight: bold; | 
				
			||||
  } | 
				
			||||
</style> | 
				
			||||
					Loading…
					
					
				
		Reference in new issue