diff --git a/CHANGELOG.md b/CHANGELOG.md index 0bcfc265230b7447beee0cc1244d4757b4d8ff78..7a298589a1c50119a11286f6f5f25e6220c9dde4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,11 @@ ## [Unreleased] +### Added + +- 表单容器类(表单分组、表单分页、表单成员分页、表单关系界面分页),适配状态属性loading(是否显示loading状态) +- 面板容器类(分页面板、面板容器(视图内容)、面板容器(视图头部)、分割容器),新增状态属性loading(是否显示loading状态),并新增控制器能力startLoading(开始加载中)和endLoading(结束加载中) + ## [0.7.41-alpha.26] - 2025-09-12 ### Added diff --git a/src/control/form/form-detail/form-group-panel/form-group-panel.tsx b/src/control/form/form-detail/form-group-panel/form-group-panel.tsx index 78355bdf9190f806b5cae085ae24194757d0c985..db652ea919ffbd1dd3fc636f8c46d17cfeef3869 100644 --- a/src/control/form/form-detail/form-group-panel/form-group-panel.tsx +++ b/src/control/form/form-detail/form-group-panel/form-group-panel.tsx @@ -185,6 +185,7 @@ export const FormGroupPanel = defineComponent({
this.controller.onClick(event)} > {header} diff --git a/src/control/form/form-detail/form-page/form-page-item/form-page.item.tsx b/src/control/form/form-detail/form-page/form-page-item/form-page.item.tsx index dc78b2d72b85f2f8cbdf712a24269cb7674babcd..066002524b14c194dd5e168f73824e7f98ee9b4f 100644 --- a/src/control/form/form-detail/form-page/form-page-item/form-page.item.tsx +++ b/src/control/form/form-detail/form-page/form-page-item/form-page.item.tsx @@ -35,6 +35,7 @@ export const IBizFormPageItem = defineComponent({ ...this.controller.containerClass, ]} layout={this.modelData.layout} + v-loading={this.controller.state.loading} > {defaultSlots.map(slot => { const props = slot.props as IData; diff --git a/src/control/form/form-detail/form-tab-page/form-tab-page.tsx b/src/control/form/form-detail/form-tab-page/form-tab-page.tsx index 64bbc636ad2da77bf16c6e60c14c1077860a8f48..6e8b994cceaf9b634950a33e6b17732bae975841 100644 --- a/src/control/form/form-detail/form-tab-page/form-tab-page.tsx +++ b/src/control/form/form-detail/form-tab-page/form-tab-page.tsx @@ -34,6 +34,7 @@ export const FormTabPage = defineComponent({ ...this.controller.containerClass, ]} layout={this.modelData.layout} + v-loading={this.controller.state.loading} onClick={(event: MouseEvent) => this.controller.onClick(event)} > {defaultSlots.map(slot => { diff --git a/src/control/form/form-detail/form-tab-panel/form-tab-panel.tsx b/src/control/form/form-detail/form-tab-panel/form-tab-panel.tsx index 8fa60330cd0fbb3052936584b0a7724ad5d7d51c..518f0de63e343d5e92f3eddc6e2f0fdd47280d48 100644 --- a/src/control/form/form-detail/form-tab-panel/form-tab-panel.tsx +++ b/src/control/form/form-detail/form-tab-panel/form-tab-panel.tsx @@ -75,6 +75,7 @@ export const FormTabPanel = defineComponent({ }; }, render() { + const isStyle2 = this.modelData.detailStyle === 'STYLE2'; const defaultSlots: VNode[] = this.$slots.default?.() || []; const renderItemText = (c: FormTabPageController) => { return ( @@ -95,6 +96,7 @@ export const FormTabPanel = defineComponent({ ...this.controller.containerClass, ]} model-value={this.controller.state.activeTab} + v-loading={this.controller.state.loading && !isStyle2} onTabClick={this.onTabClick} > {defaultSlots.map(slot => { @@ -151,7 +153,10 @@ export const FormTabPanel = defineComponent({ ); if (this.modelData.detailStyle === 'STYLE2') { return ( -
+
{tabContent} { +export class PanelTabPanelController extends PanelContainerController { declare state: PanelTabPanelState; /** diff --git a/src/panel-component/panel-tab-panel/panel-tab-panel.state.ts b/src/panel-component/panel-tab-panel/panel-tab-panel.state.ts index 851950025bec597cf65ee96e51d90c2fd197791e..480bb61d4f7c8bed2bb660714488fa880448becd 100644 --- a/src/panel-component/panel-tab-panel/panel-tab-panel.state.ts +++ b/src/panel-component/panel-tab-panel/panel-tab-panel.state.ts @@ -1,4 +1,4 @@ -import { PanelItemState } from '@ibiz-template/runtime'; +import { PanelContainerState } from '@ibiz-template/runtime'; /** * 分页面板状态 @@ -7,9 +7,9 @@ import { PanelItemState } from '@ibiz-template/runtime'; * @date 2024-05-12 14:05:01 * @export * @class PanelTabPanelState - * @extends {PanelItemState} + * @extends {PanelContainerState} */ -export class PanelTabPanelState extends PanelItemState { +export class PanelTabPanelState extends PanelContainerState { /** * @description 当前激活分页 * @exposedoc diff --git a/src/panel-component/panel-view-content/panel-view-content.provider.ts b/src/panel-component/panel-view-content/panel-view-content.provider.ts index 097a45dd3c3453ba11f423e0ccdc4e50c6a0a057..e0ab5e0ec9ffa7447e5c221b783f7d22f445bcab 100644 --- a/src/panel-component/panel-view-content/panel-view-content.provider.ts +++ b/src/panel-component/panel-view-content/panel-view-content.provider.ts @@ -1,5 +1,6 @@ import { IPanelItemProvider, + PanelContainerController, PanelController, PanelItemController, } from '@ibiz-template/runtime'; @@ -21,8 +22,8 @@ export class PanelViewContentProvider implements IPanelItemProvider { panelItem: IPanelContainer, panel: PanelController, parent: PanelItemController | undefined, - ): Promise { - const c = new PanelItemController(panelItem, panel, parent); + ): Promise { + const c = new PanelContainerController(panelItem, panel, parent); await c.init(); return c; } diff --git a/src/panel-component/panel-view-content/panel-view-content.tsx b/src/panel-component/panel-view-content/panel-view-content.tsx index 947c051f3748b23cddda0c7b571f1498500e7426..6402c0c5364cb3ae67a86ad00d5cdbb46c4de9cc 100644 --- a/src/panel-component/panel-view-content/panel-view-content.tsx +++ b/src/panel-component/panel-view-content/panel-view-content.tsx @@ -1,7 +1,7 @@ import { useNamespace } from '@ibiz-template/vue3-util'; import { IPanelContainer } from '@ibiz/model-core'; import { computed, defineComponent, PropType, ref, VNode } from 'vue'; -import { PanelItemController } from '@ibiz-template/runtime'; +import { PanelContainerController } from '@ibiz-template/runtime'; import './panel-view-content.scss'; /** @@ -25,7 +25,7 @@ export const PanelViewContent = defineComponent({ * @description 容器控制器 */ controller: { - type: PanelItemController, + type: PanelContainerController, required: true, }, }, @@ -84,6 +84,10 @@ export const PanelViewContent = defineComponent({ ); - return
{content}
; + return ( +
+ {content} +
+ ); }, }); diff --git a/src/panel-component/panel-view-header/panel-view-header.provider.ts b/src/panel-component/panel-view-header/panel-view-header.provider.ts index 7c45374be553782194e31bf176040d447b9c33c8..993f2e351b70b27df384e992b3a7a8ccec5acd81 100644 --- a/src/panel-component/panel-view-header/panel-view-header.provider.ts +++ b/src/panel-component/panel-view-header/panel-view-header.provider.ts @@ -1,5 +1,6 @@ import { IPanelItemProvider, + PanelContainerController, PanelController, PanelItemController, } from '@ibiz-template/runtime'; @@ -21,8 +22,8 @@ export class PanelViewHeaderProvider implements IPanelItemProvider { panelItem: IPanelContainer, panel: PanelController, parent: PanelItemController | undefined, - ): Promise { - const c = new PanelItemController(panelItem, panel, parent); + ): Promise { + const c = new PanelContainerController(panelItem, panel, parent); await c.init(); return c; } diff --git a/src/panel-component/panel-view-header/panel-view-header.tsx b/src/panel-component/panel-view-header/panel-view-header.tsx index e47ef818d6cd66e8a809519dc3d9b44a668e30e1..fd10811c89446f1af84ce56bba03ec889a7f8a4f 100644 --- a/src/panel-component/panel-view-header/panel-view-header.tsx +++ b/src/panel-component/panel-view-header/panel-view-header.tsx @@ -1,7 +1,7 @@ import { useNamespace } from '@ibiz-template/vue3-util'; import { IPanelContainer } from '@ibiz/model-core'; import { computed, defineComponent, PropType, ref, VNode } from 'vue'; -import { PanelItemController } from '@ibiz-template/runtime'; +import { PanelContainerController } from '@ibiz-template/runtime'; import './panel-view-header.scss'; /** @@ -23,7 +23,7 @@ export const PanelViewHeader = defineComponent({ * @description 容器控制器 */ controller: { - type: PanelItemController, + type: PanelContainerController, required: true, }, }, @@ -79,6 +79,10 @@ export const PanelViewHeader = defineComponent({ ); - return
{content}
; + return ( +
+ {content} +
+ ); }, }); diff --git a/src/panel-component/split-container/split-container.controller.ts b/src/panel-component/split-container/split-container.controller.ts index 375c0c465b749354f12b1cce7c3b8184bb802fb8..a41ed963aa58265ac7132b825ac11acec4904268 100644 --- a/src/panel-component/split-container/split-container.controller.ts +++ b/src/panel-component/split-container/split-container.controller.ts @@ -1,5 +1,5 @@ import { IPanelContainer } from '@ibiz/model-core'; -import { PanelItemController } from '@ibiz-template/runtime'; +import { PanelContainerController } from '@ibiz-template/runtime'; import { SplitContainerState } from './split-container.state'; /** @@ -9,9 +9,9 @@ import { SplitContainerState } from './split-container.state'; * @date 2023-08-22 17:08:37 * @export * @class SplitContainerController - * @extends {PanelItemController} + * @extends {PanelContainerController} */ -export class SplitContainerController extends PanelItemController { +export class SplitContainerController extends PanelContainerController { /** * @description 分割面板容器状态 * @exposedoc diff --git a/src/panel-component/split-container/split-container.state.ts b/src/panel-component/split-container/split-container.state.ts index b37161834b7b31c2f5b2e8e96c12e2124c6776f4..7c1b14c4ee5d74f9751fe35f9e87a0d970f5c5c2 100644 --- a/src/panel-component/split-container/split-container.state.ts +++ b/src/panel-component/split-container/split-container.state.ts @@ -1,4 +1,4 @@ -import { PanelItemState } from '@ibiz-template/runtime'; +import { PanelContainerState } from '@ibiz-template/runtime'; /** * 分割面板容器状态 @@ -7,9 +7,9 @@ import { PanelItemState } from '@ibiz-template/runtime'; * @date 2023-10-08 17:10:22 * @export * @class SplitContainerState - * @extends {PanelItemState} + * @extends {PanelContainerState} */ -export class SplitContainerState extends PanelItemState { +export class SplitContainerState extends PanelContainerState { /** * @description 分割值 * @exposedoc diff --git a/src/panel-component/split-container/split-container.tsx b/src/panel-component/split-container/split-container.tsx index e357214598e08d77397995b9847e3c9c2c5bc85e..3b7babfda29daa91eda16ca74add994bfbb85c10 100644 --- a/src/panel-component/split-container/split-container.tsx +++ b/src/panel-component/split-container/split-container.tsx @@ -50,7 +50,7 @@ export const SplitContainer = defineComponent({ render() { const defaultSlots: VNode[] = this.$slots.default?.() || []; return ( -
+