80102458719a7021a3ad10f09c6de1ec7f5ef297f3a3fdb4788ba2f67c418616ec2499a2c2f19dd57b42b85c999118c3ae7c86068a00ec612602ab324aad56 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. <template>
  2. <div class="el-color-predefine">
  3. <div class="el-color-predefine__colors">
  4. <div class="el-color-predefine__color-selector"
  5. :class="{selected: item.selected, 'is-alpha': item._alpha < 100}"
  6. v-for="(item, index) in rgbaColors"
  7. :key="colors[index]"
  8. @click="handleSelect(index)">
  9. <div :style="{'background-color': item.value}">
  10. </div>
  11. </div>
  12. </div>
  13. </div>
  14. </template>
  15. <script>
  16. import Color from '../color';
  17. export default {
  18. props: {
  19. colors: { type: Array, required: true },
  20. color: { required: true }
  21. },
  22. data() {
  23. return {
  24. rgbaColors: this.parseColors(this.colors, this.color)
  25. };
  26. },
  27. methods: {
  28. handleSelect(index) {
  29. this.color.fromString(this.colors[index]);
  30. },
  31. parseColors(colors, color) {
  32. return colors.map(value => {
  33. const c = new Color();
  34. c.enableAlpha = true;
  35. c.format = 'rgba';
  36. c.fromString(value);
  37. c.selected = c.value === color.value;
  38. return c;
  39. });
  40. }
  41. },
  42. watch: {
  43. '$parent.currentColor'(val) {
  44. const color = new Color();
  45. color.fromString(val);
  46. this.rgbaColors.forEach(item => {
  47. item.selected = color.compare(item);
  48. });
  49. },
  50. colors(newVal) {
  51. this.rgbaColors = this.parseColors(newVal, this.color);
  52. },
  53. color(newVal) {
  54. this.rgbaColors = this.parseColors(this.colors, newVal);
  55. }
  56. }
  57. };
  58. </script>