From 9347b5f4e49c7f0b2abd7cbf0b60c7181f38cd20 Mon Sep 17 00:00:00 2001 From: fujiayang Date: Wed, 26 Jan 2022 09:48:45 +0800 Subject: [PATCH] =?UTF-8?q?spring=E5=A2=9E=E5=BC=BA=E7=AD=96=E7=95=A5?= =?UTF-8?q?=E6=A8=A1=E5=BC=8F-=E5=8E=9F=E5=A7=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../spring/FormItemConverter.java | 97 +++++++++++++++++++ .../spring/bean/ComponentTypeEnum.java | 19 ++++ .../spring/bean/FormComponentProps.java | 19 ++++ .../templatemethod/spring/bean/FormItem.java | 27 ++++++ .../spring/bean/FormItemConfig.java | 31 ++++++ .../spring/bean/FormItemRule.java | 21 ++++ .../spring/bean/FormItemTypeEnum.java | 17 ++++ 7 files changed, 231 insertions(+) create mode 100644 src/main/java/top/fjy8018/designpattern/pattern/behavior/templatemethod/spring/FormItemConverter.java create mode 100644 src/main/java/top/fjy8018/designpattern/pattern/behavior/templatemethod/spring/bean/ComponentTypeEnum.java create mode 100644 src/main/java/top/fjy8018/designpattern/pattern/behavior/templatemethod/spring/bean/FormComponentProps.java create mode 100644 src/main/java/top/fjy8018/designpattern/pattern/behavior/templatemethod/spring/bean/FormItem.java create mode 100644 src/main/java/top/fjy8018/designpattern/pattern/behavior/templatemethod/spring/bean/FormItemConfig.java create mode 100644 src/main/java/top/fjy8018/designpattern/pattern/behavior/templatemethod/spring/bean/FormItemRule.java create mode 100644 src/main/java/top/fjy8018/designpattern/pattern/behavior/templatemethod/spring/bean/FormItemTypeEnum.java diff --git a/src/main/java/top/fjy8018/designpattern/pattern/behavior/templatemethod/spring/FormItemConverter.java b/src/main/java/top/fjy8018/designpattern/pattern/behavior/templatemethod/spring/FormItemConverter.java new file mode 100644 index 0000000..3c037a9 --- /dev/null +++ b/src/main/java/top/fjy8018/designpattern/pattern/behavior/templatemethod/spring/FormItemConverter.java @@ -0,0 +1,97 @@ +package top.fjy8018.designpattern.pattern.behavior.templatemethod.spring; + +import top.fjy8018.designpattern.pattern.behavior.templatemethod.spring.bean.*; + +import java.util.ArrayList; +import java.util.List; + +/** + * 原始逻辑 + * + * @author F嘉阳 + * @date 2022/1/26 09:38 + */ +public class FormItemConverter { + /** + * 将输入的配置转变为表单项 + * + * @param config 前端输入的配置 + * @return 表单项 + */ + public FormItem convert(FormItemConfig config) { + FormItem formItem = new FormItem(); + + // 公共的表单项属性 + formItem.setTitle(config.getTitle()); + formItem.setCode(config.getCode()); + formItem.setComponent(config.getComponent()); + + // 创建表单组件的属性 + FormComponentProps props = new FormComponentProps(); + formItem.setComponentProps(props); + + // 公共的组件属性 + if (config.isReadOnly()) { + props.setReadOnly(true); + } + + ComponentTypeEnum type = config.getType(); + + // 下拉选择框的特殊属性处理 + if (type == ComponentTypeEnum.DROPDOWN_SELECT) { + props.setAutoWidth(false); + + if (config.isMultiple()) { + props.setMode("multiple"); + } + } + + // 模糊搜索框的特殊属性处理 + if (type == ComponentTypeEnum.FUZZY_SEARCH) { + formItem.setFuzzySearch(true); + props.setAutoWidth(false); + } + + // ... 其他组件的特殊处理 + + // 创建约束规则 + List rules = new ArrayList<>(2); + formItem.setRules(rules); + + // 每个表单项都可有的约束规则 + if (config.isRequired()) { + FormItemRule requiredRule = new FormItemRule(); + requiredRule.setRequired(true); + requiredRule.setMessage("请输入" + config.getTitle()); + + rules.add(requiredRule); + } + + // 文本输入框才有的规则 + if (type == ComponentTypeEnum.TEXT_INPUT || type == ComponentTypeEnum.TEXT_AREA) { + Integer minLength = config.getMinLength(); + + if (minLength != null && minLength > 0) { + FormItemRule minRule = new FormItemRule(); + minRule.setMin(minLength); + minRule.setMessage("请至少输入 " + minLength + " 个字"); + + rules.add(minRule); + } + + Integer maxLength = config.getMaxLength(); + + if (maxLength != null && maxLength > 0) { + FormItemRule maxRule = new FormItemRule(); + maxRule.setMax(maxLength); + maxRule.setMessage("请最多输入 " + maxLength + " 个字"); + + rules.add(maxRule); + } + } + + // ... 其他约束规则 + + return formItem; + } +} diff --git a/src/main/java/top/fjy8018/designpattern/pattern/behavior/templatemethod/spring/bean/ComponentTypeEnum.java b/src/main/java/top/fjy8018/designpattern/pattern/behavior/templatemethod/spring/bean/ComponentTypeEnum.java new file mode 100644 index 0000000..6dcd923 --- /dev/null +++ b/src/main/java/top/fjy8018/designpattern/pattern/behavior/templatemethod/spring/bean/ComponentTypeEnum.java @@ -0,0 +1,19 @@ +package top.fjy8018.designpattern.pattern.behavior.templatemethod.spring.bean; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * TODO: + * + * @author F嘉阳 + * @date 2022/1/26 09:43 + */ +@Getter +@AllArgsConstructor +public enum ComponentTypeEnum { + DROPDOWN_SELECT, + FUZZY_SEARCH, + TEXT_INPUT, + TEXT_AREA; +} diff --git a/src/main/java/top/fjy8018/designpattern/pattern/behavior/templatemethod/spring/bean/FormComponentProps.java b/src/main/java/top/fjy8018/designpattern/pattern/behavior/templatemethod/spring/bean/FormComponentProps.java new file mode 100644 index 0000000..164a15c --- /dev/null +++ b/src/main/java/top/fjy8018/designpattern/pattern/behavior/templatemethod/spring/bean/FormComponentProps.java @@ -0,0 +1,19 @@ +package top.fjy8018.designpattern.pattern.behavior.templatemethod.spring.bean; + +import lombok.Data; + +/** + * TODO: + * + * @author F嘉阳 + * @date 2022/1/26 09:40 + */ +@Data +public class FormComponentProps { + + private boolean readOnly; + + private boolean autoWidth; + + private String mode; +} diff --git a/src/main/java/top/fjy8018/designpattern/pattern/behavior/templatemethod/spring/bean/FormItem.java b/src/main/java/top/fjy8018/designpattern/pattern/behavior/templatemethod/spring/bean/FormItem.java new file mode 100644 index 0000000..ddec6f6 --- /dev/null +++ b/src/main/java/top/fjy8018/designpattern/pattern/behavior/templatemethod/spring/bean/FormItem.java @@ -0,0 +1,27 @@ +package top.fjy8018.designpattern.pattern.behavior.templatemethod.spring.bean; + +import lombok.Data; + +import java.util.List; + +/** + * TODO: + * + * @author F嘉阳 + * @date 2022/1/26 09:39 + */ +@Data +public class FormItem { + + private String title; + + private String code; + + private String component; + + private FormComponentProps componentProps; + + private boolean fuzzySearch; + + private List rules; +} diff --git a/src/main/java/top/fjy8018/designpattern/pattern/behavior/templatemethod/spring/bean/FormItemConfig.java b/src/main/java/top/fjy8018/designpattern/pattern/behavior/templatemethod/spring/bean/FormItemConfig.java new file mode 100644 index 0000000..5518243 --- /dev/null +++ b/src/main/java/top/fjy8018/designpattern/pattern/behavior/templatemethod/spring/bean/FormItemConfig.java @@ -0,0 +1,31 @@ +package top.fjy8018.designpattern.pattern.behavior.templatemethod.spring.bean; + +import lombok.Data; + +/** + * TODO: + * + * @author F嘉阳 + * @date 2022/1/26 09:39 + */ +@Data +public class FormItemConfig { + + private String title; + + private String code; + + private String component; + + private boolean readOnly; + + private ComponentTypeEnum type; + + private boolean multiple; + + private boolean required; + + private Integer minLength; + + private Integer maxLength; +} diff --git a/src/main/java/top/fjy8018/designpattern/pattern/behavior/templatemethod/spring/bean/FormItemRule.java b/src/main/java/top/fjy8018/designpattern/pattern/behavior/templatemethod/spring/bean/FormItemRule.java new file mode 100644 index 0000000..76c24a8 --- /dev/null +++ b/src/main/java/top/fjy8018/designpattern/pattern/behavior/templatemethod/spring/bean/FormItemRule.java @@ -0,0 +1,21 @@ +package top.fjy8018.designpattern.pattern.behavior.templatemethod.spring.bean; + +import lombok.Data; + +/** + * TODO: + * + * @author F嘉阳 + * @date 2022/1/26 09:46 + */ +@Data +public class FormItemRule { + + private boolean required; + + private String message; + + private Integer min; + + private Integer max; +} diff --git a/src/main/java/top/fjy8018/designpattern/pattern/behavior/templatemethod/spring/bean/FormItemTypeEnum.java b/src/main/java/top/fjy8018/designpattern/pattern/behavior/templatemethod/spring/bean/FormItemTypeEnum.java new file mode 100644 index 0000000..a308200 --- /dev/null +++ b/src/main/java/top/fjy8018/designpattern/pattern/behavior/templatemethod/spring/bean/FormItemTypeEnum.java @@ -0,0 +1,17 @@ +package top.fjy8018.designpattern.pattern.behavior.templatemethod.spring.bean; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * TODO: + * + * @author F嘉阳 + * @date 2022/1/26 09:41 + */ +@Getter +@AllArgsConstructor +public enum FormItemTypeEnum { + ; + +}