项目结构
生成器代码
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.表格中使用过滤器方法