import { TabService } from '../../services/tab.service'; import { debounceTime } from 'rxjs/operators'; import { Subject } from 'rxjs'; import { NzMessageService } from 'ng-zorro-antd/message'; import { Component, OnInit, HostListener, AfterViewInit, ViewChild } from "@angular/core"; import { MainService } from 'src/app/services/main.service'; import { ActivatedRoute } from '@angular/router'; import { CustomChangeDateComponent } from '../../components/custom-change-date/custom-change-date.component'; @Component({ selector: "app-work-hour-big-statistics", templateUrl: "./work-hour-big-statistics.component.html", styleUrls: ["./work-hour-big-statistics.component.less"], }) export class WorkHourBigStatisticsComponent implements OnInit, AfterViewInit { @ViewChild('customChangeDate', { static: false }) customChangeDateComponent!: CustomChangeDateComponent; constructor( private mainService: MainService, private message: NzMessageService, private route: ActivatedRoute, private tabService: TabService, ) {} listOfData: any[] = []; //表格数据 listOfDataEnd: any[] = []; //表格合计 pageIndex: number = 1; //表格当前页码 pageSize: number = 30; //表格每页展示条数 listLength: number = 0; //表格总数据量 repairDeptId;//报修科室id searchTimerSubject = new Subject(); ngOnInit() { this.searchTimerSubject.pipe(debounceTime(500)).subscribe((v) => { let fun = v[0]; fun.call(this, v[1]); }); } ngAfterViewInit(){ this.initSessionData(); this.getQueryParams(); setTimeout(() => { this.search(); }, 0) this.onResize(); } tableHeight:number = 0; @HostListener('window:resize') onResize(): void { setTimeout(() => { this.tableHeight = window.innerHeight - (document.querySelector('.searchDataWrap') as HTMLElement).offsetHeight - 64 - 36 - 48 - 8 - (document.querySelector('.ant-table-header') as HTMLElement).offsetHeight - 55 - this.getMoreFilter + 14; }, 0) } getQueryParams(){ let queryParams = this.tabService.getQueryParams(); this.tabService.clearQueryParams(); if(queryParams.dateRange){ this.dateRange = queryParams.dateRange; this.customChangeDateComponent.initByDate(this.dateRange); } } get getMoreFilter(){ let flag = this.fieldConfig.fields.groupDTO || this.fieldConfig.fields.userDTO || this.fieldConfig.fields.category1DTO || this.fieldConfig.fields.category2DTO || this.fieldConfig.fields.category3DTO || this.fieldConfig.fields.buildingDTO || this.fieldConfig.fields.floorDTO || this.fieldConfig.fields.companyDTO; return flag ? 37 : 0; } // 初始化缓存数据 queryType:any; hosId:any; dutyId:any; parentDutyId:any; initSessionData(){ let newStatistics = JSON.parse(sessionStorage.getItem('newStatistics')); let queryType:any = newStatistics.queryType; let hosId:any = newStatistics.hospitalId; let dutyId:any = newStatistics.dutyId; queryType = queryType ? +queryType : undefined; hosId = hosId ? +hosId : undefined; dutyId = dutyId ? +dutyId : undefined; this.queryType = queryType; if(queryType == 1){ this.hosId = undefined; this.dutyId = undefined; this.parentDutyId = undefined; }else if(queryType == 2){ this.hosId = hosId; this.dutyId = undefined; this.parentDutyId = undefined; }else if(queryType == 3){ this.hosId = undefined; this.dutyId = dutyId; this.parentDutyId = undefined; }else if(queryType == 4){ this.hosId = undefined; this.dutyId = undefined; this.parentDutyId = dutyId; } } get getHosId(){ return this.parentDutyId || this.dutyId || this.hosId; } // 表格数据 loading1 = false; getList(num?: number, field?: string, sort?: string) { if (num !== undefined) { this.pageIndex = num; } let postData:any = { idx: this.pageIndex - 1, sum: this.pageSize, treeLevel: 1, startDate: this.customChangeDateComponent.startDate || undefined, endDate: this.customChangeDateComponent.endDate || undefined, hosId: this.hosId || undefined, dutyId: this.dutyId || undefined, parentDutyId: this.parentDutyId || undefined, repairDeptId: this.repairDeptId || undefined, groupId: this.fieldConfig.fields.userId ? undefined : (this.fieldConfig.fields.groupId || undefined), userId: this.fieldConfig.fields.userId || undefined, categoryId: this.fieldConfig.fields.categoryId || undefined, hierarchy: this.fieldConfig.fields.hierarchy || undefined, buildingId: this.fieldConfig.fields.buildingId || undefined, placeId: this.fieldConfig.fields.floorId || undefined, companyId: this.fieldConfig.fields.companyId || undefined, }; if (field && sort) { postData.sort = `${field} ${sort === "ascend" ? `asc` : `desc`}` } this.loading1 = true; this.mainService .postCustom("itsm/report", "workHourIncident", postData) .subscribe((result) => { this.loading1 = false; this.listOfData = result.dataList.filter((v, i) => { return i != result.dataList.length - 1 }); this.listOfDataEnd = result.dataList.filter((v, i) => { return i == result.dataList.length - 1 }); this.listLength = result.totalCount; }); } // 列表排序 sortCurrent:any = {}; sortCurrentKey: string = ""; sortCurrentValue: string | null = ""; sort(e) { const { key, value } = e; this.sortCurrentKey = key; this.sortCurrentValue = value; this.getList(this.pageIndex, this.sortCurrentKey, this.sortCurrentValue); } // 搜索 search() { this.getList(1, this.sortCurrentKey, this.sortCurrentValue); } // 日期选择 dateRange: any = []; // 导出 excelExportLoading:any = false; excelExport(){ this.excelExportLoading = this.message.loading("导出中..", { nzDuration: 0, }).messageId; let postData:any = { treeLevel: 1, startDate: this.customChangeDateComponent.startDate || undefined, endDate: this.customChangeDateComponent.endDate || undefined, hosId: this.hosId || undefined, dutyId: this.dutyId || undefined, parentDutyId: this.parentDutyId || undefined, repairDeptId: this.repairDeptId || undefined, groupId: this.fieldConfig.fields.userId ? undefined : (this.fieldConfig.fields.groupId || undefined), userId: this.fieldConfig.fields.userId || undefined, categoryId: this.fieldConfig.fields.categoryId || undefined, hierarchy: this.fieldConfig.fields.hierarchy || undefined, buildingId: this.fieldConfig.fields.buildingId || undefined, placeId: this.fieldConfig.fields.floorId || undefined, companyId: this.fieldConfig.fields.companyId || undefined, }; if (this.sortCurrentKey && this.sortCurrentValue) { postData.sort = `${this.sortCurrentKey} ${this.sortCurrentValue === "ascend" ? `asc` : `desc`}` } this.mainService .postExportCustom("itsm/export", "workHourIncident", postData) .subscribe((data) => { this.message.remove(this.excelExportLoading); this.excelExportLoading = false; this.message.success('导出成功'); var file = new Blob([data], { type: "application/vnd.ms-excel", }); //trick to download store a file having its URL var fileURL = URL.createObjectURL(file); var a = document.createElement("a"); a.href = fileURL; a.target = "_blank"; a.download = `${this.route.parent.routeConfig.data.title}.xls`; document.body.appendChild(a); a.click(); },(err) => { this.message.remove(this.excelExportLoading); this.excelExportLoading = false; this.message.error('导出失败'); }); } // 重置 reset(){ this.sortCurrentKey = ""; this.sortCurrentValue = ""; this.sortCurrent = {}; this.dateRange = [] this.repairDeptId = undefined; this.fieldConfig.fields = {groupId: undefined, userId: undefined, categoryId: undefined, buildingId: undefined, floorId: undefined, companyId: undefined}; this.customChangeDateComponent.resetByDate(); this.search(); } // 科室搜索 changeRepairDeptInp(e) { this.searchTimer(this.getRepairDeptList, e); } // 防抖 isLoading = false; searchTimer(fun, e) { this.isLoading = true; this.searchTimerSubject.next([fun, e]); } openChangeRepairDept(flag){ flag && this.getRepairDeptList(); } // 获取报修科室列表 repairDeptList:any[] = []; getRepairDeptList(keyword?) { let data = { department: { statisticalHosId: this.getHosId, dept: keyword, searchType: 1, }, idx: 0, sum: 20, }; this.isLoading = true; this.mainService .getFetchDataList("data", "department", data) .subscribe((data) => { this.isLoading = false; this.repairDeptList = data.list; }); } // 详细搜索 fieldConfig:any = { fields: {groupId: undefined, userId: undefined, categoryId: undefined, buildingId: undefined, floorId: undefined, companyId: undefined}, config: {groupAndUser: true, category123: true, buildingAndFloor: true, company: true}, } showSearchMore:boolean = false; showMore(){ this.showSearchMore = true; } cancelEvent(){ this.showSearchMore = false; } submitEvent(fields){ this.showSearchMore = false; this.fieldConfig.fields = fields; console.log('this.fieldConfig.fields:', this.fieldConfig.fields) this.search(); this.onResize(); } }