Compare commits
78 Commits
Author | SHA1 | Date |
---|---|---|
|
311da85ea1 | 2 months ago |
|
3799207fad | 2 months ago |
|
cca7eb69cb | 2 months ago |
|
f549bdddee | 3 months ago |
|
5477317eb3 | 5 months ago |
|
39832ce94f | 10 months ago |
|
ed1f680b76 | 10 months ago |
|
1d34e328e3 | 10 months ago |
|
0980d84ca3 | 12 months ago |
|
8e24430c91 | 1 year ago |
|
de4f21a50e | 1 year ago |
|
3b3d841de0 | 1 year ago |
|
0e576e149f | 1 year ago |
|
0b0405af2c | 1 year ago |
|
c5bdcd5fa7 | 1 year ago |
|
56bb98000e | 1 year ago |
|
c897c18244 | 1 year ago |
|
a9706d32e3 | 1 year ago |
|
8fe4e0a875 | 1 year ago |
|
892a11cbe9 | 1 year ago |
|
c4ebd842cd | 1 year ago |
|
b1c382b51d | 1 year ago |
|
e4b418048d | 1 year ago |
|
326b7dc782 | 1 year ago |
|
4fa2f38f51 | 1 year ago |
|
5b6f55359e | 1 year ago |
|
d48ab61752 | 2 years ago |
|
b4d4c892a6 | 2 years ago |
|
34a45a0c3a | 2 years ago |
|
af5da5c315 | 2 years ago |
|
de0f601460 | 2 years ago |
|
53387b0c59 | 2 years ago |
|
39e6672992 | 2 years ago |
|
748e932959 | 2 years ago |
|
627a19c13f | 2 years ago |
|
24b584b99f | 2 years ago |
|
80512680ad | 2 years ago |
|
76bbe10e0c | 2 years ago |
|
a7fdba960f | 2 years ago |
|
414ef96b0f | 2 years ago |
|
3be6452604 | 2 years ago |
|
ddf28910dd | 2 years ago |
|
cd688567e7 | 2 years ago |
|
e3396929f1 | 2 years ago |
![]() |
2848b06371 | 2 years ago |
|
c7ff17cecc | 2 years ago |
|
9845869c3c | 2 years ago |
![]() |
889642262b | 2 years ago |
|
50515a8756 | 2 years ago |
|
d72f15ab8f | 2 years ago |
|
dd13bb0b6b | 2 years ago |
|
058a702cf3 | 2 years ago |
|
f42a1276cb | 2 years ago |
|
b697284c8c | 2 years ago |
|
75d7e634af | 2 years ago |
|
721be9145e | 2 years ago |
|
8b369d14a6 | 2 years ago |
|
8669435fcc | 2 years ago |
|
648a04b4a0 | 2 years ago |
|
ad9fc5d4c4 | 2 years ago |
|
9d8159f38b | 2 years ago |
|
6429ac3166 | 2 years ago |
|
d0b48c582f | 2 years ago |
|
fbe5cdc154 | 2 years ago |
|
4daf0419c7 | 2 years ago |
|
fe40d42983 | 2 years ago |
|
ace52511a8 | 2 years ago |
|
dd4dbd7051 | 2 years ago |
|
0e06d9fd89 | 2 years ago |
|
1a25e07d96 | 2 years ago |
|
078c69cf58 | 2 years ago |
|
5ffca01f19 | 2 years ago |
|
ff10a9cce6 | 2 years ago |
|
8c9a026fb4 | 2 years ago |
|
83770e08c7 | 2 years ago |
|
1d97dc8ef8 | 2 years ago |
|
05d8ed8f20 | 2 years ago |
|
a29982e204 | 2 years ago |
157 changed files with 33665 additions and 23726 deletions
@ -1,31 +1,70 @@ |
|||||||
import { Injectable } from '@angular/core'; |
import { HttpClient } from "@angular/common/http"; |
||||||
import { CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, Router } from '@angular/router'; |
import { Injectable } from "@angular/core"; |
||||||
|
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) { |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
// 路由守卫
|
// 路由守卫
|
||||||
canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean { |
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(); |
return this.checkLogin(); |
||||||
} |
} |
||||||
|
|
||||||
checkLogin(): boolean { |
checkLogin(): boolean { |
||||||
|
|
||||||
// 判断本地有没有token
|
// 判断本地有没有token
|
||||||
const token = sessionStorage.getItem('token'); |
const token = sessionStorage.getItem("token"); |
||||||
|
|
||||||
// 如果有token,允许访问
|
// 如果有token,允许访问
|
||||||
if (token) { return true; } |
if (token) { |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
//如果没有token,跳转登录页
|
//如果没有token,跳转登录页
|
||||||
this.router.navigate(['/login']); |
this.router.navigate(["/login"]); |
||||||
return false; |
return false; |
||||||
} |
} |
||||||
|
|
||||||
|
onSubmit() { |
||||||
|
return new Promise<void>((resolve, reject) => { |
||||||
|
this.http |
||||||
|
.post("/api/Account/SignIn", { |
||||||
|
name: "superadmin", |
||||||
|
password: "SHya119!@", |
||||||
|
}) |
||||||
|
.subscribe( |
||||||
|
(data: any) => { |
||||||
|
sessionStorage.setItem("level", data.level); |
||||||
|
sessionStorage.setItem("token", data.token); |
||||||
|
sessionStorage.setItem("refreshToken", data.refreshToken); |
||||||
|
sessionStorage.setItem("isDefaultPassword", data.isDefaultPassword); //是否需要修改默认密码
|
||||||
|
sessionStorage.setItem("singleSignOn", "true"); //是否需要修改默认密码
|
||||||
|
resolve(); |
||||||
|
}, |
||||||
|
(err) => { |
||||||
|
reject(); |
||||||
|
} |
||||||
|
); |
||||||
|
}); |
||||||
|
} |
||||||
} |
} |
||||||
|
@ -1,11 +1,73 @@ |
|||||||
<!-- 株洲项目:传入预案id显示相应预案 --> |
<mat-tab-group *ngIf="planId" selectedIndex="10" style="height: 99%;"> |
||||||
<div *ngIf="showType == 0"> |
<mat-tab label="1.基本信息"> |
||||||
|
<ng-template matTabContent> |
||||||
|
<app-basicinfo-look></app-basicinfo-look> |
||||||
|
</ng-template> |
||||||
|
</mat-tab> |
||||||
|
<mat-tab label="2.四周毗邻"> |
||||||
|
<ng-template matTabContent> |
||||||
|
<app-allaround></app-allaround> |
||||||
|
</ng-template> |
||||||
|
</mat-tab> |
||||||
|
<mat-tab label="3.消防设施"> |
||||||
|
<ng-template matTabContent> |
||||||
|
<app-fire-fighting-device-look></app-fire-fighting-device-look> |
||||||
|
</ng-template> |
||||||
|
</mat-tab> |
||||||
|
<mat-tab label="4.重点部位"> |
||||||
|
<ng-template matTabContent> |
||||||
|
<app-key-site-look></app-key-site-look> |
||||||
|
</ng-template> |
||||||
|
</mat-tab> |
||||||
|
<mat-tab label="5.功能分区"> |
||||||
|
<ng-template matTabContent> |
||||||
|
<app-function-division-look></app-function-division-look> |
||||||
|
</ng-template> |
||||||
|
</mat-tab> |
||||||
|
<mat-tab label="6.行车路线"> |
||||||
|
<ng-template matTabContent> |
||||||
|
<app-router-gis></app-router-gis> |
||||||
|
</ng-template> |
||||||
|
</mat-tab> |
||||||
|
<mat-tab label="7.周边水源及力量"> |
||||||
|
<ng-template matTabContent> |
||||||
|
<app-water-road></app-water-road> |
||||||
|
</ng-template> |
||||||
|
</mat-tab> |
||||||
|
<mat-tab label="8.实景图"> |
||||||
|
<ng-template matTabContent> |
||||||
|
<app-realistic-picture-look></app-realistic-picture-look> |
||||||
|
</ng-template> |
||||||
|
</mat-tab> |
||||||
|
<mat-tab label="9.上传CAD"> |
||||||
|
<ng-template matTabContent> |
||||||
|
<app-uploading-cad-look></app-uploading-cad-look> |
||||||
|
</ng-template> |
||||||
|
</mat-tab> |
||||||
|
<mat-tab label="10.特别警示"> |
||||||
|
<ng-template matTabContent> |
||||||
|
<app-special-warning></app-special-warning> |
||||||
|
</ng-template> |
||||||
|
</mat-tab> |
||||||
|
<mat-tab label="11.作战部署"> |
||||||
|
<ng-template matTabContent> |
||||||
|
<div *ngIf="showType == 0"> |
||||||
<iframe id="inneriframe" [src]='iframeSrc' frameborder="0" style="width: 100%;height: 100%;"></iframe> |
<iframe id="inneriframe" [src]='iframeSrc' frameborder="0" style="width: 100%;height: 100%;"></iframe> |
||||||
</div> |
</div> |
||||||
<div *ngIf="showType == 1" id="viewer"></div> |
<div *ngIf="showType == 1" id="viewer"></div> |
||||||
<div *ngIf="showType == 2"> |
<div *ngIf="showType == 3"> |
||||||
<iframe id="inneriframe2" [src]='threedUrl' frameborder="0" style="width: 100%;height: 100%;"></iframe> |
|
||||||
</div> |
|
||||||
<div *ngIf="showType == 3"> |
|
||||||
<app-collection-tools></app-collection-tools> |
<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> |
File diff suppressed because it is too large
Load Diff
@ -1,40 +1,34 @@ |
|||||||
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.post('/api/Account/RefreshToken', { |
this.http |
||||||
|
.post("/api/Account/RefreshToken", { |
||||||
token: token, |
token: token, |
||||||
refreshToken: refreshToken |
refreshToken: refreshToken, |
||||||
}).subscribe((data:any) => { |
|
||||||
sessionStorage.setItem("level",data.level); |
|
||||||
sessionStorage.setItem("token",data.token); |
|
||||||
sessionStorage.setItem("refreshToken",data.refreshToken); |
|
||||||
}) |
}) |
||||||
},18*60*1000) |
.subscribe((data: any) => { |
||||||
|
sessionStorage.setItem("level", data.level); |
||||||
} |
sessionStorage.setItem("token", data.token); |
||||||
|
sessionStorage.setItem("refreshToken", data.refreshToken); |
||||||
|
}); |
||||||
|
}, 5 * 60 * 1000); |
||||||
|
}; |
||||||
|
|
||||||
//删除定时器
|
//删除定时器
|
||||||
delete = ():void=> { |
delete = (): void => { |
||||||
window.clearInterval(this.timer) |
window.clearInterval(this.timer); |
||||||
} |
}; |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
} |
} |
||||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,119 @@ |
|||||||
|
<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> |
@ -0,0 +1,120 @@ |
|||||||
|
.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; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,25 @@ |
|||||||
|
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(); |
||||||
|
}); |
||||||
|
}); |
@ -0,0 +1,203 @@ |
|||||||
|
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); |
||||||
|
} |
||||||
|
} |
File diff suppressed because it is too large
Load Diff
@ -1,13 +1,7 @@ |
|||||||
|
|
||||||
<p style="text-align: center;">更新公告</p> |
<p style="text-align: center;">更新公告</p> |
||||||
<p>更新内容如下:</p> |
<p>更新内容如下:</p> |
||||||
<p>1.增加V级文本预案模板导入功能;</p> |
<p>1.单位管理模块现在支持按照重点单位和一般单位进行查询。</p> |
||||||
<p>2.已上传至预案编制管理平台的Ⅴ级文本预案,增加【转在线导入】功能;</p> |
<p>2.在单位管理模块的列表中,我们将“关注/取消”改为了“重点单位/一般单位”,并且重点单位名称前面有红星标记,一般单位前面无标记,以便更好地区分。</p> |
||||||
<p>3.增加V级文本预案自定义在线编制功能;</p> |
<p>3.在预案管理模块中,我们去掉了预案列表中的编制级别,并且增加了按照重点单位和一般单位进行查询的功能。在预案列表中的单位名称前面增加了一列显示栏,区分重点单位和一般单位。</p> |
||||||
<p>为了预案导入功能正常使用,且提高文本预案识别导入的成功率,需要注意以下几点:</p> |
<p>4.预案列表页面中,预案的名称支持手动修改,同时转在线导入文档转成功后名称去掉 “转在线编制”。 </p> |
||||||
<p>1.【转在线导入】功能,仅支持以Ⅴ级文本预案模板做预案的文档,其他文档不支持【转在线导入】功能。</p> |
<p>5.点击系统右上角的“?”下载重点单位设置说明,以便更好地了解如何设置重点单位。 </p> |
||||||
<p>2.Ⅴ级文本预案模板可以随意修改内容,但整体框架不得做任何修改,不允许随意删除、合并、增加单元格,否则影响预案识别导入的内容。</p> |
|
||||||
<p>3.文档导入成功后,可在线编辑,也可以自行添加新的功能模块。</p> |
|
||||||
<p>4.V级预案模板导入时仅支持微软Office保存并且格式为.docx的文档,其余格式无法导入。</p> |
|
||||||
<p>5.V级预案模板文档以及V级预案使用说明、视频可点击右上角帮助进行下载、查看。其中Ⅴ级文本预案模板文件夹内放置九大类型预案模板、V级预案转在线导入文件夹内包含使用说明及视频、V级预案自定义文件夹内包含使用说明及视频、V级在线编制文件夹内包含使用说明及视频。</p> |
|
||||||
|
|
@ -1,83 +1,95 @@ |
|||||||
import { Pipe, PipeTransform } from '@angular/core'; |
import { Pipe, PipeTransform } from "@angular/core"; |
||||||
import { isno, PlanTypeEnum, AuditStatusEnum, PlanLevelEnum } from '../interface' |
import { |
||||||
@Pipe({ name: 'isno' }) |
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: 'differentContentTitle' }) |
@Pipe({ name: "auditState" }) |
||||||
|
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 "文本预案"; |
||||||
} |
} |
||||||
} |
} |
||||||
} |
} |
||||||
|
@ -1,340 +1,376 @@ |
|||||||
/* |
import { Component, OnInit, Inject } from "@angular/core"; |
||||||
* @Descripttion:
|
import { FormControl } from "@angular/forms"; |
||||||
* @version:
|
import { MatSnackBar, MatSnackBarConfig } from "@angular/material/snack-bar"; |
||||||
* @Author: sueRimn |
import { |
||||||
* @Date: 2020-12-25 10:19:31 |
MatDialog, |
||||||
* @LastEditors: sueRimn |
MatDialogRef, |
||||||
* @LastEditTime: 2021-08-16 15:29:41 |
MAT_DIALOG_DATA, |
||||||
*/ |
} from "@angular/material/dialog"; |
||||||
import { Component, OnInit, Inject } from '@angular/core'; |
import { HttpClient } from "@angular/common/http"; |
||||||
import { FormControl } from '@angular/forms'; |
import { DomSanitizer } from "@angular/platform-browser"; |
||||||
import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar'; |
import { Viewer } from "photo-sphere-viewer"; |
||||||
import { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog'; |
declare var CryptoJS; |
||||||
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 |
||||||
|
) {} |
||||||
|
|
||||||
constructor(private http: HttpClient, public snackBar: MatSnackBar, private sanitizer: DomSanitizer, public dialog: MatDialog) { } |
pcshow; |
||||||
|
|
||||||
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 = [ |
//如果是中队
|
||||||
{ name: "中队", value: "3" } |
this.preparelevels = [{ 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, |
||||||
this.http.get("/api/ContentVerifies", { params: paramsdata }).subscribe((data: any) => { |
PageSize: 10, |
||||||
|
PageType: 2, |
||||||
|
}; |
||||||
|
this.http |
||||||
|
.get("/api/ContentVerifies", { params: paramsdata }) |
||||||
|
.subscribe((data: any) => { |
||||||
//console.log(data)
|
//console.log(data)
|
||||||
this.tableDate = data.items |
this.isTableData = false; |
||||||
this.count = data.totalCount |
this.tableDate = data.items; |
||||||
}) |
this.count = data.totalCount; |
||||||
|
}); |
||||||
} |
} |
||||||
//提交查询
|
//提交查询
|
||||||
onSubmit(value) { |
onSubmit(value) { |
||||||
//console.log(value)
|
this.PageNumber = 1; |
||||||
this.getAlltabledate() |
this.getAlltabledate(); |
||||||
} |
} |
||||||
//刷新
|
//刷新
|
||||||
record() { |
record() { |
||||||
this.verifyState = '' |
this.verifyState = ""; |
||||||
this.level = '' |
this.level = ""; |
||||||
this.projectlevel = '' |
this.projectlevel = ""; |
||||||
this.addtime = '' |
this.IsNewData = [true, false]; |
||||||
this.endtime = '' |
this.addtime = ""; |
||||||
let level = sessionStorage.getItem("level"); |
this.endtime = ""; |
||||||
this.PlanLevel = '' |
this.PlanLevel = ""; |
||||||
this.plantypes=[] |
this.plantypes = []; |
||||||
this.getAlltabledate() |
this.PageNumber = 1; //分页事件触发刷新
|
||||||
|
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.get(`/api/CustomFireForce/${item.itemId}`).subscribe((data: any) => { |
this.http |
||||||
if (data.forceType != 0) {//如果是其他消防力量
|
.get(`/api/CustomFireForce/${item.itemId}`) |
||||||
this.postlevel = 4 |
.subscribe((data: any) => { |
||||||
|
if (data.forceType != 0) { |
||||||
|
//如果是其他消防力量
|
||||||
|
this.postlevel = 4; |
||||||
} else { |
} else { |
||||||
this.postlevel = data.level |
this.postlevel = data.level; |
||||||
} |
} |
||||||
// console.log('xxx',data)
|
// console.log('xxx',data)
|
||||||
data.fireForceDetailInfo.location ? null : data.fireForceDetailInfo.location = { x: null, y: null } |
data.fireForceDetailInfo.location |
||||||
this.fireForceDetailInfo = data.fireForceDetailInfo |
? null |
||||||
this.showtype = 13 |
: (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.get(`/api/LinkageForces/${item.itemId}`).subscribe((data: any) => { |
this.http |
||||||
|
.get(`/api/LinkageForces/${item.itemId}`) |
||||||
data.location ? null : data.location = { x: null, y: null } |
.subscribe((data: any) => { |
||||||
this.LinkageForceDetailInfo = data |
data.location ? null : (data.location = { x: null, y: null }); |
||||||
this.showtype = 14 |
this.LinkageForceDetailInfo = data; |
||||||
}) |
this.showtype = 14; |
||||||
|
}); |
||||||
} else { |
} else { |
||||||
this.http.get(`/api/PlanComponents/${item.itemId}`).subscribe((data: any) => { |
this.http |
||||||
this.companyId = data.companyId |
.get(`/api/PlanComponents/${item.itemId}`) |
||||||
this.companyName = data.companyName |
.subscribe((data: any) => { |
||||||
|
this.companyId = data.companyId; |
||||||
|
this.companyName = data.companyName; |
||||||
//this.bianzhi = false
|
//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.src); |
this.iframeSrc = this.sanitizer.bypassSecurityTrustResourceUrl( |
||||||
|
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(() => { |
window.setTimeout(() => { |
||||||
this.viewer = new Viewer({ |
this.viewer = new Viewer({ |
||||||
container: document.querySelector('#viewer'), |
container: document.querySelector("#viewer"), |
||||||
panorama: '/api/Objects/PlanPlatform/' + this.fetchUrl, |
panorama: "/api/Objects/PlanPlatform/" + this.fetchUrl, |
||||||
|
}); |
||||||
}); |
}); |
||||||
}) |
|
||||||
|
|
||||||
} else { |
} else { |
||||||
this.lookWord() |
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.split('.')[this.fetchUrl.split('.').length - 1].toLowerCase() |
let suffix = this.fetchUrl |
||||||
if (suffix == 'docx' || suffix == 'doc') { |
.split(".") |
||||||
let arr = this.fetchUrl.split('.') |
[this.fetchUrl.split(".").length - 1].toLowerCase(); |
||||||
arr[arr.length - 1] = 'pdf' |
if (suffix == "docx" || suffix == "doc") { |
||||||
this.src = `/api/Objects/PlanPlatform/` + arr.join('.') |
let arr = this.fetchUrl.split("."); |
||||||
} else if (suffix == 'pdf') { |
arr[arr.length - 1] = "pdf"; |
||||||
this.src = `/api/Objects/PlanPlatform/` + this.fetchUrl |
this.src = `/api/Objects/PlanPlatform/` + arr.join("."); |
||||||
|
} else if (suffix == "pdf") { |
||||||
|
this.src = `/api/Objects/PlanPlatform/` + this.fetchUrl; |
||||||
} |
} |
||||||
this.iframeSrc = this.sanitizer.bypassSecurityTrustResourceUrl(this.src); |
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() { |
||||||
this.compantData = { name: '', buildingTypes: [], address: '' } |
console.log(this.planData); |
||||||
this.planType = this.planData.planMode |
this.compantData = { name: "", buildingTypes: [], address: "" }; |
||||||
let data = this.planData |
this.planType = this.planData.planMode; |
||||||
|
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) { //预案planMode=0时, 查看word
|
if (this.planData.planMode == 0) { |
||||||
|
//预案planMode=0时, 查看word
|
||||||
//this.lookWord()
|
//this.lookWord()
|
||||||
} else if (this.planData.planMode == 1) { //预案planMode=1时, 解析文档
|
} else if (this.planData.planMode == 1 || this.planData.planMode == 2) { |
||||||
|
//预案planMode=2时, 跳查看页面组件
|
||||||
} else if (this.planData.planMode == 2) { //预案planMode=2时, 跳查看页面组件
|
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; |
||||||
}) |
}); |
||||||
sessionStorage.setItem("buildingTypeId", this.compantData.buildingTypes.length ? this.compantData.buildingTypes[0].id : undefined); |
sessionStorage.setItem( |
||||||
|
"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(`/keyUnit/viewunitinfoplans?id=${companyId}`); |
this.thirdPartyURL = this.sanitizer.bypassSecurityTrustResourceUrl( |
||||||
|
`/keyUnit/viewunitinfoplans?id=${companyId}` |
||||||
|
); |
||||||
//window.open(`/keyUnit/viewunitinfoplan?id=${companyId}`)
|
//window.open(`/keyUnit/viewunitinfoplan?id=${companyId}`)
|
||||||
} else if (this.planData.planMode == 3) { //预案planMode=3时, 第三方网址'
|
} else if (this.planData.planMode == 3) { |
||||||
this.showtype = 2 |
//预案planMode=3时, 第三方网址'
|
||||||
|
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(data.url) |
this.thirdPartyURL = this.sanitizer.bypassSecurityTrustResourceUrl( |
||||||
|
data.url |
||||||
|
); |
||||||
} |
} |
||||||
|
|
||||||
} |
} |
||||||
|
|
||||||
//打开三维预案弹窗
|
//打开三维预案弹窗
|
||||||
oopen3Dshow() { |
oopen3Dshow() { |
||||||
this.dialog.open(recordshow3D, { width: '1650px', height: '850px', data: { url: this.thirdPartyURL, twoOrthree: this.twoOrthree } }); |
this.dialog.open(recordshow3D, { |
||||||
|
width: "1650px", |
||||||
|
height: "850px", |
||||||
|
data: { url: this.thirdPartyURL, twoOrthree: this.twoOrthree }, |
||||||
|
}); |
||||||
} |
} |
||||||
//判断iframe是否加载完成
|
//判断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(private sanitizer: DomSanitizer, public dialogRef: MatDialogRef<recordshow3D>, @Inject(MAT_DIALOG_DATA) public data, public dialog: MatDialog) { } |
constructor( |
||||||
|
private sanitizer: DomSanitizer, |
||||||
|
public dialogRef: MatDialogRef<recordshow3D>, |
||||||
|
@Inject(MAT_DIALOG_DATA) public data, |
||||||
|
public dialog: MatDialog |
||||||
|
) {} |
||||||
ngOnInit(): void { |
ngOnInit(): void { |
||||||
// console.log(this.data)
|
// console.log(this.data)
|
||||||
this.threedUrl = this.sanitizer.bypassSecurityTrustResourceUrl(this.data.url.changingThisBreaksApplicationSecurity) |
this.threedUrl = this.sanitizer.bypassSecurityTrustResourceUrl( |
||||||
|
this.data.url.changingThisBreaksApplicationSecurity |
||||||
|
); |
||||||
} |
} |
||||||
threedUrl |
threedUrl; |
||||||
} |
} |
||||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,58 @@ |
|||||||
|
<!-- <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> |
@ -0,0 +1,59 @@ |
|||||||
|
.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; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,25 @@ |
|||||||
|
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(); |
||||||
|
}); |
||||||
|
}); |
@ -0,0 +1,141 @@ |
|||||||
|
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(); |
||||||
|
}); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,18 @@ |
|||||||
|
<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,0 +1,25 @@ |
|||||||
|
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(); |
||||||
|
}); |
||||||
|
}); |
@ -0,0 +1,37 @@ |
|||||||
|
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"); |
||||||
|
}); |
||||||
|
} |
||||||
|
} |
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,29 @@ |
|||||||
|
<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> |
@ -0,0 +1,118 @@ |
|||||||
|
.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; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,25 @@ |
|||||||
|
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(); |
||||||
|
}); |
||||||
|
}); |
@ -0,0 +1,110 @@ |
|||||||
|
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; |
||||||
|
} |
||||||
|
); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,10 @@ |
|||||||
|
<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> |
@ -0,0 +1,4 @@ |
|||||||
|
.box{ |
||||||
|
max-height: 400px; |
||||||
|
overflow-y: auto; |
||||||
|
} |
@ -0,0 +1,25 @@ |
|||||||
|
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(); |
||||||
|
}); |
||||||
|
}); |
@ -0,0 +1,126 @@ |
|||||||
|
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("公开成功"); |
||||||
|
}); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,35 @@ |
|||||||
|
<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> |
@ -0,0 +1,122 @@ |
|||||||
|
.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; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,25 @@ |
|||||||
|
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(); |
||||||
|
}); |
||||||
|
}); |
@ -0,0 +1,103 @@ |
|||||||
|
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); |
||||||
|
}); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,62 @@ |
|||||||
|
<!-- <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> |
@ -0,0 +1,63 @@ |
|||||||
|
.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; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,25 @@ |
|||||||
|
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(); |
||||||
|
}); |
||||||
|
}); |
@ -0,0 +1,180 @@ |
|||||||
|
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(); |
||||||
|
}); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue