Compare commits

..

7 Commits

  1. 19
      angular.json
  2. 22
      package-lock.json
  3. 2
      package.json
  4. 13
      proxy.config.json
  5. 10
      reset.css
  6. 2
      src/app/app-routing.module.ts
  7. 98
      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. 82
      src/app/external-links-plan/external-links-plan.component.html
  15. 288
      src/app/external-links-plan/external-links-plan.component.ts
  16. 391
      src/app/gis-management/gis-labeling/gis-labeling.component.html
  17. 3905
      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. 145
      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. 253
      src/app/key-unit/fire-fighting-device-look/fire-fighting-device.component.html
  27. 682
      src/app/key-unit/fire-fighting-device-look/fire-fighting-device.component.ts
  28. 801
      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. 1475
      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. 632
      src/app/key-unit/realistic-picture-look/realistic-picture.component.ts
  37. 825
      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. 59
      src/app/plan-audit/plan-audit/plan-audit.component.html
  49. 104
      src/app/plan-audit/plan-pass/plan-pass.component.ts
  50. 450
      src/app/plan-audit/plan-record/plan-record.component.html
  51. 724
      src/app/plan-audit/plan-record/plan-record.component.scss
  52. 480
      src/app/plan-audit/plan-record/plan-record.component.ts
  53. 160
      src/app/plan-audit/wait-examineer/wait-examineer.component.html
  54. 881
      src/app/plan-audit/wait-examineer/wait-examineer.component.scss
  55. 1107
      src/app/plan-audit/wait-examineer/wait-examineer.component.ts
  56. 2
      src/app/plan-audit/water-audit/water-audit.component.ts
  57. 715
      src/app/plan-management/create-plan-online-five/create-plan-online-five.component.html
  58. 3665
      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. 180
      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. 375
      src/app/plan-management/entry-plan-look/entry-plan-look.component.scss
  71. 2763
      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. 40
      src/app/plan-management/entry-plan/entry-plan.component.html
  77. 482
      src/app/plan-management/entry-plan/entry-plan.component.ts
  78. 339
      src/app/plan-management/meet-plan/meet-plan.component.html
  79. 60
      src/app/plan-management/meet-plan/meet-plan.component.ts
  80. 309
      src/app/plan-management/onetwo-entry-plan/onetwo-entry-plan.component.html
  81. 936
      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. 610
      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. 210
      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

19
angular.json

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

22
package-lock.json generated

@ -2055,7 +2055,6 @@
"version": "7.8.3", "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", "resolved": "https://registry.npm.taobao.org/@babel/plugin-proposal-json-strings/download/@babel/plugin-proposal-json-strings-7.8.3.tgz",
"integrity": "sha1-2lIWsjipi1ih4F1oUhBLEPmnDWs=", "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, "dev": true,
"dependencies": { "dependencies": {
"@babel/helper-plugin-utils": "^7.8.3", "@babel/helper-plugin-utils": "^7.8.3",
@ -2069,7 +2068,6 @@
"version": "7.8.3", "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", "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=", "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, "dev": true,
"dependencies": { "dependencies": {
"@babel/helper-plugin-utils": "^7.8.3", "@babel/helper-plugin-utils": "^7.8.3",
@ -2096,7 +2094,6 @@
"version": "7.8.3", "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", "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=", "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, "dev": true,
"dependencies": { "dependencies": {
"@babel/helper-create-regexp-features-plugin": "^7.8.3", "@babel/helper-create-regexp-features-plugin": "^7.8.3",
@ -7968,7 +7965,7 @@
"version": "2.1.0", "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", "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=", "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, "dev": true,
"engines": { "engines": {
"node": ">=4.0" "node": ">=4.0"
@ -7988,7 +7985,6 @@
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npm.taobao.org/debuglog/download/debuglog-1.0.1.tgz", "resolved": "https://registry.npm.taobao.org/debuglog/download/debuglog-1.0.1.tgz",
"integrity": "sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI=", "integrity": "sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI=",
"deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.",
"dev": true, "dev": true,
"engines": { "engines": {
"node": "*" "node": "*"
@ -11818,7 +11814,7 @@
"version": "1.2.13", "version": "1.2.13",
"resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-1.2.13.tgz", "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-1.2.13.tgz",
"integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", "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, "dev": true,
"hasInstallScript": true, "hasInstallScript": true,
"optional": true, "optional": true,
@ -12101,7 +12097,7 @@
"version": "4.5.1", "version": "4.5.1",
"resolved": "https://registry.npm.taobao.org/log4js/download/log4js-4.5.1.tgz", "resolved": "https://registry.npm.taobao.org/log4js/download/log4js-4.5.1.tgz",
"integrity": "sha1-5UNiXpfZ5vPm58n8GW3WqyyuMLU=", "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, "dev": true,
"dependencies": { "dependencies": {
"date-format": "^2.0.0", "date-format": "^2.0.0",
@ -12913,7 +12909,6 @@
"version": "8.0.0", "version": "8.0.0",
"resolved": "https://registry.npm.taobao.org/ngx-perfect-scrollbar/download/ngx-perfect-scrollbar-8.0.0.tgz", "resolved": "https://registry.npm.taobao.org/ngx-perfect-scrollbar/download/ngx-perfect-scrollbar-8.0.0.tgz",
"integrity": "sha1-GcG7+bGjbYmwCmj3g045Qn0pGC8=", "integrity": "sha1-GcG7+bGjbYmwCmj3g045Qn0pGC8=",
"deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.",
"dependencies": { "dependencies": {
"perfect-scrollbar": "^1.4.0", "perfect-scrollbar": "^1.4.0",
"resize-observer-polyfill": "^1.5.0" "resize-observer-polyfill": "^1.5.0"
@ -12934,7 +12929,6 @@
"version": "2.0.2", "version": "2.0.2",
"resolved": "https://registry.npm.taobao.org/node-fetch-npm/download/node-fetch-npm-2.0.2.tgz", "resolved": "https://registry.npm.taobao.org/node-fetch-npm/download/node-fetch-npm-2.0.2.tgz",
"integrity": "sha1-cljJBGGC3KNFtCCO2pGNrzNpf/c=", "integrity": "sha1-cljJBGGC3KNFtCCO2pGNrzNpf/c=",
"deprecated": "This module is not used anymore, npm uses minipass-fetch for its fetch implementation now",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"encoding": "^0.1.11", "encoding": "^0.1.11",
@ -13920,7 +13914,6 @@
"version": "4.0.7", "version": "4.0.7",
"resolved": "https://registry.npm.taobao.org/photo-sphere-viewer/download/photo-sphere-viewer-4.0.7.tgz", "resolved": "https://registry.npm.taobao.org/photo-sphere-viewer/download/photo-sphere-viewer-4.0.7.tgz",
"integrity": "sha1-UPNlOACbVPqi+3S2QCvsFSvnFnc=", "integrity": "sha1-UPNlOACbVPqi+3S2QCvsFSvnFnc=",
"deprecated": "Use @photo-sphere-viewer/core instead, see https://photo-sphere-viewer.js.org/guide/migration.html",
"dependencies": { "dependencies": {
"three": "^0.120.1", "three": "^0.120.1",
"uevent": "~2.0.0" "uevent": "~2.0.0"
@ -14862,7 +14855,6 @@
"version": "5.4.2", "version": "5.4.2",
"resolved": "https://registry.npm.taobao.org/protractor/download/protractor-5.4.2.tgz", "resolved": "https://registry.npm.taobao.org/protractor/download/protractor-5.4.2.tgz",
"integrity": "sha1-Mp7+N/SLIUGrlGd5m+LU0S60jBM=", "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, "dev": true,
"dependencies": { "dependencies": {
"@types/q": "^0.0.32", "@types/q": "^0.0.32",
@ -15360,7 +15352,6 @@
"version": "1.1.0", "version": "1.1.0",
"resolved": "https://registry.npm.taobao.org/readdir-scoped-modules/download/readdir-scoped-modules-1.1.0.tgz", "resolved": "https://registry.npm.taobao.org/readdir-scoped-modules/download/readdir-scoped-modules-1.1.0.tgz",
"integrity": "sha1-jUVAe0+HCg3K68DihnDRjnRRQwk=", "integrity": "sha1-jUVAe0+HCg3K68DihnDRjnRRQwk=",
"deprecated": "This functionality has been moved to @npmcli/fs",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"debuglog": "^1.0.1", "debuglog": "^1.0.1",
@ -16674,7 +16665,6 @@
"version": "1.4.8", "version": "1.4.8",
"resolved": "https://registry.npm.taobao.org/sourcemap-codec/download/sourcemap-codec-1.4.8.tgz", "resolved": "https://registry.npm.taobao.org/sourcemap-codec/download/sourcemap-codec-1.4.8.tgz",
"integrity": "sha1-6oBL2UhXQC5pktBaOO8a41qatMQ=", "integrity": "sha1-6oBL2UhXQC5pktBaOO8a41qatMQ=",
"deprecated": "Please use @jridgewell/sourcemap-codec instead",
"dev": true "dev": true
}, },
"node_modules/spdx-correct": { "node_modules/spdx-correct": {
@ -16913,7 +16903,7 @@
"version": "1.0.6", "version": "1.0.6",
"resolved": "https://registry.npm.taobao.org/streamroller/download/streamroller-1.0.6.tgz", "resolved": "https://registry.npm.taobao.org/streamroller/download/streamroller-1.0.6.tgz",
"integrity": "sha1-gWfYSW7Z8Z8F7ksVjZYRMhuMrNk=", "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, "dev": true,
"dependencies": { "dependencies": {
"async": "^2.6.2", "async": "^2.6.2",
@ -18388,7 +18378,7 @@
"version": "1.2.13", "version": "1.2.13",
"resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-1.2.13.tgz", "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-1.2.13.tgz",
"integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", "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, "dev": true,
"hasInstallScript": true, "hasInstallScript": true,
"optional": true, "optional": true,
@ -18731,7 +18721,7 @@
"version": "1.2.13", "version": "1.2.13",
"resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-1.2.13.tgz", "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-1.2.13.tgz",
"integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", "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, "dev": true,
"hasInstallScript": true, "hasInstallScript": true,
"optional": true, "optional": true,

2
package.json

@ -3,7 +3,7 @@
"version": "0.0.0", "version": "0.0.0",
"scripts": { "scripts": {
"ng": "ng", "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": "ng build",
"build-prod": "node --max_old_space_size=5048 ./node_modules/@angular/cli/bin/ng build --prod", "build-prod": "node --max_old_space_size=5048 ./node_modules/@angular/cli/bin/ng build --prod",
"publish": "ng build --prod --verbose", "publish": "ng build --prod --verbose",

13
proxy.config.json

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

10
reset.css

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

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

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

98
src/app/app.component.ts

@ -1,60 +1,60 @@
import { Component, Inject, Injector } from "@angular/core"; import { Component, Inject, Injector } from '@angular/core';
import { HttpClient } from "@angular/common/http"; import { HttpClient } from '@angular/common/http'
import { Data } from "./interface"; import { Data } from './interface'
import { Router, ActivatedRoute } from "@angular/router"; import { Router, ActivatedRoute } from '@angular/router'
import { CacheTokenService } from "./http-interceptors/cache-token.service"; //引入服务 import { CacheTokenService } from './http-interceptors/cache-token.service'//引入服务
import { MaskLayerService } from "./mask-layer.service"; import { MaskLayerService } from './mask-layer.service';
import * as global from "globals"; import * as global from 'globals';
@Component({ @Component({
selector: "app-root", selector: 'app-root',
templateUrl: "./app.component.html", templateUrl: './app.component.html',
styleUrls: ["./app.component.scss"], styleUrls: ['./app.component.scss']
}) })
export class AppComponent { 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"); constructor(private maskLayerService: MaskLayerService, private http: HttpClient, private router: Router, public token: CacheTokenService, private injector: Injector) {
global.injector = injector;
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"
);
} }
if (sessionStorage.getItem("token") && !this.token.timer) { isMaskLayerShow: boolean = false
//调用服务中的function刷新token
this.token.startUp(); 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 { BrowserModule } from '@angular/platform-browser';
import { NgModule } from "@angular/core"; import { NgModule } from '@angular/core';
import { AppRoutingModule } from "./app-routing.module"; import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from "./app.component"; import { AppComponent } from './app.component';
import { BrowserAnimationsModule } from "@angular/platform-browser/animations"; import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { MatButtonModule } from "@angular/material/button"; import { MatButtonModule } from '@angular/material/button';
import { MatCheckboxModule } from "@angular/material/checkbox"; import { MatCheckboxModule } from '@angular/material/checkbox';
import { MatIconModule } from "@angular/material/icon"; import { MatIconModule } from '@angular/material/icon';
import { MatSidenavModule } from "@angular/material/sidenav"; import { MatSidenavModule } from '@angular/material/sidenav';
import { NavigationModule } from "./navigation/navigation.module"; import { NavigationModule } from './navigation/navigation.module';
import { HomeComponent } from "./home/home.component"; import { HomeComponent } from './home/home.component';
import { TabbarComponent } from "./tabbar/tabbar.component"; import { TabbarComponent } from './tabbar/tabbar.component';
import { PagesModule } from "./pages/pages.module"; import { PagesModule } from './pages/pages.module';
import { FormsModule } from "@angular/forms"; import { FormsModule } from '@angular/forms';
import { UiModule } from "./ui/ui.module"; import { UiModule } from './ui/ui.module';
import { HttpClientModule } from "@angular/common/http"; import { HttpClientModule } from '@angular/common/http';
import { httpInterceptorProviders } from "./http-interceptors/index"; import { httpInterceptorProviders } from './http-interceptors/index'
import { CacheTokenService } from "./http-interceptors/cache-token.service"; import { CacheTokenService } from './http-interceptors/cache-token.service'
import { TreeService } from "./http-interceptors/tree.service"; import { TreeService } from './http-interceptors/tree.service';
import { MTokenK1Component } from "./m-token-k1/m-token-k1.component"; //K1秘钥 import { MTokenK1Component } from './m-token-k1/m-token-k1.component' //K1秘钥
import { CountdownModule } from "ngx-countdown"; //倒计时插件 import { CountdownModule } from 'ngx-countdown'; //倒计时插件
import { GISManagementModule } from "./gis-management/gis-management.module"; import { GISManagementModule } from './gis-management/gis-management.module';
import { DataCollectionModule } from "./data-collection/data-collection.module"; import { DataCollectionModule } from './data-collection/data-collection.module';
import { MatProgressSpinnerModule } from "@angular/material/progress-spinner"; import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
import { TestComponent } from "./test/test.component"; import { TestComponent } from './test/test.component';
import { ExternalLinksPlanComponent } from "./external-links-plan/external-links-plan.component"; import { ExternalLinksPlanComponent } from './external-links-plan/external-links-plan.component';
import { SearchDownList } from "../modules/map/declare/component/SearchDownListPlugins/SearchDownList"; import { SearchDownList } from '../modules/map/declare/component/SearchDownListPlugins/SearchDownList';
import { ExportExcelComponent } from "./export-excel/export-excel.component"; 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);
@NgModule({ @NgModule({
declarations: [ declarations: [
AppComponent, AppComponent,
HomeComponent, HomeComponent,
MTokenK1Component, MTokenK1Component,
TestComponent, TestComponent,
ExternalLinksPlanComponent, ExternalLinksPlanComponent,
SearchDownList, SearchDownList,
ExportExcelComponent, ExportExcelComponent
], ],
imports: [ imports: [
BrowserModule, BrowserModule,
AppRoutingModule, AppRoutingModule,
BrowserAnimationsModule, BrowserAnimationsModule,
MatButtonModule, MatButtonModule,
MatCheckboxModule, MatCheckboxModule,
MatSidenavModule, MatSidenavModule,
NavigationModule, NavigationModule,
MatIconModule, MatIconModule,
PagesModule, PagesModule,
FormsModule, FormsModule,
HttpClientModule, HttpClientModule,
CountdownModule, CountdownModule,
GISManagementModule, GISManagementModule,
DataCollectionModule, DataCollectionModule,
MatProgressSpinnerModule, MatProgressSpinnerModule,
UiModule, UiModule
KeyUnitModule, ],
MatTabsModule, providers: [httpInterceptorProviders, CacheTokenService, TreeService],
PlanManagementModule, bootstrap: [AppComponent]
],
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 { Injectable } from "@angular/core"; import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, Router } from '@angular/router';
import {
CanActivate,
ActivatedRouteSnapshot,
RouterStateSnapshot,
Router,
} from "@angular/router";
@Injectable({ @Injectable({
providedIn: "root", providedIn: 'root'
}) })
export class AuthGuard implements CanActivate { export class AuthGuard implements CanActivate {
constructor(private http: HttpClient, private router: Router) {}
// 路由守卫 constructor(private router: Router) {
async canActivate(
next: ActivatedRouteSnapshot,
state: RouterStateSnapshot
): Promise<boolean> {
console.log("next", next);
console.log("state", state);
if (
next.queryParams.singleSignOn &&
next.queryParams.singleSignOn === "true"
) {
//执行自动登录逻辑
await this.onSubmit();
} }
return this.checkLogin();
}
checkLogin(): boolean { // 路由守卫
// 判断本地有没有token canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
const token = sessionStorage.getItem("token");
// 如果有token,允许访问 return this.checkLogin();
if (token) {
return true;
} }
//如果没有token,跳转登录页 checkLogin(): boolean {
this.router.navigate(["/login"]);
return false;
}
onSubmit() { // 判断本地有没有token
return new Promise<void>((resolve, reject) => { const token = sessionStorage.getItem('token');
this.http
.post("/api/Account/SignIn", { // 如果有token,允许访问
name: "superadmin", if (token) { return true; }
password: "SHya119!@",
}) //如果没有token,跳转登录页
.subscribe( this.router.navigate(['/login']);
(data: any) => { return false;
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();
}
);
});
}
} }

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

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

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

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

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

@ -1,73 +1,11 @@
<mat-tab-group *ngIf="planId" selectedIndex="10" style="height: 99%;"> <!-- 株洲项目:传入预案id显示相应预案 -->
<mat-tab label="1.基本信息"> <div *ngIf="showType == 0">
<ng-template matTabContent> <iframe id="inneriframe" [src]='iframeSrc' frameborder="0" style="width: 100%;height: 100%;"></iframe>
<app-basicinfo-look></app-basicinfo-look> </div>
</ng-template> <div *ngIf="showType == 1" id="viewer"></div>
</mat-tab> <div *ngIf="showType == 2">
<mat-tab label="2.四周毗邻"> <iframe id="inneriframe2" [src]='threedUrl' frameborder="0" style="width: 100%;height: 100%;"></iframe>
<ng-template matTabContent> </div>
<app-allaround></app-allaround> <div *ngIf="showType == 3">
</ng-template> <app-collection-tools></app-collection-tools>
</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> </div>

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

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

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

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

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

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

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

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

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

145
src/app/interface.ts

@ -7,96 +7,87 @@
* @LastEditTime: 2021-04-09 17:12:59 * @LastEditTime: 2021-04-09 17:12:59
*/ */
export interface Data { export interface Data {
token: string; token:string,
refreshToken: string; refreshToken:string,
expires: number; expires: number,
realName: string; realName:string,
level: any; level:any,
isDefaultPassword: string; isDefaultPassword:string
} }
export interface windows { export interface windows {
token: string; token:string
} }
export enum isno { export enum isno {
"是", "是",
"否", "否"
} }
export enum PlanTypeEnum { export enum PlanTypeEnum {
"zero", "zero",
"二维预案", "二维预案",
"三维预案", "三维预案",
"three", "three",
"其他预案", "其他预案",
"five", "five",
"six", "six",
"seven", "seven",
"卡片预案", "卡片预案",
"none", "none",
"teen", "teen",
"shiyi", "shiyi",
"shier", "shier",
"shisan", "shisan",
"shisi", "shisi",
"shiwu", "shiwu",
"文本预案", "文本预案"
} }
export enum AuditStatusEnum { export enum AuditStatusEnum {
"zero", "zero",
"审核中", "审核中",
"审核通过", "审核通过",
"two", "two",
"终审退回", "终审退回",
"five", "five",
"six", "six",
"seven", "seven",
"未提交审核", "未提交审核",
"nine", "nine",
"ten", "ten",
"eleven", "eleven",
"twelve", "twelve",
"thieteen", "thieteen",
"fourteen", "fourteen",
"fifteen", "fifteen",
"待终审", "待终审",
"shiqi", "shiqi",
"shiba", "shiba",
"shijiu", "shijiu",
"ershi", "ershi",
"ershiyi", "ershiyi",
"ershier", "ershier",
"ershis", "ershis",
"t1", "t1",
"t2", "t2",
"t3", "t3",
"t4", "t4",
"t5", "t5",
"t6", "t6",
"t7", "t7",
"t8", "t8",
"初审退回", "初审退回",
} }
export enum PlanLevelEnum { export enum PlanLevelEnum {
"编制级别0", "编制级别0",
"总队", "总队",
"支队", "支队",
"编制级别3", "编制级别3",
"大队", "大队",
"编制级别5", "编制级别5",
"编制级别6", "编制级别6",
"编制级别7", "编制级别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> <span>联系电话:</span>
<mat-form-field> <mat-form-field>
<input type="number" matInput id="linkphone" name="linkphone" #linkphone="ngModel" <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> </mat-form-field>
<!-- <div *ngIf="linkphone.invalid && (linkphone.dirty || linkphone.touched)" <!-- <div *ngIf="linkphone.invalid && (linkphone.dirty || linkphone.touched)"
class="alert-danger"> class="alert-danger">
@ -262,7 +263,7 @@
(click)="removeline(element.propertyInfos)"> (click)="removeline(element.propertyInfos)">
<mat-icon>remove_circle_outline</mat-icon> <mat-icon>remove_circle_outline</mat-icon>
</button> </button>
{{item.propertyName}}{{item.physicalUnit? '('+item.physicalUnit+')' : ''}} {{item.propertyName}}
<span style="color: red;" *ngIf="item.required">*</span> <span style="color: red;" *ngIf="item.required">*</span>
</th> </th>
</tr> </tr>
@ -368,7 +369,7 @@
(click)="removeline(element.propertyInfos)"> (click)="removeline(element.propertyInfos)">
<mat-icon>remove_circle_outline</mat-icon> <mat-icon>remove_circle_outline</mat-icon>
</button> </button>
{{item.propertyName}}{{item.physicalUnit? '('+item.physicalUnit+')' : ''}} {{item.propertyName}}
<span style="color: red;" *ngIf="item.required">*</span> <span style="color: red;" *ngIf="item.required">*</span>
</th> </th>
</tr> </tr>

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

@ -200,7 +200,7 @@ export class BasicinfoComponent implements OnInit {
this.map.add(this.oldPositionMarker); this.map.add(this.oldPositionMarker);
} else { } else {
// console.log('未标注单位位置') // console.log('未标注单位位置')
this.map.setCity('上海'); this.map.setCity('唐山市');
} }
} }
markerPosition2 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> <app-function-division></app-function-division>
</ng-template> </ng-template>
</mat-tab> </mat-tab>
<mat-tab label="8.行车路线"> <!-- <mat-tab label="8.行车路线">
<ng-template matTabContent> <ng-template matTabContent>
<app-router-gis></app-router-gis> <app-router-gis></app-router-gis>
</ng-template> </ng-template>
@ -54,22 +54,22 @@
<ng-template matTabContent> <ng-template matTabContent>
<app-water-road></app-water-road> <app-water-road></app-water-road>
</ng-template> </ng-template>
</mat-tab> </mat-tab> -->
<mat-tab label="10.实景图"> <mat-tab label="8.实景图">
<ng-template matTabContent> <ng-template matTabContent>
<app-realistic-picture></app-realistic-picture> <app-realistic-picture></app-realistic-picture>
</ng-template> </ng-template>
</mat-tab> </mat-tab>
<mat-tab label="11.上传CAD"> <mat-tab label="9.上传CAD">
<ng-template matTabContent> <ng-template matTabContent>
<app-uploading-cad></app-uploading-cad> <app-uploading-cad></app-uploading-cad>
</ng-template> </ng-template>
</mat-tab> </mat-tab>
<mat-tab label="12.特别警示"> <!-- <mat-tab label="12.特别警示">
<ng-template matTabContent> <ng-template matTabContent>
<app-special-warning></app-special-warning> <app-special-warning></app-special-warning>
</ng-template> </ng-template>
</mat-tab> </mat-tab> -->
<!-- <mat-tab label="12.unity平面图"> <!-- <mat-tab label="12.unity平面图">
<ng-template matTabContent> <ng-template matTabContent>
<iframe id="main" src="/unityApp2Basic/index.html" name="unityApp" frameborder="0" width="96%" height="100%" style="margin-left: 2%;"></iframe> <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>
</div> </div>
<mat-tab-group selectedIndex="10" style="height: 100%;"> <mat-tab-group selectedIndex="7" style="height: 100%;">
<mat-tab label="1.基本信息"> <mat-tab label="1.基本信息">
<ng-template matTabContent> <ng-template matTabContent>
<app-basicinfo></app-basicinfo> <app-basicinfo></app-basicinfo>
@ -31,7 +31,7 @@
<app-function-division></app-function-division> <app-function-division></app-function-division>
</ng-template> </ng-template>
</mat-tab> </mat-tab>
<mat-tab label="6.行车路线"> <!-- <mat-tab label="6.行车路线">
<ng-template matTabContent> <ng-template matTabContent>
<app-router-gis></app-router-gis> <app-router-gis></app-router-gis>
</ng-template> </ng-template>
@ -40,23 +40,23 @@
<ng-template matTabContent> <ng-template matTabContent>
<app-water-road></app-water-road> <app-water-road></app-water-road>
</ng-template> </ng-template>
</mat-tab> </mat-tab> -->
<mat-tab label="8.实景图"> <mat-tab label="6.实景图">
<ng-template matTabContent> <ng-template matTabContent>
<app-realistic-picture></app-realistic-picture> <app-realistic-picture></app-realistic-picture>
</ng-template> </ng-template>
</mat-tab> </mat-tab>
<mat-tab label="9.上传CAD"> <mat-tab label="7.上传CAD">
<ng-template matTabContent> <ng-template matTabContent>
<app-uploading-cad></app-uploading-cad> <app-uploading-cad></app-uploading-cad>
</ng-template> </ng-template>
</mat-tab> </mat-tab>
<mat-tab label="10.特别警示"> <!-- <mat-tab label="10.特别警示">
<ng-template matTabContent> <ng-template matTabContent>
<app-special-warning></app-special-warning> <app-special-warning></app-special-warning>
</ng-template> </ng-template>
</mat-tab> </mat-tab> -->
<mat-tab label="11.作战部署"> <mat-tab label="8.作战部署">
<ng-template matTabContent> <ng-template matTabContent>
<app-collection-tools></app-collection-tools> <app-collection-tools></app-collection-tools>
</ng-template> </ng-template>

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

@ -1,5 +1,97 @@
<div class="content" id="firefightingdevicelook"> <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"> <mat-tab label="{{newItem.name}}" *ngFor="let newItem of allBuildingGrouping">
<div class="contentBox"> <div class="contentBox">
@ -25,148 +117,14 @@
<mat-expansion-panel *ngFor="let items of item.facilityItems" disabled [expanded]=items.expanded> <mat-expansion-panel *ngFor="let items of item.facilityItems" disabled [expanded]=items.expanded>
<mat-expansion-panel-header class="expansionheader"> <mat-expansion-panel-header class="expansionheader">
<label class="firstContent"> <label class="firstContent">
<mat-checkbox (change)='checkedCompany($event,item,items)' [disabled]='items.isBuiltin'> <mat-checkbox (change)='checkedCompany($event,item,items)' [disabled]='items.isBuiltin'></mat-checkbox>
</mat-checkbox>
</label> </label>
<label class="textContent">{{items.name}}</label> <label class="textContent">{{items.name}}</label>
<label class="textContent"><a href="javascript:void(0)" <label class="textContent"><a href="javascript:void(0)" (click)='previewBuildingImg(newItem,items)'>查看图片</a></label>
(click)='previewBuildingImg(newItem,items)'>查看图片</a></label> <label class="totalContent">{{items.total ? items.total : '总数: 0'}}</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="lastTextContent"> <label class="lastTextContent">
<textarea *ngIf="item.name == '消防水系统' && items.name == '供水管网'" maxlength="250" <textarea readonly maxlength="250" [(ngModel)]="items.details" style="width:98%;"></textarea>
[(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>
</label> </label>
<!-- <label><mat-icon (click)='SwitchBuildingBoard(newItem,items)' *ngIf="items.isBuiltin">keyboard_arrow_down</mat-icon></label> --> <!-- <label><mat-icon (click)='SwitchBuildingBoard(newItem,items)' *ngIf="items.isBuiltin">keyboard_arrow_down</mat-icon></label> -->
@ -184,8 +142,7 @@
</table> </table>
</div> </div>
<div *ngFor="let tableMsg of items.loopTable" class="detailsTable"> <div *ngFor="let tableMsg of items.loopTable" class="detailsTable">
<p style="text-align: center; font-size: 16px; margin: 5px 0;">楼层/区域名称: <p style="text-align: center; font-size: 16px; margin: 5px 0;">楼层/区域名称: {{tableMsg.name? tableMsg.name : '暂无名称'}}</p>
{{tableMsg.name? tableMsg.name : '暂无名称'}}</p>
<table> <table>
<tr> <tr>
<th *ngFor="let header of tableMsg.header">{{header}}</th> <th *ngFor="let header of tableMsg.header">{{header}}</th>
@ -213,16 +170,12 @@
<div *ngFor="let items of item.propertyInfos" class="InputField"> <div *ngFor="let items of item.propertyInfos" class="InputField">
<label>{{items.propertyName}}:</label> <label>{{items.propertyName}}:</label>
<input readonly type="text" <input readonly type="text" *ngIf="items.propertyType!=1&&items.propertyType!=2&&items.propertyType!=4&&items.propertyType!=6"
*ngIf="items.propertyType!=1&&items.propertyType!=2&&items.propertyType!=4&&items.propertyType!=6" [(ngModel)]="items.propertyValue" name="propertyValue">
[(ngModel)]="items.propertyValue" name="propertyValue"> <textarea readonly maxlength="250" *ngIf="items.propertyType==1" [(ngModel)]="items.propertyValue" name="propertyValue"></textarea>
<textarea readonly maxlength="250" *ngIf="items.propertyType==1" [(ngModel)]="items.propertyValue" <input readonly type="number" *ngIf="items.propertyType==2 ||items.propertyType==4" [(ngModel)]="items.propertyValue" name="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-group *ngIf="items.propertyType==6" [(ngModel)]="items.propertyValue" name="propertyValue">
<mat-radio-button style="margin-left: 5px;" [value]='radio.value' <mat-radio-button style="margin-left: 5px;" [value]='radio.value' *ngFor="let radio of singleElection">{{radio.name}}</mat-radio-button>
*ngFor="let radio of singleElection">{{radio.name}}</mat-radio-button>
</mat-radio-group> </mat-radio-group>
</div> </div>
</mat-expansion-panel> </mat-expansion-panel>

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

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

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

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

@ -1,391 +1,435 @@
import { Component, OnInit, Inject, ViewChild } from "@angular/core"; import { Component, OnInit, Inject, ViewChild } from '@angular/core';
import { HttpClient } from "@angular/common/http"; import { HttpClient } from '@angular/common/http';
import { import { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
MatDialog, import { FileUploader } from 'ng2-file-upload';
MatDialogRef, import { MatPaginator } from '@angular/material/paginator';
MAT_DIALOG_DATA, import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar';
} from "@angular/material/dialog"; import Swiper from 'swiper';
import { MatPaginator } from "@angular/material/paginator"; import { Router,ActivatedRoute } from '@angular/router'
import { MatSnackBar, MatSnackBarConfig } from "@angular/material/snack-bar";
import Swiper from "swiper";
import { Router, ActivatedRoute } from "@angular/router";
@Component({ @Component({
selector: "app-realistic-picture-look", selector: 'app-realistic-picture-look',
templateUrl: "./realistic-picture.component.html", templateUrl: './realistic-picture.component.html',
styleUrls: ["./realistic-picture.component.scss"], styleUrls: ['./realistic-picture.component.scss']
}) })
export class RealisticPictureLookComponent implements OnInit { export class RealisticPictureLookComponent implements OnInit {
constructor( uploader:FileUploader = new FileUploader({ //初始化上传文件
private router: Router, url: `/api/Objects/PlanPlatform/${this.route.snapshot.queryParams.id}/RealImgs`,
private route: ActivatedRoute, method: "POST",
private http: HttpClient, itemAlias: "uploadedfile",
public dialog: MatDialog, autoUpload: false,
public snackBar: MatSnackBar removeAfterUpload:true,
) {} });
constructor(private router:Router,private route:ActivatedRoute,private http:HttpClient,public dialog: MatDialog,public snackBar: MatSnackBar) { }
ngOnInit(): void { ngOnInit(): void {
let companyId = this.route.snapshot.queryParams.id; let companyId = this.route.snapshot.queryParams.id
this.http this.http.get('/api/RealityImageGroups',{params:{
.get("/api/RealityImageGroups", { companyId : companyId
params: { }}).subscribe((data:any)=>{
companyId: companyId, this.allRealPicture = data
}, this.allRealPicture.unshift({
companyId:sessionStorage.getItem('companyId'),
id:'重点部位',
name: "重点部位",
realityImages:null
}) })
.subscribe((data: any) => { this.selectReal = data[0]
this.allRealPicture = data; this.getAllRealPicture()
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();
});
} }
companyId: any; //单位编号 companyId:any; //单位编号
allRealPicture: any = []; //所有实景图文件 allRealPicture:any=[]; //所有实景图文件
selectReal: any; //选中的实景图文件 selectReal:any; //选中的实景图文件
selectRealIndex: number = 0; //选中的实景图文件下标 selectRealIndex:number=0; //选中的实景图文件下标
allImages: any = []; //实景图文件对应所有的实景图 allImages:any=[]; //实景图文件对应所有的实景图
isDownload: boolean = false; //是否批量下载 isDownload:boolean = false; //是否批量下载
downloadList: any = []; //选中需要下载的图片 downloadList:any = []; //选中需要下载的图片
//分页 //分页
@ViewChild(MatPaginator, { static: true }) @ViewChild(MatPaginator, {static: true})
paginator: MatPaginator; paginator: MatPaginator;
length: any; //共多少条数据 length:any; //共多少条数据
pageSize: any = "12"; //每页条数 pageSize:any = '12'; //每页条数
pageSizeOptions: number[] = [12]; //设置每页条数 pageSizeOptions: number[] = [12] //设置每页条数
PageNumber: any; //第几页 PageNumber:any; //第几页
//分页切换 //分页切换
chagePage(e) { chagePage (e) {
this.PageNumber = e.pageIndex + 1; this.PageNumber = e.pageIndex+1
this.getAllRealPicture(); this.getAllRealPicture()
} }
//获取所有实景图分组 //获取所有实景图分组
getAllGrouping() { getAllGrouping () {
let companyId = this.route.snapshot.queryParams.id; let companyId = this.route.snapshot.queryParams.id
this.http this.http.get('/api/RealityImageGroups',{params:{
.get("/api/RealityImageGroups", { companyId : companyId
params: { }}).subscribe((data:any)=>{
companyId: companyId, this.allRealPicture = data
}, this.selectReal = data[this.selectRealIndex]
}) })
.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];
});
} }
//获取实景图分组对应实景图 //获取实景图分组对应实景图
getAllRealPicture() { getAllRealPicture () {
if (this.selectReal) { if (this.selectReal) {
if (this.selectReal.id == "安全出口") { let data
let params = { if(this.selectReal.id == '重点部位'){
companyId: this.selectReal.companyId, 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, PageNumber: this.PageNumber || 1,
pageSize: this.pageSize, 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) { if (this.selectRealIndex != index) {
this.selectReal = e; this.selectReal = e
this.selectRealIndex = index; this.selectRealIndex = index
this.isDownload = false; this.isDownload = false
this.downloadList = []; this.downloadList = []
this.getAllRealPicture(); this.getAllRealPicture()
} }
} }
//选择批量下载 //选择批量下载
download() { download () {
this.isDownload = !this.isDownload; this.isDownload = !this.isDownload
if (!this.isDownload) { if (!this.isDownload) { //取消批量下载时数组清空
//取消批量下载时数组清空 this.allImages.forEach(element => {element.checked = false});
this.allImages.forEach((element) => { this.downloadList = []
element.checked = false;
});
this.downloadList = [];
} }
} }
// 预览图片---批量选择图片 // 预览图片---批量选择图片
operation(e, index) { operation (e,index) {
if (this.isDownload) { if (this.isDownload) { //批量选择图片
//批量选择图片 e.checked = !e.checked
e.checked = !e.checked; if (e.checked==true) {this.downloadList.push(e)}
if (e.checked == true) { else {this.downloadList.splice(this.downloadList.findIndex(item => item.id === e.id), 1)}
this.downloadList.push(e); } else { //预览图片
} else {
this.downloadList.splice(
this.downloadList.findIndex((item) => item.id === e.id),
1
);
}
} else {
//预览图片
let data = { let data = {
selectReal: this.selectReal, selectReal:this.selectReal,
allImages: this.allImages, allImages:this.allImages,
imgIndex: index, imgIndex: index}
}; let dialogRef = this.dialog.open(previewImg3,
let dialogRef = this.dialog.open(previewImg3, { data }); {data});
dialogRef.afterClosed().subscribe(); dialogRef.afterClosed().subscribe();
} }
} }
//新建实景图文件 //新建实景图文件
addReal() {} addReal () {
}
//编辑实景图文件 //编辑实景图文件
editReal() {} editReal () {
}
//删除实景图文件 //删除实景图文件
delete() { delete () {
let companyId = this.route.snapshot.queryParams.id; let companyId = this.route.snapshot.queryParams.id
if (this.selectReal) { if (this.selectReal) {
let isDelete = confirm("您确定要删除吗"); let isDelete = confirm('您确定要删除吗')
if (isDelete) { if (isDelete) {
this.http this.http.delete(`/api/RealityImageGroups/${this.selectReal.id}`).subscribe(data=>{
.delete(`/api/RealityImageGroups/${this.selectReal.id}`) this.http.get('/api/RealityImageGroups',{params:{
.subscribe((data) => { companyId : companyId
this.http }}).subscribe((data:any)=>{
.get("/api/RealityImageGroups", { this.allRealPicture = data
params: { this.selectReal = data[this.selectRealIndex]
companyId: companyId, this.allImages = []
}, this.getAllRealPicture()
}) })
.subscribe((data: any) => { })
this.allRealPicture = data;
this.selectReal = data[this.selectRealIndex];
this.allImages = [];
this.getAllRealPicture();
});
});
} }
} }
} }
//实景图修改 //实景图修改
preservationImg(e) { preservationImg (e) {
let data = { let data = {
id: e.id, id:e.id,
name: e.nameStart + e.nameEnd, name:e.nameStart+e.nameEnd,
imageUrl: e.imageUrl, imageUrl:e.imageUrl,
realityImageGroupId: e.realityImageGroupId, realityImageGroupId:e.realityImageGroupId
}; }
this.http.put(`/api/RealityImages/${e.id}`, data).subscribe((data) => { this.http.put(`/api/RealityImages/${e.id}`,data).subscribe(data=>{
this.getAllRealPicture(); this.getAllRealPicture()
const config = new MatSnackBarConfig(); const config = new MatSnackBarConfig();
config.verticalPosition = "top"; config.verticalPosition = 'top';
config.duration = 3000; config.duration = 3000
this.snackBar.open("图片修改成功", "确定", config); this.snackBar.open('图片修改成功','确定',config);
}); })
} }
//实景图删除 //实景图删除
deleteImg(e) { deleteImg (e) {
let isDelete = confirm("您确定要删除吗"); let isDelete = confirm('您确定要删除吗')
if (isDelete) { if (isDelete) {
this.http.delete(`/api/RealityImages/${e.id}`).subscribe((data) => { this.http.delete(`/api/RealityImages/${e.id}`).subscribe(data=>{
this.getAllRealPicture(); this.getAllRealPicture()
const config = new MatSnackBarConfig(); const config = new MatSnackBarConfig();
config.verticalPosition = "top"; config.verticalPosition = 'top';
config.duration = 3000; config.duration = 3000
this.snackBar.open("图片删除成功", "确定", config); this.snackBar.open('图片删除成功','确定',config);
}); })
this.http this.http.delete(`/api/Objects/PlanPlatform/${e.imageUrl}`).subscribe(data=>{})
.delete(`/api/Objects/PlanPlatform/${e.imageUrl}`)
.subscribe((data) => {});
} }
} }
isLoading: boolean = false; //loading加载
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()
})
}
}
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() { async batchDownload () {
if (this.downloadList.length) { if (this.downloadList.length) { //开始批量循环下载
//开始批量循环下载 this.isLoading = true
this.isLoading = true; for (let i=0;i<this.downloadList.length;i++) {
for (let i = 0; i < this.downloadList.length; i++) { let result = await new Promise ((result,reject)=>{
let result = await new Promise((result, reject) => { this.http.get(`/api/Objects/PlanPlatform/${this.downloadList[i].imageUrl}`,{responseType: 'blob'},).subscribe(data=>{
this.http let url = window.URL.createObjectURL(new Blob([data])); //createObjectURL创建一个下载Blob的url地址
.get(`/api/Objects/PlanPlatform/${this.downloadList[i].imageUrl}`, { let link = document.createElement("a");
responseType: "blob", link.style.display = "none";
}) link.href = url;
.subscribe((data) => { link.setAttribute("download", this.downloadList[i].name);
let url = window.URL.createObjectURL(new Blob([data])); //createObjectURL创建一个下载Blob的url地址 document.body.appendChild(link);
let link = document.createElement("a"); link.click();
link.style.display = "none"; result('success')})
link.href = url; })
link.setAttribute("download", this.downloadList[i].name); if(i == this.downloadList.length-1) { //判断是否下载完毕
document.body.appendChild(link); this.isLoading = false
link.click(); this.isDownload = false
result("success"); this.allImages.forEach(element => {element.checked = false});
}); this.downloadList = []}
});
if (i == this.downloadList.length - 1) {
//判断是否下载完毕
this.isLoading = false;
this.isDownload = false;
this.allImages.forEach((element) => {
element.checked = false;
});
this.downloadList = [];
}
} //for循环 } //for循环
} else { } else {
const config = new MatSnackBarConfig(); const config = new MatSnackBarConfig();
config.verticalPosition = "top"; config.verticalPosition = 'top';
config.duration = 3000; config.duration = 3000
this.snackBar.open("请选择图片", "确定", config); this.snackBar.open('请选择图片','确定',config);}
}
} }
} }
//预览图片组件 //预览图片组件
@Component({ @Component({
selector: "app-previewImg", selector: 'app-previewImg',
templateUrl: "./previewImg.html", templateUrl: './previewImg.html',
styleUrls: ["./realistic-picture.component.scss"], styleUrls: ['./realistic-picture.component.scss']
}) })
export class previewImg3 { export class previewImg3 {
constructor(
private http: HttpClient, constructor(private http:HttpClient,public dialog: MatDialog,public dialogRef: MatDialogRef<previewImg3>,
public dialog: MatDialog, @Inject(MAT_DIALOG_DATA) public data) { }
public dialogRef: MatDialogRef<previewImg3>, testSwiper: Swiper;
@Inject(MAT_DIALOG_DATA) public data
) {}
testSwiper: Swiper;
ngOnInit(): void { ngOnInit(): void {
this.allImages = this.data.allImages; this.allImages = this.data.allImages
this.allImages.forEach((element) => { this.allImages.forEach(element => {
if ( if( this.data.selectReal.id == '重点部位'){
this.data.selectReal.id == "重点部位" || element.previewImageUrl = `${element.imageUrl}` //处理图片URL地址
this.data.selectReal.id == "安全出口" }else{
) { element.previewImageUrl = `/api/Objects/PlanPlatform/${element.imageUrl}?x-oss-process=image/auto-orient,1` //处理图片URL地址
element.previewImageUrl = `${element.imageUrl}`; //处理图片URL地址
} else {
element.previewImageUrl = `/api/Objects/PlanPlatform/${element.imageUrl}?x-oss-process=image/auto-orient,1`; //处理图片URL地址
} }
}); });
} }
ngAfterViewInit() { ngAfterViewInit() {
this.testSwiper = new Swiper(".swiper-container", { this.testSwiper = new Swiper('.swiper-container', {
lazy: true, lazy: true,
initialSlide: this.data.imgIndex, initialSlide: this.data.imgIndex,
direction: "horizontal", direction: 'horizontal',
loop: false, loop: false,
// 如果需要前进后退按钮 // 如果需要前进后退按钮
navigation: { navigation: {
nextEl: ".swiper-button-next", nextEl: '.swiper-button-next',
prevEl: ".swiper-button-prev", prevEl: '.swiper-button-prev',
}, }
}); });
} }
allImages: any; //展示所有的图片 allImages:any; //展示所有的图片
rotationAngle: number = 0; //旋转角度 rotationAngle:number=0; //旋转角度
//旋转图片 //旋转图片
rotate() { rotate () {
this.rotationAngle = this.rotationAngle + 90; this.rotationAngle = this.rotationAngle+90
if (this.rotationAngle === 360) { if (this.rotationAngle === 360) {this.rotationAngle = 0}
this.rotationAngle = 0;
}
} }
} }

825
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',{ that.map = MapFactory.MapInstance('map',{
layers:[layer], //当只想显示标准图层时layers属性可缺省, layers:[layer], //当只想显示标准图层时layers属性可缺省,
}); });
that.map.setCity('上海市'); that.map.setCity('唐山市');
that.startCoordinate && that.endCoordinate? that.queryGISRoute() : null that.startCoordinate && that.endCoordinate? that.queryGISRoute() : null
} }
@ -177,7 +177,7 @@ export class RouterGISComponent implements OnInit {
this.endCoordinate = null this.endCoordinate = null
this.routeGIS? this.routeGIS.clear() : null this.routeGIS? this.routeGIS.clear() : null
this.routes = { distance: 0, time: 0, steps: [], } 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.基本信息"> <mat-tab label="1.基本信息">
<ng-template matTabContent> <ng-template matTabContent>
<app-basicinfo-look></app-basicinfo-look> <app-basicinfo-look></app-basicinfo-look>
@ -24,7 +24,7 @@
<app-function-division-look></app-function-division-look> <app-function-division-look></app-function-division-look>
</ng-template> </ng-template>
</mat-tab> </mat-tab>
<mat-tab label="6.行车路线"> <!-- <mat-tab label="6.行车路线">
<ng-template matTabContent> <ng-template matTabContent>
<app-router-gis></app-router-gis> <app-router-gis></app-router-gis>
</ng-template> </ng-template>
@ -33,23 +33,23 @@
<ng-template matTabContent> <ng-template matTabContent>
<app-water-road></app-water-road> <app-water-road></app-water-road>
</ng-template> </ng-template>
</mat-tab> </mat-tab> -->
<mat-tab label="8.实景图"> <mat-tab label="6.实景图">
<ng-template matTabContent> <ng-template matTabContent>
<app-realistic-picture-look></app-realistic-picture-look> <app-realistic-picture-look></app-realistic-picture-look>
</ng-template> </ng-template>
</mat-tab> </mat-tab>
<mat-tab label="9.上传CAD"> <mat-tab label="7.上传CAD">
<ng-template matTabContent> <ng-template matTabContent>
<app-uploading-cad-look></app-uploading-cad-look> <app-uploading-cad-look></app-uploading-cad-look>
</ng-template> </ng-template>
</mat-tab> </mat-tab>
<mat-tab label="10.特别警示"> <!-- <mat-tab label="10.特别警示">
<ng-template matTabContent> <ng-template matTabContent>
<app-special-warning></app-special-warning> <app-special-warning></app-special-warning>
</ng-template> </ng-template>
</mat-tab> </mat-tab> -->
<mat-tab label="11.作战部署"> <mat-tab label="8.作战部署">
<ng-template matTabContent> <ng-template matTabContent>
<app-collection-tools></app-collection-tools> <app-collection-tools></app-collection-tools>
</ng-template> </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> <app-function-division-look></app-function-division-look>
</ng-template> </ng-template>
</mat-tab> </mat-tab>
<mat-tab label="8.行车路线"> <!-- <mat-tab label="8.行车路线">
<ng-template matTabContent> <ng-template matTabContent>
<app-router-gis></app-router-gis> <app-router-gis></app-router-gis>
</ng-template> </ng-template>
@ -53,22 +53,22 @@
<ng-template matTabContent> <ng-template matTabContent>
<app-water-road></app-water-road> <app-water-road></app-water-road>
</ng-template> </ng-template>
</mat-tab> </mat-tab> -->
<mat-tab label="10.实景图"> <mat-tab label="8.实景图">
<ng-template matTabContent> <ng-template matTabContent>
<app-realistic-picture-look></app-realistic-picture-look> <app-realistic-picture-look></app-realistic-picture-look>
</ng-template> </ng-template>
</mat-tab> </mat-tab>
<mat-tab label="11.上传CAD"> <mat-tab label="9.上传CAD">
<ng-template matTabContent> <ng-template matTabContent>
<app-uploading-cad-look></app-uploading-cad-look> <app-uploading-cad-look></app-uploading-cad-look>
</ng-template> </ng-template>
</mat-tab> </mat-tab>
<mat-tab label="12.特别警示"> <!-- <mat-tab label="12.特别警示">
<ng-template matTabContent> <ng-template matTabContent>
<app-special-warning></app-special-warning> <app-special-warning></app-special-warning>
</ng-template> </ng-template>
</mat-tab> </mat-tab> -->
<!-- <mat-tab label="12.unity平面图"> <!-- <mat-tab label="12.unity平面图">
<ng-template matTabContent> <ng-template matTabContent>
<iframe id="main" src="/unityApp2Basic/index.html" name="unityApp" frameborder="0" width="96%" height="100%" style="margin-left:2%;"></iframe> <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.map.add(this.unitMarker);
this.waterSubmit(1) this.waterSubmit(1)
} else { } else {
this.map.setCity('上海市'); this.map.setCity('唐山市');
let config = new MatSnackBarConfig(); let config = new MatSnackBarConfig();
config.verticalPosition = 'top'; config.verticalPosition = 'top';
config.duration = 3000 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 () { mapInit () {
//创建地图 //创建地图
this.map = new AMap.Map('chartMap', { this.map = new AMap.Map('chartMap', {
@ -1029,7 +1029,7 @@ export class HomeComponent implements OnInit {
districtExplorer.on('outsideClick', (e) => { districtExplorer.on('outsideClick', (e) => {
// console.log('区域外点击'); // console.log('区域外点击');
this.chartsSetOption('','province') this.chartsSetOption('','province')
adcode = 310000 adcode = 130200
districtExplorer.loadAreaNode(adcode, (error, areaNode)=> { districtExplorer.loadAreaNode(adcode, (error, areaNode)=> {
//更新地图视野 //更新地图视野
// this.map.setBounds(areaNode.getBounds(), null, null, true); // 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() { lookUpdateData() {
let dialogRef = this.dialog.open(lookUpdateDataComponent, let dialogRef = this.dialog.open(lookUpdateDataComponent,
{ width: '668px' }); { width: '668px' });

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

@ -1,7 +1,13 @@
<p style="text-align: center;">更新公告</p> <p style="text-align: center;">更新公告</p>
<p>更新内容如下:</p> <p>更新内容如下:</p>
<p>1.单位管理模块现在支持按照重点单位和一般单位进行查询。</p> <p>1.增加V级文本预案模板导入功能;</p>
<p>2.在单位管理模块的列表中,我们将“关注/取消”改为了“重点单位/一般单位”,并且重点单位名称前面有红星标记,一般单位前面无标记,以便更好地区分。</p> <p>2.已上传至预案编制管理平台的Ⅴ级文本预案,增加【转在线导入】功能;</p>
<p>3.在预案管理模块中,我们去掉了预案列表中的编制级别,并且增加了按照重点单位和一般单位进行查询的功能。在预案列表中的单位名称前面增加了一列显示栏,区分重点单位和一般单位。</p> <p>3.增加V级文本预案自定义在线编制功能;</p>
<p>4.预案列表页面中,预案的名称支持手动修改,同时转在线导入文档转成功后名称去掉 “转在线编制”。 </p> <p>为了预案导入功能正常使用,且提高文本预案识别导入的成功率,需要注意以下几点:</p>
<p>5.点击系统右上角的“?”下载重点单位设置说明,以便更好地了解如何设置重点单位。 </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 { Pipe, PipeTransform } from '@angular/core';
import { import { isno, PlanTypeEnum, AuditStatusEnum, PlanLevelEnum } from '../interface'
isno, @Pipe({ name: 'isno' })
PlanTypeEnum,
AuditStatusEnum,
PlanLevelEnum,
PlanAuditStatusEnum,
} from "../interface";
@Pipe({ name: "isno" })
export class IsnoPipe implements PipeTransform { export class IsnoPipe implements PipeTransform {
transform(value: boolean): string { transform(value: boolean): string {
if (value) { if (value) {
var x = 0; var x = 0
} else { } else {
x = 1; x = 1
}
return isno[x]
} }
return isno[x];
}
} }
@Pipe({ name: "plantype" }) @Pipe({ name: 'plantype' })
export class PlanType implements PipeTransform { export class PlanType implements PipeTransform {
transform(value: number): string { transform(value: number): string {
return PlanTypeEnum[value]; return PlanTypeEnum[value]
} }
} }
@Pipe({ name: "auditsatus" }) @Pipe({ name: 'auditsatus' })
export class AuditSatus implements PipeTransform { export class AuditSatus implements PipeTransform {
transform(value: number): string { transform(value: number): string {
return AuditStatusEnum[value]; return AuditStatusEnum[value]
} }
} }
@Pipe({ name: "planlevel" }) @Pipe({ name: 'planlevel' })
export class PlanLevel implements PipeTransform { export class PlanLevel implements PipeTransform {
transform(value: number): string { transform(value: number): string {
return PlanLevelEnum[value]; return PlanLevelEnum[value]
} }
} }
@Pipe({ name: "state" }) @Pipe({ name: 'state' })
export class state implements PipeTransform { export class state implements PipeTransform {
transform(value: number): string { transform(value: number): string {
if (value == 3) { if (value == 3) {
return "维护中"; return '维护中'
} else if (value == 4) { } else if (value == 4) {
return "维护通过审核"; return '维护通过审核'
} else if (value == 5) { } else if (value == 5) {
return "维护驳回审核"; return '维护驳回审核'
} else { } else {
return "未维护"; return '未维护'
}
} }
}
} }
@Pipe({ name: "auditState" }) @Pipe({ name: 'differentContentTitle' })
export class auditState implements PipeTransform {
transform(value: number): string {
return PlanAuditStatusEnum[value];
}
}
@Pipe({ name: "differentContentTitle" })
export class differentContentTitle implements PipeTransform { export class differentContentTitle implements PipeTransform {
transform(value: string): string { transform(value: string): string {
if (typeof value == "boolean" && value) { if (typeof (value) == 'boolean' && value) {
return "是"; return '是'
} else if (typeof value == "boolean" && !value) { } else if (typeof (value) == 'boolean' && !value) {
return "否"; return '否'
} else if (JSON.stringify(value) == "{}") { } else if (JSON.stringify(value) == "{}") {
return "空"; return '空'
} else if (!value) { } else if (!value) {
return "空"; return '空'
} else { } else {
return value; return value
}
} }
}
} }
@Pipe({ name: "yuan" }) @Pipe({ name: 'yuan' })
export class yuan implements PipeTransform { export class yuan implements PipeTransform {
transform(value: string): string { transform(value: string): string {
if (value == "LevelOne") { if (value == 'LevelOne') {
return "一级预案"; return '一级预案'
} else if (value == "LevelTwo") { } else if (value == 'LevelTwo') {
return "二级预案"; return '二级预案'
} else if (value == "LevelThree") { } else if (value == 'LevelThree') {
return "三级预案"; return '三级预案'
} else if (value == "LevelFour") { }else if (value == 'LevelFour') {
return "四级预案"; return '四级预案'
} else if (value == "LevelFive") { }else if (value == 'LevelFive') {
return "五级预案"; return '五级预案'
} else if (value == "PlanText") { }else if (value == 'PlanText') {
return "文本预案"; return '文本预案'
}
} }
}
} }

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

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

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

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

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

@ -12,29 +12,26 @@
<div class="queryField ordiv"> <div class="queryField ordiv">
<label style="margin-right: 10px;">消防救援站:</label> <label style="margin-right: 10px;">消防救援站:</label>
<mat-form-field> <mat-form-field>
<input readonly matInput placeholder="请选择消防救援站" [(ngModel)]="selectOrganizationIName" <input readonly matInput placeholder="请选择消防救援站" [(ngModel)]="selectOrganizationIName" name="selectOrganizationIName" (focus)="openorganizationbox()">
name="selectOrganizationIName" (focus)="openorganizationbox()">
</mat-form-field> </mat-form-field>
<mat-checkbox style="margin-left: 5px;" [(ngModel)]="HasChildrenOrganization" <mat-checkbox style="margin-left: 5px;" [(ngModel)]="HasChildrenOrganization" name="HasChildrenOrganization">包含下级</mat-checkbox>
name="HasChildrenOrganization">包含下级</mat-checkbox>
<div class="organizationbox" *ngIf="isorganizationbox"> <div class="organizationbox" *ngIf="isorganizationbox">
<div (click)="closediv()" class="closediv"><mat-icon>clear</mat-icon></div> <div (click)="closediv()" class="closediv"><mat-icon>clear</mat-icon></div>
<mat-tree [dataSource]="dataSource" [treeControl]="treeControl"> <mat-tree [dataSource]="dataSource" [treeControl]="treeControl">
<mat-tree-node *matTreeNodeDef="let node" matTreeNodePadding (click)='add(node)' class="organizationlist"> <mat-tree-node *matTreeNodeDef="let node" matTreeNodePadding (click)='add(node)' class="organizationlist">
<button type="button" mat-icon-button disabled></button> <button type="button" mat-icon-button disabled ></button>
<li>{{node.name}}</li> <li>{{node.name}}</li>
</mat-tree-node> </mat-tree-node>
<mat-tree-node *matTreeNodeDef="let node;when: hasChild" matTreeNodePadding (click)='add(node)' <mat-tree-node *matTreeNodeDef="let node;when: hasChild" matTreeNodePadding (click)='add(node)' class="organizationlist">
class="organizationlist"> <button type="button" mat-icon-button matTreeNodeToggle [attr.aria-label]="'toggle ' + node.name">
<button type="button" mat-icon-button matTreeNodeToggle [attr.aria-label]="'toggle ' + node.name">
<mat-icon class="mat-icon-rtl-mirror"> <mat-icon class="mat-icon-rtl-mirror">
{{treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right'}} {{treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right'}}
</mat-icon> </mat-icon>
</button> </button>
<li>{{node.name}}</li> <li>{{node.name}}</li>
</mat-tree-node> </mat-tree-node>
</mat-tree> </mat-tree>
</div> </div>
</div> </div>
@ -43,7 +40,7 @@
<label style="margin-right: 10px;">单位类型:</label> <label style="margin-right: 10px;">单位类型:</label>
<mat-form-field> <mat-form-field>
<mat-select placeholder='请选择单位类型' [(ngModel)]="BuildingTypeId" name="BuildingTypeId"> <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}} {{unit.name}}
</mat-option> </mat-option>
</mat-select> </mat-select>
@ -81,8 +78,7 @@
</mat-option> </mat-option>
</mat-select> </mat-select>
</mat-form-field> </mat-form-field>
<mat-checkbox style="margin-left: 5px;" [(ngModel)]="HasChildrenPlanLevel" <mat-checkbox style="margin-left: 5px;" [(ngModel)]="HasChildrenPlanLevel" name="HasChildrenPlanLevel">包含下级</mat-checkbox>
name="HasChildrenPlanLevel">包含下级</mat-checkbox>
</div> </div>
</div> </div>
@ -159,21 +155,20 @@
<ng-container matColumnDef="operation"> <ng-container matColumnDef="operation">
<th mat-header-cell *matHeaderCellDef>操作</th> <th mat-header-cell *matHeaderCellDef>操作</th>
<td mat-cell *matCellDef="let element"> <td mat-cell *matCellDef="let element">
<label style="color: #0000FF;cursor: pointer;" (click)='toExamine(element)' <label style="color: #0000FF;cursor: pointer;" (click)='toExamine(element)' *ngIf="element.auditStatus!=4">预案审核</label>
*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)='openReserve(element)' <label style="color: #0000FF;margin-left: 10px;cursor: pointer;" (click)='closeReserve(element)' *ngIf="element.auditStatus==2">预案取消公开</label>
*ngIf="element.auditStatus==2">预案公开</label> <label style="color: #999;"*ngIf="element.auditStatus==4">预案已驳回</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> </td>
</ng-container> </ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr> <tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr> <tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
</table> </table>
<mat-paginator [length]="length" [pageSize]="pageSize" [pageSizeOptions]="pageSizeOptions" <mat-paginator [length]="length"
(page)="chagePage($event)"> [pageSize]="pageSize"
[pageSizeOptions]="pageSizeOptions"
(page)="chagePage($event)">
</mat-paginator> </mat-paginator>
</div> </div>
</div> </div>

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

450
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="box">
<div class="boxleft"> <div class="boxleft">
<div class="lefthead"> <div class="lefthead">
<form (ngSubmit)="onSubmit(form.value)" #form="ngForm"> <form (ngSubmit)="onSubmit(form.value)" #form="ngForm">
<div class="headdiv"> <div class="headdiv">
<span>操作类型:</span> <span>操作类型:</span>
<input type="radio" name="level" value="" [(ngModel)]="level"><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="1" [(ngModel)]="level"><span>更新</span>
<input type="radio" name="level" value="0" [(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> <input type="radio" name="level" value="2" [(ngModel)]="level"><span>删除</span>
<div class="count"> <div class="count">
<span>共计:{{count}}条</span> <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> </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="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>
<div class="headfour"> <div id="viewer" *ngIf="showtype==1"></div>
<span>时间:</span> <div class="twoD" *ngIf="showtype==2">
<mat-form-field class="example-full-width" style="margin-bottom: 0;"> <div class="planBox">
<input type="date" matInput name="companyName" autocomplete="off" [(ngModel)]="addtime"> <span>单位名称: </span>
</mat-form-field> <span>{{compantData.name?compantData.name : '暂无数据'}}</span>
<mat-icon *ngIf="!pcshow" aria-hidden="false" style="position: relative;right: 120px;top: 5px;" </div>
id="padshow">arrow forward</mat-icon> <div class="planBox">
<span style="margin-left: 15px;" id="pcshow" *ngIf="pcshow">🠊</span> <span>消防救援站: </span>
<mat-form-field class="example-full-width" style="margin-left: 10px;margin-bottom: 0;"> <span>{{organizationName}}</span>
<input type="date" matInput name="companyName" autocomplete="off" [(ngModel)]="endtime"> </div>
</mat-form-field> <div class="planBox">
<span style="margin-left: 10px;">预案类型:</span> <span>单位类型: </span>
<mat-form-field> <span>{{compantData.buildingTypes.length?compantData.buildingTypes[0].name : '暂无数据'}}</span>
<mat-select placeholder='请选择预案类型' name="unittype" [(ngModel)]="plantypes" [multiple]="true"> </div>
<mat-option value="1">二维预案</mat-option> <div class="planBox">
<mat-option value="2">三维预案</mat-option> <span>单位地址: </span>
<mat-option value="4">其他预案</mat-option> <span>{{compantData.address?compantData.address : '暂无数据'}}</span>
<mat-option value="16">文本预案</mat-option> </div>
</mat-select> <div class="planBox">
</mat-form-field> <span style="color: #2196F3;cursor:pointer;" (click)='oopen3Dshow()'>查看详情</span>
</div>
</div> </div>
<div class="btnbox"> <!-- 水源审核 -->
<button mat-raised-button color="primary" type="submit">查询</button> <div class="waterAudit" *ngIf="showtype == 12">
<button mat-raised-button color="primary" type="button" (click)='record()'>重置</button> <app-water-audit [waterData]="waterData"></app-water-audit>
</div> </div>
</form> <!-- 消防力量审核 -->
<div class="tablediv"> <div class="fireForceAudit" *ngIf="showtype == 13">
<table class="header" cellspacing="0" cellpadding="0" style="margin-top: 10px;"> <app-fireforce-audit [FireForceDetailInfo]="fireForceDetailInfo" [level]="postlevel"></app-fireforce-audit>
<thead> </div>
<th style="width: 10%;">状态</th> <!-- 联动力量审核 -->
<th style="width: 10%;">类型</th> <div class="LinkageForcesAudit" *ngIf="showtype == 14">
<th style="width: 10%;">预案类型</th> <app-linkageforces-audit [LinkageForceDetailInfo]="LinkageForceDetailInfo"></app-linkageforces-audit>
<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> </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> </div>

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

@ -1,438 +1,334 @@
.box { .box{
height: 100%;
width: 100%;
display: flex;
.boxleft {
height: 100%; height: 100%;
width: 45%; width: 100%;
overflow-y: auto;
background-color: #FFFFFF;
display: flex; display: flex;
flex-direction: column; .boxleft{
position: relative; height: 100%;
width: 45%;
.lefthead { overflow-y: auto;
height: 100%; background-color: #FFFFFF;
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; display: flex;
align-items: center; flex-direction: column;
flex-direction: row; .lefthead{
display: flex;
span { flex-direction: column;
@media screen and (min-device-width:1400px) { .headdiv{
font-size: 16px; @media screen and (min-device-width:1400px){
} margin: 30px 0 0 28px;
}
@media screen and (max-device-width:1200px) { @media screen and (max-device-width:1200px){
font-size: 13px; margin-top: 10px;
} }
@media screen and (max-device-width:1400px) and (min-device-width:1200px){
@media screen and (max-device-width:1400px) and (min-device-width:1200px) { margin: 20px 0 0 15px;
font-size: 16px; }
} height: 40px;
display: flex;
margin-left: 3px; flex-direction: row;
} span{
@media screen and (min-device-width:1400px){
input { font-size: 16px;
@media screen and (min-device-width:1400px) { }
margin-left: 40px; @media screen and (max-device-width:1200px){
font-size: 13px;
} }
@media screen and (max-device-width:1400px) and (min-device-width:1200px){
@media screen and (max-device-width:1200px) { font-size: 16px;
margin-left: 12px; }
} margin-left: 3px;
}
@media screen and (max-device-width:1400px) and (min-device-width:1200px) { input{
margin-left: 12px; @media screen and (min-device-width:1400px){
margin-left: 50px;
} top: 6px;
}
position: relative; @media screen and (max-device-width:1200px){
margin-left: 12px;
} top: 3px;
}
.count { @media screen and (max-device-width:1400px) and (min-device-width:1200px){
@media screen and (min-device-width:1400px) { margin-left: 12px;
margin-left: 110px; top: 6px;
} }
position: relative;
@media screen and (max-device-width:1200px) {
margin-left: 20px; }
position: relative; .count{
bottom: 4px; @media screen and (min-device-width:1400px){
} margin-left: 110px;
}
@media screen and (max-device-width:1400px) and (min-device-width:1200px) { @media screen and (max-device-width:1200px){
margin-left: 20px; margin-left: 20px;
} position: relative;
} bottom: 4px;
} }
@media screen and (max-device-width:1400px) and (min-device-width:1200px){
.headdivtwo { margin-left: 20px;
@media screen and (min-device-width:1400px) { }
margin: 0 0 0 28px; }
} }
.headdivtwo{
@media screen and (max-device-width:1200px) { @media screen and (min-device-width:1400px){
margin-left: 0; 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) { .tablediv{
margin: 0 0 0 15px; 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; display: flex;
flex-direction: row; flex-direction: column;
align-items: center; @media screen and (max-device-width:1300px){
overflow-y: auto;
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;
}
}
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;
}
} }
} .company{
@media screen and (min-device-width:1300px){
.btnbox { overflow-y: auto;
display: flex; }
justify-content: center; flex: 1;
align-items: center; //overflow-y: auto;
margin-top: 10px;
button {
margin: 0 6px;
} }
} .word{
} width: 100%;
height: 100%;
.tablediv { .shadow{
width: 100%; height: 95%;
flex: 1; width: 97%;
display: flex; margin: 10px 10px 10px 10px;
flex-direction: column; /* position:absolute;
overflow: hidden; left:0;
top:0; */
.header { z-index:998;
margin-left: 10px; background-color:#FFFFFF;
margin-right: 10px; opacity:0.6;
width: 97.5%; mat-spinner{
position: relative;
thead { top: 40%;
height: 48px; left: 40%;
color: #FFFFFF; }
background-color: #2196F3;
th {
font-weight: 10;
@media screen and (min-device-width:1200px) {
font-size: 16px;
} }
iframe{
@media screen and (max-device-width:1200px) { height: 94%;
font-size: 13px; 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;
.tbodycss { width: 97%;
flex: 1; height: 94%;
width: 100%;
overflow-y: auto;
.selectedTr {
background-color: #b3d3ee;
} }
} .waterAudit,.fireForceAudit,.LinkageForcesAudit{
} flex: 1;
width: 100%;
.mask { height: 100%;
position: absolute; box-sizing: border-box;
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 { th,td{
margin: 30px 10px 10px 10px; height:48px;
width: 97%; @media screen and (min-device-width:1200px){
height: 94%; font-size: 16px;
} }
@media screen and (max-device-width:1200px){
.waterAudit, font-size: 13px;
.fireForceAudit,
.LinkageForcesAudit {
flex: 1;
width: 100%;
height: 100%;
box-sizing: border-box;
} }
} text-align: center;
}
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;
}
.yellow {
color: #FFC94B;
} }
.green{color: #00C756;}
.red{color: #FF4D4D;}
.yellow{color: #FFC94B;}
.twoD { .twoD {
width: 100%; width: 100%;
box-sizing: border-box; box-sizing: border-box;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: left; align-items: left;
.planBox {
.planBox { margin: 30px 30px;
margin: 30px 30px; color: black;
color: black; :first-child {margin-right: 10px;}
:first-child {
margin-right: 10px;
} }
} }
}
//滚动条样式 //滚动条样式
::-webkit-scrollbar { ::-webkit-scrollbar{
margin-right: 3px; margin-right: 3px;
width: 6px; width: 6px;
background-color: white; background-color: white;
} }
::-webkit-scrollbar-thumb{
::-webkit-scrollbar-thumb { background-color: #2196F3;
background-color: #2196F3; }
} .mat-form-field-infix{
width: 100px;
.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"; * @Descripttion:
import { MatSnackBar, MatSnackBarConfig } from "@angular/material/snack-bar"; * @version:
import { * @Author: sueRimn
MatDialog, * @Date: 2020-12-25 10:19:31
MatDialogRef, * @LastEditors: sueRimn
MAT_DIALOG_DATA, * @LastEditTime: 2021-08-16 15:29:41
} from "@angular/material/dialog"; */
import { HttpClient } from "@angular/common/http"; import { Component, OnInit, Inject } from '@angular/core';
import { DomSanitizer } from "@angular/platform-browser"; import { FormControl } from '@angular/forms';
import { Viewer } from "photo-sphere-viewer"; import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar';
declare var CryptoJS; 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({ @Component({
selector: "app-plan-record", selector: 'app-plan-record',
templateUrl: "./plan-record.component.html", templateUrl: './plan-record.component.html',
styleUrls: ["./plan-record.component.scss"], styleUrls: ['./plan-record.component.scss']
}) })
export class PlanRecordComponent implements OnInit { 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 { ngOnInit(): void {
if (window.matchMedia("(max-width: 1300px)").matches) { if (window.matchMedia("(max-width: 1300px)").matches) {
this.pcshow = false; this.pcshow = false
} else { } else {
this.pcshow = true; this.pcshow = true
} }
let level = sessionStorage.getItem("level"); let level = sessionStorage.getItem("level");
if (level == "0") { if (level == "0") {//如果是总队
//如果是总队
this.preparelevels = [ this.preparelevels = [
{ name: "总队", value: "0" }, { name: "总队", value: "0" },
{ name: "支队", value: "1" }, { name: "支队", value: "1" },
{ name: "大队", value: "2" }, { name: "大队", value: "2" },
{ name: "中队", value: "3" }, { name: "中队", value: "3" }
]; ]
} }
if (level == "1") { if (level == "1") {//如果是支队
//如果是支队
this.preparelevels = [ this.preparelevels = [
{ name: "支队", value: "1" }, { name: "支队", value: "1" },
{ name: "大队", value: "2" }, { name: "大队", value: "2" },
{ name: "中队", value: "3" }, { name: "中队", value: "3" }
]; ]
} }
if (level == "2") { if (level == "2") {//如果是大队
//如果是大队
this.preparelevels = [ this.preparelevels = [
{ name: "大队", value: "2" }, { name: "大队", value: "2" },
{ name: "中队", value: "3" }, { name: "中队", value: "3" }
]; ]
} }
if (level == "3") { if (level == "3") {//如果是中队
//如果是中队 this.preparelevels = [
this.preparelevels = [{ name: "中队", value: "3" }]; { name: "中队", value: "3" }
]
} }
this.iframeSrc = this.sanitizer.bypassSecurityTrustResourceUrl(this.src); this.iframeSrc = this.sanitizer.bypassSecurityTrustResourceUrl(this.src);
this.getAlltabledate(); this.getAlltabledate()
} }
wordShow = true; wordShow = true
iframeSrc; iframeSrc
src = ""; src = ''
selected = new FormControl(0); //选项卡 实例 selected = new FormControl(0); //选项卡 实例
preparelevels: any; preparelevels: any
level = ""; //类型 level = ''//类型
verifyState = ""; //审核状态 verifyState = ''//审核状态
projectlevel; //组织机构 projectlevel//组织机构
PlanLevel; //编制级别 PlanLevel//编制级别
addtime; //时间 addtime//时间
endtime; //结束时间 endtime//结束时间
count; //一共多少条 count//一共多少条
tableDate; tableDate
showPvt = false; //全景图是否显示 showPvt = false//全景图是否显示
shenheTable = []; //选中要审核的对象 shenheTable = []//选中要审核的对象
chuorzhong; //判断初审还是终审 chuorzhong//判断初审还是终审
radioid; //选中的id radioid//选中的id
showtype = -1; //0:word,1:全景图,2:二维三维,3:重点单位 showtype = -1//0:word,1:全景图,2:二维三维,3:重点单位
compantData = { name: "", buildingTypes: [], address: "" }; compantData = { name: '', buildingTypes: [], address: '' }
organizationName; organizationName
planData; planData
id; id
itemid; itemid
companyId; companyId
fetchUrl; fetchUrl
companyName; companyName
plantypes; plantypes
IsNewData = [true, false]; IsNewData=[true,false]
//获取表格数据 //获取表格数据
PageNumber = 1;
isTableData = false;
getAlltabledate() { getAlltabledate() {
this.isTableData = true;
let paramsdata: any = { let paramsdata: any = {
Operation: this.level || [], Operation: this.level || [],
ContentType: Number(this.projectlevel) || [], ContentType: Number(this.projectlevel) || [],
Level: this.PlanLevel || [], Level: this.PlanLevel || [],
verifyState: this.verifyState || [1, 2, 4, 5], verifyState: this.verifyState || [1, 2, 4, 5],
QueryStartTime: this.addtime || "", QueryStartTime: this.addtime || '',
QueryEndTime: this.endtime || "", QueryEndTime: this.endtime || '',
PlanType: this.plantypes || [], PlanType:this.plantypes||[],
IsNewData: this.IsNewData, IsNewData:this.IsNewData
PageNumber: this.PageNumber, }
PageSize: 10, this.http.get("/api/ContentVerifies", { params: paramsdata }).subscribe((data: any) => {
PageType: 2, //console.log(data)
}; this.tableDate = data.items
this.http this.count = data.totalCount
.get("/api/ContentVerifies", { params: paramsdata }) })
.subscribe((data: any) => {
//console.log(data)
this.isTableData = false;
this.tableDate = data.items;
this.count = data.totalCount;
});
} }
//提交查询 //提交查询
onSubmit(value) { onSubmit(value) {
this.PageNumber = 1; //console.log(value)
this.getAlltabledate(); this.getAlltabledate()
} }
//刷新 //刷新
record() { record() {
this.verifyState = ""; this.verifyState = ''
this.level = ""; this.level = ''
this.projectlevel = ""; this.projectlevel = ''
this.IsNewData = [true, false]; this.addtime = ''
this.addtime = ""; this.endtime = ''
this.endtime = ""; let level = sessionStorage.getItem("level");
this.PlanLevel = ""; this.PlanLevel = ''
this.plantypes = []; this.plantypes=[]
this.PageNumber = 1; //分页事件触发刷新 this.getAlltabledate()
this.getAlltabledate();
}
//分页事件
chagePage(e) {
console.log("分页事件", e);
this.PageNumber = e.pageIndex + 1;
this.getAlltabledate();
} }
//表格点击事件 //表格点击事件
viewer; //全景图对象 viewer//全景图对象
waterData: any; //需要传递给子组件的水源信息 waterData: any//需要传递给子组件的水源信息
LinkageForceDetailInfo: any; //需要传递给子组件的联动力量信息 LinkageForceDetailInfo: any//需要传递给子组件的联动力量信息
fireForceDetailInfo: any; //需要传递给子组件的消防力量信息 fireForceDetailInfo: any//需要传递给子组件的消防力量信息
postlevel: any; postlevel: any
bianzhi = false; bianzhi = false
tableClick(e, item) { tableClick(e, item) {
this.showtype = -1; this.showtype = -1
//e.target.parentElement.bgColor='#2196F3' //e.target.parentElement.bgColor='#2196F3'
// console.log(item) // console.log(item)
this.organizationName = ""; this.organizationName = ''
this.itemid = item.itemId; this.itemid = item.itemId
this.id = item.id; this.id = item.id
this.fetchUrl = ""; this.fetchUrl = ''
this.viewer = {}; this.viewer = {}
if (item.contentType == 11) { if (item.contentType == 11) {
this.bianzhi = false; this.bianzhi = false
window.setTimeout(() => { window.setTimeout(() => {
this.showtype = 3; this.showtype = 3
sessionStorage.setItem("companyId", item.itemId); sessionStorage.setItem('companyId', item.itemId)
}, 0); }, 0)
} else if (item.contentType == 12) { } else if (item.contentType == 12) {
this.bianzhi = false; this.bianzhi = false
//水源 //水源
this.http.get(`/api/WaterSources/${item.itemId}`).subscribe((data) => { this.http.get(`/api/WaterSources/${item.itemId}`).subscribe((data) => {
this.waterData = data; this.waterData = data
this.showtype = 12; this.showtype = 12
}); })
} else if (item.contentType == 13) { } else if (item.contentType == 13) {
this.bianzhi = false; this.bianzhi = false
//消防力量 //消防力量
this.http this.http.get(`/api/CustomFireForce/${item.itemId}`).subscribe((data: any) => {
.get(`/api/CustomFireForce/${item.itemId}`) if (data.forceType != 0) {//如果是其他消防力量
.subscribe((data: any) => { this.postlevel = 4
if (data.forceType != 0) { } else {
//如果是其他消防力量 this.postlevel = data.level
this.postlevel = 4; }
} else { // console.log('xxx',data)
this.postlevel = data.level; data.fireForceDetailInfo.location ? null : data.fireForceDetailInfo.location = { x: null, y: null }
} this.fireForceDetailInfo = data.fireForceDetailInfo
// console.log('xxx',data) this.showtype = 13
data.fireForceDetailInfo.location })
? null
: (data.fireForceDetailInfo.location = { x: null, y: null });
this.fireForceDetailInfo = data.fireForceDetailInfo;
this.showtype = 13;
});
} else if (item.contentType == 14) { } else if (item.contentType == 14) {
this.bianzhi = false; this.bianzhi = false
//联动力量 //联动力量
this.http this.http.get(`/api/LinkageForces/${item.itemId}`).subscribe((data: any) => {
.get(`/api/LinkageForces/${item.itemId}`)
.subscribe((data: any) => { data.location ? null : data.location = { x: null, y: null }
data.location ? null : (data.location = { x: null, y: null }); this.LinkageForceDetailInfo = data
this.LinkageForceDetailInfo = data; this.showtype = 14
this.showtype = 14; })
});
} else { } else {
this.http this.http.get(`/api/PlanComponents/${item.itemId}`).subscribe((data: any) => {
.get(`/api/PlanComponents/${item.itemId}`) this.companyId = data.companyId
.subscribe((data: any) => { this.companyName = data.companyName
this.companyId = data.companyId; //this.bianzhi = false
this.companyName = data.companyName;
//this.bianzhi = false
if (data.planType != 2 && data.planType != 1) { if (data.planType != 2 && data.planType != 1) {
if (data.planMode == 2) { if (data.planMode == 2) {
this.showtype = 0; this.showtype = 0
this.bianzhi = true; 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.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.iframeSrc = this.sanitizer.bypassSecurityTrustResourceUrl(this.src);
this.src
);
//this.src=`/keyUnit/viewunitinfoplan?id=${data.companyId}&orName=${data.company.organizationId}&orId=${data.company.organizationName}` //this.src=`/keyUnit/viewunitinfoplan?id=${data.companyId}&orName=${data.company.organizationId}&orId=${data.company.organizationName}`
} else { } else{
this.bianzhi = false; this.bianzhi = false
this.fetchUrl = data.attachmentUrls[0]; this.fetchUrl = data.attachmentUrls[0]
var index = this.fetchUrl.indexOf("/"); var index = this.fetchUrl.indexOf("\/")
if (this.fetchUrl.substr(0, index) == "psw") { if (this.fetchUrl.substr(0, index) == 'psw') {
this.showtype = 1; this.showtype = 1
var obj = document.getElementById("viewer"); var obj = document.getElementById('viewer')
if (obj != null) { if (obj != null) {
obj.innerHTML = ""; obj.innerHTML = ''
}
window.setTimeout(() => {
this.viewer = new Viewer({
container: document.querySelector("#viewer"),
panorama: "/api/Objects/PlanPlatform/" + this.fetchUrl,
});
});
} else {
this.lookWord();
} }
window.setTimeout(() => {
this.viewer = new Viewer({
container: document.querySelector('#viewer'),
panorama: '/api/Objects/PlanPlatform/' + this.fetchUrl,
});
})
} else {
this.lookWord()
}
} }
} else { } else {
this.organizationName = item.organizationName; this.organizationName = item.organizationName
this.planData = data; this.planData = data
this.handleData(); this.handleData()
return; return
//this.src=`/planAudit/planpass?id=${data.companyId}&companyName=${data.companyName}&auditPlanId=${data.id}&auditStatus=${data.auditStatus}&planType=1` //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); //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`) //window.open(`/planAudit/planpass?id=${data.companyId}&companyName=${data.companyName}&auditPlanId=${data.id}&auditStatus=${data.auditStatus}&planType=1`)
} }
});
})
} }
if (e.checked) { if (e.checked) {
this.shenheTable.push(item); this.shenheTable.push(item)
} else { }
else {
for (var i = 0; i < this.shenheTable.length; i++) { for (var i = 0; i < this.shenheTable.length; i++) {
if (this.shenheTable[i].id == item.id) { 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.chuorzhong=item.verifyState
this.radioid=item.itemId */ this.radioid=item.itemId */
} }
//毕升 //毕升
lookWord() { lookWord() {
this.showtype = 0; this.showtype = 0
let suffix = this.fetchUrl let suffix = this.fetchUrl.split('.')[this.fetchUrl.split('.').length - 1].toLowerCase()
.split(".") if (suffix == 'docx' || suffix == 'doc') {
[this.fetchUrl.split(".").length - 1].toLowerCase(); let arr = this.fetchUrl.split('.')
if (suffix == "docx" || suffix == "doc") { arr[arr.length - 1] = 'pdf'
let arr = this.fetchUrl.split("."); this.src = `/api/Objects/PlanPlatform/` + arr.join('.')
arr[arr.length - 1] = "pdf"; } else if (suffix == 'pdf') {
this.src = `/api/Objects/PlanPlatform/` + arr.join("."); this.src = `/api/Objects/PlanPlatform/` + this.fetchUrl
} else if (suffix == "pdf") {
this.src = `/api/Objects/PlanPlatform/` + this.fetchUrl;
} }
this.iframeSrc = this.sanitizer.bypassSecurityTrustResourceUrl(this.src); this.iframeSrc = this.sanitizer.bypassSecurityTrustResourceUrl(this.src);
} }
//查看按钮跳转 //查看按钮跳转
lookNew() { lookNew() {
window.open(this.src); window.open(this.src)
} }
//查看二维三维预案 //查看二维三维预案
thirdPartyURL; thirdPartyURL
planType; planType
twoOrthree; twoOrthree
handleData() { handleData() {
console.log(this.planData); this.compantData = { name: '', buildingTypes: [], address: '' }
this.compantData = { name: "", buildingTypes: [], address: "" }; this.planType = this.planData.planMode
this.planType = this.planData.planMode; let data = this.planData
let data = this.planData;
if (data.planType == 1) { if (data.planType == 1) {
this.twoOrthree = 2; this.twoOrthree = 2
} else if (data.planType == 2) { } else if (data.planType == 2) {
this.twoOrthree = 3; this.twoOrthree = 3
} }
if (this.planData.planMode == 0) { if (this.planData.planMode == 0) { //预案planMode=0时, 查看word
//预案planMode=0时, 查看word
//this.lookWord() //this.lookWord()
} else if (this.planData.planMode == 1 || this.planData.planMode == 2) { } else if (this.planData.planMode == 1) { //预案planMode=1时, 解析文档
//预案planMode=2时, 跳查看页面组件
this.showtype = 2; } else if (this.planData.planMode == 2) { //预案planMode=2时, 跳查看页面组件
this.showtype = 2
this.http.get(`/api/Plans/${data.companyId}`).subscribe((data: any) => { 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
}); })
sessionStorage.setItem( sessionStorage.setItem("buildingTypeId", this.compantData.buildingTypes.length ? this.compantData.buildingTypes[0].id : undefined);
"buildingTypeId",
this.compantData.buildingTypes.length
? this.compantData.buildingTypes[0].id
: undefined
);
sessionStorage.setItem("companyId", this.companyId); sessionStorage.setItem("companyId", this.companyId);
sessionStorage.setItem("planId", this.itemid); sessionStorage.setItem("planId", this.itemid);
sessionStorage.setItem("editable", "0"); sessionStorage.setItem("editable", '0');
sessionStorage.setItem("planName", data.name); sessionStorage.setItem("planName", data.name)
let companyId = sessionStorage.getItem("companyId"); let companyId = sessionStorage.getItem("companyId")
this.thirdPartyURL = this.sanitizer.bypassSecurityTrustResourceUrl( this.thirdPartyURL = this.sanitizer.bypassSecurityTrustResourceUrl(`/keyUnit/viewunitinfoplans?id=${companyId}`);
`/keyUnit/viewunitinfoplans?id=${companyId}`
);
//window.open(`/keyUnit/viewunitinfoplan?id=${companyId}`) //window.open(`/keyUnit/viewunitinfoplan?id=${companyId}`)
} else if (this.planData.planMode == 3) { } else if (this.planData.planMode == 3) { //预案planMode=3时, 第三方网址'
//预案planMode=3时, 第三方网址' this.showtype = 2
this.showtype = 2;
this.http.get(`/api/Plans/${data.companyId}`).subscribe((data: any) => { 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.dialog.open(show3D,{width:'1350px',height:'700px',data:{url:data.url}}); //打开图片弹窗
this.thirdPartyURL = this.sanitizer.bypassSecurityTrustResourceUrl( this.thirdPartyURL = this.sanitizer.bypassSecurityTrustResourceUrl(data.url)
data.url
);
} }
} }
//打开三维预案弹窗 //打开三维预案弹窗
oopen3Dshow() { oopen3Dshow() {
this.dialog.open(recordshow3D, { this.dialog.open(recordshow3D, { width: '1650px', height: '850px', data: { url: this.thirdPartyURL, twoOrthree: this.twoOrthree } });
width: "1650px",
height: "850px",
data: { url: this.thirdPartyURL, twoOrthree: this.twoOrthree },
});
} }
//判断iframe是否加载完成 //判断iframe是否加载完成
iftrue = true; iftrue=true
ifranmeLoad() { ifranmeLoad(){
var iframe = document.getElementById("myiframe"); var iframe = document.getElementById("myiframe");
iframe.onload = function () {}; iframe.onload = function(){
this.iftrue = !this.iftrue; }
this.iftrue=!this.iftrue
} }
} }
@Component({ @Component({
selector: "app-wait-examineer-show3D", selector: 'app-wait-examineer-show3D',
templateUrl: "./show3D.html", templateUrl: './show3D.html',
styleUrls: ["./plan-record.component.scss"], styleUrls: ['./plan-record.component.scss']
}) })
export class recordshow3D { export class recordshow3D {
constructor( constructor(private sanitizer: DomSanitizer, public dialogRef: MatDialogRef<recordshow3D>, @Inject(MAT_DIALOG_DATA) public data, public dialog: MatDialog) { }
private sanitizer: DomSanitizer,
public dialogRef: MatDialogRef<recordshow3D>,
@Inject(MAT_DIALOG_DATA) public data,
public dialog: MatDialog
) {}
ngOnInit(): void { ngOnInit(): void {
// console.log(this.data) // console.log(this.data)
this.threedUrl = this.sanitizer.bypassSecurityTrustResourceUrl( this.threedUrl = this.sanitizer.bypassSecurityTrustResourceUrl(this.data.url.changingThisBreaksApplicationSecurity)
this.data.url.changingThisBreaksApplicationSecurity
);
} }
threedUrl; threedUrl
} }

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

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

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

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

1107
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 添加到地图 // 将 markers 添加到地图
this.map.add(this.newPositionMarker); this.map.add(this.newPositionMarker);
}else{ }else{
this.map.setCity('上海市'); this.map.setCity('唐山市');
} }
}, 0); }, 0);

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

File diff suppressed because it is too large Load Diff

3665
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();
});
}
}
}

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

@ -7,108 +7,102 @@
* @LastEditTime: 2021-07-27 10:44:51 * @LastEditTime: 2021-07-27 10:44:51
--> -->
<form (ngSubmit)="onSubmit(form.value)" #form="ngForm" class="example-container"> <form (ngSubmit)="onSubmit(form.value)" #form="ngForm" class="example-container">
<div class="topbox" style="text-align: center;"> <div class="topbox" style="text-align: center;">
<span mat-dialog-title>新建预案</span> <span mat-dialog-title>新建预案</span>
</div> </div>
<div class="mainbox"> <div class="mainbox">
<mat-horizontal-stepper [linear]="isLinear" #stepper> <mat-horizontal-stepper [linear]="isLinear" #stepper>
<mat-step [stepControl]="firstFormGroup"> <mat-step [stepControl]="firstFormGroup">
<form [formGroup]="firstFormGroup"> <form [formGroup]="firstFormGroup">
<ng-template matStepLabel>填写名称与类型</ng-template> <ng-template matStepLabel>填写名称与类型</ng-template>
<mat-form-field> <mat-form-field>
<input matInput id="name" name="name" type='text' required autocomplete="off" placeholder="请输入预案名称" <input matInput id="name" name="name" type='text'
formControlName="firstCtrlone"> required autocomplete="off"
</mat-form-field> placeholder="请输入预案名称" formControlName="firstCtrlone">
</mat-form-field>
<div> <div>
<!-- <label style="margin-right: 10px;">编制级别:</label> --> <!-- <label style="margin-right: 10px;">编制级别:</label> -->
<mat-form-field> <mat-form-field>
<mat-select placeholder='请选择预案类型' required formControlName="firstCtrltwo" [(ngModel)]='cadPlan'> <mat-select placeholder='请选择预案类型' required formControlName="firstCtrltwo" [(ngModel)]='cadPlan'>
<mat-option value="16">文本预案</mat-option> <mat-option value="16">文本预案</mat-option>
<mat-option value="1">二维预案</mat-option> <mat-option value="1">二维预案</mat-option>
<mat-option value="2">三维预案</mat-option> <mat-option value="2">三维预案</mat-option>
<mat-option value="4">其他预案</mat-option> <mat-option value="4">其他预案</mat-option>
</mat-select> </mat-select>
</mat-form-field> </mat-form-field>
</div> </div>
<div> <div>
<mat-form-field> <mat-form-field>
<mat-select name="reservePlanType" formControlName="firstCtrlthree" placeholder='请选择预案级别' required> <mat-select name="reservePlanType" formControlName="firstCtrlthree" placeholder='请选择预案级别' required>
<mat-option value='3'>Ⅲ级预案</mat-option> <mat-option value='3'>Ⅲ级预案</mat-option>
<mat-option value='4' *ngIf="cadPlan=='16'||(levels!='1'&&levels!='2')">Ⅳ级预案</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-option value='5' *ngIf="cadPlan=='16'||(levels!='1'&&levels!='2')">Ⅴ级预案</mat-option>
</mat-select> </mat-select>
</mat-form-field> </mat-form-field>
</div> </div>
<div> <div>
<button type="button" mat-button matStepperNext (click)="next(firstFormGroup)">下一步</button> <button type="button" mat-button matStepperNext (click)="next(firstFormGroup)">下一步</button>
<button type="button" mat-button (click)="closediv()">取消</button> <button type="button" mat-button (click)="closediv()">取消</button>
</div> </div>
</form> </form>
</mat-step> </mat-step>
<mat-step [stepControl]="secondFormGroup"> <mat-step [stepControl]="secondFormGroup">
<form (ngSubmit)="onSubmit(form)" #form="ngForm"> <form (ngSubmit)="onSubmit(form)" #form="ngForm">
<ng-template matStepLabel>上传预案完成创建</ng-template> <ng-template matStepLabel >上传预案完成创建</ng-template>
<div class="upbox"> <div class="upbox">
<div style="float: left;margin-top: 10px;"> <div style="float: left;margin-top: 10px;">
<span class="pigepadding">预案形式:</span> <span class="pigepadding">预案形式:</span>
</div> </div>
<mat-radio-group required name="planup" [(ngModel)]="defaultisshow" style="float: left;" <mat-radio-group required name="planup" [(ngModel)]="defaultisshow" style="float: left;" (change)="selectradio($event)">
(change)="selectradio($event)"> <div *ngIf="localup">
<div *ngIf="localup"> <mat-radio-button value="1" style="margin-right: 10px;">本地上传</mat-radio-button>
<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)">
<input style="width: 175px;" type="file" name="" id="uploadFile" *ngIf="isup" <span *ngIf="uploadover" style="font-size: 13px;">(已上传)</span>
(change)="filechange($event)"> </div>
<span *ngIf="uploadover" style="font-size: 13px;">(已上传)</span> <!-- <div *ngIf="inputword">
</div> <mat-radio-button value="2" style="margin-right: 10px;">模板在线编制</mat-radio-button>
<div *ngIf="inputword"> </div>
<mat-radio-button value="2" style="margin-right: 10px;">模板在线编制</mat-radio-button> <div *ngIf="inputNew">
</div> <mat-radio-button value="4" style="margin-right: 10px;">自定义在线编制</mat-radio-button>
<div *ngIf="inputNew"> </div> -->
<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> <mat-radio-button value="1" style="margin-right: 10px;">导入word文档</mat-radio-button>
<input type="file" name="" id="" *ngIf="isinput" (change)="fileInput($event)"> <input type="file" name="" id="" *ngIf="isinput" (change)="fileInput($event)">
</div> --> </div> -->
<div *ngIf="pswShow"> <!-- <div *ngIf="pswShow">
<!-- <mat-radio-group > <mat-checkbox [(ngModel)]='psw' name='psw' style="margin-left: 2px;">是否为全景图</mat-checkbox>
<mat-radio-button value='psw' >是否为全景图</mat-radio-button> </div> -->
</mat-radio-group> --> <div *ngIf="onlineedit">
<mat-checkbox [(ngModel)]='psw' name='psw' style="margin-left: 2px;">是否为全景图</mat-checkbox> <mat-radio-button value="2">在线编辑</mat-radio-button>
</div> </div>
<div *ngIf="onlineedit"> <div *ngIf="website">
<mat-radio-button value="2">在线编辑</mat-radio-button> <mat-radio-button value="3">网页地址</mat-radio-button>
</div> <input type="text" *ngIf="isweb" name="webaddress" [(ngModel)]="webaddress" style="width: 175px;height: 20px;margin-left:10px;">
<div *ngIf="website"> </div>
<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> </mat-radio-group>
</div> </div>
<!-- --> <!-- -->
<div class="progressBox" *ngIf="uploadisLoading"> <div class="progressBox" *ngIf="uploadisLoading">
<span style="font-size: 13px;">上传中...</span> <span style="font-size: 13px;">上传中...</span>
<mat-progress-bar mode="determinate" [value]="uploadProgress" class="progress" <mat-progress-bar mode="determinate" [value]="uploadProgress" class="progress" style="width: 320px;left: 64px;"></mat-progress-bar>
style="width: 320px;left: 64px;"></mat-progress-bar> <button type="button" mat-raised-button (click)="cancel()">取消上传</button>
<button type="button" mat-raised-button (click)="cancel()">取消上传</button> </div>
</div> <div>
<div> <button type="button" mat-button matStepperPrevious>上一步</button>
<button type="button" mat-button matStepperPrevious>上一步</button> <button type="button" mat-button (click)="closediv()">取消</button>
<button type="button" mat-button (click)="closediv()">取消</button> <button mat-button *ngIf="!uploadisLoading">完成</button>
<button mat-button *ngIf="!uploadisLoading">完成</button> </div>
</div> </form>
</form>
</mat-step> </mat-step>
<!-- <mat-step> <!-- <mat-step>
<ng-template matStepLabel>Done</ng-template> <ng-template matStepLabel>Done</ng-template>
You are now done. You are now done.
<div> <div>
@ -116,7 +110,7 @@
<button type="button" mat-button (click)="stepper.reset()">Reset</button> <button type="button" mat-button (click)="stepper.reset()">Reset</button>
</div> </div>
</mat-step> --> </mat-step> -->
</mat-horizontal-stepper> </mat-horizontal-stepper>
</div> </div>
</form> </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;"> <div style="text-align: center;">
<span mat-dialog-title>审批结果</span> <span mat-dialog-title>审批结果</span>
</div> </div>
<div class="auditDiv"> <div class="auditDiv">
@ -7,49 +15,15 @@
<p>提交时间:{{data.element.committedTime| date:'yyyy-MM-dd HH:mm:ss'}}</p> <p>提交时间:{{data.element.committedTime| date:'yyyy-MM-dd HH:mm:ss'}}</p>
<p>发起申请:{{commitOrganizationName }}</p> <p>发起申请:{{commitOrganizationName }}</p>
<mat-divider></mat-divider> <mat-divider></mat-divider>
<p> <p>初审时间:{{data.element.firstAudittedTime| date:'yyyy-MM-dd HH:mm:ss'}}</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.firstAuditorOrganizationName}}</p> <p>初审机构:{{data.element.firstAuditorOrganizationName}}</p>
<p>初审意见:{{data.element.firstAuditOpinion}}</p> <p>初审意见:{{data.element.firstAuditOpinion}}</p>
<p>初审结果:{{data.element.auditStatus==16?'待终审':data.element.auditStatus==32?'初审退回':data.element.auditStatus==2||data.element.auditStatus==4?'初审通过':''}} <p>初审结果:{{data.element.auditStatus==16?'待终审':data.element.auditStatus==32?'初审退回':data.element.auditStatus==2||data.element.auditStatus==4?'初审通过':''}}</p>
</p>
<mat-divider></mat-divider> <mat-divider></mat-divider>
<p>终审时间:{{data.element.audittedTime| date:'yyyy-MM-dd HH:mm:ss'}}</p> <p>终审时间:{{data.element.audittedTime| date:'yyyy-MM-dd HH:mm:ss'}}</p>
<p>终审机构:{{data.element.auditorOrganizationName}}</p> <p>终审机构:{{data.element.auditorOrganizationName}}</p>
<p>终审意见:{{data.element.auditOpinion}}</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> </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"> <ng-container matColumnDef="planCategory">
<th mat-header-cell *matHeaderCellDef>预案级别</th> <th mat-header-cell *matHeaderCellDef>预案级别</th>
<td mat-cell *matCellDef="let element"> <td mat-cell *matCellDef="let element">
{{element.planCategory=='3'?'Ⅲ级预案':element.planCategory=='4'?'Ⅳ级预案':'Ⅴ级预案'}} {{element.planCategory=='3'?'Ⅲ级预案':element.planCategory=='4'?'Ⅳ级预案':'Ⅴ级预案'}}</td>
<mat-icon *ngIf="element.auditStatus==8 || element.maintenanceVerifyState=='未提交审核'"
class="editPlanCategory" (click)="editPlanCategory(element)">create</mat-icon>
</td>
</ng-container> </ng-container>
<ng-container matColumnDef="plantype"> <ng-container matColumnDef="plantype">
<th mat-header-cell *matHeaderCellDef style="width: 150px;">预案类型</th> <th mat-header-cell *matHeaderCellDef style="width: 150px;">预案类型</th>
@ -88,9 +85,15 @@
</td> </td>
</ng-container> </ng-container>
<ng-container matColumnDef="auditstate"> <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"> <td mat-cell *matCellDef="let element">
{{element.auditStatus | auditState}} {{element.maintenanceVerifyState==null?'':element.maintenanceVerifyState}}
</td> </td>
</ng-container> </ng-container>
<ng-container matColumnDef="isopen"> <ng-container matColumnDef="isopen">
@ -104,10 +107,9 @@
<ng-container *ngIf="isoperation == 'true'" matColumnDef="operation"> <ng-container *ngIf="isoperation == 'true'" matColumnDef="operation">
<th mat-header-cell *matHeaderCellDef>操作</th> <th mat-header-cell *matHeaderCellDef>操作</th>
<td mat-cell *matCellDef="let element"> <td mat-cell *matCellDef="let element">
<span (click)="changeName(element)" <span (click)="changeName(element)" *ngIf="element.auditStatus==8">改名</span>
*ngIf="element.auditStatus==8 || element.maintenanceVerifyState=='未提交审核'">改名</span> <!-- <span (click)="upzhuanMb(element)"
<span (click)="upzhuanMb(element)" *ngIf="element.planMode==1&&element.planType==16&&element.planCategory==5">转在线导入</span> -->
*ngIf="element.planMode==1&&element.planType==16&&element.planCategory==5">转在线导入</span>
<span (click)="editPlan(element)" <span (click)="editPlan(element)"
[ngClass]="{'grey': !(element.auditStatus!='16' && element.auditStatus != '1' )}">编辑</span> [ngClass]="{'grey': !(element.auditStatus!='16' && element.auditStatus != '1' )}">编辑</span>
<span (click)="lookPlan(element)" <span (click)="lookPlan(element)"
@ -125,7 +127,6 @@
<ng-container *ngIf="isoperation == 'false'" matColumnDef="operation"> <ng-container *ngIf="isoperation == 'false'" matColumnDef="operation">
<th mat-header-cell *matHeaderCellDef>操作</th> <th mat-header-cell *matHeaderCellDef>操作</th>
<td mat-cell *matCellDef="let element"> <td mat-cell *matCellDef="let element">
<!-- <span (click)="sixFamiliarize(element)">六熟悉</span> -->
<span (click)="lookPlan(element)">查看</span> <span (click)="lookPlan(element)">查看</span>
<span (click)="readFile(element)" <span (click)="readFile(element)"
[ngClass]="{'grey': element.planMode == '1' || element.planMode == '2' || element.planMode == '3'}">下载</span> [ngClass]="{'grey': element.planMode == '1' || element.planMode == '2' || element.planMode == '3'}">下载</span>

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

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

2763
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;
}
);
}
}
}

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

@ -91,26 +91,20 @@
</mat-select> </mat-select>
</mat-form-field> </mat-form-field>
</div> </div>
<div class="queryField" *ngIf="!padMore&&!pcMore"> <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> <label style="margin-right: 10px;">编制级别:</label>
<mat-form-field> <mat-form-field>
<mat-select name="preparelevel" [(ngModel)]="preparelevel" placeholder='请选择编制级别'> <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 *ngFor="let item of preparelevels" [value]="item.value">{{item.name}}
</mat-option> </mat-option>
</mat-select> </mat-select>
</mat-form-field> </mat-form-field>
<mat-checkbox style="margin-left: 6px;" [(ngModel)]="plcheck" name="plcheck">包含下级</mat-checkbox> <mat-checkbox style="margin-left: 6px;" [(ngModel)]="plcheck" name="plcheck">包含下级</mat-checkbox>
</div> --> </div>
<div class="queryField" *ngIf="!padMore&&!pcMore"> <div class="queryField" *ngIf="!padMore&&!pcMore">
<label style="margin-right: 10px;">审核状态:</label> <label style="margin-right: 10px;">审核状态:</label>
<mat-form-field> <mat-form-field>
@ -158,14 +152,12 @@
</mat-select> </mat-select>
</mat-form-field> </mat-form-field>
</div> </div>
<div class="queryField" *ngIf="!padMore&&!pcMore"> <!-- <div class="queryField" *ngIf="!padMore&&!pcMore">
<mat-checkbox (ngModelChange)="templatePlanChange($event,1)" [(ngModel)]="templatePlan" <mat-checkbox (ngModelChange)="templatePlanChange($event,1)" [(ngModel)]="templatePlan" name="templatePlan">模板录入预案</mat-checkbox>
name="templatePlan">模板录入预案</mat-checkbox>
</div> </div>
<div class="queryField" *ngIf="!padMore&&!pcMore"> <div class="queryField" *ngIf="!padMore&&!pcMore">
<mat-checkbox (ngModelChange)="templatePlanChange($event,2)" [(ngModel)]="customPlan" <mat-checkbox (ngModelChange)="templatePlanChange($event,2)" [(ngModel)]="customPlan" name="customPlan">自定义预案</mat-checkbox>
name="customPlan">自定义预案</mat-checkbox> </div> -->
</div>
</div> </div>
</form> </form>
</div> </div>
@ -181,16 +173,6 @@
<span class="weihu" *ngIf="!element.company.isNewData">维护更新</span> <span class="weihu" *ngIf="!element.company.isNewData">维护更新</span>
</td> </td>
</ng-container> </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"> <ng-container matColumnDef="unitname">
<th mat-header-cell *matHeaderCellDef>单位名称</th> <th mat-header-cell *matHeaderCellDef>单位名称</th>
<td mat-cell *matCellDef="let element">{{element.company.name}}</td> <td mat-cell *matCellDef="let element">{{element.company.name}}</td>
@ -361,10 +343,10 @@
<th mat-header-cell *matHeaderCellDef>审核状态</th> <th mat-header-cell *matHeaderCellDef>审核状态</th>
<td mat-cell *matCellDef="let element">{{element.auditStatus}}</td> <td mat-cell *matCellDef="let element">{{element.auditStatus}}</td>
</ng-container> </ng-container>
<!-- <ng-container matColumnDef="projectlevel"> <ng-container matColumnDef="projectlevel">
<th mat-header-cell *matHeaderCellDef>编制级别</th> <th mat-header-cell *matHeaderCellDef>编制级别</th>
<td mat-cell *matCellDef="let element">{{element.planLevel}}</td> <td mat-cell *matCellDef="let element">{{element.planLevel}}</td>
</ng-container> --> </ng-container>
<ng-container matColumnDef="operation"> <ng-container matColumnDef="operation">
<th mat-header-cell *matHeaderCellDef>操作</th> <th mat-header-cell *matHeaderCellDef>操作</th>
<td mat-cell *matCellDef="let element"> <td mat-cell *matCellDef="let element">

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

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

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

@ -1,201 +1,190 @@
<div style="height: 100%;overflow-y: auto;"> <div style="height: 100%;overflow-y: auto;">
<div class="header"> <div class="header" >
<form (ngSubmit)="onSubmit(form.value)" #form="ngForm"> <form (ngSubmit)="onSubmit(form.value)" #form="ngForm">
<div class="queryBox"> <div class="queryBox">
<div class="queryField"> <div class="queryField">
<label style="margin-right: 10px;">预案名称:</label> <label style="margin-right: 10px;">预案名称:</label>
<mat-form-field class="example-full-width"> <mat-form-field class="example-full-width">
<input matInput placeholder="请输入预案名称" name="companyName" autocomplete="off" [(ngModel)]="unitname"> <input matInput placeholder="请输入预案名称" name="companyName" autocomplete="off" [(ngModel)]="unitname">
</mat-form-field> </mat-form-field>
</div> </div>
<div class="queryField"> <div class="queryField" >
<label style="margin-right: 10px;">编制级别:</label> <label style="margin-right: 10px;">编制级别:</label>
<mat-form-field> <mat-form-field>
<mat-select name="preparelevel" placeholder='请选择编制级别' [(ngModel)]="projectlevel"> <mat-select name="preparelevel" placeholder='请选择编制级别' [(ngModel)]="projectlevel">
<!-- <mat-option value="1">总队</mat-option> <!-- <mat-option value="1">总队</mat-option>
<mat-option value="2">支队</mat-option> <mat-option value="2">支队</mat-option>
<mat-option value="4">大队</mat-option> <mat-option value="4">大队</mat-option>
<mat-option value="8">中队</mat-option> --> <mat-option value="8">中队</mat-option> -->
<mat-option *ngFor="let item of preparelevels" [value]="item.value">{{item.name}}</mat-option> <mat-option *ngFor="let item of preparelevels" [value]="item.value">{{item.name}}</mat-option>
</mat-select> </mat-select>
</mat-form-field> </mat-form-field>
<mat-checkbox style="margin-left: 6px;" [(ngModel)]="plcheck" name="plcheck">包含下级</mat-checkbox> <mat-checkbox style="margin-left: 6px;" [(ngModel)]="plcheck" name="plcheck">包含下级</mat-checkbox>
<span *ngIf="padMore" style="margin-left: 20px; color: #0080FF;" (click)='padInfo()'>更多筛选条件<img <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>
[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>
<span *ngIf="padput" style="margin-left: 10px; color: #0080FF;" (click)='padInfo()'>收起<img [src]='imgsrcdown' </div>
style="width: 10px;height: 6px;margin:0 0 3px 2px;"> </span>
</div>
<div class="queryField" *ngIf="!pcfind"> <div class="queryField" *ngIf="!pcfind">
<button mat-raised-button color="primary">查询</button> <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>
<div class="queryField" *ngIf="!padMore"> <div class="queryField" *ngIf="!padMore">
<label style="margin-right: 10px;">预案级别:</label> <label style="margin-right: 10px;">预案级别:</label>
<mat-form-field> <mat-form-field>
<mat-select placeholder='请选择预案级别' name="level" [(ngModel)]="level"> <mat-select placeholder='请选择预案级别' name="level" [(ngModel)]="level">
<mat-option value="6">国家级</mat-option> <mat-option value="6">国家级</mat-option>
<mat-option value="7">市级</mat-option> <mat-option value="7">市级</mat-option>
</mat-select> </mat-select>
</mat-form-field> </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>
<div class="queryField" *ngIf="!padMore"> <div class="queryField" *ngIf="!padMore&&!pcMore">
<label style="margin-right: 10px;">添加人:</label> <label style="margin-right: 10px;">添加时间:</label>
<mat-form-field class="example-full-width"> <mat-form-field class="example-full-width">
<input matInput placeholder="请输入添加人" name="addname" autocomplete="off" [(ngModel)]="addname"> <input type="date" matInput name="addtime" autocomplete="off" [(ngModel)]="addtime">
</mat-form-field> </mat-form-field>
<span *ngIf="pcMore" style="margin-left: 15px; color: #0080FF; cursor: pointer;" (click)='pcInfo()'>更多筛选条件<img <!-- <mat-icon aria-hidden="false" style="position: relative;right: 120px;top: 5px;">arrow forward</mat-icon> -->
[src]='imgsrcopen' style="width: 10px;height: 6px;margin:0 0 3px 2px;"> </span> <mat-icon *ngIf="padjt" aria-hidden="false" style="position: relative;right: 120px;top: 5px;" id="padshow">arrow forward</mat-icon>
<span *ngIf="pcput" style="margin-left: 10px; color: #0080FF; cursor: pointer;" (click)='pcInfo()'>收起<img <span style="margin-left: 15px;" id="pcshow" *ngIf="!padMore&&!padjt">🠊</span>
[src]='imgsrcdown' style="width: 10px;height: 6px;margin:0 0 3px 2px;"> </span> <mat-form-field class="example-full-width" style="margin-left: 10px;">
</div> <input type="date" matInput name="endtime" autocomplete="off" [(ngModel)]="endtime">
<div class="queryField" *ngIf="pcfind"> </mat-form-field>
<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>
<div class="queryField" *ngIf="!padMore&&!pcMore"> <div class="queryField" *ngIf="!padMore&&!pcMore">
<label style="margin-right: 10px;">预案类型:</label> <label style="margin-right: 10px;">预案类型:</label>
<mat-form-field> <mat-form-field>
<input matInput placeholder="请输入预案类型" name="reservePlanType" autocomplete="off" [(ngModel)]="typePlan"> <input matInput placeholder="请输入预案类型" name="reservePlanType" autocomplete="off" [(ngModel)]="typePlan">
</mat-form-field> </mat-form-field>
</div> </div>
<div class="queryField" *ngIf="!padMore&&!pcMore"> <div class="queryField" *ngIf="!padMore&&!pcMore">
<label style="margin-right: 10px;">审核状态:</label> <label style="margin-right: 10px;">审核状态:</label>
<mat-form-field> <mat-form-field>
<mat-select name="toExamine" placeholder='请选择审核状态' [(ngModel)]="unitstate"> <mat-select name="toExamine" placeholder='请选择审核状态' [(ngModel)]="unitstate">
<mat-option value="8">未提交审核</mat-option> <mat-option value="8">未提交审核</mat-option>
<mat-option value="1">审核中</mat-option> <mat-option value="1">审核中</mat-option>
<mat-option value="2">审核通过</mat-option> <mat-option value="2">审核通过</mat-option>
<mat-option value="4">审核退回</mat-option> <mat-option value="4">审核退回</mat-option>
</mat-select> </mat-select>
</mat-form-field> </mat-form-field>
</div> </div>
<div class="queryField" *ngIf="!padMore&&!pcMore"> <div class="queryField" *ngIf="!padMore&&!pcMore">
<input type="radio" style="height: 16px;width: 16px;position: relative;top: 2px;" name="whgx" [value]='true' <input type="radio" style="height: 16px;width: 16px;position: relative;top: 2px;" name="whgx" [value]='true' [(ngModel)]="IsNewData">
[(ngModel)]="IsNewData"> <label style="margin-right: 10px;margin-left: 2px;">新增</label>
<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">
<input type="radio" style="height: 16px;width: 16px;position: relative;top: 2px;" name="whgx" [value]='false' <label style="margin-right: 10px;margin-left: 2px;">维护更新</label>
[(ngModel)]="IsNewData"> </div>
<label style="margin-right: 10px;margin-left: 2px;">维护更新</label>
</div>
</div> </div>
<!-- <div class="butclass" style="width: 100%;text-align: center;"> <!-- <div class="butclass" style="width: 100%;text-align: center;">
<button mat-raised-button color="primary" type="submit">查询</button> <button mat-raised-button color="primary" type="submit">查询</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> -->
</form> </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> -->
</div> </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> -->
</div>
<div class="progressBox" style="margin-left: 100px;" *ngIf="downloadisLoading"> <div class="progressBox" style="margin-left: 100px;" *ngIf="downloadisLoading">
<!-- <button mat-raised-button style="margin-right: 5px;" (click)="cancelDowload()">取消下载</button> --> <!-- <button mat-raised-button style="margin-right: 5px;" (click)="cancelDowload()">取消下载</button> -->
<span title="{{downloadFileName}}" style="font-size: 12px;" class="filename">{{downloadFileName}}</span> <span title="{{downloadFileName}}" style="font-size: 12px;" class="filename">{{downloadFileName}}</span>
<span style="font-size: 12px;position: absolute;margin-left: 8px;">下载中...</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-progress-bar mode="determinate" [value]="downloadProgress" class="progress"></mat-progress-bar>
</div>
</div> </div>
</div> <div class="body">
<div class="body"> <div class="tablebox" id="table">
<div class="tablebox" id="table"> <table mat-table [dataSource]="tabledataSource" class="mat-elevation-z8">
<table mat-table [dataSource]="tabledataSource" class="mat-elevation-z8"> <ng-container matColumnDef="state">
<ng-container matColumnDef="state"> <th mat-header-cell *matHeaderCellDef style="width: 8%;">预案状态</th>
<th mat-header-cell *matHeaderCellDef style="width: 8%;">预案状态</th> <td mat-cell *matCellDef="let element">
<td mat-cell *matCellDef="let element"> <span class="add" *ngIf="element.isNewData">新增</span>
<span class="add" *ngIf="element.isNewData">新增</span> <span class="weihu" *ngIf="!element.isNewData">维护更新</span>
<span class="weihu" *ngIf="!element.isNewData">维护更新</span> </td>
</td> </ng-container>
</ng-container> <ng-container matColumnDef="unitname">
<ng-container matColumnDef="unitname"> <th mat-header-cell *matHeaderCellDef style="width: 8%;">预案名称</th>
<th mat-header-cell *matHeaderCellDef style="width: 8%;">预案名称</th> <td mat-cell *matCellDef="let element">{{element.name}}</td>
<td mat-cell *matCellDef="let element">{{element.name}}</td> </ng-container>
</ng-container> <ng-container matColumnDef="level">
<ng-container matColumnDef="level"> <th mat-header-cell *matHeaderCellDef style="width: 8%;">预案级别</th>
<th mat-header-cell *matHeaderCellDef style="width: 8%;">预案级别</th> <td mat-cell *matCellDef="let element">{{element.planCategory=='6'?'国家级':'市级'}}</td>
<td mat-cell *matCellDef="let element">{{element.planCategory=='6'?'国家级':'市级'}}</td> </ng-container>
</ng-container> <ng-container matColumnDef="addname">
<ng-container matColumnDef="addname"> <th mat-header-cell *matHeaderCellDef style="width: 8%;">添加人</th>
<th mat-header-cell *matHeaderCellDef style="width: 8%;">添加人</th> <td mat-cell *matCellDef="let element">{{element.creatorName}}</td>
<td mat-cell *matCellDef="let element">{{element.creatorName}}</td> </ng-container>
</ng-container>
<ng-container matColumnDef="addtime"> <ng-container matColumnDef="addtime">
<th mat-header-cell *matHeaderCellDef style="width: 8%;">添加时间</th> <th mat-header-cell *matHeaderCellDef style="width: 8%;">添加时间</th>
<td mat-cell *matCellDef="let element">{{element.creationTime|date:'yyyy-MM-dd'}}</td> <td mat-cell *matCellDef="let element">{{element.creationTime|date:'yyyy-MM-dd'}}</td>
</ng-container> </ng-container>
<ng-container matColumnDef="plantype"> <ng-container matColumnDef="plantype">
<th mat-header-cell *matHeaderCellDef style="width: 8%;">预案类型</th> <th mat-header-cell *matHeaderCellDef style="width: 8%;">预案类型</th>
<td mat-cell *matCellDef="let element">{{element.disasterType}}</td> <td mat-cell *matCellDef="let element">{{element.disasterType}}</td>
</ng-container> </ng-container>
<ng-container matColumnDef="passstate"> <ng-container matColumnDef="passstate">
<th mat-header-cell *matHeaderCellDef style="width: 8%;">新增审核</th> <th mat-header-cell *matHeaderCellDef style="width: 8%;">新增审核</th>
<td mat-cell *matCellDef="let element"> <td mat-cell *matCellDef="let element">
{{element.newVerifyState}} {{element.newVerifyState}}
<!-- {{element.auditStatus=='8'?'未提交审核':element.auditStatus=='1'?'审核中':element.auditStatus=='2'?'审核通过':element.auditStatus=='4'? <!-- {{element.auditStatus=='8'?'未提交审核':element.auditStatus=='1'?'审核中':element.auditStatus=='2'?'审核通过':element.auditStatus=='4'?
'审核退回':element.auditStatus=='16'?'初审通过':'初审驳回'}} --> '审核退回':element.auditStatus=='16'?'初审通过':'初审驳回'}} -->
</td> </td>
</ng-container> </ng-container>
<ng-container matColumnDef="isopen"> <ng-container matColumnDef="isopen">
<th mat-header-cell *matHeaderCellDef style="width: 8%;">是否公开</th> <th mat-header-cell *matHeaderCellDef style="width: 8%;">是否公开</th>
<td mat-cell *matCellDef="let element">{{element.openRange}}</td> <td mat-cell *matCellDef="let element">{{element.openRange}}</td>
</ng-container> </ng-container>
<ng-container matColumnDef="projectlevel"> <ng-container matColumnDef="projectlevel">
<th mat-header-cell *matHeaderCellDef style="width: 8%;">编制级别</th> <th mat-header-cell *matHeaderCellDef style="width: 8%;">编制级别</th>
<td mat-cell *matCellDef="let element"> <td mat-cell *matCellDef="let element">{{element.planLevel=='1'?'总队':element.planLevel=='2'?'支队':element.planLevel=='4'?'大队':'中队'}}</td>
{{element.planLevel=='1'?'总队':element.planLevel=='2'?'支队':element.planLevel=='4'?'大队':'中队'}}</td> </ng-container>
</ng-container> <ng-container matColumnDef="weihustate">
<ng-container matColumnDef="auditstate"> <th mat-header-cell *matHeaderCellDef style="width: 8%;">维护审核</th>
<th mat-header-cell *matHeaderCellDef style="width: 8%;">审核状态</th> <td mat-cell *matCellDef="let element">{{element.maintenanceVerifyState}}</td>
<td mat-cell *matCellDef="let element"> </ng-container>
{{element.auditStatus | auditState}} <ng-container matColumnDef="operation">
</td> <th mat-header-cell *matHeaderCellDef style="width: 20%;">操作</th>
</ng-container> <td mat-cell *matCellDef="let element" style="white-space: nowrap;cursor: pointer;">
<ng-container matColumnDef="operation"> <span style="color: blue;" (click)='openPlan(element)'>查看预案</span>
<th mat-header-cell *matHeaderCellDef style="width: 20%;">操作</th> <span style="color: blue;margin-left: 4px;" (click)="submitAudit(element)" *ngIf="(element.isNewData && element.newVerifyState=='未提交审核')||(!element.isNewData&&(element.maintenanceVerifyState=='审核通过'||element.maintenanceVerifyState=='未提交审核'))">提交审核</span>
<td mat-cell *matCellDef="let element" style="white-space: nowrap;cursor: pointer;"> <span style="color: blue;margin-left: 4px;" (click)="cancelAudit(element)" *ngIf="element.auditStatus == 1||element.auditStatus == 16">撤销审核</span>
<span style="color: blue;" (click)='openPlan(element)'>查看预案</span> <span style="color: blue;margin-left: 4px;" (click)="auditResult(element)">审批结果</span>
<span style="color: blue;margin-left: 4px;" (click)="submitAudit(element)" <span style="color: blue;margin-left: 4px;" (click)='readFile(element)'>下载</span>
*ngIf="(element.isNewData && element.newVerifyState=='未提交审核')||(!element.isNewData&&(element.maintenanceVerifyState=='审核通过'||element.maintenanceVerifyState=='未提交审核'))">提交审核</span> <span style="color: red;margin-left: 4px" (click)='deletePlan(element.id)' *ngIf="element.auditStatus == 8"> 删除</span>
<span style="color: blue;margin-left: 4px;" (click)="cancelAudit(element)" </td>
*ngIf="element.auditStatus == 1||element.auditStatus == 16">撤销审核</span> </ng-container>
<span style="color: blue;margin-left: 4px;" (click)="auditResult(element)">审批结果</span> <tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<span style="color: blue;margin-left: 4px;" (click)='readFile(element)'>下载</span> <tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr>
<span style="color: red;margin-left: 4px" (click)='deletePlan(element.id)'> 删除</span> </table>
</td> <mat-paginator pageEvent [length]="length"
</ng-container> [pageSize]="pageSize"
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr> [pageSizeOptions]="pageSizeOptions"
<tr mat-row *matRowDef="let row; columns: displayedColumns;"></tr> (page)="changePage($event)">
</table>
<mat-paginator pageEvent [length]="length" [pageSize]="pageSize" [pageSizeOptions]="pageSizeOptions"
(page)="changePage($event)">
</mat-paginator> </mat-paginator>
</div>
</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 preparelevels: any
plcheck: boolean //编制级别勾选框 plcheck: boolean //编制级别勾选框
IsNewData = '' //维护更新活新增 IsNewData='' //维护更新活新增
displayedColumns: string[] = ['state', 'unitname', 'level', 'addname', 'addtime', 'plantype', 'isopen', 'projectlevel', 'passstate', 'auditstate', 'operation']; displayedColumns: string[] = ['state','unitname', 'level', 'addname', 'addtime', 'plantype', 'isopen', 'projectlevel','passstate','weihustate', 'operation'];
tabledataSource tabledataSource
typePlan//新预案类型 typePlan//新预案类型
unitname//预案名称 unitname//预案名称
@ -142,7 +142,7 @@ export class MeetPlanComponent implements OnInit {
HasChildrenPlanLevel: this.plcheck || '', HasChildrenPlanLevel: this.plcheck || '',
PageNumber: this.PageNumber || '1', PageNumber: this.PageNumber || '1',
PageSize: this.pageSizeOptions[0], PageSize: this.pageSizeOptions[0],
IsNewData: this.IsNewData, IsNewData:this.IsNewData,
} }
this.http.get("/api/PlanComponentsMajor", { params: paramsdata }).subscribe((data: any) => { this.http.get("/api/PlanComponentsMajor", { params: paramsdata }).subscribe((data: any) => {
this.length = data.totalCount this.length = data.totalCount
@ -166,29 +166,29 @@ export class MeetPlanComponent implements OnInit {
this.PageNumber = 1 this.PageNumber = 1
this.pageEvent.pageIndex = 0 this.pageEvent.pageIndex = 0
let reservePlanType let reservePlanType
this.reservePlanType ? reservePlanType = JSON.parse(JSON.stringify(this.reservePlanType)) : reservePlanType = '' this.reservePlanType ? reservePlanType = JSON.parse(JSON.stringify(this.reservePlanType)) : reservePlanType = ''
if (this.reservePlanType && this.reservePlanType.length != 0) { if (this.reservePlanType && this.reservePlanType.length != 0) {
reservePlanType = eval(this.reservePlanType.join("|")) reservePlanType = eval(this.reservePlanType.join("|"))
} }
let paramsdata: any = { let paramsdata: any = {
Name: this.unitname || '', Name: this.unitname || '',
planCategories: this.level || [6, 7], planCategories: this.level || [6, 7],
//PlanType:reservePlanType||'', //PlanType:reservePlanType||'',
DisasterType: this.typePlan || '', DisasterType: this.typePlan || '',
CreatorName: this.addname || '', CreatorName: this.addname || '',
AuditStatus: this.unitstate || '', AuditStatus: this.unitstate || '',
CreationTimeRangeStart: this.addtime || '', CreationTimeRangeStart: this.addtime || '',
CreationTimeRangeEnd: this.endtime || '', CreationTimeRangeEnd: this.endtime || '',
PlanLevel: this.projectlevel || '', PlanLevel: this.projectlevel || '',
HasChildrenPlanLevel: this.plcheck || '', HasChildrenPlanLevel: this.plcheck || '',
PageNumber: this.PageNumber || '1', PageNumber: this.PageNumber || '1',
PageSize: this.pageSizeOptions[0], PageSize: this.pageSizeOptions[0],
IsNewData: this.IsNewData, IsNewData:this.IsNewData,
} }
this.http.get("/api/PlanComponentsMajor", { params: paramsdata }).subscribe((data: any) => { this.http.get("/api/PlanComponentsMajor", { params: paramsdata }).subscribe((data: any) => {
this.length = data.totalCount this.length = data.totalCount
this.tabledataSource = data.items this.tabledataSource = data.items
}) })
} }
} }
@ -215,9 +215,9 @@ export class MeetPlanComponent implements OnInit {
const config = new MatSnackBarConfig(); const config = new MatSnackBarConfig();
config.verticalPosition = 'top'; config.verticalPosition = 'top';
config.duration = 3000 config.duration = 3000
if (element.auditStatus == 4 || element.auditStatus == 32) { /* if(element.auditStatus == 4){
this.snackBar.open('审核退回的预案需要修改后方可再次提交审核!', '确定', config); this.snackBar.open('审核退回的预案需要修改后方可再次提交审核!','确定',config);
} } */
this.http.put(`/api/PlanComponentsMajor/${element.id}/Commit`, "").subscribe(data => { this.http.put(`/api/PlanComponentsMajor/${element.id}/Commit`, "").subscribe(data => {
this.getAlltabledate() this.getAlltabledate()
}, err => { }, err => {
@ -369,7 +369,7 @@ export class MeetPlanComponent implements OnInit {
this.unitstate = '' this.unitstate = ''
this.projectlevel = '' this.projectlevel = ''
this.plcheck = false this.plcheck = false
this.IsNewData = '' this.IsNewData=''
this.getAlltabledate() this.getAlltabledate()
} }
//新增预案弹窗 //新增预案弹窗

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

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

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

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

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

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

@ -1,163 +1,88 @@
import { NgModule } from "@angular/core"; import { NgModule } from '@angular/core';
import { CommonModule } from "@angular/common"; import { CommonModule } from '@angular/common';
import { PlanManagementRoutingModule } from "./plan-management-routing.module"; import { PlanManagementRoutingModule } from './plan-management-routing.module';
import { ReactiveFormsModule, FormsModule } from "@angular/forms"; import { ReactiveFormsModule, FormsModule } from '@angular/forms';
import { A11yModule } from "@angular/cdk/a11y"; import { A11yModule } from '@angular/cdk/a11y';
import { DragDropModule } from "@angular/cdk/drag-drop"; import { DragDropModule } from '@angular/cdk/drag-drop';
import { PortalModule } from "@angular/cdk/portal"; import { PortalModule } from '@angular/cdk/portal';
import { ScrollingModule } from "@angular/cdk/scrolling"; import { ScrollingModule } from '@angular/cdk/scrolling';
import { CdkStepperModule } from "@angular/cdk/stepper"; import { CdkStepperModule } from '@angular/cdk/stepper';
import { CdkTableModule } from "@angular/cdk/table"; import { CdkTableModule } from '@angular/cdk/table';
import { CdkTreeModule } from "@angular/cdk/tree"; import { CdkTreeModule } from '@angular/cdk/tree';
import { MatAutocompleteModule } from "@angular/material/autocomplete"; import { MatAutocompleteModule } from '@angular/material/autocomplete';
import { MatBadgeModule } from "@angular/material/badge"; import { MatBadgeModule } from '@angular/material/badge';
import { MatBottomSheetModule } from "@angular/material/bottom-sheet"; import { MatBottomSheetModule } from '@angular/material/bottom-sheet';
import { MatButtonModule } from "@angular/material/button"; import { MatButtonModule } from '@angular/material/button';
import { MatButtonToggleModule } from "@angular/material/button-toggle"; import { MatButtonToggleModule } from '@angular/material/button-toggle';
import { MatCardModule } from "@angular/material/card"; import { MatCardModule } from '@angular/material/card';
import { MatCheckboxModule } from "@angular/material/checkbox"; import { MatCheckboxModule } from '@angular/material/checkbox';
import { MatChipsModule } from "@angular/material/chips"; import { MatChipsModule } from '@angular/material/chips';
import { MatStepperModule } from "@angular/material/stepper"; import { MatStepperModule } from '@angular/material/stepper';
import { MatDatepickerModule } from "@angular/material/datepicker"; import { MatDatepickerModule } from '@angular/material/datepicker';
import { MatDialogModule } from "@angular/material/dialog"; import { MatDialogModule } from '@angular/material/dialog';
import { MatDividerModule } from "@angular/material/divider"; import { MatDividerModule } from '@angular/material/divider';
import { MatExpansionModule } from "@angular/material/expansion"; import { MatExpansionModule } from '@angular/material/expansion';
import { MatGridListModule } from "@angular/material/grid-list"; import { MatGridListModule } from '@angular/material/grid-list';
import { MatIconModule } from "@angular/material/icon"; import { MatIconModule } from '@angular/material/icon';
import { MatInputModule } from "@angular/material/input"; import { MatInputModule } from '@angular/material/input';
import { MatListModule } from "@angular/material/list"; import { MatListModule } from '@angular/material/list';
import { MatMenuModule } from "@angular/material/menu"; import { MatMenuModule } from '@angular/material/menu';
import { MatNativeDateModule, MatRippleModule } from "@angular/material/core"; import { MatNativeDateModule, MatRippleModule } from '@angular/material/core';
import { MatPaginatorModule } from "@angular/material/paginator"; import { MatPaginatorModule } from '@angular/material/paginator';
import { MatProgressBarModule } from "@angular/material/progress-bar"; import { MatProgressBarModule } from '@angular/material/progress-bar';
import { MatProgressSpinnerModule } from "@angular/material/progress-spinner"; import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
import { MatRadioModule } from "@angular/material/radio"; import { MatRadioModule } from '@angular/material/radio';
import { MatSelectModule } from "@angular/material/select"; import { MatSelectModule } from '@angular/material/select';
import { MatSidenavModule } from "@angular/material/sidenav"; import { MatSidenavModule } from '@angular/material/sidenav';
import { MatSliderModule } from "@angular/material/slider"; import { MatSliderModule } from '@angular/material/slider';
import { MatSlideToggleModule } from "@angular/material/slide-toggle"; import { MatSlideToggleModule } from '@angular/material/slide-toggle';
import { MatSnackBarModule } from "@angular/material/snack-bar"; import { MatSnackBarModule } from '@angular/material/snack-bar';
import { MatSortModule } from "@angular/material/sort"; import { MatSortModule } from '@angular/material/sort';
import { MatTableModule } from "@angular/material/table"; import { MatTableModule } from '@angular/material/table';
import { MatTabsModule } from "@angular/material/tabs"; import { MatTabsModule } from '@angular/material/tabs';
import { MatToolbarModule } from "@angular/material/toolbar"; import { MatToolbarModule } from '@angular/material/toolbar';
import { MatTooltipModule } from "@angular/material/tooltip"; import { MatTooltipModule } from '@angular/material/tooltip';
import { MatTreeModule } from "@angular/material/tree"; 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({ @NgModule({
declarations: [ declarations: [EntryPlanComponent, PassPlanComponent, OpenPlanComponent, EntryPlanLookComponent, AddPlanone, PlanType, AuditSatus, PlanLevel, DownloadFile, AuditResult, ChangeName,
EntryPlanComponent, WebLookComponent, OnetwoEntryPlanComponent, newunitComponent, MeetPlanComponent, newunitMeet, TypePlanComponent, newunitType, PsViewer, onetwoAuditResult, meetAuditResult,
PassPlanComponent, typeAuditResult, MaintainUpComponent, GkPsViewer, GkhtmlPsViewer, UnitInfo, ReinforcePlanComponent, state, ImgDetails, CreatePlanOnlineFiveComponent, CreatePlanOnlineThreeComponent,
OpenPlanComponent, OpenPlanToolDialog,yinYong,newTitle,disaster,updataHl,ChangeUrl,adddwsurveys,editUpload,wenbenUpload],
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,
],
imports: [ imports: [
CommonModule, CommonModule,
PlanManagementRoutingModule, PlanManagementRoutingModule,
@ -207,22 +132,8 @@ import { NzTreeModule } from "ng-zorro-antd/tree";
MatTreeModule, MatTreeModule,
UiModule, UiModule,
TreeDiagramModule, TreeDiagramModule,
KeyUnitModule, KeyUnitModule
NzDatePickerModule,
NzInputModule,
NzButtonModule,
NzTreeSelectModule,
NzSelectModule,
NzSpinModule,
NzTreeModule,
],
exports: [
PlanType,
AuditSatus,
PlanLevel,
state,
CreatePlanOnlineFiveComponent,
auditState,
], ],
exports: [PlanType, AuditSatus, PlanLevel, state]
}) })
export class PlanManagementModule {} export class PlanManagementModule { }

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

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

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

Loading…
Cancel
Save