import { GlobalService, UIServiceRegister } from '@ibizstudio/runtime';
import { throttle, LogUtil, ModelTool, Util, ViewTool } from '@ibizstudio/runtime';
import { ViewBase } from './view-base';
import { AppViewLogicService } from '../app-service';
import { winMsg } from '../ibz-studio-plugins';
/**
 * 主数据视图基类
 *
 * @export
 * @class MainViewBase
 * @extends {ViewBase}
 * @implements {MainViewInterface}
 */
export class MainViewBase extends ViewBase {
    /**
     * 引擎初始化
     *
     * @param {*} [opts={}] 引擎参数
     * @memberof MainViewBase
     */
    engineInit(opts = {}) { }
    /**
     * 视图初始化
     *
     * @memberof MainViewBase
     */
    viewInit() {
        super.viewInit();
        this.opendata = this.opendata.bind(this);
        this.newdata = this.newdata.bind(this);
    }
    /**
     * 应用实体codeName
     *
     * @readonly
     * @memberof MainViewBase
     */
    get appDeCodeName() {
        return ModelTool.getViewAppEntityCodeName(this.viewInstance);
    }
    /**
     * 应用实体主键属性codeName
     *
     * @readonly
     * @memberof MainViewBase
     */
    get appDeKeyFieldName() {
        var _a, _b;
        return ((_b = ModelTool.getAppEntityKeyField((_a = this.viewInstance) === null || _a === void 0 ? void 0 : _a.getPSAppDataEntity())) === null || _b === void 0 ? void 0 : _b.codeName) || '';
    }
    /**
     * 应用实体映射实体名称
     *
     * @readonly
     * @memberof MainViewBase
     */
    get deName() {
        var _a, _b;
        return ((_b = (_a = this.viewInstance) === null || _a === void 0 ? void 0 : _a.getPSAppDataEntity()) === null || _b === void 0 ? void 0 : _b.getPSDEName()) || '';
    }
    /**
     * 应用实体主信息属性codeName
     *
     * @readonly
     * @memberof MainViewBase
     */
    get appDeMajorFieldName() {
        var _a, _b;
        return ((_b = ModelTool.getAppEntityMajorField((_a = this.viewInstance) === null || _a === void 0 ? void 0 : _a.getPSAppDataEntity())) === null || _b === void 0 ? void 0 : _b.codeName) || '';
    }
    /**
     * 初始化工具栏数据
     *
     * @memberof MainViewBase
     */
    initViewToolBar() {
        var _a;
        const targetViewToolbarItems = [];
        const viewToolBar = ModelTool.findPSControlByType('TOOLBAR', this.viewInstance.getPSControls());
        if (viewToolBar && viewToolBar.getPSDEToolbarItems()) {
            (_a = viewToolBar.getPSDEToolbarItems()) === null || _a === void 0 ? void 0 : _a.forEach((toolbarItem) => {
                targetViewToolbarItems.push(this.initToolBarItems(toolbarItem));
            });
        }
        this.toolbarModels = targetViewToolbarItems;
    }
    /**
     * 视图模型数据初始化实例
     *
     * @memberof MainViewBase
     */
    async viewModelInit() {
        await super.viewModelInit();
        if (!(this.Environment && this.Environment.isPreviewMode)) {
            this.appEntityService = await new GlobalService().getService(ModelTool.getViewAppEntityCodeName(this.viewInstance), this.context);
        }
        this.initViewToolBar();
    }
    /**
     * 初始化应用界面服务
     *
     * @memberof ViewBase
     */
    async initAppUIService() {
        var _a;
        if (this.viewInstance && this.viewInstance.getPSAppDataEntity() && ModelTool.getViewAppEntityCodeName(this.viewInstance)) {
            this.appUIService = await UIServiceRegister.getService(this.context, (_a = ModelTool.getViewAppEntityCodeName(this.viewInstance)) === null || _a === void 0 ? void 0 : _a.toLowerCase());
            if (this.appUIService) {
                await this.appUIService.loaded();
            }
        }
    }
    /**
     * 处理指定视图控制关系将父键转为父实体上下文
     *
     * @memberof MainViewBase
     */
    async handleviewRes() {
        var _a, _b;
        if ((_b = (_a = this.viewInstance) === null || _a === void 0 ? void 0 : _a.getParentPSAppDataEntity) === null || _b === void 0 ? void 0 : _b.call(_a)) {
            // 先从导航上下文取数，没有再从导航参数（URL）取数，如果导航上下文和导航参数都没有则为null
            const parentEntityCodeName = this.viewInstance.getParentPSAppDataEntity().codeName.toLowerCase();
            if (this.context.srfparentkey) {
                Object.assign(this.context, { [parentEntityCodeName]: this.context.srfparentkey });
            }
            else if (this.viewparams.srfparentkey) {
                Object.assign(this.context, { [parentEntityCodeName]: this.viewparams.srfparentkey });
            }
        }
    }
    /**
     * 渲染视图工具栏
     *
     * @memberof MainViewBase
     */
    renderToolBar() {
        var _a, _b;
        if (!(this.toolbarModels && this.toolbarModels.length > 0)) {
            return null;
        }
        return (<view-toolbar slot='toolbar' mode={((_a = this.viewInstance) === null || _a === void 0 ? void 0 : _a.viewStyle) || 'DEFAULT'} counterServiceArray={this.counterServiceArray} isViewLoading={(_b = this.viewLoadingService) === null || _b === void 0 ? void 0 : _b.isLoading} toolbarModels={this.toolbarModels} on-item-click={(data, $event) => {
                throttle(this.handleItemClick, [data, $event], this);
            }}></view-toolbar>);
    }
    /**
     * 渲染主信息标题
     *
     * @memberof MainViewBase
     */
    renderCaptionInfo() {
        let innerHTML = '';
        if (this.model.srfCaption) {
            innerHTML = this.model.srfCaption;
        }
        if (this.viewInstance.showDataInfoBar && this.model.dataInfo) {
            innerHTML = `${innerHTML}${innerHTML !== '' ? '-' : ''}${this.model.dataInfo}`;
        }
        return this.$createElement('span', {
            slot: 'captionInfo',
            domProps: {
                innerHTML: innerHTML,
            },
        });
    }
    /**
     * 工具栏点击
     *
     * @param ctrl 部件
     * @param action  行为
     * @param data 数据
     * @param $event 事件源对象
     *
     * @memberof MainViewBase
     */
    handleItemClick(data, $event) {
        if (this.Environment && this.Environment.isPreviewMode) {
            return;
        }
        const viewToolBar = ModelTool.findPSControlByType('TOOLBAR', this.viewInstance.getPSControls());
        let toolbarTag = 'toolbar';
        if (viewToolBar) {
            toolbarTag = viewToolBar.name;
        }
        AppViewLogicService.getInstance().executeViewLogic(`${toolbarTag}_${data.tag}_click`, $event, this, undefined, this.viewInstance.getPSAppViewLogics());
    }
    /**
     * 计算目标部件所需参数
     *
     * @param {*} controlInstance
     * @returns
     * @memberof MainViewBase
     */
    computeTargetCtrlData(controlInstance) {
        const { targetCtrlName, targetCtrlParam, targetCtrlEvent } = super.computeTargetCtrlData(controlInstance);
        if ((controlInstance === null || controlInstance === void 0 ? void 0 : controlInstance.controlType) != 'SEARCHFORM') {
            Object.assign(targetCtrlParam.staticProps, {
                opendata: this.opendata,
                newdata: this.newdata,
            });
        }
        return { targetCtrlName: targetCtrlName, targetCtrlParam: targetCtrlParam, targetCtrlEvent: targetCtrlEvent };
    }
    /**
     * 打开目标视图
     *
     * @param {*} openView 目标视图模型对象
     * @param {*} view 视图对象
     * @param {*} tempContext 临时上下文
     * @param {*} data 数据
     * @param {*} xData 数据部件实例
     * @param {*} $event 事件源
     * @param {*} deResParameters
     * @param {*} parameters
     * @param {*} args 额外参数
     * @param {Function} callback 回调
     * @memberof MainViewBase
     */
    openTargtView(openView, view, tempContext, data, xData, $event, deResParameters, parameters, args, callback, fullargs) {
        const _this = this;
        if (!(openView === null || openView === void 0 ? void 0 : openView.openMode) || openView.openMode == 'INDEXVIEWTAB') {
            if (tempContext.srfdynainstid) {
                Object.assign(data, { srfdynainstid: tempContext.srfdynainstid });
            }
            if (tempContext.designModel && !tempContext.srfapplicationtag) {
                if (openView && openView.modelPath) {
                    Object.assign(tempContext, { viewpath: openView.modelPath });
                }
                Object.assign(data, {
                    viewStyle: openView.viewStyle,
                    userTag2: openView.userTag2,
                    title: view.title,
                });
                winMsg.openView('openRightView', tempContext, data, fullargs[0]);
            }
            else {
                const routePath = ViewTool.buildUpRoutePath(_this.$route, tempContext, deResParameters, parameters, args, data);
                _this.$router.push(routePath);
            }
        }
        else if (openView.openMode == 'POPUPAPP') {
            const routePath = ViewTool.buildUpRoutePath(_this.$route, tempContext, deResParameters, parameters, args, data);
            window.open('./#' + routePath, '_blank');
        }
        else if (openView.openMode == 'POPUPMODAL') {
            // 打开模态
            let container = _this.$appmodal.openModal(view, tempContext, data);
            container.subscribe((result) => {
                if (!result || !Object.is(result.ret, 'OK')) {
                    return;
                }
                callback(result, xData);
            });
        }
        else if (openView.openMode.indexOf('DRAWER') !== -1) {
            // 打开抽屉
            if (Object.is(openView.openMode, 'DRAWER_TOP')) {
                Object.assign(view, { isfullscreen: true });
                let container = _this.$appdrawer.openTopDrawer(view, Util.getViewProps(tempContext, data));
                container.subscribe((result) => {
                    callback(result, xData);
                });
            }
            else {
                Object.assign(view, { placement: openView.openMode });
                let container = _this.$appdrawer.openDrawer(view, Util.getViewProps(tempContext, data));
                container.subscribe((result) => {
                    callback(result, xData);
                });
            }
        }
        else if (openView.openMode == 'POPOVER') {
            // 打开气泡卡片
            Object.assign(view, { placement: openView.openMode });
            let container = _this.$apppopover.openPop($event, view, tempContext, data);
            container.subscribe((result) => {
                callback(result, xData);
            });
        }
        else {
            this.$warning(openView.title + this.$t('app.nosupport.unopen'), 'openTargtView');
        }
    }
    /**
     * 打开编辑数据视图
     *
     * @param {any[]} args 数据参数
     * @param {*} [fullargs] 全量参数
     * @param {*} [params]  额外参数
     * @param {*} [$event] 事件源数据
     * @param {*} [xData] 数据部件
     * @memberof MainViewBase
     */
    async opendata(args, fullargs, params, $event, xData) {
        var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
        const openAppViewLogic = this.viewInstance.findPSAppViewLogic('opendata');
        if (!openAppViewLogic || !openAppViewLogic.getPSAppUILogic()) {
            return;
        }
        let viewOpenAppUIlogic = openAppViewLogic.getPSAppUILogic();
        if (viewOpenAppUIlogic && ((_a = viewOpenAppUIlogic === null || viewOpenAppUIlogic === void 0 ? void 0 : viewOpenAppUIlogic.getParentPSModelObject()) === null || _a === void 0 ? void 0 : _a.M.viewType)) {
            // todo
        }
        if (viewOpenAppUIlogic === null || viewOpenAppUIlogic === void 0 ? void 0 : viewOpenAppUIlogic.getOpenDataPSAppView()) {
            const openViewRef = viewOpenAppUIlogic.getOpenDataPSAppView();
            const data = {};
            let tempContext = JSON.parse(JSON.stringify(this.context));
            // 准备参数
            if (args.length > 0) {
                Object.assign(tempContext, args[0]);
            }
            if ((openViewRef === null || openViewRef === void 0 ? void 0 : openViewRef.getPSNavigateContexts()) && ((_b = openViewRef === null || openViewRef === void 0 ? void 0 : openViewRef.getPSNavigateContexts()) === null || _b === void 0 ? void 0 : _b.length) > 0) {
                const localContext = Util.formatNavParam(openViewRef.getPSNavigateContexts());
                let _context = Util.computedNavData(fullargs[0], this.context, this.viewparams, localContext);
                Object.assign(tempContext, _context);
            }
            if ((openViewRef === null || openViewRef === void 0 ? void 0 : openViewRef.getPSNavigateParams()) && ((_c = openViewRef.getPSNavigateParams()) === null || _c === void 0 ? void 0 : _c.length) > 0) {
                const localViewParam = Util.formatNavParam(openViewRef.getPSNavigateParams());
                let _param = Util.computedNavData(fullargs[0], this.context, this.viewparams, localViewParam);
                Object.assign(data, _param);
            }
            if (fullargs && fullargs.length > 0 && fullargs[0]['srfprocessdefinitionkey'] && fullargs[0]['srftaskdefinitionkey']) {
                Object.assign(data, { processDefinitionKey: fullargs[0]['srfprocessdefinitionkey'] });
                Object.assign(data, { taskDefinitionKey: fullargs[0]['srftaskdefinitionkey'] });
                // 将待办任务标记为已读准备参数
                const that = this;
                if (that.quickGroupData && that.quickGroupData.hasOwnProperty('srfwf') && fullargs[0]['srftaskid']) {
                    Object.assign(data, { srfwf: that.quickGroupData['srfwf'] });
                    Object.assign(data, { srftaskid: fullargs[0]['srftaskid'] });
                }
            }
            let deResParameters = [];
            let parameters = [];
            const openView = openViewRef.getRefPSAppView();
            if (!openView)
                return;
            await openView.fill(true);
            if (openView.getPSAppDataEntity()) {
                // 处理视图关系参数 （只是路由打开模式才计算）
                if (!openView.openMode || openView.openMode == 'INDEXVIEWTAB' || openView.openMode == 'POPUPAPP') {
                    deResParameters = Util.formatAppDERSPath(tempContext, openView.getPSAppDERSPaths());
                }
            }
            if (!(openView === null || openView === void 0 ? void 0 : openView.openMode) || openView.openMode == 'INDEXVIEWTAB' || openView.openMode == 'POPUPAPP') {
                if (openView.getPSAppDataEntity()) {
                    parameters = [
                        {
                            pathName: Util.srfpluralize((_d = openView.getPSAppDataEntity()) === null || _d === void 0 ? void 0 : _d.codeName).toLowerCase(),
                            parameterName: (_e = openView.getPSAppDataEntity()) === null || _e === void 0 ? void 0 : _e.codeName.toLowerCase(),
                        },
                        {
                            pathName: 'views',
                            parameterName: openView.getPSDEViewCodeName().toLowerCase(),
                        },
                    ];
                }
                else {
                    parameters = [{ pathName: 'views', parameterName: (_f = openView.name) === null || _f === void 0 ? void 0 : _f.toLowerCase() }];
                }
            }
            else {
                if (openView === null || openView === void 0 ? void 0 : openView.getPSAppDataEntity()) {
                    parameters = [
                        {
                            pathName: (_h = Util.srfpluralize((_g = openView.getPSAppDataEntity()) === null || _g === void 0 ? void 0 : _g.codeName)) === null || _h === void 0 ? void 0 : _h.toLowerCase(),
                            parameterName: (_k = (_j = openView.getPSAppDataEntity()) === null || _j === void 0 ? void 0 : _j.codeName) === null || _k === void 0 ? void 0 : _k.toLowerCase(),
                        },
                    ];
                }
                if (openView && openView.modelPath) {
                    Object.assign(tempContext, { viewpath: openView.modelPath });
                }
            }
            // 关闭视图回调
            let callback = (result, xData) => {
                if (!result || !Object.is(result.ret, 'OK')) {
                    return;
                }
                if (!xData || !(xData.refresh instanceof Function)) {
                    return;
                }
                xData.refresh(result.datas);
            };
            // 重定向视图
            if (openView === null || openView === void 0 ? void 0 : openView.redirectView) {
                let targetRedirectView = openView;
                await targetRedirectView.fill();
                if (targetRedirectView.getRedirectPSAppViewRefs() && ((_l = targetRedirectView.getRedirectPSAppViewRefs()) === null || _l === void 0 ? void 0 : _l.length) === 0) {
                    return;
                }
                Object.assign(params, this.viewparams);
                const dataSetParams = {};
                if (targetRedirectView.enableCustomGetDataAction) {
                    const action = targetRedirectView.getGetDataPSAppDEAction();
                    if (action) {
                        Object.assign(dataSetParams, {
                            action: action.codeName,
                        });
                    }
                }
                const redirectUIService = await UIServiceRegister.getService(this.context, (_m = ModelTool.getViewAppEntityCodeName(targetRedirectView)) === null || _m === void 0 ? void 0 : _m.toLowerCase());
                await redirectUIService.loaded();
                const redirectAppEntity = targetRedirectView.getPSAppDataEntity();
                await ViewTool.calcRedirectContext(tempContext, fullargs[0], redirectAppEntity);
                const tagRedViewEntity = (_o = ModelTool.getViewAppEntityCodeName(this.viewInstance)) === null || _o === void 0 ? void 0 : _o.toLowerCase();
                redirectUIService.getRDAppView(tempContext, args[0][tagRedViewEntity], params, dataSetParams).then(async (result) => {
                    var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
                    if (!result) {
                        return;
                    }
                    if (result.isError) {
                        const data = (_a = result === null || result === void 0 ? void 0 : result.response) === null || _a === void 0 ? void 0 : _a.data;
                        this.$throw((data === null || data === void 0 ? void 0 : data.messages) ? data.messages : this.$t('components.500.errortext1'));
                        return;
                    }
                    const returnContext = result === null || result === void 0 ? void 0 : result.srftempcontext;
                    let targetOpenViewRef = null;
                    if (targetRedirectView.enableCustomGetDataAction) {
                        const typeFieldCodeName = (_b = targetRedirectView.getTypePSAppDEField()) === null || _b === void 0 ? void 0 : _b.codeName;
                        if (typeFieldCodeName && result.srfdata && result.srfdata[typeFieldCodeName.toLowerCase()]) {
                            targetOpenViewRef = (_c = targetRedirectView.getRedirectPSAppViewRefs()) === null || _c === void 0 ? void 0 : _c.find((item) => {
                                return item.name.toLowerCase() === result.srfdata[typeFieldCodeName.toLowerCase()].toLowerCase();
                            });
                        }
                    }
                    else {
                        targetOpenViewRef = result.multiform
                            ? (_d = targetRedirectView.getRedirectPSAppViewRefs()) === null || _d === void 0 ? void 0 : _d.find((item) => {
                                if (result.param.split(':')[1]) {
                                    return item.name === result.param.split(':')[1];
                                }
                                else {
                                    return item.name === result.param.split(':')[0];
                                }
                            })
                            : (_e = targetRedirectView.getRedirectPSAppViewRefs()) === null || _e === void 0 ? void 0 : _e.find((item) => {
                                return item.name === result.param.split(':')[0];
                            });
                    }
                    if (!targetOpenViewRef) {
                        return;
                    }
                    let targetOpenView = targetOpenViewRef.getRefPSAppView();
                    if (!targetOpenView) {
                        return;
                    }
                    await targetOpenView.fill(true);
                    if (targetRedirectView.enableCustomGetDataAction) {
                        const tagViewEntity = targetOpenView.getPSAppDataEntity();
                        if (tagViewEntity) {
                            await tagViewEntity.fill();
                            Object.assign(tempContext, {
                                [tagViewEntity.codeName.toLowerCase()]: args[0][tagRedViewEntity],
                            });
                        }
                    }
                    if (result && result.indextype) {
                        const indexContext = Util.formatNavParam([{ key: (_f = targetOpenView === null || targetOpenView === void 0 ? void 0 : targetOpenView.getPSAppDataEntity()) === null || _f === void 0 ? void 0 : _f.codeName, rawValue: false, value: this.appDeCodeName }], true);
                        const _context = Util.computedNavData(fullargs[0], tempContext, data, indexContext);
                        Object.assign(tempContext, _context);
                    }
                    if (targetOpenViewRef.getPSNavigateContexts() && targetOpenViewRef.getPSNavigateContexts().length > 0) {
                        let localContextRef = Util.formatNavParam(targetOpenViewRef.getPSNavigateContexts(), true);
                        let _context = Util.computedNavData(fullargs[0], tempContext, data, localContextRef);
                        Object.assign(tempContext, _context);
                    }
                    if (result && result.hasOwnProperty('srfsandboxtag')) {
                        Object.assign(tempContext, { srfsandboxtag: result['srfsandboxtag'] });
                        Object.assign(data, { srfsandboxtag: result['srfsandboxtag'] });
                    }
                    const view = {
                        viewname: 'app-view-shell',
                        height: targetOpenView.height,
                        width: targetOpenView.width,
                        title: this.$tl((_g = targetOpenView.getCapPSLanguageRes()) === null || _g === void 0 ? void 0 : _g.lanResTag, targetOpenView.caption),
                    };
                    if (!targetOpenView.openMode || targetOpenView.openMode == 'INDEXVIEWTAB' || targetOpenView.openMode == 'POPUPAPP') {
                        if (targetOpenView.getPSAppDataEntity()) {
                            deResParameters = Util.formatAppDERSPath(tempContext, targetOpenView.getPSAppDERSPaths());
                            parameters = [
                                {
                                    pathName: Util.srfpluralize((_h = targetOpenView.getPSAppDataEntity()) === null || _h === void 0 ? void 0 : _h.codeName).toLowerCase(),
                                    parameterName: (_j = targetOpenView.getPSAppDataEntity()) === null || _j === void 0 ? void 0 : _j.codeName.toLowerCase(),
                                },
                                {
                                    pathName: 'views',
                                    parameterName: targetOpenView.getPSDEViewCodeName().toLowerCase(),
                                },
                            ];
                        }
                        else {
                            parameters = [
                                {
                                    pathName: targetOpenView.codeName.toLowerCase(),
                                    parameterName: targetOpenView.codeName.toLowerCase(),
                                },
                            ];
                        }
                    }
                    else {
                        if (targetOpenView.getPSAppDataEntity()) {
                            parameters = [
                                {
                                    pathName: Util.srfpluralize((_k = targetOpenView.getPSAppDataEntity()) === null || _k === void 0 ? void 0 : _k.codeName).toLowerCase(),
                                    parameterName: (_l = targetOpenView.getPSAppDataEntity()) === null || _l === void 0 ? void 0 : _l.codeName.toLowerCase(),
                                },
                            ];
                        }
                        if (targetOpenView && targetOpenView.modelPath) {
                            Object.assign(tempContext, { viewpath: targetOpenView.modelPath });
                        }
                    }
                    this.openTargtView(targetOpenView, view, tempContext, data, xData, $event, deResParameters, parameters, args, callback, fullargs);
                });
            }
            else {
                if (fullargs && fullargs.copymode) {
                    Object.assign(data, { copymode: true });
                }
                let view = {
                    viewname: 'app-view-shell',
                    height: openView.height,
                    width: openView.width,
                    title: this.$tl((_p = openView.getCapPSLanguageRes()) === null || _p === void 0 ? void 0 : _p.lanResTag, openView.caption),
                };
                this.openTargtView(openView, view, tempContext, data, xData, $event, deResParameters, parameters, args, callback, fullargs);
            }
        }
        else {
            LogUtil.warn(this.$t('app.nosupport.unassign'), 'opendata');
        }
    }
    /**
     * 打开新建数据视图
     *
     * @param {any[]} args 数据参数
     * @param {*} [fullargs] 全量参数
     * @param {*} [params]  额外参数
     * @param {*} [$event] 事件源数据
     * @param {*} [xData] 数据部件
     * @memberof MainViewBase
     */
    async newdata(args, fullargs, params, $event, xData) {
        var _a, _b, _c, _d, _e, _f, _g, _h, _j;
        const newAppViewLogic = this.viewInstance.findPSAppViewLogic('newdata');
        if (!newAppViewLogic || !newAppViewLogic.getPSAppUILogic()) {
            return;
        }
        let viewNewAppUIlogic = newAppViewLogic.getPSAppUILogic();
        if (viewNewAppUIlogic) {
            if (viewNewAppUIlogic.enableWizardAdd) {
                let wizardPSAppView;
                if (viewNewAppUIlogic.getWizardPSAppView()) {
                    wizardPSAppView = viewNewAppUIlogic.getWizardPSAppView().getRefPSAppView();
                    if (!wizardPSAppView)
                        return;
                    await wizardPSAppView.fill();
                    const view = {
                        viewname: 'app-view-shell',
                        height: wizardPSAppView.height,
                        width: wizardPSAppView.width,
                        title: this.$tl((_a = wizardPSAppView.getCapPSLanguageRes()) === null || _a === void 0 ? void 0 : _a.lanResTag, wizardPSAppView.caption),
                    };
                    const tempContext = JSON.parse(JSON.stringify(this.context));
                    if (wizardPSAppView && wizardPSAppView.modelPath) {
                        Object.assign(tempContext, { viewpath: wizardPSAppView.modelPath });
                    }
                    let container = this.$appmodal.openModal(view, tempContext, args[0]);
                    container.subscribe(async (result) => {
                        var _a;
                        if (!result || !Object.is(result.ret, 'OK')) {
                            return;
                        }
                        if (result && result.datas && result.datas.length > 0) {
                            const newDataAppViews = viewNewAppUIlogic.getNewDataPSAppViews();
                            if (newDataAppViews) {
                                const targetNewDataAppViewRef = newDataAppViews.find((item) => {
                                    return item.refMode === result.datas[0].srfkey;
                                });
                                if (!targetNewDataAppViewRef)
                                    return;
                                Object.assign(tempContext, Util.formatNavParam(targetNewDataAppViewRef.getPSNavigateContexts()));
                                const targetNewDataAppView = targetNewDataAppViewRef.getRefPSAppView();
                                if (!targetNewDataAppView)
                                    return;
                                await targetNewDataAppView.fill();
                                const view = {
                                    viewname: 'app-view-shell',
                                    height: targetNewDataAppView.height,
                                    width: targetNewDataAppView.width,
                                    title: this.$tl((_a = targetNewDataAppView.getCapPSLanguageRes()) === null || _a === void 0 ? void 0 : _a.lanResTag, targetNewDataAppView.caption),
                                };
                                if (targetNewDataAppView && targetNewDataAppView.modelPath) {
                                    Object.assign(tempContext, { viewpath: targetNewDataAppView.modelPath });
                                }
                                let container = this.$appmodal.openModal(view, tempContext, args[0]);
                                container.subscribe((result) => {
                                    if (!result || !Object.is(result.ret, 'OK')) {
                                        return;
                                    }
                                    if (result && result.datas && result.datas.length > 0) {
                                        if (!xData || !(xData.refresh instanceof Function)) {
                                            return;
                                        }
                                        xData.refresh(result.datas);
                                    }
                                });
                            }
                        }
                    });
                }
            }
            else if (viewNewAppUIlogic.enableBatchAdd) {
                let batchAddPSAppViews = [];
                let minorPSAppDERSs = this.viewInstance.getPSAppDataEntity().getMinorPSAppDERSs();
                if (!minorPSAppDERSs)
                    return;
                await minorPSAppDERSs[0].fill();
                if (viewNewAppUIlogic.getBatchAddPSAppViews() && viewNewAppUIlogic.getBatchAddPSAppViews().length > 0) {
                    batchAddPSAppViews = viewNewAppUIlogic.getBatchAddPSAppViews();
                }
                if (batchAddPSAppViews.length == 0) {
                    this.$warning(this.$t('app.warn.nton'), 'newdata');
                    return;
                }
                let openViewModel = batchAddPSAppViews.find((item) => {
                    return item.refMode && item.refMode !== this.context.srfparentdename.toUpperCase();
                });
                let otherViewModel = batchAddPSAppViews.find((item) => {
                    return item.refMode && item.refMode == this.context.srfparentdename.toUpperCase();
                });
                if (!openViewModel) {
                    this.$warning(this.$t('app.warn.nton'), 'newdata');
                    return;
                }
                let openView = openViewModel.getRefPSAppView();
                await openView.fill(true);
                let otherView;
                if (otherViewModel) {
                    otherView = otherViewModel.getRefPSAppView();
                    await otherView.fill(true);
                }
                let view = {
                    viewname: 'app-view-shell',
                    height: openView.height,
                    width: openView.width,
                    title: this.$tl((_b = openView.getCapPSLanguageRes()) === null || _b === void 0 ? void 0 : _b.lanResTag, openView.caption),
                };
                let tempContext = Util.deepCopy(this.context);
                if (openView && openView.modelPath) {
                    Object.assign(tempContext, { viewpath: openView.modelPath });
                }
                let container = this.$appmodal.openModal(view, tempContext, args[0]);
                container.subscribe((result) => {
                    if (!result || !Object.is(result.ret, 'OK')) {
                        return;
                    }
                    if (result.datas && result.datas.length == 0) {
                        return;
                    }
                    let requestParam = [];
                    const getActiveField = (path) => {
                        const activeAppDER = minorPSAppDERSs.find((item) => {
                            return item.getMajorPSAppDataEntity().modelPath == path;
                        });
                        return activeAppDER === null || activeAppDER === void 0 ? void 0 : activeAppDER.getParentPSAppDEField();
                    };
                    result.datas.forEach((record) => {
                        var _a, _b, _c;
                        let tempParam = {};
                        if (otherView) {
                            tempParam[(_a = getActiveField(otherView.getPSAppDataEntity().modelPath)) === null || _a === void 0 ? void 0 : _a.codeName.toLowerCase()] = this.context['srfparentkey'];
                        }
                        if (getActiveField(openView.getPSAppDataEntity().modelPath)) {
                            tempParam[(_b = getActiveField(openView.getPSAppDataEntity().modelPath)) === null || _b === void 0 ? void 0 : _b.codeName.toLowerCase()] = record.srfkey;
                        }
                        else {
                            tempParam[(_c = ModelTool.getAppEntityKeyField(openView === null || openView === void 0 ? void 0 : openView.getPSAppDataEntity())) === null || _c === void 0 ? void 0 : _c.codeName.toLowerCase()] = record.srfkey;
                        }
                        requestParam.push(tempParam);
                    });
                    this.appEntityService.createBatch(JSON.parse(JSON.stringify(this.context)), requestParam, true).then((response) => {
                        if (!response || response.status !== 200) {
                            this.$throw(this.$t('app.warn.batcherror'), 'newdata');
                            return;
                        }
                        if (!xData || !(xData.refresh instanceof Function)) {
                            return;
                        }
                        xData.refresh(result.datas);
                    });
                });
            }
            else if (viewNewAppUIlogic.batchAddOnly) {
                LogUtil.warn(this.$t('app.warn.unbatchadd'));
            }
            else if (viewNewAppUIlogic.getNewDataPSAppView()) {
                const _this = this;
                const newviewRef = viewNewAppUIlogic.getNewDataPSAppView();
                if (!newviewRef)
                    return;
                const data = {};
                if (args[0].srfsourcekey) {
                    data.srfsourcekey = args[0].srfsourcekey;
                }
                if (fullargs && fullargs.copymode) {
                    Object.assign(data, { copymode: fullargs.copymode });
                }
                let tempContext = JSON.parse(JSON.stringify(this.context));
                const dataview = newviewRef.getRefPSAppView();
                if (!dataview)
                    return;
                await dataview.fill(true);
                if (dataview.getPSAppDataEntity() && tempContext[(_c = dataview.getPSAppDataEntity()) === null || _c === void 0 ? void 0 : _c.codeName.toLowerCase()]) {
                    delete tempContext[(_d = dataview.getPSAppDataEntity()) === null || _d === void 0 ? void 0 : _d.codeName.toLowerCase()];
                }
                if (args.length > 0) {
                    Object.assign(tempContext, args[0]);
                }
                if (newviewRef.getPSNavigateContexts() && newviewRef.getPSNavigateContexts().length > 0) {
                    const localContext = Util.formatNavParam(newviewRef.getPSNavigateContexts());
                    let _context = Util.computedNavData(fullargs[0], this.context, this.viewparams, localContext);
                    Object.assign(tempContext, _context);
                }
                if (newviewRef.getPSNavigateParams() && newviewRef.getPSNavigateParams().length > 0) {
                    const localViewParam = Util.formatNavParam(newviewRef.getPSNavigateParams());
                    let _param = Util.computedNavData(fullargs[0], this.context, this.viewparams, localViewParam);
                    Object.assign(data, _param);
                }
                let deResParameters = [];
                let parameters = [];
                if (dataview.getPSAppDataEntity()) {
                    // 处理视图关系参数 （只是路由打开模式才计算）
                    if (!dataview.openMode || dataview.openMode == 'INDEXVIEWTAB' || dataview.openMode == 'POPUPAPP') {
                        deResParameters = Util.formatAppDERSPath(tempContext, dataview === null || dataview === void 0 ? void 0 : dataview.getPSAppDERSPaths());
                    }
                }
                if (!dataview.openMode || dataview.openMode == 'INDEXVIEWTAB' || dataview.openMode == 'POPUPAPP') {
                    if (dataview.getPSAppDataEntity()) {
                        parameters = [
                            {
                                pathName: Util.srfpluralize((_e = dataview.getPSAppDataEntity()) === null || _e === void 0 ? void 0 : _e.codeName).toLowerCase(),
                                parameterName: (_f = dataview.getPSAppDataEntity()) === null || _f === void 0 ? void 0 : _f.codeName.toLowerCase(),
                            },
                            {
                                pathName: 'views',
                                parameterName: dataview.getPSDEViewCodeName().toLowerCase(),
                            },
                        ];
                    }
                    else {
                        parameters = [{ pathName: 'views', parameterName: dataview === null || dataview === void 0 ? void 0 : dataview.codeName.toLowerCase() }];
                    }
                }
                else {
                    if (dataview.getPSAppDataEntity()) {
                        parameters = [
                            {
                                pathName: Util.srfpluralize((_g = dataview.getPSAppDataEntity()) === null || _g === void 0 ? void 0 : _g.codeName).toLowerCase(),
                                parameterName: (_h = dataview.getPSAppDataEntity()) === null || _h === void 0 ? void 0 : _h.codeName.toLowerCase(),
                            },
                        ];
                    }
                    if (dataview && dataview.modelPath) {
                        Object.assign(tempContext, { viewpath: dataview.modelPath });
                    }
                }
                let view = {
                    viewname: 'app-view-shell',
                    height: dataview.height,
                    width: dataview.width,
                    title: this.$tl((_j = dataview.getCapPSLanguageRes()) === null || _j === void 0 ? void 0 : _j.lanResTag, dataview.caption),
                };
                // 关闭视图回调
                let callback = (result, xData) => {
                    if (!result || !Object.is(result.ret, 'OK')) {
                        return;
                    }
                    if (!xData || !(xData.refresh instanceof Function)) {
                        return;
                    }
                    xData.refresh(result.datas);
                };
                if (!dataview.openMode || dataview.openMode == 'INDEXVIEWTAB') {
                    // 打开顶级分页视图
                    const _data = { w: new Date().getTime() };
                    Object.assign(_data, data);
                    if (tempContext.srfdynainstid) {
                        Object.assign(_data, { srfdynainstid: tempContext.srfdynainstid });
                    }
                    if (tempContext.designModel && !tempContext.srfapplicationtag) {
                        if (dataview && dataview.modelPath) {
                            Object.assign(tempContext, { viewpath: dataview.modelPath });
                        }
                        winMsg.openView('openRightView', tempContext, _data, fullargs);
                    }
                    else {
                        const routePath = ViewTool.buildUpRoutePath(_this.$route, tempContext, deResParameters, parameters, args, _data);
                        _this.$router.push(routePath);
                    }
                }
                else if (dataview.openMode == 'POPUPAPP') {
                    // 独立程序打开
                    if (tempContext.designModel && !tempContext.srfapplicationtag) {
                        if (dataview && dataview.modelPath) {
                            Object.assign(tempContext, { viewpath: dataview.modelPath });
                        }
                        Object.assign(data, {
                            viewStyle: dataview.viewStyle,
                            userTag2: dataview.userTag2,
                            title: view.title,
                        });
                        winMsg.openView('openRightView', tempContext, data, fullargs);
                    }
                    else {
                        const routePath = ViewTool.buildUpRoutePath(_this.$route, tempContext, deResParameters, parameters, args, data);
                        window.open('./#' + routePath, '_blank');
                    }
                }
                else if (dataview.openMode == 'POPUPMODAL') {
                    // 打开模态
                    let container = _this.$appmodal.openModal(view, tempContext, data);
                    container.subscribe((result) => {
                        if (!result || !Object.is(result.ret, 'OK')) {
                            return;
                        }
                        callback(result, xData);
                    });
                }
                else if (dataview.openMode.indexOf('DRAWER') !== -1) {
                    // 打开抽屉
                    if (Object.is(dataview.openMode, 'DRAWER_TOP')) {
                        Object.assign(view, { isfullscreen: true });
                        let container = _this.$appdrawer.openTopDrawer(view, Util.getViewProps(tempContext, data));
                        container.subscribe((result) => {
                            callback(result, xData);
                        });
                    }
                    else {
                        Object.assign(view, { placement: dataview.openMode });
                        let container = _this.$appdrawer.openDrawer(view, Util.getViewProps(tempContext, data));
                        container.subscribe((result) => {
                            callback(result, xData);
                        });
                    }
                }
                else if (dataview.openMode == 'POPOVER') {
                    // 打开气泡卡片
                    Object.assign(view, { placement: dataview.openMode });
                    let container = _this.$apppopover.openPop($event, view, tempContext, data);
                    container.subscribe((result) => {
                        callback(result, xData);
                    });
                }
                else {
                    this.$warning(`${dataview.title}${this.$t('app.nosupport.unopen')}`, 'newdata');
                }
            }
            else {
                LogUtil.warn(this.$t('app.nosupport.unassign'), 'newdata');
            }
        }
        else {
            LogUtil.warn(this.$t('app.nosupport.unassign'), 'newdata');
        }
    }
}
