陈敬瑜 3 years ago
parent
commit
b750ecb585
  1. 23
      package-lock.json
  2. 1
      package.json
  3. 9
      src/app/data-collection/data-collection.module.ts
  4. 2
      src/app/data-collection/fire-force/addFireForce.html
  5. 20
      src/app/data-collection/fire-force/addFireForceCar.html
  6. 433
      src/app/data-collection/fire-force/fire-force.component.html
  7. 394
      src/app/data-collection/fire-force/fire-force.component.scss
  8. 776
      src/app/data-collection/fire-force/fire-force.component.ts
  9. 4
      src/app/export-excel/export-excel.component.ts
  10. 1
      src/app/gis-management/left-working/left-working.component.ts
  11. 3
      src/app/navigation/navigation.component.ts
  12. 85
      src/app/services/objects.service.ts
  13. 16
      src/app/ui/material-bank/addmatlibrary.component.ts
  14. 1
      src/app/ui/material-bank/addoriginalcopy.component.ts
  15. 14
      src/app/ui/material-bank/editmatlibrary.component.ts
  16. 1
      src/app/ui/material-bank/editoriginalcopy.component.ts
  17. 14
      src/app/ui/material-bank/material-bank.component.ts
  18. 1
      src/app/ui/material-bank/selectoriginalcopy.component.ts
  19. 62
      src/app/ui/role/role.component.ts
  20. 3
      src/app/ui/unit-information/addgroups.component.ts
  21. 1
      src/app/ui/unit-information/addunitinfo.component.ts
  22. 2
      src/app/ui/unit-information/editgroup.component.ts
  23. 1
      src/app/ui/unit-information/editunitinfo.component.ts
  24. 1
      src/app/ui/userdata/userdata.component.ts
  25. 4
      src/app/working-area/model/axLegend.ts
  26. 4
      src/app/working-area/working-area.component.ts
  27. BIN
      src/assets/images/add2.png
  28. BIN
      src/assets/images/goback.png
  29. BIN
      src/assets/images/uploadbtn.png
  30. 179
      src/styles.scss

23
package-lock.json generated

@ -465,7 +465,7 @@
}, },
"@ant-design/colors": { "@ant-design/colors": {
"version": "3.2.2", "version": "3.2.2",
"resolved": "https://registry.npm.taobao.org/@ant-design/colors/download/@ant-design/colors-3.2.2.tgz?cache=0&sync_timestamp=1596611396536&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40ant-design%2Fcolors%2Fdownload%2F%40ant-design%2Fcolors-3.2.2.tgz", "resolved": "https://registry.npm.taobao.org/@ant-design/colors/download/@ant-design/colors-3.2.2.tgz",
"integrity": "sha1-WtQ9YZ6RHzSI66wwPWBuZqhCOQM=", "integrity": "sha1-WtQ9YZ6RHzSI66wwPWBuZqhCOQM=",
"requires": { "requires": {
"tinycolor2": "^1.4.1" "tinycolor2": "^1.4.1"
@ -473,7 +473,7 @@
}, },
"@ant-design/icons-angular": { "@ant-design/icons-angular": {
"version": "9.0.1", "version": "9.0.1",
"resolved": "https://registry.npm.taobao.org/@ant-design/icons-angular/download/@ant-design/icons-angular-9.0.1.tgz?cache=0&sync_timestamp=1601000889997&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40ant-design%2Ficons-angular%2Fdownload%2F%40ant-design%2Ficons-angular-9.0.1.tgz", "resolved": "https://registry.nlark.com/@ant-design/icons-angular/download/@ant-design/icons-angular-9.0.1.tgz",
"integrity": "sha1-Wsi+xbw00jEgggyT+FEbWaoRe8U=", "integrity": "sha1-Wsi+xbw00jEgggyT+FEbWaoRe8U=",
"requires": { "requires": {
"@ant-design/colors": "^3.1.0" "@ant-design/colors": "^3.1.0"
@ -7097,11 +7097,6 @@
"assert-plus": "^1.0.0" "assert-plus": "^1.0.0"
} }
}, },
"date-fns": {
"version": "2.9.0",
"resolved": "https://registry.npm.taobao.org/date-fns/download/date-fns-2.9.0.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdate-fns%2Fdownload%2Fdate-fns-2.9.0.tgz",
"integrity": "sha1-0LF1pcN+1fF7l+InK7wfpa7Gd9I="
},
"date-format": { "date-format": {
"version": "2.1.0", "version": "2.1.0",
"resolved": "https://registry.npm.taobao.org/date-format/download/date-format-2.1.0.tgz?cache=0&sync_timestamp=1572559173297&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdate-format%2Fdownload%2Fdate-format-2.1.0.tgz", "resolved": "https://registry.npm.taobao.org/date-format/download/date-format-2.1.0.tgz?cache=0&sync_timestamp=1572559173297&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdate-format%2Fdownload%2Fdate-format-2.1.0.tgz",
@ -11986,7 +11981,7 @@
}, },
"ng-zorro-antd": { "ng-zorro-antd": {
"version": "9.3.0", "version": "9.3.0",
"resolved": "https://registry.npm.taobao.org/ng-zorro-antd/download/ng-zorro-antd-9.3.0.tgz", "resolved": "https://registry.nlark.com/ng-zorro-antd/download/ng-zorro-antd-9.3.0.tgz",
"integrity": "sha1-+A2+JxXleMR1codzRJRC8AmfFSw=", "integrity": "sha1-+A2+JxXleMR1codzRJRC8AmfFSw=",
"requires": { "requires": {
"@angular/cdk": "^9.0.0", "@angular/cdk": "^9.0.0",
@ -11997,9 +11992,9 @@
}, },
"dependencies": { "dependencies": {
"date-fns": { "date-fns": {
"version": "2.16.1", "version": "2.23.0",
"resolved": "https://registry.npm.taobao.org/date-fns/download/date-fns-2.16.1.tgz?cache=0&sync_timestamp=1598884189690&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdate-fns%2Fdownload%2Fdate-fns-2.16.1.tgz", "resolved": "https://registry.nlark.com/date-fns/download/date-fns-2.23.0.tgz?cache=0&sync_timestamp=1627020353586&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fdate-fns%2Fdownload%2Fdate-fns-2.23.0.tgz",
"integrity": "sha1-BXdXksPzMx2oEq8lPhqTWFHTg0s=" "integrity": "sha1-TohslBZZrwz3sw+v3R6qN+iHiKk="
} }
} }
}, },
@ -15961,9 +15956,9 @@
"dev": true "dev": true
}, },
"tinycolor2": { "tinycolor2": {
"version": "1.4.1", "version": "1.4.2",
"resolved": "https://registry.npm.taobao.org/tinycolor2/download/tinycolor2-1.4.1.tgz", "resolved": "https://registry.npm.taobao.org/tinycolor2/download/tinycolor2-1.4.2.tgz",
"integrity": "sha1-9PrTM0R7wLB9TcjpIJ2POaisd+g=" "integrity": "sha1-P2pNEHGtB2dtf6Ry4frECnGdiAM="
}, },
"tinyqueue": { "tinyqueue": {
"version": "1.2.3", "version": "1.2.3",

1
package.json

@ -31,7 +31,6 @@
"bson-objectid": "^1.3.1", "bson-objectid": "^1.3.1",
"cesium": "^1.64.0", "cesium": "^1.64.0",
"crypto-js": "^4.0.0", "crypto-js": "^4.0.0",
"date-fns": "^2.9.0",
"e-ngx-cesium": "^6.3.2", "e-ngx-cesium": "^6.3.2",
"echarts": "^4.6.0", "echarts": "^4.6.0",
"firebase": "^7.6.2", "firebase": "^7.6.2",

9
src/app/data-collection/data-collection.module.ts

@ -44,12 +44,12 @@ import { MatTreeModule } from '@angular/material/tree';
import { FormsModule, ReactiveFormsModule } from '@angular/forms'; import { FormsModule, ReactiveFormsModule } from '@angular/forms';
import { DataCollectionRoutingModule } from './data-collection.routing'; import { DataCollectionRoutingModule } from './data-collection.routing';
import { AddWater, WaterCollectionComponent } from './water-collection/water-collection.component'; import { AddWater, WaterCollectionComponent } from './water-collection/water-collection.component';
import { AddFireForce, FireForceComponent, ViewDetails } from './fire-force/fire-force.component'; import { AddFireForce, AddFireForceCar, FireForceComponent, ViewDetails } from './fire-force/fire-force.component';
import { AddLinkageForce, LinkageForcesComponent, ViewDetails2 } from './linkage-forces/linkage-forces.component'; import { AddLinkageForce, LinkageForcesComponent, ViewDetails2 } from './linkage-forces/linkage-forces.component';
import { NzTreeModule } from 'ng-zorro-antd/tree'; import { NzTreeModule } from 'ng-zorro-antd/tree';
import { NzTreeSelectModule } from 'ng-zorro-antd/tree-select';
@NgModule({ @NgModule({
declarations: [WaterCollectionComponent, FireForceComponent, LinkageForcesComponent, AddWater, AddFireForce, ViewDetails, AddLinkageForce, ViewDetails2], declarations: [WaterCollectionComponent, FireForceComponent, LinkageForcesComponent, AddWater, AddFireForce, ViewDetails, AddLinkageForce, ViewDetails2,AddFireForceCar],
imports: [ imports: [
CommonModule, CommonModule,
A11yModule, A11yModule,
@ -97,7 +97,8 @@ import { NzTreeModule } from 'ng-zorro-antd/tree';
FormsModule, FormsModule,
ReactiveFormsModule, ReactiveFormsModule,
DataCollectionRoutingModule, DataCollectionRoutingModule,
NzTreeModule NzTreeModule,
NzTreeSelectModule
] ]
}) })
export class DataCollectionModule { } export class DataCollectionModule { }

2
src/app/data-collection/fire-force/addFireForce.html

@ -2,7 +2,7 @@
<div class="topbox"> <div class="topbox">
<span>新增消防力量</span> <span>新增消防力量</span>
</div> </div>
<div class="contant"> <div class="content">
<div (click)="selecteAddType(item,key)" *ngFor="let item of addList;let key = index" [ngClass]="{selectedDiv: item.id == selectedFireForceTypeIndex}"> <div (click)="selecteAddType(item,key)" *ngFor="let item of addList;let key = index" [ngClass]="{selectedDiv: item.id == selectedFireForceTypeIndex}">
<!-- <img [src]="item.src" alt=""> --> <!-- <img [src]="item.src" alt=""> -->
{{item.name}} {{item.name}}

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

@ -0,0 +1,20 @@
<div class="addCarBox">
<div class="topbox">
<span>新增消防车辆</span>
</div>
<div class="content">
<!-- <div (click)="selecteAddType(item,key)" *ngFor="let item of addList;let key = index" [ngClass]="{selectedDiv: item.id == selectedFireForceTypeIndex}">
{{item.name}}
</div> -->
<form class="example-form" (ngSubmit)="onSubmit(form.value)" #form="ngForm">
<mat-form-field class="example-full-width">
<mat-label>车辆名称</mat-label>
<input name="carName" matInput [(ngModel)]="carName" required>
</mat-form-field>
</form>
</div>
<div class="btnbox">
<button type="submit" mat-flat-button color="primary" [disabled]='form.invalid' (click)="onSubmit(form.value)">确定</button>
<button type="button" mat-flat-button style="background-color: #F2F4F6;" mat-dialog-close>取消</button>
</div>
</div>

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

@ -3,10 +3,12 @@
<div class="topbox"> <div class="topbox">
<div class="add"> <div class="add">
<div> <div>
<mat-slide-toggle color="primary" (change)='slideChange($event)' checked labelPosition='before'>列表过滤</mat-slide-toggle> <mat-slide-toggle color="primary" (change)='slideChange($event)' checked labelPosition='before'>列表过滤
</mat-slide-toggle>
</div> </div>
<div> <div>
<button (click)="reset()" style="width: 68px;margin-right: 12px;" mat-flat-button color="primary">重置</button> <button (click)="reset()" style="width: 68px;margin-right: 12px;" mat-flat-button
color="primary">重置</button>
<button (click)="addFireForce()" style="width: 68px;" mat-flat-button color="primary">新增</button> <button (click)="addFireForce()" style="width: 68px;" mat-flat-button color="primary">新增</button>
</div> </div>
</div> </div>
@ -27,38 +29,45 @@
</select> </select>
</div> </div>
<div class="searchbtn"> <div class="searchbtn">
<button (click)="searchList()" style="width: 100%;" mat-flat-button color="primary"><mat-icon style="width: 20px;height: 20px;font-size: 20px;">search</mat-icon>搜索</button> <button (click)="searchList()" style="width: 100%;" mat-flat-button color="primary">
<mat-icon style="width: 20px;height: 20px;font-size: 20px;">search</mat-icon>搜索
</button>
</div> </div>
</div> </div>
</div> </div>
<div style="height: 1px;width: 100%;background-color: #F2F4F6;"></div> <div style="height: 1px;width: 100%;background-color: #F2F4F6;"></div>
<div class="contantbox"> <div class="contentbox">
<div class="title"> <div class="title">
<span>消防队</span> <span>消防队</span>
<span>完整度</span> <span>完整度</span>
</div> </div>
<div class="fireForceTree" id="fireForceTree" *ngIf="isTreeView"> <div class="fireForceTree" id="fireForceTree" *ngIf="isTreeView">
<mat-tree [dataSource]="dataSource" [treeControl]="treeControl"> <mat-tree [dataSource]="dataSource" [treeControl]="treeControl">
<mat-tree-node (click)="selectTreeNode(node)" [ngClass]="{'selectedTreeNode': node.id == selectedFireForceId}" *matTreeNodeDef="let node;" matTreeNodePadding matTreeNodePaddingIndent='10px'> <mat-tree-node (click)="selectTreeNode(node)" [ngClass]="{'selectedTreeNode': node.id == selectedFireForceId}"
*matTreeNodeDef="let node;" matTreeNodePadding matTreeNodePaddingIndent='10px'>
<button mat-icon-button disabled></button> <button mat-icon-button disabled></button>
<span class="nodename">{{node.name}}</span> <span class="nodename">{{node.name}}</span>
<div class="integrity"> <div class="integrity">
<span class="integrityNum"> <span class="integrityNum">
{{node.fireForceDetailInfo ? accMul(node.fireForceDetailInfo.integrityScore.toFixed(3),100,1) : 0}}% {{node.fireForceDetailInfo ?
accMul(node.fireForceDetailInfo.integrityScore.toFixed(3),100,1) : 0}}%
</span> </span>
<div class="integrityColorDiv" [style]="integrity(node.fireForceDetailInfo ? (node.fireForceDetailInfo.integrityScore.toFixed(2) * 100).toFixed(): 0)"> <div class="integrityColorDiv"
[style]="integrity(node.fireForceDetailInfo ? (node.fireForceDetailInfo.integrityScore.toFixed(2) * 100).toFixed(): 0)">
</div>
</div> </div>
<div class="deletebtn" (click)="deleteFireForce(node,$event)">
<mat-icon>highlight_off</mat-icon>
</div> </div>
<div class="deletebtn" (click)="deleteFireForce(node,$event)"><mat-icon>highlight_off</mat-icon></div>
</mat-tree-node> </mat-tree-node>
<mat-tree-node (click)="selectTreeNode(node)" [ngClass]="{'selectedTreeNode': node.id == selectedFireForceId}" *matTreeNodeDef="let node;when: hasChild" matTreeNodePadding matTreeNodePaddingIndent='10px'> <mat-tree-node (click)="selectTreeNode(node)"
[ngClass]="{'selectedTreeNode': node.id == selectedFireForceId}"
*matTreeNodeDef="let node;when: hasChild" matTreeNodePadding matTreeNodePaddingIndent='10px'>
<button mat-icon-button <button mat-icon-button matTreeNodeToggle [attr.aria-label]="'toggle ' + node.name">
matTreeNodeToggle
[attr.aria-label]="'toggle ' + node.name">
<mat-icon class="mat-icon-rtl-mirror"> <mat-icon class="mat-icon-rtl-mirror">
{{treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right'}} {{treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right'}}
</mat-icon> </mat-icon>
@ -66,27 +75,36 @@
<span class="nodename">{{node.name}}</span> <span class="nodename">{{node.name}}</span>
<div class="integrity"> <div class="integrity">
<span class="integrityNum"> <span class="integrityNum">
{{node.fireForceDetailInfo ? accMul(node.fireForceDetailInfo.integrityScore.toFixed(3),100,1) : 0}}% {{node.fireForceDetailInfo ?
accMul(node.fireForceDetailInfo.integrityScore.toFixed(3),100,1) : 0}}%
</span> </span>
<div class="integrityColorDiv" [style]="integrity(node.fireForceDetailInfo ? (node.fireForceDetailInfo.integrityScore.toFixed(2) * 100).toFixed(): 0)"> <div class="integrityColorDiv"
[style]="integrity(node.fireForceDetailInfo ? (node.fireForceDetailInfo.integrityScore.toFixed(2) * 100).toFixed(): 0)">
</div> </div>
</div> </div>
<div class="deletebtn" (click)="deleteFireForce(node,$event)"><mat-icon>highlight_off</mat-icon></div> <div class="deletebtn" (click)="deleteFireForce(node,$event)">
<mat-icon>highlight_off</mat-icon>
</div>
</mat-tree-node> </mat-tree-node>
</mat-tree> </mat-tree>
</div> </div>
<div class="fireForceList" *ngIf="!isTreeView"> <div class="fireForceList" *ngIf="!isTreeView">
<ul> <ul>
<li [ngClass]="{'selectedLi': item.id == selectedFireForceId}" *ngFor="let item of allFireForceList;let key = index" (click)="selectTreeNode(item)"> <li [ngClass]="{'selectedLi': item.id == selectedFireForceId}"
*ngFor="let item of allFireForceList;let key = index" (click)="selectTreeNode(item)">
<div class="name" [title]="item.name">{{item.name}}</div> <div class="name" [title]="item.name">{{item.name}}</div>
<div class="integrity"> <div class="integrity">
<span class="integrityNum"> <span class="integrityNum">
{{item.fireForceDetailInfo ? accMul(item.fireForceDetailInfo.integrityScore.toFixed(3),100,1) : 0}}% {{item.fireForceDetailInfo ?
accMul(item.fireForceDetailInfo.integrityScore.toFixed(3),100,1) : 0}}%
</span> </span>
<div class="integrityColorDiv" [style]="integrity(item.fireForceDetailInfo ? (item.fireForceDetailInfo.integrityScore.toFixed(2) * 100).toFixed(): 0)"> <div class="integrityColorDiv"
[style]="integrity(item.fireForceDetailInfo ? (item.fireForceDetailInfo.integrityScore.toFixed(2) * 100).toFixed(): 0)">
</div>
</div> </div>
<div class="deletebtn" (click)="deleteFireForce(item,$event)">
<mat-icon>highlight_off</mat-icon>
</div> </div>
<div class="deletebtn" (click)="deleteFireForce(item,$event)"><mat-icon>highlight_off</mat-icon></div>
</li> </li>
</ul> </ul>
</div> </div>
@ -94,14 +112,16 @@
</div> </div>
<div class="mapbox"> <div class="mapbox">
<div class="mapcheckbox"> <div class="mapcheckbox">
<mat-checkbox (change)="checkBoxChange()" [(ngModel)]="item.isChecked" color="primary" *ngFor="let item of checkBoxList">{{item.name}}</mat-checkbox> <mat-checkbox (change)="checkBoxChange()" [(ngModel)]="item.isChecked" color="primary"
*ngFor="let item of checkBoxList">{{item.name}}</mat-checkbox>
</div> </div>
<div id="map" class="map" style="overflow: hidden;"> <div id="map" class="map" style="overflow: hidden;">
<div id="container"></div> <div id="container"></div>
<div class="gistopbox hidden" [ngClass]="{'show': isGisTopBox}"> <div class="gistopbox hidden" [ngClass]="{'show': isGisTopBox}">
<div class="inputBox"> <div class="inputBox">
<span>搜索: </span> <span>搜索: </span>
<input name="position" [(ngModel)]="searchTitle" id="tipinput" class="positionInput" type="text" autocomplete="off"> <input name="position" [(ngModel)]="searchTitle" id="tipinput" class="positionInput" type="text"
autocomplete="off">
</div> </div>
</div> </div>
</div> </div>
@ -129,13 +149,17 @@
</div> </div>
<!-- <div (click)="selectedTab(2)" [ngClass]="{'selectedBtn': tabIndex == 2}"> <!-- <div (click)="selectedTab(2)" [ngClass]="{'selectedBtn': tabIndex == 2}">
<span>车辆装备</span> <span>车辆装备</span>
</div> --> </div>
<!-- <div (click)="selectedTab(3)" [ngClass]="{'selectedBtn': tabIndex == 3}"> <div (click)="selectedTab(3)" [ngClass]="{'selectedBtn': tabIndex == 3}">
<span>相关资料</span> <span>相关资料</span>
</div> --> </div> -->
</div> </div>
<div class="btnbox"> <div class="btnbox">
<div class="uploadAttachment" *ngIf="tabIndex == 3"> <!-- <div class="goback" (click)="goback()" *ngIf="carPageIndex == 1 && tabIndex == 2"><img
src="/assets/images/goback.png" alt=""> 返回
</div> -->
<!-- <span *ngIf="tabIndex == 2" type="submit" (click)="saveCarData(form.value)">保存车辆</span> -->
<!-- <div class="uploadAttachment" *ngIf="tabIndex == 3">
<button mat-flat-button color="primary"> <button mat-flat-button color="primary">
<mat-icon>attach_file</mat-icon> <mat-icon>attach_file</mat-icon>
上传附件 上传附件
@ -143,8 +167,7 @@
<a href="javascript:;" class="a-upload"> <a href="javascript:;" class="a-upload">
<input type="file" (change)='uploadAttachment($event)'> <input type="file" (change)='uploadAttachment($event)'>
</a> </a>
</div> </div> -->
<!-- <span class="state" *ngIf="selectedFireForce.contentVerify && selectedFireForce.contentVerify.verifyState == 3">( <!-- <span class="state" *ngIf="selectedFireForce.contentVerify && selectedFireForce.contentVerify.verifyState == 3">(
<span *ngIf="selectedFireForce.contentVerify.operation == 2" style="color: red;">删除</span> <span *ngIf="selectedFireForce.contentVerify.operation == 2" style="color: red;">删除</span>
<span *ngIf="selectedFireForce.contentVerify.operation == 0" >新增</span> <span *ngIf="selectedFireForce.contentVerify.operation == 0" >新增</span>
@ -156,11 +179,13 @@
<span class="submitAudit" *ngIf="!selectedFireForce.contentVerify || selectedFireForce.contentVerify.verifyState == 5 || selectedFireForce.contentVerify.verifyState == 4" (click)="submitAudit()"><mat-icon>open_in_browser</mat-icon>提交审核</span> <span class="submitAudit" *ngIf="!selectedFireForce.contentVerify || selectedFireForce.contentVerify.verifyState == 5 || selectedFireForce.contentVerify.verifyState == 4" (click)="submitAudit()"><mat-icon>open_in_browser</mat-icon>提交审核</span>
<span class="state" *ngIf="selectedFireForce.contentVerify && selectedFireForce.contentVerify.verifyState == 3" (click)="cancelAudit()">撤销审核</span> <span class="state" *ngIf="selectedFireForce.contentVerify && selectedFireForce.contentVerify.verifyState == 3" (click)="cancelAudit()">撤销审核</span>
<span class="save state" *ngIf="!selectedFireForce.contentVerify || selectedFireForce.contentVerify.verifyState == 5 || selectedFireForce.contentVerify.verifyState == 4" (click)="save()"><mat-icon>save</mat-icon>保存</span> --> <span class="save state" *ngIf="!selectedFireForce.contentVerify || selectedFireForce.contentVerify.verifyState == 5 || selectedFireForce.contentVerify.verifyState == 4" (click)="save()"><mat-icon>save</mat-icon>保存</span> -->
<span class="close" (click)="close()"><mat-icon>close</mat-icon>关闭</span> <span class="close" (click)="close()">
<mat-icon>close</mat-icon>关闭
</span>
</div> </div>
</div> </div>
<!-- 详情 --> <!-- 详情 -->
<div class="contant" *ngIf="tabIndex == 1"> <div class="content" *ngIf="tabIndex == 1">
<!-- 总队 支队 联系方式不同--> <!-- 总队 支队 联系方式不同-->
<div *ngIf="selectedFireForceLevel == 0 || selectedFireForceLevel == 1"> <div *ngIf="selectedFireForceLevel == 0 || selectedFireForceLevel == 1">
<p>基本信息</p> <p>基本信息</p>
@ -194,7 +219,8 @@
<span> <span>
备注: 备注:
</span> </span>
<textarea [(ngModel)]="FireForceDetailInfo.remark" style="height: 80%;width: 84%;" name="" id="" cols="30" rows="10"></textarea> <textarea [(ngModel)]="FireForceDetailInfo.remark" style="height: 80%;width: 84%;"
cols="30" rows="10"></textarea>
</mat-grid-tile> </mat-grid-tile>
</mat-grid-list> </mat-grid-list>
<p>位置信息</p> <p>位置信息</p>
@ -209,11 +235,13 @@
<span> <span>
经度: 经度:
</span> </span>
<input [(ngModel)]="positionLngLat.x" disabled type="text" style="width: 26%;margin-right: 6%;"> <input [(ngModel)]="positionLngLat.x" disabled type="text"
style="width: 26%;margin-right: 6%;">
<span> <span>
纬度: 纬度:
</span> </span>
<input [(ngModel)]="positionLngLat.y" disabled type="text" style="width: 26%;margin-right: 6%;"> <input [(ngModel)]="positionLngLat.y" disabled type="text"
style="width: 26%;margin-right: 6%;">
<!-- <button (click)="setPosition()" style="width:85px;text-align: center;" mat-flat-button color="primary"> <!-- <button (click)="setPosition()" style="width:85px;text-align: center;" mat-flat-button color="primary">
<mat-icon style="width: 20px;height: 20px;font-size: 20px;">place</mat-icon>位置 <mat-icon style="width: 20px;height: 20px;font-size: 20px;">place</mat-icon>位置
</button> --> </button> -->
@ -322,7 +350,8 @@
<span> <span>
备注: 备注:
</span> </span>
<textarea [(ngModel)]="FireForceDetailInfo.remark" style="height: 80%;width: 84%;" name="" id="" cols="30" rows="10"></textarea> <textarea [(ngModel)]="FireForceDetailInfo.remark" style="height: 80%;width: 84%;"
cols="30" rows="10"></textarea>
</mat-grid-tile> </mat-grid-tile>
</mat-grid-list> </mat-grid-list>
<p>位置信息</p> <p>位置信息</p>
@ -337,11 +366,13 @@
<span> <span>
经度: 经度:
</span> </span>
<input [(ngModel)]="positionLngLat.x" disabled type="text" style="width: 26%;margin-right: 6%;"> <input [(ngModel)]="positionLngLat.x" disabled type="text"
style="width: 26%;margin-right: 6%;">
<span> <span>
纬度: 纬度:
</span> </span>
<input [(ngModel)]="positionLngLat.y" disabled type="text" style="width: 26%;margin-right: 6%;"> <input [(ngModel)]="positionLngLat.y" disabled type="text"
style="width: 26%;margin-right: 6%;">
<!-- <button (click)="setPosition()" style="width:85px;text-align: center;" mat-flat-button color="primary"> <!-- <button (click)="setPosition()" style="width:85px;text-align: center;" mat-flat-button color="primary">
<mat-icon style="width: 20px;height: 20px;font-size: 20px;">place</mat-icon>位置 <mat-icon style="width: 20px;height: 20px;font-size: 20px;">place</mat-icon>位置
</button> --> </button> -->
@ -479,8 +510,10 @@
<span> <span>
站长: 站长:
</span> </span>
<input [(ngModel)]="othercontactData[2].PropertyValue" class="smallwidth" type="text" placeholder="姓名"> <input [(ngModel)]="othercontactData[2].PropertyValue" class="smallwidth" type="text"
<input [(ngModel)]="othercontactData[3].PropertyValue" class="smallwidth" type="text" placeholder="联系方式"> placeholder="姓名">
<input [(ngModel)]="othercontactData[3].PropertyValue" class="smallwidth" type="text"
placeholder="联系方式">
</mat-grid-tile> </mat-grid-tile>
<mat-grid-tile colspan='3' rowspan='1'> <mat-grid-tile colspan='3' rowspan='1'>
<span> <span>
@ -492,8 +525,10 @@
<span> <span>
负责人: 负责人:
</span> </span>
<input [(ngModel)]="othercontactData[4].PropertyValue" class="smallwidth" type="text" placeholder="姓名"> <input [(ngModel)]="othercontactData[4].PropertyValue" class="smallwidth" type="text"
<input [(ngModel)]="othercontactData[5].PropertyValue" class="smallwidth" type="text" placeholder="联系方式"> placeholder="姓名">
<input [(ngModel)]="othercontactData[5].PropertyValue" class="smallwidth" type="text"
placeholder="联系方式">
</mat-grid-tile> </mat-grid-tile>
<mat-grid-tile colspan='3' rowspan='1'> <mat-grid-tile colspan='3' rowspan='1'>
<span> <span>
@ -505,7 +540,8 @@
<span> <span>
备注: 备注:
</span> </span>
<textarea [(ngModel)]="FireForceDetailInfo.remark" style="height: 80%;width: 82%;" name="" id="" cols="30" rows="10"></textarea> <textarea [(ngModel)]="FireForceDetailInfo.remark" style="height: 80%;width: 82%;"
cols="30" rows="10"></textarea>
</mat-grid-tile> </mat-grid-tile>
</mat-grid-list> </mat-grid-list>
<p>位置信息</p> <p>位置信息</p>
@ -520,11 +556,13 @@
<span> <span>
经度: 经度:
</span> </span>
<input [(ngModel)]="positionLngLat.x" disabled type="text" style="width: 26%;margin-right: 6%;"> <input [(ngModel)]="positionLngLat.x" disabled type="text"
style="width: 26%;margin-right: 6%;">
<span> <span>
纬度: 纬度:
</span> </span>
<input [(ngModel)]="positionLngLat.y" disabled type="text" style="width: 26%;margin-right: 6%;"> <input [(ngModel)]="positionLngLat.y" disabled type="text"
style="width: 26%;margin-right: 6%;">
<!-- <button (click)="setPosition()" style="width:85px;text-align: center;" mat-flat-button color="primary"> <!-- <button (click)="setPosition()" style="width:85px;text-align: center;" mat-flat-button color="primary">
<mat-icon style="width: 20px;height: 20px;font-size: 20px;">place</mat-icon>位置 <mat-icon style="width: 20px;height: 20px;font-size: 20px;">place</mat-icon>位置
</button> --> </button> -->
@ -568,21 +606,318 @@
</div> </div>
</div> </div>
<!-- 车辆 --> <!-- 车辆 -->
<!-- <div class="contant" *ngIf="tabIndex == 2"> <!-- <div class="content" id="carcontent" *ngIf="tabIndex == 2">
车辆 <div class="carOne" *ngIf="carPageIndex == 0">
<div class="cartopbox">
<div class="add">
<div>
<mat-slide-toggle color="primary" (change)='carslideChange($event)' checked
labelPosition='before'>列表过滤</mat-slide-toggle>
</div>
<div>
<button (click)="resetCarList()" style="width: 68px;margin-right: 12px;" mat-flat-button
color="primary">重置</button>
<button (click)="addFireForceCar()" style="width: 68px;" mat-flat-button
color="primary">新增</button>
</div>
</div>
<div class="searchbox" *ngIf="isCarCheckedOfSearchDiv">
<div class="inputbox">
<span>
关键字:
</span>
<input type="text" placeholder="请输入名称/车牌号" [(ngModel)]="carSearchForm.name" />
</div>
<div class="inputbox">
<span>
所属队站:
</span>
<nz-tree-select [nzDropdownClassName]="'carTreeDropdown'"
[nzExpandedKeys]="expandOrKeys" [nzNodes]="selectOrganizationTree" nzShowSearch
nzPlaceHolder="请选择" [(ngModel)]="carSearchForm.organization"
(ngModelChange)="onChange($event)"></nz-tree-select>
</div>
<div class="inputbox">
<span>
车辆类别:
</span>
<nz-tree-select #treeCarTypeSelected [nzDropdownClassName]="'carTreeDropdown'"
[nzExpandedKeys]="expandCarTypeKeys" [nzNodes]="carTypeList" nzShowSearch
nzPlaceHolder="请选择" [(ngModel)]="carSearchForm.carType"
(ngModelChange)="onChangeCarType($event)"></nz-tree-select>
</div>
<div class="inputbox">
<span>
完整度:
</span>
<select class="shortselect" [(ngModel)]="carSearchForm.integrityNum"
[ngClass]="{'gray': carSearchForm.integrityNum == ''}">
<option value='' selected disabled style='display:none;'>请选择</option>
<option *ngFor="let item of listIntegrityNum" [value]="item.id">{{item.name}}
</option>
</select>
<div class="searchbtn">
<button (click)="searchCarList()" style="width: 100%;" mat-flat-button
color="primary">
<mat-icon style="width: 20px;height: 20px;font-size: 20px;">search</mat-icon>搜索
</button>
</div>
</div>
</div>
</div>
<div class="carList">
<table>
<tr>
<td>车辆名称</td>
<td>所属队站</td>
<td>完整度</td>
<td></td>
</tr>
<tr *ngFor="let item of carsList" class="caritem" (click)="openCarDetails(item)">
<td class="td1">{{item.name}}</td>
<td class="td2">{{item.organizationName}}</td>
<td>
<div class="integrity">
<span class="integrityNum">
{{item.integrityScore ? accMul(item.integrityScore.toFixed(3),100,1) : 0}}%
</span>
<div class="integrityColorDiv"
[style]="integrity(item.integrityScore ? (item.integrityScore.toFixed(2) * 100).toFixed(): 0)">
</div>
</div>
</td>
<td>
<mat-icon (click)="deleteCar(item,$event)" class="deleteFile">highlight_off
</mat-icon>
</td>
</tr>
</table>
</div>
<div class="pagingDevice">
<mat-paginator [length]="carDataLength" [pageSize]="16" (page)="carListChagePage($event)">
</mat-paginator>
</div>
</div>
<form class="example-form" (ngSubmit)="saveCarData(form.invalid)" #form="ngForm">
<div class="carTwo" *ngIf="carPageIndex == 1">
<p class="expandP">基本信息 <button type="submit" matRipple>保存车辆信息</button></p>
<div class="carTwoItemBox">
<div>
<span><span style="color: red;">*</span>车辆类别:</span>
<nz-tree-select #carDetailsTypeSelected [nzDropdownClassName]="'carTreeDropdown'"
[nzExpandedKeys]="expandCarTypeKeys" [nzNodes]="carTypeList" nzShowSearch
nzPlaceHolder="请选择" [(ngModel)]="carData.basicInfo.carType"
(ngModelChange)="carDetailsTypeChange($event)" required name="carType"></nz-tree-select>
</div>
<div>
<span><span style="color: red;">*</span>车辆名称:</span>
<input type="text" name="carName" required [(ngModel)]="carData.basicInfo.carName">
</div>
<div>
<span><span style="color: red;">*</span>车牌号:</span>
<input type="text" name="carNumber" required [(ngModel)]="carData.basicInfo.carNumber">
</div>
<div>
<span><span style="color: red;">*</span>所属队站:</span>
<nz-tree-select required [nzDropdownClassName]="'carTreeDropdown'"
[nzExpandedKeys]="expandOrKeys" [nzNodes]="selectOrganizationTree" nzShowSearch
nzPlaceHolder="请选择" [(ngModel)]="carData.basicInfo.carOrganization"
(ngModelChange)="onChange($event)" name="carOrganization">
</nz-tree-select>
</div>
</div>
<p>作战用信息</p>
<div class="carTwoItemBox">
<div>
<span>水泵流量:</span>
<div class="unitDiv">
<input type="text" name="pumpFlow" [(ngModel)]="carData.fightInfo.pumpFlow">
<span class="unit">L/s</span>
</div>
</div>
<div>
<span>消防炮流量:</span>
<div class="unitDiv">
<input type="text" name="fireGunFlow" [(ngModel)]="carData.fightInfo.fireGunFlow">
<span class="unit">L/s</span>
</div>
</div>
<div>
<span>水泵额定压力:</span>
<div class="unitDiv">
<input type="text" name="pumpPressure" [(ngModel)]="carData.fightInfo.pumpPressure">
<span class="unit">Mpa</span>
</div>
</div>
<div>
<span>载水量:</span>
<div class="unitDiv">
<input type="text" name="waterCapacity"
[(ngModel)]="carData.fightInfo.waterCapacity">
<span class="unit"></span>
</div>
</div>
<div>
<span>举高类车辆高度:</span>
<div class="unitDiv">
<input type="text" name="carHeight" [(ngModel)]="carData.fightInfo.carHeight">
<span class="unit"></span>
</div>
</div>
<div>
<span>车辆状态:</span>
<input type="text" name="carState" [(ngModel)]="carData.fightInfo.carState">
</div>
<div>
<span>备注:</span>
<textarea name="remark" [(ngModel)]="carData.fightInfo.remark" cols="30"
rows="10"></textarea>
</div>
<div>
<span>车辆照片:</span>
<div class="uploadbox">
<img class="img"
[src]="carData.fightInfo.carPhoto[0] ? carData.fightInfo.carPhoto[0] : '/assets/images/noImg.png'"
alt="">
<input name="uploadinput" class="uploadinput" type="file"
(change)='uploadCarImg($event)'>
<div class="uploadbtn"><img src="/assets/images/uploadbtn.png" alt=""> 上传照片</div>
</div>
</div>
</div>
<p class="expandP">
<span>
<span style="margin-right: 8px;">车载灭火剂</span>
<mat-slide-toggle color="primary" name="expand1"
[(ngModel)]="carData.carExtinguishant.isExpand">
</mat-slide-toggle>
</span>
<span *ngIf="carData.carExtinguishant.isExpand" class="add"
(click)="addCarDetailsItem('carExtinguishant')">
<img src="/assets/images/add2.png" alt=""> 新增
</span>
</p>
<div class="carTwoItemBox2" *ngIf="carData.carExtinguishant.isExpand">
<div class="item" *ngFor="let item of carData.carExtinguishant.data;let key = index">
<div>
<span><span style="color: red;">*</span>灭火剂类型:</span>
<nz-tree-select required [nzDropdownClassName]="'carTreeDropdown'"
[nzExpandedKeys]="expandOrKeys" [nzNodes]="extinguishantTypeList" nzShowSearch
nzPlaceHolder="请选择" (ngModelChange)="onChange($event)"
[name]="'exextinguishantType' + key" [(ngModel)]="item.extinguishantType">
</nz-tree-select>
</div>
<div>
<span><span style="color: red;">*</span>灭火剂名称:</span>
<input [name]="'exextinguishantName' + key" type="text"
[(ngModel)]="item.extinguishantName">
</div>
<div>
<span><span style="color: red;">*</span>所属队站:</span>
<nz-tree-select required [nzDropdownClassName]="'carTreeDropdown'"
[nzExpandedKeys]="expandOrKeys" [nzNodes]="selectOrganizationTree" nzShowSearch
nzPlaceHolder="请选择" (ngModelChange)="onChange($event)"
[name]="'exextinguishantOr' + key" [(ngModel)]="item.extinguishantOr">
</nz-tree-select>
</div>
<div>
<span>混合比:</span>
<div class="unitDiv">
<input type="text" [name]="'exmixingRatio' + key"
[(ngModel)]="item.mixingRatio">
<span class="unit">%</span>
</div>
</div>
<div>
<span>车载量:</span>
<div class="unitDiv">
<input type="text" [name]="'excapacity' + key" [(ngModel)]="item.capacity">
<span class="unit"></span>
</div>
</div>
<div>
<span>生产厂家:</span>
<input type="text" [name]="'exmanufacturer' + key" [(ngModel)]="item.manufacturer">
</div>
<div class="remark">
<span>备注:</span>
<textarea cols="30" rows="10" [name]="'exremark' + key"
[(ngModel)]="item.remark"></textarea>
<span style="color: red;margin-left: 8px;cursor: pointer;"
(click)="deleteCarDetailsItem(carData.carExtinguishant.data,key)">删除</span>
</div>
</div>
</div>
<p class="expandP">
<span>
<span style="margin-right: 8px;">消防器材</span>
<mat-slide-toggle color="primary" name="expand2"
[(ngModel)]="carData.fireEquipment.isExpand">
</mat-slide-toggle>
</span>
<span *ngIf="carData.fireEquipment.isExpand" class="add"
(click)="addCarDetailsItem('fireEquipment')">
<img src="/assets/images/add2.png" alt=""> 新增
</span>
</p>
<div class="carTwoItemBox3" *ngIf="carData.fireEquipment.isExpand">
<div class="item" *ngFor="let item of carData.fireEquipment.data;let key = index">
<div>
<span><span style="color: red;">*</span>器材类型:</span>
<nz-tree-select required [nzDropdownClassName]="'carTreeDropdown'"
[nzExpandedKeys]="expandOrKeys" [nzNodes]="fireEquipmentTypeList" nzShowSearch
nzPlaceHolder="请选择" (ngModelChange)="onChange($event)"
[name]="'eqequipmentType' + key" [(ngModel)]="item.equipmentType">
</nz-tree-select>
</div>
<div>
<span><span style="color: red;">*</span>器材名称:</span>
<input type="text" [name]="'eqequipmentName' + key"
[(ngModel)]="item.equipmentName">
</div>
<div>
<span><span style="color: red;">*</span>所属队站:</span>
<nz-tree-select required [nzDropdownClassName]="'carTreeDropdown'"
[nzExpandedKeys]="expandOrKeys" [nzNodes]="selectOrganizationTree" nzShowSearch
nzPlaceHolder="请选择" (ngModelChange)="onChange($event)"
[name]="'eqequipmentOr' + key" [(ngModel)]="item.equipmentOr">
</nz-tree-select>
</div>
<div class="width50">
<span>车辆装载数:</span>
<div class="unitDiv">
<input type="text" [name]="'eqcapacity' + key" [(ngModel)]="item.capacity">
<span class="unit"></span>
</div>
</div>
<div class="width50">
<span>生产厂家:</span>
<input type="text" [name]="'eqmanufacturer' + key" [(ngModel)]="item.manufacturer">
</div>
<div class="remark">
<span>备注:</span>
<textarea cols="30" rows="10" [name]="'eqremark' + key"
[(ngModel)]="item.remark"></textarea>
<span style="color: red;margin-left: 8px;cursor: pointer;"
(click)="deleteCarDetailsItem(carData.fireEquipment.data,key)">删除</span>
</div>
</div>
</div>
</div>
</form>
</div> --> </div> -->
<!-- 相关资料 --> <!-- 相关资料 -->
<div class="contant" *ngIf="tabIndex == 3"> <!-- <div class="content" *ngIf="tabIndex == 3">
<div class="fileDivBox" *ngFor="let item of AttachmentArr"> <div class="fileDivBox" *ngFor="let item of AttachmentArr">
<mat-icon class="deleteFile" (click)="deleteFile(item,$event)">highlight_off</mat-icon> <mat-icon class="deleteFile" (click)="deleteFile(item,$event)">highlight_off</mat-icon>
<div class="imgbox"> <div class="imgbox">
<img *ngIf="item.fileName.split('.')[item.fileName.split('.').length-1] == 'png' <img *ngIf="item.fileName.split('.')[item.fileName.split('.').length-1] == 'png'
|| item.fileName.split('.')[item.fileName.split('.').length-1] == 'jpg' || item.fileName.split('.')[item.fileName.split('.').length-1] == 'jpg'
|| item.fileName.split('.')[item.fileName.split('.').length-1] == 'JPG'" || item.fileName.split('.')[item.fileName.split('.').length-1] == 'JPG'" class="thumbnailImg"
class="thumbnailImg" src="/api/Objects/PlanPlatform/{{item.objectName}}" alt=""> src="/api/Objects/PlanPlatform/{{item.objectName}}" alt="">
<img *ngIf="item.fileName.split('.')[item.fileName.split('.').length-1] == 'docx' <img *ngIf="item.fileName.split('.')[item.fileName.split('.').length-1] == 'docx'
|| item.fileName.split('.')[item.fileName.split('.').length-1] == 'doc'" || item.fileName.split('.')[item.fileName.split('.').length-1] == 'doc'" class="thumbnailImg"
class="thumbnailImg" src="/assets/images/word.jpg" alt=""> src="/assets/images/word.jpg" alt="">
<img *ngIf="item.fileName.split('.')[item.fileName.split('.').length-1] == 'pdf'" <img *ngIf="item.fileName.split('.')[item.fileName.split('.').length-1] == 'pdf'"
class="thumbnailImg" src="/assets/images/pdf.jpg" alt=""> class="thumbnailImg" src="/assets/images/pdf.jpg" alt="">
<img *ngIf="item.fileName.split('.')[item.fileName.split('.').length-1] == 'txt'" <img *ngIf="item.fileName.split('.')[item.fileName.split('.').length-1] == 'txt'"
@ -594,7 +929,7 @@
<button (click)="clickFile(item)" class="btn btn1" mat-flat-button color="primary">查看</button> <button (click)="clickFile(item)" class="btn btn1" mat-flat-button color="primary">查看</button>
<button (click)="download (item)" class="btn btn2" mat-flat-button color="primary">下载</button> <button (click)="download (item)" class="btn btn2" mat-flat-button color="primary">下载</button>
</div> </div>
</div> </div> -->
</div> </div>
</div> </div>
</div> </div>

394
src/app/data-collection/fire-force/fire-force.component.scss

@ -1,7 +1,5 @@
.box { .box {
width: 100%; background-color: #f2f4f6;
height: 100%;
background-color: #F2F4F6;
display: flex; display: flex;
box-sizing: border-box; box-sizing: border-box;
padding: 10px; padding: 10px;
@ -36,14 +34,14 @@
span { span {
margin-right: 5px; margin-right: 5px;
} }
select,input{ select,
input {
flex: 1; flex: 1;
background-color: #F2F4F6; background-color: #f2f4f6;
border: 0; border: 0;
border-radius: 5px; border-radius: 5px;
box-sizing: border-box; box-sizing: border-box;
padding: 0 8px; padding: 0 8px;
} }
.gray { .gray {
color: gray; color: gray;
@ -61,7 +59,7 @@
} }
} }
} }
.contantbox{ .contentbox {
flex: 1; flex: 1;
overflow-y: auto; overflow-y: auto;
display: flex; display: flex;
@ -85,13 +83,13 @@
.nodename { .nodename {
flex: 1; flex: 1;
overflow: hidden; overflow: hidden;
text-overflow:ellipsis text-overflow: ellipsis;
} }
.integrity { .integrity {
width: 100px; width: 100px;
height: 16px; height: 16px;
position: relative; position: relative;
background-color: #F2F4F6; background-color: #f2f4f6;
.integrityNum { .integrityNum {
position: absolute; position: absolute;
left: 50%; left: 50%;
@ -157,7 +155,7 @@
height: 58%; height: 58%;
width: 32%; width: 32%;
position: relative; position: relative;
background-color: #F2F4F6; background-color: #f2f4f6;
.integrityNum { .integrityNum {
position: absolute; position: absolute;
left: 50%; left: 50%;
@ -193,7 +191,6 @@
.selectedLi { .selectedLi {
background-color: #b3d3ee; background-color: #b3d3ee;
} }
} }
.paginator { .paginator {
height: 56px; height: 56px;
@ -233,10 +230,10 @@
top: 3px; top: 3px;
width: 30%; width: 30%;
height: 40px; height: 40px;
background: #FFFFFF; background: #ffffff;
display: flex; display: flex;
align-items: center; align-items: center;
cursor: default;; cursor: default;
.inputBox { .inputBox {
width: 100%; width: 100%;
display: flex; display: flex;
@ -249,13 +246,12 @@
border-radius: 6px; border-radius: 6px;
width: 80%; width: 80%;
height: 28px; height: 28px;
background: #F2F2F2; background: #f2f2f2;
margin-left: 8px; margin-left: 8px;
box-sizing: border-box; box-sizing: border-box;
padding-left: 10px; padding-left: 10px;
} }
} }
} }
.hidden { .hidden {
opacity: 0; opacity: 0;
@ -295,10 +291,10 @@
cursor: pointer; cursor: pointer;
color: #000000; color: #000000;
opacity: 0.4; opacity: 0.4;
border-right: 1px solid #F2F4F6; border-right: 1px solid #f2f4f6;
} }
.selectedBtn { .selectedBtn {
background-color: #2196F3; background-color: #2196f3;
color: #fff; color: #fff;
opacity: 1; opacity: 1;
} }
@ -346,7 +342,7 @@
span { span {
display: inline-block; display: inline-block;
cursor: pointer; cursor: pointer;
color: #2196F3; color: #2196f3;
mat-icon { mat-icon {
vertical-align: sub; vertical-align: sub;
font-size: 20px; font-size: 20px;
@ -354,9 +350,6 @@
height: 20px; height: 20px;
} }
} }
span:hover{
// text-decoration: underline;
}
.state { .state {
margin-right: 30px; margin-right: 30px;
} }
@ -366,15 +359,27 @@
.close { .close {
margin-right: 30px; margin-right: 30px;
} }
.goback {
cursor: pointer;
display: flex;
align-items: center;
color: #2196f3;
img {
width: 14px;
height: 14px;
margin-right: 5px;
}
margin-right: 12px;
} }
} }
.contant{ }
.content {
width: 100%; width: 100%;
height: 460px; height: 460px;
overflow-y: auto; overflow-y: auto;
p { p {
color: #2196F3; color: #2196f3;
background-color: #F2F4F6; background-color: #f2f4f6;
height: 33px; height: 33px;
line-height: 33px; line-height: 33px;
box-sizing: border-box; box-sizing: border-box;
@ -384,22 +389,25 @@
span { span {
font-size: 15px; font-size: 15px;
} }
input,select{ input,
select {
height: 30px; height: 30px;
line-height: 30px; line-height: 30px;
box-sizing: border-box; box-sizing: border-box;
padding: 0 12px; padding: 0 9px;
width: 60%; width: 60%;
margin-left: 5px; margin-left: 5px;
border: 1px solid #EBEBEB; border: 1px solid #ebebeb;
border-radius: 5px; border-radius: 5px;
} }
textarea { textarea {
width: 89%; width: 89%;
margin-left: 5px; margin-left: 5px;
height: 85%; height: 85%;
border: 1px solid #EBEBEB; border: 1px solid #ebebeb;
border-radius: 5px; border-radius: 5px;
box-sizing: border-box;
padding: 3px 9px;
} }
.longinput { .longinput {
width: 74%; width: 74%;
@ -407,7 +415,8 @@
.unitDiv { .unitDiv {
width: 60%; width: 60%;
position: relative; position: relative;
input,select{ input,
select {
width: 100%; width: 100%;
box-sizing: border-box; box-sizing: border-box;
padding-right: 50px; padding-right: 50px;
@ -427,7 +436,7 @@
.fileDivBox { .fileDivBox {
position: relative; position: relative;
float: left; float: left;
border: 1px solid #EBEBEB; border: 1px solid #ebebeb;
width: 160px; width: 160px;
height: 162px; height: 162px;
box-sizing: border-box; box-sizing: border-box;
@ -486,7 +495,6 @@
border: 1px solid #000; border: 1px solid #000;
.deleteFile { .deleteFile {
display: block; display: block;
} }
.deleteFile:hover { .deleteFile:hover {
color: red; color: red;
@ -496,6 +504,300 @@
} }
} }
} }
.carOne {
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
//车辆头部
.cartopbox {
max-height: 200px;
box-sizing: border-box;
padding: 10px 22px;
.add {
height: 36px;
line-height: 36px;
display: flex;
justify-content: space-between;
margin-bottom: 5px;
}
.searchbox {
display: flex;
flex-wrap: wrap;
.inputbox {
width: 50%;
height: 40px;
font-size: 14px;
line-height: 40px;
margin: 5px 0;
display: flex;
justify-content: flex-end;
align-items: center;
span {
margin-right: 5px;
overflow: hidden; /*超出部分隐藏*/
white-space: nowrap; /*不换行*/
text-overflow: ellipsis; /*超出部分文字以...显示*/
}
select,
input {
height: 100%;
width: 85%;
background-color: #f2f4f6;
border: 0;
border-radius: 5px;
box-sizing: border-box;
padding: 0 8px;
}
.shortselect {
width: 68.5%;
}
.searchbtn {
margin-left: 20px;
}
.gray {
color: gray;
}
}
}
}
.carList {
flex: 1;
overflow-y: auto;
box-sizing: border-box;
padding: 10px 22px;
border: 1px solid #f2f4f6;
table {
width: 100%;
border-spacing: 0px;
tr {
height: 33px;
width: 100%;
td:nth-child(1) {
width: 46%;
}
td:nth-child(2) {
width: 26%;
}
td:nth-child(3) {
width: 26%;
}
td:nth-child(4) {
width: 2%;
display: flex;
align-items: center;
height: 33px;
}
td {
border: none;
.integrity {
height: 18px;
width: 95%;
position: relative;
background-color: #f2f4f6;
.integrityNum {
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
color: black;
font-size: 13px;
cursor: default;
}
.integrityColorDiv {
height: 100%;
}
}
.deleteFile {
cursor: pointer;
}
}
.td1,
.td2 {
color: #2196f3;
}
}
.caritem:hover {
border: 0px;
cursor: default;
background-color: #d2eafd;
}
}
}
.pagingDevice {
width: 100%;
height: 40px;
}
}
.carTwo {
width: 100%;
height: 100%;
p {
margin-bottom: 10px;
}
.expandP {
display: flex;
justify-content: space-between;
box-sizing: border-box;
padding-right: 18px;
span {
display: flex;
align-items: center;
}
.add {
cursor: pointer;
img {
margin-right: 3px;
}
}
button{
background-color: #2196f3;
height: 32px;
line-height: 32px;
color: white;
border: 0;
border-radius: 4px;
cursor: pointer;
}
}
.carTwoItemBox {
display: flex;
flex-wrap: wrap;
div {
width: 50%;
display: flex;
justify-content: flex-end;
align-items: center;
margin-bottom: 10px;
input,
select {
height: 32px !important;
line-height: 32px;
width: 75% !important;
border: 1px solid #ebebeb;
border-radius: 4px;
margin-left: 0px;
}
textarea {
width: 75.1%;
height: 100px;
border-radius: 4px;
margin-left: 0px;
}
.unitDiv {
position: relative;
width: 75% !important;
margin-bottom: 0px;
input,
select {
width: 100% !important;
}
.unit {
position: absolute;
right: 13px;
top: 4px;
color: #000000;
opacity: 0.4;
}
}
}
.uploadbox {
width: 75%;
display: flex;
justify-content: flex-start;
align-items: flex-end;
margin-bottom: 0px;
position: relative;
.img {
width: 150px;
height: 100px;
}
.uploadbtn,.uploadinput {
width: 110px !important;
height: 30px;
background: #2196f3;
opacity: 1;
border-radius: 4px;
color: white;
display: flex;
justify-content: center;
align-items: center;
font-size: 14px;
position: absolute;
left: 160px;
bottom: 0px;
z-index: 0;
}
.uploadinput{
display: inline-block;
opacity: 0;
z-index: 1;
}
}
}
.carTwoItemBox2,
.carTwoItemBox3 {
.item {
display: flex;
flex-wrap: wrap;
div {
width: 33%;
display: flex;
justify-content: flex-end;
align-items: center;
margin-bottom: 10px;
input,
select {
height: 32px !important;
line-height: 32px;
width: 70% !important;
border: 1px solid #ebebeb;
border-radius: 4px;
margin-left: 0px;
}
textarea {
width: 75.1%;
height: 100px;
border-radius: 4px;
margin-left: 0px;
}
.unitDiv {
position: relative;
width: 70% !important;
margin-bottom: 0px;
input,
select {
width: 100% !important;
}
.unit {
position: absolute;
right: 13px;
top: 4px;
color: #000000;
opacity: 0.4;
}
}
}
.remark {
width: 99%;
textarea {
width: 86.9%;
}
}
.width50 {
width: 50%;
input,
select {
width: 80% !important;
}
.unitDiv {
width: 80% !important;
}
}
}
}
}
.masklayer { .masklayer {
position: absolute; position: absolute;
left: 0; left: 0;
@ -532,22 +834,21 @@
} }
} }
.addWaterBox,.addWaterBox {
.addWaterBox{
width: 260px; width: 260px;
height: 284px; height: 200px;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
.topbox { .topbox {
width: 100%; width: 100%;
height: 40px; height: 40px;
line-height: 40px; line-height: 40px;
background-color: #2196F3; background-color: #2196f3;
text-align: center; text-align: center;
color: #FFFFFF; color: #ffffff;
font-size: 15px; font-size: 15px;
} }
.contant{ .content {
flex: 1; flex: 1;
box-sizing: border-box; box-sizing: border-box;
padding: 0 30px; padding: 0 30px;
@ -559,7 +860,7 @@
height: 36px; height: 36px;
line-height: 36px; line-height: 36px;
text-align: center; text-align: center;
background-color: #F2F4F6; background-color: #f2f4f6;
font-size: 14px; font-size: 14px;
cursor: pointer; cursor: pointer;
border: 1px solid #fff; border: 1px solid #fff;
@ -572,9 +873,9 @@
} }
} }
.selectedDiv { .selectedDiv {
background-color: #2196F3; background-color: #2196f3;
color: #fff; color: #fff;
border: 1px solid #2196F3; border: 1px solid #2196f3;
} }
} }
.btnbox { .btnbox {
@ -583,7 +884,7 @@
box-sizing: border-box; box-sizing: border-box;
padding: 0px 30px; padding: 0px 30px;
display: flex; display: flex;
align-items: flex-start;; align-items: flex-start;
justify-content: space-between; justify-content: space-between;
button { button {
width: 80px; width: 80px;
@ -592,7 +893,9 @@
} }
} }
} }
.addWaterBox{
height: 284px;
}
@media screen and (max-width: 1400px) { @media screen and (max-width: 1400px) {
.box { .box {
@ -601,7 +904,7 @@
} }
.listbox { .listbox {
width: 310px; width: 310px;
.contantbox{ .contentbox {
.waterList { .waterList {
li { li {
.address { .address {
@ -657,7 +960,7 @@
} }
} }
} }
.contant{ .content {
height: 300px; height: 300px;
p { p {
@ -667,7 +970,8 @@
span { span {
font-size: 14px; font-size: 14px;
} }
input,select{ input,
select {
width: 50%; width: 50%;
} }
textarea { textarea {

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

@ -1,6 +1,6 @@
import { FlatTreeControl } from '@angular/cdk/tree'; import { FlatTreeControl } from '@angular/cdk/tree';
import { HttpClient } from '@angular/common/http'; import { HttpClient } from '@angular/common/http';
import { Inject, Renderer2 } from '@angular/core'; import { Inject, Renderer2, ViewChild } from '@angular/core';
import { ElementRef } from '@angular/core'; import { ElementRef } from '@angular/core';
import { Component, OnInit } from '@angular/core'; import { Component, OnInit } from '@angular/core';
import { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog'; import { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
@ -12,7 +12,9 @@ import { Console } from 'console';
import { TreeService } from 'src/app/http-interceptors/tree.service'; import { TreeService } from 'src/app/http-interceptors/tree.service';
import Viewer from 'viewerjs' import Viewer from 'viewerjs'
declare var CryptoJS declare var CryptoJS
import { ObjectsService } from "src/app/services/objects.service";
import { NzTreeSelectComponent } from 'ng-zorro-antd/tree-select'
import { DateAdapter } from '@angular/material/core';
@Component({ @Component({
selector: 'app-fire-force', selector: 'app-fire-force',
templateUrl: './fire-force.component.html', templateUrl: './fire-force.component.html',
@ -20,14 +22,24 @@ declare var CryptoJS
}) })
export class FireForceComponent implements OnInit { export class FireForceComponent implements OnInit {
constructor(private tree: TreeService,public snackBar: MatSnackBar,private http:HttpClient,private elementRef: ElementRef,public renderer2: Renderer2,public dialog: MatDialog) { } @ViewChild('treeCarTypeSelected') treeCarTypeSelected:NzTreeSelectComponent
@ViewChild('carDetailsTypeSelected') carDetailsTypeSelected:NzTreeSelectComponent
constructor(private tree: TreeService, public snackBar: MatSnackBar, private http: HttpClient, private elementRef: ElementRef, public renderer2: Renderer2, public dialog: MatDialog, private objectsSrv: ObjectsService) { }
isCheckedOfSearchDiv: boolean = true//列表过滤滑块 isCheckedOfSearchDiv: boolean = true//列表过滤滑块
slideChange(e) { slideChange(e) {
this.isCheckedOfSearchDiv = e.checked this.isCheckedOfSearchDiv = e.checked
} }
searchForm: any = { searchForm: any = {
name: '', name: '',
integrityNum: '',
}
carSearchForm: any = {
name: '',
organization: '',
carType: '',
integrityNum: '' integrityNum: ''
} }
listIntegrityNum: any[] = [ listIntegrityNum: any[] = [
@ -46,6 +58,662 @@ export class FireForceComponent implements OnInit {
{ id: 3, name: '中队(消防站)', isChecked: false }, { id: 3, name: '中队(消防站)', isChecked: false },
{ id: 4, name: '其他消防队伍', isChecked: false } { id: 4, name: '其他消防队伍', isChecked: false }
] ]
isCarCheckedOfSearchDiv: boolean = true//车辆列表过滤滑块
carslideChange(e) {
this.isCarCheckedOfSearchDiv = e.checked
}
carsList: any = [
]
//分页事件
carListChagePage(e) {
this.carListPageNumber = e.pageIndex + 1
// this.getAllWaterData()
}
carDataLength: any //获取的数据一共多少条
carListPageNumber: any = 1 //当前第几页
getCarList() {
let MinIntegrity = 0
let MaxIntegrity = 1.1
if (this.searchForm.integrityNum == '0') {
MinIntegrity = 0
MaxIntegrity = 0.5
} else if (this.searchForm.integrityNum == '1') {
MinIntegrity = 0.5
MaxIntegrity = 0.6
} else if (this.searchForm.integrityNum == '2') {
MinIntegrity = 0.6
MaxIntegrity = 0.7
} else if (this.searchForm.integrityNum == '3') {
MinIntegrity = 0.7
MaxIntegrity = 0.8
} else if (this.searchForm.integrityNum == '4') {
MinIntegrity = 0.8
MaxIntegrity = 0.9
} else if (this.searchForm.integrityNum == '5') {
MinIntegrity = 0.9
MaxIntegrity = 1.1
} else if (this.searchForm.integrityNum == '-1') {
MinIntegrity = 0
MaxIntegrity = 1.1
}
let params: any = {
Keyword: this.carSearchForm.name || '',
OrganizationId: this.carSearchForm.organization || '',
Category: this.treeCarTypeSelected && this.treeCarTypeSelected.getSelectedNodeList().length!=0 ? this.treeCarTypeSelected.getSelectedNodeList()[0].origin.title : '',
MinIntegrity: MinIntegrity,
MaxIntegrity: MaxIntegrity,
PageSize: 16,
PageNumber: this.carListPageNumber
}
console.log(params)
// console.log(this.treeCarTypeSelected.getSelectedNodeList()[0].origin.title)
this.http.get('/api/FireFightingVehicles', { params: params }).subscribe((data: any) => {
console.log('车辆列表', data)
this.carDataLength = data.totalCount
this.carsList = data.items
})
}
//重置车辆列表
resetCarList() {
this.carSearchForm = {
name: '',
organization: this.selectedFireForceId,
carType: '',
integrityNum: ''
}
this.getCarList()
}
addFireForceCar() {
let data = {
organization: this.selectedFireForceId
}
const dialogRef = this.dialog.open(AddFireForceCar, {
data: data,
id: 'addCar'
});
dialogRef.afterClosed().subscribe(
data => {
this.resetCarList()
this.getCarList()
}
);
}
//删除车辆
deleteCar(item, e) {
e.stopPropagation()
let isDelete = window.confirm(`确定要删除${item.name}车辆吗?`)
if (isDelete) {
this.http.delete(`/api/FireFightingVehicles/${item.id}`).subscribe(data => {
let config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('删除成功', '确定', config);
this.getCarList()
})
}
}
//进入车辆详情页
carPageIndex: number = 0
carDetailsId: string
carDetailsData: any
openCarDetails(item) {
console.log(item)
this.carPageIndex = 1
this.carDetailsId = item.id
this.carDetailsData = item
//消防器材
item.equipmentData ? this.carData.fireEquipment = JSON.parse(item.equipmentData) : this.carData.fireEquipment.data[0].equipmentOr = item.organizationId
//灭火剂
item.extinguishingAgentData ? this.carData.carExtinguishant = JSON.parse(item.extinguishingAgentData) : this.carData.carExtinguishant.data[0].extinguishantOr = item.organizationId
//作战用行动
item.combatInformationData ? this.carData.fightInfo = JSON.parse(item.combatInformationData) : null
this.carData.basicInfo.carName = item.name
this.carData.basicInfo.carOrganization = item.organizationId
this.carData.basicInfo.carNumber = item.registrationNumber
for (let index = 0; index < this.carTypeList.length; index++) {
const element = this.carTypeList[index];
if(element.title == item.category){
this.carData.basicInfo.carType = element.key
return
}
if(element.children && element.children.length != 0){
for (let i = 0; i < element.children.length; i++) {
const item = element.children[i];
if(item.title == item.category){
this.carData.basicInfo.carType = item.key
return
}
}
}
}
}
//返回车辆列表页
goback() {
this.carPageIndex = 0
this.clearCarDetails()
}
//重置车辆详情
clearCarDetails() {
this.carData = {
basicInfo: {
carType: '',//车辆类别
carName: '',
carNumber: '',
carOrganization: ''
},
fightInfo: {
pumpFlow: '',//水泵流量
fireGunFlow: '',//消防炮流量
pumpPressure: '',//水泵额定压力
waterCapacity: '',//载水量
carHeight: '',//车辆高度
carState: '',//车辆状态
remark: '',//备注
carPhoto: []//车辆照片
},
carExtinguishant: {//车载灭火剂
isExpand: null,
data: [
{
extinguishantType: '',//灭火剂类型
extinguishantName: '',//灭火剂名称
extinguishantOr: '',//所属队站
mixingRatio: '',//混合比
capacity: '',//车载量
manufacturer: '',//成产厂家
remark: ''//备注
}
]
},
fireEquipment: {//消防器材
isExpand: null,
data: [
{
equipmentType: '',//器材类别
equipmentName: '',//器材名称
equipmentOr: '',//所属队站
capacity: '',//车载量
manufacturer: '',//成产厂家
remark: ''//备注
}
]
}
}
}
//消防车类型
carTypeList: any = [
{
title: '灭火类消防车',
key: '1',
children: [
{ title: '水罐车', key: '11', isLeaf: true },
{ title: '泡沫车', key: '12', isLeaf: true },
{ title: '高倍数泡沫车', key: '13', isLeaf: true },
{ title: '干粉车', key: '14', isLeaf: true },
{ title: '干粉泡沫联用车', key: '15', isLeaf: true },
{ title: '干粉水联用车', key: '16', isLeaf: true },
{ title: '干粉二氧化碳联用车', key: '17', isLeaf: true },
{ title: '涡喷车', key: '18', isLeaf: true },
{ title: '液氮车', key: '19', isLeaf: true },
{ title: '二氧化碳车', key: '110', isLeaf: true },
{ title: '其他灭火消防车', key: '111', isLeaf: true }
]
},
{
title: '举高类消防车',
key: '2',
children: [
{ title: '高喷车', key: '21', isLeaf: true },
{ title: '曲臂登高车', key: '22', isLeaf: true },
{ title: '直臂登高车', key: '23', isLeaf: true },
{ title: '其他举高消防车', key: '24', isLeaf: true }
]
},
{
title: '专勤类消防车',
key: '3',
children: [
{ title: '抢险救援车', key: '31', isLeaf: true },
{ title: '侦检车', key: '32', isLeaf: true },
{ title: '勘察车', key: '33', isLeaf: true },
{ title: '排烟车', key: '34', isLeaf: true },
{ title: '照明车', key: '35', isLeaf: true },
{ title: '宣传车', key: '36', isLeaf: true },
{ title: '排烟照明车', key: '37', isLeaf: true },
{ title: '通信指挥车', key: '38', isLeaf: true },
{ title: '有毒气体处置车', key: '39', isLeaf: true },
{ title: '防化消防车', key: '310', isLeaf: true },
{ title: '挖掘车', key: '311', isLeaf: true },
{ title: '铲车', key: '312', isLeaf: true },
{ title: '破拆车', key: '313', isLeaf: true },
{ title: '其他专勤消防车', key: '314', isLeaf: true }
]
},
{
title: '后援类消防车',
key: '4',
children: [
{ title: '饮食保障车', key: '41', isLeaf: true },
{ title: '卫勤保障车', key: '42', isLeaf: true },
{ title: '排障车', key: '43', isLeaf: true },
{ title: '装备抢修车', key: '44', isLeaf: true },
{ title: '拖车车', key: '45', isLeaf: true },
{ title: '运兵车', key: '46', isLeaf: true },
{ title: '运输车', key: '47', isLeaf: true },
{ title: '运渣车', key: '48', isLeaf: true },
{ title: '吊车', key: '49', isLeaf: true },
{ title: '移动供气车', key: '410', isLeaf: true },
{ title: '移动供液车', key: '411', isLeaf: true },
{ title: '油料供给车', key: '412', isLeaf: true },
{ title: '远程供水车(水泵)', key: '413', isLeaf: true },
{ title: '远程供水车(水带铺设)', key: '414', isLeaf: true },
{ title: '宿营车', key: '415', isLeaf: true },
{ title: '发电车', key: '416', isLeaf: true },
{ title: '淋浴车', key: '417', isLeaf: true },
{ title: '其他后援消防车', key: '418', isLeaf: true }
]
},
{
title: '机场消防车',
key: '5',
children: [
{ title: '机场快速调动消防车', key: '51', isLeaf: true },
{ title: '机场主力泡沫消防车', key: '52', isLeaf: true },
{ title: '其他机场消防车', key: '53', isLeaf: true },
{ title: '防爆消防车', key: '54', isLeaf: true },
{ title: '轨道消防车(GD)', key: '55', isLeaf: true }
]
},
{
title: '消防摩托车',
key: '6',
children: [
{ title: '灭火消防摩托车', key: '61', isLeaf: true },
{ title: '抢险救援摩托车', key: '62', isLeaf: true },
{ title: '其他消防摩托车', key: '63', isLeaf: true }
]
},
{
title: '联动类车辆',
key: '7',
children: [
{ title: '急救车', key: '71', isLeaf: true },
{ title: '警用指挥车', key: '72', isLeaf: true },
{ title: '警用巡逻车', key: '73', isLeaf: true },
{ title: '警用摩托车', key: '74', isLeaf: true },
{ title: '电力抢修车', key: '75', isLeaf: true },
{ title: '水力抢修车', key: '76', isLeaf: true },
{ title: '燃气抢修车', key: '77', isLeaf: true },
{ title: '特种工程车', key: '78', isLeaf: true },
{ title: '环保监测车', key: '79', isLeaf: true },
{ title: '其他联动车辆', key: '710', isLeaf: true }
]
},
{
title: '其他消防车辆',
key: '8',
isLeaf: true
}
]
//灭火剂分类
extinguishantTypeList: any = [
{
key: '1',
title: '泡沫灭火剂',
children: [
{
key: '1-1',
title: '蛋白类泡沫灭火剂',
isLeaf: true
},
{
key: '1-2',
title: '合成类泡沫灭火剂',
isLeaf: true
},
{
key: '1-3',
title: '压缩空气泡沫灭火剂',
isLeaf: true
},
{
key: '1-4',
title: '化学泡沫灭火剂',
isLeaf: true
},
{
key: '1-5',
title: '其他类泡沫灭火剂',
isLeaf: true
}
]
},
{
key: '2',
title: '水泵灭火剂',
children: [
{
key: '2-1',
title: '强化水',
isLeaf: true
},
{
key: '2-2',
title: '乳化水',
isLeaf: true
},
{
key: '2-3',
title: '润湿水',
isLeaf: true
},
{
key: '2-4',
title: '粘性水',
isLeaf: true
},
{
key: '2-5',
title: 'SD系列水泵灭火剂',
isLeaf: true
},
{
key: '2-6',
title: '微胞囊类水泵灭火剂',
isLeaf: true
},
{
key: '2-7',
title: '其他水泵灭火剂',
isLeaf: true
}
]
},
{
key: '3',
title: '干粉灭火剂',
children: [
{
key: '3-1',
title: '普通干粉灭火剂',
isLeaf: true
},
{
key: '3-2',
title: '超细干粉灭火剂',
isLeaf: true
},
{
key: '3-3',
title: '金属火灾干粉灭火剂',
isLeaf: true
},
{
key: '3-4',
title: '其他干粉灭火剂',
isLeaf: true
}
]
},
{
key: '4',
title: '气体灭火剂',
children: [
{
key: '4-1',
title: '卤代烷烃灭火剂',
isLeaf: true
},
{
key: '4-2',
title: '二氧化碳灭火剂',
isLeaf: true
},
{
key: '4-3',
title: '惰性气体灭火剂',
isLeaf: true
},
{
key: '4-4',
title: '其他气体灭火剂',
isLeaf: true
}
]
},
{
key: '5',
title: '其他灭火剂',
children: [
{
key: '5-1',
title: '液氮', isLeaf: true
},
{
key: '5-2',
title: '火碱',
isLeaf: true
},
{
key: '5-3',
title: '其他灭火剂',
isLeaf: true
}
]
}
]
//消防器材分类
fireEquipmentTypeList: any = [
{
key: '1',
title: '消防人员防护装备',
isLeaf: true
},
{
key: '2',
title: '灭火器材装备',
isLeaf: true
},
{
key: '3',
title: '抢险救援装备',
isLeaf: true
},
{
key: '4',
title: '消防通讯指挥装备',
isLeaf: true
},
{
key: '5',
title: '特种消防装备',
isLeaf: true
},
{
key: '6',
title: '防火检查与火灾调查装备',
isLeaf: true
},
{
key: '7',
title: '其他类消防装备器材',
isLeaf: true
}
]
expandOrKeys = [];
expandCarTypeKeys = [];
onChangeCarType($event: string): void {
console.log(this.treeCarTypeSelected.getSelectedNodeList()[0].origin.title);
}
carDetailsTypeChange($event: string): void {
console.log(this.carDetailsTypeSelected.getSelectedNodeList()[0].origin.title);
}
onChange($event: string): void {
}
searchCarList() {
this.getCarList()
}
//车辆详细信息
carData: any = {
basicInfo: {
carType: '',//车辆类别
carName: '',
carNumber: '',
carOrganization: ''
},
fightInfo: {
pumpFlow: '',//水泵流量
fireGunFlow: '',//消防炮流量
pumpPressure: '',//水泵额定压力
waterCapacity: '',//载水量
carHeight: '',//车辆高度
carState: '',//车辆状态
remark: '',//备注
carPhoto: []//车辆照片
},
carExtinguishant: {//车载灭火剂
isExpand: null,
data: [
{
extinguishantType: '',//灭火剂类型
extinguishantName: '',//灭火剂名称
extinguishantOr: '',//所属队站
mixingRatio: '',//混合比
capacity: '',//车载量
manufacturer: '',//成产厂家
remark: ''//备注
}
]
},
fireEquipment: {//消防器材
isExpand: null,
data: [
{
equipmentType: '',//器材类别
equipmentName: '',//器材名称
equipmentOr: '',//所属队站
capacity: '',//车载量
manufacturer: '',//成产厂家
remark: ''//备注
}
]
}
}
//车辆详情新增按钮
addCarDetailsItem(type) {
if (type == 'carExtinguishant') {
this.carData.carExtinguishant.data.push({
extinguishantType: '',//灭火剂类型
extinguishantName: '',//灭火剂名称
extinguishantOr: this.carDetailsData.organizationId,//所属队站
mixingRatio: '',//混合比
capacity: '',//车载量
manufacturer: '',//成产厂家
remark: ''//备注
})
} else if (type == 'fireEquipment') {
this.carData.fireEquipment.data.push({
equipmentType: '',//器材类别
equipmentName: '',//器材名称
equipmentOr: this.carDetailsData.organizationId,//所属队站
capacity: '',//车载量
manufacturer: '',//成产厂家
remark: ''//备注
})
}
}
deleteCarDetailsItem(arr, index) {
let isDelete = window.confirm('确定要删除该分组吗?')
if (isDelete) {
arr.splice(index, 1)
}
}
//上传车辆照片
uploadCarImg(e) {
// this.file = e.target.files[0] || null //上传的文件
let file = e.target.files[0] || null //获取上传的文件
this.openFileSelect(file, 'FireForce/car/' + this.carDetailsId)
}
//设置文件路径并上传
postFilePath
openFileSelect(file: File, extensionPath: string) {
this.postFilePath = extensionPath;
let fileSize = file.size || null //上传文件的总大小
let shardSize = 5 * 1024 * 1024 //5MB 超过5MB要分块上传
if (fileSize >= shardSize) // 超过5MB要分块上传
{
this.postFileByMul(file);
}
else //普通上传
{
this.postFile(file);
}
}
//上传文件
async postFile(file: File) {
await new Promise((resolve, reject) => {
this.objectsSrv.postFile(this.postFilePath, file).subscribe(data => {
let dataObj = data as any;
let filePath: string = ObjectsService.baseUrl + dataObj.objectName;
this.carData.fightInfo.carPhoto[0] = filePath
resolve('success')
});
})
}
/**
*
* @param file
*/
postFileByMul(file: File) {
this.objectsSrv.postFile_MultipartUpload(this.postFilePath, file).then((value) => {
let dataObj = value as any;
this.carData.fightInfo.carPhoto[0] = dataObj.filePath
});
}
//保存车辆信息
saveCarData(invalid) {
console.log(invalid)
if (invalid) {
let config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('还有必填项未填写!', '确定', config);
} else {
this.carDetailsData.category = this.carDetailsTypeSelected.getSelectedNodeList()[0].origin.title
this.carDetailsData.name = this.carData.basicInfo.carName
this.carDetailsData.registrationNumber = this.carData.basicInfo.carNumber
this.carDetailsData.organizationId = this.carData.basicInfo.carOrganization
this.carDetailsData.combatInformationData = JSON.stringify(this.carData.fightInfo)
this.carDetailsData.equipmentData = JSON.stringify(this.carData.fireEquipment)
this.carDetailsData.extinguishingAgentData = JSON.stringify(this.carData.carExtinguishant)
this.carDetailsData.updatedTime = new Date()
console.log('putbody',this.carDetailsData)
this.http.put(`/api/FireFightingVehicles/${this.carDetailsData.id}`,this.carDetailsData).subscribe(data=>{
let config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('保存成功', '确定', config);
})
}
}
//勾选力量类型checkbox在地图上显示marker //勾选力量类型checkbox在地图上显示marker
checkBoxChange() { checkBoxChange() {
let Levels = [] let Levels = []
@ -197,6 +865,7 @@ export class FireForceComponent implements OnInit {
} }
ngOnInit(): void { ngOnInit(): void {
this.getAllFireForce() this.getAllFireForce()
this.getAllFireForce2()
setTimeout(() => { setTimeout(() => {
this.createMap() this.createMap()
}, 0); }, 0);
@ -236,13 +905,30 @@ export class FireForceComponent implements OnInit {
} }
this.http.get('/api/CustomFireForce', { params: params }).subscribe((data: any) => { this.http.get('/api/CustomFireForce', { params: params }).subscribe((data: any) => {
this.allFireForceList = data this.allFireForceList = data
   this.dataSource.data = this.tree.toTree(data) this.dataSource.data = this.tree.toTree(data)
this.treeControl.expand(this.treeControl.dataNodes[0]); this.treeControl.expand(this.treeControl.dataNodes[0]);
}) })
} }
//获得当前点击队站的组织机构
clickOrganizationTree: any
getAllFireForce2() {
this.http.get('/api/CustomFireForce').subscribe((data: any) => {
this.clickOrganizationTree = data
this.clickOrganizationTree.forEach(item => {
item.children = []
item.title = item.name
item.key = item.id
this.clickOrganizationTree.forEach(element => {
if (element.parentId == item.id) {
item.children.push(element)
}
});
});
})
}
upDateAllFireForce = (): void => { upDateAllFireForce = (): void => {
this.http.get('/api/CustomFireForce').subscribe((data: any) => { this.http.get('/api/CustomFireForce').subscribe((data: any) => {
   this.newdata = this.tree.toTree(data) this.newdata = this.tree.toTree(data)
const nodes = this.treeControl.dataNodes; const nodes = this.treeControl.dataNodes;
const expandNodes = []; const expandNodes = [];
nodes.forEach((item) => { nodes.forEach((item) => {
@ -290,13 +976,21 @@ export class FireForceComponent implements OnInit {
name: '', name: '',
code: '' code: ''
} }
selectOrganizationTree: any = []
selectTreeNode(node) { selectTreeNode(node) {
// console.log(node) console.log(111222,node)
this.isGisTopBox = false this.isGisTopBox = false
if (this.selectedFireForceId != node.id) { if (this.selectedFireForceId != node.id) {
this.clearData() this.clearData()
this.carPageIndex = 0//回到车辆列表页
this.selectedFireForce = node this.selectedFireForce = node
this.selectedFireForceId = node.id this.selectedFireForceId = node.id
this.resetCarList()
this.clearCarDetails()
this.getCarList()
if (node.forceType != 0) {//如果是其他消防力量 if (node.forceType != 0) {//如果是其他消防力量
this.selectedFireForceLevel = 4 this.selectedFireForceLevel = 4
} else { } else {
@ -351,10 +1045,13 @@ export class FireForceComponent implements OnInit {
if (node.forceType != 0) { if (node.forceType != 0) {
this.otherpersonCountData = JSON.parse(data.personCountData) || this.otherpersonCountData this.otherpersonCountData = JSON.parse(data.personCountData) || this.otherpersonCountData
this.othercontactData = JSON.parse(data.contactData) || this.othercontactData this.othercontactData = JSON.parse(data.contactData) || this.othercontactData
console.log(8888,this.othercontactData)
} }
}, err => {
this.isMasklayer = false
alert('获取信息错误!')
}) })
} else { } else {
this.map.setCity('上海市'); this.map.setCity('上海市');
} }
@ -365,6 +1062,14 @@ export class FireForceComponent implements OnInit {
this.superior.code = item.code this.superior.code = item.code
} }
}) })
//找出点击的组织及其下属机构
this.carSearchForm.organization = node.id
this.clickOrganizationTree.forEach(item => {
if (item.id == node.id) {
this.selectOrganizationTree[0] = item
console.log('点击的组织机构', this.selectOrganizationTree)
}
});
} }
} }
//搜索 //搜索
@ -390,8 +1095,7 @@ export class FireForceComponent implements OnInit {
} }
//js乘法 //js乘法
accMul(arg1, arg2, fix) { accMul(arg1, arg2, fix) {
if(!parseInt(fix)==fix) if (!parseInt(fix) == fix) {
{
return; return;
} }
var m = 0, s1 = arg1.toString(), s2 = arg2.toString(); var m = 0, s1 = arg1.toString(), s2 = arg2.toString();
@ -993,7 +1697,8 @@ export class FireForceComponent implements OnInit {
this.http.post(`/api/MultipartUpload/PlanPlatform/${this.objectName}?uploadId=${this.uploadId}&partNumber=${i + 1}`, formData).subscribe((data: any) => { this.http.post(`/api/MultipartUpload/PlanPlatform/${this.objectName}?uploadId=${this.uploadId}&partNumber=${i + 1}`, formData).subscribe((data: any) => {
let msg = { let msg = {
"partNumber": data.partNumber || null, "partNumber": data.partNumber || null,
"eTag": data.eTag || null} "eTag": data.eTag || null
}
resolve(msg) // 调用 promise 内置方法处理成功 resolve(msg) // 调用 promise 内置方法处理成功
}) })
}); });
@ -1002,7 +1707,8 @@ export class FireForceComponent implements OnInit {
this.progressBarValue = this.accMul(Number((i / allSlice).toFixed(2)) * 100, 1, 0) this.progressBarValue = this.accMul(Number((i / allSlice).toFixed(2)) * 100, 1, 0)
if (this.PartNumberETag.length === allSlice) { if (this.PartNumberETag.length === allSlice) {
this.progressBarValue = 100 this.progressBarValue = 100
this.endUploading()} this.endUploading()
}
}//for循环 }//for循环
} }
@ -1081,7 +1787,8 @@ export class FireForceComponent implements OnInit {
let result = await new Promise((result, reject) => { let result = await new Promise((result, reject) => {
this.http.get(`/api/Objects/PlanPlatform/${e.objectName}`, { headers: { 'range': `bytes= ${start}-${end}` }, responseType: 'blob' }).subscribe(data => { this.http.get(`/api/Objects/PlanPlatform/${e.objectName}`, { headers: { 'range': `bytes= ${start}-${end}` }, responseType: 'blob' }).subscribe(data => {
result(data) }) result(data)
})
}) })
allFile.push(result) allFile.push(result)
// this.progressBarValue = Number((i/allSlice).toFixed(2))*100 //文件进度数 // this.progressBarValue = Number((i/allSlice).toFixed(2))*100 //文件进度数
@ -1204,6 +1911,51 @@ export class AddFireForce {
} }
//新增消防车辆弹出框
@Component({
selector: 'addwater',
templateUrl: './addFireForceCar.html',
styleUrls: ['./fire-force.component.scss']
})
export class AddFireForceCar {
constructor(private http: HttpClient, public dialogRef: MatDialogRef<AddFireForceCar>, @Inject(MAT_DIALOG_DATA) public data, public snackBar: MatSnackBar) { }
addList: any = [
{ id: 4, name: '微型消防站' },
{ id: 5, name: '企业专职消防站' },
{ id: 6, name: '义务(志愿)消防站' }
]
selectedFireForceTypeIndex: any = 4
selecteAddType(item, key) {
this.selectedFireForceTypeIndex = item.id
}
ngOnInit(): void {
}
carName: string
onSubmit(value) {
// console.log('organizationId', this.data.organization)
// console.log(value)
let body = {
name: this.carName,
organizationId: this.data.organization
}
this.http.post('/api/FireFightingVehicles', body).subscribe(data => {
let config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('新增成功', '确定', config);
this.dialogRef.close(data)
})
}
}
//查看图片大图和视频 //查看图片大图和视频
@Component({ @Component({
selector: 'viewdetails', selector: 'viewdetails',

4
src/app/export-excel/export-excel.component.ts

@ -17,11 +17,11 @@ export class ExportExcelComponent implements OnInit {
responseType: 'blob' as 'json' responseType: 'blob' as 'json'
}; };
this.http.get('/api/StatisticsAnalysis/ExportToExcel',httpOptions).subscribe((data:any) => { this.http.get('/api/StatisticsAnalysis/ExportToExcel',httpOptions).subscribe((data:any) => {
// // 文件名中有中文 则对文件名进行转码 // 文件名中有中文 则对文件名进行转码
const link = document.createElement('a'); const link = document.createElement('a');
const blob = new Blob([data], {type: 'application/vnd.ms-excel'}); const blob = new Blob([data], {type: 'application/vnd.ms-excel'});
link.setAttribute('href', window.URL.createObjectURL(blob)); link.setAttribute('href', window.URL.createObjectURL(blob));
link.setAttribute('download', '统计信息'+'.xlsx'); link.setAttribute('download', '统计信息'+'.xls');
link.style.visibility = 'hidden'; link.style.visibility = 'hidden';
document.body.appendChild(link); document.body.appendChild(link);
link.click(); link.click();

1
src/app/gis-management/left-working/left-working.component.ts

@ -1,6 +1,5 @@
import { Component, EventEmitter, OnInit, Output, ViewChild } from '@angular/core'; import { Component, EventEmitter, OnInit, Output, ViewChild } from '@angular/core';
import { FormControl } from '@angular/forms'; import { FormControl } from '@angular/forms';
import { id } from 'date-fns/locale';
@Component({ @Component({
selector: 'app-left-working', selector: 'app-left-working',

3
src/app/navigation/navigation.component.ts

@ -8,9 +8,6 @@ import { TreeService } from '../http-interceptors/tree.service'
import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar'; import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar';
import { CacheTokenService } from '../http-interceptors/cache-token.service'//引入服务 import { CacheTokenService } from '../http-interceptors/cache-token.service'//引入服务
import { Router, ActivatedRoute, ParamMap } from '@angular/router' import { Router, ActivatedRoute, ParamMap } from '@angular/router'
import { is } from 'date-fns/locale';
@Component({ @Component({
selector: 'app-navigation', selector: 'app-navigation',

85
src/app/services/objects.service.ts

@ -0,0 +1,85 @@
import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { Observable } from 'rxjs';
@Injectable({
providedIn: 'root'
})
export class ObjectsService {
static readonly c_apiRoot = "/api/";//普通上传的API根路径
static readonly c_apiRoot_Multipart = "/api/";//分块上传的API根路径
// static testPath = "f1/f2";//测试路径
constructor(private http: HttpClient) { }
//普通上传,单个文件上限5M
static baseUrl = ObjectsService.c_apiRoot + 'Objects/PlanPlatform/';
postFile(extensionPath: string, file: File): Observable<Object> {
let formData = new FormData()
formData.append("file", file, file.name)
let data = { keepOriginalName: 'true' }
return this.http.post(ObjectsService.baseUrl + extensionPath, formData, { params: data });
}
//分块上传
static baseUrl_MultipartUpload = ObjectsService.c_apiRoot_Multipart + 'NewMultipartUpload/PlanPlatform/';
// {
// "objectName": "string",
// "uploadId": "string"
// }
postFile_MultipartUpload(extensionPath: string, file: File): Promise<Object> {
// let formData = new FormData()
// formData.append("file", file, file.name)
// return this.http.post(ObjectsService.baseUrl + extensionPath, formData);
let data = { keepOriginalName: 'true', filename: file.name }
return new Promise((resolve, reject) => {
this.http.post(ObjectsService.baseUrl_MultipartUpload + extensionPath, {}, { params: data }).subscribe(async (data: any) => { //初始化分段上传
let objectName = data.objectName
let uploadId = data.uploadId
let PartNumberETag = []; //每次返回需要保存的信息
//分块 处理
let fileSize = file.size || null //上传文件的总大小
let shardSize = 5 * 1024 * 1024 //5MB一个分片
let allSlice = Math.ceil(fileSize / shardSize) //总文件/5MB===共分多少段
for (let i = 0; i < allSlice; i++) { //循环分段上传
let start = i * shardSize //切割文件开始位置
let end = Math.min(fileSize, start + shardSize); //切割文件结束位置
let formData = new FormData()
formData.append("file", file.slice(start, end))
//同步写法实现异步调用
let result = await new Promise((resolve, reject) => {
// await 需要后面返回一个 promise 对象
this.http.post(ObjectsService.c_apiRoot_Multipart + `MultipartUpload/PlanPlatform/${objectName}?uploadId=${uploadId}&partNumber=${i + 1}`, formData).subscribe((data: any) => {
let msg = { "partNumber": data.partNumber || null, "eTag": data.eTag || null }
resolve(msg) // 调用 promise 内置方法处理成功
})
});
PartNumberETag.push(result)
if (PartNumberETag.length === allSlice) { //分块上传完成
let data = PartNumberETag
let paramsData = { uploadId: uploadId };
let path = ObjectsService.c_apiRoot_Multipart + 'CompleteMultipartUpload/PlanPlatform/' + objectName;
this.http.post(path, data, { params: paramsData }).subscribe(data => {
let objData: any = new Object();
objData.fileName = file.name;
objData.filePath = (ObjectsService.baseUrl + objectName).replace(file.name, "");
resolve(objData)
})
}
}//for循环
//分块 处理
})
})
}
}

16
src/app/ui/material-bank/addmatlibrary.component.ts

@ -5,9 +5,6 @@ import { HttpClient } from '@angular/common/http';
import {MatDialog, MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog'; import {MatDialog, MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog';
import {FormControl} from '@angular/forms'; import {FormControl} from '@angular/forms';
import { MatSnackBar } from '@angular/material/snack-bar'; import { MatSnackBar } from '@angular/material/snack-bar';
import format from 'date-fns/format';
@Component({ @Component({
selector: 'addmatlibrary', selector: 'addmatlibrary',
@ -33,8 +30,19 @@ import format from 'date-fns/format';
order:number; //order order:number; //order
onSubmit(value){ onSubmit(value){
let newdate = new Date(); let newdate = new Date();
let time = format(newdate, 'yyyy-MM-dd') function getDate(date){
//date是传过来的时间戳,注意需为13位,10位需*1000
//也可以不传,获取的就是当前时间
var time = new Date(date);
var year= time.getFullYear() //年
var month = ("0" + (time.getMonth() + 1)).slice(-2); //月
var day = ("0" + time.getDate()).slice(-2); //日
var mydate = year + "-" + month + "-" + day;
return mydate
}
let time = getDate(newdate)
this.http.post("/api/AssetLibraries",{ this.http.post("/api/AssetLibraries",{
id: "", id: "",
name: value.name, name: value.name,

1
src/app/ui/material-bank/addoriginalcopy.component.ts

@ -4,7 +4,6 @@ import {FlatTreeControl} from '@angular/cdk/tree';
import { HttpClient } from '@angular/common/http'; import { HttpClient } from '@angular/common/http';
import {MatDialog, MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog'; import {MatDialog, MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog';
import {FormControl} from '@angular/forms'; import {FormControl} from '@angular/forms';
import format from 'date-fns/format';
import { TreeService } from '../../http-interceptors/tree.service' import { TreeService } from '../../http-interceptors/tree.service'
import { FileUploader } from 'ng2-file-upload' import { FileUploader } from 'ng2-file-upload'
import { MatSnackBar,MatSnackBarConfig } from '@angular/material/snack-bar'; import { MatSnackBar,MatSnackBarConfig } from '@angular/material/snack-bar';

14
src/app/ui/material-bank/editmatlibrary.component.ts

@ -5,7 +5,7 @@ import { HttpClient } from '@angular/common/http';
import {MatDialog, MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog'; import {MatDialog, MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog';
import {FormControl} from '@angular/forms'; import {FormControl} from '@angular/forms';
import { MatSnackBar } from '@angular/material/snack-bar'; import { MatSnackBar } from '@angular/material/snack-bar';
import format from 'date-fns/format'; // import format from 'date-fns/format';
@Component({ @Component({
selector: 'editmatlibrary', selector: 'editmatlibrary',
templateUrl: './editmatlibrary.component.html', templateUrl: './editmatlibrary.component.html',
@ -26,7 +26,17 @@ import format from 'date-fns/format';
} }
onSubmit(value){ onSubmit(value){
let newdate = new Date(); let newdate = new Date();
let time = format(newdate, 'yyyy-MM-dd') function getDate(date){
//date是传过来的时间戳,注意需为13位,10位需*1000
//也可以不传,获取的就是当前时间
var time = new Date(date);
var year= time.getFullYear() //年
var month = ("0" + (time.getMonth() + 1)).slice(-2); //月
var day = ("0" + time.getDate()).slice(-2); //日
var mydate = year + "-" + month + "-" + day;
return mydate
}
let time = getDate(newdate)
this.http.put(`/api/AssetLibraries/${this.data.material.id}`,{ this.http.put(`/api/AssetLibraries/${this.data.material.id}`,{
id: this.data.material.id, id: this.data.material.id,
name: value.name, name: value.name,

1
src/app/ui/material-bank/editoriginalcopy.component.ts

@ -5,7 +5,6 @@ import { HttpClient } from '@angular/common/http';
import {MatDialog, MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog'; import {MatDialog, MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog';
import {FormControl} from '@angular/forms'; import {FormControl} from '@angular/forms';
import { MatSnackBar,MatSnackBarConfig } from '@angular/material/snack-bar'; import { MatSnackBar,MatSnackBarConfig } from '@angular/material/snack-bar';
import format from 'date-fns/format';
import { TreeService } from '../../http-interceptors/tree.service' import { TreeService } from '../../http-interceptors/tree.service'
import { FileUploader } from 'ng2-file-upload' import { FileUploader } from 'ng2-file-upload'
import { DomSanitizer } from '@angular/platform-browser' import { DomSanitizer } from '@angular/platform-browser'

14
src/app/ui/material-bank/material-bank.component.ts

@ -8,7 +8,7 @@ import { MatTableDataSource } from '@angular/material/table';
import { EditOriginalCopy } from './editoriginalcopy.component' import { EditOriginalCopy } from './editoriginalcopy.component'
import { SelectOriginalCopy } from './selectoriginalcopy.component' import { SelectOriginalCopy } from './selectoriginalcopy.component'
import { MatSnackBar,MatSnackBarConfig } from '@angular/material/snack-bar'; import { MatSnackBar,MatSnackBarConfig } from '@angular/material/snack-bar';
import format from 'date-fns/format'; // import format from 'date-fns/format';
@ -145,7 +145,17 @@ export class MaterialBankComponent implements OnInit {
//禁启用素材库 //禁启用素材库
disabled(){ disabled(){
let newdate = new Date(); let newdate = new Date();
let time = format(newdate, 'yyyy-MM-dd') function getDate(date){
//date是传过来的时间戳,注意需为13位,10位需*1000
//也可以不传,获取的就是当前时间
var time = new Date(date);
var year= time.getFullYear() //年
var month = ("0" + (time.getMonth() + 1)).slice(-2); //月
var day = ("0" + time.getDate()).slice(-2); //日
var mydate = year + "-" + month + "-" + day;
return mydate
}
let time = getDate(newdate)
if(this.material.enabled){ if(this.material.enabled){
this.http.put(`/api/AssetLibraries/${this.material.id}`,{ this.http.put(`/api/AssetLibraries/${this.material.id}`,{
id: this.material.id, id: this.material.id,

1
src/app/ui/material-bank/selectoriginalcopy.component.ts

@ -5,7 +5,6 @@ import { HttpClient } from '@angular/common/http';
import {MatDialog, MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog'; import {MatDialog, MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog';
import {FormControl} from '@angular/forms'; import {FormControl} from '@angular/forms';
import { MatSnackBar } from '@angular/material/snack-bar'; import { MatSnackBar } from '@angular/material/snack-bar';
import format from 'date-fns/format';
@Component({ @Component({
selector: 'selectoriginalcopy', selector: 'selectoriginalcopy',
templateUrl: './selectoriginalcopy.component.html', templateUrl: './selectoriginalcopy.component.html',

62
src/app/ui/role/role.component.ts

@ -3,7 +3,7 @@ import {MatDialog, MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog
import {FormControl} from '@angular/forms'; import {FormControl} from '@angular/forms';
import { HttpClient } from '@angular/common/http'; import { HttpClient } from '@angular/common/http';
import { CacheTokenService } from '../../http-interceptors/cache-token.service' import { CacheTokenService } from '../../http-interceptors/cache-token.service'
import format from 'date-fns/format'; // import format from 'date-fns/format';
import {MatTreeFlatDataSource, MatTreeFlattener} from '@angular/material/tree'; import {MatTreeFlatDataSource, MatTreeFlattener} from '@angular/material/tree';
import {FlatTreeControl} from '@angular/cdk/tree'; import {FlatTreeControl} from '@angular/cdk/tree';
import { TreeService } from '../../http-interceptors/tree.service' import { TreeService } from '../../http-interceptors/tree.service'
@ -51,7 +51,17 @@ export class RoleComponent implements OnInit {
//向上按钮 //向上按钮
up(node){ up(node){
let newdate = new Date(); let newdate = new Date();
let time = format(newdate, 'yyyy-MM-dd') function getDate(date){
//date是传过来的时间戳,注意需为13位,10位需*1000
//也可以不传,获取的就是当前时间
var time = new Date(date);
var year= time.getFullYear() //年
var month = ("0" + (time.getMonth() + 1)).slice(-2); //月
var day = ("0" + time.getDate()).slice(-2); //日
var mydate = year + "-" + month + "-" + day;
return mydate
}
let time = getDate(newdate)
this.http.put(//把上一节点order换成点击的节点 this.http.put(//把上一节点order换成点击的节点
`/api/Roles/${this.dataSource[node.order -1].id}`, `/api/Roles/${this.dataSource[node.order -1].id}`,
{ {
@ -82,7 +92,17 @@ export class RoleComponent implements OnInit {
//向下按钮 //向下按钮
down(node){ down(node){
let newdate = new Date(); let newdate = new Date();
let time = format(newdate, 'yyyy-MM-dd') function getDate(date){
//date是传过来的时间戳,注意需为13位,10位需*1000
//也可以不传,获取的就是当前时间
var time = new Date(date);
var year= time.getFullYear() //年
var month = ("0" + (time.getMonth() + 1)).slice(-2); //月
var day = ("0" + time.getDate()).slice(-2); //日
var mydate = year + "-" + month + "-" + day;
return mydate
}
let time = getDate(newdate)
this.http.put(//把下一节点order换成点击的节点 this.http.put(//把下一节点order换成点击的节点
`/api/Roles/${this.dataSource[node.order + 1].id}`, `/api/Roles/${this.dataSource[node.order + 1].id}`,
{ {
@ -151,7 +171,17 @@ export class RoleComponent implements OnInit {
//启用或禁用按钮 //启用或禁用按钮
open(roledata){ open(roledata){
let newdate = new Date(); let newdate = new Date();
let time = format(newdate, 'yyyy-MM-dd') function getDate(date){
//date是传过来的时间戳,注意需为13位,10位需*1000
//也可以不传,获取的就是当前时间
var time = new Date(date);
var year= time.getFullYear() //年
var month = ("0" + (time.getMonth() + 1)).slice(-2); //月
var day = ("0" + time.getDate()).slice(-2); //日
var mydate = year + "-" + month + "-" + day;
return mydate
}
let time = getDate(newdate)
this.http.put( this.http.put(
`/api/Roles/${roledata['id']}`, `/api/Roles/${roledata['id']}`,
{ {
@ -296,7 +326,17 @@ export class CreateRole {
//提交 //提交
onSubmit(value){ onSubmit(value){
let newdate = new Date(); let newdate = new Date();
let time = format(newdate, 'yyyy-MM-dd') function getDate(date){
//date是传过来的时间戳,注意需为13位,10位需*1000
//也可以不传,获取的就是当前时间
var time = new Date(date);
var year= time.getFullYear() //年
var month = ("0" + (time.getMonth() + 1)).slice(-2); //月
var day = ("0" + time.getDate()).slice(-2); //日
var mydate = year + "-" + month + "-" + day;
return mydate
}
let time = getDate(newdate)
this.http.post( this.http.post(
'/api/Roles', '/api/Roles',
{ {
@ -537,7 +577,17 @@ export class EditRole {
} }
} }
let newdate = new Date(); let newdate = new Date();
let time = format(newdate, 'yyyy-MM-dd') function getDate(date){
//date是传过来的时间戳,注意需为13位,10位需*1000
//也可以不传,获取的就是当前时间
var time = new Date(date);
var year= time.getFullYear() //年
var month = ("0" + (time.getMonth() + 1)).slice(-2); //月
var day = ("0" + time.getDate()).slice(-2); //日
var mydate = year + "-" + month + "-" + day;
return mydate
}
let time = getDate(newdate)
if(this.data['id'] != "0" && this.data['id'] != "1"){ if(this.data['id'] != "0" && this.data['id'] != "1"){
this.http.put( this.http.put(
`/api/Roles/${this.data['id']}`, `/api/Roles/${this.data['id']}`,

3
src/app/ui/unit-information/addgroups.component.ts

@ -5,9 +5,6 @@ import { HttpClient } from '@angular/common/http';
import {MatDialog, MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog'; import {MatDialog, MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog';
import {FormControl} from '@angular/forms'; import {FormControl} from '@angular/forms';
import { MatSnackBar } from '@angular/material/snack-bar'; import { MatSnackBar } from '@angular/material/snack-bar';
import format from 'date-fns/format';
@Component({ @Component({
selector: 'addgroups', selector: 'addgroups',

1
src/app/ui/unit-information/addunitinfo.component.ts

@ -5,7 +5,6 @@ import { HttpClient } from '@angular/common/http';
import {MatDialog, MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog'; import {MatDialog, MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog';
import {FormControl} from '@angular/forms'; import {FormControl} from '@angular/forms';
import { MatSnackBar } from '@angular/material/snack-bar'; import { MatSnackBar } from '@angular/material/snack-bar';
import format from 'date-fns/format';
@Component({ @Component({
selector: 'addunitinfo', selector: 'addunitinfo',
templateUrl: './addunitinfo.component.html', templateUrl: './addunitinfo.component.html',

2
src/app/ui/unit-information/editgroup.component.ts

@ -5,8 +5,6 @@ import { HttpClient } from '@angular/common/http';
import {MatDialog, MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog'; import {MatDialog, MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog';
import {FormControl} from '@angular/forms'; import {FormControl} from '@angular/forms';
import { MatSnackBar } from '@angular/material/snack-bar'; import { MatSnackBar } from '@angular/material/snack-bar';
import format from 'date-fns/format';
@Component({ @Component({

1
src/app/ui/unit-information/editunitinfo.component.ts

@ -5,7 +5,6 @@ import { HttpClient } from '@angular/common/http';
import {MatDialog, MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog'; import {MatDialog, MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog';
import {FormControl} from '@angular/forms'; import {FormControl} from '@angular/forms';
import { MatSnackBar } from '@angular/material/snack-bar'; import { MatSnackBar } from '@angular/material/snack-bar';
import format from 'date-fns/format';
@Component({ @Component({
selector: 'editunitinfo', selector: 'editunitinfo',
templateUrl: './editunitinfo.component.html', templateUrl: './editunitinfo.component.html',

1
src/app/ui/userdata/userdata.component.ts

@ -4,7 +4,6 @@ import {MatTableDataSource} from '@angular/material/table';
import {MatDialog, MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog'; import {MatDialog, MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog';
import {FormControl} from '@angular/forms'; import {FormControl} from '@angular/forms';
import { HttpClient,HttpHeaders } from '@angular/common/http'; import { HttpClient,HttpHeaders } from '@angular/common/http';
import format from 'date-fns/format';
import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar'; import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar';

4
src/app/working-area/model/axLegend.ts

@ -24,10 +24,10 @@ export class AxLegend extends AxShape {
super(assetData, workingArea); super(assetData, workingArea);
this.angle = -this.workingArea.backgroundImage.angle; this.angle = -this.workingArea.backgroundImage.angle;
this.name = this.assetData.Id; this.name = this.assetData.Id;
this.pivot.set(this.assetData.PivotX, this.assetData.PivotY); this.pivot.set(this.assetData.PivotX == undefined ? 0 : this.assetData.PivotX, this.assetData.PivotY == undefined ? 0 : this.assetData.PivotY);
this.x = this.assetData.Point.x; this.x = this.assetData.Point.x;
this.y = this.assetData.Point.y; this.y = this.assetData.Point.y;
this.scale.set(this.assetData.Scale); this.scale.set(this.assetData.Scale == undefined ? 1 : this.assetData.Scale);
this.shapeMap = shapeMap; this.shapeMap = shapeMap;
this.createPoint(); this.createPoint();
this.refresh(); this.refresh();

4
src/app/working-area/working-area.component.ts

@ -16,7 +16,6 @@ import { PropertyInfo } from './model/PropertyInfo';
import { AxPreviewImageShape } from './model/axPreviewImageShape'; import { AxPreviewImageShape } from './model/axPreviewImageShape';
import { AxArrowConnector } from './model/axArrowConnector'; import { AxArrowConnector } from './model/axArrowConnector';
import { AxLegend, Legend } from './model/axLegend'; import { AxLegend, Legend } from './model/axLegend';
import { AxGrid } from './model/axGrid';
import { AxSelection } from './model/axSelection'; import { AxSelection } from './model/axSelection';
import { AxMessageSystem } from './model/axMessageSystem'; import { AxMessageSystem } from './model/axMessageSystem';
import { Grid2D } from './model/grid2D'; import { Grid2D } from './model/grid2D';
@ -24,7 +23,7 @@ import { Viewport } from 'pixi-viewport';
import { EVENT_IMAGE_RESIZE, EVENT_SELECTION_CHANGED } from './model/events'; import { EVENT_IMAGE_RESIZE, EVENT_SELECTION_CHANGED } from './model/events';
import { Dimensioning } from './model/dimensioning'; import { Dimensioning } from './model/dimensioning';
import { Configuration, viewBounds } from './model/configuration'; import { Configuration, viewBounds } from './model/configuration';
import { id } from 'date-fns/locale';
@Component({ @Component({
@ -1099,6 +1098,7 @@ export class WorkingAreaComponent extends EventEmitter implements OnInit, AfterV
imageWidth: number = this.canvasData.selectStorey.imageWidth, imageWidth: number = this.canvasData.selectStorey.imageWidth,
imageHeight: number = this.canvasData.selectStorey.imageHeight, imageHeight: number = this.canvasData.selectStorey.imageHeight,
): Promise<void> { ): Promise<void> {
console.log('当前背景图',imageUrl)
if (imageAngle === undefined || imageAngle === null) { if (imageAngle === undefined || imageAngle === null) {
imageAngle = 0; imageAngle = 0;
} }

BIN
src/assets/images/add2.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 383 B

BIN
src/assets/images/goback.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 426 B

BIN
src/assets/images/uploadbtn.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 423 B

179
src/styles.scss

@ -1,14 +1,14 @@
@import "./app/theme.scss";
@import './app/theme.scss';
@import "./app/ngZorroTree.css"; /* 引入组件样式 */ @import "./app/ngZorroTree.css"; /* 引入组件样式 */
// @import "~ng-zorro-antd/select/style/index.min.css"; /* 引入组件样式 */ // @import "~ng-zorro-antd/style/index.min.css"; /* 引入基本样式 */
@font-face @import "~ng-zorro-antd/tree-select/style/index.min.css"; /* 引入组件样式 */
{ @font-face {
font-family: Regular; font-family: Regular;
src: url('./assets/font/SourceHanSansCN-Regular.otf'), src: url("./assets/font/SourceHanSansCN-Regular.otf");
} }
html,body{ html,
body {
touch-action: none; touch-action: none;
width: 100%; width: 100%;
height: 100%; height: 100%;
@ -17,15 +17,49 @@ html,body{
overflow: hidden; overflow: hidden;
font-family: Regular; font-family: Regular;
textarea { textarea {
font-family: Regular font-family: Regular;
}
user-select:auto!important
} }
ul,ol,dl,li,dt,dd,p,form,input,h1,h2,h3,h4,h5,h6,section,article,aside,header,footer,nav,figure,time,mark,main,canvas{ user-select: auto !important;
}
ul,
ol,
dl,
li,
dt,
dd,
p,
form,
input,
h1,
h2,
h3,
h4,
h5,
h6,
section,
article,
aside,
header,
footer,
nav,
figure,
time,
mark,
main,
canvas {
margin: 0; margin: 0;
padding: 0; padding: 0;
} }
b,strong,i,em,h1,h2,h3,h4,h5,h6{ b,
strong,
i,
em,
h1,
h2,
h3,
h4,
h5,
h6 {
font-weight: 500; font-weight: 500;
font-style: normal; font-style: normal;
} }
@ -36,7 +70,9 @@ a{
text-decoration: none; text-decoration: none;
color: #000; color: #000;
} }
ul,ol,li{ ul,
ol,
li {
list-style: none; list-style: none;
overflow-x: hidden; overflow-x: hidden;
} }
@ -65,7 +101,8 @@ h1{
.example-sidenav .mat-drawer-inner-container { .example-sidenav .mat-drawer-inner-container {
overflow: hidden; overflow: hidden;
} }
table th.mat-header-cell:last-of-type,table td.mat-cell:last-of-type, table th.mat-header-cell:last-of-type,
table td.mat-cell:last-of-type,
table td.mat-footer-cell:last-of-type { table td.mat-footer-cell:last-of-type {
padding-right: 0px; padding-right: 0px;
} }
@ -73,7 +110,8 @@ table td.mat-footer-cell:last-of-type{
height: 100%; height: 100%;
overflow-y: auto; overflow-y: auto;
} }
.mat-content { //可展开面板垂直居中 .mat-content {
//可展开面板垂直居中
align-items: center; align-items: center;
} }
@ -88,11 +126,10 @@ table td.mat-footer-cell:last-of-type{
//x轴滚动条隐藏 //x轴滚动条隐藏
.example-sidenav-content { .example-sidenav-content {
overflow-x: hidden; overflow-y: auto; overflow-x: hidden;
overflow-y: auto;
} }
.mat-tab-body-wrapper { .mat-tab-body-wrapper {
height: 100%; height: 100%;
} }
@ -109,7 +146,13 @@ table td.mat-footer-cell:last-of-type{
} }
} }
//可展开面板按钮颜色 //可展开面板按钮颜色
#gisbasicinfo,#planlist,#allaround,#firefacilities,#keysite,#functionpartition,#realisticpicture{ #gisbasicinfo,
#planlist,
#allaround,
#firefacilities,
#keysite,
#functionpartition,
#realisticpicture {
.mat-expansion-indicator::after { .mat-expansion-indicator::after {
color: #333333; color: #333333;
} }
@ -119,7 +162,8 @@ table td.mat-footer-cell:last-of-type{
color: #fff; color: #fff;
} }
mat-expansion-panel { mat-expansion-panel {
box-shadow: 0 0 black;border: 1px solid #EEF1F5; box-shadow: 0 0 black;
border: 1px solid #eef1f5;
} }
} }
//gis标点弹出框样式 //gis标点弹出框样式
@ -127,8 +171,8 @@ table td.mat-footer-cell:last-of-type{
.btn { .btn {
width: 92px; width: 92px;
height: 36px; height: 36px;
background: #FFFFFF; background: #ffffff;
border: 1px solid #EEF1F5; border: 1px solid #eef1f5;
opacity: 1; opacity: 1;
border-radius: 4px; border-radius: 4px;
margin: 0 5px; margin: 0 5px;
@ -136,7 +180,7 @@ table td.mat-footer-cell:last-of-type{
// font-family: Source Han Sans CN; // font-family: Source Han Sans CN;
font-weight: 400; font-weight: 400;
line-height: 36px; line-height: 36px;
color: #0080FF; color: #0080ff;
opacity: 1; opacity: 1;
cursor: pointer; cursor: pointer;
display: table-cell; //主要是这个属性 display: table-cell; //主要是这个属性
@ -147,14 +191,22 @@ table td.mat-footer-cell:last-of-type{
padding-bottom: 2px; padding-bottom: 2px;
} }
} }
} }
//弹出框样式取消padding //弹出框样式取消padding
#shareDialog,#lookPlanDialog,#openPlanToolDialog,#addWater,#videodialog,#addLinkageForce,#videodialog2,#gisImgDialog{ #shareDialog,
#lookPlanDialog,
#openPlanToolDialog,
#addWater,
#addCar,
#videodialog,
#addLinkageForce,
#videodialog2,
#gisImgDialog {
padding: 0; padding: 0;
} }
#setPosition,#map{ #setPosition,
#map {
.custom-content-marker { .custom-content-marker {
position: relative; position: relative;
width: 29px; width: 29px;
@ -172,9 +224,9 @@ table td.mat-footer-cell:last-of-type{
bottom: -36px; bottom: -36px;
width: 68px; width: 68px;
height: 30px; height: 30px;
background:#FFFFFF; background: #ffffff;
border-radius: 60px; border-radius: 60px;
color: #EBEBEB; color: #ebebeb;
display: flex; display: flex;
justify-content: space-around; justify-content: space-around;
box-sizing: border-box; box-sizing: border-box;
@ -239,15 +291,16 @@ td{
word-break: break-all; word-break: break-all;
} }
@media screen and (max-width: 1400px) { @media screen and (max-width: 1400px) {
.mat-toolbar-row, .mat-toolbar-single-row { .mat-toolbar-row,
.mat-toolbar-single-row {
height: 50px !important; height: 50px !important;
} }
} }
#firefightingdevicelook,#firefightingdevice{ #firefightingdevicelook,
#firefightingdevice {
.expansionheader { .expansionheader {
height: auto !important; height: auto !important;
} }
} }
#planContainer { #planContainer {
.custom-content-marker { .custom-content-marker {
@ -273,7 +326,7 @@ td{
color: #fff; color: #fff;
text-align: center; text-align: center;
line-height: 15px; line-height: 15px;
box-shadow: -1px 1px 1px rgba(10, 10, 10, .2); box-shadow: -1px 1px 1px rgba(10, 10, 10, 0.2);
} }
.custom-content-marker .close-btn:hover { .custom-content-marker .close-btn:hover {
@ -281,7 +334,8 @@ td{
} }
} }
#setUnitPosition,#setUnitPositionLook{ #setUnitPosition,
#setUnitPositionLook {
.custom-content-marker { .custom-content-marker {
position: relative; position: relative;
// border: 1px solid red; // border: 1px solid red;
@ -336,3 +390,62 @@ td{
background: #666; background: #666;
} }
} }
.mat-paginator-container {
min-height: 40px !important;
}
#carcontent {
.cartopbox {
nz-tree-select {
width: 81.4%;
margin-right: 22px;
}
.ant-select-selector {
background-color: #f2f4f6;
height: 40px;
border: none;
border-radius: 5px;
padding-top: 5px;
box-sizing: border-box;
width: 104.7%;
}
input{
height: 40px;
}
}
.carTwoItemBox{
nz-tree-select {
width: 71.6%;
margin-right: 22px;
}
.ant-select-selector {
height: 34px;
border: none;
border-radius: 4px;
border: 1px solid #EBEBEB;
box-sizing: border-box;
padding-top: 1px;
width: 104.9%;
}
}
.carTwoItemBox2,.carTwoItemBox3{
nz-tree-select {
width: 64.3%;
margin-right: 22px;
}
.ant-select-selector {
height: 34px;
border: none;
border-radius: 4px;
border: 1px solid #EBEBEB;
box-sizing: border-box;
padding-top: 1px;
width: 104.9%;
}
}
}
.carTreeDropdown{
max-height: 239px;
}
Loading…
Cancel
Save