陈鹏飞 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": {
"version": "1.1.6",
"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",
"firebase": "^7.6.2",
"install": "^0.13.0",
"js-base64": "^3.7.2",
"linqjs": "^1.0.2",
"moment": "^2.29.1",
"ng-zorro-antd": "^9.3.0",

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

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

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

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

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

@ -257,11 +257,13 @@ export class SceneManager {
if (this.highLightLayer == null) {
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;
}
let allMesh = mesh.getChildMeshes();
@ -270,13 +272,22 @@ export class SceneManager {
let childMesh = allMesh[i];
if (childMesh instanceof Mesh) {
this.highLightLayer.addMesh(childMesh, color);
// childMesh.material.alphaMode =
this.highLightNum++;
}
}
}
/**
*
*/
openInnerGlow(open: boolean) {
if (this.highLightLayer != null) {
this.highLightLayer.innerGlow = open;
}
}
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
) => void, onError?: (key: string, error: string) => void) {
let l_data = classToPlain(institutionData);
console.log("保存单位", l_data);
this.buildingBISrv.postBuildingBasicInfos(key, 1, l_data)
this.buildingBISrv.postBuildingBasicInfos(key, institutionID, l_data)
.subscribe(data => {
console.log("保存单位成功:" + key, l_data);
if (onSuccess) {
@ -73,7 +73,7 @@ export class ServeManager {
saveInstitutionListData(institutionList: InsitutionDataSimple[], onSucess?: () => void) {
// console.log("======保存单位");
ServeManager.instance.saveInstitutionData(institutionList, "InsList", () => {
ServeManager.instance.saveInstitutionData(institutionList, "InsList", -1, () => {
//alert("保存单位列表成功");
if (onSucess) {
onSucess();

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

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

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

@ -2,4 +2,5 @@
export class InsitutionDataSimple {
key: string;//唯一身份key
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;
AllMarkData.newMarkData(MarkType.PMC, MarkKindType.Car, tagPos, result);
AllMarkData.newMarkData(MarkType.MHF, MarkKindType.Persion, tagPos, result);
AllMarkData.newMarkData(MarkType.XFC, MarkKindType.Car, tagPos, result);
AllMarkData.newMarkData(MarkType.XFY, MarkKindType.Persion, tagPos, result);
AllMarkData.newMarkData(MarkType.JC, MarkKindType.Car, tagPos, result);
AllMarkData.newMarkData(MarkType.JJ, 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;
}
/**
*
*/
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;
}
/**
*
*/
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 { 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 { ModelInfo } from "../model/model-info";
@ -195,7 +195,7 @@ export class ModelInfo_mark extends ModelInfo {
* @param select
*/
onSelect(select: boolean) {
console.log("onSelect", select);
// console.log("onSelect", select);
this.isSelect = select;
// this.lookAt();
if (select) {
@ -210,7 +210,16 @@ export class ModelInfo_mark extends ModelInfo {
else {
//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.setTarget(this.modelBox.absolutePosition.clone());
@ -378,7 +387,7 @@ export class ModelInfo_mark extends ModelInfo {
canSprinkling() {
let result = false;
switch (this.markData.type) {
case MarkType.MHF:
case MarkType.XFY:
result = true;
//五种消防员
if (this.node_pt == null && this.models != null) {
@ -392,7 +401,7 @@ export class ModelInfo_mark extends ModelInfo {
}
break;
case MarkType.PMC:
case MarkType.XFC:
//五种消防车
result = true;
@ -451,7 +460,7 @@ export class ModelInfo_mark extends ModelInfo {
return;
}
switch (this.markData.type) {
case MarkType.MHF:
case MarkType.XFY:
//消防员,显隐喷枪
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.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.setParent(parent.modelBox);
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() {
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.position = Vector3.Zero();
this.lineMesh.position = Vector3.Zero()
this.lineMesh.material = this.mat;
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;
// instance.lineMesh.material.getEffect()?.setFloat("u_alpha", 1);
let textures: BaseTexture[] = instance.lineMesh.material.getActiveTextures();
console.log("图片", textures);
let texture0 = (textures[0] as Texture);
texture0.vScale = length;
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:
particleJsonPath.push("assets/particlesystem/fire/fire_h_1.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;
break;
case MarkType.SNH:
particleJsonPath.push("assets/particlesystem/fire/fire_snh_1.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;
break;
case MarkType.YWA:
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;
break;
case MarkType.YWB:
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;
break;
}

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

@ -202,7 +202,7 @@ export class BabylonTool {
let shaderUrl = shaderPath;
nodeMaterial.loadAsync(shaderUrl).then(() => {
nodeMaterial.build(true);
nodeMaterial.build(false); //关闭shader调试打印
if (mesh != null) {
mesh.material = nodeMaterial;
// 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++) {
showNameFacilitys[i].showNameUI(isShowNameUI_JYJ_YG);
}
SceneManager.Instance.openInnerGlow(!isShowNameUI_JYJ_YG); //输油管和油气回收管太细,关闭内发光
if (show) {

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

@ -68,7 +68,7 @@ export class InstitutionCreateWindow extends UIBase {
saveNewIns() {
let window = this;
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();
});
}

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 { MeshPool, MeshPoolInfo } from "../../tool/mesh-pool";
import { ParticleSystemTool } from "../../tool/particle-system-tool";
import { SpeakingTool } from "../../tool/speaking-tool";
import { BuildingUIItem } from "../building-window/building-ui-item";
import { BuildingWindow } from "../building-window/building-window";
import { IndoorFloorUIItem } from "../indoor-window/indoor-floorui-item";
@ -302,8 +303,9 @@ export class MarkWindow extends UIBase {
* @param planId
* @param nodeId
* @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) {
// let oldPlaneData = this.currentMarkNodeInfo.belongToPlanData;
@ -356,11 +358,16 @@ export class MarkWindow extends UIBase {
this.currentMarkNodeInfo = new MarkNodeInfo(markPlanData, this.currentMarkNodeDataCopy);
//this.currentMarkNodeDataCopy = classToClass(this.currentMarkNodeInfo.nodeData); //更新备份数据
this.updateNodeInfo();
if (readDescribe) {
this.readDescribe(nodeCopy.describe);
}
}
}
/**
*
* @param name
@ -969,7 +976,6 @@ export class MarkWindow extends UIBase {
}
})
console.log(mesh, "是标绘物", 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

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

@ -49,7 +49,7 @@ export class ToolbarWindow extends UIBase {
onBtnSave() {
let data = DataManager.institutionData;
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);
});
}

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

@ -14,7 +14,7 @@
<nz-form-item class="searchParams">
<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-select>
</nz-form-control>
@ -57,8 +57,9 @@
<div class="content">
<div class="title">
<app-title [name]="'预警类型统计'"></app-title>
<img (click)="isEchartsShow()" class="packup" src="../../../assets/images/packup.png" alt="">
</div>
<div class="chartsbox">
<div class="chartsbox" [hidden]="!isEcharts">
<div class="chart">
<div class="leftbox">
<span class="chartname">
@ -100,7 +101,7 @@
<div class="table">
<div nz-row class="th">
<div nz-col nzSpan="1" style="text-align: right;">
</div>
<div nz-col nzSpan="2">
预警级别
@ -133,43 +134,53 @@
<div class="tbody" id="tbody">
<div nz-row class="tr" *ngFor="let item of list">
<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 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 nz-col nzSpan="3">
日常预警行为
{{item.violation.violationType}}
</div>
<div nz-col nzSpan="4">
中化某某省公司
{{item.gasStation.companyName}}
</div>
<div nz-col nzSpan="2">
山东-淄博
{{item.gasStation.locationName}}
</div>
<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 nz-col nzSpan="4">
中化山东省淄博市第6加油站
{{item.gasStation.stationName}}
</div>
<div nz-col nzSpan="3">
便利店
{{item.violateArea}}
</div>
<div nz-col nzSpan="3">
2021-10-12 09:28:13
{{item.violateTime | date:"yyyy-MM-dd HH:mm:ss"}}
</div>
<div nz-col nzSpan="1">
<span class="look" (click)="look()">查看</span>
<span class="look" (click)="look(item)">查看</span>
</div>
</div>
</div>
</div>
<div class="pagination">
<!-- <div class="pagination">
<nz-pagination [nzPageIndex]="1" [nzTotal]="85" [nzPageSize]="20" [nzShowTotal]="totalTemplate"
nzShowQuickJumper></nz-pagination>
<ng-template #totalTemplate let-total> 16条/页,共100条 </ng-template>
</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;
padding: 0 28px;
margin: 13px 0;
position: relative;
.packup {
position: absolute;
right: 33px;
top: 16px;
cursor: pointer;
}
}
.chartsbox {

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

@ -1,11 +1,15 @@
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 { Router } from '@angular/router'
import * as echarts from 'echarts';
import { fromEvent } from 'rxjs';
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({
selector: 'app-criminal-records-admin',
templateUrl: './criminal-records-admin.component.html',
@ -14,7 +18,7 @@ import { debounceTime } from 'rxjs/operators';
export class CriminalRecordsAdminComponent implements OnInit {
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
option = {
@ -255,24 +259,44 @@ export class CriminalRecordsAdminComponent implements OnInit {
showDetail: false,//即拖拽时候是否显示详细数值信息 默认true
realtime: true, //是否实时更新
filterMode: 'filter',
backgroundColor:'#001735',
width:'18'
backgroundColor: '#001735',
width: '18'
},
{
type:'inside',
yAxisIndex:0,
zoomOnMouseWheel:false, //滚轮是否触发缩放
moveOnMouseMove:true, //鼠标滚轮触发滚动
moveOnMouseWheel:true
type: 'inside',
yAxisIndex: 0,
zoomOnMouseWheel: false, //滚轮是否触发缩放
moveOnMouseMove: true, //鼠标滚轮触发滚动
moveOnMouseWheel: true
}
]
}
isEcharts: boolean = true
isEchartsShow() {
this.isEcharts = !this.isEcharts
}
startdate
enddate
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({
level: [null],
type: [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.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 {
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()
}
});
}
@ -332,6 +393,9 @@ export class CriminalRecordsAdminComponent implements OnInit {
this.validateForm.controls[i].markAsDirty();
this.validateForm.controls[i].updateValueAndValidity();
}
this.list = []
this.SkipCount = '0'
this.getViolateRecordList()
}
resetForm(e: MouseEvent): void {
e.preventDefault();
@ -340,6 +404,12 @@ export class CriminalRecordsAdminComponent implements OnInit {
this.validateForm.controls[key].markAsPristine();
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 });
})
}
list: any = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
look() {
this.router.navigate(['/records/petrolStation'])
typeChange(e) {
this.warningTypes.forEach(element => {
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-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-select>
</nz-form-control>
@ -57,8 +57,9 @@
<div class="content">
<div class="title">
<app-title [name]="'预警类型统计'"></app-title>
<img (click)="isEchartsShow()" class="packup" src="../../../assets/images/packup.png" alt="">
</div>
<div class="chartsbox">
<div class="chartsbox" [hidden]="!isEcharts">
<div class="chart">
<div class="leftbox">
<span class="chartname">
@ -120,37 +121,47 @@
操作
</div>
</div>
<div class="tbody">
<div class="tbody" id="tbody">
<div nz-row class="tr" *ngFor="let item of list">
<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 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 nz-col nzSpan="5">
日常预警行为
{{item.violation.violationType}}
</div>
<div nz-col nzSpan="5">
工作人员倚靠加油机或立柱
{{item.violation.violationName}}
</div>
<div nz-col nzSpan="4">
便利店
{{item.violateArea}}
</div>
<div nz-col nzSpan="4">
2021-10-12 09:28:13
{{item.violateTime | date:"yyyy-MM-dd HH:mm:ss"}}
</div>
<div nz-col nzSpan="2">
<span class="look">查看</span>
<span class="look" (click)="look(item)">查看</span>
</div>
</div>
</div>
</div>
<div class="pagination">
<!-- <div class="pagination">
<nz-pagination [nzPageIndex]="1" [nzTotal]="85" [nzPageSize]="20" [nzShowTotal]="totalTemplate"
nzShowQuickJumper></nz-pagination>
<ng-template #totalTemplate let-total> 16条/页,共100条 </ng-template>
</div>
</div> -->
</div>
</div>
</div>

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

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

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

@ -1,7 +1,12 @@
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 * 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({
selector: 'app-criminal-records',
templateUrl: './criminal-records.component.html',
@ -9,7 +14,7 @@ import * as echarts from 'echarts';
})
export class CriminalRecordsComponent implements OnInit {
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 //左侧饼图
option = {
@ -272,12 +277,31 @@ export class CriminalRecordsComponent implements OnInit {
}
return dateList;
}
isEcharts: boolean = true
isEchartsShow() {
this.isEcharts = !this.isEcharts
}
startdate
enddate
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({
level: [null],
type: [null],
site: [null],
datePicker: [null]
datePicker: [[this.startdate, this.enddate]]
});
// 饼图
this.myChart = echarts.init(document.getElementById('piechart'));
@ -287,14 +311,60 @@ export class CriminalRecordsComponent implements OnInit {
this.mybarChart.setOption(this.baroption);
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 {
for (const i in this.validateForm.controls) {
this.validateForm.controls[i].markAsDirty();
this.validateForm.controls[i].updateValueAndValidity();
}
console.log(this.validateForm)
this.list = []
this.SkipCount = '0'
this.getViolateRecordList()
}
resetForm(e: MouseEvent): void {
e.preventDefault();
@ -303,6 +373,12 @@ export class CriminalRecordsComponent implements OnInit {
this.validateForm.controls[key].markAsPristine();
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
warningType() {
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 });
})
}
list: any = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
typeChange(e) {
this.warningTypes.forEach(element => {
if (element.key == e) {
this.warningTypesDetails = element
}
});
}
selectedType = '分布'
selectedRankingType = '站点排名'
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 { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { NzMessageService } from 'ng-zorro-antd/message';
import { Base64 } from 'js-base64';
@Component({
selector: 'app-login',
templateUrl: './login.component.html',
@ -30,8 +30,8 @@ export class LoginComponent implements OnInit {
let password = localStorage.getItem('password')
if (account && password) {
this.validateForm.patchValue({
userName: localStorage.getItem('account'),
password: localStorage.getItem('password')
userName: Base64.decode(localStorage.getItem('account')),
password: Base64.decode(localStorage.getItem('password'))
});
this.remember = true //这一步是回显后让勾选框为选中状态
}
@ -40,7 +40,7 @@ export class LoginComponent implements OnInit {
this.submitForm()
this.autologin = true //这一步是回显后让勾选框为选中状态
}
}
errmsg: string = ''; //错误信息
@ -57,8 +57,8 @@ export class LoginComponent implements OnInit {
rememberInfo() {
// 判断用户是否勾选记住密码,如果勾选,在本地储存中储存登录信息
if (this.remember) {
localStorage.setItem("account", this.validateForm.value.userName)
localStorage.setItem("password", this.validateForm.value.password)
localStorage.setItem("account", Base64.encode(this.validateForm.value.userName))
localStorage.setItem("password", Base64.encode(this.validateForm.value.password))
}
}
//自动登陆
@ -80,7 +80,7 @@ export class LoginComponent implements OnInit {
localStorage.removeItem("account")
localStorage.removeItem("password")
}
if(!this.autologin){
if (!this.autologin) {
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 滚动事件
if (event.target.scrollHeight - (event.target.scrollTop + event.target.clientHeight) <= 10) {
console.log('需要加载数据了', event)
this.SkipCount += 100
this.SkipCount = String(Number(this.SkipCount) + 50)
await this.getGasStation()
}
});

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

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

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

@ -36,7 +36,14 @@ export class OrganizationComponent implements OnInit {
nzExpandAll = false;
totalCount: string
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
// console.log('组织机构',data.result.totalCount)
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 { UserComponent } from './user/user.component';
import { AnalysisOfTheHostComponent } from './analysis-of-the-host/analysis-of-the-host.component';
import { PushComponent } from './push/push.component';
const routes: Routes = [
{ path: 'organization', component: OrganizationComponent },
{ path: 'user', component: UserComponent },
{ path: 'role', component: RoleComponent },
{ path: 'host', component: AnalysisOfTheHostComponent }
{ path: 'host', component: AnalysisOfTheHostComponent },
{ path: 'push', component: PushComponent }
];
@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 { AddcameraComponent } from './analysis-of-the-host/addcamera/addcamera.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({
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: [
CommonModule,
SystemRoutingModule,

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

@ -43,7 +43,14 @@ export class AdduserComponent implements OnInit {
//获取所有组织机构
nodes:any = []
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 => {
element.key = element.id
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 = []
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 => {
element.key = element.id
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"
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:
version "1.1.6"
resolved "https://registry.npm.taobao.org/js-levenshtein/download/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d"

Loading…
Cancel
Save