diff --git a/package.json b/package.json index 1f23a1dda..bceebdf1b 100644 --- a/package.json +++ b/package.json @@ -52,7 +52,7 @@ "ua-parser-js": "^1.0.2", "vditor": "^3.8.15", "vue": "3.2.37", - "vue-router": "^4.1.2", + "vue-router": "^4.1.3", "wangeditor": "^4.7.15", "xgplayer": "^2.31.7" }, @@ -60,7 +60,7 @@ "@amap/amap-jsapi-types": "^0.0.8", "@commitlint/cli": "^17.0.3", "@commitlint/config-conventional": "^17.0.3", - "@iconify/json": "^2.1.83", + "@iconify/json": "^2.1.84", "@iconify/vue": "^3.2.1", "@types/bmapgl": "^0.0.5", "@types/crypto-js": "^4.1.1", diff --git a/src/hooks/business/useNaiveTable.ts b/src/hooks/business/useNaiveTable.ts new file mode 100644 index 000000000..18e628058 --- /dev/null +++ b/src/hooks/business/useNaiveTable.ts @@ -0,0 +1,69 @@ +import type { DataTableColumn } from 'naive-ui'; + +type UnionColumn = T extends DataTableColumn[] ? TypeUtil.ArrayToUnion : never; + +type ColumnKey = 'key'; + +type InterfaceArray = { + [key: string]: unknown; +}; + +type ColumnKeyData = { + key: unknown; +}; + +type ExcludeArrayByKey = T extends [infer First, ...infer Rest] + ? First extends ColumnKeyData + ? Rest extends InterfaceArray[] + ? [First, ...ExcludeArrayByKey] + : [First] + : Rest extends InterfaceArray[] + ? ExcludeArrayByKey + : [] + : []; + +type GetUnionColumnKey = ColumnKey extends keyof UnionColumn + ? UnionColumn[ColumnKey] + : never; + +export const columns: DataTableColumn[] = [ + { + type: 'selection' + }, + { + title: 'Name', + key: 'name', + align: 'center' + }, + { + title: 'Age', + key: 'age' + }, + { + title: 'Address', + key: 'address' + } +]; + +export type UnionColumnKey = GetUnionColumnKey< + ExcludeArrayByKey< + [ + { + type: 'selection'; + }, + { + title: 'Name'; + key: 'name'; + align: 'center'; + }, + { + title: 'Age'; + key: 'age'; + }, + { + title: 'Address'; + key: 'address'; + } + ] + > +>; diff --git a/src/typings/utils.d.ts b/src/typings/utils.d.ts index 570fcc021..31a975ad2 100644 --- a/src/typings/utils.d.ts +++ b/src/typings/utils.d.ts @@ -1,7 +1,21 @@ declare namespace TypeUtil { type Noop = (...args: any) => any; + type UnionInclude = K extends keyof T ? true : false; + type GetFunArgs = F extends (...args: infer P) => any ? P : never; type GetFunReturn = F extends (...args: any) => infer R ? R : never; + + type FirstOfArray = T extends [infer First, ...infer _Rest] ? First : never; + + type LastOfArray = T extends [...infer _Rest, infer Last] ? Last : never; + + type ArrayToUnion = T extends [infer First, ...infer Rest] + ? First extends any + ? Rest extends any[] + ? FirstOfArray<[First]> | ArrayToUnion + : [First] + : never + : never; } diff --git a/src/views/management/auth/index.vue b/src/views/management/auth/index.vue index bac9bc8f6..d9e123379 100644 --- a/src/views/management/auth/index.vue +++ b/src/views/management/auth/index.vue @@ -2,6 +2,6 @@
权限管理
- + diff --git a/src/views/management/user/index.vue b/src/views/management/user/index.vue index 82c18fa21..4780bbe4e 100644 --- a/src/views/management/user/index.vue +++ b/src/views/management/user/index.vue @@ -1,5 +1,7 @@