import { Component, Input, OnInit } from '@angular/core'; import { CommonModule } from '@angular/common'; import { NzSpaceModule } from 'ng-zorro-antd/space'; import { CommonCompModule } from '../../../../services/common.modules'; import { ActivatedRoute, Router } from '@angular/router'; import { NzMessageModule } from 'ng-zorro-antd/message'; import { NzMessageService } from 'ng-zorro-antd/message'; import Parse from 'parse'; import { textbookServer } from '../../../../services/textbook'; import { NzModalService } from 'ng-zorro-antd/modal'; import { MatDialog } from '@angular/material/dialog'; import { NzEmptyModule } from 'ng-zorro-antd/empty'; import { DatePipe } from '@angular/common'; import { NzPopoverModule } from 'ng-zorro-antd/popover'; @Component({ selector: 'app-review-details', templateUrl: './review-details.component.html', styleUrls: ['./review-details.component.scss'], imports: [ CommonModule, NzSpaceModule, CommonCompModule, NzMessageModule, NzEmptyModule, NzPopoverModule, ], providers: [DatePipe], standalone: true, }) export class ReviewDetailsComponent implements OnInit { reviewList: Array = []; count: number = 0; @Input('limit') limit: number = 10; pageIndex: number = 1; loading: boolean = false; @Input('maxWidth') maxWidth: any; //最大宽度 @Input('eduProcess') eduProcess?: Parse.Object; //流程id,verify存在时需要 @Input('listOfFilter') listOfFilter: Array = []; //评审组 @Input('filterObj') filterObj: any = { showGroup: false, contained: [], bookMap: {}, //教材对应评审组结构{booid:评审组名称} }; searchValue: string = ''; listOfColumns: any = { lang: { // listOfFilter: [{ value: '中文', text: '中文' }], onChange: (data: Array) => { console.log(data); if (data?.length < 1) { this.filterObj.contained = Object.keys(this.filterObj.bookMap); } else { this.filterObj.contained = []; for (const key in this.filterObj.bookMap) { const item = this.filterObj.bookMap[key]; if (data.includes(item.id)) { this.filterObj.contained.push(key); } } } this.getTextbook(this.searchValue); }, }, }; showLoading: boolean = false; //全局 time: any; /* 格式化拓展表字段 */ fromatFiled(list: Array, filed: string): string { let arr: Array = []; let isDate = false; list.forEach((item: Parse.Object) => { // arr.add(item.get(filed)) if ( isDate || Object.prototype.toString.call(item.get(filed)).indexOf('Date') != -1 ) { arr.push(this.datePipe.transform(item.get(filed), 'yyyy-MM')); isDate = true; } else { arr.push(item.get(filed)); } }); let j = Array.from(arr).join(','); if (!isDate) { j = Array.from(new Set(arr)).join(' '); } return j || '-'; } constructor( private activeRoute: ActivatedRoute, public tbookSer: textbookServer, private router: Router, private msg: NzMessageService, public dialog: MatDialog, private route: Router, private datePipe: DatePipe, private modal: NzModalService ) {} ngOnInit() { this.getTextbook(); } async getTextbook(val?: string, exported?: boolean): Promise { if (this.loading) return; if (!exported) this.loading = true; try { let queryParams: any = { where: { $or: [ { eduTextbook: { $inQuery: { where: { $or: [ { title: { $regex: `.*${val || ''}.*` }, }, { childrens: { $inQuery: { where: { $or: [ { ISBN: { $regex: `.*${val || ''}.*` }, }, { author: { $regex: `.*${val || ''}.*` }, }, ], }, className: 'EduTextbookVolume', }, }, }, ], }, className: 'EduTextbook', }, }, }, { profile: { $inQuery: { where: { $or: [ { user: { $inQuery: { where: { $or: [ { name: { $regex: `.*${val || ''}.*` }, }, ], }, className: '_User', }, }, }, ], }, className: 'Profile', }, }, }, ], eduTextbook: { $in: this.filterObj.contained }, }, }; let query = Parse.Query.fromJSON('EduReview', queryParams); this.eduProcess?.id && query.equalTo('eduProcess', this.eduProcess.id); query.descending('updatedAt'); query.notEqualTo('isDeleted', true); query.exists('score'); query.equalTo('verify',true) query.include( 'eduTextbook', 'eduTextbook.childrens', 'profile', 'profile.user' ); this.count = await query.count(); query.limit(this.limit); query.skip(this.limit * (this.pageIndex - 1)); if (exported) { query.limit(1000); let r = await query.find(); this.loading = false; return r; } this.reviewList = await query.find(); console.log(this.reviewList); this.loading = false; } catch (err) { console.warn(err); this.msg.error('获取超时'); } this.loading = false; } onSearch(e: string) { this.pageIndex = 1; console.log(e); if (this.time) clearTimeout(this.time); this.time = setTimeout(() => { this.getTextbook(e); }, 500); } //分页切换 pageIndexChange(e: any) { console.log(e); this.pageIndex = e; this.getTextbook(this.searchValue); } //切换分页条数 onPageSizeChange(): void { console.log(this.limit); // this.onAllChecked(false) this.pageIndex = 1; this.getTextbook(this.searchValue); } toUrl(url: string, param?: Object) { console.log(url); if (param) { this.route.navigate([url, param]); return; } this.route.navigate([url]); } //导出表格 async export() { if (this.showLoading) return; this.showLoading = true; try { let table; let data: any = await this.getTextbook('', true); if (this.filterObj.showGroup) { table = this.getActivityTable(data); } else { table = this.getTable(data); } let title = '评审明细表'; this.excel(table, `${title}.xls`); this.showLoading = false; } catch (err) { console.log(err); this.showLoading = false; this.msg.error('导出超时'); } } //合并后(活动详情) getActivityTable(data: Array): string { let groupMap: any = {}; data.forEach((item: Parse.Object) => { let obj = { name: item?.get('profile')?.get('user')?.get('name'), score: item?.get('score'), }; if (!groupMap[item?.get('eduTextbook')?.id]) { groupMap[item?.get('eduTextbook')?.id] = { eduTextbook: item?.get('eduTextbook'), groupList: [obj], }; } else { groupMap[item?.get('eduTextbook')?.id]['groupList'].push(obj); } }); console.log(groupMap); let table = ` `; let l = 0; let dataLsit: any = Object.values(groupMap); dataLsit.forEach((val: any) => { if (val?.groupList.length > l) l = val?.groupList.length; }); for (let index = 0; index < l; index++) { table += ``; } table += ` `; let _body = ''; for (var row = 0; row < dataLsit.length; row++) { _body += ''; _body += ''; _body += ''; _body += ''; _body += ''; _body += ''; _body += ''; _body += ''; for (let i = 0; i < l; i++) { const element = dataLsit[row]['groupList'][i]; _body += ''; } // _body += ''; // _body += ''; // _body += ''; _body += ''; _body += ''; } table += _body; table += ''; table += '
序号 教材申报编号 申报教材名称 所属学科专业类 第一主编/作者 出版单位 所属评审组评审专家${index + 1}平均分值(若为空请点击计算后再导出)
'; _body += `${row + 1}`; _body += ''; _body += ` ${dataLsit[row]?.eduTextbook?.get('code') || ''}`; _body += ''; _body += ` ${dataLsit[row]?.eduTextbook?.get('title') || ''}`; _body += ''; _body += ` ${ (dataLsit[row]?.eduTextbook?.get('majorPoniter')?.code || '') + '/' + dataLsit[row]?.eduTextbook?.get('majorPoniter')?.name || '' }`; _body += ''; _body += ` ${this.fromatFiled( dataLsit[row]?.eduTextbook?.get('childrens'), 'author' )}`; _body += ''; _body += `${this.fromatFiled( dataLsit[row]?.eduTextbook?.get('childrens'), 'editionUnit' )}`; _body += ''; _body += `${this.filterObj.bookMap[dataLsit[row]?.eduTextbook?.id].name}`; _body += ''; _body += `${element?.name ?? ''} ${element?.score??''}`; _body += ''; // _body += `  ${ // this.filterObj.bookMap[dataLsit[row]?.eduTextbook?.id].name || '-' // }`; // _body += ''; // _body += `${ // dataLsit[row]?.get('profile')?.get('user')?.get('name') || '-' // }`; // _body += ''; // _body += ` ${this.datePipe.transform( // dataLsit[row]?.updatedAt, // 'yyyy-MM-dd HH:mm:ss' // )}`; // _body += ''; _body += `${dataLsit[row]?.eduTextbook?.get('score') ?? '-'}`; _body += '
'; return table; } //非合并(评审组详情) getTable(data: Array): string { let table = ` `; let _body = ''; for (var row = 0; row < data.length; row++) { _body += ''; _body += ''; _body += ''; _body += ''; _body += ''; _body += ''; _body += ''; // if (this.filterObj.showGroup) { // _body += ''; // } _body += ''; _body += ''; _body += ''; _body += ''; } table += _body; table += ''; table += '
序号 教材申报编号 申报教材名称 所属学科专业类 第一主编/作者 出版单位 评审专家 提交时间 分值
'; _body += `${row + 1}`; _body += ''; _body += ` ${data[row]?.get('eduTextbook')?.get('code') || ''}`; _body += ''; _body += ` ${data[row]?.get('eduTextbook')?.get('title') || ''}`; _body += ''; _body += ` ${ (data[row]?.get('eduTextbook')?.get('majorPoniter')?.code || '') + '/' + data[row]?.get('eduTextbook')?.get('majorPoniter')?.name || '' }`; _body += ''; _body += ` ${this.fromatFiled( data[row]?.get('eduTextbook')?.get('childrens'), 'author' )}`; _body += ''; _body += `${this.fromatFiled( data[row]?.get('eduTextbook')?.get('childrens'), 'editionUnit' )}`; _body += ''; // _body += `  ${ // this.filterObj.bookMap[data[row]?.get('eduTextbook')?.id].name || // '-' // }`; // _body += ''; _body += `${data[row]?.get('profile')?.get('user')?.get('name') || '-'}`; _body += ''; _body += ` ${this.datePipe.transform( data[row]?.updatedAt, 'yyyy-MM-dd HH:mm:ss' )}`; _body += ''; _body += `${data[row]?.get('score') ?? '-'}`; _body += '
'; return table; } excel(data: any, filename: string) { let html = ""; html += ''; html += ''; html += ''; html += ''; html += ''; html += data; html += ''; html += ''; let uri = 'data:application/vnd.ms-excel;charset=utf-8,' + encodeURIComponent(html); let link = document.createElement('a'); link.href = uri; link.download = `${filename}`; document.body.appendChild(link); link.click(); document.body.removeChild(link); } }