1 前言背景

  • 存在比较复杂交互,非简单的常见组件可以满足的,目前平台未支持,可以使用前端二开集成方式,例如:地图、扫码等
  • 交互上特殊性以及数据存在翻译或者转换处理的,则需要前后端一起二开的集成方式,例如:通用选择器、关联表单等

2 集成

2.1 组件前端集成

参考文档:自定义组件

2.2 组件后端集成

后端居多需要额外处理的情况如下:

  • 存储值需要翻译或者转换处理
  • 存储值比较复杂,需要特殊解析处理

2.2.1后端集成主要有以下场景需要按需处理

集成点 说明 插件 所属包
设计器组件配置保存 配置中有些需要后端才有,或者需要后端完善的 FdLayoutAdPluginService.saveAfter lcp-formdesign-plugin
表单详情渲染数据读取 组件需根据配置关联查询其他表数据或者增加额外查询 FormDataAttrRenderPlugin.viewFormDetailBefore lcp-app-plugin
导入导出翻译 组件存储是编码,显示需要翻译成名称,翻译逻辑自定义接口实现时候 DictPlugin.translate lcp-app-plugin

2.2.2 组件配置说明

设计器保存时候配置格式需要按照规范进行处理,配置则会在插件进行时候传递

{
    "baseConfig": {
        // 属性类型 CUSTOM_COMP
        "attrType": "RELATE_DATA",
        // 如果使用数据字典方式需要填入数据字典编码
        "dictId": null,
        // 组件本身特殊的配置,字典翻译、组件解析配置等
        "dictConfig": {},
        // 字段名称
        "name": "关联数据"
    }
}

3 示例

3.1 后端示例

插件并不是所有的都需要实现,根据场景按需实现即可。以通用选择器为例,则只需要实现导入导出翻译即可

3.1.1 组件后端工程结构

工程结构说明

包引用说明

3.1.2 SPI配置

配置类

@Configuration
@ComponentScan("com.cvte.lcp.component.rd")
@Slf4j
public class RelateDataComponentConfig {
}

配置文件spring.factories

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.cvte.lcp.component.rd.boot.RelateDataComponentConfig

3.1.3 插件说明

3.1.3.1设计器组件配置保存

public interface FdLayoutAdPluginService {
    /**
     * 设计器组件配置保存后插口埋点方法
     * @param module2map 属性组配置
     * @param layoutList 全部的布局信息
     * @param configList 全部的配置信息
     */
    void saveAfter(Map<String, Map<String, String>> module2map, List<ObjLayoutConfig> layoutList, List<ObjGeneralConfig> configList);
}

3.1.3.2 表单详情渲染数据读取

public interface FormDataAttrRenderPlugin {

    String BEAN_NAME_SUFFIX = "_FormDataAttrRenderPlugin";

    /**
     * 获取表单详情前插口
     * @param attr
     * @param req
     * @param appInfo
     * @return 关联信息
     */
    List<FormDataJoinDTO> viewFormDetailBefore(AttrCorePTO attr, FormDataCorePTO req, AppInfo appInfo);


    /**
     * 获取组件对应的bean的名称
     * @param attrType 属性组件类型
     * @return 对应的bean名称
     */
    static String getBeanName(String attrType) {
        return String.format("%s%s", attrType, BEAN_NAME_SUFFIX);
    }

}

3.1.3.3 导入导出翻译

批量翻译都会使用此插口

public interface DictPlugin {

    /**
     * 判断插口实现是否能翻译当前数据
     * @param dto 字段配置数据
     * @return
     */
    default boolean support(DictTransDTO dto) {
        return false;
    }

    /**
     * 插口实现唯一标识当前翻译数据
     * @param dto 字段配置数据
     * @return 唯一key
     */
    default String dealUniqueKey(DictTransDTO dto) {
        return dto.getApiName();
    }

    /**
     * 执行批量翻译
     * @param multiDictTrans 多个配置数据批量翻译参数
     * @param userApp 用户应用信息
     * @return
     */
    default List<DictTransResultDTO> translate(MultiDictTransDTO multiDictTrans, UserAppInfo userApp) {
        return null;
    }
}

3.1.4 同主工程部署运行

在鲸云打包配置当中,将当前插件包下载到./jars目录中,一起打包到镜像即可,例如:

# 代码编译, 得到Jar包
mvn dependency:copy -Dartifact=com.cvte.lcp:lcp-app-starter:1.6.0-SNAPSHOT -DoutputDirectory=./
# 拷贝Jar包到当前根目录
cp ./lcp-app-starter*.jar lcp-app-starter.jar
# 创建jars目录
mkdir ./jars
# 将插件包下载到 jars目录当中
 mvn dependency:copy -Dartifact=com.cvte.lcp:lcp-base-ext:1.0.0-SNAPSHOT -DoutputDirectory=./jars
# 把Jar包压缩成tar.gz
tar -zcf lcp-app-starter.tar.gz ./lcp-app-starter.jar ./jars

以上即是后端集成的全部步骤了

作者:聂维  创建时间:2024-03-05 14:26
最后编辑:聂维  更新时间:2025-06-26 10:44