多语言优化

This commit is contained in:
2026-03-19 15:40:06 +08:00
parent db0e420a8f
commit 333e85f7d9
45 changed files with 864 additions and 276 deletions

View File

@@ -14,12 +14,12 @@
:round="round"
class="mr-1 last:mr-0"
>
{{ getData(item)?.label || item }}
{{ getDisplayLabel(item) }}
</ElTag>
</template>
<template v-else>
<span v-for="(item, index) in normalizedValues" :key="index">
{{ getData(item)?.label || item }}{{ index < normalizedValues.length - 1 ? '' : '' }}
{{ getDisplayLabel(item) }}{{ index < normalizedValues.length - 1 ? '' : '' }}
</span>
</template>
</div>
@@ -27,6 +27,7 @@
<script setup lang="ts">
import { useDictStore } from '@/store/modules/dict'
import { useI18n } from 'vue-i18n'
defineOptions({ name: 'SaDict' })
@@ -50,6 +51,7 @@
})
const dictStore = useDictStore()
const { t, te, locale } = useI18n()
// 统一处理 value转换为数组格式
const normalizedValues = computed(() => {
@@ -64,6 +66,16 @@
// 根据值获取字典数据
const getData = (value: string) => dictStore.getDataByValue(props.dict, value)
const getDisplayLabel = (value: string) => {
// 让显示在切换语言时可响应更新
locale.value
const key = `dict.${props.dict}.${value}`
if (te(key)) return t(key)
return getData(value)?.label || value
}
const getColor = (color: string | undefined, type: 'bg' | 'border' | 'text') => {
// 如果没有指定颜色,使用默认主色调
if (!color) {