新建Enum.ts

在系统公共模块如common文件夹下新建一个Enum.ts文件,代码如下:

export interface EnumValueTag {
    color?: string;
    type?: string;
}
 
/**
 * 枚举值类
 */
export class EnumValue {
    /**
     * 枚举值
     */
    value: any;
 
    /**
     * 枚举描述
     */
    label: string;
 
    /**
     * 展示的标签信息
     */
    tag: EnumValueTag;
 
    constructor(value: any, label: string) {
        this.value = value;
        this.label = label;
    }
 
    /**
    * tag相关的方法主要用于PageTable.vue公共分页组件对枚举值进行el-tag标签展示
    */
    setTagType(type: string = 'primary'): EnumValue {
        this.tag = { type };
        return this;
    }
 
    tagTypeInfo(): EnumValue {
        return this.setTagType('info');
    }
 
    tagTypeSuccess(): EnumValue {
        return this.setTagType('success');
    }
 
    tagTypeDanger(): EnumValue {
        return this.setTagType('danger');
    }
 
    tagTypeWarning(): EnumValue {
        return this.setTagType('warning');
    }
 
    setTagColor(color: string): EnumValue {
        this.tag = { color };
        return this;
    }
 
    public static of(value: any, label: string): EnumValue {
        return new EnumValue(value, label);
    }
 
    /**
     * 根据枚举值获取指定枚举值对象
     *
     * @param enumValues 所有枚举值
     * @param value 需要匹配的枚举值
     * @returns 枚举值对象
     */
    static getEnumByValue(enumValues: EnumValue[], value: any): EnumValue | null {
        for (let enumValue of enumValues) {
            if (enumValue.value == value) {
                return enumValue;
            }
        }
        return null;
    }
 
    /**
     * 根据枚举值获取枚举描述
     *
     * @param enums 枚举对象
     * @param value 枚举值
     * @returns 枚举描述
     */
    static getLabelByValue(enums: any, value: any) {
        const enumValues = Object.values(enums) as any;
        for (let enumValue of enumValues) {
            if (enumValue['value'] == value) {
                return enumValue['label'];
            }
        }
        return '';
    }
}
 
export default EnumValue;