diff --git a/docs/en/guide/command-execute.md b/docs/en/guide/command-execute.md index 3d68b16..2c5c6a8 100644 --- a/docs/en/guide/command-execute.md +++ b/docs/en/guide/command-execute.md @@ -833,3 +833,13 @@ Usage: ```javascript instance.command.executeSetControlValue(payload: ISetControlValueOption) ``` + +## executeSetControlExtension + +Feature: Set control extension value + +Usage: + +```javascript +instance.command.executeSetControlExtension(payload: ISetControlExtensionOption) +``` diff --git a/docs/guide/command-execute.md b/docs/guide/command-execute.md index 7c70077..251a4f1 100644 --- a/docs/guide/command-execute.md +++ b/docs/guide/command-execute.md @@ -833,3 +833,13 @@ instance.command.executeLocationGroup(groupId: string) ```javascript instance.command.executeSetControlValue(payload: ISetControlValueOption) ``` + +## executeSetControlExtension + +功能:设置控件扩展值 + +用法: + +```javascript +instance.command.executeSetControlExtension(payload: ISetControlExtensionOption) +``` \ No newline at end of file diff --git a/src/editor/core/command/Command.ts b/src/editor/core/command/Command.ts index c1f673e..d0f0f56 100644 --- a/src/editor/core/command/Command.ts +++ b/src/editor/core/command/Command.ts @@ -83,6 +83,7 @@ export class Command { public executeDeleteGroup: CommandAdapt['deleteGroup'] public executeLocationGroup: CommandAdapt['locationGroup'] public executeSetControlValue: CommandAdapt['setControlValue'] + public executeSetControlExtension: CommandAdapt['setControlExtension'] public getCatalog: CommandAdapt['getCatalog'] public getImage: CommandAdapt['getImage'] public getOptions: CommandAdapt['getOptions'] @@ -209,6 +210,7 @@ export class Command { this.getContainer = adapt.getContainer.bind(adapt) // 控件 this.executeSetControlValue = adapt.setControlValue.bind(adapt) + this.executeSetControlExtension = adapt.setControlExtension.bind(adapt) this.getControlValue = adapt.getControlValue.bind(adapt) } } diff --git a/src/editor/core/command/CommandAdapt.ts b/src/editor/core/command/CommandAdapt.ts index a05cac3..ddbf967 100644 --- a/src/editor/core/command/CommandAdapt.ts +++ b/src/editor/core/command/CommandAdapt.ts @@ -21,6 +21,7 @@ import { DeepRequired } from '../../interface/Common' import { IGetControlValueOption, IGetControlValueResult, + ISetControlExtensionOption, ISetControlValueOption } from '../../interface/Control' import { @@ -2083,6 +2084,12 @@ export class CommandAdapt { this.draw.getControl().setValueByConceptId(payload) } + public setControlExtension(payload: ISetControlExtensionOption) { + const isReadonly = this.draw.isReadonly() + if (isReadonly) return + this.draw.getControl().setExtensionByConceptId(payload) + } + public getContainer(): HTMLDivElement { return this.draw.getContainer() } diff --git a/src/editor/core/draw/control/Control.ts b/src/editor/core/draw/control/Control.ts index 7faef9b..d50e00b 100644 --- a/src/editor/core/draw/control/Control.ts +++ b/src/editor/core/draw/control/Control.ts @@ -8,6 +8,7 @@ import { IControlOption, IGetControlValueOption, IGetControlValueResult, + ISetControlExtensionOption, ISetControlValueOption } from '../../../interface/Control' import { IEditorData } from '../../../interface/Editor' @@ -547,4 +548,32 @@ export class Control { }) } } + + public setExtensionByConceptId(payload: ISetControlExtensionOption) { + const isReadonly = this.draw.isReadonly() + if (isReadonly) return + const { conceptId, extension } = payload + const data = [ + this.draw.getHeaderElementList(), + this.draw.getOriginalMainElementList(), + this.draw.getFooterElementList() + ] + for (const elementList of data) { + let i = 0 + while (i < elementList.length) { + const element = elementList[i] + i++ + if (element?.control?.conceptId !== conceptId) continue + element.control.extension = extension + // 修改后控件结束索引 + let newEndIndex = i + while (newEndIndex < elementList.length) { + const nextElement = elementList[newEndIndex] + if (nextElement.controlId !== element.controlId) break + newEndIndex++ + } + i = newEndIndex + } + } + } } diff --git a/src/editor/interface/Control.ts b/src/editor/interface/Control.ts index 75fb80c..d592d08 100644 --- a/src/editor/interface/Control.ts +++ b/src/editor/interface/Control.ts @@ -86,3 +86,8 @@ export interface ISetControlValueOption { conceptId: string value: string } + +export interface ISetControlExtensionOption { + conceptId: string + extension: unknown +}