diff --git a/CHANGELOG.md b/CHANGELOG.md index 5f936ce..4224394 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,150 +1,143 @@ # 版本说明 +## [1.1.7-beta.6] - 2025-10-29 + +### Added + +- 增强 dependencies 功能: + - 支持使用 has 字段来设置依赖值,表明依赖项(值为数组)包含设定值时生效 + +### Fixed + +- 修复 dependencies 功能:支持使用 not 字段来设置依赖值,表明依赖项为非设定值时生效 + +## [1.1.7-beta.5] - 2025-10-10 + +### Fixed + +- 修复 select2 组件在创建自定义选项时,使用回车提交,看似上屏,实际未正确更新新选项的 bug + +## [1.1.7-beta.4] - 2025-09-23 + +### Added + +- 针对 array 类型,当使用 enum 项时,可以设置 isCustomEnum 为 true,用于支持自定义候选项,避免校验 + +## [1.1.7-beta.3] - 2025-09-15 + +### Fixed + +- infoText 弹出层显示效果优化(避免被 select2 控件遮挡) + +## [1.1.7-beta.2] - 2025-04-08 + +### Fixed + +- 修复针对 anyOf 类型,校验不通过时,未显示正确的校验信息的 bug + ## [1.1.6-beta.16] - 2024-11-22 ### Added -- array 类型支持使用 options.tabWide 字段来设置页签为宽屏模式 +- array 类型支持使用 options.tabWide 字段来设置页签为宽屏模式 ## [1.1.6-beta.15] - 2024-11-18 ### Fixed -- 修复支持 array 类型的 tabs 相关增强功能时造成上下排序报错的 bug +- 修复支持 array 类型的 tabs 相关增强功能时造成上下排序报错的 bug ## [1.1.6-beta.14] - 2024-11-15 ### Added -- object 类型支持使用 options.infoText 字段来设置信息提示 +- object 类型支持使用 options.infoText 字段来设置信息提示 ## [1.1.6-beta.13] - 2024-09-04 ### Changed -- 调整 tab 导航列表的折叠功能的交互和样式 +- 调整 tab 导航列表的折叠功能的交互和样式 ## [1.1.6-beta.12] - 2024-08-08 ### Changed -- 针对 array 类型,支持使用 options.tabCollapsed 字段来设置是否启用 tab 导航列表的折叠功能和按钮显示 +- 针对 array 类型,支持使用 options.tabCollapsed 字段来设置是否启用 tab 导航列表的折叠功能和按钮显示 ## [1.1.6-beta.11] - 2024-07-26 ### Changed -- 针对 array 类型,支持使用 options.reverse 字段来设置整个列表的倒序排序和渲染 +- 针对 array 类型,支持使用 options.reverse 字段来设置整个列表的倒序排序和渲染 ## [1.1.6-beta.10] - 2024-05-13 ### Changed -- 针对 array 类型,添加项时仅生成校验信息但不显示 +- 针对 array 类型,添加项时仅生成校验信息但不显示 ## [1.1.6-beta.9] - 2024-03-21 ### Fixed -- infoText 弹出层显示效果优化(避免被视口和其后控件遮挡) +- infoText 弹出层显示效果优化(避免被视口和其后控件遮挡) ## [1.1.6-beta.8] - 2024-03-20 ### Added -- upload 组件优化(支持校验,同时支持设置为 fileContent 格式,该格式可以解析上传文件的文本内容作为值添加到对应字段,并支持下载导出) +- upload 组件优化(支持校验,同时支持设置为 fileContent 格式,该格式可以解析上传文件的文本内容作为值添加到对应字段,并支持下载导出) ### Changed -- 依赖版本更新及代码格式修改 -- 针对 required 属性的校验修正(必填项为空字符串时,应未通过) +- 依赖版本更新及代码格式修改 +- 针对 required 属性的校验修正(必填项为空字符串时,应未通过) ### Fixed -- upload 组件修复依赖无效和移除元素报错的 bug -- 修复按钮和输入框高度不一致的样式问题 +- upload 组件修复依赖无效和移除元素报错的 bug +- 修复按钮和输入框高度不一致的样式问题 ## [1.1.6-beta.6] - 2024-03-15 ### Added -- infoText 说明支持用 \n 来换行 +- infoText 说明支持用 \n 来换行 ## [1.1.6-beta.4] - 2024-01-15 ### Changed -- 优化 array 类型使用 format: 'tabs' 设置为页签时的展示方式 +- 优化 array 类型使用 format: 'tabs' 设置为页签时的展示方式 ### Fixed -- 修复 array/table 类型使用 options.array_controls_top 字段设置无效的问题 +- 修复 array/table 类型使用 options.array_controls_top 字段设置无效的问题 ## [1.1.6-beta.3] - 2023-08-04 ### Fixed -- range 组件修复 chrome 下的异常样式 +- range 组件修复 chrome 下的异常样式 ## [1.1.6-beta.2] - 2023-08-03 ### Added -- range 组件增加 step 选项支持,以支持自定义步进 +- range 组件增加 step 选项支持,以支持自定义步进 ## [1.1.6-beta.1] - 2023-06-29 ### Changed -- 修正正则校验提示字段 pattern_message +- 修正正则校验提示字段 pattern_message ## [1.1.6-beta.0] - 2023-06-15 ### Changed -- 按新格式规则格式化代码 - -## [1.1.5] - 2023-06-15 - -合并到主分支,发布正式版 - -## [1.1.5-beta.6] - 2023-06-14 - -### Fixed - -- 完善校验规则生效机制:当 td 内元素因为 dependency 依赖项设置而隐藏时,其校验规则也相应无效 - -## [1.1.5-beta.5] - 2023-06-12 - -### Added - -- select2 组件增加 relativeToParent 选项支持,以避免其下拉项层和页面对话框层互相遮挡的 - -## [1.1.5-beta.4] - 2022-08-15 - -### Changed - -- 调整 Edit JSON 对话框尺寸 - -### Fixed - -- inline 模式时,修复有表单校验提示时,按钮组不垂直对齐的问题 - -## [1.1.5-beta.2] - 2022-05-16 - -### Changed - -- 增强 dependencies 功能: - - - 对于多项 dependencies 规则,使用 ‘and’ 而非 ‘or’ 的逻辑计算方式 - -- 添加 options.transform_json 字段,支持对 Edit JSON 对话框的 save 行为进行相应数据转换 - -## [1.1.5-beta.1] - 2022-04-11 - -### Fixed - -- string 类型保存时默认移除前后空格 +- 按新格式规则格式化代码 ## [1.1.5] - 2023-06-15 @@ -154,39 +147,38 @@ ### Fixed -- 完善校验规则生效机制:当 td 内元素因为 dependency 依赖项设置而隐藏时,其校验规则也相应无效 +- 完善校验规则生效机制:当 td 内元素因为 dependency 依赖项设置而隐藏时,其校验规则也相应无效 ## [1.1.5-beta.5] - 2023-06-12 ### Added -- select2 组件增加 relativeToParent 选项支持,以避免其下拉项层和页面对话框层互相遮挡的 +- select2 组件增加 relativeToParent 选项支持,以避免其下拉项层和页面对话框层互相遮挡的 ## [1.1.5-beta.4] - 2022-08-15 ### Changed -- 调整 Edit JSON 对话框尺寸 +- 调整 Edit JSON 对话框尺寸 ### Fixed -- inline 模式时,修复有表单校验提示时,按钮组不垂直对齐的问题 +- inline 模式时,修复有表单校验提示时,按钮组不垂直对齐的问题 ## [1.1.5-beta.2] - 2022-05-16 ### Changed -- 增强 dependencies 功能: - - - 对于多项 dependencies 规则,使用 ‘and’ 而非 ‘or’ 的逻辑计算方式 +- 增强 dependencies 功能: + - 对于多项 dependencies 规则,使用 ‘and’ 而非 ‘or’ 的逻辑计算方式 -- 添加 options.transform_json 字段,支持对 Edit JSON 对话框的 save 行为进行相应数据转换 +- 添加 options.transform_json 字段,支持对 Edit JSON 对话框的 save 行为进行相应数据转换 ## [1.1.5-beta.1] - 2022-04-11 ### Fixed -- string 类型保存时默认移除前后空格 +- string 类型保存时默认移除前后空格 ## [1.1.4] - 2022-04-08 @@ -196,437 +188,437 @@ ### Added -- 添加 auto_refresh 属性用于标明当前字段需要实现自动刷新并置空已无效项 - - 用于修复 select 组件已选中项已经在当前组件中的 watch 依赖方已被删除后,还保留无效值的 bug - - 避免以前修复方法造成初始已选择项不能正确渲染的 bug +- 添加 auto_refresh 属性用于标明当前字段需要实现自动刷新并置空已无效项 + - 用于修复 select 组件已选中项已经在当前组件中的 watch 依赖方已被删除后,还保留无效值的 bug + - 避免以前修复方法造成初始已选择项不能正确渲染的 bug ## [1.1.3-beta.20] - 2022-03-28 ### Fixed -- 撤销【修复 select 组件已选中项已经在 watch 方被删除后,还保留不存在的值的 bug】,避免其造成已选择项不能正确渲染的 bug +- 撤销【修复 select 组件已选中项已经在 watch 方被删除后,还保留不存在的值的 bug】,避免其造成已选择项不能正确渲染的 bug ## [1.1.3-beta.19] - 2022-03-28 ### Fixed -- multiline 类型优化样式和容错性 +- multiline 类型优化样式和容错性 ## [1.1.3-beta.18] - 2022-03-28 ### Added -- 新增 newOnly 属性表明该字段只能新建不能编辑 +- 新增 newOnly 属性表明该字段只能新建不能编辑 ### Fixed -- 修复 select 组件已选中项已经在 watch 方被删除后,还保留不存在的值的 bug +- 修复 select 组件已选中项已经在 watch 方被删除后,还保留不存在的值的 bug ## [1.1.3-beta.17] - 2022-03-23 ### Added -- 增强 dependencies 功能: - - 支持使用 not 字段来设置依赖值,表明依赖项为非设定值时生效 -- 增强 pattern 功能: - - 增加 patternValidate 字段,用于提供一个根据条件判断并设置 pattern 是否生效的方法 +- 增强 dependencies 功能: + - 支持使用 not 字段来设置依赖值,表明依赖项为非设定值时生效 +- 增强 pattern 功能: + - 增加 patternValidate 字段,用于提供一个根据条件判断并设置 pattern 是否生效的方法 ## [1.1.3-beta.16] - 2022-03-18 ### Changed -- 调整 multiline 类型(默认值调整为自身为必填项才返回空数组,否则为空) -- 针对 anyOf 类型 增加 realParent 属性(用于 multiline 类型和 anyOf 结合使用时,避免判断 isRequired 缺失关键参数) +- 调整 multiline 类型(默认值调整为自身为必填项才返回空数组,否则为空) +- 针对 anyOf 类型 增加 realParent 属性(用于 multiline 类型和 anyOf 结合使用时,避免判断 isRequired 缺失关键参数) ### Fixed -- 修复 array 类型为折叠状态时会把新增按钮也隐藏的 bug +- 修复 array 类型为折叠状态时会把新增按钮也隐藏的 bug ## [1.1.3-beta.15] - 2022-03-11 ### Fixed -- 支持 array/table 类型使用 items.readOnly 字段来设置单个项的只读模式(readOnly 属性设置使用更健壮的方式,避免 Edit JSON 按钮切换闭造成模式失效) +- 支持 array/table 类型使用 items.readOnly 字段来设置单个项的只读模式(readOnly 属性设置使用更健壮的方式,避免 Edit JSON 按钮切换闭造成模式失效) ## [1.1.3-beta.14] - 2022-03-10 ### Fixed -- 修复 multiline 类型在 setValue 时没有冒泡到父级对象,造成校验失败的 bug -- 修复 multiline 类型未返回正确默认值的 bug +- 修复 multiline 类型在 setValue 时没有冒泡到父级对象,造成校验失败的 bug +- 修复 multiline 类型未返回正确默认值的 bug ## [1.1.3-beta.13] - 2022-03-03 ### Added -- 新增 multiline 类型,表现为支持多行指定类型的文本域,用于快速生成数组(支持 字符串、数字、布尔 三种类型组成数组) -- array 类型的 uniqueItems 增强功能(支持用 xxx@ 的形式来检测对应字段为 array 类型内的重复项) -- array/table 类型支持使用 items.readOnly 字段来设置单个项的只读模式 - - 支持函数:按条件判断禁用;布尔:直接全局禁用 - - 支持使用 options.ignore = 'readOnly' 来设置特定项忽略只读模式 -- links 类型增强功能: - - 当 links.mediaType = 'info' 时,渲染为一个图标,同时可以使用 getMedia 方法返回一个文本内容,用于 hover 时展示动态信息 - - 当 links.mediaType = 'download' 时,渲染为一个下载链接,同时可以使用 getMedia 方法返回一个文本内容,用于渲染动态下载文件内容 +- 新增 multiline 类型,表现为支持多行指定类型的文本域,用于快速生成数组(支持 字符串、数字、布尔 三种类型组成数组) +- array 类型的 uniqueItems 增强功能(支持用 xxx@ 的形式来检测对应字段为 array 类型内的重复项) +- array/table 类型支持使用 items.readOnly 字段来设置单个项的只读模式 + - 支持函数:按条件判断禁用;布尔:直接全局禁用 + - 支持使用 options.ignore = 'readOnly' 来设置特定项忽略只读模式 +- links 类型增强功能: + - 当 links.mediaType = 'info' 时,渲染为一个图标,同时可以使用 getMedia 方法返回一个文本内容,用于 hover 时展示动态信息 + - 当 links.mediaType = 'download' 时,渲染为一个下载链接,同时可以使用 getMedia 方法返回一个文本内容,用于渲染动态下载文件内容 ### Changed -- 当设置 input_width 时,单元格内的 input 父级元素也设置对应值,以避免不生效 +- 当设置 input_width 时,单元格内的 input 父级元素也设置对应值,以避免不生效 ### Fixed -- inline 模式下样式优化 - - array 类型的子元素和其按钮群组在一列显示 +- inline 模式下样式优化 + - array 类型的子元素和其按钮群组在一列显示 ## [1.1.3-beta.12] - 2022-02-21 ### Fixed -- 对话框内的 infoText 弹出层避免被遮挡 +- 对话框内的 infoText 弹出层避免被遮挡 ## [1.1.3-beta.11] - 2022-02-21 ### Added -- checkbox 类型也支持 options.infoText 属性 -- array 类型支持使用 items.readOnly 字段来设置方法判断并设置单个项的只读模式 -- table 类型支持使用 items.readOnly 字段来设置方法判断并设置单个项的只读模式 +- checkbox 类型也支持 options.infoText 属性 +- array 类型支持使用 items.readOnly 字段来设置方法判断并设置单个项的只读模式 +- table 类型支持使用 items.readOnly 字段来设置方法判断并设置单个项的只读模式 ### Changed -- table 类型支持单元格内显示校验错误提示 -- 使用 textContent 代替 createTextNode +- table 类型支持单元格内显示校验错误提示 +- 使用 textContent 代替 createTextNode ### Fixed -- toggle 类型修改 required 下的 css 样式 +- toggle 类型修改 required 下的 css 样式 ## [1.1.3-beta.10] - 2022-02-15 ### Added -- 支持通过 options.exclude 来设置某项属性不包括在最终值内 +- 支持通过 options.exclude 来设置某项属性不包括在最终值内 ### Fixed -- 修复 select2 组件在读取已有数据时报错的 bug -- 调整样式(修复 modal 组件被 select2 层遮挡的 bug) -- 调整样式(修复行内模式时 array 元素内按钮组遮挡内容的 bug) +- 修复 select2 组件在读取已有数据时报错的 bug +- 调整样式(修复 modal 组件被 select2 层遮挡的 bug) +- 调整样式(修复行内模式时 array 元素内按钮组遮挡内容的 bug) ## [1.1.3-beta.9] - 2022-02-08 ### Added -- table 类型支持通过 options.className 来定制样式 -- select 类型支持使用 format: tabs 设置为标签切换形式(不支持 safari 浏览器) -- properties 弹窗实现边距检测 +- table 类型支持通过 options.className 来定制样式 +- select 类型支持使用 format: tabs 设置为标签切换形式(不支持 safari 浏览器) +- properties 弹窗实现边距检测 ### Changed -- 使用 textContent 代替 innerText +- 使用 textContent 代替 innerText ### Fixed -- 调整样式(仅隐藏 object 类型的 edit json 按钮而非整个控制栏以便显示 properties 按钮) +- 调整样式(仅隐藏 object 类型的 edit json 按钮而非整个控制栏以便显示 properties 按钮) ## [1.1.3-beta.8] - 2022-01-12 ### Added -- enumSource 属性支持使用 sourceFormat 来设置格式化函数来处理关联数据 +- enumSource 属性支持使用 sourceFormat 来设置格式化函数来处理关联数据 ### Changed -- oneOf 项校验可以通过 options.hideOneOfValidate 选项来设置不通过的话不再笼统显示总提示信息 -- 添加延时校验,避免渲染结果错位的问题(初始化时和切换 anyOf/oneOf 时) +- oneOf 项校验可以通过 options.hideOneOfValidate 选项来设置不通过的话不再笼统显示总提示信息 +- 添加延时校验,避免渲染结果错位的问题(初始化时和切换 anyOf/oneOf 时) ### Fixed -- inline 模式下样式优化 - - anyOf 元素没有正确实现行内布局的问题 - - anyOf 元素内表单项可以和前面的切换控件垂直对齐 +- inline 模式下样式优化 + - anyOf 元素没有正确实现行内布局的问题 + - anyOf 元素内表单项可以和前面的切换控件垂直对齐 ## [1.1.3-beta.7] - 2021-12-28 ### Changed -- 必填项的 label 样式优化 -- 优化 Edit JSON 功能 - - Edit JSON 的对话框内,保存按钮可以通过配置关闭 - - 编辑器 disable 状态时,Edit JSON 按钮依旧可用(仅把内部的保存按钮禁用) +- 必填项的 label 样式优化 +- 优化 Edit JSON 功能 + - Edit JSON 的对话框内,保存按钮可以通过配置关闭 + - 编辑器 disable 状态时,Edit JSON 按钮依旧可用(仅把内部的保存按钮禁用) ### Fixed -- 对于 array 类型,可以设置不使用缓存,避免删除后又添加条目时,uuid 被复用导致 bug -- 修复 disable 状态时,array 报错的 bug +- 对于 array 类型,可以设置不使用缓存,避免删除后又添加条目时,uuid 被复用导致 bug +- 修复 disable 状态时,array 报错的 bug ## [1.1.3-beta.6] - 2021-12-08 ### Changed -- 调整根标题的文字大小 -- 必填项的 label 样式优化 -- 优化校验规则和机制 - - 字段修改时,仅更新当前项校验提示,不改变其他已显示的提示:优化判断逻辑,避免深度嵌套的元素不更新当前项提示 +- 调整根标题的文字大小 +- 必填项的 label 样式优化 +- 优化校验规则和机制 + - 字段修改时,仅更新当前项校验提示,不改变其他已显示的提示:优化判断逻辑,避免深度嵌套的元素不更新当前项提示 ### Fixed -- 完善 dependencies 和 anyOf 的联动功能: - - 避免 anyOf 元素在有依赖项时切换找不到对应 editor 的问题 - - 修复 editor 不存在还继续判断造成报错的 bug - - 切换依赖项时,同时更新对应切换控件的值(虽然被隐藏) -- number 控件在输入非数字时,保留原始处理逻辑而非变为 undefined,避免校验规则失效 +- 完善 dependencies 和 anyOf 的联动功能: + - 避免 anyOf 元素在有依赖项时切换找不到对应 editor 的问题 + - 修复 editor 不存在还继续判断造成报错的 bug + - 切换依赖项时,同时更新对应切换控件的值(虽然被隐藏) +- number 控件在输入非数字时,保留原始处理逻辑而非变为 undefined,避免校验规则失效 ## [1.0.22] - 2021-11-29 ### Changed -- number 控件在输入非数字时,变为 undefined 而非转为字符串保存 -- 加入 maxLength 属性时,不再对原生控件添加同名属性,避免用户对主动截断输入值产生困扰 -- 调整了 anyOf 校验信息的判断逻辑,避免因为 anyOf 项校验不通过的话不显示具体项的问题 +- number 控件在输入非数字时,变为 undefined 而非转为字符串保存 +- 加入 maxLength 属性时,不再对原生控件添加同名属性,避免用户对主动截断输入值产生困扰 +- 调整了 anyOf 校验信息的判断逻辑,避免因为 anyOf 项校验不通过的话不显示具体项的问题 ### Fixed -- 修复 uniqueItems 判断方法不够健壮导致处理异常值报错的 bug -- 修复移除 anyOf 的 title 区不完善有遗漏的地方 -- 修复当 anyOf 是联动关系时,仅校验当前激活项,因为方法不够健壮导致处理异常值报错的 bug +- 修复 uniqueItems 判断方法不够健壮导致处理异常值报错的 bug +- 修复移除 anyOf 的 title 区不完善有遗漏的地方 +- 修复当 anyOf 是联动关系时,仅校验当前激活项,因为方法不够健壮导致处理异常值报错的 bug ## [1.0.21] - 2021-10-11 ### Added -- required 属性的增强修正功能(使用 dependencies 设置的字段,当隐藏时,不校验其 required 属性) -- exclusive 属性用于指定互斥项(表明 exclusive 内的值只能选择其一) +- required 属性的增强修正功能(使用 dependencies 设置的字段,当隐藏时,不校验其 required 属性) +- exclusive 属性用于指定互斥项(表明 exclusive 内的值只能选择其一) ### Changed -- anyOf 项校验不通过的话不再笼统显示提示信息,而是针对性提示第一个不通过项的校验提示 +- anyOf 项校验不通过的话不再笼统显示提示信息,而是针对性提示第一个不通过项的校验提示 ### Fixed -- 修复 toggle 类型在 table 单元格内显示异常的 bug +- 修复 toggle 类型在 table 单元格内显示异常的 bug ## [1.0.20] - 2021-08-31 ### Added -- array 类型的增强功能(支持用 compareThanPrev 属性来定义指定值和同级相邻节点的关系限制) +- array 类型的增强功能(支持用 compareThanPrev 属性来定义指定值和同级相邻节点的关系限制) ## [1.0.19] - 2021-08-27 ### Added -- array 类型的 uniqueItems 增强功能(支持用 a.b 的形式来检测嵌套属性的重复项) -- date 自定义校验增强功能(path 字段支持通过数组元素 id 定义的相对路径) +- array 类型的 uniqueItems 增强功能(支持用 a.b 的形式来检测嵌套属性的重复项) +- date 自定义校验增强功能(path 字段支持通过数组元素 id 定义的相对路径) ### Changed -- UUID 变为大写 +- UUID 变为大写 ### Fixed -- 修复实现“当 anyOf 是联动关系时,仅校验当前激活项,而非所有”功能时因为 $ref 引用导致判断失误的 bug +- 修复实现“当 anyOf 是联动关系时,仅校验当前激活项,而非所有”功能时因为 $ref 引用导致判断失误的 bug ## [1.0.18] - 2021-08-25 ### Added -- 普通 number 类型也支持 relativeTo 联动校验功能(原始只支持 date ) +- 普通 number 类型也支持 relativeTo 联动校验功能(原始只支持 date ) ### Changed -- 当 anyOf 内元素有联动关系时,仅按当前激活项的规则进行校验,而非按 anyOf 的规则校验所有 +- 当 anyOf 内元素有联动关系时,仅按当前激活项的规则进行校验,而非按 anyOf 的规则校验所有 ### Fixed -- 修复 date 自定义校验功能功能中因为其他类型也使用了 relativeTo 字段造成误判的 bug +- 修复 date 自定义校验功能功能中因为其他类型也使用了 relativeTo 字段造成误判的 bug ## [1.0.17] - 2021-08-23 ### Fixed -- 修复当没有非必填项的数据时,该项不会渲染的 bug -- anyOf 下的元素为 array 类型时,不隐藏其标题区,避免误隐藏操作按钮 +- 修复当没有非必填项的数据时,该项不会渲染的 bug +- anyOf 下的元素为 array 类型时,不隐藏其标题区,避免误隐藏操作按钮 ## [1.1.2] - 2021-08-04 ### Fixed -- 修复当没有非必填项的数据时,该项不会渲染的 bug -- 修复 string 类型使用 markdown 编辑器时,获取值为空,导致必填项误判的 bug +- 修复当没有非必填项的数据时,该项不会渲染的 bug +- 修复 string 类型使用 markdown 编辑器时,获取值为空,导致必填项误判的 bug ## [1.0.16] - 2021-07-20 ### Added -- 增强 dependencies 和 anyOf 的联动功能: - - 针对 anyOf 下所有元素都有依赖项的情况下,初始化时不修改 type 为 the best match schema,避免联动的输入控件不能正确渲染为对应的项和值 +- 增强 dependencies 和 anyOf 的联动功能: + - 针对 anyOf 下所有元素都有依赖项的情况下,初始化时不修改 type 为 the best match schema,避免联动的输入控件不能正确渲染为对应的项和值 ## [1.0.15] - 2021-07-16 ### Added -- 增强 dependencies 和 anyOf 的联动功能: - - 针对 anyOf 下所有元素都有依赖项的情况下,隐藏原生切换控件,通过切换 dependencies 项来实现切换(同时隐藏 anyOf 标题) - - 实现切换 dependencies 项时,同时重置联动项的值 - - 统一初始化 anyOf 的项,避免切换时无初始项无法渲染 -- 对于没有内容的 label 标签,改变其 display 属性,变相隐藏(避免空白区域) +- 增强 dependencies 和 anyOf 的联动功能: + - 针对 anyOf 下所有元素都有依赖项的情况下,隐藏原生切换控件,通过切换 dependencies 项来实现切换(同时隐藏 anyOf 标题) + - 实现切换 dependencies 项时,同时重置联动项的值 + - 统一初始化 anyOf 的项,避免切换时无初始项无法渲染 +- 对于没有内容的 label 标签,改变其 display 属性,变相隐藏(避免空白区域) ### Fixed -- 修复 uniqueItems 设置为 false 时还执行校验的 bug +- 修复 uniqueItems 设置为 false 时还执行校验的 bug ## [1.1.0] - 2021-07-06 ### Changed -- 优化校验规则和机制 - - 初始化时不再全局校验,仅在保存时统一校验 - - 值操作和修改时,仅校验当前项 - - 优化逻辑,当前字段校验信息变动时,不改变其他已显示的提示 - - 必填项提示放在每个字段下,而非整个父级对象上 -- 优化调整界面样式 - - 表格去除竖间隔线,表头添加背景 - - 输入框只显示下边线 - - select 自定义下拉箭头 - - label 和输入框字体调整 - - label 和输入框支持 inline 模式(显示为一行,并添加冒号) - - 输入框支持三种预设尺寸 - - 表格内的右侧按钮组收起,鼠标 click 时再展开,展开的按钮组垂直排列并且为文字+图标形式 +- 优化校验规则和机制 + - 初始化时不再全局校验,仅在保存时统一校验 + - 值操作和修改时,仅校验当前项 + - 优化逻辑,当前字段校验信息变动时,不改变其他已显示的提示 + - 必填项提示放在每个字段下,而非整个父级对象上 +- 优化调整界面样式 + - 表格去除竖间隔线,表头添加背景 + - 输入框只显示下边线 + - select 自定义下拉箭头 + - label 和输入框字体调整 + - label 和输入框支持 inline 模式(显示为一行,并添加冒号) + - 输入框支持三种预设尺寸 + - 表格内的右侧按钮组收起,鼠标 click 时再展开,展开的按钮组垂直排列并且为文字+图标形式 ## [1.0.14] - 2021-06-18 ### Added -- description 说明支持用 \n 来换行 -- 当根元素为字符串时,label 也渲染为大标题 -- ace 编辑器样式调整 +- description 说明支持用 \n 来换行 +- 当根元素为字符串时,label 也渲染为大标题 +- ace 编辑器样式调整 ### Fixed -- 修复 array_controls_top 选项打开时,某些按钮找不到 this.title 报错的情况 -- 修复 array_controls_top 选项打开时,折叠时会把新增按钮也隐藏的 bug -- 修复 description 说明的样式名赋值错误的 bug +- 修复 array_controls_top 选项打开时,某些按钮找不到 this.title 报错的情况 +- 修复 array_controls_top 选项打开时,折叠时会把新增按钮也隐藏的 bug +- 修复 description 说明的样式名赋值错误的 bug ## [1.0.13] - 2021-05-25 ### Added -- description 说明支持传入 options.warning 来开启警示颜色 +- description 说明支持传入 options.warning 来开启警示颜色 ### Fixed -- 修复 signature 类型的 bug(onEnd 事件定义的 function 内 this 指向错误;clear 时没有清除 data 值) -- 修复 dependencies 属性设置为数组时,不生效的 bug -- 修复 nunjucks 模板引擎渲染方法 +- 修复 signature 类型的 bug(onEnd 事件定义的 function 内 this 指向错误;clear 时没有清除 data 值) +- 修复 dependencies 属性设置为数组时,不生效的 bug +- 修复 nunjucks 模板引擎渲染方法 ## [1.0.12] - 2021-05-14 ### Added -- 添加 date 自定义校验功能(可以约定起、始时间必须前者小于后者) +- 添加 date 自定义校验功能(可以约定起、始时间必须前者小于后者) ## [1.0.11] - 2021-05-13 ### Fixed -- 修复 safari 下不能对日期字符串进行正确构造造成 date 控件校验失败的 bug +- 修复 safari 下不能对日期字符串进行正确构造造成 date 控件校验失败的 bug ## [1.0.10] - 2021-05-10 ### Fixed -- 修复 SimpleMDE 不能正确初始化空字符串值的 bug +- 修复 SimpleMDE 不能正确初始化空字符串值的 bug ## [1.0.9] - 2021-05-08 ### Fixed -- 修复日期控件图标因为有前后相邻元素造成错位的 bug -- 修复日期控件使用数值类型时设置为 0 以清空显示时无效的 bug -- 修复同步主仓库后带来的一些冗余代码和 bug -- 修复文档迁移后图片路径的问题 +- 修复日期控件图标因为有前后相邻元素造成错位的 bug +- 修复日期控件使用数值类型时设置为 0 以清空显示时无效的 bug +- 修复同步主仓库后带来的一些冗余代码和 bug +- 修复文档迁移后图片路径的问题 ## [1.0.8] - 2021-04-27 ### Changed -- 撤销 1.0.5 的一处修改(string 类型为必填项时,不能为空),单独开分支进行校验优化开发,保证整体体验 +- 撤销 1.0.5 的一处修改(string 类型为必填项时,不能为空),单独开分支进行校验优化开发,保证整体体验 ## [1.0.7] - 2021-04-26 ### Changed -- schema 组件的部分样式定义放入库文件内部(优化样式规则,适配根类型为非 object 情况) +- schema 组件的部分样式定义放入库文件内部(优化样式规则,适配根类型为非 object 情况) ## [1.0.6] - 2021-04-23 ### Changed -- schema 组件的部分样式定义放入库文件内部 +- schema 组件的部分样式定义放入库文件内部 ## [1.0.5] - 2021-04-23 ### Added -- 添加 checkbox 的变异类型 toggle +- 添加 checkbox 的变异类型 toggle ### Changed -- schema 组件的部分样式定义放入库文件内部 -- string 类型为必填项时,不能为空 -- number 类型为空时,不强制校验是否为正确类型 +- schema 组件的部分样式定义放入库文件内部 +- string 类型为必填项时,不能为空 +- number 类型为空时,不强制校验是否为正确类型 ### Fixed -- array 子项修复延时造成的禁用 readOnly 未生效的 bug +- array 子项修复延时造成的禁用 readOnly 未生效的 bug ## [1.0.4] - 2021-04-19 ### Added -- input 元素支持通过 options 指定宽度 -- 调试 readOnly 功能(添加 log 代码) +- input 元素支持通过 options 指定宽度 +- 调试 readOnly 功能(添加 log 代码) ### Changed -- 修改打包和开发调试的配置(build 打包,watch + watch.css 可以同时监控 js、css 文件的改动进行开发) -- 表格单元添加最小宽度限制 -- 调整 label 行高,以容纳右侧的 btn 按钮区;btn 定位调整; -- form group 沿用原始的下间隔,以区分相邻 group +- 修改打包和开发调试的配置(build 打包,watch + watch.css 可以同时监控 js、css 文件的改动进行开发) +- 表格单元添加最小宽度限制 +- 调整 label 行高,以容纳右侧的 btn 按钮区;btn 定位调整; +- form group 沿用原始的下间隔,以区分相邻 group ## [1.0.3] - 2021-04-14 ### Changed -- 样式调整(移除调试样式) +- 样式调整(移除调试样式) ## [1.0.2] - 2021-04-13 ### Added -- style 样式由 css 变为 less 以增加 css 选择器的权重 -- css2json 函数支持 less 格式 +- style 样式由 css 变为 less 以增加 css 选择器的权重 +- css2json 函数支持 less 格式 ### Changed -- 假如 object 作为 table 的 td 单元格渲染时,隐藏标题区,同时整体不添加缩进 -- 样式调整,减小各个区块的间隙 +- 假如 object 作为 table 的 td 单元格渲染时,隐藏标题区,同时整体不添加缩进 +- 样式调整,减小各个区块的间隙 ## [1.0.1] - 2021-04-08 ### Changed -- 为正式发版调整项目名称和关键字,同时设置打包忽略文件 +- 为正式发版调整项目名称和关键字,同时设置打包忽略文件 ## [1.0.0] - 2021-04-08 ### Added -- array 类型的 uniqueItems 允许设置为字符串(子项的任一属性名),这时表示 array 内单个项对应属性为不可重复值 -- 自定义样式使用 theme 方式注入,而非用封装组件实现,避免依赖链外露 +- array 类型的 uniqueItems 允许设置为字符串(子项的任一属性名),这时表示 array 内单个项对应属性为不可重复值 +- 自定义样式使用 theme 方式注入,而非用封装组件实现,避免依赖链外露 ### Changed -- 常见基础表单控件添加缩进,和可展开的 object 类元素进行文本对齐 -- array 控件按钮图标重布局 -- anyOf 组件标题样式调整 +- 常见基础表单控件添加缩进,和可展开的 object 类元素进行文本对齐 +- array 控件按钮图标重布局 +- anyOf 组件标题样式调整 diff --git a/README.md b/README.md index e9a9fa7..0e5ac4c 100644 --- a/README.md +++ b/README.md @@ -319,35 +319,35 @@ let schema = { ### 基础类型 -- string -- boolean -- number -- integer -- array -- object -- info -- button +- string +- boolean +- number +- integer +- array +- object +- info +- button ### 扩展格式 -- textarea (基于 string 扩展) -- date (基于 string 扩展) -- time (基于 string 扩展) -- datetime-local (基于 string 扩展) -- color (基于 string 扩展) -- starrating (基于 string 扩展) -- hidden (基于 string 扩展) -- uuid (基于 string 扩展) -- signature (基于 string 扩展) -- range (基于 number 扩展) -- rating (基于 integer 扩展) -- checkbox (基于 boolean 扩展) -- grid (基于 object 扩展) -- table (基于 array 扩展) -- tabs (基于 array 扩展) -- radio (基于 string/number/integer + enum 扩展,即单选) -- checkbox (基于 array + enum 扩展,即多选) -- select2 (基于 enum 扩展,单选多选都支持) +- textarea (基于 string 扩展) +- date (基于 string 扩展) +- time (基于 string 扩展) +- datetime-local (基于 string 扩展) +- color (基于 string 扩展) +- starrating (基于 string 扩展) +- hidden (基于 string 扩展) +- uuid (基于 string 扩展) +- signature (基于 string 扩展) +- range (基于 number 扩展) +- rating (基于 integer 扩展) +- checkbox (基于 boolean 扩展) +- grid (基于 object 扩展) +- table (基于 array 扩展) +- tabs (基于 array 扩展) +- radio (基于 string/number/integer + enum 扩展,即单选) +- checkbox (基于 array + enum 扩展,即多选) +- select2 (基于 enum 扩展,单选多选都支持) ### 汇总 @@ -557,9 +557,9 @@ let schema = { 当需要输入日期或时间类的字符串值时,可以使用 `format` 来指定相应的格式。 编辑器共提供了 3 种类型: -- date,渲染为日期选择框,返回值为 ‘YYYY-MM-DD’ 格式 -- time,渲染为时间选择框,返回值为 ‘HH:MM’ 格式 -- datetime-local,渲染为日期+时间选择框,返回值为 ‘YYYY-MM-DD HH:MM’ 格式 +- date,渲染为日期选择框,返回值为 ‘YYYY-MM-DD’ 格式 +- time,渲染为时间选择框,返回值为 ‘HH:MM’ 格式 +- datetime-local,渲染为日期+时间选择框,返回值为 ‘YYYY-MM-DD HH:MM’ 格式 通过 `options.flatpickr` 中设置相关属性,可以启用第三方控件 [flatpickr](https://github.com/flatpickr/flatpickr),并支持传入其原生配置。 @@ -590,8 +590,8 @@ Press 针对 datetime 类型额外实现了对象依赖限制功能:可以指 通过 `relativeTo` 属性来描述规则: -- 通过 `path` 关键字可以指定当前项的对比目标的路径。它支持绝对路径和相对路径。 -- 通过 `limit` 关键字设置当前项相对于对比目标的规则。它支持两个值:'less' 表明小于目标对象,'greater' 表明大于目标对象。 +- 通过 `path` 关键字可以指定当前项的对比目标的路径。它支持绝对路径和相对路径。 +- 通过 `limit` 关键字设置当前项相对于对比目标的规则。它支持两个值:'less' 表明小于目标对象,'greater' 表明大于目标对象。 ```javascript let schema = { @@ -672,19 +672,18 @@ let schema = { 启用方法: -- 首先设置 `format` 为 _url_,同时通过 `options.upload` 中设置相关属性,即可启用一个带文件预览和上传进度的上传控件。 -- 在相关属性内,使用 `upload_handler` 关键字可以指定一个上传的处理函数。该回调函数有三个参数 _path, file, callback_。 - - - path:上传控件对应的路径字段。它支持绝对路径 - - file:上传控件选中的文件 - - callback:回调对象(提供了 success、failure、updateProgress 方法) - - success:成功的回调方法,用于给控件对应的字段赋值 - - failure:失败的回调方法,用于控件显示错误提示信息 - - updateProgress:上传进度的回调方法,用于控件实时渲染进度提示 +- 首先设置 `format` 为 _url_,同时通过 `options.upload` 中设置相关属性,即可启用一个带文件预览和上传进度的上传控件。 +- 在相关属性内,使用 `upload_handler` 关键字可以指定一个上传的处理函数。该回调函数有三个参数 _path, file, callback_。 + - path:上传控件对应的路径字段。它支持绝对路径 + - file:上传控件选中的文件 + - callback:回调对象(提供了 success、failure、updateProgress 方法) + - success:成功的回调方法,用于给控件对应的字段赋值 + - failure:失败的回调方法,用于控件显示错误提示信息 + - updateProgress:上传进度的回调方法,用于控件实时渲染进度提示 也可以设置该属性为函数名称,然后通过全局统一定义管理回调函数,请参考[集成指南](./docs/integration_guide.md#upload)的对应部分 -- 可以通过 `links` 关键字设置上传成功后的回显:默认是显示文件完整路径,可以用 `rel` 为 _view_ 来仅显示 view 字样的链接 +- 可以通过 `links` 关键字设置上传成功后的回显:默认是显示文件完整路径,可以用 `rel` 为 _view_ 来仅显示 view 字样的链接 ```javascript let schema = { @@ -748,9 +747,9 @@ let schema = { hidden 控件实现有两种方法: -- 通过 `format` 关键字设置为 _hidden_ 实现,字段输入控件不在界面显示,但是字段标题 label 还会渲染 -- 通过 `options.hidden` 属性设置为 _true_ 实现,整个字段不在界面显示,但是最终 JSON 值包含该字段值 -- 通过 `options.exclude` 属性设置为 _true_ 实现,整个字段不包含在最终 JSON 值,此选项为 Press 新增特性 +- 通过 `format` 关键字设置为 _hidden_ 实现,字段输入控件不在界面显示,但是字段标题 label 还会渲染 +- 通过 `options.hidden` 属性设置为 _true_ 实现,整个字段不在界面显示,但是最终 JSON 值包含该字段值 +- 通过 `options.exclude` 属性设置为 _true_ 实现,整个字段不包含在最终 JSON 值,此选项为 Press 新增特性 ```javascript let schema = { @@ -779,13 +778,13 @@ let schema = { 启用方法: -- 首先设置 `format` 为 _autocomplete_,同时通过 `options.autocomplete` 设置相关属性,即可启用一个带自动完成的输入控件。 -- 在相关属性内, - - 使用 `search` 关键字指定一个搜索函数并异步返回结果。该回调函数有一个参数,表示当前输入值; - - 使用 `renderResult` 关键字指定一个函数处理上述返回结果并渲染到备选下拉框。该回调函数有两个参数,分别表示单个备选结果及其相关属性; - - 使用 `getResultValue` 关键字指定一个函数处理选中项并返回结果用于渲染。该回调函数有一个参数,表示当前选中值; - - 使用 `autoSelect` 关键字设置是否自动选择列表第一个项。 -- 也可以设置上述属性为函数名称,然后通过全局统一定义管理回调函数,请参考[集成指南](./docs/integration_guide.md#autocomplete)的对应部分 +- 首先设置 `format` 为 _autocomplete_,同时通过 `options.autocomplete` 设置相关属性,即可启用一个带自动完成的输入控件。 +- 在相关属性内, + - 使用 `search` 关键字指定一个搜索函数并异步返回结果。该回调函数有一个参数,表示当前输入值; + - 使用 `renderResult` 关键字指定一个函数处理上述返回结果并渲染到备选下拉框。该回调函数有两个参数,分别表示单个备选结果及其相关属性; + - 使用 `getResultValue` 关键字指定一个函数处理选中项并返回结果用于渲染。该回调函数有一个参数,表示当前选中值; + - 使用 `autoSelect` 关键字设置是否自动选择列表第一个项。 +- 也可以设置上述属性为函数名称,然后通过全局统一定义管理回调函数,请参考[集成指南](./docs/integration_guide.md#autocomplete)的对应部分 ```javascript let schema = { @@ -855,30 +854,30 @@ let schema = { 支持格式如下: -- c -- cpp (alias for c++) -- csharp -- css -- less -- sass -- scss -- dart -- golang -- html -- ini -- java -- javascript -- json -- lua -- makefile -- php -- python -- ruby -- sql -- pgsql -- mysql -- xml -- yaml +- c +- cpp (alias for c++) +- csharp +- css +- less +- sass +- scss +- dart +- golang +- html +- ini +- java +- javascript +- json +- lua +- makefile +- php +- python +- ruby +- sql +- pgsql +- mysql +- xml +- yaml 同时 还能通过 `options.ace` 传入 Ace Editor 的原生支持选项 @@ -924,9 +923,9 @@ let schema = { 正常情况下,通过枚举数组定义的下拉选项的显示值就是实际值。假如下拉选项的显示值和实际值不相同,而是一一映射关系,可以使用 `enumSource` 属性来完成这种特殊需求。 -- 通过 `source` 关键字可以指定一个对象数组作为枚举备选项,对象中可以分别描述显示值和实际值。 -- 通过 `title` 关键字定义枚举项的显示文本,支持模板语法,其中用 item 代指对象数组中的数组元素自身。 -- 通过 `value` 关键字定义枚举项的值,支持模板语法,其中用 item 代指对象数组中的数组元素自身。 +- 通过 `source` 关键字可以指定一个对象数组作为枚举备选项,对象中可以分别描述显示值和实际值。 +- 通过 `title` 关键字定义枚举项的显示文本,支持模板语法,其中用 item 代指对象数组中的数组元素自身。 +- 通过 `value` 关键字定义枚举项的值,支持模板语法,其中用 item 代指对象数组中的数组元素自身。 ```javascript let schema = { @@ -994,8 +993,8 @@ let schema = { 通过 `relativeTo` 属性来描述规则: -- 通过 `path` 关键字可以指定当前项的对比目标的路径。它支持绝对路径和相对路径。 -- 通过 `limit` 关键字设置当前项相对于对比目标的规则。它支持两个值:'less' 表明小于等于目标对象,'greater' 表明大于等于目标对象。 +- 通过 `path` 关键字可以指定当前项的对比目标的路径。它支持绝对路径和相对路径。 +- 通过 `limit` 关键字设置当前项相对于对比目标的规则。它支持两个值:'less' 表明小于等于目标对象,'greater' 表明大于等于目标对象。 #### 结合 enum 属性 @@ -1029,10 +1028,10 @@ let schema = { array 作为 JSON 数据的重要组成类型,相应的,数组编辑区也占据了编辑器的大量篇幅(包括界面、代码等等)。 除了默认形式,另外还提供了 _table_ 和 _tabs_ 两种 format 形式来编辑数组。 -- 默认: 数组元素从上到下,垂直排列分布,适合元素数量少时。 -- table: 用表格的形式展示数组元素,适合元素数量多且元素为对象且属性少的情况。 -- tabs: 用左页签来切换数据元素,永远只显示一个元素,适合元素为对象且属性多的情况。 -- tabs-top: 同上,只是改为顶页签。 +- 默认: 数组元素从上到下,垂直排列分布,适合元素数量少时。 +- table: 用表格的形式展示数组元素,适合元素数量多且元素为对象且属性少的情况。 +- tabs: 用左页签来切换数据元素,永远只显示一个元素,适合元素为对象且属性多的情况。 +- tabs-top: 同上,只是改为顶页签。 ```javascript let schema = { @@ -1231,8 +1230,8 @@ Press 针对 array 类型提供一个可以指定数组元素的某个属性必 通过 `compareThanPrev` 属性来描述规则: -- 通过 `path` 关键字可以指定数组元素内的属性。 -- 通过 `limit` 关键字设置当前元素相对于前一个元素同名属性的比较规则。它支持两个值:'less' 表明小于目标对象,'greater' 表明大于目标对象。 +- 通过 `path` 关键字可以指定数组元素内的属性。 +- 通过 `limit` 关键字设置当前元素相对于前一个元素同名属性的比较规则。它支持两个值:'less' 表明小于目标对象,'greater' 表明大于目标对象。 ```javascript let schema = { @@ -1292,6 +1291,21 @@ let schema = { }; ``` +另外,为了支持特殊场景下,需要手动输入的需求(需和 select2 组件进行配合),Press 新增了 `isCustomEnum` 属性,这样就可以避免对 enum 有效性进行校验,从而实现手动输入候选项的功能 + +```javascript +let schema = { + type: 'array', + format: 'select2', + uniqueItems: true, + items: { + type: 'string', + isCustomEnum:true, + enum: ['A-Yes', 'A-Unknown', 'B-Yes', 'B-Unknown', 'C-Yes', 'C-Unknown'] + } +}; +``` + #### array 事件 编辑器针对 array 的元素常见操作(增加、删除、移动)都提供了对应的钩子函数便于做相应的处理。 @@ -1337,10 +1351,10 @@ let schema = { object 编辑区也是编辑器的重要组成部分之一。该编辑区除了默认布局也提供了其他布局用于精简界面。它通过 `format` 关键字来设定。 -- 默认: 每个子属性单独占据一行。 -- grid: 多个子属性并排在一行显示,每个子属性可以通过 _grid_columns_ 选项来设置宽度,然后 每行会尽可能占满 12 格后换行,所以该布局不能保证子属性的显示顺序和代码一致。 -- grid-strict: 同上,但是每个子属性会严格按照 _grid_columns_ 显示,不会自动扩展。同时支持通过 _grid_break_ 选项来设置手动换行。 -- categories: 通过顶页签形式对子属性进行分组,每个对象或数组属性对应一个页签(页签标题来自对象或数组的标题),剩余的其他属性为一个页签(标题默认为 Basic,可以通过 `basicCategoryTitle` 属性进行自定义)。 +- 默认: 每个子属性单独占据一行。 +- grid: 多个子属性并排在一行显示,每个子属性可以通过 _grid_columns_ 选项来设置宽度,然后 每行会尽可能占满 12 格后换行,所以该布局不能保证子属性的显示顺序和代码一致。 +- grid-strict: 同上,但是每个子属性会严格按照 _grid_columns_ 显示,不会自动扩展。同时支持通过 _grid_break_ 选项来设置手动换行。 +- categories: 通过顶页签形式对子属性进行分组,每个对象或数组属性对应一个页签(页签标题来自对象或数组的标题),剩余的其他属性为一个页签(标题默认为 Basic,可以通过 `basicCategoryTitle` 属性进行自定义)。 ```javascript let schema = { @@ -1446,9 +1460,9 @@ button 类型提供了按钮控件形式,一般用于获取当前编辑器的 启用方法: -- 首先设置 `type` 为 _button_,同时通过 `options.button` 中设置相关属性,即可启用一个按钮控件。 -- 在相关属性内,使用 `action` 关键字指定一个函数用于按钮点击调用,该函数有一个参数,表示当前事件;使用 `validated` 关键字设置是否校验数据有效后才让按钮生效。 -- 也可以设置 `action` 属性为函数名称,然后通过全局统一定义管理回调函数,请参考[集成指南](./docs/integration_guide.md#button)的对应部分 +- 首先设置 `type` 为 _button_,同时通过 `options.button` 中设置相关属性,即可启用一个按钮控件。 +- 在相关属性内,使用 `action` 关键字指定一个函数用于按钮点击调用,该函数有一个参数,表示当前事件;使用 `validated` 关键字设置是否校验数据有效后才让按钮生效。 +- 也可以设置 `action` 属性为函数名称,然后通过全局统一定义管理回调函数,请参考[集成指南](./docs/integration_guide.md#button)的对应部分 > 注:当为 button 时,该字段默认为 required @@ -1471,10 +1485,10 @@ let schema = { 编辑器支持使用 anyOf、oneOf 和 allOf 关键字来描述复杂的 schema 校验规则和机制。 -- anyOf: 满足任意一个子 schema -- oneOf: 满足且仅满足一个子 schema -- allOf: 满足所有子 schema -- not: 不满足 schema +- anyOf: 满足任意一个子 schema +- oneOf: 满足且仅满足一个子 schema +- allOf: 满足所有子 schema +- not: 不满足 schema ```javascript let schema = { @@ -1629,9 +1643,9 @@ let schema = { `dependencies` 的值是 map 形式的键值对,用来描述要监控的字段和期望值。它的值支持三种形式: -- 单个键值对:表明依赖项的值为期望值即生效。 -- 单个键值对,但是值为数组:表明依赖项的值为数组元素之一即生效。 -- 多个键值对:表明当多个依赖项都分别满足期望值时才生效。 +- 单个键值对:表明依赖项的值为期望值即生效。 +- 单个键值对,但是值为数组:表明依赖项的值为数组元素之一即生效。 +- 多个键值对:表明当多个依赖项都分别满足期望值时才生效。 ```javascript let schema = { @@ -1676,7 +1690,37 @@ let schema = { }; ``` -另外,针对 `dependencies` 关键字,Press 提供了增强功能,支持使用 `not` 字段来设置依赖值,表明依赖项为非设定值时生效。 +另外,针对 `dependencies` 关键字,Press 提供了增强功能。 + +一、支持使用 `has` 字段来设置依赖值,表明依赖项(值为数组)包含设定值时生效。 + +```javascript +let schema = { + fieldOne: { + type: 'array', + format: 'checkbox', + uniqueItems: true, + minItems: 1, + items: { + type: 'string', + enum: ['foo', 'bar', 'cool'] + } + }, + depender: { + type: 'string', + description: 'show when fieldOne include bar', + options: { + dependencies: { + fieldOne: { + has: 'bar' + } + } + } + } +}; +``` + +二、支持使用 `not` 字段来设置依赖值,表明依赖项为非设定值时生效。 ```javascript let schema = { @@ -1760,11 +1804,11 @@ let schema = { 引入第三方模板配置支持两种方式: -- 全局默认值形式 +- 全局默认值形式 `JSONEditor.defaults.options.template = "nunjucks"` -- 实例化传参形式 +- 实例化传参形式 ```javascript const editor = new JSONEditor(element, { @@ -2061,12 +2105,12 @@ JSONEditor.defaults.callbacks.template = { 增强功能列表: -- 假如 anyOf 下所有元素都有 dependencies 属性的情况下, - - 隐藏 anyOf 原生切换控件,通过激活 dependencies 对应项来实现切换(同时隐藏 anyOf 标题) - - 实现激活 dependencies 对应项时,同时重置 anyOf 当前激活项的值 - - 初始化时修改内部参数,避免联动的输入控件不能正确渲染为对应的项和值 - - 统一初始化 anyOf 的项,避免切换时无初始项无法渲染 - - 仅按 anyOf 当前激活项的规则进行校验,而非按 anyOf 所有规则校验 +- 假如 anyOf 下所有元素都有 dependencies 属性的情况下, + - 隐藏 anyOf 原生切换控件,通过激活 dependencies 对应项来实现切换(同时隐藏 anyOf 标题) + - 实现激活 dependencies 对应项时,同时重置 anyOf 当前激活项的值 + - 初始化时修改内部参数,避免联动的输入控件不能正确渲染为对应的项和值 + - 统一初始化 anyOf 的项,避免切换时无初始项无法渲染 + - 仅按 anyOf 当前激活项的规则进行校验,而非按 anyOf 所有规则校验 通过上述的改造,Press 组件支持以下应用场景: diff --git a/package.json b/package.json index bad0832..d022483 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "@byte-power/json-press", "title": "JSONPress", "description": "JSON Schema based editor", - "version": "1.1.5", + "version": "1.1.7-beta.6", "main": "dist/jsonpress.js", "author": { "name": "lizux" @@ -21,6 +21,7 @@ "editor" ], "scripts": { + "warning": "发布 beta 版本使用 push 命令;发布正式版本使用 pub 命令,发布正式版本时,记得移除 postversion 命令里 --tag beta", "pub": "npm version minor", "push": "npm version prerelease --preid beta --no-git-tag-version", "prepare": "npm run build", diff --git a/src/editor.js b/src/editor.js index f058d78..516ecca 100644 --- a/src/editor.js +++ b/src/editor.js @@ -176,9 +176,11 @@ export class AbstractEditor { if (typeof value !== 'object') { if (hasOwnProperty(choices, 'not')) { this.dependenciesFulfilled = choices.not !== value; - return; + } else { + this.dependenciesFulfilled = choices === value; } - this.dependenciesFulfilled = choices === value; + } else if (Array.isArray(value) && hasOwnProperty(choices, 'has')) { + this.dependenciesFulfilled = value.includes(choices.has); } else { Object.keys(choices).some(key => { if (!hasOwnProperty(choices, key)) { diff --git a/src/editors/array/select2.js b/src/editors/array/select2.js index a28c771..97d53a4 100644 --- a/src/editors/array/select2.js +++ b/src/editors/array/select2.js @@ -37,7 +37,7 @@ export class ArraySelect2Editor extends MultiSelectEditor { /* New items are allowed if option "tags" is true and items type is "string" */ this.newEnumAllowed = options.tags = - !!options.tags && this.schema.items && this.schema.items.type === 'string'; + !!options.tags && this.schema && this.schema.items && this.schema.items.type === 'string'; if (options.relativeToParent) { options.dropdownParent = this.input.parentNode; @@ -47,8 +47,11 @@ export class ArraySelect2Editor extends MultiSelectEditor { this.selectChangeHandler = () => { const value = this.select2v4 ? this.select2_instance.val() : this.select2_instance.select2('val'); - this.updateValue(value); - this.onChange(true); + // 添加延迟,确保值已更新,避免被 multiselect 中同名事件覆盖为旧值 + setTimeout(() => { + this.updateValue(value); + this.onChange(true); + }, 100); }; /* Add event handler. */ diff --git a/src/themes/bootstrap3.js b/src/themes/bootstrap3.js index 8e6239d..868e30d 100644 --- a/src/themes/bootstrap3.js +++ b/src/themes/bootstrap3.js @@ -97,6 +97,7 @@ export class bootstrap3Theme extends AbstractTheme { icon.style.padding = '.25rem'; icon.style.marginLeft = '.5em'; icon.style.position = 'relative'; + icon.style.zIndex = 2001; icon.style.display = 'inline-block'; const tooltip = document.createElement('span'); @@ -107,8 +108,8 @@ export class bootstrap3Theme extends AbstractTheme { tooltip.style.color = '#FAFAFA'; tooltip.style.padding = '.5rem 1rem'; tooltip.style['border-radius'] = '.25rem'; - tooltip.style.width = '30em'; - tooltip.style.maxHeight = '25em'; + tooltip.style.width = '35em'; + tooltip.style.maxHeight = '65em'; tooltip.style.position = 'absolute'; tooltip.style.left = '2em'; tooltip.style.bottom = '-.5em'; diff --git a/src/validator.js b/src/validator.js index 25ff015..dfb2879 100644 --- a/src/validator.js +++ b/src/validator.js @@ -29,6 +29,9 @@ export class Validator { }, enum(schema, value, path) { const stringified = JSON.stringify(value); + if (schema.isCustomEnum) { + return []; + } const valid = schema.enum.some(e => stringified === JSON.stringify(e)); if (!valid) { return [ @@ -59,11 +62,11 @@ export class Validator { // 当 anyOf 是联动关系时,仅校验当前激活项,而非所有 let current = this.jsoneditor.getEditor(path); let realSchema = this.jsoneditor.expandSchema(schema); + let currentSchema = current && schema.anyOf[current.type]; let hasDependency = realSchema.anyOf.some(item => { return item.options && item.options.dependencies; }); if (hasDependency && current) { - let currentSchema = schema.anyOf[current.type]; let result = this._validateSchema(currentSchema, value, path); return result; } @@ -72,12 +75,14 @@ export class Validator { const valid = schema.anyOf.some(e => { let nopass = this._validateSchema(e, value, path); if (nopass.length) { - invalids.push(nopass); + if (!current || currentSchema.title === e.title) { + invalids.push(nopass); + } } return !nopass.length; }); if (!valid) { - return invalids[0]; + return invalids[invalids.length - 1]; } return []; },