update 添加抄送设置和变量枚举,优化扩展节点配置逻辑

This commit is contained in:
AprilWind
2025-08-28 15:00:32 +08:00
parent 71b70a59fe
commit aa76859a05
3 changed files with 92 additions and 36 deletions

View File

@ -0,0 +1,20 @@
package org.dromara.workflow.common.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 抄送设置枚举
*
* @author AprilWind
*/
@Getter
@AllArgsConstructor
public enum CopySettingEnum implements NodeExtEnum {
;
private final String label;
private final String value;
private final boolean selected;
}

View File

@ -0,0 +1,20 @@
package org.dromara.workflow.common.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 变量枚举
*
* @author AprilWind
*/
@Getter
@AllArgsConstructor
public enum VariablesEnum implements NodeExtEnum {
;
private final String label;
private final String value;
private final boolean selected;
}

View File

@ -13,7 +13,9 @@ import org.dromara.warm.flow.ui.service.NodeExtService;
import org.dromara.warm.flow.ui.vo.NodeExt;
import org.dromara.workflow.common.ConditionalOnEnable;
import org.dromara.workflow.common.enums.ButtonPermissionEnum;
import org.dromara.workflow.common.enums.CopySettingEnum;
import org.dromara.workflow.common.enums.NodeExtEnum;
import org.dromara.workflow.common.enums.VariablesEnum;
import org.dromara.workflow.domain.vo.ButtonPermissionVo;
import org.dromara.workflow.service.IFlwNodeExtService;
import org.springframework.stereotype.Service;
@ -36,14 +38,35 @@ public class FlwNodeExtServiceImpl implements NodeExtService, IFlwNodeExtService
/**
* 存储不同 dictType 对应的配置信息
*/
private static final Map<String, ButtonPermission> CHILD_NODE_MAP = new HashMap<>();
record ButtonPermission(String label, Integer type, Boolean must, Boolean multiple) {
}
private static final Map<String, Map<String, Object>> CHILD_NODE_MAP;
static {
CHILD_NODE_MAP.put(ButtonPermissionEnum.class.getSimpleName(),
new ButtonPermission("权限按钮", 4, false, true));
CHILD_NODE_MAP = Map.of(
CopySettingEnum.class.getSimpleName(),
Map.of(
"label", "抄送对象",
"type", 2,
"must", false,
"multiple", false,
"desc", "设置该节点的抄送办理人"
),
VariablesEnum.class.getSimpleName(),
Map.of(
"label", "自定义参数",
"type", 2,
"must", false,
"multiple", false,
"desc", "节点执行时可以使用的自定义参数"
),
ButtonPermissionEnum.class.getSimpleName(),
Map.of(
"label", "权限按钮",
"type", 4,
"must", false,
"multiple", true,
"desc", "控制该节点的按钮权限"
)
);
}
private final DictService dictService;
@ -56,6 +79,9 @@ public class FlwNodeExtServiceImpl implements NodeExtService, IFlwNodeExtService
@Override
public List<NodeExt> getNodeExt() {
List<NodeExt> nodeExtList = new ArrayList<>();
// 构建基础设置页面
nodeExtList.add(buildNodeExt("wf_basic_tab", "基础设置", 1,
List.of(CopySettingEnum.class, VariablesEnum.class)));
// 构建按钮权限页面
nodeExtList.add(buildNodeExt("wf_button_tab", "权限", 2,
List.of(ButtonPermissionEnum.class)));
@ -105,9 +131,20 @@ public class FlwNodeExtServiceImpl implements NodeExtService, IFlwNodeExtService
return null;
}
String simpleName = enumClass.getSimpleName();
NodeExt.ChildNode childNode = buildChildNodeMap(simpleName);
NodeExt.ChildNode childNode = new NodeExt.ChildNode();
Map<String, Object> map = CHILD_NODE_MAP.get(simpleName);
// 编码此json中唯
childNode.setCode(simpleName);
// label名称
childNode.setLabel(Convert.toStr(map.get("label")));
// 1输入框 2文本域 3下拉框 4选择框
childNode.setType(Convert.toInt(map.get("type"), 1));
// 是否必填
childNode.setMust(Convert.toBool(map.get("must"), false));
// 是否多选
childNode.setMultiple(Convert.toBool(map.get("multiple"), true));
// 描述
childNode.setDesc(Convert.toStr(map.get("desc"), null));
// 字典,下拉框和复选框时用到
childNode.setDict(Arrays.stream(enumClass.getEnumConstants())
.map(NodeExtEnum.class::cast)
@ -128,12 +165,18 @@ public class FlwNodeExtServiceImpl implements NodeExtService, IFlwNodeExtService
if (ObjectUtil.isNull(dictTypeDTO)) {
return null;
}
NodeExt.ChildNode childNode = buildChildNodeMap(dictType);
NodeExt.ChildNode childNode = new NodeExt.ChildNode();
// 编码此json中唯一
childNode.setCode(dictType);
// label名称
childNode.setLabel(dictTypeDTO.getDictName());
// 描述
// 1输入框 2文本域 3下拉框 4选择框
childNode.setType(3);
// 是否必填
childNode.setMust(false);
// 是否多选
childNode.setMultiple(true);
// 描述 (可根据描述参数解析更多配置如typemustmultiple等)
childNode.setDesc(dictTypeDTO.getRemark());
// 字典,下拉框和复选框时用到
childNode.setDict(dictService.getDictData(dictType)
@ -143,33 +186,6 @@ public class FlwNodeExtServiceImpl implements NodeExtService, IFlwNodeExtService
return childNode;
}
/**
* 根据 CHILD_NODE_MAP 中的配置信息,构建一个基本的 ChildNode 对象
* 该方法用于设置 ChildNode 的常规属性,例如 label、type、是否必填、是否多选等
*
* @param key CHILD_NODE_MAP 的 key
* @return 返回构建好的 ChildNode 对象
*/
private NodeExt.ChildNode buildChildNodeMap(String key) {
NodeExt.ChildNode childNode = new NodeExt.ChildNode();
ButtonPermission bp = CHILD_NODE_MAP.get(key);
if (bp == null) {
childNode.setType(1);
childNode.setMust(false);
childNode.setMultiple(true);
return childNode;
}
// label名称
childNode.setLabel(bp.label());
// 1输入框 2输入框 3下拉框 4选择框
childNode.setType(bp.type());
// 是否必填
childNode.setMust(bp.must());
// 是否多选
childNode.setMultiple(bp.multiple());
return childNode;
}
/**
* 从扩展属性构建按钮权限列表:根据 ext 中记录的权限值,标记每个按钮是否勾选
*