import { Subject } from 'rxjs'; import { GlobalService, IPSAppDEEditView, UIServiceRegister } from '@ibizstudio/runtime'; import { throttle, LogUtil, MainViewInterface, ModelTool, Util, ViewTool } from '@ibizstudio/runtime'; import { ViewBase } from './view-base'; import { IPSAppDataEntity, IPSAppDEField, IPSAppDERedirectView, IPSAppDERS, IPSAppDEView, IPSAppUILogicRefView, IPSAppUINewDataLogic, IPSAppUIOpenDataLogic, IPSAppView, IPSAppViewLogic, IPSAppViewRef, IPSDEToolbar, IPSDEToolbarItem, IPSNavigateContext, IPSNavigateParam, } from '@ibizstudio/runtime'; import { AppViewLogicService } from '../app-service'; import { winMsg } from '../ibz-studio-plugins'; /** * 主数据视图基类 * * @export * @class MainViewBase * @extends {ViewBase} * @implements {MainViewInterface} */ export class MainViewBase extends ViewBase implements MainViewInterface { /** * 视图引擎 * * @public * @type {*} * @memberof MainViewBase */ engine!: any; /** * 视图实例 * * @memberof MainViewBase */ declare viewInstance: IPSAppDEView; /** * 引擎初始化 * * @param {*} [opts={}] 引擎参数 * @memberof MainViewBase */ engineInit(opts: any = {}): void {} /** * 视图初始化 * * @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() { return (ModelTool.getAppEntityKeyField(this.viewInstance?.getPSAppDataEntity() as IPSAppDataEntity) as IPSAppDEField)?.codeName || ''; } /** * 应用实体映射实体名称 * * @readonly * @memberof MainViewBase */ get deName() { return (this.viewInstance?.getPSAppDataEntity() as any)?.getPSDEName() || ''; } /** * 应用实体主信息属性codeName * * @readonly * @memberof MainViewBase */ get appDeMajorFieldName() { return (ModelTool.getAppEntityMajorField(this.viewInstance?.getPSAppDataEntity() as IPSAppDataEntity) as IPSAppDEField)?.codeName || ''; } /** * 初始化工具栏数据 * * @memberof MainViewBase */ initViewToolBar() { const targetViewToolbarItems: any[] = []; const viewToolBar: IPSDEToolbar = ModelTool.findPSControlByType('TOOLBAR', this.viewInstance.getPSControls()); if (viewToolBar && viewToolBar.getPSDEToolbarItems()) { viewToolBar.getPSDEToolbarItems()?.forEach((toolbarItem: IPSDEToolbarItem) => { 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) as string, this.context); } this.initViewToolBar(); } /** * 初始化应用界面服务 * * @memberof ViewBase */ async initAppUIService() { if (this.viewInstance && this.viewInstance.getPSAppDataEntity() && ModelTool.getViewAppEntityCodeName(this.viewInstance)) { this.appUIService = await UIServiceRegister.getService(this.context, (ModelTool.getViewAppEntityCodeName(this.viewInstance) as string)?.toLowerCase()); if (this.appUIService) { await this.appUIService.loaded(); } } } /** * 处理指定视图控制关系将父键转为父实体上下文 * * @memberof MainViewBase */ async handleviewRes() { if ((this.viewInstance as IPSAppDEView)?.getParentPSAppDataEntity?.()) { // 先从导航上下文取数,没有再从导航参数(URL)取数,如果导航上下文和导航参数都没有则为null const parentEntityCodeName = ((this.viewInstance as IPSAppDEView).getParentPSAppDataEntity() as IPSAppDataEntity).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() { if (!(this.toolbarModels && this.toolbarModels.length > 0)) { return null; } return ( { throttle(this.handleItemClick, [data, $event], this); }} > ); } /** * 渲染主信息标题 * * @memberof MainViewBase */ renderCaptionInfo() { let innerHTML: string = ''; if (this.model.srfCaption) { innerHTML = this.model.srfCaption; } if ((this.viewInstance as IPSAppDEEditView).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: any, $event: any) { if (this.Environment && this.Environment.isPreviewMode) { return; } const viewToolBar: IPSDEToolbar = ModelTool.findPSControlByType('TOOLBAR', this.viewInstance.getPSControls()); let toolbarTag: string = '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: any) { const { targetCtrlName, targetCtrlParam, targetCtrlEvent } = super.computeTargetCtrlData(controlInstance); if (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: any, view: any, tempContext: any, data: any, xData: any, $event: any, deResParameters: any, parameters: any, args: any, callback: Function, fullargs?: any) { const _this: any = this; if (!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: Subject = _this.$appmodal.openModal(view, tempContext, data); container.subscribe((result: any) => { 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: Subject = _this.$appdrawer.openTopDrawer(view, Util.getViewProps(tempContext, data)); container.subscribe((result: any) => { callback(result, xData); }); } else { Object.assign(view, { placement: openView.openMode }); let container: Subject = _this.$appdrawer.openDrawer(view, Util.getViewProps(tempContext, data)); container.subscribe((result: any) => { callback(result, xData); }); } } else if (openView.openMode == 'POPOVER') { // 打开气泡卡片 Object.assign(view, { placement: openView.openMode }); let container: Subject = _this.$apppopover.openPop($event, view, tempContext, data); container.subscribe((result: any) => { 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: any[], fullargs?: any, params?: any, $event?: any, xData?: any) { const openAppViewLogic: IPSAppViewLogic | null = this.viewInstance.findPSAppViewLogic('opendata'); if (!openAppViewLogic || !openAppViewLogic.getPSAppUILogic()) { return; } let viewOpenAppUIlogic: IPSAppUIOpenDataLogic | undefined | null = openAppViewLogic.getPSAppUILogic() as IPSAppUIOpenDataLogic; if (viewOpenAppUIlogic && viewOpenAppUIlogic?.getParentPSModelObject()?.M.viewType) { // todo } if (viewOpenAppUIlogic?.getOpenDataPSAppView()) { const openViewRef: IPSAppUILogicRefView = viewOpenAppUIlogic.getOpenDataPSAppView() as IPSAppUILogicRefView; const data: any = {}; let tempContext = JSON.parse(JSON.stringify(this.context)); // 准备参数 if (args.length > 0) { Object.assign(tempContext, args[0]); } if (openViewRef?.getPSNavigateContexts() && (openViewRef?.getPSNavigateContexts() as IPSNavigateContext[])?.length > 0) { const localContext = Util.formatNavParam(openViewRef.getPSNavigateContexts()); let _context: any = Util.computedNavData(fullargs[0], this.context, this.viewparams, localContext); Object.assign(tempContext, _context); } if (openViewRef?.getPSNavigateParams() && (openViewRef.getPSNavigateParams() as IPSNavigateParam[])?.length > 0) { const localViewParam = Util.formatNavParam(openViewRef.getPSNavigateParams()); let _param: any = 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: any = 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: any[] = []; let parameters: any[] = []; const openView: IPSAppView | null = 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 as IPSAppDEView).getPSAppDERSPaths()); } } if (!openView?.openMode || openView.openMode == 'INDEXVIEWTAB' || openView.openMode == 'POPUPAPP') { if (openView.getPSAppDataEntity()) { parameters = [ { pathName: Util.srfpluralize((openView.getPSAppDataEntity() as IPSAppDataEntity)?.codeName).toLowerCase(), parameterName: (openView.getPSAppDataEntity() as IPSAppDataEntity)?.codeName.toLowerCase(), }, { pathName: 'views', parameterName: ((openView as IPSAppDEView).getPSDEViewCodeName() as string).toLowerCase(), }, ]; } else { parameters = [{ pathName: 'views', parameterName: openView.name?.toLowerCase() }]; } } else { if (openView?.getPSAppDataEntity()) { parameters = [ { pathName: Util.srfpluralize((openView.getPSAppDataEntity() as IPSAppDataEntity)?.codeName)?.toLowerCase(), parameterName: (openView.getPSAppDataEntity() as IPSAppDataEntity)?.codeName?.toLowerCase(), }, ]; } if (openView && openView.modelPath) { Object.assign(tempContext, { viewpath: openView.modelPath }); } } // 关闭视图回调 let callback: Function = (result: any, xData: any) => { if (!result || !Object.is(result.ret, 'OK')) { return; } if (!xData || !(xData.refresh instanceof Function)) { return; } xData.refresh(result.datas); }; // 重定向视图 if (openView?.redirectView) { let targetRedirectView: IPSAppDERedirectView = openView as IPSAppDERedirectView; await targetRedirectView.fill(); if (targetRedirectView.getRedirectPSAppViewRefs() && targetRedirectView.getRedirectPSAppViewRefs()?.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: any = await UIServiceRegister.getService(this.context, (ModelTool.getViewAppEntityCodeName(targetRedirectView) as string)?.toLowerCase()); await redirectUIService.loaded(); const redirectAppEntity: IPSAppDataEntity | null = targetRedirectView.getPSAppDataEntity(); await ViewTool.calcRedirectContext(tempContext, fullargs[0], redirectAppEntity); const tagRedViewEntity = (ModelTool.getViewAppEntityCodeName(this.viewInstance) as string)?.toLowerCase(); redirectUIService.getRDAppView(tempContext, args[0][tagRedViewEntity], params, dataSetParams).then(async (result: any) => { if (!result) { return; } if (result.isError) { const data = result?.response?.data; this.$throw(data?.messages ? data.messages : this.$t('components.500.errortext1')); return; } const returnContext: any = result?.srftempcontext; let targetOpenViewRef: IPSAppViewRef | null | undefined = null; if (targetRedirectView.enableCustomGetDataAction) { const typeFieldCodeName = targetRedirectView.getTypePSAppDEField()?.codeName; if (typeFieldCodeName && result.srfdata && result.srfdata[typeFieldCodeName.toLowerCase()]) { targetOpenViewRef = targetRedirectView.getRedirectPSAppViewRefs()?.find((item: any) => { return item.name.toLowerCase() === result.srfdata[typeFieldCodeName.toLowerCase()].toLowerCase(); }); } } else { targetOpenViewRef = result.multiform ? targetRedirectView.getRedirectPSAppViewRefs()?.find((item: IPSAppViewRef) => { if (result.param.split(':')[1]) { return item.name === result.param.split(':')[1]; } else { return item.name === result.param.split(':')[0]; } }) : targetRedirectView.getRedirectPSAppViewRefs()?.find((item: IPSAppViewRef) => { return item.name === result.param.split(':')[0]; }); } if (!targetOpenViewRef) { return; } let targetOpenView: IPSAppView | null = 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: any = Util.formatNavParam([{ key: targetOpenView?.getPSAppDataEntity()?.codeName, rawValue: false, value: this.appDeCodeName }], true); const _context: any = Util.computedNavData(fullargs[0], tempContext, data, indexContext); Object.assign(tempContext, _context); } if (targetOpenViewRef.getPSNavigateContexts() && (targetOpenViewRef.getPSNavigateContexts() as IPSNavigateContext[]).length > 0) { let localContextRef: any = Util.formatNavParam(targetOpenViewRef.getPSNavigateContexts(), true); let _context: any = 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: any = { viewname: 'app-view-shell', height: targetOpenView.height, width: targetOpenView.width, title: this.$tl(targetOpenView.getCapPSLanguageRes()?.lanResTag, targetOpenView.caption), }; if (!targetOpenView.openMode || targetOpenView.openMode == 'INDEXVIEWTAB' || targetOpenView.openMode == 'POPUPAPP') { if (targetOpenView.getPSAppDataEntity()) { deResParameters = Util.formatAppDERSPath(tempContext, (targetOpenView as IPSAppDEView).getPSAppDERSPaths()); parameters = [ { pathName: Util.srfpluralize((targetOpenView.getPSAppDataEntity() as IPSAppDataEntity)?.codeName).toLowerCase(), parameterName: (targetOpenView.getPSAppDataEntity() as IPSAppDataEntity)?.codeName.toLowerCase(), }, { pathName: 'views', parameterName: ((targetOpenView as IPSAppDEView).getPSDEViewCodeName() as string).toLowerCase(), }, ]; } else { parameters = [ { pathName: targetOpenView.codeName.toLowerCase(), parameterName: targetOpenView.codeName.toLowerCase(), }, ]; } } else { if (targetOpenView.getPSAppDataEntity()) { parameters = [ { pathName: Util.srfpluralize((targetOpenView.getPSAppDataEntity() as IPSAppDataEntity)?.codeName).toLowerCase(), parameterName: (targetOpenView.getPSAppDataEntity() as IPSAppDataEntity)?.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: any = { viewname: 'app-view-shell', height: openView.height, width: openView.width, title: this.$tl(openView.getCapPSLanguageRes()?.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: any[], fullargs?: any, params?: any, $event?: any, xData?: any) { const newAppViewLogic: IPSAppViewLogic | null = this.viewInstance.findPSAppViewLogic('newdata'); if (!newAppViewLogic || !newAppViewLogic.getPSAppUILogic()) { return; } let viewNewAppUIlogic: IPSAppUINewDataLogic | undefined | null = newAppViewLogic.getPSAppUILogic() as IPSAppUINewDataLogic; if (viewNewAppUIlogic) { if (viewNewAppUIlogic.enableWizardAdd) { let wizardPSAppView: IPSAppView | null; if (viewNewAppUIlogic.getWizardPSAppView()) { wizardPSAppView = (viewNewAppUIlogic.getWizardPSAppView() as IPSAppUILogicRefView).getRefPSAppView(); if (!wizardPSAppView) return; await wizardPSAppView.fill(); const view: any = { viewname: 'app-view-shell', height: wizardPSAppView.height, width: wizardPSAppView.width, title: this.$tl(wizardPSAppView.getCapPSLanguageRes()?.lanResTag, wizardPSAppView.caption), }; const tempContext: any = JSON.parse(JSON.stringify(this.context)); if (wizardPSAppView && wizardPSAppView.modelPath) { Object.assign(tempContext, { viewpath: wizardPSAppView.modelPath }); } let container: Subject = this.$appmodal.openModal(view, tempContext, args[0]); container.subscribe(async (result: any) => { if (!result || !Object.is(result.ret, 'OK')) { return; } if (result && result.datas && result.datas.length > 0) { const newDataAppViews: Array | null = (viewNewAppUIlogic as IPSAppUINewDataLogic).getNewDataPSAppViews(); if (newDataAppViews) { const targetNewDataAppViewRef: IPSAppUILogicRefView | undefined | null = newDataAppViews.find((item: IPSAppUILogicRefView) => { return item.refMode === result.datas[0].srfkey; }); if (!targetNewDataAppViewRef) return; Object.assign(tempContext, Util.formatNavParam(targetNewDataAppViewRef.getPSNavigateContexts())); const targetNewDataAppView: IPSAppView | null = targetNewDataAppViewRef.getRefPSAppView(); if (!targetNewDataAppView) return; await targetNewDataAppView.fill(); const view: any = { viewname: 'app-view-shell', height: targetNewDataAppView.height, width: targetNewDataAppView.width, title: this.$tl(targetNewDataAppView.getCapPSLanguageRes()?.lanResTag, targetNewDataAppView.caption), }; if (targetNewDataAppView && targetNewDataAppView.modelPath) { Object.assign(tempContext, { viewpath: targetNewDataAppView.modelPath }); } let container: Subject = this.$appmodal.openModal(view, tempContext, args[0]); container.subscribe((result: any) => { 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: Array = []; let minorPSAppDERSs: IPSAppDERS[] = (this.viewInstance.getPSAppDataEntity() as IPSAppDataEntity).getMinorPSAppDERSs() as IPSAppDERS[]; if (!minorPSAppDERSs) return; await (minorPSAppDERSs[0] as IPSAppDERS).fill(); if (viewNewAppUIlogic.getBatchAddPSAppViews() && (viewNewAppUIlogic.getBatchAddPSAppViews() as IPSAppUILogicRefView[]).length > 0) { batchAddPSAppViews = viewNewAppUIlogic.getBatchAddPSAppViews() as IPSAppUILogicRefView[]; } if (batchAddPSAppViews.length == 0) { this.$warning(this.$t('app.warn.nton'), 'newdata'); return; } let openViewModel: IPSAppUILogicRefView | undefined = batchAddPSAppViews.find((item: IPSAppUILogicRefView) => { return item.refMode && item.refMode !== this.context.srfparentdename.toUpperCase(); }); let otherViewModel: IPSAppUILogicRefView | undefined = batchAddPSAppViews.find((item: IPSAppUILogicRefView) => { return item.refMode && item.refMode == this.context.srfparentdename.toUpperCase(); }); if (!openViewModel) { this.$warning(this.$t('app.warn.nton'), 'newdata'); return; } let openView: IPSAppDEView = openViewModel.getRefPSAppView() as IPSAppDEView; await openView.fill(true); let otherView: IPSAppDEView; if (otherViewModel) { otherView = otherViewModel.getRefPSAppView() as IPSAppDEView; await otherView.fill(true); } let view: any = { viewname: 'app-view-shell', height: openView.height, width: openView.width, title: this.$tl(openView.getCapPSLanguageRes()?.lanResTag, openView.caption), }; let tempContext: any = Util.deepCopy(this.context); if (openView && openView.modelPath) { Object.assign(tempContext, { viewpath: openView.modelPath }); } let container: Subject = this.$appmodal.openModal(view, tempContext, args[0]); container.subscribe((result: any) => { if (!result || !Object.is(result.ret, 'OK')) { return; } if (result.datas && result.datas.length == 0) { return; } let requestParam: Array = []; const getActiveField: Function = (path: string) => { const activeAppDER = minorPSAppDERSs.find((item: IPSAppDERS) => { return (item.getMajorPSAppDataEntity() as IPSAppDataEntity).modelPath == path; }); return activeAppDER?.getParentPSAppDEField(); }; result.datas.forEach((record: any) => { let tempParam: any = {}; if (otherView) { tempParam[getActiveField((otherView.getPSAppDataEntity() as IPSAppDataEntity).modelPath)?.codeName.toLowerCase()] = this.context['srfparentkey']; } if (getActiveField((openView.getPSAppDataEntity() as IPSAppDataEntity).modelPath)) { tempParam[getActiveField((openView.getPSAppDataEntity() as IPSAppDataEntity).modelPath)?.codeName.toLowerCase()] = record.srfkey; } else { tempParam[(ModelTool.getAppEntityKeyField(openView?.getPSAppDataEntity() as IPSAppDataEntity) as IPSAppDEField)?.codeName.toLowerCase()] = record.srfkey; } requestParam.push(tempParam); }); this.appEntityService.createBatch(JSON.parse(JSON.stringify(this.context)), requestParam, true).then((response: any) => { 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: any = this; const newviewRef: IPSAppUILogicRefView | null = viewNewAppUIlogic.getNewDataPSAppView(); if (!newviewRef) return; const data: any = {}; if (args[0].srfsourcekey) { data.srfsourcekey = args[0].srfsourcekey; } if (fullargs && (fullargs as any).copymode) { Object.assign(data, { copymode: (fullargs as any).copymode }); } let tempContext = JSON.parse(JSON.stringify(this.context)); const dataview: IPSAppView | null = newviewRef.getRefPSAppView(); if (!dataview) return; await dataview.fill(true); if (dataview.getPSAppDataEntity() && tempContext[(dataview.getPSAppDataEntity() as IPSAppDataEntity)?.codeName.toLowerCase()]) { delete tempContext[(dataview.getPSAppDataEntity() as IPSAppDataEntity)?.codeName.toLowerCase()]; } if (args.length > 0) { Object.assign(tempContext, args[0]); } if (newviewRef.getPSNavigateContexts() && (newviewRef.getPSNavigateContexts() as IPSNavigateContext[]).length > 0) { const localContext = Util.formatNavParam(newviewRef.getPSNavigateContexts()); let _context: any = Util.computedNavData(fullargs[0], this.context, this.viewparams, localContext); Object.assign(tempContext, _context); } if (newviewRef.getPSNavigateParams() && (newviewRef.getPSNavigateParams() as IPSNavigateParam[]).length > 0) { const localViewParam = Util.formatNavParam(newviewRef.getPSNavigateParams()); let _param: any = Util.computedNavData(fullargs[0], this.context, this.viewparams, localViewParam); Object.assign(data, _param); } let deResParameters: any[] = []; let parameters: any[] = []; if (dataview.getPSAppDataEntity()) { // 处理视图关系参数 (只是路由打开模式才计算) if (!dataview.openMode || dataview.openMode == 'INDEXVIEWTAB' || dataview.openMode == 'POPUPAPP') { deResParameters = Util.formatAppDERSPath(tempContext, (dataview as IPSAppDEView)?.getPSAppDERSPaths()); } } if (!dataview.openMode || dataview.openMode == 'INDEXVIEWTAB' || dataview.openMode == 'POPUPAPP') { if (dataview.getPSAppDataEntity()) { parameters = [ { pathName: Util.srfpluralize((dataview.getPSAppDataEntity() as IPSAppDataEntity)?.codeName).toLowerCase(), parameterName: (dataview.getPSAppDataEntity() as IPSAppDataEntity)?.codeName.toLowerCase(), }, { pathName: 'views', parameterName: ((dataview as IPSAppDEView).getPSDEViewCodeName() as string).toLowerCase(), }, ]; } else { parameters = [{ pathName: 'views', parameterName: dataview?.codeName.toLowerCase() }]; } } else { if (dataview.getPSAppDataEntity()) { parameters = [ { pathName: Util.srfpluralize((dataview.getPSAppDataEntity() as IPSAppDataEntity)?.codeName).toLowerCase(), parameterName: (dataview.getPSAppDataEntity() as IPSAppDataEntity)?.codeName.toLowerCase(), }, ]; } if (dataview && dataview.modelPath) { Object.assign(tempContext, { viewpath: dataview.modelPath }); } } let view: any = { viewname: 'app-view-shell', height: dataview.height, width: dataview.width, title: this.$tl(dataview.getCapPSLanguageRes()?.lanResTag, dataview.caption), }; // 关闭视图回调 let callback: Function = (result: any, xData: any) => { 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: any = { 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: Subject = _this.$appmodal.openModal(view, tempContext, data); container.subscribe((result: any) => { 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: Subject = _this.$appdrawer.openTopDrawer(view, Util.getViewProps(tempContext, data)); container.subscribe((result: any) => { callback(result, xData); }); } else { Object.assign(view, { placement: dataview.openMode }); let container: Subject = _this.$appdrawer.openDrawer(view, Util.getViewProps(tempContext, data)); container.subscribe((result: any) => { callback(result, xData); }); } } else if (dataview.openMode == 'POPOVER') { // 打开气泡卡片 Object.assign(view, { placement: dataview.openMode }); let container: Subject = _this.$apppopover.openPop($event, view, tempContext, data); container.subscribe((result: any) => { 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'); } } }