//后端每页返回的数据拼接的数组
eventsConcatResult = (events: any[]) => {
let eventExcel:any[]=[]
for (let j = 0; j < events.length; j++) {
let array = [];
array.push(events[j].camera['_id'])
array.push(events[j].camera.alias)
array.push((events[j].camera.parent && events[j].camera.parent['_id']) ? events[j].camera.parent['_id'] : "无")
array.push((events[j].camera.parent.parent && events[j].camera.parent.parent['_id']) ? events[j].camera.parent.parent['_id'] : "无")
array.push(events[j].category)
switch (events[j].category) {
case 0:
array.push("产品")
break;
case 1:
array.push("报警")
break;
case -1:
array.push("未知")
break;
default:
break;
}
array.push(events[j].code)
switch (events[j].code) {
case 1:
array.push("人进入")
break;
case 2:
array.push("人离开")
break;
case 3:
array.push("人停留")
break;
case -1:
array.push("未知")
break;
default:
break;
}
array.push(`${this.utilsService.$server}${events[j].video_url}`)
array.push(events[j].event_timeStamp)
array.push(events[j].timeStamp)
eventExcel.push(array)
}
return eventExcel;
};
//采用递归的方法实现循环内异步调用接口,并且循环一页将这页拼接的数组放到excel流里。
excel(condition: EventSearchCondition) {
this.wb= XLSX.utils.book_new();
this.ws = XLSX.utils.aoa_to_sheet(this.excelData);
this.utilsService.$http.post<any>(this.utilsService.$server + '/api/events', {
condition: condition,
sort: this.sort.active || null,
order: this.sort.direction || null,
pageNumber: 0,
entriesPerPage: this.entriesPerPage
}).subscribe(async (events: any) => {
let pagesTotalCount = Math.ceil(events.totalEvents / this.entriesPerPage)-1
const fetchSinglePage = (pageNumber: number): void => {
if (pageNumber>pagesTotalCount){
console.log(this.ws)
XLSX.utils.book_append_sheet(this.wb, this.ws, 'event');
XLSX.writeFile(this.wb, '事件记录.xlsx');
return;
}
this.utilsService.$http.post<any>(this.utilsService.$server + '/api/events', {
condition: condition,
sort: this.sort.active || null,
order: this.sort.direction || null,
pageNumber:pageNumber,
entriesPerPage: this.entriesPerPage
}).subscribe((item: any) => {
XLSX.utils.sheet_add_aoa(this.ws, this.eventsConcatResult(item.eventsList),{origin: -1});
// console.log(this.ws)
fetchSinglePage(pageNumber + 1)
})
}
fetchSinglePage(0)
})
}
//调用接口
async ExportExcel(){
//获取原生的所有events
await this.excel(this.searchCondition)
}
//前端按钮
<button mat-button color="primary" (click)="ExportExcel()">{{ 'Export' | translate }}</button>
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。