diff --git a/src/app/babylon/controller/data-manager.ts b/src/app/babylon/controller/data-manager.ts index c83168a..7870503 100644 --- a/src/app/babylon/controller/data-manager.ts +++ b/src/app/babylon/controller/data-manager.ts @@ -63,7 +63,7 @@ export class DataManager { */ static allMarkPlanData: AllMarkPlanData; - static initDebugData(institutionKey: string, onSuccess?: (key: string) => void, onError?: (key: string, error: string) => void) { + static initDebugData(institutionID: number, onSuccess?: (key: string) => void, onError?: (key: string, error: string) => void) { //本地捏造消防设备列表信息 DataManager.initDebugData_facility(); @@ -75,7 +75,7 @@ export class DataManager { if (dataFromServe) { - ServeManager.instance.getInstitutionData(institutionKey, (key, result) => { + ServeManager.instance.getInstitutionData(institutionID, (key, result) => { if (onSuccess) { DataManager.institutionData = plainToClass(InstitutionData, result); DataManager.institutionData.normalData.name = DataManager.institutionData_simple.name; @@ -352,7 +352,7 @@ export class DataManager { static init(simpleData: InsitutionDataSimple, onSuccess?: (key: string) => void) { DataManager.institutionData_simple = simpleData; - DataManager.initDebugData(simpleData.key, onSuccess); + DataManager.initDebugData(simpleData.id, onSuccess); } /** @@ -360,7 +360,7 @@ export class DataManager { */ static initAllMarkPlaneData() { DataManager.allMarkPlanData = new AllMarkPlanData(); - DataManager.allMarkPlanData.institutionID = DataManager.institutionData.normalData.key; + DataManager.allMarkPlanData.institutionID = DataManager.institutionData_simple.key; DataManager.allMarkPlanData.datas = []; return DataManager.allMarkPlanData; } @@ -369,7 +369,7 @@ export class DataManager { * 初始化当前建筑的 态势标绘信息 */ static initMarkData(onSuccess?: (data: AllMarkPlanData) => void) { - ServeManager.instance.getMarkData(DataManager.institutionData.normalData.key, (institutionID: string, data: string) => { + ServeManager.instance.getMarkData(DataManager.institutionData_simple.id, (institutionID: number, data: string) => { if (data == null) //新建单位的标绘信息 { DataManager.initAllMarkPlaneData(); @@ -381,7 +381,7 @@ export class DataManager { if (onSuccess != null) { onSuccess(DataManager.allMarkPlanData); } - }, (institutionID: string, data: any) => { + }, (institutionID: number, data: any) => { if (data instanceof HttpErrorResponse && data.status == 404) { //404,新增单位标绘数据,不算错误 } diff --git a/src/app/babylon/controller/mode-manager.ts b/src/app/babylon/controller/mode-manager.ts index 49ab662..146f793 100644 --- a/src/app/babylon/controller/mode-manager.ts +++ b/src/app/babylon/controller/mode-manager.ts @@ -23,7 +23,7 @@ export class ModeManager { /** * 制作模式代表内部编辑人员,可新增单位、上传模型,查看模式代表交付的模式 */ - public static s_isMakeMode = true; + public static s_isMakeMode = false; /** * 调试模式 diff --git a/src/app/babylon/controller/serve-manager.ts b/src/app/babylon/controller/serve-manager.ts index 87a3a9e..327df3d 100644 --- a/src/app/babylon/controller/serve-manager.ts +++ b/src/app/babylon/controller/serve-manager.ts @@ -5,6 +5,7 @@ import { BuildingBasicInfosService } from "src/app/service/babylon/building-basi import { ObjectsService } from "src/app/service/objects.service"; import { InsitutionDataSimple } from "../model/data/institution/institution-data-simple"; import { AllMarkPlanData } from "../model/data/mark/mark-plan-data"; +import { DataManager } from "./data-manager"; import { ModeManager, ModeType } from "./mode-manager"; //服务器通信 @@ -29,19 +30,19 @@ export class ServeManager { } //从服务器获取单位信息 - getInstitutionData(key: string = 'test', onSuccess?: (key: string, + getInstitutionData(id: number = 1, onSuccess?: (key: string, data: string ) => void, onError?: (key: string, error: any) => void) { - this.buildingBISrv.getBuildingBasicInfos(key) + this.buildingBISrv.getBuildingBasicInfos(id) .subscribe(data => { //console.log("得到单位信息" + key, data); if (onSuccess) { - onSuccess(key, JSON.parse((data as any).result)); + onSuccess(id.toString(), JSON.parse((data as any).result)); } }, error => { - console.error("From serve" + key + "===" + error); + console.error("From serve:" + id, error); if (onError) { - onError(key, error); + onError(id.toString(), error); } }) } @@ -89,9 +90,9 @@ export class ServeManager { * @param onSuccess * @param onError */ - getMarkData(institutionID: string, - onSuccess?: (institutionID: string, data: string) => void, - onError?: (institutionID: string, error: any) => void) { + getMarkData(institutionID: number, + onSuccess?: (institutionID: number, data: string) => void, + onError?: (institutionID: number, error: any) => void) { this.buildingBISrv.getMarkData(institutionID) .subscribe(data => { @@ -102,7 +103,7 @@ export class ServeManager { }, (error) => { if (error instanceof HttpErrorResponse) { if (error.status === 404) { - console.log("没有标绘数据,新建:" + error.error); + console.log("没有标绘数据,新建:", error.error); if (ModeManager.currentMode == ModeType.Edit) { onSuccess(institutionID, null); //data 为null ,表示新建 } @@ -136,9 +137,9 @@ export class ServeManager { } else { let data = classToPlain(allMarkPlanData); - this.buildingBISrv.postMarkData(allMarkPlanData.institutionID, data) + this.buildingBISrv.postMarkData(allMarkPlanData.institutionID, DataManager.institutionData_simple.id, data) .subscribe(data => { - ModeManager.log("保存标绘信息成功:" + allMarkPlanData.institutionID); + console.log("保存标绘信息成功:" + allMarkPlanData.institutionID, DataManager.institutionData_simple.id); if (onSuccess) { onSuccess(allMarkPlanData.institutionID, data.result); } diff --git a/src/app/babylon/controller/status/login-status.ts b/src/app/babylon/controller/status/login-status.ts index fb86051..839ebb6 100644 --- a/src/app/babylon/controller/status/login-status.ts +++ b/src/app/babylon/controller/status/login-status.ts @@ -61,7 +61,8 @@ export class LoginSatus extends StatusBase { // testIns1.key = "test"; // testIns1.name = "测试单位1"; // debugList.push(testIns1); - ServeManager.instance.getInstitutionData("InsList", (key, data) => { + // -1 = InsList + ServeManager.instance.getInstitutionData(-1, (key, data) => { debugList = plainToClass(InsitutionDataSimple, data); this.institutionList = debugList; if (onSuccess) { @@ -228,11 +229,10 @@ export class LoginSatus extends StatusBase { //保存新单位信息至服务器 saveNewIns(status: LoginSatus, insData: InstitutionData, key: string, id: number, onSuccess?: (insDataSimple: InsitutionDataSimple) => void) { - console.log("准备保存新单位"); ServeManager.instance.saveInstitutionData(insData, key, id, (key, result) => { - console.log("在服务器新建单位" + key); let insDataSimple = new InsitutionDataSimple(); insDataSimple.key = key; + insDataSimple.id = id; insDataSimple.name = insData.normalData.name; status.onCreateInsSuccess(insDataSimple); if (onSuccess != null) { diff --git a/src/app/babylon/game.ts b/src/app/babylon/game.ts index 88b1166..7b04f45 100644 --- a/src/app/babylon/game.ts +++ b/src/app/babylon/game.ts @@ -26,7 +26,7 @@ export class Game { this.scene = new Scene(this.engine); this.scene.useRightHandedSystem = true;//使用右手坐标系 RenderingManager.MIN_RENDERINGGROUPS = -1;//最小渲染序列 - + // Engine.DefaultLoadingScreenFactory() //尝试更改canvas this.createScene(); let scene = this.scene; // canvas.translate = true; //用于设置背景透明 diff --git a/src/app/babylon/model/data/mark/mark-plan-data.ts b/src/app/babylon/model/data/mark/mark-plan-data.ts index 916cf31..c0f0912 100644 --- a/src/app/babylon/model/data/mark/mark-plan-data.ts +++ b/src/app/babylon/model/data/mark/mark-plan-data.ts @@ -11,11 +11,15 @@ import { MarkData } from "./mark-data"; */ export class AllMarkPlanData { + + + /** - * 单位ID + * 单位ID("字符串") */ institutionID: string; + /** * 所有方案 */ @@ -192,6 +196,7 @@ export class MarkPlanData { */ export class MarkNodeData { + /** * 唯一身份id */ @@ -364,9 +369,9 @@ export class MarkNodeData { let timeScale = 0.3; - let minTime = 3; //最短停留时间 + let minTime = 4; //最短停留时间 - let result = textNum * timeScale; + let result = textNum * timeScale + 1; if (result < minTime) { result = minTime; } diff --git a/src/app/babylon/model/info/mark/model-info-mark.ts b/src/app/babylon/model/info/mark/model-info-mark.ts index 16d1592..1a9c1c7 100644 --- a/src/app/babylon/model/info/mark/model-info-mark.ts +++ b/src/app/babylon/model/info/mark/model-info-mark.ts @@ -267,7 +267,9 @@ export class ModelInfo_mark extends ModelInfo { // instance.uiFollowHeadBg.widthInPixels = maxWidth; }, (50)); + // console.log("喷水", this.taskNeedWaterParticle()); if (this.taskNeedWaterParticle()) { + this.sprinklingWater(true); } else { @@ -423,6 +425,9 @@ export class ModelInfo_mark extends ModelInfo { // } // } } + + // console.log("喷头", this.node_pz); + if (this.node_pz == null) { result = false; } diff --git a/src/app/babylon/model/info/mark/other/mark-plan-particle-info.ts b/src/app/babylon/model/info/mark/other/mark-plan-particle-info.ts index 7222579..a6a94fb 100644 --- a/src/app/babylon/model/info/mark/other/mark-plan-particle-info.ts +++ b/src/app/babylon/model/info/mark/other/mark-plan-particle-info.ts @@ -68,6 +68,7 @@ export class ModelInfo_mark_particle extends ModelInfo_mark { // instance.modelBox.scaling = new Vector3(100, 300, 100); ps.emitter = root; instance.particleSet.systems.push(ps); + // console.log(ps.name, instance.isPlaying); if (instance.isPlaying) { instance.particleSet.start(); } @@ -127,6 +128,7 @@ export class ModelInfo_mark_particle extends ModelInfo_mark { dispose() { if (this.particleSet != null) { + // console.log("释放粒子", this.particleSet); this.particleSet.dispose(); } super.dispose(); diff --git a/src/app/babylon/model/info/model/model-info.ts b/src/app/babylon/model/info/model/model-info.ts index 2a31504..0aac638 100644 --- a/src/app/babylon/model/info/model/model-info.ts +++ b/src/app/babylon/model/info/model/model-info.ts @@ -229,7 +229,7 @@ export class ModelInfo { this.uiFollowRoot.dispose(); } - console.log("释放model" + this.key, disposeMesh); + // console.log("释放model" + this.key, disposeMesh); if (disposeMesh) { if (this.modelBox != null) { this.modelBox.dispose(); diff --git a/src/app/babylon/tool/babylon-tool.ts b/src/app/babylon/tool/babylon-tool.ts index 334fb1b..6f49c77 100644 --- a/src/app/babylon/tool/babylon-tool.ts +++ b/src/app/babylon/tool/babylon-tool.ts @@ -1,3 +1,4 @@ +import { NumberValueAccessor } from '@angular/forms'; import { AbstractMesh, Animation, @@ -130,7 +131,7 @@ export class BabylonTool { path = ObjectsService.getFullPath(path); //根据环境,动态改变桶名 } - console.log("异步加载模型" + path + sceneFilename); + // console.log("异步加载模型" + path + sceneFilename); let modelPath = path + sceneFilename; LoadTool.add(modelPath, tag); @@ -345,7 +346,12 @@ export class BabylonTool { radius: number, alpha: number, beta: number, + onAnimationEnd?: () => void ) { + + camera.alpha = BabylonTool.limitPI(camera.alpha); + camera.beta = BabylonTool.limitPI(camera.beta); + //缓动动画 let easingFunction = new QuadraticEase(); easingFunction.setEasingMode(EasingFunction.EASINGMODE_EASEOUT); @@ -416,10 +422,26 @@ export class BabylonTool { camera.animations.push(anim_a); camera.animations.push(anim_b); - camera._scene.beginAnimation(camera, 0, allFrame, false); + return camera._scene.beginAnimation(camera, 0, allFrame, false, undefined, onAnimationEnd); } + /** + * 把本值归一化进0-2π之间 + * @param value + */ + public static limitPI(value: number) { + let result = value; + + while (result < 0) { + result += Math.PI * 2; + } + + while (result > Math.PI * 2) { + result -= Math.PI * 2; + } + return result; + } //动画移动摄像机target public static AnimMoveCameraTarget( diff --git a/src/app/babylon/tool/particle-system-tool.ts b/src/app/babylon/tool/particle-system-tool.ts index 28d7f8f..9a19a4e 100644 --- a/src/app/babylon/tool/particle-system-tool.ts +++ b/src/app/babylon/tool/particle-system-tool.ts @@ -40,6 +40,8 @@ export class ParticleSystemTool { let instance = this; ParticleHelper.ParseFromFileAsync(null, path, this.scene, false).then((value: ParticleSystem) => { value.stop(); + value.emitter = Vector3.Zero(); + value.name += "(prefab)"; instance.psPool.set(path, value); if (clone) { let result = instance.cloneParticle(value, name); @@ -65,10 +67,11 @@ export class ParticleSystemTool { if (instance.psPool.has(path)) { let set = instance.psPool.get(path); let result = instance.cloneParticle(set, name); + // console.log(set.uniqueId + "克隆特效id", result.uniqueId); onSuccess(result); } else { - + // console.log("加载特效", name); instance.loadPrefab(null, path, true, (value: ParticleSystem) => { onSuccess(value); }) @@ -104,7 +107,7 @@ export class ParticleSystemTool { cloneParticle(particle: ParticleSystem, name: string) { // let root = new AbstractMesh("root_" + name, this.scene); let root = Vector3.Zero(); - let result = particle.clone(particle.name, root); + let result = particle.clone(name, root); return result; } diff --git a/src/app/babylon/tool/speaking-tool.ts b/src/app/babylon/tool/speaking-tool.ts index 9784ed9..54ca515 100644 --- a/src/app/babylon/tool/speaking-tool.ts +++ b/src/app/babylon/tool/speaking-tool.ts @@ -38,7 +38,7 @@ export class SpeakingTool { * @param msg */ speak(msg: string) { - console.log("阅读" + msg); + // console.log("阅读" + msg); if (this.isIE()) { } diff --git a/src/app/babylon/view/building-window/building-window.ts b/src/app/babylon/view/building-window/building-window.ts index 01a900e..80d4719 100644 --- a/src/app/babylon/view/building-window/building-window.ts +++ b/src/app/babylon/view/building-window/building-window.ts @@ -1,8 +1,10 @@ -import { AbstractMesh, Material, Mesh, PBRMaterial, Texture } from "@babylonjs/core"; +import { AbstractMesh, Material, Mesh, PBRMaterial, Texture, Animatable } from "@babylonjs/core"; import { PlanComponent } from "src/app/pages/plan/plan.component"; import { ConfigManager } from "../../controller/config-manager"; import { DataManager } from "../../controller/data-manager"; +import { EventManager } from "../../controller/event-manager/event-manager"; +import { Event_LoadingChange } from "../../controller/event-manager/events/event-loading-change"; import { InfoManager } from "../../controller/info-manager"; import { ModeManager, ModeType } from "../../controller/mode-manager"; import { SceneManager } from "../../controller/scene-manager"; @@ -23,6 +25,7 @@ import { ModelInfo_building } from "../../model/info/model/model-info-building"; import { FacilityInfoByType, ModelInfo_facility } from "../../model/info/model/model-info-facility"; import { BabylonTool } from "../../tool/babylon-tool"; import { GizmoTool } from "../../tool/gizmo-tool"; +import { LoadTool } from "../../tool/load-tool"; import { TsTool } from "../../tool/ts-tool"; import { FacilityInfoInSceneWindow } from "../facilityinfoinscene-window/facilityinfoinscene-window"; import { MarkWindow } from "../mark-window/mark-window"; @@ -49,6 +52,7 @@ export class BuildingWindow extends UIBase { three: PlanComponent;//前端组件 + cameraAnim: Animatable;//相机动画 //#region 与前端对接部分 @@ -283,12 +287,16 @@ export class BuildingWindow extends UIBase { * @param cameraData * @param showZP */ - revoverCamera(cameraData: ArcRotateCameraData, showZP: boolean) { + revoverCamera(cameraData: ArcRotateCameraData, showZP: boolean, onAnimationEnd?: () => void) { this.showZP(showZP); PlanComponent.instance.isOpenAwning = showZP; let camera = SceneManager.Instance.defaultCamera; if (cameraData != null) { - BabylonTool.AnimMoveCameraTargetAB(camera, 60, cameraData.target, cameraData.radius, cameraData.alpha, cameraData.beta); + + this.cameraAnim = BabylonTool.AnimMoveCameraTargetAB(camera, 60, cameraData.target, cameraData.radius, cameraData.alpha, cameraData.beta, onAnimationEnd); + if (Event_LoadingChange.isLoading) { //加载中,暂停 + this.cameraAnim.pause(); + } } } @@ -314,6 +322,10 @@ export class BuildingWindow extends UIBase { SceneManager.Instance.scene.onBeforeRenderObservable.add(() => { instance.onUpdate(); }) + EventManager.addListener(Event_LoadingChange, (eventInfo) => { + instance.onChangeLoading(eventInfo); + }); + } onShow() { @@ -331,6 +343,25 @@ export class BuildingWindow extends UIBase { } + /** + * loading状态改变时 + * @param eventInfo + */ + onChangeLoading(eventInfo: Event_LoadingChange) { + if (eventInfo.showLoading) { + if (this.cameraAnim != null) { + this.cameraAnim.pause(); + } + + } + else { + if (this.cameraAnim != null) { + this.cameraAnim.restart(); + } + + } + } + //#endregion diff --git a/src/app/babylon/view/facilityinfoinscene-window/facilityinfoinscene-window.ts b/src/app/babylon/view/facilityinfoinscene-window/facilityinfoinscene-window.ts index 87d6761..3442ea7 100644 --- a/src/app/babylon/view/facilityinfoinscene-window/facilityinfoinscene-window.ts +++ b/src/app/babylon/view/facilityinfoinscene-window/facilityinfoinscene-window.ts @@ -2,6 +2,7 @@ import { AbstractMesh, Color3, EventState, Mesh, PickingInfo, PointerEventTypes, import { classToClass } from "class-transformer"; import { PlanComponent } from "src/app/pages/plan/plan.component"; import { ModelChangeType } from "../../controller/data-manager"; +import { EventManager } from "../../controller/event-manager/event-manager"; import { Event_KeyboardInput } from "../../controller/event-manager/events/event-keyboard-input"; import { Event_ModelInfoChange } from "../../controller/event-manager/events/event-modelinfo-change"; import { ModeManager, ModeType } from "../../controller/mode-manager"; @@ -261,7 +262,7 @@ export class FacilityInfoInSceneWindow extends UIBase { FacilityInfoInSceneWindow.instance = this; this.three = PlanComponent.instance; - // EventManager.addListener(Event_ModelInfoChange, this.onModelInfoChange); + EventManager.addListener(Event_ModelInfoChange, this.onModelInfoChange); GizmoTool.onPickMeshInfoObservable.add(this.onClickModel); this.currentFacility = []; @@ -275,7 +276,7 @@ export class FacilityInfoInSceneWindow extends UIBase { onClose() { super.onClose(); - //EventManager.removeCallback(Event_ModelInfoChange, this.onModelInfoChange); + EventManager.removeCallback(Event_ModelInfoChange, this.onModelInfoChange); GizmoTool.onPickMeshInfoObservable.removeCallback(this.onClickModel); } @@ -638,7 +639,7 @@ export class FacilityInfoInSceneWindow extends UIBase { } // facilityInfo.setSelectEnable(true); - // this.selectFacilityItemToThree(facilityInfoUIItem); + this.selectFacilityItemToThree([facilityInfoUIItem], true); } //this.onClickModel(facilityInfoUIItem); diff --git a/src/app/babylon/view/mark-window/mark-window.ts b/src/app/babylon/view/mark-window/mark-window.ts index 03bca52..cc3e42a 100644 --- a/src/app/babylon/view/mark-window/mark-window.ts +++ b/src/app/babylon/view/mark-window/mark-window.ts @@ -39,6 +39,12 @@ import { WeatherTool } from "./weather-tool"; export class MarkWindow extends UIBase { + /** + * 游离节点特殊Key + */ + readonly c_leaveNode: string = "node_leave_"; + + static instance: MarkWindow; static s_cameraData: ArcRotateCameraData = null;//预定义的相机数据 static s_preLoadMesh: boolean = false;//预加载所有标绘物(如果是false,则在选中每个标绘物的时候,进行预加载单个) @@ -236,6 +242,7 @@ export class MarkWindow extends UIBase { * 保存至已有节点 * @param markPlanId 方案id,一级节点ID * @param nodeId 节点id,二级节点id + * @param newName 是否要覆盖原有的名字 */ saveToOldNode(markPlanId: number, nodeId: number, newName?: string) { let markPlaneData = DataManager.allMarkPlanData.getMarkPlanById(markPlanId); @@ -248,7 +255,7 @@ export class MarkWindow extends UIBase { let copyNodeData = classToClass(this.currentMarkNodeDataCopy);//覆盖数据 copyNodeData.id = oldNodeData.id; copyNodeData.index = oldNodeData.index; - if (newName != null) { + if (newName != null && newName != this.c_leaveNode) { copyNodeData.name = newName; } // copyNodeData.name = oldNodeData.name; @@ -321,10 +328,10 @@ export class MarkWindow extends UIBase { let nodeCopy: MarkNodeData; if (changeBuildingByUI) //从ui点击切层, { - console.log(this.currentMarkNodeInfo); + // console.log(this.currentMarkNodeInfo); if (this.currentMarkNodeInfo == null)//没有当前的markInfo,创建一个游离的节点 { - console.log("拷贝游离节点"); + // console.log("拷贝游离节点"); nodeCopy = this.createLeaveNode(); this.savCurrentNodeData(nodeCopy); } @@ -362,10 +369,14 @@ export class MarkWindow extends UIBase { this.currentMarkNodeDataCopy = nodeCopy;//更新备份数据 this.currentMarkNodeInfo = new MarkNodeInfo(markPlanData, this.currentMarkNodeDataCopy); //this.currentMarkNodeDataCopy = classToClass(this.currentMarkNodeInfo.nodeData); //更新备份数据 - this.updateNodeInfo(); - if (readDescribe) { - this.readDescribe(nodeCopy.describe); - } + this.updateNodeInfo(readDescribe); + // let instance = this; + // if (readDescribe) { //镜头移动完,开始说话 + // setTimeout(() => { + // instance.readDescribe(nodeCopy.describe); + // }, MarkNodeData.speakWaitTime * 1000); + + // } } @@ -936,6 +947,8 @@ export class MarkWindow extends UIBase { + + //#endregion //#region 查询类 @@ -1009,7 +1022,7 @@ export class MarkWindow extends UIBase { * 创建一个游离的节点,用于没有选中已经创建的节点时,存放标绘信息 */ createLeaveNode() { - let result = new MarkNodeData(0, "leave"); + let result = new MarkNodeData(0, this.c_leaveNode); return result; } @@ -1167,8 +1180,9 @@ export class MarkWindow extends UIBase { * 更新节点数据至表现层 * 摄像机、楼层、室内外的更新 * 标记物的重新创建 + * @param readDescribe: 是否阅读介绍 */ - updateNodeInfo() { + updateNodeInfo(readDescribe = false) { let environmentData = this.currentMarkNodeInfo.nodeData.getCurrentEnvironmentData(); let cameraData = this.currentMarkNodeInfo.nodeData.cameraData; let showZP = this.currentMarkNodeInfo.nodeData.showZP; @@ -1198,7 +1212,13 @@ export class MarkWindow extends UIBase { // } //仅此分支生效 - BuildingWindow.instance.revoverCamera(cameraData, showZP); + + //动画还原相机,结束后开始阅读 + BuildingWindow.instance.revoverCamera(cameraData, showZP, (() => { + if (readDescribe) { + instance.readDescribe(instance.currentMarkNodeInfo.nodeData.describe); + } + })); instance.clearEnterObserver(true); diff --git a/src/app/pages/init3D.guard.ts b/src/app/pages/init3D.guard.ts new file mode 100644 index 0000000..651a426 --- /dev/null +++ b/src/app/pages/init3D.guard.ts @@ -0,0 +1,39 @@ +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { Component, OnInit, Inject } from '@angular/core'; +import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, Router } from '@angular/router'; +import { ModeManager } from '../babylon/controller/mode-manager'; +import { NzMessageService } from 'ng-zorro-antd/message'; + +@Injectable({ + providedIn: 'root' +}) +export class init3DGuard implements CanActivate { + + constructor(private router: Router, private http: HttpClient, private message: NzMessageService,) { } + + // 路由守卫 + canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot,): Promise { + return this.getGasStationBaseInfo().then((res: any) => { + sessionStorage.setItem("3dSceneData", JSON.stringify(res)) + let isMakeMode = ModeManager.s_isMakeMode + if (isMakeMode || res.hasBuildingInfo) { + return true + } else if (!res.hasBuildingInfo) { + this.message.info("当前站点没有数字油站!"); + return false + } + }); + } + + //获取 当前加油站基本信息 + getGasStationBaseInfo() { + return new Promise((resolve, reject) => { + let params = { organizationUnitId: (JSON.parse(sessionStorage.getItem('userdataOfgasstation'))).organization.id } + this.http.get('/api/services/app/GasStation/Get', { params: params }).subscribe((data: any)=>{ + resolve(data.result) + }) + }) + } + +} \ No newline at end of file diff --git a/src/app/pages/left-domain/left-domain.component.html b/src/app/pages/left-domain/left-domain.component.html index ff2a673..6ae3c2f 100644 --- a/src/app/pages/left-domain/left-domain.component.html +++ b/src/app/pages/left-domain/left-domain.component.html @@ -101,8 +101,7 @@

- - +

@@ -126,10 +125,24 @@

+
+
+

连接的加油机

+

连接的油罐

+
+
+

+

+
+
-

设计图纸

+

设计图纸

- +
+ + +
+
@@ -160,7 +173,11 @@

设计图纸

- +
+ + +
+
@@ -186,6 +203,9 @@ + + +
diff --git a/src/app/pages/left-domain/left-domain.component.scss b/src/app/pages/left-domain/left-domain.component.scss index 07efc39..6169419 100644 --- a/src/app/pages/left-domain/left-domain.component.scss +++ b/src/app/pages/left-domain/left-domain.component.scss @@ -38,9 +38,9 @@ .tableInput{ border: none; outline: none; background-color: transparent; width: 100%; height: 100%; } .tableSelect{ width: 100%; height: 100%; color: #fff; } .propertyImage{ - padding-left: 15px; - img{ width: auto; max-height: 130px; display: block; margin-bottom: 10px; } - .imgTitle{ font-size: 14px; height: 20px; line-height: 20px; margin: 10px 0; } + position: relative; + .imgTitle{ font-size: 14px; height: 20px; line-height: 20px; margin: 10px 0; padding-left: 10px; } + img{ width: 120px; height: auto; max-height: 100px; display: block; margin-bottom: 10px; } .uploadImgBox{ margin: 0; width: 50px; height: 50px; line-height: 50px; text-align: center; } } diff --git a/src/app/pages/left-domain/left-domain.component.ts b/src/app/pages/left-domain/left-domain.component.ts index f162dbf..dadc79d 100644 --- a/src/app/pages/left-domain/left-domain.component.ts +++ b/src/app/pages/left-domain/left-domain.component.ts @@ -36,6 +36,7 @@ export class LeftDomainComponent implements OnInit { FacilityList: FacilityInfoUIItem[] = []; //统计设备 list selectFacilityId: string = null; //选中设备 ID baseInfo: any; //基本信息 + isShowBaseDialog: boolean = false; //显隐 编辑信息/导出Excel 弹窗 //初始化组件 initComponent(type?: number) { @@ -91,7 +92,7 @@ export class LeftDomainComponent implements OnInit { this.FacilityList.forEach(item=>{ if (item.getPropertyData() && item.getPropertyData().img) { window.setTimeout(() => { - new Viewer(this.element.nativeElement.querySelector(`#${id}${item.getID()}`), { url: 'data-original' }); + new Viewer(this.element.nativeElement.querySelector(`#${id}${item.getID()}`), { url: 'data-original', navbar: false }); }, 0) } }) @@ -126,11 +127,11 @@ export class LeftDomainComponent implements OnInit { item.getPropertyData().img = ObjectsService.getFullPath(path + name) if (this.beforeFence === 5) { window.setTimeout(() => { - new Viewer(this.element.nativeElement.querySelector(`#pipelineViewer${item.getID()}`), { url: 'data-original' }); + new Viewer(this.element.nativeElement.querySelector(`#pipelineViewer${item.getID()}`), { url: 'data-original', navbar: false }); }, 0) } else if (this.beforeFence === 6) { window.setTimeout(() => { - new Viewer(this.element.nativeElement.querySelector(`#orvrViewer${item.getID()}`), { url: 'data-original' }); + new Viewer(this.element.nativeElement.querySelector(`#orvrViewer${item.getID()}`), { url: 'data-original', navbar: false }); }, 0) } PlanComponent.instance.isShowLoading = false //关闭遮罩 @@ -139,6 +140,17 @@ export class LeftDomainComponent implements OnInit { } } + //删除设备 图片 + deleteImg(item: FacilityInfoUIItem) { + let isDelete = confirm("您确定要删除吗?") + if (isDelete) { + this.http.delete(`${item.getPropertyData().img}`).subscribe(data=>{ + item.getPropertyData().img = "" + this.message.info("删除成功!"); + }) + } + } + @ViewChild('nzTreeComponent', { static: false }) nzTreeComponent!: NzTreeComponent; treeData: NzTreeNodeOptions[] = []; //tree data @@ -351,17 +363,29 @@ export class LeftDomainComponent implements OnInit { } } + originalData: any; //sessionStorage 原始数据 + //编辑信息 editInfo() { - + this.originalData = sessionStorage.getItem('userdata') + let userdata = { organization: PlanComponent.instance.companyData, hideCloseBtn: true } + sessionStorage.setItem('userdata', JSON.stringify(userdata)) + this.isShowBaseDialog = true } //导出Excel deriveExcel() { - + this.originalData = sessionStorage.getItem('userdata') + let userdata = { organization: PlanComponent.instance.companyData, hideCloseBtn: true } + sessionStorage.setItem('userdata', JSON.stringify(userdata)) + this.isShowBaseDialog = true } - + //关闭 编辑信息/导出Excel 弹窗 + closeBaseInfoDialog() { + sessionStorage.setItem('userdata', this.originalData) + this.isShowBaseDialog = false + } } diff --git a/src/app/pages/oil-station-info/oil-station-info.component.html b/src/app/pages/oil-station-info/oil-station-info.component.html index 441c74f..ca5f682 100644 --- a/src/app/pages/oil-station-info/oil-station-info.component.html +++ b/src/app/pages/oil-station-info/oil-station-info.component.html @@ -372,7 +372,7 @@ -
+
\ No newline at end of file diff --git a/src/app/pages/pages-routing.module.ts b/src/app/pages/pages-routing.module.ts index d7c063b..952c157 100644 --- a/src/app/pages/pages-routing.module.ts +++ b/src/app/pages/pages-routing.module.ts @@ -11,11 +11,12 @@ import { EquipmentInfoComponent } from './equipment-info/equipment-info.componen import { PlanAdminComponent } from './plan-admin/plan-admin.component'; import { HomePageComponent } from './home-page/home-page.component'; import { OilUnloadingProcessListComponent } from './oil-unloading-process-list/oil-unloading-process-list.component'; +import { init3DGuard } from './init3D.guard'; const routes: Routes = [ { path: 'homepage', component: HomePageComponent }, { path: 'plan', component: PlanAdminComponent }, - { path: 'plan/petrolStation', component: PlanComponent }, + { path: 'plan/petrolStation', component: PlanComponent, canActivate: [init3DGuard], }, { path: 'warning', component: TodayWarningAdminComponent }, { path: 'warning/petrolStation', component: TodayWarningComponent }, { path: 'records', component: CriminalRecordsAdminComponent }, diff --git a/src/app/pages/plan/plan.component.html b/src/app/pages/plan/plan.component.html index 8769b30..c46bbb3 100644 --- a/src/app/pages/plan/plan.component.html +++ b/src/app/pages/plan/plan.component.html @@ -3,7 +3,7 @@