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