diff --git a/CHANGELOG.md b/CHANGELOG.md index 90ab9cd2..96186684 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # 1.1.2 +**Features** + +- Options转Enum工具函数 + **OTHERS** - 菜单管理 改为虚拟滚动 diff --git a/packages/utils/src/helpers/__tests__/enum-options.test.ts b/packages/utils/src/helpers/__tests__/enum-options.test.ts new file mode 100644 index 00000000..14bfce8c --- /dev/null +++ b/packages/utils/src/helpers/__tests__/enum-options.test.ts @@ -0,0 +1,19 @@ +import { describe, expect, it } from 'vitest'; + +import { optionsToEnum } from '../enum-options'; + +describe('optionsToEnum Test', () => { + it('should return an enum object', () => { + const genderOptions = [ + { label: '男', value: 1, enumName: 'GENDER_MALE' }, + { label: '女', value: 2, enumName: 'GENDER_FEMALE' }, + ] as const; + + const enumTest = optionsToEnum(genderOptions); + const male = enumTest.GENDER_MALE; + const female = enumTest.GENDER_FEMALE; + + expect(male).toBe(1); + expect(female).toBe(2); + }); +}); diff --git a/packages/utils/src/helpers/enum-options.ts b/packages/utils/src/helpers/enum-options.ts new file mode 100644 index 00000000..5ac4c5a1 --- /dev/null +++ b/packages/utils/src/helpers/enum-options.ts @@ -0,0 +1,47 @@ +/** + * @author dap + * @description 枚举选项 + */ + +/** + * 定义options类型 + */ +export interface EnumsOption { + /** + * 枚举名称 建议使用全大写字母_ + */ + enumName: string; + /** + * option的标签 + */ + label: string; + /** + * option的值 + */ + value: boolean | number | string; +} + +export type EnumResult = { + [key in T[number]['enumName']]: Extract< + T[number], + { enumName: key } + >['value']; +}; + +/** + * 将options转为枚举 + * 注意自定义的options需要加上as const作为常量处理 + * 详见: packages\utils\src\helpers\__tests__\enum-options.test.ts + * @param options 枚举选项 + * @returns 转枚举 + */ +export function optionsToEnum( + options: T, +): EnumResult { + type K = T[number]['enumName']; + const result = {} as EnumResult; + options.forEach((item) => { + result[item.enumName as K] = item.value; + }); + return result; +} diff --git a/packages/utils/src/helpers/index.ts b/packages/utils/src/helpers/index.ts index 128df3c0..1733d1af 100644 --- a/packages/utils/src/helpers/index.ts +++ b/packages/utils/src/helpers/index.ts @@ -1,3 +1,4 @@ +export * from './enum-options'; export * from './find-menu-by-path'; export * from './generate-menus'; export * from './generate-routes-backend';