feat: DictTag组件兼容传入多个字典值展示多个标签的情况

pull/493/head
黄兆琦 2024-07-26 10:32:13 +08:00
parent 46da7e2876
commit 251a98df5c
1 changed files with 40 additions and 29 deletions

View File

@ -1,8 +1,9 @@
<script lang="tsx"> <script lang="tsx">
import { defineComponent, PropType, ref } from 'vue' import { defineComponent, PropType, computed } from 'vue'
import { isHexColor } from '@/utils/color' import { isHexColor } from '@/utils/color'
import { ElTag } from 'element-plus' import { ElTag } from 'element-plus'
import { DictDataType, getDictOptions } from '@/utils/dict' import { DictDataType, getDictOptions } from '@/utils/dict'
import { isArray, isString, isNumber } from '@/utils/is'
export default defineComponent({ export default defineComponent({
name: 'DictTag', name: 'DictTag',
@ -12,46 +13,56 @@ export default defineComponent({
required: true required: true
}, },
value: { value: {
type: [String, Number, Boolean] as PropType<string | number | boolean>, type: [String, Number, Boolean, Array],
required: true required: true
} }
}, },
setup(props) { setup(props) {
const dictData = ref<DictDataType>() const valueArr: any = computed(() => {
const getDictObj = (dictType: string, value: string) => { // 1.Number
const dictOptions = getDictOptions(dictType) if (isNumber(props.value)) {
dictOptions.forEach((dict: DictDataType) => { return [String(props.value)]
if (dict.value === value) { }
if (dict.colorType + '' === 'primary' || dict.colorType + '' === 'default') { // 2.','
dict.colorType = '' else if (isString(props.value)) {
} return props.value.includes(',') ? props.value.split(',') : [String(props.value)]
dictData.value = dict }
} // 3.
}) else if (isArray(props.value)) {
} return props.value.map(String)
}
})
const rederDictTag = () => { const rederDictTag = () => {
if (!props.type) { if (!props.type) {
return null return null
} }
// //
if (props.value === undefined || props.value === null) { if (props.value === undefined || props.value === null || props.value === '') {
return null return null
} }
getDictObj(props.type, props.value.toString()) const dictOptions = getDictOptions(props.type)
//
return ( return (
<ElTag <div class="dict-tag">
style={dictData.value?.cssClass ? 'color: #fff' : ''} {dictOptions.map((dict: DictDataType) => {
type={dictData.value?.colorType} if (valueArr.value.includes(dict.value)) {
color={ if (dict.colorType + '' === 'primary' || dict.colorType + '' === 'default') {
dictData.value?.cssClass && isHexColor(dictData.value?.cssClass) dict.colorType = ''
? dictData.value?.cssClass }
: '' return (
} //
disableTransitions={true} <ElTag
> style={dict?.cssClass ? 'color: #fff' : ''}
{dictData.value?.label} type={dict?.colorType}
</ElTag> color={dict?.cssClass && isHexColor(dict?.cssClass) ? dict?.cssClass : ''}
disableTransitions={true}
>
{dict?.label}
</ElTag>
)
}
})}
</div>
) )
} }
return () => rederDictTag() return () => rederDictTag()