Compare commits

..

7 Commits

  1. 21
      angular.json
  2. 22
      package-lock.json
  3. 2
      package.json
  4. 15
      proxy.config.json
  5. 10
      reset.css
  6. 2
      src/app/app-routing.module.ts
  7. 100
      src/app/app.component.ts
  8. 126
      src/app/app.module.ts
  9. 75
      src/app/auth.guard.ts
  10. 20
      src/app/data-collection/fire-force/fire-force.component.html
  11. 8
      src/app/data-collection/fire-force/fire-force.component.ts
  12. 4
      src/app/data-collection/linkage-forces/linkage-forces.component.ts
  13. 4
      src/app/data-collection/water-collection/water-collection.component.ts
  14. 84
      src/app/external-links-plan/external-links-plan.component.html
  15. 288
      src/app/external-links-plan/external-links-plan.component.ts
  16. 411
      src/app/gis-management/gis-labeling/gis-labeling.component.html
  17. 3907
      src/app/gis-management/gis-labeling/gis-labeling.component.ts
  18. 267
      src/app/gis-management/gis-management.module.ts
  19. 22
      src/app/http-interceptors/base-interceptor.ts
  20. 50
      src/app/http-interceptors/cache-token.service.ts
  21. 149
      src/app/interface.ts
  22. 7
      src/app/key-unit/basicinfo/basicinfo.component.html
  23. 3
      src/app/key-unit/basicinfo/basicinfo.component.ts
  24. 12
      src/app/key-unit/edit-plan-info/edit-plan-info.component.html
  25. 16
      src/app/key-unit/edit-unit-info/edit-unit-info.component.html
  26. 259
      src/app/key-unit/fire-fighting-device-look/fire-fighting-device.component.html
  27. 708
      src/app/key-unit/fire-fighting-device-look/fire-fighting-device.component.ts
  28. 843
      src/app/key-unit/fire-fighting-device/fire-fighting-device.component.ts
  29. 37
      src/app/key-unit/key-unit-management/key-unit-management.component.html
  30. 1495
      src/app/key-unit/key-unit-management/key-unit-management.component.ts
  31. 119
      src/app/key-unit/key-unit-management/upload-drill/upload-drill.component.html
  32. 120
      src/app/key-unit/key-unit-management/upload-drill/upload-drill.component.scss
  33. 25
      src/app/key-unit/key-unit-management/upload-drill/upload-drill.component.spec.ts
  34. 203
      src/app/key-unit/key-unit-management/upload-drill/upload-drill.component.ts
  35. 294
      src/app/key-unit/key-unit.module.ts
  36. 638
      src/app/key-unit/realistic-picture-look/realistic-picture.component.ts
  37. 829
      src/app/key-unit/realistic-picture/realistic-picture.component.ts
  38. 4
      src/app/key-unit/router-gis/router-gis.component.ts
  39. 16
      src/app/key-unit/view-unit-details-plan/view-unit-details-plan.component.html
  40. 12
      src/app/key-unit/view-unit-details/view-unit-details.component.html
  41. 2
      src/app/key-unit/water-road/water-road.component.ts
  42. 4
      src/app/pages/home/home.component.ts
  43. 3
      src/app/pages/login/login.component.ts
  44. 16
      src/app/pages/login/lookUpdateData.html
  45. 136
      src/app/pipes/boolean.pipe.ts
  46. 2
      src/app/plan-audit/fireforce-audit/fireforce-audit.component.ts
  47. 2
      src/app/plan-audit/linkageforces-audit/linkageforces-audit.component.ts
  48. 99
      src/app/plan-audit/plan-audit/plan-audit.component.html
  49. 108
      src/app/plan-audit/plan-pass/plan-pass.component.ts
  50. 454
      src/app/plan-audit/plan-record/plan-record.component.html
  51. 728
      src/app/plan-audit/plan-record/plan-record.component.scss
  52. 480
      src/app/plan-audit/plan-record/plan-record.component.ts
  53. 200
      src/app/plan-audit/wait-examineer/wait-examineer.component.html
  54. 883
      src/app/plan-audit/wait-examineer/wait-examineer.component.scss
  55. 1113
      src/app/plan-audit/wait-examineer/wait-examineer.component.ts
  56. 2
      src/app/plan-audit/water-audit/water-audit.component.ts
  57. 799
      src/app/plan-management/create-plan-online-five/create-plan-online-five.component.html
  58. 3669
      src/app/plan-management/create-plan-online-five/create-plan-online-five.component.ts
  59. 58
      src/app/plan-management/drill-record/drill-record.component.html
  60. 59
      src/app/plan-management/drill-record/drill-record.component.scss
  61. 25
      src/app/plan-management/drill-record/drill-record.component.spec.ts
  62. 141
      src/app/plan-management/drill-record/drill-record.component.ts
  63. 194
      src/app/plan-management/entry-plan-look/AddPlanone.html
  64. 50
      src/app/plan-management/entry-plan-look/auditresult.html
  65. 18
      src/app/plan-management/entry-plan-look/edit-plan-category/edit-plan-category.component.html
  66. 0
      src/app/plan-management/entry-plan-look/edit-plan-category/edit-plan-category.component.scss
  67. 25
      src/app/plan-management/entry-plan-look/edit-plan-category/edit-plan-category.component.spec.ts
  68. 37
      src/app/plan-management/entry-plan-look/edit-plan-category/edit-plan-category.component.ts
  69. 23
      src/app/plan-management/entry-plan-look/entry-plan-look.component.html
  70. 387
      src/app/plan-management/entry-plan-look/entry-plan-look.component.scss
  71. 2771
      src/app/plan-management/entry-plan-look/entry-plan-look.component.ts
  72. 29
      src/app/plan-management/entry-plan-look/six-familiarize/six-familiarize.component.html
  73. 118
      src/app/plan-management/entry-plan-look/six-familiarize/six-familiarize.component.scss
  74. 25
      src/app/plan-management/entry-plan-look/six-familiarize/six-familiarize.component.spec.ts
  75. 110
      src/app/plan-management/entry-plan-look/six-familiarize/six-familiarize.component.ts
  76. 42
      src/app/plan-management/entry-plan/entry-plan.component.html
  77. 484
      src/app/plan-management/entry-plan/entry-plan.component.ts
  78. 365
      src/app/plan-management/meet-plan/meet-plan.component.html
  79. 60
      src/app/plan-management/meet-plan/meet-plan.component.ts
  80. 331
      src/app/plan-management/onetwo-entry-plan/onetwo-entry-plan.component.html
  81. 948
      src/app/plan-management/onetwo-entry-plan/onetwo-entry-plan.component.ts
  82. 19
      src/app/plan-management/open-plan/open-plan.component.html
  83. 439
      src/app/plan-management/open-plan/open-plan.component.ts
  84. 10
      src/app/plan-management/pass-plan/open-or/open-or.component.html
  85. 4
      src/app/plan-management/pass-plan/open-or/open-or.component.scss
  86. 25
      src/app/plan-management/pass-plan/open-or/open-or.component.spec.ts
  87. 126
      src/app/plan-management/pass-plan/open-or/open-or.component.ts
  88. 26
      src/app/plan-management/pass-plan/pass-plan.component.html
  89. 614
      src/app/plan-management/pass-plan/pass-plan.component.ts
  90. 35
      src/app/plan-management/plan-deduction/add-plan/add-plan.component.html
  91. 122
      src/app/plan-management/plan-deduction/add-plan/add-plan.component.scss
  92. 25
      src/app/plan-management/plan-deduction/add-plan/add-plan.component.spec.ts
  93. 103
      src/app/plan-management/plan-deduction/add-plan/add-plan.component.ts
  94. 62
      src/app/plan-management/plan-deduction/plan-deduction.component.html
  95. 63
      src/app/plan-management/plan-deduction/plan-deduction.component.scss
  96. 25
      src/app/plan-management/plan-deduction/plan-deduction.component.spec.ts
  97. 180
      src/app/plan-management/plan-deduction/plan-deduction.component.ts
  98. 6
      src/app/plan-management/plan-management-routing.module.ts
  99. 261
      src/app/plan-management/plan-management.module.ts
  100. 222
      src/app/plan-management/reinforce-plan/reinforce-plan.component.html
  101. Some files were not shown because too many files have changed in this diff Show More

21
angular.json

@ -18,13 +18,15 @@
"builder": "@angular-devkit/build-angular:browser",
"options": {
"outputPath": "dist/anxin119",
"sourceMap": false,
"index": "src/index.html",
"main": "src/main.ts",
"polyfills": "src/polyfills.ts",
"tsConfig": "tsconfig.app.json",
"aot": true,
"assets": ["src/favicon.ico", "src/assets"],
"assets": [
"src/favicon.ico",
"src/assets"
],
"styles": [
"src/styles.scss",
"./node_modules/swiper/css/swiper.min.css",
@ -98,8 +100,13 @@
"polyfills": "src/polyfills.ts",
"tsConfig": "tsconfig.spec.json",
"karmaConfig": "karma.conf.js",
"assets": ["src/favicon.ico", "src/assets"],
"styles": ["src/styles.scss"],
"assets": [
"src/favicon.ico",
"src/assets"
],
"styles": [
"src/styles.scss"
],
"scripts": []
}
},
@ -111,7 +118,9 @@
"tsconfig.spec.json",
"e2e/tsconfig.json"
],
"exclude": ["**/node_modules/**"]
"exclude": [
"**/node_modules/**"
]
}
},
"e2e": {
@ -133,4 +142,4 @@
"cli": {
"analytics": "6210f5d0-2cd7-43dc-b245-2140372d1b89"
}
}
}

22
package-lock.json generated

@ -2055,7 +2055,6 @@
"version": "7.8.3",
"resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-json-strings/download/@babel/plugin-proposal-json-strings-7.8.3.tgz",
"integrity": "sha1-2lIWsjipi1ih4F1oUhBLEPmnDWs=",
"deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-json-strings instead.",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.8.3",
@ -2069,7 +2068,6 @@
"version": "7.8.3",
"resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-object-rest-spread/download/@babel/plugin-proposal-object-rest-spread-7.8.3.tgz?cache=0&sync_timestamp=1578956763418&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40babel%2Fplugin-proposal-object-rest-spread%2Fdownload%2F%40babel%2Fplugin-proposal-object-rest-spread-7.8.3.tgz",
"integrity": "sha1-61rjZhGN3KZ77Vg7U9dVTK2ZUbs=",
"deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead.",
"dev": true,
"dependencies": {
"@babel/helper-plugin-utils": "^7.8.3",
@ -2096,7 +2094,6 @@
"version": "7.8.3",
"resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-unicode-property-regex/download/@babel/plugin-proposal-unicode-property-regex-7.8.3.tgz",
"integrity": "sha1-tkbDrepfmIAMmrRRBaw00GzUpH8=",
"deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-unicode-property-regex instead.",
"dev": true,
"dependencies": {
"@babel/helper-create-regexp-features-plugin": "^7.8.3",
@ -7968,7 +7965,7 @@
"version": "2.1.0",
"resolved": "https://registry.npm.taobao.org/date-format/download/date-format-2.1.0.tgz?cache=0&sync_timestamp=1572559173297&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdate-format%2Fdownload%2Fdate-format-2.1.0.tgz",
"integrity": "sha1-MdW16iEc9f12TNOLr50DPffhJc8=",
"deprecated": "2.x is no longer supported. Please upgrade to 4.x or higher.",
"deprecated": "2.x is no longer supported. Please upgrade to 4.x.",
"dev": true,
"engines": {
"node": ">=4.0"
@ -7988,7 +7985,6 @@
"version": "1.0.1",
"resolved": "https://registry.npm.taobao.org/debuglog/download/debuglog-1.0.1.tgz",
"integrity": "sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI=",
"deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.",
"dev": true,
"engines": {
"node": "*"
@ -11818,7 +11814,7 @@
"version": "1.2.13",
"resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-1.2.13.tgz",
"integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==",
"deprecated": "The v1 package contains DANGEROUS / INSECURE binaries. Upgrade to safe fsevents v2",
"deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.",
"dev": true,
"hasInstallScript": true,
"optional": true,
@ -12101,7 +12097,7 @@
"version": "4.5.1",
"resolved": "https://registry.npm.taobao.org/log4js/download/log4js-4.5.1.tgz",
"integrity": "sha1-5UNiXpfZ5vPm58n8GW3WqyyuMLU=",
"deprecated": "4.x is no longer supported. Please upgrade to 6.x or higher.",
"deprecated": "4.x is no longer supported. Please upgrade to 6.x.",
"dev": true,
"dependencies": {
"date-format": "^2.0.0",
@ -12913,7 +12909,6 @@
"version": "8.0.0",
"resolved": "https://registry.npm.taobao.org/ngx-perfect-scrollbar/download/ngx-perfect-scrollbar-8.0.0.tgz",
"integrity": "sha1-GcG7+bGjbYmwCmj3g045Qn0pGC8=",
"deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.",
"dependencies": {
"perfect-scrollbar": "^1.4.0",
"resize-observer-polyfill": "^1.5.0"
@ -12934,7 +12929,6 @@
"version": "2.0.2",
"resolved": "https://registry.npm.taobao.org/node-fetch-npm/download/node-fetch-npm-2.0.2.tgz",
"integrity": "sha1-cljJBGGC3KNFtCCO2pGNrzNpf/c=",
"deprecated": "This module is not used anymore, npm uses minipass-fetch for its fetch implementation now",
"dev": true,
"dependencies": {
"encoding": "^0.1.11",
@ -13920,7 +13914,6 @@
"version": "4.0.7",
"resolved": "https://registry.npm.taobao.org/photo-sphere-viewer/download/photo-sphere-viewer-4.0.7.tgz",
"integrity": "sha1-UPNlOACbVPqi+3S2QCvsFSvnFnc=",
"deprecated": "Use @photo-sphere-viewer/core instead, see https://photo-sphere-viewer.js.org/guide/migration.html",
"dependencies": {
"three": "^0.120.1",
"uevent": "~2.0.0"
@ -14862,7 +14855,6 @@
"version": "5.4.2",
"resolved": "https://registry.npm.taobao.org/protractor/download/protractor-5.4.2.tgz",
"integrity": "sha1-Mp7+N/SLIUGrlGd5m+LU0S60jBM=",
"deprecated": "We have news to share - Protractor is deprecated and will reach end-of-life by Summer 2023. To learn more and find out about other options please refer to this post on the Angular blog. Thank you for using and contributing to Protractor. https://goo.gle/state-of-e2e-in-angular",
"dev": true,
"dependencies": {
"@types/q": "^0.0.32",
@ -15360,7 +15352,6 @@
"version": "1.1.0",
"resolved": "https://registry.npm.taobao.org/readdir-scoped-modules/download/readdir-scoped-modules-1.1.0.tgz",
"integrity": "sha1-jUVAe0+HCg3K68DihnDRjnRRQwk=",
"deprecated": "This functionality has been moved to @npmcli/fs",
"dev": true,
"dependencies": {
"debuglog": "^1.0.1",
@ -16674,7 +16665,6 @@
"version": "1.4.8",
"resolved": "https://registry.npm.taobao.org/sourcemap-codec/download/sourcemap-codec-1.4.8.tgz",
"integrity": "sha1-6oBL2UhXQC5pktBaOO8a41qatMQ=",
"deprecated": "Please use @jridgewell/sourcemap-codec instead",
"dev": true
},
"node_modules/spdx-correct": {
@ -16913,7 +16903,7 @@
"version": "1.0.6",
"resolved": "https://registry.npm.taobao.org/streamroller/download/streamroller-1.0.6.tgz",
"integrity": "sha1-gWfYSW7Z8Z8F7ksVjZYRMhuMrNk=",
"deprecated": "1.x is no longer supported. Please upgrade to 3.x or higher.",
"deprecated": "1.x is no longer supported. Please upgrade to 3.x.",
"dev": true,
"dependencies": {
"async": "^2.6.2",
@ -18388,7 +18378,7 @@
"version": "1.2.13",
"resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-1.2.13.tgz",
"integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==",
"deprecated": "The v1 package contains DANGEROUS / INSECURE binaries. Upgrade to safe fsevents v2",
"deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.",
"dev": true,
"hasInstallScript": true,
"optional": true,
@ -18731,7 +18721,7 @@
"version": "1.2.13",
"resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-1.2.13.tgz",
"integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==",
"deprecated": "The v1 package contains DANGEROUS / INSECURE binaries. Upgrade to safe fsevents v2",
"deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.",
"dev": true,
"hasInstallScript": true,
"optional": true,

2
package.json

@ -3,7 +3,7 @@
"version": "0.0.0",
"scripts": {
"ng": "ng",
"start": "ng serve --proxy-config proxy.config.json --open",
"start": "ng serve --proxy-config proxy.config.json --open --port 7542 ",
"build": "ng build",
"build-prod": "node --max_old_space_size=5048 ./node_modules/@angular/cli/bin/ng build --prod",
"publish": "ng build --prod --verbose",

15
proxy.config.json

@ -1,10 +1,7 @@
{
"/api": {
"target": "http://121.36.37.70:8201/",
"生产": "http://10.81.73.39:8000/",
"测试": "http://121.36.37.70:8201/",
"生产2": "http://183.194.244.232:8088/",
"secure": false,
"changeOrigin": true
}
}
"/api": {
"target": "http://121.36.37.70:8205",
"secure": false,
"changeOrigin": true
}
}

10
reset.css

@ -50,11 +50,11 @@ img {
a {
text-decoration: none;
color: #000;
ul,
ol,
li {
list-style: none;
}
}
ul,
ol,
li {
list-style: none;
}
.clearfn:after {
content: "";

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

@ -41,7 +41,7 @@ const routes: Routes = [
{path:'keyUnit/viewunitinfoplans', component:ViewUnitDetailsPlanComponent,canActivate: [AuthGuard],},
{path:'getNoMToken',component:MTokenK1Component, canActivate: [AuthGuard],}, //K1秘钥验证失败是跳转页面
{path:'planAudit/planpass', component: PlanPassComponent , canActivate: [AuthGuard]},
// {path:'test', component: TestComponent },
{path:'test', component: TestComponent },
{path:'linksPlan', component: ExternalLinksPlanComponent },
{path:'CreatePlanOnlineFive',component:CreatePlanOnlineFiveComponent},
{path:'exportExcel',component:ExportExcelComponent, canActivate: [AuthGuard]},

100
src/app/app.component.ts

@ -1,60 +1,60 @@
import { Component, Inject, Injector } from "@angular/core";
import { HttpClient } from "@angular/common/http";
import { Data } from "./interface";
import { Router, ActivatedRoute } from "@angular/router";
import { CacheTokenService } from "./http-interceptors/cache-token.service"; //引入服务
import { MaskLayerService } from "./mask-layer.service";
import * as global from "globals";
import { Component, Inject, Injector } from '@angular/core';
import { HttpClient } from '@angular/common/http'
import { Data } from './interface'
import { Router, ActivatedRoute } from '@angular/router'
import { CacheTokenService } from './http-interceptors/cache-token.service'//引入服务
import { MaskLayerService } from './mask-layer.service';
import * as global from 'globals';
@Component({
selector: "app-root",
templateUrl: "./app.component.html",
styleUrls: ["./app.component.scss"],
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.scss']
})
export class AppComponent {
constructor(
private maskLayerService: MaskLayerService,
private http: HttpClient,
private router: Router,
public token: CacheTokenService,
private injector: Injector
) {
global.injector = injector;
}
isMaskLayerShow: boolean = false;
ngOnInit(): void {
console.log("更新日期2025.01.07");
//监听遮罩层
this.maskLayerService.getMessage().subscribe((message: any) => {
this.isMaskLayerShow = message;
});
// console.log(1234,document.documentElement.clientWidth)
function addMeta(name, content) {
//手动添加mate标签
let meta = document.createElement("meta");
meta.content = content;
meta.name = name;
document.getElementsByTagName("head")[0].appendChild(meta);
}
if (document.documentElement.clientWidth < 800) {
addMeta(
"viewport",
"initial-scale=0.5, maximum-scale=0.5, minimum-scale=0.5, user-scalable=no,uc-fitscreen=yes,viewport-fit=cover"
);
constructor(private maskLayerService: MaskLayerService, private http: HttpClient, private router: Router, public token: CacheTokenService, private injector: Injector) {
global.injector = injector;
}
if (sessionStorage.getItem("token") && !this.token.timer) {
//调用服务中的function刷新token
this.token.startUp();
isMaskLayerShow: boolean = false
ngOnInit(): void {
//监听遮罩层
this.maskLayerService.getMessage().subscribe((message: any) => {
this.isMaskLayerShow = message
});
var token = sessionStorage.getItem("token");
var refreshToken = sessionStorage.getItem("refreshToken");
if (token && refreshToken) {
this.http.post('/api/Account/RefreshToken', {
token: token,
refreshToken: refreshToken
}).subscribe((data: Data) => {
sessionStorage.setItem("level", data.level);
sessionStorage.setItem("token", data.token);
sessionStorage.setItem("refreshToken", data.refreshToken);
this.token.startUp()
})
}
// console.log(1234,document.documentElement.clientWidth)
function addMeta(name, content) {//手动添加mate标签
let meta = document.createElement('meta');
meta.content = content;
meta.name = name;
document.getElementsByTagName('head')[0].appendChild(meta);
}
if (document.documentElement.clientWidth < 800) {
addMeta('viewport', 'initial-scale=0.5, maximum-scale=0.5, minimum-scale=0.5, user-scalable=no,uc-fitscreen=yes,viewport-fit=cover')
}
}
}

126
src/app/app.module.ts

@ -1,69 +1,61 @@
import { BrowserModule } from "@angular/platform-browser";
import { NgModule } from "@angular/core";
import { AppRoutingModule } from "./app-routing.module";
import { AppComponent } from "./app.component";
import { BrowserAnimationsModule } from "@angular/platform-browser/animations";
import { MatButtonModule } from "@angular/material/button";
import { MatCheckboxModule } from "@angular/material/checkbox";
import { MatIconModule } from "@angular/material/icon";
import { MatSidenavModule } from "@angular/material/sidenav";
import { NavigationModule } from "./navigation/navigation.module";
import { HomeComponent } from "./home/home.component";
import { TabbarComponent } from "./tabbar/tabbar.component";
import { PagesModule } from "./pages/pages.module";
import { FormsModule } from "@angular/forms";
import { UiModule } from "./ui/ui.module";
import { HttpClientModule } from "@angular/common/http";
import { httpInterceptorProviders } from "./http-interceptors/index";
import { CacheTokenService } from "./http-interceptors/cache-token.service";
import { TreeService } from "./http-interceptors/tree.service";
import { MTokenK1Component } from "./m-token-k1/m-token-k1.component"; //K1秘钥
import { CountdownModule } from "ngx-countdown"; //倒计时插件
import { GISManagementModule } from "./gis-management/gis-management.module";
import { DataCollectionModule } from "./data-collection/data-collection.module";
import { MatProgressSpinnerModule } from "@angular/material/progress-spinner";
import { TestComponent } from "./test/test.component";
import { ExternalLinksPlanComponent } from "./external-links-plan/external-links-plan.component";
import { SearchDownList } from "../modules/map/declare/component/SearchDownListPlugins/SearchDownList";
import { ExportExcelComponent } from "./export-excel/export-excel.component";
import { registerLocaleData } from "@angular/common";
import zh from "@angular/common/locales/zh";
import { KeyUnitModule } from "./key-unit/key-unit.module";
import { MatTabsModule } from "@angular/material/tabs";
import { PlanManagementModule } from "./plan-management/plan-management.module";
registerLocaleData(zh);
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { MatButtonModule } from '@angular/material/button';
import { MatCheckboxModule } from '@angular/material/checkbox';
import { MatIconModule } from '@angular/material/icon';
import { MatSidenavModule } from '@angular/material/sidenav';
import { NavigationModule } from './navigation/navigation.module';
import { HomeComponent } from './home/home.component';
import { TabbarComponent } from './tabbar/tabbar.component';
import { PagesModule } from './pages/pages.module';
import { FormsModule } from '@angular/forms';
import { UiModule } from './ui/ui.module';
import { HttpClientModule } from '@angular/common/http';
import { httpInterceptorProviders } from './http-interceptors/index'
import { CacheTokenService } from './http-interceptors/cache-token.service'
import { TreeService } from './http-interceptors/tree.service';
import { MTokenK1Component } from './m-token-k1/m-token-k1.component' //K1秘钥
import { CountdownModule } from 'ngx-countdown'; //倒计时插件
import { GISManagementModule } from './gis-management/gis-management.module';
import { DataCollectionModule } from './data-collection/data-collection.module';
import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
import { TestComponent } from './test/test.component';
import { ExternalLinksPlanComponent } from './external-links-plan/external-links-plan.component';
import { SearchDownList } from '../modules/map/declare/component/SearchDownListPlugins/SearchDownList';
import { ExportExcelComponent } from './export-excel/export-excel.component';
@NgModule({
declarations: [
AppComponent,
HomeComponent,
MTokenK1Component,
TestComponent,
ExternalLinksPlanComponent,
SearchDownList,
ExportExcelComponent,
],
imports: [
BrowserModule,
AppRoutingModule,
BrowserAnimationsModule,
MatButtonModule,
MatCheckboxModule,
MatSidenavModule,
NavigationModule,
MatIconModule,
PagesModule,
FormsModule,
HttpClientModule,
CountdownModule,
GISManagementModule,
DataCollectionModule,
MatProgressSpinnerModule,
UiModule,
KeyUnitModule,
MatTabsModule,
PlanManagementModule,
],
providers: [httpInterceptorProviders, CacheTokenService, TreeService],
bootstrap: [AppComponent],
declarations: [
AppComponent,
HomeComponent,
MTokenK1Component,
TestComponent,
ExternalLinksPlanComponent,
SearchDownList,
ExportExcelComponent
],
imports: [
BrowserModule,
AppRoutingModule,
BrowserAnimationsModule,
MatButtonModule,
MatCheckboxModule,
MatSidenavModule,
NavigationModule,
MatIconModule,
PagesModule,
FormsModule,
HttpClientModule,
CountdownModule,
GISManagementModule,
DataCollectionModule,
MatProgressSpinnerModule,
UiModule
],
providers: [httpInterceptorProviders, CacheTokenService, TreeService],
bootstrap: [AppComponent]
})
export class AppModule {}
export class AppModule { }

75
src/app/auth.guard.ts

@ -1,70 +1,31 @@
import { HttpClient } from "@angular/common/http";
import { Injectable } from "@angular/core";
import {
CanActivate,
ActivatedRouteSnapshot,
RouterStateSnapshot,
Router,
} from "@angular/router";
import { Injectable } from '@angular/core';
import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, Router } from '@angular/router';
@Injectable({
providedIn: "root",
providedIn: 'root'
})
export class AuthGuard implements CanActivate {
constructor(private http: HttpClient, private router: Router) {}
// 路由守卫
async canActivate(
next: ActivatedRouteSnapshot,
state: RouterStateSnapshot
): Promise<boolean> {
console.log("next", next);
console.log("state", state);
constructor(private router: Router) {
if (
next.queryParams.singleSignOn &&
next.queryParams.singleSignOn === "true"
) {
//执行自动登录逻辑
await this.onSubmit();
}
return this.checkLogin();
}
checkLogin(): boolean {
// 判断本地有没有token
const token = sessionStorage.getItem("token");
// 路由守卫
canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
// 如果有token,允许访问
if (token) {
return true;
return this.checkLogin();
}
//如果没有token,跳转登录页
this.router.navigate(["/login"]);
return false;
}
checkLogin(): boolean {
onSubmit() {
return new Promise<void>((resolve, reject) => {
this.http
.post("/api/Account/SignIn", {
name: "superadmin",
password: "SHya119!@",
})
.subscribe(
(data: any) => {
sessionStorage.setItem("level", data.level);
sessionStorage.setItem("token", data.token);
sessionStorage.setItem("refreshToken", data.refreshToken);
sessionStorage.setItem("isDefaultPassword", data.isDefaultPassword); //是否需要修改默认密码
sessionStorage.setItem("singleSignOn", "true"); //是否需要修改默认密码
resolve();
},
(err) => {
reject();
}
);
});
}
// 判断本地有没有token
const token = sessionStorage.getItem('token');
// 如果有token,允许访问
if (token) { return true; }
//如果没有token,跳转登录页
this.router.navigate(['/login']);
return false;
}
}

20
src/app/data-collection/fire-force/fire-force.component.html

@ -43,9 +43,8 @@
</div>
<div class="fireForceTree" id="fireForceTree" *ngIf="isTreeView">
<mat-tree [dataSource]="dataSource" [treeControl]="treeControl">
<mat-tree-node (click)="selectTreeNode(node)"
[ngClass]="{'selectedTreeNode': node.id == selectedFireForceId}" *matTreeNodeDef="let node;"
matTreeNodePadding matTreeNodePaddingIndent='10px'>
<mat-tree-node (click)="selectTreeNode(node)" [ngClass]="{'selectedTreeNode': node.id == selectedFireForceId}"
*matTreeNodeDef="let node;" matTreeNodePadding matTreeNodePaddingIndent='10px'>
<button mat-icon-button disabled></button>
<span class="nodename">{{node.name}}</span>
@ -114,8 +113,7 @@
<div class="mapbox">
<div class="mapcheckbox">
<mat-checkbox (change)="checkBoxChange()" [(ngModel)]="item.isChecked" color="primary"
*ngFor="let item of checkBoxList">{{item.name}}
</mat-checkbox>
*ngFor="let item of checkBoxList">{{item.name}}</mat-checkbox>
</div>
<div id="map" class="map" style="overflow: hidden;">
<div id="container"></div>
@ -221,8 +219,8 @@
<span>
备注:
</span>
<textarea [(ngModel)]="FireForceDetailInfo.remark" style="height: 80%;width: 84%;" cols="30"
rows="10"></textarea>
<textarea [(ngModel)]="FireForceDetailInfo.remark" style="height: 80%;width: 84%;"
cols="30" rows="10"></textarea>
</mat-grid-tile>
</mat-grid-list>
<p>位置信息</p>
@ -352,8 +350,8 @@
<span>
备注:
</span>
<textarea [(ngModel)]="FireForceDetailInfo.remark" style="height: 80%;width: 84%;" cols="30"
rows="10"></textarea>
<textarea [(ngModel)]="FireForceDetailInfo.remark" style="height: 80%;width: 84%;"
cols="30" rows="10"></textarea>
</mat-grid-tile>
</mat-grid-list>
<p>位置信息</p>
@ -542,8 +540,8 @@
<span>
备注:
</span>
<textarea [(ngModel)]="FireForceDetailInfo.remark" style="height: 80%;width: 82%;" cols="30"
rows="10"></textarea>
<textarea [(ngModel)]="FireForceDetailInfo.remark" style="height: 80%;width: 82%;"
cols="30" rows="10"></textarea>
</mat-grid-tile>
</mat-grid-list>
<p>位置信息</p>

8
src/app/data-collection/fire-force/fire-force.component.ts

@ -1028,7 +1028,7 @@ export class FireForceComponent implements OnInit {
// 将 markers 添加到地图
this.map.add(this.newPositionMarker);
} else {
this.map.setCity('上海市');
this.map.setCity('唐山市');
}
//相关资料
data.relevantInfomationData ? this.AttachmentArr = JSON.parse(data.relevantInfomationData) : null
@ -1055,7 +1055,7 @@ export class FireForceComponent implements OnInit {
alert('获取信息错误!')
})
} else {
this.map.setCity('上海市');
this.map.setCity('唐山市');
}
//寻找管辖单位
@ -1333,7 +1333,7 @@ export class FireForceComponent implements OnInit {
// this.newPositionMarker ? this.map.remove(this.newPositionMarker) : null
// this.positionLngLat.x = 0
// this.positionLngLat.y = 0
// this.map.setCity('上海市');
// this.map.setCity('唐山市');
this.selectedFireForce.contentVerify = null
this.clearData()
}
@ -1524,7 +1524,7 @@ export class FireForceComponent implements OnInit {
this.map = MapFactory.MapInstance('container', {
zoom: 12
})
this.map.setCity('上海市');
this.map.setCity('唐山市');
//输入提示
var autoOptions = {
input: "tipinput"

4
src/app/data-collection/linkage-forces/linkage-forces.component.ts

@ -423,7 +423,7 @@ export class LinkageForcesComponent implements OnInit {
this.clearData()
this.LinkageForceDetailInfo.linkageForceType = data
this.newPositionMarker ? this.map.remove(this.newPositionMarker) : null
this.map.setCity('上海市');
this.map.setCity('唐山市');
this.LinkageForceDetailInfo.contentVerify = null
}
}
@ -539,7 +539,7 @@ export class LinkageForcesComponent implements OnInit {
this.map = MapFactory.MapInstance('container', {
zoom:12
})
this.map.setCity('上海市');
this.map.setCity('唐山市');
//输入提示
var autoOptions = {
input: "tipinput"

4
src/app/data-collection/water-collection/water-collection.component.ts

@ -430,7 +430,7 @@ export class WaterCollectionComponent implements OnInit {
this.newPositionMarker ? this.map.remove(this.newPositionMarker) : null
this.positionLngLat.x = 0
this.positionLngLat.y = 0
this.map.setCity('上海市');
this.map.setCity('唐山市');
this.clearData()
this.waterData.contentVerify = null
}
@ -543,7 +543,7 @@ export class WaterCollectionComponent implements OnInit {
this.map = MapFactory.MapInstance('container', {
zoom:12
})
this.map.setCity('上海市');
this.map.setCity('唐山市');
//输入提示
var autoOptions = {
input: "tipinput"

84
src/app/external-links-plan/external-links-plan.component.html

@ -1,73 +1,11 @@
<mat-tab-group *ngIf="planId" selectedIndex="10" style="height: 99%;">
<mat-tab label="1.基本信息">
<ng-template matTabContent>
<app-basicinfo-look></app-basicinfo-look>
</ng-template>
</mat-tab>
<mat-tab label="2.四周毗邻">
<ng-template matTabContent>
<app-allaround></app-allaround>
</ng-template>
</mat-tab>
<mat-tab label="3.消防设施">
<ng-template matTabContent>
<app-fire-fighting-device-look></app-fire-fighting-device-look>
</ng-template>
</mat-tab>
<mat-tab label="4.重点部位">
<ng-template matTabContent>
<app-key-site-look></app-key-site-look>
</ng-template>
</mat-tab>
<mat-tab label="5.功能分区">
<ng-template matTabContent>
<app-function-division-look></app-function-division-look>
</ng-template>
</mat-tab>
<mat-tab label="6.行车路线">
<ng-template matTabContent>
<app-router-gis></app-router-gis>
</ng-template>
</mat-tab>
<mat-tab label="7.周边水源及力量">
<ng-template matTabContent>
<app-water-road></app-water-road>
</ng-template>
</mat-tab>
<mat-tab label="8.实景图">
<ng-template matTabContent>
<app-realistic-picture-look></app-realistic-picture-look>
</ng-template>
</mat-tab>
<mat-tab label="9.上传CAD">
<ng-template matTabContent>
<app-uploading-cad-look></app-uploading-cad-look>
</ng-template>
</mat-tab>
<mat-tab label="10.特别警示">
<ng-template matTabContent>
<app-special-warning></app-special-warning>
</ng-template>
</mat-tab>
<mat-tab label="11.作战部署">
<ng-template matTabContent>
<div *ngIf="showType == 0">
<iframe id="inneriframe" [src]='iframeSrc' frameborder="0" style="width: 100%;height: 100%;"></iframe>
</div>
<div *ngIf="showType == 1" id="viewer"></div>
<div *ngIf="showType == 3">
<app-collection-tools></app-collection-tools>
</div>
<!-- 在线编制预案 -->
<div *ngIf="showType == 2">
<app-create-plan-online-five></app-create-plan-online-five>
</div>
</ng-template>
</mat-tab>
</mat-tab-group>
<div *ngIf="unitId">
<app-basicinfo-look></app-basicinfo-look>
</div>
<!-- 株洲项目:传入预案id显示相应预案 -->
<div *ngIf="showType == 0">
<iframe id="inneriframe" [src]='iframeSrc' frameborder="0" style="width: 100%;height: 100%;"></iframe>
</div>
<div *ngIf="showType == 1" id="viewer"></div>
<div *ngIf="showType == 2">
<iframe id="inneriframe2" [src]='threedUrl' frameborder="0" style="width: 100%;height: 100%;"></iframe>
</div>
<div *ngIf="showType == 3">
<app-collection-tools></app-collection-tools>
</div>

288
src/app/external-links-plan/external-links-plan.component.ts

@ -1,197 +1,133 @@
import { HttpClient } from "@angular/common/http";
import { Component, OnInit } from "@angular/core";
import { ActivatedRoute, Router } from "@angular/router";
import { CacheTokenService } from "../http-interceptors/cache-token.service";
import { Viewer } from "photo-sphere-viewer";
import { DomSanitizer } from "@angular/platform-browser";
import { HttpClient } from '@angular/common/http';
import { Component, OnInit } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
import { CacheTokenService } from '../http-interceptors/cache-token.service';
import { Viewer } from 'photo-sphere-viewer';
import { DomSanitizer } from '@angular/platform-browser';
declare var CryptoJS
@Component({
selector: "app-external-links-plan",
templateUrl: "./external-links-plan.component.html",
styleUrls: ["./external-links-plan.component.scss"],
selector: 'app-external-links-plan',
templateUrl: './external-links-plan.component.html',
styleUrls: ['./external-links-plan.component.scss']
})
export class ExternalLinksPlanComponent implements OnInit {
constructor(
private http: HttpClient,
private token: CacheTokenService,
public route: ActivatedRoute,
private sanitizer: DomSanitizer,
private router: Router
) {}
planId: any; //预案id
viewer; //全景图对象
fetchUrl; //预案文件地址
showType; //预案类型 1:全景图
planData; //预案信息
unitId;
constructor(private http: HttpClient, private token: CacheTokenService, public route: ActivatedRoute, private sanitizer: DomSanitizer) { }
planId: any//预案id
viewer//全景图对象
fetchUrl//预案文件地址
showType//预案类型 1:全景图
planData//预案信息
async ngOnInit(): Promise<void> {
await this.login(); //登录存储token
this.route.queryParams.subscribe((paramsData) => {
console.log(paramsData.planId)
if (paramsData.planId) {
this.planId = paramsData.planId;
this.http
.get(`/api/PlanComponents/${this.planId}`)
.subscribe((data: any) => {
console.log("单个预案详细信息", data);
sessionStorage.setItem("planId", data.id);
sessionStorage.setItem("companyId", data.companyId);
sessionStorage.setItem(
"buildingTypeId",
data.company.buildingTypes[0].id
);
sessionStorage.setItem("editable", "0");
sessionStorage.setItem("planName", data.name);
let queryParams = {};
if (data.webTextData && data.planType === 16) {
queryParams = {
id: data.companyId,
planId: data.id,
orName: data.company.organizationName,
orId: data.company.organizationId,
companyId: data.companyId,
planName: data.name,
unitName: data.companyName,
planCategory: data.planCategory,
unitTypeId: data.company.buildingTypes[0].id,
pattern: "false",
};
} else {
queryParams = {
id: data.companyId,
planId: data.id,
orName: data.company.organizationName,
orId: data.company.organizationId,
};
}
this.router.navigate([`/linksPlan`], {
queryParams: queryParams,
});
this.planData = data;
//如果是查看文件类型
console.log("data.planType", data.planType);
if (data.planType != 1 && data.planType != 2) {
this.fetchUrl = data.attachmentUrls ? data.attachmentUrls[0] : "";
var index = this.fetchUrl.indexOf("/");
// 在线编制预案
if (data.webTextData && data.planType === 16) {
this.showType = 2;
return;
}
//全景图图片
if (this.fetchUrl.substr(0, index) == "psw") {
this.showType = 1;
var obj = document.getElementById("viewer");
if (obj != null) {
obj.innerHTML = "";
}
window.setTimeout(() => {
this.viewer = new Viewer({
container: document.querySelector("#viewer"),
panorama: "/api/Objects/PlanPlatform/" + this.fetchUrl,
});
});
} else {
//word文档
this.lookWord();
}
} else {
// 如果是二三维预案
this.handleData();
await this.login()//登录存储token
this.route.queryParams.subscribe(paramsData => {
this.planId = paramsData.planId
let planId = paramsData.planId
this.http.get(`/api/PlanComponents/${planId}`).subscribe((data: any) => {
console.log('单个预案详细信息', data)
this.planData = data
if (data.planType != 1 && data.planType != 2) {
this.fetchUrl = data.attachmentUrls[0]
var index = this.fetchUrl.indexOf("\/")
if (this.fetchUrl.substr(0, index) == 'psw') {
this.showType = 1
var obj = document.getElementById('viewer')
if (obj != null) {
obj.innerHTML = ''
}
});
} else if (paramsData.unitId) {
this.http
.get(`/api/Companies/${paramsData.unitId}`)
.subscribe((data: any) => {
console.log("单位信息", data);
sessionStorage.setItem("editable", "0");
sessionStorage.setItem("companyName", data.name);
sessionStorage.setItem("companyId", data.id);
sessionStorage.setItem(
data.id,
JSON.stringify(data.companyIntegrityScore)
);
let queryParams = {
id: data.id,
usci: data.usci,
};
this.unitId = paramsData.unitId;
this.router.navigate([`/linksPlan`], {
queryParams: queryParams,
});
});
}
});
window.setTimeout(() => {
this.viewer = new Viewer({
container: document.querySelector('#viewer'),
panorama: '/api/Objects/PlanPlatform/' + this.fetchUrl,
});
})
} else {
//毕生
this.lookWord()
}
} else {
// 二维三维预案
this.handleData()
}
})
})
}
async login() {
await new Promise((resolve, reject) => {
let { appKey, signature, timestamp } = this.route.snapshot.queryParams;
if (!appKey || !signature || !timestamp) {
alert("url参数不完整");
return;
}
this.http
.get("/api/Account/VerifyAppInfo", {
params: {
appKey: appKey,
signature: signature,
timestamp: timestamp,
},
})
.subscribe((data: any) => {
sessionStorage.setItem("level", data.level);
sessionStorage.setItem("token", data.token);
sessionStorage.setItem("refreshToken", data.refreshToken);
console.log("登录成功", data);
resolve(data);
this.token.startUp();
});
});
this.http.post('/api/Account/SignIn', {
name: 'zhuzhouyuanchakan',
password: '12345678'
}).subscribe((data: any) => {
sessionStorage.setItem("level", data.level);
sessionStorage.setItem("token", data.token);
sessionStorage.setItem("refreshToken", data.refreshToken);
console.log('登录成功', data)
resolve(data)
this.token.startUp()
})
})
}
iframeSrc; //word服务器链接
iframeSrc//毕生服务器链接
src//文件存储地址
lookWord() {
this.showType = 0;
let src;
let suffix = this.fetchUrl
.split(".")
[this.fetchUrl.split(".").length - 1].toLowerCase();
if (suffix == "docx" || suffix == "doc") {
let arr = this.fetchUrl.split(".");
arr[arr.length - 1] = "pdf";
src = `/api/Objects/PlanPlatform/` + arr.join(".");
} else if (suffix == "pdf") {
src = `/api/Objects/PlanPlatform/` + this.fetchUrl;
this.showType = 0
let src
let suffix = this.fetchUrl.split('.')[this.fetchUrl.split('.').length - 1].toLowerCase()
if (suffix == 'docx' || suffix == 'doc') {
let arr = this.fetchUrl.split('.')
arr[arr.length - 1] = 'pdf'
src = `/api/Objects/PlanPlatform/` + arr.join('.')
}else if (suffix == 'pdf') {
src = `/api/Objects/PlanPlatform/` + this.fetchUrl
}
this.iframeSrc = this.sanitizer.bypassSecurityTrustResourceUrl(src);
}
companyData; //当前公司信息
thirdPartyURL;
threedUrl: any;
companyData//当前公司信息
thirdPartyURL
threedUrl: any
handleData() {
let data = this.planData;
if (this.planData.planMode == 1 || this.planData.planMode == 2) {
//预案planMode=2时, 跳查看页面组件
this.showType = 3;
} else if (this.planData.planMode == 3) {
//网页地址
let localhostPath = window.document.location.href.substring(
0,
window.document.location.href.indexOf(window.document.location.pathname)
);
let url = data.url;
if (url.indexOf(localhostPath) != -1) {
window.location.href = `${url}?unitId=${data.company.id}&unitName=${data.company.name}&editMode=false`;
} else {
window.location.href = `${url}?unitId=${data.company.id}&unitName=${data.company.name}&editMode=false`;
let data = this.planData
if (this.planData.planMode == 2) { //预案planMode=2时, 跳查看页面组件
this.http.get(`/api/Plans/${data.companyId}`).subscribe((data: any) => {
console.log(data)
data && data.company ? this.companyData = data.company : null
sessionStorage.setItem("buildingTypeId", this.companyData.buildingTypes.length ? this.companyData.buildingTypes[0].id : undefined);
sessionStorage.setItem("companyId", data.companyId);
sessionStorage.setItem("planId", this.planId);
sessionStorage.setItem("editable", '0');
sessionStorage.setItem("planName", this.planData.name)
this.showType = 3
// this.threedUrl = this.sanitizer.bypassSecurityTrustResourceUrl(`/keyUnit/viewunitinfoplans?id=${data.companyId}`)
})
} else if (this.planData.planMode == 3) { //预案planMode=3时, 第三方网址'
// this.http.get(`/api/Plans/${data.companyId}`).subscribe((data: any) => {
// data && data.company ? this.companyData = data.company : null
// this.threedUrl = this.sanitizer.bypassSecurityTrustResourceUrl(data.url)
// this.showType = 2
// })
let localhostPath = window.document.location.href.substring( 0, window.document.location.href.indexOf(window.document.location.pathname))
//localhostPath : http://39.106.78.171:8000/
let url = data.url
if(url.indexOf(localhostPath) != -1){
window.location.href = `${url}?unitId=${data.company.id}&unitName=${data.company.name}&editMode=false`
}else{
// let substr = url.split('/').splice(3,url.split('/').length)
// let port = url.split(':')[2]
// if(port.indexOf('/') != -1){
// port = port.split('/')[0]
// }
// let ip = localhostPath.split(':')
// ip.pop()
// let newurl = ip.join(':') + ":" + port + "/" + substr.join('/');
// // console.log('xxx',newurl)
// window.location.href = `${newurl}?unitId=${data.company.id}&unitName=${data.company.name}&editMode=false`
window.location.href = `${url}?unitId=${data.company.id}&unitName=${data.company.name}&editMode=false`
}
}
}

411
src/app/gis-management/gis-labeling/gis-labeling.component.html

@ -1,3 +1,4 @@
<div class="content">
<!-- <button mat-button style="position: absolute;left: 50%;top: 0;z-index: 999;" (click)="createimg()">生成图片</button> -->
<div id="map"></div>
@ -26,43 +27,35 @@
<div class="routeHeader">
<label style="bottom: 13px; left: 38px;" class="routeGISPublicIcon" (click)='clearGISRoute()'>清除路线</label>
<label style="bottom: 13px; left: 275px;" class="routeGISPublicIcon" (click)='queryGISRoute()'>查询</label>
<label style="top: 0px; right: 5px; font-size: 19px;" class="routeGISPublicIcon" (click)='closeRouteGIS()'
title="关闭">×</label>
<label style="top: 0px; right: 5px; font-size: 19px;" class="routeGISPublicIcon" (click)='closeRouteGIS()' title="关闭">×</label>
<div class="routeLeft" (click)='exchangeGISRoute()'><mat-icon>import_export</mat-icon></div>
<div class="routeContent" style="margin-top: -14px;">
<div class="routeEveryRow">
<label class="routeText"></label>
<input nz-input [(ngModel)]="routeStart" (ngModelChange)="routeChange(0)" [nzAutocomplete]="auto" />
<nz-autocomplete nzBackfill #auto>
<nz-auto-option *ngFor="let item of routeStartList" [nzValue]="item.district +' ' +item.name">
{{item.district}} {{item.name}}
</nz-auto-option>
</nz-autocomplete>
<label class="routeClear" *ngIf="routeStart"
(click)='deleteSearchGIS(0)'><mat-icon>highlight_off</mat-icon></label>
<input type="text" list="start" [(ngModel)]="routeStart" (ngModelChange)="routeChange(0)">
<datalist id="start">
<option *ngFor="let item of routeStartList" value="{{item.district}} {{item.name}}">
</datalist>
<label class="routeClear" *ngIf="routeStart" (click)='deleteSearchGIS(0)'><mat-icon>highlight_off</mat-icon></label>
</div>
<div class="routeEveryRow">
<label class="routeText"></label>
<input nz-input [(ngModel)]="routeEnd" (ngModelChange)="routeChange(1)" [nzAutocomplete]="auto2" />
<nz-autocomplete nzBackfill #auto2>
<nz-auto-option *ngFor="let item of routeEndList" [nzValue]="item.district +' ' +item.name">
{{item.district}} {{item.name}}
</nz-auto-option>
</nz-autocomplete>
<label class="routeClear" *ngIf="routeEnd"
(click)='deleteSearchGIS(1)'><mat-icon>highlight_off</mat-icon></label>
<input type="text" list="end" [(ngModel)]="routeEnd" (ngModelChange)="routeChange(1)">
<datalist id="end">
<option *ngFor="let item of routeEndList" value="{{item.district}} {{item.name}}">
</datalist>
<label class="routeClear" *ngIf="routeEnd" (click)='deleteSearchGIS(1)'><mat-icon>highlight_off</mat-icon></label>
</div>
</div>
</div>
<div class="routeCenter" *ngIf="routes.steps.length">
<div style="text-align: center;">
<button class="routeType" [ngClass]="{'selectRouteType': selectType}" (click)='toggleRoute(true)'>推荐方案</button>
<button class="routeType" [ngClass]="{'selectRouteType': !selectType}"
(click)='toggleRoute(false)'>躲避拥堵</button>
<button class="routeType" [ngClass]="{'selectRouteType': !selectType}" (click)='toggleRoute(false)'>躲避拥堵</button>
</div>
<div class="routeTypeExplain" style="text-align: center; font-weight: 550;">
<label>约{{ routes.time / 60 | number:'0.0-0' }}分钟</label>
<label>{{ routes.distance / 1000 | number:'0.1-1' }}公里</label>
<label>约{{ routes.time / 60 | number:'0.0-0' }}分钟</label>
<label>{{ routes.distance / 1000 | number:'0.1-1' }}公里</label>
</div>
<div class="routeTypeExplain" style="color: rgb(176, 180, 184); margin-top: -10px;">
<label>途径</label>
@ -71,8 +64,7 @@
<div class="routeCenterTB" title="{{routeStart}}">
<p style="background-color: #0080FF;"></p><label style="font-weight: 550;">{{routeStart}}</label>
</div>
<div class="routeCenterTB" *ngFor="let item of routes.steps" style="border-bottom: 1px solid rgb(223, 212, 212);"
title="{{item.instruction}}">
<div class="routeCenterTB" *ngFor="let item of routes.steps" style="border-bottom: 1px solid rgb(223, 212, 212);" title="{{item.instruction}}">
<p class="orientation" *ngIf="item.orientation == '西'"></p>
<p class="orientation" *ngIf="item.orientation == '北'"></p>
<p class="orientation" *ngIf="item.orientation == '东'"></p>
@ -89,218 +81,207 @@
</div>
</div>
<!-- 导航路线 -->
<!-- 左侧 -->
<div class="leftDiv" [ngClass]="{'leftDivShow': leftDivState,'leftDivHide': !leftDivState}">
<app-left-working style="width: 100%;height: 100%;" (onCustomEvent)="closeDiv()" #appLeft></app-left-working>
</div>
<img *ngIf="showLeftDiv" id="leftHide" class="leftHide publicButton" title="隐藏"
[ngClass]="{'leftDivShow': leftDivState,'leftDivHide': !leftDivState}" (click)='toggleLeft(false)'
src="../../../assets//images/showhide.png" alt="">
<img class="leftShow publicButton" title="显示" *ngIf="!leftDivState && showLeftDiv" (click)='toggleLeft(true)'
src="../../../assets//images/showhide.png" alt="">
<img *ngIf="showLeftDiv" id="leftHide" class="leftHide publicButton" title="隐藏" [ngClass]="{'leftDivShow': leftDivState,'leftDivHide': !leftDivState}" (click)='toggleLeft(false)' src="../../../assets//images/showhide.png" alt="">
<img class="leftShow publicButton" title="显示" *ngIf="!leftDivState && showLeftDiv" (click)='toggleLeft(true)' src="../../../assets//images/showhide.png" alt="">
<!-- 左侧 -->
<!-- 右上角 -->
<div class="rightTopBox">
<!-- <button (click)="setMaxZoom()">设置聚合范围</button> -->
<div class="topbox">
<div (click)="clickTitle(key)" *ngFor="let item of titleList;let key = index" class="titleItem"
[ngClass]="{'selectedItem': key == selectedTitle}">
<img [src]="item.iconImg" alt="">
<span>{{item.name}}</span>
<!-- <button (click)="setMaxZoom()">设置聚合范围</button> -->
<div class="topbox">
<div (click)="clickTitle(key)" *ngFor="let item of titleList;let key = index" class="titleItem" [ngClass]="{'selectedItem': key == selectedTitle}">
<img [src]="item.iconImg" alt="">
<span>{{item.name}}</span>
</div>
</div>
</div>
<div class="contantbox">
<div *ngIf="selectedTitle == 0" class="keyUnitBox">
<form [formGroup]="keyUnitForm" class="inputList" (submit)='ketUnitSubmit(keyUnitForm.value)'>
<div style="display: flex;justify-content: space-between;align-items: center;">
<mat-checkbox color="primary" formControlName="allSelectedUnit"
(change)="selectedAllUnit($event)">全选</mat-checkbox>
<mat-icon (click)="closertdiv()">clear</mat-icon>
</div>
<div class="inputItem">
<mat-checkbox *ngFor="let unit of units.controls;let i = index" color="primary" [formControl]="unit">
{{keyUnitList[i].name}}
</mat-checkbox>
</div>
<div class="btnbox">
<div>
<span>显示范围 : </span>
<mat-form-field>
<select matNativeControl formControlName="areaUnit" [(ngModel)]="unitAreaDefault">
<option value="-1">全部</option>
<option value="0">当前视野范围</option>
<option value="200">200米</option>
<option value="500">500米</option>
<option value="1000">1000米</option>
<option value="1500">1500米</option>
<option value="2000">2000米</option>
<option value="2500">2500米</option>
<option value="3000">3000米</option>
<option value="4000">4000米</option>
<option value="5000">5000米</option>
</select>
</mat-form-field>
<div class="contantbox">
<div *ngIf="selectedTitle == 0" class="keyUnitBox">
<form [formGroup]="keyUnitForm" class="inputList" (submit)='ketUnitSubmit(keyUnitForm.value)'>
<div style="display: flex;justify-content: space-between;align-items: center;">
<mat-checkbox color="primary" formControlName="allSelectedUnit" (change)="selectedAllUnit($event)">全选</mat-checkbox>
<mat-icon (click)="closertdiv()">clear</mat-icon>
</div>
<button class="submit" id="submit">确定</button>
<button class="cancel" type="button" (click)="resetUnit()">取消显示</button>
</div>
</form>
</div>
<div *ngIf="selectedTitle == 1" class="waterBox">
<form [formGroup]="watertForm" class="inputList" (submit)='waterSubmit(watertForm.value)'>
<div style="display: flex;justify-content: space-between;align-items: center;">
<mat-checkbox color="primary" formControlName="allSelectedWater"
(change)="selectedAllWater($event)">全选</mat-checkbox>
<mat-icon (click)="closertdiv()">clear</mat-icon>
</div>
<div class="inputItem">
<mat-checkbox *ngFor="let water of waters.controls;let i = index" color="primary" [formControl]="water">
{{waterList[i].name}}
</mat-checkbox>
</div>
<div class="btnbox">
<div>
<span>显示范围 : </span>
<mat-form-field>
<select matNativeControl formControlName="areaWater" [(ngModel)]="waterAreaDefault">
<option value="-1">全部</option>
<option value="0">当前视野范围</option>
<option value="200">200米</option>
<option value="500">500米</option>
<option value="1000">1000米</option>
<option value="1500">1500米</option>
<option value="2000">2000米</option>
<option value="2500">2500米</option>
<option value="3000">3000米</option>
<option value="4000">4000米</option>
<option value="5000">5000米</option>
</select>
</mat-form-field>
<div class="inputItem">
<mat-checkbox *ngFor="let unit of units.controls;let i = index" color="primary" [formControl]="unit">
{{keyUnitList[i].name}}
</mat-checkbox>
</div>
<button class="submit" id="submit2">确定</button>
<button class="cancel" type="button" (click)="resetWater()">取消显示</button>
</div>
</form>
</div>
<div *ngIf="selectedTitle == 2" class="fireForceBox">
<form [formGroup]="fireForceForm" class="inputList" (submit)='fireForceSubmit(fireForceForm.value)'>
<div style="display: flex;justify-content: space-between;align-items: center;">
<mat-checkbox color="primary" formControlName="allSelectedFireForce"
(change)="selectedAllFireForce($event)">全选</mat-checkbox>
<mat-icon (click)="closertdiv()">clear</mat-icon>
</div>
<div class="inputItem">
<mat-checkbox *ngFor="let fire of fireForce.controls;let i = index" color="primary" [formControl]="fire">
{{fireForceList[i].name}}
</mat-checkbox>
</div>
<div class="btnbox">
<div>
<span>显示范围 : </span>
<mat-form-field>
<select matNativeControl formControlName="areaFireForce" [(ngModel)]="fireForceAreaDefault">
<option value="-1">全部</option>
<option value="0">当前视野范围</option>
<option value="200">200米</option>
<option value="500">500米</option>
<option value="1000">1000米</option>
<option value="1500">1500米</option>
<option value="2000">2000米</option>
<option value="2500">2500米</option>
<option value="3000">3000米</option>
<option value="4000">4000米</option>
<option value="5000">5000米</option>
</select>
</mat-form-field>
<div class="btnbox">
<div>
<span>显示范围 : </span>
<mat-form-field>
<select matNativeControl formControlName="areaUnit" [(ngModel)]="unitAreaDefault">
<option value="-1">全部</option>
<option value="0">当前视野范围</option>
<option value="200">200米</option>
<option value="500">500米</option>
<option value="1000">1000米</option>
<option value="1500">1500米</option>
<option value="2000">2000米</option>
<option value="2500">2500米</option>
<option value="3000">3000米</option>
<option value="4000">4000米</option>
<option value="5000">5000米</option>
</select>
</mat-form-field>
</div>
<button class="submit" id="submit">确定</button>
<button class="cancel" type="button" (click)="resetUnit()">取消显示</button>
</div>
<button class="submit" id="submit3">确定</button>
<button class="cancel" type="button" (click)="resetFireForce()">取消显示</button>
</div>
</form>
</div>
<div *ngIf="selectedTitle == 3" class="linkageForcesBox">
<form [formGroup]="linkageForcesForm" class="inputList" (submit)='linkageForcesSubmit(linkageForcesForm.value)'>
<div style="display: flex;justify-content: space-between;align-items: center;">
<mat-checkbox color="primary" formControlName="allSelectedLinkageForces"
(change)="selectedAllLinkageForces($event)">全选</mat-checkbox>
<mat-icon (click)="closertdiv()">clear</mat-icon>
</div>
<div class="inputItem">
<mat-checkbox *ngFor="let linkage of linkageForces.controls;let i = index" color="primary"
[formControl]="linkage">
{{linkageForcesList[i].name}}
</mat-checkbox>
</div>
<div class="btnbox">
<div>
<span>显示范围 : </span>
<mat-form-field>
<select matNativeControl formControlName="areaLinkageForces" [(ngModel)]="linkageForcesAreaDefault">
<option value="-1">全部</option>
<option value="0">当前视野范围</option>
<option value="200">200米</option>
<option value="500">500米</option>
<option value="1000">1000米</option>
<option value="1500">1500米</option>
<option value="2000">2000米</option>
<option value="2500">2500米</option>
<option value="3000">3000米</option>
<option value="4000">4000米</option>
<option value="5000">5000米</option>
</select>
</mat-form-field>
</form>
</div>
<div *ngIf="selectedTitle == 1" class="waterBox">
<form [formGroup]="watertForm" class="inputList" (submit)='waterSubmit(watertForm.value)'>
<div style="display: flex;justify-content: space-between;align-items: center;">
<mat-checkbox color="primary" formControlName="allSelectedWater" (change)="selectedAllWater($event)">全选</mat-checkbox>
<mat-icon (click)="closertdiv()">clear</mat-icon>
</div>
<button class="submit" id="submit4">确定</button>
<button class="cancel" type="button" (click)="resetLinkageForces()">取消显示</button>
</div>
</form>
</div>
<div *ngIf="selectedTitle == 4" class="distanceBox">
<div>
<input type="radio" name='func' [(ngModel)]="checkRadio" value='rule' (click)="measure('rule')" checked><span
class="input-text" style="margin-right: 15px;">&nbsp;距离测量</span>
<input type="radio" name='func' [(ngModel)]="checkRadio" value='measureArea'
(click)="measure('measureArea')"><span class="input-text"> &nbsp;面积测量</span>
<div class="inputItem">
<mat-checkbox *ngFor="let water of waters.controls;let i = index" color="primary" [formControl]="water">
{{waterList[i].name}}
</mat-checkbox>
</div>
<div class="btnbox">
<div>
<span>显示范围 : </span>
<mat-form-field>
<select matNativeControl formControlName="areaWater" [(ngModel)]="waterAreaDefault">
<option value="-1">全部</option>
<option value="0">当前视野范围</option>
<option value="200">200米</option>
<option value="500">500米</option>
<option value="1000">1000米</option>
<option value="1500">1500米</option>
<option value="2000">2000米</option>
<option value="2500">2500米</option>
<option value="3000">3000米</option>
<option value="4000">4000米</option>
<option value="5000">5000米</option>
</select>
</mat-form-field>
</div>
<button class="submit" id="submit2">确定</button>
<button class="cancel" type="button" (click)="resetWater()">取消显示</button>
</div>
</form>
</div>
<button class="clearbutton" (click)="clearnAll()">清除</button>
</div>
<div *ngIf="selectedTitle == 5" class="coverageBox">
<div class="topbox">
<span>图层</span>
<div style="display: flex;align-items: center;">
<mat-slide-toggle [(ngModel)]="satelliteModel" (change)='satelliteChange($event)' color="primary"
labelPosition='before' style="margin-right: 25px;">卫星图层</mat-slide-toggle>
<mat-slide-toggle [(ngModel)]="loadModel" (change)='loadChange($event)' color="primary"
labelPosition='before'>路网图层</mat-slide-toggle>
<mat-icon (click)="closertdiv()" style="margin-left: 10px;">clear</mat-icon>
<div *ngIf="selectedTitle == 2" class="fireForceBox">
<form [formGroup]="fireForceForm" class="inputList" (submit)='fireForceSubmit(fireForceForm.value)'>
<div style="display: flex;justify-content: space-between;align-items: center;">
<mat-checkbox color="primary" formControlName="allSelectedFireForce" (change)="selectedAllFireForce($event)">全选</mat-checkbox>
<mat-icon (click)="closertdiv()">clear</mat-icon>
</div>
<div class="inputItem">
<mat-checkbox *ngFor="let fire of fireForce.controls;let i = index" color="primary" [formControl]="fire">
{{fireForceList[i].name}}
</mat-checkbox>
</div>
<div class="btnbox">
<div>
<span>显示范围 : </span>
<mat-form-field>
<select matNativeControl formControlName="areaFireForce" [(ngModel)]="fireForceAreaDefault">
<option value="-1">全部</option>
<option value="0">当前视野范围</option>
<option value="200">200米</option>
<option value="500">500米</option>
<option value="1000">1000米</option>
<option value="1500">1500米</option>
<option value="2000">2000米</option>
<option value="2500">2500米</option>
<option value="3000">3000米</option>
<option value="4000">4000米</option>
<option value="5000">5000米</option>
</select>
</mat-form-field>
</div>
<button class="submit" id="submit3">确定</button>
<button class="cancel" type="button" (click)="resetFireForce()">取消显示</button>
</div>
</form>
</div>
<div *ngIf="selectedTitle == 3" class="linkageForcesBox">
<form [formGroup]="linkageForcesForm" class="inputList" (submit)='linkageForcesSubmit(linkageForcesForm.value)'>
<div style="display: flex;justify-content: space-between;align-items: center;">
<mat-checkbox color="primary" formControlName="allSelectedLinkageForces" (change)="selectedAllLinkageForces($event)">全选</mat-checkbox>
<mat-icon (click)="closertdiv()">clear</mat-icon>
</div>
<div class="inputItem">
<mat-checkbox *ngFor="let linkage of linkageForces.controls;let i = index" color="primary" [formControl]="linkage">
{{linkageForcesList[i].name}}
</mat-checkbox>
</div>
<div class="btnbox">
<div>
<span>显示范围 : </span>
<mat-form-field>
<select matNativeControl formControlName="areaLinkageForces" [(ngModel)]="linkageForcesAreaDefault">
<option value="-1">全部</option>
<option value="0">当前视野范围</option>
<option value="200">200米</option>
<option value="500">500米</option>
<option value="1000">1000米</option>
<option value="1500">1500米</option>
<option value="2000">2000米</option>
<option value="2500">2500米</option>
<option value="3000">3000米</option>
<option value="4000">4000米</option>
<option value="5000">5000米</option>
</select>
</mat-form-field>
</div>
<button class="submit" id="submit4">确定</button>
<button class="cancel" type="button" (click)="resetLinkageForces()">取消显示</button>
</div>
</form>
</div>
<div *ngIf="selectedTitle == 4" class="distanceBox">
<div>
<input type="radio" name='func' [(ngModel)]="checkRadio" value='rule' (click)="measure('rule')" checked><span class="input-text" style="margin-right: 15px;">&nbsp;距离测量</span>
<input type="radio" name='func' [(ngModel)]="checkRadio" value='measureArea' (click)="measure('measureArea')"><span class="input-text"> &nbsp;面积测量</span>
</div>
<button class="clearbutton" (click)="clearnAll()">清除</button>
</div>
<div class="contantbox">
<div [ngClass]="{'selectedPattern': mapPattern}">
<img src="../../../assets/images/2D.jpg" alt="" (click)="mapPatternChange('2D')">
<span> 2D </span>
<div *ngIf="selectedTitle == 5" class="coverageBox">
<div class="topbox">
<span>图层</span>
<div style="display: flex;align-items: center;">
<mat-slide-toggle [(ngModel)]="satelliteModel" (change)='satelliteChange($event)' color="primary" labelPosition='before' style="margin-right: 25px;">卫星图层</mat-slide-toggle>
<mat-slide-toggle [(ngModel)]="loadModel" (change)='loadChange($event)' color="primary" labelPosition='before'>路网图层</mat-slide-toggle>
<mat-icon (click)="closertdiv()" style="margin-left: 10px;">clear</mat-icon>
</div>
</div>
<div [ngClass]="{'selectedPattern': !mapPattern}">
<img src="../../../assets/images/3D.jpg" alt="" (click)="mapPatternChange('3D')">
<span> 3D </span>
<div class="contantbox">
<div [ngClass]="{'selectedPattern': mapPattern}">
<img src="../../../assets/images/2D.jpg" alt="" (click)="mapPatternChange('2D')">
<span> 2D </span>
</div>
<div [ngClass]="{'selectedPattern': !mapPattern}">
<img src="../../../assets/images/3D.jpg" alt="" (click)="mapPatternChange('3D')">
<span> 3D </span>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<!-- 右上角 -->
</div>
</div>

3907
src/app/gis-management/gis-labeling/gis-labeling.component.ts

File diff suppressed because it is too large Load Diff

267
src/app/gis-management/gis-management.module.ts

@ -1,154 +1,121 @@
import { NgModule } from "@angular/core";
import { CommonModule } from "@angular/common";
import {
DownloadFile,
GisLabelingComponent,
LookPlanDialog,
ShareUrlDialog,
} from "./gis-labeling/gis-labeling.component";
import { A11yModule } from "@angular/cdk/a11y";
import { DragDropModule } from "@angular/cdk/drag-drop";
import { PortalModule } from "@angular/cdk/portal";
import { ScrollingModule } from "@angular/cdk/scrolling";
import { CdkStepperModule } from "@angular/cdk/stepper";
import { CdkTableModule } from "@angular/cdk/table";
import { CdkTreeModule } from "@angular/cdk/tree";
import { MatAutocompleteModule } from "@angular/material/autocomplete";
import { MatBadgeModule } from "@angular/material/badge";
import { MatBottomSheetModule } from "@angular/material/bottom-sheet";
import { MatButtonModule } from "@angular/material/button";
import { MatButtonToggleModule } from "@angular/material/button-toggle";
import { MatCardModule } from "@angular/material/card";
import { MatCheckboxModule } from "@angular/material/checkbox";
import { MatChipsModule } from "@angular/material/chips";
import { MatStepperModule } from "@angular/material/stepper";
import { MatDatepickerModule } from "@angular/material/datepicker";
import { MatDialogModule } from "@angular/material/dialog";
import { MatDividerModule } from "@angular/material/divider";
import { MatExpansionModule } from "@angular/material/expansion";
import { MatGridListModule } from "@angular/material/grid-list";
import { MatIconModule } from "@angular/material/icon";
import { MatInputModule } from "@angular/material/input";
import { MatListModule } from "@angular/material/list";
import { MatMenuModule } from "@angular/material/menu";
import {
MatNativeDateModule,
MatRippleModule,
MatOption,
} from "@angular/material/core";
import { MatPaginatorModule } from "@angular/material/paginator";
import { MatProgressBarModule } from "@angular/material/progress-bar";
import { MatProgressSpinnerModule } from "@angular/material/progress-spinner";
import { MatRadioModule } from "@angular/material/radio";
import { MatSelectModule } from "@angular/material/select";
import { MatSidenavModule } from "@angular/material/sidenav";
import { MatSliderModule } from "@angular/material/slider";
import { MatSlideToggleModule } from "@angular/material/slide-toggle";
import { MatSnackBarModule } from "@angular/material/snack-bar";
import { MatSortModule } from "@angular/material/sort";
import { MatTableModule } from "@angular/material/table";
import { MatTabsModule } from "@angular/material/tabs";
import { MatToolbarModule } from "@angular/material/toolbar";
import { MatTooltipModule } from "@angular/material/tooltip";
import { MatTreeModule } from "@angular/material/tree";
import { FormsModule, ReactiveFormsModule } from "@angular/forms";
import { GisRoutingModule } from "./gis-management-routing.module";
import { LeftWorkingComponent } from "./left-working/left-working.component";
import { BasicInfoComponent } from "./basic-info/basic-info.component";
import { FunctionPartitionComponent } from "./function-partition/function-partition.component";
import { FireFacilitiesComponent } from "./fire-facilities/fire-facilities.component";
import { ImagesData2 } from "./fire-facilities/imagesdata.component";
import { AllaroundComponent } from "./allaround/allaround.component";
import { ImgDetails } from "./allaround/imgdetails.component";
import { KeySiteLookComponent } from "./key-site-look/key-site.component";
import { KeySiteImgs2 } from "./key-site-look/keysiteimgs.component";
import { RealisticPictureLookComponent } from "./realistic-picture-look/realistic-picture.component";
import { previewImg3 } from "./realistic-picture-look/realistic-picture.component";
import {
OpenPlanToolDialog,
PlanListComponent,
} from "./plan-list/plan-list.component";
import { PlanManagementModule } from "../plan-management/plan-management.module";
import { UiModule } from "../ui/ui.module";
import { CadDrawComponent } from "./cad-draw/cad-draw.component";
import { previewBigImg2 } from "./fire-facilities/imagesdata.component";
import { NzAutocompleteModule } from "ng-zorro-antd/auto-complete";
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { DownloadFile, GisLabelingComponent, LookPlanDialog, ShareUrlDialog } from './gis-labeling/gis-labeling.component';
import {A11yModule} from '@angular/cdk/a11y';
import {DragDropModule} from '@angular/cdk/drag-drop';
import {PortalModule} from '@angular/cdk/portal';
import {ScrollingModule} from '@angular/cdk/scrolling';
import {CdkStepperModule} from '@angular/cdk/stepper';
import {CdkTableModule} from '@angular/cdk/table';
import {CdkTreeModule} from '@angular/cdk/tree';
import {MatAutocompleteModule} from '@angular/material/autocomplete';
import {MatBadgeModule} from '@angular/material/badge';
import {MatBottomSheetModule} from '@angular/material/bottom-sheet';
import {MatButtonModule} from '@angular/material/button';
import {MatButtonToggleModule} from '@angular/material/button-toggle';
import {MatCardModule} from '@angular/material/card';
import {MatCheckboxModule} from '@angular/material/checkbox';
import {MatChipsModule} from '@angular/material/chips';
import {MatStepperModule} from '@angular/material/stepper';
import {MatDatepickerModule} from '@angular/material/datepicker';
import {MatDialogModule} from '@angular/material/dialog';
import {MatDividerModule} from '@angular/material/divider';
import {MatExpansionModule} from '@angular/material/expansion';
import {MatGridListModule} from '@angular/material/grid-list';
import {MatIconModule} from '@angular/material/icon';
import {MatInputModule} from '@angular/material/input';
import {MatListModule} from '@angular/material/list';
import {MatMenuModule} from '@angular/material/menu';
import {MatNativeDateModule, MatRippleModule, MatOption} from '@angular/material/core';
import {MatPaginatorModule} from '@angular/material/paginator';
import {MatProgressBarModule} from '@angular/material/progress-bar';
import {MatProgressSpinnerModule} from '@angular/material/progress-spinner';
import {MatRadioModule} from '@angular/material/radio';
import {MatSelectModule} from '@angular/material/select';
import {MatSidenavModule} from '@angular/material/sidenav';
import {MatSliderModule} from '@angular/material/slider';
import {MatSlideToggleModule} from '@angular/material/slide-toggle';
import {MatSnackBarModule} from '@angular/material/snack-bar';
import {MatSortModule} from '@angular/material/sort';
import {MatTableModule} from '@angular/material/table';
import {MatTabsModule} from '@angular/material/tabs';
import {MatToolbarModule} from '@angular/material/toolbar';
import {MatTooltipModule} from '@angular/material/tooltip';
import {MatTreeModule} from '@angular/material/tree';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { GisRoutingModule } from './gis-management-routing.module';
import { LeftWorkingComponent } from './left-working/left-working.component';
import { BasicInfoComponent } from './basic-info/basic-info.component';
import { FunctionPartitionComponent } from './function-partition/function-partition.component';
import { FireFacilitiesComponent } from './fire-facilities/fire-facilities.component';
import {ImagesData2}from './fire-facilities/imagesdata.component'
import {AllaroundComponent} from './allaround/allaround.component'
import {ImgDetails}from './allaround/imgdetails.component';
import {KeySiteLookComponent} from './key-site-look/key-site.component'
import {KeySiteImgs2}from './key-site-look/keysiteimgs.component'
import {RealisticPictureLookComponent} from './realistic-picture-look/realistic-picture.component'
import {previewImg3} from './realistic-picture-look/realistic-picture.component'
import { OpenPlanToolDialog, PlanListComponent } from './plan-list/plan-list.component';
import { PlanManagementModule } from '../plan-management/plan-management.module';
import { UiModule } from '../ui/ui.module';
import { CadDrawComponent } from './cad-draw/cad-draw.component';
import {previewBigImg2} from './fire-facilities/imagesdata.component'
@NgModule({
declarations: [
GisLabelingComponent,
LeftWorkingComponent,
FunctionPartitionComponent,
RealisticPictureLookComponent,
previewImg3,
previewBigImg2,
FireFacilitiesComponent,
ImagesData2,
AllaroundComponent,
ImgDetails,
KeySiteLookComponent,
KeySiteImgs2,
BasicInfoComponent,
FunctionPartitionComponent,
ShareUrlDialog,
PlanListComponent,
LookPlanDialog,
DownloadFile,
OpenPlanToolDialog,
CadDrawComponent,
],
declarations: [GisLabelingComponent, LeftWorkingComponent, FunctionPartitionComponent, RealisticPictureLookComponent,previewImg3,previewBigImg2,
FireFacilitiesComponent,ImagesData2,AllaroundComponent,ImgDetails,KeySiteLookComponent,KeySiteImgs2,BasicInfoComponent,FunctionPartitionComponent,ShareUrlDialog, PlanListComponent,LookPlanDialog,DownloadFile,OpenPlanToolDialog, CadDrawComponent],
imports: [
CommonModule,
CommonModule,
GisRoutingModule,
A11yModule,
CdkStepperModule,
CdkTableModule,
CdkTreeModule,
DragDropModule,
MatAutocompleteModule,
MatBadgeModule,
MatBottomSheetModule,
MatButtonModule,
MatButtonToggleModule,
MatCardModule,
MatCheckboxModule,
MatChipsModule,
MatStepperModule,
MatDatepickerModule,
MatDialogModule,
MatDividerModule,
MatExpansionModule,
MatGridListModule,
MatIconModule,
MatInputModule,
MatListModule,
MatMenuModule,
MatNativeDateModule,
MatPaginatorModule,
MatProgressBarModule,
MatProgressSpinnerModule,
MatRadioModule,
MatRippleModule,
MatSelectModule,
MatSidenavModule,
MatSliderModule,
MatSlideToggleModule,
MatSnackBarModule,
MatSortModule,
MatTableModule,
MatTabsModule,
MatToolbarModule,
MatTooltipModule,
MatTreeModule,
PortalModule,
ScrollingModule,
FormsModule,
ReactiveFormsModule,
PlanManagementModule,
UiModule,
NzAutocompleteModule,
],
imports: [
CommonModule,
CommonModule,
GisRoutingModule,
A11yModule,
CdkStepperModule,
CdkTableModule,
CdkTreeModule,
DragDropModule,
MatAutocompleteModule,
MatBadgeModule,
MatBottomSheetModule,
MatButtonModule,
MatButtonToggleModule,
MatCardModule,
MatCheckboxModule,
MatChipsModule,
MatStepperModule,
MatDatepickerModule,
MatDialogModule,
MatDividerModule,
MatExpansionModule,
MatGridListModule,
MatIconModule,
MatInputModule,
MatListModule,
MatMenuModule,
MatNativeDateModule,
MatPaginatorModule,
MatProgressBarModule,
MatProgressSpinnerModule,
MatRadioModule,
MatRippleModule,
MatSelectModule,
MatSidenavModule,
MatSliderModule,
MatSlideToggleModule,
MatSnackBarModule,
MatSortModule,
MatTableModule,
MatTabsModule,
MatToolbarModule,
MatTooltipModule,
MatTreeModule,
PortalModule,
ScrollingModule,
FormsModule,
ReactiveFormsModule,
PlanManagementModule,
UiModule
]
})
export class GISManagementModule {}
export class GISManagementModule { }

22
src/app/http-interceptors/base-interceptor.ts

@ -5,8 +5,8 @@ import {
} from '@angular/common/http';
import { throwError } from 'rxjs'
import { catchError, retry } from 'rxjs/operators';
import { Router, ActivatedRoute } from '@angular/router'
import { CacheTokenService } from './cache-token.service'
import { Router,ActivatedRoute } from '@angular/router'
import {CacheTokenService} from './cache-token.service'
import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar';
//baseurl
@ -15,19 +15,19 @@ import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar';
@Injectable()
export class BaseInterceptor implements HttpInterceptor {
constructor(private http: HttpClient, private router: Router, private route: ActivatedRoute, public token: CacheTokenService, public snackBar: MatSnackBar) { }
constructor(private http:HttpClient,private router:Router,private route:ActivatedRoute,public token:CacheTokenService,public snackBar: MatSnackBar) {}
intercept(req, next: HttpHandler) {
let newReq = req.clone({
url: req.hadBaseurl ? `${req.url}` : `${req.url}`,
});
if (!req.cancelToken) {
if(!req.cancelToken) {
/*获取token*/
let token = sessionStorage.getItem("token")
/*此处设置额外请求头,token令牌*/
newReq.headers =
newReq.headers.set('Authorization', `Bearer ${token}`)
newReq.headers.set('Authorization', `Bearer ${token}`)
}
// 携带请求头发送下一次请求
@ -43,7 +43,7 @@ export class BaseInterceptor implements HttpInterceptor {
private handleError(error: HttpErrorResponse) {
// 用户认证失败返回登录页
if (error.status === 401 || error.status === 614) {
if (error.status === 401||error.status === 614) {
this.token.delete()
sessionStorage.clear()
window.localStorage.clear()
@ -51,19 +51,19 @@ export class BaseInterceptor implements HttpInterceptor {
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('用户认证信息过期,请重新登录', '确定', config);
this.snackBar.open('用户认证信息过期,请重新登录','确定',config);
}
if (error.status === 403) {
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('对不起,您无此权限', '确定', config);
this.snackBar.open('对不起,您无此权限','确定',config);
}
if (error.status === 400) {
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('请核对您的输入格式是否正确', '确定', config);
this.snackBar.open('请核对您的输入格式是否正确','确定',config);
}
if (error.error instanceof ErrorEvent) {
@ -72,7 +72,9 @@ export class BaseInterceptor implements HttpInterceptor {
} else {
// 服务端返回http状态码
// 服务端返回错误信息
console.error(error);
console.error(
`Backend returned code ${error.status}, ` +
`body was: ${error.error}`);
}
// 返回带有面向用户的错误信息
return throwError(

50
src/app/http-interceptors/cache-token.service.ts

@ -1,34 +1,40 @@
import { Injectable } from "@angular/core";
import { HttpClient } from "@angular/common/http";
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http'
@Injectable({
providedIn: "root",
providedIn: 'root'
})
export class CacheTokenService {
constructor(private http: HttpClient) {}
constructor(private http:HttpClient) { }
public timer;
//刷新token令牌定时器
startUp = (): void => {
window.clearInterval(this.timer); //清一遍定时器
this.timer = window.setInterval(() => {
startUp = ():void=>{
window.clearInterval(this.timer) //清一遍定时器
this.timer = window.setInterval(()=>{
var token = sessionStorage.getItem("token");
var refreshToken = sessionStorage.getItem("refreshToken");
this.http
.post("/api/Account/RefreshToken", {
token: token,
refreshToken: refreshToken,
})
.subscribe((data: any) => {
sessionStorage.setItem("level", data.level);
sessionStorage.setItem("token", data.token);
sessionStorage.setItem("refreshToken", data.refreshToken);
});
}, 5 * 60 * 1000);
};
this.http.post('/api/Account/RefreshToken', {
token: token,
refreshToken: refreshToken
}).subscribe((data:any) => {
sessionStorage.setItem("level",data.level);
sessionStorage.setItem("token",data.token);
sessionStorage.setItem("refreshToken",data.refreshToken);
})
},18*60*1000)
}
//删除定时器
delete = (): void => {
window.clearInterval(this.timer);
};
delete = ():void=> {
window.clearInterval(this.timer)
}
}

149
src/app/interface.ts

@ -1,102 +1,93 @@
/*
* @Descripttion:
* @version:
* @Descripttion:
* @version:
* @Author: sueRimn
* @Date: 2020-12-24 10:59:48
* @LastEditors: sueRimn
* @LastEditTime: 2021-04-09 17:12:59
*/
export interface Data {
token: string;
refreshToken: string;
expires: number;
realName: string;
level: any;
isDefaultPassword: string;
token:string,
refreshToken:string,
expires: number,
realName:string,
level:any,
isDefaultPassword:string
}
export interface windows {
token: string;
token:string
}
export enum isno {
"是",
"否",
"是",
"否"
}
export enum PlanTypeEnum {
"zero",
"二维预案",
"三维预案",
"three",
"其他预案",
"five",
"six",
"seven",
"卡片预案",
"none",
"teen",
"shiyi",
"shier",
"shisan",
"shisi",
"shiwu",
"文本预案",
"zero",
"二维预案",
"三维预案",
"three",
"其他预案",
"five",
"six",
"seven",
"卡片预案",
"none",
"teen",
"shiyi",
"shier",
"shisan",
"shisi",
"shiwu",
"文本预案"
}
export enum AuditStatusEnum {
"zero",
"审核中",
"审核通过",
"two",
"终审退回",
"five",
"six",
"seven",
"未提交审核",
"nine",
"ten",
"eleven",
"twelve",
"thieteen",
"fourteen",
"fifteen",
"待终审",
"shiqi",
"shiba",
"shijiu",
"ershi",
"ershiyi",
"ershier",
"ershis",
"t1",
"t2",
"t3",
"t4",
"t5",
"t6",
"t7",
"t8",
"初审退回",
"zero",
"审核中",
"审核通过",
"two",
"终审退回",
"five",
"six",
"seven",
"未提交审核",
"nine",
"ten",
"eleven",
"twelve",
"thieteen",
"fourteen",
"fifteen",
"待终审",
"shiqi",
"shiba",
"shijiu",
"ershi",
"ershiyi",
"ershier",
"ershis",
"t1",
"t2",
"t3",
"t4",
"t5",
"t6",
"t7",
"t8",
"初审退回",
}
export enum PlanLevelEnum {
"编制级别0",
"总队",
"支队",
"编制级别3",
"大队",
"编制级别5",
"编制级别6",
"编制级别7",
"中队",
"编制级别0",
"总队",
"支队",
"编制级别3",
"大队",
"编制级别5",
"编制级别6",
"编制级别7",
"中队"
}
export enum PlanAuditStatusEnum {
"非审核状态" = 0,
"未提交审核" = 8,
"待审核" = 1,
"初审通过" = 16,
"初审退回" = 32,
"终审通过" = 2,
"终审退回" = 4,
}

7
src/app/key-unit/basicinfo/basicinfo.component.html

@ -51,7 +51,8 @@
<span>联系电话:</span>
<mat-form-field>
<input type="number" matInput id="linkphone" name="linkphone" #linkphone="ngModel"
required [(ngModel)]="unitinfo.phone" (focus)="closeorganizationbox()">
required
[(ngModel)]="unitinfo.phone" (focus)="closeorganizationbox()">
</mat-form-field>
<!-- <div *ngIf="linkphone.invalid && (linkphone.dirty || linkphone.touched)"
class="alert-danger">
@ -262,7 +263,7 @@
(click)="removeline(element.propertyInfos)">
<mat-icon>remove_circle_outline</mat-icon>
</button>
{{item.propertyName}}{{item.physicalUnit? '('+item.physicalUnit+')' : ''}}
{{item.propertyName}}
<span style="color: red;" *ngIf="item.required">*</span>
</th>
</tr>
@ -368,7 +369,7 @@
(click)="removeline(element.propertyInfos)">
<mat-icon>remove_circle_outline</mat-icon>
</button>
{{item.propertyName}}{{item.physicalUnit? '('+item.physicalUnit+')' : ''}}
{{item.propertyName}}
<span style="color: red;" *ngIf="item.required">*</span>
</th>
</tr>

3
src/app/key-unit/basicinfo/basicinfo.component.ts

@ -200,7 +200,7 @@ export class BasicinfoComponent implements OnInit {
this.map.add(this.oldPositionMarker);
} else {
// console.log('未标注单位位置')
this.map.setCity('上海');
this.map.setCity('唐山市');
}
}
markerPosition2
@ -591,7 +591,6 @@ export class BasicinfoComponent implements OnInit {
}
}
})
console.log('this.houses',this.houses)
})
}
//点击选项卡

12
src/app/key-unit/edit-plan-info/edit-plan-info.component.html

@ -45,7 +45,7 @@
<app-function-division></app-function-division>
</ng-template>
</mat-tab>
<mat-tab label="8.行车路线">
<!-- <mat-tab label="8.行车路线">
<ng-template matTabContent>
<app-router-gis></app-router-gis>
</ng-template>
@ -54,22 +54,22 @@
<ng-template matTabContent>
<app-water-road></app-water-road>
</ng-template>
</mat-tab>
<mat-tab label="10.实景图">
</mat-tab> -->
<mat-tab label="8.实景图">
<ng-template matTabContent>
<app-realistic-picture></app-realistic-picture>
</ng-template>
</mat-tab>
<mat-tab label="11.上传CAD">
<mat-tab label="9.上传CAD">
<ng-template matTabContent>
<app-uploading-cad></app-uploading-cad>
</ng-template>
</mat-tab>
<mat-tab label="12.特别警示">
<!-- <mat-tab label="12.特别警示">
<ng-template matTabContent>
<app-special-warning></app-special-warning>
</ng-template>
</mat-tab>
</mat-tab> -->
<!-- <mat-tab label="12.unity平面图">
<ng-template matTabContent>
<iframe id="main" src="/unityApp2Basic/index.html" name="unityApp" frameborder="0" width="96%" height="100%" style="margin-left: 2%;"></iframe>

16
src/app/key-unit/edit-unit-info/edit-unit-info.component.html

@ -5,7 +5,7 @@
</div>
</div>
<mat-tab-group selectedIndex="10" style="height: 100%;">
<mat-tab-group selectedIndex="7" style="height: 100%;">
<mat-tab label="1.基本信息">
<ng-template matTabContent>
<app-basicinfo></app-basicinfo>
@ -31,7 +31,7 @@
<app-function-division></app-function-division>
</ng-template>
</mat-tab>
<mat-tab label="6.行车路线">
<!-- <mat-tab label="6.行车路线">
<ng-template matTabContent>
<app-router-gis></app-router-gis>
</ng-template>
@ -40,23 +40,23 @@
<ng-template matTabContent>
<app-water-road></app-water-road>
</ng-template>
</mat-tab>
<mat-tab label="8.实景图">
</mat-tab> -->
<mat-tab label="6.实景图">
<ng-template matTabContent>
<app-realistic-picture></app-realistic-picture>
</ng-template>
</mat-tab>
<mat-tab label="9.上传CAD">
<mat-tab label="7.上传CAD">
<ng-template matTabContent>
<app-uploading-cad></app-uploading-cad>
</ng-template>
</mat-tab>
<mat-tab label="10.特别警示">
<!-- <mat-tab label="10.特别警示">
<ng-template matTabContent>
<app-special-warning></app-special-warning>
</ng-template>
</mat-tab>
<mat-tab label="11.作战部署">
</mat-tab> -->
<mat-tab label="8.作战部署">
<ng-template matTabContent>
<app-collection-tools></app-collection-tools>
</ng-template>

259
src/app/key-unit/fire-fighting-device-look/fire-fighting-device.component.html

@ -1,5 +1,97 @@
<div class="content" id="firefightingdevicelook">
<mat-tab-group (selectedIndexChange)="selectedChange($event)">
<mat-tab-group>
<!--
<mat-tab label="单位消防设施">
<div class="contentBox">
<p style="width: 100%; margin: 30px auto; text-align: center;" *ngIf="!companyBuiltInGrouping.length">暂无数据,请完善单位基本信息</p>
<div style="width: 100%;margin-top: 25px;" *ngFor="let item of companyBuiltInGrouping;let key = index">
<h3 style="text-align: center;font-weight: 550;">{{item.name}}</h3>
<div style="margin-bottom: 10px;">
</div>
<div>
<mat-accordion multi>
<mat-expansion-panel disabled>
<mat-expansion-panel-header>
<label class="firstContent"></label>
<label class="textContent">项目</label>
<label class="textContent">照片</label>
<label class="totalContent">总数</label>
<label class="lastTextContent">主要情况</label>
</mat-expansion-panel-header>
</mat-expansion-panel>
<mat-expansion-panel *ngFor="let items of item.facilityItems" disabled [expanded]=items.expanded>
<mat-expansion-panel-header>
<label class="firstContent">
<mat-checkbox (change)='checkedCompany($event,item,items)' [disabled]='items.isBuiltin'></mat-checkbox>
</label>
<label class="textContent">{{items.name}}</label>
<label class="textContent"><a href="javascript:void(0)" (click)='previewImg(items)'>查看图片</a></label>
<label class="totalContent">{{items.total ? items.total : '总数: 0'}}</label>
<label class="lastTextContent">
<textarea readonly maxlength="250" [(ngModel)]="items.details" style="width: 80%;"></textarea>
</label>
<label><mat-icon (click)='SwitchBoard(items)' *ngIf="items.isBuiltin">keyboard_arrow_down</mat-icon></label>
</mat-expansion-panel-header>
<div class="overflowTable">
<div class="detailsTable">
<table>
<tr>
<th *ngFor="let header of items.header">{{header}}</th>
</tr>
<tr *ngFor="let body of items.body">
<td *ngFor="let header of items.header">{{body[header]? body[header] : '暂无数据'}}</td>
</tr>
</table>
</div>
<div *ngFor="let tableMsg of items.loopTable" class="detailsTable">
<p style="text-align: center; font-size: 16px; margin: 5px 0;">楼层/区域名称: {{tableMsg.name? tableMsg.name: '暂无名称'}}</p>
<table>
<tr>
<th *ngFor="let header of tableMsg.header">{{header}}</th>
</tr>
<tr *ngFor="let body of tableMsg.body">
<td *ngFor="let header of tableMsg.header">{{body[header]? body[header] : '暂无数据'}}</td>
</tr>
</table>
</div>
</div>
</mat-expansion-panel>
</mat-accordion>
</div>
</div>
<div style="width: 100%;margin-top: 25px;" *ngFor="let item of companyOptionalGrouping;let key = index">
<mat-accordion multi>
<mat-expansion-panel>
<mat-expansion-panel-header>
<h3 style="text-align: center;font-weight: 550;">{{item.name}}</h3>
</mat-expansion-panel-header>
<div *ngFor="let items of item.propertyInfos" class="InputField">
<label>{{items.propertyName}}:</label>
<input readonly type="text" *ngIf="items.propertyType!=1&&items.propertyType!=2&&items.propertyType!=4&&items.propertyType!=6"
[(ngModel)]="items.propertyValue" name="propertyValue">
<textarea readonly maxlength="250" *ngIf="items.propertyType==1" [(ngModel)]="items.propertyValue" name="propertyValue"></textarea>
<input readonly type="number" *ngIf="items.propertyType==2 ||items.propertyType==4" [(ngModel)]="items.propertyValue" name="propertyValue">
<mat-radio-group *ngIf="items.propertyType==6" [(ngModel)]="items.propertyValue" name="propertyValue">
<mat-radio-button style="margin-left: 5px;" [value]='radio.value' *ngFor="let radio of singleElection">{{radio.name}}</mat-radio-button>
</mat-radio-group>
</div>
</mat-expansion-panel>
</mat-accordion>
</div>
</div>
</mat-tab> -->
<mat-tab label="{{newItem.name}}" *ngFor="let newItem of allBuildingGrouping">
<div class="contentBox">
@ -25,153 +117,19 @@
<mat-expansion-panel *ngFor="let items of item.facilityItems" disabled [expanded]=items.expanded>
<mat-expansion-panel-header class="expansionheader">
<label class="firstContent">
<mat-checkbox (change)='checkedCompany($event,item,items)' [disabled]='items.isBuiltin'>
</mat-checkbox>
<mat-checkbox (change)='checkedCompany($event,item,items)' [disabled]='items.isBuiltin'></mat-checkbox>
</label>
<label class="textContent">{{items.name}}</label>
<label class="textContent"><a href="javascript:void(0)"
(click)='previewBuildingImg(newItem,items)'>查看图片</a></label>
<label class="totalContent">
<span *ngIf="item.name == '消防水系统' && items.name == '供水管网'">
{{fireProtectionWaterSystem.waterSupplyNetwork.total || '总数:0'}}
</span>
<span *ngIf="item.name == '消防水系统' && items.name == '自动喷水灭火系统'">
{{fireProtectionWaterSystem.sprinklerSystem.total || '总数:0'}}
</span>
<span *ngIf="item.name == '消防灭火给水系统' && items.name == '自动喷水灭火系统'">
{{FireExtinguishingWaterSupplySystem.sprinklerSystem.total || '总数:0'}}
</span>
<span *ngIf="item.name == '消防灭火给水系统' && items.name == '气体自动灭火系统'">
{{FireExtinguishingWaterSupplySystem.AutomaticGasFireExtinguishingSystem.total || '总数:0'}}
</span>
<span *ngIf="item.name == '消防灭火给水系统' && items.name == '消防泵房'">
{{FireExtinguishingWaterSupplySystem.firePumpRoom.total || '总数:0'}}
</span>
<span *ngIf="item.name == '其它' && items.name == '排烟系统'">
{{other.purgingSystem.total || '总数:0'}}
</span>
<span *ngIf="item.name == '其它' && items.name == '灭火器'">
{{other.fireExtinguisher.total || '总数:0'}}
</span>
<span *ngIf="item.name == '其它' && items.name == '气体灭火'">
{{other.extinctionUsingGas.total || '总数:0'}}
</span>
<span *ngIf="item.name == '其它' && items.name == '消防通信'">
{{other.fireControlCommunication.total || '总数:0'}}
</span>
<span *ngIf="item.name == '消防设施' && items.name == '自动报警系统'">
{{fireFightingEquipment.automaticAlarmSystem.total || '总数:0'}}
</span>
<span *ngIf="item.name == '消防设施' && items.name == '消防泵'">
{{fireFightingEquipment.firePump.total || '总数:0'}}
</span>
<span *ngIf="item.name == '消火栓系统' && items.name == '灭火剂'">
{{hydrantSystem.fireExtinguishingAgent.total || '总数:0'}}
</span>
<span *ngIf="item.name == '消火栓系统' && items.name == '报警设施'">
{{hydrantSystem.AlarmFacilities.total || '总数:0'}}
</span>
<span *ngIf="item.name == '消火栓系统' && items.name == '消防管网'">
{{hydrantSystem.FireControlPipeNetwork.total || '总数:0'}}
</span>
<span *ngIf="item.name == '其它设施' && items.name == '优先广播'">
{{otherFacilities.givePriorityToBroadcast.total || '总数:0'}}
</span>
<span *ngIf="item.name == '其它设施' && items.name == 'VI检测仪'">
{{otherFacilities.VIdetector.total || '总数:0'}}
</span>
<span *ngIf="item.name == '其它设施' && items.name == '泡沫水喷雾系统'">
{{otherFacilities.foamWaterSpraySystem.total || '总数:0'}}
</span>
<span *ngIf="item.name == '自动消防设施' && items.name == '喷水灭火系统'">
{{automaticFireProtectionFacility.fireSprinklingSystem.total || '总数:0'}}
</span>
<span *ngIf="item.name == '自动消防设施' && items.name == '自动报警系统'">
{{automaticFireProtectionFacility.automaticAlarmSystem.total || '总数:0'}}
</span>
<span *ngIf="item.name == '自动消防设施' && items.name == '防排烟系统'">
{{automaticFireProtectionFacility.smokeControlAndExhaustSystem.total || '总数:0'}}
</span>
<span *ngIf="item.name == '自动消防设施' && items.name == '水幕系统'">
{{automaticFireProtectionFacility.waterCurtainSystem.total || '总数:0'}}
</span>
<span *ngIf="item.name == '自动消防设施' && items.name == '消防泵'">
{{automaticFireProtectionFacility.firePump.total || '总数:0'}}
</span>
<span *ngIf="item.name == '消防水源' && items.name == '消防水池'">
{{fireWaterSupply.firePool.total || '总数:0'}}
</span>
<span
*ngIf="!((item.name == '消防水系统' && items.name == '供水管网') || (item.name == '消防水系统' && items.name == '自动喷水灭火系统') || (item.name == '消防灭火给水系统' && items.name == '自动喷水灭火系统') || (item.name == '消防灭火给水系统' && items.name == '气体自动灭火系统') || (item.name == '消防灭火给水系统' && items.name == '消防泵房') || (item.name == '其它' && items.name == '排烟系统') || (item.name == '其它' && items.name == '灭火器') || (item.name == '其它' && items.name == '气体灭火') || (item.name == '其它' && items.name == '消防通信') || (item.name == '消防设施' && items.name == '自动报警系统') || (item.name == '消防设施' && items.name == '消防泵') || (item.name == '消火栓系统' && items.name == '灭火剂') || (item.name == '消火栓系统' && items.name == '报警设施') || (item.name == '消火栓系统' && items.name == '消防管网') || (item.name == '其它设施' && items.name == '优先广播') || (item.name == '其它设施' && items.name == 'VI检测仪') || (item.name == '其它设施' && items.name == '泡沫水喷雾系统') || (item.name == '自动消防设施' && items.name == '喷水灭火系统') || (item.name == '自动消防设施' && items.name == '自动报警系统') || (item.name == '自动消防设施' && items.name == '防排烟系统') || (item.name == '自动消防设施' && items.name == '水幕系统') || (item.name == '自动消防设施' && items.name == '消防泵') || (item.name == '消防水源' && items.name == '消防水池'))">
{{items.total ? items.total : '总数: 0'}}
</span>
</label>
<label class="textContent"><a href="javascript:void(0)" (click)='previewBuildingImg(newItem,items)'>查看图片</a></label>
<label class="totalContent">{{items.total ? items.total : '总数: 0'}}</label>
<label class="lastTextContent">
<textarea *ngIf="item.name == '消防水系统' && items.name == '供水管网'" maxlength="250"
[(ngModel)]="fireProtectionWaterSystem.waterSupplyNetwork.details" style="width: 80%;"></textarea>
<textarea *ngIf="item.name == '消防水系统' && items.name == '自动喷水灭火系统'" maxlength="250"
[(ngModel)]="fireProtectionWaterSystem.sprinklerSystem.details" style="width: 80%;"></textarea>
<textarea *ngIf="item.name == '消防灭火给水系统' && items.name == '自动喷水灭火系统'" maxlength="250"
[(ngModel)]="FireExtinguishingWaterSupplySystem.sprinklerSystem.details"
style="width: 80%;"></textarea>
<textarea *ngIf="item.name == '消防灭火给水系统' && items.name == '气体自动灭火系统'" maxlength="250"
[(ngModel)]="FireExtinguishingWaterSupplySystem.AutomaticGasFireExtinguishingSystem.details"
style="width: 80%;"></textarea>
<textarea *ngIf="item.name == '消防灭火给水系统' && items.name == '消防泵房'" maxlength="250"
[(ngModel)]="FireExtinguishingWaterSupplySystem.firePumpRoom.details"
style="width: 80%;"></textarea>
<textarea *ngIf="item.name == '其它' && items.name == '排烟系统'" maxlength="250"
[(ngModel)]="other.purgingSystem.details" style="width: 80%;"></textarea>
<textarea *ngIf="item.name == '其它' && items.name == '灭火器'" maxlength="250"
[(ngModel)]="other.fireExtinguisher.details" style="width: 80%;"></textarea>
<textarea *ngIf="item.name == '其它' && items.name == '气体灭火'" maxlength="250"
[(ngModel)]="other.extinctionUsingGas.details" style="width: 80%;"></textarea>
<textarea *ngIf="item.name == '其它' && items.name == '消防通信'" maxlength="250"
[(ngModel)]="other.fireControlCommunication.details" style="width: 80%;"></textarea>
<textarea *ngIf="item.name == '消防设施' && items.name == '自动报警系统'" maxlength="250"
[(ngModel)]="fireFightingEquipment.automaticAlarmSystem.details" style="width: 80%;"></textarea>
<textarea *ngIf="item.name == '消防设施' && items.name == '消防泵'" maxlength="250"
[(ngModel)]="fireFightingEquipment.firePump.details" style="width: 80%;"></textarea>
<textarea *ngIf="item.name == '消火栓系统' && items.name == '灭火剂'" maxlength="250"
[(ngModel)]="hydrantSystem.fireExtinguishingAgent.details" style="width: 80%;"></textarea>
<textarea *ngIf="item.name == '消火栓系统' && items.name == '报警设施'" maxlength="250"
[(ngModel)]="hydrantSystem.AlarmFacilities.details" style="width: 80%;"></textarea>
<textarea *ngIf="item.name == '消火栓系统' && items.name == '消防管网'" maxlength="250"
[(ngModel)]="hydrantSystem.FireControlPipeNetwork.details" style="width: 80%;"></textarea>
<textarea *ngIf="item.name == '其它设施' && items.name == '优先广播'" maxlength="250"
[(ngModel)]="otherFacilities.givePriorityToBroadcast.details" style="width: 80%;"></textarea>
<textarea *ngIf="item.name == '其它设施' && items.name == 'VI检测仪'" maxlength="250"
[(ngModel)]="otherFacilities.VIdetector.details" style="width: 80%;"></textarea>
<textarea *ngIf="item.name == '其它设施' && items.name == '泡沫水喷雾系统'" maxlength="250"
[(ngModel)]="otherFacilities.foamWaterSpraySystem.details" style="width: 80%;"></textarea>
<textarea *ngIf="item.name == '自动消防设施' && items.name == '喷水灭火系统'" maxlength="250"
[(ngModel)]="automaticFireProtectionFacility.fireSprinklingSystem.details"
style="width: 80%;"></textarea>
<textarea *ngIf="item.name == '自动消防设施' && items.name == '自动报警系统'" maxlength="250"
[(ngModel)]="automaticFireProtectionFacility.automaticAlarmSystem.details"
style="width: 80%;"></textarea>
<textarea *ngIf="item.name == '自动消防设施' && items.name == '防排烟系统'" maxlength="250"
[(ngModel)]="automaticFireProtectionFacility.smokeControlAndExhaustSystem.details"
style="width: 80%;"></textarea>
<textarea *ngIf="item.name == '自动消防设施' && items.name == '水幕系统'" maxlength="250"
[(ngModel)]="automaticFireProtectionFacility.waterCurtainSystem.details"
style="width: 80%;"></textarea>
<textarea *ngIf="item.name == '自动消防设施' && items.name == '消防泵'" maxlength="250"
[(ngModel)]="automaticFireProtectionFacility.firePump.details" style="width: 80%;"></textarea>
<textarea *ngIf="item.name == '消防水源' && items.name == '消防水池'" maxlength="250"
[(ngModel)]="fireWaterSupply.firePool.details" style="width: 80%;"></textarea>
<textarea maxlength="250" [(ngModel)]="items.details" style="width: 80%;"
*ngIf="!((item.name == '消防水系统' && items.name == '供水管网') || (item.name == '消防水系统' && items.name == '自动喷水灭火系统') || (item.name == '消防灭火给水系统' && items.name == '自动喷水灭火系统') || (item.name == '消防灭火给水系统' && items.name == '气体自动灭火系统') || (item.name == '消防灭火给水系统' && items.name == '消防泵房') || (item.name == '其它' && items.name == '排烟系统') || (item.name == '其它' && items.name == '灭火器') || (item.name == '其它' && items.name == '气体灭火') || (item.name == '其它' && items.name == '消防通信') || (item.name == '消防设施' && items.name == '自动报警系统') || (item.name == '消防设施' && items.name == '消防泵') || (item.name == '消火栓系统' && items.name == '灭火剂') || (item.name == '消火栓系统' && items.name == '报警设施') || (item.name == '消火栓系统' && items.name == '消防管网') || (item.name == '其它设施' && items.name == '优先广播') || (item.name == '其它设施' && items.name == 'VI检测仪') || (item.name == '其它设施' && items.name == '泡沫水喷雾系统') || (item.name == '自动消防设施' && items.name == '喷水灭火系统') || (item.name == '自动消防设施' && items.name == '自动报警系统') || (item.name == '自动消防设施' && items.name == '防排烟系统') || (item.name == '自动消防设施' && items.name == '水幕系统') || (item.name == '自动消防设施' && items.name == '消防泵') || (item.name == '消防水源' && items.name == '消防水池'))"></textarea>
<textarea readonly maxlength="250" [(ngModel)]="items.details" style="width:98%;"></textarea>
</label>
<!-- <label><mat-icon (click)='SwitchBuildingBoard(newItem,items)' *ngIf="items.isBuiltin">keyboard_arrow_down</mat-icon></label> -->
</mat-expansion-panel-header>
<div class="overflowTable">
<div class="detailsTable">
<table>
@ -184,8 +142,7 @@
</table>
</div>
<div *ngFor="let tableMsg of items.loopTable" class="detailsTable">
<p style="text-align: center; font-size: 16px; margin: 5px 0;">楼层/区域名称:
{{tableMsg.name? tableMsg.name : '暂无名称'}}</p>
<p style="text-align: center; font-size: 16px; margin: 5px 0;">楼层/区域名称: {{tableMsg.name? tableMsg.name : '暂无名称'}}</p>
<table>
<tr>
<th *ngFor="let header of tableMsg.header">{{header}}</th>
@ -197,7 +154,7 @@
</div>
</div>
</mat-expansion-panel>
</mat-accordion>
</div>
</div>
@ -213,16 +170,12 @@
<div *ngFor="let items of item.propertyInfos" class="InputField">
<label>{{items.propertyName}}:</label>
<input readonly type="text"
*ngIf="items.propertyType!=1&&items.propertyType!=2&&items.propertyType!=4&&items.propertyType!=6"
[(ngModel)]="items.propertyValue" name="propertyValue">
<textarea readonly maxlength="250" *ngIf="items.propertyType==1" [(ngModel)]="items.propertyValue"
name="propertyValue"></textarea>
<input readonly type="number" *ngIf="items.propertyType==2 ||items.propertyType==4"
[(ngModel)]="items.propertyValue" name="propertyValue">
<input readonly type="text" *ngIf="items.propertyType!=1&&items.propertyType!=2&&items.propertyType!=4&&items.propertyType!=6"
[(ngModel)]="items.propertyValue" name="propertyValue">
<textarea readonly maxlength="250" *ngIf="items.propertyType==1" [(ngModel)]="items.propertyValue" name="propertyValue"></textarea>
<input readonly type="number" *ngIf="items.propertyType==2 ||items.propertyType==4" [(ngModel)]="items.propertyValue" name="propertyValue">
<mat-radio-group *ngIf="items.propertyType==6" [(ngModel)]="items.propertyValue" name="propertyValue">
<mat-radio-button style="margin-left: 5px;" [value]='radio.value'
*ngFor="let radio of singleElection">{{radio.name}}</mat-radio-button>
<mat-radio-button style="margin-left: 5px;" [value]='radio.value' *ngFor="let radio of singleElection">{{radio.name}}</mat-radio-button>
</mat-radio-group>
</div>
</mat-expansion-panel>
@ -234,4 +187,4 @@
</mat-tab>
</mat-tab-group>
</div>
</div>

708
src/app/key-unit/fire-fighting-device-look/fire-fighting-device.component.ts

@ -1,10 +1,10 @@
import { Component, OnInit, ViewChild, Inject } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http'
import {HttpClient, HttpHeaders} from '@angular/common/http'
import { MatDialogRef, MatDialog, MAT_DIALOG_DATA } from '@angular/material/dialog';
import { ImgsDataDetail2 } from './addGrouping.component'
import { MatSnackBarConfig, MatSnackBar } from '@angular/material/snack-bar';
import { ImagesData2 } from './imagesdata.component'
import { Router, ActivatedRoute } from '@angular/router'
import { Router,ActivatedRoute } from '@angular/router'
export interface Food {
@ -18,7 +18,7 @@ export interface Food {
})
export class FireFightingDeviceLookComponent implements OnInit {
constructor(private router: Router, private route: ActivatedRoute, public http: HttpClient, public dialog: MatDialog, public snackBar: MatSnackBar) { }
constructor(private router:Router,private route:ActivatedRoute,public http: HttpClient,public dialog: MatDialog,public snackBar: MatSnackBar) { }
ngOnInit(): void {
this.getCompanyInformation()
@ -26,42 +26,78 @@ export class FireFightingDeviceLookComponent implements OnInit {
}
//定义属性数据
singleElection: Food[] = [
{ value: 'true', name: '有' },
{ value: 'false', name: '无' }]
singleElection:Food[]=[
{value:'true', name: '有'},
{value:'false', name: '无'}]
companyBuiltInGrouping: any = []; //单位消防设施内置分组
companyDetails: any = []; //单位详情
companyEachDetails: any = [] //单位每层详情
companyOptionalGrouping: any = []; //单位消防设施可选分组
companyBuiltInGrouping:any = []; //单位消防设施内置分组
companyDetails:any = []; //单位详情
companyEachDetails:any = [] //单位每层详情
companyOptionalGrouping:any = []; //单位消防设施可选分组
//获得单位基本信息
getCompanyInformation() {
let companyId = this.route.snapshot.queryParams.id
this.http.get(`/api/Companies/${companyId}`).subscribe((data: any) => {
getCompanyInformation () {
let companyId = this.route.snapshot.queryParams.id
this.http.get(`/api/Companies/${companyId}`).subscribe((data:any)=>{
if (data.buildingTypes.length) {
let newData = { buildingType: data.buildingTypes[0].id, companyId: companyId }
this.http.get('/api/CompanyFacilities', { params: newData }).subscribe((data: any) => { //获得单位的消防设施
let newData = {buildingType: data.buildingTypes[0].id,companyId : companyId}
this.http.get('/api/CompanyFacilities',{params:newData}).subscribe((data:any)=>{ //获得单位的消防设施
this.companyBuiltInGrouping = data[0].summary.companyFacilityGroups
this.companyOptionalGrouping = data[0].summary.companyOptionalGroups
this.companyDetails = data[0].details
this.companyEachDetails = data[0].eachDetails
this.companyBuiltInGrouping.forEach(element => { //循环单位内置分组项
element.selectBuiltInGrouping = []
element.facilityItems.forEach((elements, index) => {
element.facilityItems.forEach((elements,index) => {
elements.total = element.facilityCount[index]
elements.expanded = false
});
elements.expanded = false});
});
if(sessionStorage.getItem("tabsindex") == "4"){
this.companyBuiltInGrouping = [this.companyBuiltInGrouping[1]]
this.companyOptionalGrouping = []
}
if(sessionStorage.getItem("tabsindex") == "5"){
this.companyBuiltInGrouping.splice(1,1)
}
}) //http
} //if
})
}
//创建单位消防设施内置分组项
addCompanyGrouping (e) {
let data = e
let dialogRef = this.dialog.open(ImagesData2,{data});
dialogRef.afterClosed().subscribe(data=>{
if (data) { e.facilityItems.push(data) } });
}
//保存单位消防设施内置分组项
editCompanyGrouping(e) {
let header = {groupId:e.id}
let data = []
e.facilityItems.forEach((element,index) => {
let msg = {
isBuiltin: element.isBuiltin,
details: element.details,
name: element.name,
isEachFloor: element.isEachFloor,
order: element.order}
data.push(msg)
if (index==e.facilityItems.length-1) {
this.http.post('/api/CompanyFacilityItems/Batch',data,{params:header}).subscribe(data=>{
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('数据更新成功','确定',config);
}) }
}); //forEach
}
//checked单位消防设施内置分组项时
checkedCompany(e, item, items) {
checkedCompany (e,item,items) {
if (e.checked) {
item.selectBuiltInGrouping.push(items)
} else {
@ -69,9 +105,53 @@ export class FireFightingDeviceLookComponent implements OnInit {
}
}
//删除消防设施内置分组项
deleteCompanyGrouping (e) {
if (e.selectBuiltInGrouping.length) {
let isDelete = confirm('您确定要删除吗')
if (isDelete) {
let msg:any = `?groupId=${e.id}`
e.selectBuiltInGrouping.forEach((element,index) => {
let data = `&name=${element.name}`
msg = msg + data
if (index === e.selectBuiltInGrouping.length-1) {
this.http.delete('/api/CompanyFacilityItems/Batch' + msg).subscribe(data=>{
let deleteMsg = e.selectBuiltInGrouping
deleteMsg.forEach(deleteElement => {
e.facilityItems.splice(e.facilityItems.findIndex(item=>item.name==deleteElement.name),1)
});
e.selectBuiltInGrouping = []
}) //http
} //if
}); //forEach
}
} else {
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('请选择内置分组项','确定',config);
}
}
//保存单位消防设施可选分组
editCompanyOptional (e,item) {
e.stopPropagation() //阻止冒泡
item.propertyInfos.forEach((element,index) => {
element.propertyValue = String(element.propertyValue)
if (index == item.propertyInfos.length-1 ) {
this.http.post('/api/CompanyOptionalGroups',item).subscribe(data=>{
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('数据更新成功','确定',config);
})
} //if
});
}
//单位消防设施切换展开面板
SwitchBoard(e) {
SwitchBoard (e) {
e.expanded = !e.expanded
if (e.expanded) { //展开面板展开时
if (e.isEachFloor) { //逐层统计时
@ -79,30 +159,26 @@ export class FireFightingDeviceLookComponent implements OnInit {
if (data) {
e.loopTable = []
data.forEach(item => {
let tableMsg = { name: item.name, header: [], body: [] }
let tableMsg = {name:item.name, header:[], body:[]}
item.assets[0].propertyInfos.forEach(element => { //表头
if (element.propertyType != 3) {
let unit = element.physicalUnit ? '(' + element.physicalUnit + ')' : '' //单位
tableMsg.header.push(element.propertyName + unit)
}
if (element.propertyType!=3) {
let unit = element.physicalUnit? '('+ element.physicalUnit +')' : '' //单位
tableMsg.header.push(element.propertyName+unit)}
});
item.assets.forEach(element => { //表格内容
let everyBody = {}
element.propertyInfos.forEach((elements, index) => {
if (elements.propertyType != 3 && elements.propertyName != '图片' && elements.propertyType != 6) {
let unit = elements.physicalUnit ? '(' + elements.physicalUnit + ')' : '' //单位
everyBody[elements.propertyName + unit] = elements.propertyValue
}
if (elements.propertyType == 6) {
let unit = elements.physicalUnit ? '(' + elements.physicalUnit + ')' : '' //单位
everyBody[elements.propertyName + unit] = elements.propertyValue == '1' ? '是' : '否'
}
if (elements.propertyType != 3 && elements.propertyName == '图片') {
element.propertyInfos.forEach((elements,index) => {
if (elements.propertyType!=3 && elements.propertyName!='图片' && elements.propertyType!=6) {
let unit = elements.physicalUnit? '('+ elements.physicalUnit +')' : '' //单位
everyBody[elements.propertyName+unit] = elements.propertyValue }
if (elements.propertyType==6) {
let unit = elements.physicalUnit? '('+ elements.physicalUnit +')' : '' //单位
everyBody[elements.propertyName+unit] = elements.propertyValue=='1'?'是':'否' }
if (elements.propertyType!=3 && elements.propertyName=='图片') {
let imgLength = []
element.propertyInfos.find(item => { if (item.propertyType == 3) { imgLength.push(item) } })
let unit = elements.physicalUnit ? '(' + elements.physicalUnit + ')' : '' //单位
everyBody[elements.propertyName + unit] = String(imgLength.length)
}
element.propertyInfos.find(item=>{ if(item.propertyType==3){imgLength.push(item)} })
let unit = elements.physicalUnit? '('+ elements.physicalUnit +')' : '' //单位
everyBody[elements.propertyName+unit] = String(imgLength.length) }
}); //propertyInfos
tableMsg.body.push(everyBody)
@ -113,32 +189,28 @@ export class FireFightingDeviceLookComponent implements OnInit {
} //data有数据时
} else { //非逐层统计时
let data = this.companyDetails[e.name]
if (data) {
if (data) {
e.header = []
e.body = []
data[0].propertyInfos.forEach(element => { //表头
if (element.propertyType != 3) {
let unit = element.physicalUnit ? '(' + element.physicalUnit + ')' : '' //单位
e.header.push(element.propertyName + unit)
}
if (element.propertyType!=3) {
let unit = element.physicalUnit? '('+ element.physicalUnit +')' : '' //单位
e.header.push(element.propertyName+unit)}
});
data.forEach(element => { //表格内容
let everyBody = {}
element.propertyInfos.forEach((elements, index) => {
if (elements.propertyType != 3 && elements.propertyName != '图片' && elements.propertyType != 6) {
let unit = elements.physicalUnit ? '(' + elements.physicalUnit + ')' : '' //单位
everyBody[elements.propertyName + unit] = elements.propertyValue
}
if (elements.propertyType == 6) {
let unit = elements.physicalUnit ? '(' + elements.physicalUnit + ')' : '' //单位
everyBody[elements.propertyName + unit] = elements.propertyValue == '1' ? '是' : '否'
}
if (elements.propertyType != 3 && elements.propertyName == '图片') {
element.propertyInfos.forEach((elements,index) => {
if (elements.propertyType!=3 && elements.propertyName!='图片' && elements.propertyType!=6) {
let unit = elements.physicalUnit? '('+ elements.physicalUnit +')' : '' //单位
everyBody[elements.propertyName+unit] = elements.propertyValue }
if (elements.propertyType==6) {
let unit = elements.physicalUnit? '('+ elements.physicalUnit +')' : '' //单位
everyBody[elements.propertyName+unit] = elements.propertyValue=='1'?'是':'否' }
if (elements.propertyType!=3 && elements.propertyName=='图片') {
let imgLength = []
element.propertyInfos.find(item => { if (item.propertyType == 3) { imgLength.push(item) } })
let unit = elements.physicalUnit ? '(' + elements.physicalUnit + ')' : '' //单位
everyBody[elements.propertyName + unit] = String(imgLength.length)
}
element.propertyInfos.find(item=>{ if(item.propertyType==3){imgLength.push(item)} })
let unit = elements.physicalUnit? '('+ elements.physicalUnit +')' : '' //单位
everyBody[elements.propertyName+unit] = String(imgLength.length) }
});
e.body.push(everyBody)
@ -154,268 +226,138 @@ export class FireFightingDeviceLookComponent implements OnInit {
allBuildingGrouping: any; //所有建筑的消防设施 内置分组+可选分组
allBuildingGrouping:any; //所有建筑的消防设施 内置分组+可选分组
//获取所有建筑
getAllBuilding() {
let companyId = this.route.snapshot.queryParams.id
this.http.get('/api/Buildings', {
params: {
companyId: companyId
}
}).subscribe((data: any) => {
getAllBuilding () {
let companyId = this.route.snapshot.queryParams.id
this.http.get('/api/Buildings',{params:{
companyId:companyId
}}).subscribe((data:any)=>{
this.allBuildingGrouping = data
if (this.allBuildingGrouping.length) {
this.getAllBuildingFacilities()
if (this.allBuildingGrouping.length) {
this.getAllBuildingFacilities()
} else {
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('暂无建筑数据', '确定', config);
this.snackBar.open('暂无建筑数据','确定',config);
}
})
}
//获取所有建筑的消防设施
getAllBuildingFacilities () {
let companyId = this.route.snapshot.queryParams.id
this.allBuildingGrouping.forEach(element => {
let header = {buildingId: element.id, buildingType: element.buildingTypes[0].id,companyId:companyId}
this.http.get('/api/BuildingFacilities',{params:header}).subscribe(data=>{
element.buildingFacilityGroups = data[0].summary.buildingFacilityGroups
element.buildingOptionalGroups = data[0].summary.buildingOptionalGroups
element.buildingDetails = data[0].details
element.buildingEachDetails = data[0].eachDetails
element.buildingFacilityGroups.forEach((elements) => { //循环每个建筑内置分组项
elements.selectBuiltInGrouping = []
elements.facilityItems.forEach((newElement,index) => {
newElement.total = elements.facilityCount[index]
newElement.expanded = false });
});
//消防水系统
fireProtectionWaterSystem = {
waterSupplyNetwork: { name: '供水管网', total: '', details: '' },//供水管网
sprinklerSystem: { name: '自动喷水灭火系统', total: '', details: '' }//自动喷水灭火系统
}
//消防灭火给水系统
FireExtinguishingWaterSupplySystem = {
sprinklerSystem: { name: '自动喷水灭火系统', total: '', details: '' },//自动喷水灭火系统
AutomaticGasFireExtinguishingSystem: { name: '气体自动灭火系统', total: '', details: '' },//气体自动灭火系统
firePumpRoom: { name: '消防泵房', total: '', details: '' }//消防泵房
}
//其它
other = {
purgingSystem: { name: '排烟系统', total: '', details: '' },//排烟系统
fireExtinguisher: { name: '灭火器', total: '', details: '' },//灭火器
extinctionUsingGas: { name: '气体灭火', total: '', details: '' },//气体灭火
fireControlCommunication: { name: '消防通信', total: '', details: '' }//消防通信
}
//消防设施
fireFightingEquipment = {
automaticAlarmSystem: { name: '自动报警系统', total: '', details: '' },//自动报警系统
firePump: { name: '消防泵', total: '', details: '' }//消防泵
}
//消火栓系统
hydrantSystem = {
fireExtinguishingAgent: { name: '灭火剂', total: '', details: '' },//灭火剂
AlarmFacilities: { name: '报警设施', total: '', details: '' },//报警设施
FireControlPipeNetwork: { name: '消防管网', total: '', details: '' }//消防管网
}
//其它设施
otherFacilities = {
givePriorityToBroadcast: { name: '优先广播', total: '', details: '' },//优先广播
VIdetector: { name: 'VI检测仪', total: '', details: '' },//VI检测仪
foamWaterSpraySystem: { name: '泡沫水喷雾系统', total: '', details: '' },//泡沫水喷雾系统
}
//自动消防设施
automaticFireProtectionFacility = {
fireSprinklingSystem: { name: '喷水灭火系统', total: '', details: '' },//喷水灭火系统
automaticAlarmSystem: { name: '自动报警系统', total: '', details: '' },//自动报警系统
smokeControlAndExhaustSystem: { name: '防排烟系统', total: '', details: '' },//防排烟系统
waterCurtainSystem: { name: '水幕系统', total: '', details: '' },//水幕系统
firePump: { name: '消防泵', total: '', details: '' }//消防泵
}
//消防水源
fireWaterSupply = {
firePool: { name: '消防水池', total: '', details: '' }//消防水池
}
if(sessionStorage.getItem("tabsindex") == "4"){
element.buildingFacilityGroups = [element.buildingFacilityGroups[1]]
element.buildingOptionalGroups = []
}
if(sessionStorage.getItem("tabsindex") == "5"){
element.buildingFacilityGroups.splice(1,1)
}
})
});
//获得当前建筑的手动输入值
FacilityStat: any//存放当前建筑手动输入的值
selectedChange($event) {
//获得手动输入的值
this.http.get('/api/BuildingFacilities/FacilityStat', {
params: {
buildingId: this.allBuildingGrouping[$event].id
}
}).subscribe(data => {
this.FacilityStat = data
this.changeData()
})
}
//创建建筑消防设施内置分组项
addBuildingGrouping (e,item) {
let data = {buildingId: e.id, item}
let dialogRef = this.dialog.open(ImgsDataDetail2,{data});
dialogRef.afterClosed().subscribe(data=>{
if (data) { item.facilityItems.push(data) }
});
}
//获取所有建筑的消防设施
async getAllBuildingFacilities() {
let companyId = this.route.snapshot.queryParams.id
let index = 0
for (let index = 0; index < this.allBuildingGrouping.length; index++) {
const element = this.allBuildingGrouping[index];
let header = { buildingId: element.id, buildingType: element.buildingTypes[0].id, companyId: companyId }
await new Promise<void>((resolve, reject) => {
this.http.get('/api/BuildingFacilities', { params: header }).subscribe(data => {
element.buildingFacilityGroups = data[0].summary.buildingFacilityGroups
element.buildingOptionalGroups = data[0].summary.buildingOptionalGroups
element.buildingDetails = data[0].details
element.buildingEachDetails = data[0].eachDetails
element.buildingFacilityGroups.forEach((elements) => { //循环每个建筑内置分组项
elements.selectBuiltInGrouping = []
elements.facilityItems.forEach((newElement, index) => {
newElement.total = elements.facilityCount[index]
newElement.expanded = false
});
});
// console.log(element.name, data)
resolve()
}, err => {
console.log(element.name + '消防设施网络获取失败', err)
})
})
}
//保存建筑消防设施内置分组项
editBuildingGrouping (e,item) {
let companyId = this.route.snapshot.queryParams.id
let header = {companyId:companyId,buildingId:e.id, groupId:item.id}
let data = []
item.facilityItems.forEach((element,index) => {
let msg = {
isBuiltin: element.isBuiltin,
details: element.details,
name: element.name,
isEachFloor: element.isEachFloor,
order: element.order}
data.push(msg)
if (index==item.facilityItems.length-1) {
this.http.post('/api/BuildingFacilityItems/Batch',data,{params:header}).subscribe(data=>{
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('数据更新成功','确定',config);
}) }
}); //forEach
}
//清空手动输入的值
emptyData() {
this.fireProtectionWaterSystem = {
waterSupplyNetwork: { name: '供水管网', total: '', details: '' },//供水管网
sprinklerSystem: { name: '自动喷水灭火系统', total: '', details: '' }//自动喷水灭火系统
}
this.FireExtinguishingWaterSupplySystem = {
sprinklerSystem: { name: '自动喷水灭火系统', total: '', details: '' },//自动喷水灭火系统
AutomaticGasFireExtinguishingSystem: { name: '气体自动灭火系统', total: '', details: '' },//气体自动灭火系统
firePumpRoom: { name: '消防泵房', total: '', details: '' }//消防泵房
}
this.other = {
purgingSystem: { name: '排烟系统', total: '', details: '' },//排烟系统
fireExtinguisher: { name: '灭火器', total: '', details: '' },//灭火器
extinctionUsingGas: { name: '气体灭火', total: '', details: '' },//气体灭火
fireControlCommunication: { name: '消防通信', total: '', details: '' }//消防通信
}
this.fireFightingEquipment = {
automaticAlarmSystem: { name: '自动报警系统', total: '', details: '' },//自动报警系统
firePump: { name: '消防泵', total: '', details: '' }//消防泵
}
this.hydrantSystem = {
fireExtinguishingAgent: { name: '灭火剂', total: '', details: '' },//灭火剂
AlarmFacilities: { name: '报警设施', total: '', details: '' },//报警设施
FireControlPipeNetwork: { name: '消防管网', total: '', details: '' }//消防管网
}
this.otherFacilities = {
givePriorityToBroadcast: { name: '优先广播', total: '', details: '' },//优先广播
VIdetector: { name: 'VI检测仪', total: '', details: '' },//VI检测仪
foamWaterSpraySystem: { name: '泡沫水喷雾系统', total: '', details: '' },//泡沫水喷雾系统
}
this.automaticFireProtectionFacility = {
fireSprinklingSystem: { name: '喷水灭火系统', total: '', details: '' },//喷水灭火系统
automaticAlarmSystem: { name: '自动报警系统', total: '', details: '' },//自动报警系统
smokeControlAndExhaustSystem: { name: '防排烟系统', total: '', details: '' },//防排烟系统
waterCurtainSystem: { name: '水幕系统', total: '', details: '' },//水幕系统
firePump: { name: '消防泵', total: '', details: '' }//消防泵
}
this.fireWaterSupply = {
firePool: { name: '消防水池', total: '', details: '' }//消防水池
//删除建筑消防设施内置分组项
deleteBuildingGrouping (e,item) {
if (item.selectBuiltInGrouping.length) {
let isDelete = confirm('您确定要删除吗')
if (isDelete) {
let msg:any = `?buildingId=${e.id}&groupId=${item.id}`
item.selectBuiltInGrouping.forEach((element,index) => {
let data = `&name=${element.name}`
msg = msg + data
if (index === item.selectBuiltInGrouping.length-1) {
this.http.delete('/api/BuildingFacilityItems/Batch'+msg).subscribe(data=>{
let deleteMsg = item.selectBuiltInGrouping
deleteMsg.forEach(deleteElement => {
item.facilityItems.splice(item.facilityItems.findIndex(items=>items.name==deleteElement.name),1)
});
item.selectBuiltInGrouping = []
}) //http
} //if
}) //forEach
}
} else {
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('请选择内置分组项','确定',config);
}
}
//将数据库获取的手动输入的值变成指定形式
changeData() {
this.emptyData();
this.FacilityStat.length != 0 ?
this.FacilityStat.forEach(element => {
if (element.groupName == '消防水系统') {
if (element.facilityName == '供水管网') {
this.fireProtectionWaterSystem.waterSupplyNetwork.total = element.count
this.fireProtectionWaterSystem.waterSupplyNetwork.details = element.description
} else if (element.facilityName == '自动喷水灭火系统') {
this.fireProtectionWaterSystem.sprinklerSystem.total = element.count
this.fireProtectionWaterSystem.sprinklerSystem.details = element.description
}
} else if (element.groupName == '消防灭火给水系统') {
if (element.facilityName == '自动喷水灭火系统') {
this.FireExtinguishingWaterSupplySystem.sprinklerSystem.total = element.count
this.FireExtinguishingWaterSupplySystem.sprinklerSystem.details = element.description
} else if (element.facilityName == '气体自动灭火系统') {
this.FireExtinguishingWaterSupplySystem.AutomaticGasFireExtinguishingSystem.total = element.count
this.FireExtinguishingWaterSupplySystem.AutomaticGasFireExtinguishingSystem.details = element.description
} else if (element.facilityName == '消防泵房') {
this.FireExtinguishingWaterSupplySystem.firePumpRoom.total = element.count
this.FireExtinguishingWaterSupplySystem.firePumpRoom.details = element.description
}
} else if (element.groupName == '其它') {
if (element.facilityName == '排烟系统') {
this.other.purgingSystem.total = element.count
this.other.purgingSystem.details = element.description
} else if (element.facilityName == '灭火器') {
this.other.fireExtinguisher.total = element.count
this.other.fireExtinguisher.details = element.description
} else if (element.facilityName == '气体灭火') {
this.other.extinctionUsingGas.total = element.count
this.other.extinctionUsingGas.details = element.description
} else if (element.facilityName == '消防通信') {
this.other.fireControlCommunication.total = element.count
this.other.fireControlCommunication.details = element.description
}
} else if (element.groupName == '消防设施') {
if (element.facilityName == '自动报警系统') {
this.fireFightingEquipment.automaticAlarmSystem.total = element.count
this.fireFightingEquipment.automaticAlarmSystem.details = element.description
} else if (element.facilityName == '消防泵') {
this.fireFightingEquipment.firePump.total = element.count
this.fireFightingEquipment.firePump.details = element.description
}
} else if (element.groupName == '消火栓系统') {
if (element.facilityName == '灭火剂') {
this.hydrantSystem.fireExtinguishingAgent.total = element.count
this.hydrantSystem.fireExtinguishingAgent.details = element.description
} else if (element.facilityName == '报警设施') {
this.hydrantSystem.AlarmFacilities.total = element.count
this.hydrantSystem.AlarmFacilities.details = element.description
} else if (element.facilityName == '消防管网') {
this.hydrantSystem.FireControlPipeNetwork.total = element.count
this.hydrantSystem.FireControlPipeNetwork.details = element.description
}
} else if (element.groupName == '其它设施') {
if (element.facilityName == '优先广播') {
this.otherFacilities.givePriorityToBroadcast.total = element.count
this.otherFacilities.givePriorityToBroadcast.details = element.description
} else if (element.facilityName == 'VI检测仪') {
this.otherFacilities.VIdetector.total = element.count
this.otherFacilities.VIdetector.details = element.description
} else if (element.facilityName == '泡沫水喷雾系统') {
this.otherFacilities.foamWaterSpraySystem.total = element.count
this.otherFacilities.foamWaterSpraySystem.details = element.description
}
} else if (element.groupName == '自动消防设施') {
if (element.facilityName == '喷水灭火系统') {
this.automaticFireProtectionFacility.fireSprinklingSystem.total = element.count
this.automaticFireProtectionFacility.fireSprinklingSystem.details = element.description
} else if (element.facilityName == '自动报警系统') {
this.automaticFireProtectionFacility.automaticAlarmSystem.total = element.count
this.automaticFireProtectionFacility.automaticAlarmSystem.details = element.description
} else if (element.facilityName == '防排烟系统') {
this.automaticFireProtectionFacility.smokeControlAndExhaustSystem.total = element.count
this.automaticFireProtectionFacility.smokeControlAndExhaustSystem.details = element.description
} else if (element.facilityName == '水幕系统') {
this.automaticFireProtectionFacility.waterCurtainSystem.total = element.count
this.automaticFireProtectionFacility.waterCurtainSystem.details = element.description
} else if (element.facilityName == '消防泵') {
this.automaticFireProtectionFacility.firePump.total = element.count
this.automaticFireProtectionFacility.firePump.details = element.description
}
} else if (element.groupName == '消防水源') {
if (element.facilityName == '消防水池') {
this.fireWaterSupply.firePool.total = element.count
this.fireWaterSupply.firePool.details = element.description
}
}
}) : null
console.log(5888, this.FacilityStat)
//保存建筑消防设施可选分组
editBuildingOptional (e,item) {
let companyId = this.route.snapshot.queryParams.id
e.stopPropagation() //阻止冒泡
item.propertyInfos.forEach((element,index) => {
element.propertyValue = String(element.propertyValue)
if (index == item.propertyInfos.length-1 ) {
this.http.post('/api/BuildingOptionalGroups',item,{params:{
companyId :companyId
}}).subscribe(data=>{
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('数据更新成功','确定',config);
})
} //if
});
}
//建筑消防设施切换展开面板
SwitchBuildingBoard(item, e) {
SwitchBuildingBoard (item,e) {
e.expanded = !e.expanded
if (e.expanded) { //展开面板展开时
if (e.isEachFloor) { //逐层统计时
@ -423,66 +365,58 @@ export class FireFightingDeviceLookComponent implements OnInit {
if (data) {
e.loopTable = []
data.forEach(item => {
let tableMsg = { name: item.name, header: [], body: [] }
let tableMsg = {name:item.name, header:[], body:[]}
item.assets[0].propertyInfos.forEach(element => { //表头
if (element.propertyType != 3) {
let unit = element.physicalUnit ? '(' + element.physicalUnit + ')' : '' //单位
tableMsg.header.push(element.propertyName + unit)
}
if (element.propertyType!=3) {
let unit = element.physicalUnit? '('+ element.physicalUnit +')' : '' //单位
tableMsg.header.push(element.propertyName+unit)}
});
item.assets.forEach(element => { //表格内容
let everyBody = {}
element.propertyInfos.forEach((elements, index) => {
if (elements.propertyType != 3 && elements.propertyName != '图片' && elements.propertyType != 6) {
let unit = elements.physicalUnit ? '(' + elements.physicalUnit + ')' : '' //单位
everyBody[elements.propertyName + unit] = elements.propertyValue
}
if (elements.propertyType == 6) {
let unit = elements.physicalUnit ? '(' + elements.physicalUnit + ')' : '' //单位
everyBody[elements.propertyName + unit] = elements.propertyValue == '1' ? '是' : '否'
}
if (elements.propertyType != 3 && elements.propertyName == '图片') {
element.propertyInfos.forEach((elements,index) => {
if (elements.propertyType!=3 && elements.propertyName!='图片' && elements.propertyType!=6) {
let unit = elements.physicalUnit? '('+ elements.physicalUnit +')' : '' //单位
everyBody[elements.propertyName+unit] = elements.propertyValue }
if (elements.propertyType==6) {
let unit = elements.physicalUnit? '('+ elements.physicalUnit +')' : '' //单位
everyBody[elements.propertyName+unit] = elements.propertyValue=='1'?'是':'否' }
if (elements.propertyType!=3 && elements.propertyName=='图片') {
let imgLength = []
element.propertyInfos.find(item => { if (item.propertyType == 3) { imgLength.push(item) } })
let unit = elements.physicalUnit ? '(' + elements.physicalUnit + ')' : '' //单位
everyBody[elements.propertyName + unit] = String(imgLength.length)
}
element.propertyInfos.find(item=>{ if(item.propertyType==3){imgLength.push(item)} })
let unit = elements.physicalUnit? '('+ elements.physicalUnit +')' : '' //单位
everyBody[elements.propertyName+unit] = String(imgLength.length) }
}); //propertyInfos
tableMsg.body.push(everyBody)
}); //assets
e.loopTable.push(tableMsg)
});
} //data有数据时
} else { //非逐层统计时
let data = item.buildingDetails[e.name]
if (data) {
if (data) {
e.header = []
e.body = []
data[0].propertyInfos.forEach(element => { //表头
if (element.propertyType != 3) {
let unit = element.physicalUnit ? '(' + element.physicalUnit + ')' : '' //单位
e.header.push(element.propertyName + unit)
}
if (element.propertyType!=3) {
let unit = element.physicalUnit? '('+ element.physicalUnit +')' : '' //单位
e.header.push(element.propertyName+unit)}
});
data.forEach(element => { //表格内容
let everyBody = {}
element.propertyInfos.forEach((elements, index) => {
if (elements.propertyType != 3 && elements.propertyName != '图片' && elements.propertyType != 6) {
let unit = elements.physicalUnit ? '(' + elements.physicalUnit + ')' : '' //单位
everyBody[elements.propertyName + unit] = elements.propertyValue
}
if (elements.propertyType == 6) {
let unit = elements.physicalUnit ? '(' + elements.physicalUnit + ')' : '' //单位
everyBody[elements.propertyName + unit] = elements.propertyValue == '1' ? '是' : '否'
}
if (elements.propertyType != 3 && elements.propertyName == '图片') {
element.propertyInfos.forEach((elements,index) => {
if (elements.propertyType!=3 && elements.propertyName!='图片' && elements.propertyType!=6) {
let unit = elements.physicalUnit? '('+ elements.physicalUnit +')' : '' //单位
everyBody[elements.propertyName+unit] = elements.propertyValue }
if (elements.propertyType==6) {
let unit = elements.physicalUnit? '('+ elements.physicalUnit +')' : '' //单位
everyBody[elements.propertyName+unit] = elements.propertyValue=='1'?'是':'否' }
if (elements.propertyType!=3 && elements.propertyName=='图片') {
let imgLength = []
element.propertyInfos.find(item => { if (item.propertyType == 3) { imgLength.push(item) } })
let unit = elements.physicalUnit ? '(' + elements.physicalUnit + ')' : '' //单位
everyBody[elements.propertyName + unit] = String(imgLength.length)
}
element.propertyInfos.find(item=>{ if(item.propertyType==3){imgLength.push(item)} })
let unit = elements.physicalUnit? '('+ elements.physicalUnit +')' : '' //单位
everyBody[elements.propertyName+unit] = String(imgLength.length) }
});
e.body.push(everyBody)
@ -496,141 +430,131 @@ export class FireFightingDeviceLookComponent implements OnInit {
}
}
//单位消防设施预览图片
previewImg(e) {
previewImg (e) {
if (e.isEachFloor) { //逐层统计时
let newData = this.companyEachDetails[e.name]
if (newData) {
let data = { name: e.name, images: [] }
let imgName
let data = {name:e.name, images:[]}
let imgName
newData.forEach(item => {
item.assets.forEach(element => {
element.propertyInfos.forEach(elements => {
if (elements.propertyName.includes('名称')) { imgName = elements.propertyValue }
if (elements.propertyType === 3) {
elements.propertyName = imgName
data.images.push(elements)
}
});
element.propertyInfos.forEach( elements => {
if (elements.propertyName.includes('名称')) {imgName = elements.propertyValue}
if (elements.propertyType===3) {
elements.propertyName = imgName
data.images.push(elements)} });
});
}); //newDate
if (data.images.length) {
let dialogRef = this.dialog.open(ImagesData2, { data }); //打开图片弹窗
let dialogRef = this.dialog.open(ImagesData2,{data}); //打开图片弹窗
} else {
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('暂无图片数据', '确定', config);
this.snackBar.open('暂无图片数据','确定',config);
}
} else {
} else{
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('暂无图片数据', '确定', config);
}
this.snackBar.open('暂无图片数据','确定',config); }
} else { //非逐层统计时
let newData = this.companyDetails[e.name]
let imgName
let imgName
if (newData) {
let data = { name: e.name, images: [] }
let data = {name:e.name, images:[]}
newData.forEach(element => {
element.propertyInfos.forEach(elements => {
if (elements.propertyName.includes('名称')) { imgName = elements.propertyValue }
if (elements.propertyType === 3) {
element.propertyInfos.forEach(elements => {
if (elements.propertyName.includes('名称')) {imgName = elements.propertyValue}
if (elements.propertyType===3) {
elements.propertyName = imgName
data.images.push(elements)
}
});
data.images.push(elements)} });
});
if (data.images.length) {
let dialogRef = this.dialog.open(ImagesData2, { data }); //打开图片弹窗
let dialogRef = this.dialog.open(ImagesData2,{data}); //打开图片弹窗
} else {
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('暂无图片数据', '确定', config);
this.snackBar.open('暂无图片数据','确定',config);
}
} else {
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('暂无图片数据', '确定', config);
}
this.snackBar.open('暂无图片数据','确定',config); }
}
}
//建筑消防设施预览图片
previewBuildingImg(item, e) {
previewBuildingImg (item,e) {
if (e.isEachFloor) { //逐层统计时
let newData = item.buildingEachDetails[e.name]
if (newData) {
let data = { name: e.name, images: [] }
let data = {name:e.name, images:[]}
let imgName
newData.forEach(item => {
item.assets.forEach(element => {
element.propertyInfos.forEach(elements => {
if (elements.propertyName.includes('名称')) { imgName = elements.propertyValue }
if (elements.propertyType === 3) {
elements.propertyName = imgName
data.images.push(elements)
}
});
element.propertyInfos.forEach( elements => {
if (elements.propertyName.includes('名称')) {imgName = elements.propertyValue}
if (elements.propertyType===3) {
elements.propertyName = imgName
data.images.push(elements)} });
});
}); //newDate
if (data.images.length) {
let dialogRef = this.dialog.open(ImagesData2, { data }); //打开图片弹窗
let dialogRef = this.dialog.open(ImagesData2,{data}); //打开图片弹窗
} else {
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('暂无图片数据', '确定', config);
this.snackBar.open('暂无图片数据','确定',config);
}
} else {
} else{
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('暂无图片数据', '确定', config);
}
this.snackBar.open('暂无图片数据','确定',config); }
} else { //非逐层统计时
let newData = item.buildingDetails[e.name]
let imgName
let imgName
if (newData) {
let data = { name: e.name, images: [] }
let data = {name:e.name, images:[]}
newData.forEach(element => {
element.propertyInfos.forEach(elements => {
if (elements.propertyName.includes('名称')) { imgName = elements.propertyValue }
if (elements.propertyType === 3) {
element.propertyInfos.forEach(elements => {
if (elements.propertyName.includes('名称')) {imgName = elements.propertyValue}
if (elements.propertyType===3) {
elements.propertyName = imgName
data.images.push(elements)
}
});
data.images.push(elements)}
});
});
if (data.images.length) {
let dialogRef = this.dialog.open(ImagesData2, { data }); //打开图片弹窗
let dialogRef = this.dialog.open(ImagesData2,{data}); //打开图片弹窗
} else {
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('暂无图片数据', '确定', config);
this.snackBar.open('暂无图片数据','确定',config);
}
} else {
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('暂无图片数据', '确定', config);
}
this.snackBar.open('暂无图片数据','确定',config); }
}
}
}

843
src/app/key-unit/fire-fighting-device/fire-fighting-device.component.ts

File diff suppressed because it is too large Load Diff

37
src/app/key-unit/key-unit-management/key-unit-management.component.html

@ -16,8 +16,8 @@
</mat-form-field>
<span *ngIf="padMore" style="margin-left: 10px; color: #0080FF;" (click)='padInfo()'>更多筛选条件<img
[src]='imgsrcopen'> </span>
<span *ngIf="padput" style="margin-left: 10px; color: #0080FF;width: 10px;height: 6px;"
(click)='padInfo()'>收起<img [src]='imgsrcdown'> </span>
<span *ngIf="padput" style="margin-left: 10px; color: #0080FF;width: 10px;height: 6px;" (click)='padInfo()'>收起<img
[src]='imgsrcdown'> </span>
</div>
<div class="queryField" *ngIf="!pcfind">
@ -25,11 +25,11 @@
<button mat-raised-button style="margin-left: 25px;" type="button" (click)="reset()">重置</button>
</div>
<div class="queryField" *ngIf="!padMore">
<label style="margin-right: 10px;">重点单位:</label>
<label style="margin-right: 10px;">关注单位:</label>
<mat-form-field>
<mat-select placeholder='请选择单位是否为重点' [(ngModel)]="follow" name="follow">
<mat-option value="0">一般单位</mat-option>
<mat-option value="1">重点单位</mat-option>
<mat-select placeholder='请选择单位是否关注' [(ngModel)]="follow" name="follow">
<mat-option value="0">未关注</mat-option>
<mat-option value="1">已关注</mat-option>
</mat-select>
</mat-form-field>
@ -44,11 +44,9 @@
</mat-select>
</mat-form-field>
<span *ngIf="pcMore" style="margin-left: 10px; color: #0080FF; cursor: pointer;"
(click)='pcInfo()'>更多筛选条件<img [src]='imgsrcopen'
style="width: 10px;height: 6px;margin:0 0 3px 2px;"> </span>
(click)='pcInfo()'>更多筛选条件<img [src]='imgsrcopen'style="width: 10px;height: 6px;margin:0 0 3px 2px;"> </span>
<span *ngIf="pcput" style="margin-left: 10px; color: #0080FF; cursor: pointer;"
(click)='pcInfo()'>收起<img [src]='imgsrcdown'
style="width: 10px;height: 6px;margin:0 0 3px 2px;"> </span>
(click)='pcInfo()'>收起<img [src]='imgsrcdown' style="width: 10px;height: 6px;margin:0 0 3px 2px;"> </span>
</div>
<div class="queryField" *ngIf="pcfind">
<button mat-raised-button color="primary">查询</button>
@ -114,13 +112,11 @@
</mat-form-field>
</div>
<div class="queryField" *ngIf="!padMore&&!pcMore">
<input type="radio" [(ngModel)]="IsNewData"
style="height: 16px;width: 16px;position: relative;top: 2px;" name="whgx" [value]='true'>
<input type="radio" [(ngModel)]="IsNewData" style="height: 16px;width: 16px;position: relative;top: 2px;" name="whgx" [value]='true'>
<label style="margin-right: 10px;margin-left: 2px;">新增</label>
<input type="radio" [(ngModel)]="IsNewData"
style="height: 16px;width: 16px;position: relative;top: 2px;" name="whgx" [value]='false'>
<input type="radio" [(ngModel)]="IsNewData" style="height: 16px;width: 16px;position: relative;top: 2px;" name="whgx" [value]='false'>
<label style="margin-right: 10px;margin-left: 2px;">维护更新</label>
</div>
</div>
</div>
@ -150,7 +146,7 @@
</th>
<td mat-cell *matCellDef="let element">
<span title="重点单位" *ngIf="element.isFollowed">
<span title="已关注" *ngIf="element.isFollowed">
<mat-icon style="margin-top: 6px;color: red;">star</mat-icon>
</span>
@ -159,8 +155,8 @@
<ng-container matColumnDef="state">
<th mat-header-cell *matHeaderCellDef style="width: 10%;">单位状态</th>
<td mat-cell *matCellDef="let element">
<span class="add" *ngIf="element.isNewData">新增</span>
<span class="weihu" *ngIf="!element.isNewData">维护更新</span>
<span class="add" *ngIf="element.isNewData">新增</span>
<span class="weihu" *ngIf="!element.isNewData">维护更新</span>
</td>
</ng-container>
<ng-container matColumnDef="unitname">
@ -352,7 +348,6 @@
<ng-container matColumnDef="operation">
<th mat-header-cell *matHeaderCellDef>操作</th>
<td mat-cell *matCellDef="let element" class="operation">
<!-- <span (click)="drill(element)">演练</span> -->
<span (click)="unitdetails(element)">查看详情</span>
<span style="color: blue;margin-left: 4px;"
*ngIf="(element.isNewData && (element.newVerifyState=='未提交审核'||element.newVerifyState=='审核通过'
@ -362,8 +357,8 @@
*ngIf="element.contentVerify!=null&&(element.contentVerify.verifyState==0||element.contentVerify.verifyState==3) "
(click)="cancelAudit(element)">撤销审核</span>
<span style="color: blue;margin-left: 4px;" (click)="auditResult(element)">审批结果</span>
<span (click)="Follow(element)" *ngIf="!element.isFollowed">重点单位</span>
<span (click)="unFollow(element)" *ngIf="element.isFollowed">一般单位</span>
<span (click)="Follow(element)" *ngIf="!element.isFollowed">关注单位</span>
<span (click)="unFollow(element)" *ngIf="element.isFollowed">取消关注</span>
</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>

1495
src/app/key-unit/key-unit-management/key-unit-management.component.ts

File diff suppressed because it is too large Load Diff

119
src/app/key-unit/key-unit-management/upload-drill/upload-drill.component.html

@ -1,119 +0,0 @@
<h2 mat-dialog-title>演练记录</h2>
<div class="box">
<div class="contentItem">
<div class="title">
单位信息
</div>
<div class="content">
<div class="textbox">
<span class="name">单位名称:</span>
<span>{{data.unitInfo.name}}</span>
</div>
<div class="textbox">
<span class="name">单位地址:</span>
<span>{{data.unitInfo.address}}</span>
</div>
<div class="textbox">
<span class="name">联系人:</span>
<span>{{data.unitInfo.contacts}}</span>
</div>
<div class="textbox">
<span class="name">联系电话:</span>
<span>{{data.unitInfo.phone}}</span>
</div>
</div>
</div>
<div class="contentItem">
<div class="title">
调研人员
</div>
<div class="content peoplecontent">
<div>
<span class="name">带队人员:</span>
<input [disabled]="!isEditMode" name="teamLeader" [(ngModel)]="teamLeader" nz-input
placeholder="带队人员" />
</div>
<div>
<span class="name">熟悉时间:</span>
<nz-range-picker [disabled]="!isEditMode" [nzShowTime]="{ nzFormat: 'HH:mm' }"
nzFormat="yyyy-MM-dd HH:mm" [nzPlaceHolder]="['开始时间', '结束时间']" name="time"
[(ngModel)]="time"></nz-range-picker>
</div>
<div>
<span class="name">调研照片:</span>
<div class="uploadbox">
<input *ngIf="isEditMode" type="file" (change)="upload($event,'调研')">
<button *ngIf="isEditMode" nz-button nzType="default">上传照片</button>
<ul class="imgbox">
<li *ngFor="let item of surveyPhoto;let key = index"><img [src]="item" alt=""
(click)="viewImg(item)">
<span *ngIf="isEditMode" class="close material-icons" (click)="deleteImg(surveyPhoto,key)">
cancel
</span>
</li>
</ul>
</div>
</div>
</div>
</div>
<div class="contentItem">
<div class="title">
熟悉内容
</div>
<div class="content photocontent">
<div>
<span class="name">水源照片:</span>
<div class="uploadbox">
<input *ngIf="isEditMode" type="file" (change)="upload($event,'水源')">
<button *ngIf="isEditMode" nz-button nzType="default">上传照片</button>
<ul class="imgbox">
<li *ngFor="let item of waterPhoto;let key = index"><img [src]="item" alt=""
(click)="viewImg(item)">
<span *ngIf="isEditMode" class="close material-icons" (click)="deleteImg(waterPhoto,key)">
cancel
</span>
</li>
</ul>
</div>
</div>
<div>
<span class="name">疏散通道:</span>
<div class="uploadbox">
<input *ngIf="isEditMode" type="file" (change)="upload($event,'疏散通道')">
<button *ngIf="isEditMode" nz-button nzType="default">上传照片</button>
<ul class="imgbox">
<li *ngFor="let item of routePhoto;let key = index"><img [src]="item" alt=""
(click)="viewImg(item)">
<span *ngIf="isEditMode" class="close material-icons" (click)="deleteImg(routePhoto,key)">
cancel
</span>
</li>
</ul>
</div>
</div>
<div>
<span class="name">消控室:</span>
<div class="uploadbox">
<input *ngIf="isEditMode" type="file" (change)="upload($event,'消控室')">
<button *ngIf="isEditMode" nz-button nzType="default">上传照片</button>
<ul class="imgbox">
<li *ngFor="let item of fireControlPhoto;let key = index"><img [src]="item" alt=""
(click)="viewImg(item)">
<span *ngIf="isEditMode" class="close material-icons"
(click)="deleteImg(fireControlPhoto,key)">
cancel
</span>
</li>
</ul>
</div>
</div>
</div>
</div>
<div class="mask" *ngIf="isLoading">
<mat-spinner [diameter]="30"></mat-spinner>
</div>
</div>
<mat-dialog-actions align="end">
<button mat-button mat-dialog-close [disabled]="isLoading || isLoadingSave">取消</button>
<button mat-button cdkFocusInitial (click)="save()" [disabled]="isLoading || isLoadingSave">确定</button>
</mat-dialog-actions>

120
src/app/key-unit/key-unit-management/upload-drill/upload-drill.component.scss

@ -1,120 +0,0 @@
.box {
width: 100%;
position: relative;
.contentItem {
display: flex;
margin: 6px 0;
border-bottom: 1px dashed rgb(180, 178, 178);
.title {
width: 75px;
color: #1890ff;
display: flex;
align-items: center;
}
.content {
flex: 1;
display: flex;
flex-wrap: wrap;
div {
margin-bottom: 3px;
.name {
display: inline-block;
width: 70px;
margin-right: 3px;
text-align: right;
}
}
}
.peoplecontent,
.photocontent {
flex-direction: column;
div {
display: flex;
align-items: center;
input,
nz-range-picker {
flex: 1;
}
}
}
.textbox {
height: 32px;
line-height: 32px;
width: 50%;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.uploadbox {
position: relative;
display: flex;
align-items: center;
input {
width: 88px;
height: 32px;
position: absolute;
left: 0;
top: 0;
opacity: 0;
z-index: 2;
cursor: pointer;
}
button {
z-index: 1;
cursor: pointer;
}
.imgbox {
height: 100%;
display: flex;
align-items: center;
li {
display: flex;
align-items: center;
position: relative;
}
img {
width: 50px;
height: 50px;
margin: 0 5px;
cursor: pointer;
}
.close{
position: absolute;
right: 0;
top: 0;
font-size: 15px;
cursor: pointer;
}
}
}
}
.mask {
position: absolute;
width: 100%;
height: 100%;
left: 0;
top: 0;
background: rgba(0, 0, 0, 0.2);
display: flex;
justify-content: center;
align-items: center;
z-index: 3;
}
}

25
src/app/key-unit/key-unit-management/upload-drill/upload-drill.component.spec.ts

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

203
src/app/key-unit/key-unit-management/upload-drill/upload-drill.component.ts

@ -1,203 +0,0 @@
import { HttpClient } from "@angular/common/http";
import { Component, OnInit, Inject } from "@angular/core";
import { MatDialogRef, MAT_DIALOG_DATA } from "@angular/material/dialog";
import { ObjectsService } from "@src/app/services/objects.service";
import { DatePipe } from "@angular/common";
import { MatSnackBar } from "@angular/material/snack-bar";
import Viewer from "viewerjs";
@Component({
selector: "app-upload-drill",
templateUrl: "./upload-drill.component.html",
styleUrls: ["./upload-drill.component.scss"],
providers: [DatePipe],
})
export class UploadDrillComponent implements OnInit {
constructor(
public dialogRef: MatDialogRef<UploadDrillComponent>,
@Inject(MAT_DIALOG_DATA) public data: any,
private objectsSer: ObjectsService,
private http: HttpClient,
private datePipe: DatePipe,
public snackBar: MatSnackBar
) {}
isEditMode = true;
ngOnInit(): void {
console.log(this.data);
this.isEditMode = this.data.isEditMode;
this.getData();
}
isHttpPost;
getData() {
this.http
.get("/api/DrillRecords", {
params: {
CompanyId: this.data.unitInfo.id,
},
})
.subscribe((data: any) => {
console.log("演练记录数据", data);
if (data.totalCount === 0) {
this.isHttpPost = true;
} else {
this.isHttpPost = false;
let item = data.items[0];
this.drillId = item.id;
this.teamLeader = item.teamLeader;
this.time = [item.startTime, item.endTime];
this.surveyPhoto = JSON.parse(item.images);
this.waterPhoto = JSON.parse(item.waterSource);
this.routePhoto = JSON.parse(item.escapeRoute);
this.fireControlPhoto = JSON.parse(item.fireControlRoom);
}
});
}
surveyPhoto = [
// "../../../../assets/images/yiyuan.png",
// "../../../../assets/images/homeHeader.png",
// "../../../../assets/images/add.png",
]; //调研人员照片
waterPhoto = []; //水源照片
routePhoto = []; //疏散照片
fireControlPhoto = []; //消控室照片
//设置文件路径并上传
postFilePath;
isLoading = false;
async upload(e, type) {
this.isLoading = true;
let file = e.target.files[0] || null; //获取上传的文件
let fileSize = file.size || null; //上传文件的总大小
let shardSize = 5 * 1024 * 1024; //5MB 超过5MB要分块上传
this.postFilePath = "演练记录/" + this.data.unitInfo.id;
if (fileSize >= shardSize) {
await this.postFileByMul(file, type);
} else {
await this.postFile(file, type);
}
this.isLoading = false;
}
//直接上传
async postFile(file: File, type) {
await new Promise((resolve, reject) => {
this.objectsSer.postFile(this.postFilePath, file).subscribe((data) => {
let dataObj = data as any;
let filePath: string = ObjectsService.baseUrl + dataObj.objectName;
this.setFileUrl(type, filePath);
resolve("success");
});
});
}
//分块上传
async postFileByMul(file: File, type) {
await new Promise((resolve, reject) => {
this.objectsSer
.postFile_MultipartUpload(this.postFilePath, file)
.then((value) => {
console.log("分块上传成功", value);
let dataObj = value as any;
this.setFileUrl(type, dataObj.filePath + dataObj.fileName);
resolve("success");
});
});
}
setFileUrl(type, filePath) {
switch (type) {
case "调研":
this.surveyPhoto.push(filePath);
break;
case "水源":
this.waterPhoto.push(filePath);
break;
case "疏散通道":
this.routePhoto.push(filePath);
break;
case "消控室":
this.fireControlPhoto.push(filePath);
break;
}
}
deleteImg(arr, key) {
if (confirm("确认删除此照片吗")) {
arr.splice(key, 1);
}
}
teamLeader;
time;
drillId;
isLoadingSave = false;
save() {
if (!this.isEditMode) {
this.dialogRef.close();
return;
}
if (!this.teamLeader || !this.time) {
this.snackBar.open("请输入带队人员和熟悉时间", "确定", {
verticalPosition: "top",
duration: 3000,
});
return;
}
this.isLoadingSave = true;
let body: any = {
companyId: this.data.unitInfo.id,
teamLeader: this.teamLeader,
startTime: this.datePipe.transform(this.time[0], "yyyy-MM-ddTHH:mm:ss"),
endTime: this.datePipe.transform(this.time[1], "yyyy-MM-ddTHH:mm:ss"),
images: JSON.stringify(this.surveyPhoto),
waterSource: JSON.stringify(this.waterPhoto),
escapeRoute: JSON.stringify(this.routePhoto),
fireControlRoom: JSON.stringify(this.fireControlPhoto),
};
if (this.isHttpPost) {
this.http.post("/api/DrillRecords", body).subscribe((data: any) => {
this.drillId = data.id;
this.isHttpPost = false;
this.isLoadingSave = false;
this.snackBar.open("保存成功", "确定", {
verticalPosition: "top",
duration: 3000,
});
this.dialogRef.close();
});
} else {
body.id = this.drillId;
this.http
.put(`/api/DrillRecords/${this.drillId}`, body)
.subscribe((data: any) => {
this.isLoadingSave = false;
this.snackBar.open("保存成功", "确定", {
verticalPosition: "top",
duration: 3000,
});
this.dialogRef.close();
});
}
}
//查看图片
viewImg(url) {
let dom = document.getElementById(`viewerjs`);
let pObjs = dom.childNodes;
let node = document.createElement("img");
node.style.display = "none";
node.src = url;
node.id = "img";
dom.appendChild(node);
setTimeout(() => {
let viewer = new Viewer(document.getElementById(`viewerjs`), {
hidden: () => {
dom.removeChild(pObjs[0]);
viewer.destroy();
},
});
node.click();
}, 0);
}
}

294
src/app/key-unit/key-unit.module.ts

@ -1,203 +1,94 @@
import { NgModule } from "@angular/core";
import { CommonModule } from "@angular/common";
import { KeyUnitRoutingModule } from "./key-unit-routing.module";
import {
KeyUnitManagementComponent,
CreateUnit,
} from "./key-unit-management/key-unit-management.component";
import { A11yModule } from "@angular/cdk/a11y";
import { DragDropModule } from "@angular/cdk/drag-drop";
import { PortalModule } from "@angular/cdk/portal";
import { ScrollingModule } from "@angular/cdk/scrolling";
import { CdkStepperModule } from "@angular/cdk/stepper";
import { CdkTableModule } from "@angular/cdk/table";
import { CdkTreeModule } from "@angular/cdk/tree";
import { MatAutocompleteModule } from "@angular/material/autocomplete";
import { MatBadgeModule } from "@angular/material/badge";
import { MatBottomSheetModule } from "@angular/material/bottom-sheet";
import { MatButtonModule } from "@angular/material/button";
import { MatButtonToggleModule } from "@angular/material/button-toggle";
import { MatCardModule } from "@angular/material/card";
import { MatCheckboxModule } from "@angular/material/checkbox";
import { MatChipsModule } from "@angular/material/chips";
import { MatStepperModule } from "@angular/material/stepper";
import { MatDatepickerModule } from "@angular/material/datepicker";
import { MatDialogModule } from "@angular/material/dialog";
import { MatDividerModule } from "@angular/material/divider";
import { MatExpansionModule } from "@angular/material/expansion";
import { MatGridListModule } from "@angular/material/grid-list";
import { MatIconModule } from "@angular/material/icon";
import { MatInputModule } from "@angular/material/input";
import { MatListModule } from "@angular/material/list";
import { MatMenuModule } from "@angular/material/menu";
import {
MatNativeDateModule,
MatRippleModule,
MatOption,
} from "@angular/material/core";
import { MatPaginatorModule } from "@angular/material/paginator";
import { MatProgressBarModule } from "@angular/material/progress-bar";
import { MatProgressSpinnerModule } from "@angular/material/progress-spinner";
import { MatRadioModule } from "@angular/material/radio";
import { MatSelectModule } from "@angular/material/select";
import { MatSidenavModule } from "@angular/material/sidenav";
import { MatSliderModule } from "@angular/material/slider";
import { MatSlideToggleModule } from "@angular/material/slide-toggle";
import { MatSnackBarModule } from "@angular/material/snack-bar";
import { MatSortModule } from "@angular/material/sort";
import { MatTableModule } from "@angular/material/table";
import { MatTabsModule } from "@angular/material/tabs";
import { MatToolbarModule } from "@angular/material/toolbar";
import { MatTooltipModule } from "@angular/material/tooltip";
import { MatTreeModule } from "@angular/material/tree";
import { EditUnitInfoComponent } from "./edit-unit-info/edit-unit-info.component";
import { ViewUnitDetailsComponent } from "./view-unit-details/view-unit-details.component";
import { ReactiveFormsModule, FormsModule } from "@angular/forms";
import { AddHouseInfo } from "./basicinfo/addhouseinfo.component";
import { LookMaster } from "./basicinfo/lookmaster.component";
import {
BasicinfoComponent,
StatisticsOfFireFightingFacilities,
} from "./basicinfo/basicinfo.component";
import { EditPlanInfoComponent } from "./edit-plan-info/edit-plan-info.component";
import { CountdownModule } from "ngx-countdown";
import { BasicinfoLookComponent } from "./basicinfo-look/basicinfo.component";
import { ViewUnitDetailsPlanComponent } from "./view-unit-details-plan/view-unit-details-plan.component";
import {
FunctionDivisionComponent,
addPartition,
addPartitionAttribute,
} from "./function-division/function-division.component";
import { AllaroundComponent } from "./allaround/allaround.component";
import { ImgDetails } from "./allaround/imgdetails.component";
import {
RealisticPictureComponent,
previewImg,
addRealPicture,
editRealPicture,
} from "./realistic-picture/realistic-picture.component";
import { FileUploadModule } from "ng2-file-upload";
import { KeySiteComponent } from "./key-site/key-site.component";
import { KeySiteImgs } from "./key-site/keysiteimgs.component";
import {
UploadingCADComponent,
readFile,
editFile,
} from "./uploading-cad/uploading-cad.component";
import { KeySiteLookComponent } from "./key-site-look/key-site.component";
import { KeySiteImgs2 } from "./key-site-look/keysiteimgs.component";
import {
FunctionDivisionLookComponent,
addPartitionAttribute2,
} from "./function-division-look/function-division.component";
import {
RealisticPictureLookComponent,
previewImg3,
} from "./realistic-picture-look/realistic-picture.component";
import { UploadingCADLookComponent } from "./uploading-cad-look/uploading-cad.component";
import { FireFightingDeviceComponent } from "./fire-fighting-device/fire-fighting-device.component";
import {
ImagesData,
previewBigImg,
} from "./fire-fighting-device/imagesdata.component";
import { ImgsDataDetail } from "./fire-fighting-device/addGrouping.component";
import { FireFightingDeviceLookComponent } from "./fire-fighting-device-look/fire-fighting-device.component";
import {
ImagesData2,
previewBigImg2,
} from "./fire-fighting-device-look/imagesdata.component";
import { ImgsDataDetail2 } from "./fire-fighting-device-look/addGrouping.component";
import { UiModule } from "../../app/ui/ui.module";
import {
SixFamiliarityComponent,
routerMapComponent,
} from "./six-familiarity/six-familiarity.component";
import { ActualCombatDrillComponent } from "./actual-combat-drill/actual-combat-drill.component";
import { SixFamiliarListComponent } from "./six-familiar-list/six-familiar-list.component";
import { TrainingRecordinfoComponent } from "./training-recordinfo/training-recordinfo.component";
import { RouterGISComponent } from "./router-gis/router-gis.component";
import { WaterRoadComponent } from "./water-road/water-road.component";
import { PhotoofthesceneComponent } from "./photoofthescene/photoofthescene.component";
import { KnowRouteComponent } from "./know-route/know-route.component";
import { FindProblemComponent } from "./find-problem/find-problem.component";
import { upname } from "./key-unit-management/key-unit-management.component";
import { companyAuditResult } from "./key-unit-management/key-unit-management.component";
import { SpecialWarningComponent } from "./special-warning/special-warning.component";
import { UploadDrillComponent } from "./key-unit-management/upload-drill/upload-drill.component";
import { NzDatePickerModule } from "ng-zorro-antd/date-picker";
import { NzInputModule } from "ng-zorro-antd/input";
import { NzButtonModule } from "ng-zorro-antd/button";
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { KeyUnitRoutingModule } from './key-unit-routing.module';
import { KeyUnitManagementComponent, CreateUnit } from './key-unit-management/key-unit-management.component';
import {A11yModule} from '@angular/cdk/a11y';
import {DragDropModule} from '@angular/cdk/drag-drop';
import {PortalModule} from '@angular/cdk/portal';
import {ScrollingModule} from '@angular/cdk/scrolling';
import {CdkStepperModule} from '@angular/cdk/stepper';
import {CdkTableModule} from '@angular/cdk/table';
import {CdkTreeModule} from '@angular/cdk/tree';
import {MatAutocompleteModule} from '@angular/material/autocomplete';
import {MatBadgeModule} from '@angular/material/badge';
import {MatBottomSheetModule} from '@angular/material/bottom-sheet';
import {MatButtonModule} from '@angular/material/button';
import {MatButtonToggleModule} from '@angular/material/button-toggle';
import {MatCardModule} from '@angular/material/card';
import {MatCheckboxModule} from '@angular/material/checkbox';
import {MatChipsModule} from '@angular/material/chips';
import {MatStepperModule} from '@angular/material/stepper';
import {MatDatepickerModule} from '@angular/material/datepicker';
import {MatDialogModule} from '@angular/material/dialog';
import {MatDividerModule} from '@angular/material/divider';
import {MatExpansionModule} from '@angular/material/expansion';
import {MatGridListModule} from '@angular/material/grid-list';
import {MatIconModule} from '@angular/material/icon';
import {MatInputModule} from '@angular/material/input';
import {MatListModule} from '@angular/material/list';
import {MatMenuModule} from '@angular/material/menu';
import {MatNativeDateModule, MatRippleModule, MatOption} from '@angular/material/core';
import {MatPaginatorModule} from '@angular/material/paginator';
import {MatProgressBarModule} from '@angular/material/progress-bar';
import {MatProgressSpinnerModule} from '@angular/material/progress-spinner';
import {MatRadioModule} from '@angular/material/radio';
import {MatSelectModule} from '@angular/material/select';
import {MatSidenavModule} from '@angular/material/sidenav';
import {MatSliderModule} from '@angular/material/slider';
import {MatSlideToggleModule} from '@angular/material/slide-toggle';
import {MatSnackBarModule} from '@angular/material/snack-bar';
import {MatSortModule} from '@angular/material/sort';
import {MatTableModule} from '@angular/material/table';
import {MatTabsModule} from '@angular/material/tabs';
import {MatToolbarModule} from '@angular/material/toolbar';
import {MatTooltipModule} from '@angular/material/tooltip';
import {MatTreeModule} from '@angular/material/tree';
import { EditUnitInfoComponent } from './edit-unit-info/edit-unit-info.component';
import { ViewUnitDetailsComponent } from './view-unit-details/view-unit-details.component';
import { ReactiveFormsModule, FormsModule } from '@angular/forms';
import { AddHouseInfo } from './basicinfo/addhouseinfo.component';
import { LookMaster } from './basicinfo/lookmaster.component';
import { BasicinfoComponent, StatisticsOfFireFightingFacilities } from './basicinfo/basicinfo.component';
import { EditPlanInfoComponent } from './edit-plan-info/edit-plan-info.component';
import { CountdownModule } from 'ngx-countdown';
import { BasicinfoLookComponent } from './basicinfo-look/basicinfo.component';
import { ViewUnitDetailsPlanComponent } from './view-unit-details-plan/view-unit-details-plan.component';
import { FunctionDivisionComponent, addPartition, addPartitionAttribute } from './function-division/function-division.component';
import {AllaroundComponent} from './allaround/allaround.component'
import {ImgDetails} from './allaround/imgdetails.component'
import { RealisticPictureComponent, previewImg, addRealPicture, editRealPicture } from './realistic-picture/realistic-picture.component';
import { FileUploadModule } from 'ng2-file-upload';
import {KeySiteComponent} from './key-site/key-site.component'
import {KeySiteImgs} from './key-site/keysiteimgs.component'
import {UploadingCADComponent,readFile,editFile} from './uploading-cad/uploading-cad.component'
import { KeySiteLookComponent } from './key-site-look/key-site.component';
import { KeySiteImgs2 } from './key-site-look/keysiteimgs.component';
import { FunctionDivisionLookComponent, addPartitionAttribute2 } from './function-division-look/function-division.component';
import { RealisticPictureLookComponent, previewImg3 } from './realistic-picture-look/realistic-picture.component';
import { UploadingCADLookComponent } from './uploading-cad-look/uploading-cad.component';
import { FireFightingDeviceComponent } from './fire-fighting-device/fire-fighting-device.component';
import { ImagesData, previewBigImg } from './fire-fighting-device/imagesdata.component';
import { ImgsDataDetail } from './fire-fighting-device/addGrouping.component';
import { FireFightingDeviceLookComponent } from './fire-fighting-device-look/fire-fighting-device.component';
import { ImagesData2, previewBigImg2 } from './fire-fighting-device-look/imagesdata.component';
import { ImgsDataDetail2 } from './fire-fighting-device-look/addGrouping.component';
import { UiModule } from '../../app/ui/ui.module';
import { SixFamiliarityComponent,routerMapComponent } from './six-familiarity/six-familiarity.component';
import { ActualCombatDrillComponent } from './actual-combat-drill/actual-combat-drill.component';
import { SixFamiliarListComponent } from './six-familiar-list/six-familiar-list.component'
import { TrainingRecordinfoComponent } from './training-recordinfo/training-recordinfo.component';
import { RouterGISComponent } from './router-gis/router-gis.component';
import { WaterRoadComponent } from './water-road/water-road.component';
import { PhotoofthesceneComponent } from './photoofthescene/photoofthescene.component';
import { KnowRouteComponent } from './know-route/know-route.component';
import { FindProblemComponent } from './find-problem/find-problem.component';
import { upname } from './key-unit-management/key-unit-management.component';
import { companyAuditResult } from './key-unit-management/key-unit-management.component';
import { SpecialWarningComponent } from './special-warning/special-warning.component'
@NgModule({
declarations: [
KeyUnitManagementComponent,
EditUnitInfoComponent,
ViewUnitDetailsComponent,
CreateUnit,
BasicinfoComponent,
LookMaster,
AddHouseInfo,
EditPlanInfoComponent,
BasicinfoLookComponent,
ViewUnitDetailsPlanComponent,
FunctionDivisionComponent,
addPartition,
addPartitionAttribute,
AllaroundComponent,
ImgDetails,
RealisticPictureComponent,
previewImg,
addRealPicture,
editRealPicture,
KeySiteComponent,
KeySiteImgs,
UploadingCADComponent,
readFile,
editFile,
KeySiteLookComponent,
KeySiteImgs2,
FunctionDivisionLookComponent,
RealisticPictureLookComponent,
previewImg3,
UploadingCADLookComponent,
FireFightingDeviceComponent,
ImagesData,
previewBigImg,
ImgsDataDetail,
FireFightingDeviceLookComponent,
ImagesData2,
ImgsDataDetail2,
previewBigImg2,
addPartitionAttribute2,
SixFamiliarityComponent,
ActualCombatDrillComponent,
routerMapComponent,
SixFamiliarListComponent,
TrainingRecordinfoComponent,
RouterGISComponent,
WaterRoadComponent,
PhotoofthesceneComponent,
KnowRouteComponent,
FindProblemComponent,
upname,
companyAuditResult,
StatisticsOfFireFightingFacilities,
SpecialWarningComponent,
UploadDrillComponent,
],
exports: [
ViewUnitDetailsPlanComponent,
WaterRoadComponent,
BasicinfoLookComponent,
AllaroundComponent,
FireFightingDeviceLookComponent,
KeySiteLookComponent,
FunctionDivisionLookComponent,
RouterGISComponent,
RealisticPictureLookComponent,
UploadingCADLookComponent,
SpecialWarningComponent,
],
declarations: [KeyUnitManagementComponent, EditUnitInfoComponent, ViewUnitDetailsComponent,CreateUnit,BasicinfoComponent,LookMaster,AddHouseInfo, EditPlanInfoComponent,BasicinfoLookComponent, ViewUnitDetailsPlanComponent,FunctionDivisionComponent,addPartition,addPartitionAttribute,AllaroundComponent,ImgDetails,RealisticPictureComponent,previewImg,addRealPicture,editRealPicture,KeySiteComponent,KeySiteImgs,UploadingCADComponent,readFile,editFile,KeySiteLookComponent,KeySiteImgs2,FunctionDivisionLookComponent,RealisticPictureLookComponent,previewImg3,UploadingCADLookComponent,FireFightingDeviceComponent,ImagesData,previewBigImg,ImgsDataDetail,FireFightingDeviceLookComponent,ImagesData2,ImgsDataDetail2,previewBigImg2,addPartitionAttribute2, SixFamiliarityComponent, ActualCombatDrillComponent,routerMapComponent, SixFamiliarListComponent,TrainingRecordinfoComponent,RouterGISComponent,WaterRoadComponent,PhotoofthesceneComponent,KnowRouteComponent,FindProblemComponent,upname,companyAuditResult,StatisticsOfFireFightingFacilities, SpecialWarningComponent],
exports:[ViewUnitDetailsPlanComponent,WaterRoadComponent],
imports: [
CommonModule,
KeyUnitRoutingModule,
@ -248,9 +139,6 @@ import { NzButtonModule } from "ng-zorro-antd/button";
FileUploadModule,
UiModule,
ReactiveFormsModule,
NzDatePickerModule,
NzInputModule,
NzButtonModule,
],
]
})
export class KeyUnitModule {}
export class KeyUnitModule { }

638
src/app/key-unit/realistic-picture-look/realistic-picture.component.ts

@ -1,391 +1,435 @@
import { Component, OnInit, Inject, ViewChild } from "@angular/core";
import { HttpClient } from "@angular/common/http";
import {
MatDialog,
MatDialogRef,
MAT_DIALOG_DATA,
} from "@angular/material/dialog";
import { MatPaginator } from "@angular/material/paginator";
import { MatSnackBar, MatSnackBarConfig } from "@angular/material/snack-bar";
import Swiper from "swiper";
import { Router, ActivatedRoute } from "@angular/router";
import { Component, OnInit, Inject, ViewChild } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
import { FileUploader } from 'ng2-file-upload';
import { MatPaginator } from '@angular/material/paginator';
import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar';
import Swiper from 'swiper';
import { Router,ActivatedRoute } from '@angular/router'
@Component({
selector: "app-realistic-picture-look",
templateUrl: "./realistic-picture.component.html",
styleUrls: ["./realistic-picture.component.scss"],
selector: 'app-realistic-picture-look',
templateUrl: './realistic-picture.component.html',
styleUrls: ['./realistic-picture.component.scss']
})
export class RealisticPictureLookComponent implements OnInit {
constructor(
private router: Router,
private route: ActivatedRoute,
private http: HttpClient,
public dialog: MatDialog,
public snackBar: MatSnackBar
) {}
uploader:FileUploader = new FileUploader({ //初始化上传文件
url: `/api/Objects/PlanPlatform/${this.route.snapshot.queryParams.id}/RealImgs`,
method: "POST",
itemAlias: "uploadedfile",
autoUpload: false,
removeAfterUpload:true,
});
constructor(private router:Router,private route:ActivatedRoute,private http:HttpClient,public dialog: MatDialog,public snackBar: MatSnackBar) { }
ngOnInit(): void {
let companyId = this.route.snapshot.queryParams.id;
this.http
.get("/api/RealityImageGroups", {
params: {
companyId: companyId,
},
let companyId = this.route.snapshot.queryParams.id
this.http.get('/api/RealityImageGroups',{params:{
companyId : companyId
}}).subscribe((data:any)=>{
this.allRealPicture = data
this.allRealPicture.unshift({
companyId:sessionStorage.getItem('companyId'),
id:'重点部位',
name: "重点部位",
realityImages:null
})
.subscribe((data: any) => {
this.allRealPicture = data;
this.allRealPicture.unshift(
{
companyId: sessionStorage.getItem("companyId"),
id: "重点部位",
name: "重点部位",
realityImages: null,
},
{
companyId: sessionStorage.getItem("companyId"),
id: "安全出口",
name: "安全出口",
realityImages: null,
}
);
this.selectReal = data[0];
this.getAllRealPicture();
});
this.selectReal = data[0]
this.getAllRealPicture()
})
}
companyId: any; //单位编号
allRealPicture: any = []; //所有实景图文件
selectReal: any; //选中的实景图文件
selectRealIndex: number = 0; //选中的实景图文件下标
allImages: any = []; //实景图文件对应所有的实景图
isDownload: boolean = false; //是否批量下载
downloadList: any = []; //选中需要下载的图片
companyId:any; //单位编号
allRealPicture:any=[]; //所有实景图文件
selectReal:any; //选中的实景图文件
selectRealIndex:number=0; //选中的实景图文件下标
allImages:any=[]; //实景图文件对应所有的实景图
isDownload:boolean = false; //是否批量下载
downloadList:any = []; //选中需要下载的图片
//分页
@ViewChild(MatPaginator, { static: true })
@ViewChild(MatPaginator, {static: true})
paginator: MatPaginator;
length: any; //共多少条数据
pageSize: any = "12"; //每页条数
pageSizeOptions: number[] = [12]; //设置每页条数
PageNumber: any; //第几页
length:any; //共多少条数据
pageSize:any = '12'; //每页条数
pageSizeOptions: number[] = [12] //设置每页条数
PageNumber:any; //第几页
//分页切换
chagePage(e) {
this.PageNumber = e.pageIndex + 1;
this.getAllRealPicture();
chagePage (e) {
this.PageNumber = e.pageIndex+1
this.getAllRealPicture()
}
//获取所有实景图分组
getAllGrouping() {
let companyId = this.route.snapshot.queryParams.id;
this.http
.get("/api/RealityImageGroups", {
params: {
companyId: companyId,
},
})
.subscribe((data: any) => {
this.allRealPicture = data;
this.allRealPicture.unshift(
{
companyId: sessionStorage.getItem("companyId"),
id: "重点部位",
name: "重点部位",
realityImages: null,
},
{
companyId: sessionStorage.getItem("companyId"),
id: "安全出口",
name: "安全出口",
realityImages: null,
}
);
console.log("文件夹列表", this.allRealPicture);
this.selectReal = data[this.selectRealIndex];
});
getAllGrouping () {
let companyId = this.route.snapshot.queryParams.id
this.http.get('/api/RealityImageGroups',{params:{
companyId : companyId
}}).subscribe((data:any)=>{
this.allRealPicture = data
this.selectReal = data[this.selectRealIndex]
})
}
//获取实景图分组对应实景图
getAllRealPicture() {
getAllRealPicture () {
if (this.selectReal) {
if (this.selectReal.id == "安全出口") {
let params = {
companyId: this.selectReal.companyId,
let data
if(this.selectReal.id == '重点部位'){
data = {
groupId: this.selectReal.id,
companyId : this.selectReal.companyId,
PageNumber: this.PageNumber || 1,
pageSize: this.pageSize,
}
}else{
data = {
groupId: this.selectReal.id,
PageNumber: this.PageNumber || 1,
pageSize: this.pageSize,
};
this.http
.get("/api/CompanySafetyExits/GetCompanySafetyExitImages", {
params: params,
})
.subscribe((data: any) => {
// console.log('当前单位安全出口', data)
this.allImages = data.items;
this.length = data.totalCount;
this.pageSize = this.pageSize;
this.downloadList = [];
this.allImages.forEach((element) => {
//每张图片设置选中状态为false
element.newImageUrl = `${element.imageUrl}?x-oss-process=image/resize,m_fill,h_170,w_299`; //处理图片URL地址
element.nameStart = element.name;
element.checked = false; //图片是否选中布尔值
});
});
} else {
let data;
if (this.selectReal.id == "重点部位") {
data = {
groupId: this.selectReal.id,
companyId: this.selectReal.companyId,
PageNumber: this.PageNumber || 1,
pageSize: this.pageSize,
};
} else {
data = {
groupId: this.selectReal.id,
PageNumber: this.PageNumber || 1,
pageSize: this.pageSize,
};
}
this.http
.get("/api/RealityImages", { params: data })
.subscribe((data: any) => {
this.allImages = data.items;
this.length = data.totalCount;
this.pageSize = data.pageSize;
this.downloadList = [];
this.allImages.forEach((element) => {
//每张图片设置选中状态为false
if (this.selectReal.id == "重点部位") {
element.newImageUrl = `${element.imageUrl}?x-oss-process=image/resize,m_fill,h_170,w_299`;
element.nameStart = element.name;
} else {
element.newImageUrl = `/api/Objects/PlanPlatform/${element.imageUrl}?x-oss-process=image/resize,m_fill,h_170,w_299`; //处理图片URL地址
element.nameStart = element.name.substring(
0,
element.name.lastIndexOf(".")
); //图片名称前缀
}
element.checked = false; //图片是否选中布尔值
element.nameEnd = element.name.substring(
element.name.lastIndexOf("."),
element.name.length
); //图片名称后缀
});
});
}
this.http.get('/api/RealityImages',{params:data}).subscribe((data:any)=>{
this.allImages = data.items
this.length = data.totalCount
this.pageSize = data.pageSize
this.downloadList = []
this.allImages.forEach(element => { //每张图片设置选中状态为false
if(this.selectReal.id == '重点部位'){
element.newImageUrl = `${element.imageUrl}?x-oss-process=image/resize,m_fill,h_170,w_299`
element.nameStart = element.name
}else{
element.newImageUrl = `/api/Objects/PlanPlatform/${element.imageUrl}?x-oss-process=image/resize,m_fill,h_170,w_299` //处理图片URL地址
element.nameStart = element.name.substring(0,element.name.lastIndexOf(".")); //图片名称前缀
}
element.checked = false //图片是否选中布尔值
element.nameEnd = element.name.substring(element.name.lastIndexOf("."),element.name.length); //图片名称后缀
});
})
}
}
//切换左侧实景图文件
changeReal(e, index) {
changeReal (e,index) {
if (this.selectRealIndex != index) {
this.selectReal = e;
this.selectRealIndex = index;
this.isDownload = false;
this.downloadList = [];
this.getAllRealPicture();
this.selectReal = e
this.selectRealIndex = index
this.isDownload = false
this.downloadList = []
this.getAllRealPicture()
}
}
//选择批量下载
download() {
this.isDownload = !this.isDownload;
if (!this.isDownload) {
//取消批量下载时数组清空
this.allImages.forEach((element) => {
element.checked = false;
});
this.downloadList = [];
//选择批量下载
download () {
this.isDownload = !this.isDownload
if (!this.isDownload) { //取消批量下载时数组清空
this.allImages.forEach(element => {element.checked = false});
this.downloadList = []
}
}
// 预览图片---批量选择图片
operation(e, index) {
if (this.isDownload) {
//批量选择图片
e.checked = !e.checked;
if (e.checked == true) {
this.downloadList.push(e);
} else {
this.downloadList.splice(
this.downloadList.findIndex((item) => item.id === e.id),
1
);
}
} else {
//预览图片
operation (e,index) {
if (this.isDownload) { //批量选择图片
e.checked = !e.checked
if (e.checked==true) {this.downloadList.push(e)}
else {this.downloadList.splice(this.downloadList.findIndex(item => item.id === e.id), 1)}
} else { //预览图片
let data = {
selectReal: this.selectReal,
allImages: this.allImages,
imgIndex: index,
};
let dialogRef = this.dialog.open(previewImg3, { data });
dialogRef.afterClosed().subscribe();
selectReal:this.selectReal,
allImages:this.allImages,
imgIndex: index}
let dialogRef = this.dialog.open(previewImg3,
{data});
dialogRef.afterClosed().subscribe();
}
}
//新建实景图文件
addReal() {}
addReal () {
}
//编辑实景图文件
editReal() {}
editReal () {
}
//删除实景图文件
delete() {
let companyId = this.route.snapshot.queryParams.id;
delete () {
let companyId = this.route.snapshot.queryParams.id
if (this.selectReal) {
let isDelete = confirm("您确定要删除吗");
let isDelete = confirm('您确定要删除吗')
if (isDelete) {
this.http
.delete(`/api/RealityImageGroups/${this.selectReal.id}`)
.subscribe((data) => {
this.http
.get("/api/RealityImageGroups", {
params: {
companyId: companyId,
},
})
.subscribe((data: any) => {
this.allRealPicture = data;
this.selectReal = data[this.selectRealIndex];
this.allImages = [];
this.getAllRealPicture();
});
});
this.http.delete(`/api/RealityImageGroups/${this.selectReal.id}`).subscribe(data=>{
this.http.get('/api/RealityImageGroups',{params:{
companyId : companyId
}}).subscribe((data:any)=>{
this.allRealPicture = data
this.selectReal = data[this.selectRealIndex]
this.allImages = []
this.getAllRealPicture()
})
})
}
}
}
//实景图修改
preservationImg(e) {
preservationImg (e) {
let data = {
id: e.id,
name: e.nameStart + e.nameEnd,
imageUrl: e.imageUrl,
realityImageGroupId: e.realityImageGroupId,
};
this.http.put(`/api/RealityImages/${e.id}`, data).subscribe((data) => {
this.getAllRealPicture();
id:e.id,
name:e.nameStart+e.nameEnd,
imageUrl:e.imageUrl,
realityImageGroupId:e.realityImageGroupId
}
this.http.put(`/api/RealityImages/${e.id}`,data).subscribe(data=>{
this.getAllRealPicture()
const config = new MatSnackBarConfig();
config.verticalPosition = "top";
config.duration = 3000;
this.snackBar.open("图片修改成功", "确定", config);
});
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('图片修改成功','确定',config);
})
}
//实景图删除
deleteImg(e) {
let isDelete = confirm("您确定要删除吗");
deleteImg (e) {
let isDelete = confirm('您确定要删除吗')
if (isDelete) {
this.http.delete(`/api/RealityImages/${e.id}`).subscribe((data) => {
this.getAllRealPicture();
this.http.delete(`/api/RealityImages/${e.id}`).subscribe(data=>{
this.getAllRealPicture()
const config = new MatSnackBarConfig();
config.verticalPosition = "top";
config.duration = 3000;
this.snackBar.open("图片删除成功", "确定", config);
});
this.http
.delete(`/api/Objects/PlanPlatform/${e.imageUrl}`)
.subscribe((data) => {});
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('图片删除成功','确定',config);
})
this.http.delete(`/api/Objects/PlanPlatform/${e.imageUrl}`).subscribe(data=>{})
}
}
isLoading:boolean = false; //loading加载
//上传文件↓
file:any; //上传的文件
objectName:any; //上传对象名
uploadId:any; //上传分块上传事件编号
//change选择文件
uploadFile (e) {
if (this.selectReal) {
this.file = e.target.files[0] || null //上传的文件
let URL = window.URL.createObjectURL(this.file)
var img = new Image()
img.src = URL
let that = this
img.onload = function () {
if(img.width>=4096 || img.height>=5000 ){
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
that.snackBar.open('请选择分辨率小于4096*5000的图片','确定',config);
that.uploader.clearQueue(); //清空input控件文件
(<HTMLInputElement>document.getElementById('uploadFile')).value = null //清空input框缓存
}else{ that.startUploading() }
} //onload
} else {
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('请选择或创建实景图文件夹','确定',config);
this.uploader.clearQueue(); //清空input控件文件
(<HTMLInputElement>document.getElementById('uploadFile')).value = null //清空input框缓存
}
}
//上传文件
startUploading () {
let file = this.file || null //获取上传的文件
let fileSize = file.size || null //上传文件的总大小
let shardSize = 5 * 1024 * 1024 //5MB一个分片
let maxdSize = 20 * 1024 * 1024 //限制20MB
if (file && fileSize<=shardSize) { //上传文件<=5MB时
this.uploader.queue[0].upload();//开始上传
this.uploader.queue[0].onSuccess = (response, status, headers) => {
if (status == 201) { // 上传文件成功,上传文件后获取服务器返回的数据
let tempRes = JSON.parse(response);
this.objectName = tempRes.objectName
this.addRealImg()
}else { // 上传文件后获取服务器返回的数据错误
let tempRes = JSON.parse(response);
}};
} else if (file && fileSize>shardSize && fileSize<maxdSize) { //上传文件>5MB时,
let data = {filename: file.name}
this.isLoading = true
this.http.post(`/api/NewMultipartUpload/PlanPlatform/${this.companyId}/RealImgs`,{},{params:data}).subscribe((data:any)=>{ //初始化分段上传
this.objectName = data.objectName
this.uploadId = data.uploadId
this.subsectionUploading()
})
}
}
isLoading: boolean = false; //loading加载
PartNumberETag:any=[]; //每次返回需要保存的信息
//开始分段上传
async subsectionUploading () {
let file = this.file || null //获取上传的文件
let fileSize = file.size || null //上传文件的总大小
let shardSize = 5 * 1024 * 1024 //5MB一个分片
let allSlice = Math.ceil(fileSize / shardSize) //总文件/5MB===共分多少段
for (let i = 0;i < allSlice;i++) { //循环分段上传
let start = i * shardSize //切割文件开始位置
let end = Math.min(fileSize, start + shardSize); //切割文件结束位置
let formData = new FormData()
formData.append("file",file.slice(start, end))
//同步写法实现异步调用
let result = await new Promise((resolve, reject) => {
// await 需要后面返回一个 promise 对象
this.http.post(`/api/MultipartUpload/PlanPlatform/${this.objectName}?uploadId=${this.uploadId}&partNumber=${i+1}`,formData).subscribe((data:any)=>{
let msg = {
"partNumber":data.partNumber || null,
"eTag": data.eTag || null}
resolve(msg) // 调用 promise 内置方法处理成功
})
});
this.PartNumberETag.push(result)
if (this.PartNumberETag.length === allSlice) {this.endUploading()}
}//for循环
}
//完成分块上传
endUploading () {
let data = this.PartNumberETag
let paramsData = {uploadId:this.uploadId}
this.http.post(`/api/CompleteMultipartUpload/PlanPlatform/${this.objectName}`,data,{params:paramsData}).subscribe(data=>{
this.addRealImg() //上传完成后,发送请求创建实景图
this.isLoading = false
this.uploader.clearQueue(); //清空input控件文件
this.PartNumberETag =[] //清空保存返回的信息
})
}
//上传图片成功后获取url地址发送请求创建实景图
addRealImg () {
let data = {
name: this.file.name,
imageUrl:this.objectName,
realityImageGroupId: this.selectReal.id,
}
this.http.post('/api/RealityImages',data).subscribe(data=>{
(<HTMLInputElement>document.getElementById('uploadFile')).value = null //清空input框缓存
this.getAllRealPicture()
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('图片上传成功','确定',config);
})
}
//批量下载↓
//开始下载
async batchDownload() {
if (this.downloadList.length) {
//开始批量循环下载
this.isLoading = true;
for (let i = 0; i < this.downloadList.length; i++) {
let result = await new Promise((result, reject) => {
this.http
.get(`/api/Objects/PlanPlatform/${this.downloadList[i].imageUrl}`, {
responseType: "blob",
})
.subscribe((data) => {
let url = window.URL.createObjectURL(new Blob([data])); //createObjectURL创建一个下载Blob的url地址
let link = document.createElement("a");
link.style.display = "none";
link.href = url;
link.setAttribute("download", this.downloadList[i].name);
document.body.appendChild(link);
link.click();
result("success");
});
});
if (i == this.downloadList.length - 1) {
//判断是否下载完毕
this.isLoading = false;
this.isDownload = false;
this.allImages.forEach((element) => {
element.checked = false;
});
this.downloadList = [];
}
async batchDownload () {
if (this.downloadList.length) { //开始批量循环下载
this.isLoading = true
for (let i=0;i<this.downloadList.length;i++) {
let result = await new Promise ((result,reject)=>{
this.http.get(`/api/Objects/PlanPlatform/${this.downloadList[i].imageUrl}`,{responseType: 'blob'},).subscribe(data=>{
let url = window.URL.createObjectURL(new Blob([data])); //createObjectURL创建一个下载Blob的url地址
let link = document.createElement("a");
link.style.display = "none";
link.href = url;
link.setAttribute("download", this.downloadList[i].name);
document.body.appendChild(link);
link.click();
result('success')})
})
if(i == this.downloadList.length-1) { //判断是否下载完毕
this.isLoading = false
this.isDownload = false
this.allImages.forEach(element => {element.checked = false});
this.downloadList = []}
} //for循环
} else {
const config = new MatSnackBarConfig();
config.verticalPosition = "top";
config.duration = 3000;
this.snackBar.open("请选择图片", "确定", config);
}
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('请选择图片','确定',config);}
}
}
//预览图片组件
@Component({
selector: "app-previewImg",
templateUrl: "./previewImg.html",
styleUrls: ["./realistic-picture.component.scss"],
selector: 'app-previewImg',
templateUrl: './previewImg.html',
styleUrls: ['./realistic-picture.component.scss']
})
export class previewImg3 {
constructor(
private http: HttpClient,
public dialog: MatDialog,
public dialogRef: MatDialogRef<previewImg3>,
@Inject(MAT_DIALOG_DATA) public data
) {}
testSwiper: Swiper;
constructor(private http:HttpClient,public dialog: MatDialog,public dialogRef: MatDialogRef<previewImg3>,
@Inject(MAT_DIALOG_DATA) public data) { }
testSwiper: Swiper;
ngOnInit(): void {
this.allImages = this.data.allImages;
this.allImages.forEach((element) => {
if (
this.data.selectReal.id == "重点部位" ||
this.data.selectReal.id == "安全出口"
) {
element.previewImageUrl = `${element.imageUrl}`; //处理图片URL地址
} else {
element.previewImageUrl = `/api/Objects/PlanPlatform/${element.imageUrl}?x-oss-process=image/auto-orient,1`; //处理图片URL地址
this.allImages = this.data.allImages
this.allImages.forEach(element => {
if( this.data.selectReal.id == '重点部位'){
element.previewImageUrl = `${element.imageUrl}` //处理图片URL地址
}else{
element.previewImageUrl = `/api/Objects/PlanPlatform/${element.imageUrl}?x-oss-process=image/auto-orient,1` //处理图片URL地址
}
});
}
ngAfterViewInit() {
this.testSwiper = new Swiper(".swiper-container", {
this.testSwiper = new Swiper('.swiper-container', {
lazy: true,
initialSlide: this.data.imgIndex,
direction: "horizontal",
direction: 'horizontal',
loop: false,
// 如果需要前进后退按钮
navigation: {
nextEl: ".swiper-button-next",
prevEl: ".swiper-button-prev",
},
nextEl: '.swiper-button-next',
prevEl: '.swiper-button-prev',
}
});
}
allImages: any; //展示所有的图片
rotationAngle: number = 0; //旋转角度
allImages:any; //展示所有的图片
rotationAngle:number=0; //旋转角度
//旋转图片
rotate() {
this.rotationAngle = this.rotationAngle + 90;
if (this.rotationAngle === 360) {
this.rotationAngle = 0;
}
rotate () {
this.rotationAngle = this.rotationAngle+90
if (this.rotationAngle === 360) {this.rotationAngle = 0}
}
}

829
src/app/key-unit/realistic-picture/realistic-picture.component.ts

File diff suppressed because it is too large Load Diff

4
src/app/key-unit/router-gis/router-gis.component.ts

@ -100,7 +100,7 @@ export class RouterGISComponent implements OnInit {
that.map = MapFactory.MapInstance('map',{
layers:[layer], //当只想显示标准图层时layers属性可缺省,
});
that.map.setCity('上海市');
that.map.setCity('唐山市');
that.startCoordinate && that.endCoordinate? that.queryGISRoute() : null
}
@ -177,7 +177,7 @@ export class RouterGISComponent implements OnInit {
this.endCoordinate = null
this.routeGIS? this.routeGIS.clear() : null
this.routes = { distance: 0, time: 0, steps: [], }
this.map.setCity('上海市'); //设置地图中心点
this.map.setCity('唐山市'); //设置地图中心点
}
//交换起始点

16
src/app/key-unit/view-unit-details-plan/view-unit-details-plan.component.html

@ -1,4 +1,4 @@
<mat-tab-group selectedIndex="10" style="height: 99%;" >
<mat-tab-group selectedIndex="7" style="height: 99%;" >
<mat-tab label="1.基本信息">
<ng-template matTabContent>
<app-basicinfo-look></app-basicinfo-look>
@ -24,7 +24,7 @@
<app-function-division-look></app-function-division-look>
</ng-template>
</mat-tab>
<mat-tab label="6.行车路线">
<!-- <mat-tab label="6.行车路线">
<ng-template matTabContent>
<app-router-gis></app-router-gis>
</ng-template>
@ -33,23 +33,23 @@
<ng-template matTabContent>
<app-water-road></app-water-road>
</ng-template>
</mat-tab>
<mat-tab label="8.实景图">
</mat-tab> -->
<mat-tab label="6.实景图">
<ng-template matTabContent>
<app-realistic-picture-look></app-realistic-picture-look>
</ng-template>
</mat-tab>
<mat-tab label="9.上传CAD">
<mat-tab label="7.上传CAD">
<ng-template matTabContent>
<app-uploading-cad-look></app-uploading-cad-look>
</ng-template>
</mat-tab>
<mat-tab label="10.特别警示">
<!-- <mat-tab label="10.特别警示">
<ng-template matTabContent>
<app-special-warning></app-special-warning>
</ng-template>
</mat-tab>
<mat-tab label="11.作战部署">
</mat-tab> -->
<mat-tab label="8.作战部署">
<ng-template matTabContent>
<app-collection-tools></app-collection-tools>
</ng-template>

12
src/app/key-unit/view-unit-details/view-unit-details.component.html

@ -44,7 +44,7 @@
<app-function-division-look></app-function-division-look>
</ng-template>
</mat-tab>
<mat-tab label="8.行车路线">
<!-- <mat-tab label="8.行车路线">
<ng-template matTabContent>
<app-router-gis></app-router-gis>
</ng-template>
@ -53,22 +53,22 @@
<ng-template matTabContent>
<app-water-road></app-water-road>
</ng-template>
</mat-tab>
<mat-tab label="10.实景图">
</mat-tab> -->
<mat-tab label="8.实景图">
<ng-template matTabContent>
<app-realistic-picture-look></app-realistic-picture-look>
</ng-template>
</mat-tab>
<mat-tab label="11.上传CAD">
<mat-tab label="9.上传CAD">
<ng-template matTabContent>
<app-uploading-cad-look></app-uploading-cad-look>
</ng-template>
</mat-tab>
<mat-tab label="12.特别警示">
<!-- <mat-tab label="12.特别警示">
<ng-template matTabContent>
<app-special-warning></app-special-warning>
</ng-template>
</mat-tab>
</mat-tab> -->
<!-- <mat-tab label="12.unity平面图">
<ng-template matTabContent>
<iframe id="main" src="/unityApp2Basic/index.html" name="unityApp" frameborder="0" width="96%" height="100%" style="margin-left:2%;"></iframe>

2
src/app/key-unit/water-road/water-road.component.ts

@ -324,7 +324,7 @@ export class WaterRoadComponent implements OnInit {
this.map.add(this.unitMarker);
this.waterSubmit(1)
} else {
this.map.setCity('上海市');
this.map.setCity('唐山市');
let config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000

4
src/app/pages/home/home.component.ts

@ -889,7 +889,7 @@ export class HomeComponent implements OnInit {
//初始化地图
adcode:any = 310000 //行政编码
adcode:any = 130200 //行政编码
mapInit () {
//创建地图
this.map = new AMap.Map('chartMap', {
@ -1029,7 +1029,7 @@ export class HomeComponent implements OnInit {
districtExplorer.on('outsideClick', (e) => {
// console.log('区域外点击');
this.chartsSetOption('','province')
adcode = 310000
adcode = 130200
districtExplorer.loadAreaNode(adcode, (error, areaNode)=> {
//更新地图视野
// this.map.setBounds(areaNode.getBounds(), null, null, true);

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

@ -83,9 +83,6 @@ export class LoginComponent implements OnInit {
//查看更新内容
lookUpdateData() {
let dialogRef = this.dialog.open(lookUpdateDataComponent,
{ width: '668px' });

16
src/app/pages/login/lookUpdateData.html

@ -1,7 +1,13 @@
<p style="text-align: center;">更新公告</p>
<p>更新内容如下:</p>
<p>1.单位管理模块现在支持按照重点单位和一般单位进行查询。</p>
<p>2.在单位管理模块的列表中,我们将“关注/取消”改为了“重点单位/一般单位”,并且重点单位名称前面有红星标记,一般单位前面无标记,以便更好地区分。</p>
<p>3.在预案管理模块中,我们去掉了预案列表中的编制级别,并且增加了按照重点单位和一般单位进行查询的功能。在预案列表中的单位名称前面增加了一列显示栏,区分重点单位和一般单位。</p>
<p>4.预案列表页面中,预案的名称支持手动修改,同时转在线导入文档转成功后名称去掉 “转在线编制”。 </p>
<p>5.点击系统右上角的“?”下载重点单位设置说明,以便更好地了解如何设置重点单位。 </p>
<p>1.增加V级文本预案模板导入功能;</p>
<p>2.已上传至预案编制管理平台的Ⅴ级文本预案,增加【转在线导入】功能;</p>
<p>3.增加V级文本预案自定义在线编制功能;</p>
<p>为了预案导入功能正常使用,且提高文本预案识别导入的成功率,需要注意以下几点:</p>
<p>1.【转在线导入】功能,仅支持以Ⅴ级文本预案模板做预案的文档,其他文档不支持【转在线导入】功能。</p>
<p>2.Ⅴ级文本预案模板可以随意修改内容,但整体框架不得做任何修改,不允许随意删除、合并、增加单元格,否则影响预案识别导入的内容。</p>
<p>3.文档导入成功后,可在线编辑,也可以自行添加新的功能模块。</p>
<p>4.V级预案模板导入时仅支持微软Office保存并且格式为.docx的文档,其余格式无法导入。</p>
<p>5.V级预案模板文档以及V级预案使用说明、视频可点击右上角帮助进行下载、查看。其中Ⅴ级文本预案模板文件夹内放置九大类型预案模板、V级预案转在线导入文件夹内包含使用说明及视频、V级预案自定义文件夹内包含使用说明及视频、V级在线编制文件夹内包含使用说明及视频。</p>

136
src/app/pipes/boolean.pipe.ts

@ -1,95 +1,83 @@
import { Pipe, PipeTransform } from "@angular/core";
import {
isno,
PlanTypeEnum,
AuditStatusEnum,
PlanLevelEnum,
PlanAuditStatusEnum,
} from "../interface";
@Pipe({ name: "isno" })
import { Pipe, PipeTransform } from '@angular/core';
import { isno, PlanTypeEnum, AuditStatusEnum, PlanLevelEnum } from '../interface'
@Pipe({ name: 'isno' })
export class IsnoPipe implements PipeTransform {
transform(value: boolean): string {
if (value) {
var x = 0;
} else {
x = 1;
transform(value: boolean): string {
if (value) {
var x = 0
} else {
x = 1
}
return isno[x]
}
return isno[x];
}
}
@Pipe({ name: "plantype" })
@Pipe({ name: 'plantype' })
export class PlanType implements PipeTransform {
transform(value: number): string {
return PlanTypeEnum[value];
}
transform(value: number): string {
return PlanTypeEnum[value]
}
}
@Pipe({ name: "auditsatus" })
@Pipe({ name: 'auditsatus' })
export class AuditSatus implements PipeTransform {
transform(value: number): string {
return AuditStatusEnum[value];
}
transform(value: number): string {
return AuditStatusEnum[value]
}
}
@Pipe({ name: "planlevel" })
@Pipe({ name: 'planlevel' })
export class PlanLevel implements PipeTransform {
transform(value: number): string {
return PlanLevelEnum[value];
}
transform(value: number): string {
return PlanLevelEnum[value]
}
}
@Pipe({ name: "state" })
@Pipe({ name: 'state' })
export class state implements PipeTransform {
transform(value: number): string {
if (value == 3) {
return "维护中";
} else if (value == 4) {
return "维护通过审核";
} else if (value == 5) {
return "维护驳回审核";
} else {
return "未维护";
transform(value: number): string {
if (value == 3) {
return '维护中'
} else if (value == 4) {
return '维护通过审核'
} else if (value == 5) {
return '维护驳回审核'
} else {
return '未维护'
}
}
}
}
@Pipe({ name: "auditState" })
export class auditState implements PipeTransform {
transform(value: number): string {
return PlanAuditStatusEnum[value];
}
}
@Pipe({ name: "differentContentTitle" })
@Pipe({ name: 'differentContentTitle' })
export class differentContentTitle implements PipeTransform {
transform(value: string): string {
if (typeof value == "boolean" && value) {
return "是";
} else if (typeof value == "boolean" && !value) {
return "否";
} else if (JSON.stringify(value) == "{}") {
return "空";
} else if (!value) {
return "空";
} else {
return value;
transform(value: string): string {
if (typeof (value) == 'boolean' && value) {
return '是'
} else if (typeof (value) == 'boolean' && !value) {
return '否'
} else if (JSON.stringify(value) == "{}") {
return '空'
} else if (!value) {
return '空'
} else {
return value
}
}
}
}
@Pipe({ name: "yuan" })
@Pipe({ name: 'yuan' })
export class yuan implements PipeTransform {
transform(value: string): string {
if (value == "LevelOne") {
return "一级预案";
} else if (value == "LevelTwo") {
return "二级预案";
} else if (value == "LevelThree") {
return "三级预案";
} else if (value == "LevelFour") {
return "四级预案";
} else if (value == "LevelFive") {
return "五级预案";
} else if (value == "PlanText") {
return "文本预案";
transform(value: string): string {
if (value == 'LevelOne') {
return '一级预案'
} else if (value == 'LevelTwo') {
return '二级预案'
} else if (value == 'LevelThree') {
return '三级预案'
}else if (value == 'LevelFour') {
return '四级预案'
}else if (value == 'LevelFive') {
return '五级预案'
}else if (value == 'PlanText') {
return '文本预案'
}
}
}
}

2
src/app/plan-audit/fireforce-audit/fireforce-audit.component.ts

@ -53,7 +53,7 @@ export class FireforceAuditComponent implements OnInit {
// 将 markers 添加到地图
this.map.add(this.newPositionMarker);
}else{
this.map.setCity('上海市');
this.map.setCity('唐山市');
}
}, 0);

2
src/app/plan-audit/linkageforces-audit/linkageforces-audit.component.ts

@ -59,7 +59,7 @@ export class LinkageforcesAuditComponent implements OnInit {
// 将 markers 添加到地图
this.map.add(this.newPositionMarker);
}else{
this.map.setCity('上海市');
this.map.setCity('唐山市');
}
}, 0);

99
src/app/plan-audit/plan-audit/plan-audit.component.html

@ -8,48 +8,45 @@
<input matInput placeholder="请输入单位名称" name="CompanyName" [(ngModel)]="CompanyName">
</mat-form-field>
</div>
<div class="queryField ordiv">
<label style="margin-right: 10px;">消防救援站:</label>
<mat-form-field>
<input readonly matInput placeholder="请选择消防救援站" [(ngModel)]="selectOrganizationIName"
name="selectOrganizationIName" (focus)="openorganizationbox()">
<input readonly matInput placeholder="请选择消防救援站" [(ngModel)]="selectOrganizationIName" name="selectOrganizationIName" (focus)="openorganizationbox()">
</mat-form-field>
<mat-checkbox style="margin-left: 5px;" [(ngModel)]="HasChildrenOrganization"
name="HasChildrenOrganization">包含下级</mat-checkbox>
<mat-checkbox style="margin-left: 5px;" [(ngModel)]="HasChildrenOrganization" name="HasChildrenOrganization">包含下级</mat-checkbox>
<div class="organizationbox" *ngIf="isorganizationbox">
<div (click)="closediv()" class="closediv"><mat-icon>clear</mat-icon></div>
<mat-tree [dataSource]="dataSource" [treeControl]="treeControl">
<mat-tree-node *matTreeNodeDef="let node" matTreeNodePadding (click)='add(node)' class="organizationlist">
<button type="button" mat-icon-button disabled></button>
<li>{{node.name}}</li>
</mat-tree-node>
<mat-tree-node *matTreeNodeDef="let node;when: hasChild" matTreeNodePadding (click)='add(node)'
class="organizationlist">
<button type="button" mat-icon-button matTreeNodeToggle [attr.aria-label]="'toggle ' + node.name">
<div (click)="closediv()" class="closediv"><mat-icon>clear</mat-icon></div>
<mat-tree [dataSource]="dataSource" [treeControl]="treeControl">
<mat-tree-node *matTreeNodeDef="let node" matTreeNodePadding (click)='add(node)' class="organizationlist">
<button type="button" mat-icon-button disabled ></button>
<li>{{node.name}}</li>
</mat-tree-node>
<mat-tree-node *matTreeNodeDef="let node;when: hasChild" matTreeNodePadding (click)='add(node)' class="organizationlist">
<button type="button" mat-icon-button matTreeNodeToggle [attr.aria-label]="'toggle ' + node.name">
<mat-icon class="mat-icon-rtl-mirror">
{{treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right'}}
{{treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right'}}
</mat-icon>
</button>
<li>{{node.name}}</li>
</mat-tree-node>
</mat-tree>
</button>
<li>{{node.name}}</li>
</mat-tree-node>
</mat-tree>
</div>
</div>
<div class="queryField">
<label style="margin-right: 10px;">单位类型:</label>
<mat-form-field>
<mat-select placeholder='请选择单位类型' [(ngModel)]="BuildingTypeId" name="BuildingTypeId">
<mat-option *ngFor="let unit of allunittype" [value]="unit.id">
<mat-option *ngFor="let unit of allunittype" [value]="unit.id" >
{{unit.name}}
</mat-option>
</mat-select>
</mat-form-field>
</div>
<div class="queryField">
<label style="margin-right: 10px;">预案类型:</label>
<mat-form-field class="maginleft">
@ -60,7 +57,7 @@
</mat-select>
</mat-form-field>
</div>
<div class="queryField">
<label style="margin-right: 10px;">审核状态:</label>
<mat-form-field class="maginleft">
@ -71,7 +68,7 @@
</mat-select>
</mat-form-field>
</div>
<div class="queryField">
<label style="margin-right: 10px;">编制级别:</label>
<mat-form-field class="maginleft">
@ -81,12 +78,11 @@
</mat-option>
</mat-select>
</mat-form-field>
<mat-checkbox style="margin-left: 5px;" [(ngModel)]="HasChildrenPlanLevel"
name="HasChildrenPlanLevel">包含下级</mat-checkbox>
<mat-checkbox style="margin-left: 5px;" [(ngModel)]="HasChildrenPlanLevel" name="HasChildrenPlanLevel">包含下级</mat-checkbox>
</div>
</div>
<div style="width: 100%;text-align: center;">
<button mat-raised-button color="primary">查询</button>
<button mat-raised-button style="margin-left: 25px;" type="button" (click)="reset()">重置</button>
@ -94,33 +90,33 @@
</form>
</div>
<mat-divider></mat-divider>
<div class="body">
<div class="tablebox">
<table mat-table [dataSource]="tabledataSource">
<ng-container matColumnDef="unitname">
<th mat-header-cell *matHeaderCellDef>单位名称</th>
<td mat-cell *matCellDef="let element">{{element.companyName}}</td>
</ng-container>
<ng-container matColumnDef="planname">
<th mat-header-cell *matHeaderCellDef>预案名称</th>
<td mat-cell *matCellDef="let element">{{element.name}}</td>
</ng-container>
<ng-container matColumnDef="addpeople">
<th mat-header-cell *matHeaderCellDef>添加人</th>
<td mat-cell *matCellDef="let element">{{element.creatorName}}</td>
</ng-container>
<ng-container matColumnDef="addtime">
<th mat-header-cell *matHeaderCellDef>添加时间</th>
<td mat-cell *matCellDef="let element">
{{element.creationTime|date:'yyyy-MM-dd'}}
</td>
</ng-container>
<ng-container matColumnDef="plantype">
<th mat-header-cell *matHeaderCellDef>预案类型</th>
<td mat-cell *matCellDef="let element">
@ -130,7 +126,7 @@
<label *ngIf="element.planType==4">其他预案</label>
</td>
</ng-container>
<ng-container matColumnDef="auditstate">
<th mat-header-cell *matHeaderCellDef>审核状态</th>
<td mat-cell *matCellDef="let element">
@ -140,12 +136,12 @@
<label *ngIf="element.auditStatus==4">审核退回</label>
</td>
</ng-container>
<ng-container matColumnDef="isopen">
<th mat-header-cell *matHeaderCellDef>是否公开</th>
<td mat-cell *matCellDef="let element">{{element.openRange}}</td>
</ng-container>
<ng-container matColumnDef="preparethelevel">
<th mat-header-cell *matHeaderCellDef>编制级别</th>
<td mat-cell *matCellDef="let element">
@ -155,25 +151,24 @@
<label *ngIf="element.planLevel==8">中队</label>
</td>
</ng-container>
<ng-container matColumnDef="operation">
<th mat-header-cell *matHeaderCellDef>操作</th>
<td mat-cell *matCellDef="let element">
<label style="color: #0000FF;cursor: pointer;" (click)='toExamine(element)'
*ngIf="element.auditStatus!=4">预案审核</label>
<label style="color: #0000FF;margin-left: 10px;cursor: pointer;" (click)='openReserve(element)'
*ngIf="element.auditStatus==2">预案公开</label>
<label style="color: #0000FF;margin-left: 10px;cursor: pointer;" (click)='closeReserve(element)'
*ngIf="element.auditStatus==2">预案取消公开</label>
<label style="color: #999;" *ngIf="element.auditStatus==4">预案已驳回</label>
<label style="color: #0000FF;cursor: pointer;" (click)='toExamine(element)' *ngIf="element.auditStatus!=4">预案审核</label>
<label style="color: #0000FF;margin-left: 10px;cursor: pointer;" (click)='openReserve(element)' *ngIf="element.auditStatus==2">预案公开</label>
<label style="color: #0000FF;margin-left: 10px;cursor: pointer;" (click)='closeReserve(element)' *ngIf="element.auditStatus==2">预案取消公开</label>
<label style="color: #999;"*ngIf="element.auditStatus==4">预案已驳回</label>
</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
</table>
<mat-paginator [length]="length" [pageSize]="pageSize" [pageSizeOptions]="pageSizeOptions"
(page)="chagePage($event)">
<mat-paginator [length]="length"
[pageSize]="pageSize"
[pageSizeOptions]="pageSizeOptions"
(page)="chagePage($event)">
</mat-paginator>
</div>
</div>

108
src/app/plan-audit/plan-pass/plan-pass.component.ts

@ -4,20 +4,20 @@ import { MatTreeFlatDataSource, MatTreeFlattener } from '@angular/material/tree'
import { MatPaginator } from '@angular/material/paginator';
import { FlatTreeControl } from '@angular/cdk/tree';
import { FormControl } from '@angular/forms';
import { Router, ActivatedRoute } from '@angular/router'
import { Router,ActivatedRoute } from '@angular/router'
import { PageEvent } from '@angular/material/paginator';
import { MatDialogRef, MatDialog, MAT_DIALOG_DATA } from '@angular/material/dialog';
import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar';
import { TreeService } from '../../http-interceptors/tree.service'
import { MatTableDataSource } from '@angular/material/table';
import { DomSanitizer } from '@angular/platform-browser';
import { PlanOpen } from '../plan-audit/plan-audit.component'
import { ViewUnitDetailsPlanComponent } from '../../key-unit/view-unit-details-plan/view-unit-details-plan.component'
import {PlanOpen} from '../plan-audit/plan-audit.component'
import {ViewUnitDetailsPlanComponent} from '../../key-unit/view-unit-details-plan/view-unit-details-plan.component'
export interface Food {
name: string;
name:string;
value: string;
}
@Component({
@ -27,133 +27,133 @@ export interface Food {
})
export class PlanPassComponent implements OnInit {
constructor(private http: HttpClient, private router: Router, private route: ActivatedRoute, private tree: TreeService, public dialog: MatDialog,
public snackBar: MatSnackBar, private sanitizer: DomSanitizer) { }
constructor(private http:HttpClient,private router:Router,private route:ActivatedRoute,private tree: TreeService,public dialog: MatDialog,
public snackBar: MatSnackBar,private sanitizer: DomSanitizer) { }
ngOnInit(): void {
this.type = this.route.snapshot.queryParams.type
this.type = this.route.snapshot.queryParams.type
this.getCompanyData()
this.getPlanData()
}
type: any //审核按钮是否出现
displayedColumns: string[] = ['filename', 'addtime', 'operation']; //表头
compantData: any = { name: '', organizationName: '', buildingTypes: [{ name: '' }], address: '' }; //当前单位信息
organizationName: any = ''; //组织机构名称
planData: any; //审核预案信息
type:any //审核按钮是否出现
displayedColumns: string[] = ['filename','addtime','operation']; //表头
compantData:any = {name:'',organizationName: '', buildingTypes:[{name:''}], address:''}; //当前单位信息
organizationName:any = ''; //组织机构名称
planData:any; //审核预案信息
//获取当前单位信息
getCompanyData() {
this.http.get(`/api/Plans/${this.route.snapshot.queryParams.id}`).subscribe((data: any) => {
data && data.company ? this.compantData = data.company : null
getCompanyData () {
this.http.get(`/api/Plans/${this.route.snapshot.queryParams.id}`).subscribe((data:any)=>{
data && data.company? this.compantData = data.company : null
})
}
//获取当前单位审核预案的信息
getPlanData() {
let header = {
getPlanData () {
let header = {
CompanyName: this.route.snapshot.queryParams.companyName || '',
AuditStatus: this.route.snapshot.queryParams.auditStatus || '',
PageSize: '100',
}
let api
this.route.snapshot.queryParams.planType == 1 ? api = '/api/PlanAudits' : api = '/api/PublicPlans' //1=预案审核 2=公开预案
this.http.get(api, { params: header }).subscribe((data: any) => {
this.route.snapshot.queryParams.planType == 1? api = '/api/PlanAudits' : api = '/api/PublicPlans' //1=预案审核 2=公开预案
this.http.get(api,{params:header}).subscribe((data:any)=>{
data.items.forEach(element => {
if (element.id === this.route.snapshot.queryParams.auditPlanId) {
if (element.id===this.route.snapshot.queryParams.auditPlanId) {
this.planData = element
this.organizationName = element.committerOrganizationName
this.handleData()
return
return
}
});
})
}
planType: any; //展示预案类型
allFile: any = []; //类型=0时所有文件
thirdPartyURL: any; //类型=3时网址
planType:any; //展示预案类型
allFile:any = []; //类型=0时所有文件
thirdPartyURL:any; //类型=3时网址
handleData() {
handleData () {
this.planType = this.planData.planMode
let data = this.planData
if (this.planData.planMode == 0) { //预案planMode=0时, 下载文件
if (this.planData.planMode==0) { //预案planMode=0时, 下载文件
data.attachmentUrls.forEach(item => {
this.http.get(`/api/ObjectMetadata/PlanPlatform/${item}`).subscribe((data: any) => {
this.http.get(`/api/ObjectMetadata/PlanPlatform/${item}`).subscribe((data:any)=>{
data.isLoading = false
this.allFile.push(data)
this.allFile = new MatTableDataSource<any>(this.allFile)
})
this.allFile = new MatTableDataSource<any>(this.allFile) })
});
} else if (this.planData.planMode == 1 || this.planData.planMode == 2) { //预案planMode=2时, 跳查看页面组件
sessionStorage.setItem("buildingTypeId", this.compantData.buildingTypes.length ? this.compantData.buildingTypes[0].id : undefined);
sessionStorage.setItem("companyId", this.route.snapshot.queryParams.id);
sessionStorage.setItem("planId", this.route.snapshot.queryParams.auditPlanId);
sessionStorage.setItem("editable", '0');
} else if (this.planData.planMode == 3) { //预案planMode=3时, 第三方网址
} else if (this.planData.planMode==1) { //预案planMode=1时, 解析文档
} else if (this.planData.planMode==2) { //预案planMode=2时, 跳查看页面组件
sessionStorage.setItem("buildingTypeId", this.compantData.buildingTypes.length? this.compantData.buildingTypes[0].id: undefined);
sessionStorage.setItem("companyId",this.route.snapshot.queryParams.id);
sessionStorage.setItem("planId",this.route.snapshot.queryParams.auditPlanId);
sessionStorage.setItem("editable",'0');
} else if (this.planData.planMode==3) { //预案planMode=3时, 第三方网址
this.thirdPartyURL = this.sanitizer.bypassSecurityTrustResourceUrl(data.url)
}
}
//预案审核
toExamine() {
toExamine () {
let data = this.route.snapshot.queryParams.auditPlanId
const dialogRef = this.dialog.open(PlanOpen, { data });
const dialogRef = this.dialog.open(PlanOpen,{data});
}
suffix: string; //文件名后缀
suffix:string; //文件名后缀
//下载
download(e) {
download (e) {
e.isLoading = true
let file = e
let fileSize = file.fileLength //下载文件的总大小
let shardSize = 10 * 1024 * 1024 //文件大小是否大于10MB
this.suffix = this.compantData.name + '.' + (e.objectName.substring(e.objectName.lastIndexOf(".") + 1, e.objectName.length));
this.suffix = this.compantData.name + '.' + (e.objectName.substring(e.objectName.lastIndexOf(".")+1,e.objectName.length));
if (file && fileSize <= shardSize) { //<=10MB时直接下载
this.http.get(`/api/Objects/PlanPlatform/${file.objectName}`, { responseType: 'blob' },).subscribe(data => {
if (file && fileSize<=shardSize) { //<=10MB时直接下载
this.http.get(`/api/Objects/PlanPlatform/${file.objectName}`,{responseType: 'blob'},).subscribe(data=>{
let url = window.URL.createObjectURL(new Blob([data])); //createObjectURL创建一个下载Blob的url地址
let link = document.createElement("a");
link.style.display = "none";
link.href = url;
link.setAttribute("download", e.fileName ? e.fileName : this.suffix);
link.setAttribute("download", e.fileName?e.fileName : this.suffix);
document.body.appendChild(link);
link.click();
e.isLoading = false
})
} else if (file && fileSize > shardSize) { //>10MB时分块下载
} else if (file && fileSize>shardSize) { //>10MB时分块下载
this.blockingDownload(e) //分段下载
}
}
//分段下载并合并
async blockingDownload(e) {
async blockingDownload (e) {
let file = e
let fileSize = file.fileLength //下载文件的总大小
let shardSize = 3 * 1024 * 1024 //3MB一个分片
let allSlice = Math.ceil(fileSize / shardSize) //总文件/3MB===共分多少段
let allFile: any = [] //所有的file分段
let allFile:any = [] //所有的file分段
for (let i = 0; i < allSlice; i++) {
for (let i=0;i<allSlice;i++) {
let start = i * shardSize //每次下载文件开始位置
let end = Math.min(fileSize, start + shardSize - 1); //每次下载文件结束为止
let end = Math.min(fileSize, start + shardSize-1); //每次下载文件结束为止
let result = await new Promise((result, reject) => {
this.http.get(`/api/Objects/PlanPlatform/${file.objectName}`, { headers: { 'range': `bytes= ${start}-${end}` }, responseType: 'blob' }).subscribe(data => {
result(data)
})
let result = await new Promise ((result,reject)=>{
this.http.get(`/api/Objects/PlanPlatform/${file.objectName}`,{headers:{'range':`bytes= ${start}-${end}`},responseType:'blob'}).subscribe(data=>{
result(data) })
})
allFile.push(result)
e.progress = Number((i / allSlice).toFixed(2)) * 100 + '%'
e.progress = Number((i/allSlice).toFixed(2))*100 + '%'
if (allFile.length === allSlice) { //合并文件输出给浏览器
let url = window.URL.createObjectURL(new Blob(allFile)); //createObjectURL创建一个下载Blob的url地址
let link = document.createElement("a");
link.style.display = "none";
link.href = url;
link.setAttribute("download", e.fileName ? e.fileName : this.suffix);
link.setAttribute("download", e.fileName?e.fileName : this.suffix);
document.body.appendChild(link);
link.click();
e.isLoading = false

454
src/app/plan-audit/plan-record/plan-record.component.html

@ -1,232 +1,240 @@
<!--
* @Descripttion:
* @version:
* @Author: sueRimn
* @Date: 2020-12-25 10:19:31
* @LastEditors: sueRimn
* @LastEditTime: 2021-08-16 15:49:49
-->
<div class="box">
<div class="boxleft">
<div class="lefthead">
<form (ngSubmit)="onSubmit(form.value)" #form="ngForm">
<div class="headdiv">
<span>操作类型:</span>
<input type="radio" name="level" value="" [(ngModel)]="level"><span>全部</span>
<input type="radio" name="level" value="1" [(ngModel)]="level"><span>更新</span>
<input type="radio" name="level" value="0" [(ngModel)]="level"><span>新增</span>
<input type="radio" name="level" value="2" [(ngModel)]="level"><span>删除</span>
<div class="count">
<span>共计:{{count}}条</span>
<div class="boxleft">
<div class="lefthead">
<form (ngSubmit)="onSubmit(form.value)" #form="ngForm">
<div class="headdiv">
<span>操作类型:</span>
<input type="radio" name="level" value="" [(ngModel)]="level"><span>全部</span>
<input type="radio" name="level" value="1" [(ngModel)]="level"><span>更新</span>
<input type="radio" name="level" value="0" [(ngModel)]="level"><span>新增</span>
<input type="radio" name="level" value="2" [(ngModel)]="level"><span>删除</span>
<div class="count">
<span >共计:{{count}}条</span>
</div>
</div>
<div class="headdivtwo">
<span>审核状态:</span>
<input type="radio" name="passstate" [(ngModel)]="verifyState" value=""><span>全部</span>
<input type="radio" name="passstate" [(ngModel)]="verifyState" value="1"><span>初审通过</span>
<input type="radio" name="passstate" [(ngModel)]="verifyState" value="2"><span>初审驳回</span>
<input type="radio" name="passstate" [(ngModel)]="verifyState" value="4"><span>终审通过</span>
<input type="radio" name="passstate" [(ngModel)]="verifyState" value="5"><span>终审驳回</span>
</div>
<div class="headthree">
<span>类型:</span>
<mat-form-field>
<mat-select placeholder='请选择单位类型' name="unittype" [(ngModel)]="projectlevel">
<!-- <mat-option value="1">Ⅰ级预案</mat-option>
<mat-option value="2">Ⅱ级预案</mat-option> -->
<mat-option value="3">Ⅲ级预案</mat-option>
<mat-option value="4">Ⅳ级预案</mat-option>
<mat-option value="5">Ⅴ级预案</mat-option>
<!-- <mat-option value="6">应急预案(国家级)</mat-option>
<mat-option value="7">应急预案(市级)</mat-option> -->
<mat-option value="8">类型预案</mat-option>
<mat-option value="11">重点单位</mat-option>
<!-- <mat-option value="12">消防水源</mat-option>
<mat-option value="13">消防力量</mat-option>
<mat-option value="14">联动力量</mat-option> -->
</mat-select>
</mat-form-field>
<span>状态:</span>
<mat-form-field>
<mat-select name="IsNewData" placeholder='请选择状态' [(ngModel)]="IsNewData" [multiple]="true">
<mat-option value=true>新增</mat-option>
<mat-option value=false>维护更新</mat-option>
</mat-select>
</mat-form-field>
<span>编制级别:</span>
<mat-form-field>
<mat-select name="preparelevel" placeholder='请选择编制级别' [(ngModel)]="PlanLevel">
<mat-option *ngFor="let item of preparelevels" [value]="item.value">{{item.name}}</mat-option>
</mat-select>
</mat-form-field>
</div>
<div class="headfour">
<span>时间:</span>
<mat-form-field class="example-full-width" style="margin-bottom: 0;">
<input type="date" matInput name="companyName" autocomplete="off" [(ngModel)]="addtime">
</mat-form-field>
<mat-icon *ngIf="!pcshow" aria-hidden="false" style="position: relative;right: 120px;top: 5px;" id="padshow">arrow forward</mat-icon>
<span style="margin-left: 15px;" id="pcshow" *ngIf="pcshow">🠊</span>
<mat-form-field class="example-full-width" style="margin-left: 10px;margin-bottom: 0;">
<input type="date" matInput name="companyName" autocomplete="off" [(ngModel)]="endtime">
</mat-form-field>
<span style="margin-left: 10px;" >预案类型:</span>
<mat-form-field>
<mat-select placeholder='请选择预案类型' name="unittype" [(ngModel)]="plantypes" [multiple]="true">
<mat-option value="1">二维预案</mat-option>
<mat-option value="2">三维预案</mat-option>
<mat-option value="4">其他预案</mat-option>
<mat-option value="16">文本预案</mat-option>
</mat-select>
</mat-form-field>
<button mat-raised-button color="primary" type="submit" >查询</button>
<button mat-raised-button color="primary" (click)='record()'><img src="../../../assets/images/refresh.png" > 重置</button>
</div>
</form>
<!-- <div class="tablediv">
<table cellspacing="0" cellpadding="0">
<thead>
<th style="width: 15%;">类型</th>
<th style="width: 15%;">操作</th>
<th style="width: 15%;">所属组织</th>
<th style="width: 15%;">审核状态</th>
<th style="width: 15%;">提交人</th>
<th style="width: 25%;">提交时间</th>
</thead>
<tbody>
<tr *ngFor="let item of tableDate">
<td>{{item.level}}</td>
<td [ngClass]="{'green': item.option == '更新','red':item.option == '删除','blue':item.option == '新增'}">{{item.option}}</td>
<td>{{item.orgication}}</td>
<td [ngClass]="{'green': item.unitstate == '已通过','red':item.unitstate == '已拒绝'}">{{item.unitstate}}</td>
<td>{{item.addname}}</td>
<td>{{item.addtime}}</td>
</tr>
</tbody>
</table>
</div> -->
<div class="tablediv">
<table cellspacing="0" cellpadding="0" style="margin-top: 10px;">
<thead>
<th style="width: 10%;">状态</th>
<th style="width: 10%;">类型</th>
<th style="width: 10%;">预案类型</th>
<th style="width: 10%;">名称</th>
<th style="width: 5%;">操作</th>
<th style="width: 20%;">所属组织</th>
<th style="width: 10%;">审核状态</th>
<th style="width: 10%;">提交人</th>
<th style="width: 15%;">提交时间</th>
</thead>
</table>
<div class="tbodycss" id="tbodydiv" >
<table cellspacing="0" cellpadding="0" id="table" >
<tr [ngClass]="{'selectedTr': item.id == id}" *ngFor="let item of tableDate;let key = index" (click)='tableClick($event,item)'>
<td style="width: 10%;" [ngClass]="{'green': item.itemMaintenanceState == '0','yellow':item.itemMaintenanceState != '0'}">{{item.itemMaintenanceState=='0'?'新增':'维护'}}</td>
<td style="width: 10%;">
<!-- <input type="radio" name="yuan" value={{item.id}} [(ngModel)]="checked" (click)='radioClick(item)'> -->
{{item.contentType=='1'?'Ⅰ级预案':item.contentType=='2'?'Ⅱ级预案':item.contentType=='3'?'Ⅲ级预案':item.contentType=='4'?'Ⅳ级预案':item.contentType=='5'?
'Ⅴ级预案':item.contentType=='6'?'应急预案(国家级)':item.contentType=='7'?'应急预案(市级)':item.contentType=='8'?'类型预案':item.contentType=='11'?'重点单位':item.contentType=='12'?'水源':item.contentType=='13'?'消防力量':item.contentType=='14'?'联动力量':'未知'}}</td>
<td style="width: 10%;">
{{item.planType=='1'?'二维预案':item.planType=='2'?'三维预案':item.planType=='4'?'其它预案':item.planType=='16'?'文本预案':''}}
</td>
<td style="width: 10%;">{{item.title}}</td>
<td style="width: 5%;" [ngClass]="{'green': item.operation == '0','red':item.operation == '2','yellow':item.operation == '1'}">{{item.operation=='0'?'新增':item.operation=='1'?'更新':'删除'}}</td>
<td style="width: 20%;">{{item.organizationName}}</td>
<td style="width: 10%;" [ngClass]="{'green': item.verifyState == '1'||item.verifyState == '4','red':item.verifyState == '2'||item.verifyState == '5'}">{{item.verifyState=='0'?'待初审':item.verifyState=='1'?
'初审通过':item.verifyState=='2'?'初审驳回':item.verifyState=='3'?'待终审':item.verifyState=='4'?'终审通过':'终审驳回'}}</td>
<td style="width: 10%;">{{item.creatorName}}</td>
<td style="width: 15%;">{{item.createTime|date:'yyyy-MM-dd'}}</td>
</tr>
</table>
</div>
</div>
</div>
<div class="headdivtwo">
<span>审核状态:</span>
<input type="radio" name="passstate" [(ngModel)]="verifyState" value=""><span>全部</span>
<input type="radio" name="passstate" [(ngModel)]="verifyState" value="1"><span>初审通过</span>
<input type="radio" name="passstate" [(ngModel)]="verifyState" value="2"><span>初审驳回</span>
<input type="radio" name="passstate" [(ngModel)]="verifyState" value="4"><span>终审通过</span>
<input type="radio" name="passstate" [(ngModel)]="verifyState" value="5"><span>终审驳回</span>
</div>
<div class="boxright">
<div class="company" *ngIf="showtype == 3">
<mat-tab-group *ngIf="showtype == 3" style="flex: 1;overflow-y: auto;margin-top: 10px;" [selectedIndex]="selected.value" (selectedIndexChange)="selected.setValue($event)">
<mat-tab label="基本信息">
<ng-template matTabContent>
<app-basic-info></app-basic-info>
</ng-template>
</mat-tab>
<mat-tab label="平面图">
<ng-template matTabContent>
<app-plan-list [planType]="'all'"></app-plan-list>
</ng-template>
</mat-tab>
<mat-tab label="四周毗邻">
<ng-template matTabContent>
<app-allaround></app-allaround>
</ng-template>
</mat-tab>
<mat-tab label="消防设施">
<ng-template matTabContent>
<app-fire-facilities></app-fire-facilities>
</ng-template>
</mat-tab>
<mat-tab label="重点部位">
<ng-template matTabContent>
<app-key-site-look></app-key-site-look>
</ng-template>
</mat-tab>
<mat-tab label="功能分区">
<ng-template matTabContent>
<app-function-partition></app-function-partition>
</ng-template>
</mat-tab>
<mat-tab label="实景图">
<ng-template matTabContent>
<app-realistic-picture-look></app-realistic-picture-look>
</ng-template>
</mat-tab>
<mat-tab label="CAD">
<ng-template matTabContent>
<app-cad-draw></app-cad-draw>
</ng-template>
</mat-tab>
</mat-tab-group>
</div>
<div class="word" *ngIf="showtype==0">
<div class="shadow" *ngIf="!iftrue">
<mat-spinner></mat-spinner>
</div>
<button mat-raised-button color="primary" style="float: right;margin-top: 10px;margin-right: 15px;" *ngIf="showtype == 0||bianzhi" (click)='lookNew()'>查看详情</button>
<iframe [src]='iframeSrc' (load)='ifranmeLoad()' id="myiframe"></iframe>
</div>
<div class="headthree">
<span>类型:</span>
<mat-form-field>
<mat-select placeholder='请选择单位类型' name="unittype" [(ngModel)]="projectlevel">
<mat-option value="1">Ⅰ级预案</mat-option>
<mat-option value="2">Ⅱ级预案</mat-option>
<mat-option value="3">Ⅲ级预案</mat-option>
<mat-option value="4">Ⅳ级预案</mat-option>
<mat-option value="5">Ⅴ级预案</mat-option>
<mat-option value="6">应急预案(国家级)</mat-option>
<mat-option value="7">应急预案(市级)</mat-option>
<mat-option value="8">类型预案</mat-option>
<mat-option value="11">重点单位</mat-option>
<mat-option value="12">消防水源</mat-option>
<mat-option value="13">消防力量</mat-option>
<mat-option value="14">联动力量</mat-option>
</mat-select>
</mat-form-field>
<span>状态:</span>
<mat-form-field>
<mat-select name="IsNewData" placeholder='请选择状态' [(ngModel)]="IsNewData" [multiple]="true">
<mat-option value=true>新增</mat-option>
<mat-option value=false>维护更新</mat-option>
</mat-select>
</mat-form-field>
<span>编制级别:</span>
<mat-form-field>
<mat-select name="preparelevel" placeholder='请选择编制级别' [(ngModel)]="PlanLevel">
<mat-option *ngFor="let item of preparelevels" [value]="item.value">{{item.name}}</mat-option>
</mat-select>
</mat-form-field>
<div id="viewer" *ngIf="showtype==1"></div>
<div class="twoD" *ngIf="showtype==2">
<div class="planBox">
<span>单位名称: </span>
<span>{{compantData.name?compantData.name : '暂无数据'}}</span>
</div>
<div class="planBox">
<span>消防救援站: </span>
<span>{{organizationName}}</span>
</div>
<div class="planBox">
<span>单位类型: </span>
<span>{{compantData.buildingTypes.length?compantData.buildingTypes[0].name : '暂无数据'}}</span>
</div>
<div class="planBox">
<span>单位地址: </span>
<span>{{compantData.address?compantData.address : '暂无数据'}}</span>
</div>
<div class="planBox">
<span style="color: #2196F3;cursor:pointer;" (click)='oopen3Dshow()'>查看详情</span>
</div>
</div>
<div class="headfour">
<span>时间:</span>
<mat-form-field class="example-full-width" style="margin-bottom: 0;">
<input type="date" matInput name="companyName" autocomplete="off" [(ngModel)]="addtime">
</mat-form-field>
<mat-icon *ngIf="!pcshow" aria-hidden="false" style="position: relative;right: 120px;top: 5px;"
id="padshow">arrow forward</mat-icon>
<span style="margin-left: 15px;" id="pcshow" *ngIf="pcshow">🠊</span>
<mat-form-field class="example-full-width" style="margin-left: 10px;margin-bottom: 0;">
<input type="date" matInput name="companyName" autocomplete="off" [(ngModel)]="endtime">
</mat-form-field>
<span style="margin-left: 10px;">预案类型:</span>
<mat-form-field>
<mat-select placeholder='请选择预案类型' name="unittype" [(ngModel)]="plantypes" [multiple]="true">
<mat-option value="1">二维预案</mat-option>
<mat-option value="2">三维预案</mat-option>
<mat-option value="4">其他预案</mat-option>
<mat-option value="16">文本预案</mat-option>
</mat-select>
</mat-form-field>
<!-- 水源审核 -->
<div class="waterAudit" *ngIf="showtype == 12">
<app-water-audit [waterData]="waterData"></app-water-audit>
</div>
<div class="btnbox">
<button mat-raised-button color="primary" type="submit">查询</button>
<button mat-raised-button color="primary" type="button" (click)='record()'>重置</button>
<!-- 消防力量审核 -->
<div class="fireForceAudit" *ngIf="showtype == 13">
<app-fireforce-audit [FireForceDetailInfo]="fireForceDetailInfo" [level]="postlevel"></app-fireforce-audit>
</div>
</form>
<div class="tablediv">
<table class="header" cellspacing="0" cellpadding="0" style="margin-top: 10px;">
<thead>
<th style="width: 10%;">状态</th>
<th style="width: 10%;">类型</th>
<th style="width: 10%;">预案类型</th>
<th style="width: 10%;">名称</th>
<th style="width: 5%;">操作</th>
<th style="width: 20%;">所属组织</th>
<th style="width: 10%;">审核状态</th>
<th style="width: 10%;">提交人</th>
<th style="width: 15%;">提交时间</th>
</thead>
</table>
<div class="tbodycss" id="tbodydiv">
<table cellspacing="0" cellpadding="0" id="table">
<tr [ngClass]="{'selectedTr': item.id == id}" *ngFor="let item of tableDate;let key = index"
(click)='tableClick($event,item)'>
<td style="width: 10%;"
[ngClass]="{'green': item.itemMaintenanceState == '0','yellow':item.itemMaintenanceState != '0'}">
{{item.itemMaintenanceState=='0'?'新增':'维护'}}</td>
<td style="width: 10%;">
<!-- <input type="radio" name="yuan" value={{item.id}} [(ngModel)]="checked" (click)='radioClick(item)'> -->
{{item.contentType=='1'?'Ⅰ级预案':item.contentType=='2'?'Ⅱ级预案':item.contentType=='3'?'Ⅲ级预案':item.contentType=='4'?'Ⅳ级预案':item.contentType=='5'?
'Ⅴ级预案':item.contentType=='6'?'应急预案(国家级)':item.contentType=='7'?'应急预案(市级)':item.contentType=='8'?'类型预案':(item.contentType=='11'
&&item.itemObj&&
item.itemObj?.isFollowed)?'重点单位':(item.contentType=='11'
&&item.itemObj&&
!item.itemObj?.isFollowed)?'一般单位':(item.contentType=='11'
&&!item.itemObj)?'已删除':item.contentType=='12'?'水源':item.contentType=='13'?'消防力量':item.contentType=='14'?'联动力量':'未知'}}
</td>
<td style="width: 10%;">
{{item.planType=='1'?'二维预案':item.planType=='2'?'三维预案':item.planType=='4'?'其它预案':item.planType=='16'?'文本预案':''}}
</td>
<td style="width: 10%;">{{item.title}}</td>
<td style="width: 5%;"
[ngClass]="{'green': item.operation == '0','red':item.operation == '2','yellow':item.operation == '1'}">
{{item.operation=='0'?'新增':item.operation=='1'?'更新':'删除'}}</td>
<td style="width: 20%;">{{item.organizationName}}</td>
<td style="width: 10%;"
[ngClass]="{'green': item.verifyState == '1'||item.verifyState == '4','red':item.verifyState == '2'||item.verifyState == '5'}">
{{item.verifyState=='0'?'待初审':item.verifyState=='1'?
'初审通过':item.verifyState=='2'?'初审驳回':item.verifyState=='3'?'待终审':item.verifyState=='4'?'终审通过':'终审驳回'}}
</td>
<td style="width: 10%;">{{item.creatorName}}</td>
<td style="width: 15%;">{{item.createTime|date:'yyyy-MM-dd'}}</td>
</tr>
</table>
<mat-paginator [length]="count" [pageIndex]="PageNumber - 1" [pageSize]="10" (page)="chagePage($event)">
</mat-paginator>
<!-- 联动力量审核 -->
<div class="LinkageForcesAudit" *ngIf="showtype == 14">
<app-linkageforces-audit [LinkageForceDetailInfo]="LinkageForceDetailInfo"></app-linkageforces-audit>
</div>
</div>
</div>
<div class="mask" *ngIf="isTableData">
<mat-spinner [diameter]="30"></mat-spinner>
</div>
</div>
<div class="boxright">
<div class="company" *ngIf="showtype == 3">
<mat-tab-group *ngIf="showtype == 3" style="flex: 1;overflow-y: auto;margin-top: 10px;"
[selectedIndex]="selected.value" (selectedIndexChange)="selected.setValue($event)">
<mat-tab label="基本信息">
<ng-template matTabContent>
<app-basic-info></app-basic-info>
</ng-template>
</mat-tab>
<mat-tab label="平面图">
<ng-template matTabContent>
<app-plan-list [planType]="'all'"></app-plan-list>
</ng-template>
</mat-tab>
<mat-tab label="四周毗邻">
<ng-template matTabContent>
<app-allaround></app-allaround>
</ng-template>
</mat-tab>
<mat-tab label="消防设施">
<ng-template matTabContent>
<app-fire-facilities></app-fire-facilities>
</ng-template>
</mat-tab>
<mat-tab label="重点部位">
<ng-template matTabContent>
<app-key-site-look></app-key-site-look>
</ng-template>
</mat-tab>
<mat-tab label="功能分区">
<ng-template matTabContent>
<app-function-partition></app-function-partition>
</ng-template>
</mat-tab>
<mat-tab label="实景图">
<ng-template matTabContent>
<app-realistic-picture-look></app-realistic-picture-look>
</ng-template>
</mat-tab>
<mat-tab label="CAD">
<ng-template matTabContent>
<app-cad-draw></app-cad-draw>
</ng-template>
</mat-tab>
</mat-tab-group>
</div>
<div class="word" *ngIf="showtype==0">
<div class="shadow" *ngIf="!iftrue">
<mat-spinner [diameter]="30"></mat-spinner>
</div>
<button mat-raised-button color="primary" style="float: right;margin-top: 10px;margin-right: 15px;"
*ngIf="showtype == 0||bianzhi" (click)='lookNew()'>查看详情</button>
<iframe [src]='iframeSrc' (load)='ifranmeLoad()' id="myiframe"></iframe>
</div>
<div id="viewer" *ngIf="showtype==1"></div>
<div class="twoD" *ngIf="showtype==2">
<div class="planBox">
<span>单位名称: </span>
<span>{{compantData.name?compantData.name : '暂无数据'}}</span>
</div>
<div class="planBox">
<span>消防救援站: </span>
<span>{{organizationName}}</span>
</div>
<div class="planBox">
<span>单位类型: </span>
<span>{{compantData.buildingTypes.length?compantData.buildingTypes[0].name : '暂无数据'}}</span>
</div>
<div class="planBox">
<span>单位地址: </span>
<span>{{compantData.address?compantData.address : '暂无数据'}}</span>
</div>
<div class="planBox">
<span style="color: #2196F3;cursor:pointer;" (click)='oopen3Dshow()'>查看详情</span>
</div>
</div>
<!-- 水源审核 -->
<div class="waterAudit" *ngIf="showtype == 12">
<app-water-audit [waterData]="waterData"></app-water-audit>
</div>
<!-- 消防力量审核 -->
<div class="fireForceAudit" *ngIf="showtype == 13">
<app-fireforce-audit [FireForceDetailInfo]="fireForceDetailInfo" [level]="postlevel"></app-fireforce-audit>
</div>
<!-- 联动力量审核 -->
<div class="LinkageForcesAudit" *ngIf="showtype == 14">
<app-linkageforces-audit [LinkageForceDetailInfo]="LinkageForceDetailInfo"></app-linkageforces-audit>
</div>
</div>
</div>
</div>

728
src/app/plan-audit/plan-record/plan-record.component.scss

@ -1,438 +1,334 @@
.box {
height: 100%;
width: 100%;
display: flex;
.boxleft {
.box{
height: 100%;
width: 45%;
overflow-y: auto;
background-color: #FFFFFF;
width: 100%;
display: flex;
flex-direction: column;
position: relative;
.lefthead {
height: 100%;
display: flex;
flex-direction: column;
.headdiv {
@media screen and (min-device-width:1400px) {
margin: 30px 0 0 28px;
}
@media screen and (max-device-width:1200px) {
margin-top: 10px;
}
@media screen and (max-device-width:1400px) and (min-device-width:1200px) {
margin: 20px 0 0 15px;
}
height: 40px;
.boxleft{
height: 100%;
width: 45%;
overflow-y: auto;
background-color: #FFFFFF;
display: flex;
align-items: center;
flex-direction: row;
span {
@media screen and (min-device-width:1400px) {
font-size: 16px;
}
@media screen and (max-device-width:1200px) {
font-size: 13px;
}
@media screen and (max-device-width:1400px) and (min-device-width:1200px) {
font-size: 16px;
}
margin-left: 3px;
}
input {
@media screen and (min-device-width:1400px) {
margin-left: 40px;
}
@media screen and (max-device-width:1200px) {
margin-left: 12px;
}
@media screen and (max-device-width:1400px) and (min-device-width:1200px) {
margin-left: 12px;
}
position: relative;
}
.count {
@media screen and (min-device-width:1400px) {
margin-left: 110px;
}
@media screen and (max-device-width:1200px) {
margin-left: 20px;
position: relative;
bottom: 4px;
}
@media screen and (max-device-width:1400px) and (min-device-width:1200px) {
margin-left: 20px;
}
}
}
.headdivtwo {
@media screen and (min-device-width:1400px) {
margin: 0 0 0 28px;
}
@media screen and (max-device-width:1200px) {
margin-left: 0;
flex-direction: column;
.lefthead{
display: flex;
flex-direction: column;
.headdiv{
@media screen and (min-device-width:1400px){
margin: 30px 0 0 28px;
}
@media screen and (max-device-width:1200px){
margin-top: 10px;
}
@media screen and (max-device-width:1400px) and (min-device-width:1200px){
margin: 20px 0 0 15px;
}
height: 40px;
display: flex;
flex-direction: row;
span{
@media screen and (min-device-width:1400px){
font-size: 16px;
}
@media screen and (max-device-width:1200px){
font-size: 13px;
}
@media screen and (max-device-width:1400px) and (min-device-width:1200px){
font-size: 16px;
}
margin-left: 3px;
}
input{
@media screen and (min-device-width:1400px){
margin-left: 50px;
top: 6px;
}
@media screen and (max-device-width:1200px){
margin-left: 12px;
top: 3px;
}
@media screen and (max-device-width:1400px) and (min-device-width:1200px){
margin-left: 12px;
top: 6px;
}
position: relative;
}
.count{
@media screen and (min-device-width:1400px){
margin-left: 110px;
}
@media screen and (max-device-width:1200px){
margin-left: 20px;
position: relative;
bottom: 4px;
}
@media screen and (max-device-width:1400px) and (min-device-width:1200px){
margin-left: 20px;
}
}
}
.headdivtwo{
@media screen and (min-device-width:1400px){
margin: 0 0 0 28px;
}
@media screen and (max-device-width:1200px){
margin-left: 0;
}
@media screen and (max-device-width:1400px) and (min-device-width:1200px){
margin: 0 0 0 15px;
}
//height: 40px;
display: flex;
flex-direction: row;
span{
@media screen and (min-device-width:1200px){
font-size: 16px;
}
@media screen and (max-device-width:1200px){
font-size: 13px;
}
margin-left: 3px;
}
input{
@media screen and (min-device-width:1400px){
margin-left: 50px;
top: 5px;
}
@media screen and (max-device-width:1200px){
margin-left: 0;
top: 3px;
}
@media screen and (max-device-width:1400px) and (min-device-width:1200px){
margin-left: 0;
top: 5px;
}
position: relative;
left: 2px;
}
.count{
@media screen and (min-device-width:1400px){
margin-left: 110px;
}
@media screen and (max-device-width:1400px){
margin-left: 20px;
}
}
}
.headthree{
height: 45px;
@media screen and (min-device-width:1400px){
margin-left: 30px;
}
@media screen and (max-device-width:1200px){
font-size: 13px;
mat-form-field{
width: 50px;
}
}
@media screen and (max-device-width:1400px) and (min-device-width:1200px){
margin-left: 15px;
mat-form-field{
width: 50px;
}
}
}
.headfour{
@media screen and (max-device-width:1200px){
font-size: 13px;
mat-form-field{
width: 80px;
}
}
@media screen and (max-device-width:1400px) and (min-device-width:1200px){
margin-left: 15px;
mat-form-field{
width: 80px;
}
}
@media screen and (min-device-width:1400px){
margin-left: 30px;
}
span{
@media screen and (min-device-width:1400px){
//margin-left: 30px;
}
}
button{
@media screen and (min-device-width:1400px){
margin-left: 40px;
font-size: 16px;
width: 80px;
height: 36px;
}
@media screen and (max-device-width:1200px){
margin-left: 80px;
}
@media screen and (max-device-width:1400px) and (min-device-width:1200px){
margin-left: 80px;
}
}
img{
@media screen and (max-device-width:1400px) and (min-device-width:1200px){
height: 14px;
width: 14px;
}
@media screen and (min-device-width:1400px){
height: 14px;
width: 14px;
}
@media screen and (max-device-width:1200px){
height: 12px;
width: 12px;
}
}
}
}
@media screen and (max-device-width:1400px) and (min-device-width:1200px) {
margin: 0 0 0 15px;
.tablediv{
width: 100%;
height: 100%;
padding-bottom: 20px;
.tbodycss{
//overflow-y: auto;
@media screen and (min-device-width:1400px){
overflow-y: auto;
}
height:550px;
width: 100%;
.selectedTr{
background-color: #b3d3ee;
}
}
table{
//margin: 20px 20px;
margin-left: 10px;
margin-right: 10px;
width: 97.5%;
//border: 1px solid #2196F3;
thead{
height:48px;
color: #FFFFFF;
background-color: #2196F3;
//font-size: 16px;
th{
font-weight:10;
@media screen and (min-device-width:1200px){
font-size: 16px;
}
@media screen and (max-device-width:1200px){
font-size: 13px;
}
}
}
tr:nth-child(odd){
background: #FAFAFA;
}
}
}
//height: 40px;
}
.boxright{
height: 100%;
width: 53%;
flex: 1;
background-color: #FFFFFF;
margin-left: 10px;
display: flex;
flex-direction: row;
align-items: center;
span {
@media screen and (min-device-width:1200px) {
font-size: 16px;
}
@media screen and (max-device-width:1200px) {
font-size: 13px;
}
margin-left: 3px;
}
input {
@media screen and (min-device-width:1400px) {
margin-left: 40px;
}
@media screen and (max-device-width:1200px) {
margin-left: 0;
}
@media screen and (max-device-width:1400px) and (min-device-width:1200px) {
margin-left: 0;
}
position: relative;
left: 2px;
}
.count {
@media screen and (min-device-width:1400px) {
margin-left: 110px;
}
@media screen and (max-device-width:1400px) {
margin-left: 20px;
}
}
}
.headthree {
height: 45px;
@media screen and (min-device-width:1400px) {
margin-left: 30px;
}
@media screen and (max-device-width:1200px) {
font-size: 13px;
mat-form-field {
width: 50px;
}
}
@media screen and (max-device-width:1400px) and (min-device-width:1200px) {
margin-left: 15px;
mat-form-field {
width: 50px;
}
}
}
.headfour {
@media screen and (max-device-width:1200px) {
font-size: 13px;
mat-form-field {
width: 80px;
}
}
@media screen and (max-device-width:1400px) and (min-device-width:1200px) {
margin-left: 15px;
mat-form-field {
width: 80px;
}
}
@media screen and (min-device-width:1400px) {
margin-left: 30px;
}
span {
@media screen and (min-device-width:1400px) {
//margin-left: 30px;
}
}
button {
@media screen and (min-device-width:1400px) {
margin-left: 40px;
font-size: 13px;
width: 65px;
height: 34px;
}
@media screen and (max-device-width:1200px) {
margin-left: 80px;
}
@media screen and (max-device-width:1400px) and (min-device-width:1200px) {
margin-left: 80px;
}
flex-direction: column;
@media screen and (max-device-width:1300px){
overflow-y: auto;
}
img {
@media screen and (max-device-width:1400px) and (min-device-width:1200px) {
height: 14px;
width: 14px;
}
@media screen and (min-device-width:1400px) {
height: 14px;
width: 14px;
}
@media screen and (max-device-width:1200px) {
height: 12px;
width: 12px;
}
}
}
.btnbox {
display: flex;
justify-content: center;
align-items: center;
button {
margin: 0 6px;
.company{
@media screen and (min-device-width:1300px){
overflow-y: auto;
}
flex: 1;
//overflow-y: auto;
margin-top: 10px;
}
}
}
.tablediv {
width: 100%;
flex: 1;
display: flex;
flex-direction: column;
overflow: hidden;
.header {
margin-left: 10px;
margin-right: 10px;
width: 97.5%;
thead {
height: 48px;
color: #FFFFFF;
background-color: #2196F3;
th {
font-weight: 10;
@media screen and (min-device-width:1200px) {
font-size: 16px;
.word{
width: 100%;
height: 100%;
.shadow{
height: 95%;
width: 97%;
margin: 10px 10px 10px 10px;
/* position:absolute;
left:0;
top:0; */
z-index:998;
background-color:#FFFFFF;
opacity:0.6;
mat-spinner{
position: relative;
top: 40%;
left: 40%;
}
}
@media screen and (max-device-width:1200px) {
font-size: 13px;
iframe{
height: 94%;
width: 97%;
margin: 10px 10px 10px 10px;
overflow-y: auto;
border: medium none;
}
}
}
tr:nth-child(odd) {
background: #FAFAFA;
#viewer{
margin: 30px 10px 10px 10px;
width: 97%;
height: 94%;
}
}
.tbodycss {
flex: 1;
width: 100%;
overflow-y: auto;
.selectedTr {
background-color: #b3d3ee;
.waterAudit,.fireForceAudit,.LinkageForcesAudit{
flex: 1;
width: 100%;
height: 100%;
box-sizing: border-box;
}
}
}
.mask {
position: absolute;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.2);
display: flex;
justify-content: center;
align-items: center;
}
}
.boxright {
height: 100%;
width: 53%;
flex: 1;
background-color: #FFFFFF;
margin-left: 10px;
display: flex;
flex-direction: column;
@media screen and (max-device-width:1300px) {
overflow-y: auto;
}
.company {
@media screen and (min-device-width:1300px) {
overflow-y: auto;
}
flex: 1;
//overflow-y: auto;
margin-top: 10px;
}
.word {
width: 100%;
height: 100%;
.shadow {
height: 95%;
width: 97%;
margin: 10px 10px 10px 10px;
/* position:absolute;
left:0;
top:0; */
z-index: 998;
background-color: #FFFFFF;
opacity: 0.6;
mat-spinner {
position: relative;
top: 40%;
left: 40%;
}
}
iframe {
height: 94%;
width: 97%;
margin: 10px 10px 10px 10px;
overflow-y: auto;
border: medium none;
}
}
#viewer {
margin: 30px 10px 10px 10px;
width: 97%;
height: 94%;
}
th,td{
height:48px;
@media screen and (min-device-width:1200px){
font-size: 16px;
}
.waterAudit,
.fireForceAudit,
.LinkageForcesAudit {
flex: 1;
width: 100%;
height: 100%;
box-sizing: border-box;
@media screen and (max-device-width:1200px){
font-size: 13px;
}
}
}
th,
td {
height: 48px;
@media screen and (min-device-width:1200px) {
font-size: 16px;
}
@media screen and (max-device-width:1200px) {
font-size: 13px;
}
text-align: center;
}
.green {
color: #00C756;
}
.red {
color: #FF4D4D;
text-align: center;
}
.yellow {
color: #FFC94B;
}
.green{color: #00C756;}
.red{color: #FF4D4D;}
.yellow{color: #FFC94B;}
.twoD {
width: 100%;
box-sizing: border-box;
display: flex;
flex-direction: column;
align-items: left;
.planBox {
margin: 30px 30px;
color: black;
:first-child {
margin-right: 10px;
width: 100%;
box-sizing: border-box;
display: flex;
flex-direction: column;
align-items: left;
.planBox {
margin: 30px 30px;
color: black;
:first-child {margin-right: 10px;}
}
}
}
//滚动条样式
::-webkit-scrollbar {
margin-right: 3px;
width: 6px;
background-color: white;
}
::-webkit-scrollbar-thumb {
background-color: #2196F3;
}
.mat-form-field-infix {
width: 100px;
}
::-webkit-scrollbar{
margin-right: 3px;
width: 6px;
background-color: white;
}
::-webkit-scrollbar-thumb{
background-color: #2196F3;
}
.mat-form-field-infix{
width: 100px;
}

480
src/app/plan-audit/plan-record/plan-record.component.ts

@ -1,376 +1,340 @@
import { Component, OnInit, Inject } from "@angular/core";
import { FormControl } from "@angular/forms";
import { MatSnackBar, MatSnackBarConfig } from "@angular/material/snack-bar";
import {
MatDialog,
MatDialogRef,
MAT_DIALOG_DATA,
} from "@angular/material/dialog";
import { HttpClient } from "@angular/common/http";
import { DomSanitizer } from "@angular/platform-browser";
import { Viewer } from "photo-sphere-viewer";
declare var CryptoJS;
/*
* @Descripttion:
* @version:
* @Author: sueRimn
* @Date: 2020-12-25 10:19:31
* @LastEditors: sueRimn
* @LastEditTime: 2021-08-16 15:29:41
*/
import { Component, OnInit, Inject } from '@angular/core';
import { FormControl } from '@angular/forms';
import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar';
import { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
import { HttpClient } from '@angular/common/http'
import { DomSanitizer } from '@angular/platform-browser';
import { Viewer } from 'photo-sphere-viewer';
declare var CryptoJS
@Component({
selector: "app-plan-record",
templateUrl: "./plan-record.component.html",
styleUrls: ["./plan-record.component.scss"],
selector: 'app-plan-record',
templateUrl: './plan-record.component.html',
styleUrls: ['./plan-record.component.scss']
})
export class PlanRecordComponent implements OnInit {
constructor(
private http: HttpClient,
public snackBar: MatSnackBar,
private sanitizer: DomSanitizer,
public dialog: MatDialog
) {}
pcshow;
constructor(private http: HttpClient, public snackBar: MatSnackBar, private sanitizer: DomSanitizer, public dialog: MatDialog) { }
pcshow
ngOnInit(): void {
if (window.matchMedia("(max-width: 1300px)").matches) {
this.pcshow = false;
this.pcshow = false
} else {
this.pcshow = true;
this.pcshow = true
}
let level = sessionStorage.getItem("level");
if (level == "0") {
//如果是总队
if (level == "0") {//如果是总队
this.preparelevels = [
{ name: "总队", value: "0" },
{ name: "支队", value: "1" },
{ name: "大队", value: "2" },
{ name: "中队", value: "3" },
];
{ name: "中队", value: "3" }
]
}
if (level == "1") {
//如果是支队
if (level == "1") {//如果是支队
this.preparelevels = [
{ name: "支队", value: "1" },
{ name: "大队", value: "2" },
{ name: "中队", value: "3" },
];
{ name: "中队", value: "3" }
]
}
if (level == "2") {
//如果是大队
if (level == "2") {//如果是大队
this.preparelevels = [
{ name: "大队", value: "2" },
{ name: "中队", value: "3" },
];
{ name: "中队", value: "3" }
]
}
if (level == "3") {
//如果是中队
this.preparelevels = [{ name: "中队", value: "3" }];
if (level == "3") {//如果是中队
this.preparelevels = [
{ name: "中队", value: "3" }
]
}
this.iframeSrc = this.sanitizer.bypassSecurityTrustResourceUrl(this.src);
this.getAlltabledate();
this.getAlltabledate()
}
wordShow = true;
iframeSrc;
src = "";
wordShow = true
iframeSrc
src = ''
selected = new FormControl(0); //选项卡 实例
preparelevels: any;
level = ""; //类型
verifyState = ""; //审核状态
projectlevel; //组织机构
PlanLevel; //编制级别
addtime; //时间
endtime; //结束时间
count; //一共多少条
tableDate;
showPvt = false; //全景图是否显示
shenheTable = []; //选中要审核的对象
chuorzhong; //判断初审还是终审
radioid; //选中的id
showtype = -1; //0:word,1:全景图,2:二维三维,3:重点单位
compantData = { name: "", buildingTypes: [], address: "" };
organizationName;
planData;
id;
itemid;
companyId;
fetchUrl;
companyName;
plantypes;
IsNewData = [true, false];
preparelevels: any
level = ''//类型
verifyState = ''//审核状态
projectlevel//组织机构
PlanLevel//编制级别
addtime//时间
endtime//结束时间
count//一共多少条
tableDate
showPvt = false//全景图是否显示
shenheTable = []//选中要审核的对象
chuorzhong//判断初审还是终审
radioid//选中的id
showtype = -1//0:word,1:全景图,2:二维三维,3:重点单位
compantData = { name: '', buildingTypes: [], address: '' }
organizationName
planData
id
itemid
companyId
fetchUrl
companyName
plantypes
IsNewData=[true,false]
//获取表格数据
PageNumber = 1;
isTableData = false;
getAlltabledate() {
this.isTableData = true;
let paramsdata: any = {
Operation: this.level || [],
ContentType: Number(this.projectlevel) || [],
Level: this.PlanLevel || [],
verifyState: this.verifyState || [1, 2, 4, 5],
QueryStartTime: this.addtime || "",
QueryEndTime: this.endtime || "",
PlanType: this.plantypes || [],
IsNewData: this.IsNewData,
PageNumber: this.PageNumber,
PageSize: 10,
PageType: 2,
};
this.http
.get("/api/ContentVerifies", { params: paramsdata })
.subscribe((data: any) => {
//console.log(data)
this.isTableData = false;
this.tableDate = data.items;
this.count = data.totalCount;
});
QueryStartTime: this.addtime || '',
QueryEndTime: this.endtime || '',
PlanType:this.plantypes||[],
IsNewData:this.IsNewData
}
this.http.get("/api/ContentVerifies", { params: paramsdata }).subscribe((data: any) => {
//console.log(data)
this.tableDate = data.items
this.count = data.totalCount
})
}
//提交查询
onSubmit(value) {
this.PageNumber = 1;
this.getAlltabledate();
//console.log(value)
this.getAlltabledate()
}
//刷新
record() {
this.verifyState = "";
this.level = "";
this.projectlevel = "";
this.IsNewData = [true, false];
this.addtime = "";
this.endtime = "";
this.PlanLevel = "";
this.plantypes = [];
this.PageNumber = 1; //分页事件触发刷新
this.getAlltabledate();
}
//分页事件
chagePage(e) {
console.log("分页事件", e);
this.PageNumber = e.pageIndex + 1;
this.getAlltabledate();
this.verifyState = ''
this.level = ''
this.projectlevel = ''
this.addtime = ''
this.endtime = ''
let level = sessionStorage.getItem("level");
this.PlanLevel = ''
this.plantypes=[]
this.getAlltabledate()
}
//表格点击事件
viewer; //全景图对象
waterData: any; //需要传递给子组件的水源信息
LinkageForceDetailInfo: any; //需要传递给子组件的联动力量信息
fireForceDetailInfo: any; //需要传递给子组件的消防力量信息
postlevel: any;
bianzhi = false;
viewer//全景图对象
waterData: any//需要传递给子组件的水源信息
LinkageForceDetailInfo: any//需要传递给子组件的联动力量信息
fireForceDetailInfo: any//需要传递给子组件的消防力量信息
postlevel: any
bianzhi = false
tableClick(e, item) {
this.showtype = -1;
this.showtype = -1
//e.target.parentElement.bgColor='#2196F3'
// console.log(item)
this.organizationName = "";
this.itemid = item.itemId;
this.id = item.id;
this.fetchUrl = "";
this.viewer = {};
this.organizationName = ''
this.itemid = item.itemId
this.id = item.id
this.fetchUrl = ''
this.viewer = {}
if (item.contentType == 11) {
this.bianzhi = false;
this.bianzhi = false
window.setTimeout(() => {
this.showtype = 3;
sessionStorage.setItem("companyId", item.itemId);
}, 0);
this.showtype = 3
sessionStorage.setItem('companyId', item.itemId)
}, 0)
} else if (item.contentType == 12) {
this.bianzhi = false;
this.bianzhi = false
//水源
this.http.get(`/api/WaterSources/${item.itemId}`).subscribe((data) => {
this.waterData = data;
this.showtype = 12;
});
this.waterData = data
this.showtype = 12
})
} else if (item.contentType == 13) {
this.bianzhi = false;
this.bianzhi = false
//消防力量
this.http
.get(`/api/CustomFireForce/${item.itemId}`)
.subscribe((data: any) => {
if (data.forceType != 0) {
//如果是其他消防力量
this.postlevel = 4;
} else {
this.postlevel = data.level;
}
// console.log('xxx',data)
data.fireForceDetailInfo.location
? null
: (data.fireForceDetailInfo.location = { x: null, y: null });
this.fireForceDetailInfo = data.fireForceDetailInfo;
this.showtype = 13;
});
this.http.get(`/api/CustomFireForce/${item.itemId}`).subscribe((data: any) => {
if (data.forceType != 0) {//如果是其他消防力量
this.postlevel = 4
} else {
this.postlevel = data.level
}
// console.log('xxx',data)
data.fireForceDetailInfo.location ? null : data.fireForceDetailInfo.location = { x: null, y: null }
this.fireForceDetailInfo = data.fireForceDetailInfo
this.showtype = 13
})
} else if (item.contentType == 14) {
this.bianzhi = false;
this.bianzhi = false
//联动力量
this.http
.get(`/api/LinkageForces/${item.itemId}`)
.subscribe((data: any) => {
data.location ? null : (data.location = { x: null, y: null });
this.LinkageForceDetailInfo = data;
this.showtype = 14;
});
this.http.get(`/api/LinkageForces/${item.itemId}`).subscribe((data: any) => {
data.location ? null : data.location = { x: null, y: null }
this.LinkageForceDetailInfo = data
this.showtype = 14
})
} else {
this.http
.get(`/api/PlanComponents/${item.itemId}`)
.subscribe((data: any) => {
this.companyId = data.companyId;
this.companyName = data.companyName;
//this.bianzhi = false
this.http.get(`/api/PlanComponents/${item.itemId}`).subscribe((data: any) => {
this.companyId = data.companyId
this.companyName = data.companyName
//this.bianzhi = false
if (data.planType != 2 && data.planType != 1) {
if (data.planMode == 2) {
this.showtype = 0;
this.bianzhi = true;
this.src = `/CreatePlanOnlineFive?navIsOpen=false&companyId=${data.companyId}&planName=${data.name}&unitName=${data.companyName}&planCategory=${data.planCategory}&planId=${data.id}&unitTypeId=${data.company.buildingTypes[0].id}&orName=${data.company.organizationName}&orId=${data.company.organizationId}&pattern=false`;
this.iframeSrc = this.sanitizer.bypassSecurityTrustResourceUrl(
this.src
);
this.showtype = 0
this.bianzhi = true
this.src = `/CreatePlanOnlineFive?navIsOpen=false&companyId=${data.companyId}&planName=${data.name}&unitName=${data.companyName}&planCategory=${data.planCategory}&planId=${data.id}&unitTypeId=${data.company.buildingTypes[0].id}&orName=${data.company.organizationName}&orId=${data.company.organizationId}&pattern=false`
this.iframeSrc = this.sanitizer.bypassSecurityTrustResourceUrl(this.src);
//this.src=`/keyUnit/viewunitinfoplan?id=${data.companyId}&orName=${data.company.organizationId}&orId=${data.company.organizationName}`
} else {
this.bianzhi = false;
this.fetchUrl = data.attachmentUrls[0];
var index = this.fetchUrl.indexOf("/");
if (this.fetchUrl.substr(0, index) == "psw") {
this.showtype = 1;
var obj = document.getElementById("viewer");
if (obj != null) {
obj.innerHTML = "";
}
window.setTimeout(() => {
this.viewer = new Viewer({
container: document.querySelector("#viewer"),
panorama: "/api/Objects/PlanPlatform/" + this.fetchUrl,
});
});
} else {
this.lookWord();
} else{
this.bianzhi = false
this.fetchUrl = data.attachmentUrls[0]
var index = this.fetchUrl.indexOf("\/")
if (this.fetchUrl.substr(0, index) == 'psw') {
this.showtype = 1
var obj = document.getElementById('viewer')
if (obj != null) {
obj.innerHTML = ''
}
window.setTimeout(() => {
this.viewer = new Viewer({
container: document.querySelector('#viewer'),
panorama: '/api/Objects/PlanPlatform/' + this.fetchUrl,
});
})
} else {
this.lookWord()
}
}
} else {
this.organizationName = item.organizationName;
this.planData = data;
this.handleData();
return;
this.organizationName = item.organizationName
this.planData = data
this.handleData()
return
//this.src=`/planAudit/planpass?id=${data.companyId}&companyName=${data.companyName}&auditPlanId=${data.id}&auditStatus=${data.auditStatus}&planType=1`
//this.iframeSrc=this.sanitizer.bypassSecurityTrustResourceUrl(this.src);
//window.open(`/planAudit/planpass?id=${data.companyId}&companyName=${data.companyName}&auditPlanId=${data.id}&auditStatus=${data.auditStatus}&planType=1`)
}
});
})
}
if (e.checked) {
this.shenheTable.push(item);
} else {
this.shenheTable.push(item)
}
else {
for (var i = 0; i < this.shenheTable.length; i++) {
if (this.shenheTable[i].id == item.id) {
this.shenheTable.splice(i, 1);
this.shenheTable.splice(i, 1)
}
}
}
this.radioid = item.itemId;
this.radioid = item.itemId
/* this.chuorzhong=item.verifyState
this.radioid=item.itemId */
}
//毕升
lookWord() {
this.showtype = 0;
let suffix = this.fetchUrl
.split(".")
[this.fetchUrl.split(".").length - 1].toLowerCase();
if (suffix == "docx" || suffix == "doc") {
let arr = this.fetchUrl.split(".");
arr[arr.length - 1] = "pdf";
this.src = `/api/Objects/PlanPlatform/` + arr.join(".");
} else if (suffix == "pdf") {
this.src = `/api/Objects/PlanPlatform/` + this.fetchUrl;
this.showtype = 0
let suffix = this.fetchUrl.split('.')[this.fetchUrl.split('.').length - 1].toLowerCase()
if (suffix == 'docx' || suffix == 'doc') {
let arr = this.fetchUrl.split('.')
arr[arr.length - 1] = 'pdf'
this.src = `/api/Objects/PlanPlatform/` + arr.join('.')
} else if (suffix == 'pdf') {
this.src = `/api/Objects/PlanPlatform/` + this.fetchUrl
}
this.iframeSrc = this.sanitizer.bypassSecurityTrustResourceUrl(this.src);
}
//查看按钮跳转
lookNew() {
window.open(this.src);
window.open(this.src)
}
//查看二维三维预案
thirdPartyURL;
planType;
twoOrthree;
thirdPartyURL
planType
twoOrthree
handleData() {
console.log(this.planData);
this.compantData = { name: "", buildingTypes: [], address: "" };
this.planType = this.planData.planMode;
let data = this.planData;
this.compantData = { name: '', buildingTypes: [], address: '' }
this.planType = this.planData.planMode
let data = this.planData
if (data.planType == 1) {
this.twoOrthree = 2;
this.twoOrthree = 2
} else if (data.planType == 2) {
this.twoOrthree = 3;
this.twoOrthree = 3
}
if (this.planData.planMode == 0) {
//预案planMode=0时, 查看word
if (this.planData.planMode == 0) { //预案planMode=0时, 查看word
//this.lookWord()
} else if (this.planData.planMode == 1 || this.planData.planMode == 2) {
//预案planMode=2时, 跳查看页面组件
this.showtype = 2;
} else if (this.planData.planMode == 1) { //预案planMode=1时, 解析文档
} else if (this.planData.planMode == 2) { //预案planMode=2时, 跳查看页面组件
this.showtype = 2
this.http.get(`/api/Plans/${data.companyId}`).subscribe((data: any) => {
data && data.company ? (this.compantData = data.company) : null;
});
sessionStorage.setItem(
"buildingTypeId",
this.compantData.buildingTypes.length
? this.compantData.buildingTypes[0].id
: undefined
);
data && data.company ? this.compantData = data.company : null
})
sessionStorage.setItem("buildingTypeId", this.compantData.buildingTypes.length ? this.compantData.buildingTypes[0].id : undefined);
sessionStorage.setItem("companyId", this.companyId);
sessionStorage.setItem("planId", this.itemid);
sessionStorage.setItem("editable", "0");
sessionStorage.setItem("planName", data.name);
let companyId = sessionStorage.getItem("companyId");
this.thirdPartyURL = this.sanitizer.bypassSecurityTrustResourceUrl(
`/keyUnit/viewunitinfoplans?id=${companyId}`
);
sessionStorage.setItem("editable", '0');
sessionStorage.setItem("planName", data.name)
let companyId = sessionStorage.getItem("companyId")
this.thirdPartyURL = this.sanitizer.bypassSecurityTrustResourceUrl(`/keyUnit/viewunitinfoplans?id=${companyId}`);
//window.open(`/keyUnit/viewunitinfoplan?id=${companyId}`)
} else if (this.planData.planMode == 3) {
//预案planMode=3时, 第三方网址'
this.showtype = 2;
} else if (this.planData.planMode == 3) { //预案planMode=3时, 第三方网址'
this.showtype = 2
this.http.get(`/api/Plans/${data.companyId}`).subscribe((data: any) => {
data && data.company ? (this.compantData = data.company) : null;
});
data && data.company ? this.compantData = data.company : null
})
//this.dialog.open(show3D,{width:'1350px',height:'700px',data:{url:data.url}}); //打开图片弹窗
this.thirdPartyURL = this.sanitizer.bypassSecurityTrustResourceUrl(
data.url
);
this.thirdPartyURL = this.sanitizer.bypassSecurityTrustResourceUrl(data.url)
}
}
//打开三维预案弹窗
oopen3Dshow() {
this.dialog.open(recordshow3D, {
width: "1650px",
height: "850px",
data: { url: this.thirdPartyURL, twoOrthree: this.twoOrthree },
});
this.dialog.open(recordshow3D, { width: '1650px', height: '850px', data: { url: this.thirdPartyURL, twoOrthree: this.twoOrthree } });
}
//判断iframe是否加载完成
iftrue = true;
ifranmeLoad() {
iftrue=true
ifranmeLoad(){
var iframe = document.getElementById("myiframe");
iframe.onload = function () {};
this.iftrue = !this.iftrue;
iframe.onload = function(){
}
this.iftrue=!this.iftrue
}
}
@Component({
selector: "app-wait-examineer-show3D",
templateUrl: "./show3D.html",
styleUrls: ["./plan-record.component.scss"],
selector: 'app-wait-examineer-show3D',
templateUrl: './show3D.html',
styleUrls: ['./plan-record.component.scss']
})
export class recordshow3D {
constructor(
private sanitizer: DomSanitizer,
public dialogRef: MatDialogRef<recordshow3D>,
@Inject(MAT_DIALOG_DATA) public data,
public dialog: MatDialog
) {}
constructor(private sanitizer: DomSanitizer, public dialogRef: MatDialogRef<recordshow3D>, @Inject(MAT_DIALOG_DATA) public data, public dialog: MatDialog) { }
ngOnInit(): void {
// console.log(this.data)
this.threedUrl = this.sanitizer.bypassSecurityTrustResourceUrl(
this.data.url.changingThisBreaksApplicationSecurity
);
this.threedUrl = this.sanitizer.bypassSecurityTrustResourceUrl(this.data.url.changingThisBreaksApplicationSecurity)
}
threedUrl;
threedUrl
}

200
src/app/plan-audit/wait-examineer/wait-examineer.component.html

@ -15,58 +15,59 @@
<div class="headthree">
<div class="headthreeone">
<span>类型:</span>
<mat-form-field>
<mat-select placeholder='请选择单位类型' name="unittype" [(ngModel)]="projectlevel">
<mat-option value="1">Ⅰ级预案</mat-option>
<mat-option value="2">Ⅱ级预案</mat-option>
<mat-option value="3">Ⅲ级预案</mat-option>
<mat-option value="4">Ⅳ级预案</mat-option>
<mat-option value="5">Ⅴ级预案</mat-option>
<mat-option value="6">应急预案(国家级)</mat-option>
<mat-option value="7">应急预案(市级)</mat-option>
<mat-option value="8">类型预案</mat-option>
<mat-option value="11">重点单位</mat-option>
<mat-option value="12">消防水源</mat-option>
<mat-option value="13">消防力量</mat-option>
<mat-option value="14">联动力量</mat-option>
</mat-select>
</mat-form-field>
<span class="bzjb">编制级别:</span>
<mat-form-field>
<mat-select name="preparelevel" placeholder='请选择编制级别' [(ngModel)]="PlanLevel">
<mat-option *ngFor="let item of preparelevels" [value]="item.value">{{item.name}}</mat-option>
</mat-select>
</mat-form-field>
<mat-form-field>
<mat-select placeholder='请选择单位类型' name="unittype" [(ngModel)]="projectlevel">
<!-- <mat-option value="1">Ⅰ级预案</mat-option>
<mat-option value="2">Ⅱ级预案</mat-option> -->
<mat-option value="3">Ⅲ级预案</mat-option>
<mat-option value="4">Ⅳ级预案</mat-option>
<mat-option value="5">Ⅴ级预案</mat-option>
<!-- <mat-option value="6">应急预案(国家级)</mat-option>
<mat-option value="7">应急预案(市级)</mat-option> -->
<mat-option value="8">类型预案</mat-option>
<mat-option value="11">重点单位</mat-option>
<!-- <mat-option value="12">消防水源</mat-option>
<mat-option value="13">消防力量</mat-option>
<mat-option value="14">联动力量</mat-option> -->
</mat-select>
</mat-form-field>
<span class="bzjb">编制级别:</span>
<mat-form-field>
<mat-select name="preparelevel" placeholder='请选择编制级别' [(ngModel)]="PlanLevel">
<mat-option *ngFor="let item of preparelevels" [value]="item.value">{{item.name}}</mat-option>
</mat-select>
</mat-form-field>
</div>
<div class="headthreetwo">
<span>状态:</span>
<mat-form-field>
<mat-select placeholder='请选择状态' name="IsNewData" [(ngModel)]="IsNewData" [multiple]="true">
<mat-option value=true>新增</mat-option>
<mat-option value=false>维护更新</mat-option>
</mat-select>
</mat-form-field>
<span >状态:</span>
<mat-form-field>
<mat-select placeholder='请选择状态' name="IsNewData" [(ngModel)]="IsNewData" [multiple]="true">
<mat-option value=true>新增</mat-option>
<mat-option value=false>维护更新</mat-option>
</mat-select>
</mat-form-field>
<span class="bzjb">预案类型:</span>
<mat-form-field>
<mat-select placeholder='请选择预案类型' name="unittype" [(ngModel)]="plantypes" [multiple]="true">
<mat-option value="1">二维预案</mat-option>
<mat-option value="2">三维预案</mat-option>
<mat-option value="4">其他预案</mat-option>
<mat-option value="16">文本预案</mat-option>
</mat-select>
</mat-form-field>
<mat-form-field>
<mat-select placeholder='请选择预案类型' name="unittype" [(ngModel)]="plantypes" [multiple]="true">
<mat-option value="1">二维预案</mat-option>
<mat-option value="2">三维预案</mat-option>
<mat-option value="4">其他预案</mat-option>
<mat-option value="16">文本预案</mat-option>
</mat-select>
</mat-form-field>
<button mat-raised-button color="primary" type="submit" class="find">查询</button>
<button mat-raised-button color="primary" (click)='record()'><img src="../../../assets/images/refresh.png">
重置</button>
</div>
</div>
<div class="btnbox">
<button mat-raised-button color="primary" type="submit">查询</button>
<button mat-raised-button color="primary" type="button" (click)='record()'>重置</button>
</div>
</form>
</div>
<div class="tablediv">
<table class="theader" cellspacing="0" cellpadding="0" style="margin-top: 10px;margin-bottom: 5px;">
<table cellspacing="0" cellpadding="0" style="margin-top: 10px;margin-bottom: 5px;">
<thead>
<th style="width: 10%;margin-left: 5px;">状态</th>
<th style="width: 10%;">类型</th>
@ -83,20 +84,14 @@
<table cellspacing="0" cellpadding="0" id="table">
<tr [ngClass]="{'selectedTr': item.id == id}" *ngFor="let item of tableDate;let key = index"
(click)='radioClick($event,item)'>
<td style="width: 10%;"
[ngClass]="{'green': item.itemMaintenanceState == '0','yellow':item.itemMaintenanceState != '0'}">
<td style="width: 10%;" [ngClass]="{'green': item.itemMaintenanceState == '0','yellow':item.itemMaintenanceState != '0'}">
<mat-checkbox color="primary" (change)='radioClick($event,item)' style="float: left;margin-bottom:'2px'">
</mat-checkbox>
{{item.itemMaintenanceState=='0'?'新增':'维护'}}
</td>
{{item.itemMaintenanceState=='0'?'新增':'维护'}}</td>
<td style="width: 10%;">
{{item.contentType=='1'?'Ⅰ级预案':item.contentType=='2'?'Ⅱ级预案':item.contentType=='3'?'Ⅲ级预案':item.contentType=='4'?'Ⅳ级预案':item.contentType=='5'?
'Ⅴ级预案':item.contentType=='6'?'应急预案(国家级)':item.contentType=='7'?'应急预案(市级)':item.contentType=='8'?'类型预案':(item.contentType=='11'
&&item.itemObj&&
item.itemObj?.isFollowed)?'重点单位':(item.contentType=='11'
&&item.itemObj&&
!item.itemObj?.isFollowed)?'一般单位':(item.contentType=='11'
&&!item.itemObj)?'已删除':item.contentType=='12'?'水源':item.contentType=='13'?'消防力量':item.contentType=='14'?'联动力量':'未知'}}
'Ⅴ级预案':item.contentType=='6'?'应急预案(国家级)':item.contentType=='7'?'应急预案(市级)':item.contentType=='8'?'类型预案':item.contentType=='11'?'重点单位':item.contentType=='12'?'水源':item.contentType=='13'?'消防力量':item.contentType=='14'?'联动力量':'未知'}}
</td>
<td style="width: 10%;">
{{item.planType=='1'?'二维预案':item.planType=='2'?'三维预案':item.planType=='4'?'其它预案':item.planType=='16'?'文本预案':''}}
@ -106,33 +101,18 @@
[ngClass]="{'green': item.operation == '0','red':item.operation == '2','yellow':item.operation == '1'}">
{{item.operation=='0'?'新增':item.operation=='1'?'更新':'删除'}}</td>
<td style="width: 20%;">{{item.organizationName}}</td>
<!-- <td style="width: 10%;"
<td style="width: 10%;"
[ngClass]="{'green': item.verifyState == '1'||item.verifyState == '4','red':item.verifyState == '2'||item.verifyState == '5'}">
{{item.verifyState=='0'?'待初审':item.verifyState=='1'?
'初审通过':item.verifyState=='2'?'初审驳回':item.verifyState=='3'?'待终审':item.verifyState=='4'?'终审通过':'终审驳回'}} -->
<td style="width: 10%;">
<span
*ngIf="item.verifyState=='0' && (item.contentType == 3 || item.contentType == 4 || item.contentType == 5) && item.itemObj?.isFollowed">待初审</span>
<span
*ngIf="item.verifyState=='0' && (item.contentType !== 3 && item.contentType !== 4 && item.contentType !== 5)">待初审</span>
<span
*ngIf="item.verifyState=='0' && (item.contentType == 3 || item.contentType == 4 || item.contentType == 5) && !item.itemObj?.isFollowed">待终审</span>
<span class="green" *ngIf="item.verifyState=='1'">初审通过</span>
<span class="red" *ngIf="item.verifyState=='2'">初审驳回</span>
<span *ngIf="item.verifyState=='3'">待终审</span>
<span class="green" *ngIf="item.verifyState=='4'">终审通过</span>
<span class="red" *ngIf="item.verifyState=='5'">终审驳回</span>
'初审通过':item.verifyState=='2'?'初审驳回':item.verifyState=='3'?'待终审':item.verifyState=='4'?'终审通过':'终审驳回'}}
</td>
<td style="width: 7%;">{{item.creatorName}}</td>
<td style="width: 13%;">{{item.createTime|date:'yyyy-MM-dd'}}</td>
</tr>
</table>
<mat-paginator [length]="count" [pageIndex]="PageNumber - 1" [pageSize]="10" (page)="chagePage($event)">
</mat-paginator>
</div>
</div>
<div class="mask" *ngIf="isTableData">
<mat-spinner [diameter]="30"></mat-spinner>
</div>
</div>
@ -149,6 +129,8 @@
</div>
<div class="rightheadone" style="display: block;" *ngIf="showtype == 3">
<button mat-raised-button color="primary" (click)="buttonChange()">{{isallDate?'显示变更数据':'显示完整数据'}} </button>
<!-- <button mat-raised-button *ngIf="isallDate" style="background-color: #FFCC00; color: #FFFFFF;"
(click)="preview()"><img src="../../../assets/images/change.png" style="margin-bottom: 2px;"> 预览得分</button> -->
</div>
</div>
@ -157,18 +139,16 @@
<div *ngIf="showtype == 3" id="firefacilities" style="margin: 10px;">
<mat-accordion *ngIf="selectedItem.differentContent" class="tableContent" multi>
<!-- 基本信息 -->
<mat-expansion-panel
*ngIf="this.differentContentOfUnitInfo && this.differentContentOfUnitInfo.length != 0 && this.differentContentOfUnitInfo[0].childrens.length != 0"
expanded>
<mat-expansion-panel *ngIf="this.differentContentOfUnitInfo && this.differentContentOfUnitInfo.length != 0 && this.differentContentOfUnitInfo[0].childrens.length != 0" expanded>
<mat-expansion-panel-header collapsedHeight='40px' expandedHeight='40px' class="panelhead"
style="background-color: #2196F3;">
<mat-panel-title style="font-size: 16px;color: #FFFFFF;">
基本信息
基本信息
</mat-panel-title>
</mat-expansion-panel-header>
<div class="accordingin">
<div class="accordingin">
<mat-accordion>
<mat-expansion-panel expanded hideToggle>
<mat-expansion-panel expanded hideToggle>
<mat-expansion-panel-header collapsedHeight='30px' expandedHeight='30px' class="panelhead">
<mat-panel-title style="font-size: 16px;color:#2196F3;">
<mat-icon style="font-size: 18px;width: 18px;height: 18px;">border_color</mat-icon>
@ -180,12 +160,10 @@
<th>{{i.displayName}} :</th>
<ng-container *ngIf="i.propertyName == 'imageUrl'; else elseTemplate">
<td>
<span class="spantext" style="vertical-align: top;"></span>
<img (click)="lookImg(i.oldValue,true)" class="spantext" style="width: 150px;height: 105px;"
[src]="i.oldValue ? i.oldValue : '/assets/images/noImg.png'" alt="">
<span class="spantext" style="vertical-align: top;"></span>
<img (click)="lookImg(i.oldValue,true)" class="spantext" style="width: 150px;height: 105px;" [src]="i.oldValue ? i.oldValue : '/assets/images/noImg.png'" alt="">
<span class="spantext" style="vertical-align: top;">变更为</span>
<img (click)="lookImg(i.newValue,true)" class="spantext" style="width: 150px;height: 105px;"
[src]="i.newValue ? i.newValue : '/assets/images/noImg.png'" alt="">
<img (click)="lookImg(i.newValue,true)" class="spantext" style="width: 150px;height: 105px;" [src]="i.newValue ? i.newValue : '/assets/images/noImg.png'" alt="">
</td>
</ng-container>
<ng-template #elseTemplate>
@ -193,13 +171,13 @@
<td>
<span class="spantext buleColor">
{{i.displayName}} 发生变化
</span>
</span>
</td>
</ng-container>
<ng-template #elseTemplate>
<td>
<span class="spantext"></span>
<td >
<span class="spantext"></span>
<span class="spantext buleColor">{{i.oldValue | differentContentTitle}}</span>
<span class="spantext">变更为</span>
<span class="spantext buleColor">{{i.newValue | differentContentTitle}}</span>
@ -213,16 +191,14 @@
</div>
</mat-expansion-panel>
<!-- 建筑信息 -->
<mat-expansion-panel
*ngIf="this.differentContentOfBuildingsInfo && this.differentContentOfBuildingsInfo.childrens.length != 0"
expanded>
<mat-expansion-panel *ngIf="this.differentContentOfBuildingsInfo && this.differentContentOfBuildingsInfo.childrens.length != 0" expanded>
<mat-expansion-panel-header collapsedHeight='40px' expandedHeight='40px' class="panelhead"
style="background-color: #2196F3;">
<mat-panel-title style="font-size: 16px;color: #FFFFFF;">
建筑信息
建筑信息
</mat-panel-title>
</mat-expansion-panel-header>
<div class="accordingin">
<div class="accordingin">
<mat-accordion *ngFor="let item of this.differentContentOfBuildingsInfo.childrens">
<mat-expansion-panel expanded hideToggle>
<mat-expansion-panel-header collapsedHeight='30px' expandedHeight='30px' class="panelhead">
@ -239,7 +215,7 @@
<tr *ngFor="let i of item.difData">
<th>{{i.path[i.path.length - 2]}}-{{i.path[i.path.length - 1]}}:</th>
<td>
<span class="spantext"></span>
<span class="spantext"></span>
<span class="spantext buleColor">{{i.oldValue | differentContentTitle}}</span>
<span class="spantext">变更为</span>
<span class="spantext buleColor">{{i.newValue | differentContentTitle}}</span>
@ -251,16 +227,15 @@
</div>
</mat-expansion-panel>
<!-- 功能分区 -->
<mat-expansion-panel *ngIf="this.differentContentOfFunction && this.differentContentOfFunction.length != 0"
expanded>
<mat-expansion-panel *ngIf="this.differentContentOfFunction && this.differentContentOfFunction.length != 0" expanded>
<mat-expansion-panel-header collapsedHeight='40px' expandedHeight='40px' class="panelhead"
style="background-color: #2196F3;">
<mat-panel-title style="font-size: 16px;color: #FFFFFF;">
功能分区
功能分区
</mat-panel-title>
</mat-expansion-panel-header>
<div class="accordingin">
<mat-accordion *ngFor="let item of this.differentContentOfFunction">
<div class="accordingin">
<mat-accordion *ngFor="let item of this.differentContentOfFunction" >
<mat-expansion-panel expanded hideToggle>
<mat-expansion-panel-header collapsedHeight='30px' expandedHeight='30px' class="panelhead">
<mat-panel-title style="font-size: 16px;color:#2196F3;">
@ -272,7 +247,7 @@
<tr *ngFor="let i of item.childrens[0].childrens">
<th>{{i.displayName}} :</th>
<td>
<span class="spantext"></span>
<span class="spantext"></span>
<span class="spantext buleColor">{{i.oldValue | differentContentTitle}}</span>
<span class="spantext">变更为</span>
<span class="spantext buleColor">{{i.newValue | differentContentTitle}}</span>
@ -284,16 +259,14 @@
</div>
</mat-expansion-panel>
<!-- 实景图 -->
<mat-expansion-panel
*ngIf="this.differentContentOfPicture && this.differentContentOfPicture.length != 0 && this.differentContentOfPicture[0].childrens.length != 0"
expanded>
<mat-expansion-panel *ngIf="this.differentContentOfPicture && this.differentContentOfPicture.length != 0 && this.differentContentOfPicture[0].childrens.length != 0" expanded>
<mat-expansion-panel-header collapsedHeight='40px' expandedHeight='40px' class="panelhead"
style="background-color: #2196F3;">
<mat-panel-title style="font-size: 16px;color: #FFFFFF;">
实景图
实景图
</mat-panel-title>
</mat-expansion-panel-header>
<div class="accordingin">
<div class="accordingin">
<mat-accordion *ngFor="let item of this.differentContentOfPicture[0].childrens">
<mat-expansion-panel expanded hideToggle>
<mat-expansion-panel-header collapsedHeight='30px' expandedHeight='30px' class="panelhead">
@ -303,9 +276,9 @@
<span *ngIf="item.operation == 1">修改</span>
<span *ngIf="item.operation == 0">新增</span>
<span *ngIf="item.operation == 2">删除</span>
文件夹 -
文件夹 -
<span>{{item.propertyName}}</span>
</mat-panel-title>
</mat-expansion-panel-header>
<!-- 新增文件夹 -->
@ -313,8 +286,7 @@
<tr>
<th>新增图片</th>
<td>
<img (click)="lookImg(i.imageUrl)" *ngFor="let i of item.newValue"
[src]="'/api/Objects/PlanPlatform/'+i.imageUrl" alt="">
<img (click)="lookImg(i.imageUrl)" *ngFor="let i of item.newValue" [src]="'/api/Objects/PlanPlatform/'+i.imageUrl" alt="">
</td>
</tr>
</table>
@ -328,12 +300,12 @@
<img (click)="lookImg(i.newValue)" [src]="'/api/Objects/PlanPlatform/'+i.newValue" alt="">
</td>
<td *ngIf="i.operation == '1'">
<span class="spantext"></span>
<span class="spantext"></span>
<span class="spantext buleColor">{{i.childrens[0].oldValue}}</span>
<span class="spantext">变更为</span>
<span class="spantext buleColor">{{i.childrens[0].newValue}}</span>
</td>
</tr>
</table>
</mat-expansion-panel>
@ -346,15 +318,13 @@
<!-- 点击每条表格右边显示内容 -->
<div style="height: 100%;" *ngIf="isallDate">
<!-- 在新编辑或自定义预案 -->
<!-- word文档 -->
<div class="word" *ngIf="showtype == 0">
<div class="shadow" *ngIf="!iftrue">
<mat-spinner [diameter]="30"></mat-spinner>
<mat-spinner></mat-spinner>
</div>
<iframe [src]='iframeSrc' (load)='ifranmeLoad()' id="myiframe"></iframe>
</div>
<!-- 图片 -->
<img [src]="src" alt="" *ngIf="showtype == 'img'">
<!-- 全景图 -->
<div id="viewer" *ngIf="showtype == 1"></div>
<div class="twoD" *ngIf="showtype == 2">
@ -454,5 +424,5 @@
</div>
<div id="viewerjs">
</div>

883
src/app/plan-audit/wait-examineer/wait-examineer.component.scss

@ -1,555 +1,438 @@
.box {
height: 100%;
width: 100%;
display: flex;
img {
cursor: pointer;
}
.boxleft {
height: 100%;
width: 45%;
background-color: #ffffff;
width: 100%;
display: flex;
flex-direction: column;
overflow: hidden;
position: relative;
.lefthead {
display: flex;
flex-direction: column;
align-items: center;
form{
width: 100%;
}
.headdiv {
@media screen and (min-device-width: 1400px) {
margin: 0 0 0 28px;
}
@media screen and (max-device-width: 1400px) and (min-device-width: 1200px) {
margin-left: 15px;
}
@media screen and (max-device-width: 1200px) {
margin-left: 5px;
}
height: 40px;
display: flex;
flex-direction: row;
align-items: center;
.radio {
height: 10px;
}
span {
@media screen and (min-device-width: 1400px) {
font-size: 16px;
}
@media screen and (max-device-width: 1400px) and (min-device-width: 1200px) {
font-size: 16px;
}
@media screen and (max-device-width: 1200px) {
font-size: 14px;
}
margin-left: 3px;
}
input {
position: relative;
@media screen and (min-device-width: 1400px) {
margin-left: 40px;
}
@media screen and (max-device-width: 1200px) {
margin-left: 8px;
}
@media screen and (max-device-width: 1400px) and (min-device-width: 1200px) {
margin-left: 8px;
}
}
.count {
@media screen and (min-device-width: 1400px) {
margin-left: 110px;
}
@media screen and (max-device-width: 1200px) {
margin-left: 20px;
position: relative;
bottom: 3px;
}
@media screen and (max-device-width: 1400px) and (min-device-width: 1200px) {
margin-left: 20px;
/* position: relative;
bottom: 3px; */
}
}
}
.headthree {
img{
cursor: pointer;
}
.boxleft {
height: 100%;
width: 45%;
background-color: #ffffff;
display: flex;
flex-direction: column;
.bzjb {
@media screen and (min-device-width: 1400px) {
margin-left: 100px;
}
}
.find {
@media screen and (min-device-width: 1400px) {
margin-left: 80px;
}
}
@media screen and (min-device-width: 1400px) {
margin-left: 30px;
}
@media screen and (max-device-width: 1200px) {
margin-left: 7px;
font-size: 14px;
mat-form-field {
width: 120px;
}
//overflow: auto;
.lefthead {
height: 30%;
display: flex;
flex-direction: column;
.headdiv {
@media screen and (min-device-width: 1400px) {
margin: 0 0 0 28px;
}
@media screen and (max-device-width: 1400px) and (min-device-width: 1200px) {
margin-left: 15px;
}
@media screen and (max-device-width: 1200px) {
margin-left: 5px;
}
height: 40px;
display: flex;
flex-direction: row;
.radio {
height: 10px;
}
span {
@media screen and (min-device-width: 1400px) {
font-size: 16px;
}
@media screen and (max-device-width: 1400px) and (min-device-width: 1200px) {
font-size: 16px;
}
@media screen and (max-device-width: 1200px) {
font-size: 14px;
}
margin-left: 3px;
}
input {
position: relative;
@media screen and (min-device-width: 1400px) {
margin-left: 50px;
top: 6px;
}
@media screen and (max-device-width: 1200px) {
margin-left: 8px;
top: 4px;
}
@media screen and (max-device-width: 1400px) and (min-device-width: 1200px) {
margin-left: 8px;
top: 6px;
}
}
.count {
@media screen and (min-device-width: 1400px) {
margin-left: 110px;
}
@media screen and (max-device-width: 1200px) {
margin-left: 20px;
position: relative;
bottom: 3px;
}
@media screen and (max-device-width: 1400px) and (min-device-width: 1200px) {
margin-left: 20px;
/* position: relative;
bottom: 3px; */
}
}
}
.headthree {
display: flex;
flex-direction: column;
.bzjb{
@media screen and (min-device-width: 1400px){
margin-left: 100px;
}
}
.find{
@media screen and (min-device-width: 1400px){
margin-left: 200px;
}
}
@media screen and (min-device-width: 1400px) {
margin-left: 30px;
}
@media screen and (max-device-width: 1200px) {
margin-left: 7px;
font-size: 14px;
mat-form-field {
width: 120px;
}
}
@media screen and (max-device-width: 1400px) and (min-device-width: 1200px) {
margin-left: 15px;
//font-size: 14px;
mat-form-field {
width: 140px;
}
}
button {
@media screen and (min-device-width: 1400px) {
margin-left: 30px;
font-size: 16px;
width: 80px;
height: 36px;
}
@media screen and (max-device-width: 1400px) {
margin-left: 20px;
font-size: 14px;
}
}
img {
@media screen and (min-device-width: 1400px) {
height: 14px;
width: 14px;
}
@media screen and (max-device-width: 1400px) {
height: 12px;
width: 12px;
}
}
}
}
@media screen and (max-device-width: 1400px) and (min-device-width: 1200px) {
margin-left: 15px;
//font-size: 14px;
mat-form-field {
width: 140px;
}
.tablediv {
width: 100%;
height: 62%;
.tbodycss {
overflow-y: auto;
height: 100%;
width: 100%;
.selectedTr {
background-color: #b3d3ee;
}
td {
font-weight: 10;
@media screen and (min-device-width: 1200px) {
font-size: 16px;
}
@media screen and (max-device-width: 1200px) {
font-size: 14px;
}
}
}
table {
margin-left: 10px;
margin-right: 10px;
width: 97.5%;
//margin-bottom: 10px;
thead {
height: 48px;
color: #ffffff;
background-color: #2196f3;
//font-size: 10px;
th {
font-weight: 10;
@media screen and (min-device-width: 1200px) {
font-size: 16px;
}
@media screen and (max-device-width: 1200px) {
font-size: 14px;
}
}
}
tr:nth-child(odd) {
background: #fafafa;
}
}
}
button {
@media screen and (min-device-width: 1400px) {
margin-left: 40px;
font-size: 13px;
width: 65px;
height: 34px;
}
@media screen and (max-device-width: 1400px) {
margin-left: 20px;
font-size: 14px;
}
}
.boxright {
height: 100%;
width: 53%;
@media screen and (max-device-width: 1400px) {
overflow-y: auto;
}
img {
@media screen and (min-device-width: 1400px) {
height: 14px;
width: 14px;
}
@media screen and (max-device-width: 1400px) {
height: 12px;
width: 12px;
}
}
}
.btnbox{
flex: 1;
background-color: #ffffff;
margin-left: 10px;
display: flex;
justify-content: center;
align-items: center;
button{
margin: 0 6px;
flex-direction: column;
.company {
//margin-left: 20px;
@media screen and (min-device-width: 1400px) {
overflow-y: auto;
}
flex: 1;
//overflow-y: auto;
margin-top: 10px;
}
}
}
.tablediv {
width: 100%;
flex: 1;
overflow: hidden;
display: flex;
flex-direction: column;
.theader {
margin-left: 10px;
margin-right: 10px;
width: 97.5%;
thead {
height: 48px;
color: #ffffff;
background-color: #2196f3;
th {
font-weight: 10;
@media screen and (min-device-width: 1200px) {
font-size: 16px;
.righthead {
width: 100%;
display: flex;
height: 50px;
align-items: center;
flex-direction: row-reverse;
button {
margin-left: 10px;
font-size: 16px;
}
@media screen and (max-device-width: 1200px) {
font-size: 14px;
.rightheadone {
width: 40%;
margin-right: 7%;
}
.rightheadtwo {
width: 60%;
margin-right: 2%;
}
}
}
tr:nth-child(odd) {
background: #fafafa;
.word {
width: 100%;
height: 100%;
.shadow{
height: 95%;
width: 97%;
margin: 10px 10px 10px 10px;
/* position:absolute;
left:0;
top:0; */
z-index:998;
background-color:#FFFFFF;
opacity:0.6;
mat-spinner{
position: relative;
top: 40%;
left: 40%;
}
}
iframe {
height: 95%;
width: 97%;
margin: 10px 10px 10px 10px;
overflow-y: auto;
border: medium none;
}
}
}
.tbodycss {
flex: 1;
width: 100%;
overflow-y: auto;
box-sizing: border-box;
padding-left: 15px;
.selectedTr {
background-color: #b3d3ee;
#viewer {
margin: 10px 10px 10px 10px;
width: 97%;
height: 93%;
}
td {
font-weight: 10;
@media screen and (min-device-width: 1200px) {
font-size: 16px;
}
@media screen and (max-device-width: 1200px) {
font-size: 14px;
}
.waterAudit,
.fireForceAudit,
.LinkageForcesAudit {
flex: 1;
width: 100%;
height: 100%;
box-sizing: border-box;
}
}
}
.mask {
position: absolute;
width: 100%;
height: 100%;
background: rgba(0, 0, 0, 0.2);
display: flex;
justify-content: center;
align-items: center;
}
}
.boxright {
height: 100%;
width: 53%;
@media screen and (max-device-width: 1400px) {
overflow-y: auto;
}
flex: 1;
background-color: #ffffff;
margin-left: 10px;
display: flex;
flex-direction: column;
.company {
//margin-left: 20px;
@media screen and (min-device-width: 1400px) {
overflow-y: auto;
}
flex: 1;
//overflow-y: auto;
margin-top: 10px;
}
.righthead {
width: 100%;
display: flex;
height: 50px;
align-items: center;
flex-direction: row-reverse;
button {
margin-left: 10px;
font-size: 16px;
}
.rightheadone {
width: 40%;
margin-right: 7%;
}
.rightheadtwo {
width: 60%;
margin-right: 2%;
}
}
.word {
width: 100%;
height: 100%;
.shadow {
height: 95%;
width: 97%;
margin: 10px 10px 10px 10px;
/* position:absolute;
left:0;
top:0; */
z-index: 998;
background-color: #FFFFFF;
opacity: 0.6;
mat-spinner {
position: relative;
top: 40%;
left: 40%;
.emptyContent {
width: 100%;
text-align: center;
}
}
iframe {
height: 95%;
width: 97%;
margin: 10px 10px 10px 10px;
overflow-y: auto;
border: medium none;
}
}
#viewer {
margin: 10px 10px 10px 10px;
width: 97%;
height: 93%;
}
.waterAudit,
.fireForceAudit,
.LinkageForcesAudit {
flex: 1;
width: 100%;
height: 100%;
box-sizing: border-box;
}
.emptyContent {
width: 100%;
text-align: center;
}
}
}
th,
td {
height: 43px;
@media screen and (min-device-width: 1400px) {
font-size: 16px;
}
@media screen and (max-device-width: 1400px) {
font-size: 14px;
}
text-align: center;
//white-space: nowrap;
height: 43px;
@media screen and (min-device-width: 1400px) {
font-size: 16px;
}
@media screen and (max-device-width: 1400px) {
font-size: 14px;
}
text-align: center;
//white-space: nowrap;
}
.green {
color: #00c756;
color: #00c756;
}
.red {
color: #ff4d4d;
color: #ff4d4d;
}
.yellow {
color: #FFC94B;
color: #FFC94B;
}
.accordingin {
margin: 5px;
.panelhead {
background-color: #e8f4fe;
color: #2196f3;
font-size: 16px;
span {
margin-left: 10px;
}
}
table {
margin: 5px 0;
width: 100%;
th {
background-color: #fafafa;
width: 30%;
font-size: 16px;
text-align: right;
}
td {
text-align: left;
font-size: 16px;
margin-left: 3px;
.spantext {
margin-left: 7px;
}
.buleColor {
margin: 5px;
.panelhead {
background-color: #e8f4fe;
color: #2196f3;
}
font-size: 16px;
span {
margin-left: 10px;
}
}
}
.addFiles {
tr {
td {
img {
width: 150px;
height: 105px;
margin-right: 6px;
table {
margin: 5px 0;
width: 100%;
th {
background-color: #fafafa;
width: 30%;
font-size: 16px;
text-align: right;
}
td {
text-align: left;
font-size: 16px;
margin-left: 3px;
.spantext{
margin-left: 7px;
}
.buleColor{
color: #2196f3;
}
}
}
}
}
.onebuilding {
display: flex;
margin: 5px 0;
width: 100%;
.accordingleft {
background-color: #fafafa;
width: 30%;
height: 120px;
font-size: 16px;
text-align: right;
.addFiles{
tr{
td{
img{
width: 150px;
height: 105px;
margin-right: 6px;
}
}
}
}
.accordingright {
margin: 7px;
height: 100px;
font-size: 16px;
img {
margin-left: 10px;
//height: 80px;
}
span {
margin-left: 10px;
position: relative;
bottom: 90px;
}
.onebuilding {
display: flex;
margin: 5px 0;
width: 100%;
.accordingleft {
background-color: #fafafa;
width: 30%;
height: 120px;
font-size: 16px;
text-align: right;
}
.accordingright {
margin: 7px;
height: 100px;
font-size: 16px;
img {
margin-left: 10px;
//height: 80px;
}
span {
margin-left: 10px;
position: relative;
bottom: 90px;
}
}
}
}
}
.echarts {
width: 480px;
height: 304px;
display: flex;
background-color: #000000;
opacity: 0.7;
position: absolute;
top: 13%;
left: 55%;
z-index: 100;
.bar {
height: 100%;
width: 40%;
opacity: 1;
//margin: 40px 30px;
}
.zhu {
margin-bottom: 100px;
margin-right: 20px;
height: 95%;
width: 60%;
opacity: 1;
}
width: 480px;
height: 304px;
display: flex;
background-color: #000000;
opacity: 0.7;
position: absolute;
top: 13%;
left: 55%;
z-index: 100;
.bar {
height: 100%;
width: 40%;
opacity: 1;
//margin: 40px 30px;
}
.zhu {
margin-bottom: 100px;
margin-right: 20px;
height: 95%;
width: 60%;
opacity: 1;
}
}
.twoD {
width: 100%;
box-sizing: border-box;
display: flex;
flex-direction: column;
align-items: left;
.planBox {
margin: 30px 30px;
color: black;
:first-child {
margin-right: 10px;
width: 100%;
box-sizing: border-box;
display: flex;
flex-direction: column;
align-items: left;
.planBox {
margin: 30px 30px;
color: black;
:first-child {
margin-right: 10px;
}
}
}
}
//滚动条样式
::-webkit-scrollbar {
width: 6px;
background-color: white;
width: 6px;
background-color: white;
}
::-webkit-scrollbar-thumb {
background-color: #2196f3;
background-color: #2196f3;
}
.remarkbox {
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
.remarkhead {
width: 100%;
span {
font-size: 20px;
text-align: center;
width: 80px;
margin-left: 40%;
height: 100%;
display: flex;
flex-direction: column;
.remarkhead {
width: 100%;
span {
font-size: 20px;
text-align: center;
width: 80px;
margin-left: 40%;
}
}
}
.remarktext {
width: 100%;
margin-top: 20px;
textarea {
width: 420px;
height: 110px;
outline: none;
.remarktext {
width: 100%;
margin-top: 20px;
textarea {
width: 420px;
height: 110px;
outline: none;
}
}
}
.remarkbottom {
width: 100%;
margin-top: 22px;
button {
width: 100px;
height: 36px;
font-size: 17px;
.remarkbottom {
width: 100%;
margin-top: 22px;
button {
width: 100px;
height: 36px;
font-size: 17px;
}
}
}
}

1113
src/app/plan-audit/wait-examineer/wait-examineer.component.ts

File diff suppressed because it is too large Load Diff

2
src/app/plan-audit/water-audit/water-audit.component.ts

@ -38,7 +38,7 @@ export class WaterAuditComponent implements OnInit {
// 将 markers 添加到地图
this.map.add(this.newPositionMarker);
}else{
this.map.setCity('上海市');
this.map.setCity('唐山市');
}
}, 0);

799
src/app/plan-management/create-plan-online-five/create-plan-online-five.component.html

File diff suppressed because it is too large Load Diff

3669
src/app/plan-management/create-plan-online-five/create-plan-online-five.component.ts

File diff suppressed because it is too large Load Diff

58
src/app/plan-management/drill-record/drill-record.component.html

@ -1,58 +0,0 @@
<!-- <p>演练记录</p> -->
<div class="box">
<div class="header">
<form class="queryBox" (ngSubmit)="onSubmit()">
<div class="queryField">
<span style="width: 108px;">预案名称:</span>
<input name="name" nz-input placeholder="请输入预案名称" [(ngModel)]="name" />
</div>
<div class="queryField" style="margin-right: 35px;">
<span>组织机构:</span>
<nz-tree-select [nzDropdownClassName]="'maxHeightTreeSelect'" style="width: 250px"
[nzExpandedKeys]="expandKeys" [nzNodes]="nodes" nzShowSearch nzPlaceHolder="请选择组织机构" name="orId"
[(ngModel)]="orId">
</nz-tree-select>
</div>
<div class="queryField">
<span>熟悉时间:</span>
<nz-range-picker name="time" [(ngModel)]="time"></nz-range-picker>
</div>
<div class="queryField btnbox">
<button nz-button nzType="primary">查询</button>
<button nz-button type="button" nzType="default" (click)="reset()">重置</button>
</div>
</form>
</div>
<div class="tablebox">
<table mat-table [dataSource]="tabledataSource" class="mat-elevation-z8">
<ng-container matColumnDef="name">
<th mat-header-cell *matHeaderCellDef>演练对象</th>
<td mat-cell *matCellDef="let element">{{element.company.name}}</td>
</ng-container>
<ng-container matColumnDef="or">
<th mat-header-cell *matHeaderCellDef>组织机构</th>
<td mat-cell *matCellDef="let element">{{element.company.organizationName}}</td>
</ng-container>
<ng-container matColumnDef="people">
<th mat-header-cell *matHeaderCellDef>带队人员</th>
<td mat-cell *matCellDef="let element">{{element.teamLeader}}</td>
</ng-container>
<ng-container matColumnDef="time">
<th mat-header-cell *matHeaderCellDef>演练时间</th>
<td mat-cell *matCellDef="let element">{{element.startTime | date:'yyyy-MM-dd HH:mm'}} -
{{element.endTime | date:'yyyy-MM-dd HH:mm'}}</td>
</ng-container>
<ng-container matColumnDef="operate">
<th mat-header-cell *matHeaderCellDef style="width: 200px;">操作</th>
<td mat-cell *matCellDef="let element" class="operate">
<span (click)="look(element)">查看</span>
<span (click)="delete(element)">删除</span>
</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
</table>
<mat-paginator [length]="length" [pageSize]="pageSize" (page)="chagePage($event)">
</mat-paginator>
</div>
</div>

59
src/app/plan-management/drill-record/drill-record.component.scss

@ -1,59 +0,0 @@
.box {
height: 100%;
overflow: auto;
}
.header {
width: 100%;
box-sizing: border-box;
padding: 20px 30px 8px 30px;
.queryBox {
display: flex;
flex-wrap: wrap;
align-items: center;
.queryField {
display: flex;
align-items: center;
margin-right: 20px;
span {
display: inline-block;
width: 80px;
}
}
.btnbox{
button{
margin-right: 12px;
}
}
}
}
.tablebox {
table {
width: 100%;
margin-top: 15px;
}
mat-paginator {
width: 100%;
}
}
.mat-header-cell,
.mat-cell {
text-align: center;
}
.operate {
span {
color: #40a9ff;
cursor: pointer;
margin: 0 3px;
}
}

25
src/app/plan-management/drill-record/drill-record.component.spec.ts

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

141
src/app/plan-management/drill-record/drill-record.component.ts

@ -1,141 +0,0 @@
import { Component, OnInit, ViewChild, Inject } from "@angular/core";
import { HttpClient } from "@angular/common/http";
import { MatPaginator } from "@angular/material/paginator";
import { Router, ActivatedRoute } from "@angular/router";
import { PageEvent } from "@angular/material/paginator";
import { MatDialog } from "@angular/material/dialog";
import { MatSnackBar } from "@angular/material/snack-bar";
import { TreeService } from "../../http-interceptors/tree.service";
import { DatePipe } from "@angular/common";
import { UploadDrillComponent } from "@src/app/key-unit/key-unit-management/upload-drill/upload-drill.component";
@Component({
selector: "app-drill-record",
templateUrl: "./drill-record.component.html",
styleUrls: ["./drill-record.component.scss"],
providers: [DatePipe],
})
export class DrillRecordComponent implements OnInit {
constructor(
private http: HttpClient,
public dialog: MatDialog,
public snackBar: MatSnackBar,
private datePipe: DatePipe
) {}
//分页
@ViewChild(MatPaginator, { static: true })
pageEvent: PageEvent;
paginator: MatPaginator;
displayedColumns: string[] = ["name", "or", "people", "time", "operate"];
tabledataSource: any; //表格数据
ngOnInit(): void {
this.getOrganizations();
}
//获得所有组织机构
allorganizations: any; //所有组织机构
getOrganizations() {
this.http.get("/api/Organizations").subscribe((data: any) => {
this.allorganizations = data;
this.getpresentOrganization();
});
}
//得到当前单位所在组织机构的tree型数据
expandKeys = [];
nodes = [];
organizationId;
getpresentOrganization() {
this.allorganizations.forEach((item) => {
item.key = item.id;
item.title = item.name;
item.children = [];
this.allorganizations.forEach((element) => {
if (element.parentId == item.id) {
item.children.push(element);
}
if (item.children.length === 0) {
item.isLeaf = true;
} else {
item.isLeaf = false;
}
});
});
this.http.get("/api/Account/Profiles").subscribe((data: any) => {
this.allorganizations.forEach((item) => {
if (item.name == data.organizationName) {
this.expandKeys = [item.id];
this.organizationId = item.id;
this.orId = item.id;
this.nodes = [...[item]];
this.getTabledataSource();
}
});
});
}
length: any; //共多少条数据
pageSize: any = 10; //每页条数
PageNumber: any = 1; //第几页
getTabledataSource() {
let params = {
OrganizationId: this.orId,
CompanyName: this.name || "",
StartTime: this.time
? this.datePipe.transform(this.time[0], "yyyy-MM-ddT00:00:00")
: "2020-01-01T00:00:00",
EndTime: this.time
? this.datePipe.transform(this.time[1], "yyyy-MM-ddT23:59:59")
: "2030-01-01T00:00:00",
PageNumber: this.PageNumber,
PageSize: this.pageSize,
};
this.http
.get("/api/DrillRecords", { params: params })
.subscribe((data: any) => {
this.tabledataSource = data.items;
this.length = data.totalCount;
});
}
//分页事件
chagePage(e) {
this.PageNumber = e.pageIndex + 1;
this.getTabledataSource();
}
name;
orId;
time;
//查询
onSubmit() {
this.PageNumber = 1;
this.pageEvent.pageIndex = 0;
this.getTabledataSource();
}
//重置
reset() {
this.name = "";
this.orId = this.organizationId;
this.time = null;
this.onSubmit();
}
look(element) {
this.dialog.open(UploadDrillComponent, {
width: "700px",
data: { unitInfo: element.company, isEditMode: false },
});
}
delete(element) {
if (confirm("确认删除此记录吗")) {
this.http
.delete(`/api/DrillRecords/${element.id}`)
.subscribe((data: any) => {
alert("删除成功");
this.getTabledataSource();
});
}
}
}

194
src/app/plan-management/entry-plan-look/AddPlanone.html

@ -7,108 +7,102 @@
* @LastEditTime: 2021-07-27 10:44:51
-->
<form (ngSubmit)="onSubmit(form.value)" #form="ngForm" class="example-container">
<div class="topbox" style="text-align: center;">
<span mat-dialog-title>新建预案</span>
</div>
<div class="mainbox">
<mat-horizontal-stepper [linear]="isLinear" #stepper>
<mat-step [stepControl]="firstFormGroup">
<form [formGroup]="firstFormGroup">
<ng-template matStepLabel>填写名称与类型</ng-template>
<mat-form-field>
<input matInput id="name" name="name" type='text' required autocomplete="off" placeholder="请输入预案名称"
formControlName="firstCtrlone">
</mat-form-field>
<div>
<!-- <label style="margin-right: 10px;">编制级别:</label> -->
<mat-form-field>
<mat-select placeholder='请选择预案类型' required formControlName="firstCtrltwo" [(ngModel)]='cadPlan'>
<mat-option value="16">文本预案</mat-option>
<mat-option value="1">二维预案</mat-option>
<mat-option value="2">三维预案</mat-option>
<mat-option value="4">其他预案</mat-option>
</mat-select>
</mat-form-field>
</div>
<div>
<mat-form-field>
<mat-select name="reservePlanType" formControlName="firstCtrlthree" placeholder='请选择预案级别' required>
<mat-option value='3'>Ⅲ级预案</mat-option>
<mat-option value='4' *ngIf="cadPlan=='16'||(levels!='1'&&levels!='2')">Ⅳ级预案</mat-option>
<mat-option value='5' *ngIf="cadPlan=='16'||(levels!='1'&&levels!='2')">Ⅴ级预案</mat-option>
</mat-select>
</mat-form-field>
</div>
<div>
<button type="button" mat-button matStepperNext (click)="next(firstFormGroup)">下一步</button>
<button type="button" mat-button (click)="closediv()">取消</button>
</div>
</form>
</mat-step>
<mat-step [stepControl]="secondFormGroup">
<form (ngSubmit)="onSubmit(form)" #form="ngForm">
<ng-template matStepLabel>上传预案完成创建</ng-template>
<div class="upbox">
<div style="float: left;margin-top: 10px;">
<span class="pigepadding">预案形式:</span>
</div>
<mat-radio-group required name="planup" [(ngModel)]="defaultisshow" style="float: left;"
(change)="selectradio($event)">
<div *ngIf="localup">
<mat-radio-button value="1" style="margin-right: 10px;">本地上传</mat-radio-button>
<input style="width: 175px;" type="file" name="" id="uploadFile" *ngIf="isup"
(change)="filechange($event)">
<span *ngIf="uploadover" style="font-size: 13px;">(已上传)</span>
</div>
<div *ngIf="inputword">
<mat-radio-button value="2" style="margin-right: 10px;">模板在线编制</mat-radio-button>
</div>
<div *ngIf="inputNew">
<mat-radio-button value="4" style="margin-right: 10px;">自定义在线编制</mat-radio-button>
</div>
<div class="topbox" style="text-align: center;">
<span mat-dialog-title>新建预案</span>
</div>
<div class="mainbox">
<mat-horizontal-stepper [linear]="isLinear" #stepper>
<mat-step [stepControl]="firstFormGroup">
<form [formGroup]="firstFormGroup">
<ng-template matStepLabel>填写名称与类型</ng-template>
<mat-form-field>
<input matInput id="name" name="name" type='text'
required autocomplete="off"
placeholder="请输入预案名称" formControlName="firstCtrlone">
</mat-form-field>
<div>
<!-- <label style="margin-right: 10px;">编制级别:</label> -->
<mat-form-field>
<mat-select placeholder='请选择预案类型' required formControlName="firstCtrltwo" [(ngModel)]='cadPlan'>
<mat-option value="16">文本预案</mat-option>
<mat-option value="1">二维预案</mat-option>
<mat-option value="2">三维预案</mat-option>
<mat-option value="4">其他预案</mat-option>
</mat-select>
</mat-form-field>
</div>
<div>
<mat-form-field>
<mat-select name="reservePlanType" formControlName="firstCtrlthree" placeholder='请选择预案级别' required>
<mat-option value='3'>Ⅲ级预案</mat-option>
<mat-option value='4' *ngIf="cadPlan=='16'||(levels!='1'&&levels!='2')">Ⅳ级预案</mat-option>
<mat-option value='5' *ngIf="cadPlan=='16'||(levels!='1'&&levels!='2')">Ⅴ级预案</mat-option>
</mat-select>
</mat-form-field>
</div>
<div>
<button type="button" mat-button matStepperNext (click)="next(firstFormGroup)">下一步</button>
<button type="button" mat-button (click)="closediv()">取消</button>
</div>
</form>
</mat-step>
<mat-step [stepControl]="secondFormGroup">
<form (ngSubmit)="onSubmit(form)" #form="ngForm">
<ng-template matStepLabel >上传预案完成创建</ng-template>
<div class="upbox">
<div style="float: left;margin-top: 10px;">
<span class="pigepadding">预案形式:</span>
</div>
<mat-radio-group required name="planup" [(ngModel)]="defaultisshow" style="float: left;" (change)="selectradio($event)">
<div *ngIf="localup">
<mat-radio-button value="1" style="margin-right: 10px;">本地上传</mat-radio-button>
<input style="width: 175px;" type="file" name="" id="uploadFile" *ngIf="isup" (change)="filechange($event)">
<span *ngIf="uploadover" style="font-size: 13px;">(已上传)</span>
</div>
<!-- <div *ngIf="inputword">
<mat-radio-button value="2" style="margin-right: 10px;">模板在线编制</mat-radio-button>
</div>
<div *ngIf="inputNew">
<mat-radio-button value="4" style="margin-right: 10px;">自定义在线编制</mat-radio-button>
</div> -->
<!-- <div *ngIf="inputword">
<!-- <div *ngIf="inputword">
<mat-radio-button value="1" style="margin-right: 10px;">导入word文档</mat-radio-button>
<input type="file" name="" id="" *ngIf="isinput" (change)="fileInput($event)">
</div> -->
<div *ngIf="pswShow">
<!-- <mat-radio-group >
<mat-radio-button value='psw' >是否为全景图</mat-radio-button>
</mat-radio-group> -->
<mat-checkbox [(ngModel)]='psw' name='psw' style="margin-left: 2px;">是否为全景图</mat-checkbox>
</div>
<div *ngIf="onlineedit">
<mat-radio-button value="2">在线编辑</mat-radio-button>
</div>
<div *ngIf="website">
<mat-radio-button value="3">网页地址</mat-radio-button>
<input type="text" *ngIf="isweb" name="webaddress" [(ngModel)]="webaddress"
style="width: 175px;height: 20px;margin-left:10px;">
</div>
</mat-radio-group>
</div>
<!-- -->
<div class="progressBox" *ngIf="uploadisLoading">
<span style="font-size: 13px;">上传中...</span>
<mat-progress-bar mode="determinate" [value]="uploadProgress" class="progress"
style="width: 320px;left: 64px;"></mat-progress-bar>
<button type="button" mat-raised-button (click)="cancel()">取消上传</button>
</div>
<div>
<button type="button" mat-button matStepperPrevious>上一步</button>
<button type="button" mat-button (click)="closediv()">取消</button>
<button mat-button *ngIf="!uploadisLoading">完成</button>
</div>
</form>
<!-- <div *ngIf="pswShow">
<mat-checkbox [(ngModel)]='psw' name='psw' style="margin-left: 2px;">是否为全景图</mat-checkbox>
</div> -->
<div *ngIf="onlineedit">
<mat-radio-button value="2">在线编辑</mat-radio-button>
</div>
<div *ngIf="website">
<mat-radio-button value="3">网页地址</mat-radio-button>
<input type="text" *ngIf="isweb" name="webaddress" [(ngModel)]="webaddress" style="width: 175px;height: 20px;margin-left:10px;">
</div>
</mat-radio-group>
</div>
<!-- -->
<div class="progressBox" *ngIf="uploadisLoading">
<span style="font-size: 13px;">上传中...</span>
<mat-progress-bar mode="determinate" [value]="uploadProgress" class="progress" style="width: 320px;left: 64px;"></mat-progress-bar>
<button type="button" mat-raised-button (click)="cancel()">取消上传</button>
</div>
<div>
<button type="button" mat-button matStepperPrevious>上一步</button>
<button type="button" mat-button (click)="closediv()">取消</button>
<button mat-button *ngIf="!uploadisLoading">完成</button>
</div>
</form>
</mat-step>
<!-- <mat-step>
</mat-step>
<!-- <mat-step>
<ng-template matStepLabel>Done</ng-template>
You are now done.
<div>
@ -116,7 +110,7 @@
<button type="button" mat-button (click)="stepper.reset()">Reset</button>
</div>
</mat-step> -->
</mat-horizontal-stepper>
</div>
</form>
</mat-horizontal-stepper>
</div>
</form>

50
src/app/plan-management/entry-plan-look/auditresult.html

@ -1,5 +1,13 @@
<!--
* @Descripttion:
* @version:
* @Author: sueRimn
* @Date: 2020-12-24 10:59:48
* @LastEditors: sueRimn
* @LastEditTime: 2021-03-16 14:34:07
-->
<div style="text-align: center;">
<span mat-dialog-title>审批结果</span>
<span mat-dialog-title>审批结果</span>
</div>
<div class="auditDiv">
@ -7,49 +15,15 @@
<p>提交时间:{{data.element.committedTime| date:'yyyy-MM-dd HH:mm:ss'}}</p>
<p>发起申请:{{commitOrganizationName }}</p>
<mat-divider></mat-divider>
<p>
<ng-container *ngIf="data.element.plan.company.isFollowed; else elseTemplate">初审</ng-container>
<ng-template #elseTemplate>终审</ng-template>时间:{{data.element.firstAudittedTime| date:'yyyy-MM-dd HH:mm:ss'}}
</p>
<p>
<ng-container *ngIf="data.element.plan.company.isFollowed; else elseTemplate">初审</ng-container>
<ng-template #elseTemplate>终审</ng-template>机构:{{data.element.firstAuditorOrganizationName}}
</p>
<p>
<ng-container *ngIf="data.element.plan.company.isFollowed; else elseTemplate">初审</ng-container>
<ng-template #elseTemplate>终审</ng-template>意见:{{data.element.firstAuditOpinion}}
</p>
<p>
<ng-container *ngIf="data.element.plan.company.isFollowed; else elseTemplate">初审</ng-container>
<ng-template #elseTemplate>终审</ng-template>结果:
<ng-container *ngIf="data.element.auditStatus==16">待终审</ng-container>
<ng-container *ngIf="data.element.auditStatus==32">
<ng-container *ngIf="data.element.plan.company.isFollowed; else elseTemplate">初审</ng-container>
<ng-template #elseTemplate>终审</ng-template>退回</ng-container>
<ng-container *ngIf="data.element.auditStatus==2 ||data.element.auditStatus==4">
<ng-container *ngIf="data.element.plan.company.isFollowed; else elseTemplate">初审</ng-container>
<ng-template #elseTemplate>终审</ng-template>通过</ng-container>
</p>
<ng-container *ngIf="data.element.plan.company.isFollowed">
<mat-divider></mat-divider>
<p>终审时间:{{data.element.audittedTime| date:'yyyy-MM-dd HH:mm:ss'}}</p>
<p>终审机构:{{data.element.auditorOrganizationName}}</p>
<p>终审意见:{{data.element.auditOpinion}}</p>
<p>终审结果:{{data.element.auditStatus==2?'终审通过':data.element.auditStatus==4?'终审退回':''}}</p>
</ng-container>
<!-- <p>初审时间:{{data.element.firstAudittedTime| date:'yyyy-MM-dd HH:mm:ss'}}</p>
<p>初审时间:{{data.element.firstAudittedTime| date:'yyyy-MM-dd HH:mm:ss'}}</p>
<p>初审机构:{{data.element.firstAuditorOrganizationName}}</p>
<p>初审意见:{{data.element.firstAuditOpinion}}</p>
<p>初审结果:{{data.element.auditStatus==16?'待终审':data.element.auditStatus==32?'初审退回':data.element.auditStatus==2||data.element.auditStatus==4?'初审通过':''}}
</p>
<p>初审结果:{{data.element.auditStatus==16?'待终审':data.element.auditStatus==32?'初审退回':data.element.auditStatus==2||data.element.auditStatus==4?'初审通过':''}}</p>
<mat-divider></mat-divider>
<p>终审时间:{{data.element.audittedTime| date:'yyyy-MM-dd HH:mm:ss'}}</p>
<p>终审机构:{{data.element.auditorOrganizationName}}</p>
<p>终审意见:{{data.element.auditOpinion}}</p>
<p>终审结果:{{data.element.auditStatus==2?'终审通过':data.element.auditStatus==4?'终审退回':''}}</p> -->
<p>终审结果:{{data.element.auditStatus==2?'终审通过':data.element.auditStatus==4?'终审退回':''}}</p>
</div>

18
src/app/plan-management/entry-plan-look/edit-plan-category/edit-plan-category.component.html

@ -1,18 +0,0 @@
<form (ngSubmit)="onSubmit(form.value)" #form="ngForm" class="example-container">
<div class="topbox" style="text-align: center;">
<span mat-dialog-title>修改预案级别</span>
</div>
<div class="mainbox">
<mat-form-field>
<mat-select placeholder='请选择预案级别' [(ngModel)]="planCategory" name="integritySort">
<mat-option [value]='3'>Ⅲ级预案</mat-option>
<mat-option [value]='4'>Ⅳ级预案</mat-option>
<mat-option [value]='5'>Ⅴ级预案</mat-option>
</mat-select>
</mat-form-field>
</div>
<div class="btn" style="margin-top:10px;">
<button mat-raised-button color="primary" style="margin-right: 12px;">确定</button>
<button type="button" mat-button (click)="onNoClick()" mat-raised-button>取消</button>
</div>
</form>

0
src/app/plan-management/entry-plan-look/edit-plan-category/edit-plan-category.component.scss

25
src/app/plan-management/entry-plan-look/edit-plan-category/edit-plan-category.component.spec.ts

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

37
src/app/plan-management/entry-plan-look/edit-plan-category/edit-plan-category.component.ts

@ -1,37 +0,0 @@
import { HttpClient } from "@angular/common/http";
import { Component, OnInit, Inject } from "@angular/core";
import { MatDialogRef, MAT_DIALOG_DATA } from "@angular/material/dialog";
import { MatSnackBar } from "@angular/material/snack-bar";
@Component({
selector: "app-edit-plan-category",
templateUrl: "./edit-plan-category.component.html",
styleUrls: ["./edit-plan-category.component.scss"],
})
export class EditPlanCategoryComponent implements OnInit {
constructor(
private http: HttpClient,
public dialogRef: MatDialogRef<EditPlanCategoryComponent>,
@Inject(MAT_DIALOG_DATA) public data,
public snackBar: MatSnackBar
) {}
planCategory;
ngOnInit(): void {
this.planCategory = this.data.planCategory;
}
onNoClick(): void {
this.dialogRef.close();
}
onSubmit(value) {
let body = {
planCategory: this.planCategory,
};
this.http
.put(`/api/PlanComponents/${this.data.id}`, body)
.subscribe((data) => {
this.dialogRef.close("success");
});
}
}

23
src/app/plan-management/entry-plan-look/entry-plan-look.component.html

@ -67,10 +67,7 @@
<ng-container matColumnDef="planCategory">
<th mat-header-cell *matHeaderCellDef>预案级别</th>
<td mat-cell *matCellDef="let element">
{{element.planCategory=='3'?'Ⅲ级预案':element.planCategory=='4'?'Ⅳ级预案':'Ⅴ级预案'}}
<mat-icon *ngIf="element.auditStatus==8 || element.maintenanceVerifyState=='未提交审核'"
class="editPlanCategory" (click)="editPlanCategory(element)">create</mat-icon>
</td>
{{element.planCategory=='3'?'Ⅲ级预案':element.planCategory=='4'?'Ⅳ级预案':'Ⅴ级预案'}}</td>
</ng-container>
<ng-container matColumnDef="plantype">
<th mat-header-cell *matHeaderCellDef style="width: 150px;">预案类型</th>
@ -88,9 +85,15 @@
</td>
</ng-container>
<ng-container matColumnDef="auditstate">
<th mat-header-cell *matHeaderCellDef>审核状态</th>
<th mat-header-cell *matHeaderCellDef>新增审核</th>
<td mat-cell *matCellDef="let element">
{{element.newVerifyState==null?'':element.newVerifyState}}
</td>
</ng-container>
<ng-container matColumnDef="weihustate">
<th mat-header-cell *matHeaderCellDef>维护审核</th>
<td mat-cell *matCellDef="let element">
{{element.auditStatus | auditState}}
{{element.maintenanceVerifyState==null?'':element.maintenanceVerifyState}}
</td>
</ng-container>
<ng-container matColumnDef="isopen">
@ -104,10 +107,9 @@
<ng-container *ngIf="isoperation == 'true'" matColumnDef="operation">
<th mat-header-cell *matHeaderCellDef>操作</th>
<td mat-cell *matCellDef="let element">
<span (click)="changeName(element)"
*ngIf="element.auditStatus==8 || element.maintenanceVerifyState=='未提交审核'">改名</span>
<span (click)="upzhuanMb(element)"
*ngIf="element.planMode==1&&element.planType==16&&element.planCategory==5">转在线导入</span>
<span (click)="changeName(element)" *ngIf="element.auditStatus==8">改名</span>
<!-- <span (click)="upzhuanMb(element)"
*ngIf="element.planMode==1&&element.planType==16&&element.planCategory==5">转在线导入</span> -->
<span (click)="editPlan(element)"
[ngClass]="{'grey': !(element.auditStatus!='16' && element.auditStatus != '1' )}">编辑</span>
<span (click)="lookPlan(element)"
@ -125,7 +127,6 @@
<ng-container *ngIf="isoperation == 'false'" matColumnDef="operation">
<th mat-header-cell *matHeaderCellDef>操作</th>
<td mat-cell *matCellDef="let element">
<!-- <span (click)="sixFamiliarize(element)">六熟悉</span> -->
<span (click)="lookPlan(element)">查看</span>
<span (click)="readFile(element)"
[ngClass]="{'grey': element.planMode == '1' || element.planMode == '2' || element.planMode == '3'}">下载</span>

387
src/app/plan-management/entry-plan-look/entry-plan-look.component.scss

@ -1,203 +1,160 @@
.header {
height: 130px;
// border-bottom: 1px solid rgba(0, 0, 0, 0.12);
display: flex;
flex-direction: row;
flex-wrap: wrap;
align-items: center;
// justify-content:center;
div {
width: 300px;
height: 30px;
// margin: 0 30px;
margin-left: 80px;
}
// margin-bottom: 30px;
}
.body {
overflow: auto;
.btn {
button {
width: 80px;
height: 40px;
margin-left: 2%;
.header{
height: 130px;
// border-bottom: 1px solid rgba(0, 0, 0, 0.12);
display: flex;
flex-direction: row;
flex-wrap: wrap;
align-items:center;
// justify-content:center;
div{
width: 300px;
height: 30px;
// margin: 0 30px;
margin-left: 80px;
}
}
.tablebox {
// margin-bottom: 30px;
}
.body{
overflow: auto;
.add {
cursor: auto;
text-decoration: none;
display: block;
width: 40px;
height: 20px;
background: #1AE2AC;
font-size: 12px;
line-height: 20px;
color: #FFFFFF;
margin-left: 50px;
.btn{
button{
width: 80px;
height: 40px;
margin-left: 2%;
}
}
.weihu {
cursor: auto;
text-decoration: none;
display: block;
width: 64px;
height: 20px;
background: #FFC94B;
font-size: 12px;
color: #FFFFFF;
line-height: 20px;
margin-left: 40px;
.tablebox{
overflow: auto;
.add{
cursor: auto;
text-decoration: none;
display: block;
width: 40px;
height: 20px;
background: #1AE2AC;
font-size: 12px;
line-height: 20px;
color: #FFFFFF;
margin-left: 50px;
}
.weihu{
cursor: auto;
text-decoration: none;
display: block;
width: 64px;
height: 20px;
background: #FFC94B;
font-size: 12px;
color: #FFFFFF;
line-height: 20px;
margin-left: 40px;
}
table{
width: 100%;
margin-left: 0%;
margin-top: 15px;
}
mat-paginator{
width: 100%;
margin-left: 0%;
// margin-top: 30px;
}
}
.editPlanCategory {
width: 13px;
height: 13px;
font-size: 18px;
vertical-align: sub;
cursor: pointer;
}
table {
width: 100%;
margin-left: 0%;
margin-top: 15px;
}
mat-paginator {
width: 100%;
margin-left: 0%;
// margin-top: 30px;
}
}
}
.upbox {
height: 100px;
margin-bottom: 15px;
mat-radio-group {
div {
margin: 10px 0;
.upbox{
height: 100px;
margin-bottom: 15px;
mat-radio-group{
div{
margin: 10px 0;
}
}
}
}
.createbtnbox {
button {
margin: 0 6px;
}
.createbtnbox{
button{
margin: 0 6px;
}
}
.mat-header-cell {
text-align: center;
.mat-header-cell{
text-align: center;
}
.mat-cell {
text-align: center;
span {
color: #0000BF;
margin: 0 3px;
cursor: pointer;
}
.grey {
color: grey;
pointer-events: none;
}
.mat-cell{
text-align: center;
span{
color: #0000BF;
margin: 0 3px;
cursor: pointer;
}
.grey{
color: grey;
pointer-events: none;
}
}
//进度条
.progressBox {
line-height: 49px;
height: 49px;
position: relative;
display: inline-block;
width: 100%;
button {
float: right;
}
.progress {
display: inline-block;
position: absolute;
width: 500px;
top: 22px;
left: 32px;
}
.filename {
.progressBox{
line-height: 49px;
height: 49px;
position: relative;
display: inline-block;
max-width: 180px;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
// margin-left: 160px;
}
}
.fileDiv {
cursor: pointer;
}
width: 100%;
button{
float: right;
}
.progress{
display: inline-block;
position: absolute;
width: 500px;
top: 22px;
left: 32px;
}
.fileDiv:hover {
background-color: #fafafa;
}
.filename{
display: inline-block;
max-width: 180px;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
// margin-left: 160px;
}
.auditDiv {
p {
margin: 8px 0;
margin-left: 16px;
}
}
.btn {
text-align: center;
button {
margin: 0 3px;
.fileDiv{
cursor: pointer;
}
.fileDiv:hover{
background-color: #fafafa;
}
#viewer {
width: 100%;
height: 100%;
}
.mat-dialog-container {
padding: 0;
}
//预览图片旋转角度
.rotateA {
transform: rotate(90deg) scale(0.75);
}
.rotateB {
transform: rotate(180deg)
.auditDiv{
p{
margin: 8px 0;
margin-left: 16px;
}
}
.rotateC {
transform: rotate(270deg) scale(0.75);
.btn{
text-align: center;
button{
margin: 0 3px;
}
}
@media screen and (max-width:1200px) {
.bigimgbox {
#viewer {
width: 100%;
height: 100%;
}
.mat-dialog-container{
padding: 0;
}
//预览图片旋转角度
.rotateA {transform: rotate(90deg) scale(0.75);}
.rotateB {transform: rotate(180deg)}
.rotateC {transform: rotate(270deg) scale(0.75);}
@media screen and (max-width:1200px){
.bigimgbox{
width: 880px;
height: 580px;
//预览图片
.previewImgBox {
width: 800px;
@ -206,12 +163,10 @@
}
}
}
@media screen and (min-width:1200px) and (max-width:1400px) {
.bigimgbox {
width: 880px;
@media screen and (min-width:1200px) and (max-width:1400px){
.bigimgbox{
width:880px;
height: 610px;
//预览图片
.previewImgBox {
width: 800px;
@ -219,53 +174,47 @@
text-align: center;
}
}
}
@media screen and (min-width:1400px) {
.bigimgbox {
width: 1110px;
@media screen and (min-width:1400px){
.bigimgbox{
width:1110px;
height: 860px;
//预览图片
.previewImgBox {
width: 900px;
height: 100%;
text-align: center;
}
.previewImgBottom {
text-align: center;
height: 30px;
margin: 20px auto;
text-align: center;
height: 30px;
margin: 20px auto;
}
}
}
.shadow{
height: 100%;
width: 100%;
z-index:998;
background-color:#FFFFFF;
opacity:0.3;
mat-spinner{
position: relative;
top: 40%;
left: 40%;
}
}
}
.shadow {
height: 100%;
width: 100%;
z-index: 998;
background-color: #FFFFFF;
opacity: 0.3;
mat-spinner {
position: relative;
top: 40%;
left: 40%;
}
}
//修改上传文件
.upload {
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
.file {
text-align: center;
}
}
.upload{
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
.file{
text-align: center;
}
}

2771
src/app/plan-management/entry-plan-look/entry-plan-look.component.ts

File diff suppressed because it is too large Load Diff

29
src/app/plan-management/entry-plan-look/six-familiarize/six-familiarize.component.html

@ -1,29 +0,0 @@
<h2 mat-dialog-title>六熟悉</h2>
<div class="box">
<div class="contentItem">
<div class="content">
<div class="textbox">
<span class="name">熟悉对象:</span>
<span>{{data.unitdata.unitname}}</span>
</div>
<div>
<span class="name">人员数量:</span>
<input type="number" [disabled]="!isEditMode" name="memberCount" [(ngModel)]="memberCount" nz-input
placeholder="人员数量" />
</div>
<div>
<span class="name">熟悉时间:</span>
<nz-range-picker [disabled]="!isEditMode" [nzShowTime]="{ nzFormat: 'HH:mm' }"
nzFormat="yyyy-MM-dd HH:mm" [nzPlaceHolder]="['开始时间', '结束时间']" name="time"
[(ngModel)]="time"></nz-range-picker>
</div>
</div>
</div>
<div class="mask" *ngIf="isLoading">
<mat-spinner [diameter]="30"></mat-spinner>
</div>
</div>
<mat-dialog-actions align="end">
<button mat-button mat-dialog-close [disabled]="isLoading || isLoadingSave">取消</button>
<button mat-button cdkFocusInitial (click)="save()" [disabled]="isLoading || isLoadingSave">确定</button>
</mat-dialog-actions>

118
src/app/plan-management/entry-plan-look/six-familiarize/six-familiarize.component.scss

@ -1,118 +0,0 @@
.box {
width: 100%;
position: relative;
.contentItem {
display: flex;
margin: 6px 0;
// border-bottom: 1px dashed rgb(180, 178, 178);
.title {
width: 75px;
color: #1890ff;
display: flex;
align-items: center;
}
.content {
flex: 1;
display: flex;
flex-wrap: wrap;
flex-direction: column;
div {
display: flex;
align-items: center;
input,
nz-range-picker {
flex: 1;
}
}
div {
margin-bottom: 8px;
.name {
display: inline-block;
width: 70px;
margin-right: 3px;
text-align: right;
}
}
}
.textbox {
height: 32px;
line-height: 32px;
width: 100%;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.uploadbox {
position: relative;
display: flex;
align-items: center;
input {
width: 88px;
height: 32px;
position: absolute;
left: 0;
top: 0;
opacity: 0;
z-index: 2;
cursor: pointer;
}
button {
z-index: 1;
cursor: pointer;
}
.imgbox {
height: 100%;
display: flex;
align-items: center;
li {
display: flex;
align-items: center;
position: relative;
}
img {
width: 50px;
height: 50px;
margin: 0 5px;
cursor: pointer;
}
.close {
position: absolute;
right: 0;
top: 0;
font-size: 15px;
cursor: pointer;
}
}
}
}
.mask {
position: absolute;
width: 100%;
height: 100%;
left: 0;
top: 0;
background: rgba(0, 0, 0, 0.2);
display: flex;
justify-content: center;
align-items: center;
z-index: 3;
}
}

25
src/app/plan-management/entry-plan-look/six-familiarize/six-familiarize.component.spec.ts

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

110
src/app/plan-management/entry-plan-look/six-familiarize/six-familiarize.component.ts

@ -1,110 +0,0 @@
import { HttpClient } from "@angular/common/http";
import { Component, OnInit, Inject } from "@angular/core";
import { MatDialogRef, MAT_DIALOG_DATA } from "@angular/material/dialog";
import { ObjectsService } from "@src/app/services/objects.service";
import { DatePipe } from "@angular/common";
import { MatSnackBar } from "@angular/material/snack-bar";
import Viewer from "viewerjs";
@Component({
selector: "app-six-familiarize",
templateUrl: "./six-familiarize.component.html",
styleUrls: ["./six-familiarize.component.scss"],
providers: [DatePipe],
})
export class SixFamiliarizeComponent implements OnInit {
constructor(
public dialogRef: MatDialogRef<SixFamiliarizeComponent>,
@Inject(MAT_DIALOG_DATA) public data: any,
private objectsSer: ObjectsService,
private http: HttpClient,
private datePipe: DatePipe,
public snackBar: MatSnackBar
) {}
isEditMode = true;
ngOnInit(): void {
console.log('传递的数据',this.data);
this.isEditMode = this.data.isEditMode;
this.getData();
}
isHttpPost;
getData() {
this.http
.get("/api/SixFamiliars", {
params: {
PlanComponentId: this.data.id,
},
})
.subscribe((data: any) => {
console.log("六熟悉记录数据", data);
if (data.totalCount === 0) {
this.isHttpPost = true;
} else {
this.isHttpPost = false;
let item = data.items[0];
this.familiarizeId = item.id;
this.memberCount = item.memberCount;
this.time = [item.startTime, item.endTime];
}
});
}
isLoading = false;
memberCount;
time;
familiarizeId;
isLoadingSave = false;
save() {
if (!this.isEditMode) {
this.dialogRef.close();
return;
}
if (!this.memberCount || !this.time) {
this.snackBar.open("请输入人员数量和熟悉时间", "确定", {
verticalPosition: "top",
duration: 3000,
});
return;
}
this.isLoadingSave = true;
let body: any = {
planComponentId: this.data.planData.id,
memberCount: Number(this.memberCount),
startTime: this.datePipe.transform(this.time[0], "yyyy-MM-ddTHH:mm:ss"),
endTime: this.datePipe.transform(this.time[1], "yyyy-MM-ddTHH:mm:ss"),
};
if (this.isHttpPost) {
this.http.post("/api/SixFamiliars", body).subscribe((data: any) => {
this.familiarizeId = data.id;
this.isHttpPost = false;
this.isLoadingSave = false;
this.snackBar.open("保存成功", "确定", {
verticalPosition: "top",
duration: 3000,
});
this.dialogRef.close();
});
} else {
body.id = this.familiarizeId;
this.http.put(`/api/SixFamiliars/${this.familiarizeId}`, body).subscribe(
(data: any) => {
this.isLoadingSave = false;
this.snackBar.open("保存成功", "确定", {
verticalPosition: "top",
duration: 3000,
});
this.dialogRef.close();
},
(err) => {
this.isLoadingSave = false;
}
);
}
}
}

42
src/app/plan-management/entry-plan/entry-plan.component.html

@ -91,26 +91,20 @@
</mat-select>
</mat-form-field>
</div>
<div class="queryField" *ngIf="!padMore&&!pcMore">
<label style="margin-right: 10px;">重点单位:</label>
<mat-form-field>
<mat-select placeholder='是否为重点单位' [(ngModel)]="isFollowed" name="isFollowed">
<mat-option value=0>一般单位</mat-option>
<mat-option value=1>重点单位</mat-option>
</mat-select>
</mat-form-field>
</div>
<!-- <div class="queryField" *ngIf="!padMore&&!pcMore">
<label style="margin-right: 10px;">编制级别:</label>
<mat-form-field>
<mat-select name="preparelevel" [(ngModel)]="preparelevel" placeholder='请选择编制级别'>
<!-- <mat-option value="1">总队</mat-option>
<mat-option value="2">支队</mat-option>
<mat-option value="4">大队</mat-option>
<mat-option value="8">中队</mat-option> -->
<mat-option *ngFor="let item of preparelevels" [value]="item.value">{{item.name}}
</mat-option>
</mat-select>
</mat-form-field>
<mat-checkbox style="margin-left: 6px;" [(ngModel)]="plcheck" name="plcheck">包含下级</mat-checkbox>
</div> -->
</div>
<div class="queryField" *ngIf="!padMore&&!pcMore">
<label style="margin-right: 10px;">审核状态:</label>
<mat-form-field>
@ -158,14 +152,12 @@
</mat-select>
</mat-form-field>
</div>
<div class="queryField" *ngIf="!padMore&&!pcMore">
<mat-checkbox (ngModelChange)="templatePlanChange($event,1)" [(ngModel)]="templatePlan"
name="templatePlan">模板录入预案</mat-checkbox>
<!-- <div class="queryField" *ngIf="!padMore&&!pcMore">
<mat-checkbox (ngModelChange)="templatePlanChange($event,1)" [(ngModel)]="templatePlan" name="templatePlan">模板录入预案</mat-checkbox>
</div>
<div class="queryField" *ngIf="!padMore&&!pcMore">
<mat-checkbox (ngModelChange)="templatePlanChange($event,2)" [(ngModel)]="customPlan"
name="customPlan">自定义预案</mat-checkbox>
</div>
<mat-checkbox (ngModelChange)="templatePlanChange($event,2)" [(ngModel)]="customPlan" name="customPlan">自定义预案</mat-checkbox>
</div> -->
</div>
</form>
</div>
@ -181,16 +173,6 @@
<span class="weihu" *ngIf="!element.company.isNewData">维护更新</span>
</td>
</ng-container>
<ng-container matColumnDef="isFollowed">
<th mat-header-cell *matHeaderCellDef style="width: 3%;">重点单位</th>
<td mat-cell *matCellDef="let element">
<span title="重点单位" *ngIf="element.company.isFollowed">
<mat-icon style="margin-top: 6px;color: red;">star</mat-icon>
</span>
</td>
</ng-container>
<ng-container matColumnDef="unitname">
<th mat-header-cell *matHeaderCellDef>单位名称</th>
<td mat-cell *matCellDef="let element">{{element.company.name}}</td>
@ -361,10 +343,10 @@
<th mat-header-cell *matHeaderCellDef>审核状态</th>
<td mat-cell *matCellDef="let element">{{element.auditStatus}}</td>
</ng-container>
<!-- <ng-container matColumnDef="projectlevel">
<ng-container matColumnDef="projectlevel">
<th mat-header-cell *matHeaderCellDef>编制级别</th>
<td mat-cell *matCellDef="let element">{{element.planLevel}}</td>
</ng-container> -->
</ng-container>
<ng-container matColumnDef="operation">
<th mat-header-cell *matHeaderCellDef>操作</th>
<td mat-cell *matCellDef="let element">
@ -381,4 +363,4 @@
</div>
</div>
</div>
</div>

484
src/app/plan-management/entry-plan/entry-plan.component.ts

@ -1,58 +1,36 @@
import { Component, OnInit, ViewChild, Inject } from "@angular/core";
import { HttpClient } from "@angular/common/http";
import {
MatTreeFlatDataSource,
MatTreeFlattener,
} from "@angular/material/tree";
import { MatPaginator } from "@angular/material/paginator";
import { FlatTreeControl } from "@angular/cdk/tree";
import { FormControl } from "@angular/forms";
import { Router, ActivatedRoute } from "@angular/router";
import { PageEvent } from "@angular/material/paginator";
import {
MatDialogRef,
MatDialog,
MAT_DIALOG_DATA,
} from "@angular/material/dialog";
import { MatSnackBar, MatSnackBarConfig } from "@angular/material/snack-bar";
import { TreeService } from "../../http-interceptors/tree.service";
import { ConstantPool } from "@angular/compiler";
import { Component, OnInit, ViewChild, Inject } from '@angular/core';
import { HttpClient } from '@angular/common/http'
import { MatTreeFlatDataSource, MatTreeFlattener } from '@angular/material/tree';
import { MatPaginator } from '@angular/material/paginator';
import { FlatTreeControl } from '@angular/cdk/tree';
import { FormControl } from '@angular/forms';
import { Router, ActivatedRoute } from '@angular/router'
import { PageEvent } from '@angular/material/paginator';
import { MatDialogRef, MatDialog, MAT_DIALOG_DATA } from '@angular/material/dialog';
import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar';
import { TreeService } from '../../http-interceptors/tree.service'
import { ConstantPool } from '@angular/compiler';
@Component({
selector: "app-entry-plan",
templateUrl: "./entry-plan.component.html",
styleUrls: ["./entry-plan.component.scss"],
selector: 'app-entry-plan',
templateUrl: './entry-plan.component.html',
styleUrls: ['./entry-plan.component.scss']
})
export class EntryPlanComponent implements OnInit {
constructor(
private http: HttpClient,
private router: Router,
private route: ActivatedRoute,
private tree: TreeService,
public dialog: MatDialog,
public snackBar: MatSnackBar
) {}
private _transformer = (node, level: number) => {
//初始化tree
constructor(private http: HttpClient, private router: Router, private route: ActivatedRoute, private tree: TreeService, public dialog: MatDialog, public snackBar: MatSnackBar) { }
private _transformer = (node, level: number) => { //初始化tree
return {
expandable: !!node.children && node.children.length > 0,
name: node.name,
level: level,
id: node.id,
parentId: node.parentId,
children: node.children,
children: node.children
};
};
treeControl = new FlatTreeControl<any>(
(node) => node.level,
(node) => node.expandable
);
treeFlattener = new MatTreeFlattener(
this._transformer,
(node) => node.level,
(node) => node.expandable,
(node) => node.children
);
}
treeControl = new FlatTreeControl<any>(node => node.level, node => node.expandable);
treeFlattener = new MatTreeFlattener(this._transformer, node => node.level, node => node.expandable, node => node.children);
dataSource = new MatTreeFlatDataSource(this.treeControl, this.treeFlattener);
myControl = new FormControl();
hasChild = (_: number, node: any) => node.expandable;
@ -62,31 +40,21 @@ export class EntryPlanComponent implements OnInit {
paginator: MatPaginator;
length: any; //共多少条数据
pageSize: any; //每页条数
pageSizeOptions: number[] = [10]; //设置每页条数
pageSizeOptions: number[] = [10] //设置每页条数
PageNumber: any; //第几页
IsNewData = ""; //预案维护更新或者新增
IsNewCompanyData = ""; //单位维护更新或者新增
IsNewData = '' //预案维护更新或者新增
IsNewCompanyData = ''//单位维护更新或者新增
displayedColumns: string[] = [
"state",
"isFollowed",
"unitname",
"integrity",
"level",
"jurisdictionsquadron",
"unittype",
"plantype",
"passstate",
"operation",
];
allorganizations: any; //所有组织机构
allunittype: any; //所有单位类型
tabledataSource: any; //表格数据
organizationName: any; //当前单位组织机构名称
preparelevels: any;
integritySort: any = "desc"; //完整度排序
haveyuan; //有无预案
displayedColumns: string[] = ['state', 'unitname', 'integrity', 'level', 'jurisdictionsquadron', 'unittype', 'plantype', 'passstate', 'projectlevel', 'operation'];
allorganizations: any //所有组织机构
allunittype: any //所有单位类型
tabledataSource: any //表格数据
organizationName: any //当前单位组织机构名称
preparelevels: any
integritySort: any //完整度排序
haveyuan//有无预案
colorRgb(sColor) {
var reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;
var sColor = sColor.toLowerCase();
@ -116,7 +84,7 @@ export class EntryPlanComponent implements OnInit {
var strHex = "#";
for (var i = 0; i < aColor.length; i++) {
var hex: any = Number(aColor[i]).toString(16);
hex = hex < 10 ? 0 + "" + hex : hex; // 保证每个rgb的值为2位
hex = hex < 10 ? 0 + '' + hex : hex;// 保证每个rgb的值为2位
if (hex === "0") {
hex += hex;
}
@ -133,7 +101,7 @@ export class EntryPlanComponent implements OnInit {
} else if (aNum.length === 3) {
var numHex = "#";
for (var i = 0; i < aNum.length; i += 1) {
numHex += aNum[i] + aNum[i];
numHex += (aNum[i] + aNum[i]);
}
return numHex;
}
@ -142,8 +110,8 @@ export class EntryPlanComponent implements OnInit {
}
}
gradientColor(startColor, endColor, step) {
let _this = this;
let startRGB = _this.colorRgb(startColor); //转换为rgb数组模式
let _this = this
let startRGB = _this.colorRgb(startColor);//转换为rgb数组模式
let startR = startRGB[0];
let startG = startRGB[1];
let startB = startRGB[2];
@ -153,340 +121,296 @@ export class EntryPlanComponent implements OnInit {
let endG = endRGB[1];
let endB = endRGB[2];
let sR = (endR - startR) / step; //总差值
let sR = (endR - startR) / step;//总差值
let sG = (endG - startG) / step;
let sB = (endB - startB) / step;
var colorArr = [];
for (var i = 0; i < step; i++) {
//计算每一步的hex值
var hex = _this.colorHex(
"rgb(" +
parseInt(sR * i + startR) +
"," +
parseInt(sG * i + startG) +
"," +
parseInt(sB * i + startB) +
")"
);
//计算每一步的hex值
var hex = _this.colorHex('rgb(' + parseInt((sR * i + startR)) + ',' + parseInt((sG * i + startG)) + ',' + parseInt((sB * i + startB)) + ')');
colorArr.push(hex);
}
return colorArr;
}
integrity(width) {
let _this = this;
let _this = this
let style: any = {};
style.width = width + "%";
let style: any = {}
style.width = width + '%';
if (width < 30) {
let colorArr = this.gradientColor("#D50000", "#E53935", 30);
let colorArr = this.gradientColor('#D50000', '#E53935', 30);
for (let i = 0; i < 30; i++) {
if (i == width) {
style.background = colorArr[i];
style.background = colorArr[i]
}
}
}
if (width >= 30 && width < 60) {
let colorArr = this.gradientColor("#FF9800", "#E65100", 30);
let colorArr = this.gradientColor('#FF9800', '#E65100', 30);
for (let i = 30; i < 60; i++) {
if (i == width) {
style.background = colorArr[i - 30];
style.background = colorArr[i - 30]
}
}
}
if (width >= 60) {
let colorArr = this.gradientColor("#81C784", "#2E7D32", 41);
let colorArr = this.gradientColor('#81C784', '#2E7D32', 41);
for (let i = 60; i <= 100; i++) {
if (i == width) {
style.background = colorArr[i - 60];
style.background = colorArr[i - 60]
}
}
}
return style;
return style
}
integrityDetails(width, zong) {
let style: any = {};
style.width = (width / zong) * 100 + "%";
return style;
let style: any = {}
style.width = (width / zong) * 100 + '%';
return style
}
level;
level
ngOnInit(): void {
if (window.matchMedia("(max-width: 1400px)").matches) {
this.pcMore = false;
this.padMore = true;
this.pcfind = false;
this.padjt = true;
this.pcMore = false
this.padMore = true
this.pcfind = false
this.padjt = true
} else {
this.pcfind = true;
this.pcMore = true;
this.padMore = false;
this.padjt = false;
this.pcfind = true
this.pcMore = true
this.padMore = false
this.padjt = false
}
this.getunitdata();
this.getOrganizations();
this.getUnittype();
this.getAllPlanInfo();
this.level = sessionStorage.getItem("level");
if (this.level == "0") {
//如果是总队
if (this.level == "0") {//如果是总队
this.preparelevels = [
{ name: "总队", value: "1" },
{ name: "支队", value: "2" },
{ name: "大队", value: "4" },
{ name: "中队", value: "8" },
];
{ name: "中队", value: "8" }
]
}
if (this.level == "1") {
//如果是支队
if (this.level == "1") {//如果是支队
this.preparelevels = [
{ name: "支队", value: "2" },
{ name: "大队", value: "4" },
{ name: "中队", value: "8" },
];
{ name: "中队", value: "8" }
]
}
if (this.level == "2") {
//如果是大队
if (this.level == "2") {//如果是大队
this.preparelevels = [
{ name: "大队", value: "4" },
{ name: "中队", value: "8" },
];
{ name: "中队", value: "8" }
]
}
if (this.level == "3") {
//如果是中队
this.preparelevels = [{ name: "中队", value: "8" }];
if (this.level == "3") {//如果是中队
this.preparelevels = [
{ name: "中队", value: "8" }
]
}
}
pcMore; //pc更多
pcput = false; //pc收起
pcfind; //pc查询
padjt = false;
padMore = true; //pad收缩控制
padput = false; //pad收起按钮
imgsrcopen = "../../../assets/images/routdown2.png";
imgsrcdown = "../../../assets/images/routup2.png";
pcMore//pc更多
pcput = false//pc收起
pcfind//pc查询
padjt = false
padMore = true//pad收缩控制
padput = false//pad收起按钮
imgsrcopen = "../../../assets/images/routdown2.png"
imgsrcdown = "../../../assets/images/routup2.png"
pcInfo() {
this.pcMore = !this.pcMore;
this.pcput = !this.pcput;
this.pcMore = !this.pcMore
this.pcput = !this.pcput
}
padInfo() {
this.padMore = !this.padMore;
this.padput = !this.padput;
this.padMore = !this.padMore
this.padput = !this.padput
}
//得到当前单位信息
getunitdata() {
this.http.get("/api/Account/Profiles").subscribe((data: any) => {
this.organizationName = data.organizationName;
});
this.http.get("/api/Account/Profiles").subscribe(
(data: any) => {
this.organizationName = data.organizationName
}
)
}
treedata: any; //组织机构树型数据
newArr: any = [];
newallorganizations: any; //用于存储在原始数据基础上的每个机构增加children字段
treedata: any //组织机构树型数据
newArr: any = []
newallorganizations: any //用于存储在原始数据基础上的每个机构增加children字段
//得到当前单位所在组织机构的tree型数据
getpresentOrganization() {
this.newallorganizations = this.allorganizations;
this.newallorganizations = this.allorganizations
this.newallorganizations.forEach((item) => {
item.children = [];
this.newallorganizations.forEach((element) => {
this.newallorganizations.forEach(item => {
item.children = []
this.newallorganizations.forEach(element => {
if (element.parentId == item.id) {
item.children.push(element);
item.children.push(element)
}
});
});
this.http.get("/api/Account/Profiles").subscribe((data: any) => {
this.organizationName = data.organizationName;
if (this.organizationName) {
this.newallorganizations.forEach((item) => {
if (item.name == this.organizationName) {
this.dataSource.data = [item];
}
});
} else {
this.dataSource.data = this.tree.toTree(this.treedata);
this.http.get("/api/Account/Profiles").subscribe(
(data: any) => {
this.organizationName = data.organizationName
if (this.organizationName) {
this.newallorganizations.forEach(item => {
if (item.name == this.organizationName) {
this.dataSource.data = [item]
}
});
} else {
this.dataSource.data = this.tree.toTree(this.treedata);
}
}
});
)
}
//获得所有组织机构
getOrganizations() {
this.http.get("/api/Organizations").subscribe((data: any) => {
this.allorganizations = data;
this.treedata = this.tree.toTree(data);
this.getpresentOrganization();
});
this.http.get('/api/Organizations').subscribe(
(data: any) => {
this.allorganizations = data
this.treedata = this.tree.toTree(data);
this.getpresentOrganization();
}
)
}
//获得所有单位类型
getUnittype() {
this.http.get("/api/BuildingTypes/Simple").subscribe((data) => {
this.allunittype = data;
});
this.http.get('/api/BuildingTypes/Simple').subscribe(
data => {
this.allunittype = data
}
)
}
//分页事件
chagePage(e) {
this.PageNumber = e.pageIndex + 1;
this.PageNumber = e.pageIndex + 1
this.getAllPlanInfo();
}
//辖区中队div是否显示
isorganizationbox: boolean = false;
isorganizationbox: boolean = false
//点击辖区中队树,将选择的辖区中队添加到变量
add(node) {
this.isorganizationbox = false;
this.js = node.name;
this.jsId = node.id;
this.isorganizationbox = false
this.js = node.name
this.jsId = node.id
}
//打开辖区中队隐藏框
openorganizationbox() {
this.isorganizationbox = true;
this.isorganizationbox = true
}
//关闭出现的组织机构div
closediv() {
this.isorganizationbox = false;
this.isorganizationbox = false
}
allPlanInfo: any; //存储所有预案信息
allPlanInfo: any //存储所有预案信息
//获得所有预案信息
templatePlan: boolean = false; //模板录入预案checkbox
customPlan: boolean = false; //自定义预案
templatePlan: boolean = false//模板录入预案checkbox
customPlan: boolean = false//自定义预案
getAllPlanInfo() {
let follow;
if (!this.isFollowed) {
follow = "";
}
if (this.isFollowed == "0") {
follow = false;
}
if (this.isFollowed == "1") {
follow = true;
}
let planmode = [];
this.templatePlan ? planmode.push(2) : null;
this.customPlan ? planmode.push(4) : null;
let reservePlanType;
this.reservePlanType
? (reservePlanType = JSON.parse(JSON.stringify(this.reservePlanType)))
: (reservePlanType = "");
let planmode = []
this.templatePlan ? planmode.push(2) : null
this.customPlan ? planmode.push(4) : null
let reservePlanType
this.reservePlanType ? reservePlanType = JSON.parse(JSON.stringify(this.reservePlanType)) : reservePlanType = ''
if (this.reservePlanType && this.reservePlanType.length != 0) {
reservePlanType = eval(this.reservePlanType.join("|"));
reservePlanType = eval(this.reservePlanType.join("|"))
}
let singleSignOn = sessionStorage.getItem("singleSignOn");
let paramsdata: any = {
CompanyName: this.companyName || "",
OrganizationId: this.jsId || "",
HasChildrenOrganization: this.jscheck || "",
BuildingTypeId: this.unittype || "",
PlanType: reservePlanType || "",
AuditStatus: this.toExamine || "",
PlanLevel: this.preparelevel || "",
HasChildrenPlanLevel: this.plcheck || "",
IsCompanyFollow: follow,
PageNumber: this.PageNumber || "1",
CompanyName: this.companyName || '',
OrganizationId: this.jsId || '',
HasChildrenOrganization: this.jscheck || '',
BuildingTypeId: this.unittype || '',
PlanType: reservePlanType || '',
AuditStatus: this.toExamine || '',
PlanLevel: this.preparelevel || '',
HasChildrenPlanLevel: this.plcheck || '',
PageNumber: this.PageNumber || '1',
PageSize: this.pageSizeOptions[0],
Sort: this.integritySort ? "integrityscore" : "",
SortType: this.integritySort || "",
HasPlanComponents: this.haveyuan || "",
Sort: this.integritySort ? 'integrityscore' : '',
SortType: this.integritySort || '',
HasPlanComponents: this.haveyuan || '',
PlanCategories: this.planCategory,
IsNewData: this.IsNewData,
IsNewCompanyData: this.IsNewCompanyData,
PlanModes: planmode,
CompanyNames: singleSignOn
? [
"大连路地铁站",
"东方渔人码头投资开发有限公司",
"上海孚宝港务有限公司",
"上海国际会议中心",
]
: [],
};
this.http
.get("/api/Plans", { params: paramsdata })
.subscribe((data: any) => {
this.length = data.totalCount;
this.allPlanInfo = data;
this.tabledataSource = data.items;
console.log("预案列表", this.tabledataSource);
});
PlanModes: planmode
}
this.http.get("/api/Plans", { params: paramsdata }).subscribe((data: any) => {
this.length = data.totalCount
this.allPlanInfo = data
this.tabledataSource = data.items
})
}
operation = true;
operation = true
//查看预案按钮跳转
routerTo(element) {
this.level == "0" ? (this.operation = false) : true;
sessionStorage.setItem("companyName", element.company.name);
const buildingType = element.company.buildingTypes[0] || {};
const unitTypeId = buildingType.id || null;
const unitTypeName = buildingType.name || null;
const params = new URLSearchParams({
unitId: element.company.id.toString(), // 确保是字符串
unitTypeId: unitTypeId ? unitTypeId.toString() : "", // 确保是字符串
operation: this.operation.toString(), // 将 boolean 转换为字符串
pagetype: "entryplan",
unitName: element.company.name.toString(), // 确保是字符串
orName: element.company.organizationName.toString(), // 确保是字符串
orId: element.company.organizationId.toString(), // 确保是字符串
unitType: unitTypeName ? unitTypeName.toString() : "", // 确保是字符串
unitAdd: element.company.address.toString(), // 确保是字符串
usci: element.company.usci.toString(), // 确保是字符串
});
window.open(`/planManagement/entryPlandetail?${params.toString()}`);
this.level == '0' ? this.operation = false : true
sessionStorage.setItem("companyName", element.company.name)
window.open(`/planManagement/entryPlandetail?unitId=${element.company.id}&unitTypeId=${element.company.buildingTypes.length == 0 ? null : element.company.buildingTypes[0].id}&operation=${this.operation}&pagetype=entryplan&unitName=${element.company.name}&orName=${element.company.organizationName}&orId=${element.company.organizationId}&unitType=${element.company.buildingTypes.length == 0 ? null : element.company.buildingTypes[0].name}&unitAdd=${element.company.address}&usci=${element.company.usci}`);
}
//查询
onSubmit(value) {
this.PageNumber = 1;
this.pageEvent.pageIndex = 0;
this.getAllPlanInfo();
this.PageNumber = 1
this.pageEvent.pageIndex = 0
this.getAllPlanInfo()
}
templatePlanChange($event, type) {
if (type == 1) {
this.templatePlan = $event;
this.templatePlan = $event
} else if (type == 2) {
this.customPlan = $event;
this.customPlan = $event
}
if (this.templatePlan || this.customPlan) {
this.reservePlanType = ["16"];
this.reservePlanType = ['16']
} else {
this.reservePlanType = [];
this.reservePlanType = []
}
}
companyName: any; //单位名称
js: any; //所选组织机构
jsId: any; //所选组织机构的id
jscheck: boolean; //所选组织机构勾选框
unittype: any; //单位类型
reservePlanType: any; //预案类型
toExamine: any; //审核状态
preparelevel: any; //编制级别
plcheck: boolean; //编制级别勾选框
planCategory = []; //预案级别
isFollowed; //重点单位
companyName: any //单位名称
js: any //所选组织机构
jsId: any //所选组织机构的id
jscheck: boolean //所选组织机构勾选框
unittype: any //单位类型
reservePlanType: any //预案类型
toExamine: any //审核状态
preparelevel: any //编制级别
plcheck: boolean //编制级别勾选框
planCategory = [] //预案级别
//重置
reset() {
this.IsNewCompanyData = "";
this.IsNewData = "";
this.companyName = "";
this.js = "";
this.jsId = "";
this.jscheck = false;
this.unittype = "";
this.reservePlanType = "";
this.toExamine = "";
this.preparelevel = "";
this.integritySort = "";
this.plcheck = false;
this.haveyuan = "";
this.isFollowed = "";
this.planCategory = [];
this.IsNewCompanyData = ''
this.IsNewData = ''
this.companyName = ''
this.js = ''
this.jsId = ''
this.jscheck = false
this.unittype = ''
this.reservePlanType = ''
this.toExamine = ''
this.preparelevel = ''
this.integritySort = ''
this.plcheck = false
this.haveyuan = ''
this.planCategory = []
//重新获取初始化列表
// console.log(this.pageEvent)
this.pageEvent.pageIndex = 0;
this.PageNumber = 1;
this.pageEvent.pageIndex = 0
this.PageNumber = 1
this.templatePlan = false;
this.customPlan = false;
this.templatePlan = false
this.customPlan = false
this.getAllPlanInfo();
}
}

365
src/app/plan-management/meet-plan/meet-plan.component.html

@ -1,201 +1,190 @@
<div style="height: 100%;overflow-y: auto;">
<div class="header">
<form (ngSubmit)="onSubmit(form.value)" #form="ngForm">
<div class="queryBox">
<div class="queryField">
<label style="margin-right: 10px;">预案名称:</label>
<mat-form-field class="example-full-width">
<input matInput placeholder="请输入预案名称" name="companyName" autocomplete="off" [(ngModel)]="unitname">
</mat-form-field>
</div>
<div class="queryField">
<label style="margin-right: 10px;">编制级别:</label>
<mat-form-field>
<mat-select name="preparelevel" placeholder='请选择编制级别' [(ngModel)]="projectlevel">
<!-- <mat-option value="1">总队</mat-option>
<div class="header" >
<form (ngSubmit)="onSubmit(form.value)" #form="ngForm">
<div class="queryBox">
<div class="queryField">
<label style="margin-right: 10px;">预案名称:</label>
<mat-form-field class="example-full-width">
<input matInput placeholder="请输入预案名称" name="companyName" autocomplete="off" [(ngModel)]="unitname">
</mat-form-field>
</div>
<div class="queryField" >
<label style="margin-right: 10px;">编制级别:</label>
<mat-form-field>
<mat-select name="preparelevel" placeholder='请选择编制级别' [(ngModel)]="projectlevel">
<!-- <mat-option value="1">总队</mat-option>
<mat-option value="2">支队</mat-option>
<mat-option value="4">大队</mat-option>
<mat-option value="8">中队</mat-option> -->
<mat-option *ngFor="let item of preparelevels" [value]="item.value">{{item.name}}</mat-option>
</mat-select>
</mat-form-field>
<mat-checkbox style="margin-left: 6px;" [(ngModel)]="plcheck" name="plcheck">包含下级</mat-checkbox>
<span *ngIf="padMore" style="margin-left: 20px; color: #0080FF;" (click)='padInfo()'>更多筛选条件<img
[src]='imgsrcopen' style="width: 10px;height: 6px;margin:0 0 3px 2px;"> </span>
<span *ngIf="padput" style="margin-left: 10px; color: #0080FF;" (click)='padInfo()'>收起<img [src]='imgsrcdown'
style="width: 10px;height: 6px;margin:0 0 3px 2px;"> </span>
<mat-option *ngFor="let item of preparelevels" [value]="item.value">{{item.name}}</mat-option>
</mat-select>
</mat-form-field>
<mat-checkbox style="margin-left: 6px;" [(ngModel)]="plcheck" name="plcheck">包含下级</mat-checkbox>
<span *ngIf="padMore" style="margin-left: 20px; color: #0080FF;" (click)='padInfo()'>更多筛选条件<img [src]='imgsrcopen'style="width: 10px;height: 6px;margin:0 0 3px 2px;"> </span>
<span *ngIf="padput" style="margin-left: 10px; color: #0080FF;" (click)='padInfo()'>收起<img [src]='imgsrcdown'style="width: 10px;height: 6px;margin:0 0 3px 2px;"> </span>
</div>
<div class="queryField" *ngIf="!pcfind">
<button mat-raised-button color="primary">查询</button>
<button mat-raised-button style="margin-left: 25px;" type="button" (click)="reset()">重置</button>
</div>
<div class="queryField" *ngIf="!padMore">
<label style="margin-right: 10px;">预案级别:</label>
<mat-form-field>
<mat-select placeholder='请选择预案级别' name="level" [(ngModel)]="level">
<mat-option value="6">国家级</mat-option>
<mat-option value="7">市级</mat-option>
</mat-select>
</mat-form-field>
</div>
<div class="queryField" *ngIf="!padMore">
<label style="margin-right: 10px;">添加人:</label>
<mat-form-field class="example-full-width">
<input matInput placeholder="请输入添加人" name="addname" autocomplete="off" [(ngModel)]="addname">
</mat-form-field>
<span *ngIf="pcMore" style="margin-left: 15px; color: #0080FF; cursor: pointer;" (click)='pcInfo()'>更多筛选条件<img [src]='imgsrcopen'style="width: 10px;height: 6px;margin:0 0 3px 2px;"> </span>
<span *ngIf="pcput" style="margin-left: 10px; color: #0080FF; cursor: pointer;" (click)='pcInfo()'>收起<img [src]='imgsrcdown'style="width: 10px;height: 6px;margin:0 0 3px 2px;"> </span>
</div>
<div class="queryField" *ngIf="pcfind" >
<button mat-raised-button color="primary">查询</button>
<button mat-raised-button style="margin-left: 25px;" type="button" (click)="reset()">重置</button>
</div>
<div class="queryField" *ngIf="!padMore&&!pcMore">
<label style="margin-right: 10px;">添加时间:</label>
<mat-form-field class="example-full-width">
<input type="date" matInput name="addtime" autocomplete="off" [(ngModel)]="addtime">
</mat-form-field>
<!-- <mat-icon aria-hidden="false" style="position: relative;right: 120px;top: 5px;">arrow forward</mat-icon> -->
<mat-icon *ngIf="padjt" aria-hidden="false" style="position: relative;right: 120px;top: 5px;" id="padshow">arrow forward</mat-icon>
<span style="margin-left: 15px;" id="pcshow" *ngIf="!padMore&&!padjt">🠊</span>
<mat-form-field class="example-full-width" style="margin-left: 10px;">
<input type="date" matInput name="endtime" autocomplete="off" [(ngModel)]="endtime">
</mat-form-field>
</div>
<div class="queryField" *ngIf="!pcfind">
<button mat-raised-button color="primary">查询</button>
<button mat-raised-button style="margin-left: 25px;" type="button" (click)="reset()">重置</button>
</div>
<div class="queryField" *ngIf="!padMore">
<label style="margin-right: 10px;">预案级别:</label>
<mat-form-field>
<mat-select placeholder='请选择预案级别' name="level" [(ngModel)]="level">
<mat-option value="6">国家级</mat-option>
<mat-option value="7">市级</mat-option>
</mat-select>
</mat-form-field>
</div>
<div class="queryField" *ngIf="!padMore">
<label style="margin-right: 10px;">添加人:</label>
<mat-form-field class="example-full-width">
<input matInput placeholder="请输入添加人" name="addname" autocomplete="off" [(ngModel)]="addname">
</mat-form-field>
<span *ngIf="pcMore" style="margin-left: 15px; color: #0080FF; cursor: pointer;" (click)='pcInfo()'>更多筛选条件<img
[src]='imgsrcopen' style="width: 10px;height: 6px;margin:0 0 3px 2px;"> </span>
<span *ngIf="pcput" style="margin-left: 10px; color: #0080FF; cursor: pointer;" (click)='pcInfo()'>收起<img
[src]='imgsrcdown' style="width: 10px;height: 6px;margin:0 0 3px 2px;"> </span>
</div>
<div class="queryField" *ngIf="pcfind">
<button mat-raised-button color="primary">查询</button>
<button mat-raised-button style="margin-left: 25px;" type="button" (click)="reset()">重置</button>
</div>
<div class="queryField" *ngIf="!padMore&&!pcMore">
<label style="margin-right: 10px;">添加时间:</label>
<mat-form-field class="example-full-width">
<input type="date" matInput name="addtime" autocomplete="off" [(ngModel)]="addtime">
</mat-form-field>
<!-- <mat-icon aria-hidden="false" style="position: relative;right: 120px;top: 5px;">arrow forward</mat-icon> -->
<mat-icon *ngIf="padjt" aria-hidden="false" style="position: relative;right: 120px;top: 5px;"
id="padshow">arrow forward</mat-icon>
<span style="margin-left: 15px;" id="pcshow" *ngIf="!padMore&&!padjt">🠊</span>
<mat-form-field class="example-full-width" style="margin-left: 10px;">
<input type="date" matInput name="endtime" autocomplete="off" [(ngModel)]="endtime">
</mat-form-field>
</div>
<div class="queryField" *ngIf="!padMore&&!pcMore">
<label style="margin-right: 10px;">预案类型:</label>
<mat-form-field>
<input matInput placeholder="请输入预案类型" name="reservePlanType" autocomplete="off" [(ngModel)]="typePlan">
</mat-form-field>
</div>
<div class="queryField" *ngIf="!padMore&&!pcMore">
<label style="margin-right: 10px;">审核状态:</label>
<mat-form-field>
<mat-select name="toExamine" placeholder='请选择审核状态' [(ngModel)]="unitstate">
<mat-option value="8">未提交审核</mat-option>
<mat-option value="1">审核中</mat-option>
<mat-option value="2">审核通过</mat-option>
<mat-option value="4">审核退回</mat-option>
</mat-select>
</mat-form-field>
</div>
<div class="queryField" *ngIf="!padMore&&!pcMore">
<input type="radio" style="height: 16px;width: 16px;position: relative;top: 2px;" name="whgx" [value]='true'
[(ngModel)]="IsNewData">
<label style="margin-right: 10px;margin-left: 2px;">新增</label>
<input type="radio" style="height: 16px;width: 16px;position: relative;top: 2px;" name="whgx" [value]='false'
[(ngModel)]="IsNewData">
<label style="margin-right: 10px;margin-left: 2px;">维护更新</label>
</div>
</div>
<!-- <div class="butclass" style="width: 100%;text-align: center;">
<div class="queryField" *ngIf="!padMore&&!pcMore">
<label style="margin-right: 10px;">预案类型:</label>
<mat-form-field>
<input matInput placeholder="请输入预案类型" name="reservePlanType" autocomplete="off" [(ngModel)]="typePlan">
</mat-form-field>
</div>
<div class="queryField" *ngIf="!padMore&&!pcMore">
<label style="margin-right: 10px;">审核状态:</label>
<mat-form-field>
<mat-select name="toExamine" placeholder='请选择审核状态' [(ngModel)]="unitstate">
<mat-option value="8">未提交审核</mat-option>
<mat-option value="1">审核中</mat-option>
<mat-option value="2">审核通过</mat-option>
<mat-option value="4">审核退回</mat-option>
</mat-select>
</mat-form-field>
</div>
<div class="queryField" *ngIf="!padMore&&!pcMore">
<input type="radio" style="height: 16px;width: 16px;position: relative;top: 2px;" name="whgx" [value]='true' [(ngModel)]="IsNewData">
<label style="margin-right: 10px;margin-left: 2px;">新增</label>
<input type="radio" style="height: 16px;width: 16px;position: relative;top: 2px;" name="whgx" [value]='false' [(ngModel)]="IsNewData">
<label style="margin-right: 10px;margin-left: 2px;">维护更新</label>
</div>
</div>
<!-- <div class="butclass" style="width: 100%;text-align: center;">
<button mat-raised-button color="primary" type="submit">查询</button>
<button mat-raised-button style="margin-left: 25px;" type="button" (click)="reset()">重置</button>
</div> -->
</form>
</div>
<!-- <mat-divider></mat-divider> -->
<div class="newadd">
<div>
<button *ngIf="levels=='0'" mat-raised-button color="primary" (click)='addunit()'><img style="margin-bottom: 3px;"
src="../../../assets/images/newadd.png"> 新增</button>
<!-- <button mat-raised-button color="primary" (click)='word("table","ceshi.doc")'></button> -->
</form>
</div>
<div class="progressBox" style="margin-left: 100px;" *ngIf="downloadisLoading">
<!-- <button mat-raised-button style="margin-right: 5px;" (click)="cancelDowload()">取消下载</button> -->
<span title="{{downloadFileName}}" style="font-size: 12px;" class="filename">{{downloadFileName}}</span>
<span style="font-size: 12px;position: absolute;margin-left: 8px;">下载中...</span>
<mat-progress-bar mode="determinate" [value]="downloadProgress" class="progress"></mat-progress-bar>
<!-- <mat-divider></mat-divider> -->
<div class="newadd">
<div>
<button *ngIf="levels=='0'" mat-raised-button color="primary" (click)='addunit()'><img style="margin-bottom: 3px;" src="../../../assets/images/newadd.png"> 新增</button>
<!-- <button mat-raised-button color="primary" (click)='word("table","ceshi.doc")'></button> -->
</div>
<div class="progressBox" style="margin-left: 100px;" *ngIf="downloadisLoading">
<!-- <button mat-raised-button style="margin-right: 5px;" (click)="cancelDowload()">取消下载</button> -->
<span title="{{downloadFileName}}" style="font-size: 12px;" class="filename">{{downloadFileName}}</span>
<span style="font-size: 12px;position: absolute;margin-left: 8px;">下载中...</span>
<mat-progress-bar mode="determinate" [value]="downloadProgress" class="progress"></mat-progress-bar>
</div>
</div>
</div>
<div class="body">
<div class="tablebox" id="table">
<table mat-table [dataSource]="tabledataSource" class="mat-elevation-z8">
<ng-container matColumnDef="state">
<th mat-header-cell *matHeaderCellDef style="width: 8%;">预案状态</th>
<td mat-cell *matCellDef="let element">
<span class="add" *ngIf="element.isNewData">新增</span>
<span class="weihu" *ngIf="!element.isNewData">维护更新</span>
</td>
</ng-container>
<ng-container matColumnDef="unitname">
<th mat-header-cell *matHeaderCellDef style="width: 8%;">预案名称</th>
<td mat-cell *matCellDef="let element">{{element.name}}</td>
</ng-container>
<ng-container matColumnDef="level">
<th mat-header-cell *matHeaderCellDef style="width: 8%;">预案级别</th>
<td mat-cell *matCellDef="let element">{{element.planCategory=='6'?'国家级':'市级'}}</td>
</ng-container>
<ng-container matColumnDef="addname">
<th mat-header-cell *matHeaderCellDef style="width: 8%;">添加人</th>
<td mat-cell *matCellDef="let element">{{element.creatorName}}</td>
</ng-container>
<ng-container matColumnDef="addtime">
<th mat-header-cell *matHeaderCellDef style="width: 8%;">添加时间</th>
<td mat-cell *matCellDef="let element">{{element.creationTime|date:'yyyy-MM-dd'}}</td>
</ng-container>
<ng-container matColumnDef="plantype">
<th mat-header-cell *matHeaderCellDef style="width: 8%;">预案类型</th>
<td mat-cell *matCellDef="let element">{{element.disasterType}}</td>
</ng-container>
<ng-container matColumnDef="passstate">
<th mat-header-cell *matHeaderCellDef style="width: 8%;">新增审核</th>
<td mat-cell *matCellDef="let element">
{{element.newVerifyState}}
<!-- {{element.auditStatus=='8'?'未提交审核':element.auditStatus=='1'?'审核中':element.auditStatus=='2'?'审核通过':element.auditStatus=='4'?
<div class="body">
<div class="tablebox" id="table">
<table mat-table [dataSource]="tabledataSource" class="mat-elevation-z8">
<ng-container matColumnDef="state">
<th mat-header-cell *matHeaderCellDef style="width: 8%;">预案状态</th>
<td mat-cell *matCellDef="let element">
<span class="add" *ngIf="element.isNewData">新增</span>
<span class="weihu" *ngIf="!element.isNewData">维护更新</span>
</td>
</ng-container>
<ng-container matColumnDef="unitname">
<th mat-header-cell *matHeaderCellDef style="width: 8%;">预案名称</th>
<td mat-cell *matCellDef="let element">{{element.name}}</td>
</ng-container>
<ng-container matColumnDef="level">
<th mat-header-cell *matHeaderCellDef style="width: 8%;">预案级别</th>
<td mat-cell *matCellDef="let element">{{element.planCategory=='6'?'国家级':'市级'}}</td>
</ng-container>
<ng-container matColumnDef="addname">
<th mat-header-cell *matHeaderCellDef style="width: 8%;">添加人</th>
<td mat-cell *matCellDef="let element">{{element.creatorName}}</td>
</ng-container>
<ng-container matColumnDef="addtime">
<th mat-header-cell *matHeaderCellDef style="width: 8%;">添加时间</th>
<td mat-cell *matCellDef="let element">{{element.creationTime|date:'yyyy-MM-dd'}}</td>
</ng-container>
<ng-container matColumnDef="plantype">
<th mat-header-cell *matHeaderCellDef style="width: 8%;">预案类型</th>
<td mat-cell *matCellDef="let element">{{element.disasterType}}</td>
</ng-container>
<ng-container matColumnDef="passstate">
<th mat-header-cell *matHeaderCellDef style="width: 8%;">新增审核</th>
<td mat-cell *matCellDef="let element">
{{element.newVerifyState}}
<!-- {{element.auditStatus=='8'?'未提交审核':element.auditStatus=='1'?'审核中':element.auditStatus=='2'?'审核通过':element.auditStatus=='4'?
'审核退回':element.auditStatus=='16'?'初审通过':'初审驳回'}} -->
</td>
</ng-container>
<ng-container matColumnDef="isopen">
<th mat-header-cell *matHeaderCellDef style="width: 8%;">是否公开</th>
<td mat-cell *matCellDef="let element">{{element.openRange}}</td>
</ng-container>
<ng-container matColumnDef="projectlevel">
<th mat-header-cell *matHeaderCellDef style="width: 8%;">编制级别</th>
<td mat-cell *matCellDef="let element">
{{element.planLevel=='1'?'总队':element.planLevel=='2'?'支队':element.planLevel=='4'?'大队':'中队'}}</td>
</ng-container>
<ng-container matColumnDef="auditstate">
<th mat-header-cell *matHeaderCellDef style="width: 8%;">审核状态</th>
<td mat-cell *matCellDef="let element">
{{element.auditStatus | auditState}}
</td>
</ng-container>
<ng-container matColumnDef="operation">
<th mat-header-cell *matHeaderCellDef style="width: 20%;">操作</th>
<td mat-cell *matCellDef="let element" style="white-space: nowrap;cursor: pointer;">
<span style="color: blue;" (click)='openPlan(element)'>查看预案</span>
<span style="color: blue;margin-left: 4px;" (click)="submitAudit(element)"
*ngIf="(element.isNewData && element.newVerifyState=='未提交审核')||(!element.isNewData&&(element.maintenanceVerifyState=='审核通过'||element.maintenanceVerifyState=='未提交审核'))">提交审核</span>
<span style="color: blue;margin-left: 4px;" (click)="cancelAudit(element)"
*ngIf="element.auditStatus == 1||element.auditStatus == 16">撤销审核</span>
<span style="color: blue;margin-left: 4px;" (click)="auditResult(element)">审批结果</span>
<span style="color: blue;margin-left: 4px;" (click)='readFile(element)'>下载</span>
<span style="color: red;margin-left: 4px" (click)='deletePlan(element.id)'> 删除</span>
</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
</table>
<mat-paginator pageEvent [length]="length" [pageSize]="pageSize" [pageSizeOptions]="pageSizeOptions"
(page)="changePage($event)">
</mat-paginator>
</td>
</ng-container>
<ng-container matColumnDef="isopen">
<th mat-header-cell *matHeaderCellDef style="width: 8%;">是否公开</th>
<td mat-cell *matCellDef="let element">{{element.openRange}}</td>
</ng-container>
<ng-container matColumnDef="projectlevel">
<th mat-header-cell *matHeaderCellDef style="width: 8%;">编制级别</th>
<td mat-cell *matCellDef="let element">{{element.planLevel=='1'?'总队':element.planLevel=='2'?'支队':element.planLevel=='4'?'大队':'中队'}}</td>
</ng-container>
<ng-container matColumnDef="weihustate">
<th mat-header-cell *matHeaderCellDef style="width: 8%;">维护审核</th>
<td mat-cell *matCellDef="let element">{{element.maintenanceVerifyState}}</td>
</ng-container>
<ng-container matColumnDef="operation">
<th mat-header-cell *matHeaderCellDef style="width: 20%;">操作</th>
<td mat-cell *matCellDef="let element" style="white-space: nowrap;cursor: pointer;">
<span style="color: blue;" (click)='openPlan(element)'>查看预案</span>
<span style="color: blue;margin-left: 4px;" (click)="submitAudit(element)" *ngIf="(element.isNewData && element.newVerifyState=='未提交审核')||(!element.isNewData&&(element.maintenanceVerifyState=='审核通过'||element.maintenanceVerifyState=='未提交审核'))">提交审核</span>
<span style="color: blue;margin-left: 4px;" (click)="cancelAudit(element)" *ngIf="element.auditStatus == 1||element.auditStatus == 16">撤销审核</span>
<span style="color: blue;margin-left: 4px;" (click)="auditResult(element)">审批结果</span>
<span style="color: blue;margin-left: 4px;" (click)='readFile(element)'>下载</span>
<span style="color: red;margin-left: 4px" (click)='deletePlan(element.id)' *ngIf="element.auditStatus == 8"> 删除</span>
</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
</table>
<mat-paginator pageEvent [length]="length"
[pageSize]="pageSize"
[pageSizeOptions]="pageSizeOptions"
(page)="changePage($event)">
</mat-paginator>
</div>
</div>
</div>
</div>
</div>

60
src/app/plan-management/meet-plan/meet-plan.component.ts

@ -83,8 +83,8 @@ export class MeetPlanComponent implements OnInit {
preparelevels: any
plcheck: boolean //编制级别勾选框
IsNewData = '' //维护更新活新增
displayedColumns: string[] = ['state', 'unitname', 'level', 'addname', 'addtime', 'plantype', 'isopen', 'projectlevel', 'passstate', 'auditstate', 'operation'];
IsNewData='' //维护更新活新增
displayedColumns: string[] = ['state','unitname', 'level', 'addname', 'addtime', 'plantype', 'isopen', 'projectlevel','passstate','weihustate', 'operation'];
tabledataSource
typePlan//新预案类型
unitname//预案名称
@ -142,7 +142,7 @@ export class MeetPlanComponent implements OnInit {
HasChildrenPlanLevel: this.plcheck || '',
PageNumber: this.PageNumber || '1',
PageSize: this.pageSizeOptions[0],
IsNewData: this.IsNewData,
IsNewData:this.IsNewData,
}
this.http.get("/api/PlanComponentsMajor", { params: paramsdata }).subscribe((data: any) => {
this.length = data.totalCount
@ -166,29 +166,29 @@ export class MeetPlanComponent implements OnInit {
this.PageNumber = 1
this.pageEvent.pageIndex = 0
let reservePlanType
this.reservePlanType ? reservePlanType = JSON.parse(JSON.stringify(this.reservePlanType)) : reservePlanType = ''
if (this.reservePlanType && this.reservePlanType.length != 0) {
reservePlanType = eval(this.reservePlanType.join("|"))
}
let paramsdata: any = {
Name: this.unitname || '',
planCategories: this.level || [6, 7],
//PlanType:reservePlanType||'',
DisasterType: this.typePlan || '',
CreatorName: this.addname || '',
AuditStatus: this.unitstate || '',
CreationTimeRangeStart: this.addtime || '',
CreationTimeRangeEnd: this.endtime || '',
PlanLevel: this.projectlevel || '',
HasChildrenPlanLevel: this.plcheck || '',
PageNumber: this.PageNumber || '1',
PageSize: this.pageSizeOptions[0],
IsNewData: this.IsNewData,
}
this.http.get("/api/PlanComponentsMajor", { params: paramsdata }).subscribe((data: any) => {
this.length = data.totalCount
this.tabledataSource = data.items
})
this.reservePlanType ? reservePlanType = JSON.parse(JSON.stringify(this.reservePlanType)) : reservePlanType = ''
if (this.reservePlanType && this.reservePlanType.length != 0) {
reservePlanType = eval(this.reservePlanType.join("|"))
}
let paramsdata: any = {
Name: this.unitname || '',
planCategories: this.level || [6, 7],
//PlanType:reservePlanType||'',
DisasterType: this.typePlan || '',
CreatorName: this.addname || '',
AuditStatus: this.unitstate || '',
CreationTimeRangeStart: this.addtime || '',
CreationTimeRangeEnd: this.endtime || '',
PlanLevel: this.projectlevel || '',
HasChildrenPlanLevel: this.plcheck || '',
PageNumber: this.PageNumber || '1',
PageSize: this.pageSizeOptions[0],
IsNewData:this.IsNewData,
}
this.http.get("/api/PlanComponentsMajor", { params: paramsdata }).subscribe((data: any) => {
this.length = data.totalCount
this.tabledataSource = data.items
})
}
}
@ -215,9 +215,9 @@ export class MeetPlanComponent implements OnInit {
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
if (element.auditStatus == 4 || element.auditStatus == 32) {
this.snackBar.open('审核退回的预案需要修改后方可再次提交审核!', '确定', config);
}
/* if(element.auditStatus == 4){
this.snackBar.open('审核退回的预案需要修改后方可再次提交审核!','确定',config);
} */
this.http.put(`/api/PlanComponentsMajor/${element.id}/Commit`, "").subscribe(data => {
this.getAlltabledate()
}, err => {
@ -369,7 +369,7 @@ export class MeetPlanComponent implements OnInit {
this.unitstate = ''
this.projectlevel = ''
this.plcheck = false
this.IsNewData = ''
this.IsNewData=''
this.getAlltabledate()
}
//新增预案弹窗

331
src/app/plan-management/onetwo-entry-plan/onetwo-entry-plan.component.html

@ -7,177 +7,172 @@
* @LastEditTime: 2021-07-24 16:59:38
-->
<div style="height: 100%;overflow-y: auto;">
<div class="header">
<form (ngSubmit)="onSubmit(form.value)" #form="ngForm">
<div class="queryBox">
<div class="queryField">
<label style="margin-right: 10px;">预案名称:</label>
<mat-form-field class="example-full-width">
<input matInput placeholder="请输入预案名称" name="companyName" autocomplete="off" [(ngModel)]="unitname">
</mat-form-field>
</div>
<div class="queryField">
<label style="margin-right: 10px;">编制级别:</label>
<mat-form-field>
<mat-select name="preparelevel" placeholder='请选择编制级别' [(ngModel)]="projectlevel">
<!-- <mat-option value="1">总队</mat-option>
<div class="header" >
<form (ngSubmit)="onSubmit(form.value)" #form="ngForm">
<div class="queryBox">
<div class="queryField">
<label style="margin-right: 10px;">预案名称:</label>
<mat-form-field class="example-full-width">
<input matInput placeholder="请输入预案名称" name="companyName" autocomplete="off" [(ngModel)]="unitname">
</mat-form-field>
</div>
<div class="queryField" >
<label style="margin-right: 10px;">编制级别:</label>
<mat-form-field>
<mat-select name="preparelevel" placeholder='请选择编制级别' [(ngModel)]="projectlevel">
<!-- <mat-option value="1">总队</mat-option>
<mat-option value="2">支队</mat-option>
<mat-option value="4">大队</mat-option>
<mat-option value="8">中队</mat-option> -->
<mat-option *ngFor="let item of preparelevels" [value]="item.value">{{item.name}}</mat-option>
</mat-select>
</mat-form-field>
<mat-checkbox style="margin-left: 6px;" [(ngModel)]="plcheck" name="plcheck">包含下级</mat-checkbox>
<span *ngIf="padMore" style="margin-left: 10px; color: #0080FF;" (click)='padInfo()'>更多筛选条件<img
[src]='imgsrcopen' style="width: 10px;height: 6px;margin:0 0 3px 2px;"> </span>
<span *ngIf="padput" style="margin-left: 10px; color: #0080FF;" (click)='padInfo()'>收起<img [src]='imgsrcdown'
style="width: 10px;height: 6px;margin:0 0 3px 2px;"> </span>
</div>
<div class="queryField" *ngIf="!pcfind">
<button mat-raised-button color="primary">查询</button>
<button mat-raised-button style="margin-left: 25px;" type="button" (click)="reset()">重置</button>
</div>
<div class="queryField" *ngIf="!padMore">
<label style="margin-right: 10px;">添加人:</label>
<mat-form-field class="example-full-width">
<input matInput placeholder="请输入添加人" name="addname" autocomplete="off" [(ngModel)]="addname">
</mat-form-field>
</div>
<div class="queryField" *ngIf="!padMore">
<label style="margin-right: 10px;">预案类型:</label>
<mat-form-field>
<input matInput placeholder="请输入预案类型" name="reservePlanType" autocomplete="off" [(ngModel)]="typePlan">
</mat-form-field>
<span *ngIf="pcMore" style="margin-left: 15px; color: #0080FF; cursor: pointer;" (click)='pcInfo()'>更多筛选条件<img
[src]='imgsrcopen' style="width: 10px;height: 6px;margin:0 0 3px 2px;"> </span>
<span *ngIf="pcput" style="margin-left: 10px; color: #0080FF; cursor: pointer;" (click)='pcInfo()'>收起<img
[src]='imgsrcdown' style="width: 10px;height: 6px;margin:0 0 3px 2px;"> </span>
</div>
<div class="queryField" *ngIf="pcfind">
<button mat-raised-button color="primary">查询</button>
<button mat-raised-button style="margin-left: 25px;" type="button" (click)="reset()">重置</button>
</div>
<div class="queryField" *ngIf="!padMore&&!pcMore">
<label style="margin-right: 10px;">添加时间:</label>
<mat-form-field class="example-full-width">
<input type="date" matInput name="addtime" autocomplete="off" [(ngModel)]="addtime">
</mat-form-field>
<!-- <mat-icon aria-hidden="false" style="position: relative;right: 120px;top: 5px;">arrow forward</mat-icon> -->
<mat-icon *ngIf="padjt" aria-hidden="false" style="position: relative;right: 120px;top: 5px;"
id="padshow">arrow forward</mat-icon>
<span style="margin-left: 15px;" id="pcshow" *ngIf="!padMore&&!padjt">🠊</span>
<mat-form-field class="example-full-width" style="margin-left: 10px;">
<input type="date" matInput name="endtime" autocomplete="off" [(ngModel)]="endtime">
</mat-form-field>
</div>
<div class="queryField" *ngIf="!padMore&&!pcMore">
<label style="margin-right: 10px;">审核状态:</label>
<mat-form-field>
<mat-select name="toExamine" placeholder='请选择审核状态' [(ngModel)]="unitstate">
<mat-option value="8">未提交审核</mat-option>
<mat-option value="1">审核中</mat-option>
<mat-option value="2">审核通过</mat-option>
<mat-option value="4">审核退回</mat-option>
</mat-select>
</mat-form-field>
</div>
<div class="queryField" *ngIf="!padMore&&!pcMore">
<input type="radio" style="height: 16px;width: 16px;position: relative;top: 2px;" name="whgx" [value]='true'
[(ngModel)]="IsNewData">
<label style="margin-right: 10px;margin-left: 2px;">新增</label>
<input type="radio" style="height: 16px;width: 16px;position: relative;top: 2px;" name="whgx" [value]='false'
[(ngModel)]="IsNewData">
<label style="margin-right: 10px;margin-left: 2px;">维护更新</label>
</div>
</div>
</form>
</div>
<!-- <mat-divider></mat-divider> -->
<div class="newadd">
<div>
<button *ngIf="levels=='0'||levels=='1'" mat-raised-button color="primary" (click)="addunit()"><img
style="margin-bottom: 3px;" src="../../../assets/images/newadd.png"> 新增</button>
<mat-option *ngFor="let item of preparelevels" [value]="item.value">{{item.name}}</mat-option>
</mat-select>
</mat-form-field>
<mat-checkbox style="margin-left: 6px;" [(ngModel)]="plcheck" name="plcheck">包含下级</mat-checkbox>
<span *ngIf="padMore" style="margin-left: 10px; color: #0080FF;" (click)='padInfo()'>更多筛选条件<img [src]='imgsrcopen'style="width: 10px;height: 6px;margin:0 0 3px 2px;"> </span>
<span *ngIf="padput" style="margin-left: 10px; color: #0080FF;" (click)='padInfo()'>收起<img [src]='imgsrcdown'style="width: 10px;height: 6px;margin:0 0 3px 2px;"> </span>
</div>
<div class="queryField" *ngIf="!pcfind">
<button mat-raised-button color="primary">查询</button>
<button mat-raised-button style="margin-left: 25px;" type="button" (click)="reset()">重置</button>
</div>
<div class="queryField" *ngIf="!padMore">
<label style="margin-right: 10px;">添加人:</label>
<mat-form-field class="example-full-width">
<input matInput placeholder="请输入添加人" name="addname" autocomplete="off" [(ngModel)]="addname">
</mat-form-field>
</div>
<div class="queryField" *ngIf="!padMore">
<label style="margin-right: 10px;">预案类型:</label>
<mat-form-field>
<input matInput placeholder="请输入预案类型" name="reservePlanType" autocomplete="off" [(ngModel)]="typePlan">
</mat-form-field>
<span *ngIf="pcMore" style="margin-left: 15px; color: #0080FF; cursor: pointer;" (click)='pcInfo()'>更多筛选条件<img [src]='imgsrcopen'style="width: 10px;height: 6px;margin:0 0 3px 2px;"> </span>
<span *ngIf="pcput" style="margin-left: 10px; color: #0080FF; cursor: pointer;" (click)='pcInfo()'>收起<img [src]='imgsrcdown'style="width: 10px;height: 6px;margin:0 0 3px 2px;"> </span>
</div>
<div class="queryField" *ngIf="pcfind" >
<button mat-raised-button color="primary">查询</button>
<button mat-raised-button style="margin-left: 25px;" type="button" (click)="reset()">重置</button>
</div>
<div class="queryField" *ngIf="!padMore&&!pcMore">
<label style="margin-right: 10px;">添加时间:</label>
<mat-form-field class="example-full-width">
<input type="date" matInput name="addtime" autocomplete="off" [(ngModel)]="addtime">
</mat-form-field>
<!-- <mat-icon aria-hidden="false" style="position: relative;right: 120px;top: 5px;">arrow forward</mat-icon> -->
<mat-icon *ngIf="padjt" aria-hidden="false" style="position: relative;right: 120px;top: 5px;" id="padshow">arrow forward</mat-icon>
<span style="margin-left: 15px;" id="pcshow" *ngIf="!padMore&&!padjt">🠊</span>
<mat-form-field class="example-full-width" style="margin-left: 10px;">
<input type="date" matInput name="endtime" autocomplete="off" [(ngModel)]="endtime">
</mat-form-field>
</div>
<div class="queryField" *ngIf="!padMore&&!pcMore">
<label style="margin-right: 10px;">审核状态:</label>
<mat-form-field>
<mat-select name="toExamine" placeholder='请选择审核状态' [(ngModel)]="unitstate">
<mat-option value="8">未提交审核</mat-option>
<mat-option value="1">审核中</mat-option>
<mat-option value="2">审核通过</mat-option>
<mat-option value="4">审核退回</mat-option>
</mat-select>
</mat-form-field>
</div>
<div class="queryField" *ngIf="!padMore&&!pcMore">
<input type="radio" style="height: 16px;width: 16px;position: relative;top: 2px;" name="whgx" [value]='true' [(ngModel)]="IsNewData">
<label style="margin-right: 10px;margin-left: 2px;">新增</label>
<input type="radio" style="height: 16px;width: 16px;position: relative;top: 2px;" name="whgx" [value]='false' [(ngModel)]="IsNewData">
<label style="margin-right: 10px;margin-left: 2px;">维护更新</label>
</div>
</div>
</form>
</div>
<div class="progressBox" style="margin-left: 100px;" *ngIf="downloadisLoading">
<!-- <button mat-raised-button style="margin-right: 5px;" (click)="cancelDowload()">取消下载</button> -->
<span title="{{downloadFileName}}" style="font-size: 12px;" class="filename">{{downloadFileName}}</span>
<span style="font-size: 12px;position: absolute;margin-left: 8px;">下载中...</span>
<mat-progress-bar mode="determinate" [value]="downloadProgress" class="progress"></mat-progress-bar>
<!-- <mat-divider></mat-divider> -->
<div class="newadd">
<div>
<button *ngIf="levels=='0'||levels=='1'" mat-raised-button color="primary" (click)="addunit()"><img style="margin-bottom: 3px;" src="../../../assets/images/newadd.png"> 新增</button>
</div>
<div class="progressBox" style="margin-left: 100px;" *ngIf="downloadisLoading">
<!-- <button mat-raised-button style="margin-right: 5px;" (click)="cancelDowload()">取消下载</button> -->
<span title="{{downloadFileName}}" style="font-size: 12px;" class="filename">{{downloadFileName}}</span>
<span style="font-size: 12px;position: absolute;margin-left: 8px;">下载中...</span>
<mat-progress-bar mode="determinate" [value]="downloadProgress" class="progress"></mat-progress-bar>
</div>
</div>
</div>
<div class="body">
<div class="tablebox">
<table mat-table [dataSource]="tabledataSource" class="mat-elevation-z8">
<ng-container matColumnDef="state">
<th mat-header-cell *matHeaderCellDef style="width: 8%;">预案状态</th>
<td mat-cell *matCellDef="let element">
<span class="add" *ngIf="element.isNewData">新增</span>
<span class="weihu" *ngIf="!element.isNewData">维护更新</span>
</td>
</ng-container>
<ng-container matColumnDef="unitname">
<th mat-header-cell *matHeaderCellDef style="width: 8%;">预案名称</th>
<td mat-cell *matCellDef="let element">{{element.name}}</td>
</ng-container>
<ng-container matColumnDef="level">
<th mat-header-cell *matHeaderCellDef style="width: 8%;">预案级别</th>
<td mat-cell *matCellDef="let element">{{url=='2'?'Ⅱ级':'Ⅰ级'}}</td>
</ng-container>
<ng-container matColumnDef="addname">
<th mat-header-cell *matHeaderCellDef style="width: 8%;">添加人</th>
<td mat-cell *matCellDef="let element">{{element.creatorName}}</td>
</ng-container>
<ng-container matColumnDef="addtime">
<th mat-header-cell *matHeaderCellDef style="width: 8%;">添加时间</th>
<td mat-cell *matCellDef="let element">{{element.creationTime|date:'yyyy-MM-dd'}}</td>
</ng-container>
<ng-container matColumnDef="plantype">
<th mat-header-cell *matHeaderCellDef style="width: 8%;">预案类型</th>
<td mat-cell *matCellDef="let element">{{element.disasterType}}</td>
</ng-container>
<ng-container matColumnDef="passstate">
<th mat-header-cell *matHeaderCellDef style="width: 8%;">审核状态</th>
<td mat-cell *matCellDef="let element"> {{element.auditStatus | auditState}}</td>
</ng-container>
<ng-container matColumnDef="isopen">
<th mat-header-cell *matHeaderCellDef style="width: 8%;">是否公开</th>
<td mat-cell *matCellDef="let element">{{element.openRange}}</td>
</ng-container>
<ng-container matColumnDef="projectlevel">
<th mat-header-cell *matHeaderCellDef style="width: 8%;">编制级别</th>
<td mat-cell *matCellDef="let element">
{{element.planLevel=='1'?'总队':element.planLevel=='2'?'支队':element.planLevel=='4'?'大队':'中队'}}</td>
</ng-container>
<ng-container matColumnDef="operation">
<th mat-header-cell *matHeaderCellDef style="width: 20%;">操作</th>
<td mat-cell *matCellDef="let element" style="white-space: nowrap;cursor: pointer;">
<span style="color: blue;" (click)='openPlan(element)'>查看预案</span>
<span style="color: blue;margin-left: 4px;" (click)="submitAudit(element)"
*ngIf="(element.isNewData && element.newVerifyState=='未提交审核')||(!element.isNewData&&(element.maintenanceVerifyState=='审核通过'||element.maintenanceVerifyState=='未提交审核'))">提交审核</span>
<span style="color: blue;margin-left: 4px;" (click)="cancelAudit(element)"
*ngIf="element.auditStatus == 1||element.auditStatus == 16">撤销审核</span>
<span style="color: blue;margin-left: 4px;" (click)="auditResult(element)">审批结果</span>
<!-- <span style="color: blue;margin-left: 4px;" *ngIf="element.auditStatus == 2">审核通过</span> -->
<span style="color: blue;margin-left: 4px;" (click)='readFile(element)'>下载</span>
<span style="color: red;margin-left: 4px" (click)='deletePlan(element.id)'> 删除</span>
</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
</table>
<mat-paginator pageEvent [length]="length" [pageSize]="pageSize" [pageSizeOptions]="pageSizeOptions"
(page)="changePage($event)">
</mat-paginator>
<div class="body">
<div class="tablebox">
<table mat-table [dataSource]="tabledataSource" class="mat-elevation-z8">
<ng-container matColumnDef="state">
<th mat-header-cell *matHeaderCellDef style="width: 8%;">预案状态</th>
<td mat-cell *matCellDef="let element">
<span class="add" *ngIf="element.isNewData">新增</span>
<span class="weihu" *ngIf="!element.isNewData">维护更新</span>
</td>
</ng-container>
<ng-container matColumnDef="unitname">
<th mat-header-cell *matHeaderCellDef style="width: 8%;">预案名称</th>
<td mat-cell *matCellDef="let element">{{element.name}}</td>
</ng-container>
<ng-container matColumnDef="level">
<th mat-header-cell *matHeaderCellDef style="width: 8%;">预案级别</th>
<td mat-cell *matCellDef="let element">{{url=='2'?'Ⅱ级':'Ⅰ级'}}</td>
</ng-container>
<ng-container matColumnDef="addname">
<th mat-header-cell *matHeaderCellDef style="width: 8%;">添加人</th>
<td mat-cell *matCellDef="let element">{{element.creatorName}}</td>
</ng-container>
<ng-container matColumnDef="addtime">
<th mat-header-cell *matHeaderCellDef style="width: 8%;">添加时间</th>
<td mat-cell *matCellDef="let element">{{element.creationTime|date:'yyyy-MM-dd'}}</td>
</ng-container>
<ng-container matColumnDef="plantype">
<th mat-header-cell *matHeaderCellDef style="width: 8%;">预案类型</th>
<td mat-cell *matCellDef="let element">{{element.disasterType}}</td>
</ng-container>
<ng-container matColumnDef="passstate">
<th mat-header-cell *matHeaderCellDef style="width: 8%;">新增审核</th>
<td mat-cell *matCellDef="let element">{{element.newVerifyState}}</td>
</ng-container>
<ng-container matColumnDef="weihustate">
<th mat-header-cell *matHeaderCellDef style="width: 8%;">维护审核</th>
<td mat-cell *matCellDef="let element">{{element.maintenanceVerifyState}}</td>
</ng-container>
<ng-container matColumnDef="isopen">
<th mat-header-cell *matHeaderCellDef style="width: 8%;">是否公开</th>
<td mat-cell *matCellDef="let element">{{element.openRange}}</td>
</ng-container>
<ng-container matColumnDef="projectlevel">
<th mat-header-cell *matHeaderCellDef style="width: 8%;">编制级别</th>
<td mat-cell *matCellDef="let element">{{element.planLevel=='1'?'总队':element.planLevel=='2'?'支队':element.planLevel=='4'?'大队':'中队'}}</td>
</ng-container>
<ng-container matColumnDef="operation">
<th mat-header-cell *matHeaderCellDef style="width: 20%;">操作</th>
<td mat-cell *matCellDef="let element" style="white-space: nowrap;cursor: pointer;">
<span style="color: blue;" (click)='openPlan(element)'>查看预案</span>
<span style="color: blue;margin-left: 4px;" (click)="submitAudit(element)" *ngIf="(element.isNewData && element.newVerifyState=='未提交审核')||(!element.isNewData&&(element.maintenanceVerifyState=='审核通过'||element.maintenanceVerifyState=='未提交审核'))">提交审核</span>
<span style="color: blue;margin-left: 4px;" (click)="cancelAudit(element)" *ngIf="element.auditStatus == 1||element.auditStatus == 16">撤销审核</span>
<span style="color: blue;margin-left: 4px;" (click)="auditResult(element)">审批结果</span>
<!-- <span style="color: blue;margin-left: 4px;" *ngIf="element.auditStatus == 2">审核通过</span> -->
<span style="color: blue;margin-left: 4px;" (click)='readFile(element)'>下载</span>
<span style="color: red;margin-left: 4px" (click)='deletePlan(element.id)' *ngIf="element.auditStatus == 8"> 删除</span>
</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
</table>
<mat-paginator pageEvent [length]="length"
[pageSize]="pageSize"
[pageSizeOptions]="pageSizeOptions"
(page)="changePage($event)">
</mat-paginator>
</div>
</div>
</div>
</div>
</div>

948
src/app/plan-management/onetwo-entry-plan/onetwo-entry-plan.component.ts

File diff suppressed because it is too large Load Diff

19
src/app/plan-management/open-plan/open-plan.component.html

@ -66,14 +66,14 @@
</mat-select>
</mat-form-field>
</div>
<div class="queryField" *ngIf="!padMore">
<!-- <div class="queryField" *ngIf="!padMore">
<mat-checkbox (ngModelChange)="templatePlanChange($event,1)" [(ngModel)]="templatePlan" name="templatePlan">
模板录入预案</mat-checkbox>
</div>
<div class="queryField" *ngIf="!padMore">
<mat-checkbox (ngModelChange)="templatePlanChange($event,2)" [(ngModel)]="customPlan" name="customPlan">自定义预案
</mat-checkbox>
</div>
</div> -->
<div class="queryField" *ngIf="pcfind">
<button mat-raised-button color="primary">查询</button>
<button mat-raised-button style="margin-left: 25px;" type="button" (click)="reset()">重置</button>
@ -122,14 +122,15 @@
margin: 3px 0 0 3px;" src="../../../assets/images/custom.png" alt="">
</td>
</ng-container>
<ng-container matColumnDef="auditstate">
<th mat-header-cell *matHeaderCellDef>审核状态</th>
<td mat-cell *matCellDef="let element">
{{element.auditStatus | auditState}}
</td>
<ng-container matColumnDef="auditStatus">
<th mat-header-cell *matHeaderCellDef>新增审核</th>
<td mat-cell *matCellDef="let element">{{element.newVerifyState}}</td>
</ng-container>
<ng-container matColumnDef="weihuStatus">
<th mat-header-cell *matHeaderCellDef>维护审核</th>
<td mat-cell *matCellDef="let element">{{element.maintenanceVerifyState}}</td>
</ng-container>
<ng-container matColumnDef="openRange">
<th mat-header-cell *matHeaderCellDef>是否公开</th>
<td mat-cell *matCellDef="let element">{{element.openRange}}</td>

439
src/app/plan-management/open-plan/open-plan.component.ts

@ -1,63 +1,38 @@
import { Component, OnInit, ViewChild, Inject } from "@angular/core";
import { HttpClient } from "@angular/common/http";
import {
MatTreeFlatDataSource,
MatTreeFlattener,
} from "@angular/material/tree";
import { MatPaginator } from "@angular/material/paginator";
import { FlatTreeControl } from "@angular/cdk/tree";
import { FormControl } from "@angular/forms";
import { Router, ActivatedRoute } from "@angular/router";
import { PageEvent } from "@angular/material/paginator";
import {
MatDialogRef,
MatDialog,
MAT_DIALOG_DATA,
} from "@angular/material/dialog";
import { MatSnackBar, MatSnackBarConfig } from "@angular/material/snack-bar";
import { TreeService } from "../../http-interceptors/tree.service";
import { Viewer } from "photo-sphere-viewer";
import {
ImgDetails,
PsViewer,
} from "../entry-plan-look/entry-plan-look.component";
declare var CryptoJS;
import { Component, OnInit, ViewChild, Inject } from '@angular/core';
import { HttpClient } from '@angular/common/http'
import { MatTreeFlatDataSource, MatTreeFlattener } from '@angular/material/tree';
import { MatPaginator } from '@angular/material/paginator';
import { FlatTreeControl } from '@angular/cdk/tree';
import { FormControl } from '@angular/forms';
import { Router, ActivatedRoute } from '@angular/router'
import { PageEvent } from '@angular/material/paginator';
import { MatDialogRef, MatDialog, MAT_DIALOG_DATA } from '@angular/material/dialog';
import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar';
import { TreeService } from '../../http-interceptors/tree.service'
import { Viewer } from 'photo-sphere-viewer';
import { ImgDetails, PsViewer } from '../entry-plan-look/entry-plan-look.component';
declare var CryptoJS
@Component({
selector: "app-open-plan",
templateUrl: "./open-plan.component.html",
styleUrls: ["./open-plan.component.scss"],
selector: 'app-open-plan',
templateUrl: './open-plan.component.html',
styleUrls: ['./open-plan.component.scss']
})
export class OpenPlanComponent implements OnInit {
constructor(
private http: HttpClient,
private router: Router,
private route: ActivatedRoute,
private tree: TreeService,
public dialog: MatDialog,
public snackBar: MatSnackBar
) {}
private _transformer = (node, level: number) => {
//初始化tree
constructor(private http: HttpClient, private router: Router, private route: ActivatedRoute, private tree: TreeService, public dialog: MatDialog, public snackBar: MatSnackBar) { }
private _transformer = (node, level: number) => { //初始化tree
return {
expandable: !!node.children && node.children.length > 0,
name: node.name,
level: level,
id: node.id,
parentId: node.parentId,
children: node.children,
children: node.children
};
};
treeControl = new FlatTreeControl<any>(
(node) => node.level,
(node) => node.expandable
);
treeFlattener = new MatTreeFlattener(
this._transformer,
(node) => node.level,
(node) => node.expandable,
(node) => node.children
);
}
treeControl = new FlatTreeControl<any>(node => node.level, node => node.expandable);
treeFlattener = new MatTreeFlattener(this._transformer, node => node.level, node => node.expandable, node => node.children);
dataSource = new MatTreeFlatDataSource(this.treeControl, this.treeFlattener);
myControl = new FormControl();
hasChild = (_: number, node: any) => node.expandable;
@ -67,342 +42,306 @@ export class OpenPlanComponent implements OnInit {
paginator: MatPaginator;
length: any; //共多少条数据
pageSize: any; //每页条数
pageSizeOptions: number[] = [10]; //设置每页条数
pageSizeOptions: number[] = [10] //设置每页条数
PageNumber: any; //第几页
IsNewData = ""; //维护更新活新增
IsNewData = '' //维护更新活新增
displayedColumns: string[] = [
"state",
"unitname",
"planname",
"addpeople",
"addtime",
"plantype",
"auditstate",
"openRange",
"projectlevel",
"operation",
];
displayedColumns: string[] = ['state', 'unitname', 'planname', 'addpeople', 'addtime', 'plantype', 'auditStatus', 'weihuStatus', 'openRange', 'projectlevel', 'operation'];
allorganizations: any; //所有组织机构
allunittype: any; //所有单位类型
tabledataSource: any; //表格数据
preparelevels: any; //编制级别
allorganizations: any //所有组织机构
allunittype: any //所有单位类型
tabledataSource: any //表格数据
preparelevels: any //编制级别
ngOnInit(): void {
if (window.matchMedia("(max-width: 1400px)").matches) {
this.pcMore = false;
this.padMore = true;
this.pcfind = false;
this.padjt = true;
this.pcMore = false
this.padMore = true
this.pcfind = false
this.padjt = true
} else {
this.pcfind = true;
this.pcMore = true;
this.padMore = false;
this.padjt = false;
this.pcfind = true
this.pcMore = true
this.padMore = false
this.padjt = false
}
this.getunitdata();
this.getOrganizations();
this.getUnittype();
this.getAllPlanInfo(); //得到所有单位
let level = sessionStorage.getItem("level");
if (level == "0") {
//如果是总队
if (level == "0") {//如果是总队
this.preparelevels = [
{ name: "总队", value: "1" },
{ name: "支队", value: "2" },
{ name: "大队", value: "4" },
{ name: "中队", value: "8" },
];
{ name: "中队", value: "8" }
]
}
if (level == "1") {
//如果是支队
if (level == "1") {//如果是支队
this.preparelevels = [
{ name: "支队", value: "2" },
{ name: "大队", value: "4" },
{ name: "中队", value: "8" },
];
{ name: "中队", value: "8" }
]
}
if (level == "2") {
//如果是大队
if (level == "2") {//如果是大队
this.preparelevels = [
{ name: "大队", value: "4" },
{ name: "中队", value: "8" },
];
{ name: "中队", value: "8" }
]
}
if (level == "3") {
//如果是中队
this.preparelevels = [{ name: "中队", value: "8" }];
if (level == "3") {//如果是中队
this.preparelevels = [
{ name: "中队", value: "8" }
]
}
}
pcMore; //pc更多
pcput = false; //pc收起
pcfind; //pc查询
padjt = false;
padMore = true; //pad收缩控制
padput = false; //pad收起按钮
imgsrcopen = "../../../assets/images/routdown2.png";
imgsrcdown = "../../../assets/images/routup2.png";
pcMore//pc更多
pcput = false//pc收起
pcfind//pc查询
padjt = false
padMore = true//pad收缩控制
padput = false//pad收起按钮
imgsrcopen = "../../../assets/images/routdown2.png"
imgsrcdown = "../../../assets/images/routup2.png"
pcInfo() {
this.pcMore = !this.pcMore;
this.pcput = !this.pcput;
this.pcMore = !this.pcMore
this.pcput = !this.pcput
}
padInfo() {
this.padMore = !this.padMore;
this.padput = !this.padput;
this.padMore = !this.padMore
this.padput = !this.padput
}
allPlanInfo: any; //存储所有预案信息
allPlanInfo: any //存储所有预案信息
//获得所有预案信息
IsNewCompanyData = "";
templatePlan: boolean = false; //模板录入预案checkbox
customPlan: boolean = false; //自定义预案
IsNewCompanyData = ''
templatePlan: boolean = false//模板录入预案checkbox
customPlan: boolean = false//自定义预案
getAllPlanInfo() {
let planmode = [];
this.templatePlan ? planmode.push(2) : null;
this.customPlan ? planmode.push(4) : null;
let planmode = []
this.templatePlan ? planmode.push(2) : null
this.customPlan ? planmode.push(4) : null
let paramsdata: any = {
CompanyName: this.companyName || "",
OrganizationId: "",
HasChildrenOrganization: "",
BuildingTypeId: this.unittype || "",
PlanType: this.reservePlanType || "",
AuditStatus: "", //审核状态
PlanLevel: this.preparelevel || "",
HasChildrenPlanLevel: this.plcheck || "",
PageNumber: this.PageNumber || "1",
CompanyName: this.companyName || '',
OrganizationId: '',
HasChildrenOrganization: '',
BuildingTypeId: this.unittype || '',
PlanType: this.reservePlanType || '',
AuditStatus: '', //审核状态
PlanLevel: this.preparelevel || '',
HasChildrenPlanLevel: this.plcheck || '',
PageNumber: this.PageNumber || '1',
PageSize: this.pageSizeOptions[0],
Sort: "",
Sort: '',
IsNewData: this.IsNewData,
IsNewCompanyData: this.IsNewCompanyData,
PlanModes: planmode,
};
this.http
.get("/api/PublicPlans", { params: paramsdata })
.subscribe((data: any) => {
// console.log(111,data)
this.length = data.totalCount;
this.allPlanInfo = data;
this.tabledataSource = data.items;
});
PlanModes: planmode
}
this.http.get("/api/PublicPlans", { params: paramsdata }).subscribe((data: any) => {
// console.log(111,data)
this.length = data.totalCount
this.allPlanInfo = data
this.tabledataSource = data.items
})
}
//得到当前单位信息
getunitdata() {
this.http.get("/api/Account/Profiles").subscribe((data: any) => {
this.organizationName = data.organizationName;
});
this.http.get("/api/Account/Profiles").subscribe(
(data: any) => {
this.organizationName = data.organizationName
}
)
}
organizationName: any; //当前单位组织机构名称
treedata: any; //组织机构树型数据
newArr: any = [];
newallorganizations: any; //用于存储在原始数据基础上的每个机构增加children字段
organizationName: any //当前单位组织机构名称
treedata: any //组织机构树型数据
newArr: any = []
newallorganizations: any //用于存储在原始数据基础上的每个机构增加children字段
//得到当前单位所在组织机构的tree型数据
getpresentOrganization() {
this.newallorganizations = this.allorganizations;
this.newallorganizations.forEach((item) => {
item.children = [];
this.newallorganizations.forEach((element) => {
this.newallorganizations = this.allorganizations
this.newallorganizations.forEach(item => {
item.children = []
this.newallorganizations.forEach(element => {
if (element.parentId == item.id) {
item.children.push(element);
item.children.push(element)
}
});
});
// console.log(666,this.organizationName)
if (this.organizationName) {
this.newallorganizations.forEach((item) => {
this.newallorganizations.forEach(item => {
if (item.name == this.organizationName) {
this.dataSource.data = [item];
this.dataSource.data = [item]
}
});
} else {
this.dataSource.data = this.tree.toTree(this.treedata);
}
}
//获得所有组织机构
getOrganizations() {
this.http.get("/api/Organizations").subscribe((data: any) => {
this.allorganizations = data;
this.treedata = this.tree.toTree(data);
this.getpresentOrganization();
});
this.http.get('/api/Organizations').subscribe(
(data: any) => {
this.allorganizations = data
this.treedata = this.tree.toTree(data);
this.getpresentOrganization();
}
)
}
//获得所有单位类型
getUnittype() {
this.http.get("/api/BuildingTypes/Simple").subscribe((data) => {
this.allunittype = data;
});
this.http.get('/api/BuildingTypes/Simple').subscribe(
data => {
this.allunittype = data
}
)
}
//跳转查看预案页面 公开预案
routerTo(e) {
console.log(e);
console.log(e)
if (e.planType == 16 || e.planType == 4 || e.planType == 8) {
if (e.planType == 16 && e.attachmentUrls == null) {
window.open(
`/planManagement/createplanonlinefive?navIsOpen=false&companyId=${e.companyId}&planName=${e.name}&unitName=${e.company.name}&planCategory=${e.planCategory}&planId=${e.id}&unitTypeId=${e.company.buildingTypes[0].id}&orName=${e.company.organizationName}&orId=${e.company.organizationId}&pattern=false`
);
window.open(`/planManagement/createplanonlinefive?navIsOpen=false&companyId=${e.companyId}&planName=${e.name}&unitName=${e.company.name}&planCategory=${e.planCategory}&planId=${e.id}&unitTypeId=${e.company.buildingTypes[0].id}&orName=${e.company.organizationName}&orId=${e.company.organizationId}&pattern=false`)
} else {
var index = e.attachmentUrls[0].indexOf("/");
if (e.attachmentUrls[0].substr(0, index) == "psw") {
var index = e.attachmentUrls[0].indexOf("\/")
if (e.attachmentUrls[0].substr(0, index) == 'psw') {
const dialogRef = this.dialog.open(PsViewer, {
width: "1500px",
height: "800px",
data: e.attachmentUrls[0],
width: '1500px',
height: '800px',
data: e.attachmentUrls[0]
});
} else if (
e.attachmentUrls[0].substr(
e.attachmentUrls[0].length - 3,
e.attachmentUrls[0].length
) == "JPG" ||
e.attachmentUrls[0].substr(
e.attachmentUrls[0].length - 3,
e.attachmentUrls[0].length
) == "png" ||
e.attachmentUrls[0].substr(
e.attachmentUrls[0].length - 3,
e.attachmentUrls[0].length
) == "jpeg" ||
e.attachmentUrls[0].substr(
e.attachmentUrls[0].length - 3,
e.attachmentUrls[0].length
) == "jpg"
) {
let data = e;
const dialogRef = this.dialog.open(ImgDetails, {
//调用open方法打开对话框并且携带参数过去
} else if (e.attachmentUrls[0].substr(e.attachmentUrls[0].length - 3, e.attachmentUrls[0].length) == 'JPG' || e.attachmentUrls[0].substr(e.attachmentUrls[0].length - 3, e.attachmentUrls[0].length) == 'png' || e.attachmentUrls[0].substr(e.attachmentUrls[0].length - 3, e.attachmentUrls[0].length) == 'jpeg' || e.attachmentUrls[0].substr(e.attachmentUrls[0].length - 3, e.attachmentUrls[0].length) == 'jpg') {
let data = e
const dialogRef = this.dialog.open(ImgDetails, {//调用open方法打开对话框并且携带参数过去
data: data.attachmentUrls,
});
dialogRef.afterClosed().subscribe();
} else {
let fetchUrl = e.attachmentUrls[0];
let fetchUrl = e.attachmentUrls[0]
if (fetchUrl) {
let suffix = fetchUrl
.split(".")
[fetchUrl.split(".").length - 1].toLowerCase();
if (suffix == "docx" || suffix == "doc") {
let arr = fetchUrl.split(".");
arr[arr.length - 1] = "pdf";
window.open(`/api/Objects/PlanPlatform/` + arr.join("."));
} else if (suffix == "pdf") {
window.open(`/api/Objects/PlanPlatform/` + fetchUrl);
let suffix = fetchUrl.split('.')[fetchUrl.split('.').length - 1].toLowerCase()
if (suffix == 'docx' || suffix == 'doc') {
let arr = fetchUrl.split('.')
arr[arr.length - 1] = 'pdf'
window.open(`/api/Objects/PlanPlatform/` + arr.join('.'))
} else if (suffix == 'pdf') {
window.open(`/api/Objects/PlanPlatform/` + fetchUrl)
} else {
let config = new MatSnackBarConfig();
config.verticalPosition = "top";
config.duration = 3000;
this.snackBar.open("该文件类型暂不支持在线查看", "确定", config);
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('该文件类型暂不支持在线查看', '确定', config);
}
}
}
}
}
if (e.planMode == 2 && e.planType == 1) {
//如果是在线编辑
let id = e.id;
sessionStorage.setItem("planId", id);
sessionStorage.setItem("companyId", e.companyId);
if (e.planMode == 2 && e.planType == 1) { //如果是在线编辑
let id = e.id
sessionStorage.setItem("planId", id)
sessionStorage.setItem("companyId", e.companyId)
//sessionStorage.setItem("buildingTypeId",this.unittypeId)
sessionStorage.setItem("editable", "0");
sessionStorage.setItem("planName", e.name);
let companyId = sessionStorage.getItem("companyId");
sessionStorage.setItem("editable", "0")
sessionStorage.setItem("planName", e.name)
let companyId = sessionStorage.getItem("companyId")
window.open(`/keyUnit/viewunitinfoplan?id=${companyId}`);
}
if (e.planMode == 3) {
//如果是跳转网页
sessionStorage.setItem("url", e.url);
window.open(`/planManagement/webLook`);
if (e.planMode == 3) { //如果是跳转网页
sessionStorage.setItem("url", e.url)
window.open(`/planManagement/webLook`)
}
}
templatePlanChange($event, type) {
if (type == 1) {
this.templatePlan = $event;
this.templatePlan = $event
} else if (type == 2) {
this.customPlan = $event;
this.customPlan = $event
}
if (this.templatePlan || this.customPlan) {
this.reservePlanType = ["16"];
this.reservePlanType = ['16']
} else {
this.reservePlanType = [];
this.reservePlanType = []
}
}
//分页事件
chagePage(e) {
this.PageNumber = e.pageIndex + 1;
this.PageNumber = e.pageIndex + 1
this.getAllPlanInfo();
}
//辖区中队div是否显示
isorganizationbox: boolean = false;
isorganizationbox: boolean = false
//点击辖区中队树,将选择的辖区中队添加到变量
add(node) {
this.isorganizationbox = false;
this.js = node.name;
this.jsId = node.id;
this.isorganizationbox = false
this.js = node.name
this.jsId = node.id
}
//关闭辖区中队隐藏框
closeorganizationbox() {
this.isorganizationbox = false;
this.isorganizationbox = false
}
//打开辖区中队隐藏框
openorganizationbox() {
this.isorganizationbox = true;
this.isorganizationbox = true
}
//关闭出现的组织机构div
closediv() {
this.isorganizationbox = false;
this.isorganizationbox = false
}
//查询
onSubmit(e) {
this.getAllPlanInfo();
this.getAllPlanInfo()
}
companyName: any; //单位名称
js: any; //所选组织机构
jsId: any; //所选组织机构的id
companyName: any //单位名称
js: any //所选组织机构
jsId: any //所选组织机构的id
// jscheck:boolean //所选组织机构勾选框
unittype: any; //单位类型
reservePlanType: any; //预案类型
preparelevel: any; //编制级别
plcheck: boolean; //编制级别勾选框
unittype: any //单位类型
reservePlanType: any //预案类型
preparelevel: any //编制级别
plcheck: boolean //编制级别勾选框
//重置
reset() {
this.companyName = "";
this.companyName = ''
// this.js = ''
// this.jsId = ''
// this.jscheck = false
this.unittype = "";
this.reservePlanType = "";
this.preparelevel = "";
this.plcheck = false;
this.unittype = ''
this.reservePlanType = ''
this.preparelevel = ''
this.plcheck = false
//重新获取初始化列表
this.pageEvent.pageIndex = 0;
this.PageNumber = 1;
this.templatePlan = false;
this.customPlan = false;
this.pageEvent.pageIndex = 0
this.PageNumber = 1
this.templatePlan = false
this.customPlan = false
this.getAllPlanInfo();
this.IsNewCompanyData = "";
this.IsNewData = "";
this.IsNewCompanyData = ''
this.IsNewData = ''
}
}
@Component({
selector: "PsViewer",
templateUrl: "./PsvShow.html",
styleUrls: ["./open-plan.component.scss"],
selector: 'PsViewer',
templateUrl: './PsvShow.html',
styleUrls: ['./open-plan.component.scss']
})
export class GkhtmlPsViewer {
constructor(
private router: Router,
private http: HttpClient,
public dialog: MatDialog,
public snackBar: MatSnackBar,
public dialogRef: MatDialogRef<GkhtmlPsViewer>,
@Inject(MAT_DIALOG_DATA) public data: any
) {}
constructor(private router: Router, private http: HttpClient, public dialog: MatDialog, public snackBar: MatSnackBar, public dialogRef: MatDialogRef<GkhtmlPsViewer>, @Inject(MAT_DIALOG_DATA) public data: any) { }
ngOnInit(): void {
// console.log(this.data)
const viewer = new Viewer({
container: document.querySelector("#viewer"),
panorama: "/api/Objects/PlanPlatform/" + this.data,
container: document.querySelector('#viewer'),
panorama: '/api/Objects/PlanPlatform/' + this.data,
});
}
}

10
src/app/plan-management/pass-plan/open-or/open-or.component.html

@ -1,10 +0,0 @@
<h3 mat-dialog-title>选择要公开的消防救援站</h3>
<div class="box">
<nz-tree #nzTreeComponent [nzData]="nodes" nzCheckable nzCheckStrictly [nzCheckedKeys]="defaultCheckedKeys"
[nzExpandedKeys]="defaultExpandedKeys">
</nz-tree>
</div>
<mat-dialog-actions align="end">
<button mat-button mat-dialog-close [disabled]="isLoading">取消</button>
<button mat-button cdkFocusInitial (click)="save()" [disabled]="isLoading">确定</button>
</mat-dialog-actions>

4
src/app/plan-management/pass-plan/open-or/open-or.component.scss

@ -1,4 +0,0 @@
.box{
max-height: 400px;
overflow-y: auto;
}

25
src/app/plan-management/pass-plan/open-or/open-or.component.spec.ts

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

126
src/app/plan-management/pass-plan/open-or/open-or.component.ts

@ -1,126 +0,0 @@
import { HttpClient } from "@angular/common/http";
import {
Component,
OnInit,
AfterViewInit,
ViewChild,
Inject,
} from "@angular/core";
import { MatSnackBar } from "@angular/material/snack-bar";
import { MatDialogRef, MAT_DIALOG_DATA } from "@angular/material/dialog";
import {
NzFormatEmitEvent,
NzTreeComponent,
NzTreeNodeOptions,
} from "ng-zorro-antd/tree";
@Component({
selector: "app-open-or",
templateUrl: "./open-or.component.html",
styleUrls: ["./open-or.component.scss"],
})
export class OpenOrComponent implements OnInit {
constructor(
private http: HttpClient,
public snackBar: MatSnackBar,
@Inject(MAT_DIALOG_DATA) public data: any,
public dialogRef: MatDialogRef<OpenOrComponent>
) {}
@ViewChild("nzTreeComponent", { static: false })
nzTreeComponent!: NzTreeComponent;
defaultCheckedKeys = [];
defaultExpandedKeys = [];
isLoading = false;
nodes: NzTreeNodeOptions[] = [];
ngOnInit(): void {
this.getOrganizations();
}
//获得所有组织机构
allorganizations = [];
getOrganizations() {
this.http.get("/api/Organizations").subscribe((data: any) => {
this.allorganizations = data;
this.getpresentOrganization();
});
}
//得到当前单位所在组织机构的tree型数据
organizationName;
getpresentOrganization() {
let orData = JSON.parse(JSON.stringify(this.allorganizations));
orData.forEach((item) => {
item.children = [];
orData.forEach((element) => {
if (element.parentId == item.id) {
item.children.push(element);
}
});
});
orData.forEach((item) => {
item.title = item.name;
item.key = item.id;
item.selectable = false;
if (item.children.length === 0) {
item.isLeaf = true;
}
});
this.http.get("/api/Account/Profiles").subscribe((data: any) => {
this.organizationName = data.organizationName;
if (this.organizationName) {
orData.forEach((item) => {
if (item.name == this.organizationName) {
function lookForAllId(data = [], arr = []) {
for (let item of data) {
arr.push(item.id);
if (item.children && item.children.length)
lookForAllId(item.children, arr);
}
return arr;
}
function lookForNode(data, id, node = []) {
for (let item of data) {
if (item.id === id) {
node.push(item);
} else {
if (item.children && item.children.length) {
lookForNode(item.children, id, node);
}
}
}
return node;
}
if (this.data.plan.publicOrganizationIds.length === 0) {
this.defaultCheckedKeys = [...lookForAllId([item])];
} else {
this.defaultCheckedKeys = this.data.plan.publicOrganizationIds;
}
this.nodes = [...[item]];
}
});
}
});
}
save() {
let ids =
this.nzTreeComponent.getCheckedNodeList().map((item) => {
return item.key;
}) || [];
if (ids.length === 0) {
this.snackBar.open("至少选择一个队站公开", "确定", {
verticalPosition: "top",
duration: 3000,
});
}
this.http
.put(`/api/PlanAudits/${this.data.plan.id}/Public`, ids)
.subscribe((data) => {
this.snackBar.open("预案已公开", "确定", {
verticalPosition: "top",
duration: 3000,
});
this.dialogRef.close("公开成功");
});
}
}

26
src/app/plan-management/pass-plan/pass-plan.component.html

@ -90,11 +90,11 @@
<label style="margin-right: 10px;">预案级别:</label>
<mat-form-field>
<mat-select placeholder='请选择预案级别' [(ngModel)]="planCategory" name="planCategory" [multiple]="true">
<mat-option value=6>应急预案(国家级)</mat-option>
<mat-option value=7>应急预案(市级)</mat-option>
<!-- <mat-option value=6>应急预案(国家级)</mat-option>
<mat-option value=7>应急预案(市级)</mat-option> -->
<mat-option value=8>类型预案</mat-option>
<mat-option value=1>Ⅰ级预案</mat-option>
<mat-option value=2>Ⅱ级预案</mat-option>
<!-- <mat-option value=1>Ⅰ级预案</mat-option>
<mat-option value=2>Ⅱ级预案</mat-option> -->
<mat-option value=3>Ⅲ级预案</mat-option>
<mat-option value=4>Ⅳ级预案</mat-option>
<mat-option value=5>Ⅴ级预案</mat-option>
@ -131,14 +131,14 @@
</mat-select>
</mat-form-field>
</div>
<div class="queryField" *ngIf="!padMore&&!pcMore">
<!-- <div class="queryField" *ngIf="!padMore&&!pcMore">
<mat-checkbox (ngModelChange)="templatePlanChange($event,1)" [(ngModel)]="templatePlan" name="templatePlan">
模板录入预案</mat-checkbox>
</div>
<div class="queryField" *ngIf="!padMore&&!pcMore">
<mat-checkbox (ngModelChange)="templatePlanChange($event,2)" [(ngModel)]="customPlan" name="customPlan">自定义预案
</mat-checkbox>
</div>
</div> -->
</div>
</form>
@ -187,13 +187,15 @@
margin: 3px 0 0 3px;" src="../../../assets/images/custom.png" alt="">
</td>
</ng-container>
<ng-container matColumnDef="auditstate">
<th mat-header-cell *matHeaderCellDef>审核状态</th>
<td mat-cell *matCellDef="let element">
{{element.auditStatus | auditState}}
</td>
<ng-container matColumnDef="auditStatus">
<th mat-header-cell *matHeaderCellDef>新增审核</th>
<td mat-cell *matCellDef="let element">{{element.newVerifyState}}</td>
</ng-container>
<ng-container matColumnDef="weihuState">
<th mat-header-cell *matHeaderCellDef>维护审核</th>
<td mat-cell *matCellDef="let element">{{element.maintenanceVerifyState}}</td>
</ng-container>
<ng-container matColumnDef="openRange">
<th mat-header-cell *matHeaderCellDef>是否公开</th>
<td mat-cell *matCellDef="let element">{{element.openRange}}</td>

614
src/app/plan-management/pass-plan/pass-plan.component.ts

@ -1,64 +1,38 @@
import { Component, OnInit, ViewChild, Inject } from "@angular/core";
import { HttpClient } from "@angular/common/http";
import {
MatTreeFlatDataSource,
MatTreeFlattener,
} from "@angular/material/tree";
import { MatPaginator } from "@angular/material/paginator";
import { FlatTreeControl } from "@angular/cdk/tree";
import { FormControl } from "@angular/forms";
import { Router, ActivatedRoute } from "@angular/router";
import { PageEvent } from "@angular/material/paginator";
import {
MatDialogRef,
MatDialog,
MAT_DIALOG_DATA,
} from "@angular/material/dialog";
import { MatSnackBar, MatSnackBarConfig } from "@angular/material/snack-bar";
import { TreeService } from "../../http-interceptors/tree.service";
import { Viewer } from "photo-sphere-viewer";
import {
ImgDetails,
PsViewer,
} from "../entry-plan-look/entry-plan-look.component";
import { OpenOrComponent } from "./open-or/open-or.component";
declare var CryptoJS;
import { Component, OnInit, ViewChild, Inject } from '@angular/core';
import { HttpClient } from '@angular/common/http'
import { MatTreeFlatDataSource, MatTreeFlattener } from '@angular/material/tree';
import { MatPaginator } from '@angular/material/paginator';
import { FlatTreeControl } from '@angular/cdk/tree';
import { FormControl } from '@angular/forms';
import { Router, ActivatedRoute } from '@angular/router'
import { PageEvent } from '@angular/material/paginator';
import { MatDialogRef, MatDialog, MAT_DIALOG_DATA } from '@angular/material/dialog';
import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar';
import { TreeService } from '../../http-interceptors/tree.service'
import { Viewer } from 'photo-sphere-viewer';
import { ImgDetails, PsViewer } from '../entry-plan-look/entry-plan-look.component';
declare var CryptoJS
@Component({
selector: "app-pass-plan",
templateUrl: "./pass-plan.component.html",
styleUrls: ["./pass-plan.component.scss"],
selector: 'app-pass-plan',
templateUrl: './pass-plan.component.html',
styleUrls: ['./pass-plan.component.scss']
})
export class PassPlanComponent implements OnInit {
constructor(
private http: HttpClient,
private router: Router,
private route: ActivatedRoute,
private tree: TreeService,
public dialog: MatDialog,
public snackBar: MatSnackBar
) {}
private _transformer = (node, level: number) => {
//初始化tree
constructor(private http: HttpClient, private router: Router, private route: ActivatedRoute, private tree: TreeService, public dialog: MatDialog, public snackBar: MatSnackBar) { }
private _transformer = (node, level: number) => { //初始化tree
return {
expandable: !!node.children && node.children.length > 0,
name: node.name,
level: level,
id: node.id,
parentId: node.parentId,
children: node.children,
children: node.children
};
};
treeControl = new FlatTreeControl<any>(
(node) => node.level,
(node) => node.expandable
);
treeFlattener = new MatTreeFlattener(
this._transformer,
(node) => node.level,
(node) => node.expandable,
(node) => node.children
);
}
treeControl = new FlatTreeControl<any>(node => node.level, node => node.expandable);
treeFlattener = new MatTreeFlattener(this._transformer, node => node.level, node => node.expandable, node => node.children);
dataSource = new MatTreeFlatDataSource(this.treeControl, this.treeFlattener);
myControl = new FormControl();
hasChild = (_: number, node: any) => node.expandable;
@ -68,138 +42,118 @@ export class PassPlanComponent implements OnInit {
paginator: MatPaginator;
length: any; //共多少条数据
pageSize: any; //每页条数
pageSizeOptions: number[] = [10]; //设置每页条数
pageSizeOptions: number[] = [10] //设置每页条数
PageNumber: any; //第几页
displayedColumns: string[] = [
"state",
"planname",
"addpeople",
"level",
"addtime",
"plantype",
"auditstate",
"openRange",
"projectlevel",
"operation",
];
allorganizations: any; //所有组织机构
allunittype: any; //所有单位类型
tabledataSource: any; //表格数据
IsNewData = ""; //维护更新活新增
url;
displayedColumns: string[] = ['state', 'planname', 'addpeople', 'level', 'addtime', 'plantype', 'auditStatus', 'weihuState', 'openRange', 'projectlevel', 'operation'];
allorganizations: any //所有组织机构
allunittype: any //所有单位类型
tabledataSource: any //表格数据
IsNewData = '' //维护更新活新增
url
preparelevels: any;
preparelevels: any
ngOnInit(): void {
if (window.matchMedia("(max-width: 1400px)").matches) {
this.pcMore = false;
this.padMore = true;
this.pcfind = false;
this.padjt = true;
this.pcMore = false
this.padMore = true
this.pcfind = false
this.padjt = true
} else {
this.pcfind = true;
this.pcMore = true;
this.padMore = false;
this.padjt = false;
this.pcfind = true
this.pcMore = true
this.padMore = false
this.padjt = false
}
this.getunitdata();
this.getOrganizations();
this.getUnittype();
this.getAllPlanInfo();
let level = sessionStorage.getItem("level");
if (level == "0") {
//如果是总队
if (level == "0") {//如果是总队
this.preparelevels = [
{ name: "总队", value: "1" },
{ name: "支队", value: "2" },
{ name: "大队", value: "4" },
{ name: "中队", value: "8" },
];
{ name: "中队", value: "8" }
]
}
if (level == "1") {
//如果是支队
if (level == "1") {//如果是支队
this.preparelevels = [
{ name: "支队", value: "2" },
{ name: "大队", value: "4" },
{ name: "中队", value: "8" },
];
{ name: "中队", value: "8" }
]
}
if (level == "2") {
//如果是大队
if (level == "2") {//如果是大队
this.preparelevels = [
{ name: "大队", value: "4" },
{ name: "中队", value: "8" },
];
{ name: "中队", value: "8" }
]
}
if (level == "3") {
//如果是中队
this.preparelevels = [{ name: "中队", value: "8" }];
if (level == "3") {//如果是中队
this.preparelevels = [
{ name: "中队", value: "8" }
]
}
this.url = window.location.href.substring(
window.location.href.length - 1,
window.location.href.length
);
this.url = window.location.href.substring(window.location.href.length - 1, window.location.href.length)
//console.log(this.url)
}
pcMore; //pc更多
pcput = false; //pc收起
pcfind; //pc查询
padjt = false;
padMore = true; //pad收缩控制
padput = false; //pad收起按钮
imgsrcopen = "../../../assets/images/routdown2.png";
imgsrcdown = "../../../assets/images/routup2.png";
pcMore//pc更多
pcput = false//pc收起
pcfind//pc查询
padjt = false
padMore = true//pad收缩控制
padput = false//pad收起按钮
imgsrcopen = "../../../assets/images/routdown2.png"
imgsrcdown = "../../../assets/images/routup2.png"
pcInfo() {
this.pcMore = !this.pcMore;
this.pcput = !this.pcput;
this.pcMore = !this.pcMore
this.pcput = !this.pcput
}
padInfo() {
this.padMore = !this.padMore;
this.padput = !this.padput;
this.padMore = !this.padMore
this.padput = !this.padput
}
allPlanInfo: any; //存储所有预案信息
IsNewCompanyData = ""; //单位是新增还是维护更新
templatePlan: boolean = false; //模板录入预案checkbox
customPlan: boolean = false; //自定义预案
allPlanInfo: any //存储所有预案信息
IsNewCompanyData = '' //单位是新增还是维护更新
templatePlan: boolean = false//模板录入预案checkbox
customPlan: boolean = false//自定义预案
//获得所有预案信息
getAllPlanInfo() {
let planmode = [];
this.templatePlan ? planmode.push(2) : null;
this.customPlan ? planmode.push(4) : null;
let reservePlanType;
this.reservePlanType
? (reservePlanType = JSON.parse(JSON.stringify(this.reservePlanType)))
: (reservePlanType = "");
let planmode = []
this.templatePlan ? planmode.push(2) : null
this.customPlan ? planmode.push(4) : null
let reservePlanType
this.reservePlanType ? reservePlanType = JSON.parse(JSON.stringify(this.reservePlanType)) : reservePlanType = ''
if (this.reservePlanType && this.reservePlanType.length != 0) {
reservePlanType = eval(this.reservePlanType.join("|"));
reservePlanType = eval(this.reservePlanType.join("|"))
}
let paramsdata: any = {
CompanyName: this.companyName || "",
OrganizationId: this.jsId || "",
HasChildrenOrganization: this.jscheck || "",
BuildingTypeId: this.unittype || "",
PlanType: this.reservePlanType || "",
AuditStatus: "", //审核状态
PlanLevel: this.preparelevel || "",
HasChildrenPlanLevel: this.plcheck || "",
CreationTimeRangeStart: this.addtime || "",
CreationTimeRangeEnd: this.endtime || "",
PageNumber: this.PageNumber || "1",
CompanyName: this.companyName || '',
OrganizationId: this.jsId || '',
HasChildrenOrganization: this.jscheck || '',
BuildingTypeId: this.unittype || '',
PlanType: this.reservePlanType || '',
AuditStatus: '', //审核状态
PlanLevel: this.preparelevel || '',
HasChildrenPlanLevel: this.plcheck || '',
CreationTimeRangeStart: this.addtime || '',
CreationTimeRangeEnd: this.endtime || '',
PageNumber: this.PageNumber || '1',
PageSize: this.pageSizeOptions[0],
Sort: "",
Sort: '',
PlanCategories: this.planCategory,
IsNewData: this.IsNewData,
IsNewCompanyData: this.IsNewCompanyData,
PlanModes: planmode,
};
this.http
.get("/api/ApprovedPlans", { params: paramsdata })
.subscribe((data: any) => {
this.length = data.totalCount;
this.allPlanInfo = data;
this.tabledataSource = data.items;
});
PlanModes: planmode
}
this.http.get("/api/ApprovedPlans", { params: paramsdata }).subscribe((data: any) => {
this.length = data.totalCount
this.allPlanInfo = data
this.tabledataSource = data.items
})
}
colorRgb(sColor) {
@ -231,7 +185,7 @@ export class PassPlanComponent implements OnInit {
var strHex = "#";
for (var i = 0; i < aColor.length; i++) {
var hex: any = Number(aColor[i]).toString(16);
hex = hex < 10 ? 0 + "" + hex : hex; // 保证每个rgb的值为2位
hex = hex < 10 ? 0 + '' + hex : hex;// 保证每个rgb的值为2位
if (hex === "0") {
hex += hex;
}
@ -248,7 +202,7 @@ export class PassPlanComponent implements OnInit {
} else if (aNum.length === 3) {
var numHex = "#";
for (var i = 0; i < aNum.length; i += 1) {
numHex += aNum[i] + aNum[i];
numHex += (aNum[i] + aNum[i]);
}
return numHex;
}
@ -258,8 +212,8 @@ export class PassPlanComponent implements OnInit {
}
gradientColor(startColor, endColor, step) {
let _this = this;
let startRGB = _this.colorRgb(startColor); //转换为rgb数组模式
let _this = this
let startRGB = _this.colorRgb(startColor);//转换为rgb数组模式
let startR = startRGB[0];
let startG = startRGB[1];
let startB = startRGB[2];
@ -269,115 +223,118 @@ export class PassPlanComponent implements OnInit {
let endG = endRGB[1];
let endB = endRGB[2];
let sR = (endR - startR) / step; //总差值
let sR = (endR - startR) / step;//总差值
let sG = (endG - startG) / step;
let sB = (endB - startB) / step;
var colorArr = [];
for (var i = 0; i < step; i++) {
//计算每一步的hex值
var hex = _this.colorHex(
"rgb(" +
parseInt(sR * i + startR) +
"," +
parseInt(sG * i + startG) +
"," +
parseInt(sB * i + startB) +
")"
);
//计算每一步的hex值
var hex = _this.colorHex('rgb(' + parseInt((sR * i + startR)) + ',' + parseInt((sG * i + startG)) + ',' + parseInt((sB * i + startB)) + ')');
colorArr.push(hex);
}
return colorArr;
}
integrity(width) {
let _this = this;
let _this = this
let style: any = {};
style.width = width + "%";
let style: any = {}
style.width = width + '%';
if (width < 30) {
let colorArr = this.gradientColor("#D50000", "#E53935", 30);
let colorArr = this.gradientColor('#D50000', '#E53935', 30);
for (let i = 0; i < 30; i++) {
if (i == width) {
style.background = colorArr[i];
style.background = colorArr[i]
}
}
}
if (width >= 30 && width < 60) {
let colorArr = this.gradientColor("#FF9800", "#E65100", 30);
let colorArr = this.gradientColor('#FF9800', '#E65100', 30);
for (let i = 30; i < 60; i++) {
if (i == width) {
style.background = colorArr[i - 30];
style.background = colorArr[i - 30]
}
}
}
if (width >= 60) {
let colorArr = this.gradientColor("#81C784", "#2E7D32", 41);
let colorArr = this.gradientColor('#81C784', '#2E7D32', 41);
for (let i = 60; i <= 100; i++) {
if (i == width) {
style.background = colorArr[i - 60];
style.background = colorArr[i - 60]
}
}
}
return style;
return style
}
integrityDetails(width, zong) {
let style: any = {};
style.width = (width / zong) * 100 + "%";
return style;
let style: any = {}
style.width = (width / zong) * 100 + '%';
return style
}
//得到当前单位信息
getunitdata() {
this.http.get("/api/Account/Profiles").subscribe((data: any) => {
this.organizationName = data.organizationName;
});
this.http.get("/api/Account/Profiles").subscribe(
(data: any) => {
this.organizationName = data.organizationName
}
)
}
addtime; //开始时间
endtime; //结束时间
integrityScoreMin; //完整度最小值
integrityScoreMax; //完整度最大值
organizationName: any; //当前单位组织机构名称
treedata: any; //组织机构树型数据
newArr: any = [];
newallorganizations: any; //用于存储在原始数据基础上的每个机构增加children字段
addtime//开始时间
endtime//结束时间
integrityScoreMin//完整度最小值
integrityScoreMax//完整度最大值
organizationName: any //当前单位组织机构名称
treedata: any //组织机构树型数据
newArr: any = []
newallorganizations: any //用于存储在原始数据基础上的每个机构增加children字段
//得到当前单位所在组织机构的tree型数据
getpresentOrganization() {
this.newallorganizations = this.allorganizations;
this.newallorganizations.forEach((item) => {
item.children = [];
this.newallorganizations.forEach((element) => {
this.newallorganizations = this.allorganizations
this.newallorganizations.forEach(item => {
item.children = []
this.newallorganizations.forEach(element => {
if (element.parentId == item.id) {
item.children.push(element);
item.children.push(element)
}
});
});
this.http.get("/api/Account/Profiles").subscribe((data: any) => {
this.organizationName = data.organizationName;
if (this.organizationName) {
this.newallorganizations.forEach((item) => {
if (item.name == this.organizationName) {
this.dataSource.data = [item];
}
});
} else {
this.dataSource.data = this.tree.toTree(this.treedata);
this.http.get("/api/Account/Profiles").subscribe(
(data: any) => {
this.organizationName = data.organizationName
if (this.organizationName) {
this.newallorganizations.forEach(item => {
if (item.name == this.organizationName) {
this.dataSource.data = [item]
}
});
} else {
this.dataSource.data = this.tree.toTree(this.treedata);
}
}
});
)
}
//获得所有组织机构
getOrganizations() {
this.http.get("/api/Organizations").subscribe((data: any) => {
this.allorganizations = data;
this.treedata = this.tree.toTree(data);
this.getpresentOrganization();
});
this.http.get('/api/Organizations').subscribe(
(data: any) => {
this.allorganizations = data
this.treedata = this.tree.toTree(data);
this.getpresentOrganization();
}
)
}
//获得所有单位类型
getUnittype() {
this.http.get("/api/BuildingTypes/Simple").subscribe((data) => {
this.allunittype = data;
});
this.http.get('/api/BuildingTypes/Simple').subscribe(
data => {
this.allunittype = data
}
)
}
//查看单位信息
lookUnitInfo(element) {
@ -386,239 +343,194 @@ export class PassPlanComponent implements OnInit {
// width: '1500px',
// height:'800px'
// });
sessionStorage.setItem("editable", "0");
sessionStorage.setItem("companyName", element.company.name);
sessionStorage.setItem("companyId", element.company.id);
sessionStorage.setItem(
element.company.id,
JSON.stringify(element.company.companyIntegrityScore)
);
window.open(
`/keyUnit/viewunitinfo?id=${element.company.id}&usci=${element.company.usci}`,
"_blank"
);
sessionStorage.setItem("editable", "0")
sessionStorage.setItem("companyName", element.company.name)
sessionStorage.setItem("companyId", element.company.id)
sessionStorage.setItem(element.company.id, JSON.stringify(element.company.companyIntegrityScore))
window.open(`/keyUnit/viewunitinfo?id=${element.company.id}&usci=${element.company.usci}`, '_blank');
}
//跳转查看预案页面 审核通过预案
routerTo(e) {
console.log(e);
console.log(e)
if (e.planType == 16 || e.planType == 4 || e.planType == 8) {
if (e.planType == 16 && e.attachmentUrls == null) {
window.open(
`/planManagement/createplanonlinefive?navIsOpen=false&companyId=${e.companyId}&planName=${e.name}&unitName=${e.company.name}&planCategory=${e.planCategory}&planId=${e.id}&unitTypeId=${e.company.buildingTypes[0].id}&orName=${e.company.organizationName}&orId=${e.company.organizationId}&pattern=false`
);
window.open(`/planManagement/createplanonlinefive?navIsOpen=false&companyId=${e.companyId}&planName=${e.name}&unitName=${e.company.name}&planCategory=${e.planCategory}&planId=${e.id}&unitTypeId=${e.company.buildingTypes[0].id}&orName=${e.company.organizationName}&orId=${e.company.organizationId}&pattern=false`)
} else {
var index = e.attachmentUrls[0].indexOf("/");
if (e.attachmentUrls[0].substr(0, index) == "psw") {
var index = e.attachmentUrls[0].indexOf("\/")
if (e.attachmentUrls[0].substr(0, index) == 'psw') {
const dialogRef = this.dialog.open(PsViewer, {
width: "1500px",
height: "800px",
data: e.attachmentUrls[0],
width: '1500px',
height: '800px',
data: e.attachmentUrls[0]
});
} else if (
e.attachmentUrls[0].substr(
e.attachmentUrls[0].length - 3,
e.attachmentUrls[0].length
) == "JPG" ||
e.attachmentUrls[0].substr(
e.attachmentUrls[0].length - 3,
e.attachmentUrls[0].length
) == "png" ||
e.attachmentUrls[0].substr(
e.attachmentUrls[0].length - 3,
e.attachmentUrls[0].length
) == "jpeg" ||
e.attachmentUrls[0].substr(
e.attachmentUrls[0].length - 3,
e.attachmentUrls[0].length
) == "jpg"
) {
let data = e;
const dialogRef = this.dialog.open(ImgDetails, {
//调用open方法打开对话框并且携带参数过去
} else if (e.attachmentUrls[0].substr(e.attachmentUrls[0].length - 3, e.attachmentUrls[0].length) == 'JPG' || e.attachmentUrls[0].substr(e.attachmentUrls[0].length - 3, e.attachmentUrls[0].length) == 'png' || e.attachmentUrls[0].substr(e.attachmentUrls[0].length - 3, e.attachmentUrls[0].length) == 'jpeg' || e.attachmentUrls[0].substr(e.attachmentUrls[0].length - 3, e.attachmentUrls[0].length) == 'jpg') {
let data = e
const dialogRef = this.dialog.open(ImgDetails, {//调用open方法打开对话框并且携带参数过去
data: data.attachmentUrls,
});
dialogRef.afterClosed().subscribe();
} else {
let fetchUrl = e.attachmentUrls[0];
let fetchUrl = e.attachmentUrls[0]
if (fetchUrl) {
let suffix = fetchUrl
.split(".")
[fetchUrl.split(".").length - 1].toLowerCase();
if (suffix == "docx" || suffix == "doc") {
let arr = fetchUrl.split(".");
arr[arr.length - 1] = "pdf";
window.open(`/api/Objects/PlanPlatform/` + arr.join("."));
} else if (suffix == "pdf") {
window.open(`/api/Objects/PlanPlatform/` + fetchUrl);
let suffix = fetchUrl.split('.')[fetchUrl.split('.').length - 1].toLowerCase()
if (suffix == 'docx' || suffix == 'doc') {
let arr = fetchUrl.split('.')
arr[arr.length - 1] = 'pdf'
window.open(`/api/Objects/PlanPlatform/` + arr.join('.'))
} else if (suffix == 'pdf') {
window.open(`/api/Objects/PlanPlatform/` + fetchUrl)
} else {
let config = new MatSnackBarConfig();
config.verticalPosition = "top";
config.duration = 3000;
this.snackBar.open("该文件类型暂不支持在线查看", "确定", config);
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('该文件类型暂不支持在线查看', '确定', config);
}
}
}
}
}
if (e.planMode == 2 && e.planType == 1) {
//如果是在线编辑
let id = e.id;
sessionStorage.setItem("planId", id);
sessionStorage.setItem("companyId", e.companyId);
if (e.planMode == 2 && e.planType == 1) { //如果是在线编辑
let id = e.id
sessionStorage.setItem("planId", id)
sessionStorage.setItem("companyId", e.companyId)
//sessionStorage.setItem("buildingTypeId",this.unittypeId)
sessionStorage.setItem("editable", "0");
sessionStorage.setItem("planName", e.name);
let companyId = sessionStorage.getItem("companyId");
sessionStorage.setItem("editable", "0")
sessionStorage.setItem("planName", e.name)
let companyId = sessionStorage.getItem("companyId")
window.open(`/keyUnit/viewunitinfoplan?id=${companyId}`);
}
if (e.planMode == 3) {
//如果是跳转网页
sessionStorage.setItem("url", e.url);
window.open(`/planManagement/webLook`);
if (e.planMode == 3) { //如果是跳转网页
sessionStorage.setItem("url", e.url)
window.open(`/planManagement/webLook`)
}
}
templatePlanChange($event, type) {
if (type == 1) {
this.templatePlan = $event;
this.templatePlan = $event
} else if (type == 2) {
this.customPlan = $event;
this.customPlan = $event
}
if (this.templatePlan || this.customPlan) {
this.reservePlanType = ["16"];
this.reservePlanType = ['16']
} else {
this.reservePlanType = [];
this.reservePlanType = []
}
}
//预案公开
openReserve(e) {
const dialogRef = this.dialog.open(OpenOrComponent, {
width: "500px",
data: { plan: e },
});
dialogRef.afterClosed().subscribe((result) => {
if (result && result === "公开成功") {
this.getAllPlanInfo();
}
});
this.http.put(`/api/PlanAudits/${e.id}/Public`, []).subscribe(data => {
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('预案已公开', '确定', config);
})
}
//预案取消公开
closeReserve(e) {
this.http.put(`/api/PlanAudits/${e.id}/Unpublic`, []).subscribe((data) => {
this.http.put(`/api/PlanAudits/${e.id}/Unpublic`, []).subscribe(data => {
const config = new MatSnackBarConfig();
config.verticalPosition = "top";
config.duration = 3000;
this.snackBar.open("预案已取消公开", "确定", config);
this.getAllPlanInfo();
});
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('预案已取消公开', '确定', config);
})
}
//分页事件
chagePage(e) {
this.PageNumber = e.pageIndex + 1;
this.PageNumber = e.pageIndex + 1
this.getAllPlanInfo();
}
//辖区中队div是否显示
isorganizationbox: boolean = false;
isorganizationbox: boolean = false
//点击辖区中队树,将选择的辖区中队添加到变量
add(node) {
this.isorganizationbox = false;
this.js = node.name;
this.jsId = node.id;
this.isorganizationbox = false
this.js = node.name
this.jsId = node.id
}
//关闭辖区中队隐藏框
closeorganizationbox() {
this.isorganizationbox = false;
this.isorganizationbox = false
}
//打开辖区中队隐藏框
openorganizationbox() {
this.isorganizationbox = true;
this.isorganizationbox = true
}
//关闭出现的组织机构div
closediv() {
this.isorganizationbox = false;
this.isorganizationbox = false
}
//查询
onSubmit(e) {
this.PageNumber = 1;
this.pageEvent.pageIndex = 0;
this.getAllPlanInfo();
this.PageNumber = 1
this.pageEvent.pageIndex = 0
this.getAllPlanInfo()
}
companyName: any; //单位名称
js: any; //所选组织机构
jsId: any; //所选组织机构的id
jscheck: boolean; //所选组织机构勾选框
unittype: any; //单位类型
reservePlanType: any; //预案类型
preparelevel: any; //编制级别
plcheck: boolean; //编制级别勾选框
planCategory = []; //预案级别
companyName: any //单位名称
js: any //所选组织机构
jsId: any //所选组织机构的id
jscheck: boolean //所选组织机构勾选框
unittype: any //单位类型
reservePlanType: any //预案类型
preparelevel: any //编制级别
plcheck: boolean //编制级别勾选框
planCategory = []//预案级别
//重置
reset() {
this.IsNewData = "";
this.IsNewCompanyData = "";
this.companyName = "";
this.js = "";
this.jsId = "";
this.jscheck = false;
this.unittype = "";
this.reservePlanType = "";
this.preparelevel = "";
this.addtime = "";
this.endtime = "";
this.plcheck = false;
this.IsNewData = ''
this.IsNewCompanyData = ''
this.companyName = ''
this.js = ''
this.jsId = ''
this.jscheck = false
this.unittype = ''
this.reservePlanType = ''
this.preparelevel = ''
this.addtime = ''
this.endtime = ''
this.plcheck = false
//重新获取初始化列表
this.pageEvent.pageIndex = 0;
this.PageNumber = 1;
this.planCategory = [];
this.pageEvent.pageIndex = 0
this.PageNumber = 1
this.planCategory = []
this.templatePlan = false;
this.customPlan = false;
this.templatePlan = false
this.customPlan = false
this.getAllPlanInfo();
}
}
@Component({
selector: "PsViewer",
templateUrl: "./PsvShow.html",
styleUrls: ["./pass-plan.component.scss"],
selector: 'PsViewer',
templateUrl: './PsvShow.html',
styleUrls: ['./pass-plan.component.scss']
})
export class GkPsViewer {
constructor(
private router: Router,
private http: HttpClient,
public dialog: MatDialog,
public snackBar: MatSnackBar,
public dialogRef: MatDialogRef<GkPsViewer>,
@Inject(MAT_DIALOG_DATA) public data: any
) {}
constructor(private router: Router, private http: HttpClient, public dialog: MatDialog, public snackBar: MatSnackBar, public dialogRef: MatDialogRef<GkPsViewer>, @Inject(MAT_DIALOG_DATA) public data: any) { }
ngOnInit(): void {
// console.log(this.data)
const viewer = new Viewer({
container: document.querySelector("#viewer"),
panorama: "/api/Objects/PlanPlatform/" + this.data,
container: document.querySelector('#viewer'),
panorama: '/api/Objects/PlanPlatform/' + this.data,
});
}
}
@Component({
selector: "unitInfo",
templateUrl: "./unitInfo.html",
styleUrls: ["./pass-plan.component.scss"],
selector: 'unitInfo',
templateUrl: './unitInfo.html',
styleUrls: ['./pass-plan.component.scss']
})
export class UnitInfo {
constructor(
private router: Router,
private http: HttpClient,
public dialog: MatDialog,
public snackBar: MatSnackBar,
public dialogRef: MatDialogRef<UnitInfo>,
@Inject(MAT_DIALOG_DATA) public data: any
) {}
constructor(private router: Router, private http: HttpClient, public dialog: MatDialog, public snackBar: MatSnackBar, public dialogRef: MatDialogRef<UnitInfo>, @Inject(MAT_DIALOG_DATA) public data: any) { }
ngOnInit(): void {
// console.log(this.data)
}
}
}

35
src/app/plan-management/plan-deduction/add-plan/add-plan.component.html

@ -1,35 +0,0 @@
<h2 mat-dialog-title>新增预案推演</h2>
<div class="box">
<div class="contentItem">
<div class="content">
<div>
<span class="name">预案名称:</span>
<input name="planname" [(ngModel)]="planname" nz-input placeholder="请输入预案名称" />
</div>
<div>
<span class="name">单位名称:</span>
<nz-select nzShowSearch nzServerSearch (nzOnSearch)="search($event)" [(ngModel)]="unitid"
(nzScrollToBottom)="loadMore()" nzPlaceHolder="请选择单位" nzAllowClear
[nzDropdownRender]="renderTemplate">
<nz-option *ngFor="let o of optionList" [nzValue]="o.id" [nzLabel]="o.name"></nz-option>
</nz-select>
<ng-template #renderTemplate>
<nz-spin *ngIf="isLoading"></nz-spin>
</ng-template>
</div>
<div>
<span class="name">创建机构:</span>
<nz-tree-select [nzDropdownClassName]="'maxHeightTreeSelect'" [nzNodes]="nodes" nzShowSearch
nzPlaceHolder="请选择创建人" [(ngModel)]="orid">
</nz-tree-select>
</div>
</div>
</div>
<!-- <div class="mask" *ngIf="isLoading">
<mat-spinner [diameter]="30"></mat-spinner>
</div> -->
</div>
<mat-dialog-actions align="end">
<button mat-button mat-dialog-close [disabled]="isLoading">取消</button>
<button mat-button cdkFocusInitial (click)="save()" [disabled]="isLoading">确定</button>
</mat-dialog-actions>

122
src/app/plan-management/plan-deduction/add-plan/add-plan.component.scss

@ -1,122 +0,0 @@
.box {
width: 100%;
position: relative;
.contentItem {
display: flex;
margin: 6px 0;
// border-bottom: 1px dashed rgb(180, 178, 178);
.title {
width: 75px;
color: #1890ff;
display: flex;
align-items: center;
}
.content {
flex: 1;
display: flex;
flex-wrap: wrap;
flex-direction: column;
div {
display: flex;
align-items: center;
input {
flex: 1;
}
nz-select,
nz-tree-select {
width: 72.5%;
}
}
div {
margin-bottom: 8px;
.name {
display: inline-block;
width: 70px;
margin-right: 3px;
text-align: right;
}
}
}
.textbox {
height: 32px;
line-height: 32px;
width: 50%;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.uploadbox {
position: relative;
display: flex;
align-items: center;
input {
width: 88px;
height: 32px;
position: absolute;
left: 0;
top: 0;
opacity: 0;
z-index: 2;
cursor: pointer;
}
button {
z-index: 1;
cursor: pointer;
}
.imgbox {
height: 100%;
display: flex;
align-items: center;
li {
display: flex;
align-items: center;
position: relative;
}
img {
width: 50px;
height: 50px;
margin: 0 5px;
cursor: pointer;
}
.close {
position: absolute;
right: 0;
top: 0;
font-size: 15px;
cursor: pointer;
}
}
}
}
.mask {
position: absolute;
width: 100%;
height: 100%;
left: 0;
top: 0;
background: rgba(0, 0, 0, 0.2);
display: flex;
justify-content: center;
align-items: center;
z-index: 3;
}
}

25
src/app/plan-management/plan-deduction/add-plan/add-plan.component.spec.ts

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

103
src/app/plan-management/plan-deduction/add-plan/add-plan.component.ts

@ -1,103 +0,0 @@
import { HttpClient } from "@angular/common/http";
import { Component, OnInit, Inject } from "@angular/core";
import { MatDialogRef, MAT_DIALOG_DATA } from "@angular/material/dialog";
import { DatePipe } from "@angular/common";
import { MatSnackBar } from "@angular/material/snack-bar";
import { Observable } from "rxjs";
import { map } from "rxjs/operators";
@Component({
selector: "app-add-plan",
templateUrl: "./add-plan.component.html",
styleUrls: ["./add-plan.component.scss"],
providers: [DatePipe],
})
export class AddPlanComponent implements OnInit {
constructor(
public dialogRef: MatDialogRef<AddPlanComponent>,
@Inject(MAT_DIALOG_DATA) public data: any,
private http: HttpClient,
public snackBar: MatSnackBar
) {}
ngOnInit(): void {
console.log("传递的数据", this.data);
this.nodes = this.data;
this.getCompanies();
}
isLoading = false;
planname;
unitid;
orid;
optionList: string[] = [];
PageNumber = 1;
PageSize = 10;
IntegrityScoreMin = 0;
IntegrityScoreMax = 1;
loadMore(): void {
console.log("需要加载下一页了");
this.PageNumber += 1;
this.getCompanies();
}
getCompanies(name?: string) {
this.isLoading = true;
let params: any = {
Name: name || "",
PageNumber: this.PageNumber,
PageSize: this.PageSize,
IntegrityScoreMin: this.IntegrityScoreMin,
IntegrityScoreMax: this.IntegrityScoreMax,
};
this.http
.get("/api/Companies", { params: params })
.subscribe((data: any) => {
console.log("单位列表", data.items);
this.isLoading = false;
this.optionList = [...this.optionList, ...data.items];
});
}
Name;
search($event) {
console.log($event);
this.Name = $event;
this.PageNumber = 1;
this.optionList = [];
this.getCompanies($event);
}
nodes;
save() {
console.log(1, this.planname);
console.log(2, this.unitid);
console.log(3, this.orid);
// return;
if (!this.planname || !this.unitid) {
this.snackBar.open("请输入完整", "确定", {
verticalPosition: "top",
duration: 3000,
});
return;
}
let body: any = {
name: this.planname,
planCategory: 9, //temp
planMode: 2,
planType: 1,
exCreatorId: this.orid ? this.orid : "",
};
this.http
.post(`/api/PlanComponents2D?companyId=${this.unitid}`, body)
.subscribe((data: any) => {
this.snackBar.open("创建成功", "确定", {
verticalPosition: "top",
duration: 3000,
});
this.dialogRef.close(data);
});
}
}

62
src/app/plan-management/plan-deduction/plan-deduction.component.html

@ -1,62 +0,0 @@
<!-- <p>六熟悉记录</p> -->
<div class="box">
<div class="header">
<form class="queryBox" (ngSubmit)="onSubmit()">
<div class="queryField">
<span style="width: 108px;">预案名称:</span>
<input name="name" nz-input placeholder="请输入预案名称" [(ngModel)]="name" />
</div>
<div class="queryField">
<span style="width: 108px;">单位名称:</span>
<input name="companyname" nz-input placeholder="请输入单位名称" [(ngModel)]="companyname" />
</div>
<div class="queryField" style="margin-right: 35px;">
<span style="width: 153px;">创建人(消防救援站):</span>
<nz-tree-select [nzDropdownClassName]="'maxHeightTreeSelect'" style="width: 250px"
[nzExpandedKeys]="expandKeys" [nzNodes]="nodes" nzShowSearch nzPlaceHolder="请选择组织机构" name="orId"
[(ngModel)]="orId">
</nz-tree-select>
</div>
<!-- <div class="queryField">
<span>熟悉时间:</span>
<nz-range-picker name="time" [(ngModel)]="time"></nz-range-picker>
</div> -->
<div class="queryField btnbox">
<button nz-button nzType="primary">查询</button>
<button nz-button type="button" nzType="default" (click)="reset()">重置</button>
</div>
</form>
</div>
<div class="tablebox">
<button nz-button nzType="primary" class="add" (click)="add()">新增</button>
<table mat-table [dataSource]="tabledataSource" class="mat-elevation-z8">
<ng-container matColumnDef="planname">
<th mat-header-cell *matHeaderCellDef>预案名称</th>
<td mat-cell *matCellDef="let element">{{element.name}}</td>
</ng-container>
<ng-container matColumnDef="name">
<th mat-header-cell *matHeaderCellDef>单位名称</th>
<td mat-cell *matCellDef="let element">{{element.companyName}}</td>
</ng-container>
<ng-container matColumnDef="people">
<th mat-header-cell *matHeaderCellDef>创建人</th>
<td mat-cell *matCellDef="let element">{{element.committerOrganizationName}}</td>
</ng-container>
<ng-container matColumnDef="time">
<th mat-header-cell *matHeaderCellDef>创建时间</th>
<td mat-cell *matCellDef="let element">{{element.creationTime | date:'yyyy-MM-dd HH:mm'}}</td>
</ng-container>
<ng-container matColumnDef="operate">
<th mat-header-cell *matHeaderCellDef style="width: 200px;">操作</th>
<td mat-cell *matCellDef="let element" class="operate">
<span (click)="look(element)">查看</span>
<span (click)="delete(element)">删除</span>
</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
</table>
<mat-paginator [length]="length" [pageSize]="pageSize" (page)="chagePage($event)">
</mat-paginator>
</div>
</div>

63
src/app/plan-management/plan-deduction/plan-deduction.component.scss

@ -1,63 +0,0 @@
.box {
height: 100%;
overflow: auto;
}
.header {
width: 100%;
box-sizing: border-box;
padding: 20px 30px 8px 30px;
.queryBox {
display: flex;
flex-wrap: wrap;
align-items: center;
.queryField {
display: flex;
align-items: center;
margin-right: 20px;
span {
display: inline-block;
width: 80px;
}
}
.btnbox {
button {
margin-right: 12px;
}
}
}
}
.tablebox {
.add{
margin-left: 30px;
}
table {
width: 100%;
margin-top: 15px;
}
mat-paginator {
width: 100%;
}
}
.mat-header-cell,
.mat-cell {
text-align: center;
}
.operate {
span {
color: #40a9ff;
cursor: pointer;
margin: 0 3px;
}
}

25
src/app/plan-management/plan-deduction/plan-deduction.component.spec.ts

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

180
src/app/plan-management/plan-deduction/plan-deduction.component.ts

@ -1,180 +0,0 @@
import { Component, OnInit, ViewChild } from "@angular/core";
import { HttpClient } from "@angular/common/http";
import { MatPaginator } from "@angular/material/paginator";
import { PageEvent } from "@angular/material/paginator";
import { MatDialog } from "@angular/material/dialog";
import { MatSnackBar } from "@angular/material/snack-bar";
import { DatePipe } from "@angular/common";
import { AddPlanComponent } from "./add-plan/add-plan.component";
@Component({
selector: "app-plan-deduction",
templateUrl: "./plan-deduction.component.html",
styleUrls: ["./plan-deduction.component.scss"],
providers: [DatePipe],
})
export class PlanDeductionComponent implements OnInit {
constructor(
private http: HttpClient,
public dialog: MatDialog,
public snackBar: MatSnackBar,
private datePipe: DatePipe
) {}
//分页
@ViewChild(MatPaginator, { static: true })
pageEvent: PageEvent;
paginator: MatPaginator;
displayedColumns: string[] = [
"planname",
"name",
"people",
"time",
"operate",
];
tabledataSource: any; //表格数据
ngOnInit(): void {
this.getOrganizations();
}
//获得所有组织机构
allorganizations: any; //所有组织机构
getOrganizations() {
this.http.get("/api/Organizations").subscribe((data: any) => {
this.allorganizations = data;
this.getpresentOrganization();
});
}
//得到当前单位所在组织机构的tree型数据
expandKeys = [];
nodes = [];
organizationId;
getpresentOrganization() {
this.allorganizations.forEach((item) => {
item.key = item.id;
item.title = item.name;
item.children = [];
this.allorganizations.forEach((element) => {
if (element.parentId == item.id) {
item.children.push(element);
}
if (item.children.length === 0) {
item.isLeaf = true;
} else {
item.isLeaf = false;
}
});
});
this.http.get("/api/Account/Profiles").subscribe((data: any) => {
this.allorganizations.forEach((item) => {
if (item.name == data.organizationName) {
this.expandKeys = [item.id];
this.organizationId = item.id;
// this.orId = item.id;
this.nodes = [...[item]];
this.getTabledataSource();
}
});
});
}
length: any; //共多少条数据
pageSize: any = 10; //每页条数
PageNumber: any = 1; //第几页
getTabledataSource() {
let params: any = {
Name: this.name || "",
CompanyName: this.companyname || "",
CommitterOrganizationId: this.orId || "",
PlanCategory: 9,
PageNumber: this.PageNumber,
PageSize: this.pageSize,
};
this.http
.get("/api/PlanComponents/GetAll", { params: params })
.subscribe((data: any) => {
console.log("预案数据", data);
this.tabledataSource = data.items;
this.length = data.totalCount;
});
}
//分页事件
chagePage(e) {
this.PageNumber = e.pageIndex + 1;
this.getTabledataSource();
}
name;
companyname;
orId;
time;
//查询
onSubmit() {
this.PageNumber = 1;
this.pageEvent.pageIndex = 0;
this.getTabledataSource();
}
//重置
reset() {
this.name = "";
this.companyname = "";
this.orId = "";
this.onSubmit();
}
add() {
const dialogRef = this.dialog.open(AddPlanComponent, {
width: "400px",
data: this.nodes,
});
dialogRef.afterClosed().subscribe((data) => {
if (data) {
console.log("创建成功", data);
this.onSubmit();
sessionStorage.setItem("planId", data.id);
sessionStorage.setItem("companyId", data.plan.companyId);
sessionStorage.setItem(
"buildingTypeId",
data.plan.company.buildingTypes[0].id
);
sessionStorage.setItem("editable", "1");
let orId = data.plan.company.organizationId;
let orName = data.plan.company.organizationName;
window.open(
`/keyUnit/editunitinfo?id=${data.plan.company.id}&orName=${orName}&orId=${orId}`
);
}
});
}
look(element) {
console.log(element);
sessionStorage.setItem("planId", element.id);
sessionStorage.setItem("companyId", element.companyId);
sessionStorage.setItem(
"buildingTypeId",
element.company.buildingTypes[0].id
);
sessionStorage.setItem("editable", "1");
let orId = element.company.organizationId;
let orName = element.company.organizationName;
window.open(
`/keyUnit/editunitinfo?id=${element.companyId}&orName=${orName}&orId=${orId}`
);
}
delete(element) {
if (confirm("确认删除此预案吗")) {
this.http
.delete(`/api/PlanComponents2D/${element.id}`)
.subscribe((data: any) => {
alert("删除成功");
this.getTabledataSource();
});
}
}
}

6
src/app/plan-management/plan-management-routing.module.ts

@ -20,9 +20,6 @@ import { MaintainUpComponent } from './maintain-up/maintain-up.component'
import { from } from 'rxjs';
import { ReinforcePlanComponent } from './reinforce-plan/reinforce-plan.component';
import { CreatePlanOnlineFiveComponent } from './create-plan-online-five/create-plan-online-five.component';
import { SixFamiliarityComponent } from './six-familiarity/six-familiarity.component';
import { DrillRecordComponent } from './drill-record/drill-record.component';
import { PlanDeductionComponent } from './plan-deduction/plan-deduction.component';
const routes: Routes = [
{ path: 'entryPlan', component: EntryPlanComponent},
@ -38,9 +35,6 @@ const routes: Routes = [
{ path: 'maintainup',component:MaintainUpComponent},//维护更新
{ path: 'reinforceplan',component:ReinforcePlanComponent},//增援预案
{ path: 'createplanonlinefive',component:CreatePlanOnlineFiveComponent},//在线编制五级预案
// { path: 'sixFamiliarity',component:SixFamiliarityComponent},//六熟悉
// { path: 'drillRecord',component:DrillRecordComponent},//演练记录
// { path: 'PlanDeduction',component:PlanDeductionComponent},//预案推演
];
@NgModule({

261
src/app/plan-management/plan-management.module.ts

@ -1,163 +1,88 @@
import { NgModule } from "@angular/core";
import { CommonModule } from "@angular/common";
import { PlanManagementRoutingModule } from "./plan-management-routing.module";
import { ReactiveFormsModule, FormsModule } from "@angular/forms";
import { A11yModule } from "@angular/cdk/a11y";
import { DragDropModule } from "@angular/cdk/drag-drop";
import { PortalModule } from "@angular/cdk/portal";
import { ScrollingModule } from "@angular/cdk/scrolling";
import { CdkStepperModule } from "@angular/cdk/stepper";
import { CdkTableModule } from "@angular/cdk/table";
import { CdkTreeModule } from "@angular/cdk/tree";
import { MatAutocompleteModule } from "@angular/material/autocomplete";
import { MatBadgeModule } from "@angular/material/badge";
import { MatBottomSheetModule } from "@angular/material/bottom-sheet";
import { MatButtonModule } from "@angular/material/button";
import { MatButtonToggleModule } from "@angular/material/button-toggle";
import { MatCardModule } from "@angular/material/card";
import { MatCheckboxModule } from "@angular/material/checkbox";
import { MatChipsModule } from "@angular/material/chips";
import { MatStepperModule } from "@angular/material/stepper";
import { MatDatepickerModule } from "@angular/material/datepicker";
import { MatDialogModule } from "@angular/material/dialog";
import { MatDividerModule } from "@angular/material/divider";
import { MatExpansionModule } from "@angular/material/expansion";
import { MatGridListModule } from "@angular/material/grid-list";
import { MatIconModule } from "@angular/material/icon";
import { MatInputModule } from "@angular/material/input";
import { MatListModule } from "@angular/material/list";
import { MatMenuModule } from "@angular/material/menu";
import { MatNativeDateModule, MatRippleModule } from "@angular/material/core";
import { MatPaginatorModule } from "@angular/material/paginator";
import { MatProgressBarModule } from "@angular/material/progress-bar";
import { MatProgressSpinnerModule } from "@angular/material/progress-spinner";
import { MatRadioModule } from "@angular/material/radio";
import { MatSelectModule } from "@angular/material/select";
import { MatSidenavModule } from "@angular/material/sidenav";
import { MatSliderModule } from "@angular/material/slider";
import { MatSlideToggleModule } from "@angular/material/slide-toggle";
import { MatSnackBarModule } from "@angular/material/snack-bar";
import { MatSortModule } from "@angular/material/sort";
import { MatTableModule } from "@angular/material/table";
import { MatTabsModule } from "@angular/material/tabs";
import { MatToolbarModule } from "@angular/material/toolbar";
import { MatTooltipModule } from "@angular/material/tooltip";
import { MatTreeModule } from "@angular/material/tree";
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { PlanManagementRoutingModule } from './plan-management-routing.module';
import { ReactiveFormsModule, FormsModule } from '@angular/forms';
import { A11yModule } from '@angular/cdk/a11y';
import { DragDropModule } from '@angular/cdk/drag-drop';
import { PortalModule } from '@angular/cdk/portal';
import { ScrollingModule } from '@angular/cdk/scrolling';
import { CdkStepperModule } from '@angular/cdk/stepper';
import { CdkTableModule } from '@angular/cdk/table';
import { CdkTreeModule } from '@angular/cdk/tree';
import { MatAutocompleteModule } from '@angular/material/autocomplete';
import { MatBadgeModule } from '@angular/material/badge';
import { MatBottomSheetModule } from '@angular/material/bottom-sheet';
import { MatButtonModule } from '@angular/material/button';
import { MatButtonToggleModule } from '@angular/material/button-toggle';
import { MatCardModule } from '@angular/material/card';
import { MatCheckboxModule } from '@angular/material/checkbox';
import { MatChipsModule } from '@angular/material/chips';
import { MatStepperModule } from '@angular/material/stepper';
import { MatDatepickerModule } from '@angular/material/datepicker';
import { MatDialogModule } from '@angular/material/dialog';
import { MatDividerModule } from '@angular/material/divider';
import { MatExpansionModule } from '@angular/material/expansion';
import { MatGridListModule } from '@angular/material/grid-list';
import { MatIconModule } from '@angular/material/icon';
import { MatInputModule } from '@angular/material/input';
import { MatListModule } from '@angular/material/list';
import { MatMenuModule } from '@angular/material/menu';
import { MatNativeDateModule, MatRippleModule } from '@angular/material/core';
import { MatPaginatorModule } from '@angular/material/paginator';
import { MatProgressBarModule } from '@angular/material/progress-bar';
import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
import { MatRadioModule } from '@angular/material/radio';
import { MatSelectModule } from '@angular/material/select';
import { MatSidenavModule } from '@angular/material/sidenav';
import { MatSliderModule } from '@angular/material/slider';
import { MatSlideToggleModule } from '@angular/material/slide-toggle';
import { MatSnackBarModule } from '@angular/material/snack-bar';
import { MatSortModule } from '@angular/material/sort';
import { MatTableModule } from '@angular/material/table';
import { MatTabsModule } from '@angular/material/tabs';
import { MatToolbarModule } from '@angular/material/toolbar';
import { MatTooltipModule } from '@angular/material/tooltip';
import { MatTreeModule } from '@angular/material/tree';
import { EntryPlanComponent } from './entry-plan/entry-plan.component';
import { PassPlanComponent, UnitInfo } from './pass-plan/pass-plan.component';
import { OpenPlanComponent } from './open-plan/open-plan.component';
import { EntryPlanLookComponent, AddPlanone, DownloadFile, AuditResult, ChangeName, ImgDetails } from './entry-plan-look/entry-plan-look.component';
import { PlanType, AuditSatus, PlanLevel, state } from '../pipes/boolean.pipe';
import { WebLookComponent } from './web-look/web-look.component';
import { OnetwoEntryPlanComponent } from './onetwo-entry-plan/onetwo-entry-plan.component';
import { newunitComponent } from './onetwo-entry-plan/onetwo-entry-plan.component';
import { MeetPlanComponent } from './meet-plan/meet-plan.component';
import { newunitMeet } from './meet-plan/meet-plan.component';
import { TypePlanComponent } from './type-plan/type-plan.component';
import { newunitType } from './type-plan/type-plan.component';
import { PsViewer } from './entry-plan-look/entry-plan-look.component'
import { onetwoAuditResult } from './onetwo-entry-plan/onetwo-entry-plan.component';
import { meetAuditResult } from './meet-plan/meet-plan.component';
import { typeAuditResult } from './type-plan/type-plan.component';
import { MaintainUpComponent } from './maintain-up/maintain-up.component'
import { GkPsViewer } from './pass-plan/pass-plan.component'
import { GkhtmlPsViewer } from './open-plan/open-plan.component';
import { ReinforcePlanComponent } from './reinforce-plan/reinforce-plan.component';
import { CreatePlanOnlineFiveComponent, OpenPlanToolDialog } from './create-plan-online-five/create-plan-online-five.component';
import { CreatePlanOnlineThreeComponent } from './create-plan-online-three/create-plan-online-three.component'
import { UiModule } from '../ui/ui.module';
import { TreeDiagramModule } from '../ui/ng-tree-diagram/src/ng-tree-diagram';
import { KeyUnitModule } from '../key-unit/key-unit.module';
import { yinYong } from './create-plan-online-five/create-plan-online-five.component'
import { newTitle } from './create-plan-online-five/create-plan-online-five.component'
import { disaster } from './create-plan-online-five/create-plan-online-five.component'
import { updataHl } from './create-plan-online-five/create-plan-online-five.component'
import {ChangeUrl} from './entry-plan-look/entry-plan-look.component'
import {adddwsurveys} from './create-plan-online-five/create-plan-online-five.component'
import { editUpload } from './entry-plan-look/entry-plan-look.component'
import { wenbenUpload } from './entry-plan-look/entry-plan-look.component'
import { EntryPlanComponent } from "./entry-plan/entry-plan.component";
import { PassPlanComponent, UnitInfo } from "./pass-plan/pass-plan.component";
import { OpenPlanComponent } from "./open-plan/open-plan.component";
import {
EntryPlanLookComponent,
AddPlanone,
DownloadFile,
AuditResult,
ChangeName,
ImgDetails,
} from "./entry-plan-look/entry-plan-look.component";
import {
PlanType,
AuditSatus,
PlanLevel,
state,
auditState,
} from "../pipes/boolean.pipe";
import { WebLookComponent } from "./web-look/web-look.component";
import { OnetwoEntryPlanComponent } from "./onetwo-entry-plan/onetwo-entry-plan.component";
import { newunitComponent } from "./onetwo-entry-plan/onetwo-entry-plan.component";
import { MeetPlanComponent } from "./meet-plan/meet-plan.component";
import { newunitMeet } from "./meet-plan/meet-plan.component";
import { TypePlanComponent } from "./type-plan/type-plan.component";
import { newunitType } from "./type-plan/type-plan.component";
import { PsViewer } from "./entry-plan-look/entry-plan-look.component";
import { onetwoAuditResult } from "./onetwo-entry-plan/onetwo-entry-plan.component";
import { meetAuditResult } from "./meet-plan/meet-plan.component";
import { typeAuditResult } from "./type-plan/type-plan.component";
import { MaintainUpComponent } from "./maintain-up/maintain-up.component";
import { GkPsViewer } from "./pass-plan/pass-plan.component";
import { GkhtmlPsViewer } from "./open-plan/open-plan.component";
import { ReinforcePlanComponent } from "./reinforce-plan/reinforce-plan.component";
import {
CreatePlanOnlineFiveComponent,
OpenPlanToolDialog,
} from "./create-plan-online-five/create-plan-online-five.component";
import { CreatePlanOnlineThreeComponent } from "./create-plan-online-three/create-plan-online-three.component";
import { UiModule } from "../ui/ui.module";
import { TreeDiagramModule } from "../ui/ng-tree-diagram/src/ng-tree-diagram";
import { KeyUnitModule } from "../key-unit/key-unit.module";
import { yinYong } from "./create-plan-online-five/create-plan-online-five.component";
import { newTitle } from "./create-plan-online-five/create-plan-online-five.component";
import { disaster } from "./create-plan-online-five/create-plan-online-five.component";
import { updataHl } from "./create-plan-online-five/create-plan-online-five.component";
import { ChangeUrl } from "./entry-plan-look/entry-plan-look.component";
import { adddwsurveys } from "./create-plan-online-five/create-plan-online-five.component";
import { editUpload } from "./entry-plan-look/entry-plan-look.component";
import { wenbenUpload } from "./entry-plan-look/entry-plan-look.component";
import { EditPlanCategoryComponent } from "./entry-plan-look/edit-plan-category/edit-plan-category.component";
import { SixFamiliarityComponent } from "./six-familiarity/six-familiarity.component";
import { DrillRecordComponent } from "./drill-record/drill-record.component";
import { NzDatePickerModule } from "ng-zorro-antd/date-picker";
import { NzInputModule } from "ng-zorro-antd/input";
import { NzButtonModule } from "ng-zorro-antd/button";
import { NzTreeSelectModule } from "ng-zorro-antd/tree-select";
import { SixFamiliarizeComponent } from "./entry-plan-look/six-familiarize/six-familiarize.component";
import { PlanDeductionComponent } from "./plan-deduction/plan-deduction.component";
import { AddPlanComponent } from "./plan-deduction/add-plan/add-plan.component";
import { NzSelectModule } from "ng-zorro-antd/select";
import { NzSpinModule } from "ng-zorro-antd/spin";
import { OpenOrComponent } from "./pass-plan/open-or/open-or.component";
import { NzTreeModule } from "ng-zorro-antd/tree";
@NgModule({
declarations: [
EntryPlanComponent,
PassPlanComponent,
OpenPlanComponent,
EntryPlanLookComponent,
AddPlanone,
PlanType,
AuditSatus,
PlanLevel,
DownloadFile,
AuditResult,
ChangeName,
WebLookComponent,
OnetwoEntryPlanComponent,
newunitComponent,
MeetPlanComponent,
newunitMeet,
TypePlanComponent,
newunitType,
PsViewer,
onetwoAuditResult,
meetAuditResult,
typeAuditResult,
MaintainUpComponent,
GkPsViewer,
GkhtmlPsViewer,
UnitInfo,
ReinforcePlanComponent,
state,
ImgDetails,
CreatePlanOnlineFiveComponent,
CreatePlanOnlineThreeComponent,
OpenPlanToolDialog,
yinYong,
newTitle,
disaster,
updataHl,
ChangeUrl,
adddwsurveys,
editUpload,
wenbenUpload,
EditPlanCategoryComponent,
SixFamiliarityComponent,
DrillRecordComponent,
SixFamiliarizeComponent,
PlanDeductionComponent,
AddPlanComponent,
OpenOrComponent,
auditState,
],
declarations: [EntryPlanComponent, PassPlanComponent, OpenPlanComponent, EntryPlanLookComponent, AddPlanone, PlanType, AuditSatus, PlanLevel, DownloadFile, AuditResult, ChangeName,
WebLookComponent, OnetwoEntryPlanComponent, newunitComponent, MeetPlanComponent, newunitMeet, TypePlanComponent, newunitType, PsViewer, onetwoAuditResult, meetAuditResult,
typeAuditResult, MaintainUpComponent, GkPsViewer, GkhtmlPsViewer, UnitInfo, ReinforcePlanComponent, state, ImgDetails, CreatePlanOnlineFiveComponent, CreatePlanOnlineThreeComponent,
OpenPlanToolDialog,yinYong,newTitle,disaster,updataHl,ChangeUrl,adddwsurveys,editUpload,wenbenUpload],
imports: [
CommonModule,
PlanManagementRoutingModule,
@ -207,22 +132,8 @@ import { NzTreeModule } from "ng-zorro-antd/tree";
MatTreeModule,
UiModule,
TreeDiagramModule,
KeyUnitModule,
NzDatePickerModule,
NzInputModule,
NzButtonModule,
NzTreeSelectModule,
NzSelectModule,
NzSpinModule,
NzTreeModule,
],
exports: [
PlanType,
AuditSatus,
PlanLevel,
state,
CreatePlanOnlineFiveComponent,
auditState,
KeyUnitModule
],
exports: [PlanType, AuditSatus, PlanLevel, state]
})
export class PlanManagementModule {}
export class PlanManagementModule { }

222
src/app/plan-management/reinforce-plan/reinforce-plan.component.html

@ -2,47 +2,47 @@
<div class="header">
<form (ngSubmit)="onSubmit(form.value)" #form="ngForm">
<div class="queryBox">
<div class="queryField">
<label style="margin-right: 10px;">单位名称:</label>
<mat-form-field class="example-full-width">
<input matInput placeholder="请输入单位名称" name="companyName" [(ngModel)]="companyName" autocomplete="off">
</mat-form-field>
</div>
<div class="queryField ordiv">
<label style="margin-right: 10px;">消防救援站:</label>
<mat-form-field class="example-full-width">
<input readonly matInput placeholder="请选择消防救援站" autocomplete="off" [(ngModel)]="js" name="js"
(focus)="openorganizationbox()">
<input readonly matInput placeholder="请选择消防救援站" autocomplete="off" [(ngModel)]="js" name="js" (focus)="openorganizationbox()">
</mat-form-field>
<mat-checkbox style="margin-left: 6px;" [(ngModel)]="jscheck" name="jscheck">包含下级</mat-checkbox>
<span *ngIf="padMore" style="margin-left: 10px; color: #0080FF;" (click)='padInfo()'>更多筛选条件<img
[src]='imgsrcopen'> </span>
<span *ngIf="padput" style="margin-left: 10px; color: #0080FF;" (click)='padInfo()'>收起<img [src]='imgsrcdown'>
</span>
<span *ngIf="padMore" style="margin-left: 10px; color: #0080FF;" (click)='padInfo()'>更多筛选条件<img [src]='imgsrcopen'> </span>
<span *ngIf="padput" style="margin-left: 10px; color: #0080FF;" (click)='padInfo()'>收起<img [src]='imgsrcdown'> </span>
<div class="organizationbox" *ngIf="isorganizationbox">
<div (click)="closediv()" class="closediv"><mat-icon>clear</mat-icon></div>
<mat-tree [dataSource]="dataSource" [treeControl]="treeControl">
<mat-tree-node *matTreeNodeDef="let node" matTreeNodePadding (click)='add(node)' class="organizationlist">
<button type="button" mat-icon-button disabled></button>
<li>{{node.name}}</li>
</mat-tree-node>
<mat-tree-node *matTreeNodeDef="let node;when: hasChild" matTreeNodePadding (click)='add(node)'
class="organizationlist">
<button type="button" mat-icon-button matTreeNodeToggle [attr.aria-label]="'toggle ' + node.name">
<mat-icon class="mat-icon-rtl-mirror">
{{treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right'}}
</mat-icon>
</button>
<li>{{node.name}}</li>
</mat-tree-node>
</mat-tree>
<div (click)="closediv()" class="closediv"><mat-icon>clear</mat-icon></div>
<mat-tree [dataSource]="dataSource" [treeControl]="treeControl">
<mat-tree-node *matTreeNodeDef="let node" matTreeNodePadding (click)='add(node)' class="organizationlist">
<button type="button" mat-icon-button disabled ></button>
<li>{{node.name}}</li>
</mat-tree-node>
<mat-tree-node *matTreeNodeDef="let node;when: hasChild" matTreeNodePadding (click)='add(node)' class="organizationlist">
<button
type="button"
mat-icon-button
matTreeNodeToggle
[attr.aria-label]="'toggle ' + node.name">
<mat-icon class="mat-icon-rtl-mirror">
{{treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right'}}
</mat-icon>
</button>
<li>{{node.name}}</li>
</mat-tree-node>
</mat-tree>
</div>
</div>
<div class="queryField" *ngIf="!pcfind">
<button mat-raised-button color="primary">查询</button>
<button mat-raised-button style="margin-left: 25px;" type="button" (click)="reset()">重置</button>
<button mat-raised-button style="margin-left: 25px;" type="button" (click)="reset()">重置</button>
</div>
<div class="queryField" *ngIf="!padMore">
<label style="margin-right: 10px;">编制级别:</label>
@ -58,14 +58,14 @@
<mat-checkbox style="margin-left: 6px;" [(ngModel)]="plcheck" name="plcheck">包含下级</mat-checkbox>
</div>
<div class="queryField" *ngIf="!padMore">
<label style="margin-right: 10px;">单位类型:</label>
<mat-form-field>
<mat-select placeholder='请选择单位类型' [(ngModel)]="unittype" name="unittype">
<mat-option *ngFor="let unit of allunittype" [value]="unit.id">
{{unit.name}}
</mat-option>
</mat-select>
</mat-form-field>
<label style="margin-right: 10px;">单位类型:</label>
<mat-form-field>
<mat-select placeholder='请选择单位类型' [(ngModel)]="unittype" name="unittype">
<mat-option *ngFor="let unit of allunittype" [value]="unit.id" >
{{unit.name}}
</mat-option>
</mat-select>
</mat-form-field>
</div>
<div class="queryField" *ngIf="!padMore">
<label style="margin-right: 10px;">预案类型:</label>
@ -80,96 +80,100 @@
</div>
<div class="queryField" *ngIf="!padMore">
<label style="margin-right: 10px;">单位状态:</label>
<mat-form-field>
<mat-select placeholder='请选择单位状态' [(ngModel)]="IsNewCompanyData" name="IsNewCompanyData">
<mat-form-field>
<mat-select placeholder='请选择单位状态' [(ngModel)]="IsNewCompanyData" name="IsNewCompanyData">
<mat-option value='true'>新增</mat-option>
<mat-option value="false">维护更新</mat-option>
</mat-select>
</mat-form-field>
</mat-select>
</mat-form-field>
</div>
<div class="queryField" *ngIf="!padMore">
<label style="margin-right: 10px;">预案状态:</label>
<mat-form-field>
<mat-select placeholder='请选择预案状态' [(ngModel)]="IsNewData" name="IsNewData">
<mat-form-field>
<mat-select placeholder='请选择预案状态' [(ngModel)]="IsNewData" name="IsNewData">
<mat-option value='true'>新增</mat-option>
<mat-option value="false">维护更新</mat-option>
</mat-select>
</mat-form-field>
</mat-select>
</mat-form-field>
</div>
<div class="queryField" style="width: 100%;text-align: center;" *ngIf="pcfind">
<button mat-raised-button color="primary" type="submit">查询</button>
<button mat-raised-button style="margin-left: 25px;" type="button" (click)="reset()">重置</button>
</div>
</div>
</div>
</form>
</div>
<!-- <mat-divider></mat-divider> -->
<div class="body">
</div>
<!-- <mat-divider></mat-divider> -->
<div class="body">
<div class="tablebox">
<table mat-table [dataSource]="tabledataSource" class="mat-elevation-z8">
<ng-container matColumnDef="state">
<th mat-header-cell *matHeaderCellDef style="width: 10%;">预案状态</th>
<td mat-cell *matCellDef="let element">
<span class="add" *ngIf="element.isNewData">新增</span>
<span class="weihu" *ngIf="!element.isNewData">维护更新</span>
</td>
</ng-container>
<ng-container matColumnDef="unitname">
<th mat-header-cell *matHeaderCellDef>单位名称</th>
<td mat-cell *matCellDef="let element">{{element.companyName}}</td>
</ng-container>
<ng-container matColumnDef="planname">
<th mat-header-cell *matHeaderCellDef>预案名称</th>
<td mat-cell *matCellDef="let element">{{element.name}}</td>
</ng-container>
<ng-container matColumnDef="addpeople">
<th mat-header-cell *matHeaderCellDef>添加人</th>
<td mat-cell *matCellDef="let element">{{element.creatorName}}</td>
</ng-container>
<ng-container matColumnDef="level">
<th mat-header-cell *matHeaderCellDef>预案级别</th>
<td mat-cell *matCellDef="let element">{{element.planCategory==1?'Ⅰ级预案':element.planCategory==2?'Ⅱ级预案':
element.planCategory==3?'Ⅲ级预案':element.planCategory==4?'Ⅳ级预案':element.planCategory==5?'Ⅴ级预案':element.planCategory==8?'类型预案':'应急预案'}}
</td>
</ng-container>
<ng-container matColumnDef="addtime">
<th mat-header-cell *matHeaderCellDef>添加时间</th>
<td mat-cell *matCellDef="let element">{{element.creationTime | date:'yyyy-MM-dd'}}</td>
<table mat-table [dataSource]="tabledataSource" class="mat-elevation-z8">
<ng-container matColumnDef="state">
<th mat-header-cell *matHeaderCellDef style="width: 10%;">预案状态</th>
<td mat-cell *matCellDef="let element">
<span class="add" *ngIf="element.isNewData">新增</span>
<span class="weihu" *ngIf="!element.isNewData">维护更新</span>
</td>
</ng-container>
<ng-container matColumnDef="plantype">
<th mat-header-cell *matHeaderCellDef>预案类型</th>
<td mat-cell *matCellDef="let element">二维预案</td>
</ng-container>
<ng-container matColumnDef="auditstate">
<th mat-header-cell *matHeaderCellDef>审核状态</th>
<td mat-cell *matCellDef="let element">
{{element.auditStatus | auditState}}
</td>
</ng-container>
<ng-container matColumnDef="openRange">
<th mat-header-cell *matHeaderCellDef>是否公开</th>
<td mat-cell *matCellDef="let element">{{element.openRange}}</td>
</ng-container>
<ng-container matColumnDef="projectlevel">
<th mat-header-cell *matHeaderCellDef>编制级别</th>
<td mat-cell *matCellDef="let element">{{element.planLevel | planlevel}}</td>
</ng-container>
<ng-container matColumnDef="operation">
<th mat-header-cell *matHeaderCellDef>操作</th>
<td mat-cell *matCellDef="let element">
<span style="color: blue;cursor: pointer;" (click)="openPlan(element)">查看预案</span>
</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
</table>
<mat-paginator [length]="length" [pageSize]="pageSize" [pageSizeOptions]="pageSizeOptions"
(page)="chagePage($event)">
</mat-paginator>
<ng-container matColumnDef="unitname">
<th mat-header-cell *matHeaderCellDef>单位名称</th>
<td mat-cell *matCellDef="let element">{{element.companyName}}</td>
</ng-container>
<ng-container matColumnDef="planname">
<th mat-header-cell *matHeaderCellDef>预案名称</th>
<td mat-cell *matCellDef="let element">{{element.name}}</td>
</ng-container>
<ng-container matColumnDef="addpeople">
<th mat-header-cell *matHeaderCellDef>添加人</th>
<td mat-cell *matCellDef="let element">{{element.creatorName}}</td>
</ng-container>
<ng-container matColumnDef="level">
<th mat-header-cell *matHeaderCellDef>预案级别</th>
<td mat-cell *matCellDef="let element">{{element.planCategory==1?'Ⅰ级预案':element.planCategory==2?'Ⅱ级预案':
element.planCategory==3?'Ⅲ级预案':element.planCategory==4?'Ⅳ级预案':element.planCategory==5?'Ⅴ级预案':element.planCategory==8?'类型预案':'应急预案'}}</td>
</ng-container>
<ng-container matColumnDef="addtime">
<th mat-header-cell *matHeaderCellDef>添加时间</th>
<td mat-cell *matCellDef="let element">{{element.creationTime | date:'yyyy-MM-dd'}}</td>
</ng-container>
<ng-container matColumnDef="plantype">
<th mat-header-cell *matHeaderCellDef>预案类型</th>
<td mat-cell *matCellDef="let element">二维预案</td>
</ng-container>
<ng-container matColumnDef="auditStatus">
<th mat-header-cell *matHeaderCellDef>新增审核</th>
<td mat-cell *matCellDef="let element">{{element.newVerifyState}}</td>
</ng-container>
<ng-container matColumnDef="weihuStatus">
<th mat-header-cell *matHeaderCellDef>维护审核</th>
<td mat-cell *matCellDef="let element">{{element.maintenanceVerifyState}}</td>
</ng-container>
<ng-container matColumnDef="openRange">
<th mat-header-cell *matHeaderCellDef>是否公开</th>
<td mat-cell *matCellDef="let element">{{element.openRange}}</td>
</ng-container>
<ng-container matColumnDef="projectlevel">
<th mat-header-cell *matHeaderCellDef>编制级别</th>
<td mat-cell *matCellDef="let element">{{element.planLevel | planlevel}}</td>
</ng-container>
<ng-container matColumnDef="operation">
<th mat-header-cell *matHeaderCellDef>操作</th>
<td mat-cell *matCellDef="let element">
<span style="color: blue;cursor: pointer;" (click)="openPlan(element)">查看预案</span>
</td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
</table>
<mat-paginator
[length]="length"
[pageSize]="pageSize"
[pageSizeOptions]="pageSizeOptions"
(page)="chagePage($event)">
</mat-paginator>
</div>
</div>
</div>
</div>
</div>

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save