前端代码中应该避免直接使用接口返回的枚举值:0、1、2、3…
使用语义化的方式来处理枚举值
定义一个枚举对象创建函数
function createEnumObject(enums) {
let labels = null;
let values = null;
return {
getLabels() {
if (!labels) {
labels = enums.map((item) => item.label);
}
return labels;
},
getValues() {
if (!values) {
values = enums.map((item) => item.value);
}
return values;
},
getLabel(value) {
let index = this.getValues().indexOf(value);
if (index > -1) {
return this.getLabels()[index];
}
},
getValue(label) {
let index = this.getLabels().indexOf(label);
if (index > -1) {
return this.getValues()[index];
}
},
getItem(valueOrLabel) {
let index = this.getValues().indexOf(valueOrLabel);
if (index < 0) {
index = this.getLabels().indexOf(valueOrLabel);
}
if (index > -1) {
return enums[index];
}
},
};
}
// 创建枚举对象
const statusEnum = {
WaitPay: 0,
Success: 1,
Cancel: 2,
};
const statusEnumConfig = [
{
value: statusEnum.WaitPay,
label: "待支付",
color: "yellow",
actions: ["pay", "cancel"],
},
{
value: statusEnum.Success,
label: "已完成",
color: "green",
actions: ["detail", "return"],
},
{
value: statusEnum.Cancel,
label: "已取消",
color: "red",
actions: ["detail"],
},
];
const statusEnumObj = createEnumObject(statusEnumConfig);
console.log(statusEnumObj.getItem(1));
console.log(statusEnumObj.getValue("已完成"));
console.log(statusEnumObj.getValue(1));
console.log(statusEnumObj.getLabel(1));
console.log(statusEnum.Success == 1);