元数据字段控件扩展

1. 创建控件类型定义类(以图片上传为例)

@Component(IMetaControlType.BEAN_PREFIX + MetaControlType_CmsImage.TYPE)
public class MetaControlType_CmsImage implements IMetaControlType {
    
    public static final String TYPE = "CMSImage";
    
    @Override
    public String getType() {
        return TYPE;
    }
    
    @Override
    public String getName() {
        return "{META.CONTROL_TYPE." + TYPE + "}"; // 控件名称的国际化字符串
    }
    
    // 由于图片字段值需要解析成预览地址才能显示图片,因此需要对数据进行处理,返回图片预览地址
    @Override
    public void parseFieldValue(XModelFieldDataDTO fieldData) {
        Object value = fieldData.getValue();
        if (Objects.isNull(value)) {
            return;
        }
        String imagePath = value.toString();
        if (InternalUrlUtils.isInternalUrl(imagePath)) {
            String previewUrl = InternalUrlUtils.getActualPreviewUrl(imagePath);
            fieldData.setValueObj(previewUrl);
        } else {
            fieldData.setValueObj(imagePath);
        }
    }
}

2. 添加控件名称国际化配置

在项目当前模块下找到 src/main/resources/i18n/目录,依次修改目录下所有国际化定义文件,添加图片上传控件名称的国际化定义,如下分别在中文和英文国际化文件中添加:

messages.properties

META.CONTROL_TYPE.CMSImage=图片上传

messages_en.properties

META.CONTROL_TYPE.CMSImage=Image Upload

3. 添加前端VUE组件

扩展模型页面中添加图片上传支持(此处使用本系统封装的LogoView组件)

<template>
  <div>
    <el-form-item v-for="field in fieldList" 
                  :key="field.fieldName"
                  :label="field.label"
                  :prop="field.fieldName">

      ......

      <cms-logo-view v-if="field.controlType==='CMSImage'" 
        v-model="field.value" 
        :src="field.valueObj" 
        :width="210" 
        :height="150">
      </cms-logo-view>
      
      ......

    </el-form-item>
  </div>
</template>
<script>
import CMSLogoView from '@/views/cms/components/LogoView'; // 导入LogoView组件

......

export default {
  name: "CMSEXModelEditor",
  components: {
    "cms-logo-view": CMSLogoView, // 添加组件定义
  },
  
  ......
}
</script>
  1. 重启应用后查看使用效果,如下图:

设置字段控件类型

扩展模型字段控件类型设置

编辑内容查看控件效果

扩展模型内容编辑应用效果