pickupview3-base.tsx 5.1 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 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192
import { IPSAppDEPickupView, IPSDEPickupViewPanel } from '@ibiz/dynamic-model-api';
import { PickupView3Engine, PickupView3Interface, Util } from 'ibiz-core';
import { MainViewBase } from './mainview-base';

/**
 * 应用实体数据选择视图(分页关系)
 *
 * @export
 * @class PickupView3Base
 * @extends {MainViewBase}
 * @implements {PickupView3Interface}
 */
export class PickupView3Base extends MainViewBase implements PickupView3Interface {

    /**
     * 视图实例对象
     * 
     * @type {IPSAppDEPickupView}
     * @memberof PickupView3Base
     */
    public declare viewInstance: IPSAppDEPickupView;

    /**
     * 选择视图面板集合
     * 
     * @type {Array<IPSDEPickupViewPanel>}
     * @memberof PickupView3Base
     */
    public pickupViewPanelModels: Array<IPSDEPickupViewPanel> = [];

    /**
     * 当前激活选择视图面板名称
     * 
     * @type {string}
     * @memberof PickupView3Base
     */
    public activedPickupViewPanel: string = '';

    /**
     * 选中数据的字符串
     *
     * @type {string}
     * @memberof PickupView3Base
     */
    public selectedData: string = "";

    /**
     * 视图选中数据
     *
     * @type {any[]}
     * @memberof PickupView3Base
     */
    public viewSelections: any[] = [];

    /**
     * 是否显示按钮
     *
     * @type {boolean}
     * @memberof PickupView3Base
     */
    public isShowButton: boolean = true;

    /**
     * 监听部件动态参数变化
     *
     * @param {*} newVal
     * @param {*} oldVal
     * @memberof PanelControlBase
     */
    public onDynamicPropsChange(newVal: any, oldVal: any) {
        super.onDynamicPropsChange(newVal,oldVal);
        if(this.viewparams?.selectedData){
            this.selectedData = JSON.stringify(this.viewparams.selectedData);
        }
    }

    /**
     * 监听部件静态参数变化
     *
     * @param {*} newVal
     * @param {*} oldVal
     * @memberof PickupView3Base
     */
    public onStaticPropsChange(newVal: any, oldVal: any) {
        this.isShowButton = newVal?.isShowButton !== false;
        super.onStaticPropsChange(newVal,oldVal);
    }

    /**
     * 视图模型初始化
     * 
     * @memberof PickupView3Base
     */
    public async viewModelInit() {
        this.viewInstance = (this.staticProps?.modeldata) as IPSAppDEPickupView;
        await super.viewModelInit();
        this.initPanelModels();
    }

    /**
     * 视图初始化
     * 
     * @memberof PickupView3Base
     */
    public viewInit() {
        this.activedPickupViewPanel = this.pickupViewPanelModels.length > 0 ? this.pickupViewPanelModels[0].name : '';
    }

    /**
     * 视图引擎初始化
     * 
     * @memberof PickupView3Base
     */
    public engineInit() {
        if (this.Environment && this.Environment.isPreviewMode) {
            return;
        }
        this.engine.init({
            view: this,
            pickupViewPanelModels: this.pickupViewPanelModels,
            keyPSDEField: this.appDeCodeName.toLowerCase(),
            majorPSDEField: this.appDeMajorFieldName.toLowerCase(),
        });
    }

    /**
     * 初始化选择视图面板实例
     * 
     * @memberof PickupView3Base
     */
    public initPanelModels() {
        const controls: any[] = this.viewInstance.getPSControls() || [];
        controls.forEach((control: any) => {
            if (control.controlType == 'PICKUPVIEWPANEL') {
                this.pickupViewPanelModels.push(control as IPSDEPickupViewPanel);
            }
        })
    }

    /**
     * 计算目标部件所需参数
     *
     * @param {string} [controlType]
     * @returns
     * @memberof PickupView3Base
     */
    public computeTargetCtrlData(controlInstance:any, args?: any) {
        const { targetCtrlName, targetCtrlParam, targetCtrlEvent } = super.computeTargetCtrlData(controlInstance, args);
        Object.assign(targetCtrlParam.dynamicProps,{
            selectedData: this.selectedData,
        })
        Object.assign(targetCtrlParam.staticProps,{
            isSingleSelect: true,
            isShowButton: this.isShowButton,
        })
        return { targetCtrlName, targetCtrlParam, targetCtrlEvent }
    }

    /**
     * 分页点击
     * 
     * @memberof PickupView3Base
     */
    public tabPanelClick(event: any) {
        if (!event || Object.is(event, this.activedPickupViewPanel)) {
            return;
        }
        this.activedPickupViewPanel = event;
        this.viewState.next({ tag: this.activedPickupViewPanel, action: 'load', data: Util.deepCopy(this.viewparams) });
    }

    /**
     * 确定
     *
     * @memberof PickupView3Base
     */
    public onClickOk(): void {
        this.$emit('view-event', { viewName: this.viewInstance.name, action: 'viewdataschange', data: this.viewSelections });
        this.$emit('view-event', { viewName: this.viewInstance.name, action: 'close', data: null });
    }

    /**
     * 取消
     *
     * @memberof PickupView3Base
     */
    public onClickCancel(): void {
        this.$emit('view-event', { viewName: this.viewInstance.name, action: 'viewdataschange', data: null });
        this.$emit('view-event', { viewName: this.viewInstance.name, action: 'close', data: null });
    }

}