From 5d2aefae3465bfe036ba8101800c53d72167eab9 Mon Sep 17 00:00:00 2001 From: zhangkang <57750083+zhangkang1314@users.noreply.github.com> Date: Fri, 25 Aug 2023 18:42:52 +0800 Subject: [PATCH 1/3] =?UTF-8?q?feat:=20=E9=87=8D=E5=A4=8D=E5=99=A8?= =?UTF-8?q?=E9=80=BB=E8=BE=91=E9=87=8D=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...orm-mdctrl-repeater-form-one.controller.ts | 142 +-------------- ...rm-mdctrl-repeater-form-item.controller.ts | 45 ++++- .../form-mdctrl-repeater-form.controller.ts | 170 ++---------------- 3 files changed, 54 insertions(+), 303 deletions(-) diff --git a/packages/runtime/src/controller/control/form/form-detail/form-mdctrl/form-mdctrl-repeater/form-mdctrl-repeater-form-one/form-mdctrl-repeater-form-one.controller.ts b/packages/runtime/src/controller/control/form/form-detail/form-mdctrl/form-mdctrl-repeater/form-mdctrl-repeater-form-one/form-mdctrl-repeater-form-one.controller.ts index e9a90684fe..f00b4a1baa 100644 --- a/packages/runtime/src/controller/control/form/form-detail/form-mdctrl/form-mdctrl-repeater/form-mdctrl-repeater-form-one/form-mdctrl-repeater-form-one.controller.ts +++ b/packages/runtime/src/controller/control/form/form-detail/form-mdctrl/form-mdctrl-repeater/form-mdctrl-repeater-form-one/form-mdctrl-repeater-form-one.controller.ts @@ -1,15 +1,4 @@ -// import { useCtx } from '@ibiz-template/vue3-util'; -import { IDEFormDetail } from '@ibiz/model-core'; -// import { reactive } from 'vue'; -import { FormController } from '../../../../form'; -import { FormGroupPanelController } from '../../../form-group-panel'; -import { FormMDCtrlContentTypeController } from '../../form-mdctrl-content-type.controller'; -import { FormMDCtrlItemController } from '../form-mdctrl-repeater-form/form-mdctrl-repeater-form-item.controller'; -import { FormItemController } from '../../../form-item'; -import { IFormDetailController } from '../../../../../../../interface'; -import { findChildFormDetails } from '../../../../../../../model'; -import { getFormDetailProvider } from '../../../../../../../register'; -import { CTX } from '../../../../../../ctx'; +import { FormMDCtrlRepeaterFormController } from '../form-mdctrl-repeater-form/form-mdctrl-repeater-form.controller'; /** * 表单多数据部件表格类型控制器 @@ -21,7 +10,7 @@ import { CTX } from '../../../../../../ctx'; * @extends {EditFormController} * @implements {IFormController} */ -export class FormMDCtrlRepeaterFormOneController extends FormMDCtrlContentTypeController { +export class FormMDCtrlRepeaterFormOneController extends FormMDCtrlRepeaterFormController { /** * 数据 * @@ -35,112 +24,6 @@ export class FormMDCtrlRepeaterFormOneController extends FormMDCtrlContentTypeCo return this.parent.state.contentCtrlData as IData[]; } - /** - * 表单项控制器的集合(二维数组) - * - * @author zk - * @date 2023-07-25 05:07:56 - * @type {Array>} - * @memberof FormMDCtrlController - */ - formDetail: Array<{ - name: string; - detailType: string; - c: IFormDetailController; - }> = []; - - private formCtx!: CTX; - - state: { isInit: boolean } = { isInit: false }; - - /** - * 初始化表单成员控制器 - * - * @author lxm - * @date 2022-08-24 21:08:48 - * @protected - */ - protected async initFormMDCtrlItemControllers( - details: IDEFormDetail[], - form: FormController = this.parent.form, - data: IData = {}, - parent: FormGroupPanelController | undefined = undefined, - ): Promise { - const formData = data; - // const formData = reactive(data); - - const formController = new FormMDCtrlItemController( - this.model, - this.parent.form.context, - this.parent.form.params, - this.formCtx, - formData, - ); - await formController.onInit(); - formController.evt.on('onFormDataChange', arg => { - if (arg.data.length > 0) { - this.onDataItemChange(arg.data[0]); - } - }); - - formController.state.isLoaded = true; - await Promise.all( - details.map(async detail => { - // 生成表单成员控制器 - const detailProvider = await getFormDetailProvider(detail); - if (!detailProvider) { - return; - } - form.providers[detail.id!] = detailProvider; - const detailController = await detailProvider.createController( - detail, - formController, - parent, - ); - if (!this.formDetail) { - this.formDetail = []; - } - this.formDetail.push({ - name: detail.id!, - detailType: detail.detailType!, - c: detailController, - }); - // 有子成员的生成子控制器 - const childDetails = findChildFormDetails(detail); - if (childDetails.length) { - await this.initFormMDCtrlItemControllers( - childDetails, - formController, - data, - detailController as FormGroupPanelController, - ); - } - }), - ); - return data; - } - - /** - * 初始化formCtx - * - * @author zk - * @date 2023-07-29 05:07:21 - * @memberof FormMDCtrlRepeaterFormController - */ - useFormMdCtrlCtx(): void { - // this.formCtx = useCtx(); - } - - async initData(): Promise { - super.initData(); - await this.initFormMDCtrlItemControllers( - this.model.deformDetails!, - this.parent.form, - this.data, - ); - this.state.isInit = true; - } - /** * 内部表单项数据发生改变,同步contentCtrlData并设置外部表单值 * @@ -154,25 +37,4 @@ export class FormMDCtrlRepeaterFormOneController extends FormMDCtrlContentTypeCo this.parent.state.contentCtrlData = data; this.parent.setFormDataValue(); } - - /** - * 表单值校验 - * - * @author zzq - * @date 2023-08-23 19:07:11 - * @memberof FormMDCtrlController - */ - async validate(): Promise { - const values: Promise[] = []; - this.formDetail.forEach(detail => { - if (detail.detailType === 'FORMITEM') { - const c = detail.c as FormItemController; - values.push(c.validate()); - } - }); - - const results = await Promise.all(values); - // 找不到value为false即全部是true - return results.findIndex(value => !value) === -1; - } } diff --git a/packages/runtime/src/controller/control/form/form-detail/form-mdctrl/form-mdctrl-repeater/form-mdctrl-repeater-form/form-mdctrl-repeater-form-item.controller.ts b/packages/runtime/src/controller/control/form/form-detail/form-mdctrl/form-mdctrl-repeater/form-mdctrl-repeater-form/form-mdctrl-repeater-form-item.controller.ts index 582eb903c7..28139f4ba2 100644 --- a/packages/runtime/src/controller/control/form/form-detail/form-mdctrl/form-mdctrl-repeater/form-mdctrl-repeater-form/form-mdctrl-repeater-form-item.controller.ts +++ b/packages/runtime/src/controller/control/form/form-detail/form-mdctrl/form-mdctrl-repeater/form-mdctrl-repeater-form/form-mdctrl-repeater-form-item.controller.ts @@ -1,7 +1,12 @@ -import { IControl, IDEFormMDCtrl } from '@ibiz/model-core'; +import { IControl, IDEFormDetail, IDEFormMDCtrl } from '@ibiz/model-core'; import { IFormController } from '../../../../../../../interface'; +import { findChildFormDetails } from '../../../../../../../model'; +import { getFormDetailProvider } from '../../../../../../../register'; import { CTX } from '../../../../../../ctx'; import { EditFormController } from '../../../../edit-form'; +import { FormController } from '../../../../form'; +import { FormGroupPanelController } from '../../../form-group-panel'; +import { FormItemController } from '../../../form-item'; /** * 表单多数据部件项控制器 @@ -28,9 +33,41 @@ export class FormMDCtrlItemController this.state.isSimple = true; } - public async onInit(): Promise { - await this.initDetailControllers( - (this.model as IDEFormMDCtrl).deformDetails, + protected async initDetailControllers( + details: IDEFormDetail[] = (this.model as IDEFormMDCtrl).deformDetails!, + form: FormController = this, + parent: FormGroupPanelController | undefined = undefined, + ): Promise { + await Promise.all( + details.map(async detail => { + // 生成表单成员控制器 + const detailProvider = await getFormDetailProvider(detail); + if (!detailProvider) { + return; + } + form.providers[detail.id!] = detailProvider; + const detailController = await detailProvider.createController( + detail, + form, + parent, + ); + form.details[detail.id!] = detailController; + if ( + detail.detailType === 'FORMITEM' || + detail.detailType === 'MDCTRL' + ) { + form.formItems.push(detailController as FormItemController); + } + // 有子成员的生成子控制器 + const childDetails = findChildFormDetails(detail); + if (childDetails.length) { + await this.initDetailControllers( + childDetails, + form, + detailController as FormGroupPanelController, + ); + } + }), ); } } diff --git a/packages/runtime/src/controller/control/form/form-detail/form-mdctrl/form-mdctrl-repeater/form-mdctrl-repeater-form/form-mdctrl-repeater-form.controller.ts b/packages/runtime/src/controller/control/form/form-detail/form-mdctrl/form-mdctrl-repeater/form-mdctrl-repeater-form/form-mdctrl-repeater-form.controller.ts index 6c22e57f89..c8a3aaf589 100644 --- a/packages/runtime/src/controller/control/form/form-detail/form-mdctrl/form-mdctrl-repeater/form-mdctrl-repeater-form/form-mdctrl-repeater-form.controller.ts +++ b/packages/runtime/src/controller/control/form/form-detail/form-mdctrl/form-mdctrl-repeater/form-mdctrl-repeater-form/form-mdctrl-repeater-form.controller.ts @@ -1,15 +1,5 @@ -// import { useCtx } from '@ibiz-template/vue3-util'; -import { IDEFormDetail } from '@ibiz/model-core'; -// import { reactive } from 'vue'; -import { FormController } from '../../../../form'; -import { FormGroupPanelController } from '../../../form-group-panel'; import { FormMDCtrlContentTypeController } from '../../form-mdctrl-content-type.controller'; import { FormMDCtrlItemController } from './form-mdctrl-repeater-form-item.controller'; -import { FormItemController } from '../../../form-item'; -import { IFormDetailController } from '../../../../../../../interface'; -import { findChildFormDetails } from '../../../../../../../model'; -import { getFormDetailProvider } from '../../../../../../../register'; -import { CTX } from '../../../../../../ctx'; /** * 表单多数据部件表格类型控制器 @@ -22,108 +12,6 @@ import { CTX } from '../../../../../../ctx'; * @implements {IFormController} */ export class FormMDCtrlRepeaterFormController extends FormMDCtrlContentTypeController { - /** - * 表单项控制器的集合(二维数组) - * - * @author zk - * @date 2023-07-25 05:07:56 - * @type {Array>} - * @memberof FormMDCtrlController - */ - formDetails: Array< - Array<{ name: string; detailType: string; c: IFormDetailController }> - > = []; - - /** - * 表单ctx - * - * @author zk - * @date 2023-07-31 12:07:00 - * @private - * @type {CTX} - * @memberof FormMDCtrlRepeaterFormController - */ - private formCtx!: CTX; - - /** - * uiState - * - * @author zk - * @date 2023-07-31 12:07:07 - * @type {{ isInit: boolean }} - * @memberof FormMDCtrlRepeaterFormController - */ - state: { isInit: boolean } = { isInit: false }; - - /** - * 初始化表单成员控制器 - * - * @author lxm - * @date 2022-08-24 21:08:48 - * @protected - */ - protected async initFormMDCtrlItemControllers( - details: IDEFormDetail[], - index: number, - form: FormController = this.parent.form, - data: IData = {}, - parent: FormGroupPanelController | undefined = undefined, - ): Promise { - const formData = data; - // const formData = reactive(data); - - const formController = new FormMDCtrlItemController( - this.model, - this.parent.form.context, - this.parent.form.params, - this.formCtx, - formData, - ); - await formController.onInit(); - formController.evt.on('onFormDataChange', arg => { - if (arg.data.length > 0) { - this.onDataItemChange(arg.data[0], index); - } - }); - - formController.state.isLoaded = true; - await Promise.all( - details.map(async detail => { - // 生成表单成员控制器 - const detailProvider = await getFormDetailProvider(detail); - if (!detailProvider) { - return; - } - form.providers[detail.id!] = detailProvider; - const detailController = await detailProvider.createController( - detail, - formController, - parent, - ); - if (!this.formDetails[index]) { - this.formDetails[index] = []; - } - this.formDetails[index].push({ - name: detail.id!, - detailType: detail.detailType!, - c: detailController, - }); - // 有子成员的生成子控制器 - const childDetails = findChildFormDetails(detail); - if (childDetails.length) { - await this.initFormMDCtrlItemControllers( - childDetails, - index, - formController, - data, - detailController as FormGroupPanelController, - ); - } - }), - ); - return data; - } - /** * 数据插入 * @@ -132,10 +20,7 @@ export class FormMDCtrlRepeaterFormController extends FormMDCtrlContentTypeContr * @memberof FormMDCtrlRepeaterFormController */ async onDataInsert(): Promise { - const data = await this.initFormMDCtrlItemControllers( - this.model.deformDetails!, - this.data.length, - ); + const data = {}; super.onDataInsert(data); } @@ -152,41 +37,9 @@ export class FormMDCtrlRepeaterFormController extends FormMDCtrlContentTypeContr return; } super.onDataRemove(index); - this.formDetails.splice(index, 1); } - /** - * 初始化formCtx - * - * @author zk - * @date 2023-07-29 05:07:21 - * @memberof FormMDCtrlRepeaterFormController - */ - useFormMdCtrlCtx(): void { - // this.formCtx = useCtx(); - } - - /** - * 初始化数据 - * - * @author zk - * @date 2023-07-31 12:07:37 - * @memberof FormMDCtrlRepeaterFormController - */ - async initData(): Promise { - super.initData(); - await Promise.all( - this.data.map(async (item, index) => { - await this.initFormMDCtrlItemControllers( - this.model.deformDetails!, - index, - this.parent.form, - item, - ); - }), - ); - this.state.isInit = true; - } + formControllerArray: Array = []; /** * 表单项值规则校验 @@ -196,18 +49,17 @@ export class FormMDCtrlRepeaterFormController extends FormMDCtrlContentTypeContr * @memberof FormMDCtrlRepeaterFormController */ async validate(): Promise { - const values: Promise[] = []; - this.formDetails.forEach(details => { - details.forEach(detail => { - if (detail.detailType === 'FORMITEM') { - const c = detail.c as FormItemController; - values.push(c.validate()); - } - }); - }); - + const values: Promise[] = this.formControllerArray.map( + (c: FormMDCtrlItemController) => { + return c.validate(); + }, + ); const results = await Promise.all(values); // 找不到value为false即全部是true return results.findIndex(value => !value) === -1; } + + setFromController(c: FormMDCtrlItemController): void { + this.formControllerArray.push(c); + } } -- Gitee From 03f2acf1341622419a84c9b79396cef9b4bd9332 Mon Sep 17 00:00:00 2001 From: zhangkang <57750083+zhangkang1314@users.noreply.github.com> Date: Fri, 25 Aug 2023 18:43:27 +0800 Subject: [PATCH 2/3] =?UTF-8?q?feat:=20=E8=8F=9C=E5=8D=95=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E9=A1=B6=E7=BA=A7=E6=89=93=E5=BC=80=E8=A7=86=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/control/app-menu/app-menu.controller.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/runtime/src/controller/control/app-menu/app-menu.controller.ts b/packages/runtime/src/controller/control/app-menu/app-menu.controller.ts index 9bcf360d16..a493f098c6 100644 --- a/packages/runtime/src/controller/control/app-menu/app-menu.controller.ts +++ b/packages/runtime/src/controller/control/app-menu/app-menu.controller.ts @@ -64,7 +64,11 @@ export class AppMenuController * @param {string} id * @return {*} {Promise} */ - async onClickMenuItem(id: string, event?: MouseEvent): Promise { + async onClickMenuItem( + id: string, + event?: MouseEvent, + useDepth: boolean = true, + ): Promise { const menuItem = findRecursiveChild(this.model, id, { compareField: 'id', childrenFields: ['appMenuItems'], @@ -83,8 +87,7 @@ export class AppMenuController } const tempContext = this.context.clone(); - - if (this.routeDepth) { + if (this.routeDepth && useDepth) { Object.assign(tempContext, { toRouteDepth: this.routeDepth + 1, }); -- Gitee From 634ccef11d60a3b84f4e782efb338259b089aa8b Mon Sep 17 00:00:00 2001 From: zhangkang <57750083+zhangkang1314@users.noreply.github.com> Date: Fri, 25 Aug 2023 18:44:03 +0800 Subject: [PATCH 3/3] =?UTF-8?q?feat:=20=E5=A4=9A=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E9=83=A8=E4=BB=B6=E6=8E=A7=E5=88=B6=E5=99=A8=E8=BF=81=E7=A7=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../runtime/src/controller/control/index.ts | 1 + .../src/controller/control/md-ctrl/index.ts | 3 + .../control/md-ctrl/md-ctrl-row.state.ts | 40 ++++ .../control/md-ctrl/md-ctrl.controller.ts | 199 ++++++++++++++++++ .../control/md-ctrl/md-ctrl.service.ts | 40 ++++ 5 files changed, 283 insertions(+) create mode 100644 packages/runtime/src/controller/control/md-ctrl/index.ts create mode 100644 packages/runtime/src/controller/control/md-ctrl/md-ctrl-row.state.ts create mode 100644 packages/runtime/src/controller/control/md-ctrl/md-ctrl.controller.ts create mode 100644 packages/runtime/src/controller/control/md-ctrl/md-ctrl.service.ts diff --git a/packages/runtime/src/controller/control/index.ts b/packages/runtime/src/controller/control/index.ts index 30b03d7151..41e6814a09 100644 --- a/packages/runtime/src/controller/control/index.ts +++ b/packages/runtime/src/controller/control/index.ts @@ -17,3 +17,4 @@ export * from './tab-exp-panel/index'; export * from './toolbar/index'; export * from './tree/index'; export * from './wizard-panel/index'; +export * from './md-ctrl/index'; diff --git a/packages/runtime/src/controller/control/md-ctrl/index.ts b/packages/runtime/src/controller/control/md-ctrl/index.ts new file mode 100644 index 0000000000..fff6b5e0d0 --- /dev/null +++ b/packages/runtime/src/controller/control/md-ctrl/index.ts @@ -0,0 +1,3 @@ +export * from './md-ctrl.controller'; +export * from './md-ctrl-row.state'; +export * from './md-ctrl.service'; diff --git a/packages/runtime/src/controller/control/md-ctrl/md-ctrl-row.state.ts b/packages/runtime/src/controller/control/md-ctrl/md-ctrl-row.state.ts new file mode 100644 index 0000000000..e58cbfdd7f --- /dev/null +++ b/packages/runtime/src/controller/control/md-ctrl/md-ctrl-row.state.ts @@ -0,0 +1,40 @@ +import { + IButtonContainerState, + IMobMDCtrlController, + IMobMDCtrlRowState, +} from '../../../interface'; +import { ControlVO } from '../../../service'; + +/** + * 多数据部件行状态 + * + * @author chitanda + * @date 2023-06-19 18:06:44 + * @export + * @class MobMDCtrlRowState + */ +export class MobMDCtrlRowState implements IMobMDCtrlRowState { + /** + * 行为状态 + * + * @author chitanda + * @date 2023-06-19 18:06:27 + * @type {{ [p: string]: IButtonContainerState }} + */ + readonly uaColStates: { [p: string]: IButtonContainerState } = {}; + + /** + * Creates an instance of MDCtrlRowState. + * + * @author chitanda + * @date 2023-06-19 18:06:12 + * @param {ControlVO} data 行数据 + * @param {IMobMDCtrlController} controller 多数据部件控制器 + */ + constructor( + public data: ControlVO, + public controller: IMobMDCtrlController, + ) { + this.data = data; + } +} diff --git a/packages/runtime/src/controller/control/md-ctrl/md-ctrl.controller.ts b/packages/runtime/src/controller/control/md-ctrl/md-ctrl.controller.ts new file mode 100644 index 0000000000..421b947ff7 --- /dev/null +++ b/packages/runtime/src/controller/control/md-ctrl/md-ctrl.controller.ts @@ -0,0 +1,199 @@ +import { + IDEMobMDCtrl, + IUIActionGroup, + IUIActionGroupDetail, +} from '@ibiz/model-core'; +import { + IMobMDCtrlEvent, + IMobMDCtrlController, + IMobMdCtrlState, + IMobMDCtrlRowState, + MDCtrlLoadParams, +} from '../../../interface'; +import { MDCtrlService } from './md-ctrl.service'; +import { MobMDCtrlRowState } from './md-ctrl-row.state'; +import { MDControlController } from '../../common'; +import { ControlVO } from '../../../service'; +import { UIActionUtil } from '../../../ui-action'; +import { ButtonContainerState, UIActionButtonState } from '../../utils'; + +export class MDCtrlController + extends MDControlController + implements IMobMDCtrlController +{ + declare service: MDCtrlService; + + protected initState(): void { + super.initState(); + this.state.rows = []; + this.state.noSort = this.model.noSort === true; + // 多数据默认激活值为1 + this.state.mdctrlActiveMode = 1; + } + + protected async onCreated(): Promise { + await super.onCreated(); + this.service = new MDCtrlService(this.model); + await this.service.init(this.context); + // 设置默认排序 + this.setSort(); + } + + /** + * 设置排序 + * + * @author lxm + * @date 2022-09-28 13:09:44 + * @param {string} key 排序字段 + * @param {string} order 排序顺序 + */ + setSort(key?: string, order?: 'asc' | 'desc'): void { + if (key && order) { + super.setSort(key, order); + } else { + // 设置默认排序或者置空 + const { minorSortAppDEFieldId, minorSortDir } = this.model; + if (minorSortAppDEFieldId && minorSortDir) { + this.state.sortQuery = `${minorSortAppDEFieldId.toLowerCase()},${minorSortDir.toLowerCase()}`; + } else { + this.state.sortQuery = ''; + } + } + } + + /** + * 加载更多 + * @author lxm + * @date 2023-05-22 07:33:59 + * @return {*} {Promise} + */ + async loadMore(): Promise { + // 修复加载更多时,数据未加载成功 但是还是会继续加载的问题 + if (this.state.total > this.state.items.length && !this.state.isLoading) { + await this.load({ isLoadMore: true }); + } + } + + /** + * 列表多数据刷新 需重置分页 + * + * @author zk + * @date 2023-08-11 05:08:20 + * @return {*} {Promise} + * @memberof MDCtrlController + */ + async refresh(): Promise { + await this.load({ isInitialLoad: true }); + } + + afterLoad(args: MDCtrlLoadParams, items: ControlVO[]): Promise { + if (args.isInitialLoad) { + this.state.rows = []; + } + if (items && items.length > 0) { + this.state.rows.push( + ...items.map(item => { + const row = new MobMDCtrlRowState(item, this); + this.initActionStates(row); + return row; + }), + ); + } + return super.afterLoad(args, items); + } + + /** + * 设置列表数据 + * + * @author zk + * @date 2023-05-26 02:05:46 + * @param {IData[]} items + * @memberof ListController + */ + setData(items: IData[]): void { + const rows = items.map(item => { + const row = new MobMDCtrlRowState(item as ControlVO, this); + return row; + }); + this.state.rows = rows; + } + + /** + * 获取列表数据 + * + * @author zk + * @date 2023-05-26 02:05:35 + * @return {*} {IData[]} + * @memberof ListController + */ + getAllData(): IData[] { + return this.state.rows.map(row => row.data); + } + + /** + * 界面行为组项点击 + * + * @author chitanda + * @date 2023-06-19 18:06:18 + * @param {IUIActionGroupDetail} detail + * @param {MDCtrlRowState} row + * @param {MouseEvent} event + * @return {*} {Promise} + */ + async onActionClick( + detail: IUIActionGroupDetail, + row: IMobMDCtrlRowState, + event: MouseEvent, + ): Promise { + const actionId = detail.uiactionId; + await UIActionUtil.execAndResolved(actionId!, { + context: this.context, + params: this.params, + data: [row.data], + view: this.view, + event, + }); + } + + /** + * 初始化按钮状态 + * + * @author chitanda + * @date 2023-06-21 16:06:55 + * @protected + * @param {MobMDCtrlRowState} row + */ + protected initActionStates(row: MobMDCtrlRowState): void { + const { deuiactionGroup, deuiactionGroup2 } = this.model; + if (deuiactionGroup) { + this.initUIActionGroup(row, deuiactionGroup); + } + if (deuiactionGroup2) { + this.initUIActionGroup(row, deuiactionGroup2); + } + } + + protected initUIActionGroup( + row: MobMDCtrlRowState, + group: IUIActionGroup, + ): void { + if (!group!.uiactionGroupDetails?.length) { + ibiz.log.debug('操作列界面行为组没有配置界面行为'); + } + const containerState = new ButtonContainerState(); + const details = group!.uiactionGroupDetails || []; + details.forEach(detail => { + const actionid = detail.uiactionId; + if (actionid) { + const buttonState = new UIActionButtonState( + detail.id!, + this.context.srfappid!, + actionid, + ); + containerState.addState(detail.id!, buttonState); + } + }); + containerState.update(row.data.getOrigin()); + row.uaColStates[group.id!] = containerState; + } +} diff --git a/packages/runtime/src/controller/control/md-ctrl/md-ctrl.service.ts b/packages/runtime/src/controller/control/md-ctrl/md-ctrl.service.ts new file mode 100644 index 0000000000..43cc20d4f6 --- /dev/null +++ b/packages/runtime/src/controller/control/md-ctrl/md-ctrl.service.ts @@ -0,0 +1,40 @@ +import { IDEMobMDCtrl } from '@ibiz/model-core'; +import { MDControlService, UIMapField } from '../../../service'; + +/** + * 多数据部件服务 + * + * @author lxm + * @date 2023-05-15 09:53:35 + * @export + * @class MDCtrlService + * @extends {MDControlService} + */ +export class MDCtrlService extends MDControlService { + /** + * 初始化属性映射 + * + * @author lxm + * @date 2022-08-31 18:08:37 + */ + initUIDataMap(): void { + super.initUIDataMap(); + // *初始化表格数据项的属性映射 + this.model.delistDataItems?.forEach(item => { + const uiKey = item.id!.toLowerCase(); + const deField = item.appDEFieldId; + let mapField: UIMapField; + // 后台实体属性 + if (deField) { + const deFieldKey = deField.toLowerCase(); + mapField = new UIMapField(uiKey, deFieldKey, { + isOriginField: true, + }); + } else { + // 前台属性 + mapField = new UIMapField(uiKey, uiKey); + } + this.dataUIMap.set(uiKey, mapField); + }); + } +} -- Gitee