<template>
|
<div class="el-color-predefine">
|
<div class="el-color-predefine__colors">
|
<div class="el-color-predefine__color-selector"
|
:class="{selected: item.selected, 'is-alpha': item._alpha < 100}"
|
v-for="(item, index) in rgbaColors"
|
:key="colors[index]"
|
@click="handleSelect(index)">
|
<div :style="{'background-color': item.value}">
|
</div>
|
</div>
|
</div>
|
</div>
|
</template>
|
|
<script>
|
import Color from '../color';
|
|
export default {
|
props: {
|
colors: { type: Array, required: true },
|
color: { required: true }
|
},
|
data() {
|
return {
|
rgbaColors: this.parseColors(this.colors, this.color)
|
};
|
},
|
methods: {
|
handleSelect(index) {
|
this.color.fromString(this.colors[index]);
|
},
|
parseColors(colors, color) {
|
return colors.map(value => {
|
const c = new Color();
|
c.enableAlpha = true;
|
c.format = 'rgba';
|
c.fromString(value);
|
c.selected = c.value === color.value;
|
return c;
|
});
|
}
|
},
|
watch: {
|
'$parent.currentColor'(val) {
|
const color = new Color();
|
color.fromString(val);
|
|
this.rgbaColors.forEach(item => {
|
item.selected = color.compare(item);
|
});
|
},
|
colors(newVal) {
|
this.rgbaColors = this.parseColors(newVal, this.color);
|
},
|
color(newVal) {
|
this.rgbaColors = this.parseColors(this.colors, newVal);
|
}
|
}
|
};
|
</script>
|