import { SelectionModel } from '@angular/cdk/collections'; import { HttpClient } from '@angular/common/http'; import { Component, Inject, OnInit, ViewChild } from '@angular/core'; import { MatDialog, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog'; import { MatTableDataSource } from '@angular/material/table'; import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar'; import { NzDatePickerModule } from 'ng-zorro-antd/date-picker'; import { DisabledTimeFn, DisabledTimePartial } from 'ng-zorro-antd/date-picker'; import getISOWeek from 'date-fns/getISOWeek'; import setHours from 'date-fns/setHours'; import { NzFormatEmitEvent, NzTreeComponent } from 'ng-zorro-antd/tree'; import { Router } from '@angular/router'; @Component({ selector: 'app-create-test-score', templateUrl: './create-test-score.component.html', styleUrls: ['./create-test-score.component.scss'] }) export class CreateTestScoreComponent implements OnInit { constructor(private router:Router,public dialog: MatDialog,private http: HttpClient,public snackBar: MatSnackBar) { } selectedTab:number = 1 //选中的选项卡 selectTab(index){ this.selectedTab = index } ngOnInit(): void { for (let y = 0, length = this.unitId.length; y < length; y++){ let element = this.unitId[y] element.score = 0 element.basicInfoScore = 0 element.basicInfoItemScore = 0 element.basicInfoNodes = [] element.aroundScore = 0 element.aroundItemScore = 0 element.aroundNodes = [] element.keySiteScore = 0 element.keySiteItemScore = 0 element.keySiteNodes = [] element.funDivScore = 0 element.funDivItemScore = 0 element.funDivNodes = [] element.fireFacScore = 0 element.fireFacItemScore = 0 element.fireFacNodes = [] } this.getUnitData().then(()=>{ this.getAround().then(()=>{ this.getKeySite().then(()=>{ this.getFunDiv().then(()=>{ this.getFireFac() }) }) }) }) } //当前选中的单位 selectedUnitIndex = 0 clickUnitName(key){ this.selectedUnitIndex = key } unitId:any = JSON.parse(sessionStorage.getItem('checkedWork')) //获取单位基本信息 async getUnitData(){ let that = this for (let y = 0, length = this.unitId.length; y < length; y++){ let element = this.unitId[y] let result1 = await new Promise((resolve, reject) => { this.http.get(`/api/Companies/${element.id}`).subscribe((data:any)=>{ let unitData = { name: '单位信息', type:'基本信息', expanded: true, key:(Math.random()*10000000).toString(16).substr(0,4)+(new Date()).getTime()+Math.random().toString().substr(2,5), children:[] } data.usci ? unitData.children.push({ name: '统一社会信用代码',key: element.id+'统一社会信用代码',isLeaf:true,value:data.usci }) : null data.buildingTypes[0].name ? unitData.children.push({ name: '单位类型',key: element.id+'单位类型',isLeaf:true,value:data.buildingTypes[0].name }) : null data.contacts ? unitData.children.push({ name: '联系人',key: element.id+'联系人',isLeaf:true,value:data.contacts }) : null data.phone ? unitData.children.push({ name: '联系电话',key: element.id+'联系电话',isLeaf:true,value:data.phone }) : null data.organizationName ? unitData.children.push({ name: '辖区中队',key: element.id+'辖区中队',isLeaf:true,value:data.organizationName }) : null data.address ? unitData.children.push({ name: '单位地址',key: element.id+'单位地址',isLeaf:true,value:data.address }) : null element.basicInfoNodes.push(unitData) resolve(1) }) }).then(async ()=>{ let result2 = await new Promise((resolve, reject) => { var buildingsData:any this.http.get("/api/Buildings",{ params:{ companyId:element.id } }).subscribe(async (data:any)=>{ await getAllBuildingData(data) resolve(2) }) }) }) async function getAllBuildingData(data){ for (let i = 0, length = data.length; i < length; i++){ const result = await new Promise((resolve) =>{ that.http.get("/api/BuildingBasicInfos",{ // 循环请求当前单位建筑每一个建筑的信息保存到数组中 params:{ companyId :element.id, buildingId:data[i].id, buildingType:data[i].buildingTypes[0].id } }).subscribe((buildingsData:any)=>{ 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){//如果是表格类 var map = {}, dest:any = []; for(var i = 0; i < y.propertyInfos.length; i++){ var ai = y.propertyInfos[i]; if(!map[ai.propertyName]){ dest.push({ propertyName: ai.propertyName, data: [ai] }); map[ai.propertyName] = ai; }else{ for(var j = 0; j < dest.length; j++){ var dj = dest[j]; if(dj.propertyName == ai.propertyName){ dj.data.push(ai); break; } } } } //根据行数确定在循环数组中的index dest.forEach(item => { item.data.sort(function(a,b){ return Number(a.tag) - Number(b.tag) }) }) y.tabledata = dest tabledata = dest 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 propertyInfosArr.push(x) } }) }else{ y.propertyInfos.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.propertyName propertyInfosArr.push(x) } }) } if(propertyInfosArr.length != 0){ element.basicInfoNodes.push({ name:y.name != '基本信息' ? buildingsData.name + '-' + y.name : buildingsData.name , type:'基本信息', expanded: true, key:(Math.random()*10000000).toString(16).substr(0,4)+(new Date()).getTime()+Math.random().toString().substr(2,5), children:propertyInfosArr, tabledata:tabledata ? tabledata : null }) element.basicInfoNodes = [...element.basicInfoNodes] } }) resolve(i) }) }) } } } } //获取四周毗邻数据 async getAround(){ let that = this for (let y = 0, length = this.unitId.length; y < length; y++){ let element = this.unitId[y] //获得当前单位的单位毗邻 let id = {companyId:element.id} let result1 = await new Promise((resolve, reject) => { this.http.get('/api/CompanyAdjoins',{params:id}).subscribe((data:any)=>{ data.forEach(item => { item.direction == 0 ? item.title = '东方向' : null item.direction == 1 ? item.title = '西方向' : null item.direction == 2 ? item.title = '南方向' : null item.direction == 3 ? item.title = '北方向' : null item.direction == 4 ? item.title = '东南方向' : null item.direction == 5 ? item.title = '西南方向' : null item.direction == 6 ? item.title = '东北方向' : null item.direction == 7 ? item.title = '西北方向' : null item.isLeaf = true, item.key = item.id }) //如果存在单位毗邻 if(data.length != 0){ this.unitId[y].aroundNodes.push({ name: '单位毗邻', key: (Math.random()*10000000).toString(16).substr(0,4)+(new Date()).getTime()+Math.random().toString().substr(2,5), expanded: true, type:'四周毗邻', children: data }) element.aroundNodes = [...element.aroundNodes] } resolve(1) }) }).then(async ()=>{ //获得当前单位的建筑毗邻 let result2 = await new Promise((resolve, reject) => { this.http.get('/api/Buildings',{params:id}).subscribe(async (data:any)=>{ if (data.length) { await getAllArchitecture(data) resolve(2) } }) }) }) async function getAllArchitecture(buildingsdata){ for (let i = 0, length = buildingsdata.length; i < length; i++){ let id = {buildingId:buildingsdata[i].id} let result = await new Promise((resolve, reject) => { that.http.get('/api/BuildingAdjoins',{params:id}).subscribe((data:any)=>{ data.forEach(item => { item.direction == 0 ? item.title = '东方向' : null item.direction == 1 ? item.title = '西方向' : null item.direction == 2 ? item.title = '南方向' : null item.direction == 3 ? item.title = '北方向' : null item.direction == 4 ? item.title = '东南方向' : null item.direction == 5 ? item.title = '西南方向' : null item.direction == 6 ? item.title = '东北方向' : null item.direction == 7 ? item.title = '西北方向' : null item.isLeaf = true item.key = item.id }) if(data.length != 0){ that.unitId[y].aroundNodes.push({ name: buildingsdata[i].name, key: (Math.random()*10000000).toString(16).substr(0,4)+(new Date()).getTime()+Math.random().toString().substr(2,5), expanded: true, type:'四周毗邻', children: data }) element.aroundNodes = [...element.aroundNodes] } resolve(1) }) }) } } } } //获取重点部位 async getKeySite(){ let that = this for (let y = 0, length = this.unitId.length; y < length; y++){ console.log("xiba") let element = this.unitId[y] //获得单位重点部位 let id = {companyId:element.id} let result1 = await new Promise((resolve, reject) => { this.http.get('/api/CompanyImportantLocations',{params:id}).subscribe((data:any)=>{ //如果存在单位毗邻 let newData = [] data.forEach(item => { item.isLeaf = true item.key = item.id item.name ? newData.push(item) : null }) if(data.length != 0){ this.unitId[y].keySiteNodes.push({ name: '单位重点部位', key: (Math.random()*10000000).toString(16).substr(0,4)+(new Date()).getTime()+Math.random().toString().substr(2,5), expanded: true, type:'重点部位', children: newData }) element.keySiteNodes = [...element.keySiteNodes] } resolve(1) }) }).then(async ()=>{ //获得建筑重点部位 let result2 = await new Promise((resolve, reject) => { this.http.get('/api/Buildings',{params:id}).subscribe(async (data:any)=>{ if (data.length) { await getAllBuildingPositon(data) resolve(2) } }) }) }) //获取当前单位所有建筑重点部位 async function getAllBuildingPositon (buildingsdata) { for (let i = 0, length = buildingsdata.length; i < length; i++){ let id = {buildingId:buildingsdata[i].id} let result = await new Promise((resolve, reject) =>{ that.http.get('/api/BuildingImportantLocations',{params:id}).subscribe((data:any)=>{ let newData = [] data.forEach(item => { item.isLeaf = true item.key = item.id item.name ? newData.push(item) : null }) if(newData.length != 0){ that.unitId[y].keySiteNodes.push({ name: buildingsdata[i].name, key: (Math.random()*10000000).toString(16).substr(0,4)+(new Date()).getTime()+Math.random().toString().substr(2,5), expanded: true, type:'重点部位', children: newData }) element.keySiteNodes = [...element.keySiteNodes] } resolve('2') }) }) } } } } //获取功能分区 async getFunDiv(){ let that = this for (let y = 0, length = this.unitId.length; y < length; y++){ let element = this.unitId[y] let id = {companyId:element.id} //单位功能分区 let result1 = await new Promise((resolve, reject) => { this.http.get('/api/CompanyFunctionalDivisions',{params:id}).subscribe((data:any)=>{ //如果存在单位的单位功能分区 let newData = [] data.forEach(item => { item.isLeaf = true item.key = item.id item.region ? newData.push(item) : null }) if(data.length != 0){ this.unitId[y].funDivNodes.push({ name: '单位功能分区', key: (Math.random()*10000000).toString(16).substr(0,4)+(new Date()).getTime()+Math.random().toString().substr(2,5), expanded: true, type:'功能分区', children: newData }) element.funDivNodes = [...element.funDivNodes] } resolve(1) }) }).then(async ()=>{ //建筑功能分区 let result2 = await new Promise((resolve, reject) => { this.http.get('/api/Buildings',{params:id}).subscribe(async (data:any)=>{ if (data.length) { await getAllBuildingFunDiv(data) resolve(2) } }) }) }) //获取当前单位所有建筑功能分区 async function getAllBuildingFunDiv (buildingsdata) { for (let i = 0, length = buildingsdata.length; i < length; i++){ let id = {buildingId:buildingsdata[i].id} let result = await new Promise((resolve, reject) =>{ that.http.get('/api/BuildingFunctionalDivisions',{params:id}).subscribe((data:any)=>{ let newData = [] data.forEach(item => { item.isLeaf = true item.key = item.id item.region ? newData.push(item) : null }) if(newData.length != 0){ that.unitId[y].funDivNodes.push({ name: buildingsdata[i].name, key: (Math.random()*10000000).toString(16).substr(0,4)+(new Date()).getTime()+Math.random().toString().substr(2,5), expanded: true, type:'功能分区', children: newData }) element.funDivNodes = [...element.funDivNodes] } resolve('2') }) }) } } } } //获取消防设施 getFireFac(){ let that = this this.unitId.forEach((element,index) =>{ let companyId = element.id //获取单位级别消防设施 this.http.get(`/api/Companies/${companyId}`).subscribe((data:any)=>{ if (data.buildingTypes.length) { let newData = {buildingType: data.buildingTypes[0].id,companyId : companyId} this.http.get('/api/CompanyFacilities',{params:newData}).subscribe((data:any)=>{ //获得单位的消防设施 data[0].summary.companyFacilityGroups.forEach(element => { //循环单位内置分组项 element.facilityItems.forEach((elements,index) => { elements.total = element.facilityCount[index] }); }); let newData = [] data[0].summary.companyFacilityGroups.forEach(item => { item.facilityItems.forEach(i => { i.isLeaf = true i.key = (Math.random()*10000000).toString(16).substr(0,4)+(new Date()).getTime()+Math.random().toString().substr(2,5), (i.total && (i.total!= '总数:0' && i.total!= '总数:0')) ? newData.push(i) : null }) }) if(newData.length != 0){ this.unitId[index].fireFacNodes.push({ name: '单位消防设施', key: (Math.random()*10000000).toString(16).substr(0,4)+(new Date()).getTime()+Math.random().toString().substr(2,5), expanded: true, type:'消防设施', children: newData }) element.fireFacNodes = [...element.fireFacNodes] } }) } }) //获取各建筑消防设施 this.http.get('/api/Buildings',{params:{ companyId:companyId }}).subscribe((data:any)=>{ if (data.length != 0) { getAllBuildingFireFac(data) } }) async function getAllBuildingFireFac (buildingsdata) { // console.log('建筑'+index,buildingsdata) for (let i = 0, length = buildingsdata.length; i < length; i++){ let header = {buildingId: buildingsdata[i].id, buildingType: buildingsdata[i].buildingTypes[0].id,companyId:buildingsdata[i].companyId} let result = await new Promise((resolve, reject) =>{ that.http.get('/api/BuildingFacilities',{params:header}).subscribe((data:any)=>{ // console.log(index+'消防设施'+ i,data) data[0].summary.buildingFacilityGroups.forEach(element => { //循环单位内置分组项 element.facilityItems.forEach((elements,index) => { elements.total = element.facilityCount[index] }); }); let newData = [] data[0].summary.buildingFacilityGroups.forEach(item => { item.facilityItems.forEach(i => { i.isLeaf = true i.key = (Math.random()*10000000).toString(16).substr(0,4)+(new Date()).getTime()+Math.random().toString().substr(2,5), (i.total && (i.total!= '总数:0' && i.total!= '总数:0')) ? newData.push(i) : null }) }) if(newData.length != 0){ that.unitId[index].fireFacNodes.push({ name: buildingsdata[i].name, key: buildingsdata[i].id, expanded: true, type:'消防设施', children: newData }) element.fireFacNodes = [...element.fireFacNodes] } resolve('消防设施') }) }) } } }) } //查看树节点 lookTreeNode(node){ const dialogRef = this.dialog.open(LookTreeNodeDialog, { id:'lookTreeNode', data: node.origin }); dialogRef.afterClosed().subscribe(result => { console.log('The dialog was closed'); }); } //阻止input事件冒泡 stopPropagation($event){ $event.stopPropagation() } //模拟预案数据 planDatas:any = [ {name:'5楼电路故障灾情扑救',or:'上海总队',time:'2020-09-24',isOpen:'未公开',level:'总队',score:0}, {name:'6楼电路故障灾情扑救',or:'上海总队',time:'2020-09-24',isOpen:'未公开',level:'总队',score:0}, {name:'7楼电路故障灾情扑救',or:'上海总队',time:'2020-09-24',isOpen:'未公开',level:'总队',score:0} ] defaultCheckedKeys = []; //指定选中复选框的树节点 key值 defaultExpandedKeys = []; //展开指定的树节点 key值 defaultSelectedKeys = []; //指定选中的树节点 key值 examScore:any = 0//整个试卷的总分 //计算分数 calculateScore(key){ //key代表第几个建筑 //计算整个单位的总分 // console.log(this.unitId[key].basicInfoScore) // console.log(this.unitId[key].aroundScore) // console.log(this.unitId[key].keySiteScore) // console.log(this.unitId[key].funDivScore) // console.log(this.unitId[key].fireFacScore) this.unitId[key].score = this.unitId[key].basicInfoScore + this.unitId[key].aroundScore + this.unitId[key].keySiteScore + this.unitId[key].funDivScore + this.unitId[key].fireFacScore //计算整个试卷的总分 let examScore = 0 this.unitId.forEach(element => { examScore += element.score }) let examScore2 = 0 this.unitId.forEach(element => { let x = 0 if(element.planList){ element.planList.forEach(i => { x += i.score }) } examScore2 += Number(x) }) this.examScore = examScore + examScore2 } //tree的选择事件 nzEvent(event: NzFormatEmitEvent,key): void { if(event.node.origin.type == '基本信息' || (event.node.parentNode && event.node.parentNode.origin.type == '基本信息')){ let selectedNum = [] this.unitId[key].basicInfoNodes.forEach(item => { item.children.forEach(i => { i.checked ? selectedNum.push(i) : '' }) }) if(selectedNum.length != 0 ){ this.unitId[key].basicInfoScore ? this.unitId[key].basicInfoItemScore = this.unitId[key].basicInfoScore / selectedNum.length : null }else{ this.unitId[key].basicInfoItemScore = 0 } } if(event.node.origin.type == '四周毗邻' || (event.node.parentNode && event.node.parentNode.origin.type == '四周毗邻')){ let selectedNum = [] this.unitId[key].aroundNodes.forEach(item => { item.children.forEach(i => { i.checked ? selectedNum.push(i) : '' }) }) if(selectedNum.length != 0 ){ this.unitId[key].aroundScore ? this.unitId[key].aroundItemScore = this.unitId[key].aroundScore / selectedNum.length : null }else{ this.unitId[key].aroundItemScore = 0 } } if(event.node.origin.type == '重点部位' || (event.node.parentNode && event.node.parentNode.origin.type == '重点部位')){ let selectedNum = [] this.unitId[key].keySiteNodes.forEach(item => { item.children.forEach(i => { i.checked ? selectedNum.push(i) : '' }) }) if(selectedNum.length != 0 ){ this.unitId[key].keySiteScore ? this.unitId[key].keySiteItemScore = this.unitId[key].keySiteScore / selectedNum.length : null }else{ this.unitId[key].keySiteItemScore = 0 } } if(event.node.origin.type == '功能分区' || (event.node.parentNode && event.node.parentNode.origin.type == '功能分区')){ let selectedNum = [] this.unitId[key].funDivNodes .forEach(item => { item.children.forEach(i => { i.checked ? selectedNum.push(i) : '' }) }) if(selectedNum.length != 0 ){ this.unitId[key].funDivScore ? this.unitId[key].funDivItemScore = this.unitId[key].funDivScore / selectedNum.length : null }else{ this.unitId[key].funDivItemScore = 0 } } if(event.node.origin.type == '消防设施' || (event.node.parentNode && event.node.parentNode.origin.type == '消防设施')){ let selectedNum = [] this.unitId[key].fireFacNodes.forEach(item => { item.children.forEach(i => { i.checked ? selectedNum.push(i) : '' }) }) if(selectedNum.length != 0 ){ this.unitId[key].fireFacScore ? this.unitId[key].fireFacItemScore = this.unitId[key].fireFacScore / selectedNum.length : null }else{ this.unitId[key].fireFacItemScore = 0 } } } //单位各项总分数动态计算 sumScore(type,key){ //key代表第几个建筑 type代表哪个部分 if(type == '基本信息'){ let selectedNum = 0 this.unitId[key].basicInfoNodes.forEach(item => { item.children.forEach(i => { i.checked ? selectedNum++ : '' }) }) if(selectedNum != 0){ this.unitId[key].basicInfoItemScore = this.unitId[key].basicInfoScore / selectedNum }else{ this.unitId[key].basicInfoItemScore = 0 } } if(type == '四周毗邻'){ let selectedNum = 0 this.unitId[key].aroundNodes.forEach(item => { item.children.forEach(i => { i.checked ? selectedNum++ : '' }) }) if(selectedNum != 0){ this.unitId[key].aroundItemScore = this.unitId[key].aroundScore / selectedNum }else{ this.unitId[key].aroundItemScore = 0 } } if(type == '重点部位'){ let selectedNum = 0 this.unitId[key].keySiteNodes.forEach(item => { item.children.forEach(i => { i.checked ? selectedNum++ : '' }) }) if(selectedNum != 0){ this.unitId[key].keySiteItemScore = this.unitId[key].keySiteScore / selectedNum }else{ this.unitId[key].keySiteItemScore = 0 } } if(type == '功能分区'){ let selectedNum = 0 this.unitId[key].funDivNodes.forEach(item => { item.children.forEach(i => { i.checked ? selectedNum++ : '' }) }) if(selectedNum != 0){ this.unitId[key].funDivItemScore = this.unitId[key].funDivScore / selectedNum }else{ this.unitId[key].funDivItemScore = 0 } } if(type == '消防设施'){ let selectedNum = 0 this.unitId[key].fireFacNodes.forEach(item => { item.children.forEach(i => { i.checked ? selectedNum++ : '' }) }) if(selectedNum != 0){ this.unitId[key].fireFacItemScore = this.unitId[key].fireFacScore / selectedNum }else{ this.unitId[key].fireFacItemScore = 0 } } this.calculateScore(key)//更新标题栏分数 } //添加预案 addPlan(){ let companyData = { companyData : this.unitId[this.selectedUnitIndex] } const dialogRef = this.dialog.open(AddPlanDialog, { width: '380px', height: '136px', data: companyData }); dialogRef.afterClosed().subscribe(result => { if(result){ if(this.unitId[this.selectedUnitIndex].planList){ this.unitId[this.selectedUnitIndex].planList.push(result) }else{ this.unitId[this.selectedUnitIndex].planList = [] this.unitId[this.selectedUnitIndex].planList.push(result) } } }); } //每条预案分数增加在试卷分数 planItemScore(item){ //计算整个试卷的总分 console.log(item) let examScore = 0 this.unitId.forEach(element => { examScore += element.score }) let examScore2 = 0 this.unitId.forEach(element => { let x = 0 if(element.planList){ element.planList.forEach(i => { x += i.score }) } examScore2 += Number(x) }) this.examScore = examScore + examScore2 } //保存 save(){ let copyDatas = JSON.parse(JSON.stringify(this.unitId)) //循环每个建筑处理数据筛选出选中数据 copyDatas.forEach(item => { //建筑的基本信息模块处理 item.basicInfoNodes.forEach((i,key) => { //如果顶级节点未选中则需要筛除没有选中的数据 if(!i.checked){ // console.log(i) let newArr = [] i.children.forEach(element => { element.checked ? newArr.push(element) : null }) let discard = []//即将废弃的数组 // newArr.length == 0 ? item.basicInfoNodes.splice(key,1) : i.children = newArr newArr.length == 0 ? discard.push(i) : i.children = newArr item.basicInfoNodes = item.basicInfoNodes.filter(items => { if (!discard.includes(items)) return items; }) } //将children处理成指定形式 if(i.name =='单位信息'){ let newChildren = [] i.children.forEach((element,index) => { let newChildrenItem:any= {} newChildrenItem.name = element.name//题目名称 newChildrenItem.result = element.value//题目答案 newChildrenItem.physicalUnit = element.physicalUnit || ''//计量单位 newChildrenItem.propertyType = 0//输入框类型 newChildren.push(newChildrenItem) }) i.children = newChildren }else if(!i.tabledata){ let newChildren = [] i.children.forEach((element,index) => { let newChildrenItem:any= {} newChildrenItem.name = element.propertyName//题目名称 newChildrenItem.result = element.propertyValue//题目答案 newChildrenItem.physicalUnit = element.physicalUnit || ''//计量单位 newChildrenItem.propertyType = element.propertyType//输入框类型 newChildren.push(newChildrenItem) }) i.children = newChildren }else if(i.tabledata){//如果是表格类 let newChildren = [] i.children.forEach((element,index) => { let newChildrenItem:any= {} newChildrenItem.name = element.propertyValue//题目名称 newChildrenItem.result = element.tag//代表第几行 newChildrenItem.physicalUnit = ''//计量单位 newChildrenItem.propertyType = ''//输入框类型 newChildren.push(newChildrenItem) }) i.children = newChildren i.tabledata.forEach(element => { let newData = [] element.data.forEach(ele => { let newObj:any = {} newObj.name = ele.propertyName//题目名称 newObj.result = ele.propertyValue//代表第几行 newObj.physicalUnit = ele.physicalUnit//计量单位 newObj.propertyType = ele.propertyType//输入框类型 newObj.tag = ele.tag//第几行 newData.push(newObj) }) element.data = newData }) } delete i.selected }) //建筑的四周毗邻模块处理 item.aroundNodes.forEach((i,key) => { //如果顶级节点未选中则需要筛除没有选中的数据 if(!i.checked){ let newArr = [] i.children.forEach(element => { element.checked ? newArr.push(element) : null }) let discard = []//即将废弃的数组 newArr.length == 0 ? discard.push(i) : i.children = newArr item.aroundNodes = item.aroundNodes.filter(items => { if (!discard.includes(items)) return items; }) } let newChildren = [] i.children.forEach((element,index) => { let newChildrenItem:any= {} newChildrenItem.name = element.title//题目名称 newChildrenItem.result = element.name//题目答案 newChildrenItem.physicalUnit = ''//计量单位 newChildrenItem.propertyType = 0//输入框类型 newChildren.push(newChildrenItem) }) i.children = newChildren delete i.selected }) console.log(111,item) //建筑的重点部位模块处理 item.keySiteNodes ? item.keySiteNodes.forEach((i,key) => { i.selected ? i.selected = null : null //如果顶级节点未选中则需要筛除没有选中的数据 if(!i.checked){ let newArr = [] i.children.forEach(element => { element.checked ? newArr.push(element) : null }) let discard = []//即将废弃的数组 newArr.length == 0 ? discard.push(i) : i.children = newArr item.keySiteNodes = item.keySiteNodes.filter(items => { if (!discard.includes(items)) return items; }) } i.tabledata = [{propertyName: "重点部位名称",data:[]}, {propertyName: "重点部位所在位置",data:[]}, {propertyName: "建筑结构",data:[]}, {propertyName: "使用性质",data:[]}, {propertyName: "主要危险性",data:[]}] i.children.forEach(element => { i.tabledata[0].data.push({ name: "重点部位名称", physicalUnit: '', propertyType: 0, result: element.name, tag: "" }) i.tabledata[1].data.push({ name: "重点部位所在位置", physicalUnit: '', propertyType: 0, result: element.position, tag: "" }) i.tabledata[2].data.push({ name: "建筑结构", physicalUnit: '', propertyType: 0, result: element.structure, tag: "" }) i.tabledata[3].data.push({ name: "使用性质", physicalUnit: '', propertyType: 0, result: element.nature, tag: "" }) i.tabledata[4].data.push({ name: "主要危险性", physicalUnit: '', propertyType: 0, result: element.hazards, tag: "" }) }) let newChildren = [] i.children.forEach((element,index) => { let newChildrenItem:any= {} // newChildrenItem.name = element.name//重点部位题目名称 // newChildrenItem.position = element.position//重点部位所在位置 // newChildrenItem.structure = element.structure//重点部位建筑结构 // newChildrenItem.nature = element.nature//重点部位使用性质 // newChildrenItem.hazards = element.hazards//重点部位主要危险性 newChildrenItem.name = element.name//题目名称 newChildrenItem.result = element.position + element.structure + element.nature + element.hazards//题目答案 newChildrenItem.physicalUnit = element.physicalUnit || ''//计量单位 newChildrenItem.propertyType = 0//输入框类型 newChildren.push(newChildrenItem) }) i.children = newChildren delete i.selected }) : null //建筑的功能分区模块处理 item.funDivNodes ? item.funDivNodes.forEach((i,key) => { //如果顶级节点未选中则需要筛除没有选中的数据 if(!i.checked){ let newArr = [] i.children.forEach(element => { element.checked ? newArr.push(element) : null }) let discard = []//即将废弃的数组 newArr.length == 0 ? discard.push(i) : i.children = newArr item.funDivNodes = item.funDivNodes.filter(items => { if (!discard.includes(items)) return items; }) } i.tabledata = [{propertyName: "区域",data:[]}, {propertyName: "面积",data:[]}, {propertyName: "基本情况",data:[]}] i.children.forEach(element => { i.tabledata[0].data.push({ name: "区域", physicalUnit: '', propertyType: 0, result: element.region, tag: "" }) i.tabledata[1].data.push({ name: "面积", physicalUnit: '', propertyType: 0, result: element.area, tag: "" }) i.tabledata[2].data.push({ name: "基本情况", physicalUnit: '', propertyType: 0, result: element.details, tag: "" }) }) let newChildren = [] i.children.forEach((element,index) => { let newChildrenItem:any= {} // newChildrenItem.name = element.region//功能分区题目名称 // newChildrenItem.area = element.area//功能分区面积 // newChildrenItem.details = element.details//功能分区基本情况 newChildrenItem.name = element.region//题目名称 newChildrenItem.result = element.area + element.details//题目答案 newChildrenItem.physicalUnit = element.physicalUnit || ''//计量单位 newChildrenItem.propertyType = 0//输入框类型 newChildren.push(newChildrenItem) }) i.children = newChildren delete i.selected }) : null //建筑的数据核验模块处理 item.fireFacNodes ? item.fireFacNodes.forEach((i,key) => { i.selected ? i.selected = null : null //如果顶级节点未选中则需要筛除没有选中的数据 if(!i.checked){ let newArr = [] i.children.forEach(element => { element.checked ? newArr.push(element) : null }) let discard = []//即将废弃的数组 newArr.length == 0 ? discard.push(i) : i.children = newArr item.fireFacNodes = item.fireFacNodes.filter(items => { if (!discard.includes(items)) return items; }) } let newChildren = [] i.children.forEach((element,index) => { let newChildrenItem:any= {} newChildrenItem.name = element.name//题目名称 newChildrenItem.result = element.total//题目答案 newChildrenItem.physicalUnit = ''//计量单位 newChildrenItem.propertyType = 0//输入框类型 newChildren.push(newChildrenItem) }) i.children = newChildren delete i.selected }) : null }) //循环每个建筑处理数据 console.log(copyDatas) let paperDataInfo = [] copyDatas.forEach((item,key) =>{ paperDataInfo[key] = {} paperDataInfo[key].id = null paperDataInfo[key].paperId = null paperDataInfo[key].companyId = item.id paperDataInfo[key].basicInfoData = item.basicInfoNodes ? JSON.stringify(item.basicInfoNodes) : '[]' paperDataInfo[key].basicInfoScore = item.basicInfoScore paperDataInfo[key].adjoinData = item.aroundNodes ? JSON.stringify(item.aroundNodes) : '[]' paperDataInfo[key].adjoinScore = item.aroundScore paperDataInfo[key].importLocationData = item.keySiteNodes ? JSON.stringify(item.keySiteNodes) : '[]' paperDataInfo[key].importLocationScore = item.keySiteScore paperDataInfo[key].functionalDivisionData = item.funDivNodes ? JSON.stringify(item.funDivNodes) : '[]' paperDataInfo[key].functionalDivisionScore = item.funDivScore paperDataInfo[key].facilityData = item.fireFacNodes ? JSON.stringify(item.fireFacNodes) : '[]' paperDataInfo[key].facilityScore = item.fireFacScore }) console.log(paperDataInfo) const dialogRef = this.dialog.open(FinishDialog, { width: '650px', data: paperDataInfo }); dialogRef.afterClosed().subscribe(result => { }); } //上一步 goBack(){ window.history.back(); } } //添加预案1 @Component({ selector: 'addplan-dialog', templateUrl: 'addPlan.html', styleUrls: ['addPlan.scss'] }) export class AddPlanDialog { constructor(public dialog: MatDialog,public dialogRef: MatDialogRef,@Inject(MAT_DIALOG_DATA) public data: any) {} onNoClick(): void { this.dialogRef.close(); } close(){ this.dialogRef.close(); } //选择想要添加的预案类型 (已存在或者自定义) selectType(type){ let obj = { type:type, companyData:this.data } const dialogRef = this.dialog.open(AddPlanTwoDialog, { id:'addPlanTwo', data: obj }); dialogRef.afterClosed().subscribe(result => { if(result){ console.log(1111111,result) this.dialogRef.close(result); }else{ this.dialogRef.close(); } }); } } //添加预案2 @Component({ selector: 'addplantwo-dialog', templateUrl: 'addPlanTwo.html', styleUrls: ['addPlanTwo.scss'] }) export class AddPlanTwoDialog { constructor(public snackBar: MatSnackBar,private http: HttpClient,public dialog: MatDialog,public dialogRef: MatDialogRef,@Inject(MAT_DIALOG_DATA) public data: any) {} planType:any = this.data.type == 1 ? true : false//显示的预案类型 displayedColumns: string[] = ['select', 'name', 'people', 'time', 'level']; dataSource : any //列表数据 selectedRadioData:any//当前选择的二维预案 customPlanName:any//自定义预案名称 radioChange(e){ this.selectedRadioData = e } ngOnInit(): void { this.get2DPlan() console.log(this.data) } //获取当前公司的二维预案 get2DPlan(){ let planArr = [] this.http.get('/api/PlanComponents',{params:{ companyId:this.data.companyData.companyData.id }}).subscribe((data:any) => { data.items.forEach(item => { item.planType == 1 ? planArr.push(item) : null }) this.dataSource = planArr }) } onNoClick(): void { this.dialogRef.close(); } //确定 confirm(){ if(this.planType){//如果选择的是已存在预案 if(this.selectedRadioData){ this.dialogRef.close(this.selectedRadioData); sessionStorage.setItem('companyName',this.data.companyData.companyData.name) sessionStorage.setItem('planId',this.selectedRadioData.id) sessionStorage.setItem('buildingTypeId',this.data.companyData.companyData.buildingTypes[0].id) sessionStorage.setItem('companyId',this.data.companyData.companyData.id) window.open('/canvasTool') }else{ const config = new MatSnackBarConfig(); config.verticalPosition = 'top'; config.duration = 3000 this.snackBar.open('请选择要添加的预案','确定',config); } }else{//如果选择的是自定义预案 let level = sessionStorage.getItem('level') let body = { id: "", name: this.customPlanName, planType:1, planMode: 2, planLevel:Number(level), url: "", attachmentUrls: null } this.http.post("/api/PlanComponents2D",body,{params:{ companyId : this.data.companyData.companyData.id }}).subscribe((data:any)=>{ // console.log("创建成功") this.dialogRef.close(data); sessionStorage.setItem("planId",data.id); sessionStorage.setItem("companyId",this.data.companyData.companyData.id) sessionStorage.setItem("buildingTypeId",this.data.companyData.companyData.buildingTypes[0].id) sessionStorage.setItem("editable","1") window.open('/canvasTool') }) } } //取消 close(){ this.dialogRef.close(); } } //完成弹窗 @Component({ selector: 'finish-dialog', templateUrl: 'finishDialog.html', styleUrls: ['finishDialog.scss'] }) export class FinishDialog{ constructor(private router:Router,private http: HttpClient,public dialog: MatDialog,public snackBar: MatSnackBar,public dialogRef: MatDialogRef,@Inject(MAT_DIALOG_DATA) public data: any) {} ngOnInit(): void { this.getProfiles() } //获取登录账号的个人资料 Profiles:any getProfiles(){ this.http.get('/api/ExamAccounts/Profiles').subscribe(data => { console.log(data) this.Profiles = data }) } startTime:string//考试开始时间 endTime:string//考试结束时间 examName:string//考试名称 //弹窗确定点击事件 onNoClick(): void { const config = new MatSnackBarConfig(); config.verticalPosition = 'top'; config.duration = 3000 if(this.startTime!=undefined&&this.endTime!=undefined&&this.examName!=undefined){ if(this.startTime>this.endTime){ this.snackBar.open('开始时间不能大于结束时间','确定',config); } else{ //截取字符串,得到日期部分"2009-12-02",用split把字符串分隔成数组 var begin1=this.startTime.substr(0,10).split("-"); var end1=this.endTime.substr(0,10).split("-"); //将拆分的数组重新组合,并实例成化新的日期对象 var date1=new Date(begin1[1] + - + begin1[2] + - + begin1[0]); var date2=new Date(end1[1] + - + end1[2] + - + end1[0]); //得到两个日期之间的差值m,以分钟为单位 var m=Number(Math.abs(Number(date2)-Number(date1))/1000/60); //小时数和分钟数相加得到总的分钟数 var min1=parseInt(this.startTime.substr(11,2))*60+parseInt(this.startTime.substr(14,2)); var min2=parseInt(this.endTime.substr(11,2))*60+parseInt(this.endTime.substr(14,2)); //两个分钟数相减得到时间部分的差值,以分钟为单位 var n=min2-min1; //将日期和时间两个部分计算出来的差值相加,即得到两个时间相减后的分钟数 var minutes=m+n; console.log(this.startTime,this.endTime) let params = { id: null, title: this.examName, duration: minutes, modifiedTime: new Date(), deleted: false, startTime: this.startTime, endTime: this.endTime, organizationId: this.Profiles.organizationId, creatorId: this.Profiles.id, paperDataInfo: this.data } this.http.post('/api/Papers',params).subscribe(data => { this.snackBar.open('创建成功','确定',config); this.dialogRef.close(); sessionStorage.removeItem("checkedWork") this.router.navigate(['/home/createexam-index']) //跳转试卷列表页面 },err => { this.snackBar.open(err,'确定',config); }) } } else{ if(this.startTime==undefined) this.snackBar.open('请输入开始时间','确定',config); else if(this.endTime==undefined) this.snackBar.open('请输入结束时间','确定',config); else if(this.examName==undefined) this.snackBar.open('请输入试卷名称','确定',config); } } //ngzerro组件 timeDefaultValue = setHours(new Date(), 0); disabledDateTime: DisabledTimeFn = () => { var second=[] for(var i=1;i<60;i++){ second.push(i) } return { nzDisabledHours: () => [], nzDisabledMinutes: () => [], nzDisabledSeconds: () => second }; }; onChange(result: Date[]): void { console.log('onChange: ', result); } getWeek(result: Date[]): void { console.log('week: ', result.map(getISOWeek)); } close(){ this.dialogRef.close(); } } //查看答案 @Component({ selector: 'lookTreeNode-dialog', templateUrl: 'lookTreeNode.html', styleUrls: ['lookTreeNode.scss'] }) export class LookTreeNodeDialog { constructor(public dialog: MatDialog,public dialogRef: MatDialogRef,@Inject(MAT_DIALOG_DATA) public data: any) {} ngOnInit(): void { console.log(this.data) } onNoClick(): void { this.dialogRef.close(); } //取消 close(){ this.dialogRef.close(); } }