feat: complete function for ColorCheckBox components

master
chenghx 6 years ago
parent 2dcc1279cc
commit 702a9dd832
  1. 58
      src/components/check/ColorCheckBox.vue
  2. 10
      src/components/setting/Setting.vue

@ -14,11 +14,28 @@ const Group = {
type: Array, type: Array,
required: false, required: false,
default: () => [] default: () => []
},
multiple: {
type: Boolean,
required: false,
default: false
} }
}, },
data () { data () {
return { return {
values: this.defaultValues values: [],
options: []
}
},
computed: {
colors () {
let colors = []
this.options.forEach(item => {
if (item.sChecked) {
colors.push(item.color)
}
})
return colors
} }
}, },
provide () { provide () {
@ -26,15 +43,30 @@ const Group = {
groupContext: this groupContext: this
} }
}, },
watch: {
'values': function (newVal, oldVal) {
// chang
if (!(newVal.length === 1 && oldVal.length === 1 && newVal[0] === oldVal[0])) {
this.$emit('change', this.values, this.colors)
}
}
},
methods: { methods: {
handleChange (value) { handleChange (option) {
if (!value.checked) { if (!option.checked) {
const values = this.values.filter(item => item.value !== value.value) this.values = this.values.filter(item => item !== option.value)
this.values = values } else {
if (!this.multiple) {
this.values = [option.value]
this.options.forEach(item => {
if (item.value !== option.value) {
item.sChecked = false
}
})
} else { } else {
this.values.push(value) this.values.push(option.value)
}
} }
this.$emit('change', this.values)
} }
}, },
render (h) { render (h) {
@ -80,7 +112,17 @@ export default {
checked: this.sChecked checked: this.sChecked
} }
this.$emit('change', value) this.$emit('change', value)
this.groupContext.handleChange(value) const groupContext = this.groupContext
if (groupContext) {
groupContext.handleChange(value)
}
}
},
created () {
const groupContext = this.groupContext
if (groupContext) {
this.sChecked = groupContext.defaultValues.indexOf(this.value) >= 0
groupContext.options.push(this)
} }
}, },
methods: { methods: {

@ -7,8 +7,8 @@
</div> </div>
</setting-item> </setting-item>
<setting-item title="主题色"> <setting-item title="主题色">
<color-check-box-group @change="onColorChange"> <color-check-box-group @change="onColorChange" :defaultValues="['1', '2', '3']" :multiple="false">
<color-check-box color="rgb(245, 34, 45)" value="1" /> <color-check-box ref="colorNode" color="rgb(245, 34, 45)" value="1" />
<color-check-box color="rgb(250, 84, 28)" value="2" /> <color-check-box color="rgb(250, 84, 28)" value="2" />
<color-check-box color="rgb(250, 173, 20)" value="3" /> <color-check-box color="rgb(250, 173, 20)" value="3" />
<color-check-box color="rgb(19, 194, 194)" value="4" /> <color-check-box color="rgb(19, 194, 194)" value="4" />
@ -97,8 +97,10 @@ export default {
AIcon, AIcon,
ALayoutSider}, ALayoutSider},
methods: { methods: {
onColorChange (values) { onColorChange (values, colors) {
console.log(values) if (colors.length > 0) {
this.$message.info(`选择了主题色 ${colors}`)
}
} }
} }
} }

Loading…
Cancel
Save