e020fb68591781f48067466fa588a4be6ce48491f180252f8532ad9f07f96a25694cd54281b7cafff7b90716816d3c219e8b8dc95bfc3b4d76000e36c39a49 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. <template>
  2. <transition name="el-zoom-in-top" @after-leave="doDestroy">
  3. <div
  4. class="el-color-dropdown"
  5. v-show="showPopper">
  6. <div class="el-color-dropdown__main-wrapper">
  7. <hue-slider ref="hue" :color="color" vertical style="float: right;"></hue-slider>
  8. <sv-panel ref="sl" :color="color"></sv-panel>
  9. </div>
  10. <alpha-slider v-if="showAlpha" ref="alpha" :color="color"></alpha-slider>
  11. <predefine v-if="predefine" :color="color" :colors="predefine"></predefine>
  12. <div class="el-color-dropdown__btns">
  13. <span class="el-color-dropdown__value">
  14. <el-input
  15. v-model="customInput"
  16. @keyup.native.enter="handleConfirm"
  17. @blur="handleConfirm"
  18. :validate-event="false"
  19. size="mini">
  20. </el-input>
  21. </span>
  22. <el-button
  23. size="mini"
  24. type="text"
  25. class="el-color-dropdown__link-btn"
  26. @click="$emit('clear')">
  27. {{ t('el.colorpicker.clear') }}
  28. </el-button>
  29. <el-button
  30. plain
  31. size="mini"
  32. class="el-color-dropdown__btn"
  33. @click="confirmValue">
  34. {{ t('el.colorpicker.confirm') }}
  35. </el-button>
  36. </div>
  37. </div>
  38. </transition>
  39. </template>
  40. <script>
  41. import SvPanel from './sv-panel';
  42. import HueSlider from './hue-slider';
  43. import AlphaSlider from './alpha-slider';
  44. import Predefine from './predefine';
  45. import Popper from 'element-ui/src/utils/vue-popper';
  46. import Locale from 'element-ui/src/mixins/locale';
  47. import ElInput from 'element-ui/packages/input';
  48. import ElButton from 'element-ui/packages/button';
  49. export default {
  50. name: 'el-color-picker-dropdown',
  51. mixins: [Popper, Locale],
  52. components: {
  53. SvPanel,
  54. HueSlider,
  55. AlphaSlider,
  56. ElInput,
  57. ElButton,
  58. Predefine
  59. },
  60. props: {
  61. color: {
  62. required: true
  63. },
  64. showAlpha: Boolean,
  65. predefine: Array
  66. },
  67. data() {
  68. return {
  69. customInput: ''
  70. };
  71. },
  72. computed: {
  73. currentColor() {
  74. const parent = this.$parent;
  75. return !parent.value && !parent.showPanelColor ? '' : parent.color.value;
  76. }
  77. },
  78. methods: {
  79. confirmValue() {
  80. this.$emit('pick');
  81. },
  82. handleConfirm() {
  83. this.color.fromString(this.customInput);
  84. }
  85. },
  86. mounted() {
  87. this.$parent.popperElm = this.popperElm = this.$el;
  88. this.referenceElm = this.$parent.$el;
  89. },
  90. watch: {
  91. showPopper(val) {
  92. if (val === true) {
  93. this.$nextTick(() => {
  94. const { sl, hue, alpha } = this.$refs;
  95. sl && sl.update();
  96. hue && hue.update();
  97. alpha && alpha.update();
  98. });
  99. }
  100. },
  101. currentColor: {
  102. immediate: true,
  103. handler(val) {
  104. this.customInput = val;
  105. }
  106. }
  107. }
  108. };
  109. </script>