refactor: dict

pull/2/head
xingyu 2022-11-16 23:15:14 +08:00
parent 7c0c123b9a
commit 7455348a6e
39 changed files with 155 additions and 54 deletions

View File

@ -1,6 +1,6 @@
import { reactive } from 'vue'
import { eachTree, treeMap, filter } from '@/utils/tree'
import { getIntDictOptions } from '@/utils/dict'
import { getBoolDictOptions, getDictOptions, getIntDictOptions } from '@/utils/dict'
import { FormSchema } from '@/types/form'
import { TableColumn } from '@/types/table'
import { DescriptionsSchema } from '@/types/descriptions'
@ -12,7 +12,8 @@ export type CrudSchema = Omit<TableColumn, 'children'> & {
form?: CrudFormParams
detail?: CrudDescriptionsParams
children?: CrudSchema[]
dictType?: string
dictType?: string // 字典类型
dictData?: 'string' | 'number' | 'boolean' // 字典数据类型 string | number | boolean
}
type CrudSearchParams = {
@ -86,7 +87,7 @@ const filterSearchSchema = (crudSchema: CrudSchema[]): FormSchema[] => {
if (schemaItem.dictType) {
const allOptions: ComponentOptions = { label: '全部', value: '' }
options.push(allOptions)
getIntDictOptions(schemaItem.dictType).forEach((dict) => {
getDictOptions(schemaItem.dictType).forEach((dict) => {
options.push(dict)
})
comonentProps = {
@ -144,9 +145,19 @@ const filterFormSchema = (crudSchema: CrudSchema[]): FormSchema[] => {
const options: ComponentOptions[] = []
let comonentProps = {}
if (schemaItem.dictType) {
getIntDictOptions(schemaItem.dictType).forEach((dict) => {
options.push(dict)
})
if (schemaItem.dictData && schemaItem.dictData === 'number') {
getIntDictOptions(schemaItem.dictType).forEach((dict) => {
options.push(dict)
})
} else if (schemaItem.dictData && schemaItem.dictData === 'boolean') {
getBoolDictOptions(schemaItem.dictType).forEach((dict) => {
options.push(dict)
})
} else {
getDictOptions(schemaItem.dictType).forEach((dict) => {
options.push(dict)
})
}
comonentProps = {
options: options
}

View File

@ -1,5 +1,5 @@
import { DescriptionsSchema } from '@/types/descriptions'
import { getIntDictOptions } from '@/utils/dict'
import { getBoolDictOptions, getDictOptions, getIntDictOptions } from '@/utils/dict'
import { reactive } from 'vue'
import {
FormItemRenderOptions,
@ -38,6 +38,7 @@ type VxeCrudColumns = Omit<VxeTableColumn, 'children'> & {
print?: CrudPrintParams // vxe 打印的字段
children?: VxeCrudColumns[] // 子级
dictType?: string // 字典类型
dictData?: 'string' | 'number' | 'boolean' // 字典数据类型 string | number | boolean
}
type CrudSearchParams = {
@ -124,7 +125,7 @@ const filterSearchSchema = (crudSchema: VxeCrudSchema): VxeFormItemProps[] => {
if (schemaItem.dictType) {
const allOptions = { label: '全部', value: '' }
options.push(allOptions)
getIntDictOptions(schemaItem.dictType).forEach((dict) => {
getDictOptions(schemaItem.dictType).forEach((dict) => {
options.push(dict)
})
itemRender.options = options
@ -229,9 +230,19 @@ const filterFormSchema = (crudSchema: VxeCrudSchema): FormSchema[] => {
const options: ComponentOptions[] = []
let comonentProps = {}
if (schemaItem.dictType) {
getIntDictOptions(schemaItem.dictType).forEach((dict) => {
options.push(dict)
})
if (schemaItem.dictData && schemaItem.dictData === 'number') {
getIntDictOptions(schemaItem.dictType).forEach((dict) => {
options.push(dict)
})
} else if (schemaItem.dictData && schemaItem.dictData === 'boolean') {
getBoolDictOptions(schemaItem.dictType).forEach((dict) => {
options.push(dict)
})
} else {
getDictOptions(schemaItem.dictType).forEach((dict) => {
options.push(dict)
})
}
comonentProps = {
options: options
}

View File

@ -12,6 +12,9 @@ import { useUserStoreWithOut } from '@/store/modules/user'
import { listSimpleDictDataApi } from '@/api/system/dict/dict.data'
import { isRelogin } from '@/config/axios/service'
import { getInfoApi } from '@/api/login'
import { useCache } from '@/hooks/web/useCache'
const { wsCache } = useCache()
const { start, done } = useNProgress()
@ -47,7 +50,8 @@ router.beforeEach(async (to, from, next) => {
const dictStore = useDictStoreWithOut()
const userStore = useUserStoreWithOut()
const permissionStore = usePermissionStoreWithOut()
if (!dictStore.getHasDictData) {
const dictMap = wsCache.get('dictCache')
if (!dictMap) {
const res = await listSimpleDictDataApi()
dictStore.setDictMap(res)
}

View File

@ -1,9 +1,11 @@
import { defineStore } from 'pinia'
import { store } from '../index'
import { DictDataVO } from '@/api/system/dict/types'
import { useCache } from '@/hooks/web/useCache'
const { wsCache } = useCache('sessionStorage')
export interface DictValueType {
value: string
value: any
label: string
clorType?: string
cssClass?: string
@ -13,19 +15,20 @@ export interface DictTypeType {
dictValue: DictValueType[]
}
export interface DictState {
dictMap: Recordable
dictMap: Map<string, any>
}
export const useDictStore = defineStore('dict', {
state: (): DictState => ({
dictMap: {}
dictMap: new Map<string, any>()
}),
getters: {
getDictMap(): Recordable {
return this.dictMap
const dictMap = wsCache.get('dictCache')
return dictMap ? dictMap : this.dictMap
},
getHasDictData(): boolean {
if (this.dictMap.length > 0) {
if (this.dictMap.size > 0) {
return true
} else {
return false
@ -35,7 +38,7 @@ export const useDictStore = defineStore('dict', {
actions: {
setDictMap(dictMap: Recordable) {
// 设置数据
const dictDataMap = {}
const dictDataMap = new Map<string, any>()
dictMap.forEach((dictData: DictDataVO) => {
// 获得 dictType 层级
const enumValueObj = dictDataMap[dictData.dictType]
@ -50,7 +53,8 @@ export const useDictStore = defineStore('dict', {
cssClass: dictData.cssClass
})
})
this.dictMap = dictMap
this.dictMap = dictDataMap
wsCache.set('dictCache', dictDataMap, { exp: 60 }) // 60 秒 过期
}
}
})

View File

@ -15,36 +15,53 @@ const dictStore = useDictStoreWithOut()
export interface DictDataType {
dictType: string
label: string
value: string | number
value: string | number | boolean
colorType: ElementPlusInfoType | '' | 'default' | 'primary'
cssClass: string
}
export const getDictOptions = (dictType: string) => {
const dictOptions: DictDataType[] = []
dictStore.getDictMap.forEach((dict: DictDataType) => {
if (dict.dictType + '' === dictType) {
dictOptions.push(dict)
}
})
return dictOptions
return dictStore.getDictMap[dictType]
}
// TODO @芋艿:暂时提供这个方法,主要考虑 ElSelect。下拉如果可以解就可以不用这个方法
export const getIntDictOptions = (dictType: string) => {
const dictOptions: DictDataType[] = []
dictStore.getDictMap.forEach((dict: DictDataType) => {
if (dict.dictType.toString() === dictType) {
dictOptions.push({
...dict,
value: parseInt(dict.value + '')
})
}
const dictOption: DictDataType[] = []
const dictOptions: DictDataType[] = getDictOptions(dictType)
dictOptions.forEach((dict: DictDataType) => {
dictOption.push({
...dict,
value: parseInt(dict.value + '')
})
})
return dictOptions
return dictOption
}
export const getDictObj = (dictType: string, value: string | number | boolean) => {
export const getStrDictOptions = (dictType: string) => {
const dictOption: DictDataType[] = []
const dictOptions: DictDataType[] = getDictOptions(dictType)
dictOptions.forEach((dict: DictDataType) => {
dictOption.push({
...dict,
value: dict.value + ''
})
})
return dictOption
}
export const getBoolDictOptions = (dictType: string) => {
const dictOption: DictDataType[] = []
const dictOptions: DictDataType[] = getDictOptions(dictType)
dictOptions.forEach((dict: DictDataType) => {
dictOption.push({
...dict,
value: dict.value + '' === 'true' ? true : false
})
})
return dictOption
}
export const getDictObj = (dictType: string, value: any) => {
const dictOptions: DictDataType[] = getDictOptions(dictType)
dictOptions.forEach((dict: DictDataType) => {
if (dict.value === value.toString()) {

View File

@ -33,7 +33,8 @@ const crudSchemas = reactive<CrudSchema[]>([
{
label: t('common.status'),
field: 'status',
dictType: DICT_TYPE.COMMON_STATUS
dictType: DICT_TYPE.COMMON_STATUS,
dictData: 'number'
},
{
label: '备注',

View File

@ -41,7 +41,8 @@ const crudSchemas = reactive<CrudSchema[]>([
{
label: t('common.status'),
field: 'status',
dictType: DICT_TYPE.COMMON_STATUS
dictType: DICT_TYPE.COMMON_STATUS,
dictData: 'number'
},
{
label: '备注',

View File

@ -41,6 +41,7 @@ const crudSchemas = reactive<CrudSchema[]>([
label: '流程分类',
field: 'category',
dictType: DICT_TYPE.BPM_MODEL_CATEGORY,
dictData: 'number',
search: {
show: true
}

View File

@ -28,6 +28,7 @@ const crudSchemas = reactive<CrudSchema[]>([
label: '流程分类',
field: 'category',
dictType: DICT_TYPE.BPM_MODEL_CATEGORY,
dictData: 'number',
search: {
show: true
}
@ -40,6 +41,7 @@ const crudSchemas = reactive<CrudSchema[]>([
label: t('common.status'),
field: 'status',
dictType: DICT_TYPE.BPM_PROCESS_INSTANCE_STATUS,
dictData: 'number',
search: {
show: true
}
@ -48,6 +50,7 @@ const crudSchemas = reactive<CrudSchema[]>([
label: '结果',
field: 'result',
dictType: DICT_TYPE.BPM_PROCESS_INSTANCE_RESULT,
dictData: 'number',
search: {
show: true
}

View File

@ -29,7 +29,8 @@ const crudSchemas = reactive<CrudSchema[]>([
{
label: '结果',
field: 'result',
dictType: DICT_TYPE.BPM_PROCESS_INSTANCE_RESULT
dictType: DICT_TYPE.BPM_PROCESS_INSTANCE_RESULT,
dictData: 'number'
},
{
label: '审批意见',

View File

@ -26,6 +26,7 @@ const crudSchemas = reactive<CrudSchema[]>([
label: '用户类型',
field: 'userType',
dictType: DICT_TYPE.USER_TYPE,
dictData: 'number',
search: {
show: true
}

View File

@ -69,6 +69,7 @@ const crudSchemas = reactive<CrudSchema[]>([
label: '处理状态',
field: 'processStatus',
dictType: DICT_TYPE.INFRA_API_ERROR_LOG_PROCESS_STATUS,
dictData: 'number',
search: {
show: true
}

View File

@ -52,6 +52,7 @@ const crudSchemas = reactive<CrudSchema[]>([
label: '系统内置',
field: 'type',
dictType: DICT_TYPE.INFRA_CONFIG_TYPE,
dictData: 'number',
search: {
show: true
}

View File

@ -48,6 +48,7 @@ const crudSchemas = reactive<CrudSchema[]>([
label: '存储器',
field: 'storage',
dictType: DICT_TYPE.INFRA_FILE_STORAGE,
dictData: 'number',
search: {
show: true
}
@ -55,7 +56,8 @@ const crudSchemas = reactive<CrudSchema[]>([
{
label: '主配置',
field: 'primary',
dictType: DICT_TYPE.INFRA_BOOLEAN_STRING
dictType: DICT_TYPE.INFRA_BOOLEAN_STRING,
dictData: 'number'
},
{
label: t('form.remark'),

View File

@ -37,6 +37,7 @@ const crudSchemas = reactive<CrudSchema[]>([
label: t('common.status'),
field: 'status',
dictType: DICT_TYPE.INFRA_JOB_STATUS,
dictData: 'number',
form: {
show: false
},

View File

@ -74,6 +74,7 @@ const crudSchemas = reactive<CrudSchema[]>([
label: t('common.status'),
field: 'status',
dictType: DICT_TYPE.INFRA_JOB_LOG_STATUS,
dictData: 'number',
search: {
show: true
}

View File

@ -45,6 +45,7 @@ const crudSchemas = reactive<CrudSchema[]>([
label: t('common.status'),
field: 'status',
dictType: DICT_TYPE.COMMON_STATUS,
dictData: 'number',
search: {
show: true
}

View File

@ -51,6 +51,7 @@ const crudSchemas = reactive<CrudSchema[]>([
label: t('common.status'),
field: 'status',
dictType: DICT_TYPE.COMMON_STATUS,
dictData: 'number',
search: {
show: true
}

View File

@ -82,7 +82,8 @@ const crudSchemas = reactive<CrudSchema[]>([
{
label: '回调商户状态',
field: 'notifyStatus',
dictType: DICT_TYPE.PAY_ORDER_NOTIFY_STATUS
dictType: DICT_TYPE.PAY_ORDER_NOTIFY_STATUS,
dictData: 'number'
},
{
label: '支付金额',
@ -109,6 +110,7 @@ const crudSchemas = reactive<CrudSchema[]>([
label: '支付状态',
field: 'status',
dictType: DICT_TYPE.PAY_ORDER_STATUS,
dictData: 'number',
search: {
show: true
}
@ -137,6 +139,7 @@ const crudSchemas = reactive<CrudSchema[]>([
label: '退款状态',
field: 'refundStatus',
dictType: DICT_TYPE.PAY_ORDER_REFUND_STATUS,
dictData: 'number',
search: {
show: true
}

View File

@ -67,6 +67,7 @@ const crudSchemas = reactive<CrudSchema[]>([
label: '退款类型',
field: 'type',
dictType: DICT_TYPE.PAY_REFUND_ORDER_TYPE,
dictData: 'number',
search: {
show: true
}
@ -75,6 +76,7 @@ const crudSchemas = reactive<CrudSchema[]>([
label: t('common.status'),
field: 'status',
dictType: DICT_TYPE.PAY_REFUND_ORDER_STATUS,
dictData: 'number',
search: {
show: true
}

View File

@ -96,7 +96,8 @@ export const crudSchemas = reactive<CrudSchema[]>([
{
label: t('common.status'),
field: 'status',
dictType: DICT_TYPE.COMMON_STATUS
dictType: DICT_TYPE.COMMON_STATUS,
dictData: 'number'
},
{
label: t('form.remark'),

View File

@ -40,7 +40,8 @@ const crudSchemas = reactive<CrudSchema[]>([
{
label: t('common.status'),
field: 'status',
dictType: DICT_TYPE.COMMON_STATUS
dictType: DICT_TYPE.COMMON_STATUS,
dictData: 'number'
},
{
label: t('common.createTime'),

View File

@ -22,6 +22,7 @@ const crudSchemas = reactive<VxeCrudSchema>({
title: '错误码类型',
field: 'type',
dictType: DICT_TYPE.SYSTEM_ERROR_CODE_TYPE,
dictData: 'number',
isSearch: true
},
{

View File

@ -12,7 +12,8 @@ const crudSchemas = reactive<VxeCrudSchema>({
{
title: '日志类型',
field: 'logType',
dictType: DICT_TYPE.SYSTEM_LOGIN_TYPE
dictType: DICT_TYPE.SYSTEM_LOGIN_TYPE,
dictData: 'number'
},
{
title: '用户名称',
@ -26,19 +27,26 @@ const crudSchemas = reactive<VxeCrudSchema>({
},
{
title: '浏览器',
field: 'userAgent' // TODO 星语调宽一点UA 稍微多展示一点,虽然最终都会缩略
field: 'userAgent',
table: {
width: 100
}
},
{
title: '登陆结果',
field: 'result',
dictType: DICT_TYPE.SYSTEM_LOGIN_RESULT
dictType: DICT_TYPE.SYSTEM_LOGIN_RESULT,
dictData: 'number'
},
{
title: '登录日期', // TODO 星语:有点窄,看看咋调宽一点,避免日期展示不全
title: '登录日期',
field: 'createTime',
formatter: 'formatDate',
isSearch: true,
table: {
width: 100
},
search: {
show: true,
itemRender: {
name: 'XDataTimePicker'
}

View File

@ -25,12 +25,14 @@ const crudSchemas = reactive<VxeCrudSchema>({
{
title: '公告类型',
field: 'type',
dictType: DICT_TYPE.SYSTEM_NOTICE_TYPE
dictType: DICT_TYPE.SYSTEM_NOTICE_TYPE,
dictData: 'number'
},
{
title: t('common.status'),
field: 'status',
dictType: DICT_TYPE.COMMON_STATUS,
dictData: 'number',
isSearch: true
},
{

View File

@ -45,6 +45,7 @@ const crudSchemas = reactive<VxeCrudSchema>({
title: t('common.status'),
field: 'status',
dictType: DICT_TYPE.COMMON_STATUS,
dictData: 'number',
isSearch: true
},
{

View File

@ -26,6 +26,7 @@ const crudSchemas = reactive<VxeCrudSchema>({
title: '用户类型',
field: 'userType',
dictType: DICT_TYPE.USER_TYPE,
dictData: 'number',
isSearch: true
},
{

View File

@ -21,6 +21,7 @@ const crudSchemas = reactive<VxeCrudSchema>({
title: '操作类型',
field: 'type',
dictType: DICT_TYPE.SYSTEM_OPERATE_TYPE,
dictData: 'number',
isSearch: true
},
{

View File

@ -36,6 +36,7 @@ const crudSchemas = reactive<VxeCrudSchema>({
title: t('common.status'),
field: 'status',
dictType: DICT_TYPE.COMMON_STATUS,
dictData: 'number',
isSearch: true
},
{

View File

@ -26,7 +26,8 @@ const crudSchemas = reactive<VxeCrudSchema>({
{
title: '角色类型',
field: 'type',
dictType: DICT_TYPE.SYSTEM_ROLE_TYPE
dictType: DICT_TYPE.SYSTEM_ROLE_TYPE,
dictData: 'number'
},
{
title: '角色标识',
@ -41,6 +42,7 @@ const crudSchemas = reactive<VxeCrudSchema>({
title: t('common.status'),
field: 'status',
dictType: DICT_TYPE.COMMON_STATUS,
dictData: 'number',
isSearch: true
},
{

View File

@ -154,6 +154,7 @@ const setDialogTile = (type: string) => {
//
const handleCreate = () => {
tags.value = null
setDialogTile('create')
}
@ -162,6 +163,7 @@ const handleUpdate = async (rowId: number) => {
setDialogTile('update')
//
const res = await SensitiveWordApi.getSensitiveWordApi(rowId)
tags.value = res.tags
unref(formRef)?.setValues(res)
}
@ -175,6 +177,7 @@ const submitForm = async () => {
//
try {
const data = unref(formRef)?.formModel as SensitiveWordVO
data.tags = tags.value
if (actionType.value === 'create') {
await SensitiveWordApi.createSensitiveWordApi(data)
ElMessage.success(t('common.createSuccess'))

View File

@ -39,6 +39,7 @@ const crudSchemas = reactive<CrudSchema[]>([
label: t('common.status'),
field: 'status',
dictType: DICT_TYPE.COMMON_STATUS,
dictData: 'number',
search: {
show: true
}

View File

@ -34,6 +34,7 @@ const crudSchemas = reactive<VxeCrudSchema>({
title: t('common.status'),
field: 'status',
dictType: DICT_TYPE.COMMON_STATUS,
dictData: 'number',
isSearch: true
},
{

View File

@ -23,18 +23,21 @@ const crudSchemas = reactive<VxeCrudSchema>({
title: '短信渠道',
field: 'channelId',
dictType: DICT_TYPE.SYSTEM_SMS_CHANNEL_CODE,
dictData: 'number',
isSearch: true
},
{
title: '发送状态',
field: 'sendStatus',
dictType: DICT_TYPE.SYSTEM_SMS_SEND_STATUS,
dictData: 'number',
isSearch: true
},
{
title: '接收状态',
field: 'receiveStatus',
dictType: DICT_TYPE.SYSTEM_SMS_RECEIVE_STATUS,
dictData: 'number',
isSearch: true
},
{
@ -46,6 +49,7 @@ const crudSchemas = reactive<VxeCrudSchema>({
title: '短信类型',
field: 'templateType',
dictType: DICT_TYPE.SYSTEM_SMS_TEMPLATE_TYPE,
dictData: 'number',
isSearch: true
},
{

View File

@ -156,18 +156,18 @@ const handleCreate = () => {
//
const handleUpdate = async (rowId: number) => {
setDialogTile('update')
//
const res = await SmsTemplateApi.getSmsTemplateApi(rowId)
unref(formRef)?.setValues(res)
setDialogTile('update')
}
//
const handleDetail = async (rowId: number) => {
setDialogTile('detail')
//
const res = await SmsTemplateApi.getSmsTemplateApi(rowId)
detailData.value = res
setDialogTile('detail')
}
//

View File

@ -46,6 +46,7 @@ const crudSchemas = reactive<VxeCrudSchema>({
title: '短信类型',
field: 'type',
dictType: DICT_TYPE.SYSTEM_SMS_TEMPLATE_TYPE,
dictData: 'number',
table: {
width: 80
}
@ -54,6 +55,7 @@ const crudSchemas = reactive<VxeCrudSchema>({
title: t('common.status'),
field: 'status',
dictType: DICT_TYPE.COMMON_STATUS,
dictData: 'number',
table: {
width: 80
}

View File

@ -106,6 +106,7 @@ const crudSchemas = reactive<CrudSchema[]>([
label: '租户状态',
field: 'status',
dictType: DICT_TYPE.COMMON_STATUS,
dictData: 'number',
search: {
show: true
}

View File

@ -39,6 +39,7 @@ const crudSchemas = reactive<CrudSchema[]>([
label: t('common.status'),
field: 'status',
dictType: DICT_TYPE.COMMON_STATUS,
dictData: 'number',
search: {
show: true
}

View File

@ -71,6 +71,7 @@ const crudSchemas = reactive<VxeCrudSchema>({
title: t('common.status'),
field: 'status',
dictType: DICT_TYPE.COMMON_STATUS,
dictData: 'number',
isSearch: true
},
{