Browse Source

页面设计

master
郑根木 2 years ago
parent
commit
3bd471a256
17 changed files with 216 additions and 107 deletions
  1. +66
    -0
      smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelForm.java
  2. +13
    -0
      smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelFormCache.java
  3. +43
    -26
      smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelFormHelper.java
  4. +2
    -2
      smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelFormLoadHandler.java
  5. +3
    -4
      smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelFormSaveHandler.java
  6. +31
    -14
      smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDataset.java
  7. +0
    -1
      smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDatasetField.java
  8. +11
    -0
      smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDatasets.java
  9. +5
    -3
      smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/AbstractDynPageHandler.java
  10. +1
    -1
      smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageHelper.java
  11. +0
    -22
      smtweb-system/sw-system-bpm/src/main/resources/static/template/incModel/inc_dataset.ftl
  12. +4
    -2
      smtweb-system/sw-system-bpm/src/main/resources/static/template/incModel/inc_filter.ftl
  13. +4
    -2
      smtweb-system/sw-system-bpm/src/main/resources/static/template/incModel/inc_form.ftl
  14. +1
    -1
      smtweb-system/sw-system-bpm/src/main/resources/static/template/incModel/inc_grid_opt.ftl
  15. +28
    -0
      smtweb-system/sw-system-bpm/src/main/resources/static/template/incModel/inc_model.ftl
  16. +2
    -1
      smtweb-system/sw-system-bpm/src/main/resources/static/template/model_simple.ftl
  17. +2
    -28
      smtweb-system/sw-system-bpm/src/test/java/cc/smtweb/system/bpm/test/ModelFormTest.java

+ 66
- 0
smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelForm.java View File

@@ -1,7 +1,10 @@
package cc.smtweb.system.bpm.web.design.form; package cc.smtweb.system.bpm.web.design.form;


import cc.smtweb.framework.core.annotation.SwTable; import cc.smtweb.framework.core.annotation.SwTable;
import cc.smtweb.framework.core.common.SwMap;
import cc.smtweb.framework.core.db.impl.DefaultEntity; import cc.smtweb.framework.core.db.impl.DefaultEntity;
import cc.smtweb.system.bpm.web.design.form.define.PageDatasets;
import cc.smtweb.system.bpm.web.design.form.define.PageModel;


/** /**
* Created by Akmm at 2022/4/15 17:26 * Created by Akmm at 2022/4/15 17:26
@@ -9,6 +12,66 @@ import cc.smtweb.framework.core.db.impl.DefaultEntity;
@SwTable("ASP_MODEL_FORM") @SwTable("ASP_MODEL_FORM")
public class ModelForm extends DefaultEntity { public class ModelForm extends DefaultEntity {
public static final String ENTITY_NAME = "ASP_MODEL_FORM"; public static final String ENTITY_NAME = "ASP_MODEL_FORM";
//将相关信息缓存起来
private transient long masterTableId = -1;
private transient PageDatasets datasets;
private transient SwMap opts;

public void clearEx() {
masterTableId = -1L;
datasets = null;
opts = null;
}

public long getMasterTableId() {
if (masterTableId < 0) {
synchronized (ModelForm.class) {
if (masterTableId < 0) {
datasets = ModelFormHelper.parsePageDataset(getDataset());
if (datasets == null) {
masterTableId = 0;
} else {
masterTableId = datasets.findMasterTableId();
}
}
}
}
return masterTableId;
}

public void setMasterTableId(long masterTableId) {
this.masterTableId = masterTableId;
}

public PageDatasets getDatasets() {
if (datasets == null) {
synchronized (ModelForm.class) {
if (datasets == null) {
datasets = ModelFormHelper.parsePageDataset(getDataset());
}
}
}
return datasets;
}

public void setDatasets(PageDatasets datasets) {
this.datasets = datasets;
}

public SwMap getOpts() {
if (opts == null) {
synchronized (ModelForm.class) {
if (opts == null) {
opts = ModelFormHelper.parseFormOption(getOption());
}
}
}
return opts;
}

public void setOpts(SwMap opts) {
this.opts = opts;
}


public ModelForm() { public ModelForm() {
super(ENTITY_NAME); super(ENTITY_NAME);
@@ -84,6 +147,7 @@ public class ModelForm extends DefaultEntity {


public void setOption(String mf_option) { public void setOption(String mf_option) {
put("mf_option", mf_option); put("mf_option", mf_option);
opts = null;
} }


public String getTmpl() { public String getTmpl() {
@@ -100,6 +164,8 @@ public class ModelForm extends DefaultEntity {


public void setDataset(String mf_dataset) { public void setDataset(String mf_dataset) {
put("mf_dataset", mf_dataset); put("mf_dataset", mf_dataset);
datasets = null;
masterTableId = 0L;
} }


public long getCreateUid() { public long getCreateUid() {


+ 13
- 0
smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelFormCache.java View File

@@ -3,6 +3,7 @@ package cc.smtweb.system.bpm.web.design.form;
import cc.smtweb.framework.core.annotation.SwCache; import cc.smtweb.framework.core.annotation.SwCache;
import cc.smtweb.framework.core.cache.AbstractCache; import cc.smtweb.framework.core.cache.AbstractCache;
import cc.smtweb.framework.core.cache.CacheManager; import cc.smtweb.framework.core.cache.CacheManager;
import cc.smtweb.framework.core.common.SwConsts;
import cc.smtweb.framework.core.db.DbEngine; import cc.smtweb.framework.core.db.DbEngine;
import cc.smtweb.framework.core.db.EntityDao; import cc.smtweb.framework.core.db.EntityDao;


@@ -19,6 +20,7 @@ public class ModelFormCache extends AbstractCache<ModelForm> {
private final static String mk = "k"; private final static String mk = "k";
private final static String mp = "prj"; private final static String mp = "prj";
private final static String mc = "c"; private final static String mc = "c";
private final static String mt = "t";


public static ModelFormCache getInstance() { public static ModelFormCache getInstance() {
return CacheManager.getIntance().getCache(ModelFormCache.class); return CacheManager.getIntance().getCache(ModelFormCache.class);
@@ -28,6 +30,7 @@ public class ModelFormCache extends AbstractCache<ModelForm> {
regMap(mk, k-> k.getName().toUpperCase()); regMap(mk, k-> k.getName().toUpperCase());
regList(mp, k-> String.valueOf(k.getPrjId())); regList(mp, k-> String.valueOf(k.getPrjId()));
regList(mc, k-> String.valueOf(k.getMcId())); regList(mc, k-> String.valueOf(k.getMcId()));
regList(mt, k-> k.getMasterTableId() + SwConsts.SPLIT_CHAR + k.getType());
// regList(mf, k-> k.get); // regList(mf, k-> k.get);
} }


@@ -69,4 +72,14 @@ public class ModelFormCache extends AbstractCache<ModelForm> {
list.sort(comparator); list.sort(comparator);
return list; return list;
} }

//根据表id,找对应的页面设计
public Set<ModelForm> getListByTable(long tableId, int type) {
return getListByKey(mt, tableId + SwConsts.SPLIT_CHAR + type);
}

public String getText(long id) {
ModelForm form = get(id);
return form != null ? form.getTitle() : String.valueOf(id);
}
} }

+ 43
- 26
smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelFormHelper.java View File

@@ -46,11 +46,11 @@ public class ModelFormHelper {
return cache.get(formId); return cache.get(formId);
} }


public static PageDatasets parsePageDataset(long formId) {
/*public static PageDatasets parsePageDataset(long formId) {
ModelForm form = getFromCache(formId); ModelForm form = getFromCache(formId);
if (form == null) return null; if (form == null) return null;
return parsePageDataset(form.getDataset()); return parsePageDataset(form.getDataset());
}
}*/


public static PageDatasets parsePageDataset(String jsonStr) { public static PageDatasets parsePageDataset(String jsonStr) {
if (StringUtils.isEmpty(jsonStr)) return null; if (StringUtils.isEmpty(jsonStr)) return null;
@@ -83,9 +83,9 @@ public class ModelFormHelper {
* @param form * @param form
* @return * @return
*/ */
public static String buildSaveModel(ModelForm form) {
PageDatasets datasets = parsePageDataset(form.getDataset());
PageModel pageInfo = parsePageInfo(form.getContent());
public static String buildSaveModel(ModelForm form, String jsonStr) {
PageDatasets datasets = form.getDatasets();
PageModel pageInfo = parsePageInfo(jsonStr);
if (pageInfo == null) return ""; if (pageInfo == null) return "";
for (Map<String, Object> model : pageInfo.model) { for (Map<String, Object> model : pageInfo.model) {
buildSaveModelFields(datasets, pageInfo, model, true); buildSaveModelFields(datasets, pageInfo, model, true);
@@ -106,7 +106,7 @@ public class ModelFormHelper {
for (Map<String, Object> field : fields) { for (Map<String, Object> field : fields) {
String fn = (String) field.get("field"); String fn = (String) field.get("field");
if (StringUtils.isEmpty(fn)) throw new SwException("model[" + db + "]." + key + "未配置字段名field,无法解析!"); if (StringUtils.isEmpty(fn)) throw new SwException("model[" + db + "]." + key + "未配置字段名field,无法解析!");
PageDatasetField pdf = isField ? pds.getField(fn) : pds.getFilter(fn);
PageDatasetField pdf = isField ? pds.findFieldByName(fn) : pds.findFilterByName(fn);
if (pdf == null) throw new SwException("model[" + db + "]." + key + "未找到定义的数据集字段(" + fn + "),无法解析!"); if (pdf == null) throw new SwException("model[" + db + "]." + key + "未找到定义的数据集字段(" + fn + "),无法解析!");


if (CommUtil.isStrEquals(MapUtil.readString(field, "label"), pdf.label)) { if (CommUtil.isStrEquals(MapUtil.readString(field, "label"), pdf.label)) {
@@ -171,8 +171,7 @@ public class ModelFormHelper {
* @return * @return
* @throws JsonProcessingException * @throws JsonProcessingException
*/ */
public static String buildReqDataset(String jsonStr) {
PageDatasets datasets = parsePageDataset(jsonStr);
public static String buildReqDataset(PageDatasets datasets) {
if (datasets == null || datasets.list == null) return ""; if (datasets == null || datasets.list == null) return "";
return JsonUtil.encodeString(datasets.list); return JsonUtil.encodeString(datasets.list);
} }
@@ -185,7 +184,7 @@ public class ModelFormHelper {
* @return * @return
*/ */
public static String buildReqModel(ModelForm form) { public static String buildReqModel(ModelForm form) {
PageDatasets datasets = parsePageDataset(form.getDataset());
PageDatasets datasets = form.getDatasets();
PageModel pageInfo = parsePageInfo(form.getContent()); PageModel pageInfo = parsePageInfo(form.getContent());
if (pageInfo == null) return ""; if (pageInfo == null) return "";
for (Map<String, Object> model : pageInfo.model) { for (Map<String, Object> model : pageInfo.model) {
@@ -208,7 +207,7 @@ public class ModelFormHelper {
for (Map<String, Object> field : fields) { for (Map<String, Object> field : fields) {
String fn = (String) field.get("field"); String fn = (String) field.get("field");
if (StringUtils.isEmpty(fn)) continue; if (StringUtils.isEmpty(fn)) continue;
PageDatasetField pdf = isField ? dataSet.getField(fn) : dataSet.getFilter(fn);
PageDatasetField pdf = isField ? dataSet.findFieldByName(fn) : dataSet.findFilterByName(fn);
if (pdf == null) continue; if (pdf == null) continue;
if (!field.containsKey("label")) { if (!field.containsKey("label")) {
field.put("label", pdf.label); field.put("label", pdf.label);
@@ -245,7 +244,7 @@ public class ModelFormHelper {
} }


public static String buildEngineModel(ModelForm form, SwMap params, UserSession us, boolean incExtra) { public static String buildEngineModel(ModelForm form, SwMap params, UserSession us, boolean incExtra) {
PageDatasets datasets = parsePageDataset(form.getDataset());
PageDatasets datasets = form.getDatasets();
if (datasets == null || datasets.list == null) return ""; if (datasets == null || datasets.list == null) return "";


SwMap ret = new SwMap(); SwMap ret = new SwMap();
@@ -317,7 +316,7 @@ public class ModelFormHelper {
if (widgetForm == null) throw new SwException("没有找到指定的控件定义!id=" + id); if (widgetForm == null) throw new SwException("没有找到指定的控件定义!id=" + id);
SwMap w = new SwMap(); SwMap w = new SwMap();
widget.put("w" + id, w); widget.put("w" + id, w);
SwMap widgetOpts = parseFormOption(widgetForm.getOption());
SwMap widgetOpts = widgetForm.getOpts();
w.put("service", widgetForm.getService()); w.put("service", widgetForm.getService());
if (widgetOpts != null) w.putAll(widgetOpts); if (widgetOpts != null) w.putAll(widgetOpts);
w.put("define", buildEngineModel(widgetForm, params, us, false)); w.put("define", buildEngineModel(widgetForm, params, us, false));
@@ -335,7 +334,7 @@ public class ModelFormHelper {
//获取控件的filter信息 //获取控件的filter信息
public static List<SwMap> buildWidgetFilter(ModelForm bean) { public static List<SwMap> buildWidgetFilter(ModelForm bean) {
List<SwMap> listRet = new ArrayList<>(); List<SwMap> listRet = new ArrayList<>();
PageDatasets datasets = ModelFormHelper.parsePageDataset(bean.getDataset());
PageDatasets datasets = bean.getDatasets();
if (datasets == null || datasets.list == null) return listRet; if (datasets == null || datasets.list == null) return listRet;
for (PageDataset ds : datasets.list) { for (PageDataset ds : datasets.list) {
for (PageDatasetFilter filter : ds.filters) { for (PageDatasetFilter filter : ds.filters) {
@@ -372,13 +371,13 @@ public class ModelFormHelper {
* @param tmplId * @param tmplId
*/ */
public static void buildSaveModelByTmpl(ModelForm form, String tmplId) { public static void buildSaveModelByTmpl(ModelForm form, String tmplId) {
PageDatasets datasets = parsePageDataset(form.getDataset());
PageDatasets datasets = form.getDatasets();
SwMap tmplModel = JsonUtil.parse(form.getTmpl(), SwMap.class); SwMap tmplModel = JsonUtil.parse(form.getTmpl(), SwMap.class);
tmplModel.put("title", form.getTitle()); tmplModel.put("title", form.getTitle());
tmplModel.put("datasets", parsePageDataset(form.getDataset()));
tmplModel.put("datasets", form.getDatasets());
SwMap layout = tmplModel.readMap("layout"); SwMap layout = tmplModel.readMap("layout");
//用到的自定义控件 //用到的自定义控件
Set<String> setWidget = new HashSet<>();
Set<Long> setWidget = new HashSet<>();
for (String key : layout.keySet()) { for (String key : layout.keySet()) {
List<Map<String, Object>> groups = layout.readListMap(key); List<Map<String, Object>> groups = layout.readListMap(key);
for (Map<String, Object> group : groups) { for (Map<String, Object> group : groups) {
@@ -397,17 +396,18 @@ public class ModelFormHelper {
} }
String widgetRef = ""; String widgetRef = "";
if (!setWidget.isEmpty()) { if (!setWidget.isEmpty()) {
for (String s: setWidget) {
for (long s: setWidget) {
widgetRef += ",\"" + s + "\""; widgetRef += ",\"" + s + "\"";
} }
widgetRef = widgetRef.substring(1); widgetRef = widgetRef.substring(1);
} }
tmplModel.put("widgetRef", widgetRef); tmplModel.put("widgetRef", widgetRef);
form.setContent(CodeGenerator.getInstance().generate(tmplModel, tmplId));
final String model = CodeGenerator.getInstance().generate(tmplModel, tmplId);
form.setContent(model);
// form.setContent(buildSaveModel(form)); // form.setContent(buildSaveModel(form));
} }


private static void buildTmplFields(List<Map<String, Object>> fields, PageDatasets datasets, Set<String> setWidget, boolean isField) {
private static void buildTmplFields(List<Map<String, Object>> fields, PageDatasets datasets, Set<Long> setWidget, boolean isField) {
if (fields == null) return; if (fields == null) return;
PageDataset dataset = null; PageDataset dataset = null;
for (Map<String, Object> field : fields) { for (Map<String, Object> field : fields) {
@@ -419,18 +419,33 @@ public class ModelFormHelper {
String fn = MapUtil.readString(field, "field"); String fn = MapUtil.readString(field, "field");
PageDatasetField pdf; PageDatasetField pdf;
if (!isField) { if (!isField) {
pdf = dataset.getFilter(fn);
pdf = dataset.findFilterById(fn);
} else { } else {
pdf = dataset.getField(fn);
if (pdf == null) pdf = dataset.getFilter(fn);
pdf = dataset.findFieldById(fn);
if (pdf == null) pdf = dataset.findFilterByName(fn);
} }
if (pdf == null) throw new SwException("model[" + dsId + "]未找到定义的数据集字段(" + fn + "),无法解析!"); if (pdf == null) throw new SwException("model[" + dsId + "]未找到定义的数据集字段(" + fn + "),无法解析!");
field.put("id", pdf.id);
field.put("field", pdf.field);
field.put("name", pdf.name);
field.put("label", pdf.label); field.put("label", pdf.label);
field.put("required", pdf.isFieldNotNull()); field.put("required", pdf.isFieldNotNull());
field.put("widget", 0);
final SwEnum.DataTypeBean dtb = SwEnum.DataType.instance.getByValue(pdf.dataType); final SwEnum.DataTypeBean dtb = SwEnum.DataType.instance.getByValue(pdf.dataType);
if (dtb != null) { if (dtb != null) {
if (dtb.dataLength > 0) field.put("maxlength", dtb.dataLength);
field.put("maxlength", dtb.dataLength);
field.put("editor", dtb.editor); field.put("editor", dtb.editor);
if (pdf.link > 0) {
long widget = getFieldCtrl(pdf.link);
if (widget > 0) {
setWidget.add(widget);
field.put("widget", widget);
field.put("widgetText", ModelFormCache.getInstance().getText(widget));
}
}
} else {
field.put("maxlength", 0);
field.put("editor", SwEnum.EditorType.INPUT.value);
} }
} }
} }
@@ -439,10 +454,12 @@ public class ModelFormHelper {
* 计算字段适用控件 * 计算字段适用控件
* *
* @param tableId * @param tableId
* @param fieldName
* @return * @return
*/ */
public String getFieldCtrl(long tableId, String fieldName) {
return null;
public static long getFieldCtrl(long tableId) {
Set<ModelForm> set = ModelFormCache.getInstance().getListByTable(tableId, SwEnum.FormType.WIDGET.value);
if (set == null || set.isEmpty()) return 0L;
ModelForm form = set.iterator().next();
return (form != null) ? form.getEntityId() : 0L;
} }
} }

+ 2
- 2
smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelFormLoadHandler.java View File

@@ -17,7 +17,7 @@ public class ModelFormLoadHandler extends DefaultLoadHandler<ModelForm> {
@Override @Override
protected ModelForm loadComp(long id) { protected ModelForm loadComp(long id) {
ModelForm bean = super.loadComp(id); ModelForm bean = super.loadComp(id);
SwMap opts = ModelFormHelper.parseFormOption(bean.getOption());
SwMap opts = bean.getOpts();
if (opts != null) { if (opts != null) {
ModelFormHelper.buildOptsEx(bean, opts); ModelFormHelper.buildOptsEx(bean, opts);
bean.setOption(JsonUtil.encodeString(opts)); bean.setOption(JsonUtil.encodeString(opts));
@@ -33,7 +33,7 @@ public class ModelFormLoadHandler extends DefaultLoadHandler<ModelForm> {
long id = params.readLong("id"); long id = params.readLong("id");
ModelForm bean = super.loadComp(id); ModelForm bean = super.loadComp(id);
if (bean == null) throw new SwException("没有找到指定定义信息!id=" + id); if (bean == null) throw new SwException("没有找到指定定义信息!id=" + id);
return R.success(ModelFormHelper.buildReqDataset(bean.getDataset()));
return R.success(ModelFormHelper.buildReqDataset(bean.getDatasets()));
} }


//页面设计 - 加载页面model定义 //页面设计 - 加载页面model定义


+ 3
- 4
smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelFormSaveHandler.java View File

@@ -25,7 +25,7 @@ public class ModelFormSaveHandler extends DefaultSaveHandler<ModelForm> {


@Override @Override
protected void updateBean(EntityDao<ModelForm> dao) { protected void updateBean(EntityDao<ModelForm> dao) {
SwMap opts = ModelFormHelper.parseFormOption(bean.getOption());
SwMap opts = bean.getOpts();
if (opts != null) { if (opts != null) {
opts.remove(ModelFormHelper.KEY_EVENT_PATH); opts.remove(ModelFormHelper.KEY_EVENT_PATH);
bean.setOption(JsonUtil.encodeString(opts)); bean.setOption(JsonUtil.encodeString(opts));
@@ -73,8 +73,7 @@ public class ModelFormSaveHandler extends DefaultSaveHandler<ModelForm> {
if (StringUtils.isEmpty(data)) { if (StringUtils.isEmpty(data)) {
throw new SwException("没有待保存的数据!"); throw new SwException("没有待保存的数据!");
} }
bean.setContent(data);
bean.setContent(ModelFormHelper.buildSaveModel(bean));
bean.setContent(ModelFormHelper.buildSaveModel(bean, data));
DbEngine.getInstance().doTrans(new AbsDbWorker() { DbEngine.getInstance().doTrans(new AbsDbWorker() {
@Override @Override
public void work() { public void work() {
@@ -117,7 +116,7 @@ public class ModelFormSaveHandler extends DefaultSaveHandler<ModelForm> {
ModelTable table = ModelTableCache.getInstance().getByName(tableName); ModelTable table = ModelTableCache.getInstance().getByName(tableName);
ModelField field = table.findFieldByType(SwEnum.FieldType.UPDATE_USER.value); ModelField field = table.findFieldByType(SwEnum.FieldType.UPDATE_USER.value);
if (field != null) bean.put(field.getName(), us.getUserId()); if (field != null) bean.put(field.getName(), us.getUserId());
dao.updateEntity(bean, "mf_content", "mf_tmpl");
dao.updateEntity(bean, "mf_content,mf_tmpl");
} }


@Override @Override


+ 31
- 14
smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDataset.java View File

@@ -44,27 +44,43 @@ public class PageDataset {
public PageDatasetDynCond dynCond; public PageDatasetDynCond dynCond;
public List<PageDatasetSortField> sortFields; public List<PageDatasetSortField> sortFields;


private Map<String, PageDatasetField> mapField;
private Map<String, PageDatasetFilter> mapFilter;
//按字段名的缓存
private Map<String, PageDatasetField> mapFieldName;
private Map<String, PageDatasetFilter> mapFilterName;
//按字段Id的缓存
private Map<String, PageDatasetField> mapFieldId;
private Map<String, PageDatasetFilter> mapFilterId;


public PageDatasetField getField(String name) {
if (mapField == null) resetFields();
return mapField.get(name);
public PageDatasetField findFieldByName(String name) {
if (mapFieldName == null) resetFields();
return mapFieldName.get(name);
} }


public PageDatasetFilter getFilter(String name) {
if (mapFilter == null) resetFields();
return mapFilter.get(name);
public PageDatasetFilter findFilterByName(String name) {
if (mapFilterName == null) resetFields();
return mapFilterName.get(name);
}

public PageDatasetField findFieldById(String id) {
if (mapFieldId == null) resetFields();
return mapFieldId.get(id);
}

public PageDatasetFilter findFilterById(String id) {
if (mapFilterId == null) resetFields();
return mapFilterId.get(id);
} }


/** /**
* 重置丰富字段信息 * 重置丰富字段信息
*/ */
public void resetFields() { public void resetFields() {
mapField = new HashMap<>();
resetFields(mapField, fields);
mapFilter = new HashMap<>();
resetFields(mapFilter, filters);
mapFieldName = new HashMap<>();
mapFieldId = new HashMap<>();
resetFields(mapFieldName, mapFieldId, fields);
mapFilterName = new HashMap<>();
mapFilterId = new HashMap<>();
resetFields(mapFilterName, mapFilterId, filters);
for (PageDatasetFilter filter: filters) { for (PageDatasetFilter filter: filters) {
if (StringUtils.isEmpty(filter.sqlName)) { if (StringUtils.isEmpty(filter.sqlName)) {
filter.sqlName = filter.field; filter.sqlName = filter.field;
@@ -72,11 +88,12 @@ public class PageDataset {
} }
} }


private <T extends PageDatasetField> void resetFields(Map<String, T> map, List<T> list) {
private <T extends PageDatasetField> void resetFields(Map<String, T> mapName, Map<String, T> mapId, List<T> list) {
ModelTableCache cache = ModelTableCache.getInstance(); ModelTableCache cache = ModelTableCache.getInstance();
ModelTable table = null; ModelTable table = null;
for (T field: list) { for (T field: list) {
map.put(field.name, field);
mapName.put(field.name, field);
mapId.put(field.id, field);
if (field.table <= 0 || StringUtils.isEmpty(field.field)) continue; if (field.table <= 0 || StringUtils.isEmpty(field.field)) continue;
if (table == null || table.getId() != field.table) { if (table == null || table.getId() != field.table) {
table = cache.get(field.table); table = cache.get(field.table);


+ 0
- 1
smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDatasetField.java View File

@@ -33,7 +33,6 @@ public class PageDatasetField {
public long link; public long link;
//控件类型:TEXT/TextArea/NUMBER/COMBO //控件类型:TEXT/TextArea/NUMBER/COMBO
public String editor; public String editor;
public String editModel;


@JsonIgnore @JsonIgnore
public boolean isFieldNotNull() { public boolean isFieldNotNull() {


+ 11
- 0
smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/define/PageDatasets.java View File

@@ -34,6 +34,17 @@ public class PageDatasets {
} }
} }


public PageDataset findMasterDataset() {
if (list == null || list.isEmpty()) return null;
return this.list.get(0);
}

public long findMasterTableId() {
PageDataset ds = findMasterDataset();
if (ds == null) return 0L;
return ds.masterTable;
}

public PageDataset findById(String id) { public PageDataset findById(String id) {
return mapId.get(id); return mapId.get(id);
} }


+ 5
- 3
smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/AbstractDynPageHandler.java View File

@@ -4,6 +4,7 @@ import cc.smtweb.framework.core.common.SwException;
import cc.smtweb.framework.core.common.SwMap; import cc.smtweb.framework.core.common.SwMap;
import cc.smtweb.framework.core.mvc.service.AbstractHandler; import cc.smtweb.framework.core.mvc.service.AbstractHandler;
import cc.smtweb.framework.core.session.UserSession; import cc.smtweb.framework.core.session.UserSession;
import cc.smtweb.system.bpm.web.design.form.ModelForm;
import cc.smtweb.system.bpm.web.design.form.ModelFormHelper; import cc.smtweb.system.bpm.web.design.form.ModelFormHelper;
import cc.smtweb.system.bpm.web.design.form.define.PageDataset; import cc.smtweb.system.bpm.web.design.form.define.PageDataset;
import cc.smtweb.system.bpm.web.design.form.define.PageDatasets; import cc.smtweb.system.bpm.web.design.form.define.PageDatasets;
@@ -22,8 +23,9 @@ public abstract class AbstractDynPageHandler extends AbstractHandler {
public void init(SwMap params, UserSession us) { public void init(SwMap params, UserSession us) {
super.init(params, us); super.init(params, us);
pageId = params.readLong("pageId"); pageId = params.readLong("pageId");

datasets = ModelFormHelper.parsePageDataset(pageId);
ModelForm form = ModelFormHelper.getFromCache(pageId);
if (form == null) throw new SwException("没有找到页面定义数据!");
datasets = form.getDatasets();
if (datasets == null || datasets.list == null) throw new SwException("没有找到页面定义数据!"); if (datasets == null || datasets.list == null) throw new SwException("没有找到页面定义数据!");


provider.pageId = pageId; provider.pageId = pageId;
@@ -36,7 +38,7 @@ public abstract class AbstractDynPageHandler extends AbstractHandler {


//获取第一个,主数据集 //获取第一个,主数据集
protected PageDataset findMasterDataset() { protected PageDataset findMasterDataset() {
return datasets.list.get(0);
return datasets.findMasterDataset();
} }


//从参数读取数据集定义 //从参数读取数据集定义


+ 1
- 1
smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/engine/dynPage/DynPageHelper.java View File

@@ -180,7 +180,7 @@ public class DynPageHelper {
boolean isNameSelf = setFixedFilter.contains(dynCond.param); boolean isNameSelf = setFixedFilter.contains(dynCond.param);
setFixedFilter.remove(dynCond.param); setFixedFilter.remove(dynCond.param);


PageDatasetFilter filter = dataSet.getFilter(dynCond.param);
PageDatasetFilter filter = dataSet.findFilterByName(dynCond.param);
if (filter == null) throw new SwException("没有找到filter(" + dynCond.param + ")!"); if (filter == null) throw new SwException("没有找到filter(" + dynCond.param + ")!");


Object value = null; Object value = null;


+ 0
- 22
smtweb-system/sw-system-bpm/src/main/resources/static/template/incModel/inc_dataset.ftl View File

@@ -1,22 +0,0 @@
{
"dataset": "${dataset.id}",
"label": "${dataset.label}",
"fields": [
<#list fields as field>
{
"id": "${field.id}",
"field": "${field.field}"
},
</#list>
],
"filters": [
<#list filters as field>
{
"id": "${field.id}",
"field": "${field.field}"
"required": ${field.required},
"type": "input"
},
</#list>
]
},

+ 4
- 2
smtweb-system/sw-system-bpm/src/main/resources/static/template/incModel/inc_filter.ftl View File

@@ -17,15 +17,17 @@
"props": { "props": {
"label": "${filter.label}", "label": "${filter.label}",
"type": "text", "type": "text",
<#if filter.maxlength gt 0>
"maxlength": ${filter.maxlength}, "maxlength": ${filter.maxlength},
</#if>
"placeholder": "请输入查询内容", "placeholder": "请输入查询内容",
"labelWidth": 100, "labelWidth": 100,
"dataset": "${filter.dataset}", "dataset": "${filter.dataset}",
"field": "${filter.field}",
"field": "${filter.id}",
"name": "${filter.name}" "name": "${filter.name}"
}, },
"events": {} "events": {}
},
}<#if filter_has_next>,</#if>
</#list> </#list>
{ {
"id": "id${newId()}", "id": "id${newId()}",


+ 4
- 2
smtweb-system/sw-system-bpm/src/main/resources/static/template/incModel/inc_form.ftl View File

@@ -17,15 +17,17 @@
"props": { "props": {
"label": "${field.label}", "label": "${field.label}",
"type": "text", "type": "text",
<#if field.maxlength gt 0>
"maxlength": ${field.maxlength}, "maxlength": ${field.maxlength},
</#if>
"placeholder": "请输入内容", "placeholder": "请输入内容",
"labelWidth": 100, "labelWidth": 100,
"dataset": "${field.dataset}", "dataset": "${field.dataset}",
"field": "${field.field}",
"field": "${field.id}",
"name": "${field.name}" "name": "${field.name}"
}, },
"events": {} "events": {}
},
}<#if field_has_next>,</#if>
</#list> </#list>
] ]
} }

+ 1
- 1
smtweb-system/sw-system-bpm/src/main/resources/static/template/incModel/inc_grid_opt.ftl View File

@@ -32,7 +32,7 @@
"field": "${col.field}", "field": "${col.field}",
"label": "${col.label}" "label": "${col.label}"
} }
},
}<#if col_has_next>,</#if>
</#list> </#list>
], ],
"button": [ "button": [


+ 28
- 0
smtweb-system/sw-system-bpm/src/main/resources/static/template/incModel/inc_model.ftl View File

@@ -0,0 +1,28 @@
{
"dataset": "${dataset.id}",
"label": "${dataset.label}",
"fields": [
<#list fields as field>
{
"id": "${field.id}",
"field": "${field.field}"<#if field.widget gt 0>,
"lookup": {
"widgetId": "${field.widget}",
"widgetId_text": "${field.widgetText}",
"filters": []
}
</#if>
}<#if field_has_next>,</#if>
</#list>
],
"filters": [
<#list filters as field>
{
"id": "${field.field}",
"field": "${field.field}",
"required": ${field.required},
"type": "input"
}<#if field_has_next>,</#if>
</#list>
]
}

+ 2
- 1
smtweb-system/sw-system-bpm/src/main/resources/static/template/model_simple.ftl View File

@@ -27,6 +27,7 @@
<#elseif (group.type == "card")> <#elseif (group.type == "card")>
<#include "incModel/inc_form.ftl"/> <#include "incModel/inc_form.ftl"/>
</#if> </#if>
<#if group_has_next>,</#if>
</#list> </#list>
] ]
} }
@@ -34,7 +35,7 @@
], ],
"model": [ "model": [
<#list datasets as dataset> <#list datasets as dataset>
<#include "incModel/inc_dataset.ftl"/>
<#include "incModel/inc_model.ftl"/><#if dataset_has_next>,</#if>
</#list> </#list>
], ],
"option": { "option": {


+ 2
- 28
smtweb-system/sw-system-bpm/src/test/java/cc/smtweb/system/bpm/test/ModelFormTest.java View File

@@ -67,34 +67,8 @@ public class ModelFormTest {
public void testBuildModelByTmpl() { public void testBuildModelByTmpl() {
ModelForm form = new ModelForm(); ModelForm form = new ModelForm();
form.setTitle("测试呀"); form.setTitle("测试呀");
form.setDataset("[{\"id\":\"ds_1813718bf0c\",\"name\":\"master\",\"label\":\"机构列表\",\"type\":\"list\",\"masterTable\":\"718391823709507584\",\"masterTable_text\":\"机构表\",\"idField\":\"pt_id\",\"lazy\":false,\"canEdit\":false,\"fields\":[{\"id\":\"id_1813718bf0e\",\"table\":\"718391823709507584\",\"field\":\"pt_id\",\"name\":\"pt_id\",\"fieldType\":1,\"notNull\":1,\"link\":\"0\"},{\"id\":\"id_1813718bf0f\",\"table\":\"718391823709507584\",\"field\":\"pt_parent_id\",\"name\":\"pt_parent_id\",\"fieldType\":4,\"notNull\":0,\"link\":\"0\"},{\"id\":\"id_1813718bf10\",\"table\":\"718391823709507584\",\"field\":\"pt_level_code\",\"name\":\"pt_level_code\",\"fieldType\":5,\"notNull\":0,\"link\":\"0\"},{\"id\":\"id_1813718bf11\",\"table\":\"718391823709507584\",\"field\":\"pt_area_id\",\"name\":\"pt_area_id\",\"fieldType\":0,\"notNull\":0,\"link\":\"718410950209703936\"},{\"id\":\"id_1813718bf12\",\"table\":\"718391823709507584\",\"field\":\"pt_code\",\"name\":\"pt_code\",\"fieldType\":2,\"notNull\":1,\"link\":\"0\"},{\"id\":\"id_1813718bf13\",\"table\":\"718391823709507584\",\"field\":\"pt_name\",\"name\":\"pt_name\",\"fieldType\":3,\"notNull\":1,\"link\":\"0\"},{\"id\":\"id_1813718bf14\",\"table\":\"718391823709507584\",\"field\":\"pt_type\",\"name\":\"pt_type\",\"fieldType\":0,\"notNull\":0,\"link\":\"0\"},{\"id\":\"id_1813718bf15\",\"table\":\"718391823709507584\",\"field\":\"pt_statu\",\"name\":\"pt_statu\",\"fieldType\":0,\"notNull\":0,\"link\":\"0\"},{\"id\":\"id_1813718bf16\",\"table\":\"718391823709507584\",\"field\":\"pt_linker\",\"name\":\"pt_linker\",\"fieldType\":0,\"notNull\":0,\"link\":\"0\"},{\"id\":\"id_1813718bf17\",\"table\":\"718391823709507584\",\"field\":\"pt_tel\",\"name\":\"pt_tel\",\"fieldType\":0,\"notNull\":0,\"link\":\"0\"},{\"id\":\"id_1813718bf18\",\"table\":\"718391823709507584\",\"field\":\"pt_addr\",\"name\":\"pt_addr\",\"fieldType\":0,\"notNull\":0,\"link\":\"0\"},{\"id\":\"id_1813718bf19\",\"table\":\"718391823709507584\",\"field\":\"pt_lon\",\"name\":\"pt_lon\",\"fieldType\":0,\"notNull\":0,\"link\":\"0\"},{\"id\":\"id_1813718bf1a\",\"table\":\"718391823709507584\",\"field\":\"pt_lat\",\"name\":\"pt_lat\",\"fieldType\":0,\"notNull\":0,\"link\":\"0\"},{\"id\":\"id_1813718bf1b\",\"table\":\"718391823709507584\",\"field\":\"pt_remark\",\"name\":\"pt_remark\",\"fieldType\":0,\"notNull\":0,\"link\":\"0\"}],\"filters\":[{\"id\":\"id_1813718bf21\",\"table\":\"718391823709507584\",\"field\":\"pt_name\",\"name\":\"pt_code\",\"fieldType\":3,\"notNull\":1,\"link\":\"0\",\"type\":\"input\",\"sqlName\":\"pt_name\",\"required\":false}],\"data\":[],\"dynCond\":{\"opt\":\"or\",\"children\":[{\"param\":\"pt_code\",\"opt\":\"like\"},{\"param\":\"pt_code\",\"opt\":\"like\"}]},\"sortFields\":[{\"field\":\"pt_code\",\"type\":\"asc\"}]}]");
form.setTmpl("{\n" +
" \"param\": {\n" +
" \"p1\": \"pp1\"\n" +
" },\n" +
" \"layout\": {\n" +
" \"c1\": [\n" +
" {\n" +
" \"name\": \"group2\",\n" +
" \"label\": \"分组2\",\n" +
" \"type\": \"list\",\n" +
" \"dataset\": \"ds_1813718bf0c\",\n" +
" \"fields\": [\n" +
" {\n" +
" \"field\": \"pt_parent_id\",\n" +
" \"dataset\": \"ds_1813718bf0c\"\n" +
" }\n" +
" ],\n" +
" \"cfilters\": [\n" +
" {\n" +
" \"field\": \"pt_code\",\n" +
" \"dataset\": \"ds_1813718bf0c\"\n" +
" }\n" +
" ]\n" +
" }\n" +
" ]\n" +
" }\n" +
" }");
form.setDataset("[{\"id\":\"ds_18147381016\",\"name\":\"master\",\"label\":\"主数据集\",\"type\":\"form\",\"masterTable\":\"2\",\"masterTable_text\":\"目录\",\"idField\":\"mc_id\",\"lazy\":false,\"canEdit\":true,\"fields\":[{\"id\":\"id_1814738101b\",\"table\":\"2\",\"field\":\"mc_id\",\"name\":\"mc_id\",\"fieldType\":1,\"notNull\":1,\"link\":\"0\"},{\"id\":\"id_1814738101c\",\"table\":\"2\",\"field\":\"mc_parent_id\",\"name\":\"mc_parent_id\",\"fieldType\":4,\"notNull\":0,\"link\":\"2\"},{\"id\":\"id_1814738101d\",\"table\":\"2\",\"field\":\"mc_level_code\",\"name\":\"mc_level_code\",\"fieldType\":5,\"notNull\":0,\"link\":\"0\"},{\"id\":\"id_1814738101e\",\"table\":\"2\",\"field\":\"mc_prj_id\",\"name\":\"mc_prj_id\",\"fieldType\":0,\"notNull\":1,\"link\":\"1\"},{\"id\":\"id_1814738101f\",\"table\":\"2\",\"field\":\"mc_code\",\"name\":\"mc_code\",\"fieldType\":2,\"notNull\":0,\"link\":\"0\"},{\"id\":\"id_18147381020\",\"table\":\"2\",\"field\":\"mc_name\",\"name\":\"mc_name\",\"fieldType\":3,\"notNull\":0,\"link\":\"0\"}],\"filters\":[],\"data\":[],\"dynCond\":{\"opt\":\"and\"},\"sortFields\":[]}]");
form.setTmpl("{\"param\":{},\"layout\":{\"c1\":[{\"id\":\"id18147381019\",\"name\":\"group1\",\"label\":\"分组1\",\"type\":\"card\",\"fields\":[{\"field\":\"id_1814738101c\",\"field_text\":\"mc_parent_id\",\"field_label\":\"父ID\",\"dataset\":\"ds_18147381016\",\"dataset_text\":\"master\"},{\"field\":\"id_1814738101d\",\"field_text\":\"mc_level_code\",\"field_label\":\"级次码\",\"dataset\":\"ds_18147381016\",\"dataset_text\":\"master\"},{\"field\":\"id_1814738101e\",\"field_text\":\"mc_prj_id\",\"field_label\":\"所属项目\",\"dataset\":\"ds_18147381016\",\"dataset_text\":\"master\"},{\"field\":\"id_1814738101f\",\"field_text\":\"mc_code\",\"field_label\":\"编码\",\"dataset\":\"ds_18147381016\",\"dataset_text\":\"master\"},{\"field\":\"id_18147381020\",\"field_text\":\"mc_name\",\"field_label\":\"编码\",\"dataset\":\"ds_18147381016\",\"dataset_text\":\"master\"}],\"sfilters\":[],\"cfilters\":[]}]}}");
ModelFormHelper.buildSaveModelByTmpl(form, "model_simple"); ModelFormHelper.buildSaveModelByTmpl(form, "model_simple");
System.out.println(form.getContent()); System.out.println(form.getContent());
} }


Loading…
Cancel
Save