import { computedNavData } from '@/core'; import { IDrtabStore } from '@/core/interface/widgets/store'; import { DrtabActionType, IDrtabAbility, IDrtabController, IDrtabControllerParams, IDrtabModel, INavigateParam, IParam, } from '../../interface'; import { DECtrlController } from './de-ctrl-controller'; /** * 数据关系分页部件控制器 * * @export * @class DrtabController * @extends {WidgetsController} * @implements {IDrtabController} * @template T */ export class DrtabController extends DECtrlController implements IDrtabController { /** * @description 视图类型 * @protected * @type {string} * @memberof DrtabController */ protected viewType!: string; /** * Creates an instance of DrtabController. * @param {IDrtabControllerParams} params * @memberof DrtabController */ public constructor( params: IDrtabControllerParams ) { super(params); this.ctrlInit(params); } /** * 处理部件初始化 * * @protected * @param {IDrtabControllerParams} params * @memberof DrtabController */ protected processCtrlInit( params: IDrtabControllerParams ) { super.processCtrlInit(params); this.viewType = params.viewType; const model = this.getModel(); Object.assign(this.store, { pages: model.pages, selectItem: null, }); } /** * @description drtab初始化 * @memberof DrtabController */ public drtabInit() { if ( Object.is(this.viewType, 'DEEDITVIEW4') && this.store.pages && this.store.pages.length > 0 ) { this.store.selectItem = this.store.selectItem || this.store.pages[0]; const param: INavigateParam[] = [ { data: this.store.selectItem, navViewName: this.store.selectItem.appViewName, navData: { context: this.store.selectItem.localContext, viewParams: this.store.selectItem.localParam, }, }, ]; this.emit('ctrlMounted', param); } } /** * @description 处理选中 * @param {IParam} item * @memberof DrtabController */ public handleSelectChange(item: IParam) { this.store.selectItem = item; const param: INavigateParam[] = [ { data: item, navViewName: item.appViewName, navData: { context: item.localContext, viewParams: item.localParam, }, }, ]; this.emit('selectionChange', param); } /** * @description 处理表单数据 * @param {IParam} data * @memberof DrtabController */ public handleFormChange(data: IParam) { if (data && Object.is(data.srfuf, '1')) { this.model.pages.forEach((item: any) => { // 取消禁用 item.disabled = false; // 设置导航参数 if (item.localContext) { item.localContext = computedNavData( data, this.store.context, this.store.viewParams, item.localContext ); } if (item.localParam) { item.localParam = computedNavData( data, this.store.context, this.store.viewParams, item.localParam ); } }); } else { this.model.pages.forEach((item: any) => { item.disabled = true; }); } this.drtabInit(); } /** * @description 获取能力 * @return {*} {IDrtabAbility} * @memberof DrtabController */ getAbility(): IDrtabAbility { return { ...super.getAbility(), handleFormChange: this.handleFormChange.bind(this), }; } }