tab-search-view-engine.ts 3.6 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149
import { MDViewEngine } from './md-view-engine';

/**
 * 实体分页搜索视图
 *
 * @export
 * @class TabSearchViewEngine
 * @extends {ViewEngine}
 */
export class TabSearchViewEngine extends MDViewEngine {

    /**
     * 分页导航面板
     *
     * @protected
     * @type {*}
     * @memberof TabSearchViewEngine
     */
    protected tabExpPanel: any;

    /**
     * 初始化引擎
     *
     * @param {*} options
     * @memberof TabSearchViewEngine
     */
    public init(options: any): void {
        this.tabExpPanel = options.tabexppanel;
        super.init(options);
    }

    /**
     * 引擎加载
     *
     * @memberof TabSearchViewEngine
     */
    public load(): void { }

    /**
     * 部件事件处理
     *
     * @param {string} ctrlName 部件标识
     * @param {string} eventName 事件标识
     * @param {*} args 事件参数
     * @memberof TabSearchViewEngine
     */
    public onCtrlEvent(ctrlName: string, eventName: string, args: any): void {
        if (ctrlName === this.getTabExpPanel()?.name) {
            this.handleTabExpPanelEvents(eventName, args);
        }
        super.onCtrlEvent(ctrlName, eventName, args);
    }

    /**
     * 处理分页导航面板事件
     *
     * @param {string} eventName
     * @param {*} args
     * @memberof TabSearchViewEngine
     */
    public handleTabExpPanelEvents(eventName: string, args: any) { }

    /**
     * 搜索表单加载完成
     *
     * @param {*} [args={}]
     * @memberof TabSearchViewEngine
     */
    public onSearchFormLoad(args: any = {}): void {
        this.search(args);
    }

    /**
     * 搜索栏事件
     *
     * @param {string} eventName
     * @param {*} [args={}]
     * @memberof TabSearchViewEngine
     */
    public searchBarEvent(eventName: string, args: any = {}): void {
        if (Object.is(eventName, 'search')) {
            this.search(args);
        }
    }

    /**
     * 搜索
     *
     * @param {*} args
     * @memberof TabSearchViewEngine
     */
    public search(args: any) {
        const params: any = {};
        //  搜索表单
        const searchForm = this.getSearchForm();
        if (searchForm && this.view.isExpandSearchForm) {
            Object.assign(params, searchForm.getData());
        }
        //  搜索栏
        const searchBar = this.getSearchBar();
        if (searchBar) {
            const data = searchBar.getData();
            if (data && data.filter) {
                Object.assign(params, { filter: data.filter });
            }
        }
        if (this.view && this.view.queryParams) {
            //  快速搜索栏
            if (this.view.queryParams.quickSearchValue && !this.view.isExpandSearchForm) {
                Object.assign(params, { query: this.view.queryParams.quickSearchValue });
            }
        }
        if (this.getTabExpPanel() && this.isLoadDefault) {
            const tag = this.getTabExpPanel().name;
            this.setViewState2({ tag: tag, action: 'search', viewdata: params });
        }
        this.isLoadDefault = true;
    }

    /**
     * 计算按钮状态
     *
     * @memberof TabSearchViewEngine
     */
    public computeToolbarState(state: boolean, data: any) {
        this.calcToolbarItemState(state);
        this.calcToolbarItemAuthState(data);
    }

    /**
     * 获取分页导航面板
     *
     * @return {*} 
     * @memberof TabSearchViewEngine
     */
    public getTabExpPanel() {
        return this.tabExpPanel;
    }

    /**
     * @description 视图销毁
     * @memberof TabSearchViewEngine
     */
    public destroyed() {
        super.destroyed();
        this.tabExpPanel = null;
    }

}