grid-view-load-ui-logic-base.ts 9.0 KB
Newer Older
1
import { UIActionContext } from "@/logic/ui-logic";
2
import { LogicReturnType } from "@/logic/const/logic-return-type";
3
import { UILogicParamType } from "@/logic/const/ui-logic-param-type";
4
import { Util, Verify } from "@/utils";
5 6
import { AppMessageBox } from "@/utils/app-message-box/app-message-box";
import { Subject } from "rxjs";
7 8 9 10 11 12 13 14 15 16 17 18
/**
 * 自定义表格数据加载
 *
 * @export
 * @class GridViewLoadUILogicBase
 */
export default class GridViewLoadUILogicBase {

    /**
     * Creates an instance of  GridViewLoadBase.
     * 
     * @param {*} [opts={}]
19
     * @memberof GridViewLoadUILogicBase
20 21 22
     */
    constructor(opts: any = {}) { }

23 24 25 26 27 28 29
    /**
     * 逻辑参数
     *
     * @protected
     * @type {any[]}
     * @memberof GridViewLoadUILogicBase
     */
30 31
    protected logicParams: any[] = [
        {
32 33 34
            name: '当前搜索表单',
            codeName: 'searchForm',
            ctrlParam: true,
35 36 37 38 39 40 41
        },
        {
            name: '当前视图对象',
            codeName: 'view',
            activeViewParam: true,
        },
        {
42 43 44 45
            name: '当前表格',
            codeName: 'grid',
            activeCtrlParam: true,
            ctrlParam: true,
46 47
        },
        {
48 49 50 51
            name: '传入变量',
            codeName: 'Default',
            default: true,
            entityParam: true,
52 53
        },
        {
54 55 56
            name: '当前视图参数',
            codeName: 'viewParam',
            viewNavDataParam: true,
57 58 59
        },
    ];

60 61 62 63 64 65 66 67 68 69 70 71 72
    /**
     * 执行前
     *
     * @param {*} args
     * @param {*} [context={}]
     * @param {*} [params={}]
     * @param {*} [$event]
     * @param {*} [xData]
     * @param {*} [actioncontext]
     * @param {string} [srfParentDeName]
     * @return {*} 
     * @memberof GridViewLoadUILogicBase
     */
73 74 75
    public beforeExecute(args: any, context: any = {}, params: any = {},
        $event?: any, xData?: any, actioncontext?: any, srfParentDeName?: string) {
        return new UIActionContext(this.logicParams, args, context, params, $event, xData, actioncontext, srfParentDeName)
76 77 78 79 80 81 82 83 84 85 86 87 88 89
    }

    /**
     * 执行
     *
     * @param {any[]} args
     * @param {*} [context={}]
     * @param {*} [params={}]
     * @param {*} [$event]
     * @param {*} [xData]
     * @param {*} [actionContext]
     * @param {string} [srfParentDeName]
     * @memberof GridViewLoadUILogicBase
     */
90 91 92
    async execute(args: any[], context:any = {} ,params: any = {}, $event?: any, xData?: any, actioncontext?: any, srfParentDeName?: string) {
        try {
            const actionContext = this.beforeExecute(args, context, params, $event, xData, actioncontext, srfParentDeName);
93
            await this.execute_begin_node(actionContext);
94 95
            return actionContext.getResult();
        } catch (error: any) {
96
            throw new Error(`${error && error.message ? error.message : '发生未知错误!'}`);
97 98 99
        }
    }

100 101 102 103 104 105 106 107 108 109 110
    /**
     * 获取条件参数
     *
     * @param {UIActionContext} actionContext 界面逻辑上下文
     * @param {string} param 节点参数
     * @param {string} property 参数属性
     * @return {*} 
     * @memberof GridViewLoadUILogicBase
     */
    public getCondParam(actionContext: UIActionContext, param: string, property: string) {
        const resultParam = actionContext.getParam(param).getReal();
111 112 113 114
        //  当不存在参数属性时,返回直接值
        if (property === '') {
            return resultParam;
        }
115 116 117 118 119 120
        if (resultParam && resultParam.hasOwnProperty(property)) {
            return resultParam[property];
        }
        return null;
    }

121 122 123 124
    /**
     * 开始
     *
     * @param {UIActionContext} actionContext 界面逻辑上下文
125
     * @memberof GridViewLoadUILogicBase
126 127 128
     */
    protected async execute_begin_node(actionContext: UIActionContext) {
        actionContext.setResult(actionContext.defaultParam.getReal());
129
        console.log('已完成执行 开始 节点');
130 131 132 133 134 135 136
        await this.execute_bindparam1_node(actionContext);
    }
    
    /**
     * 绑定当前搜索表单
     *
     * @param {UIActionContext} actionContext 界面逻辑上下文
137
     * @memberof GridViewLoadUILogicBase
138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155
     */
    protected async execute_bindparam1_node(actionContext: UIActionContext) {
        try {
            //  源数据
            const srcParam = actionContext.getParam('view');
            //  目标数据
            const dstParam = actionContext.getParam('searchForm');
            //  源属性
            const srcFieldName: string = 'searchform';
            if (srcFieldName) {
                dstParam.bind(srcParam.get(srcFieldName));
            } else {
                dstParam.bind(srcParam.getReal());
            }
            actionContext.bindLastReturnParam(null);
        } catch (error: any) {
            throw new Error(`逻辑参数当前搜索表单 ${error && error.message ? error.message : '发生未知错误!'}`);
        }
156
        console.log('已完成执行 绑定当前搜索表单 节点');
157 158 159 160 161 162 163
        await this.execute_viewctrlinvoke1_node(actionContext);
    }
    
    /**
     * 视图部件调用
     *
     * @param {UIActionContext} actionContext 界面逻辑上下文
164
     * @memberof GridViewLoadUILogicBase
165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186
     */
    protected async execute_viewctrlinvoke1_node(actionContext: UIActionContext) {
        const invokeCtrl = 'searchForm';
        const invokeMethod = 'loadDraft';
        const invokeParam = 'viewParam';
        if (!invokeCtrl || !invokeMethod) {
            throw new Error(`界面对象或者调用方法缺失`);
        }
        const invokeUICtrl = actionContext.getParam(invokeCtrl).getReal();
        if (invokeUICtrl[invokeMethod] && invokeUICtrl[invokeMethod] instanceof Function) {
            try {
                const result = await invokeUICtrl[invokeMethod]();
                if (invokeParam) {
                    actionContext.getParam(invokeParam).bind(result);
                }
                actionContext.bindLastReturnParam(result);
            } catch (error:any) {
                throw new Error(`${invokeCtrl}界面对象调用${invokeMethod}方法发生异常`);
            }
        } else {
            throw new Error(`${invokeCtrl}界面对象不存在${invokeMethod}方法`);
        }
187
        console.log('已完成执行 视图部件调用 节点');
188 189 190 191 192 193 194
        await this.execute_viewctrlinvoke2_node(actionContext);
    }
    
    /**
     * 视图部件调用
     *
     * @param {UIActionContext} actionContext 界面逻辑上下文
195
     * @memberof GridViewLoadUILogicBase
196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217
     */
    protected async execute_viewctrlinvoke2_node(actionContext: UIActionContext) {
        const invokeCtrl = 'grid';
        const invokeMethod = 'load';
        const invokeParam = 'viewParam';
        if (!invokeCtrl || !invokeMethod) {
            throw new Error(`界面对象或者调用方法缺失`);
        }
        const invokeUICtrl = actionContext.getParam(invokeCtrl).getReal();
        if (invokeUICtrl[invokeMethod] && invokeUICtrl[invokeMethod] instanceof Function) {
            try {
                const result = await invokeUICtrl[invokeMethod]();
                if (invokeParam) {
                    actionContext.getParam(invokeParam).bind(result);
                }
                actionContext.bindLastReturnParam(result);
            } catch (error:any) {
                throw new Error(`${invokeCtrl}界面对象调用${invokeMethod}方法发生异常`);
            }
        } else {
            throw new Error(`${invokeCtrl}界面对象不存在${invokeMethod}方法`);
        }
218
        console.log('已完成执行 视图部件调用 节点');
219 220 221 222 223 224 225
        await this.execute_end1_node(actionContext);
    }
    
    /**
     * 结束
     *
     * @param {UIActionContext} actionContext 界面逻辑上下文
226
     * @memberof GridViewLoadUILogicBase
227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248
     */
    protected async execute_end1_node(actionContext: UIActionContext) {
        const strReturnType: string = 'NONEVALUE';
        if (Object.is(strReturnType, LogicReturnType.NONEVALUE) || Object.is(strReturnType, LogicReturnType.NULLVALUE)) {
            actionContext.setResult(null);
        } else if (Object.is(strReturnType, LogicReturnType.SRCVALUE)) {
            actionContext.setResult('');
        } else if (Object.is(strReturnType, LogicReturnType.BREAK)) {
            actionContext.setResult(LogicReturnType.BREAK);
        } else if (Object.is(strReturnType, LogicReturnType.LOGICPARAM) || Object.is(strReturnType, LogicReturnType.LOGICPARAMFIELD)) {
            const returnParam = actionContext.getParam('');
            if (Object.is(strReturnType, LogicReturnType.LOGICPARAM)) {
                actionContext.setResult(returnParam.getReal());
            } else {
                actionContext.setResult(returnParam.get(''));
            }
        } else {
            throw new Error(`无法识别的返回值类型${strReturnType}`);
        }
        console.log('已完成执行 结束 节点');
    }
    
249 250

}