Commit 6e49b19952f00694729736153bc97f52c0ff2582
1 parent
cccf8d81
feat: 字典标签 自定义颜色
Showing
5 changed files
with
39 additions
and
25 deletions
yudao-ui-admin-vue3/src/components/DictTag/src/DictTag.vue
| @@ -17,6 +17,9 @@ const getDictObj = (dictType: string, value: string) => { | @@ -17,6 +17,9 @@ const getDictObj = (dictType: string, value: string) => { | ||
| 17 | const dictOptions = getDictOptions(dictType) | 17 | const dictOptions = getDictOptions(dictType) |
| 18 | dictOptions.forEach((dict: DictDataType) => { | 18 | dictOptions.forEach((dict: DictDataType) => { |
| 19 | if (dict.value === value) { | 19 | if (dict.value === value) { |
| 20 | + if (dict.colorType + '' === 'primary' || dict.colorType + '' === 'default') { | ||
| 21 | + dict.colorType = '' | ||
| 22 | + } | ||
| 20 | dictData.value = dict | 23 | dictData.value = dict |
| 21 | } | 24 | } |
| 22 | }) | 25 | }) |
| @@ -31,25 +34,11 @@ onUpdated(() => { | @@ -31,25 +34,11 @@ onUpdated(() => { | ||
| 31 | }) | 34 | }) |
| 32 | </script> | 35 | </script> |
| 33 | <template> | 36 | <template> |
| 34 | - <!-- 默认样式 --> | ||
| 35 | - <span | ||
| 36 | - v-if=" | ||
| 37 | - dictData?.colorType === 'default' || | ||
| 38 | - dictData?.colorType === '' || | ||
| 39 | - dictData?.colorType === undefined | ||
| 40 | - " | ||
| 41 | - :key="dictData?.value.toString()" | ||
| 42 | - :class="dictData?.cssClass" | ||
| 43 | - > | ||
| 44 | - {{ dictData?.label }} | ||
| 45 | - </span> | ||
| 46 | - <!-- Tag 样式 --> | ||
| 47 | <ElTag | 37 | <ElTag |
| 48 | - v-else | ||
| 49 | :disable-transitions="true" | 38 | :disable-transitions="true" |
| 50 | :key="dictData?.value + ''" | 39 | :key="dictData?.value + ''" |
| 51 | - :type="dictData?.colorType === 'primary' ? 'success' : dictData?.colorType" | ||
| 52 | - :class="dictData?.cssClass" | 40 | + :type="dictData?.colorType" |
| 41 | + :color="dictData?.cssClass" | ||
| 53 | > | 42 | > |
| 54 | {{ dictData?.label }} | 43 | {{ dictData?.label }} |
| 55 | </ElTag> | 44 | </ElTag> |
yudao-ui-admin-vue3/src/store/modules/dict.ts
| @@ -65,6 +65,29 @@ export const useDictStore = defineStore('dict', { | @@ -65,6 +65,29 @@ export const useDictStore = defineStore('dict', { | ||
| 65 | this.isSetDict = true | 65 | this.isSetDict = true |
| 66 | wsCache.set(CACHE_KEY.DICT_CACHE, dictDataMap, { exp: 60 }) // 60 秒 过期 | 66 | wsCache.set(CACHE_KEY.DICT_CACHE, dictDataMap, { exp: 60 }) // 60 秒 过期 |
| 67 | } | 67 | } |
| 68 | + }, | ||
| 69 | + async resetDict() { | ||
| 70 | + wsCache.delete(CACHE_KEY.DICT_CACHE) | ||
| 71 | + const res = await listSimpleDictDataApi() | ||
| 72 | + // 设置数据 | ||
| 73 | + const dictDataMap = new Map<string, any>() | ||
| 74 | + res.forEach((dictData: DictDataVO) => { | ||
| 75 | + // 获得 dictType 层级 | ||
| 76 | + const enumValueObj = dictDataMap[dictData.dictType] | ||
| 77 | + if (!enumValueObj) { | ||
| 78 | + dictDataMap[dictData.dictType] = [] | ||
| 79 | + } | ||
| 80 | + // 处理 dictValue 层级 | ||
| 81 | + dictDataMap[dictData.dictType].push({ | ||
| 82 | + value: dictData.value, | ||
| 83 | + label: dictData.label, | ||
| 84 | + colorType: dictData.colorType, | ||
| 85 | + cssClass: dictData.cssClass | ||
| 86 | + }) | ||
| 87 | + }) | ||
| 88 | + this.dictMap = dictDataMap | ||
| 89 | + this.isSetDict = true | ||
| 90 | + wsCache.set(CACHE_KEY.DICT_CACHE, dictDataMap, { exp: 60 }) // 60 秒 过期 | ||
| 68 | } | 91 | } |
| 69 | } | 92 | } |
| 70 | }) | 93 | }) |
yudao-ui-admin-vue3/src/utils/dict.ts
| @@ -16,7 +16,7 @@ export interface DictDataType { | @@ -16,7 +16,7 @@ export interface DictDataType { | ||
| 16 | dictType: string | 16 | dictType: string |
| 17 | label: string | 17 | label: string |
| 18 | value: string | number | boolean | 18 | value: string | number | boolean |
| 19 | - colorType: ElementPlusInfoType | '' | 'default' | 'primary' | 19 | + colorType: ElementPlusInfoType | '' |
| 20 | cssClass: string | 20 | cssClass: string |
| 21 | } | 21 | } |
| 22 | 22 |
yudao-ui-admin-vue3/src/views/system/dict/dict.data.ts
| @@ -7,7 +7,7 @@ import { VxeCrudSchema, useVxeCrudSchemas } from '@/hooks/web/useVxeCrudSchemas' | @@ -7,7 +7,7 @@ import { VxeCrudSchema, useVxeCrudSchemas } from '@/hooks/web/useVxeCrudSchemas' | ||
| 7 | const { t } = useI18n() | 7 | const { t } = useI18n() |
| 8 | // 表单校验 | 8 | // 表单校验 |
| 9 | export const dictDataRules = reactive({ | 9 | export const dictDataRules = reactive({ |
| 10 | - title: [required], | 10 | + label: [required], |
| 11 | value: [required], | 11 | value: [required], |
| 12 | sort: [required] | 12 | sort: [required] |
| 13 | }) | 13 | }) |
| @@ -35,7 +35,7 @@ export const crudSchemas = reactive<VxeCrudSchema>({ | @@ -35,7 +35,7 @@ export const crudSchemas = reactive<VxeCrudSchema>({ | ||
| 35 | field: 'value' | 35 | field: 'value' |
| 36 | }, | 36 | }, |
| 37 | { | 37 | { |
| 38 | - title: '颜色类型', | 38 | + title: '标签类型', |
| 39 | field: 'colorType', | 39 | field: 'colorType', |
| 40 | form: { | 40 | form: { |
| 41 | component: 'Select', | 41 | component: 'Select', |
| @@ -67,9 +67,12 @@ export const crudSchemas = reactive<VxeCrudSchema>({ | @@ -67,9 +67,12 @@ export const crudSchemas = reactive<VxeCrudSchema>({ | ||
| 67 | isTable: false | 67 | isTable: false |
| 68 | }, | 68 | }, |
| 69 | { | 69 | { |
| 70 | - title: 'CSS Class', | 70 | + title: '颜色', |
| 71 | field: 'cssClass', | 71 | field: 'cssClass', |
| 72 | - isTable: false | 72 | + isTable: false, |
| 73 | + form: { | ||
| 74 | + component: 'ColorPicker' | ||
| 75 | + } | ||
| 73 | }, | 76 | }, |
| 74 | { | 77 | { |
| 75 | title: '显示排序', | 78 | title: '显示排序', |
yudao-ui-admin-vue3/src/views/system/dict/dict.type.ts
| @@ -7,7 +7,8 @@ const { t } = useI18n() // 国际化 | @@ -7,7 +7,8 @@ const { t } = useI18n() // 国际化 | ||
| 7 | 7 | ||
| 8 | // 表单校验 | 8 | // 表单校验 |
| 9 | export const dictTypeRules = reactive({ | 9 | export const dictTypeRules = reactive({ |
| 10 | - name: [required] | 10 | + name: [required], |
| 11 | + type: [required] | ||
| 11 | }) | 12 | }) |
| 12 | // 新增 + 修改 | 13 | // 新增 + 修改 |
| 13 | const crudSchemas = reactive<VxeCrudSchema>({ | 14 | const crudSchemas = reactive<VxeCrudSchema>({ |
| @@ -41,9 +42,7 @@ const crudSchemas = reactive<VxeCrudSchema>({ | @@ -41,9 +42,7 @@ const crudSchemas = reactive<VxeCrudSchema>({ | ||
| 41 | field: 'createTime', | 42 | field: 'createTime', |
| 42 | formatter: 'formatDate', | 43 | formatter: 'formatDate', |
| 43 | isForm: false, | 44 | isForm: false, |
| 44 | - table: { | ||
| 45 | - width: 150 | ||
| 46 | - }, | 45 | + isTable: false, |
| 47 | search: { | 46 | search: { |
| 48 | show: true, | 47 | show: true, |
| 49 | itemRender: { | 48 | itemRender: { |