diff --git a/src/editor/cascader/ibiz-cascader/ibiz-cascader.tsx b/src/editor/cascader/ibiz-cascader/ibiz-cascader.tsx index cb1c2870f45ae67ff1a45b793f22363f283b0c70..55bc0e44d5fcd4833a5d33220877ee6b2c69950c 100644 --- a/src/editor/cascader/ibiz-cascader/ibiz-cascader.tsx +++ b/src/editor/cascader/ibiz-cascader/ibiz-cascader.tsx @@ -15,10 +15,11 @@ import { usePopstateListener } from '../../../util'; * 移动端级联选择器 * @primary * @description 使用van-cascader组件,用于选择具有级联关系的数据。支持编辑器类型包含:`移动端级联选择器` - * @editorparams {name:editorStyle,title:编辑器样式,parameterType:string,defaultvalue:default,description:值为default时,加载下级数据时,从节点的value属性获取值,否则从节点的data属性里的value上获取值} - * @editorparams {name:separator,title:分割符,parameterType:string,defaultvalue:'/',description:用于拼接选择的值} + * @editorparams {name:editorstyle,parameterType:string,defaultvalue:'default',description:值为default时,加载下级数据时,从节点的value属性获取值,否则从节点的data属性里的value上获取值} + * @editorparams {name:separator,parameterType:string,defaultvalue:'/',description:分隔符,用于拼接选择的值} + * @editorparams {name:readonly,parameterType:boolean,defaultvalue:false,description:设置编辑器是否为只读态} * @ignoreprops autoFocus | overflowMode - * @ignoreemits infoTextChange | enter + * @ignoreemits blur | focus | infoTextChange | enter */ export const IBizCascader = defineComponent({ name: 'IBizCascader', @@ -54,6 +55,9 @@ export const IBizCascader = defineComponent({ if (editorModel.editorParams.editorStyle) { editorStyle = editorModel.editorParams.editorStyle; } + if (editorModel.editorParams.editorstyle) { + editorStyle = editorModel.editorParams.editorstyle; + } if (editorModel.editorParams.separator) { separator = editorModel.editorParams.separator; } diff --git a/src/editor/check-box/ibiz-checkbox/ibiz-checkbox.tsx b/src/editor/check-box/ibiz-checkbox/ibiz-checkbox.tsx index 54ed9408466cf83ff89c6ec86327f218faa64211..dad0341fd23ff5624a3b98bf698a08d3b6e24244 100644 --- a/src/editor/check-box/ibiz-checkbox/ibiz-checkbox.tsx +++ b/src/editor/check-box/ibiz-checkbox/ibiz-checkbox.tsx @@ -12,10 +12,11 @@ import './ibiz-checkbox.scss'; * 选项框 * @primary * @description 使用van-checkbox组件,用于选中或取消选项场景。支持编辑器类型包含:`选项框` - * @editorparams {name:selectValue,title:选中时抛出的值,parameterType:number,defaultvalue:1,description:选中时抛出的值} - * @editorparams {name:nullValue,title:取消选中时抛出的值,parameterType:number,defaultvalue:0,description:取消选中时抛出的值} + * @editorparams {name:selectvalue,parameterType:number,defaultvalue:1,description:选中时抛出的值} + * @editorparams {name:nullvalue,parameterType:number,defaultvalue:0,description:取消选中时抛出的值} + * @editorparams {name:readonly,parameterType:boolean,defaultvalue:false,description:设置编辑器是否为只读态} * @ignoreprops autoFocus | overflowMode - * @ignoreemits infoTextChange | enter + * @ignoreemits blur | focus | infoTextChange | enter */ export const IBizCheckbox = defineComponent({ name: 'IBizCheckbox', @@ -35,9 +36,15 @@ export const IBizCheckbox = defineComponent({ if (editorModel.editorParams?.selectValue) { selectValue = editorModel.editorParams.selectValue; } + if (editorModel.editorParams?.selectvalue) { + selectValue = editorModel.editorParams.selectvalue; + } if (editorModel.editorParams?.nullValue) { nullValue = editorModel.editorParams.nullValue; } + if (editorModel.editorParams?.nullvalue) { + nullValue = editorModel.editorParams.nullvalue; + } // 当前值 const currentVal = computed({ diff --git a/src/editor/color-picker/ibiz-color-picker/ibiz-color-picker.tsx b/src/editor/color-picker/ibiz-color-picker/ibiz-color-picker.tsx index fcd38013bb9f42d5160cf2a3714964eff02453c6..03dd2a65157f2fd440ea5f7945580ef4d0987724 100644 --- a/src/editor/color-picker/ibiz-color-picker/ibiz-color-picker.tsx +++ b/src/editor/color-picker/ibiz-color-picker/ibiz-color-picker.tsx @@ -11,6 +11,7 @@ import { ColorPickerEditorController } from '../color-picker-editor.controller'; * 移动端颜色选择器 * @primary * @description 使用van-field组件,轻量化的颜色选择器,支持色板选取、RGB 格式输入及实时预览,满足高效精准的色彩配置需求。支持编辑器类型包含:`移动端颜色选择器` + * @editorparams {name:readonly,parameterType:boolean,defaultvalue:false,description:设置编辑器是否为只读态} * @ignoreprops autoFocus | overflowMode * @ignoreemits infoTextChange | enter */ diff --git a/src/editor/data-picker/ibiz-mpicker/ibiz-mpicker.tsx b/src/editor/data-picker/ibiz-mpicker/ibiz-mpicker.tsx index 112645059779df9b004524ba995fa7cc3892058a..5a6e86174d9281e78a7b8800a7ed390c327a450e 100644 --- a/src/editor/data-picker/ibiz-mpicker/ibiz-mpicker.tsx +++ b/src/editor/data-picker/ibiz-mpicker/ibiz-mpicker.tsx @@ -14,8 +14,13 @@ import { IBizCommonRightIcon } from '../../common/right-icon/right-icon'; * 移动端多数据选择 * @primary * @description 使用van-field组件和van-popup组件,用于在弹出列表中选择多项数据的场景。支持编辑器类型包含:`移动端多数据选择` + * @editorparams {"name":"valuetype","parameterType":"string","description":"编辑器的值类型"} + * @editorparams {"name":"objectidfield","parameterType":"string","description":"值类型为OBJECTS时的对象标识属性"} + * @editorparams {"name":"objectnamefield","parameterType":"string","description":"值类型为OBJECTS时的对象名称属性"} + * @editorparams {"name":"objectvaluefield","parameterType":"string","description":"值类型为OBJECTS时的对象值属性"} + * @editorparams {"name":"readonly","parameterType":"boolean","defaultvalue":false,"description":"设置编辑器是否为只读态"} * @ignoreprops autoFocus | overflowMode - * @ignoreemits infoTextChange | enter + * @ignoreemits blur | focus | infoTextChange | enter */ export const IBizMPicker = defineComponent({ name: 'IBizMPicker', diff --git a/src/editor/data-picker/ibiz-picker-select-view/ibiz-picker-select-view.tsx b/src/editor/data-picker/ibiz-picker-select-view/ibiz-picker-select-view.tsx index 239512dc70f37c1eecd951abcc9e0fb281b754bc..14509f87c8e9b5c4437688cdddcd44140b663af4 100644 --- a/src/editor/data-picker/ibiz-picker-select-view/ibiz-picker-select-view.tsx +++ b/src/editor/data-picker/ibiz-picker-select-view/ibiz-picker-select-view.tsx @@ -13,9 +13,10 @@ import { PickerEditorController } from '../picker-editor.controller'; * 移动端数据选择(下拉视图) * @primary * @description 使用van-field组件和van-button组件,点击按钮后弹出一个模态来呈现配置的选择视图。支持编辑器类型包含:`移动端数据选择(下拉视图)` - * @editorparams {name:multiple,title:多选,description:是否多选,parameterType:boolean,default:true} + * @editorparams {name:multiple,parameterType:boolean,defaultvalue:false,description:是否多选} + * @editorparams {name:readonly,parameterType:boolean,defaultvalue:false,description:设置编辑器是否为只读态} * @ignoreprops autoFocus | overflowMode - * @ignoreemits infoTextChange | enter + * @ignoreemits blur | focus | infoTextChange | enter */ export const IBizPickerSelectView = defineComponent({ name: 'IBizPickerSelectView', diff --git a/src/editor/data-picker/ibiz-picker/ibiz-picker.tsx b/src/editor/data-picker/ibiz-picker/ibiz-picker.tsx index aa823e1cb285f233182ff2879ba9de8067ee62ff..4ef00b8f55e8d15a2519e27563244cbec3e435fe 100644 --- a/src/editor/data-picker/ibiz-picker/ibiz-picker.tsx +++ b/src/editor/data-picker/ibiz-picker/ibiz-picker.tsx @@ -13,8 +13,9 @@ import { usePopstateListener } from '../../../util'; * 移动端数据选择 * @primary * @description 使用van-field组件和van-popup组件,用于在弹出列表中选择单项数据的场景。支持编辑器类型包含:`移动端数据选择` + * @editorparams {name:readonly,parameterType:boolean,defaultvalue:false,description:设置编辑器是否为只读态} * @ignoreprops autoFocus | overflowMode - * @ignoreemits infoTextChange | enter + * @ignoreemits blur | focus | infoTextChange | enter */ export const IBizPicker = defineComponent({ name: 'IBizPicker', diff --git a/src/editor/date-picker/ibiz-date-picker/ibiz-date-picker.tsx b/src/editor/date-picker/ibiz-date-picker/ibiz-date-picker.tsx index 6d7cea7e5aaf57786ec8ef7ccf954e4cf0cb7f9f..a830d03b27f54a3b1ab2db049a680abc349d68cd 100644 --- a/src/editor/date-picker/ibiz-date-picker/ibiz-date-picker.tsx +++ b/src/editor/date-picker/ibiz-date-picker/ibiz-date-picker.tsx @@ -16,6 +16,7 @@ import { usePopstateListener } from '../../../util'; * 移动端时间选择器 * @primary * @description 基于rolldate的轻量时间选择器,默认时间格式为年月日-时分秒,可通过配置值格式化串来格式化日期。支持编辑器类型包含: `移动端时间选择器`、`移动端时间选择器(YYYY-MM-DD HH)`、`移动端时间选择器(YYYY-MM-DD HH:mm)`、`移动端时间选择器(HH:mm:ss)`、`移动端时间选择器(HH:mm)`、`移动端时间选择器(YYYY-MM-DD)`、`移动端时间选择器(YYYY-MM-DD HH:mm:ss)` + * @editorparams {name:readonly,parameterType:boolean,defaultvalue:false,description:设置编辑器是否为只读态} * @ignoreprops autoFocus | overflowMode * @ignoreemits infoTextChange | enter */ diff --git a/src/editor/date-range/date-range-editor.controller.ts b/src/editor/date-range/date-range-editor.controller.ts index c26d082bd6febde4c0fae4b8cc2cd179791131a2..babcf8b285b22f1d951329985607d993a68dca9d 100644 --- a/src/editor/date-range/date-range-editor.controller.ts +++ b/src/editor/date-range/date-range-editor.controller.ts @@ -32,6 +32,9 @@ export class DateRangeEditorController extends EditorController { if (this.editorParams?.SHOWMODE === 'CALENDAR') { this.showmode = 'CALENDAR'; } + if (this.editorParams?.showmode === 'CALENDAR') { + this.showmode = 'CALENDAR'; + } } /** diff --git a/src/editor/date-range/ibiz-date-range-picker/ibiz-date-range-picker.tsx b/src/editor/date-range/ibiz-date-range-picker/ibiz-date-range-picker.tsx index 33ce5894955641024e7f096592bb4fd6cfbd6b8e..439c4db65c510b1a344e6acc52a58907921f68c2 100644 --- a/src/editor/date-range/ibiz-date-range-picker/ibiz-date-range-picker.tsx +++ b/src/editor/date-range/ibiz-date-range-picker/ibiz-date-range-picker.tsx @@ -16,11 +16,12 @@ import { IBizDateRangeCalendar } from '../../../common/date-range-picker/date-ra * 移动端时间范围选择器 * @primary * @description 基于rolldate的轻量时间范围选择器,类型为CALENDAR时,使用van-calendar组件,默认支持年月日的时间范围选择。支持编辑器类型包含: `移动端时间范围选择器`、`移动端时间范围选择器(YYYY-MM-DD)` - * @editorparams {name:SHOWMODE,parameterType:'DEFAULT' | 'CALENDAR',defaultvalue:'DEFALUIT',description:显示模式,值为CALENDAR时,使用日历组件来选择日期范围,值为DEFAULT时,绘制两个时间选择器来绘制日期范围} - * @editorparams {name:rangeSeparator,parameterType:string,defaultvalue:'~',description:选择范围时的分隔符} - * @editorparams {name:valueSeparator,parameterType:string,defaultvalue:'',description:值分割符} - * @editorparams {name:startPlaceHolder,parameterType:string,defaultvalue:'',description:选择范围开始占位提示} - * @editorparams {name:endPlaceHolder,parameterType:string,defaultvalue:'',description:选择范围结束占位提示} + * @editorparams {name:showmode,parameterType:'DEFAULT' | 'CALENDAR',defaultvalue:'DEFAULT',description:显示模式,值为CALENDAR时,使用日历组件来选择日期范围,值为DEFAULT时,绘制两个时间选择器来选择日期范围} + * @editorparams {name:rangeseparator,parameterType:string,defaultvalue:'~',description:选择范围时的分隔符} + * @editorparams {"name":"valueseparator","parameterType":"string","defaultvalue":"','","description":"值分隔符,用于分割转换字符串为开始时间和结束时间"} + * @editorparams {name:startplaceholder,parameterType:string,defaultvalue:'',description:选择范围开始占位提示} + * @editorparams {name:endplaceholder,parameterType:string,defaultvalue:'',description:选择范围结束占位提示} + * @editorparams {name:readonly,parameterType:boolean,defaultvalue:false,description:设置编辑器是否为只读态} * @ignoreprops autoFocus | overflowMode * @ignoreemits infoTextChange | enter */ @@ -86,15 +87,27 @@ export const IBizDateRangePicker = defineComponent({ if (editorModel.editorParams.valueSeparator) { valueSeparator = editorModel.editorParams.valueSeparator; } + if (editorModel.editorParams.valueseparator) { + valueSeparator = editorModel.editorParams.valueseparator; + } if (editorModel.editorParams.startPlaceHolder) { startPlaceHolder = editorModel.editorParams.startPlaceHolder; } + if (editorModel.editorParams.startplaceholder) { + startPlaceHolder = editorModel.editorParams.startplaceholder; + } if (editorModel.editorParams.endPlaceHolder) { endPlaceHolder = editorModel.editorParams.endPlaceHolder; } + if (editorModel.editorParams.endplaceholder) { + endPlaceHolder = editorModel.editorParams.endplaceholder; + } if (editorModel.editorParams.rangeSeparator) { rangeSeparator = editorModel.editorParams.rangeSeparator; } + if (editorModel.editorParams.rangeseparator) { + rangeSeparator = editorModel.editorParams.rangeseparator; + } } // 格式 diff --git a/src/editor/dropdown-list/ibiz-dropdown-list/ibiz-dropdown-list.tsx b/src/editor/dropdown-list/ibiz-dropdown-list/ibiz-dropdown-list.tsx index d5b9144e808ca2233909d6b17f13738c1a3377f0..5f6d8f93f7a7b72792a1ca2467b05e2655b187af 100644 --- a/src/editor/dropdown-list/ibiz-dropdown-list/ibiz-dropdown-list.tsx +++ b/src/editor/dropdown-list/ibiz-dropdown-list/ibiz-dropdown-list.tsx @@ -14,8 +14,9 @@ import { usePopstateListener } from '../../../util'; * 移动端下拉列表(多选) * @primary * @description 使用van-field组件和van-popup组件,用于在弹出的选择列表中选择多条数据的场景。支持编辑器类型包含:`移动端下拉列表(多选)` + * @editorparams {name:readonly,parameterType:boolean,defaultvalue:false,description:设置编辑器是否为只读态} * @ignoreprops autoFocus | overflowMode - * @ignoreemits infoTextChange | enter + * @ignoreemits blur | focus | infoTextChange | enter */ export const IBizDropdownList = defineComponent({ name: 'IBizDropdownList', diff --git a/src/editor/dropdown-list/ibiz-dropdown/ibiz-dropdown.tsx b/src/editor/dropdown-list/ibiz-dropdown/ibiz-dropdown.tsx index 636d17e61614d3fcad953c313cd42a4ac6907821..9670dba96db3c3d8cf3ae029a8ab25fd67f24651 100644 --- a/src/editor/dropdown-list/ibiz-dropdown/ibiz-dropdown.tsx +++ b/src/editor/dropdown-list/ibiz-dropdown/ibiz-dropdown.tsx @@ -13,8 +13,9 @@ import { usePopstateListener } from '../../../util'; * 移动端下拉列表(单选) * @primary * @description 使用van-field组件和van-popup组件,用于在弹出的选择列表中选择单条数据的场景。支持编辑器类型包含:`移动端下拉列表(单选)` + * @editorparams {name:readonly,parameterType:boolean,defaultvalue:false,description:设置编辑器是否为只读态} * @ignoreprops autoFocus | overflowMode - * @ignoreemits infoTextChange | enter + * @ignoreemits blur | focus | infoTextChange | enter */ export const IBizDropdown = defineComponent({ name: 'IBizDropdown', diff --git a/src/editor/dropdown-list/ibiz-emoji-picker/ibiz-emoji-picker.tsx b/src/editor/dropdown-list/ibiz-emoji-picker/ibiz-emoji-picker.tsx index 5cde2cb6115ceabcee119112d5c310fcf9ced6f6..90b809623d507449a5afca0bd5558f0ec256bc0f 100644 --- a/src/editor/dropdown-list/ibiz-emoji-picker/ibiz-emoji-picker.tsx +++ b/src/editor/dropdown-list/ibiz-emoji-picker/ibiz-emoji-picker.tsx @@ -14,8 +14,9 @@ import { usePopstateListener } from '../../../util'; * 表情选择器(扩展) * @primary * @description 使用van-popup组件,通过弹出底部抽屉来绘制表情列表,进而支持对表情数据的搜索与选择。基于`移动端下拉列表(单选)`编辑器扩展,编辑器样式代码名称为:EMOJI_PICKER + * @editorparams {name:readonly,parameterType:boolean,defaultvalue:false,description:设置编辑器是否为只读态} * @ignoreprops autoFocus | overflowMode - * @ignoreemits infoTextChange | enter + * @ignoreemits blur | focus | infoTextChange | enter */ export const IBizEmojiPicker = defineComponent({ name: 'IBizEmojiPicker', diff --git a/src/editor/html/html-editor.controller.ts b/src/editor/html/html-editor.controller.ts index 18fe66bca4bdc292f5d98f8b9488b316ff361ae9..afa2f8b162fc008353e94f95eef7e2a4c4cf0c0f 100644 --- a/src/editor/html/html-editor.controller.ts +++ b/src/editor/html/html-editor.controller.ts @@ -88,6 +88,14 @@ export class HtmlEditorController extends EditorController { MODULES, DEFAULTHEIGHT, SHOWCOLLAPSE, + uploadparams, + exportparams, + showtoolbar, + valuemode, + imagemode, + modules, + defaultheight, + showcollapse, } = this.editorParams; if (uploadParams) { @@ -101,6 +109,17 @@ export class HtmlEditorController extends EditorController { ); } } + if (uploadparams) { + try { + this.uploadParams = JSON.parse(uploadparams); + } catch (error) { + ibiz.log.error( + `编辑器[${ibiz.log.error( + error, + )}]编辑器参数 uploadParams 非 json 格式`, + ); + } + } if (exportParams) { try { this.exportParams = JSON.parse(exportParams); @@ -112,27 +131,59 @@ export class HtmlEditorController extends EditorController { ); } } + if (exportparams) { + try { + this.exportParams = JSON.parse(exportparams); + } catch (error) { + ibiz.log.error( + `编辑器[${ibiz.log.error( + error, + )}]编辑器参数 exportParams 非 json 格式`, + ); + } + } if (SHOWTOOLBAR) { this.showToolbar = this.toBoolean(SHOWTOOLBAR); } + if (showtoolbar) { + this.showToolbar = this.toBoolean(showtoolbar); + } if (VALUEMODE) { this.valueMode = VALUEMODE.toLowerCase(); } + if (valuemode) { + this.valueMode = valuemode.toLowerCase(); + } if (IMAGEMODE) { this.imageMode = IMAGEMODE.toLowerCase(); } + if (imagemode) { + this.imageMode = imagemode.toLowerCase(); + } if (MODULES) { this.modules = ScriptFactory.execScriptFn( { controller: this }, MODULES, ) as IData; } + if (modules) { + this.modules = ScriptFactory.execScriptFn( + { controller: this }, + modules, + ) as IData; + } if (DEFAULTHEIGHT) { this.defaultHeight = Number(DEFAULTHEIGHT); } + if (defaultheight) { + this.defaultHeight = Number(defaultheight); + } if (SHOWCOLLAPSE) { this.showCollapse = this.toBoolean(SHOWCOLLAPSE); } + if (showcollapse) { + this.showCollapse = this.toBoolean(showcollapse); + } } } } diff --git a/src/editor/html/quill-editor/quill-editor.tsx b/src/editor/html/quill-editor/quill-editor.tsx index 4d637c4aceeeac6ece1d21e990b99f143994fb9c..a4562de1874cf66dcedb407030c6f88513f94908 100644 --- a/src/editor/html/quill-editor/quill-editor.tsx +++ b/src/editor/html/quill-editor/quill-editor.tsx @@ -18,16 +18,18 @@ import './quill-editor.scss'; * 移动端HTML编辑框 * @primary * @description 基于Quill深度定制可扩展的富文本编辑器,集成文件/图片上传、实时预览及样式配置功能,提供完整的富媒体编辑解决方案。支持编辑器类型包含:`移动端HTML编辑框` - * @editorparams {name:uploadParams,parameterType:IData,defaultvalue:{},description:上传参数} - * @editorparams {name:exportParams,parameterType:IData,defaultvalue:{},description:下载参数} - * @editorparams {name:SHOWTOOLBAR,parameterType:boolean,defaultvalue:true,description:显示工具栏} - * @editorparams {name:VALUEMODE,parameterType:'text' | 'html',defaultvalue:html,description:值模式,暂时只支持html模式} - * @editorparams {name:IMAGEMODE,parameterType:'base64' | 'file',defaultvalue:'file',description:图片模式} - * @editorparams {name:MODULES,parameterType:IData,description:quill配置} - * @editorparams {name:DEFAULTHEIGHT,parameterType:number,defaultvalue:200,description:收缩时的高度} - * @editorparams {name:SHOWCOLLAPSE,parameterType:boolean,defaultvalue:true,description:是否显示伸缩按钮} + * @editorparams {name:uploadparams,parameterType:string,description:上传参数,图片或文件上传时,用于计算上传路径} + * @editorparams {name:exportparams,parameterType:string,description:下载参数,图片或文件下载时,用于计算下载路径} + * @editorparams {name:osscat,parameterType:string,description:用于计算上传和下载路径的OSS参数} + * @editorparams {name:showtoolbar,parameterType:boolean,defaultvalue:true,description:显示工具栏} + * @editorparams {name:valuemode,parameterType:'text' | 'html',defaultvalue:html,description:值模式,暂时只支持html模式} + * @editorparams {name:imagemode,parameterType:'base64' | 'file',defaultvalue:'file',description:图片模式} + * @editorparams {name:modules,parameterType:string,description:quill配置} + * @editorparams {name:defaultheight,parameterType:number,defaultvalue:200,description:收缩时的高度} + * @editorparams {name:showcollapse,parameterType:boolean,defaultvalue:true,description:是否显示伸缩按钮} + * @editorparams {name:readonly,parameterType:boolean,defaultvalue:false,description:设置编辑器是否为只读态} * @ignoreprops autoFocus | overflowMode - * @ignoreemits infoTextChange | enter + * @ignoreemits blur | focus | infoTextChange | enter */ // eslint-disable-next-line @typescript-eslint/no-explicit-any const IBizQuill: any = defineComponent({ @@ -143,11 +145,18 @@ const IBizQuill: any = defineComponent({ () => props.data, newVal => { if (newVal) { + const editorParams = { ...c.editorParams }; + if (editorParams.uploadparams) { + editorParams.uploadParams = JSON.parse(editorParams.uploadparams); + } + if (editorParams.exportparams) { + editorParams.exportParams = JSON.parse(editorParams.exportparams); + } const urls = ibiz.util.file.calcFileUpDownUrl( c.context, c.params, newVal, - c.editorParams, + editorParams, ); uploadUrl.value = urls.uploadUrl; downloadUrl.value = urls.downloadUrl; diff --git a/src/editor/index.ts b/src/editor/index.ts index 7c5a1d5c7c76235efca23569d1cedc9262cc57ec..9e482f9832e23dac05e88d0fba56b968f6736077 100644 --- a/src/editor/index.ts +++ b/src/editor/index.ts @@ -47,6 +47,7 @@ import { MarkDownEditorProvider } from './markdown'; import { HtmlEditorProvider } from './html'; import { IBizDropdownList } from './dropdown-list/ibiz-dropdown-list/ibiz-dropdown-list'; import { IBizQrcode, QrcodeEditorProvider } from './qrcode'; +import { IBizCheckbox, CheckBoxEditorProvider } from './check-box'; export const IBizEditor = { install: (v: App): void => { @@ -81,6 +82,7 @@ export const IBizEditor = { v.component(IBizEditorCarousel.name, IBizEditorCarousel); v.component(IBizQrcode.name, IBizQrcode); v.component(IBizImageCropping.name, IBizImageCropping); + v.component(IBizCheckbox.name, IBizCheckbox); v.component( 'IBizMarkDown', @@ -127,6 +129,10 @@ export const IBizEditor = { 'MOBTEXT_SIGNATURE', () => new TextBoxEditorProvider('SIGNATURE'), ); + registerEditorProvider( + 'TEXTBOX_SIGNATURE', + () => new TextBoxEditorProvider('SIGNATURE'), + ); // 下拉列表框 registerEditorProvider( @@ -143,6 +149,10 @@ export const IBizEditor = { 'MOBDROPDOWNLIST_EMOJI_PICKER', () => new DropDownListEditorProvider('EMOJI_PICKER'), ); + registerEditorProvider( + 'DROPDOWNLIST_EMOJI_PICKER', + () => new DropDownListEditorProvider('EMOJI_PICKER'), + ); // 级联下拉 registerEditorProvider( @@ -325,6 +335,9 @@ export const IBizEditor = { () => new DateRangeEditorProvider(), ); + // 选项框 + registerEditorProvider('CHECKBOX', () => new CheckBoxEditorProvider()); + // 面板预制类型 // 动态图片 registerEditorProvider( diff --git a/src/editor/markdown/ibiz-markdown-editor/ibiz-markdown-editor.tsx b/src/editor/markdown/ibiz-markdown-editor/ibiz-markdown-editor.tsx index 02559a0b98cc0f4992d019c4dbe64ba0a4f96e7e..2b926f27e82242b30183c6c9def7fcff1b38fa1d 100644 --- a/src/editor/markdown/ibiz-markdown-editor/ibiz-markdown-editor.tsx +++ b/src/editor/markdown/ibiz-markdown-editor/ibiz-markdown-editor.tsx @@ -23,10 +23,12 @@ import './ibiz-markdown-editor.scss'; * 移动端Markdown编辑框 * @primary * @description 基于cherry-markdown深度定制可扩展的Markdown编辑器,用于Markdown文档编辑。支持编辑器类型包含:`移动端Markdown编辑框` - * @editorparams {name:uploadparams,parameterType:IData,defaultvalue:{},description:上传参数} - * @editorparams {name:exportparams,parameterType:IData,defaultvalue:{},description:下载参数} + * @editorparams {name:uploadparams,parameterType:string,description:上传参数,图片或文件上传时,用于计算上传路径} + * @editorparams {name:exportparams,parameterType:string,description:下载参数,图片或文件下载时,用于计算下载路径} + * @editorparams {name:osscat,parameterType:string,description:用于计算上传和下载路径的OSS参数} + * @editorparams {name:readonly,parameterType:boolean,defaultvalue:false,description:设置编辑器是否为只读态} * @ignoreprops autoFocus | overflowMode - * @ignoreemits infoTextChange | enter + * @ignoreemits blur | focus | infoTextChange | enter */ // eslint-disable-next-line @typescript-eslint/no-explicit-any const IBizMarkDown: any = defineComponent({ @@ -77,11 +79,18 @@ const IBizMarkDown: any = defineComponent({ () => props.data, newVal => { if (newVal) { + const editorParams = { ...c.editorParams }; + if (editorParams.uploadparams) { + editorParams.uploadParams = JSON.parse(editorParams.uploadparams); + } + if (editorParams.exportparams) { + editorParams.exportParams = JSON.parse(editorParams.exportparams); + } const urls = ibiz.util.file.calcFileUpDownUrl( c.context, c.params, newVal, - c.editorParams, + editorParams, ); uploadUrl.value = urls.uploadUrl; downloadUrl.value = urls.downloadUrl; diff --git a/src/editor/radio-button-list/ibiz-radio/ibiz-radio.tsx b/src/editor/radio-button-list/ibiz-radio/ibiz-radio.tsx index 56c543e00d397cf3891653674dfd77c87a497d09..74500bd6633ffb70ed1fa91daf906e9ecca17cdb 100644 --- a/src/editor/radio-button-list/ibiz-radio/ibiz-radio.tsx +++ b/src/editor/radio-button-list/ibiz-radio/ibiz-radio.tsx @@ -12,8 +12,9 @@ import { RadioButtonListEditorController } from '../radio-button-list.controller * 移动端单选项列表 * @primary * @description 使用van-radio-group组件和van-radio组件,用于在一组备选项中进行单选的场景。支持编辑器类型包含:`移动端单选项列表` + * @editorparams {name:readonly,parameterType:boolean,defaultvalue:false,description:设置编辑器是否为只读态} * @ignoreprops autoFocus | overflowMode - * @ignoreemits infoTextChange | enter + * @ignoreemits blur | focus | infoTextChange | enter */ export const IBizRadio = defineComponent({ name: 'IBizRadio', diff --git a/src/editor/slider/ibiz-slider/ibiz-slider.tsx b/src/editor/slider/ibiz-slider/ibiz-slider.tsx index 254467250fb97c33acfcfbb7b403738336075dee..eeac4893a017b5dc8838238f435345adea2ec0e2 100644 --- a/src/editor/slider/ibiz-slider/ibiz-slider.tsx +++ b/src/editor/slider/ibiz-slider/ibiz-slider.tsx @@ -13,16 +13,17 @@ import './ibiz-slider.scss'; * 移动端滑动输入条 * @primary * @description 使用van-slider组件,用于在给定的范围内选择一个值的场景。支持编辑器类型包含:`移动端滑动输入条` - * @editorparams {name:stepValue,parameterType:number,defaultvalue:1,description:步长,van-slider组件的step属性} - * @editorparams {name:maxValue,parameterType:number,defaultvalue:100,description:最大值,van-slider组件的max属性} - * @editorparams {name:minValue,parameterType:number,defaultvalue:0,description:最小值,van-slider组件的min属性} + * @editorparams {name:stepvalue,parameterType:number,defaultvalue:1,description:步长,van-slider组件的step属性} + * @editorparams {name:maxvalue,parameterType:number,defaultvalue:100,description:最大值,van-slider组件的max属性} + * @editorparams {name:minvalue,parameterType:number,defaultvalue:0,description:最小值,van-slider组件的min属性} * @editorparams {name:range,parameterType:boolean,defaultvalue:false,description:是否开启双滑块模式,van-slider组件的range属性} - * @editorparams {name:type,parameterType:string,defaultvalue:line,description:进度条类型,可选值为line(线形)或circle(环形)} - * @editorparams {name:textItem,parameterType:string,description:环形时显示的文本属性} - * @editorparams {name:showText,parameterType:boolean,defaultvalue:false,description:环形时是否显示文本} - * @editorparams {name:format,parameterType:string,defaultvalue:0%,description:环形时显示文本的格式化规则} + * @editorparams {name:type,parameterType:'line' | 'circle',defaultvalue:'line',description:进度条类型,可选值为line(线形)或circle(环形)} + * @editorparams {name:textitem,parameterType:string,description:环形时显示的文本属性} + * @editorparams {name:showtext,parameterType:boolean,defaultvalue:false,description:环形时是否显示文本} + * @editorparams {name:format,parameterType:string,defaultvalue:'0%',description:环形时显示文本的格式化规则} + * @editorparams {name:readonly,parameterType:boolean,defaultvalue:false,description:设置编辑器是否为只读态} * @ignoreprops autoFocus | overflowMode - * @ignoreemits infoTextChange | enter + * @ignoreemits blur | focus | infoTextChange | enter */ export const IBizSlider = defineComponent({ name: 'IBizSlider', @@ -57,12 +58,21 @@ export const IBizSlider = defineComponent({ if (editorModel.editorParams.stepValue) { step = toNumber(editorModel.editorParams.stepValue); } + if (editorModel.editorParams.stepvalue) { + step = toNumber(editorModel.editorParams.stepvalue); + } if (editorModel.editorParams.maxValue) { max = toNumber(editorModel.editorParams.maxValue); } + if (editorModel.editorParams.maxvalue) { + max = toNumber(editorModel.editorParams.maxvalue); + } if (editorModel.editorParams.minValue) { min = toNumber(editorModel.editorParams.minValue); } + if (editorModel.editorParams.minvalue) { + min = toNumber(editorModel.editorParams.minvalue); + } if (editorModel.editorParams.range) { range = c.toBoolean(editorModel.editorParams.range); } @@ -72,9 +82,15 @@ export const IBizSlider = defineComponent({ if (editorModel.editorParams.textItem) { textItem = editorModel.editorParams.textItem; } + if (editorModel.editorParams.textitem) { + textItem = editorModel.editorParams.textitem; + } if (editorModel.editorParams.showText) { showText = c.toBoolean(editorModel.editorParams.showText); } + if (editorModel.editorParams.showtext) { + showText = c.toBoolean(editorModel.editorParams.showtext); + } if (editorModel.editorParams.format) { format = editorModel.editorParams.format; } @@ -190,6 +206,24 @@ export const IBizSlider = defineComponent({ button: () => { return
{this.currentVal}
; }, + 'left-button': () => { + return ( +
+ {Array.isArray(this.currentVal) + ? this.currentVal[0] + : this.currentVal} +
+ ); + }, + 'right-button': () => { + return ( +
+ {Array.isArray(this.currentVal) + ? this.currentVal[1] + : this.currentVal} +
+ ); + }, }} ); diff --git a/src/editor/text-box/signature/signature.tsx b/src/editor/text-box/signature/signature.tsx index 6387ebfde8602d6b6c566710ebd37d11e320b471..99c762ea4f42085f64afb20cdb683c61ecb905bb 100644 --- a/src/editor/text-box/signature/signature.tsx +++ b/src/editor/text-box/signature/signature.tsx @@ -25,8 +25,8 @@ import './signature.scss'; * @editorparams {"name":"backgroundcolor","parameterType":"string","defaultvalue":"'rgba(0,0,0,0)'","description":"画布背景色。签名画布的背景颜色,导出图片时会包含此背景,可接受CSS颜色格式"} * @editorparams {name:throttle,parameterType:number,defaultvalue:16,description:事件节流时间(单位:毫秒)。限制绘制事件的触发频率,避免高频操作导致性能问题} * @editorparams {"name":"readonly","parameterType":"boolean","defaultvalue":false,"description":"设置编辑器是否为只读态"} - * @ignoreprops overflowMode - * @ignoreemits infoTextChange + * @ignoreprops autoFocus | overflowMode + * @ignoreemits blur | focus | infoTextChange | enter */ export const IBizSignature = defineComponent({ name: 'IBizSignature', diff --git a/src/editor/upload/ibiz-file-upload/ibiz-file-upload.tsx b/src/editor/upload/ibiz-file-upload/ibiz-file-upload.tsx index e1548f0c50a58b5fba383c857c7966a21afa7c5f..822631b4a4cbdac0c4db796db9c47d9e210d0a19 100644 --- a/src/editor/upload/ibiz-file-upload/ibiz-file-upload.tsx +++ b/src/editor/upload/ibiz-file-upload/ibiz-file-upload.tsx @@ -14,9 +14,13 @@ import { UploadEditorController } from '../upload-editor.controller'; * @description 使用van-uploader组件,用于对文件进行上传,可限制上传文件类型与数量,并对已上传的文件进行回显。支持编辑器类型包含:`移动端文件控件(单项)`、`移动端文件控件(多项)` * @editorparams {name:multiple,parameterType:boolean,description:是否支持多选文件,van-uploader组件的multiple属性} * @editorparams {name:accept,parameterType:string,description:允许上传的文件类型,van-uploader组件的accept属性} - * @editorparams {name:uploadParams,parameterType:IData,description:上传参数} - * @editorparams {name:exportParams,parameterType:IData,description:下载参数} + * @editorparams {name:uploadparams,parameterType:string,description:上传参数,图片或文件上传时,用于计算上传路径} + * @editorparams {name:exportparams,parameterType:string,description:下载参数,图片或文件下载时,用于计算下载路径 } + * @editorparams {name:osscat,parameterType:string,description:用于计算上传和下载路径的OSS参数} * @editorparams {name:showloading,parameterType:boolean,description:是否显示加载动画} + * @editorparams {"name":"appentitytag","parameterType":"string","description":"在应用启用下载授权时,用于指定当前文件所属实体。该参数值会作为验证下载权限的依据。配置格式为(应用代码名称.实体代码名称),示例:mob.master"} + * @editorparams {"name":"datafieldtag","parameterType":"string","description":"在应用启用下载授权时,用于指定当前文件所关联的数据属性。完成配置后,将自动从容器数据(涵盖表单数据、表格行数据、面板数据)、上下文环境以及视图参数中获取该属性的实际值,将其作为验证下载权限的依据"} + * @editorparams {name:readonly,parameterType:boolean,defaultvalue:false,description:设置编辑器是否为只读态} * @ignoreprops autoFocus | overflowMode * @ignoreemits blur | focus | enter | infoTextChange * diff --git a/src/editor/upload/ibiz-image-select/ibiz-image-select.tsx b/src/editor/upload/ibiz-image-select/ibiz-image-select.tsx index 6370361993437f10cbdb55e9b2b0ef85bc5d889b..69eea0d0f033412bfa6a1c1054a3798495906792 100644 --- a/src/editor/upload/ibiz-image-select/ibiz-image-select.tsx +++ b/src/editor/upload/ibiz-image-select/ibiz-image-select.tsx @@ -13,10 +13,12 @@ import { useVanUpload } from '../use/use-van-upload'; /** * 移动端图片控件(单项、直接内容) * @primary - * @description 使用van-uploader组件,用于选择图片并可以进行预览。支持编辑器类型包含:`移动端图片控件(单项、直接内容)` - * @editorparams {name:STOPPROPAGATION,parameterType:boolean,description:是否阻止默认点击} - * @editorparams {name:uploadParams,parameterType:IData,description:上传参数} - * @editorparams {name:exportParams,parameterType:IData,description:下载参数} + * @description 使用van-uploader组件,用于预览图片。支持编辑器类型包含:`移动端图片控件(单项、直接内容)` + * @editorparams {name:stoppropagation,parameterType:boolean,description:是否阻止默认点击} + * @editorparams {name:exportparams,parameterType:string,description:下载参数,图片下载时,用于计算下载路径} + * @editorparams {name:osscat,parameterType:string,description:用于计算下载路径的OSS参数} + * @editorparams {"name":"appentitytag","parameterType":"string","description":"在应用启用下载授权时,用于指定当前文件所属实体。该参数值会作为验证下载权限的依据。配置格式为(应用代码名称.实体代码名称),示例:mob.master"} + * @editorparams {"name":"datafieldtag","parameterType":"string","description":"在应用启用下载授权时,用于指定当前文件所关联的数据属性。完成配置后,将自动从容器数据(涵盖表单数据、表格行数据、面板数据)、上下文环境以及视图参数中获取该属性的实际值,将其作为验证下载权限的依据"} * @ignoreprops autoFocus | overflowMode * @ignoreemits blur | focus | enter | infoTextChange */ @@ -30,7 +32,10 @@ export const IBizImageSelect = defineComponent({ const c = props.controller; // 是否阻止默认点击 - const result = c.editorParams?.STOPPROPAGATION !== 'false'; + let result = c.editorParams?.STOPPROPAGATION !== 'false'; + if (c.editorParams?.stoppropagation) { + result = c.editorParams.stoppropagation !== 'false'; + } // svg图片内容 const svg = ref(''); diff --git a/src/editor/upload/ibiz-image-upload/ibiz-image-upload.tsx b/src/editor/upload/ibiz-image-upload/ibiz-image-upload.tsx index 69937481f88f139162e11af64ab13746d4fe4bc2..4c2c05d80512b4552e52daafeb151353cccac8e8 100644 --- a/src/editor/upload/ibiz-image-upload/ibiz-image-upload.tsx +++ b/src/editor/upload/ibiz-image-upload/ibiz-image-upload.tsx @@ -15,10 +15,17 @@ import { UploadEditorController } from '../upload-editor.controller'; * @primary * @description 使用van-uploader组件,用于对指定的图片文件类型进行上传。支持编辑器类型包含:`移动端图片控件(单项)`、`移动端图片控件(多项)` * @editorparams {name:multiple,parameterType:boolean,description:是否支持多选文件,van-uploader组件的multiple属性} - * @editorparams {name:accept,parameterType:string,description:允许上传的文件类型,van-uploader组件的multiple属性} - * @editorparams {name:STOPPROPAGATION,parameterType:boolean,description:是否阻止默认点击} - * @editorparams {name:uploadParams,parameterType:IData,description:上传参数} - * @editorparams {name:exportParams,parameterType:IData,description:下载参数} + * @editorparams {name:accept,parameterType:string,description:允许上传的文件类型,van-uploader组件的accept属性} + * @editorparams {name:stoppropagation,parameterType:boolean,description:是否阻止默认点击} + * @editorparams {name:uploadparams,parameterType:string,description:上传参数,图片上传时,用于计算上传路径} + * @editorparams {name:exportparams,parameterType:string,description:下载参数,图片下载时,用于计算下载路径} + * @editorparams {name:osscat,parameterType:string,description:用于计算上传和下载路径的OSS参数} + * @editorparams {name:imgcompresslimit,parameterType:number,defaultvalue:1024,description:图片压缩范围(超过该范围进行压缩,单位kb)} + * @editorparams {name:imgcompressquality,parameterType:number,defaultvalue:0,description:图片压缩质量(0-1,为0时不压缩,默认为0)} + * @editorparams {name:imgcompressmaxwidth,parameterType:number,defaultvalue:1280,description:压缩图片最大宽度,默认为1280px} + * @editorparams {"name":"appentitytag","parameterType":"string","description":"在应用启用下载授权时,用于指定当前文件所属实体。该参数值会作为验证下载权限的依据。配置格式为(应用代码名称.实体代码名称),示例:mob.master"} + * @editorparams {"name":"datafieldtag","parameterType":"string","description":"在应用启用下载授权时,用于指定当前文件所关联的数据属性。完成配置后,将自动从容器数据(涵盖表单数据、表格行数据、面板数据)、上下文环境以及视图参数中获取该属性的实际值,将其作为验证下载权限的依据"} + * @editorparams {name:readonly,parameterType:boolean,defaultvalue:false,description:设置编辑器是否为只读态} * @ignoreprops autoFocus | overflowMode * @ignoreemits blur | focus | enter | infoTextChange */ @@ -32,7 +39,10 @@ export const IBizImageUpload = defineComponent({ const c = props.controller; // 是否阻止默认点击 - const result = c.editorParams?.STOPPROPAGATION !== 'false'; + let result = c.editorParams?.STOPPROPAGATION !== 'false'; + if (c.editorParams?.stoppropagation) { + result = c.editorParams.stoppropagation !== 'false'; + } const { uploadUrl, diff --git a/src/editor/upload/upload-editor.controller.ts b/src/editor/upload/upload-editor.controller.ts index 99dca45e8dc1b03f404e6e29d7615cd543bfb140..6b19627f6e3066fcabaefaf67212126b03920191 100644 --- a/src/editor/upload/upload-editor.controller.ts +++ b/src/editor/upload/upload-editor.controller.ts @@ -155,8 +155,15 @@ export class UploadEditorController extends EditorController { this.multiple = false; } if (this.editorParams) { - const { isDrag, multiple, accept, uploadParams, exportParams } = - this.editorParams; + const { + isDrag, + multiple, + accept, + uploadParams, + exportParams, + uploadparams, + exportparams, + } = this.editorParams; if (isDrag) { this.isDrag = Boolean(isDrag); } @@ -176,6 +183,16 @@ export class UploadEditorController extends EditorController { ); } } + if (uploadparams) { + try { + this.uploadParams = JSON.parse(uploadparams); + } catch (error) { + throw new RuntimeModelError( + uploadparams, + ibiz.i18n.t('editor.upload.uploadJsonFormatErr'), + ); + } + } if (exportParams) { try { this.exportParams = JSON.parse(exportParams); @@ -186,6 +203,16 @@ export class UploadEditorController extends EditorController { ); } } + if (exportparams) { + try { + this.exportParams = JSON.parse(exportparams); + } catch (error) { + throw new RuntimeModelError( + exportparams, + ibiz.i18n.t('editor.upload.exportJsonFormatErr'), + ); + } + } } } diff --git a/src/editor/upload/use/use-van-upload.ts b/src/editor/upload/use/use-van-upload.ts index 5e2217d745e569c96fca7f92e0a1ec5adc8237de..d1bd8d56ec92d98a52e10f3e199d0e71fb41caa4 100644 --- a/src/editor/upload/use/use-van-upload.ts +++ b/src/editor/upload/use/use-van-upload.ts @@ -78,11 +78,18 @@ export function useVanUpload( () => props.data, newVal => { if (newVal) { + const editorParams = { ...c.editorParams }; + if (editorParams.uploadparams) { + editorParams.uploadParams = JSON.parse(editorParams.uploadparams); + } + if (editorParams.exportparams) { + editorParams.exportParams = JSON.parse(editorParams.exportparams); + } const urls = ibiz.util.file.calcFileUpDownUrl( c.context, c.params, newVal, - c.editorParams, + editorParams, ); uploadUrl.value = urls.uploadUrl; downloadUrl.value = urls.downloadUrl;