import { ITreeAbility, IMDViewControllerParams, IParam, IPickupTreeViewAbility, IPickupTreeViewController, IPickupTreeViewStore, MDCtrlActionType, PickupTreeViewActionType, ICtrlActionResult, IViewActionResult, SearchFormActionType, } from '@/core/interface'; import { MDViewController } from './md-view-controller'; /** * 选择树视图控制器 * * @export * @class PickupTreeViewController * @extends {(TreeViewController)} * @template T */ export class PickupTreeViewController extends MDViewController< PickupTreeViewActionType, IPickupTreeViewStore, IPickupTreeViewAbility > implements IPickupTreeViewController { /** * 获取树部件能力 * * @protected * @return {*} {(ITreeAbility | undefined)} * @memberof TreeViewController */ protected getMainCtrlAbility(): ITreeAbility | undefined { const tree = this.model.ctrls.find( (ctrl: IParam) => ctrl.controlType === 'TREEVIEW' ); if (tree) { return this.getSubAbility(tree.name); } return undefined; } /** * 处理视图初始化 * * @protected * @param {IMDViewControllerParams} params * @memberof PickupTreeViewController */ protected processViewInit( params: IMDViewControllerParams< PickupTreeViewActionType, IPickupTreeViewAbility > ): void { super.processViewInit(params); Object.assign(this.store, { expandSearchForm: true }); } /** * 处理多数据部件行为 * * @protected * @template T * @param {(T | MDCtrlActionType)} action * @param {IParam[]} data * @memberof PickupTreeViewController */ protected handleMDCtrlAction( action: T | MDCtrlActionType, data: IParam[] ) { super.handleMDCtrlAction(action, data); switch (action) { case 'load': this.emit('viewDataLoaded', data); break; } } /** * 选择全部 * * @memberof PickupTreeViewController */ public selectAll() { const tree = this.getMainCtrlAbility(); if (tree) { tree.selectAll(); } } /** * 选中数据 * * @param {IParam[]} items 需要选中的数据 * @param {boolean} [reverse] 是否反选 * @memberof PickupTreeViewController */ public selectItems(items: IParam[], reverse?: boolean) { const tree = this.getMainCtrlAbility(); if (tree) { tree.selectItems(items, reverse); } } /** * 快速分组值变化 * * @param {IParam} item * @memberof PickupTreeViewController */ public handleQuickGroupValueChange(item: IParam) { if (item) { this.queryParams.quickGroupData = item.data; const mdCtrl = this.getMainCtrlAbility(); if (mdCtrl) { mdCtrl.refreshAllNode(); } } this.isEmitQuickGroupValue = true; } /** * 处理搜索表单部件行为 * * @protected * @param {SearchFormActionType} action * @param {IParam[]} data * @memberof PickupTreeViewController */ protected handleSearchFormAction( action: SearchFormActionType, data: IParam[] ) { const mdCtrl = this.getMainCtrlAbility(); if (mdCtrl) { if (action === 'load') { mdCtrl.load(); } if (action === 'search') { mdCtrl.refreshAllNode(); } } } /** * 搜索 * * @param {string} searchValue * @memberof PickupTreeViewController */ public search(searchValue: string) { this.queryParams.query = searchValue; const mdCtrl = this.getMainCtrlAbility(); if (mdCtrl) { mdCtrl.refreshAllNode({ query: searchValue }); } } /** * 刷新 * * @param {(IParam | undefined)} [args] * @return {*} {Promise} * @memberof PickupTreeViewController */ public async refresh(args?: IParam | undefined): Promise { const mdCtrl = this.getMainCtrlAbility(); if (mdCtrl) { return (await mdCtrl.refreshAllNode({ query: this.queryParams.query })).ok } return Promise.reject(false); } /** * 获取能力 * * @return {*} {IPickupTreeViewAbility} * @memberof PickupTreeViewController */ public getAbility(): IPickupTreeViewAbility { return { ...super.getAbility(), selectAll: this.selectAll.bind(this), selectItems: this.selectItems.bind(this), }; } }