Browse Source

修正页面中引用的控件定义处理

master
郑根木 2 years ago
parent
commit
f89cb279f2
8 changed files with 492 additions and 2 deletions
  1. +4
    -0
      smtweb-system/sw-system-bpm/pom.xml
  2. +145
    -0
      smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/resolver/CodeResolver.java
  3. +7
    -2
      smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/web/design/form/ModelFormHelper.java
  4. +74
    -0
      smtweb-system/sw-system-bpm/src/main/resources/static/template/inc_filter.ftl
  5. +74
    -0
      smtweb-system/sw-system-bpm/src/main/resources/static/template/inc_form.ftl
  6. +67
    -0
      smtweb-system/sw-system-bpm/src/main/resources/static/template/inc_grid_opt.ftl
  7. +14
    -0
      smtweb-system/sw-system-bpm/src/main/resources/static/template/index.yaml
  8. +107
    -0
      smtweb-system/sw-system-bpm/src/main/resources/static/template/simple.ftl

+ 4
- 0
smtweb-system/sw-system-bpm/pom.xml View File

@@ -26,6 +26,10 @@
<artifactId>spring-boot-starter-web</artifactId> <artifactId>spring-boot-starter-web</artifactId>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
<dependency>
<groupId>cc.smtweb</groupId> <groupId>cc.smtweb</groupId>
<artifactId>sw-framework-auth</artifactId> <artifactId>sw-framework-auth</artifactId>
<version>2.2.0-SNAPSHOT</version> <version>2.2.0-SNAPSHOT</version>


+ 145
- 0
smtweb-system/sw-system-bpm/src/main/java/cc/smtweb/system/bpm/resolver/CodeResolver.java View File

@@ -0,0 +1,145 @@
package cc.smtweb.system.bpm.resolver;

import cc.smtweb.framework.core.common.SwException;
import cc.smtweb.framework.core.common.SwMap;
import cc.smtweb.framework.core.db.DbEngine;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateMethodModelEx;
import freemarker.template.TemplateModelException;

import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
*
*/
public class CodeResolver {
private static CodeResolver instance = null;

private Configuration configuration = null;

private final String encode = org.apache.commons.codec.CharEncoding.UTF_8;
private String templatesDir;

protected CodeResolver() {
templatesDir = this.getClass().getResource("/static/template").getPath();
configuration = new Configuration(Configuration.VERSION_2_3_31);
try {
configuration.setDirectoryForTemplateLoading(new File(templatesDir));
configuration.setClassicCompatible(true);
configuration.setDefaultEncoding(encode);
configuration.setOutputEncoding(encode);
} catch (Exception e) {
e.printStackTrace();
throw new SwException(e);
}
}

public void create(Map<String, Object> model, String templateName, Writer writer) {
try {
Template template = configuration.getTemplate(templateName, encode);
template.setOutputEncoding(encode);
template.process(model, writer);
writer.close();
} catch (Exception e) {
e.printStackTrace();
throw new SwException(e);
}
}

public void create(Map<String, Object> model, String templateName, OutputStream out) {
try {
Template template = configuration.getTemplate(templateName, StandardCharsets.UTF_8.toString());
template.setOutputEncoding(encode);
template.process(model, new OutputStreamWriter(out, encode));
out.close();
} catch (Exception e) {
e.printStackTrace();
throw new SwException(e);
}
}

/**
* 获取单实例
*
* @return
*/
public static CodeResolver getInstance() {
if (instance == null) {
synchronized (CodeResolver.class) {
instance = new CodeResolver();
}
}
return instance;
}

static class PKGenerator implements TemplateMethodModelEx {
@Override
public Object exec(List list) throws TemplateModelException {
return "asd";
// return DbEngine.getInstance().nextId();
}
}

/*
{param:{pa:"aaa"},
layout:{
c1:[{type:"list", dataset:"ds123", fields:[{field:"", dataset:""}], cfilters:[{}]}]
}
*/
public static void main(String[] args) {
StringWriter out = new StringWriter();
SwMap map = new SwMap();
SwMap param = new SwMap();
param.put("pa", "aaaaa");
map.put("param", param);

SwMap layout = new SwMap();
map.put("layout", layout);
List<SwMap> groups = new ArrayList<>();
layout.put("c1", groups);

SwMap area = new SwMap();
groups.add(area);
area.put("type", "list");
area.put("dataset", "ds123");

List<SwMap> fields = new ArrayList<>();
area.put("fields", fields);
SwMap field = new SwMap();
field.put("field", "f123");
field.put("dataset", "ds123");
field.put("label", "字段123");
fields.add(field);

field = new SwMap();
field.put("field", "f121");
field.put("label", "字段121");
field.put("dataset", "ds123");
fields.add(field);

field = new SwMap();
field.put("field", "f122");
field.put("label", "字段122");
field.put("dataset", "ds123");
fields.add(field);

List<SwMap> filters = new ArrayList<>();
area.put("cfilters", filters);
field = new SwMap();
field.put("field", "f122");
field.put("dataset", "ds123");
field.put("label", "字段122");
field.put("maxlength", 20);
filters.add(field);

map.put("title", "thisIsATest!");
map.put("newId", new PKGenerator());
CodeResolver.getInstance().create(map, "simple.ftl", out);
System.out.println(out.getBuffer().toString());
}
}

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

@@ -234,6 +234,9 @@ public class ModelFormHelper {
* @return * @return
*/ */
public static String buildEngineModel(ModelForm form, SwMap params, UserSession us) { public static String buildEngineModel(ModelForm form, SwMap params, UserSession us) {
return buildEngineModel(form, params, us, true);
}
public static String buildEngineModel(ModelForm form, SwMap params, UserSession us, boolean incExtra) {
PageDatasets datasets = parsePageDataset(form.getDataset()); PageDatasets datasets = parsePageDataset(form.getDataset());
if (datasets == null || datasets.list == null) return ""; if (datasets == null || datasets.list == null) return "";


@@ -257,7 +260,9 @@ public class ModelFormHelper {


listModel.add(buildEngineModelMap(dataSet, model)); listModel.add(buildEngineModelMap(dataSet, model));
} }
ret.put("extra", buildEngineExtra(pageInfo.option, params, us));
if (incExtra) {
ret.put("extra", buildEngineExtra(pageInfo.option, params, us));
}
return JsonUtil.encodeString(ret); return JsonUtil.encodeString(ret);
} }


@@ -307,7 +312,7 @@ public class ModelFormHelper {
SwMap widgetOpts = parseFormOption(widgetForm.getOption()); SwMap widgetOpts = parseFormOption(widgetForm.getOption());
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", widgetForm.getContent());
w.put("define", buildEngineModel(widgetForm, params, us, false));
} }
//构建变量 //构建变量
SwMap mapVar = new SwMap(); SwMap mapVar = new SwMap();


+ 74
- 0
smtweb-system/sw-system-bpm/src/main/resources/static/template/inc_filter.ftl View File

@@ -0,0 +1,74 @@
<#assign fields = group.cfilters>
<#list fields as filter>
{
"id": "${newId()}",
"type": "fx-form-panel",
"shape": "panel",
"props": {
"paddingY": 5,
"paddingX": 10,
"size": "35",
"colNum": 2
},
"children": [
{
"id": "id${newId()}",
"type": "fx-text",
"props": {
"label": "${filter.label}",
"type": "text",
"maxlength": ${filter.maxlength},
"placeholder": "请输入查询内容",
"labelWidth": 100,
"dataset": "${filter.dataset}",
"field": "${filter.field}",
"name": "${filter.name}"
},
"events": {}
}
</#list>,
{
"id": "id${newId()}",
"type": "fx-button-group",
"props": {
"menus": []
},
"slots": {
"default": [
{
"type": "fx-button",
"props": {
"label": "查询",
"leftIcon": "history-query",
"type": "primary",
"action": "button:search",
"dataset": "${group.dataset}"
},
"id": "id${newId()}"
},
{
"type": "fx-button",
"props": {
"label": "重置",
"type": "danger",
"action": "button:reset",
"leftIcon": "figma-reset-instance"
},
"id": "id${newId()}"
},
{
"id": "id${newId()}",
"type": "fx-button",
"props": {
"label": "新增",
"type": "success",
"leftIcon": "shield-add",
"action": "button:add",
"dataset": "${group.dataset}"
}
}
]
}
}
]
},

+ 74
- 0
smtweb-system/sw-system-bpm/src/main/resources/static/template/inc_form.ftl View File

@@ -0,0 +1,74 @@
<#assign fields = group.cfilters>
<#list fields as filter>
{
"shape": "panel",
"id": "form_panel",
"type": "fx-form-panel",
"props": {
"colNum": 2,
"paddingX": 5,
"paddingY": 5,
"size": "0"
},
"children": [
{
"id": "id1813718bf71",
"type": "fx-text",
"props": {
"label": "编码",
"type": "text",
"maxlength": 50,
"placeholder": "请输入内容",
"labelWidth": 100,
"dataset": "ds_1813718bf61",
"field": "id_1813718bf67",
"name": "pt_code"
},
"events": {}
},
{
"id": "id1813718bf74",
"type": "fx-label",
"props": {
"label": "标签",
"labelWidth": 100
}
},
{
"id": "id1813718bf77",
"type": "fx-text",
"props": {
"label": "名称",
"type": "text",
"maxlength": 50,
"placeholder": "请输入内容",
"labelWidth": 100,
"dataset": "ds_1813718bf61",
"field": "id_1813718bf68",
"name": "pt_name"
},
"events": {}
},
{
"id": "id1813718bf7a",
"type": "fx-label",
"props": {
"label": "标签",
"labelWidth": 100
}
},
{
"id": "id1813718bf9b",
"type": "fx-select",
"props": {
"label": "行政区划",
"clearable": true,
"labelWidth": 100,
"dataset": "ds_1813718bf61",
"field": "id_1813718bf66",
"name": "pt_area_id"
},
"events": {}
}
]
}

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

@@ -0,0 +1,67 @@
{
"shape": "panel",
"id": "form_panel",
"type": "fx-form-panel",
"props": {
"colNum": 0,
"paddingX": 5,
"paddingY": 5,
"align": "full"
},
"children": [
{
"id": "id${newId()}",
"type": "fx-table",
"props": {
"label": "表格",
"border": true,
"stripe": true,
"showHeader": true,
"fit": true,
"dataset": "${group.dataset}",
"actionWidth": 120
},
"slots": {
<#assign fields = group.fields>
"default": [
<#list fields as col>
{
"id": "id${newId()}",
"type": "fx-table-column",
"props": {
"field": "${col.field}",
"label": "${col.label}"
}
}
</#list>
],
"button": [
{
"type": "fx-button",
"props": {
"label": "编",
"type": "text",
"leftIcon": "edit",
"action": "button:edit",
"linkType": "dialog",
"dataset": "${group.dataset}"
},
"id": "id1813718bf36"
},
{
"type": "fx-button",
"props": {
"label": "删",
"type": "text",
"leftIcon": "delete",
"action": "button:del",
"dataset": "${group.dataset}"
},
"id": "id${newId()}"
}
]
},
"events": {}
}
]
}

+ 14
- 0
smtweb-system/sw-system-bpm/src/main/resources/static/template/index.yaml View File

@@ -0,0 +1,14 @@
simple:
label: 简单页面
type: list/scard/ccard
# 布局
layout:
c1:
name: '客户区'
type: 'list'
hasGroup: false
# 变量
param:
p1:
name: ''
type: 'ds/...'

+ 107
- 0
smtweb-system/sw-system-bpm/src/main/resources/static/template/simple.ftl View File

@@ -0,0 +1,107 @@
{
"form": [
{
"page": {
"id": "p${newId()}",
"type": "fx-page",
"props": {
"title": "${title}",
"key": "${newId()}"
}
},
"graph": {
"shape": "panel",
"id": "root_panel",
"type": "fx-split-panel",
"props": {
"horizontal": false,
"shadow": "never"
},
"children": [
<#list layout.c1 as group>
<#if (group.cfilters?size>0)>
<#include "inc_filter.ftl"/>
</#if>
<#include "inc_grid_opt.ftl"/>
</#list>
]
}
}
],
"model": [
{
"dataset": "ds_1813718bf0c",
"label": "机构列表",
"fields": [
{
"id": "id_1813718bf0e",
"field": "pt_id"
},
{
"id": "id_1813718bf0f",
"field": "pt_parent_id"
},
{
"id": "id_1813718bf10",
"field": "pt_level_code"
},
{
"id": "id_1813718bf11",
"field": "pt_area_id"
},
{
"id": "id_1813718bf12",
"field": "pt_code"
},
{
"id": "id_1813718bf13",
"field": "pt_name"
},
{
"id": "id_1813718bf14",
"field": "pt_type"
},
{
"id": "id_1813718bf15",
"field": "pt_statu"
},
{
"id": "id_1813718bf16",
"field": "pt_linker"
},
{
"id": "id_1813718bf17",
"field": "pt_tel"
},
{
"id": "id_1813718bf18",
"field": "pt_addr"
},
{
"id": "id_1813718bf19",
"field": "pt_lon"
},
{
"id": "id_1813718bf1a",
"field": "pt_lat"
},
{
"id": "id_1813718bf1b",
"field": "pt_remark"
}
],
"filters": [
{
"id": "id_1813718bf21",
"field": "pt_code",
"required": false,
"type": "input"
}
]
}
],
"option": {
"widgetRef": [],
"vars": []
}
}

Loading…
Cancel
Save