项目结构
生成器代码
package com.java.generator.test;
import com.java.common.enums.*;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.lang.reflect.Method;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class EnumGenerator {
// 生成在当前文件夹
static String path ="jl-generator\\src\\main\\java\\com\\java\\generator\\test\\enums.js";
public static void main(String[] args) {
StringBuffer bufferObject = new StringBuffer();
StringBuffer bufferArray = new StringBuffer();
long begin = System.currentTimeMillis();
try {
// 需要生成的枚举类
toJson(SectionChargeEnum.class, bufferObject, bufferArray);
toJson(YesNoEnum.class, bufferObject, bufferArray);
toJson(CourseLevelEnum.class, bufferObject, bufferArray);
toJson(CourseChargeEnum.class, bufferObject, bufferArray);
toJson(CourseStatusEnum.class, bufferObject, bufferArray);
toJson(FileUseEnum.class, bufferObject, bufferArray);
toJson(SmsUseEnum.class, bufferObject, bufferArray);
toJson(SmsStatusEnum.class, bufferObject, bufferArray);
StringBuffer buffer = bufferObject.append("\r\n").append(bufferArray);
writeJs(buffer);
} catch (Exception e) {
e.printStackTrace();
}
long end = System.currentTimeMillis();
System.out.println("执行耗时:" + (end - begin) + " 毫秒");
}
private static void toJson(Class clazz, StringBuffer bufferObject, StringBuffer bufferArray) throws Exception {
String key = toUnderline(clazz.getSimpleName());
toJson(clazz, key, bufferObject, bufferArray);
}
private static void toJson(Class clazz, String key, StringBuffer bufferObject, StringBuffer bufferArray) throws Exception {
Object[] objects = clazz.getEnumConstants();
Method name = clazz.getMethod("name");
Method getDesc = clazz.getMethod("getDesc");
Method getCode = clazz.getMethod("getCode");
// 生成对象
bufferObject.append(key).append("={");
for (int i = 0; i < objects.length; i++) {
Object obj = objects[i];
if (getCode == null) {
bufferObject.append(name.invoke(obj)).append(":{key:\"").append(name.invoke(obj)).append("\", value:\"").append(getDesc.invoke(obj)).append("\"}");
} else {
bufferObject.append(name.invoke(obj)).append(":{key:\"").append(getCode.invoke(obj)).append("\", value:\"").append(getDesc.invoke(obj)).append("\"}");
}
if (i < objects.length - 1) {
bufferObject.append(",");
}
}
bufferObject.append("};\r\n");
// 生成数组
bufferArray.append(key).append("_ARRAY=[");
for (int i = 0; i < objects.length; i++) {
Object obj = objects[i];
if (getCode == null) {
bufferArray.append("{key:\"").append(name.invoke(obj)).append("\", value:\"").append(getDesc.invoke(obj)).append("\"}");
} else {
bufferArray.append("{key:\"").append(getCode.invoke(obj)).append("\", value:\"").append(getDesc.invoke(obj)).append("\"}");
}
if (i < objects.length - 1) {
bufferArray.append(",");
}
}
bufferArray.append("];\r\n");
}
/**
* 写文件
* @param stringBuffer
*/
public static void writeJs(StringBuffer stringBuffer) {
FileOutputStream out = null;
try {
out = new FileOutputStream(path);
OutputStreamWriter osw = new OutputStreamWriter(out, "UTF-8");
System.out.println(path);
osw.write(stringBuffer.toString());
osw.close();
} catch (Exception e) {
e.printStackTrace();
}
finally {
try {
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
* 功能:驼峰转大写下划线,并去掉_ENUM
* 如:SectionChargeEnum 变成 SECTION_CHARGE
* @param str
* @return
*/
public static String toUnderline(String str) {
String result = underline(str).toString();
return result.substring(1, result.length()).toUpperCase().replace("_ENUM", "");
}
/**
* 驼峰转下划线,第一位是下划线
* 如:SectionChargeEnum 变成 _section_charge_enum
* @param str
* @return
*/
private static StringBuffer underline(String str) {
Pattern pattern = Pattern.compile("[A-Z]");
Matcher matcher = pattern.matcher(str);
StringBuffer sb = new StringBuffer(str);
if(matcher.find()) {
sb = new StringBuffer();
matcher.appendReplacement(sb,"_"+matcher.group(0).toLowerCase());
matcher.appendTail(sb);
}else {
return sb;
}
return underline(sb.toString());
}
}
生成后的enums.js 上面是对象 下面是数组
在前端使用
1.定义filer.js
/**
* 数组过滤器 例如:{{SECTION_CHARGE | optionKV(section.charge)}}
* @param object 例如:{CHARGE:{key:"C", value:"收费"},FREE:{key:"F", value:"免费"}}
* @param key 例如:C
* @returns {string} 例如:收费
*/
let optionKV = (object, key) => {
if (!object || !key) {
return "";
} else {
let result = "";
for(let enums in object){
if (key === object[enums]["key"]) {
result = object[enums]["value"];
}
}
return result;
}
};
/**
* 数组过滤器 例如:{{CHARGE | optionKVArray(section.charge)}}
* @param list 例如:[{key:"C", value:"收费"},{key:"F", value:"免费"}]
* @param key 例如:C
* @returns {string} 例如:收费
*/
let optionKVArray = (list, key) => {
if (!list || !key) {
return "";
} else {
let result = "";
for (let i = 0; i < list.length; i++) {
if (key === list[i]["key"]) {
result = list[i]["value"];
}
}
return result;
}
};
/**
* 时长格式化
* @param value 例如:36000
* @returns {string} 例如:10:00:00
*/
let formatSecond = (value) => {
value = value || 0;
let second = parseInt(value, 10); // 秒
let minute = 0; // 分
let hour = 0; // 小时
if (second > 60) {
// 当大于60秒时,才需要做转换
minute = Math.floor(second / 60);
second = Math.floor(second % 60);
if (minute > 60) {
hour = Math.floor(minute / 60);
minute = Math.floor(minute % 60);
}
} else {
// 小于60秒时,直接显示,不需要处理
}
let result = "" + PrefixInteger(second, 2) + "";
// 拼上分钟
result = "" + PrefixInteger(minute, 2) + ":" + result;
// 拼上小时
result = "" + PrefixInteger(hour, 2) + ":" + result;
return result;
};
/**
* 格式化指定长度,前面补0
*/
function PrefixInteger(num, length) {
return (Array(length).join('0') + num).slice(-length);
}
/**
* 格式化文件大小
* @param value
* @returns {string}
*/
let formatFileSize = (value) => {
value = value || 0;
let result;
if (value > 100 * 1024) {
result = Math.round((value / 1024 / 1024) * 100) / 100 + "MB";
} else {
result = Math.round((value / 1024) * 100) / 100 + "KB";
}
return result;
};
export default {
optionKV,
formatSecond,
formatFileSize
}
2.全局引入过滤器
3.将enums.js粘贴到项目并引入
4.data声明枚举对象
5.下拉框中使用循环遍历
6.表格中使用过滤器方法