From d5c0d98dabbead4e99e0943a12e12a1f057c4208 Mon Sep 17 00:00:00 2001
From: wangbing <1919101440@qq.com>
Date: Sun, 17 Nov 2019 01:17:51 +0800
Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E4=BC=98=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../manger/callable/SpringBootCallable.java | 11 +-
.../java/action/GlobalController.java | 51 +-
.../java/action/ajax/system/DictAjax.java | 46 +-
.../SpringBoot/java/action/screen/Index.java | 16 +-
.../SpringBoot/java/frame/excel/WSheet.java | 16 +-
.../excel/exception/ReadErrorException.java | 10 +
.../exception/TemplateNotMatchException.java | 10 +
.../module/system/req/DictCreateRequest.java | 13 +-
.../SpringBoot/resources/static/js/ajax.js | 302 -----------
.../resources/static/js/ajax_es6.js | 165 ------
.../resources/templates/control/nav.ftl | 473 +++++++++++++++---
.../resources/templates/layout/default.ftl | 1 -
.../resources/templates/screen/home.ftl | 12 +
.../resources/templates/screen/index.ftl | 17 +-
.../resources/templates/screen/login.ftl | 12 +-
.../templates/screen/module/system/dict.ftl | 181 ++-----
16 files changed, 617 insertions(+), 719 deletions(-)
create mode 100644 src/main/resources/modules/SpringBoot/java/frame/excel/exception/ReadErrorException.java
create mode 100644 src/main/resources/modules/SpringBoot/java/frame/excel/exception/TemplateNotMatchException.java
delete mode 100644 src/main/resources/modules/SpringBoot/resources/static/js/ajax.js
delete mode 100644 src/main/resources/modules/SpringBoot/resources/static/js/ajax_es6.js
diff --git a/src/main/java/xyz/wbsite/dbtool/javafx/manger/callable/SpringBootCallable.java b/src/main/java/xyz/wbsite/dbtool/javafx/manger/callable/SpringBootCallable.java
index 5734452d..1db56371 100644
--- a/src/main/java/xyz/wbsite/dbtool/javafx/manger/callable/SpringBootCallable.java
+++ b/src/main/java/xyz/wbsite/dbtool/javafx/manger/callable/SpringBootCallable.java
@@ -566,6 +566,8 @@ public class SpringBootCallable implements Callable {
excelannotation.mkdirs();
File excelconverter = new File(excel.getAbsolutePath(), "converter");
excelconverter.mkdirs();
+ File exception = new File(excel.getAbsolutePath(), "exception");
+ exception.mkdirs();
File excelstyle = new File(excel.getAbsolutePath(), "style");
excelstyle.mkdirs();
File utils = new File(root.getAbsolutePath(), "utils");
@@ -619,6 +621,9 @@ public class SpringBootCallable implements Callable {
freeMarkerManager.outputTemp(new File(excelconverter.getAbsolutePath(), "ShortConverter.java"), option + "/java/frame/excel/converter/ShortConverter.java", ctx);
freeMarkerManager.outputTemp(new File(excelconverter.getAbsolutePath(), "StringConverter.java"), option + "/java/frame/excel/converter/StringConverter.java", ctx);
+ freeMarkerManager.outputTemp(new File(exception.getAbsolutePath(), "ReadErrorException.java"), option + "/java/frame/excel/exception/ReadErrorException.java", ctx);
+ freeMarkerManager.outputTemp(new File(exception.getAbsolutePath(), "TemplateNotMatchException.java"), option + "/java/frame/excel/exception/TemplateNotMatchException.java", ctx);
+
freeMarkerManager.outputTemp(new File(excelstyle.getAbsolutePath(), "BaseCellStyle.java"), option + "/java/frame/excel/style/BaseCellStyle.java", ctx);
freeMarkerManager.outputTemp(new File(excelstyle.getAbsolutePath(), "BaseFont.java"), option + "/java/frame/excel/style/BaseFont.java", ctx);
freeMarkerManager.outputTemp(new File(excelstyle.getAbsolutePath(), "DataCellStyle.java"), option + "/java/frame/excel/style/DataCellStyle.java", ctx);
@@ -762,8 +767,6 @@ public class SpringBootCallable implements Callable {
boolean mkdirs = static_.mkdirs();
File css = new File(static_.getAbsolutePath(), "css");
boolean mkdirs1 = css.mkdirs();
- File js = new File(static_.getAbsolutePath(), "js");
- boolean mkdirs2 = js.mkdirs();
File img = new File(static_.getAbsolutePath(), "img");
boolean mkdirs3 = img.mkdirs();
@@ -778,10 +781,6 @@ public class SpringBootCallable implements Callable {
freeMarkerManager.outputTemp(new File(css.getAbsolutePath(), "base.css"), option + "/resources/static/css/base.css", ctx);
}
- {//js文件
- freeMarkerManager.outputTemp(new File(js.getAbsolutePath(), "ajax.js"), option + "/resources/static/js/ajax.js", ctx);
- freeMarkerManager.outputTemp(new File(js.getAbsolutePath(), "ajax_es6.js"), option + "/resources/static/js/ajax_es6.js", ctx);
- }
{//img
Tool.outputResource(option + "/resources/static/img/logo.png", new File(img.getAbsolutePath(), "logo.png"));
}
diff --git a/src/main/resources/modules/SpringBoot/java/action/GlobalController.java b/src/main/resources/modules/SpringBoot/java/action/GlobalController.java
index f9644ed0..46dfc51e 100644
--- a/src/main/resources/modules/SpringBoot/java/action/GlobalController.java
+++ b/src/main/resources/modules/SpringBoot/java/action/GlobalController.java
@@ -5,6 +5,7 @@ import ${basePackage}.frame.auth.LocalData;
import ${basePackage}.config.ActionConfig;
import ${basePackage}.frame.utils.MapperUtil;
import ${basePackage}.frame.utils.FileUtil;
+import com.fasterxml.jackson.core.TreeNode;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.web.servlet.error.ErrorController;
@@ -32,6 +33,7 @@ import org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
+import java.lang.reflect.Parameter;
import java.util.Locale;
import java.util.concurrent.ConcurrentHashMap;
import java.util.regex.Matcher;
@@ -248,25 +250,58 @@ public class GlobalController implements ErrorController {
return fileUploadResponse;
}
-
@RequestMapping("/ajax/{module}/{target}/{method}")
@ResponseBody
- public Object ajax(@PathVariable String module, @PathVariable String target, @PathVariable String method, @RequestBody String param) {
+ public Object ajax(
+ @PathVariable String module,
+ @PathVariable String target,
+ @PathVariable String method,
+ HttpServletRequest request,
+ HttpServletResponse response,
+ @RequestBody(required = false) String data,
+ @RequestParam(name = "file", required = false) MultipartFile file) {
try {
String beanClassName = (ActionConfig.AJAX_PREFIX + module + "/" + target).toLowerCase();
Object ajax = LocalData.getApplicationContext().getBean(beanClassName);
Class ajaxClass = ajax.getClass();
- Method methodC = ajaxClass.getMethod(method, String.class);
- return methodC.invoke(ajax, "");
+
+ Method[] methods = ajaxClass.getDeclaredMethods();
+
+ Method methodC = null;
+ for (Method meth : methods) {
+ if (meth.getName().equals(method)) {
+ methodC = meth;
+ }
+ }
+
+ if (methodC == null) {
+ BaseResponse baseResponse = new BaseResponse();
+ baseResponse.addError(ErrorType.BUSINESS_ERROR, "未找到对应的方法!");
+ }
+
+ Parameter[] parameters = methodC.getParameters();
+ Object[] arg = new Object[parameters.length];
+
+ for (int i = 0; i < parameters.length; i++) {
+ Parameter parameter = parameters[i];
+ if (parameter.getType() == HttpServletRequest.class) {
+ arg[i] = request;
+ } else if (parameter.getType() == HttpServletResponse.class) {
+ arg[i] = response;
+ } else if (parameter.getType() == TreeNode.class) {
+ arg[i] = MapperUtil.toTree(data);
+ } else if (parameter.getType() == String.class) {
+ arg[i] = data;
+ } else if (parameter.getType() == MultipartFile.class) {
+ arg[i] = file;
+ }
+ }
+ return methodC.invoke(ajax, arg);
} catch (BeansException e) {
BaseResponse baseResponse = new BaseResponse();
baseResponse.addError(ErrorType.BUSINESS_ERROR, "未找到对应的目标!");
return baseResponse;
- } catch (NoSuchMethodException e) {
- BaseResponse baseResponse = new BaseResponse();
- baseResponse.addError(ErrorType.BUSINESS_ERROR, "未找到对应的方法!");
- return baseResponse;
} catch (IllegalAccessException e) {
BaseResponse baseResponse = new BaseResponse();
baseResponse.addError(ErrorType.BUSINESS_ERROR, "方法执必须公开!");
diff --git a/src/main/resources/modules/SpringBoot/java/action/ajax/system/DictAjax.java b/src/main/resources/modules/SpringBoot/java/action/ajax/system/DictAjax.java
index a092fd80..a876374b 100644
--- a/src/main/resources/modules/SpringBoot/java/action/ajax/system/DictAjax.java
+++ b/src/main/resources/modules/SpringBoot/java/action/ajax/system/DictAjax.java
@@ -8,6 +8,10 @@ import ${basePackage}.module.system.req.*;
import ${basePackage}.module.system.rsp.*;
import ${basePackage}.frame.base.BaseResponse;
import ${basePackage}.frame.base.ErrorType;
+import ${basePackage}.frame.excel.exception.ReadErrorException;
+import ${basePackage}.frame.excel.exception.TemplateNotMatchException;
+import org.springframework.web.multipart.MultipartFile;
+import com.fasterxml.jackson.core.TreeNode;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
@@ -15,49 +19,50 @@ import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import java.io.IOException;
+import java.net.URLEncoder;
public class DictAjax {
@Autowired
private DictManager dictManager;
- public DictCreateResponse create(String jsonParam) {
+ public DictCreateResponse create(TreeNode jsonParam) {
DictCreateRequest request = MapperUtil.toJava(jsonParam, DictCreateRequest.class);
return dictManager.create(request, LocalData.getToken());
}
- public DictDeleteResponse delete(String jsonParam) {
+ public DictDeleteResponse delete(TreeNode jsonParam) {
DictDeleteRequest request = MapperUtil.toJava(jsonParam, DictDeleteRequest.class);
return dictManager.delete(request, LocalData.getToken());
}
- public DictUpdateResponse update(String jsonParam) {
+ public DictUpdateResponse update(TreeNode jsonParam) {
DictUpdateRequest request = MapperUtil.toJava(jsonParam, DictUpdateRequest.class);
return dictManager.update(request, LocalData.getToken());
}
- public DictFindResponse find(String jsonParam) {
+ public DictFindResponse find(TreeNode jsonParam) {
DictFindRequest request = MapperUtil.toJava(jsonParam, DictFindRequest.class);
return dictManager.find(request, LocalData.getToken());
}
- public DictGetResponse get(String jsonParam) {
+ public DictGetResponse get(TreeNode jsonParam) {
DictGetRequest request = MapperUtil.toJava(jsonParam, DictGetRequest.class);
return dictManager.get(request, LocalData.getToken());
}
- public DictLoadResponse load(String jsonParam) {
+ public DictLoadResponse load(TreeNode jsonParam) {
DictLoadRequest request = MapperUtil.toJava(jsonParam, DictLoadRequest.class);
return dictManager.load(request, LocalData.getToken());
}
- public Object template(String jsonParam){
+ public Object template(){
try {
WSheet sheet = new WSheet<>(DictCreateRequest.class);
byte[] bytes = sheet.getBytes();
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
- headers.setContentDispositionFormData("attachment", new String((sheet.getName() + ".xlsx").getBytes("UTF-8"), "iso-8859-1"));
+ headers.setContentDispositionFormData("attachment", URLEncoder.encode(sheet.getName() + ".xlsx","utf-8"));
return new ResponseEntity<>(bytes, headers, HttpStatus.OK);
} catch (IOException e) {
BaseResponse baseResponse = new BaseResponse();
@@ -65,4 +70,29 @@ public class DictAjax {
return baseResponse;
}
}
+
+ public Object imports(MultipartFile file) {
+ BaseResponse baseResponse = new BaseResponse();
+ try {
+ byte[] bytes = file.getBytes();
+
+ WSheet sheet = new WSheet<>(bytes, DictCreateRequest.class);
+
+ if (sheet.hasError()) {
+ byte[] sheetBytes = sheet.getBytes(true);
+ HttpHeaders headers = new HttpHeaders();
+ headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
+ headers.setContentDispositionFormData("attachment", URLEncoder.encode(sheet.getName() + ".xlsx","utf-8"));
+ return new ResponseEntity<>(sheetBytes, headers, HttpStatus.OK);
+ } else {
+ return baseResponse;
+ }
+ } catch (IOException e) {
+ baseResponse.addError(ErrorType.BUSINESS_ERROR, "上传文件出错");
+ } catch (TemplateNotMatchException | ReadErrorException e) {
+ baseResponse.addError(ErrorType.BUSINESS_ERROR, e.getMessage());
+ }
+
+ return baseResponse;
+ }
}
diff --git a/src/main/resources/modules/SpringBoot/java/action/screen/Index.java b/src/main/resources/modules/SpringBoot/java/action/screen/Index.java
index f3f6075e..b5dbc2c3 100644
--- a/src/main/resources/modules/SpringBoot/java/action/screen/Index.java
+++ b/src/main/resources/modules/SpringBoot/java/action/screen/Index.java
@@ -2,7 +2,7 @@ package ${basePackage}.action.screen;
import ${basePackage}.frame.base.Screen;
import org.springframework.ui.Model;
-import java.util.ArrayList;
+import java.util.HashMap;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@@ -11,13 +11,11 @@ public class Index extends Screen {
@Override
public void exec(Model model, HttpServletRequest request, HttpServletResponse response) {
- model.addAttribute("hello", "Hello world!!!");
- model.addAttribute("status", 0);
-
- ArrayList citys = new ArrayList<>();
- citys.add("北京");
- citys.add("上海");
- citys.add("深圳");
- model.addAttribute("citys", citys);
+ // 获取配置
+ HashMap prop = new HashMap<>();
+ prop.put("open", true);//是否保持一个子菜单展开
+ prop.put("coll", true);//左侧菜单是否收缩
+ prop.put("tran", false);//是否展示动画
+ model.addAttribute("prop", prop);
}
}
diff --git a/src/main/resources/modules/SpringBoot/java/frame/excel/WSheet.java b/src/main/resources/modules/SpringBoot/java/frame/excel/WSheet.java
index 2b4b45db..9ef34e26 100644
--- a/src/main/resources/modules/SpringBoot/java/frame/excel/WSheet.java
+++ b/src/main/resources/modules/SpringBoot/java/frame/excel/WSheet.java
@@ -9,6 +9,8 @@ import ${basePackage}.frame.utils.StringUtil;
import ${basePackage}.frame.utils.ValidationUtil;
import ${basePackage}.frame.excel.annotation.*;
import ${basePackage}.frame.excel.converter.*;
+import ${basePackage}.frame.excel.exception.ReadErrorException;
+import ${basePackage}.frame.excel.exception.TemplateNotMatchException;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
@@ -207,7 +209,7 @@ public class WSheet implements Serializable, Cloneable {
* @throws IOException
1:输入流无法转为Excel文件 - 请检查输入的 bytes 是否正确;
* 2:输入流关闭出错;
*/
- public WSheet(byte[] bytes, Class clazz) throws IOException {
+ public WSheet(byte[] bytes, Class clazz) throws TemplateNotMatchException, ReadErrorException {
Workbook workbook = null;
InputStream is = null;
boolean flag;
@@ -228,10 +230,14 @@ public class WSheet implements Serializable, Cloneable {
}
}
if (is != null) {
- is.close();
+ try {
+ is.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
}
if (!flag) {
- throw new RuntimeException("不支持的文件类型");
+ throw new ReadErrorException("读取Excel文件错误");
}
//第一张Sheet表
Sheet sheet = workbook.getSheetAt(0);
@@ -251,7 +257,7 @@ public class WSheet implements Serializable, Cloneable {
//检查列数量
List list = initColumns(clazz);
if (list.size() != columnSum) {
- throw new RuntimeException("与模板列数量不同。");
+ throw new TemplateNotMatchException("与模板列数量不同。");
} else {
for (int i = 0; i < list.size(); i++) {
WColumn wColumn = list.get(i);
@@ -261,7 +267,7 @@ public class WSheet implements Serializable, Cloneable {
headValue = headValue.replace(" ", "");
if (!wColumn.getName().equals(headValue)) {
- throw new RuntimeException("第" + (i + 1) + "项,不匹配的列名," + wColumn.getName() + "和" + headValue);
+ throw new TemplateNotMatchException("第" + (i + 1) + "项,不匹配的列名," + wColumn.getName() + "和" + headValue);
}
}
}
diff --git a/src/main/resources/modules/SpringBoot/java/frame/excel/exception/ReadErrorException.java b/src/main/resources/modules/SpringBoot/java/frame/excel/exception/ReadErrorException.java
new file mode 100644
index 00000000..f9ad2807
--- /dev/null
+++ b/src/main/resources/modules/SpringBoot/java/frame/excel/exception/ReadErrorException.java
@@ -0,0 +1,10 @@
+package ${basePackage}.frame.excel.exception;
+
+public class ReadErrorException extends Exception {
+ public ReadErrorException() {
+ }
+
+ public ReadErrorException(String s) {
+ super(s);
+ }
+}
diff --git a/src/main/resources/modules/SpringBoot/java/frame/excel/exception/TemplateNotMatchException.java b/src/main/resources/modules/SpringBoot/java/frame/excel/exception/TemplateNotMatchException.java
new file mode 100644
index 00000000..14691f7e
--- /dev/null
+++ b/src/main/resources/modules/SpringBoot/java/frame/excel/exception/TemplateNotMatchException.java
@@ -0,0 +1,10 @@
+package ${basePackage}.frame.excel.exception;
+
+public class TemplateNotMatchException extends Exception {
+ public TemplateNotMatchException() {
+ }
+
+ public TemplateNotMatchException(String s) {
+ super(s);
+ }
+}
diff --git a/src/main/resources/modules/SpringBoot/java/module/system/req/DictCreateRequest.java b/src/main/resources/modules/SpringBoot/java/module/system/req/DictCreateRequest.java
index 1c9f7cb6..9eb76a35 100644
--- a/src/main/resources/modules/SpringBoot/java/module/system/req/DictCreateRequest.java
+++ b/src/main/resources/modules/SpringBoot/java/module/system/req/DictCreateRequest.java
@@ -2,7 +2,9 @@ package ${basePackage}.module.system.req;
import org.hibernate.validator.constraints.Length;
import ${basePackage}.frame.base.BaseRequest;
-
+import ${basePackage}.frame.excel.annotation.ColumnDescription;
+import ${basePackage}.frame.excel.annotation.ColumnName;
+import xyz.wbsite.frame.excel.annotation.SheetName;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
@@ -13,11 +15,14 @@ import javax.validation.constraints.NotNull;
* @version 0.0.1
* @since 2019-07-20
*/
+@SheetName("字典")
public class DictCreateRequest extends BaseRequest {
/**
* 字典名称
*/
+ @ColumnName("字典名称")
+ @ColumnDescription("1-50长度的字典名称")
@NotEmpty(message = "字典名称不能为空")
@Length(min = 1, max = 50, message = "字典名称长度不合法(1-50)")
private String dictName;
@@ -25,6 +30,8 @@ public class DictCreateRequest extends BaseRequest {
/**
* 字典代码
*/
+ @ColumnName("字典代码")
+ @ColumnDescription("1-50长度的字典代码")
@NotEmpty(message = "字典代码不能为空")
@Length(min = 1, max = 50, message = "字典代码长度不合法(1-50)")
private String dictCode;
@@ -32,6 +39,8 @@ public class DictCreateRequest extends BaseRequest {
/**
* 字典版本号
*/
+ @ColumnName("字典版本号")
+ @ColumnDescription("字典版本号.例如:(yyyy-MM-dd HH:mm:ss)")
@NotEmpty(message = "字典版本号不能为空")
@Length(min = 1, max = 50, message = "字典版本号长度不合法(1-50)")
private String version;
@@ -39,6 +48,8 @@ public class DictCreateRequest extends BaseRequest {
/**
* 是否有效
*/
+ @ColumnName("是否有效")
+ @ColumnDescription("true/false")
@NotNull(message = "是否有效不能为NULL")
private Boolean valid;
diff --git a/src/main/resources/modules/SpringBoot/resources/static/js/ajax.js b/src/main/resources/modules/SpringBoot/resources/static/js/ajax.js
deleted file mode 100644
index 02ab8ddf..00000000
--- a/src/main/resources/modules/SpringBoot/resources/static/js/ajax.js
+++ /dev/null
@@ -1,302 +0,0 @@
-jsonService = axios.create({
- method: 'post',
- timeout: 30000,
- baseURL: '/ajax',
- headers: {'Content-Type': 'application/json;charset=UTF-8'},
-});
-downloadService = axios.create({
- method: 'post',
- timeout: 30000,
- baseURL: '/ajax',
- responseType: 'blob',
- headers: {'Content-Type': 'application/json;charset=UTF-8'},
-});
-uploadService = axios.create({
- method: 'post',
- timeout: 30000,
- baseURL: '/ajax',
- headers: {'Content-Type': 'multipart/form-data'},
- onUploadProgress: function (progressEvent) {
- var complete = (progressEvent.loaded / progressEvent.total * 100 | 0) + '%'
- nav.tip.show("上传中(" + complete + ")")
- },
-});
-
-// 添加JSON请求拦截器
-jsonService.interceptors.request.use(function (config) {
- // 在发送请求之前做些什么
- nav.bar.show();
- nav.tip.show();
- return config;
-}, function (error) {
- return Promise.reject(error);
-});
-uploadService.interceptors.request.use(function (config) {
- // 在发送请求之前做些什么
- nav.bar.show();
- nav.tip.show("上传中 ...");
- return config;
-}, function (error) {
- return Promise.reject(error);
-});
-
-// 添加JSON响应拦截器
-jsonService.interceptors.response.use(function (response) {
- // 对响应数据做点什么
- nav.tip.close();
- try {//确保服务器正确返回Json
- if(response.data.errors.length > 0){
- console.error(response.data.errors)
- }
- nav.bar.finish();
- }catch (e){
- nav.bar.error();
- response.data = {errors: [{message: '服务器响应错误'}]};
- }
- return response;
-}, function (error) {
- // 对响应错误做点什么,并返回错误结果
- nav.tip.close();
- nav.bar.error();
- const rsp = {errors: []};
- if (!error.response) {
- rsp.errors.push({message: error.message});
- } else {
- rsp.errors.push(handleError(error.response.status));
- }
- return Promise.reject(rsp);
-});
-// 添加Upload响应拦截器
-uploadService.interceptors.response.use(function (response) {
- // 对响应数据做点什么
- nav.tip.close();
- try {//确保服务器正确返回Json
- if(response.data.errors.length > 0){
- console.error(response.data.errors)
- }
- nav.bar.finish();
- }catch (e){
- nav.bar.error();
- response.data = {errors: [{message: '服务器响应错误'}]};
- }
- return response;
-}, function (error) {
- // 对响应错误做点什么,并返回错误结果
- nav.tip.close();
- nav.bar.error();
- const rsp = {errors: []};
- if (!error.response) {
- rsp.errors.push({message: error.message});
- } else {
- rsp.errors.push(handleError(error.response.status));
- }
- return Promise.reject(rsp);
-});
-function handerResponse(){
-
-}
-function handleError(status){
- switch (status) {
- case 401:
- return {message: "未授权,请登录(401)"};
- case 403:
- return {message: "拒绝访问(403)"};
- case 404:
- return {message: "请求地址错误(404)"};
- case 408:
- return {message: "请求超时(408)"};
- case 500:
- return {message: "服务器内部错误(500)"};
- case 501:
- return {message: "服务未实现(501)"};
- default:
- return {message: "请求错误(" + error.response.status + ")"};
- }
-}
-jsonRequest = function (data) {
- return jsonService.request(data)
- .then(function (response) {
- return Promise.resolve(response.data);
- }, function (response) {
- return Promise.resolve(response);
- })
-};
-upRequest = function (data) {
- data.url='/upload';
- return uploadService.request(data)
- .then(function (response) {
- return Promise.resolve(response.data);
- }, function (response) {
- return Promise.resolve(response);
- })
-};
-downRequest = function (data) {
- return downloadService.request(data)
- .then(function (response) {
- if (!response.data) {
- return Promise.resolve({errors: [{message: '下载错误'}]});
- }
- // 获取响应header中文件信息
- var dis = response.headers['content-disposition'];
- // 正则匹配文件名
- var fileName = dis.match(/filename="(.*\..*)"/)[1];
- // 模拟下载
- var url = window.URL.createObjectURL(new Blob([response.data]));
- var link = document.createElement('a')
- link.style.display = 'none';
- link.href = url;
- link.setAttribute('download', fileName)
- document.body.appendChild(link)
- link.click();
- return Promise.resolve({errors: []});
- }, function (response) {
- return Promise.resolve(response);
- })
-};
-window.ajax = {
- authLogin: function (data) {
- return jsonRequest({
- url: "/system/Auth/login",
- data: JSON.stringify(data),
- })
- },
- fileUpload: function (file) {
- var fd = new FormData();
- fd.append("file", file);
- return upRequest({
- data: fd
- })
- },
- dictCreate: function (data) {
- return jsonRequest({
- url: "/system/Dict/create",
- data: JSON.stringify(data),
- })
- },
- dictUpdate: function (data) {
- return jsonRequest({
- url: "/system/Dict/update",
- data: JSON.stringify(data),
- })
- },
- dictDelete: function (data) {
- return jsonRequest({
- url: "/system/Dict/delete",
- data: JSON.stringify(data),
- })
- },
- dictFind: function (data) {
- return jsonRequest({
- url: "/system/Dict/find",
- data: JSON.stringify(data),
- })
- },
- dictGet: function (data) {
- return jsonRequest({
- url: "/system/Dict/get",
- data: JSON.stringify(data),
- })
- },
- dictLoad: function (data) {
- return jsonRequest({
- url: "/system/Dict/load",
- data: JSON.stringify(data),
- })
- },
- dictTemplate: function (data) {
- return downRequest({
- url: "/system/Dict/template",
- data: JSON.stringify(data),
- })
- },
- dictItemCreate: function (data) {
- return jsonRequest({
- url: "/system/DictItem/create",
- data: JSON.stringify(data),
- })
- },
- dictItemUpdate: function (data) {
- return jsonRequest({
- url: "/system/DictItem/update",
- data: JSON.stringify(data),
- })
- },
- dictItemDelete: function (data) {
- return jsonRequest({
- url: "/system/DictItem/delete",
- data: JSON.stringify(data),
- })
- },
- dictItemFind: function (data) {
- return jsonRequest({
- url: "/system/DictItem/find",
- data: JSON.stringify(data),
- })
- },
- dictItemGet: function (data) {
- return jsonRequest({
- url: "/system/DictItem/get",
- data: JSON.stringify(data),
- })
- },
-<#list modules as db>
-<#list db.tables as table>
-<#if table.getCreate()>
- ${table.getFName()}Create: function (data) {
- return jsonRequest({
- url: "/${db.moduleName}/${table.getCName()}/create",
- data: JSON.stringify(data),
- })
- },
-#if>
-<#if table.getDelete()>
- ${table.getFName()}Delete: function (data) {
- return jsonRequest({
- url: "/${db.moduleName}/${table.getCName()}/delete",
- data: JSON.stringify(data),
- })
- },
-#if>
-<#if table.getUpdate()>
- ${table.getFName()}Update: function (data) {
- return jsonRequest({
- url: "/${db.moduleName}/${table.getCName()}/update",
- data: JSON.stringify(data),
- })
- },
-#if>
-<#if table.getFind()>
- ${table.getFName()}Find: function (data) {
- return jsonRequest({
- url: "/${db.moduleName}/${table.getCName()}/find",
- data: JSON.stringify(data),
- })
- },
-#if>
-<#if table.getGet()>
- ${table.getFName()}Get: function(data) {
- return jsonRequest({
- url: "/${db.moduleName}/${table.getCName()}/get",
- data: JSON.stringify(data),
- })
- },
-#if>
-<#if table.getSearch()>
- ${table.getFName()}Search: function (data) {
- return jsonRequest({
- url: "/${db.moduleName}/${table.getCName()}/search",
- data: JSON.stringify(data),
- })
- },
-#if>
-<#if table.getGetAll()>
- ${table.getFName()}GetAll: function (data) {
- return jsonRequest({
- url: "/${db.moduleName}/${table.getCName()}/getAll",
- data: JSON.stringify(data),
- })
- },
-#if>
-#list>
-#list>
-}
\ No newline at end of file
diff --git a/src/main/resources/modules/SpringBoot/resources/static/js/ajax_es6.js b/src/main/resources/modules/SpringBoot/resources/static/js/ajax_es6.js
deleted file mode 100644
index bc43b6c3..00000000
--- a/src/main/resources/modules/SpringBoot/resources/static/js/ajax_es6.js
+++ /dev/null
@@ -1,165 +0,0 @@
-import axios from 'axios'
-// 创建axios实例
-const service = axios.create({
- baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url
- withCredentials: true, // send cookies when cross-domain requests
- method: 'post', // request method
- timeout: 5000 // request timeout
-})
-
-// 添加请求拦截器
-service.interceptors.request.use(config => {
- // 在发送请求之前做些什么
- if (config.url === '/upload') {
- console.log()
- } else {
- console.log()
- }
- return config
-}, error => {
- // 对请求错误做些什么
- return Promise.reject(error)
-})
-
-// 添加响应拦截器
-service.interceptors.response.use(response => {
- // 对响应数据做点什么
- return response
-}, error => {
- // 对响应错误做点什么
- const rsp = { errors: [] }
- if (!error.response) {
- rsp.errors.push({ message: error.message })
- } else {
- switch (error.response.status) {
- case 401:
- rsp.errors.push({ message: '未授权,请登录(401)' })
- break
- case 403:
- rsp.errors.push({ message: '拒绝访问(403)' })
- break
- case 404:
- rsp.errors.push({ message: '请求地址错误(404)' })
- break
- case 408:
- rsp.errors.push({ message: '请求超时(408)' })
- break
- case 500:
- rsp.errors.push({ message: '服务器内部错误(500)' })
- break
- case 501:
- rsp.errors.push({ message: '服务未实现(501)' })
- break
- default:
- rsp.errors.push({ message: '请求错误(' + error.response.status + ')' })
- break
- }
- }
- return Promise.reject(rsp)
-})
-export function jsonRequest(config) {
- return service.request({
- params: {
- method: config.method
- },
- url: '/ajax',
- headers: { 'Content-Type': 'text/plain' },
- data: config.data
- }).then(response => {
- return Promise.resolve(response.data)
- }, response => {
- return Promise.resolve(response)
- })
-}
-export function fileRequest(config) {
- return service.request({
- url: '/upload',
- data: config.data,
- headers: { 'Content-Type': 'multipart/form-data' },
- onUploadProgress: progressEvent => {
- console.log((progressEvent.loaded / progressEvent.total * 100 | 0) + '%')
- }
- }).then(response => {
- return Promise.resolve(response.data)
- }, response => {
- return Promise.resolve(response)
- })
-}
-
-const ajax = {
- example: data => {
- return jsonRequest({
- method: 'ajax.example.example',
- data: data
- })
- },
- fileUpload: file => {
- const fd = new FormData()
- fd.append('file', file)
- return fileRequest({
- data: fd
- })
- },
-<#list modules as db>
-<#list db.tables as table>
-<#if table.getCreate()>
- ${table.getFName()}Create: data => {
- return jsonRequest({
- method:'ajax.${db.moduleName}.${table.getLName()}.create',
- data: JSON.stringify(data),
- })
- },
-#if>
-<#if table.getDelete()>
- ${table.getFName()}Delete: data => {
- return jsonRequest({
- method:'ajax.${db.moduleName}.${table.getLName()}.delete',
- data: JSON.stringify(data),
- })
- },
-#if>
-<#if table.getUpdate()>
- ${table.getFName()}Update: data => {
- return jsonRequest({
- method:'ajax.${db.moduleName}.${table.getLName()}.update',
- data: JSON.stringify(data),
- })
- },
-#if>
-<#if table.getFind()>
- ${table.getFName()}Find: data => {
- return jsonRequest({
- method:'ajax.${db.moduleName}.${table.getLName()}.find',
- data: JSON.stringify(data),
- })
- },
-#if>
-<#if table.getGet()>
- ${table.getFName()}Get: data => {
- return jsonRequest({
- method:'ajax.${db.moduleName}.${table.getLName()}.get',
- data: JSON.stringify(data),
- })
- },
-#if>
-<#if table.getSearch()>
- ${table.getFName()}Search: data => {
- return jsonRequest({
- method:'ajax.${db.moduleName}.${table.getLName()}.search',
- data: JSON.stringify(data),
- })
- },
-#if>
-<#if table.getGetAll()>
- ${table.getFName()}GetAll: data => {
- return jsonRequest({
- method:'ajax.${db.moduleName}.${table.getLName()}.get.all',
- data: JSON.stringify(data),
- })
- },
-#if>
-#list>
-#list>
-}
-
-export default ajax
\ No newline at end of file
diff --git a/src/main/resources/modules/SpringBoot/resources/templates/control/nav.ftl b/src/main/resources/modules/SpringBoot/resources/templates/control/nav.ftl
index d1576067..abed9760 100644
--- a/src/main/resources/modules/SpringBoot/resources/templates/control/nav.ftl
+++ b/src/main/resources/modules/SpringBoot/resources/templates/control/nav.ftl
@@ -1,74 +1,287 @@
\ No newline at end of file
diff --git a/src/main/resources/modules/SpringBoot/resources/templates/layout/default.ftl b/src/main/resources/modules/SpringBoot/resources/templates/layout/default.ftl
index 9ee558d7..fa93dd22 100644
--- a/src/main/resources/modules/SpringBoot/resources/templates/layout/default.ftl
+++ b/src/main/resources/modules/SpringBoot/resources/templates/layout/default.ftl
@@ -6,7 +6,6 @@
-
diff --git a/src/main/resources/modules/SpringBoot/resources/templates/screen/home.ftl b/src/main/resources/modules/SpringBoot/resources/templates/screen/home.ftl
index 60dd3df8..6250d9f5 100644
--- a/src/main/resources/modules/SpringBoot/resources/templates/screen/home.ftl
+++ b/src/main/resources/modules/SpringBoot/resources/templates/screen/home.ftl
@@ -254,6 +254,18 @@
${r"${r'${hello}'}"}
+ 布尔值输出
+ ${r"${true?c}"}
+
+
+ 三元表达式
+ ${r"${true?string('yes','no')}"}
+
+
+ 输出当前日期
+ ${r'${.now?string["yyyy-MM-dd HH:mm:ss"]}'}
+
+
diff --git a/src/main/resources/modules/SpringBoot/resources/templates/screen/index.ftl b/src/main/resources/modules/SpringBoot/resources/templates/screen/index.ftl
index 107e3a50..89493e1e 100644
--- a/src/main/resources/modules/SpringBoot/resources/templates/screen/index.ftl
+++ b/src/main/resources/modules/SpringBoot/resources/templates/screen/index.ftl
@@ -35,7 +35,7 @@
首页
@@ -76,6 +76,7 @@
@@ -146,11 +147,11 @@
#head .collapseSwitch a {
display: inline-block;
- transition: all 1s;
+ transition: all .5s;
}
#head .collapseSwitch a.reversal {
- transform: rotate(90deg);
+ transform: rotate(-180deg);
}
#head a {
@@ -216,6 +217,10 @@
padding: 0;
height: 100%;
}
+
+ #content div[role=tab]{
+ padding: 0 10px;
+ }