From d44adf33fc20494004e3cd4526d02cae70949a78 Mon Sep 17 00:00:00 2001 From: wanggeng <450292408@qq.com> Date: Wed, 13 Apr 2022 18:46:23 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BA=86=E8=A7=86=E9=A2=91?= =?UTF-8?q?=E3=80=81=E5=9B=BE=E7=89=87=E3=80=81=E9=9F=B3=E9=A2=91=E3=80=81?= =?UTF-8?q?=E9=99=84=E4=BB=B6=E7=BB=84=E4=BB=B6=E5=8A=9F=E8=83=BD=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=EF=BC=8C=E8=B0=83=E6=95=B4=E7=BB=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/design/FormDesignController.java | 4 +- .../FormDesignStaticController.java | 4 +- .../staticfile/FormStaticController.java | 38 + .../form/pojo/vos/design/FormDesignVO.java | 68 +- .../service/design/IFormDesignService.java | 4 +- .../design/impl/FormDesignServiceImpl.java | 64 +- .../impl/FormReportRouteServiceImpl.java | 27 +- .../modules/components/checkbox.js | 30 +- .../form-design/modules/components/date.js | 6 +- .../form-design/modules/components/grid.js | 2 +- .../form-design/modules/components/input.js | 6 +- .../modules/components/layCarousel.js | 2 +- .../form-design/modules/components/layRate.js | 6 +- .../form-design/modules/components/laySign.js | 6 +- .../modules/components/laySlider.js | 6 +- .../modules/components/laySwitch.js | 6 +- .../modules/components/numberInput.js | 10 +- .../modules/components/password.js | 6 +- .../form-design/modules/components/radio.js | 6 +- .../form-design/modules/components/select.js | 10 +- .../modules/components/textarea.js | 8 +- .../modules/components/uploadImage.js | 4 +- .../form-design/modules/formDesigner.js | 1257 +---------------- .../static/form-design/modules/formPreview.js | 22 +- .../main/resources/static/form/css/form.css | 70 + .../resources/static/form/js/form-util.js | 478 +++++++ .../templates/form/get-save-page-code.html | 4 +- .../main/resources/templates/form/list.html | 25 +- .../templates/ftl}/page/app/app-form-save.ftl | 0 .../ftl}/page/app/app-form-update.ftl | 0 .../templates/ftl}/page/web/form-save.ftl | 76 +- .../templates/ftl}/page/web/form-update.ftl | 0 32 files changed, 840 insertions(+), 1415 deletions(-) create mode 100644 module-form/src/main/java/ink/wgink/module/form/controller/staticfile/FormStaticController.java create mode 100644 module-form/src/main/resources/static/form/css/form.css create mode 100644 module-form/src/main/resources/static/form/js/form-util.js rename module-form/src/main/{java/ink/wgink/module/form/template => resources/templates/ftl}/page/app/app-form-save.ftl (100%) rename module-form/src/main/{java/ink/wgink/module/form/template => resources/templates/ftl}/page/app/app-form-update.ftl (100%) rename module-form/src/main/{java/ink/wgink/module/form/template => resources/templates/ftl}/page/web/form-save.ftl (63%) rename module-form/src/main/{java/ink/wgink/module/form/template => resources/templates/ftl}/page/web/form-update.ftl (100%) diff --git a/module-form/src/main/java/ink/wgink/module/form/controller/api/design/FormDesignController.java b/module-form/src/main/java/ink/wgink/module/form/controller/api/design/FormDesignController.java index feb2147d..6e1cba33 100644 --- a/module-form/src/main/java/ink/wgink/module/form/controller/api/design/FormDesignController.java +++ b/module-form/src/main/java/ink/wgink/module/form/controller/api/design/FormDesignController.java @@ -17,6 +17,8 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.io.IOException; + @Api(tags = ISystemConstant.API_TAGS_SYSTEM_PREFIX + "表单设计") @RestController @RequestMapping(ISystemConstant.API_PREFIX + "/form-design") @@ -28,7 +30,7 @@ public class FormDesignController extends DefaultBaseController { @ApiOperation(value = "保存表单", notes = "保存表单接口") @ApiResponses({@ApiResponse(code = 400, message = "请求失败", response = ErrorResult.class)}) @PostMapping("save") - public SuccessResult save(@RequestBody FormDesignVO formDesignVO) { + public SuccessResult save(@RequestBody FormDesignVO formDesignVO) throws IOException { formDesignService.save(formDesignVO); return new SuccessResult(); } diff --git a/module-form/src/main/java/ink/wgink/module/form/controller/staticfile/FormDesignStaticController.java b/module-form/src/main/java/ink/wgink/module/form/controller/staticfile/FormDesignStaticController.java index 12b9359e..475d452d 100644 --- a/module-form/src/main/java/ink/wgink/module/form/controller/staticfile/FormDesignStaticController.java +++ b/module-form/src/main/java/ink/wgink/module/form/controller/staticfile/FormDesignStaticController.java @@ -14,16 +14,16 @@ package ink.wgink.module.form.controller.staticfile; import ink.wgink.util.ResourceUtil; import ink.wgink.util.request.StaticResourceRequestUtil; +import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.InputStream; -@RestController +@Controller @RequestMapping("static/form-design") public class FormDesignStaticController { diff --git a/module-form/src/main/java/ink/wgink/module/form/controller/staticfile/FormStaticController.java b/module-form/src/main/java/ink/wgink/module/form/controller/staticfile/FormStaticController.java new file mode 100644 index 00000000..35794df8 --- /dev/null +++ b/module-form/src/main/java/ink/wgink/module/form/controller/staticfile/FormStaticController.java @@ -0,0 +1,38 @@ +package ink.wgink.module.form.controller.staticfile; + +import ink.wgink.util.ResourceUtil; +import ink.wgink.util.request.StaticResourceRequestUtil; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.InputStream; + +/** + * @ClassName: FormStaticController + * @Description: 表单静态资源 + * @Author: wanggeng + * @Date: 2022/4/13 14:27 + * @Version: 1.0 + */ + +@Controller +@RequestMapping("static/form") +public class FormStaticController { + + @GetMapping("css/{fileName}") + public void css(HttpServletResponse httpServletResponse, @PathVariable("fileName") String fileName) throws IOException { + InputStream inputStream = ResourceUtil.getJarResourceInputStream("static/form/css/" + fileName); + StaticResourceRequestUtil.download(httpServletResponse, inputStream, fileName); + } + + @GetMapping("js/{fileName}") + public void js(HttpServletResponse httpServletResponse, @PathVariable("fileName") String fileName) throws IOException { + InputStream inputStream = ResourceUtil.getJarResourceInputStream("static/form/js/" + fileName); + StaticResourceRequestUtil.download(httpServletResponse, inputStream, fileName); + } + +} diff --git a/module-form/src/main/java/ink/wgink/module/form/pojo/vos/design/FormDesignVO.java b/module-form/src/main/java/ink/wgink/module/form/pojo/vos/design/FormDesignVO.java index 55fbb1e9..9823324d 100644 --- a/module-form/src/main/java/ink/wgink/module/form/pojo/vos/design/FormDesignVO.java +++ b/module-form/src/main/java/ink/wgink/module/form/pojo/vos/design/FormDesignVO.java @@ -1,6 +1,10 @@ package ink.wgink.module.form.pojo.vos.design; import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; + +import java.util.ArrayList; +import java.util.List; /** * @Description: 表单设计 @@ -15,12 +19,7 @@ public class FormDesignVO { private String formSummary; private Integer formVersion; private JSONArray data; - private String savePageCode; - private String updatePageCode; - private String showPageCode; - private String appSavePageCode; - private String appUpdatePageCode; - private String appShowPageCode; + private List fields; public String getFormCode() { return formCode == null ? "" : formCode.trim(); @@ -62,51 +61,32 @@ public class FormDesignVO { this.data = data; } - public String getSavePageCode() { - return savePageCode == null ? "" : savePageCode.trim(); + public List getFields() { + return fields == null ? new ArrayList<>() : fields; } - public void setSavePageCode(String savePageCode) { - this.savePageCode = savePageCode; + public void setFields(List fields) { + this.fields = fields; } - public String getUpdatePageCode() { - return updatePageCode == null ? "" : updatePageCode.trim(); - } + public static class Field { + private JSONObject data; + private String html; - public void setUpdatePageCode(String updatePageCode) { - this.updatePageCode = updatePageCode; - } + public JSONObject getData() { + return data; + } - public String getShowPageCode() { - return showPageCode == null ? "" : showPageCode.trim(); - } + public void setData(JSONObject data) { + this.data = data; + } - public void setShowPageCode(String showPageCode) { - this.showPageCode = showPageCode; - } + public String getHtml() { + return html == null ? "" : html.trim(); + } - public String getAppSavePageCode() { - return appSavePageCode == null ? "" : appSavePageCode.trim(); - } - - public void setAppSavePageCode(String appSavePageCode) { - this.appSavePageCode = appSavePageCode; - } - - public String getAppUpdatePageCode() { - return appUpdatePageCode == null ? "" : appUpdatePageCode.trim(); - } - - public void setAppUpdatePageCode(String appUpdatePageCode) { - this.appUpdatePageCode = appUpdatePageCode; - } - - public String getAppShowPageCode() { - return appShowPageCode == null ? "" : appShowPageCode.trim(); - } - - public void setAppShowPageCode(String appShowPageCode) { - this.appShowPageCode = appShowPageCode; + public void setHtml(String html) { + this.html = html; + } } } diff --git a/module-form/src/main/java/ink/wgink/module/form/service/design/IFormDesignService.java b/module-form/src/main/java/ink/wgink/module/form/service/design/IFormDesignService.java index 6da063b8..1216e234 100644 --- a/module-form/src/main/java/ink/wgink/module/form/service/design/IFormDesignService.java +++ b/module-form/src/main/java/ink/wgink/module/form/service/design/IFormDesignService.java @@ -2,6 +2,8 @@ package ink.wgink.module.form.service.design; import ink.wgink.module.form.pojo.vos.design.FormDesignVO; +import java.io.IOException; + /** * @Description: 表单设计 * @Author: WenG @@ -15,6 +17,6 @@ public interface IFormDesignService { * * @param formDesignVO */ - void save(FormDesignVO formDesignVO); + void save(FormDesignVO formDesignVO) throws IOException; } diff --git a/module-form/src/main/java/ink/wgink/module/form/service/design/impl/FormDesignServiceImpl.java b/module-form/src/main/java/ink/wgink/module/form/service/design/impl/FormDesignServiceImpl.java index 99a14f2d..0295351a 100644 --- a/module-form/src/main/java/ink/wgink/module/form/service/design/impl/FormDesignServiceImpl.java +++ b/module-form/src/main/java/ink/wgink/module/form/service/design/impl/FormDesignServiceImpl.java @@ -3,9 +3,14 @@ package ink.wgink.module.form.service.design.impl; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import freemarker.template.Configuration; +import freemarker.template.Template; +import freemarker.template.TemplateException; import ink.wgink.common.base.DefaultBaseService; import ink.wgink.exceptions.ParamsException; import ink.wgink.exceptions.PropertiesException; +import ink.wgink.exceptions.base.SystemException; +import ink.wgink.interfaces.consts.ISystemConstant; import ink.wgink.module.form.consts.IFormDesignConst; import ink.wgink.module.form.enums.design.FormFieldTypeEnum; import ink.wgink.module.form.enums.design.FormStatusEnum; @@ -17,13 +22,18 @@ import ink.wgink.module.form.service.design.IFormDesignService; import ink.wgink.module.form.service.design.IFormFieldService; import ink.wgink.module.form.service.design.IFormService; import ink.wgink.properties.form.FormProperties; +import ink.wgink.util.HtmlHelper; import ink.wgink.util.date.DateUtil; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import javax.annotation.PostConstruct; +import java.io.IOException; +import java.io.StringWriter; import java.util.ArrayList; import java.util.List; +import java.util.Map; /** * @Description: 表单设计 @@ -40,9 +50,15 @@ public class FormDesignServiceImpl extends DefaultBaseService implements IFormDe private IFormService formService; @Autowired private IFormFieldService formFieldService; + private Configuration configuration = new Configuration(Configuration.getVersion()); + + @PostConstruct + private void init() { + configuration.setClassForTemplateLoading(FormDesignServiceImpl.class, "/templates/ftl"); + } @Override - public void save(FormDesignVO formDesignVO) { + public void save(FormDesignVO formDesignVO) throws IOException { if (StringUtils.isBlank(formProperties.getTemplatePath())) { throw new PropertiesException("未配置模板路径"); } @@ -75,12 +91,23 @@ public class FormDesignServiceImpl extends DefaultBaseService implements IFormDe formVO.setFormStatus(FormStatusEnum.ACTIVE.getValue()); formVO.setFormVersion(version); formVO.setFormSourceData(JSON.toJSONString(formDesignVO.getData())); - formVO.setSavePageCode(formDesignVO.getSavePageCode()); - formVO.setUpdatePageCode(formDesignVO.getUpdatePageCode()); - formVO.setShowPageCode(formDesignVO.getShowPageCode()); - formVO.setAppSavePageCode(formDesignVO.getAppSavePageCode()); - formVO.setAppUpdatePageCode(formDesignVO.getAppUpdatePageCode()); - formVO.setAppShowPageCode(formDesignVO.getAppShowPageCode()); + + // 美化代码 + for (FormDesignVO.Field field : formDesignVO.getFields()) { + String fieldCode = HtmlHelper.formatHtml(field.getHtml(), "\t", 4); + field.setHtml(fieldCode); + } + + Map model = getHashMap(4); + model.put("fields", formDesignVO.getFields()); + + String savePageCode = getTemplateCode("/page/web/form-save.ftl", model); + formVO.setSavePageCode(savePageCode); +// formVO.setUpdatePageCode(formDesignVO.getUpdatePageCode()); +// formVO.setShowPageCode(formDesignVO.getShowPageCode()); +// formVO.setAppSavePageCode(formDesignVO.getAppSavePageCode()); +// formVO.setAppUpdatePageCode(formDesignVO.getAppUpdatePageCode()); +// formVO.setAppShowPageCode(formDesignVO.getAppShowPageCode()); String formId = formService.saveReturnId(formVO); LOG.debug("保存表单字段"); @@ -199,5 +226,28 @@ public class FormDesignServiceImpl extends DefaultBaseService implements IFormDe return null; } + /** + * 获取模板code + * + * @param fileName + * @param model + * @return + * @throws IOException + */ + private String getTemplateCode(String fileName, Map model) throws IOException { + Template template = getTemplate(fileName); + StringWriter stringWriter = new StringWriter(); + try { + template.process(model, stringWriter); + } catch (TemplateException e) { + LOG.error(e.getMessage(), e); + throw new SystemException("模板错误"); + } + return stringWriter.toString(); + } + + private Template getTemplate(String fileName) throws IOException { + return configuration.getTemplate(fileName, ISystemConstant.CHARSET_UTF8); + } } diff --git a/module-form/src/main/java/ink/wgink/module/form/service/report/impl/FormReportRouteServiceImpl.java b/module-form/src/main/java/ink/wgink/module/form/service/report/impl/FormReportRouteServiceImpl.java index fbbc7188..9c31c937 100644 --- a/module-form/src/main/java/ink/wgink/module/form/service/report/impl/FormReportRouteServiceImpl.java +++ b/module-form/src/main/java/ink/wgink/module/form/service/report/impl/FormReportRouteServiceImpl.java @@ -15,8 +15,8 @@ import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; -import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer; +import javax.annotation.PostConstruct; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; @@ -34,10 +34,16 @@ import java.util.Map; @Service public class FormReportRouteServiceImpl extends DefaultBaseService implements IFormReportRouteService { - @Autowired - private FreeMarkerConfigurer freeMarkerConfigurer; @Autowired private IFormService formService; + private Configuration configuration = new Configuration(Configuration.getVersion()); + + @PostConstruct + private void init() { + StringTemplateLoader stringTemplateLoader = new StringTemplateLoader(); + configuration.setTemplateLoader(stringTemplateLoader); + configuration.setDefaultEncoding(ISystemConstant.CHARSET_UTF8); + } @Override public void save(String formCode, Integer formVersion, HttpSession httpSession, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) { @@ -224,21 +230,8 @@ public class FormReportRouteServiceImpl extends DefaultBaseService implements IF return formPO; } - /** - * 获取配置 - * - * @return - */ - private Configuration getConfiguration() { - StringTemplateLoader stringTemplateLoader = new StringTemplateLoader(); - Configuration configuration = freeMarkerConfigurer.getConfiguration(); - configuration.setTemplateLoader(stringTemplateLoader); - configuration.setDefaultEncoding(ISystemConstant.CHARSET_UTF8); - return configuration; - } - private Template getTemplate(String templateName, String templateCode) throws IOException { - return new Template(templateName, templateCode, getConfiguration()); + return new Template(templateName, templateCode, configuration); } } diff --git a/module-form/src/main/resources/static/form-design/modules/components/checkbox.js b/module-form/src/main/resources/static/form-design/modules/components/checkbox.js index c0d67232..36d32ff2 100644 --- a/module-form/src/main/resources/static/form-design/modules/components/checkbox.js +++ b/module-form/src/main/resources/static/form-design/modules/components/checkbox.js @@ -5,7 +5,7 @@ layui.define(['jquery', 'form', 'formUtils'], function(exports) { var formField = layui.formField; var HTML_ARRAY = [ - '
', + '
', ' ', '
', ' ', @@ -43,8 +43,8 @@ layui.define(['jquery', 'form', 'formUtils'], function(exports) { update: function (json) { var _disabled = json.disabled ? 'disabled=""' : ''; var _required = json.required ? 'lay-verify="otherReq"' : ''; - var $block = $('#' + json.id + ' .layui-input-block'); - var $label = $('#' + json.id + ' .layui-form-label'); + var $block = $('#' + json.id + 'Box .layui-input-block'); + var $label = $('#' + json.id + 'Box .layui-form-label'); $block.empty(); $label.empty(); var _html = ''; @@ -85,30 +85,6 @@ layui.define(['jquery', 'form', 'formUtils'], function(exports) { } } $('#columnProperty').append(_html); - }, - genScript: function(item) { - return { - func: { - save: '', - update: '' - }, - init: { - save: '', - update: [ - ' var ' + item.id + ' = data.' + item.id + '.split(\',\');', - ' var '+ item.id +'Obj = {};', - ' for(var i = 0, item = ' + item.id + '[i]; item = ' + item.id + '[i++];) {', - ' '+ item.id +'Obj[\'' + item.id + '[\'+ item +\']\'] = true;', - ' }', - ' form.val(\'dataForm\', '+ item.id +'Obj);', - ].join('\n') - }, - commit: [ - ' var ' + item.id + ' = top.restAjax.checkBoxToString(formData.field, \'' + item.id + '\');', - ' formData.field.' + item.id + ' = ' + item.id + ';' - ].join('\n'), - } - } } diff --git a/module-form/src/main/resources/static/form-design/modules/components/date.js b/module-form/src/main/resources/static/form-design/modules/components/date.js index 84ac2b5c..7190e8d4 100644 --- a/module-form/src/main/resources/static/form-design/modules/components/date.js +++ b/module-form/src/main/resources/static/form-design/modules/components/date.js @@ -5,7 +5,7 @@ layui.define(['jquery', 'laydate', 'formUtils'], function(exports) { var formField = layui.formField; var HTML_ARRAY = [ - '
', + '
', ' ', '
', ' ', @@ -38,8 +38,8 @@ layui.define(['jquery', 'laydate', 'formUtils'], function(exports) { var _disabledClass = json.disabled ? ' layui-disabled' : ''; var _disabledStyle = json.disabled ? ' pointer-events: none;' : ''; var _required = json.required ? 'required' : ''; - var $block = $('#' + json.id + ' .layui-input-block'); - var $label = $('#' + json.id + ' .layui-form-label'); + var $block = $('#' + json.id + 'Box .layui-input-block'); + var $label = $('#' + json.id + 'Box .layui-form-label'); $block.empty(); $label.empty(); $block.css("margin-left", json.labelWidth); diff --git a/module-form/src/main/resources/static/form-design/modules/components/grid.js b/module-form/src/main/resources/static/form-design/modules/components/grid.js index 43bad445..5560a8cd 100644 --- a/module-form/src/main/resources/static/form-design/modules/components/grid.js +++ b/module-form/src/main/resources/static/form-design/modules/components/grid.js @@ -13,7 +13,7 @@ layui.define(['jquery', 'formUtils', 'formField'], function (exports) { if (selected === undefined) { selected = false; } - var _html = '
'.format(json.id, json.tag, selected ? 'active' : '', json.index); + var _html = '
'.format(json.id, json.tag, selected ? 'active' : '', json.index); var colClass = 'layui-col-md6 layui-col-xs6'; if (json.columns.length == 3) { diff --git a/module-form/src/main/resources/static/form-design/modules/components/input.js b/module-form/src/main/resources/static/form-design/modules/components/input.js index b8440b63..c59495ad 100644 --- a/module-form/src/main/resources/static/form-design/modules/components/input.js +++ b/module-form/src/main/resources/static/form-design/modules/components/input.js @@ -4,7 +4,7 @@ layui.define(['jquery', 'formField', 'formUtils'], function(exports) { var utils = layui.formUtils; var HTML_ARRAY = [ - '
', + '
', ' ', '
', ' ', @@ -49,8 +49,8 @@ layui.define(['jquery', 'formField', 'formUtils'], function(exports) { _required = 'required' + '|' + json.expression; } } - var $block = $('#' + json.id + ' .layui-input-block'); - var $label = $('#' + json.id + ' .layui-form-label'); + var $block = $('#' + json.id + 'Box .layui-input-block'); + var $label = $('#' + json.id + 'Box .layui-form-label'); $block.empty(); $label.empty(); $block.css("margin-left", json.labelWidth); diff --git a/module-form/src/main/resources/static/form-design/modules/components/layCarousel.js b/module-form/src/main/resources/static/form-design/modules/components/layCarousel.js index bb26e2fa..984e6a87 100644 --- a/module-form/src/main/resources/static/form-design/modules/components/layCarousel.js +++ b/module-form/src/main/resources/static/form-design/modules/components/layCarousel.js @@ -14,7 +14,7 @@ layui.define(['jquery', 'carousel', 'formUtils'], function(exports) { if (selected === undefined) { selected = false; } - var _html = '
'.format(json.id, json.tag, selected ? 'active' : '', json.index); + var _html = '
'.format(json.id, json.tag, selected ? 'active' : '', json.index); // _html +=''.format(json.required?'layui-form-required':'',json.label); // _html +='
'; _html += '