loyep.com avatar loyep
  • techOctober 15, 2024

    低代码协议设计规范

    详细介绍低代码平台的协议设计,包括页面协议结构、数据类型定义、事件枚举和数据源规范

    low-codeprotocoldesignschema协议规范

    低代码协议设计规范

    本文档详细介绍低代码平台的协议设计规范,包括页面结构、组件定义、事件处理和数据源配置等核心内容。

    参考资料

    页面协议结构规范

    基础字段定义

    字段类型含义说明
    componentNamestring组件类型渲染组件类型的唯一标识
    idstring组件 ID组件的唯一标识符
    cssstring组件样式组件的样式配置
    propsobject组件属性透传给组件的 props
    dataSourcearray数据来源组件关联的数据源配置

    高级字段配置

    condition(渲染条件)

    子字段类型含义
    typestring属性值类型
    valueany条件判断值

    state(状态变量)

    子字段类型含义
    typestring变量类型
    valueany当前作用状态变量

    lifeCycles(生命周期)

    子字段类型含义
    typestring属性值类型
    valuefunction生命周期回调函数

    events(事件配置)

    子字段类型含义
    typestring属性值类型
    valuefunction事件处理函数

    slots(组件插槽)

    子字段类型含义
    typestring属性值类型
    valueany插槽内容
    templatestring插槽名称

    数据类型定义

    低代码协议中支持多种数据类型,用于描述不同的属性值和配置项。

    类型枚举值含义应用场景
    JSSlotJSSlot插槽类型组件插槽内容
    JSExpressionJSExpression表达式类型动态变量、条件判断
    JSFunctionJSFunction函数类型事件处理、生命周期
    JSStringJSString字符串类型文本内容、样式值
    JSNumberJSNumber数字类型数值配置、计算
    JSObjectJSObject对象类型复杂配置项
    JSArrayJSArray数组类型列表数据、选项配置
    JSBooleanJSBoolean布尔类型开关状态、条件判断

    类型使用示例

    // JSExpression 示例
    {
      "type": "JSExpression",
      "value": "this.state.isVisible"
    }
    
    // JSFunction 示例
    {
      "type": "JSFunction",
      "value": "function(event) { console.log('clicked'); }"
    }
    
    // JSSlot 示例
    {
      "type": "JSSlot",
      "template": "footer",
      "value": [/* 子组件配置 */]
    }

    事件枚举类型

    通用事件

    所有组件通用的标准事件:

    行为key是否通用(组件类型)组件库备注
    鼠标单击的回调事件clickdelight
    鼠标按下的回调事件mousedown
    鼠标进入的回调事件mouseenter
    鼠标离家的回调事件mouseleave
    鼠标抬起的回调事件mouseup
    值变化的回调事件change
    输入的回调事件input
    获得焦点的回调事件focus
    失去焦点的回调事件blur
    清除输入内容的回调事件clear
    键盘回车的回调事件enter
    开始时间输入的回调事件input:start否 (时间选择器)
    开始时间获得焦点的回调事件focus:start否 (时间选择器)
    开始时间失去焦点的回调事件blur:start否 (时间选择器)
    结束时间输入的回调事件input:end否 (时间选择器)
    结束时间获得焦点的回调事件focus:end否 (时间选择器)
    结束时间失去焦点的回调事件blur:end否 (时间选择器)
    选项列表滚动时的回调函数scroll否 (穿梭框)
    搜索框内容时改变时的回调函数search否 (穿梭框)
    加载更多按钮单击的回调事件load否 (list)
    当表格的排序条件发生变化的时候会触发该事件sort否 (table)
    表格中的单元格点击事件cell-click否 (table)
    选中值发生改变的时候selectedChange否 (table)
    当全选按钮发生变化的时候触发selectedAll否 (table)
    默认确认按钮点击的回调事件confirm否 (modal)
    默认取消按钮点击的回调事件cancel否 (modal)
    实时返回 tableform 数据update:formValue否 (tableform)物料
    筛选项或者选择项更改触发viewChange否 (Lightning列表)
    对整个表单的内容进行验证。返回数据,成功返回 type 和 data,失败则返回 type、当前 data 和 error 对象onSubmit否 (Lightning表单)

    dataSource规范

    字段类型枚举值含义含义应用
    typestringfetch数据源请求
    mopen安卓的请求不高优,可以先不支持
    mtop小程序的接口请求包不高优,可以先不支持
    jsonpjsonp
    custom自定义
    isInitboolean | JSExpression-是否初始化请求
    isSyncboolean | JSExpression是否需要串行执行
    willFetchJSFunction请求前对参数的处理函数
    shouldFetchJSFunction本次请求是否可以正常请求
    requestHandlerJSFunction请求前参数的处理函数
    dataHandlerJSFunction请求后response的处理函数
    errorHandlerJSFunction请求后error的处理函数
    optionsobjectparams请求参数
    method请求方法
    isCors是否跨域
    timeout超时时间
    headers请求头
    uri请求url
    /** 数据源的状态 */export enum RuntimeDataSourceStatus {  /** 初始状态,尚未加载 */  Initial = 'init',   /** 正在加载 */  Loading = 'loading',   /** 已加载(无错误) */  Loaded = 'loaded',   /** 加载出错了 */  Error = 'error',}

    setter编辑器规范

    字段类型枚举值类型含义
    componentNamestringhttps://www.yuque.com/lce/doc/grfylustring编辑器面板组件
    propsobjectnamestring映射字段props
    title编辑器面板解释文案
    propTypestring字段类型
    setterstring编辑器面板组件
    config子编辑器面板组件
    isRequiredboolean是否必填
    itemSetterobjectcomponentName嵌套编辑器面板
    props
    { "componentName": "comp", "id": "id", "props": {}, "style": {}, "lifeCycles": {}, "events": {}, "children":[],  ......} {  "componentName": "Page",  "id": "id",  "props": {},  "style": "{body { font-size: 12px;}}",  "condition": { // 是否渲染    "type": "JSExpression",    "value": "!!this.state.isshow"  },  "dataSource":  [      {        "type": "fetch",  // 支持四种类型:fetch/mtop/jsonp/custom        "isInit": true,        "options": {          "params": {},  // TODO:params取值及类型          "method": "GET",          "isCors": true,          "timeout": 5000,          "headers": {},          "uri": "mock/info.json",          "dataHandler": {              "type": "JSFunction",              "value": "function (response) {\nif (!response.data.success){\n    throw new Error(response.data.message);\n  }\n  return response.data.data;\n}"            }        },      },    ],  "state": {    "data": {      "type": "JSExpression", // TODO: 类型      "value": ${a.b},    }  },  "lifeCycles": {    "onMounted": {      "type": "JSFunction",      "value": "function componentDidMount() {\n  console.log('did mount');\n}",  },  "events": {    "onClick": {      "type": "JSFunction",      "value": "", // TODO:     },  },  "children": [    {      "componentName": "Button",      "id": "id",       events:[           {            "onClick": {              "type": "JSFunction",              "value": "function{xxx}",            },            {            "change": {              "type": "JSFunction",              "value": "",           },        ],       slots: [                {                  "type": "JSeexx", // TODO: 类型                },                {                  "type": "JSSlot",                  "template": "footer",                  "value": [                                      "componentName": "Icon",                      "props": {                        "icon": "SmileOutlined",                        "size": 20,                  },                }              ],        }],       dataSource:{},      "props": {        "type": "primary",        "label": "主按钮",        .......      },      setter: [{                componentName: 'ArraySetter',                props: {                  itemSetter: {                    componentName: 'ObjectSetter',                    props: {                      config: {                        items: [                          {                            name: 'label',                            title: '选项名',                            setter: ['StringSetter', 'VariableSetter'],                            isRequired: true                          },                          {                            name: 'value',                            title: '选项值',                            setter: ['StringSetter', 'NumberSetter', 'VariableSetter'],                             // VariableSetter变量型数据设置器                            isRequired: true                          },                          {                            name: 'disabled',                            title: '是否禁用',                            setter: ['BoolSetter', 'VariableSetter'],                             // VariableSetter变量型数据设置器                          },                        ],                      },                    },                  },                },              },            },           {             name: 'placeholder',             title: { label: '选择框默认文字', tip: '选择框默认文字' },             propType: 'string',             setter: 'StringSetter'          },            {              name: 'allowClear',              title: { label: '支持清除', tip: '是否允许清除' },              propType: 'bool',              defaultValue: false,              setter: 'BoolSetter'            },       ],      children:[], // 组件嵌套    }}

    Last updated on