chenjingyu 4 years ago
parent
commit
32ee6b93d7
  1. 11
      src/app/app-routing.module.ts
  2. 7
      src/app/app.module.ts
  3. 2
      src/app/data-collection/fire-force/fire-force.component.ts
  4. 2
      src/app/data-collection/linkage-forces/linkage-forces.component.ts
  5. 11
      src/app/external-links-plan/external-links-plan.component.html
  6. 4
      src/app/external-links-plan/external-links-plan.component.scss
  7. 25
      src/app/external-links-plan/external-links-plan.component.spec.ts
  8. 136
      src/app/external-links-plan/external-links-plan.component.ts
  9. 3
      src/app/pages/login/login.component.ts
  10. 2
      src/app/plan-audit/fireforce-audit/fireforce-audit.component.ts
  11. 2
      src/app/plan-audit/linkageforces-audit/linkageforces-audit.component.ts
  12. 4
      src/app/plan-audit/plan-record/plan-record.component.ts
  13. 4
      src/app/plan-audit/wait-examineer/wait-examineer.component.ts
  14. 2
      src/app/plan-management/entry-plan-look/entry-plan-look.component.ts
  15. 2
      src/app/plan-management/meet-plan/meet-plan.component.ts
  16. 2
      src/app/plan-management/onetwo-entry-plan/onetwo-entry-plan.component.ts
  17. 2
      src/app/plan-management/open-plan/open-plan.component.ts
  18. 2
      src/app/plan-management/pass-plan/pass-plan.component.ts
  19. 2
      src/app/plan-management/plan-management.module.ts
  20. 2
      src/app/plan-management/type-plan/type-plan.component.ts
  21. 2
      src/app/statistic-analysis/all-plan/all-plan.component.ts
  22. 2
      src/app/statistic-analysis/plan-analysis-by-synthesis/PsvShow.html
  23. 184
      src/app/statistic-analysis/plan-analysis-by-synthesis/plan-analysis-by-synthesis.component.html
  24. 233
      src/app/statistic-analysis/plan-analysis-by-synthesis/plan-analysis-by-synthesis.component.scss
  25. 25
      src/app/statistic-analysis/plan-analysis-by-synthesis/plan-analysis-by-synthesis.component.spec.ts
  26. 504
      src/app/statistic-analysis/plan-analysis-by-synthesis/plan-analysis-by-synthesis.component.ts
  27. 6
      src/app/statistic-analysis/statistic-analysis-routing.module.ts
  28. 9
      src/app/statistic-analysis/statistic-analysis.module.ts
  29. 8
      src/app/ui/collection-tools-building/collection-tools.component.html
  30. 5
      src/app/ui/collection-tools-plan/collection-tools.component.html
  31. 4
      src/app/ui/collection-tools/collection-tools.component.html
  32. 5
      src/app/ui/collection-tools/collection-tools.component.ts
  33. 8
      src/index.html

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

@ -18,6 +18,7 @@ import {AuthGuard} from './auth.guard'
import {MTokenK1Component} from './m-token-k1/m-token-k1.component' //K1秘钥 import {MTokenK1Component} from './m-token-k1/m-token-k1.component' //K1秘钥
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'
import { TestComponent } from './test/test.component'; import { TestComponent } from './test/test.component';
import { ExternalLinksPlanComponent } from './external-links-plan/external-links-plan.component';
const routes: Routes = [ const routes: Routes = [
@ -36,14 +37,12 @@ const routes: Routes = [
{path:'dataCollection',loadChildren:() => import('./data-collection/data-collection.module').then(m => m.DataCollectionModule)}, {path:'dataCollection',loadChildren:() => import('./data-collection/data-collection.module').then(m => m.DataCollectionModule)},
] ]
}, },
{path:'login',component:LoginComponent}, {path:'login',component:LoginComponent},
{ 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 }, {path:'planAudit/planpass', component: PlanPassComponent , canActivate: [AuthGuard]},
{ path: 'test', component: TestComponent }, {path:'test', component: TestComponent },
{path:'linksPlan', component: ExternalLinksPlanComponent },
]; ];
@NgModule({ @NgModule({

7
src/app/app.module.ts

@ -23,13 +23,15 @@ 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';
@NgModule({ @NgModule({
declarations: [ declarations: [
AppComponent, AppComponent,
HomeComponent, HomeComponent,
MTokenK1Component, MTokenK1Component,
TestComponent TestComponent,
ExternalLinksPlanComponent
], ],
imports: [ imports: [
BrowserModule, BrowserModule,
@ -46,7 +48,8 @@ import { TestComponent } from './test/test.component';
CountdownModule, CountdownModule,
GISManagementModule, GISManagementModule,
DataCollectionModule, DataCollectionModule,
MatProgressSpinnerModule MatProgressSpinnerModule,
UiModule
], ],
providers: [httpInterceptorProviders, CacheTokenService,TreeService], providers: [httpInterceptorProviders, CacheTokenService,TreeService],
bootstrap: [AppComponent] bootstrap: [AppComponent]

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

@ -1151,7 +1151,7 @@ export class FireForceComponent implements OnInit {
var stringjson=JSON.stringify(json) var stringjson=JSON.stringify(json)
var wordArray = CryptoJS.enc.Utf8.parse(stringjson); var wordArray = CryptoJS.enc.Utf8.parse(stringjson);
var base64 = CryptoJS.enc.Base64.stringify(wordArray); var base64 = CryptoJS.enc.Base64.stringify(wordArray);
window.open(`http://172.26.166.38:18080/apps/editor/openPreview?data=${base64}`) window.open(`http://121.5.10.84:80/apps/editor/openPreview?data=${base64}`)
} }
if(suffix == 'mp4'){ if(suffix == 'mp4'){
const dialogRef = this.dialog.open(ViewDetails, {//调用open方法打开对话框并且携带参数过去 const dialogRef = this.dialog.open(ViewDetails, {//调用open方法打开对话框并且携带参数过去

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

@ -885,7 +885,7 @@ export class LinkageForcesComponent implements OnInit {
var stringjson=JSON.stringify(json) var stringjson=JSON.stringify(json)
var wordArray = CryptoJS.enc.Utf8.parse(stringjson); var wordArray = CryptoJS.enc.Utf8.parse(stringjson);
var base64 = CryptoJS.enc.Base64.stringify(wordArray); var base64 = CryptoJS.enc.Base64.stringify(wordArray);
window.open(`http://172.26.166.38:18080/apps/editor/openPreview?data=${base64}`) window.open(`http://121.5.10.84:80/apps/editor/openPreview?data=${base64}`)
} }
if(suffix == 'mp4'){ if(suffix == 'mp4'){
const dialogRef = this.dialog.open(ViewDetails2, {//调用open方法打开对话框并且携带参数过去 const dialogRef = this.dialog.open(ViewDetails2, {//调用open方法打开对话框并且携带参数过去

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

@ -0,0 +1,11 @@
<!-- 株洲项目:传入预案id显示相应预案 -->
<div *ngIf="showType == 0">
<iframe id="inneriframe" [src]='iframeSrc' frameborder="0" style="width: 100%;height: 100%;"></iframe>
</div>
<div *ngIf="showType == 1" id="viewer"></div>
<div *ngIf="showType == 2">
<iframe id="inneriframe2" [src]='threedUrl' frameborder="0" style="width: 100%;height: 100%;"></iframe>
</div>
<div *ngIf="showType == 3">
<app-collection-tools></app-collection-tools>
</div>

4
src/app/external-links-plan/external-links-plan.component.scss

@ -0,0 +1,4 @@
div{
width: 100%;
height: 100%;
}

25
src/app/external-links-plan/external-links-plan.component.spec.ts

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

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

@ -0,0 +1,136 @@
import { HttpClient } from '@angular/common/http';
import { Component, OnInit } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
import { CacheTokenService } from '../http-interceptors/cache-token.service';
import { Viewer } from 'photo-sphere-viewer';
import { DomSanitizer } from '@angular/platform-browser';
declare var CryptoJS
@Component({
selector: 'app-external-links-plan',
templateUrl: './external-links-plan.component.html',
styleUrls: ['./external-links-plan.component.scss']
})
export class ExternalLinksPlanComponent implements OnInit {
constructor(private http:HttpClient,private token:CacheTokenService,public route: ActivatedRoute,private sanitizer: DomSanitizer) { }
planId:any//预案id
viewer//全景图对象
fetchUrl//预案文件地址
showType//预案类型 1:全景图
planData//预案信息
async ngOnInit(): Promise<void> {
await this.login()//登录存储token
this.route.queryParams.subscribe(paramsData=>{
this.planId = paramsData.planId
let planId = paramsData.planId
this.http.get(`/api/PlanComponents/${planId}`).subscribe((data:any)=>{
console.log('单个预案详细信息',data)
this.planData = data
if(data.planType != 1 && data.planType != 2){
this.fetchUrl = data.attachmentUrls[0]
var index = this.fetchUrl.indexOf("\/")
if(this.fetchUrl.substr(0,index) == 'psw'){
this.showType = 1
var obj = document.getElementById('viewer')
if(obj != null){
obj.innerHTML=''
}
window.setTimeout(()=>{
this.viewer = new Viewer({
container: document.querySelector('#viewer'),
panorama:'/api/Objects/PlanPlatform/'+ this.fetchUrl,
});
})
}else{
//毕生
this.lookWord()
}
}else{
// 二维三维预案
this.handleData()
}
})
})
}
async login(){
await new Promise((resolve, reject) => {
this.http.post('/api/Account/SignIn',{
name: 'zhuzhouyuanchakan',
password: '12345678'}).subscribe((data:any)=>{
sessionStorage.setItem("level",data.level);
sessionStorage.setItem("token",data.token);
sessionStorage.setItem("refreshToken",data.refreshToken);
console.log('登录成功',data)
resolve(data)
this.token.startUp()
})
})
}
iframeSrc//毕生服务器链接
src//文件存储地址
lookWord(){
let docIdWordArray = CryptoJS.enc.Utf8.parse(`PlanPlatform/` + this.fetchUrl);
let docId = CryptoJS.enc.Base64.stringify(docIdWordArray);
let jwt = sessionStorage.getItem("token");
let rawJwt = CryptoJS.enc.Base64.parse(jwt.split('.')[1]);
let identityJson = CryptoJS.enc.Utf8.stringify(rawJwt);
let identityJsonparse = JSON.parse(identityJson)
let filename:string
this.http.get(`/api/ObjectMetadata/PlanPlatform/${this.fetchUrl}`).subscribe((data:any)=>{
filename = data.fileName
let json = {
doc: {
docId: docId,
title: filename,
//title: filename,
fetchUrl: `http://${location.host}/api/Objects/PlanPlatform/`+this.fetchUrl
},
user: {
uid: identityJsonparse.sub,
nickName: identityJsonparse.name,
avatar: "",
privilege: [
'FILE_READ','FILE_DOWNLOAD', 'FILE_PRINT'
],
},
}
var stringjson = JSON.stringify(json)
var wordArray = CryptoJS.enc.Utf8.parse(stringjson);
var base64 = CryptoJS.enc.Base64.stringify(wordArray);
this.src = `http://121.5.10.84:80/apps/editor/openPreview?data=${base64}`
this.iframeSrc = this.sanitizer.bypassSecurityTrustResourceUrl(this.src);
this.showType = 0
})
}
companyData//当前公司信息
thirdPartyURL
threedUrl:any
handleData () {
let data = this.planData
if (this.planData.planMode == 2) { //预案planMode=2时, 跳查看页面组件
this.http.get(`/api/Plans/${data.companyId}`).subscribe((data:any)=>{
console.log(data)
data && data.company? this.companyData = data.company : null
sessionStorage.setItem("buildingTypeId", this.companyData.buildingTypes.length? this.companyData.buildingTypes[0].id: undefined);
sessionStorage.setItem("companyId",data.companyId);
sessionStorage.setItem("planId",this.planId);
sessionStorage.setItem("editable",'0');
sessionStorage.setItem("planName",this.planData.name)
this.showType = 3
// this.threedUrl = this.sanitizer.bypassSecurityTrustResourceUrl(`/keyUnit/viewunitinfoplans?id=${data.companyId}`)
})
} else if (this.planData.planMode == 3) { //预案planMode=3时, 第三方网址'
this.http.get(`/api/Plans/${data.companyId}`).subscribe((data:any)=>{
data && data.company? this.companyData = data.company : null
this.threedUrl = this.sanitizer.bypassSecurityTrustResourceUrl(data.url)
this.showType = 2
})
}
}
}

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

@ -4,9 +4,6 @@ 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 { MatSnackBar } from '@angular/material/snack-bar'; import { MatSnackBar } from '@angular/material/snack-bar';
import { ConstantPositionProperty } from 'cesium';
@Component({ @Component({
selector: 'app-login', selector: 'app-login',

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

@ -186,7 +186,7 @@ export class FireforceAuditComponent implements OnInit {
var stringjson=JSON.stringify(json) var stringjson=JSON.stringify(json)
var wordArray = CryptoJS.enc.Utf8.parse(stringjson); var wordArray = CryptoJS.enc.Utf8.parse(stringjson);
var base64 = CryptoJS.enc.Base64.stringify(wordArray); var base64 = CryptoJS.enc.Base64.stringify(wordArray);
window.open(`http://172.26.166.38:18080/apps/editor/openPreview?data=${base64}`) window.open(`http://121.5.10.84:80/apps/editor/openPreview?data=${base64}`)
} }
if(suffix == 'mp4'){ if(suffix == 'mp4'){
const dialogRef = this.dialog.open(ViewDetailsComponent, {//调用open方法打开对话框并且携带参数过去 const dialogRef = this.dialog.open(ViewDetailsComponent, {//调用open方法打开对话框并且携带参数过去

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

@ -196,7 +196,7 @@ export class LinkageforcesAuditComponent implements OnInit {
var stringjson=JSON.stringify(json) var stringjson=JSON.stringify(json)
var wordArray = CryptoJS.enc.Utf8.parse(stringjson); var wordArray = CryptoJS.enc.Utf8.parse(stringjson);
var base64 = CryptoJS.enc.Base64.stringify(wordArray); var base64 = CryptoJS.enc.Base64.stringify(wordArray);
window.open(`http://172.26.166.38:18080/apps/editor/openPreview?data=${base64}`) window.open(`http://121.5.10.84:80/apps/editor/openPreview?data=${base64}`)
} }
if(suffix == 'mp4'){ if(suffix == 'mp4'){
const dialogRef = this.dialog.open(ViewDetailsComponent, {//调用open方法打开对话框并且携带参数过去 const dialogRef = this.dialog.open(ViewDetailsComponent, {//调用open方法打开对话框并且携带参数过去

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

@ -260,9 +260,9 @@ export class PlanRecordComponent implements OnInit {
var stringjson=JSON.stringify(json) var stringjson=JSON.stringify(json)
var wordArray = CryptoJS.enc.Utf8.parse(stringjson); var wordArray = CryptoJS.enc.Utf8.parse(stringjson);
var base64 = CryptoJS.enc.Base64.stringify(wordArray); var base64 = CryptoJS.enc.Base64.stringify(wordArray);
this.src=`http://172.26.166.38:18080/apps/editor/openPreview?data=${base64}` this.src=`http://121.5.10.84:80/apps/editor/openPreview?data=${base64}`
this.iframeSrc=this.sanitizer.bypassSecurityTrustResourceUrl(this.src); this.iframeSrc=this.sanitizer.bypassSecurityTrustResourceUrl(this.src);
//window.open(`http://172.26.166.38:18080/apps/editor/openPreview?data=${base64}`) //window.open(`http://121.5.10.84:80/apps/editor/openPreview?data=${base64}`)
}) })
} }
//查看按钮跳转 //查看按钮跳转

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

@ -289,9 +289,9 @@ export class WaitExamineerComponent implements OnInit {
var stringjson=JSON.stringify(json) var stringjson=JSON.stringify(json)
var wordArray = CryptoJS.enc.Utf8.parse(stringjson); var wordArray = CryptoJS.enc.Utf8.parse(stringjson);
var base64 = CryptoJS.enc.Base64.stringify(wordArray); var base64 = CryptoJS.enc.Base64.stringify(wordArray);
this.src=`http://172.26.166.38:18080/apps/editor/openPreview?data=${base64}` this.src=`http://121.5.10.84:80/apps/editor/openPreview?data=${base64}`
this.iframeSrc=this.sanitizer.bypassSecurityTrustResourceUrl(this.src); this.iframeSrc=this.sanitizer.bypassSecurityTrustResourceUrl(this.src);
//window.open(`http://172.26.166.38:18080/apps/editor/openPreview?data=${base64}`) //window.open(`http://121.5.10.84:80/apps/editor/openPreview?data=${base64}`)
}) })
} }
//查看按钮跳转 //查看按钮跳转

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

@ -146,7 +146,7 @@ export class EntryPlanLookComponent implements OnInit {
var stringjson=JSON.stringify(json) var stringjson=JSON.stringify(json)
var wordArray = CryptoJS.enc.Utf8.parse(stringjson); var wordArray = CryptoJS.enc.Utf8.parse(stringjson);
var base64 = CryptoJS.enc.Base64.stringify(wordArray); var base64 = CryptoJS.enc.Base64.stringify(wordArray);
window.open(`http://172.26.166.38:18080/apps/editor/openPreview?data=${base64}`) window.open(`http://121.5.10.84:80/apps/editor/openPreview?data=${base64}`)
}) })
} }
} }

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

@ -248,7 +248,7 @@ export class MeetPlanComponent implements OnInit {
var stringjson=JSON.stringify(json) var stringjson=JSON.stringify(json)
var wordArray = CryptoJS.enc.Utf8.parse(stringjson); var wordArray = CryptoJS.enc.Utf8.parse(stringjson);
var base64 = CryptoJS.enc.Base64.stringify(wordArray); var base64 = CryptoJS.enc.Base64.stringify(wordArray);
window.open(`http://172.26.166.38:18080/apps/editor/openPreview?data=${base64}`) window.open(`http://121.5.10.84:80/apps/editor/openPreview?data=${base64}`)
}) })
} }

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

@ -257,7 +257,7 @@ export class OnetwoEntryPlanComponent implements OnInit {
var stringjson=JSON.stringify(json) var stringjson=JSON.stringify(json)
var wordArray = CryptoJS.enc.Utf8.parse(stringjson); var wordArray = CryptoJS.enc.Utf8.parse(stringjson);
var base64 = CryptoJS.enc.Base64.stringify(wordArray); var base64 = CryptoJS.enc.Base64.stringify(wordArray);
window.open(`http://172.26.166.38:18080/apps/editor/openPreview?data=${base64}`) window.open(`http://121.5.10.84:80/apps/editor/openPreview?data=${base64}`)
}) })

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

@ -236,7 +236,7 @@ export class OpenPlanComponent implements OnInit {
var stringjson=JSON.stringify(json) var stringjson=JSON.stringify(json)
var wordArray = CryptoJS.enc.Utf8.parse(stringjson); var wordArray = CryptoJS.enc.Utf8.parse(stringjson);
var base64 = CryptoJS.enc.Base64.stringify(wordArray); var base64 = CryptoJS.enc.Base64.stringify(wordArray);
window.open(`http://172.26.166.38:18080/apps/editor/openPreview?data=${base64}`) window.open(`http://121.5.10.84:80/apps/editor/openPreview?data=${base64}`)
}) })
} }
} }

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

@ -383,7 +383,7 @@ export class PassPlanComponent implements OnInit {
var stringjson=JSON.stringify(json) var stringjson=JSON.stringify(json)
var wordArray = CryptoJS.enc.Utf8.parse(stringjson); var wordArray = CryptoJS.enc.Utf8.parse(stringjson);
var base64 = CryptoJS.enc.Base64.stringify(wordArray); var base64 = CryptoJS.enc.Base64.stringify(wordArray);
window.open(`http://172.26.166.38:18080/apps/editor/openPreview?data=${base64}`) window.open(`http://121.5.10.84:80/apps/editor/openPreview?data=${base64}`)
}) })
} }
} }

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

@ -119,6 +119,6 @@ import { ReinforcePlanComponent } from './reinforce-plan/reinforce-plan.componen
MatTooltipModule, MatTooltipModule,
MatTreeModule MatTreeModule
], ],
exports:[PlanType, AuditSatus, PlanLevel] exports:[PlanType, AuditSatus, PlanLevel, state]
}) })
export class PlanManagementModule { } export class PlanManagementModule { }

2
src/app/plan-management/type-plan/type-plan.component.ts

@ -238,7 +238,7 @@ export class TypePlanComponent implements OnInit {
var stringjson=JSON.stringify(json) var stringjson=JSON.stringify(json)
var wordArray = CryptoJS.enc.Utf8.parse(stringjson); var wordArray = CryptoJS.enc.Utf8.parse(stringjson);
var base64 = CryptoJS.enc.Base64.stringify(wordArray); var base64 = CryptoJS.enc.Base64.stringify(wordArray);
window.open(`http://172.26.166.38:18080/apps/editor/openPreview?data=${base64}`) window.open(`http://121.5.10.84:80/apps/editor/openPreview?data=${base64}`)
}) })

2
src/app/statistic-analysis/all-plan/all-plan.component.ts

@ -122,7 +122,7 @@ export class AllPlanComponent implements OnInit {
var stringjson=JSON.stringify(json) var stringjson=JSON.stringify(json)
var wordArray = CryptoJS.enc.Utf8.parse(stringjson); var wordArray = CryptoJS.enc.Utf8.parse(stringjson);
var base64 = CryptoJS.enc.Base64.stringify(wordArray); var base64 = CryptoJS.enc.Base64.stringify(wordArray);
window.open(`http://172.26.166.38:18080/apps/editor/openPreview?data=${base64}`) window.open(`http://121.5.10.84:80/apps/editor/openPreview?data=${base64}`)
}) })
} }
} }

2
src/app/statistic-analysis/plan-analysis-by-synthesis/PsvShow.html

@ -0,0 +1,2 @@
<div id="viewer" style="width: 100%;height: 100%;"></div>

184
src/app/statistic-analysis/plan-analysis-by-synthesis/plan-analysis-by-synthesis.component.html

@ -0,0 +1,184 @@
<!-- 预案综合分析 -->
<div style="height: 100%;overflow: auto;">
<div class="header">
<form (ngSubmit)="onSubmit(form.value)" #form="ngForm">
<div class="queryBox">
<div class="queryField">
<label style="margin-right: 10px;">单位名称:</label>
<mat-form-field class="example-full-width">
<input matInput placeholder="请输入单位名称" name="companyName" [(ngModel)]="companyName" autocomplete="off">
</mat-form-field>
</div>
<div class="queryField ordiv">
<label style="margin-right: 10px;">归属地:</label>
<mat-form-field class="example-full-width">
<input readonly matInput placeholder="请选择消防救援站" autocomplete="off" [(ngModel)]="js" name="js" (focus)="openorganizationbox()">
</mat-form-field>
<mat-checkbox style="margin-left: 6px;" [(ngModel)]="jscheck" name="jscheck">包含下级</mat-checkbox>
<span *ngIf="padMore" style="margin-left: 10px; color: #0080FF;" (click)='padInfo()'>更多筛选条件<img [src]='imgsrcopen'> </span>
<span *ngIf="padput" style="margin-left: 10px; color: #0080FF;" (click)='padInfo()'>收起<img [src]='imgsrcdown'> </span>
<div class="organizationbox" *ngIf="isorganizationbox">
<div (click)="closediv()" class="closediv"><mat-icon>clear</mat-icon></div>
<mat-tree [dataSource]="dataSource" [treeControl]="treeControl">
<mat-tree-node *matTreeNodeDef="let node" matTreeNodePadding (click)='add(node)' class="organizationlist">
<button type="button" mat-icon-button disabled ></button>
<li>{{node.name}}</li>
</mat-tree-node>
<mat-tree-node *matTreeNodeDef="let node;when: hasChild" matTreeNodePadding (click)='add(node)' class="organizationlist">
<button
type="button"
mat-icon-button
matTreeNodeToggle
[attr.aria-label]="'toggle ' + node.name">
<mat-icon class="mat-icon-rtl-mirror">
{{treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right'}}
</mat-icon>
</button>
<li>{{node.name}}</li>
</mat-tree-node>
</mat-tree>
</div>
</div>
<div class="queryField" *ngIf="!pcfind">
<button mat-raised-button color="primary">查询</button>
<button mat-raised-button style="margin-left: 25px;" type="button" (click)="reset()">重置</button>
</div>
<div class="queryField" *ngIf="!padMore">
<label style="margin-right: 10px;">预案类型:</label>
<mat-form-field>
<mat-select [(ngModel)]="reservePlanType" name="reservePlanType" placeholder='请选择预案类型' [multiple]="true">
<mat-option value=16>文本预案</mat-option>
<mat-option value=1>二维预案</mat-option>
<mat-option value=2>三维预案</mat-option>
<mat-option value=4>其他预案</mat-option>
</mat-select>
</mat-form-field>
</div>
<div class="queryField" *ngIf="!padMore">
<label style="margin-right: 10px;">单位类型:</label>
<mat-form-field>
<mat-select placeholder='请选择单位类型' [(ngModel)]="unittype" name="unittype">
<mat-option *ngFor="let unit of allunittype" [value]="unit.id" >
{{unit.name}}
</mat-option>
</mat-select>
</mat-form-field>
<span *ngIf="pcMore" style="margin-left: 20px; color: #0080FF; cursor: pointer;" (click)='pcInfo()'>更多筛选条件<img [src]='imgsrcopen'> </span>
<span *ngIf="pcput" style="margin-left: 10px; color: #0080FF; cursor: pointer;" (click)='pcInfo()'>收起<img [src]='imgsrcdown'> </span>
</div>
<div class="queryField" *ngIf="pcfind" >
<button mat-raised-button color="primary">查询</button>
<button mat-raised-button style="margin-left: 25px;" type="button" (click)="reset()">重置</button>
</div>
<div class="queryField" *ngIf="!padMore&&!pcMore">
<label style="margin-right: 10px;">编制级别:</label>
<mat-form-field>
<mat-select [(ngModel)]="preparelevel" name="preparelevel" placeholder='请选择编制级别'>
<mat-option *ngFor="let item of preparelevels" [value]="item.value">{{item.name}}</mat-option>
</mat-select>
</mat-form-field>
<mat-checkbox style="margin-left: 6px;" [(ngModel)]="plcheck" name="plcheck">包含下级</mat-checkbox>
</div>
<div class="queryField" *ngIf="!padMore&&!pcMore">
<label style="margin-right: 10px;">预案级别:</label>
<mat-form-field>
<mat-select placeholder='请选择预案级别' [(ngModel)]="planCategory" name="planCategory" [multiple]="true">
<mat-option value=6>应急预案(国家级)</mat-option>
<mat-option value=7>应急预案(市级)</mat-option>
<mat-option value=8>类型预案</mat-option>
<mat-option value=1>Ⅰ级预案</mat-option>
<mat-option value=2>Ⅱ级预案</mat-option>
<mat-option value=3>Ⅲ级预案</mat-option>
<mat-option value=4>Ⅳ级预案</mat-option>
<mat-option value=5>Ⅴ级预案</mat-option>
</mat-select>
</mat-form-field>
</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> -->
<span style="margin-left: 15px;">🠊</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>
</form>
</div>
<mat-divider></mat-divider>
<div class="body">
<div class="tablebox">
<table mat-table [dataSource]="tabledataSource" class="mat-elevation-z8">
<!-- <ng-container matColumnDef="unitname">
<th mat-header-cell *matHeaderCellDef>单位名称</th>
<td mat-cell *matCellDef="let element">{{element.companyName}}</td>
</ng-container> -->
<ng-container matColumnDef="planname">
<th mat-header-cell *matHeaderCellDef>预案名称</th>
<td mat-cell *matCellDef="let element">{{element.name}}</td>
</ng-container>
<ng-container matColumnDef="addpeople">
<th mat-header-cell *matHeaderCellDef>添加人</th>
<td mat-cell *matCellDef="let element">{{element.creatorName}}</td>
</ng-container>
<ng-container matColumnDef="level">
<th mat-header-cell *matHeaderCellDef>预案级别</th>
<td mat-cell *matCellDef="let element">{{element.planCategory==1?'Ⅰ级预案':element.planCategory==2?'Ⅱ级预案':
element.planCategory==3?'Ⅲ级预案':element.planCategory==4?'Ⅳ级预案':element.planCategory==5?'Ⅴ级预案':element.planCategory==8?'类型预案':'应急预案'}}</td>
</ng-container>
<ng-container matColumnDef="addtime">
<th mat-header-cell *matHeaderCellDef>审核时间</th>
<td mat-cell *matCellDef="let element">{{element.creationTime | date:'yyyy-MM-dd'}}</td>
</ng-container>
<ng-container matColumnDef="plantype">
<th mat-header-cell *matHeaderCellDef>预案类型</th>
<td mat-cell *matCellDef="let element">{{element.planType | plantype}}</td>
</ng-container>
<ng-container matColumnDef="auditStatus">
<th mat-header-cell *matHeaderCellDef>审核状态</th>
<td mat-cell *matCellDef="let element">{{element.auditStatus | auditsatus}}</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 (click)="lookUnitInfo(element)" style="color: blue;cursor: pointer;">查看单位信息</span> -->
<span (click)="routerTo(element)" style="color: blue;cursor: pointer;margin-left: 10px;">{{url=='1'?'审核预案':'查看预案'}} </span>
<!-- <label style="color: #0000FF;margin-left: 10px;cursor: pointer;" (click)='openReserve(element)' *ngIf="element.auditStatus==2">预案公开</label>
<label style="color: #0000FF;margin-left: 10px;cursor: pointer;" (click)='closeReserve(element)' *ngIf="element.auditStatus==2">预案取消公开</label> -->
</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>

233
src/app/statistic-analysis/plan-analysis-by-synthesis/plan-analysis-by-synthesis.component.scss

@ -0,0 +1,233 @@
.header {
width: 100%;
padding: 12px 10px;
box-sizing: border-box;
.queryBox {
box-sizing: border-box;
padding: 5px 0 0 5px;
// margin-left: 50px;
display: flex;
flex-direction: row;
flex-wrap: wrap;
align-items:center;
// justify-content:center;
.queryField {
//margin: 0 10px;
input {
width: 180px;
height: 22px;
line-height: 22px;
border-radius: 3px;
}
@media screen and (min-device-width:1400px){
margin: 3px 20px;
}
@media screen and (max-device-width:1400px)and (min-device-width:1200px){
margin: 3px 10px;
mat-form-field{
width: 180px;
}
}
@media screen and (max-device-width:1200px){
margin: 3px 0 3px 10px;
mat-form-field{
width: 120px;
}
}
}
} //queryBox
.butclass{
button{
width: 80px;height: 36px;
font-size: 16px;
}
}
.ordiv{
position: relative;
.organizationbox{
width:450px;
height: 200px;
background: white;
position: absolute;
top: 48px;
left: 77px;
z-index: 999;
border: 1px solid grey;
overflow-y: auto;
li{
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
mat-tree-node{
cursor: pointer;
white-space:pre;
}
mat-tree-node:hover{
background: rgba(225, 225, 225, 0.8);
}
.closediv{
z-index: 100;
position: absolute;
right: 0;
top: 0;
width: 30px;
height: 30px;
cursor: pointer;
line-height: 30px;
text-align: center;
}
.closediv:hover{
background:rgba(225, 225, 225, 0.8);
}
}
}
}
.body{
.buttonbox{
padding-left: 50px;
button{
margin:0 10px
}
}
.tablebox{
table{
width: 100%;
// margin-left: 2%;
margin-top: 15px;
}
mat-paginator{
width:100%;
// margin-left: 2%;
// margin-top: 30px;
}
}
}
.mat-header-cell{
text-align: center;
}
.mat-cell{
text-align: center;
}
//完整度
.integrityDiv{
width: 180px;
height: 30px;
background-color: #e2e7ee;
// background-image: linear-gradient(to right, #e2e7ee ,#FF4500, #FF8C00,#32cd32);
margin: 0 auto;
position: relative;
.integrityNum{
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
color: black;
font-weight: 800;
font-size: 15px;
cursor: default;
}
.integrityColorDiv{
height: 100%;
}
.integrityDetails{
position: absolute;
display: none;
width: 350px;
height:280px;
border: 1px solid rgba(0, 0, 0, 0.22);
background-color: white;
.integrityDetailsTop{
width: 100%;
height: 23px;
line-height:23px;
border-bottom: 1px solid rgba(0, 0, 0, 0.22);
margin-bottom: 1px;
font-size: 14px;
span{
display: inline-block;
text-align: center;
font-weight: 800;
}
.span1{
width: 25%;
}
.span2{
width: 60%;
}
.span3{
width: 15%;
}
}
.integrityDetailsBody{
ul{
li{
width: 100%;
height: 23px;
line-height: 23px;
margin: 3px 0;
div{
float: left;
font-size: 13px;
}
.name{
width: 25%;
height: 100%;
}
.colorDiv{
width: 60%;
height: 100%;
position: relative;
.colorDivBac{
width: 90%;
height: 100%;
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%,-50%);
background-color: #dfe5ec;
border-radius: 5px;
.colorDivCon{
border-radius: 5px;
height: 100%;
background-color: #2398f1;
}
}
span{
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%,-50%);
// color: white;
font-weight: 600;
}
}
.number{
width: 15%;
height: 100%;
}
}
}
}
}
.bottomposition{
top: 2px;
left: 188px;
}
.topposition{
top: -252px;
left: 188px;
}
}
.integrityDiv:hover{
.integrityDetails{
display: block;
}
}

25
src/app/statistic-analysis/plan-analysis-by-synthesis/plan-analysis-by-synthesis.component.spec.ts

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

504
src/app/statistic-analysis/plan-analysis-by-synthesis/plan-analysis-by-synthesis.component.ts

@ -0,0 +1,504 @@
import { Component, OnInit, ViewChild, Inject } from '@angular/core';
import { HttpClient } from '@angular/common/http'
import { MatTreeFlatDataSource, MatTreeFlattener } from '@angular/material/tree';
import { MatPaginator } from '@angular/material/paginator';
import { FlatTreeControl } from '@angular/cdk/tree';
import { FormControl } from '@angular/forms';
import { Router,ActivatedRoute } from '@angular/router'
import { PageEvent } from '@angular/material/paginator';
import { MatDialogRef, MatDialog, MAT_DIALOG_DATA } from '@angular/material/dialog';
import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar';
import { TreeService } from '../../http-interceptors/tree.service'
import { Viewer } from 'photo-sphere-viewer';
declare var CryptoJS
@Component({
selector: 'app-plan-analysis-by-synthesis',
templateUrl: './plan-analysis-by-synthesis.component.html',
styleUrls: ['./plan-analysis-by-synthesis.component.scss']
})
export class PlanAnalysisBySynthesisComponent implements OnInit {
constructor(private http:HttpClient,private router:Router,private route:ActivatedRoute,private tree: TreeService,public dialog: MatDialog,public snackBar: MatSnackBar) { }
private _transformer = (node, level: number) => { //初始化tree
return {
expandable: !!node.children && node.children.length > 0,
name: node.name,
level: level,
id: node.id,
parentId: node.parentId,
children: node.children
};
}
treeControl = new FlatTreeControl<any>(node => node.level, node => node.expandable);
treeFlattener = new MatTreeFlattener(this._transformer, node => node.level, node => node.expandable, node => node.children);
dataSource = new MatTreeFlatDataSource(this.treeControl, this.treeFlattener);
myControl = new FormControl();
hasChild = (_: number, node: any) => node.expandable;
//分页
@ViewChild(MatPaginator, {static: true})
pageEvent: PageEvent;
paginator: MatPaginator;
length:any; //共多少条数据
pageSize:any; //每页条数
pageSizeOptions: number[] = [10] //设置每页条数
PageNumber:any; //第几页
displayedColumns: string[] = ['planname', 'addpeople','level','addtime','plantype','auditStatus','openRange','projectlevel','operation'];
allorganizations:any //所有组织机构
allunittype:any //所有单位类型
tabledataSource:any //表格数据
url
preparelevels:any
ngOnInit(): void {
if(window.matchMedia("(max-width: 1400px)").matches){
this.pcMore=false
this.padMore=true
this.pcfind=false
this.padjt=true
}else{
this.pcfind=true
this.pcMore=true
this.padMore=false
this.padjt=false
}
this.getunitdata();
this.getOrganizations();
this.getUnittype();
this.getAllPlanInfo();
let level = sessionStorage.getItem("level");
if(level == "0"){//如果是总队
this.preparelevels = [
{name:"总队",value:"1"},
{name:"支队",value:"2"},
{name:"大队",value:"4"},
{name:"中队",value:"8"}
]
}
if(level == "1"){//如果是支队
this.preparelevels = [
{name:"支队",value:"2"},
{name:"大队",value:"4"},
{name:"中队",value:"8"}
]
}
if(level == "2"){//如果是大队
this.preparelevels = [
{name:"大队",value:"4"},
{name:"中队",value:"8"}
]
}
if(level == "3"){//如果是中队
this.preparelevels = [
{name:"中队",value:"8"}
]
}
this.url=window.location.href.substring(window.location.href.length-1,window.location.href.length)
//console.log(this.url)
}
pcMore//pc更多
pcput=false//pc收起
pcfind//pc查询
padjt=false
padMore=true//pad收缩控制
padput=false//pad收起按钮
imgsrcopen="../../../assets/images/routdown2.png"
imgsrcdown="../../../assets/images/routup2.png"
pcInfo(){
this.pcMore=!this.pcMore
this.pcput=!this.pcput
}
padInfo(){
this.padMore=!this.padMore
this.padput=!this.padput
}
allPlanInfo:any //存储所有预案信息
//获得所有预案信息
getAllPlanInfo(){
let reservePlanType
this.reservePlanType ? reservePlanType = JSON.parse(JSON.stringify(this.reservePlanType)) : reservePlanType = ''
if(this.reservePlanType && this.reservePlanType.length != 0){
reservePlanType = eval(this.reservePlanType.join("|"))
}
let paramsdata:any = {
CompanyName: this.companyName || '',
OrganizationId: this.jsId || '',
HasChildrenOrganization:this.jscheck || '',
BuildingTypeId: this.unittype || '',
PlanType: this.reservePlanType || '',
AuditStatus:'', //审核状态
PlanLevel: this.preparelevel || '',
HasChildrenPlanLevel: this.plcheck || '',
CreationTimeRangeStart:this.addtime||'',
CreationTimeRangeEnd:this.endtime||'',
PageNumber: this.PageNumber || '1',
PageSize: this.pageSizeOptions[0],
Sort: '',
PlanCategories:this.planCategory
}
this.http.get("/api/ApprovedPlans",{params:paramsdata}).subscribe((data:any)=>{
this.length = data.totalCount
this.allPlanInfo = data
this.tabledataSource = data.items
})
}
colorRgb(sColor){
var reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;
var sColor = sColor.toLowerCase();
if (sColor && reg.test(sColor)) {
if (sColor.length === 4) {
var sColorNew = "#";
for (var i = 1; i < 4; i += 1) {
sColorNew += sColor.slice(i, i + 1).concat(sColor.slice(i, i + 1));
}
sColor = sColorNew;
}
//处理六位的颜色值
var sColorChange = [];
for (var i = 1; i < 7; i += 2) {
sColorChange.push(parseInt("0x" + sColor.slice(i, i + 2)));
}
return sColorChange;
} else {
return sColor;
}
}
colorHex(rgb){
var _this = rgb;
var reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;
if (/^(rgb|RGB)/.test(_this)) {
var aColor = _this.replace(/(?:(|)|rgb|RGB)*/g, "").split(",");
var strHex = "#";
for (var i = 0; i < aColor.length; i++) {
var hex:any = Number(aColor[i]).toString(16);
hex = hex < 10 ? 0 + '' + hex : hex;// 保证每个rgb的值为2位
if (hex === "0") {
hex += hex;
}
strHex += hex;
}
if (strHex.length !== 7) {
strHex = _this;
}
return strHex;
} else if (reg.test(_this)) {
var aNum = _this.replace(/#/, "").split("");
if (aNum.length === 6) {
return _this;
} else if (aNum.length === 3) {
var numHex = "#";
for (var i = 0; i < aNum.length; i += 1) {
numHex += (aNum[i] + aNum[i]);
}
return numHex;
}
} else {
return _this;
}
}
gradientColor(startColor, endColor, step) {
let _this = this
let startRGB = _this.colorRgb(startColor);//转换为rgb数组模式
let startR = startRGB[0];
let startG = startRGB[1];
let startB = startRGB[2];
let endRGB = _this.colorRgb(endColor);
let endR = endRGB[0];
let endG = endRGB[1];
let endB = endRGB[2];
let sR = (endR - startR) / step;//总差值
let sG = (endG - startG) / step;
let sB = (endB - startB) / step;
var colorArr = [];
for (var i = 0; i < step; i++) {
//计算每一步的hex值
var hex = _this.colorHex('rgb('+ parseInt((sR * i + startR))+ ',' + parseInt((sG * i + startG))+ ',' + parseInt((sB * i + startB)) + ')');
colorArr.push(hex);
}
return colorArr;
}
integrity(width){
let _this = this
let style:any = {}
style.width = width +'%';
if(width < 30){
let colorArr = this.gradientColor('#D50000', '#E53935', 30);
for(let i = 0; i < 30; i++){
if( i == width){
style.background = colorArr[i]
}
}
}
if(width >= 30 && width < 60){
let colorArr = this.gradientColor('#FF9800', '#E65100', 30);
for(let i = 30; i < 60; i++){
if( i == width){
style.background = colorArr[i-30]
}
}
}
if(width >= 60){
let colorArr = this.gradientColor('#81C784', '#2E7D32', 41);
for(let i = 60; i <= 100; i++){
if( i == width){
style.background = colorArr[i-60]
}
}
}
return style
}
integrityDetails(width,zong){
let style:any = {}
style.width = (width/zong)*100 +'%';
return style
}
//得到当前单位信息
getunitdata(){
this.http.get("/api/Account/Profiles").subscribe(
(data:any)=>{
this.organizationName = data.organizationName
}
)
}
addtime//开始时间
endtime//结束时间
integrityScoreMin//完整度最小值
integrityScoreMax//完整度最大值
organizationName:any //当前单位组织机构名称
treedata:any //组织机构树型数据
newArr:any = []
newallorganizations:any //用于存储在原始数据基础上的每个机构增加children字段
//得到当前单位所在组织机构的tree型数据
getpresentOrganization(){
this.newallorganizations = this.allorganizations
this.newallorganizations.forEach(item => {
item.children = []
this.newallorganizations.forEach(element => {
if(element.parentId == item.id){
item.children.push(element)
}
});
});
this.http.get("/api/Account/Profiles").subscribe(
(data:any)=>{
this.organizationName = data.organizationName
if(this.organizationName){
this.newallorganizations.forEach(item => {
if(item.name == this.organizationName){
this.dataSource.data = [item]
}
});
}else{
this.dataSource.data = this.tree.toTree(this.treedata);
}
}
)
}
//获得所有组织机构
getOrganizations(){
this.http.get('/api/Organizations').subscribe(
(data:any)=>{
this.allorganizations = data
this.treedata = this.tree.toTree(data);
this.getpresentOrganization();
}
)
}
//获得所有单位类型
getUnittype(){
this.http.get('/api/BuildingTypes/Simple').subscribe(
data=>{
this.allunittype = data
}
)
}
//查看单位信息
lookUnitInfo(element){
// console.log(element)
// const dialogRef = this.dialog.open(UnitInfo, {
// width: '1500px',
// height:'800px'
// });
sessionStorage.setItem("editable","0")
sessionStorage.setItem("companyName",element.company.name)
sessionStorage.setItem("companyId",element.company.id)
sessionStorage.setItem(element.company.id,JSON.stringify(element.company.companyIntegrityScore))
window.open(`/keyUnit/viewunitinfo?id=${element.company.id}&usci=${element.company.usci}`,'_blank');
}
//跳转查看预案页面 审核通过预案
routerTo(e){
// console.log(e)
if(e.planMode == 0||e.planMode == 1){
//console.log(e.attachmentUrls)
var index=e.attachmentUrls[0].indexOf("\/")
if(e.attachmentUrls[0].substr(0,index)=='psw'){
const dialogRef = this.dialog.open(GkPsViewer2, {
width: '1500px',
height:'800px',
data: e.attachmentUrls[0]
});
}
else /* if(e.attachmentUrls[0].substr(e.attachmentUrls[0].length-4,e.attachmentUrls[0].length-1)=='docx'||e.attachmentUrls[0].substr(e.attachmentUrls[0].length-3,e.attachmentUrls[0].length)=='pdf'
||e.attachmentUrls[0].substr(e.attachmentUrls[0].length-3,e.attachmentUrls[0].length)=='doc'||e.attachmentUrls[0].substr(e.attachmentUrls[0].length-3,e.attachmentUrls[0].length)=='DOC'
||e.attachmentUrls[0].substr(e.attachmentUrls[0].length-3,e.attachmentUrls[0].length)=='txt'||e.attachmentUrls[0].substr(e.attachmentUrls[0].length-3,e.attachmentUrls[0].length)=='JPG') */{
let filename:string
let fetchUrl = e.attachmentUrls[0]
let docIdWordArray = CryptoJS.enc.Utf8.parse(`PlanPlatform/` + fetchUrl);
let docId = CryptoJS.enc.Base64.stringify(docIdWordArray);
let jwt = sessionStorage.getItem("token");
let rawJwt = CryptoJS.enc.Base64.parse(jwt.split('.')[1]);
let identityJson = CryptoJS.enc.Utf8.stringify(rawJwt);
let identityJsonparse=JSON.parse(identityJson)
this.http.get(`/api/ObjectMetadata/PlanPlatform/${fetchUrl}`).subscribe((data:any)=>{
filename=data.fileName
let json={
doc: {
docId: docId,
title: filename,
fetchUrl: `http://39.106.78.171:8000/api/Objects/PlanPlatform/`+fetchUrl,
},
user: {
uid: identityJsonparse.sub,
nickName: identityJsonparse.name,
avatar: "",
privilege: [
'FILE_READ','FILE_DOWNLOAD', 'FILE_PRINT'
],
},
}
var stringjson=JSON.stringify(json)
var wordArray = CryptoJS.enc.Utf8.parse(stringjson);
var base64 = CryptoJS.enc.Base64.stringify(wordArray);
window.open(`http://121.5.10.84:80/apps/editor/openPreview?data=${base64}`)
})
}
}
if(e.planMode == 2){ //如果是在线编辑
let id = e.id
sessionStorage.setItem("planId",id)
sessionStorage.setItem("companyId",e.companyId)
//sessionStorage.setItem("buildingTypeId",this.unittypeId)
sessionStorage.setItem("editable","0")
sessionStorage.setItem("planName",e.name)
let companyId = sessionStorage.getItem("companyId")
window.open(`/keyUnit/viewunitinfoplan?id=${companyId}`);
}
if(e.planMode == 3){ //如果是跳转网页
sessionStorage.setItem("url",e.url)
window.open(`/planManagement/webLook`)
}
}
//预案公开
openReserve (e) {
this.http.put(`/api/PlanAudits/${e.id}/Public`,[]).subscribe(data=>{
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('预案已公开','确定',config);
})
}
//预案取消公开
closeReserve (e) {
this.http.put(`/api/PlanAudits/${e.id}/Unpublic`,[]).subscribe(data=>{
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('预案已取消公开','确定',config);
})
}
//分页事件
chagePage(e){
this.PageNumber = e.pageIndex+1
this.getAllPlanInfo();
}
//辖区中队div是否显示
isorganizationbox:boolean = false
//点击辖区中队树,将选择的辖区中队添加到变量
add(node) {
this.isorganizationbox = false
this.js = node.name
this.jsId = node.id
}
//关闭辖区中队隐藏框
closeorganizationbox() {
this.isorganizationbox = false
}
//打开辖区中队隐藏框
openorganizationbox() {
this.isorganizationbox = true
}
//关闭出现的组织机构div
closediv(){
this.isorganizationbox = false
}
//查询
onSubmit (e) {
this.PageNumber = 1
this.pageEvent.pageIndex = 0
this.getAllPlanInfo();
}
companyName:any //单位名称
js:any //所选组织机构
jsId:any //所选组织机构的id
jscheck:boolean //所选组织机构勾选框
unittype:any //单位类型
reservePlanType:any //预案类型
preparelevel:any //编制级别
plcheck:boolean //编制级别勾选框
planCategory=[]//预案级别
//重置
reset(){
this.companyName = ''
this.js = ''
this.jsId = ''
this.jscheck = false
this.unittype = ''
this.reservePlanType = ''
this.preparelevel = ''
this.addtime=''
this.endtime=''
this.plcheck = false
//重新获取初始化列表
this.pageEvent.pageIndex = 0
this.PageNumber = 1
this.planCategory=[]
this.getAllPlanInfo();
}
}
@Component({
selector: 'PsViewer',
templateUrl: './PsvShow.html',
styleUrls: ['./plan-analysis-by-synthesis.component.scss']
})
export class GkPsViewer2{
constructor(private router:Router,private http: HttpClient,public dialog: MatDialog,public snackBar: MatSnackBar,public dialogRef: MatDialogRef<GkPsViewer2>,@Inject(MAT_DIALOG_DATA) public data: any) {}
ngOnInit(): void {
// console.log(this.data)
const viewer = new Viewer({
container: document.querySelector('#viewer'),
panorama:'/api/Objects/PlanPlatform/'+ this.data,
});
}
}

6
src/app/statistic-analysis/statistic-analysis-routing.module.ts

@ -35,9 +35,8 @@ import { HomeComponent } from './home/home.component';
import { yueDateComponent }from './scheduled-updates/scheduled-updates.component' import { yueDateComponent }from './scheduled-updates/scheduled-updates.component'
import { CompangInfoComponent }from './compang-info/compang-info.component' import { CompangInfoComponent }from './compang-info/compang-info.component'
import { AllPlanComponent } from './all-plan/all-plan.component' import { AllPlanComponent } from './all-plan/all-plan.component'
import { PlanAnalysisBySynthesisComponent } from './plan-analysis-by-synthesis/plan-analysis-by-synthesis.component';
import { RealMonitoringComponent } from './real-monitoring/real-monitoring.component' import { RealMonitoringComponent } from './real-monitoring/real-monitoring.component'
import { from } from 'rxjs';
const routes: Routes = [ const routes: Routes = [
{ path: 'statePageOne', component: PageOneComponent}, { path: 'statePageOne', component: PageOneComponent},
@ -71,7 +70,8 @@ const routes: Routes = [
{ path: 'scheduledUpdates/PublicEcharts', component: publicEchartsComponent}, { path: 'scheduledUpdates/PublicEcharts', component: publicEchartsComponent},
{ path: 'home', component: HomeComponent}, { path: 'home', component: HomeComponent},
{ path: 'CompangInfo',component:CompangInfoComponent}, { path: 'CompangInfo',component:CompangInfoComponent},
{ path: 'AllPlan',component:AllPlanComponent}, { path:'AllPlan',component:AllPlanComponent},
{ path:'PlanAnalysisBySynthesis',component:PlanAnalysisBySynthesisComponent},
{ path: 'RealMonitoring',component:RealMonitoringComponent} { path: 'RealMonitoring',component:RealMonitoringComponent}
]; ];

9
src/app/statistic-analysis/statistic-analysis.module.ts

@ -71,12 +71,12 @@ import { DeleteTwoNewaddComponent } from './deleteUnit/delete-two-newadd/delete-
import { CompangInfoComponent } from './compang-info/compang-info.component'; import { CompangInfoComponent } from './compang-info/compang-info.component';
import { AllPlanComponent } from './all-plan/all-plan.component'; import { AllPlanComponent } from './all-plan/all-plan.component';
import { PsViewer }from './all-plan/all-plan.component'; import { PsViewer }from './all-plan/all-plan.component';
import { GkPsViewer2, PlanAnalysisBySynthesisComponent } from './plan-analysis-by-synthesis/plan-analysis-by-synthesis.component'
import { PlanManagementModule } from '../plan-management/plan-management.module';
import { RealMonitoringComponent } from './real-monitoring/real-monitoring.component' import { RealMonitoringComponent } from './real-monitoring/real-monitoring.component'
@NgModule({ @NgModule({
declarations: [PageOneComponent, PageTwoTimeComponent, PageTwoNameComponent, PageZhongDuiDetailsComponent,echartsComponent, DeleteOneComponent, DeleteTwoComponent, DeleteThereComponent, DeleteFourComponent, BuildingTypeOneComponent, ScheduledUpdatesComponent,publicEchartsComponent,verifiedComponent,notVerifiedComponent,detailedInformationComponent,moreTableComponent,yueDateComponent,yuebuildingDateComponent,indexConditionComponent, BuildingTypeTwoForwardComponent, BuildingTypeTwoReverseComponent, BuildingTypeThreeDetailsComponent, AddUnitOneComponent, AddUnitTwoTypeStatisticsComponent, AddUnitTwoTypeDetailsComponent, AddUnitTwoTimeComponent,AddUnitThreeLineDetailsComponent,AddUnitThreeBarDetailsComponent, HomeComponent, DeleteThereLineDetailsComponent, PageThereComponent, PageThereYearComponent, DeleteTwoNewaddComponent, CompangInfoComponent, AllPlanComponent,PsViewer, RealMonitoringComponent], declarations: [GkPsViewer2,PageOneComponent, PageTwoTimeComponent, PageTwoNameComponent, PageZhongDuiDetailsComponent,echartsComponent, DeleteOneComponent, DeleteTwoComponent, DeleteThereComponent, DeleteFourComponent, BuildingTypeOneComponent, ScheduledUpdatesComponent,publicEchartsComponent,verifiedComponent,notVerifiedComponent,detailedInformationComponent,moreTableComponent,yueDateComponent,yuebuildingDateComponent,indexConditionComponent, BuildingTypeTwoForwardComponent, BuildingTypeTwoReverseComponent, BuildingTypeThreeDetailsComponent, AddUnitOneComponent, AddUnitTwoTypeStatisticsComponent, AddUnitTwoTypeDetailsComponent, AddUnitTwoTimeComponent,AddUnitThreeLineDetailsComponent,AddUnitThreeBarDetailsComponent, HomeComponent, DeleteThereLineDetailsComponent, PageThereComponent, PageThereYearComponent, DeleteTwoNewaddComponent, CompangInfoComponent, AllPlanComponent,PsViewer, RealMonitoringComponent,PlanAnalysisBySynthesisComponent],
imports: [ imports: [
CommonModule, CommonModule,
StatisticAnalysisRoutingModule, StatisticAnalysisRoutingModule,
@ -124,7 +124,8 @@ import { RealMonitoringComponent } from './real-monitoring/real-monitoring.compo
MatTabsModule, MatTabsModule,
MatToolbarModule, MatToolbarModule,
MatTooltipModule, MatTooltipModule,
MatTreeModule MatTreeModule,
PlanManagementModule
] ]
}) })
export class StatisticAnalysisModule { } export class StatisticAnalysisModule { }

8
src/app/ui/collection-tools-building/collection-tools.component.html

@ -24,7 +24,7 @@
复制<mat-icon>library_books</mat-icon> 复制<mat-icon>library_books</mat-icon>
</button> </button>
<button (click)="pasteAsset()" class="copytobutn marginLeftRight" mat-button title="粘贴" *ngIf="isEditPattern"> <button (click)="pasteAsset()" class="copytobutn marginLeftRight" mat-button title="粘贴" *ngIf="isEditPattern">
粘贴<mat-icon>screen_share</mat-icon> 粘贴
</button> </button>
<span title="适应缩放" class="zoom" (click)="adaptZoom()"> <span title="适应缩放" class="zoom" (click)="adaptZoom()">
@ -35,7 +35,11 @@
<img src="/assets/images/重置缩放.png" alt=""> <img src="/assets/images/重置缩放.png" alt="">
重置缩放 重置缩放
</span> </span>
<button (click)="takeScreenshot()">导出图片</button> <span title="导出图片" class="zoom" (click)="takeScreenshot()">
<mat-icon>image</mat-icon>
导出图片
</span>
<span class="rightSave"> <span class="rightSave">
<!-- <mat-icon title="查看/编辑模式" (click)="lookpat()" *ngIf="isEditPattern">tv</mat-icon> <!-- <mat-icon title="查看/编辑模式" (click)="lookpat()" *ngIf="isEditPattern">tv</mat-icon>
<mat-icon title="查看/编辑模式" (click)="editpat()" *ngIf="!isEditPattern && isediticon">create</mat-icon> --> <mat-icon title="查看/编辑模式" (click)="editpat()" *ngIf="!isEditPattern && isediticon">create</mat-icon> -->

5
src/app/ui/collection-tools-plan/collection-tools.component.html

@ -30,7 +30,10 @@
<img src="/assets/images/重置缩放.png" alt=""> <img src="/assets/images/重置缩放.png" alt="">
重置缩放 重置缩放
</span> </span>
<button (click)="takeScreenshot()">导出图片</button> <span title="导出图片" class="zoom" (click)="takeScreenshot()">
<mat-icon>image</mat-icon>
导出图片
</span>
<span class="rightSave"> <span class="rightSave">
<!-- <mat-icon title="查看/编辑模式" (click)="lookpat()" *ngIf="isEditPattern">tv</mat-icon> <!-- <mat-icon title="查看/编辑模式" (click)="lookpat()" *ngIf="isEditPattern">tv</mat-icon>
<mat-icon title="查看/编辑模式" (click)="editpat()" *ngIf="!isEditPattern && isediticon">create</mat-icon> --> <mat-icon title="查看/编辑模式" (click)="editpat()" *ngIf="!isEditPattern && isediticon">create</mat-icon> -->

4
src/app/ui/collection-tools/collection-tools.component.html

@ -37,6 +37,10 @@
<img src="/assets/images/重置缩放.png" alt=""> <img src="/assets/images/重置缩放.png" alt="">
重置缩放 重置缩放
</span> </span>
<span title="导出图片" class="zoom" (click)="takeScreenshot()">
<mat-icon>image</mat-icon>
导出图片
</span>
<div class="bigBox"> <div class="bigBox">
<div class="weatherBox" [ngClass]="{'opened': weatherBtn,'close': !weatherBtn}"> <div class="weatherBox" [ngClass]="{'opened': weatherBtn,'close': !weatherBtn}">
<span class="name">天气</span> <span class="name">天气</span>

5
src/app/ui/collection-tools/collection-tools.component.ts

@ -170,7 +170,10 @@ export class CollectionToolsComponent implements OnInit {
}); });
} }
//截图
takeScreenshot() {
this.canvas.takeScreenshot();
}
pattern:boolean = false//默认为基本信息编辑 pattern:boolean = false//默认为基本信息编辑
//基本信息编辑模式 //基本信息编辑模式
baseInfo(){ baseInfo(){

8
src/index.html

@ -22,9 +22,9 @@
<app-root></app-root> <app-root></app-root>
</body> </body>
<script src="http://10.81.73.39:8000/webapi/maps?v=2.0&key=e4b359dc7b03f9418b7497f807131346&plugin=AMap.Driving,AMap.MouseTool,AMap.RangingTool"></script> <!-- <script src="http://10.81.73.39:8000/webapi/maps?v=2.0&key=e4b359dc7b03f9418b7497f807131346&plugin=AMap.Driving,AMap.MouseTool,AMap.RangingTool"></script>
<script src="http://10.81.73.39:8000/webapi/ui/1.1/main.js"></script> <script src="http://10.81.73.39:8000/webapi/ui/1.1/main.js"></script> -->
<!-- <script src="https://webapi.amap.com/maps?v=2.0&key=e4b359dc7b03f9418b7497f807131346&plugin=AMap.Driving,AMap.MouseTool,AMap.RangingTool"></script> <script src="https://webapi.amap.com/maps?v=2.0&key=e4b359dc7b03f9418b7497f807131346&plugin=AMap.Driving,AMap.MouseTool,AMap.RangingTool"></script>
<script src="https://webapi.amap.com/ui/1.1/main.js"></script> --> <script src="https://webapi.amap.com/ui/1.1/main.js"></script>
</html> </html>

Loading…
Cancel
Save