Commit 8bc5e74d authored by 赵啸非's avatar 赵啸非

引入新的表单生成器

parent a7d6d6b9
......@@ -14,9 +14,11 @@ public enum ComponentEnum {
SELECT("s", "下拉选择框"),
BUTTON("btn", "按钮"),
CHECKBOX("ck", "复选框"),
RADIO("r", "单选框"),
DATE("date", "日期选择栏"),
AREA("area", "区域选择栏"),
IMAGE("image", "图片选择");
IMAGE("image", "图片选择"),
DYNAMIC_TABLE("dt", "动态表格"),;
private String value;
private String desc;
......
package com.mortals.xhx.common.formdesign;
import java.util.List;
import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;
@Data
public class ChildrenItem{
@JSONField(name="children")
private List<ChildrenItem> children;
@JSONField(name="label")
private String label;
@JSONField(name="value")
private String value;
}
\ No newline at end of file
package com.mortals.xhx.common.formdesign;
import java.util.List;
import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;
@Data
public class ColumnsItem {
@JSONField(name = "labelWidth")
private int labelWidth;
@JSONField(name = "rules")
private List<RulesItem> rules;
@JSONField(name = "compName")
private String compName;
@JSONField(name = "showLabel")
private boolean showLabel;
@JSONField(name = "required")
private boolean required;
@JSONField(name = "compType")
private String compType;
@JSONField(name = "type")
private String type;
@JSONField(name = "options")
private List<OptionsItem> options;
@JSONField(name = "action")
private String action;
@JSONField(name = "disabled")
private boolean disabled;
@JSONField(name = "id")
private String id;
@JSONField(name = "placeholder")
private String placeholder;
@JSONField(name = "compIcon")
private String compIcon;
@JSONField(name = "value")
private String value;
@JSONField(name = "ele")
private String ele;
@JSONField(name = "filterable")
private boolean filterable;
@JSONField(name = "clearable")
private boolean clearable;
@JSONField(name = "plain")
private boolean plain;
@JSONField(name = "round")
private boolean round;
@JSONField(name = "circle")
private boolean circle;
@JSONField(name = "loading")
private boolean loading;
@JSONField(name = "icon")
private String icon;
@JSONField(name="range-separator")
private String rangeSeparator;
@JSONField(name="format")
private String format;
@JSONField(name="value-format")
private String valueFormat;
@JSONField(name = "dataType")
private String dataType;
@JSONField(name = "multiple")
private boolean multiple;
@JSONField(name = "collapse-tags")
private boolean collapseTags;
@JSONField(name = "label")
private String label;
@JSONField(name = "layout")
private String layout;
@JSONField(name = "gutter")
private int gutter;
@JSONField(name = "ruleError")
private String ruleError;
@JSONField(name = "viewType")
private String viewType;
@JSONField(name = "vertical")
private String vertical;
@JSONField(name = "text")
private String text;
@JSONField(name = "size")
private String size;
@JSONField(name = "optionType")
private String optionType;
@JSONField(name = "_id")
private String _id;
@JSONField(name = "config")
private boolean config;
@JSONField(name = "border")
private boolean border;
@JSONField(name = "show-word-limit")
private boolean showWordLimit;
@JSONField(name = "maxLength")
private int maxLength;
@JSONField(name = "rows")
private int rows;
@JSONField(name = "span")
private int span;
@JSONField(name = "rulesType")
private String rulesType;
@JSONField(name = "prepend")
private String prepend;
@JSONField(name = "prefix-icon")
private String prefixIcon;
@JSONField(name = "readonly")
private boolean readonly;
@JSONField(name = "suffix-icon")
private String suffixIcon;
@JSONField(name = "width")
private String width;
@JSONField(name = "append")
private String append;
@JSONField(name = "status")
private String status;
}
\ No newline at end of file
package com.mortals.xhx.common.formdesign;
import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;
@Data
public class Config{
@JSONField(name="formRef")
private String formRef;
@JSONField(name="gutter")
private int gutter;
@JSONField(name="size")
private String size;
@JSONField(name="formRules")
private String formRules;
@JSONField(name="labelPosition")
private String labelPosition;
@JSONField(name="dynamicTableAllowed")
private boolean dynamicTableAllowed;
@JSONField(name="rules")
private String rules;
@JSONField(name="labelWidth")
private int labelWidth;
@JSONField(name="disabled")
private boolean disabled;
@JSONField(name="formModel")
private String formModel;
@JSONField(name="version")
private String version;
}
\ No newline at end of file
package com.mortals.xhx.common.formdesign;
import com.mortals.framework.exception.AppException;
import com.mortals.xhx.common.code.ComponentEnum;
import com.mortals.xhx.common.formdesign.component.*;
import com.mortals.xhx.common.pdu.gen.FieldsItem;
import com.mortals.xhx.common.pdu.gen.component.*;
public abstract class DesignComponent {
private String type;
public DesignComponent(String type) {
this.type = type;
}
public abstract ListItem buildDefaultComponent(ComponentCons cons);
public static DesignComponent createType(String type) {
if (type.equals(ComponentEnum.INPUT.getValue())) {
return new DesignInputComponent(type);
} else if (type.equals(ComponentEnum.TEXTAREA.getValue())) {
return new DesignTextAreaComponent(type);
} else if (type.equals(ComponentEnum.SELECT.getValue())) {
return new DesignSelectComponent(type);
} else if (type.equals(ComponentEnum.CHECKBOX.getValue())) {
return new DesignCheckboxComponent(type);
} else if (type.equals(ComponentEnum.RADIO.getValue())) {
return new DesignRadioComponent(type);
}else if (type.equals(ComponentEnum.BUTTON.getValue())) {
return new DesignButtonComponent(type);
} else if (type.equals(ComponentEnum.DATE.getValue())) {
return new DesignDateComponent(type);
} else if (type.equals(ComponentEnum.IMAGE.getValue())) {
return new DesignImageComponent(type);
}
// else if (type.equals(ComponentEnum.AREA.getValue())) {
// return new AreaComponent(type);
// }
else {
throw new AppException(String.format("不支持当前组件类型,Type:%s", type));
}
}
public abstract String getType();
public static void main(String[] args) {
}
}
package com.mortals.xhx.common.formdesign;
import java.util.List;
import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;
@Data
public class ListItem{
@JSONField(name="showIndex")
private boolean showIndex;
@JSONField(name="visible")
private boolean visible;
@JSONField(name="multiCheck")
private boolean multiCheck;
@JSONField(name="columns")
private List<ColumnsItem> columns;
@JSONField(name="buttonDel")
private boolean buttonDel;
@JSONField(name="labelWidth")
private int labelWidth;
@JSONField(name="summary-text")
private String summaryText;
@JSONField(name="compName")
private String compName;
@JSONField(name="showLabel")
private boolean showLabel;
@JSONField(name="show-summary")
private boolean showSummary;
@JSONField(name="layout")
private String layout;
@JSONField(name="compType")
private String compType;
@JSONField(name="id")
private String id;
@JSONField(name="_id")
private String _id;
@JSONField(name="compIcon")
private String compIcon;
@JSONField(name="config")
private boolean config;
@JSONField(name="ele")
private String ele;
@JSONField(name="buttonAdd")
private boolean buttonAdd;
@JSONField(name="sum-text")
private String sumText;
@JSONField(name="format")
private String format;
@JSONField(name="lineColor")
private String lineColor;
@JSONField(name="label")
private String label;
@JSONField(name="displayValue")
private boolean displayValue;
@JSONField(name="form")
private boolean form;
@JSONField(name="background")
private String background;
@JSONField(name="viewType")
private String viewType;
@JSONField(name="width")
private String width;
@JSONField(name="fontSize")
private int fontSize;
@JSONField(name="value")
private String value;
@JSONField(name="span")
private int span;
@JSONField(name="height")
private int height;
@JSONField(name="content-position")
private String contentPosition;
@JSONField(name="text")
private String text;
@JSONField(name="icon")
private String icon;
@JSONField(name="type")
private String type;
@JSONField(name="loading")
private boolean loading;
@JSONField(name="size")
private String size;
@JSONField(name="round")
private boolean round;
@JSONField(name="plain")
private boolean plain;
@JSONField(name="disabled")
private boolean disabled;
@JSONField(name="circle")
private boolean circle;
@JSONField(name="closable")
private boolean closable;
@JSONField(name="center")
private boolean center;
@JSONField(name="description")
private String description;
@JSONField(name="title")
private String title;
@JSONField(name="show-icon")
private boolean showIcon;
@JSONField(name="effect")
private String effect;
@JSONField(name="close-text")
private String closeText;
@JSONField(name="color")
private String color;
@JSONField(name="show")
private boolean show;
@JSONField(name="bold")
private int bold;
@JSONField(name="align")
private String align;
@JSONField(name="underline")
private boolean underline;
@JSONField(name="target")
private String target;
@JSONField(name="href")
private String href;
@JSONField(name="colConf")
private String colConf;
@JSONField(name="required")
private boolean required;
@JSONField(name="multi")
private boolean multi;
@JSONField(name="dval")
private String dval;
@JSONField(name="dlabel")
private String dlabel;
@JSONField(name="action")
private String action;
@JSONField(name="gutter")
private int gutter;
@JSONField(name="list-type")
private String listType;
@JSONField(name="tips")
private String tips;
@JSONField(name="show-file-list")
private boolean showFileList;
@JSONField(name="buttonText")
private String buttonText;
@JSONField(name="showTip")
private boolean showTip;
@JSONField(name="multiple")
private boolean multiple;
@JSONField(name="accept")
private String accept;
@JSONField(name="fileSize")
private int fileSize;
@JSONField(name="name")
private String name;
@JSONField(name="dataType")
private String dataType;
@JSONField(name="props")
private Props props;
@JSONField(name="options")
private List<OptionsItem> options;
@JSONField(name="placeholder")
private String placeholder;
@JSONField(name="china-area-data")
private boolean chinaAreaData;
@JSONField(name="color-format")
private String colorFormat;
@JSONField(name="show-alpha")
private boolean showAlpha;
@JSONField(name="predefine")
private List<Object> predefine;
@JSONField(name="validateMaxText")
private boolean validateMaxText;
@JSONField(name="max")
private int max;
@JSONField(name="customRules")
private List<RulesItem> customRules;
@JSONField(name="picker-options")
private PickerOptions pickerOptions;
@JSONField(name="rules")
private List<RulesItem> rules;
@JSONField(name="readonly")
private boolean readonly;
@JSONField(name="arrow-control")
private boolean arrowControl;
@JSONField(name="is-range")
private boolean isRange;
@JSONField(name="clearable")
private boolean clearable;
@JSONField(name="range-separator")
private String rangeSeparator;
@JSONField(name="value-format")
private String valueFormat;
@JSONField(name="maxLength")
private int maxLength;
@JSONField(name="start-placeholder")
private String startPlaceholder;
@JSONField(name="end-placeholder")
private String endPlaceholder;
@JSONField(name="show-score")
private boolean showScore;
@JSONField(name="allow-half")
private boolean allowHalf;
@JSONField(name="show-stops")
private boolean showStops;
@JSONField(name="range")
private boolean range;
@JSONField(name="show-tooltip")
private boolean showTooltip;
@JSONField(name="min")
private int min;
@JSONField(name="step")
private int step;
@JSONField(name="maxlength")
private int maxlength;
@JSONField(name="rows")
private int rows;
@JSONField(name="ruleError")
private String ruleError;
@JSONField(name="show-word-limit")
private boolean showWordLimit;
@JSONField(name="status")
private String status;
@JSONField(name="step-strictly")
private boolean stepStrictly;
@JSONField(name="precision")
private int precision;
@JSONField(name="controls-position")
private String controlsPosition;
@JSONField(name="regList")
private List<Object> regList;
@JSONField(name="inactive-color")
private String inactiveColor;
@JSONField(name="active-color")
private String activeColor;
@JSONField(name="active-value")
private String activeValue;
@JSONField(name="inactive-value")
private String inactiveValue;
@JSONField(name="vertical")
private boolean vertical;
@JSONField(name="optionType")
private String optionType;
@JSONField(name="border")
private boolean border;
@JSONField(name="filterable")
private boolean filterable;
@JSONField(name="collapse-tags")
private boolean collapseTags;
@JSONField(name="rulesType")
private String rulesType;
@JSONField(name="prepend")
private String prepend;
@JSONField(name="prefix-icon")
private String prefixIcon;
@JSONField(name="suffix-icon")
private String suffixIcon;
@JSONField(name="append")
private String append;
}
\ No newline at end of file
package com.mortals.xhx.common.formdesign;
import java.util.List;
import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;
@Data
public class OptionsItem{
@JSONField(name="label")
private String label;
@JSONField(name="value")
private String value;
@JSONField(name="disabled")
private boolean disabled;
@JSONField(name="children")
private List<ChildrenItem> children;
}
\ No newline at end of file
package com.mortals.xhx.common.formdesign;
import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;
@Data
public class PickerOptions {
@JSONField(name = "selectableRange")
private String selectableRange;
}
\ No newline at end of file
package com.mortals.xhx.common.formdesign;
import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;
@Data
public class Props{
@JSONField(name="filterable")
private boolean filterable;
@JSONField(name="clearable")
private boolean clearable;
@JSONField(name="show-all-levels")
private boolean showAllLevels;
@JSONField(name="separator")
private String separator;
@JSONField(name="props")
private Props props;
@JSONField(name="children")
private String children;
@JSONField(name="multiple")
private boolean multiple;
@JSONField(name="checkStrictly")
private boolean checkStrictly;
@JSONField(name="label")
private String label;
@JSONField(name="expandTrigger")
private String expandTrigger;
@JSONField(name="value")
private String value;
}
\ No newline at end of file
package com.mortals.xhx.common.formdesign;
import java.util.List;
import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;
@Data
public class Response {
@JSONField(name = "list")
private List<ListItem> list;
@JSONField(name = "config")
private Config config;
}
\ No newline at end of file
package com.mortals.xhx.common.formdesign;
import com.alibaba.fastjson.annotation.JSONField;
public class RulesItem {
@JSONField(name="msg")
private String msg;
@JSONField(name="rule")
private String rule;
}
\ No newline at end of file
package com.mortals.xhx.common.formdesign;
import lombok.Data;
/**
* 表格组件
*
* @author:
* @date: 2022/9/19 15:53
*/
@Data
public class TableColItem {
/**
* 列名称
*/
private String name;
private String label;
/**
* 列类型
*/
private String colType;
}
package com.mortals.xhx.common.formdesign.component;
import cn.hutool.core.util.IdUtil;
import com.google.common.collect.Lists;
import com.mortals.xhx.common.code.ComponentEnum;
import com.mortals.xhx.common.formdesign.ColumnsItem;
import com.mortals.xhx.common.formdesign.DesignComponent;
import com.mortals.xhx.common.formdesign.ListItem;
import com.mortals.xhx.common.pdu.gen.*;
import com.mortals.xhx.common.pdu.gen.component.ComponentCons;
/**
* 按钮组件
*
* @author: zxfei
* @date: 2021/10/26 10:35
* @description:
**/
public class DesignButtonComponent extends DesignComponent {
public DesignButtonComponent(String type) {
super(type);
}
@Override
public ListItem buildDefaultComponent(ComponentCons cons) {
ListItem columnsItem = new ListItem();
//form提交id,唯一
String id = "fd_" + IdUtil.fastSimpleUUID();
columnsItem.setId(id);
columnsItem.set_id(id);
columnsItem.setCompType("button");
columnsItem.setCompName(cons.getLabel());
columnsItem.setCompIcon("button");
columnsItem.setEle("el-button");
columnsItem.setViewType("component");
columnsItem.setConfig(true);
columnsItem.setShowLabel(true);
columnsItem.setLabel(cons.getLabel());
columnsItem.setLabelWidth(120);
columnsItem.setType("primary");
columnsItem.setText("按钮");
columnsItem.setPlain(true);
columnsItem.setRound(false);
columnsItem.setCircle(false);
columnsItem.setLoading(false);
columnsItem.setLayout("colItem");
return columnsItem;
}
@Override
public String getType() {
return ComponentEnum.BUTTON.getValue();
}
}
package com.mortals.xhx.common.formdesign.component;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import com.google.common.collect.Lists;
import com.mortals.xhx.common.code.ComponentEnum;
import com.mortals.xhx.common.formdesign.ColumnsItem;
import com.mortals.xhx.common.formdesign.DesignComponent;
import com.mortals.xhx.common.formdesign.ListItem;
import com.mortals.xhx.common.formdesign.OptionsItem;
import com.mortals.xhx.common.pdu.gen.component.ComponentCons;
import com.mortals.xhx.common.utils.ExportDocUtil;
import com.mortals.xhx.common.utils.StringUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* 复选框组件
*
* @author: zxfei
* @date: 2021/10/26 10:35
* @description:
**/
public class DesignCheckboxComponent extends DesignComponent {
public DesignCheckboxComponent(String type) {
super(type);
}
@Override
public ListItem buildDefaultComponent(ComponentCons cons) {
ListItem columnsItem = new ListItem();
String id = "fd_"+ IdUtil.fastSimpleUUID();
columnsItem.setId(id);
columnsItem.set_id(id);
columnsItem.setCompType("checkbox");
columnsItem.setCompName(cons.getLabel());
columnsItem.setCompIcon("checkbox");
columnsItem.setEle("el-checkbox-group");
columnsItem.setViewType("component");
columnsItem.setConfig(true);
columnsItem.setShowLabel(true);
columnsItem.setLabel(cons.getLabel());
columnsItem.setLabelWidth(120);
columnsItem.setPlaceholder("请输入"+cons.getLabel());
columnsItem.setMaxLength(50);
columnsItem.setRequired(false);
columnsItem.setMultiple(false);
columnsItem.setCollapseTags(false);
columnsItem.setDisabled(false);
columnsItem.setBorder(false);
columnsItem.setSize("medium");
columnsItem.setGutter(15);
columnsItem.setSpan(12);
columnsItem.setOptionType("default");
columnsItem.setDataType("static");
columnsItem.setAction("https://www.fastmock.site/mock/51715c0157535b99010bde55f2df33c8/formDesigner/api/options");
columnsItem.setClearable(false);
columnsItem.setValue("");
columnsItem.setRules(Lists.newArrayList());
columnsItem.setLayout("colItem");
columnsItem.setRuleError("该字段不能为空");
columnsItem.setRulesType("default");
initDefaultCheckBoxValue(cons, columnsItem);
return columnsItem;
}
private void initDefaultCheckBoxValue(ComponentCons cons, ListItem columnsItem) {
if (cons.getLabel().indexOf("[") != -1) {
String cks = StringUtils.substringBetween(cons.getLabel(), "[", "]");
List<OptionsItem> optionsItemList = StrUtil.splitTrim(cks, "-", -1).stream().map(option -> {
OptionsItem options = new OptionsItem();
options.setLabel(option);
options.setValue(option);
return options;
}).collect(Collectors.toList());
columnsItem.setOptions(optionsItemList);
cons.setVal(cons.getVal().substring(0, cons.getVal().indexOf("[")));
cons.setLabel(cons.getLabel().substring(0, cons.getLabel().indexOf("[")));
}
}
@Override
public String getType() {
return ComponentEnum.CHECKBOX.getValue();
}
}
package com.mortals.xhx.common.formdesign.component;
import cn.hutool.core.util.IdUtil;
import com.mortals.xhx.common.code.ComponentEnum;
import com.mortals.xhx.common.formdesign.ColumnsItem;
import com.mortals.xhx.common.formdesign.DesignComponent;
import com.mortals.xhx.common.formdesign.ListItem;
import com.mortals.xhx.common.pdu.gen.Component;
import com.mortals.xhx.common.pdu.gen.Config;
import com.mortals.xhx.common.pdu.gen.FieldsItem;
import com.mortals.xhx.common.pdu.gen.Style;
import com.mortals.xhx.common.pdu.gen.component.ComponentCons;
import java.util.ArrayList;
/**
* 时间组件
*
* @author: zxfei
* @date: 2021/10/26 10:35
* @description:
**/
public class DesignDateComponent extends DesignComponent {
public DesignDateComponent(String type) {
super(type);
}
@Override
public ListItem buildDefaultComponent(ComponentCons cons) {
ListItem columnsItem = new ListItem();
//form提交id,唯一
String id = "fd_" + IdUtil.fastSimpleUUID();
columnsItem.setId(id);
columnsItem.set_id(id);
columnsItem.setCompType("date");
columnsItem.setEle("el-date-picker");
columnsItem.setCompName(cons.getLabel());
columnsItem.setCompIcon("date");
columnsItem.setViewType("text");
columnsItem.setConfig(true);
columnsItem.setShowLabel(true);
columnsItem.setLabel(cons.getLabel());
columnsItem.setLabelWidth(120);
columnsItem.setType("date");
columnsItem.setPlaceholder("请选择" + cons.getLabel());
columnsItem.setRequired(false);
columnsItem.setMaxLength(50);
columnsItem.setGutter(15);
columnsItem.setSpan(12);
columnsItem.setFormat("yyyy 年 MM 月 dd 日");
columnsItem.setValueFormat("yyyy 年 MM 月 dd 日");
columnsItem.setLayout("colItem");
return columnsItem;
}
@Override
public String getType() {
return ComponentEnum.DATE.getValue();
}
}
package com.mortals.xhx.common.formdesign.component;
import cn.hutool.core.util.IdUtil;
import com.google.common.collect.Lists;
import com.mortals.xhx.common.code.ComponentEnum;
import com.mortals.xhx.common.formdesign.ColumnsItem;
import com.mortals.xhx.common.formdesign.DesignComponent;
import com.mortals.xhx.common.formdesign.ListItem;
import com.mortals.xhx.common.formdesign.OptionsItem;
import com.mortals.xhx.common.pdu.gen.component.ComponentCons;
import org.springframework.util.ObjectUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* 动态表格组件
*
* @author: zxfei
* @date: 2021/10/26 10:35
* @description:
**/
public class DesignDynamicTableComponent extends DesignComponent {
public DesignDynamicTableComponent(String type) {
super(type);
}
@Override
public ListItem buildDefaultComponent(ComponentCons cons) {
ListItem listItem = new ListItem();
String id = "fd_" + IdUtil.fastSimpleUUID();
listItem.setId(id);
listItem.set_id(id);
listItem.setCompType("dynamicTable");
listItem.setEle("dynamic-table");
listItem.setCompName("动态表格");
listItem.setLayout("dynamicItem");
listItem.setCompIcon("table");
listItem.setLabelWidth(0);
listItem.setShowLabel(false);
listItem.setConfig(true);
listItem.setButtonAdd(true);
listItem.setButtonDel(true);
listItem.setShowIndex(true);
listItem.setVisible(true);
listItem.setMultiCheck(false);
listItem.setShowSummary(false);
listItem.setSumText("合计");
listItem.setSummaryText("元");
if (!ObjectUtils.isEmpty(cons.getColList())) {
//动态生成列元素
List<ColumnsItem> columnsItemList = cons.getColList().stream().map(item -> {
ColumnsItem columnsItem = new ColumnsItem();
if (item.getColType().equals(ComponentEnum.INPUT.getValue())) {
//创建输入框出初始值
columnsItem.setId(item.getName());
columnsItem.set_id(item.getName());
columnsItem.setCompType("input");
columnsItem.setCompName("单行文本");
columnsItem.setCompIcon("input");
columnsItem.setViewType("text");
columnsItem.setEle("input");
columnsItem.setConfig(true);
columnsItem.setShowLabel(true);
columnsItem.setLabel(item.getLabel());
columnsItem.setLabelWidth(120);
columnsItem.setPlaceholder("请输入" + cons.getLabel());
columnsItem.setRequired(false);
columnsItem.setMaxLength(50);
columnsItem.setGutter(15);
columnsItem.setSpan(24);
columnsItem.setWidth("100%");
columnsItem.setClearable(true);
columnsItem.setDisabled(false);
columnsItem.setReadonly(false);
columnsItem.setStatus("normal");
columnsItem.setPrefixIcon("");
columnsItem.setValue("");
columnsItem.setRules(Lists.newArrayList());
columnsItem.setRulesType("default");
columnsItem.setAppend("");
columnsItem.setPrepend("");
columnsItem.setLayout("colItem");
}
return columnsItem;
}).collect(Collectors.toList());
listItem.setColumns(columnsItemList);
}
return listItem;
}
@Override
public String getType() {
return ComponentEnum.DYNAMIC_TABLE.getValue();
}
}
package com.mortals.xhx.common.formdesign.component;
import cn.hutool.core.util.IdUtil;
import com.mortals.xhx.common.code.ComponentEnum;
import com.mortals.xhx.common.formdesign.DesignComponent;
import com.mortals.xhx.common.formdesign.ListItem;
import com.mortals.xhx.common.pdu.gen.Component;
import com.mortals.xhx.common.pdu.gen.Config;
import com.mortals.xhx.common.pdu.gen.FieldsItem;
import com.mortals.xhx.common.pdu.gen.Slot;
import com.mortals.xhx.common.pdu.gen.component.ComponentCons;
import java.util.ArrayList;
/**
* 图片组件
*
* @author: zxfei
* @date: 2021/10/26 10:35
* @description:
**/
public class DesignImageComponent extends DesignComponent {
public DesignImageComponent(String type) {
super(type);
}
@Override
public ListItem buildDefaultComponent(ComponentCons cons) {
ListItem columnsItem = new ListItem();
//form提交id,唯一
String id = "fd_" + IdUtil.fastSimpleUUID();
columnsItem.setId(id);
columnsItem.set_id(id);
columnsItem.setCompType("upload");
columnsItem.setCompName(cons.getLabel());
columnsItem.setCompIcon("button");
columnsItem.setEle("el-upload");
columnsItem.setViewType("component");
columnsItem.setConfig(true);
columnsItem.setShowLabel(true);
columnsItem.setLabel(cons.getLabel());
columnsItem.setLabelWidth(120);
columnsItem.setType("primary");
columnsItem.setText("按钮");
columnsItem.setPlain(true);
columnsItem.setRound(false);
columnsItem.setCircle(false);
columnsItem.setLoading(false);
columnsItem.setLayout("colItem");
return columnsItem;
/* //图片选择
FieldsItem fieldsItem = new FieldsItem();
Config config = new Config();
config.setLabel("日期选择");
config.setTag("el-upload");
config.setTagIcon("upload");
config.setButtonText("点击上传");
config.setFileSize(2);
config.setSizeUnit("MB");
config.setLabelWidth("");
config.setShowLabel(true);
config.setChangeTag(true);
config.setTag("el-upload");
config.setRequired(false);
config.setLayout("colFormItem");
config.setDocument("https://element.eleme.cn/#/zh-CN/component/upload");
config.setRegList(new ArrayList<>());
config.setSpan(12);
fieldsItem.setConfig(config);
Slot slot = new Slot();
slot.setListType(true);
fieldsItem.setSlot(slot);
fieldsItem.setAction("/m/file/commonupload?prePath=preview");
fieldsItem.setAccept("image/*");
fieldsItem.setName("file");
fieldsItem.setAutoUpload(true);
fieldsItem.setListType("picture-card");
fieldsItem.setMultiple(false);
fieldsItem.setClearable(true);
fieldsItem.setReadonly(false);
fieldsItem.setDisabled(false);
fieldsItem.setVModel("imageupload");
return fieldsItem;*/
}
@Override
public String getType() {
return ComponentEnum.IMAGE.getValue();
}
}
package com.mortals.xhx.common.formdesign.component;
import com.google.common.collect.Lists;
import cn.hutool.core.util.IdUtil;
import com.mortals.xhx.common.code.ComponentEnum;
import com.mortals.xhx.common.formdesign.ColumnsItem;
import com.mortals.xhx.common.formdesign.DesignComponent;
import com.mortals.xhx.common.formdesign.ListItem;
import com.mortals.xhx.common.pdu.gen.*;
import com.mortals.xhx.common.pdu.gen.component.ComponentCons;
import java.util.ArrayList;
/**
* 输入框组件
*
* @author: zxfei
* @date: 2021/10/26 10:35
* @description:
**/
public class DesignInputComponent extends DesignComponent {
public DesignInputComponent(String type) {
super(type);
}
@Override
public ListItem buildDefaultComponent(ComponentCons cons) {
ListItem columnsItem = new ListItem();
String id = "fd_"+IdUtil.fastSimpleUUID();
columnsItem.setId(id);
columnsItem.set_id(id);
columnsItem.setCompType("input");
columnsItem.setCompName(cons.getLabel());
columnsItem.setCompIcon("input");
columnsItem.setEle("input");
columnsItem.setViewType("text");
columnsItem.setConfig(true);
columnsItem.setShowLabel(true);
columnsItem.setLabel(cons.getLabel());
columnsItem.setLabelWidth(120);
columnsItem.setPlaceholder("请输入"+cons.getLabel());
columnsItem.setRequired(false);
columnsItem.setMaxLength(50);
columnsItem.setGutter(15);
columnsItem.setSpan(12);
columnsItem.setWidth("100%");
columnsItem.setClearable(true);
columnsItem.setDisabled(false);
columnsItem.setReadonly(false);
columnsItem.setStatus("normal");
columnsItem.setPrefixIcon("");
columnsItem.setValue("");
columnsItem.setRules(Lists.newArrayList());
columnsItem.setRulesType("default");
columnsItem.setAppend("");
columnsItem.setPrepend("");
columnsItem.setLayout("colItem");
return columnsItem;
}
@Override
public String getType() {
return ComponentEnum.INPUT.getValue();
}
}
package com.mortals.xhx.common.formdesign.component;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import com.google.common.collect.Lists;
import com.mortals.xhx.common.code.ComponentEnum;
import com.mortals.xhx.common.formdesign.ColumnsItem;
import com.mortals.xhx.common.formdesign.DesignComponent;
import com.mortals.xhx.common.formdesign.ListItem;
import com.mortals.xhx.common.formdesign.OptionsItem;
import com.mortals.xhx.common.pdu.gen.component.ComponentCons;
import com.mortals.xhx.common.utils.StringUtils;
import java.util.List;
import java.util.stream.Collectors;
/**
* 复选框组件
*
* @author: zxfei
* @date: 2021/10/26 10:35
* @description:
**/
public class DesignRadioComponent extends DesignComponent {
public DesignRadioComponent(String type) {
super(type);
}
@Override
public ListItem buildDefaultComponent(ComponentCons cons) {
ListItem columnsItem = new ListItem();
String id = "fd_"+ IdUtil.fastSimpleUUID();
columnsItem.setId(id);
columnsItem.set_id(id);
columnsItem.setCompType("radio");
columnsItem.setCompName(cons.getLabel());
columnsItem.setCompIcon("radio");
columnsItem.setEle("el-radio-group");
columnsItem.setViewType("component");
columnsItem.setConfig(true);
columnsItem.setShowLabel(true);
columnsItem.setLabel(cons.getLabel());
columnsItem.setLabelWidth(120);
columnsItem.setPlaceholder("请输入"+cons.getLabel());
columnsItem.setMaxLength(50);
columnsItem.setRequired(false);
columnsItem.setDisabled(false);
columnsItem.setBorder(false);
columnsItem.setSize("medium");
columnsItem.setGutter(15);
columnsItem.setSpan(12);
columnsItem.setOptionType("default");
columnsItem.setDataType("static");
columnsItem.setAction("https://www.fastmock.site/mock/51715c0157535b99010bde55f2df33c8/formDesigner/api/options");
columnsItem.setClearable(false);
columnsItem.setValue("");
columnsItem.setRules(Lists.newArrayList());
columnsItem.setLayout("colItem");
columnsItem.setRuleError("该字段不能为空");
columnsItem.setRulesType("default");
initDefaultCheckBoxValue(cons, columnsItem);
return columnsItem;
}
private void initDefaultCheckBoxValue(ComponentCons cons, ListItem columnsItem) {
if (cons.getLabel().indexOf("[") != -1) {
String cks = StringUtils.substringBetween(cons.getLabel(), "[", "]");
List<OptionsItem> optionsItemList = StrUtil.splitTrim(cks, "-", -1).stream().map(option -> {
OptionsItem options = new OptionsItem();
options.setLabel(option);
options.setValue(option);
return options;
}).collect(Collectors.toList());
columnsItem.setOptions(optionsItemList);
cons.setVal(cons.getVal().substring(0, cons.getVal().indexOf("[")));
cons.setLabel(cons.getLabel().substring(0, cons.getLabel().indexOf("[")));
}
}
@Override
public String getType() {
return ComponentEnum.RADIO.getValue();
}
}
package com.mortals.xhx.common.formdesign.component;
import cn.hutool.core.util.IdUtil;
import com.google.common.collect.Lists;
import com.mortals.xhx.common.code.ComponentEnum;
import com.mortals.xhx.common.formdesign.ColumnsItem;
import com.mortals.xhx.common.formdesign.DesignComponent;
import com.mortals.xhx.common.formdesign.ListItem;
import com.mortals.xhx.common.formdesign.OptionsItem;
import com.mortals.xhx.common.pdu.gen.component.ComponentCons;
import java.util.ArrayList;
import java.util.List;
/**
* 下拉框组件
*
* @author: zxfei
* @date: 2021/10/26 10:35
* @description:
**/
public class DesignSelectComponent extends DesignComponent {
public DesignSelectComponent(String type) {
super(type);
}
@Override
public ListItem buildDefaultComponent(ComponentCons cons) {
ListItem columnsItem = new ListItem();
String id = "fd_"+ IdUtil.fastSimpleUUID();
columnsItem.setId(id);
columnsItem.set_id(id);
columnsItem.setCompType("select");
columnsItem.setCompName(cons.getLabel());
columnsItem.setCompIcon("select");
columnsItem.setEle("el-select");
columnsItem.setViewType("component");
columnsItem.setConfig(true);
columnsItem.setShowLabel(true);
columnsItem.setLabel(cons.getLabel());
columnsItem.setLabelWidth(120);
columnsItem.setPlaceholder("请输入"+cons.getLabel());
columnsItem.setMaxLength(50);
columnsItem.setRequired(false);
columnsItem.setMultiple(false);
columnsItem.setCollapseTags(false);
columnsItem.setDisabled(false);
columnsItem.setGutter(15);
columnsItem.setSpan(12);
columnsItem.setDataType("static");
columnsItem.setAction("https://www.fastmock.site/mock/51715c0157535b99010bde55f2df33c8/formDesigner/api/options");
columnsItem.setClearable(false);
columnsItem.setValue("");
columnsItem.setRules(Lists.newArrayList());
columnsItem.setLayout("colItem");
columnsItem.setRuleError("该字段不能为空");
columnsItem.setRulesType("default");
initDefaultSelectValue(cons, columnsItem);
return columnsItem;
}
private void initDefaultSelectValue(ComponentCons cons, ListItem columnsItem) {
//判断如果包含年,月,日,选项框 基础化
if (cons.getVal().indexOf("年") != -1) {
//初始化10年
List<OptionsItem> optionsItems = initYears();
columnsItem.setOptions(optionsItems);
} else if (cons.getVal().indexOf("月") != -1) {
List<OptionsItem> optionsItems = initMonths();
columnsItem.setOptions(optionsItems);
} else if (cons.getVal().indexOf("日") != -1) {
List<OptionsItem> optionsItems = initDays();
columnsItem.setOptions(optionsItems);
}
if (cons.getLabel().indexOf("[") != -1) {
//todo 初始选项框
}
}
public List<OptionsItem> initYears() {
List<OptionsItem> list = new ArrayList<>();
for (int i = 2020; i < 2030; i++) {
OptionsItem optionsItem = new OptionsItem();
optionsItem.setLabel(i + "");
optionsItem.setValue(i + "");
list.add(optionsItem);
}
return list;
}
public List<OptionsItem> initMonths() {
List<OptionsItem> list = new ArrayList<>();
for (int i = 1; i <= 12; i++) {
OptionsItem optionsItem = new OptionsItem();
optionsItem.setLabel(i + "");
optionsItem.setValue(i + "");
list.add(optionsItem);
}
return list;
}
public List<OptionsItem> initDays() {
List<OptionsItem> list = new ArrayList<>();
for (int i = 1; i <= 31; i++) {
OptionsItem optionsItem = new OptionsItem();
optionsItem.setLabel(i + "");
optionsItem.setValue(i + "");
list.add(optionsItem);
}
return list;
}
@Override
public String getType() {
return ComponentEnum.SELECT.getValue();
}
}
package com.mortals.xhx.common.formdesign.component;
import cn.hutool.core.util.IdUtil;
import com.google.common.collect.Lists;
import com.mortals.xhx.common.code.ComponentEnum;
import com.mortals.xhx.common.formdesign.ColumnsItem;
import com.mortals.xhx.common.formdesign.DesignComponent;
import com.mortals.xhx.common.formdesign.ListItem;
import com.mortals.xhx.common.pdu.gen.*;
import com.mortals.xhx.common.pdu.gen.component.ComponentCons;
import java.util.ArrayList;
/**
* 文本域组件
*
* @author: zxfei
* @date: 2021/10/26 10:35
* @description:
**/
public class DesignTextAreaComponent extends DesignComponent {
public DesignTextAreaComponent(String type) {
super(type);
}
@Override
public ListItem buildDefaultComponent(ComponentCons cons) {
ListItem columnsItem = new ListItem();
String id = "fd_" + IdUtil.fastSimpleUUID();
columnsItem.setId(id);
columnsItem.set_id(id);
columnsItem.setCompType("textarea");
columnsItem.setEle("el-input");
columnsItem.setCompName(cons.getLabel());
columnsItem.setCompIcon("textarea");
columnsItem.setViewType("text");
columnsItem.setType("textarea");
columnsItem.setConfig(true);
columnsItem.setShowLabel(true);
columnsItem.setLabel(cons.getLabel());
columnsItem.setLabelWidth(120);
columnsItem.setPlaceholder("请输入" + cons.getLabel());
columnsItem.setRequired(false);
columnsItem.setMaxLength(200);
columnsItem.setShowWordLimit(true);
columnsItem.setGutter(15);
columnsItem.setSpan(24);
columnsItem.setClearable(true);
columnsItem.setDisabled(false);
columnsItem.setReadonly(false);
columnsItem.setRows(4);
columnsItem.setStatus("normal");
columnsItem.setValue(""); //设置默认值
columnsItem.setRules(Lists.newArrayList());
columnsItem.setRuleError("该字段不能为空");
columnsItem.setRulesType("default");
columnsItem.setLayout("colItem");
return columnsItem;
}
@Override
public String getType() {
return ComponentEnum.TEXTAREA.getValue();
}
}
package com.mortals.xhx.common.pdu.gen.component;
import com.mortals.xhx.common.formdesign.TableColItem;
import com.mortals.xhx.common.pdu.NodeEntity;
import lombok.Data;
import org.w3c.dom.Document;
......@@ -25,4 +26,9 @@ public class ComponentCons {
private List<NodeEntity> list;
private Document document;
private List<TableColItem> colList;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment