import { Component, OnInit, ViewChild, Inject } from '@angular/core'; import { HttpClient, HttpHeaders, HttpErrorResponse } from '@angular/common/http' import { MatTreeFlatDataSource, MatTreeFlattener } from '@angular/material/tree'; import { MatPaginator } from '@angular/material/paginator'; import { FlatTreeControl } from '@angular/cdk/tree'; import { FormControl } from '@angular/forms'; import { Router, ActivatedRoute } from '@angular/router' import { PageEvent } from '@angular/material/paginator'; import { MatDialogRef, MatDialog, MAT_DIALOG_DATA } from '@angular/material/dialog'; import { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar'; import { TreeService } from '../../http-interceptors/tree.service' import { FormBuilder, FormGroup, Validators } from '@angular/forms'; import { async } from '@angular/core/testing'; import { Viewer } from 'photo-sphere-viewer'; import { STEPPER_GLOBAL_OPTIONS } from '@angular/cdk/stepper'; import Swiper from 'swiper'; import { resolve } from 'dns'; declare var CryptoJS @Component({ selector: 'app-entry-plan-look', templateUrl: './entry-plan-look.component.html', styleUrls: ['./entry-plan-look.component.scss'] }) export class EntryPlanLookComponent implements OnInit { constructor(private http: HttpClient, private router: Router, private route: ActivatedRoute, private tree: TreeService, public dialog: MatDialog, public snackBar: MatSnackBar) { } pageEvent: PageEvent; private _transformer = (node, level: number) => { //初始化tree return { expandable: !!node.children && node.children.length > 0, name: node.name, level: level, id: node.id, parentId: node.parentId, children: node.children }; } treeControl = new FlatTreeControl(node => node.level, node => node.expandable); treeFlattener = new MatTreeFlattener(this._transformer, node => node.level, node => node.expandable, node => node.children); dataSource = new MatTreeFlatDataSource(this.treeControl, this.treeFlattener); myControl = new FormControl(); hasChild = (_: number, node: any) => node.expandable; displayedColumns: string[] = ['planname', 'addpeople', 'addtime','planCategory', 'plantype', 'auditstate', 'isopen', 'preparethelevel', 'operation']; tabledataSource: any //分页 @ViewChild(MatPaginator, { static: true }) paginator: MatPaginator; length: any; //共多少条数据 pageSize: any; //每页条数 pageSizeOptions: number[] = [10] //设置每页条数 PageNumber: any = 1; //第几页 unitdata: any = {} unittypeId: any //单位类型id //获取当前单位信息 compantData: any getCompanyData() { let CompanyName = sessionStorage.getItem("companyName") let header = { CompanyName: CompanyName || '', } this.http.get('/api/Plans', { params: header }).subscribe((data: any) => { data.items.forEach(element => { if (element.companyId === this.route.snapshot.queryParams.unitId) { this.compantData = element.company return } }); // console.log(123,this.compantData) this.unitdata.unitname = this.compantData.name this.unitdata.organizationName = this.compantData.organizationName this.unitdata.unittype = this.compantData.buildingTypes[0].name this.unitdata.unitaddress = this.compantData.address this.unittypeId = this.compantData.buildingTypes[0].id }) } //跳转单位信息 lookUnitData() { sessionStorage.setItem("editable", "0") sessionStorage.setItem("companyName", this.route.snapshot.queryParams.unitName) sessionStorage.setItem("companyId", this.route.snapshot.queryParams.unitId) // sessionStorage.setItem(element.id,JSON.stringify(element.companyIntegrityScore)) window.open(`/keyUnit/viewunitinfo?id=${this.route.snapshot.queryParams.unitId}&usci=${this.route.snapshot.queryParams.usci}`) } //分页事件 changePage(e) { this.PageNumber = e.pageIndex + 1 this.getAllPlanComponents() } isoperation: any //判断预案录入 和 审核公开预案 区别变量 ngOnInit(): void { this.tabledataSource = [ ] this.getCompanyData() this.isoperation = this.route.snapshot.queryParams.operation this.unitdata.unitname = this.route.snapshot.queryParams.unitName this.unitdata.organizationName = this.route.snapshot.queryParams.orName this.unitdata.unittype = this.route.snapshot.queryParams.unitType this.unitdata.unitaddress = this.route.snapshot.queryParams.unitAdd this.companyId = this.route.snapshot.queryParams.unitId this.unittypeId = this.route.snapshot.queryParams.unitTypeId this.getAllPlanComponents() } //查看预案 lookPlan(e) { if (e.planType == 16 || e.planType == 4 || e.planType == 8) { if (e.planType == 16&&e.attachmentUrls == null){ window.open(`/planManagement/createplanonlinefive?navIsOpen=false&companyId=${this.companyId}&planName=${e.name}&unitName=${this.unitdata.unitname}&planCategory=${e.planCategory}&planId=${e.id}&unitTypeId=${this.compantData.buildingTypes[0].id}&orName=${this.compantData.organizationName}&orId=${this.compantData.organizationId}&pattern=false`) }else{ var index = e.attachmentUrls[0].indexOf("\/") if (e.attachmentUrls[0].substr(0, index) == 'psw') { const dialogRef = this.dialog.open(PsViewer, { width: '1500px', height: '800px', data: e.attachmentUrls[0] }); } else if (e.attachmentUrls[0].substr(e.attachmentUrls[0].length - 3, e.attachmentUrls[0].length) == 'JPG' || e.attachmentUrls[0].substr(e.attachmentUrls[0].length - 3, e.attachmentUrls[0].length) == 'png' || e.attachmentUrls[0].substr(e.attachmentUrls[0].length - 3, e.attachmentUrls[0].length) == 'jpeg' || e.attachmentUrls[0].substr(e.attachmentUrls[0].length - 3, e.attachmentUrls[0].length) == 'jpg') { let data = e const dialogRef = this.dialog.open(ImgDetails, {//调用open方法打开对话框并且携带参数过去 data: data.attachmentUrls, }); dialogRef.afterClosed().subscribe(); } else { let fetchUrl = e.attachmentUrls[0] //console.log(fetchUrl) if (fetchUrl) { let suffix = fetchUrl.split('.')[fetchUrl.split('.').length - 1].toLowerCase() if (suffix == 'docx' || suffix == 'doc') { let arr = fetchUrl.split('.') arr[arr.length - 1] = 'pdf' window.open(`/api/Objects/PlanPlatform/` + arr.join('.')) } else if (suffix == 'pdf') { window.open(`/api/Objects/PlanPlatform/` + fetchUrl) } else { let config = new MatSnackBarConfig(); config.verticalPosition = 'top'; config.duration = 3000 this.snackBar.open('该文件类型暂不支持在线查看', '确定', config); } } } } } if (e.planType == 1) { //如果是在线编辑 let id = e.id sessionStorage.setItem("planId", id) sessionStorage.setItem("companyId", this.companyId) sessionStorage.setItem("buildingTypeId", this.unittypeId) sessionStorage.setItem("editable", "0") sessionStorage.setItem("planName", e.name) let companyId = sessionStorage.getItem("companyId") window.open(`/keyUnit/viewunitinfoplan?id=${companyId}&orName=${this.route.snapshot.queryParams.orName}&orId=${this.route.snapshot.queryParams.orId}`); } if (e.planType == 2) { //如果是跳转网页 if (e.url.indexOf('app') == 0) { window.location.href = e.url } else { sessionStorage.setItem("url", e.url) if ((e.url as string).includes('gis/threeDimensionalHome')) { //三维预案 window.open(`${e.url}?unitId=${this.companyId}&unitName=${this.unitdata.unitname}&editMode=false`) } else { window.open(`/planManagement/webLook`) } } } } //编辑预案 editPlan(e) { const config = new MatSnackBarConfig(); config.verticalPosition = 'top'; config.duration = 3000 let isTrue = confirm('您确定编辑吗,若是公开预案会变成未公开状态') if(isTrue){ if (e.auditStatus == 8) { if (e.planType == 1) { //如果是在线编辑 let id = e.id sessionStorage.setItem("planId", id) sessionStorage.setItem("companyId", this.companyId) sessionStorage.setItem("buildingTypeId", this.unittypeId) sessionStorage.setItem("editable", "1") sessionStorage.setItem("planName", e.name) let companyId = sessionStorage.getItem("companyId") window.open(`/keyUnit/editunitinfo?id=${companyId}&orName=${this.route.snapshot.queryParams.orName}&orId=${this.route.snapshot.queryParams.orId}`); } else if (e.planType == 16) { if (e.attachmentUrls == null) { if(e.planMode==4){ window.open(`/planManagement/createplanonlinefive?navIsOpen=false&companyId=${this.companyId}&planName=${e.name}&unitName=${this.unitdata.unitname}&planCategory=${e.planCategory}&planId=${e.id}&unitTypeId=${this.compantData.buildingTypes[0].id}&orName=${this.compantData.organizationName}&orId=${this.compantData.organizationId}&pattern=true&haveNew=true`) }else{ window.open(`/planManagement/createplanonlinefive?navIsOpen=false&companyId=${this.companyId}&planName=${e.name}&unitName=${this.unitdata.unitname}&planCategory=${e.planCategory}&planId=${e.id}&unitTypeId=${this.compantData.buildingTypes[0].id}&orName=${this.compantData.organizationName}&orId=${this.compantData.organizationId}&pattern=true`) } } else { let body = {}; let resetAudit = true let headers = new HttpHeaders({ 'Content-Type': 'text/json' }); let options = { headers }; this.http.put(`/api/PlanComponents/${e.id}?resetAudit=${resetAudit}`, body, options).subscribe(data => { this.getAllPlanComponents() this.lookPlan(e) }/* ,err => { this.snackBar.open(err,'确定',config); } */) } } else if (e.planType == 2) { //三维预案 const dialogRef = this.dialog.open(ChangeUrl, { //改网址 data: { element: e } }); dialogRef.afterClosed().subscribe( data => { if (data) { const config = new MatSnackBarConfig(); config.verticalPosition = 'top'; config.duration = 3000 this.snackBar.open('修改成功!', '确定', config); this.getAllPlanComponents() } } ); /* if (e.url.indexOf('app') == 0) { window.location.href = e.url } else { sessionStorage.setItem("url", e.url) if ((e.url as string).includes('gis/threeDimensionalHome')) { //三维预案 window.open(`${e.url}?unitId=${this.companyId}&unitName=${this.unitdata.unitname}&editMode=true`) } else { window.open(`/planManagement/webLook`) } } */ } else { this.snackBar.open('只有二维预案和文本预案可以编辑!', '确定', config); } } else { let isTrue = confirm('编辑后审核状态会成为未审核状态,您确定要编辑吗') if (isTrue) { if (e.planType == 1) { //如果是在线编辑 let id = e.id sessionStorage.setItem("planId", id) sessionStorage.setItem("companyId", this.companyId) sessionStorage.setItem("buildingTypeId", this.unittypeId) sessionStorage.setItem("editable", "1") sessionStorage.setItem("planName", e.name) let companyId = sessionStorage.getItem("companyId") window.open(`/keyUnit/editunitinfo?id=${companyId}&orName=${this.route.snapshot.queryParams.orName}&orId=${this.route.snapshot.queryParams.orId}`); } else if (e.planType == 16) { if (e.attachmentUrls == null) { console.log(this.compantData) window.open(`/planManagement/createplanonlinefive?navIsOpen=false&companyId=${this.companyId}&planName=${e.name}&unitName=${this.unitdata.unitname}&planCategory=${e.planCategory}&planId=${e.id}&unitTypeId=${this.compantData.buildingTypes[0].id}&orName=${this.compantData.organizationName}&orId=${this.compantData.organizationId}`) } else { let body = {}; let resetAudit = true let headers = new HttpHeaders({ 'Content-Type': 'text/json' }); let options = { headers }; this.http.put(`/api/PlanComponents/${e.id}?resetAudit=${resetAudit}`, body, options).subscribe(data => { this.getAllPlanComponents() this.lookPlan(e) }/* ,err => { this.snackBar.open(err,'确定',config); } */) } } else if (e.planType == 2) { //三维预案 /* if (e.url.indexOf('app') == 0) { window.location.href = e.url } else { sessionStorage.setItem("url", e.url) if ((e.url as string).includes('gis/threeDimensionalHome')) { //三维预案 window.open(`${e.url}?unitId=${this.companyId}&unitName=${this.unitdata.unitname}&editMode=true`) } else { window.open(`/planManagement/webLook`) } } */ const dialogRef = this.dialog.open(ChangeUrl, { data: { element: e } }); dialogRef.afterClosed().subscribe( data => { if (data) { const config = new MatSnackBarConfig(); config.verticalPosition = 'top'; config.duration = 3000 this.snackBar.open('修改成功!', '确定', config); this.getAllPlanComponents() } } ); } else { this.snackBar.open('只有二维预案和文本预案可以编辑!', '确定', config); } } } } } allPlanComponents: any //所有预案组件 companyId: any //新建预案需要使用的id planId: any //统一预案id lookUrl //查看文件路径 //改名 changeName(element) { // console.log(element) const dialogRef = this.dialog.open(ChangeName, { data: { element: element } }); dialogRef.afterClosed().subscribe( data => { if (data) { const config = new MatSnackBarConfig(); config.verticalPosition = 'top'; config.duration = 3000 this.snackBar.open('修改成功!', '确定', config); this.getAllPlanComponents() } } ); } //获得所有预案组件 getAllPlanComponents() { let pagetype = this.route.snapshot.queryParams.pagetype let unitId = this.route.snapshot.queryParams.unitId let paramsData: any if (pagetype == 'entryplan') { paramsData = { companyId: unitId, pageNumber: this.PageNumber, pageSize: "", sort: "" } } if (pagetype == 'passplan') { paramsData = { companyId: unitId, pageNumber: this.PageNumber, pageSize: "", AuditStatus: 2, sort: "" } } if (pagetype == 'openplan') { paramsData = { companyId: unitId, pageNumber: this.PageNumber, pageSize: "", IsPublic: true, sort: "" } } this.http.get("/api/PlanComponents", { params: paramsData }).subscribe((data: any) => { this.length = data.totalCount this.allPlanComponents = data this.tabledataSource = data.items }) } //删除预案 deletePlan(plandata) { const config = new MatSnackBarConfig(); config.verticalPosition = 'top'; config.duration = 3000 let isTrue = confirm('您确定要删除吗') if (isTrue) { if (plandata.planType == 1) {//如果删除的是二维预案 this.http.delete(`/api/PlanComponents2D/${plandata.id}`).subscribe(data => { this.snackBar.open('删除成功!', '确定', config); this.getAllPlanComponents() },err=>{ this.snackBar.open(err, '确定', config); }) } else { this.http.delete(`/api/PlanComponents/${plandata.id}`).subscribe(data => { const config = new MatSnackBarConfig(); config.verticalPosition = 'top'; config.duration = 3000 this.snackBar.open('删除成功!', '确定', config); this.getAllPlanComponents() },err=>{ this.snackBar.open(err, '确定', config); }) } } } //提交审核 submitAudit(element) { const config = new MatSnackBarConfig(); config.verticalPosition = 'top'; config.duration = 3000 /* if(element.auditStatus == 4){ this.snackBar.open('审核退回的预案需要修改后方可再次提交审核!','确定',config); } */ if (element.planType == 1) {//如果提交审核的是二维预案 if (element.auditStatus == 8) { this.http.put(`/api/PlanComponents2D/${element.id}/Commit`, "").subscribe(data => { this.getAllPlanComponents() }/* ,err => { this.snackBar.open(err,'确定',config); } */) } else { this.snackBar.open('审核退回的预案需要修改后方可再次提交审核!', '确定', config); } } else { this.http.put(`/api/PlanComponents/${element.id}/Commit`, "").subscribe(data => { this.getAllPlanComponents() }) } } //撤销审核 cancelAudit(element) { if (element.planType == 1) {//如果撤销审核的是二维预案 this.http.put(`/api/PlanComponents2D/${element.id}/Cancel`, "").subscribe(data => { this.getAllPlanComponents() }) } else { this.http.put(`/api/PlanComponents/${element.id}/Cancel`, "").subscribe(data => { this.getAllPlanComponents() }/* ,err => { const config = new MatSnackBarConfig(); config.verticalPosition = 'top'; config.duration = 3000 this.snackBar.open(err,'确定',config); } */) } } //审核结果 auditResult(element) { // console.log(element) const dialogRef = this.dialog.open(AuditResult, { width: "395px", data: { element: element } }); dialogRef.afterClosed().subscribe( data => { if (data) { } } ); } //下载↓ selectDownloadFile: any; //选择下载的文件 download: any; //下载文件元数据 downloadisLoading: boolean = false; //进度条loading加载 downloadProgress: number = 0; //进度条进度 downloadFileName: any uploadFileLonging: any //读取下载文件信息 readFile(element) { this.uploadFileLonging = element const dialogRef = this.dialog.open(DownloadFile, { width: "435px", // height:"410px", data: { fileUrls: element.attachmentUrls, compantData: this.unitdata.unitname, element: element } }); dialogRef.afterClosed().subscribe( data => { if (data) { this.downloadFileName = data.fileName this.download = data this.downloadFile() } } ); } //初始化下载 downloadFile() { this.downloadProgress = 0 let file = this.download let fileSize = file.fileLength//下载文件的总大小 let shardSize = 10 * 1024 * 1024 //文件大小是否大于10MB console.log(file) if (file && fileSize <= shardSize) { //<=10MB时直接下载 this.downloadisLoading = true // this.setFileLoading() this.http.get(`/api/Objects/PlanPlatform/${file.objectName}`, { responseType: 'blob' },).subscribe(data => { console.log(data) let url = window.URL.createObjectURL(new Blob([data])); //createObjectURL创建一个下载Blob的url地址 let link = document.createElement("a"); link.style.display = "none"; link.href = url; let suffix = file.objectName.substring(file.objectName.lastIndexOf(".") + 1, file.objectName.length); link.setAttribute("download", file.fileName ? file.fileName : this.unitdata.unitname + "-" + this.uploadFileLonging.name + "." + suffix); document.body.appendChild(link); link.click(); this.downloadisLoading = false // this.setFileLoading() }) } else if (file && fileSize > shardSize) { //>10MB时分块下载 this.blockingDownload() //分段下载 this.downloadisLoading = true // this.setFileLoading() } } //分段下载并合并 async blockingDownload() { let file = this.download let fileSize = file.fileLength //下载文件的总大小 let shardSize = 3 * 1024 * 1024 //3MB一个分片 let allSlice = Math.ceil(fileSize / shardSize) //总文件/3MB===共分多少段 let allFile: any = [] //所有的file分段 for (let i = 0; i < allSlice; i++) { let start = i * shardSize //每次下载文件开始位置 let end = Math.min(fileSize, start + shardSize - 1); //每次下载文件结束为止 let result = await new Promise((result, reject) => { this.http.get(`/api/Objects/PlanPlatform/${file.objectName}`, { headers: { 'range': `bytes= ${start}-${end}` }, responseType: 'blob' }).subscribe(data => { result(data) }) }) allFile.push(result) this.downloadProgress = Number((i / allSlice).toFixed(2)) * 100 if (allFile.length === allSlice) { //合并文件输出给浏览器 let url = window.URL.createObjectURL(new Blob(allFile)); //createObjectURL创建一个下载Blob的url地址 let link = document.createElement("a"); link.style.display = "none"; link.href = url; let suffix = file.objectName.substring(file.objectName.lastIndexOf(".") + 1, file.objectName.length); link.setAttribute("download", file.fileName ? file.fileName : this.unitdata.unitname + "-" + this.uploadFileLonging.name + "." + suffix); document.body.appendChild(link); link.click(); // this.downloadProgress = 0 this.downloadisLoading = false // this.setFileLoading() } } //for循环 } //取消分块下载 cancelDowload() { } //封装函数设置当前文件loading状态 setFileLoading() { // let id = this.selectDownloadFile.id // this.CADList.forEach(element => { // if (element.id === id) { element.loading = !element.loading } // }); } //新建预案弹出框 addplan() { const dialogRef = this.dialog.open(AddPlanone, { width: "585px", height: "430px", data: { companyId: this.companyId, unitType: this.unitdata.unittype, unitName: this.unitdata.unitname }, disableClose: true }); dialogRef.afterClosed().subscribe( data => { if (data) { // this.route.snapshot.queryParams.id = data.planId this.planId = data.planId this.getAllPlanComponents() if (data.planMode == 2) {//如果添加方式为在线编辑 sessionStorage.setItem("planId", data.id); sessionStorage.setItem("companyId", this.companyId) sessionStorage.setItem("buildingTypeId", this.unittypeId) sessionStorage.setItem("editable", "1") let companyId = sessionStorage.getItem("companyId") window.open(`/keyUnit/editunitinfo?id=${companyId}`); } } } ); } //上传word转在线编制 spinner=false//圈圈是否存在 async upzhuanMb(element){ this.spinner=true const config = new MatSnackBarConfig(); config.verticalPosition = 'top'; config.duration = 3000 let objectName//预案文件名称 let formData = new FormData() //模板导入接口传参 let type=this.unitdata.unittype=='高层建筑'?1:this.unitdata.unittype=='居民小区'?2:this.unitdata.unittype=='厂房'?3 :(this.unitdata.unittype=='商市场'||this.unitdata.unittype=='医院'||this.unitdata.unittype=='学校' ||this.unitdata.unittype=='宾馆'||this.unitdata.unittype=='娱乐场所'||this.unitdata.unittype=='餐饮业' ||this.unitdata.unittype=='影剧院'||this.unitdata.unittype=='展览建筑'||this.unitdata.unittype=='养老院' ||this.unitdata.unittype=='会议中心')?4:this.unitdata.unittype=='储罐类'?'StorageTankFivePlan' :this.unitdata.unittype=='化工生产'?'ChemicalProductionFivePlan':this.unitdata.unittype=='农村'?'CountrysideFivePlan':'' let blob=[] /* 调用下载接口获取文件流,并赋值给blob */ let fileRuquest=await new Promise((resolve,reject)=>{ this.http.get(`/api/ObjectMetadata/PlanPlatform/`+element.attachmentUrls[0]).subscribe((obdata: any) => { objectName=obdata.objectName this.http.get(`/api/Objects/PlanPlatform/${objectName}`, { responseType: 'blob' },).subscribe(blobdata => { resolve(blobdata) }) }) }) blob.push(fileRuquest)//接收返回的blob类型数据 let file=new File(blob,objectName)//转化为file类型 formData.append('file',file) let pData//接受返回的模板信息数据 /* 调用模板导入接口,获取在线编制的json,并赋值给pData */ let pRequest=await new Promise((resolve,rejest)=>{ this.http.post(`/api/OfficeExtract/ExtractWordPlan?type=${type}`,formData).subscribe((data:any)=>{ resolve(data) },err=>{ this.spinner=false this.snackBar.open('解析失败,请确定好格式再重新上传!', '确定', config); }) }) pData=pRequest /* 调用新建预案接口,新建一条新的预案,并跳转新建在线编制页面 */ let body={ name:(element.planCategory==3?'Ⅲ级':element.planCategory==4?'Ⅳ级':element.planCategory==5?'Ⅴ级':'')+ element.name+'转在线编制', planType: element.planType, planMode: 2, planLevel: element.planLevel, planCategory:element.planCategory, webTextData:JSON.stringify(pData) } let planData let newyuan=await new Promise((resolve,reject)=>{ this.http.post('/api/PlanComponents', body, { params: { companyId: this.route.snapshot.queryParams.unitId } }).subscribe(plandata => { resolve(plandata) }) }) planData=newyuan window.open(`/planManagement/createplanonlinefive?navIsOpen=false&companyId=${this.route.snapshot.queryParams.unitId}&planName=${planData.name}&unitName=${this.unitdata.unitname}&planCategory=${planData.planCategory}&planId=${planData.id}&&wordChange=true`) this.getAllPlanComponents() this.spinner=false } } //新建预案弹出框 @Component({ selector: 'AddPlanone', templateUrl: './AddPlanone.html', styleUrls: ['./entry-plan-look.component.scss'], }) export class AddPlanone { isLinear = true; //是否为线性步进器 firstFormGroup: FormGroup; secondFormGroup: FormGroup; constructor(private _formBuilder: FormBuilder, private http: HttpClient, public dialogRef: MatDialogRef, @Inject(MAT_DIALOG_DATA) public data, public snackBar: MatSnackBar, private tree: TreeService) { } ngOnInit(): void { this.levels = sessionStorage.getItem("level") this.firstFormGroup = this._formBuilder.group({ firstCtrlone: ['', Validators.required], firstCtrltwo: ['', Validators.required], firstCtrlthree: ['', Validators.required], }); this.secondFormGroup = this._formBuilder.group({ secondCtrl: ['', Validators.required] }); } onNoClick(): void { this.dialogRef.close(); } levels// isup: boolean = false //上传input框是否显示 isweb: boolean = false //web输入框是否显示 isinput: boolean = false //编制按钮是否显示 defaultisshow = '0' //默认显示上传input框 pswShow = false //是否为全景图选项默认不显示 psw//是否为全景图 cadPlan//是否为卡片预案 //选择radio selectradio(e) { if (e.value == "1") { //如果点击本地上传 this.isup = true this.isinput = false this.isweb = false this.webaddress = "" } if (e.value == "4") { //如果点击导入word文档 this.isinput = true this.isup = false this.isweb = false this.webaddress = "" } if (e.value == "2") { //如果点击在线编辑 this.isinput = false this.isup = false this.isweb = false this.webaddress = "" } if (e.value == "3") { //如果点击输入网址 this.isweb = true this.isup = false this.isinput = false this.webaddress = "" } } file2: any = null; //导入的文件 webaddress: any = "" //输入的网页地址 //上传文件↓ file: any; //上传的文件 fileName: any; //上传文件name uploadisLoading: boolean = false; //进度条loading加载 uploadProgress: number = 0; //进度条进度 objectName: any; //上传对象名 uploadId: any; //上传分块上传事件编号 //上传文件input filechange(e) { this.psw = false this.file = e.target.files[0] || null //上传的文件 if (this.selectedPLanType == '4' && this.file.type != null && this.file.type != undefined) { if (this.file.type == 'image/png' || this.file.type == 'image/jpeg') { this.pswShow = true } else { this.pswShow = false } } else { this.pswShow = false } // this.startUploading() } //上传文件 startUploading(planType) { let file = this.file || null //获取上传的文件 let fileSize = file.size || null //上传文件的总大小 let shardSize = 5 * 1024 * 1024 //5MB一个分片 // console.log(this.psw) if (file && fileSize <= shardSize) { //上传文件<=5MB时 let formData = new FormData() formData.append("file", file) this.http.post(this.psw ? '/api/Objects/PlanPlatform/psw' : `/api/Objects/PlanPlatform/${this.data.companyId}/2D`, formData).subscribe((data: any) => { this.objectName = data.objectName const config = new MatSnackBarConfig(); config.verticalPosition = 'top'; config.duration = 3000 this.snackBar.open('上传成功!', '确定', config); this.uploadover = true let level = sessionStorage.getItem("level") // console.log(level) let PlanLevel if (level == '0') { PlanLevel = 1 } if (level == '1') { PlanLevel = 2 } if (level == '2') { PlanLevel = 4 } if (level == '3') { PlanLevel = 8 } let uploadUrl if (planType == "非二维") { uploadUrl = "/api/PlanComponents" } else { uploadUrl = "/api/PlanComponents2D" } if (this.uploadover) { this.http.post(uploadUrl, { id: "", name: this.selectedPLanName, planType: Number(this.selectedPLanType), planMode: Number(this.defaultisshow), planLevel: PlanLevel, planCategory: Number(this.selectedPLanLevel), url: "", attachmentUrls: [`${this.objectName}`] }, { params: { companyId: this.data.companyId } }).subscribe(data => { this.dialogRef.close(data); }) } else { console.log("上传出错") } }) } else if (file && fileSize > shardSize) { //上传文件>5MB时,分块上传 let data = { filename: file.name } this.uploadisLoading = true this.http.post(this.psw ? '/api/NewMultipartUpload/PlanPlatform/psw' : `/api/NewMultipartUpload/PlanPlatform/${this.data.companyId}/2D`, {}, { params: data }).subscribe((data: any) => { //初始化分段上传 this.objectName = data.objectName this.uploadId = data.uploadId this.subsectionUploading(planType) }) } } PartNumberETag: any = []; //每次返回需要保存的信息 //开始分段上传 async subsectionUploading(planType) { let file = this.file || null //获取上传的文件 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(`/api/MultipartUpload/PlanPlatform/${this.objectName}?uploadId=${this.uploadId}&partNumber=${i + 1}`, formData).subscribe((data: any) => { let msg = { "partNumber": data.partNumber || null, "eTag": data.eTag || null } resolve(msg) // 调用 promise 内置方法处理成功 }) }); this.PartNumberETag.push(result) this.uploadProgress = Number((i / allSlice).toFixed(2)) * 100 if (this.PartNumberETag.length === allSlice) { this.uploadProgress = 100 this.endUploading(planType) } }//for循环 } uploadover: any = false //上传完成之后提示 //完成分块上传 endUploading(planType) { let data = this.PartNumberETag let paramsData = { uploadId: this.uploadId } this.http.post(`/api/CompleteMultipartUpload/PlanPlatform/${this.objectName}`, data, { params: paramsData }).subscribe(data => { const config = new MatSnackBarConfig(); config.verticalPosition = 'top'; config.duration = 3000 this.snackBar.open('上传成功!', '确定', config); this.uploadProgress = 0; this.uploadisLoading = false this.PartNumberETag = [] //清空保存返回的信息 this.uploadover = true let level = sessionStorage.getItem("level") // console.log(level) let PlanLevel if (level == '0') { PlanLevel = 1 } if (level == '1') { PlanLevel = 2 } if (level == '2') { PlanLevel = 4 } if (level == '3') { PlanLevel = 8 } let uploadUrl if (planType == "非二维") { uploadUrl = "/api/PlanComponents" } else { uploadUrl = "/api/PlanComponents2D" } if (this.uploadover) {//如果上次成功了才创建 this.http.post(uploadUrl, { id: "", name: this.selectedPLanName, planType: Number(this.selectedPLanType), planMode: Number(this.defaultisshow), planLevel: PlanLevel, planCategory: Number(this.selectedPLanLevel), url: "", attachmentUrls: [`${this.objectName}`] }, { params: { companyId: this.data.companyId } }).subscribe(data => { this.dialogRef.close(data); }) } else { console.log("上传出错!") } }) } //取消分块上传 cancel() { this.http.delete(`/api/MultipartUpload/PlanPlatform/${this.objectName}?uploadId=${this.uploadId}`).subscribe(data => { this.uploadProgress = 0; this.uploadisLoading = false; (document.getElementById('uploadFile')).value = null this.PartNumberETag = [] //清空保存返回的信息 const config = new MatSnackBarConfig(); config.verticalPosition = 'top'; config.duration = 3000 this.snackBar.open('取消上传成功!', '确定', config); this.uploadover = false this.file = null }) } //导入word文件 fileInput(e) { this.file2 = e.target.files[0] } //点击下一步 selectedPLanType: any//所选预案类型 selectedPLanName: any//所选预案名称 selectedPLanLevel: any//所选预案级别 localup: boolean = false //本地上传 inputword: boolean = false //导入文档 onlineedit: boolean = false //在线编辑 website: boolean = false //网页地址 inputNew :boolean=false //自定义编辑 next(formdata) { //console.log(formdata.value.firstCtrlthree) //console.log(this.file) this.psw = false this.selectedPLanName = formdata.value.firstCtrlone this.selectedPLanType = formdata.value.firstCtrltwo this.selectedPLanLevel = formdata.value.firstCtrlthree if (formdata.value.firstCtrltwo == '16' && formdata.value.firstCtrlthree == '4') { //如果是文本预案 this.localup = true this.inputword = false this.onlineedit = false this.website = false } if (formdata.value.firstCtrltwo == '16' ) {//&& formdata.value.firstCtrlthree != '4' this.localup = true this.inputword = true this.onlineedit = false this.website = false this.inputNew=true } if (formdata.value.firstCtrltwo == '16' && formdata.value.firstCtrlthree != '4') {//&& formdata.value.firstCtrlthree != '4' this.localup = true this.inputword = true this.inputNew=true this.onlineedit = false this.website = false } if (formdata.value.firstCtrltwo == '1') { //如果是2D预案 this.localup = true this.inputword = false this.onlineedit = true this.website = true this.inputNew=false } if (formdata.value.firstCtrltwo == '2' || formdata.value.firstCtrltwo == '4') { this.localup = true this.inputword = false this.inputNew=false this.onlineedit = false this.website = true this.pswShow = true } if (this.selectedPLanType == '4' && this.file != undefined && this.file.type != null) { if (this.file.type == 'image/png' || this.file.type == 'image/jpeg') { this.pswShow = true this.website = false } else { this.pswShow = false } } else { this.pswShow = false } } setttt() { this.pswShow = false this.psw = false } closediv() { //console.log(this.file) if (this.file != undefined) { this.cancel(); } this.dialogRef.close(); } //文本预案在线编制跳转 newleftTabledata planData createWord(haveNew) { const config = new MatSnackBarConfig(); config.verticalPosition = 'top'; config.duration = 3000 let level = sessionStorage.getItem("level") // console.log(level) let PlanLevel if (level == '0') { PlanLevel = 1 } if (level == '1') { PlanLevel = 2 } if (level == '2') { PlanLevel = 4 } if (level == '3') { PlanLevel = 8 } this.http.get("/api/PlanTemplate").subscribe((data: any) => { this.newleftTabledata = data this.newleftTabledata.forEach((value, index, array) => { value.data = JSON.parse(value.data) }) this.http.get("/api/BuildingTypes").subscribe((buildData: any) => { this.newleftTabledata.forEach((value, index, array) => { buildData.forEach((element, i, buildArray) => { if (value.buildingTypeId == element.id) { array[index].unitname = buildArray[i].name array[index].facilityCategoryId = buildArray[i].facilityCategoryId } }); }) let open = this.newleftTabledata.filter((value, index, array) => { return value.unitname == this.data.unitType && value.planCategory == this.selectedPLanLevel }) if(haveNew==true){ this.http.post('/api/PlanComponents', { id: "", name: this.selectedPLanName, planType: Number(this.selectedPLanType), planMode: Number(this.defaultisshow), planLevel: PlanLevel, planCategory: Number(this.selectedPLanLevel), url: "", //attachmentUrls: [`${this.objectName}`] }, { params: { companyId: this.data.companyId } }).subscribe(plandata => { this.planData = plandata this.dialogRef.close(plandata); //console.log(plandata) window.open(`/planManagement/createplanonlinefive?navIsOpen=false&companyId=${this.data.companyId}&planName=${this.planData.name}&unitName=${this.data.unitName}&planCategory=${this.selectedPLanLevel}&planId=${this.planData.id}&haveNew=${haveNew}`) }) }else{ if (open.length > 0) { this.http.post('/api/PlanComponents', { id: "", name: this.selectedPLanName, planType: Number(this.selectedPLanType), planMode: Number(this.defaultisshow), planLevel: PlanLevel, planCategory: Number(this.selectedPLanLevel), url: "", //attachmentUrls: [`${this.objectName}`] }, { params: { companyId: this.data.companyId } }).subscribe(plandata => { this.planData = plandata this.dialogRef.close(plandata); //console.log(plandata) window.open(`/planManagement/createplanonlinefive?navIsOpen=false&companyId=${this.data.companyId}&planName=${this.planData.name}&unitName=${this.data.unitName}&planCategory=${this.selectedPLanLevel}&planId=${this.planData.id}&haveNew=${haveNew}`) }) } else { this.snackBar.open('请先创建模板!', '确定', config); } } }) }) //window.open('') } // 提交创建 onSubmit(value) { let level = sessionStorage.getItem("level") // console.log(level) let PlanLevel if (level == '0') { PlanLevel = 1 } if (level == '1') { PlanLevel = 2 } if (level == '2') { PlanLevel = 4 } if (level == '3') { PlanLevel = 8 } if (this.selectedPLanType != "1") {//如果创建的不是二维预案 if (this.defaultisshow == '1' && this.file == null) { //如果是本地上传 const config = new MatSnackBarConfig(); config.verticalPosition = 'top'; config.duration = 3000 this.snackBar.open('请先上传文件', '确定', config); } if (this.defaultisshow == '1' && this.file) { //如果是本地上传并且有文件 //先上传成功 this.startUploading("非二维") //再创建预案 // this.http.post("/api/PlanComponents",{ // id: "", // name: this.selectedPLanName, // planType:Number(this.selectedPLanType), // planMode: Number(this.defaultisshow), // planLevel: PlanLevel, // url: "", // attachmentUrls: [`${this.objectName}`] // },{params:{ // companyId : this.data.companyId // }}).subscribe(data=>{ // this.dialogRef.close(data); // }) } if (this.defaultisshow == '2') {//如果是导入则很复杂 const config = new MatSnackBarConfig(); config.verticalPosition = 'top'; config.duration = 3000 //this.snackBar.open('暂不支持导入','确定',config); this.createWord(false) } if(this.defaultisshow == '4'){ this.createWord(true) } if (this.defaultisshow == '3' && (this.webaddress == "" || this.webaddress == null)) { //如果是填写网址 const config = new MatSnackBarConfig(); config.verticalPosition = 'top'; config.duration = 3000 this.snackBar.open('请先输入网址', '确定', config); } if (this.defaultisshow == '3' && this.webaddress) { //如果是填写网址 var reg = new RegExp('(http|https|app1|app2):\/\/([\w.!@#$%^&*()_+-=])*\s*') if (reg.test(this.webaddress)) { let body = { id: "", name: this.selectedPLanName, planType: Number(this.selectedPLanType), planMode: Number(this.defaultisshow), planCategory: Number(this.selectedPLanLevel), planLevel: PlanLevel, url: this.webaddress, attachmentUrls: null } //console.log(body) this.http.post("/api/PlanComponents", body, { params: { companyId: this.data.companyId } }).subscribe(data => { this.dialogRef.close(data); }) } else { const config = new MatSnackBarConfig(); config.verticalPosition = 'top'; config.duration = 3000 this.snackBar.open('请填写正确网址格式,需以http://或者https://开头的正确网址', '确定', config); } } } else { //如果创建的是二维预案 if (this.defaultisshow == '1' && this.file == null) { //如果是本地上传 const config = new MatSnackBarConfig(); config.verticalPosition = 'top'; config.duration = 3000 this.snackBar.open('请先上传文件', '确定', config); } if (this.defaultisshow == '1' && this.file) { this.startUploading("二维") // let body = { // id: "", // name: this.selectedPLanName, // planType:Number(this.selectedPLanType), // planMode: Number(this.defaultisshow), // planLevel: PlanLevel, // url: "", // attachmentUrls: [`${this.objectName}`] // } // this.http.post("/api/PlanComponents2D",body,{params:{ // companyId : this.data.companyId // }}).subscribe(data=>{ // // console.log("创建成功") // this.dialogRef.close(data); // }) } if (this.defaultisshow == '2') { //如果是在线编辑------>跳转编制工具 let body = { id: "", name: this.selectedPLanName, planType: Number(this.selectedPLanType), planMode: Number(this.defaultisshow), planLevel: PlanLevel, planCategory: Number(this.selectedPLanLevel), url: "", attachmentUrls: null } this.http.post("/api/PlanComponents2D", body, { params: { companyId: this.data.companyId } }).subscribe(data => { // console.log("创建成功") this.dialogRef.close(data); }) } if (this.defaultisshow == '3' && (this.webaddress == "" || this.webaddress == null)) { //如果是填写网址 const config = new MatSnackBarConfig(); config.verticalPosition = 'top'; config.duration = 3000 this.snackBar.open('请先输入网址', '确定', config); } if (this.defaultisshow == '3' && this.webaddress) { //如果是填写网址 var reg = new RegExp('(http|https):\/\/([\w.!@#$%^&*()_+-=])*\s*') if (reg.test(this.webaddress)) { let body = { id: "", name: this.selectedPLanName, planType: Number(this.selectedPLanType), planMode: Number(this.defaultisshow), planCategory: Number(this.selectedPLanLevel), planLevel: PlanLevel, url: this.webaddress, attachmentUrls: null } //console.log(body) this.http.post("/api/PlanComponents2D", body, { params: { companyId: this.data.companyId } }).subscribe(data => { // console.log("创建成功") this.dialogRef.close(data); }) } else { const config = new MatSnackBarConfig(); config.verticalPosition = 'top'; config.duration = 3000 this.snackBar.open('请填写正确网址格式,需以http://或者https://开头的正确网址', '确定', config); } } } } onSubmit2(value) { // console.log(this.webaddress) var reg = new RegExp('(http|https):\/\/([\w.!@#$%^&*()_+-=])*\s*') //console.log(reg.test(this.webaddress)) } } //下载文件弹出框 @Component({ selector: 'downloadfile', templateUrl: './downloadFile.html', styleUrls: ['./entry-plan-look.component.scss'] }) export class DownloadFile { constructor(private http: HttpClient, public dialogRef: MatDialogRef, @Inject(MAT_DIALOG_DATA) public data, public snackBar: MatSnackBar) { } fileUrls: any //当前预案附件地址 fileDatas: any = [] selectedFileIndex: any = 0 selectedFileData: any name2: any //如果真实姓名为空时 ngOnInit(): void { this.name2 = this.data.element.name this.fileUrls = this.data.fileUrls this.fileUrls.forEach(item => { this.http.get('/api/ObjectMetadata/PlanPlatform/' + item).subscribe((data: any) => { data.filePige = (data.fileLength / (1024 * 1024)).toFixed(2) this.fileDatas.push(data) this.selectedFileData = data }) }) } onNoClick(): void { this.dialogRef.close(); } confirm() { this.dialogRef.close(this.selectedFileData); } //点击想要下载的文件 addurl(item, key) { // console.log(item,key) this.selectedFileIndex = key this.selectedFileData = item } } //审批结果弹出框 @Component({ selector: 'auditresult', templateUrl: './auditresult.html', styleUrls: ['./entry-plan-look.component.scss'] }) export class AuditResult { constructor(private http: HttpClient, public dialogRef: MatDialogRef, @Inject(MAT_DIALOG_DATA) public data, public snackBar: MatSnackBar) { } planName: any = this.data.element.name commitTime: any = this.data.element.committedTime commitOrganizationName: any = this.data.element.committerOrganizationName auditOrganizationName: any = this.data.element.auditorOrganizationName auditResult: any = this.data.element.auditStatus auditOpinion: any = this.data.element.auditOpinion ngOnInit(): void { } onNoClick(): void { this.dialogRef.close(); } } //改名弹出框 @Component({ selector: 'changename', templateUrl: './changename.html', styleUrls: ['./entry-plan-look.component.scss'] }) export class ChangeName { constructor(private http: HttpClient, public dialogRef: MatDialogRef, @Inject(MAT_DIALOG_DATA) public data, public snackBar: MatSnackBar) { } planName: any//预案名称 ngOnInit(): void { this.planName = this.data.element.name } onNoClick(): void { this.dialogRef.close(); } onSubmit(value) { let headers = new HttpHeaders({ 'Content-Type': 'text/json' }); let options = { headers }; let body = { name: value.name } let body2d = JSON.stringify(value.name) if (this.data.element.planType == 1) {//如果是二维预案 this.http.put(`/api/PlanComponents2D/${this.data.element.id}`, body2d, options).subscribe(data => { this.dialogRef.close("success"); }) } else { this.http.put(`/api/PlanComponents/${this.data.element.id}`, body, options).subscribe(data => { this.dialogRef.close("success"); }) } } } //全景图弹出框 @Component({ selector: 'PsViewer', templateUrl: './Photo-Sphere-Viewer.html', styleUrls: ['./entry-plan-look.component.scss'] }) export class PsViewer { 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 { // console.log(this.data) const viewer = new Viewer({ container: document.querySelector('#viewer'), panorama: '/api/Objects/PlanPlatform/' + this.data, }); } } //普通图片弹窗 @Component({ selector: 'imgdetails', templateUrl: './previewImg.html', styleUrls: ['./entry-plan-look.component.scss'] }) export class ImgDetails { constructor(private http: HttpClient, public dialog: MatDialog, public dialogRef: MatDialogRef, @Inject(MAT_DIALOG_DATA) public data) { } testSwiper: Swiper; ngOnInit(): void { //console.log(this.data) this.allImages = [] this.data.forEach(element => { element = `/api/Objects/PlanPlatform/${element}?x-oss-process=image/auto-orient,1` this.allImages.push(element) }); //this.allImages.push(`${this.data.attachmentUrls[0]}?x-oss-process=image/auto-orient,1`) } ngAfterViewInit() { this.testSwiper = new Swiper('.swiper-container', { lazy: true, direction: 'horizontal', loop: false, // 如果需要前进后退按钮 navigation: { nextEl: '.swiper-button-next', prevEl: '.swiper-button-prev', } }); } allImages: any; //展示所有的图片 rotationAngle: number = 0; //旋转角度 //旋转图片 rotate() { this.rotationAngle = this.rotationAngle + 90 if (this.rotationAngle === 360) { this.rotationAngle = 0 } } } //修改三维预案地址 @Component({ selector: 'changename', templateUrl: './changeurl.html', styleUrls: ['./entry-plan-look.component.scss'] }) export class ChangeUrl{ constructor(private http: HttpClient, public dialogRef: MatDialogRef, @Inject(MAT_DIALOG_DATA) public data, public snackBar: MatSnackBar) { } planUrl: any//预案路径 updata//修改后的data ngOnInit(): void { this.planUrl = this.data.element.url } onNoClick(): void { this.dialogRef.close(); } onSubmit(value) { let headers = new HttpHeaders({ 'Content-Type': 'text/json' }); let options = { headers }; let body = { url: value.url, auditStatus:8 } this.http.put(`/api/PlanComponents/${this.data.element.id}`, body, options).subscribe(data => { console.log(data) this.updata=data this.dialogRef.close("success"); sessionStorage.setItem("url", this.updata.url) if ((this.updata.url as string).includes('gis/threeDimensionalHome')) { //三维预案 window.open(`${this.updata.url}?unitId=${this.updata.companyId}&unitName=${this.updata.name}&editMode=true`) } else { window.open(`/planManagement/webLook`) } }) } }