陈敬瑜 3 years ago
parent
commit
e16b3d9386
  1. 2
      src/app/app-routing.module.ts
  2. 60
      src/app/babylon/controller/config-manager.ts
  3. 961
      src/app/babylon/controller/inputController.ts
  4. 6
      src/app/babylon/controller/scene-manager.ts
  5. 127
      src/app/babylon/model/data/mark/all-mark-data.ts
  6. 320
      src/app/babylon/model/data/mark/mark-data.ts
  7. 5
      src/app/babylon/model/data/mark/mark-plan-data.ts
  8. 19
      src/app/babylon/model/info/mark/model-info-mark.ts
  9. 4
      src/app/babylon/model/info/mark/other/mark-plan-area-info.ts
  10. 12
      src/app/babylon/model/info/mark/other/mark-plan-multi-line-info.ts
  11. 11
      src/app/babylon/tool/speaking-tool.ts
  12. 24
      src/app/babylon/view/building-window/building-window.ts
  13. 66
      src/app/babylon/view/mark-window/mark-window.ts
  14. 247
      src/app/pages/criminal-records-admin/criminal-records-admin.component.ts
  15. 2
      src/app/pages/equipment-info/equipment-info.component.ts
  16. 12
      src/app/pages/home/home.component.html
  17. 58
      src/app/pages/left-domain/left-domain.component.html
  18. 39
      src/app/pages/left-domain/left-domain.component.scss
  19. 136
      src/app/pages/left-domain/left-domain.component.ts
  20. 6
      src/app/pages/login/login.component.html
  21. 2
      src/app/pages/login/login.component.scss
  22. 22
      src/app/pages/login/login.component.ts
  23. 9
      src/app/pages/pages-routing.module.ts
  24. 11
      src/app/pages/pages.module.ts
  25. 128
      src/app/pages/plan-admin/plan-admin.component.html
  26. 133
      src/app/pages/plan-admin/plan-admin.component.scss
  27. 70
      src/app/pages/plan-admin/plan-admin.component.ts
  28. 32
      src/app/pages/plan/plan.component.html
  29. 37
      src/app/pages/plan/plan.component.scss
  30. 51
      src/app/pages/plan/plan.component.ts
  31. 2
      src/app/pages/today-warning-admin/today-warning-admin.component.ts
  32. 7
      src/app/system-management/organization/addor/addor.component.html
  33. 3
      src/app/system-management/organization/addor/addor.component.ts
  34. 5
      src/app/system-management/organization/editor/editor.component.html
  35. 3
      src/app/system-management/organization/editor/editor.component.ts
  36. 2
      src/app/system-management/organization/organization.component.ts
  37. 4
      src/app/system-management/system-management.module.ts
  38. 7
      src/app/ui/tabbar/tabbar.component.ts
  39. BIN
      src/assets/images/expand.png
  40. BIN
      src/assets/images/point.png
  41. BIN
      src/assets/images/unexpand.png
  42. BIN
      src/assets/mesh/mark/disaster/syd/SYD.bin
  43. 131
      src/assets/mesh/mark/disaster/syd/SYD.gltf
  44. 5
      src/assets/mesh/mark/disaster/syd/SYD.gltf.manifest
  45. BIN
      src/assets/mesh/mark/disaster/syd/ShangYuanC.jpg
  46. BIN
      src/assets/mesh/outdoor/ZhuTi/FireExtinguisher_FireExtinguisher_AlbedoTransparency.png
  47. BIN
      src/assets/mesh/outdoor/ZhuTi/LuZhuang.jpg
  48. BIN
      src/assets/mesh/outdoor/ZhuTi/QiCaiXiang.jpg
  49. BIN
      src/assets/mesh/outdoor/ZhuTi/SanXiang.jpg
  50. BIN
      src/assets/mesh/outdoor/ZhuTi/ShaDai.jpg
  51. BIN
      src/assets/mesh/outdoor/ZhuTi/ZHSY_BanGong.jpg
  52. BIN
      src/assets/mesh/outdoor/ZhuTi/ZHSY_ChuGuan.png
  53. BIN
      src/assets/mesh/outdoor/ZhuTi/ZHSY_GX1.jpg
  54. BIN
      src/assets/mesh/outdoor/ZhuTi/ZHSY_JYJ1.jpg
  55. BIN
      src/assets/mesh/outdoor/ZhuTi/ZHSY_JYJ2.jpg
  56. BIN
      src/assets/mesh/outdoor/ZhuTi/ZHSY_JingGai.jpg
  57. BIN
      src/assets/mesh/outdoor/ZhuTi/ZHSY_JingGai1.jpg
  58. BIN
      src/assets/mesh/outdoor/ZhuTi/ZHSY_SXT.png
  59. BIN
      src/assets/mesh/outdoor/ZhuTi/ZHSY_SheDeng1.jpg
  60. BIN
      src/assets/mesh/outdoor/ZhuTi/ZHSY_floor1.jpg
  61. BIN
      src/assets/mesh/outdoor/ZhuTi/ZHSY_floor2.jpg
  62. BIN
      src/assets/mesh/outdoor/ZhuTi/ZHSY_gg1.jpg
  63. BIN
      src/assets/mesh/outdoor/ZhuTi/ZHSY_gg2.jpg
  64. BIN
      src/assets/mesh/outdoor/ZhuTi/ZHSY_gg3.jpg
  65. BIN
      src/assets/mesh/outdoor/ZhuTi/ZHSY_gg4.jpg
  66. BIN
      src/assets/mesh/outdoor/ZhuTi/ZHSY_gg5.jpg
  67. BIN
      src/assets/mesh/outdoor/ZhuTi/ZHSY_gg6.jpg
  68. BIN
      src/assets/mesh/outdoor/ZhuTi/ZHSY_glass1.jpg
  69. BIN
      src/assets/mesh/outdoor/ZhuTi/ZHSY_guitai1.jpg
  70. BIN
      src/assets/mesh/outdoor/ZhuTi/ZHSY_wall1.jpg
  71. BIN
      src/assets/mesh/outdoor/ZhuTi/ZHSY_wall10.jpg
  72. BIN
      src/assets/mesh/outdoor/ZhuTi/ZHSY_wall11.jpg
  73. BIN
      src/assets/mesh/outdoor/ZhuTi/ZHSY_wall12.jpg
  74. BIN
      src/assets/mesh/outdoor/ZhuTi/ZHSY_wall2.jpg
  75. BIN
      src/assets/mesh/outdoor/ZhuTi/ZHSY_wall3.jpg
  76. BIN
      src/assets/mesh/outdoor/ZhuTi/ZHSY_wall4.jpg
  77. BIN
      src/assets/mesh/outdoor/ZhuTi/ZHSY_wall5.jpg
  78. BIN
      src/assets/mesh/outdoor/ZhuTi/ZHSY_wall6.jpg
  79. BIN
      src/assets/mesh/outdoor/ZhuTi/ZHSY_wall7.jpg
  80. BIN
      src/assets/mesh/outdoor/ZhuTi/ZHSY_wall8.jpg
  81. BIN
      src/assets/mesh/outdoor/ZhuTi/ZHSY_wall9.jpg
  82. BIN
      src/assets/mesh/outdoor/ZhuTi/ZHSY_yinxiang.jpg
  83. BIN
      src/assets/mesh/outdoor/ZhuTi/ZhuTi.bin
  84. 10098
      src/assets/mesh/outdoor/ZhuTi/ZhuTi.gltf
  85. BIN
      src/assets/mesh/outdoor/ZhuTi/mhq-xiang.jpg
  86. 22
      src/styles.scss
  87. 32
      src/theme.less
  88. 5
      yarn.lock

2
src/app/app-routing.module.ts

@ -16,7 +16,7 @@ const routes: Routes = [
{ path: 'register', component: RegisterComponent }, //注册页
{
path: '', component: HomeComponent, children: [
{ path: 'home', loadChildren: () => import('./pages/pages.module').then(m => m.PagesModule) }
{ path: '', loadChildren: () => import('./pages/pages.module').then(m => m.PagesModule) }
]
}, //首页
{

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

@ -126,14 +126,8 @@ export class ConfigManager {
*
*/
static s_markName = new Map<MarkType, string>([
[MarkType.SYA, "伤员"],
[MarkType.SYB, "伤员"],
[MarkType.SYC, "伤员"],
[MarkType.SYD, "伤员"],
[MarkType.ZQR, "知情人"],
[MarkType.WXP, "危险品"],
[MarkType.ZWD, "杂物堆"],
[MarkType.PCD, "破拆点"],
[MarkType.H, "火"],
[MarkType.TPH, "突破火"],
[MarkType.SNH, "室内火"],
@ -141,69 +135,19 @@ export class ConfigManager {
[MarkType.YWB, "烟雾"],
[MarkType.YWC, "烟雾"],
[MarkType.MHF, "灭火服"],
[MarkType.JYF, "救援服"],
[MarkType.GRF, "隔热服"],
[MarkType.FHF, "防化服"],
[MarkType.BHF, "避火服"],
[MarkType.YWXFY, "义务消防员"],
[MarkType.AQS, "安全哨"],
[MarkType.MTC, "摩托车"],
[MarkType.XLC, "巡逻车"],
[MarkType.SGC, "水罐车"],
[MarkType.PMC, "泡沫车"],
[MarkType.GPC, "高喷车"],
[MarkType.DGPTC, "登高平台车"],
[MarkType.YTC, "云梯车"],
[MarkType.QXJYC, "抢险救援车"],
[MarkType.QCC, "器材车"],
[MarkType.ZMC, "照明车"],
[MarkType.PCC, "破拆车"],
[MarkType.PYC, "排烟车"],
[MarkType.ZHC, "指挥车"],
[MarkType.GCGSC, "高层供水车"],
[MarkType.KQHXCQC, "空气呼吸充气车"],
[MarkType.GA, "公安"],
[MarkType.JJ, "交警"],
[MarkType.YS, "医生"],
[MarkType.QXRY, "抢修人员"],
[MarkType.JHC, "救护车"],
[MarkType.JC, "警车"],
[MarkType.DLQXC, "电力抢修车"],
[MarkType.RQQXC, "燃气抢修车"],
[MarkType.GSQXC, "供水抢修车"],
[MarkType.HBJCC, "环保检测车"],
[MarkType.JTYSC, "交通运输车"],
[MarkType.WSFYC, "卫生防疫车"],
[MarkType.YJTXC, "应急通信车"],
[MarkType.JCA, "轿车"],
[MarkType.JCB, "轿车"],
[MarkType.JCC, "轿车"],
[MarkType.DSZ, "董事长"],
[MarkType.JL, "经理"],
[MarkType.FZ, "副总"],
[MarkType.MS, "秘书"],
[MarkType.ZJ, "总监"],
[MarkType.ZG, "主管"],
[MarkType.ZZ, "组长"],
[MarkType.QT, "前台"],
[MarkType.SJS, "设计师"],
[MarkType.CXY, "程序员"],
[MarkType.ZYA, "职员"],
[MarkType.ZYB, "职员"],
[MarkType.JG, "技工"],
[MarkType.BA, "保安"],
[MarkType.JJX, "警戒线"],
[MarkType.SD, "水带"],
[MarkType.JGLX, "进攻路线"],
[MarkType.CT, "撤退"],
[MarkType.ZHB, "指挥部"],
[MarkType.LT6, "6米拉梯"],
[MarkType.LT15, "15米拉梯"],
[MarkType.FSQ, "分水器"],
[MarkType.STB, "手抬泵"],
[MarkType.SP, "水炮"],
[MarkType.WZ, "文字"],
[MarkType.JJQ, "集结区"],
[MarkType.QYSDA, "区域设定"],
[MarkType.QYSDB, "区域设定"],
]);
@ -228,7 +172,7 @@ export class ConfigManager {
*/
static getMarkModelPath(pos: MarkTagPos, type: MarkType): string {
let result = ConfigManager.c_resPath_assetsRoot + "mark/" + pos.toLocaleLowerCase() + "/" + type.toLocaleLowerCase() + "/";
let result = ConfigManager.c_resPath_assetsRoot + "mesh/mark/" + pos.toLocaleLowerCase() + "/" + type.toLocaleLowerCase() + "/";
return result;
}

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

File diff suppressed because it is too large Load Diff

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

@ -496,7 +496,6 @@ export class SceneManager {
}
else if (modelType == ModelType.Mark) {
switch ((modelData as MarkData).type) {
case MarkType.JJQ:
case MarkType.QYSDA:
case MarkType.QYSDB:
modelData = plainToClass(MarkData_Area, modelData);
@ -506,10 +505,7 @@ export class SceneManager {
modelData = plainToClass(MarkData_Line, modelData);
modelInfo = new ModelInfo_mark_line(modelData as MarkData, null, defaultMesh, null, isNew);
break;
case MarkType.SD:
modelData = plainToClass(MarkData_multiLine, modelData);
modelInfo = new ModelInfo_mark_multiLine(modelData as MarkData, null, defaultMesh, null, isNew);
break;
case MarkType.JGLX:
modelData = plainToClass(MarkData_multiArrow_JG, modelData);
modelInfo = new ModelInfo_mark_multiArrow(modelData as MarkData, null, defaultMesh, null, isNew);

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

@ -16,16 +16,16 @@ export class AllMarkData {
marks_Disaster: MarkData[] = [];
/**
*
*
*/
@Type(() => MarkData)
marks_FireFighting: MarkData[] = [];
marks_Outside: MarkData[] = [];
/**
*
*/
@Type(() => MarkData)
marks_Linkage: MarkData[] = [];
// /**
// * 联动力量
// */
// @Type(() => MarkData)
// marks_Linkage: MarkData[] = [];
/**
*
@ -34,24 +34,20 @@ export class AllMarkData {
marks_Inside: MarkData[] = [];
/**
*
*
*/
@Type(() => MarkData)
marks_Tool: MarkData[] = [];
marks_Other: MarkData[] = [];
static CreateAllMarkData(): AllMarkData {
let result = new AllMarkData();
//灾情
let tagPos: MarkTagPos = MarkTagPos.Disaster;
AllMarkData.newMarkData(MarkType.SYA, MarkKindType.Persion, tagPos, result);
AllMarkData.newMarkData(MarkType.SYB, MarkKindType.Persion, tagPos, result);
AllMarkData.newMarkData(MarkType.SYC, MarkKindType.Persion, tagPos, result);
AllMarkData.newMarkData(MarkType.SYD, MarkKindType.Persion, tagPos, result);
AllMarkData.newMarkData(MarkType.ZQR, MarkKindType.Persion, tagPos, result);
AllMarkData.newMarkData(MarkType.WXP, MarkKindType.Goods, tagPos, result);
AllMarkData.newMarkData(MarkType.ZWD, MarkKindType.Goods, tagPos, result);
AllMarkData.newMarkData(MarkType.PCD, MarkKindType.Goods, tagPos, result);
AllMarkData.newMarkData(MarkType.DY, MarkKindType.Persion, tagPos, result);
AllMarkData.newMarkData(MarkType.LYX, MarkKindType.Goods, tagPos, result);
AllMarkData.newMarkData(MarkType.LYD, MarkKindType.Goods, tagPos, result);
AllMarkData.newMarkData(MarkType.H, MarkKindType.Effect, tagPos, result, undefined, false);
AllMarkData.newMarkData(MarkType.TPH, MarkKindType.Effect, tagPos, result, undefined, false);
AllMarkData.newMarkData(MarkType.SNH, MarkKindType.Effect, tagPos, result, undefined, false);
@ -59,81 +55,34 @@ export class AllMarkData {
AllMarkData.newMarkData(MarkType.YWB, MarkKindType.Effect, tagPos, result, undefined, false);
AllMarkData.newMarkData(MarkType.YWC, MarkKindType.Effect, tagPos, result, undefined, false);
//消防力量
tagPos = MarkTagPos.FireFighting;
AllMarkData.newMarkData(MarkType.MHF, MarkKindType.Persion, tagPos, result);
AllMarkData.newMarkData(MarkType.JYF, MarkKindType.Persion, tagPos, result);
AllMarkData.newMarkData(MarkType.GRF, MarkKindType.Persion, tagPos, result);
AllMarkData.newMarkData(MarkType.FHF, MarkKindType.Persion, tagPos, result);
AllMarkData.newMarkData(MarkType.BHF, MarkKindType.Persion, tagPos, result);
AllMarkData.newMarkData(MarkType.YWXFY, MarkKindType.Persion, tagPos, result);
AllMarkData.newMarkData(MarkType.AQS, MarkKindType.Persion, tagPos, result);
AllMarkData.newMarkData(MarkType.MTC, MarkKindType.Car, tagPos, result);
AllMarkData.newMarkData(MarkType.XLC, MarkKindType.Car, tagPos, result);
AllMarkData.newMarkData(MarkType.SGC, MarkKindType.Car, tagPos, result);
//外部力量
tagPos = MarkTagPos.Outside;
AllMarkData.newMarkData(MarkType.PMC, MarkKindType.Car, tagPos, result);
AllMarkData.newMarkData(MarkType.GPC, MarkKindType.Car, tagPos, result);
AllMarkData.newMarkData(MarkType.DGPTC, MarkKindType.Car, tagPos, result);
AllMarkData.newMarkData(MarkType.YTC, MarkKindType.Car, tagPos, result);
AllMarkData.newMarkData(MarkType.QXJYC, MarkKindType.Car, tagPos, result);
AllMarkData.newMarkData(MarkType.QCC, MarkKindType.Car, tagPos, result);
AllMarkData.newMarkData(MarkType.ZMC, MarkKindType.Car, tagPos, result);
AllMarkData.newMarkData(MarkType.PCC, MarkKindType.Car, tagPos, result);
AllMarkData.newMarkData(MarkType.PYC, MarkKindType.Car, tagPos, result);
AllMarkData.newMarkData(MarkType.ZHC, MarkKindType.Car, tagPos, result);
AllMarkData.newMarkData(MarkType.GCGSC, MarkKindType.Car, tagPos, result);
AllMarkData.newMarkData(MarkType.KQHXCQC, MarkKindType.Car, tagPos, result);
//联动力量
tagPos = MarkTagPos.Linkage;
AllMarkData.newMarkData(MarkType.GA, MarkKindType.Persion, tagPos, result);
AllMarkData.newMarkData(MarkType.MHF, MarkKindType.Persion, tagPos, result);
AllMarkData.newMarkData(MarkType.JC, MarkKindType.Car, tagPos, result);
AllMarkData.newMarkData(MarkType.JJ, MarkKindType.Persion, tagPos, result);
AllMarkData.newMarkData(MarkType.YS, MarkKindType.Persion, tagPos, result);
AllMarkData.newMarkData(MarkType.QXRY, MarkKindType.Persion, tagPos, result);
AllMarkData.newMarkData(MarkType.GA, MarkKindType.Persion, tagPos, result);
AllMarkData.newMarkData(MarkType.JHC, MarkKindType.Car, tagPos, result);
AllMarkData.newMarkData(MarkType.JC, MarkKindType.Car, tagPos, result);
AllMarkData.newMarkData(MarkType.DLQXC, MarkKindType.Car, tagPos, result);
AllMarkData.newMarkData(MarkType.RQQXC, MarkKindType.Car, tagPos, result);
AllMarkData.newMarkData(MarkType.GSQXC, MarkKindType.Car, tagPos, result);
AllMarkData.newMarkData(MarkType.HBJCC, MarkKindType.Car, tagPos, result);
AllMarkData.newMarkData(MarkType.JTYSC, MarkKindType.Car, tagPos, result);
AllMarkData.newMarkData(MarkType.WSFYC, MarkKindType.Car, tagPos, result);
AllMarkData.newMarkData(MarkType.YJTXC, MarkKindType.Car, tagPos, result);
AllMarkData.newMarkData(MarkType.JCA, MarkKindType.Car, tagPos, result);
AllMarkData.newMarkData(MarkType.JCB, MarkKindType.Car, tagPos, result);
AllMarkData.newMarkData(MarkType.JCC, MarkKindType.Car, tagPos, result);
AllMarkData.newMarkData(MarkType.YS, MarkKindType.Persion, tagPos, result);
//内部力量
tagPos = MarkTagPos.Inside;
AllMarkData.newMarkData(MarkType.DSZ, MarkKindType.Persion, tagPos, result);
AllMarkData.newMarkData(MarkType.JL, MarkKindType.Persion, tagPos, result);
AllMarkData.newMarkData(MarkType.FZ, MarkKindType.Persion, tagPos, result);
AllMarkData.newMarkData(MarkType.MS, MarkKindType.Persion, tagPos, result);
AllMarkData.newMarkData(MarkType.ZJ, MarkKindType.Persion, tagPos, result);
AllMarkData.newMarkData(MarkType.ZG, MarkKindType.Persion, tagPos, result);
AllMarkData.newMarkData(MarkType.ZZ, MarkKindType.Persion, tagPos, result);
AllMarkData.newMarkData(MarkType.QT, MarkKindType.Persion, tagPos, result);
AllMarkData.newMarkData(MarkType.SJS, MarkKindType.Persion, tagPos, result);
AllMarkData.newMarkData(MarkType.CXY, MarkKindType.Persion, tagPos, result);
AllMarkData.newMarkData(MarkType.ZYA, MarkKindType.Persion, tagPos, result);
AllMarkData.newMarkData(MarkType.ZYB, MarkKindType.Persion, tagPos, result);
AllMarkData.newMarkData(MarkType.JG, MarkKindType.Persion, tagPos, result);
AllMarkData.newMarkData(MarkType.BA, MarkKindType.Persion, tagPos, result);
//标绘工具
tagPos = MarkTagPos.Tool;
AllMarkData.newMarkData(MarkType.SYY, MarkKindType.Persion, tagPos, result);
AllMarkData.newMarkData(MarkType.JYY, MarkKindType.Persion, tagPos, result);
AllMarkData.newMarkData(MarkType.XYY, MarkKindType.Persion, tagPos, result);
AllMarkData.newMarkData(MarkType.XFSD, MarkKindType.Persion, tagPos, result);
AllMarkData.newMarkData(MarkType.XFSQ, MarkKindType.Persion, tagPos, result);
AllMarkData.newMarkData(MarkType.XFT, MarkKindType.Persion, tagPos, result);
//其他
tagPos = MarkTagPos.Other;
AllMarkData.newMarkData(MarkType.GK, MarkKindType.Persion, tagPos, result);
AllMarkData.newMarkData(MarkType.JCA, MarkKindType.Car, tagPos, result);
AllMarkData.newMarkData(MarkType.JJX, MarkKindType.Goods, tagPos, result, undefined, false);
AllMarkData.newMarkData(MarkType.SD, MarkKindType.Goods, tagPos, result, undefined, false);
AllMarkData.newMarkData(MarkType.JGLX, MarkKindType.Virtual, tagPos, result, undefined, false);
AllMarkData.newMarkData(MarkType.CT, MarkKindType.Virtual, tagPos, result, undefined, false);
AllMarkData.newMarkData(MarkType.ZHB, MarkKindType.Goods, tagPos, result, MarkTask.Unknown);
AllMarkData.newMarkData(MarkType.LT6, MarkKindType.Goods, tagPos, result);
AllMarkData.newMarkData(MarkType.LT15, MarkKindType.Goods, tagPos, result);
AllMarkData.newMarkData(MarkType.FSQ, MarkKindType.Goods, tagPos, result);
AllMarkData.newMarkData(MarkType.STB, MarkKindType.Goods, tagPos, result);
AllMarkData.newMarkData(MarkType.SP, MarkKindType.Goods, tagPos, result, MarkTask.WaterMonitor);
AllMarkData.newMarkData(MarkType.WZ, MarkKindType.Virtual, tagPos, result, MarkTask.Unknown);
AllMarkData.newMarkData(MarkType.JJQ, MarkKindType.Virtual, tagPos, result, MarkTask.Unknown, false);
AllMarkData.newMarkData(MarkType.QYSDA, MarkKindType.Virtual, tagPos, result, MarkTask.Unknown, false);
AllMarkData.newMarkData(MarkType.QYSDB, MarkKindType.Virtual, tagPos, result, MarkTask.Unknown, false);
@ -161,17 +110,17 @@ export class AllMarkData {
case MarkTagPos.Disaster:
list = allMarkData.marks_Disaster;
break;
case MarkTagPos.FireFighting:
list = allMarkData.marks_FireFighting
break;
case MarkTagPos.Linkage:
list = allMarkData.marks_Linkage;
case MarkTagPos.Outside:
list = allMarkData.marks_Outside
break;
// case MarkTagPos.Linkage:
// list = allMarkData.marks_Linkage;
// break;
case MarkTagPos.Inside:
list = allMarkData.marks_Inside;
break;
case MarkTagPos.Tool:
list = allMarkData.marks_Tool;
case MarkTagPos.Other:
list = allMarkData.marks_Other;
break;
}
@ -197,7 +146,6 @@ export class AllMarkData {
let result = null;
switch (type) {
case MarkType.JJQ:
case MarkType.QYSDA:
case MarkType.QYSDB:
result = new MarkData_Area(type.toString(), type, tagPos, kindType, icon, modelPath, modelName, taskType, isModel);
@ -205,9 +153,6 @@ export class AllMarkData {
case MarkType.JJX:
result = new MarkData_Line(type.toString(), type, tagPos, kindType, icon, modelPath, modelName, taskType, isModel);
break;
case MarkType.SD:
result = new MarkData_multiLine(type.toString(), type, tagPos, kindType, icon, modelPath, modelName, taskType, isModel);
break;
case MarkType.JGLX:
result = new MarkData_multiArrow_JG(type.toString(), type, tagPos, kindType, icon, modelPath, modelName, taskType, isModel);
break;

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

@ -17,7 +17,7 @@ export class MarkData extends ModelData {
/**
*
*/
type: MarkType = MarkType.SYA;
type: MarkType = MarkType.SYD;
/**
* tag
@ -102,24 +102,19 @@ export enum MarkTagPos {
Disaster = "Disaster",
/**
*
*
*/
FireFighting = "FireFighting",
Inside = "Inside",
/**
*
*
*/
Linkage = "Linkage",
/**
*
*/
Inside = "Inside",
Outside = "Outside",
/**
*
*/
Tool = "Tool",
Other = "Other",
}
@ -161,42 +156,26 @@ export enum MarkKindType {
export enum MarkType {
//============灾情设定===============
/**
* A
*/
SYA = "SYA",
/**
* B
*/
SYB = "SYB",
/**
* C
*/
SYC = "SYC",
/**
* D
*/
SYD = "SYD",
/**
*
*/
ZQR = "ZQR",
/**
*
*
*/
WXP = "WXP",
DY = "DT",
/**
*
*
*/
ZWD = "ZWD",
LYD = "LYD",
/**
*
*
*/
PCD = "PCD",
LYX = "LYX",
/**
*
@ -228,123 +207,23 @@ export enum MarkType {
*/
YWC = "YWC",
//==================消防力量================
//==================外部力量================
/**
*
*/
MHF = "MHF",
/**
*
*/
JYF = "JYF",
/**
*
*/
GRF = "GRF",
/**
*
*/
FHF = "FHF",
/**
*
*/
BHF = "BHF",
/**
*
*/
YWXFY = "YWXFY",
/**
*
*/
AQS = "AQS",
/**
*
*/
MTC = "MTC",
/**
*
*/
XLC = "XLC",
/**
*
*/
SGC = "SGC",
/**
*
*/
PMC = "PMC",
/**
*
*/
GPC = "GPC",
/**
*
*/
DGPTC = "DGPTC",
/**
*
*/
YTC = "YTC",
/**
*
*/
QXJYC = "QXJYC",
/**
*
*/
QCC = "QCC",
/**
*
*/
ZMC = "ZMC",
/**
*
*/
PCC = "PCC",
/**
*
*/
PYC = "PYC",
/**
*
*/
ZHC = "ZHC",
/**
*
*/
GCGSC = "GCGSC",
/**
*
*/
KQHXCQC = "KQHXCQC",
//================联动力量===================
/**
*
*
*/
GA = "GA",
JC = "JC",
/**
*
@ -352,158 +231,78 @@ export enum MarkType {
JJ = "JJ",
/**
*
*/
YS = "YS",
/**
*
*
*/
QXRY = "QXRY",
GA = "GA",
/**
*
*/
JHC = "JHC",
/**
*
*/
JC = "JC",
/**
*
*/
DLQXC = "DLQXC",
/**
*
*/
RQQXC = "RQQXC",
/**
*
*/
GSQXC = "GSQXC",
/**
*
*/
HBJCC = "HBJCC",
/**
*
*/
JTYSC = "JTYSC",
/**
*
*/
WSFYC = "WSFYC",
/**
*
*/
YJTXC = "YJTXC",
/**
* 轿
*/
JCA = "JCA",
/**
* 轿
*/
JCB = "JCB",
/**
* 轿
*
*/
JCC = "JCC",
YS = "YS",
//===============内部力量=================
/**
*
*/
DSZ = "DSZ",
/**
*
*/
JL = "JL",
/**
*
*/
FZ = "FZ",
/**
*
*/
MS = "MS",
/**
*
*/
ZJ = "ZJ",
/**
*
*/
ZG = "ZG",
/**
*
*
*/
ZZ = "ZZ",
SYY = "SYY",
/**
*
*
*/
QT = "QT",
JYY = "JYY",
/**
*
*
*/
SJS = "SJS",
XYY = "XYY",
/**
*
*
*/
CXY = "CXY",
XFSD = "XFSD",
/**
*
*
*/
ZYA = "ZYA",
XFSQ = "XFSQ",
/**
*
*
*/
ZYB = "ZYB",
XFT = "XFT",
//===================其他===================
/**
*
*
*/
JG = "JG",
GK = "GK",
/**
*
* 轿
*/
BA = "BA",
//===================标绘工具===================
JCA = "JCA",
/**
* 线
*/
JJX = "JJX",
/**
*
*/
SD = "SD",
/**
* 线
*/
@ -514,46 +313,11 @@ export enum MarkType {
*/
CT = "CT",
/**
*
*/
ZHB = "ZHB",
/**
* 6
*/
LT6 = "LT6",
/**
* 15
*/
LT15 = "LT15",
/**
*
*/
FSQ = "FSQ",
/**
*
*/
STB = "STB",
/**
*
*/
SP = "SP",
/**
*
*/
WZ = "WZ",
/**
*
*/
JJQ = "JJQ",
/**
*
*/
@ -588,11 +352,5 @@ export enum MarkTask {
*
*/
Car,
/**
*
*/
WaterMonitor
}

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

@ -213,6 +213,11 @@ export class MarkNodeData {
@Type(() => ArcRotateCameraData)
cameraData: ArcRotateCameraData;
/**
*
*/
showZP: boolean;
/**
*
*/

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

@ -374,10 +374,6 @@ export class ModelInfo_mark extends ModelInfo {
let result = false;
switch (this.markData.type) {
case MarkType.MHF:
case MarkType.JYF:
case MarkType.GRF:
case MarkType.FHF:
case MarkType.BHF:
result = true;
//五种消防员
if (this.node_pt == null && this.models != null) {
@ -390,17 +386,13 @@ export class ModelInfo_mark extends ModelInfo {
// }
}
break;
case MarkType.SGC:
case MarkType.PMC:
case MarkType.GPC:
case MarkType.GCGSC:
case MarkType.YTC:
//五种消防车
result = true;
break;
case MarkType.SP:
result = true;
break;
default:
break;
}
@ -455,10 +447,7 @@ export class ModelInfo_mark extends ModelInfo {
}
switch (this.markData.type) {
case MarkType.MHF:
case MarkType.JYF:
case MarkType.GRF:
case MarkType.FHF:
case MarkType.BHF:
//消防员,显隐喷枪
if (this.node_pt != null) {
this.node_pt.setEnabled(show);

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

@ -100,8 +100,8 @@ export class ModelInfo_mark_area extends ModelInfo_mark {
if (isNew) {
switch (data.type) {
case MarkType.JJQ: data.pointData = this.getDefaultPoint_4();
break;
// case MarkType.JJQ: data.pointData = this.getDefaultPoint_4();
// break;
case MarkType.QYSDA: data.pointData = this.getDefaultPoint_6();
break;
case MarkType.QYSDB: data.pointData = this.getDefaultPoint_8();

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

@ -102,18 +102,18 @@ export class ModelInfo_mark_multiLine extends ModelInfo_mark {
if (this.lineData.pointData.length < 2) {
MarkWindow.instance.deleteMarkInfo(this);
}
MarkWindow.instance.mulLineIsBreak_SD = -1;
// MarkWindow.instance.mulLineIsBreak_SD = -1;
}
onPointerObservable(eventData: PointerInfo, eventState: EventState) {
let instance = this;
if (MarkWindow.instance.mulLineIsBreak_SD < 0) {
instance.cancelCreate();
instance.removeEvent();
return;
}
// if (MarkWindow.instance.mulLineIsBreak_SD < 0) {
// instance.cancelCreate();
// instance.removeEvent();
// return;
// }
switch (eventData.type) {
case PointerEventTypes.POINTERUP:

11
src/app/babylon/tool/speaking-tool.ts

@ -16,6 +16,7 @@ export class SpeakingTool {
/**
*
*
* @param msg
*/
speak(msg: string) {
@ -23,6 +24,9 @@ export class SpeakingTool {
}
else {
this.clear();
let speakMsg = new SpeechSynthesisUtterance(msg);
speakMsg.lang = "zh-CN";
speakMsg.rate = 1;
@ -47,6 +51,13 @@ export class SpeakingTool {
window.speechSynthesis.resume();
}
/**
*
*/
clear() {
window.speechSynthesis.cancel();
}
/**
* IE浏览器
*/

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

@ -9,6 +9,7 @@ import { SceneManager } from "../../controller/scene-manager";
import { ServeManager } from "../../controller/serve-manager";
import { BuildingStatus } from "../../controller/status/building-status";
import { StatusManager } from "../../controller/status/status-manager";
import { ArcRotateCameraData } from "../../model/data/camera-data";
import { BuildingData, BuildingData_ChemicalPlant, BuildingData_Environment, BuildingData_Normal, BuildingType } from "../../model/data/institution/building/building-data";
import { JYZInfoMoudleType, JYZShowData } from "../../model/data/institution/jyz-show-data";
import { ModelType } from "../../model/data/model-data/model-data";
@ -264,16 +265,31 @@ export class BuildingWindow extends UIBase {
recoverMoudleShow(type: JYZInfoMoudleType) {
let showData = DataManager.institutionData.getMoudleShowData(type);
if (showData != null) {
let camera = SceneManager.Instance.defaultCamera;
//let camera = SceneManager.Instance.defaultCamera;
//showData.cameraData.setDataToCamera(camera);
let cameraData = showData.cameraData;
BabylonTool.AnimMoveCameraTargetAB(camera, 60, cameraData.target, cameraData.radius, cameraData.alpha, cameraData.beta);
this.showZP(showData.showZP);
PlanComponent.instance.isOpenAwning = showData.showZP;
// BabylonTool.AnimMoveCameraTargetAB(camera, 60, cameraData.target, cameraData.radius, cameraData.alpha, cameraData.beta);
// this.showZP(showData.showZP);
// PlanComponent.instance.isOpenAwning = showData.showZP;
this.revoverCamera(cameraData, showData.showZP);
}
}
/**
*
* @param cameraData
* @param showZP
*/
revoverCamera(cameraData: ArcRotateCameraData, showZP: boolean) {
this.showZP(showZP);
PlanComponent.instance.isOpenAwning = showZP;
let camera = SceneManager.Instance.defaultCamera;
if (cameraData != null) {
BabylonTool.AnimMoveCameraTargetAB(camera, 60, cameraData.target, cameraData.radius, cameraData.alpha, cameraData.beta);
}
}
//#endregion

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

@ -1,5 +1,5 @@
import { AbstractMesh, Mesh, MeshBuilder, ParticleHelper, ThinEngine, Tools, Vector3 } from "@babylonjs/core";
import { AbstractMesh, Vector3 } from "@babylonjs/core";
import { PointerEventTypes, PointerInfo } from "@babylonjs/core/Events/pointerEvents";
import { EventState, Observer } from "@babylonjs/core/Misc/observable";
import { classToClass } from "class-transformer";
@ -24,10 +24,12 @@ import { MarkNodeInfo } from "../../model/info/mark/mark-plan-info";
import { ModelInfo_mark } from "../../model/info/mark/model-info-mark";
import { ModelInfo_building } from "../../model/info/model/model-info-building";
import { ModelInfo_facility } from "../../model/info/model/model-info-facility";
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 { BuildingUIItem } from "../building-window/building-ui-item";
import { BuildingWindow } from "../building-window/building-window";
import { IndoorFloorUIItem } from "../indoor-window/indoor-floorui-item";
import { UIBase } from "../window-base/ui-base";
import { WeatherTool } from "./weather-tool";
@ -64,10 +66,6 @@ export class MarkWindow extends UIBase {
*/
markLineIsBreak: number = -1;
/**
* 线 0-1--1
*/
mulLineIsBreak_SD: number = -1;
/**
* 线 0-1--1
@ -326,10 +324,15 @@ export class MarkWindow extends UIBase {
nodeCopy = classToClass(this.currentMarkNodeInfo.nodeData);
}
}
this.clearNodeInfo();
let markPlanData: MarkPlanData = null;
if (DataManager.allMarkPlanData == null) {
return;
}
//更新新节点
let markPlanData = DataManager.allMarkPlanData.getMarkPlanById(planId);
this.clearNodeInfo();
markPlanData = DataManager.allMarkPlanData.getMarkPlanById(planId);
if (markPlanData != null) { //表示不是取消选中
if (nodeCopy == null) {
nodeCopy = classToClass(markPlanData.getNodeById(nodeId));
@ -456,7 +459,6 @@ export class MarkWindow extends UIBase {
this.selectMarkDataPrefab(false, markData)
//ThreeDimensionalHomeComponent.instance.beforeOneIcon = null
}
this.mulLineIsBreak_SD = -1;
this.markLineIsBreak = -1;
this.mulArrowIsBreak_JG = -1;
this.mulArrowIsBreak_CT = -1;
@ -770,14 +772,6 @@ export class MarkWindow extends UIBase {
instance.markLineIsBreak = 1;
}
}
else if (instance.currentMarkDataPrefab.type == MarkType.SD) {
if (instance.mulLineIsBreak_SD > 0) {
return;
}
else {
instance.mulLineIsBreak_SD = 1;
}
}
else if (instance.currentMarkDataPrefab.type == MarkType.JGLX) {
if (instance.mulArrowIsBreak_JG > 0) {
return;
@ -839,7 +833,7 @@ export class MarkWindow extends UIBase {
//是标绘物
let l_markInfo = instance.getMarkInfoFromMesh(eventData.pickInfo.pickedMesh);
if (l_markInfo != null) {
if (readyCreateMark == true && instance.currentMarkDataPrefab.type != MarkType.SD) //水带的起点是可以在分水器上的
if (readyCreateMark == true) //水带的起点是可以在分水器上的
{
readyCreateMark = false;
}
@ -1033,7 +1027,8 @@ export class MarkWindow extends UIBase {
}
markNodeData.cameraData.getDataFromCamera(SceneManager.Instance.defaultCamera);
console.log("保存", markNodeData);
markNodeData.showZP = BuildingWindow.instance.currentZPShow;
console.log("记录节点", markNodeData);
}
/**
@ -1054,8 +1049,6 @@ export class MarkWindow extends UIBase {
let markDataId = this.currentMarkNodeInfo.getNextMarkDataId();
// let newMarkInfo = currentMarkInfoPrefab.instance(markDataId.toString());
let instance = this;
//设置位置等
let newMarkInfo = this.createMark(markDataId, currentMarkDataPrefab, true, worldPosition, null, false, true, (modelInfo: ModelInfo_mark) => {
@ -1158,6 +1151,7 @@ export class MarkWindow extends UIBase {
updateNodeInfo() {
let environmentData = this.currentMarkNodeInfo.nodeData.getCurrentEnvironmentData();
let cameraData = this.currentMarkNodeInfo.nodeData.cameraData;
let showZP = this.currentMarkNodeInfo.nodeData.showZP;
let instance = this;
if (environmentData.isOutdoor) //要在室外
{
@ -1177,7 +1171,15 @@ export class MarkWindow extends UIBase {
StatusManager.s_currentStatus.indoorWindow.onBtnToOutDoor(false);
}
else if (StatusManager.s_currentStatus instanceof BuildingStatus) {
this.currentMarkNodeInfo.nodeData.cameraData.setDataToCamera(SceneManager.Instance.defaultCamera);
//this.currentMarkNodeInfo.nodeData.cameraData.setDataToCamera(SceneManager.Instance.defaultCamera);
// let camera = SceneManager.Instance.defaultCamera;
// if (cameraData != null) {
// BabylonTool.AnimMoveCameraTargetAB(camera, 60, cameraData.target, cameraData.radius, cameraData.alpha, cameraData.beta);
// }
//仅此分支生效
BuildingWindow.instance.revoverCamera(cameraData, showZP);
instance.clearEnterObserver(true);
for (let i = 0; i < StatusManager.s_currentStatus.buildingWindow.buildingUIItems.length; i++) {
@ -1373,7 +1375,7 @@ export class MarkWindow extends UIBase {
*
*/
isCreateMultiPointMark() {
return !(this.mulLineIsBreak_SD < 0 && this.markLineIsBreak < 0 && this.mulArrowIsBreak_JG < 0 && this.mulArrowIsBreak_CT)
return !(this.markLineIsBreak < 0 && this.mulArrowIsBreak_JG < 0 && this.mulArrowIsBreak_CT)
}
@ -1393,13 +1395,6 @@ export class MarkWindow extends UIBase {
}
if (data.type == MarkType.SD) {
this.mulLineIsBreak_SD = 0;
}
else {
this.mulLineIsBreak_SD = -1;
}
if (data.type == MarkType.JGLX) {
this.mulArrowIsBreak_JG = 0;
}
@ -1469,8 +1464,8 @@ export class MarkWindow extends UIBase {
MeshPool.disposeMesh(result);
});
}
for (let i = 0; i < DataManager.allMarkData.marks_FireFighting.length; i++) {
MeshPool.importMesh(ModelType.Mark, DataManager.allMarkData.marks_FireFighting[i], true, false, LoadTool.c_tag_preloadMark, (meshBox: AbstractMesh, meshes: AbstractMesh[], result: MeshPoolInfo) => {
for (let i = 0; i < DataManager.allMarkData.marks_Outside.length; i++) {
MeshPool.importMesh(ModelType.Mark, DataManager.allMarkData.marks_Outside[i], true, false, LoadTool.c_tag_preloadMark, (meshBox: AbstractMesh, meshes: AbstractMesh[], result: MeshPoolInfo) => {
MeshPool.disposeMesh(result);
});
}
@ -1479,13 +1474,8 @@ export class MarkWindow extends UIBase {
MeshPool.disposeMesh(result);
});
}
for (let i = 0; i < DataManager.allMarkData.marks_Linkage.length; i++) {
MeshPool.importMesh(ModelType.Mark, DataManager.allMarkData.marks_Linkage[i], true, false, LoadTool.c_tag_preloadMark, (meshBox: AbstractMesh, meshes: AbstractMesh[], result: MeshPoolInfo) => {
MeshPool.disposeMesh(result);
});
}
for (let i = 0; i < DataManager.allMarkData.marks_Tool.length; i++) {
MeshPool.importMesh(ModelType.Mark, DataManager.allMarkData.marks_Tool[i], true, false, LoadTool.c_tag_preloadMark, (meshBox: AbstractMesh, meshes: AbstractMesh[], result: MeshPoolInfo) => {
for (let i = 0; i < DataManager.allMarkData.marks_Other.length; i++) {
MeshPool.importMesh(ModelType.Mark, DataManager.allMarkData.marks_Other[i], true, false, LoadTool.c_tag_preloadMark, (meshBox: AbstractMesh, meshes: AbstractMesh[], result: MeshPoolInfo) => {
MeshPool.disposeMesh(result);
});
}

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

@ -12,6 +12,168 @@ export class CriminalRecordsAdminComponent implements OnInit {
validateForm!: FormGroup;
constructor(private fb: FormBuilder, private router: Router) { }
mybarChart: any //柱状图
baroption = {
xAxis: {
type: 'category',
data: this.getThirtyDays(),
axisLine: {
show: false,
lineStyle: {
color: '#91CCFF'
}
},
axisTick: {//刻度线
show: false
}
},
yAxis: {
type: 'value',
nameTextStyle: {
color: '#C4E2FC'
},
splitLine: {//分割线
lineStyle: {
color: ['#0f4374'],
width: 2
}
},
axisTick: {//刻度线
show: false
},
axisLine: {//轴线
show: false,
lineStyle: {
color: '#C4E2FC'
}
}
},
series: [
{
data: [120, 200, 150, 80, 70, 110, 130, 120, 200, 150, 80, 70, 110, 130, 120, 200, 150, 80, 70, 110, 130, 120, 200, 150, 80, 70, 110, 130, 100, 101],
type: 'bar',
itemStyle: {
color: {
type: 'linear',
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [{
offset: 0, color: '#23F0FF' // 0% 处的颜色
}, {
offset: 1, color: 'rgba(35, 153, 255, 0.1)' // 100% 处的颜色
}],
global: false // 缺省为 false
}
},
barWidth: '25%'
},
{
data: [120, 200, 150, 80, 70, 110, 130, 120, 200, 150, 80, 70, 110, 130, 120, 200, 150, 80, 70, 110, 130, 120, 200, 150, 80, 70, 110, 130, 100, 101],
type: 'line',
symbol: 'circle',
symbolSize: 8,
itemStyle: {
color: '#fff',
shadowColor: '#fff',
shadowBlur: 10
},
lineStyle: {
color: '#FFCC8A',
width: 1
}
}
],
grid: {
left: '36px',
right: '30px',
bottom: '50px',
top: '45px'
}
};
baroption2 = {
xAxis: {
type: 'value',
show: false
},
yAxis: {
type: 'category',
data: ['北京市第十九加油站', '北京市第十九加油站', '北京市第十九加油站', '北京市第十九加油站', '北京市第十九加油站', '北京市第十九加油站', '北京市第十九加油站', '北京市第十九加油站', '北京市第十九加油站', '北京市第十九加油站'],
axisLine: {
show: false,
lineStyle: {
color: '#91CCFF',
}
},
axisTick: {//刻度线
show: false
},
axisLabel: {
formatter: function (value, index) {
// 格式化成月/日,只在第一个刻度显示年份
return '{s|·}' + `{a|${value}}`;
},
rich: {
a: {
color: '#C4E2FC',
padding: [0, 0, 0, 8],
},
s: {
color: '#fff',
borderWidth: 1,
borderColor: '#23D9FF',
backgroundColor: '#fff',
width: 4,
height: 4,
shadowBlur: 3,
shadowColor: "#fff"
}
}
}
},
series:
{
label: {
// 柱图头部显示值
show: true,
position: "right",
color: "#fff",
fontSize: 12,
formatter: '{c}',
offset:[6,0]
},
data: [40, 36, 30, 25, 19, 15, 14, 11, 10, 8].reverse(),
type: 'bar',
itemStyle: {
color: {
type: 'linear',
x: 0,
y: 0,
x2: 1,
y2: 0,
colorStops: [{
offset: 0, color: '#063d72' // 0% 处的颜色
}, {
offset: 1, color: '#FF9963' // 100% 处的颜色
}],
global: false // 缺省为 false
}
},
barWidth: '36%',
}
,
grid: {
left: '138px',
right: '60px',
bottom: '3px',
top: '20px'
}
}
ngOnInit(): void {
this.validateForm = this.fb.group({
level: [null],
@ -86,72 +248,9 @@ export class CriminalRecordsAdminComponent implements OnInit {
// 绘制图表
myChart.setOption(option);
let mybarChart = echarts.init(document.getElementById('barchart'));
let baroption = {
xAxis: {
type: 'category',
data: this.getThirtyDays(),
axisLine: {
show: false,
lineStyle: {
color: '#91CCFF'
}
},
axisTick: {//刻度线
show: false
}
},
yAxis: {
type: 'value',
nameTextStyle: {
color: '#C4E2FC'
},
splitLine: {//分割线
lineStyle: {
color: ['#0f4374'],
width: 2
}
},
axisTick: {//刻度线
show: false
},
axisLine: {//轴线
show: false,
lineStyle: {
color: '#C4E2FC'
}
}
},
series: [
{
data: [120, 200, 150, 80, 70, 110, 130, 120, 200, 150, 80, 70, 110, 130, 120, 200, 150, 80, 70, 110, 130, 120, 200, 150, 80, 70, 110, 130, 100, 101],
type: 'bar',
itemStyle: {
color: {
type: 'linear',
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [{
offset: 0, color: '#23F0FF' // 0% 处的颜色
}, {
offset: 1, color: 'rgba(35, 153, 255, 0.1)' // 100% 处的颜色
}],
global: false // 缺省为 false
}
},
barWidth: '28%'
}
],
grid: {
left: '36px',
right: '30px',
bottom: '50px',
top: '45px'
}
};
mybarChart.setOption(baroption);
this.mybarChart = echarts.init(document.getElementById('barchart'));
this.mybarChart.setOption(this.baroption);
}
getThirtyDays() {
//获取当前日期
@ -203,18 +302,26 @@ export class CriminalRecordsAdminComponent implements OnInit {
}
list: any = [1,1,1,1,1,1,1,1,1,1,1,1]
list: any = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
look() {
this.router.navigate(['home/records/petrolStation'])
this.router.navigate(['/records/petrolStation'])
}
selectedType = '分布'
selectedRankingType = '站点排名'
echartClick(type){
echartClick(type) {
this.selectedType = type
this.mybarChart.dispose()
this.mybarChart = echarts.init(document.getElementById('barchart'));
if(type == '排名'){
this.mybarChart.setOption(this.baroption2);
}else{
this.mybarChart.setOption(this.baroption);
}
}
echartClick2(type){
echartClick2(type) {
this.selectedRankingType = type
}
}

2
src/app/pages/equipment-info/equipment-info.component.ts

@ -29,7 +29,7 @@ export class EquipmentInfoComponent implements OnInit {
this.http.get('/api/services/app/FireEquipment/GetAll', {
params: {
Name:this.validateForm.value.search ? this.validateForm.value.search : '',
OrganizationId: JSON.parse(JSON.parse(sessionStorage.getItem('userdata'))).organization.id,
OrganizationId: JSON.parse(sessionStorage.getItem('userdata')).organization.id,
SkipCount: String(this.SkipCount),
MaxResultCount: String(this.MaxResultCount)
}

12
src/app/pages/home/home.component.html

@ -3,19 +3,19 @@
<app-tabbar></app-tabbar>
</div>
<div class="menu">
<li [routerLink]="['/home/plan']" routerLinkActive="router-link-active">
三维预案
<li [routerLink]="['/plan']" routerLinkActive="router-link-active">
站点预案
</li>
<li [routerLink]="['/home/warning/admin']" routerLinkActive="router-link-active">
<li [routerLink]="['/warning']" routerLinkActive="router-link-active">
今日预警
</li>
<li [routerLink]="['/home/records/admin']" routerLinkActive="router-link-active">
<li [routerLink]="['/records']" routerLinkActive="router-link-active">
违规记录
</li>
<!-- <li [routerLink]="['/home/equipmentInfo']" routerLinkActive="router-link-active">
<!-- <li [routerLink]="['/equipmentInfo']" routerLinkActive="router-link-active">
器材信息
</li>
<li [routerLink]="['/home/oliStationInfo']" routerLinkActive="router-link-active">
<li [routerLink]="['/oliStationInfo']" routerLinkActive="router-link-active">
基本信息
</li> -->
</div>

58
src/app/pages/left-domain/left-domain.component.html

@ -91,6 +91,64 @@
</ng-template>
</div>
<!-- 消防设施 -->
<!-- 处置预案 -->
<div class="publicBox disposalPlan" *ngIf="beforeFence === 7 && allMarkPlanData">
<div class="interval" *ngFor="let item of allMarkPlanData.datas;let key = index;">
<div class="publicDisposal disposalHeader">
{{item.name}}<label><i nz-icon nzType="plus-circle" nzTheme="outline" (click)="addNodePop = item.id;"></i><i nz-icon nzType="delete" nzTheme="outline" (click)="deleteDisposal(item)"></i></label>
</div>
<ul>
<li class="publicDisposal disposalContent" *ngFor="let items of item.nodes;let keys = index;">
<span (click)='selectNode(item,items)' [ngClass]="{'selectNode': selectNodeId == items.id && selectPlanId == item.id}">{{items.name}}</span>
<label><i nz-icon nzType="save" nzTheme="outline" (click)="saveDisposal(item.id,items.id)"></i><i nz-icon nzType="delete" nzTheme="outline" (click)="deleteDisposal(item,items)"></i></label>
</li>
</ul>
</div>
</div>
<!-- 处置预案 -->
<!-- 弹窗 -->
<nz-modal [(nzVisible)]="addDisposalPop || addNodePop" nzTitle="创建预案/节点" (nzOnCancel)="addDisposalPop = false; addNodePop = null;" (nzOnOk)="addDisposal(form.value)" [nzOkDisabled]='name.invalid'>
<form nz-form #form='ngForm'>
<nz-form-item>
<nz-form-label [nzSpan]="6">预案/节点名称</nz-form-label>
<nz-form-control [nzSpan]="18" nzErrorTip="请输入必填项">
<input nz-input #name='ngModel' ngModel name="name" required/>
</nz-form-control>
</nz-form-item>
</form>
</nz-modal>
<nz-modal [(nzVisible)]="saveDisposalDialog" nzTitle="处置节点保存" (nzOnCancel)="saveDisposalDialog = false;" [nzFooter]="null">
<div class="submitBottom">
<button (click)='saveNode(true)'>新建节点并保存</button><button (click)='saveNode(false)'>保存到已有节点</button>
</div>
</nz-modal>
<nz-modal [(nzVisible)]="saveType" [nzTitle]="saveType === 1? '新建节点并保存' : '保存到已有节点'" (nzOnCancel)="saveType = null;" (nzOnOk)="saveDisposalNode(saveForm.value)">
<form nz-form #saveForm='ngForm'>
<nz-form-item *ngIf="saveType === 1">
<nz-form-label [nzSpan]="6">节点名称<span style="color: red;">*</span></nz-form-label>
<nz-form-control [nzSpan]="18" nzErrorTip="请输入必填项">
<input nz-input #name='ngModel' ngModel name="name" required/>
</nz-form-control>
</nz-form-item>
<nz-form-item *ngIf="saveType === 1">
<nz-form-label [nzSpan]="6"><span></span>节点</nz-form-label>
<nz-form-control [nzSpan]="18" nzErrorTip="请选择节点">
<nz-select #root='ngModel'ngModel name="root" required>
<nz-option *ngFor="let item of allNodeList" [nzValue]="item" [nzLabel]="item.name"></nz-option>
</nz-select>
</nz-form-control>
</nz-form-item>
<nz-form-item *ngIf="saveType === 2">
<nz-form-label [nzSpan]="6">节点</nz-form-label>
<nz-form-control [nzSpan]="18" nzErrorTip="请选择节点">
<nz-select #node='ngModel'ngModel name="node" required>
<nz-option *ngFor="let item of allNodeList" [nzValue]="item" [nzLabel]="item.name"></nz-option>
</nz-select>
</nz-form-control>
</nz-form-item>
</form>
</nz-modal>
<!-- 弹窗 -->
</div>
<div class="childBottom" *ngIf="beforeFence === 0">

39
src/app/pages/left-domain/left-domain.component.scss

@ -76,4 +76,43 @@
// }
.fireFacilities{ //消防设施
.treeRow{ width: 100%; display: flex; height: 30px; line-height: 30px; p:first-child{ flex: 1; }; p{ margin: 0; padding: 0; .anticon{ margin-right: 5px; font-size: 16px; } } }
}
.disposalPlan{ //处置预案
.interval{ margin-top: 10px; } //分隔div
font-size: 15px;
ul,li { width: 100%; }
li:before{ content: ""; width: 5px; height: 5px; border-radius: 50%; display: inline-block; vertical-align: 3px; background: #23D9FF; margin-right: 10px; }
.publicDisposal{
height: 35px;
line-height: 35px;
color: #23D9FF;
padding-left: 20px;
label{ float: right; .anticon{ margin-right: 15px; font-size: 18px; cursor: pointer; } }
span{ cursor: pointer; }
}
.disposalContent { color: #fff; .anticon{ color: #23D9FF; } }
.disposalHeader {
background: rgba(35, 153, 255, 0.41);
border: 1px solid rgba(35, 217, 255, 0.4);
}
.selectNode{ color: red; } //选中节点样式
}
//弹窗
.submitBottom{
button {
cursor: pointer;
padding: 0;
width: 150px;
height: 30px;
line-height: 30px;
box-shadow: 0 3px 1px -2px rgb(0 0 0 / 20%), 0 2px 2px 0 rgb(0 0 0 / 14%), 0 1px 5px 0 rgb(0 0 0 / 12%);
background: #e2e8f0;
color: #000;
border: none;
outline: none;
}
display: flex;
flex-direction: row;
flex-wrap: wrap;
justify-content: space-evenly; /* 水平居中 */
}

136
src/app/pages/left-domain/left-domain.component.ts

@ -5,6 +5,11 @@ import { PlanComponent } from '../plan/plan.component';
import { FacilityInfoUIItem } from "../../babylon/view/facilityinfoinscene-window/facilityinfo-ui-item";
import { ConfigManager } from 'src/app/babylon/controller/config-manager';
import { FacilityType } from 'src/app/babylon/model/data/model-data/model-data-facility';
import { EventManager } from 'src/app/babylon/controller/event-manager/event-manager';
import { Event_GetAllMarkPlanData } from 'src/app/babylon/controller/event-manager/events/event-get-markplandata-success';
import { AllMarkPlanData, MarkNodeData, MarkPlanData } from 'src/app/babylon/model/data/mark/mark-plan-data';
import { MarkWindow } from 'src/app/babylon/view/mark-window/mark-window';
import { NzMessageService } from 'ng-zorro-antd/message';
@Component({
selector: 'app-left-domain',
@ -13,7 +18,7 @@ import { FacilityType } from 'src/app/babylon/model/data/model-data/model-data-f
})
export class LeftDomainComponent implements OnInit {
constructor() { }
constructor(private message: NzMessageService) { }
ngOnInit(): void {
this.initComponent()
@ -23,8 +28,6 @@ export class LeftDomainComponent implements OnInit {
beforeFence: number; //当前选中功能栏
FacilityList: FacilityInfoUIItem[] = []; //统计设备 list
selectFacilityId: string = null; //选中设备 ID
@ViewChild('nzTreeComponent', { static: false }) nzTreeComponent!: NzTreeComponent;
treeData: NzTreeNodeOptions[] = []; //tree data
//初始化组件
initComponent(type?: number) {
@ -39,6 +42,13 @@ export class LeftDomainComponent implements OnInit {
//处理 设备data
handleFacility() {
if (this.beforeFence === 7) { //应急预案
MarkWindow.instance? this.allMarkPlanData= MarkWindow.instance.allMarkPlanData : null
EventManager.addListener(Event_GetAllMarkPlanData, (data: Event_GetAllMarkPlanData)=>{
this.allMarkPlanData = data.data
})
return
}
let list: FacilityInfoUIItem[] = []
FacilityInfoInSceneWindow.instance.facilityInfoUIItemes.forEach(item=>{
if (this.beforeFence === 1) { //加油机
@ -67,6 +77,9 @@ export class LeftDomainComponent implements OnInit {
}
}
@ViewChild('nzTreeComponent', { static: false }) nzTreeComponent!: NzTreeComponent;
treeData: NzTreeNodeOptions[] = []; //tree data
//处理 treeData
handleTreeData(list: FacilityInfoUIItem[]) {
this.treeData = []
@ -137,6 +150,123 @@ export class LeftDomainComponent implements OnInit {
}
}
allMarkPlanData: AllMarkPlanData; //处置预案节点数据
selectPlanId: number;
selectNodeId: number;
addDisposalPop: boolean = false; //显示/隐藏 创建预案 弹窗
addNodePop: number = null; //显示/隐藏 创建节点 父节点ID
//创建预案/节点
addDisposal(e) {
if (this.addDisposalPop) { //创建预案
MarkWindow.instance.createMarkPlaneData(e.name)
this.addDisposalPop = false
} else { //创建节点
MarkWindow.instance.createMarkNodeData(this.addNodePop,e.name)
this.addNodePop = null
}
}
//删除预案/节点
deleteDisposal(item: MarkPlanData, e?: MarkNodeData) {
let isTrue = confirm('您确定要删除吗')
if (isTrue) {
if (!e) {
MarkWindow.instance.deleteMarkPlaneData(item.id)
} else {
MarkWindow.instance.deleteMarkNodeData(item.id, e.id)
}
}
}
//选中 数据节点
selectNode(item: MarkPlanData, e: MarkNodeData) {
if (this.selectPlanId != item.id || this.selectNodeId != e.id) { //选中
if (!MarkWindow.instance.currentMarkNodeInfo) { //未选中节点
this.selectPlanId = item.id
this.selectNodeId = e.id
MarkWindow.instance.selectMarkNode(item.id,e.id)
} else { //已选中节点
let isTrue = confirm('切换节点后,没保存的信息将会丢失!')
if (isTrue) {
this.selectPlanId = item.id
this.selectNodeId = e.id
MarkWindow.instance.selectMarkNode(item.id,e.id)
}
}
} else if (this.selectPlanId === item.id && this.selectNodeId === e.id) { //取消选中
let isTrue = confirm('切换节点后,没保存的信息将会丢失!')
if (isTrue) {
this.selectPlanId = null
this.selectNodeId = null
MarkWindow.instance.selectMarkNode(null,null)
}
}
}
saveDisposalDialog: boolean = false; //整体保存预案 弹窗
saveType: number = null; //新建保存/保存到已有 弹窗
allNodeList: any[] = []; //所有根节点/节点
//保存-1
saveDisposal(markPlanId: number = null, nodeId: number = null) {
if (!MarkWindow.instance.currentMarkNodeInfo) { //未选中节点
this.message.info('还没有进行标绘,无法保存');
return
}
if (markPlanId === null && nodeId === null) { // 整体弹窗保存
this.saveDisposalDialog = true
} else {
if (this.selectPlanId === markPlanId && this.selectNodeId === nodeId) {
MarkWindow.instance.saveToOldNode(markPlanId,nodeId)
} else {
let isTrue = confirm('是否覆盖要保存的节点?')
isTrue? MarkWindow.instance.saveToOldNode(markPlanId,nodeId) : null
}
}
}
//保存-2
saveNode(isNew: boolean) {
this.saveDisposalDialog = false
if (isNew) { //新建节点并保存
this.saveType = 1
this.allNodeList = MarkWindow.instance.allMarkPlanData.datas
} else { //保存到已有节点
this.saveType = 2
this.allNodeList = []
MarkWindow.instance.allMarkPlanData.datas.forEach(item => {
item.nodes.forEach(element=>{
let node = {
id: element.id,
parrentId: item.id,
name: element.name,
}
this.allNodeList.push(node)
})
});
}
}
//保存-3
saveDisposalNode(e) {
if (this.saveType === 1) { //新建节点并保存
if (!e.name || !e.root) {
this.message.info('请完善表单')
return
}
MarkWindow.instance.createNewNodeAndSave(e.root.id,e.name)
this.saveType = null
} else { //保存到已有节点
if (!e.node) {
this.message.info('请完善表单')
return
}
MarkWindow.instance.saveToOldNode(e.node.parrentId,e.node.id)
this.saveType = null
}
}
//编辑信息
editInfo() {

6
src/app/pages/login/login.component.html

@ -20,9 +20,9 @@
<div class="hint">
<span class="forget" (click)="forget()">忘记密码?</span>
</div>
<button nz-button class="login-form-button login-form-margin" [nzType]="'primary'">登录</button>
<button [nzLoading]="isLoading" nz-button class="login-form-button login-form-margin" [nzType]="'primary'">登录</button>
</form>
<p class="role">
<!-- <p class="role">
<a nz-dropdown [nzDropdownMenu]="menu" [nzVisible]="true">
{{selectedRole ? selectedRole : '请选择登录角色'}}
<i nz-icon nzType="down"></i>
@ -32,7 +32,7 @@
<li nz-menu-item (click)="selecteRole(item)" *ngFor="let item of roleList">{{item}}</li>
</ul>
</nz-dropdown-menu>
</p>
</p> -->
<p class="company">北京安信科创软件有限公司提供技术支持和维护</p>
</div>
</div>

2
src/app/pages/login/login.component.scss

@ -27,7 +27,7 @@
.hint {
text-align: right;
margin-bottom: 40px;
margin-bottom: 50px;
.forget{
cursor: pointer;
color: #2399FF;

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

@ -33,7 +33,7 @@ export class LoginComponent implements OnInit {
toRegister() {
this.router.navigate(['/register'])
}
isLoading = false;
submitForm(): void {
for (const i in this.validateForm.controls) {
this.validateForm.controls[i].markAsDirty();
@ -43,23 +43,27 @@ export class LoginComponent implements OnInit {
this.message.create('error', `请输入账号密码`);
return
}
if (!this.selectedRole) {
this.message.create('error', `请选择登录角色`);
return
}
// if (!this.selectedRole) {
// this.message.create('error', `请选择登录角色`);
// return
// }
this.isLoading = true;
this.http.post('/api/TokenAuth/Authenticate', {
userNameOrEmailAddress: this.validateForm.value.userName,
password: this.validateForm.value.password
}).subscribe(
(data: any) => {
this.message.create('success', `登陆成功`);
sessionStorage.setItem("token", data.result.accessToken);
this.cookieService.set("token", data.result.accessToken, null, '/');
this.cookieService.set("refreshToken", data.result.encryptedAccessToken, null, '/');
this.http.get('/api/services/app/Session/GetCurrentLoginInformations').subscribe((data:any) => {
sessionStorage.setItem('userdata',JSON.stringify(data.result.user))
this.http.get('/api/services/app/Session/GetCurrentLoginInformations').subscribe((data: any) => {
sessionStorage.setItem('userdata', JSON.stringify(data.result.user))
this.isLoading = false;
this.message.create('success', `登陆成功`);
this.router.navigate(['/plan'])
})
this.router.navigate(['/home/plan'])
//调用服务中的function刷新token
// this.token.startUp()
},

9
src/app/pages/pages-routing.module.ts

@ -8,16 +8,17 @@ import { TodayWarningAdminComponent } from './today-warning-admin/today-warning-
import { CriminalRecordsAdminComponent } from './criminal-records-admin/criminal-records-admin.component';
import { OilStationInfoComponent } from './oil-station-info/oil-station-info.component';
import { EquipmentInfoComponent } from './equipment-info/equipment-info.component';
import { PlanAdminComponent } from './plan-admin/plan-admin.component';
const routes: Routes = [
{ path: 'plan', component: PlanComponent , data: { permission: 'xxxx' },canActivate: [AuthGuard]},
{ path: 'plan', component: PlanAdminComponent , data: { permission: 'xxxx' },canActivate: [AuthGuard]},
{ path: 'plan/petrolStation', component: PlanComponent , data: { permission: 'xxxx' },canActivate: [AuthGuard]},
{ path: 'warning', component: TodayWarningAdminComponent },
{ path: 'warning/petrolStation', component: TodayWarningComponent },
{ path: 'warning/admin', component: TodayWarningAdminComponent },
{ path: 'records', component: CriminalRecordsAdminComponent },
{ path: 'records/petrolStation', component: CriminalRecordsComponent },
{ path: 'records/admin', component: CriminalRecordsAdminComponent },
{ path: 'equipmentInfo', component: EquipmentInfoComponent },
{ path: 'oliStationInfo', component: OilStationInfoComponent }
];
@NgModule({

11
src/app/pages/pages.module.ts

@ -30,6 +30,7 @@ import { NzDropDownModule } from 'ng-zorro-antd/dropdown';
import { NzMessageModule } from 'ng-zorro-antd/message';
import { NzSpinModule } from 'ng-zorro-antd/spin';
import { NzTreeModule } from 'ng-zorro-antd/tree';
import { NzCollapseModule } from 'ng-zorro-antd/collapse';
import { TodayWarningAdminComponent } from './today-warning-admin/today-warning-admin.component';
import { CriminalRecordsAdminComponent } from './criminal-records-admin/criminal-records-admin.component';
import { EquipmentInfoComponent } from './equipment-info/equipment-info.component';
@ -38,12 +39,16 @@ import { LeftDomainComponent } from './left-domain/left-domain.component';
import { AddequipmentComponent } from './equipment-info/addequipment/addequipment.component';
import { EditequipmentComponent } from './equipment-info/editequipment/editequipment.component';
import { NzTreeSelectModule } from 'ng-zorro-antd/tree-select';
import { PlanAdminComponent } from './plan-admin/plan-admin.component';
@NgModule({
declarations: [LoginComponent, RegisterComponent, HomeComponent, PlanComponent, TodayWarningComponent, CriminalRecordsComponent,
TodayWarningAdminComponent, CriminalRecordsAdminComponent, LeftDomainComponent, EquipmentInfoComponent, OilStationInfoComponent,
AddequipmentComponent, EditequipmentComponent],
AddequipmentComponent, EditequipmentComponent,PlanAdminComponent],
imports: [
PagesRoutingModule,
CommonModule,
@ -71,7 +76,9 @@ import { NzTreeSelectModule } from 'ng-zorro-antd/tree-select';
NzMessageModule,
NzSpinModule,
NzTreeModule,
NzTreeSelectModule
NzTreeSelectModule,
NzCollapseModule
],
entryComponents: [AddequipmentComponent, EditequipmentComponent],
schemas: [CUSTOM_ELEMENTS_SCHEMA]

128
src/app/pages/plan-admin/plan-admin.component.html

@ -0,0 +1,128 @@
<!-- <p>站点预案!</p> -->
<div class="stationPlanBox" id="stationPlanBox">
<div class="orbox">
<div class="title">
<app-title [name]="'组织机构'"></app-title>
</div>
<div class="or">
<nz-tree [nzExpandedKeys]="nzExpandedKeys" [nzShowExpand]="false" #nzTreeComponent
[nzExpandAll]="nzExpandAll" nzBlockNode [nzData]="nodes" (nzClick)="activeNode($event)"
[nzTreeTemplate]="nzTreeTemplate" [nzExpandedIcon]=""></nz-tree>
<ng-template #nzTreeTemplate let-node let-origin="origin">
<ng-container *ngIf="node.origin.parentId == null; else elseTemplate">
<img style="vertical-align: bottom;" src="../../../assets/images/flower.png" alt="">
</ng-container>
<ng-template #elseTemplate>
<img src="../../../assets/images/point.png" alt="">
</ng-template>
<span>{{ node.title }}</span>
<img (click)="expand($event,node)" *ngIf="node.isExpanded && node.children.length != 0 "
src="../../../assets/images/expand.png" alt="">
<img (click)="expand($event,node)" *ngIf="!node.isExpanded && node.children.length != 0"
src="../../../assets/images/unexpand.png" alt="">
</ng-template>
</div>
</div>
<div class="stationList">
<div class="title">
<app-title [name]="'站点管理'"></app-title>
</div>
<div class="search">
<form nz-form [formGroup]="validateForm" class="login-form" (ngSubmit)="submitForm()">
<nz-form-item class="searchParams">
<nz-form-control>
<nz-input-group>
<input required nz-input type="text" formControlName="name" placeholder="请输入名称" />
</nz-input-group>
</nz-form-control>
</nz-form-item>
<nz-form-item class="searchParams">
<nz-form-control>
<nz-input-group>
<input required nz-input type="text" formControlName="linkman" placeholder="请输入联系人" />
</nz-input-group>
</nz-form-control>
</nz-form-item>
<nz-form-item class="searchParams">
<nz-form-control>
<nz-input-group>
<input required nz-input type="text" formControlName="phone" placeholder="请输入电话" />
</nz-input-group>
</nz-form-control>
</nz-form-item>
<nz-form-item class="btn">
<nz-form-control>
<button nz-button type="submit" class="submit"><i nz-icon [nzType]="'search'"></i>查询</button>
</nz-form-control>
</nz-form-item>
<nz-form-item class="btn">
<nz-form-control>
<button nz-button type="button" class="reset" (click)="resetForm($event)"><i nz-icon
[nzType]="'sync'"></i>重置</button>
</nz-form-control>
</nz-form-item>
</form>
</div>
<div class="tablebox">
<div class="table">
<div nz-row class="th">
<div nz-col nzSpan="2" style="text-align: right;box-sizing: border-box;padding-right: 20px;">
</div>
<div nz-col nzSpan="6">
加油站名称
</div>
<div nz-col nzSpan="3">
区域
</div>
<div nz-col nzSpan="4">
所属公司
</div>
<div nz-col nzSpan="3">
联系人
</div>
<div nz-col nzSpan="4">
联系电话
</div>
<div nz-col nzSpan="2">
操作
</div>
</div>
<div class="tbody">
<div nz-row class="tr" *ngFor="let item of list">
<div nz-col nzSpan="2" style="text-align: right;box-sizing: border-box;padding-right: 20px;">
<span class="ziying">自营</span>
</div>
<div nz-col nzSpan="6">
中化山东省淄博市第6加油站
</div>
<div nz-col nzSpan="3">
山东-淄博
</div>
<div nz-col nzSpan="4">
中化某某公司
</div>
<div nz-col nzSpan="3">
张三三
</div>
<div nz-col nzSpan="4">
0566-5897888
</div>
<div nz-col nzSpan="2">
<span class="look" (click)="look()">查看</span>
</div>
</div>
</div>
</div>
<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>

133
src/app/pages/plan-admin/plan-admin.component.scss

@ -0,0 +1,133 @@
.stationPlanBox {
width: 100%;
height: 100%;
box-sizing: border-box;
padding: 20px 24px;
display: flex;
}
.title {
width: 100%;
height: 48px;
}
.orbox {
height: 100%;
width: 360px;
margin-right: 40px;
display: flex;
flex-direction: column;
.or {
flex: 1;
overflow-y: auto;
border: 1px solid rgba(54, 162, 255, 0.3);
background: linear-gradient(180deg, rgba(3, 0, 0, 0) 0%, rgba(0, 46, 91, 0.68) 100%);
margin-top: 12px;
box-sizing: border-box;
padding: 18px 12px;
nz-tree{
background: none;
color: #C4E2FC;
}
}
}
.stationList {
flex: 1;
display: flex;
flex-direction: column;
.search {
box-sizing: border-box;
padding-left: 22px;
padding-right: 33px;
width: 100%;
height: 32px;
margin-top: 14px;
margin-bottom: 22px;
form {
width: 100%;
height: 32px;
display: flex;
justify-content: space-around;
input {
background: none;
border: 1px solid #91CCFF;
color: #fff;
}
.searchParams {
width: 28%;
}
.btn {
width: 5%;
}
}
}
.tablebox {
flex: 1;
display: flex;
flex-direction: column;
align-items: center;
overflow: hidden;
.table {
color: white;
flex: 1;
width: 96%;
display: flex;
flex-direction: column;
overflow: hidden;
.th {
height: 40px;
line-height: 40px;
background: rgba(35, 153, 255, 0.2);
border: 1px solid rgba(35, 217, 255, 0.4);
box-shadow: 0 0 3px 0 rgba(35, 217, 255, 0.4) inset;
color: #23D9FF;
}
.tbody {
flex: 1;
overflow-y: auto;
.tr {
height: 40px;
line-height: 40px;
border-bottom: 1px solid #0d3761;
div {
color: #91CCFF;
.look {
color: #36A2FF;
cursor: pointer;
}
}
}
}
}
.pagination {
margin-top: 26px;
display: flex;
align-items: center;
justify-content: center;
}
::-webkit-scrollbar {
width: 0px;
}
}
}

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

@ -0,0 +1,70 @@
import { Component, OnInit, ViewChild } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { TreeService } from 'src/app/service/tree.service';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { NzContextMenuService, NzDropdownMenuComponent } from 'ng-zorro-antd/dropdown';
import { NzFormatEmitEvent, NzTreeComponent, NzTreeNode } from 'ng-zorro-antd/tree';
import { Router } from '@angular/router';
@Component({
selector: 'app-plan-admin',
templateUrl: './plan-admin.component.html',
styleUrls: ['./plan-admin.component.scss']
})
export class PlanAdminComponent implements OnInit {
validateForm!: FormGroup;
@ViewChild('nzTreeComponent', { static: false }) nzTreeComponent!: NzTreeComponent;
constructor(private http: HttpClient, private toTree: TreeService, private fb: FormBuilder, private nzContextMenuService: NzContextMenuService, private router: Router) { }
list: any = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
ngOnInit(): void {
this.validateForm = this.fb.group({
name: [null],
linkman: [null],
phone: [null]
});
this.getAllOrganization()
}
submitForm(): void {
for (const i in this.validateForm.controls) {
this.validateForm.controls[i].markAsDirty();
this.validateForm.controls[i].updateValueAndValidity();
}
}
resetForm(e: MouseEvent): void {
e.preventDefault();
this.validateForm.reset();
for (const key in this.validateForm.controls) {
this.validateForm.controls[key].markAsPristine();
this.validateForm.controls[key].updateValueAndValidity();
}
}
//获取所有组织机构
nodes: any = []
nzExpandAll = false
getAllOrganization() {
this.http.get('/api/services/app/Organization/GetAll').subscribe((data: any) => {
data.result.items.forEach(element => {
element.key = element.code
element.title = element.displayName
});
this.nodes = [...this.toTree.toTree(data.result.items)]
this.nzExpandAll = true
})
}
look() {
this.router.navigate(['/plan/petrolStation'])
}
nzExpandedKeys: any = []
activatedNode?: NzTreeNode;
//点击tree节点
activeNode(data: NzFormatEmitEvent): void {
this.activatedNode = data.node!;
// console.log(data)
}
expand(e, node) {
e.stopPropagation()
node.isExpanded = !node.isExpanded
}
}

32
src/app/pages/plan/plan.component.html

@ -19,7 +19,7 @@
<div class="leftChildComponent" *ngIf="isShowChildComponent" [ngStyle]="{ 'left': isShowLeftBuilding? '15%' : null }">
<div class="leftChildHeader">
<div><i nz-icon nzType="star" nzTheme="outline"></i></div>
<div><p>{{allFence[selectFence]}}</p></div>
<div>{{allFence[selectFence]}}<i nz-icon nzType="plus-circle" nzTheme="outline" *ngIf="selectFence === 7" (click)="noticeChildComponent(true)"></i><i nz-icon nzType="save" nzTheme="outline" *ngIf="selectFence === 7" (click)="noticeChildComponent(false)"></i></div>
<div (click)="toggleHeaderFence(selectFence)" title="关闭"><i nz-icon nzType="close-circle" nzTheme="outline"></i></div>
</div>
<div class="leftChildCenter"><app-left-domain #leftDomain></app-left-domain></div>
@ -46,19 +46,29 @@
</div>
</div>
<!-- 左侧建筑栏 -->
<!-- 底部图标栏 -->
<div class="bottomIcons">
<div class="autoScroll"><i nz-icon nzType="left" nzTheme="outline" (click)="bottomScroll(0)"></i></div>
<!-- 右侧图标栏 -->
<div class="rightIcons" *ngIf="selectFence === 0 || selectFence === 7">
<div class="bottomCenter" id="bottomCenter">
<div class="everyIcon" (click)='selectBottomIcon(item)' *ngFor="let item of allFacilityUIItemes" [ngClass]="{'selectLeftIcon': beforeOneIcon == item.getIconID()}">
<img [src]="item.getIconURL()">
<p>{{item.getIconName()}}</p>
</div>
<ng-container *ngIf="selectFence === 0">
<div class="everyIcon" (click)='selectBottomIcon(item)' *ngFor="let item of allFacilityUIItemes" [ngClass]="{'selectLeftIcon': beforeOneIcon == item.getIconID()}">
<img [src]="item.getIconURL()">
<p>{{item.getIconName()}}</p>
</div>
</ng-container>
<ng-container *ngIf="selectFence === 7">
<nz-collapse [nzBordered]="false">
<nz-collapse-panel [nzHeader]="allMarkData.iconsName[key]" [nzActive]="true" *ngFor="let element of allMarkData.icons; let key = index;">
<div class="everyIcon" (click)='selectBottomIcon(item)' *ngFor="let item of element" [ngClass]="{'selectLeftIcon': beforeOneIcon == item.key}">
<img [src]="item.iconURL">
<p>{{item.name}}</p>
</div>
</nz-collapse-panel>
</nz-collapse>
</ng-container>
</div>
<div class="autoScroll"><i nz-icon nzType="right" nzTheme="outline" (click)="bottomScroll(1)"></i></div>
</div>
<!-- 底部图标栏 -->
<!-- 右侧图标栏 -->
<!-- 右上角快捷栏 -->
<div class="rightTopFast">

37
src/app/pages/plan/plan.component.scss

@ -100,6 +100,8 @@
letter-spacing: 3px;
font-style: italic;
flex: 1;
.anticon{ margin-left: 65px; font-size: 18px; color: #23D9FF; vertical-align: -4px; }
.anticon:last-child { margin-left: 10px; }
}
div:last-child{
width: 30px;
@ -176,26 +178,31 @@
transition: margin-left 0.5s;
}
//底部图标栏
.bottomIcons{
width: 80%;
height: 60px;
line-height: 60px;
//右侧图标栏
.rightIcons{
width: 100px;
height: 70%;
position: absolute;
left: 0;
right: 0;
bottom: 0px;
top: 0;
bottom: 0;
right: 1%;
margin: auto;/*这行代码是关键*/
color: #fff;
background: rgba(0,17,33,0.7);
border-radius: 10px 10px 0px 0px;
display: flex;
box-sizing: border-box;
padding: 1px;
background: linear-gradient(360deg, #000D21 0%, rgba(0, 59, 110, 0.8) 100%);
overflow: hidden;
.autoScroll{ width: 30px; text-align: center; }
.bottomCenter::-webkit-scrollbar { display: none; }
.bottomCenter {
scrollbar-width: none; /* firefox */
-ms-overflow-style: none; /* IE 10+ */
overflow-x: hidden;
overflow-y: auto;
}
.bottomCenter{
flex: 1;
overflow: hidden;
width: 100%;
height: 100%;
overflow-x: hidden;
overflow-y: auto;
.everyIcon {
width: 100px;
height: 58px;

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

@ -19,6 +19,9 @@ import { EventManager } from '@angular/platform-browser';
import { NzMessageService } from 'ng-zorro-antd/message';
import { LeftDomainComponent } from '../left-domain/left-domain.component';
import { JYZInfoMoudleType } from 'src/app/babylon/model/data/institution/jyz-show-data';
import { AllMarkData } from 'src/app/babylon/model/data/mark/all-mark-data';
import { MarkData } from 'src/app/babylon/model/data/mark/mark-data';
import { MarkWindow } from 'src/app/babylon/view/mark-window/mark-window';
@ -59,17 +62,14 @@ export class PlanComponent implements OnInit {
loginStatus.getInstitutionListFromServe((result: InsitutionDataSimple[], data: any) => {
if (ModeManager.institutionDemoKey == ModeManager.c_demoKey_null) { //无指定测试单位,则为正式启动,根据当前单位key寻找
let key = 'ceshi';
// console.log("获取数据", data);
let find = data.find(item => { return item.key === key })
if (find) { //如果在data中找到了对应的单位key,则表示已经有三维数据,直接进入
// console.log("找到已有单位" + key);
this.beforeOneSatus = StatusManager.getStatus<LoginSatus>(LoginSatus);
this.beforeOneSatus.onSelectInsSuccess(find)
} else { //如果没有找到对应的单位key,则调用新建单位
let isAdd = confirm('没有单位name,是否进行初始化?')
if (isAdd) {
let name = 'ceshi';
console.log("没找到单位,新建" + key);
loginStatus.createInsitution(key, name);
}
}
@ -94,7 +94,7 @@ export class PlanComponent implements OnInit {
//开发模式 选择单位 弹窗
modelInit(InsList) { }
allFence: string[] = ["基本信息", "加油机", "油罐设备", "消防设施", "安全疏散", "输油管线", "油气回收", "应急处置"]; //头部 功能栏
allFence: string[] = ["基本信息", "加油机", "油罐设备", "消防设施", "安全疏散", "输油管线", "油气回收", "应急预案"]; //头部 功能栏
selectFence: number = -1; //选中 头部功能栏
isShowChildComponent: boolean = false; //是否 显示左侧子组件
@ViewChild('leftDomain') leftDomain: LeftDomainComponent; //子组件引用
@ -141,6 +141,17 @@ export class PlanComponent implements OnInit {
return fenceType
}
//子组件 创建预案/保存
noticeChildComponent(type: boolean) {
if (this.isShowChildComponent && this.leftDomain) {
if (type) { //创建预案
this.leftDomain.addDisposalPop = true
} else { //整体保存
this.leftDomain.saveDisposal()
}
}
}
//切换 头部罩棚
toggleHeaderAwning(isOpen: boolean) {
this.isOpenAwning = isOpen;
@ -233,7 +244,8 @@ export class PlanComponent implements OnInit {
}
}
allFacilityUIItemes: FacilityUIItem[] = []; //底部所有 图标
allFacilityUIItemes: FacilityUIItem[] = []; //右侧所有 图标
allMarkData: planIcons = new planIcons(); //右侧处置预案所有 图标
beforeOneIcon: string = null; //当前选择 图标
// 获取 底部图标栏list
@ -243,13 +255,23 @@ export class PlanComponent implements OnInit {
}
//选择底部图标
selectBottomIcon(e: FacilityUIItem) {
if (this.beforeOneIcon != e.getIconID()) {
this.beforeOneIcon = e.getIconID()
e.select()
} else {
this.beforeOneIcon = null
e.unSelect()
selectBottomIcon(e: FacilityUIItem | MarkData) {
if (e instanceof FacilityUIItem) {
if (this.beforeOneIcon != e.getIconID()) {
this.beforeOneIcon = e.getIconID()
e.select()
} else {
this.beforeOneIcon = null
e.unSelect()
}
} else if (e instanceof MarkData) {
if (this.beforeOneIcon != e.key) {
this.beforeOneIcon = e.key
MarkWindow.instance.selectMarkDataPrefab(true, e)
} else {
this.beforeOneIcon = null
MarkWindow.instance.selectMarkDataPrefab(false, e)
}
}
}
@ -347,6 +369,11 @@ export class PlanComponent implements OnInit {
}
// 处置预案 所有图标
export class planIcons {
iconsName: string[] = ["灾情","内部力量","外部力量","其他"]
icons: MarkData[][] = [AllMarkData.CreateAllMarkData().marks_Disaster,AllMarkData.CreateAllMarkData().marks_Inside,AllMarkData.CreateAllMarkData().marks_Outside,AllMarkData.CreateAllMarkData().marks_Other,]
}
//创建/编辑 建筑dataType
export class modelBuilding {
name: string = "";

2
src/app/pages/today-warning-admin/today-warning-admin.component.ts

@ -92,6 +92,6 @@ export class TodayWarningAdminComponent implements OnInit {
}
look() {
this.router.navigate(['home/warning/petrolStation'])
this.router.navigate(['warning/petrolStation'])
}
}

7
src/app/system-management/organization/addor/addor.component.html

@ -14,5 +14,10 @@
</nz-input-group>
</nz-form-control>
</nz-form-item>
<nz-form-item>
<nz-form-control>
<label nz-checkbox formControlName="isGasStation">是否为加油站</label>
</nz-form-control>
</nz-form-item>
</form>
</div>
</div>

3
src/app/system-management/organization/addor/addor.component.ts

@ -15,7 +15,8 @@ export class AddorComponent implements OnInit {
ngOnInit(): void {
this.validateForm = this.fb.group({
name: [null, [Validators.required]],
code: [null, [Validators.required]]
code: [null, [Validators.required]],
isGasStation: [false]
});
}
destroyModal(): void {

5
src/app/system-management/organization/editor/editor.component.html

@ -14,5 +14,10 @@
</nz-input-group>
</nz-form-control>
</nz-form-item>
<nz-form-item>
<nz-form-control>
<label [(ngModel)]="datacopy.isGasStation" nz-checkbox formControlName="isGasStation">是否为加油站</label>
</nz-form-control>
</nz-form-item>
</form>
</div>

3
src/app/system-management/organization/editor/editor.component.ts

@ -17,7 +17,8 @@ export class EditorComponent implements OnInit {
ngOnInit(): void {
this.validateForm = this.fb.group({
name: [null, [Validators.required]],
code: [null, [Validators.required]]
code: [null, [Validators.required]],
isGasStation: []
});
this.datacopy = JSON.parse(JSON.stringify(this.data))
}

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

@ -100,6 +100,7 @@ export class OrganizationComponent implements OnInit {
parentId: node ? Number(node.key) : null,
code: instance.validateForm.value.code,
displayName: instance.validateForm.value.name,
isGasStation: instance.validateForm.value.isGasStation
}
this.http.post('/api/services/app/Organization/Create', body).subscribe(data => {
resolve(data)
@ -143,6 +144,7 @@ export class OrganizationComponent implements OnInit {
parentId: node.origin.parentId,
code: instance.validateForm.value.code,
displayName: instance.validateForm.value.name,
isGasStation: instance.validateForm.value.isGasStation
}
this.http.put('/api/services/app/Organization/Update', body).subscribe(data => {
resolve(data)

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

@ -26,6 +26,7 @@ import { NzSpinModule } from 'ng-zorro-antd/spin';
import { NzTreeSelectModule } from 'ng-zorro-antd/tree-select';
import { AddorComponent } from './organization/addor/addor.component';
import { EditorComponent } from './organization/editor/editor.component';
import { NzCheckboxModule } from 'ng-zorro-antd/checkbox';
@NgModule({
declarations: [OrganizationComponent, UserComponent, RoleComponent, NavigationComponent, AdduserComponent, EdituserComponent, AddroleComponent, EditroleComponent, AddorComponent, EditorComponent],
imports: [
@ -46,7 +47,8 @@ import { EditorComponent } from './organization/editor/editor.component';
NzMessageModule,
NzTreeModule,
NzSpinModule,
NzTreeSelectModule
NzTreeSelectModule,
NzCheckboxModule
],
entryComponents :[AdduserComponent,EdituserComponent,AddroleComponent,EditroleComponent,AddorComponent,EditorComponent]

7
src/app/ui/tabbar/tabbar.component.ts

@ -21,9 +21,10 @@ export class TabbarComponent implements OnInit {
setInterval(() => {
this.getTime()
}, 1000);
this.http.get('/api/services/app/Session/GetCurrentLoginInformations').subscribe((data: any) => {
this.surname = data.result.user.surname
})
this.surname = JSON.parse(sessionStorage.getItem('userdata')).surname
// this.http.get('/api/services/app/Session/GetCurrentLoginInformations').subscribe((data: any) => {
// this.surname = data.result.user.surname
// })
}
//获得时间

BIN
src/assets/images/expand.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1009 B

BIN
src/assets/images/point.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 524 B

BIN
src/assets/images/unexpand.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1021 B

BIN
src/assets/mesh/mark/disaster/syd/SYD.bin

Binary file not shown.

131
src/assets/mesh/mark/disaster/syd/SYD.gltf

@ -0,0 +1,131 @@
{
"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" : [
0
]
}
],
"nodes" : [
{
"mesh" : 0,
"name" : "SYD"
}
],
"materials" : [
{
"doubleSided" : true,
"name" : "ShangYuanC",
"pbrMetallicRoughness" : {
"baseColorTexture" : {
"index" : 0
},
"metallicFactor" : 0,
"roughnessFactor" : 0.5
}
}
],
"meshes" : [
{
"name" : "SYC",
"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,
"material" : 0,
"mode" : 4
}
]
}
],
"textures" : [
{
"sampler" : 0,
"source" : 0
}
],
"images" : [
{
"mimeType" : "image/jpeg",
"name" : "ShangYuanC",
"uri" : "ShangYuanC.jpg"
}
],
"accessors" : [
{
"componentType" : 5126,
"count" : 2460,
"max" : [
0.28133630752563477,
0.3663977086544037,
0.9737323522567749
],
"min" : [
-0.3098154664039612,
-0.04694981500506401,
-0.8537102937698364
],
"type" : "VEC3"
},
{
"componentType" : 5126,
"count" : 2460,
"type" : "VEC3"
},
{
"componentType" : 5126,
"count" : 2460,
"type" : "VEC2"
},
{
"componentType" : 5123,
"count" : 11262,
"type" : "SCALAR"
}
],
"bufferViews" : [
{
"buffer" : 0,
"byteLength" : 20249,
"byteOffset" : 0
}
],
"samplers" : [
{
"magFilter" : 9729,
"minFilter" : 9987
}
],
"buffers" : [
{
"byteLength" : 20252,
"uri" : "SYD.bin"
}
]
}

5
src/assets/mesh/mark/disaster/syd/SYD.gltf.manifest

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

BIN
src/assets/mesh/mark/disaster/syd/ShangYuanC.jpg

Binary file not shown.

After

Width:  |  Height:  |  Size: 198 KiB

BIN
src/assets/mesh/outdoor/ZhuTi/FireExtinguisher_FireExtinguisher_AlbedoTransparency.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.8 MiB

BIN
src/assets/mesh/outdoor/ZhuTi/LuZhuang.jpg

Binary file not shown.

Before

Width:  |  Height:  |  Size: 57 KiB

BIN
src/assets/mesh/outdoor/ZhuTi/QiCaiXiang.jpg

Binary file not shown.

Before

Width:  |  Height:  |  Size: 599 KiB

BIN
src/assets/mesh/outdoor/ZhuTi/SanXiang.jpg

Binary file not shown.

Before

Width:  |  Height:  |  Size: 156 KiB

BIN
src/assets/mesh/outdoor/ZhuTi/ShaDai.jpg

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 MiB

BIN
src/assets/mesh/outdoor/ZhuTi/ZHSY_BanGong.jpg

Binary file not shown.

Before

Width:  |  Height:  |  Size: 306 KiB

BIN
src/assets/mesh/outdoor/ZhuTi/ZHSY_ChuGuan.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 370 KiB

BIN
src/assets/mesh/outdoor/ZhuTi/ZHSY_GX1.jpg

Binary file not shown.

Before

Width:  |  Height:  |  Size: 371 KiB

BIN
src/assets/mesh/outdoor/ZhuTi/ZHSY_JYJ1.jpg

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 MiB

BIN
src/assets/mesh/outdoor/ZhuTi/ZHSY_JYJ2.jpg

Binary file not shown.

Before

Width:  |  Height:  |  Size: 275 KiB

BIN
src/assets/mesh/outdoor/ZhuTi/ZHSY_JingGai.jpg

Binary file not shown.

Before

Width:  |  Height:  |  Size: 283 KiB

BIN
src/assets/mesh/outdoor/ZhuTi/ZHSY_JingGai1.jpg

Binary file not shown.

Before

Width:  |  Height:  |  Size: 281 KiB

BIN
src/assets/mesh/outdoor/ZhuTi/ZHSY_SXT.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 755 KiB

BIN
src/assets/mesh/outdoor/ZhuTi/ZHSY_SheDeng1.jpg

Binary file not shown.

Before

Width:  |  Height:  |  Size: 518 KiB

BIN
src/assets/mesh/outdoor/ZhuTi/ZHSY_floor1.jpg

Binary file not shown.

Before

Width:  |  Height:  |  Size: 228 KiB

BIN
src/assets/mesh/outdoor/ZhuTi/ZHSY_floor2.jpg

Binary file not shown.

Before

Width:  |  Height:  |  Size: 540 KiB

BIN
src/assets/mesh/outdoor/ZhuTi/ZHSY_gg1.jpg

Binary file not shown.

Before

Width:  |  Height:  |  Size: 512 KiB

BIN
src/assets/mesh/outdoor/ZhuTi/ZHSY_gg2.jpg

Binary file not shown.

Before

Width:  |  Height:  |  Size: 783 KiB

BIN
src/assets/mesh/outdoor/ZhuTi/ZHSY_gg3.jpg

Binary file not shown.

Before

Width:  |  Height:  |  Size: 740 KiB

BIN
src/assets/mesh/outdoor/ZhuTi/ZHSY_gg4.jpg

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

BIN
src/assets/mesh/outdoor/ZhuTi/ZHSY_gg5.jpg

Binary file not shown.

Before

Width:  |  Height:  |  Size: 445 KiB

BIN
src/assets/mesh/outdoor/ZhuTi/ZHSY_gg6.jpg

Binary file not shown.

Before

Width:  |  Height:  |  Size: 477 KiB

BIN
src/assets/mesh/outdoor/ZhuTi/ZHSY_glass1.jpg

Binary file not shown.

Before

Width:  |  Height:  |  Size: 113 KiB

BIN
src/assets/mesh/outdoor/ZhuTi/ZHSY_guitai1.jpg

Binary file not shown.

Before

Width:  |  Height:  |  Size: 193 KiB

BIN
src/assets/mesh/outdoor/ZhuTi/ZHSY_wall1.jpg

Binary file not shown.

Before

Width:  |  Height:  |  Size: 53 KiB

BIN
src/assets/mesh/outdoor/ZhuTi/ZHSY_wall10.jpg

Binary file not shown.

Before

Width:  |  Height:  |  Size: 191 KiB

BIN
src/assets/mesh/outdoor/ZhuTi/ZHSY_wall11.jpg

Binary file not shown.

Before

Width:  |  Height:  |  Size: 143 KiB

BIN
src/assets/mesh/outdoor/ZhuTi/ZHSY_wall12.jpg

Binary file not shown.

Before

Width:  |  Height:  |  Size: 137 KiB

BIN
src/assets/mesh/outdoor/ZhuTi/ZHSY_wall2.jpg

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

BIN
src/assets/mesh/outdoor/ZhuTi/ZHSY_wall3.jpg

Binary file not shown.

Before

Width:  |  Height:  |  Size: 59 KiB

BIN
src/assets/mesh/outdoor/ZhuTi/ZHSY_wall4.jpg

Binary file not shown.

Before

Width:  |  Height:  |  Size: 172 KiB

BIN
src/assets/mesh/outdoor/ZhuTi/ZHSY_wall5.jpg

Binary file not shown.

Before

Width:  |  Height:  |  Size: 100 KiB

BIN
src/assets/mesh/outdoor/ZhuTi/ZHSY_wall6.jpg

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

BIN
src/assets/mesh/outdoor/ZhuTi/ZHSY_wall7.jpg

Binary file not shown.

Before

Width:  |  Height:  |  Size: 62 KiB

BIN
src/assets/mesh/outdoor/ZhuTi/ZHSY_wall8.jpg

Binary file not shown.

Before

Width:  |  Height:  |  Size: 118 KiB

BIN
src/assets/mesh/outdoor/ZhuTi/ZHSY_wall9.jpg

Binary file not shown.

Before

Width:  |  Height:  |  Size: 85 KiB

BIN
src/assets/mesh/outdoor/ZhuTi/ZHSY_yinxiang.jpg

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

BIN
src/assets/mesh/outdoor/ZhuTi/ZhuTi.bin

Binary file not shown.

10098
src/assets/mesh/outdoor/ZhuTi/ZhuTi.gltf

File diff suppressed because it is too large Load Diff

BIN
src/assets/mesh/outdoor/ZhuTi/mhq-xiang.jpg

Binary file not shown.

Before

Width:  |  Height:  |  Size: 171 KiB

22
src/styles.scss

@ -104,10 +104,24 @@ h1 {
//三维场景
#threeDimensional {
.ant-tree{ color: #C4E2FC; }
.ant-tree,.ant-tree-node-content-wrapper:hover,.ant-tree-node-content-wrapper.ant-tree-node-selected { background-color: transparent; }
.ant-tree-node-content-wrapper { width: 100%; }
.ant-select-single:not(.ant-select-customize-input) .ant-select-selector { border: none; border-radius: 0px; }
.ant-tree{ color: #C4E2FC; } //tree
.ant-tree,.ant-tree-node-content-wrapper:hover,.ant-tree-node-content-wrapper.ant-tree-node-selected { background-color: transparent; } //tree
.ant-tree-node-content-wrapper { width: 100%; } //tree
.ant-select-single:not(.ant-select-customize-input) .ant-select-selector { border: none; border-radius: 0px; } //select
.ant-collapse,.ant-collapse-item,.ant-collapse-header,.ant-collapse-content{ border-radius: 0px; border: none; } //可展开面板
.ant-collapse-content{ background: rgba(0, 59, 110, 0.9); color: #fff; } //可展开面板
.ant-collapse-content-box{ padding: 0; } //可展开面板
.ant-collapse-header{
padding: 0 0 0 25px;
height: 30px;
line-height: 28px;
background: linear-gradient(360deg, #000D21 0%, rgba(0, 59, 110, 0.8) 100%);
border: 1px solid rgba(35, 217, 255, 0.4);
color: #23D9FF;
.ant-collapse-arrow{ left: 5px; } //可展开面板
}
//滚动条样式
::-webkit-scrollbar {
width: 5px;

32
src/theme.less

@ -5,7 +5,8 @@
//分页器
#recordsboxadmin,
#recordsbox,
#equipmentInfo {
#equipmentInfo,
#stationPlanBox {
.ant-pagination-total-text,
.ant-pagination-options-quick-jumper {
@ -40,6 +41,25 @@
color: #91CCFF;
}
//自营和加盟
.ziying,
.jiameng {
display: inline-block;
width: 36px;
height: 20px;
line-height: 20px;
text-align: center;
background: #2399FF;
opacity: 1;
border-radius: 2px;
color: #fff !important;
font-size: 12px;
}
.jiameng {
background: #FF9963;
}
//接收报警弹出框
.ant-notification {
width: 500px;
@ -246,3 +266,13 @@
border: none;
}
}
#stationPlanBox {
.ant-tree .ant-tree-node-content-wrapper:hover ,.ant-tree .ant-tree-node-content-wrapper.ant-tree-node-selected{
background: linear-gradient(90deg, rgba(0, 13, 33, 0) 0%, #2399FF 50%, rgba(0, 13, 33, 0) 100%);
}
.ant-tree .ant-tree-node-content-wrapper{
padding: 2px 20px;
}
}

5
yarn.lock

@ -7600,6 +7600,11 @@ mkdirp@^0.5.5, mkdirp@~0.5.1, mkdirp@~0.5.x:
dependencies:
minimist "^1.2.5"
moment@^2.29.1:
version "2.29.1"
resolved "https://registry.npm.taobao.org/moment/download/moment-2.29.1.tgz#b2be769fa31940be9eeea6469c075e35006fa3d3"
integrity sha1-sr52n6MZQL6e7qZGnAdeNQBvo9M=
move-concurrently@^1.0.1:
version "1.0.1"
resolved "https://registry.npm.taobao.org/move-concurrently/download/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92"

Loading…
Cancel
Save