`

schema技术方案

 
阅读更多

schema技术方案

专业点表单Schema

 

一、Schema 概述

 

1.概述

一个dform表单可以由jsonSchema、uiSchema、layoutSchema、formData、bizData五个json来描述。jsonSchema中描述了表单的数据类型、数据源、数据项等配置;uiSchema描述了表单字段的渲染方法、渲染参数等;formData描述了表单初始填充的各个字段的初始值;bizData中是对表单字段的业务属性(bizData不会影响DForm的渲染);其中的每一个配置json的基本配置项可以参看 Schema文档

 

2. 支持的组件

组件名称

支持的返回值

 

==== 原子组件

 

 

Input

string, number

 

TextArea

string

 

RadioGroup

string

 

Select

string

 

DatePicker

date, datetime

 

FileUpload

string, array[string]

 

TagSelect

string, array[string]

 

==== 复合组件

 

 

RangePicker

object{start, end}

 

AttritubeGroup

array

 

==== 业务组件

 

 

UserSelect 选人组件

string, array[string]

(暂未实现)

MobileVarify 手机验证码组件

string

 

AddressWithMap 地址组件

object

 

BusinessTime 营业时间

object

 

XPicker 长宽选择组件

object

 

==== UI组件

 

 

Label

无,只用作展示

(暂未实现)

 

3. 涉及的字段类型

  • String

  • Number

  • Boolean

  • Object

  • Array

  • Date

  • DateTime

  • Time

 

4. 字段校验规则

todo:多字段联合校验如何解决?

 

// validate模板
[
    {
        "type": "minLength",
        "message": "不能超过10个字",
        "value": 10        
    },
    {
        "type": "phone",
        "message": "请填写正确的手机号码",
    }, {...}
]

 

校验规则类型

可校验的字段类型

其他属性

规则

required

ALL

 

必填校验

maxLength

string, array

value

最大长度不能超过value

minLength

string, array

value

最小长度不能低于value

maxValue

number

value

最大的数值不能超过value

minValue

number

value

最小的数值不能低于value

number

ALL

 

数值类型,可以是小数

integer

ALL

 

数值类型,只能是整数

afterNowTime

date, datetime

value(小时为单位)

校验时间必须晚于当前(填写表单的)时间 + value小时

express

object, array

value

用于复合组件的关联校验

mobile

string

 

手机号码正则校验:/^1[345789][0-9]{9}$/

 

 

5. Schema结构

{
    // 用于描述表单的数据结构,对于同一个表单是静态不会变的
    jsonSchema: {
        field_name: {
            // 数据格式类型,有string, number, array等等等
            type: "...",     

            // 数据字段的label    
            title: "我是字段中文Label",  
        }, {
            type: "array",
            itemType: "object",
            itemAttributes: {
                field_1: {
                    type: "string",
                    title: ""
                },
                field_2: {
                    type: "string",
                    title: ""
                }
            }
        }, {...}
    },

    // 用于描述表单的ui结构,对于同一个表单是静态不会变的
    uiSchema: {
        field_name: {
            // [必选] 组件名称 
            widget: "...",

            // [可选] 是否禁用
            disable: true/false,

            // [可选] 组件展示的条件
            showCondition: [
                {
                    "field": xxx, // 表单域名称
                    "operator":  "==", // 操作符
                    "value": "xxx" // 值
                }, {...}
            ]

            // [可选] 组件的选项,每个组件会不一样
            widgetOptions: {   
                // input类的组件,会有placeholder这种属性
                placeholder: "请输入xxx",

                // 单选、多选类的组件,会有dataSource
                dataSource: {
                    // enumKey会拼接上bizData._enumApiBasePath进行请求
                    enumKey: "mdrc_biz_type",
                    // 若存在enumUrl,则忽略enumKey
                    enumUrl: "//xxx.com/xx/xxx.do",
                    // url请求参数,若存在级联的情况则会更新数据,
                       请求url会生成为 url?ruleData={"cityCode":"300100"}
                    requstParams: [
                        {
                            "key": "cityCode",
                            "value": "xxxFiled.cityCode"
                        }, {...}
                    ]
                }
            },
            
            // [可选] 数据校验规则
            validate: [{...}, {...}],  

            // [可选] 级联规则, 若没有
            cascade: {
                // 设置当前控件更新后,需要级联更新的字段
                updateFields: ['field_name1', 'field_name2'] 
            }

        }, {...}, {...}
    },

    layoutSchema: {
        // 必选
        "pc": {
            type: "group",  // none, group分组表单, (step分步表单, 暂不支持)
            isSimple: true, // 是否简单表单,决定了详情页是否需要展示表单详情
            pageLayout: [
                {
                    name: "第一步干嘛干嘛",
                    arrange: [
                        ['field1', 'field2'],
                        ['atttibuteGroup1'],
                        ['field3']
                    ]
                }
                , {...}, {...}
            ],
            widgetLayout: {
                "atttibuteGroup1": [
                    ['field4', 'field5'],
                    ['field6'],
                    ['field7']
                ]
            }
        },
    
    // type是none的 示例
        "pc": {
            type: "none",  // none, group分组表单, (step分步表单, 暂不支持)
            pageLayout: [
                ['field1', 'field2'],
        ['atttibuteGroup1'],
        ['field3']
            ],
            widgetLayout: {
                "atttibuteGroup1": [
                    ['field4', 'field5'],
                    ['field6'],
                    ['field7']
                ]
            }
        }
    
    
    
    
        // 可选,若没有h5,则使用pc schema
        "h5": {
            // 格式同pc
        }
    }
    
    // 表单的数据,对于同一个表单,不同份的数据会不一样
    formData: {
        field_name: data,
        field_name2: data2,
        atttibuteGroup1: [
            {
                field_name4: data4,
                field_name5: data5
            }, {...}, {...}
        ]
    },

    // 业务数据,对于同一个表单,不同份的数据会不一样
    bizData: {
        _baseOApiPath: "//xxx.com",
        _disableAll: true,
        process_instance_id: 362478134  // 业务数据信息,以备业务组件进行使用
    }
}

 

表单formData在提交的时候,增加 _v

比如说community_type这个字段
{
  community_type: 1,
  _v_community_type: "专业"
}

 

6.  枚举数据源

接口:(支持jsonp callback)

_baseOApiPath + '/oapi/enum/show/' + 'enumKey1,enumKey2,enumKey3'

可选url参数:
tLabel: 文字描述的label
vLabel: 值的label


请求示例:
标准:http://se.cainiao.test/oapi/enum/show/scene_id_key,net_dev_reason_pro
自定义:http://se.cainiao.test/oapi/enum/show/scene_id_key,net_dev_reason_pro?tLabel=customText&vLabel=customValue

标准返回值:
{
  "success": true,
  "data": {
    "net_dev_reason_pro": [
      {
        "text": "系统推荐不准",
        "value": "tuijian"
      },{...}
    ],
    "scene_id_key": [
      {
        "text": "通用场景",
        "value": "comm"
      }, {...}
    ]
  }
}

自定义返回值:
{
  "success": true,
  "data": {
    "net_dev_reason_pro": [
      {
        "customText": "系统推荐不准",
        "customValue": "tuijian"
      },{...}
    ],
    "scene_id_key": [
      {
        "customText": "通用场景",
        "customValue": "comm"
      }, {...}
    ]
  }
}

 

二、原子组件

 

1. Input

json schema

属性

说明

填写的值

type

数据格式类型

string, number

title

字段label

xxxxxx

 

ui schema

属性

说明

填写的值

widget

组件名称

Input

widgetOptions

 

 

└-- placeholder

输入框提示

 

└-- pc:size

输入框预设大小,仅针对pc版本,无线端无效

small, medium, large

 

配置样例

 

// json schema
{
    field_name : {
        type: "string",   // 支持 string, number
        title: "我是字段中文Label",
    }
}

// ui schema
{
    field_name: {
        widget: "Input",  // 组件名称
        widgetOptions: {   // 组件的选项,每个组件会不一样
            placeholder: "请输入xxx",
        },
    }
}

 

2. TextArea

json schema

属性

说明

填写的值

type

数据格式类型

string

title

字段label

xxxxxx

 

ui schema

 

属性

说明

填写的值

widget

组件名称

TextArea

widgetOptions

 

 

└-- placeholder

输入框提示

 

└-- style

样式

inline(行内展示,默认),

block(换行展示)

└-- rows(可选)

输入框行数

1-9 (default: 6)

 

配置样例

 

// json schema
{
    field_name : {
        "type": "string",   // 支持 string, number
        "title": "我是字段中文Label",
    }
}

// ui schema
{
    field_name: {
        "widget": "TextArea",  // 组件名称
        "widgetOptions": {   // 组件的选项,每个组件会不一样
            "placeholder": "请输入xxx",
            "rows": 5
        },
    }
}

 

3. RadioGroup

json schema

属性

说明

填写的值

type

数据格式类型

string

title

字段label

xxxxxx

 

ui schema

 

属性

说明

填写的值

widget

组件名称

RadioGroup

widgetOptions

 

 

└-- dataSource

选项数据源

详见 Schema结构

└-- pc:direction(可选)

PC端选项排列方式

horizontal(水平-default)

vertical(垂直)

└-- h5:direction(可选)

H5端选项排列方式

horizontal(水平)

vertical(垂直-default)

 

4. Select

json schema

属性

说明

填写的值

type

数据格式类型

string

title

字段label

xxxxxx

 

ui schema

属性

说明

填写的值

widget

组件名称

Select

widgetOptions

 

 

└-- placeholder(可选)

输入框提示

 

└-- dataSource

选项数据源

详见 Schema结构

 

5. DatePicker

json schema

属性

说明

填写的值

type

数据格式类型

date, datetime

title

字段label

xxxxxx

 

ui schema

属性

说明

填写的值

widget

组件名称

DatePicker

widgetOptions

 

 

└-- placeholder

输入框提示

 

└-- format

日期选择格式

date, datetime

 

6. FileUpload

json schema

属性

说明

填写的值

type

数据格式类型

string, array[string]

title

字段label

xxxxxx

itemType(可选)

当格式为array时,描述array的item的数据格式

string

 

ui schema

 

属性

说明

填写的值

widget

组件名称

FileUpload

widgetOptions

 

 

└-- type

单一上传还是多个上传

single, multiple

└-- accept

允许上传的格式

["image/*", ".csv", ".xls", ".doc", ".docx", ".xlsx", ".ppt", ".pptx"]

└-- maxSize

最大的文件大小,MB为单位

5

└-- maxFiles

(当type=multiple时填写)

最多上传几个文件

5

 

获取OSS写入Token预签名接口:
{_baseOApiPath}/oapi/form/upload/token?fileName=xxx

参数:
fileName:【需要urlEncode一下】 文件名,必填,带上后缀名。前端无需通过添加timestamp去重。

返回:
{
  "success": true,
  "data": {
    "accessKeyId": "x1lz50IryjFW9soM",
    "policy": "xxxxxxxxxxxxxxxxx",
    "signature": "d8/kQwjgPDVz6SstHLtrfhqEuk8=",
    "host": "http://station-img.oss-cn-hangzhou.aliyuncs.com",
    "uri": "bpm/file/b5ca37ac-7b44-4ccc-ab8d-09a2d680dc81/你好.xls",
    "expire": "1513567609"
  }
}

上传至OSS接口文档
Header中签名方式: https://help.aliyun.com/document_detail/31951.html
PUT上传: https://help.aliyun.com/document_detail/31978.html

 

 

7. TagSelect

json schema

属性

说明

填写的值

type

数据格式类型

string, array

title

字段label

xxxxxx

ui schema

属性

说明

填写的值

widget

组件名称

TagSelect

widgetOptions

 

 

└-- dataSource

选项数据源

详见 Schema结构

└-- multiple

是否可以多选,默认false

true/false

└-- defaultText

不做任何选择的文案,默认“全部”

 

└-- style

样式

inline(行内展示,默认),
block(换行展示)

 

三、复合组件

 

1. RangePicker

json schema

属性

说明

填写的值

type

数据格式类型

object

title

字段label

xxxxxx

attributes

描述object的数据格式

{…}

└-- start

起始值

{type:“number”,  title:""}

└-- end

结束值

{type:“number”, title:""}

 

ui schema

属性

说明

填写的值

widget

组件名称

RangePicker

widgetOptions

 

 

└-- type

类型

number, date, datetime

└-- unit

单位,居右展示单位

例如: 元,平米,立方

 

2. AttributeGroup

json schema

属性

说明

填写的值

type

数据格式类型

array

title

字段label

xxxxxx

itemAttributes

描述object的数据格式

{…}

└-- xxx1

xxx

原子组件json schema

└-- xxx2

xx

原子组件json schema

 

ui schema

属性

说明

填写的值

widget

组件名称

AttributeGroup

widgetOptions

 

 

└-- itemSchema

 

 

└-- xxx1

xxx

原子组件ui schema

└-- xxx2

xxx

原子组件ui schema

四、业务组件

1. MobileVarify 手机验证码

json schema

属性

说明

填写的值

type

数据格式类型

string

title

字段label

xxxxxx

 

ui schema

属性

说明

填写的值

widget

组件名称

MobileVarify

widgetOptions

 

 

└-- url

短信验证码接口

 

 

获取短信验证码接口:
POST {host}{url}
请求BODY: json格式
{
    "mobile": "1xxxxxxxxxx"
}

返回:
{
  "success": true,
  "errorMsg": "", // 例如验证码已经发了5次了,success=false需要弹errorMsg
  "data": {
    "retry": "60", // 以秒为单位,可再次重试的时间
  }
}

 

2. AddressWithMap 地址地图选择

json schema

属性

说明

填写的值

type

数据格式类型

object

title

字段label

xxxxxx

ui schema

属性

说明

填写的值

widget

组件名称

AddressWithMap

widgetOptions

 

 

└-- limit

地址联想条数,如果是0则不需要联想

 

 

地址联想接口:
GET {_baseOApiPath}/oapi/form/addressGuess

URL QUERY:
provCode 省code
cityCode 市code
areaCode 区code
townCode 街道code
addressPart 当前输入的文本
limit 联想条数

返回:
{
  "success": true,
  "errorMsg": "",
  "data": [
    {
        "fullAddress": "北京北京市朝阳区望京街道望京街10号望京SOHOT3",
        "guessAddress": "望京街10号望京SOHO"
    }
  ]
}


============ 组件value ============
{
  provCode: 省code,
  cityCode: 市code,
  areaCode: 区code,
  townCode: 街道code,
  detailAddress: 详细地址,
  lng: 经度,
  lat: 纬度
}

 

 

 

3. BusinessTime 营业时间

json schema

属性

说明

填写的值

type

数据格式类型

object

title

字段label

xxxxxx

ui schema

属性

说明

填写的值

widget

组件名称

FileUpload

widgetOptions

 

 

============ 组件value ============
{
  "officeTimeDay": "周一至周五",
  "officeTimeHourStart": "08",
  "officeTimeMinuteStart": "30",
  "officeTimeHourEnd": "22",
  "officeTimeMinuteEnd": "00"
}

 

4. XPicker 若干选择器

json schema

属性

说明

填写的值

type

数据格式类型

array

title

字段label

xxxxxx

ui schema

属性

说明

填写的值

widget

组件名称

XPicker

widgetOptions

 

 

└-- count

有几个框

默认2个

└-- unit

单位

 

└-- connector

框与框的连接符

默认*

============ 组件value ============
["22.3", "33.4"]

 

 

 

 

若有收获,就赏束稻2018-05-17 17:28

 
分享到:
评论

相关推荐

    XML Schema技术

    XML Schema技术是XML(可扩展标记语言)标准的一部分,它为XML文档定义了一种结构化模式,用于规范XML文档的结构和数据类型。XML Schema替代了早期的DTD(文档类型定义),提供了更强大的功能和更复杂的验证机制。...

    sap 时间 schema 评估标准教材 HR310

    这表明 SAP 在开发人力资源管理系统时考虑到了与多种技术平台的兼容性。 #### SAP 时间 Schema 评估标准教材 HR310 总结 通过以上内容的介绍,我们可以看出 SAP 时间 Schema 评估标准教材 HR310 是一门内容丰富、...

    Schema驱动,生成用户界面的技术和实现

    ### Schema驱动,生成用户界面的技术和实现 #### 概述 随着XML技术的普及与应用,许多现代系统开始采用XML文档来收集与维护用户输入的数据。XML Schema是一种用于定义XML文档结构的语言,它不仅规定了数据类型,还...

    schema相关知识压缩包

    Schema在信息技术领域中扮演着至关重要的角色,尤其在数据库设计、Web语义化和数据标准制定等方面。Schema是对数据结构的一种规范定义,它规定了数据的格式、类型以及各元素之间的关系,使得数据具有更好的组织性...

    (网页)Schema 教程

    Schema.org 是一个结构化数据的标准,它为网页内容提供了一种通用的语言,使得搜索引擎、浏览器和其他解析工具能更好地理解和解析网页上的信息...在Java开发中,结合前后端技术,Schema的应用将使你的项目更具竞争力。

    XML Schema 与 XML DTD的技术比较与分析

    XML Schema 和 XML DTD 是两种用于定义XML...因此,随着技术的发展,XML Schema在XML模式描述领域的地位逐渐提升,而XML DTD可能在某些特定场合继续存在,但在整体趋势上,XML Schema正逐渐取代XML DTD成为主流标准。

    XML Schema 的简介

    XML Schema 简介 XML Schema 是一种基于 XML 的 DTD 替代者,它可以描述 XML 文档的结构。XML Schema 语言也可作为 XSD(XML Schema Definition)来引用。为了学习 XML Schema,需要具备的基础知识包括 HTML、XHTML...

    SCHEMA 官方文档 官方例子

    SCHEMA是一种重要的标准,用于定义XML(eXtensible Markup Language)文档的结构和语义。它是基于XML的,主要用于创建XML ...通过官方文档和示例的学习,你可以系统地掌握这一技术,为XML数据处理打下坚实的基础。

    XMLSchema.chm

    XML Schema,简称为XSD,是XML(可扩展标记语言)的一个重要组成部分,用于定义XML文档的结构和数据类型。这个“XMLSchema.chm”文件很可能..."XMLSchema.chm"文档应该包含详细的信息,帮助读者深入理解这一关键技术。

    XMLschema快速入門

    ### XML Schema 快速入门指南 #### 一、XML Schema 概述 XML Schema 是一种用于定义 XML 文档结构和约束的语言。通过 XML Schema,我们可以指定文档...希望这个指南能够帮助初学者更好地理解和应用 XML Schema 技术。

    Schema教程 xml

    XML Schema是一种基于XML的文档类型定义(DTD)替代方案,它提供了更为强大且灵活的方式来描述XML文档的结构和数据类型。XML Schema定义(XSD)使用XML语法,使得XML文档的验证和处理更加方便。在这个教程中,我们将...

    XML与XMLSchema

    【XML与XMLSchema】 XML,全称可扩展标记语言(eXtensible Markup Language),是一种基于标准通用标记语言SGML的简化版本,...它们是现代信息技术中不可或缺的一部分,广泛应用于软件开发、网络通信和数据集成等领域。

    springfox-schema-3.0.0-API文档-中英对照版.zip

    赠送jar包:springfox-schema-3.0.0.jar; 赠送原API文档:springfox-schema-3.0.0-javadoc.jar; 赠送源代码:springfox-schema-3.0.0-sources.jar; 赠送Maven依赖信息文件:...双语对照,边学技术、边学英语。

    自定义 Schema 解析 Spring Bean

    通过阅读和分析这些代码,我们可以进一步了解如何在实际项目中应用这一技术。总的来说,自定义Schema解析是Spring框架中一个强大的工具,它为项目提供了一种灵活的方式来管理和配置应用的组件,增强了Spring XML配置...

    springfox-schema-2.2.2-API文档-中英对照版.zip

    赠送jar包:springfox-schema-2.2.2.jar; 赠送原API文档:springfox-schema-2.2.2-javadoc.jar; 赠送源代码:springfox-schema-2.2.2-sources.jar; 赠送Maven依赖信息文件:...双语对照,边学技术、边学英语。

    WebService入门教程_Schema学习示例代码

    总的来说,WebService入门需要掌握SOAP、WSDL和Schema等核心技术,其中Schema对于保证数据交换的准确性和一致性至关重要。通过深入学习和实践,你将能够熟练地运用Schema来设计和验证XML数据,进一步提升你的...

    springfox-schema-2.7.0-API文档-中英对照版.zip

    赠送jar包:springfox-schema-2.7.0.jar; 赠送原API文档:springfox-schema-2.7.0-javadoc.jar; 赠送源代码:springfox-schema-2.7.0-sources.jar; 赠送Maven依赖信息文件:...双语对照,边学技术、边学英语。

    西工大服务计算实验2-1_XML Schema

    这涉及到对XML Schema的理解、XML文档的创建以及编程技术的应用。 首先,我们需要理解XML Schema的核心概念。XML Schema提供了一种方式来规定XML文档中元素、属性、数据类型以及它们之间的关系。它使用XML语法来...

    springfox-schema-2.9.2-API文档-中英对照版.zip

    赠送jar包:springfox-schema-2.9.2.jar; 赠送原API文档:springfox-schema-2.9.2-javadoc.jar; 赠送源代码:springfox-schema-2.9.2-sources.jar; 赠送Maven依赖信息文件:...双语对照,边学技术、边学英语。

Global site tag (gtag.js) - Google Analytics