diff --git a/CHANGELOG.md b/CHANGELOG.md index 2d77f42794396d36d48d48a8f0103d8a69647f4e..c2661befd3e1b4b6bae18372aadbd8296f0c2c2a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,11 @@ ## [Unreleased] +### Added + +- 自动填充编辑器支持界面行为组 +- 数据选择编辑器支持界面行为组 + ## [0.7.38-alpha.50] - 2025-01-15 ### Added diff --git a/src/editor/autocomplete/autocomplete-editor.controller.ts b/src/editor/autocomplete/autocomplete-editor.controller.ts index c832a660f5af2b73afc82e0c1a27eb7ba2eda975..8f1abf8d0f7ced85c83cca99e0ac697c124c8992 100644 --- a/src/editor/autocomplete/autocomplete-editor.controller.ts +++ b/src/editor/autocomplete/autocomplete-editor.controller.ts @@ -1,14 +1,20 @@ import { IHttpResponse, RuntimeModelError } from '@ibiz-template/core'; import { + ButtonContainerState, EditorController, IAcItemProvider, + IButtonContainerState, + UIActionButtonState, + UIActionUtil, getAcItemProvider, getDeACMode, } from '@ibiz-template/runtime'; import { IAppDEACMode, + IAppDEUIActionGroupDetail, IAutoComplete, IDEACModeDataItem, + IUIActionGroupDetail, } from '@ibiz/model-core'; import { mergeDeepLeft } from 'ramda'; @@ -58,6 +64,18 @@ export class AutoCompleteEditorController extends EditorController { super.onInit(); if (this.model.appDataEntityId) { @@ -98,6 +116,41 @@ export class AutoCompleteEditorController extends EditorController 0) { + this.actionDetails.forEach(detail => { + const actionid = detail.uiactionId; + if (actionid) { + const buttonState = new UIActionButtonState( + detail.id!, + this.context.srfappid!, + actionid, + ); + this.groupActionState.addState(detail.id!, buttonState); + } + }); + await this.groupActionState.init(); + // 转换多语言 + this.actionDetails.forEach(detail => { + if (detail.capLanguageRes && detail.capLanguageRes.lanResTag) { + detail.caption = ibiz.i18n.t( + detail.capLanguageRes.lanResTag, + detail.caption, + ); + } + if ( + detail.tooltipLanguageRes && + detail.tooltipLanguageRes.lanResTag + ) { + detail.tooltip = ibiz.i18n.t( + detail.tooltipLanguageRes.lanResTag, + detail.tooltip, + ); + } + }); + } + } } /** @@ -106,7 +159,7 @@ export class AutoCompleteEditorController extends EditorController>} - * @memberof PickerEditorController + * @memberof AutoCompleteEditorController */ public async getServiceData( query: string, @@ -178,4 +231,31 @@ export class AutoCompleteEditorController extends EditorController} + * @memberof AutoCompleteEditorController + */ + async onActionClick( + detail: IUIActionGroupDetail, + event: MouseEvent, + data: IData, + ): Promise { + event.stopPropagation(); + const actionId = detail.uiactionId; + await UIActionUtil.execAndResolved( + actionId!, + { + context: this.context, + params: this.params, + data: [data], + view: this.view, + event, + }, + detail.appId, + ); + } } diff --git a/src/editor/autocomplete/ibiz-autocomplete/ibiz-autocomplete.scss b/src/editor/autocomplete/ibiz-autocomplete/ibiz-autocomplete.scss index 9460a73ec1cb0f478b8f8020637733453a15a1b2..63193c29511ef874626d374b8a94e66926446307 100644 --- a/src/editor/autocomplete/ibiz-autocomplete/ibiz-autocomplete.scss +++ b/src/editor/autocomplete/ibiz-autocomplete/ibiz-autocomplete.scss @@ -9,6 +9,12 @@ } } + // 界面行为项 + @include e(action-item) { + color: getCssVar(color, link); + text-align: center; + } + @include b(autocomplete-input) { width: 100%; } diff --git a/src/editor/autocomplete/ibiz-autocomplete/ibiz-autocomplete.tsx b/src/editor/autocomplete/ibiz-autocomplete/ibiz-autocomplete.tsx index 18eef68dd708539c34409e7211ddd39372b4c298..32ad3c57818474f3d8f211b9689c11f2f4d2df70 100644 --- a/src/editor/autocomplete/ibiz-autocomplete/ibiz-autocomplete.tsx +++ b/src/editor/autocomplete/ibiz-autocomplete/ibiz-autocomplete.tsx @@ -15,6 +15,7 @@ import { import './ibiz-autocomplete.scss'; import { debounce } from 'lodash-es'; import { showTitle } from '@ibiz-template/core'; +import { IAppDEUIActionGroupDetail } from '@ibiz/model-core'; import { AutoCompleteEditorController } from '../autocomplete-editor.controller'; export const IBizAutoComplete = defineComponent({ @@ -89,7 +90,7 @@ export const IBizAutoComplete = defineComponent({ items.value = res.data as IData[]; isSearched.value = true; if (cb && cb instanceof Function) { - cb(items.value); + cb([...items.value, ...c.actionDetails]); } } } @@ -217,6 +218,27 @@ export const IBizAutoComplete = defineComponent({ } }; + const renderActionItem = (detail: IAppDEUIActionGroupDetail) => { + if (!c.groupActionState[detail.id!].visible) { + return; + } + return ( +
c.onActionClick(detail, event, props.data)} + title={showTitle(detail.tooltip)} + > + {detail.showIcon && detail.sysImage && ( + + )} + {detail.showCaption ? detail.caption : ''} +
+ ); + }; + return { ns, c, @@ -236,6 +258,7 @@ export const IBizAutoComplete = defineComponent({ isEditable, setEditable, showFormDefaultContent, + renderActionItem, }; }, render() { @@ -270,6 +293,9 @@ export const IBizAutoComplete = defineComponent({ > {{ default: ({ item }: { item: IData }) => { + if (item.detailType === 'DEUIACTION') { + return this.renderActionItem(item); + } if (this.c.acItemProvider) { const component = resolveComponent( this.c.acItemProvider.component, diff --git a/src/editor/data-picker/ibiz-picker-dropdown/ibiz-picker-dropdown.tsx b/src/editor/data-picker/ibiz-picker-dropdown/ibiz-picker-dropdown.tsx index ede3d5731c919f3e3577d626b0895eda9e0ee6a7..28906b20dba9e632bce154c6ff0587b92ac8a137 100644 --- a/src/editor/data-picker/ibiz-picker-dropdown/ibiz-picker-dropdown.tsx +++ b/src/editor/data-picker/ibiz-picker-dropdown/ibiz-picker-dropdown.tsx @@ -320,7 +320,7 @@ export const IBizPickerDropDown = defineComponent({ >
c.onActionClick(detail, event)} + onClick={event => c.onActionClick(detail, event, props.data)} > {detail.showIcon && detail.sysImage && ( diff --git a/src/editor/data-picker/ibiz-picker/ibiz-picker.scss b/src/editor/data-picker/ibiz-picker/ibiz-picker.scss index efee72515c33be9ac5d5c00d751a4499ef3a57a2..eb676ce9b1872c1af5af9119caf8f86b0c7e4479 100644 --- a/src/editor/data-picker/ibiz-picker/ibiz-picker.scss +++ b/src/editor/data-picker/ibiz-picker/ibiz-picker.scss @@ -94,6 +94,12 @@ $picker: ( white-space: nowrap; } } + + // 界面行为项 + @include e(action-item) { + color: getCssVar(color, link); + text-align: center; + } } // 表单下的编辑器默认显示,悬浮上去显示编辑器 diff --git a/src/editor/data-picker/ibiz-picker/ibiz-picker.tsx b/src/editor/data-picker/ibiz-picker/ibiz-picker.tsx index 53f5ae0e2c5e536912fdd71004779036d7326cb2..b110fc157db539f98400c6efff1afca991f7a4f0 100644 --- a/src/editor/data-picker/ibiz-picker/ibiz-picker.tsx +++ b/src/editor/data-picker/ibiz-picker/ibiz-picker.tsx @@ -17,6 +17,7 @@ import { import { isEmpty, isNil } from 'ramda'; import './ibiz-picker.scss'; import { showTitle } from '@ibiz-template/core'; +import { IAppDEUIActionGroupDetail } from '@ibiz/model-core'; import { PickerEditorController } from '../picker-editor.controller'; export const IBizPicker = defineComponent({ @@ -161,7 +162,7 @@ export const IBizPicker = defineComponent({ items.value = res.data as IData[]; isLoaded.value = true; if (cb && cb instanceof Function) { - cb(items.value); + cb([...items.value, ...c.actionDetails]); } } } @@ -253,6 +254,27 @@ export const IBizPicker = defineComponent({ ); }); + const renderActionItem = (detail: IAppDEUIActionGroupDetail) => { + if (!c.groupActionState[detail.id!].visible) { + return; + } + return ( +
c.onActionClick(detail, event, props.data)} + title={showTitle(detail.tooltip)} + > + {detail.showIcon && detail.sysImage && ( + + )} + {detail.showCaption ? detail.caption : ''} +
+ ); + }; + return { ns, c, @@ -272,6 +294,7 @@ export const IBizPicker = defineComponent({ isEditable, setEditable, showFormDefaultContent, + renderActionItem, }; }, render() { @@ -397,6 +420,9 @@ export const IBizPicker = defineComponent({ if (this.$slots.append) { return this.$slots.append({}); } + if (item.detailType === 'DEUIACTION') { + return this.renderActionItem(item); + } return itemContent(item); }, suffix: () => { diff --git a/src/editor/data-picker/picker-editor.controller.ts b/src/editor/data-picker/picker-editor.controller.ts index 6dbd3054e96d61df24e771949dfb61122e7263d2..8d833ab9f25c7b45fcb7b8aa973e9f23c78cba77 100644 --- a/src/editor/data-picker/picker-editor.controller.ts +++ b/src/editor/data-picker/picker-editor.controller.ts @@ -442,6 +442,7 @@ export class PickerEditorController extends EditorController { async onActionClick( detail: IUIActionGroupDetail, event: MouseEvent, + data: IData, ): Promise { event.stopPropagation(); const actionId = detail.uiactionId; @@ -450,7 +451,7 @@ export class PickerEditorController extends EditorController { { context: this.context, params: this.params, - data: [], + data: [data], view: this.view, event, },