陈鹏飞 4 years ago
parent
commit
b951ad5191
  1. 3
      angular.json
  2. 10
      package.json
  3. 5
      src/app/examiner/create-test-score/addPlanTwo.html
  4. 8
      src/app/examiner/create-test-score/create-test-score.component.html
  5. 83
      src/app/examiner/create-test-score/create-test-score.component.ts
  6. 2
      src/app/examiner/create-test-score/lookTreeNode.html
  7. 11
      src/app/ui/collection-tools/collection-tools.component.html
  8. 3
      src/app/ui/collection-tools/collection-tools.component.scss
  9. 60
      src/app/ui/collection-tools/collection-tools.component.ts
  10. 2
      src/app/working-area/model/singlePointIcon.ts
  11. 2
      src/app/working-area/working-area.component.ts

3
angular.json

@ -29,7 +29,8 @@
"src/assets"
],
"styles": [
"src/styles.scss"
"src/styles.scss",
"node_modules/viewerjs/dist/viewer.css"
],
"scripts": [
"node_modules/echarts/dist/echarts.js",

10
package.json

@ -24,6 +24,7 @@
"@angular/router": "~9.0.0",
"@types/cesium": "^1.59.5",
"angular-calendar": "^0.28.2",
"bson-objectid": "^1.3.1",
"cesium": "^1.64.0",
"e-ngx-cesium": "^6.3.2",
"echarts": "^4.6.0",
@ -32,13 +33,12 @@
"ng2-file-upload": "^1.4.0",
"ngx-echarts": "^4.2.2",
"ngx-perfect-scrollbar": "^8.0.0",
"rxjs": "~6.5.4",
"tslib": "^1.10.0",
"viewerjs": "^1.6.2",
"swiper": "^5.3.7",
"pixi-filters": "^3.1.1",
"pixi.js": "^5.3.2",
"bson-objectid": "^1.3.1",
"rxjs": "~6.5.4",
"swiper": "^5.3.7",
"tslib": "^1.10.0",
"viewerjs": "^1.9.0",
"zone.js": "~0.10.2"
},
"devDependencies": {

5
src/app/examiner/create-test-score/addPlanTwo.html

@ -3,7 +3,7 @@
<div class="title">
添加预案
</div>
<div class="tablebox">
<div *ngIf="dataSource.length != 0" class="tablebox">
<table mat-table [dataSource]="dataSource" class="mat-elevation-z8">
<!-- Checkbox Column -->
@ -47,6 +47,9 @@
</table>
</div>
<div *ngIf="dataSource.length == 0">
该单位暂无审核通过的二维预案
</div>
</div>
<div *ngIf="!planType">
<div class="title">

8
src/app/examiner/create-test-score/create-test-score.component.html

@ -49,12 +49,14 @@
基本信息
<!-- <span class="colorspan" style="margin-left: 20px;">{{unit.basicInfoScore ? unit.basicInfoScore : 0}}分</span> -->
<span style="margin-left: 20px;">
总分值: <input class="scoreInput" type="number" (click)="stopPropagation($event)"
总分值: <input onchange="if(!value)value=0" class="scoreInput" type="number" (click)="stopPropagation($event)"
[(ngModel)]="unit.basicInfoScore" (input)="sumScore('基本信息',key)"> 分,
单项
<span style="color: #FF8678;">
{{unit.basicInfoItemScore ? unit.basicInfoItemScore : 0}}
</span>
<span *ngIf="unit.basicInfoSelectedNum">(已选择 {{unit.basicInfoSelectedNum}} 项)</span>
</span>
</mat-panel-title>
</mat-expansion-panel-header>
@ -97,6 +99,7 @@
单项 <span style="color: #FF8678;">
{{unit.aroundItemScore ? unit.aroundItemScore : 0}}
</span>
<span *ngIf="unit.aroundSelectedNum">(已选择 {{unit.aroundSelectedNum}} 项)</span>
</span>
</mat-panel-title>
</mat-expansion-panel-header>
@ -139,6 +142,7 @@
单项 <span style="color: #FF8678;">
{{unit.keySiteItemScore ? unit.keySiteItemScore : 0}}
</span>
<span *ngIf="unit.keySiteSelectedNum">(已选择 {{unit.keySiteSelectedNum}} 项)</span>
</span>
</mat-panel-title>
</mat-expansion-panel-header>
@ -181,6 +185,7 @@
单项 <span style="color: #FF8678;">
{{unit.funDivItemScore ? unit.funDivItemScore : 0}}
</span>
<span *ngIf="unit.funDivSelectedNum">(已选择 {{unit.funDivSelectedNum}} 项)</span>
</span>
</mat-panel-title>
</mat-expansion-panel-header>
@ -223,6 +228,7 @@
单项 <span style="color: #FF8678;">
{{unit.fireFacItemScore ? unit.fireFacItemScore : 0}}
</span>
<span *ngIf="unit.fireFacSelectedNum">(已选择 {{unit.fireFacSelectedNum}} 项)</span>
</span>
</mat-panel-title>
</mat-expansion-panel-header>

83
src/app/examiner/create-test-score/create-test-score.component.ts

@ -127,6 +127,7 @@ export class CreateTestScoreComponent implements OnInit {
buildingsData.name = data[i].name
buildingsData.buildingType = data[i].buildingTypes[0].name
buildingsData[0].buildingBasicGroups.forEach((y,m) => {
let propertyInfosArr = []
let tabledata
if(y.type == 1){//如果是表格类
@ -158,6 +159,28 @@ export class CreateTestScoreComponent implements OnInit {
})
y.tabledata = dest
tabledata = dest
if(y.tabledata[0].propertyName == '罐区'){
if(y.tabledata[1].propertyName != '储罐编号'){
let index
y.tabledata.forEach((element,key) => {
if(element.propertyName == '储罐编号'){
index = key
}
})
y.tabledata[1] = y.tabledata.splice(index, 1, y.tabledata[1])[0];
}
y.tabledata[0].data.forEach((x,key) => {
if(x.propertyValue){
x.key = (Math.random()*10000000).toString(16).substr(0,4)+(new Date()).getTime()+Math.random().toString().substr(2,5)
x.isLeaf = true
x.name = x.propertyValue + '-' + y.tabledata[1].data[key].propertyValue
propertyInfosArr.push(x)
}
})
}else{
y.tabledata[0].data.forEach((x,key) => {
if(x.propertyValue){
x.key = (Math.random()*10000000).toString(16).substr(0,4)+(new Date()).getTime()+Math.random().toString().substr(2,5)
@ -166,6 +189,8 @@ export class CreateTestScoreComponent implements OnInit {
propertyInfosArr.push(x)
}
})
}
}else{
y.propertyInfos.forEach((x,key) => {
if(x.propertyValue){
@ -581,6 +606,7 @@ export class CreateTestScoreComponent implements OnInit {
}else{
this.unitId[key].basicInfoItemScore = 0
}
this.unitId[key].basicInfoSelectedNum = selectedNum.length
}
if(event.node.origin.type == '四周毗邻' || (event.node.parentNode && event.node.parentNode.origin.type == '四周毗邻')){
let selectedNum = []
@ -594,6 +620,7 @@ export class CreateTestScoreComponent implements OnInit {
}else{
this.unitId[key].aroundItemScore = 0
}
this.unitId[key].aroundSelectedNum = selectedNum.length
}
if(event.node.origin.type == '重点部位' || (event.node.parentNode && event.node.parentNode.origin.type == '重点部位')){
let selectedNum = []
@ -607,6 +634,7 @@ export class CreateTestScoreComponent implements OnInit {
}else{
this.unitId[key].keySiteItemScore = 0
}
this.unitId[key].keySiteSelectedNum = selectedNum.length
}
if(event.node.origin.type == '功能分区' || (event.node.parentNode && event.node.parentNode.origin.type == '功能分区')){
let selectedNum = []
@ -620,6 +648,7 @@ export class CreateTestScoreComponent implements OnInit {
}else{
this.unitId[key].funDivItemScore = 0
}
this.unitId[key].funDivSelectedNum = selectedNum.length
}
if(event.node.origin.type == '消防设施' || (event.node.parentNode && event.node.parentNode.origin.type == '消防设施')){
let selectedNum = []
@ -633,6 +662,7 @@ export class CreateTestScoreComponent implements OnInit {
}else{
this.unitId[key].fireFacItemScore = 0
}
this.unitId[key].fireFacSelectedNum = selectedNum.length
}
}
@ -730,6 +760,7 @@ export class CreateTestScoreComponent implements OnInit {
}
});
}
//每条预案分数增加在试卷分数
planItemScore(item){
//计算整个试卷的总分
@ -750,6 +781,7 @@ export class CreateTestScoreComponent implements OnInit {
})
this.examScore = examScore + examScore2
}
//编辑每条预案试卷
edit(item){
const config = new MatSnackBarConfig();
@ -757,6 +789,7 @@ export class CreateTestScoreComponent implements OnInit {
config.duration = 3000
this.snackBar.open('暂不能编辑','确定',config);
}
//删除每条预案试卷
deletePlan(item){
this.unitId[this.selectedUnitIndex].planList.forEach((element,key)=>{
@ -772,7 +805,6 @@ export class CreateTestScoreComponent implements OnInit {
//保存
save(){
let copyDatas = JSON.parse(JSON.stringify(this.unitId))
//循环每个建筑处理数据筛选出选中数据
copyDatas.forEach(item => {
//建筑的基本信息模块处理
@ -1031,9 +1063,7 @@ export class CreateTestScoreComponent implements OnInit {
}) : null
})
//循环每个建筑处理数据
console.log(copyDatas)
//将筛选出来的数据变为服务器提交数据
let paperDataInfo = []
copyDatas.forEach((item,key) =>{
paperDataInfo[key] = {}
@ -1052,18 +1082,47 @@ export class CreateTestScoreComponent implements OnInit {
paperDataInfo[key].facilityScore = item.fireFacScore
})
console.log(paperDataInfo)
// console.log(123456,paperDataInfo)
//判断是否存在总分填写后没有勾选 或者勾选了没有填写总分的情况
paperDataInfo.forEach(element => {
//判断存在总分填写后没有勾选题目
if( (element.basicInfoScore != 0 && JSON.parse(element.basicInfoData).length == 0) ||
(element.adjoinScore != 0 && JSON.parse(element.adjoinData).length == 0) ||
(element.importLocationScore != 0 && JSON.parse(element.importLocationData).length == 0) ||
(element.functionalDivisionScore != 0 && JSON.parse(element.functionalDivisionData).length == 0) ||
(element.facilityScore != 0 && JSON.parse(element.facilityData).length == 0) ){
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('存在填写过总分,但未勾选题目的分组','确定',config);
return
}else
//勾选了题目存在没有填写总分
if(
(element.basicInfoScore == 0 && JSON.parse(element.basicInfoData).length != 0) ||
(element.adjoinScore == 0 && JSON.parse(element.adjoinData).length != 0) ||
(element.importLocationScore == 0 && JSON.parse(element.importLocationData).length != 0) ||
(element.functionalDivisionScore == 0 && JSON.parse(element.functionalDivisionData).length != 0) ||
(element.facilityScore == 0 && JSON.parse(element.facilityData).length != 0) ){
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('存在勾选过题目,但未填写总分的分组','确定',config);
return
}else{
const dialogRef = this.dialog.open(FinishDialog, {
width: '650px',
data: paperDataInfo
});
dialogRef.afterClosed().subscribe(result => {
});
}
})
}
//上一步
goBack(){
window.history.back();
@ -1142,7 +1201,8 @@ export class AddPlanTwoDialog {
companyId:this.data.companyData.companyData.id
}}).subscribe((data:any) => {
data.items.forEach(item => {
item.planType == 1 ? planArr.push(item) : null
//二维预案并且审核通过
(item.planType == 1 && item.auditStatus == 2) ? planArr.push(item) : null
})
this.dataSource = planArr
})
@ -1161,12 +1221,17 @@ export class AddPlanTwoDialog {
sessionStorage.setItem('buildingTypeId',this.data.companyData.companyData.buildingTypes[0].id)
sessionStorage.setItem('companyId',this.data.companyData.companyData.id)
window.open('/canvasTool')
}else{
if(this.dataSource.length == 0){
this.dialogRef.close();
}else{
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('请选择要添加的预案','确定',config);
}
}
}else{//如果选择的是自定义预案

2
src/app/examiner/create-test-score/lookTreeNode.html

@ -14,7 +14,7 @@
<td *ngFor="let item of data.tabledata">{{item.propertyName}}</td>
</tr>
<tr *ngFor="let item of data.tabledata[0].data;let key = index">
<td *ngFor="let i of data.tabledata">{{i.data[key]. propertyValue}}</td>
<td *ngFor="let i of data.tabledata">{{i.data[key]. propertyValue ? i.data[key]. propertyValue : '无'}}</td>
</tr>
</table>

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

@ -38,7 +38,7 @@
<div id="leftDiv" class='functionalDomainLeft publicCss scenarioAssignment' [ngClass]="{'togglePanel': toggleExpandPanel==true}" style="user-select: none;">
<!-- 处置预案 -->
<div class="handlePlan">
<div class="handlePlan" style="display: none;">
<div class="planarGraphHeader" (click)='toggleHandlePlan()'>
<mat-icon *ngIf="toggleHandlePlans">keyboard_arrow_up</mat-icon>
<mat-icon *ngIf="!toggleHandlePlans">keyboard_arrow_down</mat-icon>
@ -67,7 +67,7 @@
<!-- 处置预案 -->
<!-- 素材库 -->
<div id="materialBank">
<div id="materialBank" style="display: none;">
<div class="planarGraphHeader" (click)='toggleMaterial()'>
<mat-icon *ngIf="toggleMaterialBank">keyboard_arrow_up</mat-icon>
<mat-icon *ngIf="!toggleMaterialBank">keyboard_arrow_down</mat-icon>
@ -102,10 +102,11 @@
<label class="overflowText" style="font-weight: 550;">消防设施</label>
</div>
<div [hidden]="!togglePlane">
<!-- 消防列表树 -->
<mat-tree [dataSource]="dataSource" [treeControl]="treeControl" cdkDropList [cdkDropListData]="dataSource">
<mat-tree [dataSource]="dataSource" [treeControl]="treeControl">
<mat-tree-node [ngClass]="{'isLookPattern': !node.isLookPattern}" *matTreeNodeDef="let node;" matTreeNodePadding cdkTreeNodePaddingIndent='26' (click)="clickTreeNode(node)" class="treeNode">
<mat-tree-node *matTreeNodeDef="let node;" matTreeNodePadding cdkTreeNodePaddingIndent='26' (click)="clickTreeNode(node)" class="treeNode">
<button mat-icon-button disabled></button>
<span title="{{node.name}}" [ngClass]="{'treeText': !node.isTemplate}">
{{node.name}}
@ -114,7 +115,7 @@
<span class="isLookCss" (click)="clickLookItem(node)"><mat-icon [ngClass]="{'icongray': node.isLook == false}">visibility</mat-icon></span>
</mat-tree-node>
<mat-tree-node [ngClass]="{'isLookPattern': !node.isLookPattern}" *matTreeNodeDef="let node;when: hasChild" matTreeNodePadding (click)="clickTreeNode(node)"class="treeNode" >
<mat-tree-node *matTreeNodeDef="let node;when: hasChild" matTreeNodePadding (click)="clickTreeNode(node)"class="treeNode" >
<button mat-icon-button
matTreeNodeToggle
[attr.aria-label]="'toggle ' + node.name">

3
src/app/ui/collection-tools/collection-tools.component.scss

@ -1,4 +1,7 @@
@import './panel.scss';
::-webkit-scrollbar {
display: none; /* Chrome Safari */
}
.content {
width: 100%;
height: 100%;

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

@ -1134,15 +1134,15 @@ export class CollectionToolsComponent implements OnInit {
//处理 tree 数据结构
handleTreeData (storeyData) {
//storeyData为当前楼层拥有的消防设施
this.storeyData = storeyData
let data = this.allFireElements //所有消防要素模板
let treeData = [] //tree型 处理完成后的数据
data.forEach(element => {
element.isTemplate = true //添加模板标识
element.isLook = true //添加是否可见标识
element.name!='其他'? element.children = [] : null
element.name != '其他' ? element.children = [] : null
if(storeyData){
for(let key in storeyData.data){
storeyData.data[key].isLookPattern = true
@ -1161,8 +1161,6 @@ export class CollectionToolsComponent implements OnInit {
}
})
}
//
element.children.push(storeyData.data[key])
}
}
@ -1172,20 +1170,53 @@ export class CollectionToolsComponent implements OnInit {
data.forEach(element => {
if (!element.parentId) { treeData.push(element) }
});
this.dataSource.data = treeData
function recursionFilterEmpty(originalList, result) {
      for(let i = 0, length = originalList.length; i < length; i++) {
          const item = originalList[i];
          if (item.PropertyInfos) {
              // 最内层
              result.push(item);
          } else if (item.children && item.children.length) {
              const newChildren = [];
              // 递归调用,底层的真实数据会全部 push  newChildren 
              recursionFilterEmpty(item.children, newChildren);
              if (newChildren.length) {
                  // 替换原始数据
                  item.children = newChildren;
                  // 子项有真实的数据,就保留这一项
                  result.push(item);
              } // 如果没有这一项就会被删除
          }
      }
  }
  
  function filterEmpty(listData) {
      const result = [];
      recursionFilterEmpty(listData, result);
      return result;
  }
console.log(filterEmpty(treeData))
this.dataSource.data = filterEmpty(treeData)
this.treeControl.expandAll()
}
//点击树节点
clickTreeNode(node){
if(this.canvasData.originalcompanyBuildingData.data[node.id]){
this.setAssetsProperty(this.canvasData.originalcompanyBuildingData.data[node.id])
}else if(this.canvasData.originaleveryStoreyData.data[node.id]){
this.setAssetsProperty(this.canvasData.originaleveryStoreyData.data[node.id])
}
//canvas上的素材高亮
// console.log(node)
// canvas上的素材高亮
let iconHighLightArr:any = []
if(node.isTemplate){//如果是模板,则开始向下找
node.children.forEach(item => {
@ -1200,10 +1231,11 @@ export class CollectionToolsComponent implements OnInit {
}else{
iconHighLightArr.push(node.id)
}
// console.log(456,iconHighLightArr)
this.canvas.setHighlight(iconHighLightArr)
}
//点击节点的显示隐藏icon
//点击节点的显示隐藏icon
clickLookItem(node){
//修改真实素材islook属性
@ -1214,9 +1246,16 @@ export class CollectionToolsComponent implements OnInit {
}
//所有消防要素模板变化islook值
if(node.isTemplate && node.name == "其他"){
this.allFireElements.forEach(item=>{
if(item.name == "其他"){
item.isLook = !item.isLook
}
})
}
if(node.isTemplate){
this.allFireElements.forEach(item=>{
if(item.id == node.id || item.name == "其他"){
if(item.id == node.id){
item.isLook = !item.isLook
}
})
@ -1269,7 +1308,10 @@ export class CollectionToolsComponent implements OnInit {
}else{
iconVisibleArr.push(node.id)
}
console.log(1,iconVisibleArr)
console.log(2,node.isLook)
this.canvas.setIconVisible(iconVisibleArr,!node.isLook)
}
//计算 可视区域内宽度, 是否缩放背景图

2
src/app/working-area/model/singlePointIcon.ts

@ -59,7 +59,7 @@ export class SinglePointIcon extends AxShape {
this.image.y = 0;
this.image.width = this.assetData.Width;
this.image.height = this.assetData.Height;
console.log(this.getBounds());
// console.log(this.getBounds());
this.image.alpha = 1;
this.image.anchor.set(0.5);
this.image.interactive = true;

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

@ -482,7 +482,7 @@ export class WorkingAreaComponent extends EventEmitter implements OnInit, AfterV
// const floor = this.canvasData.selectStorey;
// // key=>属性名 data[key]=>属性值
Object.keys(floorData).forEach((key) => {
console.log(floorData[key]);
// console.log(floorData[key]);
switch (floorData[key].InteractiveMode) {
case 0:
const singleIcon = new SinglePointIcon(floorData[key], this);

Loading…
Cancel
Save