import { Environment } from "@/environments/environment"; import { AppServiceBase, Http, LogUtil, ViewTool } from "ibiz-core"; /** * 应用无权限服务 * * @memberof AppNoAuthDataService */ export class AppNoAuthDataService { /** * 单例变量声明 * * @private * @static * @type {AppNoAuthDataService} * @memberof AppNoAuthDataService */ private static AppNoAuthDataService: AppNoAuthDataService; /** * 样式表请求路径 * * @private * @type {string} * @memberof AppNoAuthDataService */ private appUserStyleUrl: string = 'simple/PSSYSAPP.simple.json.css'; /** * 样式表是否挂载 * * @public * @type {boolean} * @memberof AppNoAuthDataService */ public appUserStyleIsMounted: boolean = false; /** * 无权限数据请求路径 * * @private * @type {string} * @memberof AppNoAuthDataService */ private appNoAuthDataUrl: string = 'simple/PSSYSAPP.simple.json'; /** * 无权限数据是否挂载 * * @type {boolean} * @memberof AppNoAuthDataService */ public appNoAuthDataIsMounted: boolean = false; /** * 获取AppNoAuthDataService单例对象 * * @static * @returns {AppNoAuthDataService} * @memberof AppNoAuthDataService */ public static getInstance(): AppNoAuthDataService { if (!this.AppNoAuthDataService) { this.AppNoAuthDataService = new AppNoAuthDataService(); } return this.AppNoAuthDataService; } /** * 挂载基础数据 * * @return {*} * @memberof AppNoAuthDataService */ public async mountedAppBasicData() { if (!this.appUserStyleIsMounted) { const result = await this.mountedAppStyle(); } if (!this.appNoAuthDataIsMounted) { const result = await this.mountedAppNoAuthData(); } return true; } /** * 挂载应用样式表 * */ public async mountedAppStyle() { const cssUrl = this.appUserStyleUrl; try { const cssContent = await this.loadAppUserStyle(cssUrl); if (!cssContent) { return true; } this.mountedAppUserStyle(cssContent); AppServiceBase.getInstance().setAppUserStyle(cssContent); return true; } catch (error) { LogUtil.error("挂载应用样式表异常"); return true; } finally { this.appUserStyleIsMounted = true; } } /** * 挂载应用无权限数据 * * @memberof AppNoAuthDataService */ public async mountedAppNoAuthData() { const dataUrl = this.appNoAuthDataUrl; try { const noAuthData = await this.loadNoAuthData(dataUrl); if (!noAuthData) { return true; } AppServiceBase.getInstance().setAppNoAuthData(noAuthData); return true; } catch (error) { LogUtil.error("挂载应用无权限数据异常"); return true; } finally { this.appNoAuthDataIsMounted = true; } } /** * 加载应用自定义样式表 * * @param cssUrl 样式路径 */ public async loadAppUserStyle(cssUrl: string) { let url = ''; if (Environment.bDynamic) { url = `${Environment.remoteDynaPath}/${cssUrl}`; } else { const microAppService = AppServiceBase.getInstance().getMicroAppService(); if (microAppService && microAppService.getIsMicroApp() && microAppService.getMicroAppFolder()) { url = `./${microAppService.getMicroAppFolder()}/assets/model/${cssUrl}`; } else { url = `./assets/model/${cssUrl}`; } } try { let headers: any = {}; const tempViewParam = ViewTool.getDcSystemIdViewParam(); if (tempViewParam.srfdcsystem) { headers.srfdcsystem = tempViewParam.srfdcsystem } const result: any = await Http.getInstance().get(url, {}, false, headers); return result.data ? result.data : null; } catch (error) { LogUtil.error("加载应用样式表异常"); return null; } } /** * 加载应用无权限数据 * * @param dataUrl 无权限数据路径 */ public async loadNoAuthData(dataUrl: string) { let url = ''; if (Environment.bDynamic) { url = `${Environment.remoteDynaPath}/${dataUrl}`; } else { const microAppService = AppServiceBase.getInstance().getMicroAppService(); if (microAppService && microAppService.getIsMicroApp() && microAppService.getMicroAppFolder()) { url = `./${microAppService.getMicroAppFolder()}/assets/model/${dataUrl}`; } else { url = `./assets/model/${dataUrl}`; } } try { let headers: any = {}; const tempViewParam = ViewTool.getDcSystemIdViewParam(); if (tempViewParam.srfdcsystem) { headers.srfdcsystem = tempViewParam.srfdcsystem } const result: any = await Http.getInstance().get(url, {}, false, headers); return result.data ? result.data : null; } catch (error) { LogUtil.error("加载应用无权限数据异常"); return null; } } /** * 挂载应用自定义样式表 * * @param cssContent 样式内容 */ public mountedAppUserStyle(cssContent: string) { let appStyleDom: any; for (let i = document.head.childNodes.length - 1; i >= 0; i--) { const children: any = document.head.childNodes[i] if (children.nodeName == "STYLE" && children.getAttribute('title') && children.getAttribute('title') == 'app-style-css') { appStyleDom = children; } } if (appStyleDom) { appStyleDom.innerText = cssContent; } else { const styleDom = document.createElement('style'); styleDom.type = "text/css"; styleDom.setAttribute('title', 'app-style-css'); styleDom.innerText = cssContent; document.head.appendChild(styleDom); } } }