diff --git a/src/app/babylon/controller/data-manager.ts b/src/app/babylon/controller/data-manager.ts index a68495e..4b8f0c6 100644 --- a/src/app/babylon/controller/data-manager.ts +++ b/src/app/babylon/controller/data-manager.ts @@ -1,6 +1,7 @@ import { HttpErrorResponse } from '@angular/common/http'; import { Quaternion, Vector3 } from '@babylonjs/core'; import { plainToClass } from 'class-transformer'; +import { PlanComponent } from 'src/app/pages/plan/plan.component'; import { BuildingData, BuildingData_ChemicalPlant, @@ -85,10 +86,11 @@ export class DataManager { } console.error("获取单位信息失败,本地捏造数据"); - DataManager.initDebugData_institution(); - if (onSuccess) { - onSuccess(key); - } + PlanComponent.instance.openSnackBar("获取单位失败,请刷新重试"); + // DataManager.initDebugData_institution(); + // if (onSuccess) { + // onSuccess(key); + // } }); } else { @@ -322,7 +324,7 @@ export class DataManager { */ static initDebugData_mark() { DataManager.allMarkData = AllMarkData.CreateAllMarkData(); - console.log(DataManager.allMarkData, "态势标会"); + // console.log(DataManager.allMarkData, "态势标会"); } static init(simpleData: InsitutionDataSimple, onSuccess?: (key: string) => void) { diff --git a/src/app/babylon/controller/info-manager.ts b/src/app/babylon/controller/info-manager.ts index c3746bf..17073ea 100644 --- a/src/app/babylon/controller/info-manager.ts +++ b/src/app/babylon/controller/info-manager.ts @@ -164,7 +164,6 @@ export class InfoManager { modelEditData: ModelEditData, buildingInfo: BuildingInfo = null ) { - console.trace("创建设备", buildingInfo); let facilities = modelEditData.facilities; @@ -176,11 +175,9 @@ export class InfoManager { let facilityData = facilities[i].facilities[j] if (facilityData.posType == FacilityPosType.In && buildingInfo.ModelInfo != null) { mesh = buildingInfo.ModelInfo.getChildrenByName(facilityData.resName); - console.log("内建模型找到", mesh); } - FacilityWindow.instance.createFacility( modelEditData.facilities[i].facilities[j], false, @@ -192,6 +189,7 @@ export class InfoManager { if (ModeManager.currentMode == ModeType.Look) { modelInfo.setIconEnable(false);//查看模式下隐藏所有设备ui } + } ); } diff --git a/src/app/babylon/controller/scene-manager.ts b/src/app/babylon/controller/scene-manager.ts index dd219a5..fed7287 100644 --- a/src/app/babylon/controller/scene-manager.ts +++ b/src/app/babylon/controller/scene-manager.ts @@ -133,9 +133,10 @@ export class SceneManager { Vector3.Zero(), //目标位置 this.scene //定义摄像机所属的场景 ); + camera.minZ = 0;//最近拍摄距离 camera.maxZ = 6000; //摄像机拍摄的最远距离 // camera.upperBetaLimit = 1.5; //beta方向上的旋转限制(防止看到模型底面) - camera.lowerRadiusLimit = 3; //相机距离拍摄目标的最小距离(防止穿插) + camera.lowerRadiusLimit = 1; //相机距离拍摄目标的最小距离(防止穿插) camera.setTarget(Vector3.Zero()); //设置拍摄目标 camera.attachControl(this.canvas, true); //把相机连接到画布 this.defaultCamera = camera; @@ -256,16 +257,18 @@ export class SceneManager { { mainTextureRatio: 1, }); - this.highLightLayer.innerGlow = false; + this.highLightLayer.innerGlow = true; + this.highLightLayer.outerGlow = true; + } let allMesh = mesh.getChildMeshes(); - this.highLightLayer.addMesh(mesh, color); allMesh.push(mesh); for (let i = 0; i < allMesh.length; i++) { let childMesh = allMesh[i]; if (childMesh instanceof Mesh) { this.highLightLayer.addMesh(childMesh, color); + this.highLightNum++; } } diff --git a/src/app/babylon/controller/serve-manager.ts b/src/app/babylon/controller/serve-manager.ts index 92e0415..dc50523 100644 --- a/src/app/babylon/controller/serve-manager.ts +++ b/src/app/babylon/controller/serve-manager.ts @@ -34,7 +34,7 @@ export class ServeManager { ) => void, onError?: (key: string, error: any) => void) { this.buildingBISrv.getBuildingBasicInfos(key) .subscribe(data => { - console.log("得到单位信息" + key, data); + //console.log("得到单位信息" + key, data); if (onSuccess) { onSuccess(key, JSON.parse((data as any).result)); } diff --git a/src/app/babylon/controller/status/building-status.ts b/src/app/babylon/controller/status/building-status.ts index 54bcaa9..a087bdd 100644 --- a/src/app/babylon/controller/status/building-status.ts +++ b/src/app/babylon/controller/status/building-status.ts @@ -137,9 +137,13 @@ export class BuildingStatus extends StatusBase { //判断已经有了就不创建了 // InfoManager.createFacilityInfos(buildingInfo.buildingData.outdoorData, buildingInfo); //显示 - this.buildingWindow.showFacilityInfosIcon(this.currentBuildingInfo, true); + //this.buildingWindow.showFacilityInfosIcon(this.currentBuildingInfo, true); } + this.buildingWindow.changeCurrentBuildingInfo(buildingInfo.ModelInfo); + + + } //模型变化 diff --git a/src/app/babylon/model/data/institution/institution-data.ts b/src/app/babylon/model/data/institution/institution-data.ts index ea2ed09..b7a9eb3 100644 --- a/src/app/babylon/model/data/institution/institution-data.ts +++ b/src/app/babylon/model/data/institution/institution-data.ts @@ -1,6 +1,7 @@ import { Vector3 } from "@babylonjs/core"; import { Type } from "class-transformer"; import { BuildingData_ChemicalPlant, BuildingData_Environment, BuildingData_Normal, BuildingType } from "./building/building-data"; +import { JYZInfoMoudleType, JYZShowData } from "./jyz-show-data"; //单位信息 export class InstitutionData { @@ -25,6 +26,11 @@ export class InstitutionData { @Type(() => Vector3) pos: Vector3 = new Vector3(0, 0, 0); + /** + * 加油站展示数据 + */ + @Type(() => JYZShowData) + JYZShowDatas: JYZShowData[] = []; //获取一个最新的key(根据前一个同类建筑key,加一) public getNewKey(buildingType: BuildingType): string { @@ -65,6 +71,21 @@ export class InstitutionData { return result; } + /** + * 获取加油站展示数据 + * @param type + */ + getMoudleShowData(type: JYZInfoMoudleType) { + let result: JYZShowData = null; + for (let i = 0; i < this.JYZShowDatas.length; i++) { + if (this.JYZShowDatas[i].moudleType == type) { + result = this.JYZShowDatas[i]; + break; + } + } + return result; + } + } @@ -89,4 +110,5 @@ export class NormalData { //console.log("getName==" + this.name); return this.name; } -} \ No newline at end of file +} + diff --git a/src/app/babylon/model/data/institution/jyz-show-data.ts b/src/app/babylon/model/data/institution/jyz-show-data.ts new file mode 100644 index 0000000..68ec178 --- /dev/null +++ b/src/app/babylon/model/data/institution/jyz-show-data.ts @@ -0,0 +1,78 @@ +import { ArcRotateCamera } from "@babylonjs/core/Cameras/arcRotateCamera"; +import { Type } from "class-transformer"; +import { ArcRotateCameraData } from "../camera-data"; + +/** + * 加油站展示数据 + */ +export class JYZShowData { + + /** + * 模块类型 + */ + moudleType: JYZInfoMoudleType; + + /** + * 摄像机数据 + */ + @Type(() => ArcRotateCameraData) + cameraData: ArcRotateCameraData; + + /** + * 展示罩棚 + */ + showZP: boolean; + + constructor(moudleType: JYZInfoMoudleType, camera: ArcRotateCamera, showZP: boolean) { + this.moudleType = moudleType; + this.cameraData = new ArcRotateCameraData(); + this.cameraData.getDataFromCamera(camera); + } + +} + +/** + * 加油站信息模块类型 + */ +export enum JYZInfoMoudleType { + + /** + * 基本信息 + */ + JBXX = "JBXX", + + /** + * 应急处置 + */ + YJCZ = "YJCZ", + + /** + * 消防 + */ + XF = "XF", + /** + * 加油机 + */ + JYJ = "JYJ", + /** + * 油罐 + */ + YG = "YG", + /** + * 输油管 + */ + SYG = "SYG", + /** + * 油气回收管线 + */ + YQHSGX = "YQHSGX", + /** + * 安全疏散 + */ + AQSS = "AQSS", + + /** + * 罩棚 + */ + ZP = "ZP", +} \ No newline at end of file diff --git a/src/app/babylon/model/data/model-data/model-data-facility.ts b/src/app/babylon/model/data/model-data/model-data-facility.ts index d01fbfe..5fe89f2 100644 --- a/src/app/babylon/model/data/model-data/model-data-facility.ts +++ b/src/app/babylon/model/data/model-data/model-data-facility.ts @@ -246,11 +246,11 @@ export enum FacilityType { /** * 逃生路线 */ - XF_TSLX = "XF_TSLX", + AQSS_TSLX = "AQSS_TSLX", /** * 疏散点 */ - XF_SSD = "XF_SSD", + AQSS_SSD = "AQSS_SSD", /** * 罩棚 diff --git a/src/app/babylon/model/info/model/model-info-building.ts b/src/app/babylon/model/info/model/model-info-building.ts index 2e50775..337a043 100644 --- a/src/app/babylon/model/info/model/model-info-building.ts +++ b/src/app/babylon/model/info/model/model-info-building.ts @@ -48,8 +48,9 @@ export class ModelInfo_building extends ModelInfo { if (this.neiRoot == null) { for (let i = 0; i < allTransformNode.length; i++) { - if (TsTool.stringContain(allTransformNode[i].name, "wai")) { + if (TsTool.stringContain(allTransformNode[i].name, "WAI")) { this.neiRoot = allTransformNode[i]; + console.log("找到关键节点wai"); break; } } diff --git a/src/app/babylon/model/info/model/model-info-facility.ts b/src/app/babylon/model/info/model/model-info-facility.ts index 2057ec4..1725414 100644 --- a/src/app/babylon/model/info/model/model-info-facility.ts +++ b/src/app/babylon/model/info/model/model-info-facility.ts @@ -1,8 +1,9 @@ -import { AbstractMesh, EventState } from "@babylonjs/core"; +import { AbstractMesh, Color3, EventState, Mesh } from "@babylonjs/core"; import { Button, Control, Ellipse, Rectangle, Vector2WithInfo } from "@babylonjs/gui"; import { ConfigManager } from "src/app/babylon/controller/config-manager"; import { SceneManager } from "src/app/babylon/controller/scene-manager"; import { BabylonUIStyleTool } from "src/app/babylon/tool/babylon-ui-style-tool"; +import { TsTool } from "src/app/babylon/tool/ts-tool"; import { FacilityWindow } from "src/app/babylon/view/facility-window/facility-window"; import { FacilityInfoInSceneWindow } from "src/app/babylon/view/facilityinfoinscene-window/facilityinfoinscene-window"; import { PropertyBaseWindow } from "src/app/babylon/view/property-window/property-base-window"; @@ -92,6 +93,7 @@ export class ModelInfo_facility extends ModelInfo { }); this.uiFollowRoot.zIndex = BabylonUIStyleTool.c_zIndex_facilityIcon; + this.showFollowUI(false); } @@ -156,6 +158,36 @@ export class ModelInfo_facility extends ModelInfo { } } + /** + * 播放展示动画(高亮) + * @param play false表示停止,并恢复正常 + */ + playShowAnim(play: boolean) { + this.showFollowUI(play); + if (this.modelBox != null) { + if (play) { + SceneManager.Instance.addToHighLight(this.modelBox as Mesh, Color3.Yellow()); + } + else { + SceneManager.Instance.removeFromHighLight(this.modelBox as Mesh); + } + + let facilityData = this.modelData as ModelData_facility; + + if (facilityData.facilityType == FacilityType.JY_SYGX || facilityData.facilityType == FacilityType.JY_YQHSGX) { + + let allChildren = this.modelBox.getChildMeshes(); + for (let i = 0; i < allChildren.length; i++) { + if (TsTool.stringContain(allChildren[i].name, "UV")) { + allChildren[i].setEnabled(play); + } + } + } + + } + } + + dispose(disposeMesh?: boolean) { if (this.areaInfo != null) { this.areaInfo.dispose(); diff --git a/src/app/babylon/model/info/model/model-info.ts b/src/app/babylon/model/info/model/model-info.ts index 8c628ef..9a28a13 100644 --- a/src/app/babylon/model/info/model/model-info.ts +++ b/src/app/babylon/model/info/model/model-info.ts @@ -133,25 +133,9 @@ export class ModelInfo { showFollowUI(show: boolean) { if (this.uiFollowRoot != null) { this.uiFollowRoot.isVisible = show; - } } - /** - * 播放展示动画(高亮) - * @param play false表示停止,并恢复正常 - */ - playShowAnim(play: boolean) { - if (this.modelBox != null) { - if (play) { - SceneManager.Instance.addToHighLight(this.modelBox as Mesh, Color3.Green()); - } - else { - SceneManager.Instance.removeFromHighLight(this.modelBox as Mesh); - - } - } - } /** * 克隆 diff --git a/src/app/babylon/tool/babylon-tool.ts b/src/app/babylon/tool/babylon-tool.ts index b340304..8369ff6 100644 --- a/src/app/babylon/tool/babylon-tool.ts +++ b/src/app/babylon/tool/babylon-tool.ts @@ -288,6 +288,89 @@ export class BabylonTool { } + public static AnimMoveCameraTargetAB( + camera: ArcRotateCamera, + allFrame: number, + target: Vector3, + radius: number, + alpha: number, + beta: number, + ) { + //缓动动画 + let easingFunction = new QuadraticEase(); + easingFunction.setEasingMode(EasingFunction.EASINGMODE_EASEOUT); + + //target + let anim_target = new Animation( + 'CameraAnim_target', + 'target', + 60, + Animation.ANIMATIONTYPE_VECTOR3, + Animation.ANIMATIONLOOPMODE_CYCLE + ); + let keys_target = [ + { frame: 0, value: camera.target }, + { frame: allFrame, value: target }, + ]; + anim_target.setKeys(keys_target); + anim_target.setEasingFunction(easingFunction); + + //radius + let anim_radius = new Animation( + 'CameraAnim_radius', + 'radius', + 60, + Animation.ANIMATIONTYPE_FLOAT, + Animation.ANIMATIONLOOPMODE_CYCLE + ); + let keys_radius = [ + { frame: 0, value: camera.radius }, + { frame: allFrame, value: radius }, + ]; + anim_radius.setKeys(keys_radius); + anim_radius.setEasingFunction(easingFunction); + + + + //beta + let anim_a = new Animation( + 'CameraAnim_a', + 'alpha', + 60, + Animation.ANIMATIONTYPE_FLOAT, + Animation.ANIMATIONLOOPMODE_CYCLE + ); + let keys_a = [ + { frame: 0, value: camera.alpha }, + { frame: allFrame, value: alpha }, + ]; + anim_a.setKeys(keys_a); + + //beta + let anim_b = new Animation( + 'CameraAnim_b', + 'beta', + 60, + Animation.ANIMATIONTYPE_FLOAT, + Animation.ANIMATIONLOOPMODE_CYCLE + ); + let keys_b = [ + { frame: 0, value: camera.beta }, + { frame: allFrame, value: beta }, + ]; + anim_b.setKeys(keys_b); + + camera.animations = []; + camera.animations.push(anim_target); + camera.animations.push(anim_radius); + camera.animations.push(anim_a); + camera.animations.push(anim_b); + + camera._scene.beginAnimation(camera, 0, allFrame, false); + + } + + //动画移动摄像机target public static AnimMoveCameraTarget( camera: ArcRotateCamera, diff --git a/src/app/babylon/tool/gizmo-tool.ts b/src/app/babylon/tool/gizmo-tool.ts index 25b6d3d..199d4e2 100644 --- a/src/app/babylon/tool/gizmo-tool.ts +++ b/src/app/babylon/tool/gizmo-tool.ts @@ -96,6 +96,8 @@ export class GizmoTool { GizmoTool.s_camera.panningSensibility = speed;//动态修改平移灵敏度 + GizmoTool.s_camera.wheelDeltaPercentage = 0.005; + if (SceneManager.Instance.cameraMode_Is2D) { let camera = SceneManager.Instance.defaultCamera; camera.beta = 0; diff --git a/src/app/babylon/tool/measure-tool.ts b/src/app/babylon/tool/measure-tool.ts index 67b0c28..c47ff70 100644 --- a/src/app/babylon/tool/measure-tool.ts +++ b/src/app/babylon/tool/measure-tool.ts @@ -105,7 +105,6 @@ export class MeasureTool { * 添加测量点 */ addMeasurePoint(pickInfo: PickingInfo) { - console.log("测量", pickInfo); if (this.currentMeasureInfo != null) { this.currentMeasureInfo.addPoint(pickInfo.pickedPoint); } diff --git a/src/app/babylon/view/building-window/building-ui-item.ts b/src/app/babylon/view/building-window/building-ui-item.ts index f38a4f1..d7ab98e 100644 --- a/src/app/babylon/view/building-window/building-ui-item.ts +++ b/src/app/babylon/view/building-window/building-ui-item.ts @@ -212,6 +212,14 @@ export class BuildingUIItem { } + /** + * 从模型中创建安全疏散 + * @param mesh + */ + createAQSSFromMesh(mesh: AbstractMesh) { + FacilityWindow.instance.createAQSSFromMesh(mesh); + } + /** * 从模型中创建加油站相关信息 * @param mesh diff --git a/src/app/babylon/view/building-window/building-window.ts b/src/app/babylon/view/building-window/building-window.ts index 2cc2a71..9478575 100644 --- a/src/app/babylon/view/building-window/building-window.ts +++ b/src/app/babylon/view/building-window/building-window.ts @@ -1,5 +1,5 @@ -import { AbstractMesh, Material, Mesh } from "@babylonjs/core"; +import { AbstractMesh, Material, Mesh, PBRMaterial, Texture } from "@babylonjs/core"; import { PlanComponent } from "src/app/pages/plan/plan.component"; import { DataManager } from "../../controller/data-manager"; import { InfoManager } from "../../controller/info-manager"; @@ -8,6 +8,7 @@ import { ServeManager } from "../../controller/serve-manager"; import { BuildingStatus } from "../../controller/status/building-status"; import { StatusManager } from "../../controller/status/status-manager"; import { BuildingData, BuildingData_ChemicalPlant, BuildingData_Environment, BuildingData_Normal, BuildingType } from "../../model/data/institution/building/building-data"; +import { JYZInfoMoudleType, JYZShowData } from "../../model/data/institution/jyz-show-data"; import { ModelType } from "../../model/data/model-data/model-data"; import { FacilityType } from "../../model/data/model-data/model-data-facility"; import { ModelEditData } from "../../model/data/model-data/model-edit-data"; @@ -17,6 +18,7 @@ import { BuildingInfo_Environment } from "../../model/info/building/building-inf import { BuildingInfo_Normal } from "../../model/info/building/building-info-normal"; import { ModelInfo_building } from "../../model/info/model/model-info-building"; import { FacilityInfoByType } from "../../model/info/model/model-info-facility"; +import { BabylonTool } from "../../tool/babylon-tool"; import { TsTool } from "../../tool/ts-tool"; import { UIBase } from "../window-base/ui-base"; import { BuildingUIItem } from "./building-ui-item"; @@ -24,6 +26,7 @@ import { BuildingUIItem } from "./building-ui-item"; //建筑界面 export class BuildingWindow extends UIBase { + /** * uv动画材质的特殊命名 */ @@ -215,12 +218,13 @@ export class BuildingWindow extends UIBase { */ showJYZInfoModel(type: JYZInfoMoudleType, show: boolean) { console.log("showJYZInfoModel", type, show); + if (this.currentJYZInfoMoudleType == type) { if (show) { return; //与上次显示的模块相同 } else { - this.showJYZModules(type, show); + this.showJYZModules(type, show); //单纯隐藏 } } else { @@ -230,6 +234,27 @@ export class BuildingWindow extends UIBase { this.showJYZModules(type, show);//展示本次要展示的内容 } + if (show) { + if (type == JYZInfoMoudleType.YJCZ) { + //进入应急处置 + } + else {//恢复查看状态 + let showData = DataManager.institutionData.getMoudleShowData(type); + if (showData != null) { + let camera = SceneManager.Instance.defaultCamera; + //showData.cameraData.setDataToCamera(camera); + let cameraData = showData.cameraData; + BabylonTool.AnimMoveCameraTargetAB(camera, 60, cameraData.target, cameraData.radius, cameraData.alpha, cameraData.beta); + this.showZP(showData.showZP); + PlanComponent.instance.isOpenAwning = showData.showZP; + } + } + } + else { + if (type == JYZInfoMoudleType.YJCZ) { + //退出应急处置 + } + } } @@ -251,7 +276,10 @@ export class BuildingWindow extends UIBase { this.three = PlanComponent.instance; this.three.buildingUIItems = this.buildingUIItems this.buildingUIItems.length ? this.three.beforeOneBuildingID = this.three.buildingUIItems[0].getBuildingID() : null - + let instance = this; + SceneManager.Instance.scene.onBeforeRenderObservable.add(() => { + instance.onUpdate(); + }) } onShow() { @@ -264,6 +292,11 @@ export class BuildingWindow extends UIBase { super.onHide(); } + onUpdate() { + this.updateUVAnim(); + } + + //#endregion @@ -308,10 +341,15 @@ export class BuildingWindow extends UIBase { } } + console.log("选中建筑", modelInfo); + this.showJYZModules(JYZInfoMoudleType.AQSS, false); + this.showJYZModules(JYZInfoMoudleType.YQHSGX, false); + this.showJYZModules(JYZInfoMoudleType.YQHSGX, false); //this.onChangeCurrentBuildingItem(item); // this.three.selectLeftBuilding(item); + } /** @@ -545,6 +583,11 @@ export class BuildingWindow extends UIBase { */ readonly c_xiaoFang = "XF_"; + /** + * 安全疏散 + */ + readonly c_shuSan = "AQSS_"; + /** * 加油站相关 */ @@ -593,18 +636,22 @@ export class BuildingWindow extends UIBase { if (TsTool.stringContain(nodeName, "primitive")) { //复合材质被分解为多个子mesh,不看做特殊意义的对象 } + else if (TsTool.stringContain(nodeName, this.c_zheDang))//遮挡 + { + this.currentBuidngItem.createStopByMesh(allNode[i]); + } else if (TsTool.stringContain(nodeName, this.c_xiaoFang)) //消防 { this.currentBuidngItem.createFacilityByMesh(allNode[i]); } + else if (TsTool.stringContain(nodeName, this.c_shuSan)) { + this.currentBuidngItem.createAQSSFromMesh(allNode[i]);//安全疏散 + } else if (TsTool.stringContain(nodeName, this.c_jiaYou))//加油站 { this.currentBuidngItem.createOilingByMesh(allNode[i]); } - else if (TsTool.stringContain(nodeName, this.c_zheDang))//遮挡 - { - this.currentBuidngItem.createStopByMesh(allNode[i]); - } + } } @@ -618,6 +665,11 @@ export class BuildingWindow extends UIBase { //#region 加油站基本信息模块的显隐表现 + /** + * 箭头UV动画速度 + */ + readonly c_uvAnimSpeed = 0.001; + /** * 当前查看的加油站信息模块类型 */ @@ -638,6 +690,13 @@ export class BuildingWindow extends UIBase { */ mat_UV: Map = new Map(); + /** + * 当前罩棚是否显示 + */ + currentZPShow: boolean = true; + + + /** * 展示加油站信息模块 * @param type @@ -659,15 +718,22 @@ export class BuildingWindow extends UIBase { if (infos != null) { for (let j = 0; j < infos.length; j++) { infos[j].playShowAnim(show); + //安全疏散,特殊,要在不显示时隐藏本体 + if (type == JYZInfoMoudleType.AQSS) { + infos[j].setEnable(show); + } } } } + //阻挡类物体 let zdByType: FacilityInfoByType[] = []; if (this.zdByMoudle.has(type)) { zdByType = this.zdByMoudle.get(type); } + else { + } for (let i = 0; i < zdByType.length; i++) { let infos = zdByType[i].facilityInfo; if (infos != null) { @@ -676,6 +742,7 @@ export class BuildingWindow extends UIBase { } } } + if (show) { this.currentJYZInfoMoudleType = type; } @@ -711,6 +778,17 @@ export class BuildingWindow extends UIBase { for (let i = 0; i < allFacilityByType.length; i++) { let l_facilityByType = allFacilityByType[i]; + + // if (moudleType == JYZInfoMoudleType.XF) //消防-逃生 + // { + // if (TsTool.stringContain(l_facilityByType.type, FacilityType.XF_TSLX)) { + // continue; + // } + // if (TsTool.stringContain(l_facilityByType.type, FacilityType.XF_SSD)) { + // continue; + // } + + // } if (TsTool.stringContain(l_facilityByType.type, zdKey)) { if (!this.zdByMoudle.has(moudleType)) { this.zdByMoudle.set(moudleType, []); @@ -738,6 +816,7 @@ export class BuildingWindow extends UIBase { } } } + this.currentZPShow = show; } /** @@ -748,8 +827,8 @@ export class BuildingWindow extends UIBase { getUVMat(facilityType: FacilityType, mesh: AbstractMesh) { let moudleType: JYZInfoMoudleType = null; switch (facilityType) { - case FacilityType.XF_TSLX: - moudleType = JYZInfoMoudleType.TSLX; + case FacilityType.AQSS_TSLX: + moudleType = JYZInfoMoudleType.AQSS; break; case FacilityType.JY_SYGX: moudleType = JYZInfoMoudleType.SYG; @@ -783,6 +862,7 @@ export class BuildingWindow extends UIBase { if (!isRepeat)//不重复,就添加进去 { this.mat_UV.get(moudleType).push(l_mat); + console.log("找到uv", l_mat); } } } @@ -801,54 +881,72 @@ export class BuildingWindow extends UIBase { for (let i = 0; i < childMesh.length; i++) { let mat = childMesh[i].material; if (TsTool.stringContain(mat.name, this.c_MAT_UV)) { - // for(let j =0;j< result.length;j++) - // { - // if(mat != result[j]) - // { result.push(mat); - // } - // } } } return result; } - //#endregion - - -} -/** - * 加油站信息模块类型 - */ -export enum JYZInfoMoudleType { - /** - * 消防 - */ - XF = "XF", - /** - * 加油机 - */ - JYJ = "JYJ", - /** - * 油罐 - */ - YG = "YG", - /** - * 输油管 - */ - SYG = "SYG", /** - * 油气回收管线 + * uv动画 update */ - YQHSGX = "YQHSGX", - /** - * 逃生路线 - */ - TSLX = "TSLX", + updateUVAnim() { + // console.log("uv", this.mat_UV); + if (this.mat_UV == null || this.currentJYZInfoMoudleType == null) { + return; + } + + let mats = this.mat_UV.get(this.currentJYZInfoMoudleType); + if (mats == null) { + return; + } + + for (let i = 0; i < mats.length; i++) { + let mat = mats[i]; + if (mat instanceof PBRMaterial) { + + (mat.albedoTexture as Texture).vOffset += SceneManager.Instance.scene.deltaTime * this.c_uvAnimSpeed; + } + } + } + + + /** - * 罩棚 + * 保存展示模块当前数据 */ - ZP = "ZP", -} \ No newline at end of file + saveShowMoudleData() { + + let moudleType = this.currentJYZInfoMoudleType; + let camera = SceneManager.Instance.defaultCamera; + let showZP = this.currentZPShow; + + if (DataManager.institutionData.JYZShowDatas == null) { + DataManager.institutionData.JYZShowDatas = []; + } + + let jyzShowData: JYZShowData = null; + for (let i = 0; i < DataManager.institutionData.JYZShowDatas.length; i++) { + if (DataManager.institutionData.JYZShowDatas[i].moudleType == moudleType) { + jyzShowData = DataManager.institutionData.JYZShowDatas[i]; + break; + } + } + if (jyzShowData == null) { + jyzShowData = new JYZShowData(moudleType, camera, showZP); + } + jyzShowData.moudleType = moudleType; + jyzShowData.cameraData.getDataFromCamera(camera); + jyzShowData.showZP = showZP; + + } + + + + //#endregion + + +} + diff --git a/src/app/babylon/view/facility-window/facility-window.ts b/src/app/babylon/view/facility-window/facility-window.ts index adf86a6..d511de0 100644 --- a/src/app/babylon/view/facility-window/facility-window.ts +++ b/src/app/babylon/view/facility-window/facility-window.ts @@ -587,12 +587,6 @@ export class FacilityWindow extends UIBase { else if (TsTool.stringContain(mesh.name, FacilityType.XF_MHT)) { this.createNewFacilityByMesh(mesh, FacilityType.XF_MHT); } - else if (TsTool.stringContain(mesh.name, FacilityType.XF_SSD)) { - this.createNewFacilityByMesh(mesh, FacilityType.XF_SSD); - } - else if (TsTool.stringContain(mesh.name, FacilityType.XF_TSLX)) { - this.createNewFacilityByMesh(mesh, FacilityType.XF_TSLX); - } else if (TsTool.stringContain(mesh.name, FacilityType.XF_XFCM)) { this.createNewFacilityByMesh(mesh, FacilityType.XF_XFCM); } @@ -610,6 +604,19 @@ export class FacilityWindow extends UIBase { } } + /** + * 从模型中创建安全疏散相关信息 + * @param mesh + */ + createAQSSFromMesh(mesh: AbstractMesh) { + if (TsTool.stringContain(mesh.name, FacilityType.AQSS_SSD)) { + this.createNewFacilityByMesh(mesh, FacilityType.AQSS_SSD); + } + else if (TsTool.stringContain(mesh.name, FacilityType.AQSS_TSLX)) { + this.createNewFacilityByMesh(mesh, FacilityType.AQSS_TSLX); + } + } + /** * 从模型中创建加油站相关信息 * @param mesh @@ -617,19 +624,19 @@ export class FacilityWindow extends UIBase { createOilingByMesh(mesh: AbstractMesh) { if (TsTool.stringContain(mesh.name, FacilityType.JY_JYJ)) { - console.log("找到加油机", mesh) + // console.log("找到加油机", mesh) this.createNewFacilityByMesh(mesh, FacilityType.JY_JYJ); } else if (TsTool.stringContain(mesh.name, FacilityType.JY_SYGX)) { - console.log("找到输油管线", mesh) + // console.log("找到输油管线", mesh) this.createNewFacilityByMesh(mesh, FacilityType.JY_SYGX); } else if (TsTool.stringContain(mesh.name, FacilityType.JY_YG)) { - console.log("找到油罐", mesh) + // console.log("找到油罐", mesh) this.createNewFacilityByMesh(mesh, FacilityType.JY_YG); } else if (TsTool.stringContain(mesh.name, FacilityType.JY_YQHSGX)) { - console.log("找到油气回收", mesh) + // console.log("找到油气回收", mesh) this.createNewFacilityByMesh(mesh, FacilityType.JY_YQHSGX); } } @@ -649,6 +656,7 @@ export class FacilityWindow extends UIBase { this.createNewFacilityByMesh(mesh, FacilityType.ZD_YQHSGX); } if (TsTool.stringContain(mesh.name, FacilityType.ZD_XF)) { + console.log("找到消防阻挡物", mesh.name); this.createNewFacilityByMesh(mesh, FacilityType.ZD_XF); } if (TsTool.stringContain(mesh.name, FacilityType.ZD_ZP)) { diff --git a/src/app/babylon/view/toolbar-window/toobar-window.ts b/src/app/babylon/view/toolbar-window/toobar-window.ts index 19987bb..ba52b8a 100644 --- a/src/app/babylon/view/toolbar-window/toobar-window.ts +++ b/src/app/babylon/view/toolbar-window/toobar-window.ts @@ -89,6 +89,8 @@ export class ToolbarWindow extends UIBase { //#endregion + //#region 加油站专用 + /** * 清空找不到具体模型的设备info和data */ @@ -118,6 +120,16 @@ export class ToolbarWindow extends UIBase { BuildingWindow.instance.showZP(show); } + /** + * 保存展示模块当前数据 + */ + saveShowMoudleData() { + BuildingWindow.instance.saveShowMoudleData(); + PlanComponent.instance.openSnackBar("记录当前视角"); + } + + //#endregion + onInit() { super.onInit(); diff --git a/src/app/pages/left-domain/left-domain.component.html b/src/app/pages/left-domain/left-domain.component.html index 037c440..73e12e9 100644 --- a/src/app/pages/left-domain/left-domain.component.html +++ b/src/app/pages/left-domain/left-domain.component.html @@ -1,7 +1,74 @@
- + +
+
+

北京市第十九加油站

+

北京市朝阳区朝外大街关东店33号

+

山东省淄博市

+

2020.7.26开业

+

4车道

+
+
+

营业执照

+

+
+
+ + +
+
+

1类加油机

+
+
+

品牌

+

超大牌

+

油枪数量

+

油品品号

+

油泵类型

+
+
+

超大牌

+

2

+

4

+

92#

+

自吸泵

+
+
+
+
+ + +
+
+

1号油罐

+
+
+

油品品号

+

油罐容积

+

安全容积

+

数量

+

罐区

+

油罐类型

+
+
+

92#

+

200L

+

180L

+

1

+

独立罐区

+

防渗罐池

+
+
+
+
+ + +
+ +
+
diff --git a/src/app/pages/left-domain/left-domain.component.scss b/src/app/pages/left-domain/left-domain.component.scss index 6f18b6c..fe01a1e 100644 --- a/src/app/pages/left-domain/left-domain.component.scss +++ b/src/app/pages/left-domain/left-domain.component.scss @@ -5,11 +5,11 @@ display: flex; flex-direction: column; font-family: Source Han Sans CN; + font-weight: 400; color: #fff; .childCenter{ flex: 1; - overflow-x: hidden; - overflow-y: auto; + overflow: hidden; } .childBottom{ width: 100%; @@ -31,4 +31,47 @@ .anticon{ margin-right: 3px; } //字体图标 } } +} + +.title{ font-size: 16px; height: 20px; line-height: 20px; margin-bottom: 20px; } //头部header +.publicBox{ width: 100%; height: 100%; overflow-y: auto; padding: 0 20px; } +.baseInfo{ //基本信息 + .interval{ margin-top: 10px; border-bottom: 1px solid rgb(197, 226, 245); } //分隔div + p{ height: 20px; line-height: 20px; } + .titleBotton{ background: #2399FF; border-radius: 3px; height: 20px; line-height: 20px; font-size: 12px; margin-left: 5px; padding: 0 5px; border: none; outline: none; } + .text{ font-size: 14px; margin-bottom: 15px; } + .textIcon{ width: 20px; height: 20px; vertical-align: top; margin-right: 5px; } + .textImage{ margin-bottom: 15px; height: auto; line-height: normal; img{ width: auto; height: 130px; } } +} +.refueller{ //加油机 + .interval{ margin-top: 10px; } //分隔div + .table{ + width: 100%; + border: 1px solid #91CCFF; + border-bottom: none; + display: flex; + p{ height: 32px; line-height: 32px; margin: 0px; } + .tableHeader{ + flex: 4; + text-align: right; + color: #23D9FF; + p{ padding-right: 15px; border-right: 1px solid #91CCFF; border-bottom: 1px solid #91CCFF; background: rgba(145, 204, 255, 0.2); } + } + .tableContent{ + flex: 6; + text-align: left; + p{ padding-left: 20px; border-bottom: 1px solid #91CCFF; } + } + } +} +.oilTank{ //油管设备 + +} +.fireFacilities{ //消防设施 + .ant-tree{ + height: 32px; + line-height: 32px; + background-color: transparent; + color: #C4E2FC; + } } \ No newline at end of file diff --git a/src/app/pages/left-domain/left-domain.component.ts b/src/app/pages/left-domain/left-domain.component.ts index a2e06bc..80e56ad 100644 --- a/src/app/pages/left-domain/left-domain.component.ts +++ b/src/app/pages/left-domain/left-domain.component.ts @@ -1,4 +1,5 @@ -import { Component, OnInit } from '@angular/core'; +import { Component, OnInit, ViewChild } from '@angular/core'; +import { NzTreeComponent, NzTreeNodeOptions } from 'ng-zorro-antd/tree'; import { PlanComponent } from '../plan/plan.component'; @Component({ @@ -15,6 +16,8 @@ export class LeftDomainComponent implements OnInit { } beforeFence: number; //当前选中功能栏 + @ViewChild('nzTreeComponent', { static: false }) nzTreeComponent!: NzTreeComponent; + treeData: NzTreeNodeOptions[] = treeData.nodes; //tree data //初始化组件 initComponent(type?: number) { @@ -38,3 +41,31 @@ export class LeftDomainComponent implements OnInit { } + +export class treeData { + static nodes: NzTreeNodeOptions[] = [ + { + title: '灭火器', + key: '1', + selectable: false, + children: [ + { title: '4KG手提干粉灭火器', key: '1', selectable: false, }, + { title: '4KG手提泡沫灭火器', key: '2', selectable: false, }, + { title: '4KG手提二氧化碳灭火器', key: '3', selectable: false, }, + { title: '35KG手推灭火器', key: '4', selectable: false, }, + ] + }, + { + title: '灭火毯', + key: '2', + selectable: false, + children: [] + }, + { + title: '消防锹', + key: '3', + selectable: false, + children: [] + }, + ]; +} diff --git a/src/app/pages/pages.module.ts b/src/app/pages/pages.module.ts index e768c18..470eb6a 100644 --- a/src/app/pages/pages.module.ts +++ b/src/app/pages/pages.module.ts @@ -29,6 +29,7 @@ import { NzPaginationModule } from 'ng-zorro-antd/pagination'; import { NzDropDownModule } from 'ng-zorro-antd/dropdown'; import { NzMessageModule } from 'ng-zorro-antd/message'; import { NzSpinModule } from 'ng-zorro-antd/spin'; +import { NzTreeModule } from 'ng-zorro-antd/tree'; import { TodayWarningAdminComponent } from './today-warning-admin/today-warning-admin.component'; import { CriminalRecordsAdminComponent } from './criminal-records-admin/criminal-records-admin.component'; import { EquipmentInfoComponent } from './equipment-info/equipment-info.component'; @@ -63,7 +64,8 @@ import { EditequipmentComponent } from './equipment-info/editequipment/editequip NzPaginationModule, NzDropDownModule, NzMessageModule, - NzSpinModule + NzSpinModule, + NzTreeModule ], entryComponents :[AddequipmentComponent,EditequipmentComponent] }) diff --git a/src/app/pages/plan/plan.component.html b/src/app/pages/plan/plan.component.html index d626cd2..d872530 100644 --- a/src/app/pages/plan/plan.component.html +++ b/src/app/pages/plan/plan.component.html @@ -59,7 +59,7 @@
- +
@@ -73,10 +73,13 @@
-
+
+ + +
- +
diff --git a/src/app/pages/plan/plan.component.scss b/src/app/pages/plan/plan.component.scss index c98eb3c..789ec7e 100644 --- a/src/app/pages/plan/plan.component.scss +++ b/src/app/pages/plan/plan.component.scss @@ -212,27 +212,31 @@ //右上角快捷栏 .rightTopFast{ - width: 340px; + width: 400px; height: 38px; position: absolute; right: 1px; top: 3%; - overflow: hidden; - box-sizing: border-box; display: flex; >div { height: 38px; border-radius: 5px; } button { - width: 36px; - height: 36px; + width: 38px; + height: 38px; border: none; outline: none; background-color: transparent; color: #fff; cursor: pointer; + padding: 0; + } + .save{ + margin: 0 10px; + button{ background-color: #0080FF; border-radius: 5px; } + button:first-child{ margin-right: 10px; } + .anticon{ font-size: 20px; line-height: 40px; } //字体图标 } .publicFast { - box-sizing: border-box; - padding: 1px 3px; + padding: 0px 3px; background-color: rgba(0,0,0,0.5); } .leftFast { @@ -244,7 +248,7 @@ .leftFastIsTure { border: 1px solid #fff; } //吸附样式 } .leftFunction { - margin: 0 10px; + margin-right: 10px; } .selectRightTopFast { border: 1px solid #fff; } //选种样式 } \ No newline at end of file diff --git a/src/app/pages/plan/plan.component.ts b/src/app/pages/plan/plan.component.ts index c1e90c3..01bb492 100644 --- a/src/app/pages/plan/plan.component.ts +++ b/src/app/pages/plan/plan.component.ts @@ -11,13 +11,14 @@ import { ToolbarWindow } from 'src/app/babylon/view/toolbar-window/toobar-window import { BuildingStatus } from 'src/app/babylon/controller/status/building-status'; import { BuildingUIItem } from 'src/app/babylon/view/building-window/building-ui-item'; import { BuildingType } from 'src/app/babylon/model/data/institution/building/building-data'; -import { BuildingWindow, JYZInfoMoudleType } from 'src/app/babylon/view/building-window/building-window'; +import { BuildingWindow } from 'src/app/babylon/view/building-window/building-window'; import { FacilityUIItem } from 'src/app/babylon/view/facility-window/facility-ui-item'; import { FacilityWindow } from 'src/app/babylon/view/facility-window/facility-window'; import { FacilityInfoUIItem } from 'src/app/babylon/view/facilityinfoinscene-window/facilityinfo-ui-item'; import { EventManager } from '@angular/platform-browser'; import { NzMessageService } from 'ng-zorro-antd/message'; import { LeftDomainComponent } from '../left-domain/left-domain.component'; +import { JYZInfoMoudleType } from 'src/app/babylon/model/data/institution/jyz-show-data'; @@ -58,10 +59,10 @@ export class PlanComponent implements OnInit { loginStatus.getInstitutionListFromServe((result: InsitutionDataSimple[], data: any) => { if (ModeManager.institutionDemoKey == ModeManager.c_demoKey_null) { //无指定测试单位,则为正式启动,根据当前单位key寻找 let key = 'ceshi'; - console.log("获取数据", data); + // console.log("获取数据", data); let find = data.find(item => { return item.key === key }) if (find) { //如果在data中找到了对应的单位key,则表示已经有三维数据,直接进入 - console.log("找到已有单位" + key); + // console.log("找到已有单位" + key); this.beforeOneSatus = StatusManager.getStatus(LoginSatus); this.beforeOneSatus.onSelectInsSuccess(find) } else { //如果没有找到对应的单位key,则调用新建单位 @@ -109,29 +110,33 @@ export class PlanComponent implements OnInit { this.isShowChildComponent && this.leftDomain ? this.leftDomain.initComponent(type) : null; //手动初始化子组件 this.selectFence = type this.isShowChildComponent = true - type > 0 && type < 7 ? buildingWindow.showJYZInfoModel(fenceType, true) : null + buildingWindow.showJYZInfoModel(fenceType, true) } else { //取消选中 this.selectFence = -1 this.isShowChildComponent = false - type > 0 && type < 7 ? buildingWindow.showJYZInfoModel(fenceType, false) : null + buildingWindow.showJYZInfoModel(fenceType, false) } } //获取 头部功能栏Type getFenceType(type: number): JYZInfoMoudleType { let fenceType - if (type === 1) { + if (type === 0) { + fenceType = JYZInfoMoudleType.JBXX + } else if (type === 1) { fenceType = JYZInfoMoudleType.JYJ } else if (type === 2) { fenceType = JYZInfoMoudleType.YG } else if (type === 3) { fenceType = JYZInfoMoudleType.XF } else if (type === 4) { - fenceType = JYZInfoMoudleType.TSLX + fenceType = JYZInfoMoudleType.AQSS } else if (type === 5) { fenceType = JYZInfoMoudleType.SYG } else if (type === 6) { fenceType = JYZInfoMoudleType.YQHSGX + } else if (type === 7) { + fenceType = JYZInfoMoudleType.YJCZ } return fenceType } @@ -323,8 +328,12 @@ export class PlanComponent implements OnInit { } //保存 - preserve() { - ToolbarWindow.instance.onBtnSave(); + preserve(type: boolean) { + if (type) { + ToolbarWindow.instance.onBtnSave(); + } else { + ToolbarWindow.instance.saveShowMoudleData(); + } } //通用 消息通知栏 diff --git a/src/assets/images/baseInfo/building.png b/src/assets/images/baseInfo/building.png new file mode 100644 index 0000000..90c838c Binary files /dev/null and b/src/assets/images/baseInfo/building.png differ diff --git a/src/assets/images/baseInfo/date.png b/src/assets/images/baseInfo/date.png new file mode 100644 index 0000000..36711a3 Binary files /dev/null and b/src/assets/images/baseInfo/date.png differ diff --git a/src/assets/images/baseInfo/hospital.png b/src/assets/images/baseInfo/hospital.png new file mode 100644 index 0000000..3163841 Binary files /dev/null and b/src/assets/images/baseInfo/hospital.png differ diff --git a/src/assets/images/baseInfo/phone.png b/src/assets/images/baseInfo/phone.png new file mode 100644 index 0000000..ea6d501 Binary files /dev/null and b/src/assets/images/baseInfo/phone.png differ diff --git a/src/assets/images/baseInfo/police.png b/src/assets/images/baseInfo/police.png new file mode 100644 index 0000000..4708ae0 Binary files /dev/null and b/src/assets/images/baseInfo/police.png differ diff --git a/src/assets/images/baseInfo/position.png b/src/assets/images/baseInfo/position.png new file mode 100644 index 0000000..bc173d4 Binary files /dev/null and b/src/assets/images/baseInfo/position.png differ diff --git a/src/assets/images/baseInfo/road.png b/src/assets/images/baseInfo/road.png new file mode 100644 index 0000000..f064e1a Binary files /dev/null and b/src/assets/images/baseInfo/road.png differ diff --git a/src/assets/images/facility/in/XF_MHQ_GF_35.png b/src/assets/images/facility/in/XF_MHQ_GF_35.png index 60d38b0..1814a11 100644 Binary files a/src/assets/images/facility/in/XF_MHQ_GF_35.png and b/src/assets/images/facility/in/XF_MHQ_GF_35.png differ diff --git a/src/assets/images/facility/in/XF_MHQ_GF_4.png b/src/assets/images/facility/in/XF_MHQ_GF_4.png index c2811d5..620a6fe 100644 Binary files a/src/assets/images/facility/in/XF_MHQ_GF_4.png and b/src/assets/images/facility/in/XF_MHQ_GF_4.png differ diff --git a/src/assets/images/facility/in/XF_MHQ_GF_8.png b/src/assets/images/facility/in/XF_MHQ_GF_8.png index b3e78e2..697e80f 100644 Binary files a/src/assets/images/facility/in/XF_MHQ_GF_8.png and b/src/assets/images/facility/in/XF_MHQ_GF_8.png differ diff --git a/src/assets/images/facility/in/XF_MHQ_PT_35.png b/src/assets/images/facility/in/XF_MHQ_PT_35.png index dfc59c9..fbd2b78 100644 Binary files a/src/assets/images/facility/in/XF_MHQ_PT_35.png and b/src/assets/images/facility/in/XF_MHQ_PT_35.png differ diff --git a/src/assets/images/facility/in/XF_MHQ_PT_4.png b/src/assets/images/facility/in/XF_MHQ_PT_4.png index 128ada5..bb5e697 100644 Binary files a/src/assets/images/facility/in/XF_MHQ_PT_4.png and b/src/assets/images/facility/in/XF_MHQ_PT_4.png differ diff --git a/src/assets/images/facility/in/XF_MHQ_PT_8.png b/src/assets/images/facility/in/XF_MHQ_PT_8.png index de94ddc..165d63a 100644 Binary files a/src/assets/images/facility/in/XF_MHQ_PT_8.png and b/src/assets/images/facility/in/XF_MHQ_PT_8.png differ diff --git a/src/assets/images/facility/in/XF_MHT.png b/src/assets/images/facility/in/XF_MHT.png index dd6647a..59b42ce 100644 Binary files a/src/assets/images/facility/in/XF_MHT.png and b/src/assets/images/facility/in/XF_MHT.png differ diff --git a/src/assets/images/facility/in/XF_XFCM.png b/src/assets/images/facility/in/XF_XFCM.png index c253fe4..ffd5524 100644 Binary files a/src/assets/images/facility/in/XF_XFCM.png and b/src/assets/images/facility/in/XF_XFCM.png differ diff --git a/src/assets/images/facility/in/XF_XFF.png b/src/assets/images/facility/in/XF_XFF.png index 37feb73..b163770 100644 Binary files a/src/assets/images/facility/in/XF_XFF.png and b/src/assets/images/facility/in/XF_XFF.png differ diff --git a/src/assets/images/facility/in/XF_XFQ.png b/src/assets/images/facility/in/XF_XFQ.png index a15f56d..8b37d93 100644 Binary files a/src/assets/images/facility/in/XF_XFQ.png and b/src/assets/images/facility/in/XF_XFQ.png differ diff --git a/src/assets/images/facility/in/XF_XFS.png b/src/assets/images/facility/in/XF_XFS.png index 002638a..28d5a34 100644 Binary files a/src/assets/images/facility/in/XF_XFS.png and b/src/assets/images/facility/in/XF_XFS.png differ diff --git a/src/assets/images/facility/in/XF_XFT.png b/src/assets/images/facility/in/XF_XFT.png index 0e38f1a..5f761dd 100644 Binary files a/src/assets/images/facility/in/XF_XFT.png and b/src/assets/images/facility/in/XF_XFT.png differ diff --git a/src/assets/images/facility/in/XKS.png b/src/assets/images/facility/in/XKS.png deleted file mode 100644 index 9c27faa..0000000 Binary files a/src/assets/images/facility/in/XKS.png and /dev/null differ diff --git a/src/styles.scss b/src/styles.scss index f53bed5..e2f0095 100644 --- a/src/styles.scss +++ b/src/styles.scss @@ -102,5 +102,15 @@ h1 { font-size: 16px; } +//滚动条样式 +::-webkit-scrollbar { + width: 5px; +} +::-webkit-scrollbar-thumb { + background-image: linear-gradient(#2495f8,#1c73c2,#02233f,); +} +::-webkit-scrollbar-track { + background-color: #0d4070; +}