| <template> | 
|   <transition name="el-zoom-in-top" @after-leave="doDestroy"> | 
|     <div | 
|       class="el-color-dropdown" | 
|       v-show="showPopper"> | 
|       <div class="el-color-dropdown__main-wrapper"> | 
|         <hue-slider ref="hue" :color="color" vertical style="float: right;"></hue-slider> | 
|         <sv-panel ref="sl" :color="color"></sv-panel> | 
|       </div> | 
|       <alpha-slider v-if="showAlpha" ref="alpha" :color="color"></alpha-slider> | 
|       <predefine v-if="predefine" :color="color" :colors="predefine"></predefine> | 
|       <div class="el-color-dropdown__btns"> | 
|         <span class="el-color-dropdown__value"> | 
|           <el-input | 
|             v-model="customInput" | 
|             @keyup.native.enter="handleConfirm" | 
|             @blur="handleConfirm" | 
|             :validate-event="false" | 
|             size="mini"> | 
|           </el-input> | 
|         </span> | 
|         <el-button | 
|           size="mini" | 
|           type="text" | 
|           class="el-color-dropdown__link-btn" | 
|           @click="$emit('clear')"> | 
|           {{ t('el.colorpicker.clear') }} | 
|         </el-button> | 
|         <el-button | 
|           plain | 
|           size="mini" | 
|           class="el-color-dropdown__btn" | 
|           @click="confirmValue"> | 
|           {{ t('el.colorpicker.confirm') }} | 
|         </el-button> | 
|       </div> | 
|     </div> | 
|   </transition> | 
| </template> | 
|   | 
| <script> | 
|   import SvPanel from './sv-panel'; | 
|   import HueSlider from './hue-slider'; | 
|   import AlphaSlider from './alpha-slider'; | 
|   import Predefine from './predefine'; | 
|   import Popper from 'element-ui/src/utils/vue-popper'; | 
|   import Locale from 'element-ui/src/mixins/locale'; | 
|   import ElInput from 'element-ui/packages/input'; | 
|   import ElButton from 'element-ui/packages/button'; | 
|   | 
|   export default { | 
|     name: 'el-color-picker-dropdown', | 
|   | 
|     mixins: [Popper, Locale], | 
|   | 
|     components: { | 
|       SvPanel, | 
|       HueSlider, | 
|       AlphaSlider, | 
|       ElInput, | 
|       ElButton, | 
|       Predefine | 
|     }, | 
|   | 
|     props: { | 
|       color: { | 
|         required: true | 
|       }, | 
|       showAlpha: Boolean, | 
|       predefine: Array | 
|     }, | 
|   | 
|     data() { | 
|       return { | 
|         customInput: '' | 
|       }; | 
|     }, | 
|   | 
|     computed: { | 
|       currentColor() { | 
|         const parent = this.$parent; | 
|         return !parent.value && !parent.showPanelColor ? '' : parent.color.value; | 
|       } | 
|     }, | 
|   | 
|     methods: { | 
|       confirmValue() { | 
|         this.$emit('pick'); | 
|       }, | 
|   | 
|       handleConfirm() { | 
|         this.color.fromString(this.customInput); | 
|       } | 
|     }, | 
|   | 
|     mounted() { | 
|       this.$parent.popperElm = this.popperElm = this.$el; | 
|       this.referenceElm = this.$parent.$el; | 
|     }, | 
|   | 
|     watch: { | 
|       showPopper(val) { | 
|         if (val === true) { | 
|           this.$nextTick(() => { | 
|             const { sl, hue, alpha } = this.$refs; | 
|             sl && sl.update(); | 
|             hue && hue.update(); | 
|             alpha && alpha.update(); | 
|           }); | 
|         } | 
|       }, | 
|   | 
|       currentColor: { | 
|         immediate: true, | 
|         handler(val) { | 
|           this.customInput = val; | 
|         } | 
|       } | 
|     } | 
|   }; | 
| </script> |