feat: convert color select component to composition API

This commit is contained in:
IchliebedichZhu 2024-03-08 14:54:48 +00:00
parent 8de5dc08f8
commit 9f95a64582

View File

@ -6,51 +6,58 @@
<div class="content"> <div class="content">
<el-popover placement="left-end" trigger="click" width="auto" @after-enter="enter" @before-leave="hide"> <el-popover placement="left-end" trigger="click" width="auto" @after-enter="enter" @before-leave="hide">
<!-- eslint-disable-next-line vue/no-v-model-argument --> <!-- eslint-disable-next-line vue/no-v-model-argument -->
<color-picker v-model:value="innerColor" :modes="modes" @change="colorChange" @nativePick="dropColor" /> <color-picker v-model:value="state.innerColor" :modes="modes" @change="colorChange" @nativePick="dropColor" />
<template #reference> <template #reference>
<div class="color__bar" :style="{ background: innerColor }"></div> <div class="color__bar" :style="{ background: state.innerColor }"></div>
</template> </template>
</el-popover> </el-popover>
</div> </div>
</div> </div>
</template> </template>
<script lang="ts"> <script lang="ts" setup>
const NAME = 'color-select' // const NAME = 'color-select'
import { defineComponent, toRefs, reactive, computed, onMounted, watch } from 'vue' import {reactive, onMounted, watch } from 'vue'
import { useStore } from 'vuex' import { useStore } from 'vuex'
// import { debounce } from 'throttle-debounce' // import { debounce } from 'throttle-debounce'
// import { toolTip } from '@/common/methods/helper' // import { toolTip } from '@/common/methods/helper'
// import colorPicker from '@/utils/plugins/color-picker/index.vue' // import colorPicker from '@/utils/plugins/color-picker/index.vue'
import colorPicker from '@palxp/color-picker' import colorPicker from '@palxp/color-picker'
export default defineComponent({ type TProps = {
name: NAME, label?: string
components: { colorPicker }, modelValue?: string
inheritAttrs: false, width?: string
props: { modes?: string[]
label: { }
default: '',
}, type TEmits = {
modelValue: { (event: 'finish', data: string): void
default: '', (event: 'update:modelValue', data: string): void
}, (event: 'change', data: string): void
width: { }
default: '100%',
}, type TState = {
modes: { innerColor: string
default: () => ['纯色'], }
},
}, const props = withDefaults(defineProps<TProps>(), {
emits: ['finish', 'update:modelValue', 'change'], label: '',
setup(props, { emit }) { modelValue: '',
width: '100%',
modes: () => (['纯色'])
})
const emit = defineEmits<TEmits>()
const store = useStore() const store = useStore()
const state: any = reactive({ const state = reactive<TState>({
innerColor: '', innerColor: '',
// colorLength: 0, // colorLength: 0,
// hasEyeDrop: 'EyeDropper' in window, // hasEyeDrop: 'EyeDropper' in window,
}) })
let first = true let first = true
// const dColorHistory = computed(() => { // const dColorHistory = computed(() => {
// return store.getters.dColorHistory // return store.getters.dColorHistory
// }) // })
@ -62,8 +69,9 @@ export default defineComponent({
state.innerColor = fixColor.toLocaleUpperCase() state.innerColor = fixColor.toLocaleUpperCase()
} }
}) })
const dropColor = async (e: any) => {
console.log('取色: ', e) const dropColor = async (color: string) => {
console.log('取色: ', color)
} }
watch( watch(
@ -77,6 +85,7 @@ export default defineComponent({
// addHistory(value) // addHistory(value)
}, },
) )
watch( watch(
() => props.modelValue, () => props.modelValue,
(val) => { (val) => {
@ -87,12 +96,15 @@ export default defineComponent({
const updateValue = (value: any) => { const updateValue = (value: any) => {
emit('update:modelValue', value) emit('update:modelValue', value)
} }
const activeChange = (value: any) => { const activeChange = (value: any) => {
updateValue(value) updateValue(value)
} }
const onChange = () => { const onChange = () => {
emit('finish', state.innerColor) emit('finish', state.innerColor)
} }
// const addHistory = debounce(300, false, async (value) => { // const addHistory = debounce(300, false, async (value) => {
// store.dispatch('pushColorToHistory', value) // store.dispatch('pushColorToHistory', value)
// }) // })
@ -112,12 +124,11 @@ export default defineComponent({
store.commit('setShowMoveable', true) // store.commit('setShowMoveable', true) //
} }
const colorChange = (e) => { const colorChange = (color: string) => {
emit('change', e) emit('change', color)
} }
return { defineExpose({
...toRefs(state),
// dColorHistory, // dColorHistory,
activeChange, activeChange,
onChange, onChange,
@ -126,8 +137,6 @@ export default defineComponent({
enter, enter,
hide, hide,
colorChange, colorChange,
}
},
}) })
</script> </script>