陈鹏飞 3 years ago
parent
commit
4f6f71c0c0
  1. 5
      package-lock.json
  2. 1
      package.json
  3. 4
      src/app/babylon/controller/config-manager.ts
  4. 4
      src/app/babylon/controller/inputController.ts
  5. 19
      src/app/babylon/controller/scene-manager.ts
  6. 6
      src/app/babylon/controller/serve-manager.ts
  7. 36
      src/app/babylon/controller/status/login-status.ts
  8. 1
      src/app/babylon/model/data/institution/institution-data-simple.ts
  9. 4
      src/app/babylon/model/data/mark/all-mark-data.ts
  10. 8
      src/app/babylon/model/data/mark/mark-data.ts
  11. 15
      src/app/babylon/model/data/mark/mark-plan-data.ts
  12. 12
      src/app/babylon/model/info/mark/mark-plan-info.ts
  13. 21
      src/app/babylon/model/info/mark/model-info-mark.ts
  14. 2
      src/app/babylon/model/info/mark/other/mark-plan-area-info.ts
  15. 5
      src/app/babylon/model/info/mark/other/mark-plan-line-info.ts
  16. 8
      src/app/babylon/model/info/mark/other/mark-plan-particle-info.ts
  17. 2
      src/app/babylon/tool/babylon-tool.ts
  18. 2
      src/app/babylon/view/building-window/building-window.ts
  19. 2
      src/app/babylon/view/institution/institution-create-window.ts
  20. 21
      src/app/babylon/view/mark-window/mark-window.ts
  21. 2
      src/app/babylon/view/toolbar-window/toobar-window.ts
  22. 41
      src/app/pages/criminal-records-admin/criminal-records-admin.component.html
  23. 7
      src/app/pages/criminal-records-admin/criminal-records-admin.component.scss
  24. 128
      src/app/pages/criminal-records-admin/criminal-records-admin.component.ts
  25. 35
      src/app/pages/criminal-records/criminal-records.component.html
  26. 8
      src/app/pages/criminal-records/criminal-records.component.scss
  27. 124
      src/app/pages/criminal-records/criminal-records.component.ts
  28. 14
      src/app/pages/login/login.component.ts
  29. 2
      src/app/pages/plan-admin/plan-admin.component.ts
  30. 55
      src/app/pages/plan/plan.component.ts
  31. 9
      src/app/system-management/analysis-of-the-host/analysis-of-the-host.component.ts
  32. 1
      src/app/system-management/navigation/navigation.component.html
  33. 9
      src/app/system-management/organization/organization.component.ts
  34. 1
      src/app/system-management/push/edit-push-item/edit-push-item.component.html
  35. 0
      src/app/system-management/push/edit-push-item/edit-push-item.component.scss
  36. 25
      src/app/system-management/push/edit-push-item/edit-push-item.component.spec.ts
  37. 15
      src/app/system-management/push/edit-push-item/edit-push-item.component.ts
  38. 46
      src/app/system-management/push/push.component.html
  39. 81
      src/app/system-management/push/push.component.scss
  40. 46
      src/app/system-management/push/push.component.ts
  41. 4
      src/app/system-management/system-management-routing.module.ts
  42. 4
      src/app/system-management/system-management.module.ts
  43. 9
      src/app/system-management/user/adduser/adduser.component.ts
  44. 9
      src/app/system-management/user/edituser/edituser.component.ts
  45. BIN
      src/assets/images/icon/push.png
  46. BIN
      src/assets/images/mark/inside/gfmhq.png
  47. BIN
      src/assets/images/mark/inside/ptmhq.png
  48. BIN
      src/assets/images/mark/inside/stcmhq.png
  49. BIN
      src/assets/images/mark/inside/tcmhq.png
  50. 0
      src/assets/images/mark/outside/xfc.png
  51. 0
      src/assets/images/mark/outside/xfy.png
  52. BIN
      src/assets/images/packup.png
  53. BIN
      src/assets/mesh/mark/outside/mhf/Boots_AlbedoTransparency.jpg
  54. BIN
      src/assets/mesh/mark/outside/mhf/BunkerClothing_AlbedoTransparency.png
  55. BIN
      src/assets/mesh/mark/outside/mhf/Head_AlbedoTransparency.jpg
  56. BIN
      src/assets/mesh/mark/outside/mhf/Helmet_AlbedoTransparency.jpg
  57. BIN
      src/assets/mesh/mark/outside/mhf/MHF.bin
  58. 668
      src/assets/mesh/mark/outside/mhf/MHF.gltf
  59. 5
      src/assets/mesh/mark/outside/mhf/MHF.gltf.manifest
  60. BIN
      src/assets/mesh/mark/outside/mhf/ShuiQiang.jpg
  61. BIN
      src/assets/mesh/mark/outside/mhf/Straps_AlbedoTransparency.jpg
  62. BIN
      src/assets/mesh/mark/outside/pmc/CarColor.png
  63. BIN
      src/assets/mesh/mark/outside/pmc/FireCar.jpg
  64. BIN
      src/assets/mesh/mark/outside/pmc/PMC.bin
  65. 796
      src/assets/mesh/mark/outside/pmc/PMC.gltf
  66. 5
      src/assets/mesh/mark/outside/pmc/PMC.gltf.manifest
  67. 5
      yarn.lock

5
package-lock.json generated

@ -9843,6 +9843,11 @@
} }
} }
}, },
"js-base64": {
"version": "3.7.2",
"resolved": "https://registry.npmmirror.com/js-base64/download/js-base64-3.7.2.tgz",
"integrity": "sha1-gW0R2BqK/yQWA9Gc5XYeE+Qdd0U="
},
"js-levenshtein": { "js-levenshtein": {
"version": "1.1.6", "version": "1.1.6",
"resolved": "https://registry.npm.taobao.org/js-levenshtein/download/js-levenshtein-1.1.6.tgz", "resolved": "https://registry.npm.taobao.org/js-levenshtein/download/js-levenshtein-1.1.6.tgz",

1
package.json

@ -40,6 +40,7 @@
"echarts": "^4.9.0", "echarts": "^4.9.0",
"firebase": "^7.6.2", "firebase": "^7.6.2",
"install": "^0.13.0", "install": "^0.13.0",
"js-base64": "^3.7.2",
"linqjs": "^1.0.2", "linqjs": "^1.0.2",
"moment": "^2.29.1", "moment": "^2.29.1",
"ng-zorro-antd": "^9.3.0", "ng-zorro-antd": "^9.3.0",

4
src/app/babylon/controller/config-manager.ts

@ -135,8 +135,8 @@ export class ConfigManager {
[MarkType.SNH, "火(小)"], [MarkType.SNH, "火(小)"],
[MarkType.YWA, "烟雾(大)"], [MarkType.YWA, "烟雾(大)"],
[MarkType.YWB, "烟雾(小)"], [MarkType.YWB, "烟雾(小)"],
[MarkType.MHF, "消防员"], [MarkType.XFY, "消防员"],
[MarkType.PMC, "泡沫车"], [MarkType.XFC, "消防车"],
[MarkType.GA, "公安"], [MarkType.GA, "公安"],
[MarkType.JJ, "交警"], [MarkType.JJ, "交警"],
[MarkType.YS, "医生"], [MarkType.YS, "医生"],

4
src/app/babylon/controller/inputController.ts

@ -309,7 +309,7 @@ export class InputController {
} }
// 是消防员 // 是消防员
public IsFiremen(): boolean { public IsFiremen(): boolean {
return this.markType == MarkType.MHF return this.markType == MarkType.XFY
// || this.markType == MarkType.JYF // || this.markType == MarkType.JYF
// || this.markType == MarkType.GRF // || this.markType == MarkType.GRF
// || this.markType == MarkType.FHF // || this.markType == MarkType.FHF
@ -319,7 +319,7 @@ export class InputController {
} }
// 是消防车 // 是消防车
public IsFireTruck(): boolean { public IsFireTruck(): boolean {
return this.markType == MarkType.PMC return this.markType == MarkType.XFC
// || this.markType == MarkType.SGC // || this.markType == MarkType.SGC
// || this.markType == MarkType.GCGSC // || this.markType == MarkType.GCGSC
; ;

19
src/app/babylon/controller/scene-manager.ts

@ -257,11 +257,13 @@ export class SceneManager {
if (this.highLightLayer == null) { if (this.highLightLayer == null) {
this.highLightLayer = new HighlightLayer("highLight", this.scene, this.highLightLayer = new HighlightLayer("highLight", this.scene,
{ {
mainTextureRatio: 1, mainTextureRatio: 2,
blurVerticalSize: 1.5,
blurHorizontalSize: 1.5,
}); });
this.highLightLayer.innerGlow = true; this.openInnerGlow(true);
// this.highLightLayer.innerGlow = true;
this.highLightLayer.outerGlow = true; this.highLightLayer.outerGlow = true;
} }
let allMesh = mesh.getChildMeshes(); let allMesh = mesh.getChildMeshes();
@ -270,13 +272,22 @@ export class SceneManager {
let childMesh = allMesh[i]; let childMesh = allMesh[i];
if (childMesh instanceof Mesh) { if (childMesh instanceof Mesh) {
this.highLightLayer.addMesh(childMesh, color); this.highLightLayer.addMesh(childMesh, color);
// childMesh.material.alphaMode =
this.highLightNum++; this.highLightNum++;
} }
} }
} }
/**
*
*/
openInnerGlow(open: boolean) {
if (this.highLightLayer != null) {
this.highLightLayer.innerGlow = open;
}
}
highLightNum = 0; highLightNum = 0;
/** /**

6
src/app/babylon/controller/serve-manager.ts

@ -47,13 +47,13 @@ export class ServeManager {
} }
//保存单位信息 //保存单位信息
saveInstitutionData(institutionData: any, key: string = 'test', onSuccess?: (key: string, saveInstitutionData(institutionData: any, key: string = 'test', institutionID: number = 1, onSuccess?: (key: string,
result: string result: string
) => void, onError?: (key: string, error: string) => void) { ) => void, onError?: (key: string, error: string) => void) {
let l_data = classToPlain(institutionData); let l_data = classToPlain(institutionData);
console.log("保存单位", l_data); console.log("保存单位", l_data);
this.buildingBISrv.postBuildingBasicInfos(key, 1, l_data) this.buildingBISrv.postBuildingBasicInfos(key, institutionID, l_data)
.subscribe(data => { .subscribe(data => {
console.log("保存单位成功:" + key, l_data); console.log("保存单位成功:" + key, l_data);
if (onSuccess) { if (onSuccess) {
@ -73,7 +73,7 @@ export class ServeManager {
saveInstitutionListData(institutionList: InsitutionDataSimple[], onSucess?: () => void) { saveInstitutionListData(institutionList: InsitutionDataSimple[], onSucess?: () => void) {
// console.log("======保存单位"); // console.log("======保存单位");
ServeManager.instance.saveInstitutionData(institutionList, "InsList", () => { ServeManager.instance.saveInstitutionData(institutionList, "InsList", -1, () => {
//alert("保存单位列表成功"); //alert("保存单位列表成功");
if (onSucess) { if (onSucess) {
onSucess(); onSucess();

36
src/app/babylon/controller/status/login-status.ts

@ -23,7 +23,7 @@ export class LoginSatus extends StatusBase {
institutionCreateWindow: InstitutionCreateWindow; institutionCreateWindow: InstitutionCreateWindow;
institutionList: InsitutionDataSimple[];//单位简易信息列表 institutionList: InsitutionDataSimple[] = [];//单位简易信息列表
//#region 前端对接 //#region 前端对接
@ -32,7 +32,7 @@ export class LoginSatus extends StatusBase {
* *
* @param insData * @param insData
*/ */
createInsitution(key: string, name: string, onSuccess?: (insDataSimple: InsitutionDataSimple) => void) { createInsitution(key: string, name: string, id: number, onSuccess?: (insDataSimple: InsitutionDataSimple) => void) {
if (key == null) { if (key == null) {
console.error("创建单位key为null"); console.error("创建单位key为null");
@ -42,7 +42,7 @@ export class LoginSatus extends StatusBase {
let insData = new InstitutionData(); let insData = new InstitutionData();
insData.normalData = new NormalData(key, name); insData.normalData = new NormalData(key, name);
this.saveNewIns(this, insData, key, onSuccess); this.saveNewIns(this, insData, key, id, onSuccess);
} }
//#endregion //#endregion
@ -71,15 +71,15 @@ export class LoginSatus extends StatusBase {
console.error("获取单位列表失败"); console.error("获取单位列表失败");
console.log(error); console.log(error);
if (error instanceof HttpErrorResponse && error.status === 404) { if (error instanceof HttpErrorResponse && error.status === 404) {
let isAdd = confirm('数据库为空,是否进行初始化?') let isAdd = confirm('数据库为空,是否进行初始化?')
if (isAdd) { if (isAdd) {
//数据库没有数据,新建 //数据库没有数据,新建
this.institutionList = []; this.institutionList = [];
if (onSuccess) { if (onSuccess) {
onSuccess(this.institutionList, this.institutionList); onSuccess(this.institutionList, this.institutionList);
}
console.log("新建数据列表");
} }
console.log("新建数据列表");
}
} }
else { else {
console.log("单纯报错", error instanceof HttpErrorResponse, error.status === 404) console.log("单纯报错", error instanceof HttpErrorResponse, error.status === 404)
@ -194,10 +194,12 @@ export class LoginSatus extends StatusBase {
let status = this; let status = this;
ServeManager.instance.saveInstitutionListData(this.institutionList, () => { //不再自己存列表
//进入新单位 // ServeManager.instance.saveInstitutionListData(this.institutionList, () => {
status.onSelectInsSuccess(insData); // //进入新单位
}); // status.onSelectInsSuccess(insData);
// });
status.onSelectInsSuccess(insData);
} }
//#endregion //#endregion
@ -225,9 +227,9 @@ export class LoginSatus extends StatusBase {
//保存新单位信息至服务器 //保存新单位信息至服务器
saveNewIns(status: LoginSatus, insData: InstitutionData, key: string, onSuccess?: (insDataSimple: InsitutionDataSimple) => void) { saveNewIns(status: LoginSatus, insData: InstitutionData, key: string, id: number, onSuccess?: (insDataSimple: InsitutionDataSimple) => void) {
console.log("准备保存新单位"); console.log("准备保存新单位");
ServeManager.instance.saveInstitutionData(insData, key, (key, result) => { ServeManager.instance.saveInstitutionData(insData, key, id, (key, result) => {
console.log("在服务器新建单位" + key); console.log("在服务器新建单位" + key);
let insDataSimple = new InsitutionDataSimple(); let insDataSimple = new InsitutionDataSimple();
insDataSimple.key = key; insDataSimple.key = key;

1
src/app/babylon/model/data/institution/institution-data-simple.ts

@ -2,4 +2,5 @@
export class InsitutionDataSimple { export class InsitutionDataSimple {
key: string;//唯一身份key key: string;//唯一身份key
name: string;//自定义的名称 name: string;//自定义的名称
id: number;//保存时要用到,前后端需要,必须是number
} }

4
src/app/babylon/model/data/mark/all-mark-data.ts

@ -55,8 +55,8 @@ export class AllMarkData {
//外部力量 //外部力量
tagPos = MarkTagPos.Outside; tagPos = MarkTagPos.Outside;
AllMarkData.newMarkData(MarkType.PMC, MarkKindType.Car, tagPos, result); AllMarkData.newMarkData(MarkType.XFC, MarkKindType.Car, tagPos, result);
AllMarkData.newMarkData(MarkType.MHF, MarkKindType.Persion, tagPos, result); AllMarkData.newMarkData(MarkType.XFY, MarkKindType.Persion, tagPos, result);
AllMarkData.newMarkData(MarkType.JC, MarkKindType.Car, tagPos, result); AllMarkData.newMarkData(MarkType.JC, MarkKindType.Car, tagPos, result);
AllMarkData.newMarkData(MarkType.JJ, MarkKindType.Persion, tagPos, result); AllMarkData.newMarkData(MarkType.JJ, MarkKindType.Persion, tagPos, result);
AllMarkData.newMarkData(MarkType.GA, MarkKindType.Persion, tagPos, result); AllMarkData.newMarkData(MarkType.GA, MarkKindType.Persion, tagPos, result);

8
src/app/babylon/model/data/mark/mark-data.ts

@ -200,14 +200,14 @@ export enum MarkType {
//==================外部力量================ //==================外部力量================
/** /**
* *
*/ */
MHF = "MHF", XFY = "XFY",
/** /**
* *
*/ */
PMC = "PMC", XFC = "XFC",
/** /**

15
src/app/babylon/model/data/mark/mark-plan-data.ts

@ -351,6 +351,21 @@ export class MarkNodeData {
return newEnvironment; return newEnvironment;
} }
/**
*
*/
getShowTime() {
let textNum = 0;
if (this.describe != null) {
textNum = this.describe.length;
}
let timeScale = 1;
return textNum * timeScale;
}
} }
/** /**

12
src/app/babylon/model/info/mark/mark-plan-info.ts

@ -99,19 +99,7 @@ export class MarkNodeInfo {
return this.currentMarkDataIndex; return this.currentMarkDataIndex;
} }
/**
*
*/
getShowTime() {
let textNum = 0;
if (this.nodeData.describe != null) {
textNum = this.nodeData.describe.length;
}
let timeScale = 1;
return textNum * timeScale;
}
/** /**
* *

21
src/app/babylon/model/info/mark/model-info-mark.ts

@ -17,7 +17,7 @@ import { ParticleSystemTool } from "src/app/babylon/tool/particle-system-tool";
import { TsTool } from "src/app/babylon/tool/ts-tool"; import { TsTool } from "src/app/babylon/tool/ts-tool";
import { MarkWindow } from "src/app/babylon/view/mark-window/mark-window"; import { MarkWindow } from "src/app/babylon/view/mark-window/mark-window";
import { ChildNodeData, MarkData, MarkTask, MarkType } from "../../data/mark/mark-data"; import { ChildNodeData, MarkData, MarkKindType, MarkTask, MarkType } from "../../data/mark/mark-data";
import { BuildingInfo } from "../building/building-info"; import { BuildingInfo } from "../building/building-info";
import { ModelInfo } from "../model/model-info"; import { ModelInfo } from "../model/model-info";
@ -195,7 +195,7 @@ export class ModelInfo_mark extends ModelInfo {
* @param select * @param select
*/ */
onSelect(select: boolean) { onSelect(select: boolean) {
console.log("onSelect", select); // console.log("onSelect", select);
this.isSelect = select; this.isSelect = select;
// this.lookAt(); // this.lookAt();
if (select) { if (select) {
@ -210,7 +210,16 @@ export class ModelInfo_mark extends ModelInfo {
else { else {
//this.pointerDragBehavior.enabled = true; //this.pointerDragBehavior.enabled = true;
} }
GizmoTool.onPickMeshInfoObservable.notifyObservers(this);
//特效类、灭火器类,要出现坐标轴
if (this.markData.markKindType == MarkKindType.Effect
|| TsTool.stringContain(this.markData.type, "MHQ")) {
GizmoTool.onPickMeshInfoObservable.notifyObservers(this);
}
else {
GizmoTool.onPickMeshInfoObservable.notifyObservers(null);
}
// SceneManager.Instance.defaultCamera.target = this.modelBox.absolutePosition.clone() // SceneManager.Instance.defaultCamera.target = this.modelBox.absolutePosition.clone()
// SceneManager.Instance.defaultCamera.setTarget(this.modelBox.absolutePosition.clone()); // SceneManager.Instance.defaultCamera.setTarget(this.modelBox.absolutePosition.clone());
@ -378,7 +387,7 @@ export class ModelInfo_mark extends ModelInfo {
canSprinkling() { canSprinkling() {
let result = false; let result = false;
switch (this.markData.type) { switch (this.markData.type) {
case MarkType.MHF: case MarkType.XFY:
result = true; result = true;
//五种消防员 //五种消防员
if (this.node_pt == null && this.models != null) { if (this.node_pt == null && this.models != null) {
@ -392,7 +401,7 @@ export class ModelInfo_mark extends ModelInfo {
} }
break; break;
case MarkType.PMC: case MarkType.XFC:
//五种消防车 //五种消防车
result = true; result = true;
@ -451,7 +460,7 @@ export class ModelInfo_mark extends ModelInfo {
return; return;
} }
switch (this.markData.type) { switch (this.markData.type) {
case MarkType.MHF: case MarkType.XFY:
//消防员,显隐喷枪 //消防员,显隐喷枪
if (this.node_pt != null) { if (this.node_pt != null) {

2
src/app/babylon/model/info/mark/other/mark-plan-area-info.ts

@ -232,7 +232,7 @@ export class AreaPoint {
this.pos = pos; this.pos = pos;
this.parent = parent; this.parent = parent;
this.mesh = MeshBuilder.CreateSphere("AreaPoint", { segments: 4, diameter: 3 }); this.mesh = MeshBuilder.CreateSphere("AreaPoint", { segments: 4, diameter: 0.8 });
this.mesh.material = material; this.mesh.material = material;
this.mesh.setParent(parent.modelBox); this.mesh.setParent(parent.modelBox);
this.mesh.position = pos; this.mesh.position = pos;

5
src/app/babylon/model/info/mark/other/mark-plan-line-info.ts

@ -64,9 +64,9 @@ export class ModelInfo_mark_line extends ModelInfo_mark {
*/ */
updateRender() { updateRender() {
if (this.lineData.pointData != null && this.lineData.pointData.length > 1) { if (this.lineData.pointData != null && this.lineData.pointData.length > 1) {
this.lineMesh = MeshBuilder.CreateTube("tube", { path: this.lineData.pointData, radius: 0.2, sideOrientation: Mesh.FRONTSIDE, updatable: true }, SceneManager.Instance.scene); this.lineMesh = MeshBuilder.CreateTube("tube", { path: this.lineData.pointData, radius: 0.1, sideOrientation: Mesh.FRONTSIDE, updatable: true, cap: 3 }, SceneManager.Instance.scene);
this.lineMesh.setParent(this.modelBox); this.lineMesh.setParent(this.modelBox);
this.lineMesh.position = Vector3.Zero(); this.lineMesh.position = Vector3.Zero()
this.lineMesh.material = this.mat; this.lineMesh.material = this.mat;
let length = Vector3.Distance(this.lineData.pointData[0], this.lineData.pointData[1]); let length = Vector3.Distance(this.lineData.pointData[0], this.lineData.pointData[1]);
@ -79,7 +79,6 @@ export class ModelInfo_mark_line extends ModelInfo_mark {
ModelInfo_mark_line.publicMat = mat; ModelInfo_mark_line.publicMat = mat;
// instance.lineMesh.material.getEffect()?.setFloat("u_alpha", 1); // instance.lineMesh.material.getEffect()?.setFloat("u_alpha", 1);
let textures: BaseTexture[] = instance.lineMesh.material.getActiveTextures(); let textures: BaseTexture[] = instance.lineMesh.material.getActiveTextures();
console.log("图片", textures);
let texture0 = (textures[0] as Texture); let texture0 = (textures[0] as Texture);
texture0.vScale = length; texture0.vScale = length;
texture0.wrapV = 1; texture0.wrapV = 1;

8
src/app/babylon/model/info/mark/other/mark-plan-particle-info.ts

@ -35,23 +35,23 @@ export class ModelInfo_mark_particle extends ModelInfo_mark {
case MarkType.H: case MarkType.H:
particleJsonPath.push("assets/particlesystem/fire/fire_h_1.json"); particleJsonPath.push("assets/particlesystem/fire/fire_h_1.json");
particleJsonPath.push("assets/particlesystem/smoke/smoke_a.json"); particleJsonPath.push("assets/particlesystem/smoke/smoke_a.json");
instance.modelBox.scaling = new Vector3(5, 1, 5); instance.modelBox.scaling = new Vector3(50, 70, 50);
posOffset.y = 0.7 / instance.modelBox.scaling.y; posOffset.y = 0.7 / instance.modelBox.scaling.y;
break; break;
case MarkType.SNH: case MarkType.SNH:
particleJsonPath.push("assets/particlesystem/fire/fire_snh_1.json"); particleJsonPath.push("assets/particlesystem/fire/fire_snh_1.json");
particleJsonPath.push("assets/particlesystem/smoke/smoke_snh.json"); particleJsonPath.push("assets/particlesystem/smoke/smoke_snh.json");
instance.modelBox.scaling = new Vector3(3, 1, 3); instance.modelBox.scaling = new Vector3(30, 60, 30);
posOffset.y = 0.2 / instance.modelBox.scaling.y; posOffset.y = 0.2 / instance.modelBox.scaling.y;
break; break;
case MarkType.YWA: case MarkType.YWA:
particleJsonPath.push("assets/particlesystem/smoke/smoke_a.json"); particleJsonPath.push("assets/particlesystem/smoke/smoke_a.json");
instance.modelBox.scaling = new Vector3(5, 1, 5); instance.modelBox.scaling = new Vector3(50, 130, 50);
posOffset.y = 0.1 / instance.modelBox.scaling.y; posOffset.y = 0.1 / instance.modelBox.scaling.y;
break; break;
case MarkType.YWB: case MarkType.YWB:
particleJsonPath.push("assets/particlesystem/smoke/smoke_snh.json"); particleJsonPath.push("assets/particlesystem/smoke/smoke_snh.json");
instance.modelBox.scaling = new Vector3(3, 1, 3); instance.modelBox.scaling = new Vector3(30, 60, 30);
posOffset.y = 0.2 / instance.modelBox.scaling.y; posOffset.y = 0.2 / instance.modelBox.scaling.y;
break; break;
} }

2
src/app/babylon/tool/babylon-tool.ts

@ -202,7 +202,7 @@ export class BabylonTool {
let shaderUrl = shaderPath; let shaderUrl = shaderPath;
nodeMaterial.loadAsync(shaderUrl).then(() => { nodeMaterial.loadAsync(shaderUrl).then(() => {
nodeMaterial.build(true); nodeMaterial.build(false); //关闭shader调试打印
if (mesh != null) { if (mesh != null) {
mesh.material = nodeMaterial; mesh.material = nodeMaterial;
// let effect = nodeMaterial.getEffect(); // let effect = nodeMaterial.getEffect();

2
src/app/babylon/view/building-window/building-window.ts

@ -803,6 +803,8 @@ export class BuildingWindow extends UIBase {
for (let i = 0; i < showNameFacilitys.length; i++) { for (let i = 0; i < showNameFacilitys.length; i++) {
showNameFacilitys[i].showNameUI(isShowNameUI_JYJ_YG); showNameFacilitys[i].showNameUI(isShowNameUI_JYJ_YG);
} }
SceneManager.Instance.openInnerGlow(!isShowNameUI_JYJ_YG); //输油管和油气回收管太细,关闭内发光
if (show) { if (show) {

2
src/app/babylon/view/institution/institution-create-window.ts

@ -68,7 +68,7 @@ export class InstitutionCreateWindow extends UIBase {
saveNewIns() { saveNewIns() {
let window = this; let window = this;
let loginStatus = StatusManager.getStatus<LoginSatus>(LoginSatus); let loginStatus = StatusManager.getStatus<LoginSatus>(LoginSatus);
loginStatus.saveNewIns(loginStatus, window.insData, window.insDataSimple.key, (insDataSimple) => { loginStatus.saveNewIns(loginStatus, window.insData, window.insDataSimple.key, window.insDataSimple.id, (insDataSimple) => {
loginStatus.closeCreateWindow(); loginStatus.closeCreateWindow();
}); });
} }

21
src/app/babylon/view/mark-window/mark-window.ts

@ -29,6 +29,7 @@ import { BabylonTool } from "../../tool/babylon-tool";
import { LoadTool } from "../../tool/load-tool"; import { LoadTool } from "../../tool/load-tool";
import { MeshPool, MeshPoolInfo } from "../../tool/mesh-pool"; import { MeshPool, MeshPoolInfo } from "../../tool/mesh-pool";
import { ParticleSystemTool } from "../../tool/particle-system-tool"; import { ParticleSystemTool } from "../../tool/particle-system-tool";
import { SpeakingTool } from "../../tool/speaking-tool";
import { BuildingUIItem } from "../building-window/building-ui-item"; import { BuildingUIItem } from "../building-window/building-ui-item";
import { BuildingWindow } from "../building-window/building-window"; import { BuildingWindow } from "../building-window/building-window";
import { IndoorFloorUIItem } from "../indoor-window/indoor-floorui-item"; import { IndoorFloorUIItem } from "../indoor-window/indoor-floorui-item";
@ -302,8 +303,9 @@ export class MarkWindow extends UIBase {
* @param planId * @param planId
* @param nodeId * @param nodeId
* @param changeBuildingByUI UI切层 * @param changeBuildingByUI UI切层
* @param readDescribe
*/ */
selectMarkNode(planId: number, nodeId: number, changeBuildingByUI: boolean = false) { selectMarkNode(planId: number, nodeId: number, changeBuildingByUI: boolean = false, readDescribe = false) {
// //还原数据 // //还原数据
// if (this.currentMarkNodeDataCopy != null && reData) { // if (this.currentMarkNodeDataCopy != null && reData) {
// let oldPlaneData = this.currentMarkNodeInfo.belongToPlanData; // let oldPlaneData = this.currentMarkNodeInfo.belongToPlanData;
@ -356,11 +358,16 @@ export class MarkWindow extends UIBase {
this.currentMarkNodeInfo = new MarkNodeInfo(markPlanData, this.currentMarkNodeDataCopy); this.currentMarkNodeInfo = new MarkNodeInfo(markPlanData, this.currentMarkNodeDataCopy);
//this.currentMarkNodeDataCopy = classToClass(this.currentMarkNodeInfo.nodeData); //更新备份数据 //this.currentMarkNodeDataCopy = classToClass(this.currentMarkNodeInfo.nodeData); //更新备份数据
this.updateNodeInfo(); this.updateNodeInfo();
if (readDescribe) {
this.readDescribe(nodeCopy.describe);
}
} }
} }
/** /**
* *
* @param name * @param name
@ -969,7 +976,6 @@ export class MarkWindow extends UIBase {
} }
}) })
console.log(mesh, "是标绘物", result);
return result; return result;
} }
@ -1500,6 +1506,17 @@ export class MarkWindow extends UIBase {
} }
/**
*
* @param describe
*/
readDescribe(describe: string) {
if (describe != null) {
SpeakingTool.Instance.clear();
SpeakingTool.Instance.speak(describe);
}
}
//#endregion //#endregion

2
src/app/babylon/view/toolbar-window/toobar-window.ts

@ -49,7 +49,7 @@ export class ToolbarWindow extends UIBase {
onBtnSave() { onBtnSave() {
let data = DataManager.institutionData; let data = DataManager.institutionData;
ModeManager.log(data); ModeManager.log(data);
ServeManager.instance.saveInstitutionData(data, DataManager.institutionData_simple.key, () => { ServeManager.instance.saveInstitutionData(data, DataManager.institutionData_simple.key, DataManager.institutionData_simple.id, () => {
ModeManager.log("保存成功" + DataManager.institutionData_simple.key); ModeManager.log("保存成功" + DataManager.institutionData_simple.key);
}); });
} }

41
src/app/pages/criminal-records-admin/criminal-records-admin.component.html

@ -14,7 +14,7 @@
<nz-form-item class="searchParams"> <nz-form-item class="searchParams">
<nz-form-control> <nz-form-control>
<nz-select id="type" formControlName="type" nzPlaceHolder="请选择预警类型"> <nz-select id="type" (ngModelChange)="typeChange($event)" formControlName="type" nzPlaceHolder="请选择预警类型">
<nz-option *ngFor="let item of warningTypes" [nzValue]="item.key" [nzLabel]="item.key"></nz-option> <nz-option *ngFor="let item of warningTypes" [nzValue]="item.key" [nzLabel]="item.key"></nz-option>
</nz-select> </nz-select>
</nz-form-control> </nz-form-control>
@ -57,8 +57,9 @@
<div class="content"> <div class="content">
<div class="title"> <div class="title">
<app-title [name]="'预警类型统计'"></app-title> <app-title [name]="'预警类型统计'"></app-title>
<img (click)="isEchartsShow()" class="packup" src="../../../assets/images/packup.png" alt="">
</div> </div>
<div class="chartsbox"> <div class="chartsbox" [hidden]="!isEcharts">
<div class="chart"> <div class="chart">
<div class="leftbox"> <div class="leftbox">
<span class="chartname"> <span class="chartname">
@ -100,7 +101,7 @@
<div class="table"> <div class="table">
<div nz-row class="th"> <div nz-row class="th">
<div nz-col nzSpan="1" style="text-align: right;"> <div nz-col nzSpan="1" style="text-align: right;">
</div> </div>
<div nz-col nzSpan="2"> <div nz-col nzSpan="2">
预警级别 预警级别
@ -133,43 +134,53 @@
<div class="tbody" id="tbody"> <div class="tbody" id="tbody">
<div nz-row class="tr" *ngFor="let item of list"> <div nz-row class="tr" *ngFor="let item of list">
<div nz-col nzSpan="1" style="text-align: right;"> <div nz-col nzSpan="1" style="text-align: right;">
<img style="width: 36px;" src="../../../assets/images/level1.png" alt=""> <img *ngIf="item.violation.level == 1" style="width: 36px;" src="../../../assets/images/level1.png"
alt="">
<img *ngIf="item.violation.level == 2" style="width: 36px;" src="../../../assets/images/level2.png"
alt="">
<img *ngIf="item.violation.level == 3" style="width: 36px;" src="../../../assets/images/level3.png"
alt="">
<img *ngIf="item.violation.level == 4" style="width: 36px;" src="../../../assets/images/level4.png"
alt="">
</div> </div>
<div nz-col nzSpan="2"> <div nz-col nzSpan="2">
Ⅰ级 <span *ngIf="item.violation.level == 1">Ⅰ级</span>
<span *ngIf="item.violation.level == 2">Ⅱ级</span>
<span *ngIf="item.violation.level == 3">Ⅲ级</span>
<span *ngIf="item.violation.level == 4">Ⅳ级</span>
</div> </div>
<div nz-col nzSpan="3"> <div nz-col nzSpan="3">
日常预警行为 {{item.violation.violationType}}
</div> </div>
<div nz-col nzSpan="4"> <div nz-col nzSpan="4">
中化某某省公司 {{item.gasStation.companyName}}
</div> </div>
<div nz-col nzSpan="2"> <div nz-col nzSpan="2">
山东-淄博 {{item.gasStation.locationName}}
</div> </div>
<div nz-col nzSpan="1" style="text-align: right;box-sizing: border-box;padding-right: 8px;"> <div nz-col nzSpan="1" style="text-align: right;box-sizing: border-box;padding-right: 8px;">
<span class="ziying">自营</span> <!-- <span class="ziying">自营</span> -->
</div> </div>
<div nz-col nzSpan="4"> <div nz-col nzSpan="4">
中化山东省淄博市第6加油站 {{item.gasStation.stationName}}
</div> </div>
<div nz-col nzSpan="3"> <div nz-col nzSpan="3">
便利店 {{item.violateArea}}
</div> </div>
<div nz-col nzSpan="3"> <div nz-col nzSpan="3">
2021-10-12 09:28:13 {{item.violateTime | date:"yyyy-MM-dd HH:mm:ss"}}
</div> </div>
<div nz-col nzSpan="1"> <div nz-col nzSpan="1">
<span class="look" (click)="look()">查看</span> <span class="look" (click)="look(item)">查看</span>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<div class="pagination"> <!-- <div class="pagination">
<nz-pagination [nzPageIndex]="1" [nzTotal]="85" [nzPageSize]="20" [nzShowTotal]="totalTemplate" <nz-pagination [nzPageIndex]="1" [nzTotal]="85" [nzPageSize]="20" [nzShowTotal]="totalTemplate"
nzShowQuickJumper></nz-pagination> nzShowQuickJumper></nz-pagination>
<ng-template #totalTemplate let-total> 16条/页,共100条 </ng-template> <ng-template #totalTemplate let-total> 16条/页,共100条 </ng-template>
</div> </div> -->
</div> </div>
</div> </div>
</div> </div>

7
src/app/pages/criminal-records-admin/criminal-records-admin.component.scss

@ -52,6 +52,13 @@
box-sizing: border-box; box-sizing: border-box;
padding: 0 28px; padding: 0 28px;
margin: 13px 0; margin: 13px 0;
position: relative;
.packup {
position: absolute;
right: 33px;
top: 16px;
cursor: pointer;
}
} }
.chartsbox { .chartsbox {

128
src/app/pages/criminal-records-admin/criminal-records-admin.component.ts

@ -1,11 +1,15 @@
import { HttpClient } from '@angular/common/http'; import { HttpClient } from '@angular/common/http';
import { Component, ElementRef, OnInit } from '@angular/core'; import { Component, ElementRef, OnInit, ViewContainerRef } from '@angular/core';
import { FormBuilder, FormGroup, Validators } from '@angular/forms'; import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { Router } from '@angular/router' import { Router } from '@angular/router'
import * as echarts from 'echarts'; import * as echarts from 'echarts';
import { fromEvent } from 'rxjs'; import { fromEvent } from 'rxjs';
import { debounceTime } from 'rxjs/operators'; import { debounceTime } from 'rxjs/operators';
import * as moment from 'moment';
import { NzModalService } from 'ng-zorro-antd/modal';
import { GetOutOfLineDetailsComponent } from '../today-warning/get-out-of-line-details/get-out-of-line-details.component';
@Component({ @Component({
selector: 'app-criminal-records-admin', selector: 'app-criminal-records-admin',
templateUrl: './criminal-records-admin.component.html', templateUrl: './criminal-records-admin.component.html',
@ -14,7 +18,7 @@ import { debounceTime } from 'rxjs/operators';
export class CriminalRecordsAdminComponent implements OnInit { export class CriminalRecordsAdminComponent implements OnInit {
validateForm!: FormGroup; validateForm!: FormGroup;
constructor(private element: ElementRef, private http: HttpClient, private fb: FormBuilder, private router: Router) { } constructor(private element: ElementRef, private http: HttpClient, private fb: FormBuilder, private router: Router, private modal: NzModalService, private viewContainerRef: ViewContainerRef) { }
//饼图 //饼图
myChart myChart
option = { option = {
@ -255,24 +259,44 @@ export class CriminalRecordsAdminComponent implements OnInit {
showDetail: false,//即拖拽时候是否显示详细数值信息 默认true showDetail: false,//即拖拽时候是否显示详细数值信息 默认true
realtime: true, //是否实时更新 realtime: true, //是否实时更新
filterMode: 'filter', filterMode: 'filter',
backgroundColor:'#001735', backgroundColor: '#001735',
width:'18' width: '18'
}, },
{ {
type:'inside', type: 'inside',
yAxisIndex:0, yAxisIndex: 0,
zoomOnMouseWheel:false, //滚轮是否触发缩放 zoomOnMouseWheel: false, //滚轮是否触发缩放
moveOnMouseMove:true, //鼠标滚轮触发滚动 moveOnMouseMove: true, //鼠标滚轮触发滚动
moveOnMouseWheel:true moveOnMouseWheel: true
} }
] ]
} }
isEcharts: boolean = true
isEchartsShow() {
this.isEcharts = !this.isEcharts
}
startdate
enddate
ngOnInit(): void { ngOnInit(): void {
//当前日期
let myDate: any = new Date();
let nowY = myDate.getFullYear();
let nowM = myDate.getMonth() + 1;
let nowD = myDate.getDate();
this.enddate = nowY + "-" + (nowM < 10 ? "0" + nowM : nowM) + "-" + (nowD < 10 ? "0" + nowD : nowD);//当前日期
//获取三十天前日期
let lw = new Date(myDate - 1000 * 60 * 60 * 24 * 30);//最后一个数字30可改,30天的意思
let lastY = lw.getFullYear();
let lastM = lw.getMonth() + 1;
let lastD = lw.getDate();
this.startdate = lastY + "-" + (lastM < 10 ? "0" + lastM : lastM) + "-" + (lastD < 10 ? "0" + lastD : lastD);//三十天之前日期
this.validateForm = this.fb.group({ this.validateForm = this.fb.group({
level: [null], level: [null],
type: [null], type: [null],
site: [null], site: [null],
datePicker: [null] datePicker: [[this.startdate, this.enddate]]
}); });
//饼图 //饼图
@ -283,13 +307,50 @@ export class CriminalRecordsAdminComponent implements OnInit {
this.mybarChart.setOption(this.baroption); this.mybarChart.setOption(this.baroption);
this.warningType() this.warningType()
this.getViolateRecordList()
}
//获得违规记录列表
SkipCount: string = '0'
MaxResultCount: string = '50'
list: any = []
totalCount: string
getViolateRecordList() {
let ViolationIds = []
if (this.validateForm.value.type) {
this.warningTypesDetails.forEach(item => {
item.id ? ViolationIds.push(item.id) : null
});
}
let params = {
Level: this.validateForm.value.level,
ViolationIds: ViolationIds,
ViolateArea: this.validateForm.value.site,
OrganizationUnitId: JSON.parse(sessionStorage.getItem('userdata')).organization.id,
IsContainsChildren: 'true',
ViolateTime: this.validateForm.value.datePicker ? [moment(this.validateForm.value.datePicker[0]).format('yyyy-MM-DD'), moment(this.validateForm.value.datePicker[1]).format('yyyy-MM-DD')] : null,
SkipCount: this.SkipCount,
MaxResultCount: this.MaxResultCount
}
this.http.get('/api/services/app/ViolateRecord/GetAll', {
params: params
}).subscribe((data: any) => {
this.list = this.list.concat(data.result.items);
this.list = [...this.list]
// this.list = data.result.items
this.totalCount = data.result.totalCount
console.log('违规记录列表', data)
})
} }
ngAfterViewInit(): void { ngAfterViewInit(): void {
fromEvent(this.element.nativeElement.querySelector(`#tbody`) as HTMLCanvasElement, 'scroll').pipe(debounceTime(100)).subscribe((event: any) => { //监听 DOM 滚动事件 fromEvent(this.element.nativeElement.querySelector(`#tbody`) as HTMLCanvasElement, 'scroll').pipe(debounceTime(100)).subscribe((event: any) => { //监听 DOM 滚动事件
if (event.target.scrollHeight - (event.target.scrollTop + event.target.clientHeight) <= 10) { if (event.target.scrollHeight - (event.target.scrollTop + event.target.clientHeight) <= 10) {
console.log('需要加载数据了', event) console.log('需要加载数据了', event)
this.SkipCount = String(Number(this.SkipCount) + 50)
this.getViolateRecordList()
} }
}); });
} }
@ -332,6 +393,9 @@ export class CriminalRecordsAdminComponent implements OnInit {
this.validateForm.controls[i].markAsDirty(); this.validateForm.controls[i].markAsDirty();
this.validateForm.controls[i].updateValueAndValidity(); this.validateForm.controls[i].updateValueAndValidity();
} }
this.list = []
this.SkipCount = '0'
this.getViolateRecordList()
} }
resetForm(e: MouseEvent): void { resetForm(e: MouseEvent): void {
e.preventDefault(); e.preventDefault();
@ -340,6 +404,12 @@ export class CriminalRecordsAdminComponent implements OnInit {
this.validateForm.controls[key].markAsPristine(); this.validateForm.controls[key].markAsPristine();
this.validateForm.controls[key].updateValueAndValidity(); this.validateForm.controls[key].updateValueAndValidity();
} }
this.validateForm.patchValue({
datePicker: [this.startdate, this.enddate]
});
this.list = []
this.SkipCount = '0'
this.getViolateRecordList()
} }
//预警类型接口 //预警类型接口
@ -351,9 +421,41 @@ export class CriminalRecordsAdminComponent implements OnInit {
this.warningTypes = (data.result as any).groupBy((t) => { return t.violationType }); this.warningTypes = (data.result as any).groupBy((t) => { return t.violationType });
}) })
} }
list: any = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] typeChange(e) {
look() { this.warningTypes.forEach(element => {
this.router.navigate(['/records/petrolStation']) if (element.key == e) {
this.warningTypesDetails = element
}
});
this.validateForm.patchValue({
event: null,
});
}
look(item) {
const modal = this.modal.create({
nzContent: GetOutOfLineDetailsComponent,
nzViewContainerRef: this.viewContainerRef,
nzWidth: 1200,
nzBodyStyle: {
'border': '1px solid #6d9cc7',
'border-radius': '0px',
'padding': '0px',
'box-shadow': '0 0 8px 0 #fff',
'background': '#000D21',
},
nzComponentParams: {
data: item
},
nzFooter: null,
nzOnOk: async () => {
}
});
const instance = modal.getContentComponent();
} }

35
src/app/pages/criminal-records/criminal-records.component.html

@ -14,7 +14,7 @@
<nz-form-item class="searchParams"> <nz-form-item class="searchParams">
<nz-form-control> <nz-form-control>
<nz-select formControlName="type" nzPlaceHolder="请选择预警类型"> <nz-select formControlName="type" (ngModelChange)="typeChange($event)" nzPlaceHolder="请选择预警类型">
<nz-option *ngFor="let item of warningTypes" [nzValue]="item.key" [nzLabel]="item.key"></nz-option> <nz-option *ngFor="let item of warningTypes" [nzValue]="item.key" [nzLabel]="item.key"></nz-option>
</nz-select> </nz-select>
</nz-form-control> </nz-form-control>
@ -57,8 +57,9 @@
<div class="content"> <div class="content">
<div class="title"> <div class="title">
<app-title [name]="'预警类型统计'"></app-title> <app-title [name]="'预警类型统计'"></app-title>
<img (click)="isEchartsShow()" class="packup" src="../../../assets/images/packup.png" alt="">
</div> </div>
<div class="chartsbox"> <div class="chartsbox" [hidden]="!isEcharts">
<div class="chart"> <div class="chart">
<div class="leftbox"> <div class="leftbox">
<span class="chartname"> <span class="chartname">
@ -120,37 +121,47 @@
操作 操作
</div> </div>
</div> </div>
<div class="tbody"> <div class="tbody" id="tbody">
<div nz-row class="tr" *ngFor="let item of list"> <div nz-row class="tr" *ngFor="let item of list">
<div nz-col nzSpan="1" style="text-align: right;"> <div nz-col nzSpan="1" style="text-align: right;">
<img style="width: 36px;" src="../../../assets/images/level1.png" alt=""> <img *ngIf="item.violation.level == 1" style="width: 36px;" src="../../../assets/images/level1.png"
alt="">
<img *ngIf="item.violation.level == 2" style="width: 36px;" src="../../../assets/images/level2.png"
alt="">
<img *ngIf="item.violation.level == 3" style="width: 36px;" src="../../../assets/images/level3.png"
alt="">
<img *ngIf="item.violation.level == 4" style="width: 36px;" src="../../../assets/images/level4.png"
alt="">
</div> </div>
<div nz-col nzSpan="3"> <div nz-col nzSpan="3">
Ⅰ级 <span *ngIf="item.violation.level == 1">Ⅰ级</span>
<span *ngIf="item.violation.level == 2">Ⅱ级</span>
<span *ngIf="item.violation.level == 3">Ⅲ级</span>
<span *ngIf="item.violation.level == 4">Ⅳ级</span>
</div> </div>
<div nz-col nzSpan="5"> <div nz-col nzSpan="5">
日常预警行为 {{item.violation.violationType}}
</div> </div>
<div nz-col nzSpan="5"> <div nz-col nzSpan="5">
工作人员倚靠加油机或立柱 {{item.violation.violationName}}
</div> </div>
<div nz-col nzSpan="4"> <div nz-col nzSpan="4">
便利店 {{item.violateArea}}
</div> </div>
<div nz-col nzSpan="4"> <div nz-col nzSpan="4">
2021-10-12 09:28:13 {{item.violateTime | date:"yyyy-MM-dd HH:mm:ss"}}
</div> </div>
<div nz-col nzSpan="2"> <div nz-col nzSpan="2">
<span class="look">查看</span> <span class="look" (click)="look(item)">查看</span>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<div class="pagination"> <!-- <div class="pagination">
<nz-pagination [nzPageIndex]="1" [nzTotal]="85" [nzPageSize]="20" [nzShowTotal]="totalTemplate" <nz-pagination [nzPageIndex]="1" [nzTotal]="85" [nzPageSize]="20" [nzShowTotal]="totalTemplate"
nzShowQuickJumper></nz-pagination> nzShowQuickJumper></nz-pagination>
<ng-template #totalTemplate let-total> 16条/页,共100条 </ng-template> <ng-template #totalTemplate let-total> 16条/页,共100条 </ng-template>
</div> </div> -->
</div> </div>
</div> </div>
</div> </div>

8
src/app/pages/criminal-records/criminal-records.component.scss

@ -52,6 +52,14 @@
height: 64px; height: 64px;
box-sizing: border-box; box-sizing: border-box;
padding: 0 28px; padding: 0 28px;
position: relative;
.packup {
position: absolute;
right: 33px;
top: 16px;
cursor: pointer;
}
} }
.chartsbox { .chartsbox {

124
src/app/pages/criminal-records/criminal-records.component.ts

@ -1,7 +1,12 @@
import { HttpClient } from '@angular/common/http'; import { HttpClient } from '@angular/common/http';
import { Component, OnInit } from '@angular/core'; import { Component, OnInit, ViewContainerRef, ElementRef } from '@angular/core';
import { FormBuilder, FormGroup, Validators } from '@angular/forms'; import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import * as echarts from 'echarts'; import * as echarts from 'echarts';
import { NzModalService } from 'ng-zorro-antd/modal';
import { GetOutOfLineDetailsComponent } from '../today-warning/get-out-of-line-details/get-out-of-line-details.component';
import * as moment from 'moment';
import { fromEvent } from 'rxjs';
import { debounceTime } from 'rxjs/operators';
@Component({ @Component({
selector: 'app-criminal-records', selector: 'app-criminal-records',
templateUrl: './criminal-records.component.html', templateUrl: './criminal-records.component.html',
@ -9,7 +14,7 @@ import * as echarts from 'echarts';
}) })
export class CriminalRecordsComponent implements OnInit { export class CriminalRecordsComponent implements OnInit {
validateForm!: FormGroup; validateForm!: FormGroup;
constructor(private http: HttpClient, private fb: FormBuilder) { } constructor(private http: HttpClient, private fb: FormBuilder, private modal: NzModalService, private viewContainerRef: ViewContainerRef, private element: ElementRef) { }
myChart: any //左侧饼图 myChart: any //左侧饼图
option = { option = {
@ -272,12 +277,31 @@ export class CriminalRecordsComponent implements OnInit {
} }
return dateList; return dateList;
} }
isEcharts: boolean = true
isEchartsShow() {
this.isEcharts = !this.isEcharts
}
startdate
enddate
ngOnInit(): void { ngOnInit(): void {
//当前日期
let myDate: any = new Date();
let nowY = myDate.getFullYear();
let nowM = myDate.getMonth() + 1;
let nowD = myDate.getDate();
this.enddate = nowY + "-" + (nowM < 10 ? "0" + nowM : nowM) + "-" + (nowD < 10 ? "0" + nowD : nowD);//当前日期
//获取三十天前日期
let lw = new Date(myDate - 1000 * 60 * 60 * 24 * 30);//最后一个数字30可改,30天的意思
let lastY = lw.getFullYear();
let lastM = lw.getMonth() + 1;
let lastD = lw.getDate();
this.startdate = lastY + "-" + (lastM < 10 ? "0" + lastM : lastM) + "-" + (lastD < 10 ? "0" + lastD : lastD);//三十天之前日期
this.validateForm = this.fb.group({ this.validateForm = this.fb.group({
level: [null], level: [null],
type: [null], type: [null],
site: [null], site: [null],
datePicker: [null] datePicker: [[this.startdate, this.enddate]]
}); });
// 饼图 // 饼图
this.myChart = echarts.init(document.getElementById('piechart')); this.myChart = echarts.init(document.getElementById('piechart'));
@ -287,14 +311,60 @@ export class CriminalRecordsComponent implements OnInit {
this.mybarChart.setOption(this.baroption); this.mybarChart.setOption(this.baroption);
this.warningType() this.warningType()
this.getViolateRecordList()
}
//获得违规记录列表
SkipCount: string = '0'
MaxResultCount: string = '50'
list: any = []
totalCount: string
getViolateRecordList() {
let ViolationIds = []
if (this.validateForm.value.type) {
this.warningTypesDetails.forEach(item => {
item.id ? ViolationIds.push(item.id) : null
});
}
let params = {
Level: this.validateForm.value.level,
ViolationIds: ViolationIds,
ViolateArea: this.validateForm.value.site,
OrganizationUnitId: JSON.parse(sessionStorage.getItem('userdataOfgasstation')).organization.id,
IsContainsChildren: 'true',
ViolateTime: this.validateForm.value.datePicker ? [moment(this.validateForm.value.datePicker[0]).format('yyyy-MM-DD'), moment(this.validateForm.value.datePicker[1]).format('yyyy-MM-DD')] : null,
SkipCount: this.SkipCount,
MaxResultCount: this.MaxResultCount
}
this.http.get('/api/services/app/ViolateRecord/GetAll', {
params: params
}).subscribe((data: any) => {
this.list = this.list.concat(data.result.items);
this.list = [...this.list]
// this.list = data.result.items
this.totalCount = data.result.totalCount
console.log('违规记录列表', data)
})
}
ngAfterViewInit(): void {
fromEvent(this.element.nativeElement.querySelector(`#tbody`) as HTMLCanvasElement, 'scroll').pipe(debounceTime(100)).subscribe((event: any) => { //监听 DOM 滚动事件
if (event.target.scrollHeight - (event.target.scrollTop + event.target.clientHeight) <= 10) {
console.log('需要加载数据了', event)
this.SkipCount = String(Number(this.SkipCount) + 50)
this.getViolateRecordList()
}
});
} }
submitForm(): void { submitForm(): void {
for (const i in this.validateForm.controls) { for (const i in this.validateForm.controls) {
this.validateForm.controls[i].markAsDirty(); this.validateForm.controls[i].markAsDirty();
this.validateForm.controls[i].updateValueAndValidity(); this.validateForm.controls[i].updateValueAndValidity();
} }
console.log(this.validateForm) this.list = []
this.SkipCount = '0'
this.getViolateRecordList()
} }
resetForm(e: MouseEvent): void { resetForm(e: MouseEvent): void {
e.preventDefault(); e.preventDefault();
@ -303,6 +373,12 @@ export class CriminalRecordsComponent implements OnInit {
this.validateForm.controls[key].markAsPristine(); this.validateForm.controls[key].markAsPristine();
this.validateForm.controls[key].updateValueAndValidity(); this.validateForm.controls[key].updateValueAndValidity();
} }
this.validateForm.patchValue({
datePicker: [this.startdate, this.enddate]
});
this.list = []
this.SkipCount = '0'
this.getViolateRecordList()
} }
@ -311,14 +387,17 @@ export class CriminalRecordsComponent implements OnInit {
warningTypesDetails: any warningTypesDetails: any
warningType() { warningType() {
this.http.get('/api/services/app/Violation/GetAllList').subscribe((data: any) => { this.http.get('/api/services/app/Violation/GetAllList').subscribe((data: any) => {
this.warningTypesDetails = data.result // this.warningTypesDetails = data.result
this.warningTypes = (data.result as any).groupBy((t) => { return t.violationType }); this.warningTypes = (data.result as any).groupBy((t) => { return t.violationType });
}) })
} }
typeChange(e) {
this.warningTypes.forEach(element => {
list: any = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] if (element.key == e) {
this.warningTypesDetails = element
}
});
}
selectedType = '分布' selectedType = '分布'
selectedRankingType = '站点排名' selectedRankingType = '站点排名'
echartClick(type) { echartClick(type) {
@ -332,7 +411,28 @@ export class CriminalRecordsComponent implements OnInit {
} }
} }
// echartClick2(type) {
// this.selectedRankingType = type look(item) {
// } const modal = this.modal.create({
nzContent: GetOutOfLineDetailsComponent,
nzViewContainerRef: this.viewContainerRef,
nzWidth: 1200,
nzBodyStyle: {
'border': '1px solid #6d9cc7',
'border-radius': '0px',
'padding': '0px',
'box-shadow': '0 0 8px 0 #fff',
'background': '#000D21',
},
nzComponentParams: {
data: item
},
nzFooter: null,
nzOnOk: async () => {
}
});
const instance = modal.getContentComponent();
}
} }

14
src/app/pages/login/login.component.ts

@ -5,7 +5,7 @@ import { CacheTokenService } from '../../service/cache-token.service'//引入服
import { CookieService } from 'ngx-cookie-service';//cookie插件 import { CookieService } from 'ngx-cookie-service';//cookie插件
import { FormBuilder, FormGroup, Validators } from '@angular/forms'; import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { NzMessageService } from 'ng-zorro-antd/message'; import { NzMessageService } from 'ng-zorro-antd/message';
import { Base64 } from 'js-base64';
@Component({ @Component({
selector: 'app-login', selector: 'app-login',
templateUrl: './login.component.html', templateUrl: './login.component.html',
@ -30,8 +30,8 @@ export class LoginComponent implements OnInit {
let password = localStorage.getItem('password') let password = localStorage.getItem('password')
if (account && password) { if (account && password) {
this.validateForm.patchValue({ this.validateForm.patchValue({
userName: localStorage.getItem('account'), userName: Base64.decode(localStorage.getItem('account')),
password: localStorage.getItem('password') password: Base64.decode(localStorage.getItem('password'))
}); });
this.remember = true //这一步是回显后让勾选框为选中状态 this.remember = true //这一步是回显后让勾选框为选中状态
} }
@ -40,7 +40,7 @@ export class LoginComponent implements OnInit {
this.submitForm() this.submitForm()
this.autologin = true //这一步是回显后让勾选框为选中状态 this.autologin = true //这一步是回显后让勾选框为选中状态
} }
} }
errmsg: string = ''; //错误信息 errmsg: string = ''; //错误信息
@ -57,8 +57,8 @@ export class LoginComponent implements OnInit {
rememberInfo() { rememberInfo() {
// 判断用户是否勾选记住密码,如果勾选,在本地储存中储存登录信息 // 判断用户是否勾选记住密码,如果勾选,在本地储存中储存登录信息
if (this.remember) { if (this.remember) {
localStorage.setItem("account", this.validateForm.value.userName) localStorage.setItem("account", Base64.encode(this.validateForm.value.userName))
localStorage.setItem("password", this.validateForm.value.password) localStorage.setItem("password", Base64.encode(this.validateForm.value.password))
} }
} }
//自动登陆 //自动登陆
@ -80,7 +80,7 @@ export class LoginComponent implements OnInit {
localStorage.removeItem("account") localStorage.removeItem("account")
localStorage.removeItem("password") localStorage.removeItem("password")
} }
if(!this.autologin){ if (!this.autologin) {
localStorage.removeItem("isautologin") localStorage.removeItem("isautologin")
} }

2
src/app/pages/plan-admin/plan-admin.component.ts

@ -32,7 +32,7 @@ export class PlanAdminComponent implements OnInit {
fromEvent(this.element.nativeElement.querySelector(`.ant-table-body`) as HTMLCanvasElement, 'scroll').pipe(debounceTime(100)).subscribe(async (event: any) => { //监听 DOM 滚动事件 fromEvent(this.element.nativeElement.querySelector(`.ant-table-body`) as HTMLCanvasElement, 'scroll').pipe(debounceTime(100)).subscribe(async (event: any) => { //监听 DOM 滚动事件
if (event.target.scrollHeight - (event.target.scrollTop + event.target.clientHeight) <= 10) { if (event.target.scrollHeight - (event.target.scrollTop + event.target.clientHeight) <= 10) {
console.log('需要加载数据了', event) console.log('需要加载数据了', event)
this.SkipCount += 100 this.SkipCount = String(Number(this.SkipCount) + 50)
await this.getGasStation() await this.getGasStation()
} }
}); });

55
src/app/pages/plan/plan.component.ts

@ -69,32 +69,41 @@ export class PlanComponent implements OnInit {
} }
ngAfterViewInit(): void { ngAfterViewInit(): void {
let simpleData: InsitutionDataSimple = new InsitutionDataSimple();
simpleData.id = 1;
simpleData.key = "ceshi";
simpleData.name = "测试";
let loginStatus = StatusManager.getStatus<LoginSatus>(LoginSatus); let loginStatus = StatusManager.getStatus<LoginSatus>(LoginSatus);
loginStatus.getInstitutionListFromServe((result: InsitutionDataSimple[], data: any) => { //loginStatus.getInstitutionListFromServe((result: InsitutionDataSimple[], data: any) => {
if (ModeManager.institutionDemoKey == ModeManager.c_demoKey_null) { //无指定测试单位,则为正式启动,根据当前单位key寻找 if (ModeManager.institutionDemoKey == ModeManager.c_demoKey_null) { //无指定测试单位,则为正式启动,根据当前单位key寻找
let key = 'ceshi'; let key = 'ceshi';
let find = data.find(item => { return item.key === key }) //let find = data.find(item => { return item.key === key })
if (find) { //如果在data中找到了对应的单位key,则表示已经有三维数据,直接进入 let find = simpleData;
this.beforeOneSatus = StatusManager.getStatus<LoginSatus>(LoginSatus); if (find) { //如果在data中找到了对应的单位key,则表示已经有三维数据,直接进入
this.beforeOneSatus.onSelectInsSuccess(find) this.beforeOneSatus = StatusManager.getStatus<LoginSatus>(LoginSatus);
} else { //如果没有找到对应的单位key,则调用新建单位 this.beforeOneSatus.onSelectInsSuccess(find)
let isAdd = confirm('没有单位' + key + ',是否进行初始化?') } else { //如果没有找到对应的单位key,则调用新建单位
if (isAdd) { let isAdd = confirm('没有单位' + key + ',是否进行初始化?')
let name = key; if (isAdd) {
loginStatus.createInsitution(key, name); let name = key;
} let id = 2;// 单位id
loginStatus.createInsitution(key, name, id);
} }
}
} else {
//let find = data.find(item => { return item.key === ModeManager.institutionDemoKey })
let find = simpleData; //测试单位
if (find) {
sessionStorage.setItem('unitId', find.key)
this.beforeOneSatus = StatusManager.getStatus<LoginSatus>(LoginSatus);
this.beforeOneSatus.onSelectInsSuccess(find)
} else { } else {
let find = data.find(item => { return item.key === ModeManager.institutionDemoKey }) //this.modelInit(data) //开发模式 选择单位 弹窗
if (find) {
sessionStorage.setItem('unitId', find.key)
this.beforeOneSatus = StatusManager.getStatus<LoginSatus>(LoginSatus);
this.beforeOneSatus.onSelectInsSuccess(find)
} else {
this.modelInit(data) //开发模式 选择单位 弹窗
}
} }
}); }
//});
} }
ngOnDestroy(): void { //组件销毁前 销毁canvas ngOnDestroy(): void { //组件销毁前 销毁canvas
@ -316,7 +325,7 @@ export class PlanComponent implements OnInit {
selectProperty(e: FacilityInfoUIItem) { selectProperty(e: FacilityInfoUIItem) {
this.isShowNature = true this.isShowNature = true
this.beforeOnePropertyData = e this.beforeOnePropertyData = e
console.log(e.getPropertyData(),'选中设备') console.log(e.getPropertyData(), '选中设备')
if (this.isShowChildComponent && this.leftDomain) { if (this.isShowChildComponent && this.leftDomain) {
this.leftDomain.selectFacilityId = e.getID() this.leftDomain.selectFacilityId = e.getID()
} }

9
src/app/system-management/analysis-of-the-host/analysis-of-the-host.component.ts

@ -26,7 +26,14 @@ export class AnalysisOfTheHostComponent implements OnInit {
nzExpandAll = false; nzExpandAll = false;
totalCount: string totalCount: string
getAllOrganization() { getAllOrganization() {
this.http.get('/api/services/app/Organization/GetAll').subscribe((data: any) => { let OrganizationUnitId = sessionStorage.getItem('isGasStation') == 'true' ? JSON.parse(sessionStorage.getItem('userdataOfgasstation')).organization.id : JSON.parse(sessionStorage.getItem('userdata')).organization.id
let params = {
OrganizationUnitId: OrganizationUnitId,
IsContainsChildren: "true"
}
this.http.get('/api/services/app/Organization/GetAll', {
params: params
}).subscribe((data: any) => {
this.totalCount = data.result.totalCount this.totalCount = data.result.totalCount
data.result.items.forEach(element => { data.result.items.forEach(element => {
element.key = element.id element.key = element.id

1
src/app/system-management/navigation/navigation.component.html

@ -17,6 +17,7 @@
<li [routerLink]="['/system/user']" routerLinkActive="router-link-active"><img src="../../../assets/images/icon/user.png" alt="">用户管理</li> <li [routerLink]="['/system/user']" routerLinkActive="router-link-active"><img src="../../../assets/images/icon/user.png" alt="">用户管理</li>
<li [routerLink]="['/system/role']" routerLinkActive="router-link-active"><img src="../../../assets/images/icon/role.png" alt="">角色管理</li> <li [routerLink]="['/system/role']" routerLinkActive="router-link-active"><img src="../../../assets/images/icon/role.png" alt="">角色管理</li>
<li [routerLink]="['/system/host']" routerLinkActive="router-link-active"><img src="../../../assets/images/icon/host.png" alt="">分析主机管理</li> <li [routerLink]="['/system/host']" routerLinkActive="router-link-active"><img src="../../../assets/images/icon/host.png" alt="">分析主机管理</li>
<li [routerLink]="['/system/push']" routerLinkActive="router-link-active"><img src="../../../assets/images/icon/push.png" alt="">推送管理</li>
</ul> </ul>
</div> </div>
</nz-sider> </nz-sider>

9
src/app/system-management/organization/organization.component.ts

@ -36,7 +36,14 @@ export class OrganizationComponent implements OnInit {
nzExpandAll = false; nzExpandAll = false;
totalCount: string totalCount: string
getAllOrganization() { getAllOrganization() {
this.http.get('/api/services/app/Organization/GetAll').subscribe((data: any) => { let OrganizationUnitId = sessionStorage.getItem('isGasStation') == 'true' ? JSON.parse(sessionStorage.getItem('userdataOfgasstation')).organization.id : JSON.parse(sessionStorage.getItem('userdata')).organization.id
let params = {
OrganizationUnitId: OrganizationUnitId,
IsContainsChildren: "true"
}
this.http.get('/api/services/app/Organization/GetAll', {
params: params
}).subscribe((data: any) => {
this.totalCount = data.result.totalCount this.totalCount = data.result.totalCount
// console.log('组织机构',data.result.totalCount) // console.log('组织机构',data.result.totalCount)
data.result.items.forEach(element => { data.result.items.forEach(element => {

1
src/app/system-management/push/edit-push-item/edit-push-item.component.html

@ -0,0 +1 @@
<p>edit-push-item works!</p>

0
src/app/system-management/push/edit-push-item/edit-push-item.component.scss

25
src/app/system-management/push/edit-push-item/edit-push-item.component.spec.ts

@ -0,0 +1,25 @@
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { EditPushItemComponent } from './edit-push-item.component';
describe('EditPushItemComponent', () => {
let component: EditPushItemComponent;
let fixture: ComponentFixture<EditPushItemComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ EditPushItemComponent ]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(EditPushItemComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create', () => {
expect(component).toBeTruthy();
});
});

15
src/app/system-management/push/edit-push-item/edit-push-item.component.ts

@ -0,0 +1,15 @@
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-edit-push-item',
templateUrl: './edit-push-item.component.html',
styleUrls: ['./edit-push-item.component.scss']
})
export class EditPushItemComponent implements OnInit {
constructor() { }
ngOnInit(): void {
}
}

46
src/app/system-management/push/push.component.html

@ -0,0 +1,46 @@
<div class="pushbox" id="pushbox">
<div class="topbox">
<div class="lefttop">
<span>通知推送权限配置</span>
</div>
<div class="righttop">
<form nz-form [formGroup]="validateForm" (ngSubmit)="submitForm()">
<nz-form-item>
<nz-form-control>
<nz-input-group nzPrefixIcon="search">
<input type="text" nz-input placeholder="请输入预案类别" formControlName="search" />
</nz-input-group>
</nz-form-control>
<button style="display: none;" type="submit"></button>
</nz-form-item>
</form>
<!-- <button nz-button nzType="primary"><i nz-icon nzType="plus-circle" nzTheme="outline"></i>新增</button> -->
</div>
</div>
<div class="tablebox">
<table>
<tr>
<th style="width: 20%;">预警类别</th>
<th style="width: 20%;">预警/分析事件</th>
<th style="width: 25%;">预警推送范围</th>
<th style="width: 25%;">预警处置范围</th>
<th style="width: 10%;">操作</th>
</tr>
<tr *ngFor="let item of list">
<td>{{item.violationType}}</td>
<td>{{item.violationName}}</td>
<td>3</td>
<td>4</td>
<td>
<span style="color: #2399FF;cursor: pointer;" (click)="edititem(item)">编辑</span>
</td>
</tr>
</table>
</div>
<!-- <div class="pagination">
<nz-pagination [nzHideOnSinglePage]="false" [nzPageIndex]="1" [nzTotal]="usersNum" [nzPageSize]="16"
[nzShowTotal]="totalTemplate" nzShowQuickJumper (nzPageIndexChange)="pageChange($event)">
</nz-pagination>
<ng-template #totalTemplate let-total> 16条/页,共{{usersNum}}条 </ng-template>
</div> -->
</div>

81
src/app/system-management/push/push.component.scss

@ -0,0 +1,81 @@
.pushbox {
width: 100%;
height: 100%;
background: #FFFFFF;
box-sizing: border-box;
padding: 20px;
overflow: hidden;
display: flex;
flex-direction: column;
}
.topbox {
width: 100%;
height: 36px;
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 12px;
.lefttop {
span:nth-child(1) {
color: #000D21;
margin-right: 16px;
}
span:nth-child(2) {
color: rgba(36, 36, 36, 0.24);
}
}
.righttop {
display: flex;
button {
margin-left: 16px;
}
nz-input-group {
height: 32px;
}
}
}
.tablebox {
flex: 1;
overflow-y: auto;
//滚动条样式
::-webkit-scrollbar {
display: none;
}
table{
width: 100%;
tr{
height: 40px;
line-height: 40px;
font-size: 14px;
}
tr:nth-child(1) th{
font-weight: 600;
font-size: 15px;
}
tr,tr th,td{
border: 0px;
color: #000D21;
font-family: synormal;
font-weight: 400;
}
tr:nth-child(odd) {
background-color:rgba(145, 204, 255, 0.16);
}
tr:nth-child(even) {
background-color:#fff;
}
tr th:nth-child(1),td:nth-child(1){
box-sizing: border-box;
padding-left: 5%;
}
}
}

46
src/app/system-management/push/push.component.ts

@ -0,0 +1,46 @@
import { HttpClient } from '@angular/common/http';
import { Component, OnInit } from '@angular/core';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
@Component({
selector: 'app-push',
templateUrl: './push.component.html',
styleUrls: ['./push.component.scss']
})
export class PushComponent implements OnInit {
validateForm!: FormGroup;
constructor(private fb: FormBuilder, private http: HttpClient) { }
ngOnInit(): void {
this.validateForm = this.fb.group({
search: [null]
});
this.getViolation()
}
//获取预警类型
list:any
getViolation() {
this.http.get('/api/services/app/Violation/GetAllList').subscribe((data:any) => {
this.list = data.result
console.log('预警类型', data)
})
}
edititem(item){
}
//搜索框提交
submitForm(): void {
for (const i in this.validateForm.controls) {
this.validateForm.controls[i].markAsDirty();
this.validateForm.controls[i].updateValueAndValidity();
}
}
}

4
src/app/system-management/system-management-routing.module.ts

@ -6,12 +6,14 @@ import { RoleComponent } from './role/role.component';
import { OrganizationComponent } from './organization/organization.component'; import { OrganizationComponent } from './organization/organization.component';
import { UserComponent } from './user/user.component'; import { UserComponent } from './user/user.component';
import { AnalysisOfTheHostComponent } from './analysis-of-the-host/analysis-of-the-host.component'; import { AnalysisOfTheHostComponent } from './analysis-of-the-host/analysis-of-the-host.component';
import { PushComponent } from './push/push.component';
const routes: Routes = [ const routes: Routes = [
{ path: 'organization', component: OrganizationComponent }, { path: 'organization', component: OrganizationComponent },
{ path: 'user', component: UserComponent }, { path: 'user', component: UserComponent },
{ path: 'role', component: RoleComponent }, { path: 'role', component: RoleComponent },
{ path: 'host', component: AnalysisOfTheHostComponent } { path: 'host', component: AnalysisOfTheHostComponent },
{ path: 'push', component: PushComponent }
]; ];
@NgModule({ @NgModule({

4
src/app/system-management/system-management.module.ts

@ -32,8 +32,10 @@ import { AddhostComponent } from './analysis-of-the-host/addhost/addhost.compone
import { EdithostComponent } from './analysis-of-the-host/edithost/edithost.component'; import { EdithostComponent } from './analysis-of-the-host/edithost/edithost.component';
import { AddcameraComponent } from './analysis-of-the-host/addcamera/addcamera.component'; import { AddcameraComponent } from './analysis-of-the-host/addcamera/addcamera.component';
import { EditcameraComponent } from './analysis-of-the-host/editcamera/editcamera.component'; import { EditcameraComponent } from './analysis-of-the-host/editcamera/editcamera.component';
import { PushComponent } from './push/push.component';
import { EditPushItemComponent } from './push/edit-push-item/edit-push-item.component';
@NgModule({ @NgModule({
declarations: [OrganizationComponent, UserComponent, RoleComponent, NavigationComponent, AdduserComponent, EdituserComponent, AddroleComponent, EditroleComponent, AddorComponent, EditorComponent, AnalysisOfTheHostComponent, AddhostComponent, EdithostComponent, AddcameraComponent, EditcameraComponent], declarations: [OrganizationComponent, UserComponent, RoleComponent, NavigationComponent, AdduserComponent, EdituserComponent, AddroleComponent, EditroleComponent, AddorComponent, EditorComponent, AnalysisOfTheHostComponent, AddhostComponent, EdithostComponent, AddcameraComponent, EditcameraComponent, PushComponent, EditPushItemComponent],
imports: [ imports: [
CommonModule, CommonModule,
SystemRoutingModule, SystemRoutingModule,

9
src/app/system-management/user/adduser/adduser.component.ts

@ -43,7 +43,14 @@ export class AdduserComponent implements OnInit {
//获取所有组织机构 //获取所有组织机构
nodes:any = [] nodes:any = []
getAllOrganization() { getAllOrganization() {
this.http.get('/api/services/app/Organization/GetAll').subscribe((data: any) => { let OrganizationUnitId = sessionStorage.getItem('isGasStation') == 'true' ? JSON.parse(sessionStorage.getItem('userdataOfgasstation')).organization.id : JSON.parse(sessionStorage.getItem('userdata')).organization.id
let params = {
OrganizationUnitId: OrganizationUnitId,
IsContainsChildren: "true"
}
this.http.get('/api/services/app/Organization/GetAll', {
params: params
}).subscribe((data: any) => {
data.result.items.forEach(element => { data.result.items.forEach(element => {
element.key = element.id element.key = element.id
element.title = element.displayName element.title = element.displayName

9
src/app/system-management/user/edituser/edituser.component.ts

@ -45,7 +45,14 @@ export class EdituserComponent implements OnInit {
//获取所有组织机构 //获取所有组织机构
nodes:any = [] nodes:any = []
getAllOrganization() { getAllOrganization() {
this.http.get('/api/services/app/Organization/GetAll').subscribe((data: any) => { let OrganizationUnitId = sessionStorage.getItem('isGasStation') == 'true' ? JSON.parse(sessionStorage.getItem('userdataOfgasstation')).organization.id : JSON.parse(sessionStorage.getItem('userdata')).organization.id
let params = {
OrganizationUnitId: OrganizationUnitId,
IsContainsChildren: "true"
}
this.http.get('/api/services/app/Organization/GetAll', {
params: params
}).subscribe((data: any) => {
data.result.items.forEach(element => { data.result.items.forEach(element => {
element.key = element.id element.key = element.id
element.title = element.displayName element.title = element.displayName

BIN
src/assets/images/icon/push.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 441 B

BIN
src/assets/images/mark/inside/gfmhq.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

BIN
src/assets/images/mark/inside/ptmhq.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 3.3 KiB

BIN
src/assets/images/mark/inside/stcmhq.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

BIN
src/assets/images/mark/inside/tcmhq.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

0
src/assets/images/mark/outside/pmc.png → src/assets/images/mark/outside/xfc.png

Before

Width:  |  Height:  |  Size: 4.3 KiB

After

Width:  |  Height:  |  Size: 4.3 KiB

0
src/assets/images/mark/outside/mhf.png → src/assets/images/mark/outside/xfy.png

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

BIN
src/assets/images/packup.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
src/assets/mesh/mark/outside/mhf/Boots_AlbedoTransparency.jpg

Binary file not shown.

Before

Width:  |  Height:  |  Size: 54 KiB

BIN
src/assets/mesh/mark/outside/mhf/BunkerClothing_AlbedoTransparency.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 364 KiB

BIN
src/assets/mesh/mark/outside/mhf/Head_AlbedoTransparency.jpg

Binary file not shown.

Before

Width:  |  Height:  |  Size: 70 KiB

BIN
src/assets/mesh/mark/outside/mhf/Helmet_AlbedoTransparency.jpg

Binary file not shown.

Before

Width:  |  Height:  |  Size: 95 KiB

BIN
src/assets/mesh/mark/outside/mhf/MHF.bin

Binary file not shown.

668
src/assets/mesh/mark/outside/mhf/MHF.gltf

@ -1,668 +0,0 @@
{
"asset" : {
"generator" : "Khronos glTF Blender I/O v1.6.16",
"version" : "2.0"
},
"extensionsUsed" : [
"KHR_draco_mesh_compression"
],
"extensionsRequired" : [
"KHR_draco_mesh_compression"
],
"scene" : 0,
"scenes" : [
{
"name" : "Scene",
"nodes" : [
2
]
}
],
"nodes" : [
{
"mesh" : 0,
"name" : "PZ",
"scale" : [
0.009999999776482582,
0.009999999776482582,
0.009999999776482582
],
"translation" : [
0,
0,
0.37858137488365173
]
},
{
"children" : [
0
],
"mesh" : 1,
"name" : "PT",
"translation" : [
-0.17859923839569092,
1.069671392440796,
-0.09293144941329956
]
},
{
"children" : [
1
],
"mesh" : 2,
"name" : "MHF"
}
],
"materials" : [
{
"doubleSided" : true,
"name" : "ShuiQiang.004",
"pbrMetallicRoughness" : {
"baseColorTexture" : {
"index" : 0
},
"metallicFactor" : 0,
"roughnessFactor" : 0.5
}
},
{
"doubleSided" : true,
"name" : "BunkerClothing_AlbedoTransparency.003",
"pbrMetallicRoughness" : {
"baseColorTexture" : {
"index" : 1
},
"metallicFactor" : 0,
"roughnessFactor" : 0.5
}
},
{
"doubleSided" : true,
"name" : "Helmet_AlbedoTransparency.003",
"pbrMetallicRoughness" : {
"baseColorTexture" : {
"index" : 2
},
"metallicFactor" : 0,
"roughnessFactor" : 0.5
}
},
{
"alphaMode" : "BLEND",
"name" : "Glasses.003",
"pbrMetallicRoughness" : {
"baseColorFactor" : [
0.5882350206375122,
0.5882350206375122,
0.5882350206375122,
0.3897058963775635
],
"metallicFactor" : 0,
"roughnessFactor" : 0.5
}
},
{
"doubleSided" : true,
"name" : "Straps_AlbedoTransparency.003",
"pbrMetallicRoughness" : {
"baseColorTexture" : {
"index" : 3
},
"metallicFactor" : 0,
"roughnessFactor" : 0.5
}
},
{
"doubleSided" : true,
"name" : "Head_AlbedoTransparency.003",
"pbrMetallicRoughness" : {
"baseColorTexture" : {
"index" : 4
},
"metallicFactor" : 0,
"roughnessFactor" : 0.5
}
},
{
"doubleSided" : true,
"name" : "Boots_AlbedoTransparency.003",
"pbrMetallicRoughness" : {
"baseColorTexture" : {
"index" : 5
},
"metallicFactor" : 0,
"roughnessFactor" : 0.5
}
}
],
"meshes" : [
{
"name" : "\u7acb\u65b9\u4f53.003",
"primitives" : [
{
"attributes" : {
"POSITION" : 0,
"NORMAL" : 1,
"TEXCOORD_0" : 2
},
"extensions" : {
"KHR_draco_mesh_compression" : {
"bufferView" : 0,
"attributes" : {
"POSITION" : 0,
"NORMAL" : 1,
"TEXCOORD_0" : 2
}
}
},
"indices" : 3,
"mode" : 4
}
]
},
{
"name" : "WaterGun.003",
"primitives" : [
{
"attributes" : {
"POSITION" : 4,
"NORMAL" : 5,
"TEXCOORD_0" : 6
},
"extensions" : {
"KHR_draco_mesh_compression" : {
"bufferView" : 1,
"attributes" : {
"POSITION" : 0,
"NORMAL" : 1,
"TEXCOORD_0" : 2
}
}
},
"indices" : 7,
"material" : 0,
"mode" : 4
}
]
},
{
"name" : "MieHuoFu.003",
"primitives" : [
{
"attributes" : {
"POSITION" : 8,
"NORMAL" : 9,
"TEXCOORD_0" : 10
},
"extensions" : {
"KHR_draco_mesh_compression" : {
"bufferView" : 2,
"attributes" : {
"POSITION" : 0,
"NORMAL" : 1,
"TEXCOORD_0" : 2
}
}
},
"indices" : 11,
"material" : 1,
"mode" : 4
},
{
"attributes" : {
"POSITION" : 12,
"NORMAL" : 13,
"TEXCOORD_0" : 14
},
"extensions" : {
"KHR_draco_mesh_compression" : {
"bufferView" : 3,
"attributes" : {
"POSITION" : 0,
"NORMAL" : 1,
"TEXCOORD_0" : 2
}
}
},
"indices" : 15,
"material" : 2,
"mode" : 4
},
{
"attributes" : {
"POSITION" : 16,
"NORMAL" : 17,
"TEXCOORD_0" : 18
},
"extensions" : {
"KHR_draco_mesh_compression" : {
"bufferView" : 4,
"attributes" : {
"POSITION" : 0,
"NORMAL" : 1,
"TEXCOORD_0" : 2
}
}
},
"indices" : 19,
"material" : 3,
"mode" : 4
},
{
"attributes" : {
"POSITION" : 20,
"NORMAL" : 21,
"TEXCOORD_0" : 22
},
"extensions" : {
"KHR_draco_mesh_compression" : {
"bufferView" : 5,
"attributes" : {
"POSITION" : 0,
"NORMAL" : 1,
"TEXCOORD_0" : 2
}
}
},
"indices" : 23,
"material" : 4,
"mode" : 4
},
{
"attributes" : {
"POSITION" : 24,
"NORMAL" : 25,
"TEXCOORD_0" : 26
},
"extensions" : {
"KHR_draco_mesh_compression" : {
"bufferView" : 6,
"attributes" : {
"POSITION" : 0,
"NORMAL" : 1,
"TEXCOORD_0" : 2
}
}
},
"indices" : 27,
"material" : 5,
"mode" : 4
},
{
"attributes" : {
"POSITION" : 28,
"NORMAL" : 29,
"TEXCOORD_0" : 30
},
"extensions" : {
"KHR_draco_mesh_compression" : {
"bufferView" : 7,
"attributes" : {
"POSITION" : 0,
"NORMAL" : 1,
"TEXCOORD_0" : 2
}
}
},
"indices" : 31,
"material" : 6,
"mode" : 4
}
]
}
],
"textures" : [
{
"sampler" : 0,
"source" : 0
},
{
"sampler" : 0,
"source" : 1
},
{
"sampler" : 0,
"source" : 2
},
{
"sampler" : 0,
"source" : 3
},
{
"sampler" : 0,
"source" : 4
},
{
"sampler" : 0,
"source" : 5
}
],
"images" : [
{
"mimeType" : "image/jpeg",
"name" : "ShuiQiang",
"uri" : "ShuiQiang.jpg"
},
{
"mimeType" : "image/png",
"name" : "BunkerClothing_AlbedoTransparency",
"uri" : "BunkerClothing_AlbedoTransparency.png"
},
{
"mimeType" : "image/jpeg",
"name" : "Helmet_AlbedoTransparency",
"uri" : "Helmet_AlbedoTransparency.jpg"
},
{
"mimeType" : "image/jpeg",
"name" : "Straps_AlbedoTransparency",
"uri" : "Straps_AlbedoTransparency.jpg"
},
{
"mimeType" : "image/jpeg",
"name" : "Head_AlbedoTransparency",
"uri" : "Head_AlbedoTransparency.jpg"
},
{
"mimeType" : "image/jpeg",
"name" : "Boots_AlbedoTransparency",
"uri" : "Boots_AlbedoTransparency.jpg"
}
],
"accessors" : [
{
"componentType" : 5126,
"count" : 24,
"max" : [
1,
1,
1
],
"min" : [
-1,
-1,
-1
],
"type" : "VEC3"
},
{
"componentType" : 5126,
"count" : 24,
"type" : "VEC3"
},
{
"componentType" : 5126,
"count" : 24,
"type" : "VEC2"
},
{
"componentType" : 5123,
"count" : 36,
"type" : "SCALAR"
},
{
"componentType" : 5126,
"count" : 1430,
"max" : [
0.07184479385614395,
0.07184479385614395,
0.39843103289604187
],
"min" : [
-0.07183649390935898,
-0.07183649390935898,
-1.3987065727860681e-08
],
"type" : "VEC3"
},
{
"componentType" : 5126,
"count" : 1430,
"type" : "VEC3"
},
{
"componentType" : 5126,
"count" : 1430,
"type" : "VEC2"
},
{
"componentType" : 5123,
"count" : 2964,
"type" : "SCALAR"
},
{
"componentType" : 5126,
"count" : 3652,
"max" : [
0.31568726897239685,
1.579005241394043,
0.21250030398368835
],
"min" : [
-0.3100007474422455,
0.029164545238018036,
-0.16183406114578247
],
"type" : "VEC3"
},
{
"componentType" : 5126,
"count" : 3652,
"type" : "VEC3"
},
{
"componentType" : 5126,
"count" : 3652,
"type" : "VEC2"
},
{
"componentType" : 5123,
"count" : 15516,
"type" : "SCALAR"
},
{
"componentType" : 5126,
"count" : 4746,
"max" : [
0.13183458149433136,
1.8140419721603394,
0.16708354651927948
],
"min" : [
-0.13521797955036163,
1.4775199890136719,
-0.1361415833234787
],
"type" : "VEC3"
},
{
"componentType" : 5126,
"count" : 4746,
"type" : "VEC3"
},
{
"componentType" : 5126,
"count" : 4746,
"type" : "VEC2"
},
{
"componentType" : 5123,
"count" : 22830,
"type" : "SCALAR"
},
{
"componentType" : 5126,
"count" : 1514,
"max" : [
0.11418724805116653,
1.6796936988830566,
0.1821955293416977
],
"min" : [
-0.1096891537308693,
1.5852127075195312,
0.0685286819934845
],
"type" : "VEC3"
},
{
"componentType" : 5126,
"count" : 1514,
"type" : "VEC3"
},
{
"componentType" : 5126,
"count" : 1514,
"type" : "VEC2"
},
{
"componentType" : 5123,
"count" : 7860,
"type" : "SCALAR"
},
{
"componentType" : 5126,
"count" : 5342,
"max" : [
0.09371404349803925,
1.7351529598236084,
0.14662612974643707
],
"min" : [
-0.08921344578266144,
1.498990535736084,
-0.036142800003290176
],
"type" : "VEC3"
},
{
"componentType" : 5126,
"count" : 5342,
"type" : "VEC3"
},
{
"componentType" : 5126,
"count" : 5342,
"type" : "VEC2"
},
{
"componentType" : 5123,
"count" : 15522,
"type" : "SCALAR"
},
{
"componentType" : 5126,
"count" : 3829,
"max" : [
0.09659265726804733,
1.7590115070343018,
0.1568334698677063
],
"min" : [
-0.0969589576125145,
1.455280065536499,
-0.08099030703306198
],
"type" : "VEC3"
},
{
"componentType" : 5126,
"count" : 3829,
"type" : "VEC3"
},
{
"componentType" : 5126,
"count" : 3829,
"type" : "VEC2"
},
{
"componentType" : 5123,
"count" : 21555,
"type" : "SCALAR"
},
{
"componentType" : 5126,
"count" : 1388,
"max" : [
0.2262089103460312,
0.2532302439212799,
0.18883022665977478
],
"min" : [
-0.2262089103460312,
-2.776151220018619e-08,
-0.10604356974363327
],
"type" : "VEC3"
},
{
"componentType" : 5126,
"count" : 1388,
"type" : "VEC3"
},
{
"componentType" : 5126,
"count" : 1388,
"type" : "VEC2"
},
{
"componentType" : 5123,
"count" : 5148,
"type" : "SCALAR"
}
],
"bufferViews" : [
{
"buffer" : 0,
"byteLength" : 264,
"byteOffset" : 0
},
{
"buffer" : 0,
"byteLength" : 8908,
"byteOffset" : 264
},
{
"buffer" : 0,
"byteLength" : 28138,
"byteOffset" : 9172
},
{
"buffer" : 0,
"byteLength" : 34016,
"byteOffset" : 37312
},
{
"buffer" : 0,
"byteLength" : 9580,
"byteOffset" : 71328
},
{
"buffer" : 0,
"byteLength" : 37426,
"byteOffset" : 80908
},
{
"buffer" : 0,
"byteLength" : 27725,
"byteOffset" : 118336
},
{
"buffer" : 0,
"byteLength" : 11416,
"byteOffset" : 146064
}
],
"samplers" : [
{
"magFilter" : 9729,
"minFilter" : 9987
}
],
"buffers" : [
{
"byteLength" : 157480,
"uri" : "MHF.bin"
}
]
}

5
src/assets/mesh/mark/outside/mhf/MHF.gltf.manifest

@ -1,5 +0,0 @@
{
"version" : 1,
"enableSceneOffline" : true,
"enableTexturesOffline" : true
}

BIN
src/assets/mesh/mark/outside/mhf/ShuiQiang.jpg

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

BIN
src/assets/mesh/mark/outside/mhf/Straps_AlbedoTransparency.jpg

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

BIN
src/assets/mesh/mark/outside/pmc/CarColor.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

BIN
src/assets/mesh/mark/outside/pmc/FireCar.jpg

Binary file not shown.

Before

Width:  |  Height:  |  Size: 638 KiB

BIN
src/assets/mesh/mark/outside/pmc/PMC.bin

Binary file not shown.

796
src/assets/mesh/mark/outside/pmc/PMC.gltf

@ -1,796 +0,0 @@
{
"asset" : {
"generator" : "Khronos glTF Blender I/O v1.6.16",
"version" : "2.0"
},
"extensionsUsed" : [
"KHR_draco_mesh_compression"
],
"extensionsRequired" : [
"KHR_draco_mesh_compression"
],
"scene" : 0,
"scenes" : [
{
"name" : "Scene",
"nodes" : [
4,
5,
6,
8
]
}
],
"nodes" : [
{
"mesh" : 0,
"name" : "BL",
"translation" : [
0.930389404296875,
0.5263820886611938,
-1.2779022455215454
]
},
{
"mesh" : 1,
"name" : "BR",
"translation" : [
-0.8709052801132202,
0.5263820886611938,
-1.2779022455215454
]
},
{
"mesh" : 2,
"name" : "FL",
"translation" : [
0.9883639812469482,
0.526381254196167,
2.525930166244507
]
},
{
"mesh" : 3,
"name" : "FR",
"translation" : [
-0.9485308527946472,
0.526381254196167,
2.525930166244507
]
},
{
"children" : [
0,
1,
2,
3
],
"name" : "wheelModels"
},
{
"mesh" : 4,
"name" : "Glass"
},
{
"mesh" : 5,
"name" : "Body"
},
{
"mesh" : 6,
"name" : "PZ",
"scale" : [
0.009999999776482582,
0.009999999776482582,
0.009999999776482582
],
"translation" : [
0.0015363730490207672,
0.014608621597290039,
0.6146829128265381
]
},
{
"children" : [
7
],
"mesh" : 7,
"name" : "PT",
"translation" : [
0.032101746648550034,
3.3492186069488525,
-1.230138897895813
]
}
],
"materials" : [
{
"doubleSided" : true,
"name" : "FireCar.002",
"pbrMetallicRoughness" : {
"baseColorTexture" : {
"index" : 0
},
"metallicFactor" : 0,
"roughnessFactor" : 0.5
}
},
{
"doubleSided" : true,
"name" : "CarGlass",
"pbrMetallicRoughness" : {
"baseColorFactor" : [
0.07656104862689972,
0.06475582718849182,
0.04368578642606735,
1
],
"metallicFactor" : 0,
"roughnessFactor" : 0.15441176295280457
}
},
{
"doubleSided" : true,
"name" : "CarColor",
"pbrMetallicRoughness" : {
"baseColorTexture" : {
"index" : 1
},
"metallicFactor" : 0,
"roughnessFactor" : 0.5
}
}
],
"meshes" : [
{
"name" : "BL",
"primitives" : [
{
"attributes" : {
"POSITION" : 0,
"NORMAL" : 1,
"TEXCOORD_0" : 2,
"TEXCOORD_1" : 3
},
"extensions" : {
"KHR_draco_mesh_compression" : {
"bufferView" : 0,
"attributes" : {
"POSITION" : 0,
"NORMAL" : 1,
"TEXCOORD_0" : 2,
"TEXCOORD_1" : 3
}
}
},
"indices" : 4,
"material" : 0,
"mode" : 4
}
]
},
{
"name" : "BR",
"primitives" : [
{
"attributes" : {
"POSITION" : 5,
"NORMAL" : 6,
"TEXCOORD_0" : 7,
"TEXCOORD_1" : 8
},
"extensions" : {
"KHR_draco_mesh_compression" : {
"bufferView" : 1,
"attributes" : {
"POSITION" : 0,
"NORMAL" : 1,
"TEXCOORD_0" : 2,
"TEXCOORD_1" : 3
}
}
},
"indices" : 9,
"material" : 0,
"mode" : 4
}
]
},
{
"name" : "FL",
"primitives" : [
{
"attributes" : {
"POSITION" : 10,
"NORMAL" : 11,
"TEXCOORD_0" : 12,
"TEXCOORD_1" : 13
},
"extensions" : {
"KHR_draco_mesh_compression" : {
"bufferView" : 2,
"attributes" : {
"POSITION" : 0,
"NORMAL" : 1,
"TEXCOORD_0" : 2,
"TEXCOORD_1" : 3
}
}
},
"indices" : 14,
"material" : 0,
"mode" : 4
}
]
},
{
"name" : "FR",
"primitives" : [
{
"attributes" : {
"POSITION" : 15,
"NORMAL" : 16,
"TEXCOORD_0" : 17,
"TEXCOORD_1" : 18
},
"extensions" : {
"KHR_draco_mesh_compression" : {
"bufferView" : 3,
"attributes" : {
"POSITION" : 0,
"NORMAL" : 1,
"TEXCOORD_0" : 2,
"TEXCOORD_1" : 3
}
}
},
"indices" : 14,
"material" : 0,
"mode" : 4
}
]
},
{
"name" : "Glass",
"primitives" : [
{
"attributes" : {
"POSITION" : 19,
"NORMAL" : 20,
"TEXCOORD_0" : 21,
"TEXCOORD_1" : 22
},
"extensions" : {
"KHR_draco_mesh_compression" : {
"bufferView" : 4,
"attributes" : {
"POSITION" : 0,
"NORMAL" : 1,
"TEXCOORD_0" : 2,
"TEXCOORD_1" : 3
}
}
},
"indices" : 23,
"material" : 1,
"mode" : 4
}
]
},
{
"name" : "Body",
"primitives" : [
{
"attributes" : {
"POSITION" : 24,
"NORMAL" : 25,
"TEXCOORD_0" : 26,
"TEXCOORD_1" : 27,
"TEXCOORD_2" : 28,
"TEXCOORD_3" : 29
},
"extensions" : {
"KHR_draco_mesh_compression" : {
"bufferView" : 5,
"attributes" : {
"POSITION" : 0,
"NORMAL" : 1,
"TEXCOORD_0" : 2,
"TEXCOORD_1" : 3,
"TEXCOORD_2" : 4,
"TEXCOORD_3" : 5
}
}
},
"indices" : 30,
"material" : 2,
"mode" : 4
},
{
"attributes" : {
"POSITION" : 31,
"NORMAL" : 32,
"TEXCOORD_0" : 33,
"TEXCOORD_1" : 34,
"TEXCOORD_2" : 35,
"TEXCOORD_3" : 36
},
"extensions" : {
"KHR_draco_mesh_compression" : {
"bufferView" : 6,
"attributes" : {
"POSITION" : 0,
"NORMAL" : 1,
"TEXCOORD_0" : 2,
"TEXCOORD_1" : 3,
"TEXCOORD_2" : 4,
"TEXCOORD_3" : 5
}
}
},
"indices" : 37,
"material" : 0,
"mode" : 4
}
]
},
{
"name" : "\u7acb\u65b9\u4f53.008",
"primitives" : [
{
"attributes" : {
"POSITION" : 38,
"NORMAL" : 39,
"TEXCOORD_0" : 40
},
"extensions" : {
"KHR_draco_mesh_compression" : {
"bufferView" : 7,
"attributes" : {
"POSITION" : 0,
"NORMAL" : 1,
"TEXCOORD_0" : 2
}
}
},
"indices" : 41,
"mode" : 4
}
]
},
{
"name" : "WaterGun",
"primitives" : [
{
"attributes" : {
"POSITION" : 42,
"NORMAL" : 43,
"TEXCOORD_0" : 44,
"TEXCOORD_1" : 45
},
"extensions" : {
"KHR_draco_mesh_compression" : {
"bufferView" : 8,
"attributes" : {
"POSITION" : 0,
"NORMAL" : 1,
"TEXCOORD_0" : 2,
"TEXCOORD_1" : 3
}
}
},
"indices" : 46,
"material" : 2,
"mode" : 4
}
]
}
],
"textures" : [
{
"sampler" : 0,
"source" : 0
},
{
"sampler" : 0,
"source" : 1
}
],
"images" : [
{
"mimeType" : "image/jpeg",
"name" : "FireCar",
"uri" : "FireCar.jpg"
},
{
"mimeType" : "image/png",
"name" : "CarColor",
"uri" : "CarColor.png"
}
],
"accessors" : [
{
"componentType" : 5126,
"count" : 289,
"max" : [
0.2735353708267212,
0.5016516447067261,
0.5016562938690186
],
"min" : [
-0.3255194425582886,
-0.5016518831253052,
-0.5016472339630127
],
"type" : "VEC3"
},
{
"componentType" : 5126,
"count" : 289,
"type" : "VEC3"
},
{
"componentType" : 5126,
"count" : 289,
"type" : "VEC2"
},
{
"componentType" : 5126,
"count" : 289,
"type" : "VEC2"
},
{
"componentType" : 5123,
"count" : 1068,
"type" : "SCALAR"
},
{
"componentType" : 5126,
"count" : 284,
"max" : [
0.27353453636169434,
0.5016516447067261,
0.5016562938690186
],
"min" : [
-0.32552027702331543,
-0.5016518831253052,
-0.5016472339630127
],
"type" : "VEC3"
},
{
"componentType" : 5126,
"count" : 284,
"type" : "VEC3"
},
{
"componentType" : 5126,
"count" : 284,
"type" : "VEC2"
},
{
"componentType" : 5126,
"count" : 284,
"type" : "VEC2"
},
{
"componentType" : 5123,
"count" : 1068,
"type" : "SCALAR"
},
{
"componentType" : 5126,
"count" : 148,
"max" : [
0.12047308683395386,
0.5016517639160156,
0.5016556978225708
],
"min" : [
-0.1725015640258789,
-0.5016516447067261,
-0.5016477108001709
],
"type" : "VEC3"
},
{
"componentType" : 5126,
"count" : 148,
"type" : "VEC3"
},
{
"componentType" : 5126,
"count" : 148,
"type" : "VEC2"
},
{
"componentType" : 5126,
"count" : 148,
"type" : "VEC2"
},
{
"componentType" : 5123,
"count" : 588,
"type" : "SCALAR"
},
{
"componentType" : 5126,
"count" : 148,
"max" : [
0.12047266960144043,
0.5016517639160156,
0.5016556978225708
],
"min" : [
-0.17250198125839233,
-0.5016516447067261,
-0.5016477108001709
],
"type" : "VEC3"
},
{
"componentType" : 5126,
"count" : 148,
"type" : "VEC3"
},
{
"componentType" : 5126,
"count" : 148,
"type" : "VEC2"
},
{
"componentType" : 5126,
"count" : 148,
"type" : "VEC2"
},
{
"componentType" : 5126,
"count" : 146,
"max" : [
1.2894694805145264,
2.566256523132324,
3.534332752227783
],
"min" : [
-1.2894694805145264,
1.629791498184204,
1.1941930055618286
],
"type" : "VEC3"
},
{
"componentType" : 5126,
"count" : 146,
"type" : "VEC3"
},
{
"componentType" : 5126,
"count" : 146,
"type" : "VEC2"
},
{
"componentType" : 5126,
"count" : 146,
"type" : "VEC2"
},
{
"componentType" : 5123,
"count" : 474,
"type" : "SCALAR"
},
{
"componentType" : 5126,
"count" : 10285,
"max" : [
1.3214938640594482,
3.396054267883301,
3.7334296703338623
],
"min" : [
-1.3215093612670898,
0.06301689147949219,
-3.7334306240081787
],
"type" : "VEC3"
},
{
"componentType" : 5126,
"count" : 10285,
"type" : "VEC3"
},
{
"componentType" : 5126,
"count" : 10285,
"type" : "VEC2"
},
{
"componentType" : 5126,
"count" : 10285,
"type" : "VEC2"
},
{
"componentType" : 5126,
"count" : 10285,
"type" : "VEC2"
},
{
"componentType" : 5126,
"count" : 10285,
"type" : "VEC2"
},
{
"componentType" : 5123,
"count" : 19134,
"type" : "SCALAR"
},
{
"componentType" : 5126,
"count" : 116,
"max" : [
1.1970285177230835,
2.388274908065796,
3.7181694507598877
],
"min" : [
-1.1981037855148315,
0.2322521060705185,
-3.6314189434051514
],
"type" : "VEC3"
},
{
"componentType" : 5126,
"count" : 116,
"type" : "VEC3"
},
{
"componentType" : 5126,
"count" : 116,
"type" : "VEC2"
},
{
"componentType" : 5126,
"count" : 116,
"type" : "VEC2"
},
{
"componentType" : 5126,
"count" : 116,
"type" : "VEC2"
},
{
"componentType" : 5126,
"count" : 116,
"type" : "VEC2"
},
{
"componentType" : 5123,
"count" : 156,
"type" : "SCALAR"
},
{
"componentType" : 5126,
"count" : 24,
"max" : [
1,
1,
1
],
"min" : [
-1,
-1,
-1
],
"type" : "VEC3"
},
{
"componentType" : 5126,
"count" : 24,
"type" : "VEC3"
},
{
"componentType" : 5126,
"count" : 24,
"type" : "VEC2"
},
{
"componentType" : 5123,
"count" : 36,
"type" : "SCALAR"
},
{
"componentType" : 5126,
"count" : 296,
"max" : [
0.12257297337055206,
0.08071567118167877,
0.6802297830581665
],
"min" : [
-0.11950023472309113,
-0.0514986515045166,
-0.5285130739212036
],
"type" : "VEC3"
},
{
"componentType" : 5126,
"count" : 296,
"type" : "VEC3"
},
{
"componentType" : 5126,
"count" : 296,
"type" : "VEC2"
},
{
"componentType" : 5126,
"count" : 296,
"type" : "VEC2"
},
{
"componentType" : 5123,
"count" : 516,
"type" : "SCALAR"
}
],
"bufferViews" : [
{
"buffer" : 0,
"byteLength" : 3246,
"byteOffset" : 0
},
{
"buffer" : 0,
"byteLength" : 3168,
"byteOffset" : 3248
},
{
"buffer" : 0,
"byteLength" : 1761,
"byteOffset" : 6416
},
{
"buffer" : 0,
"byteLength" : 1773,
"byteOffset" : 8180
},
{
"buffer" : 0,
"byteLength" : 1721,
"byteOffset" : 9956
},
{
"buffer" : 0,
"byteLength" : 77456,
"byteOffset" : 11680
},
{
"buffer" : 0,
"byteLength" : 1695,
"byteOffset" : 89136
},
{
"buffer" : 0,
"byteLength" : 264,
"byteOffset" : 90832
},
{
"buffer" : 0,
"byteLength" : 3101,
"byteOffset" : 91096
}
],
"samplers" : [
{
"magFilter" : 9729,
"minFilter" : 9987
}
],
"buffers" : [
{
"byteLength" : 94200,
"uri" : "PMC.bin"
}
]
}

5
src/assets/mesh/mark/outside/pmc/PMC.gltf.manifest

@ -1,5 +0,0 @@
{
"version" : 1,
"enableSceneOffline" : true,
"enableTexturesOffline" : true
}

5
yarn.lock

@ -6889,6 +6889,11 @@ jest-worker@^25.1.0:
merge-stream "^2.0.0" merge-stream "^2.0.0"
supports-color "^7.0.0" supports-color "^7.0.0"
js-base64@^3.7.2:
version "3.7.2"
resolved "https://registry.npmmirror.com/js-base64/download/js-base64-3.7.2.tgz?cache=0&sync_timestamp=1632308301843&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fjs-base64%2Fdownload%2Fjs-base64-3.7.2.tgz#816d11d81a8aff241603d19ce5761e13e41d7745"
integrity sha1-gW0R2BqK/yQWA9Gc5XYeE+Qdd0U=
js-levenshtein@^1.1.3: js-levenshtein@^1.1.3:
version "1.1.6" version "1.1.6"
resolved "https://registry.npm.taobao.org/js-levenshtein/download/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d" resolved "https://registry.npm.taobao.org/js-levenshtein/download/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d"

Loading…
Cancel
Save