import { Component, OnInit, Input, Output, EventEmitter, ViewChild, ViewEncapsulation } from '@angular/core'; import { PaginationControlsComponent, PaginationInstance } from '@farris/ui-pagination'; import { DiscussionListService } from './discussion-list.service'; @Component({ selector: 'farris-discussion-list', templateUrl: './discussion-list.component.html', styleUrls: ['./discussion-list.component.scss'], encapsulation: ViewEncapsulation.None }) export class DiscussionListComponent implements OnInit { // @Input() personnelsPrimaryKey: string = 'userId'; @Input() personnelsDisplayKey = 'userName'; @Input() pagerOnServer = true; /* *是否支持分页 */ @Input() supportPaging = true; /** 总页数 */ // @Input() pageSize:number; /** 当前页码 */ @Input() pageIndex = 1; /** 每页显示条数选项 */ // private _pageList = [10,20,30,50]; // get pageList() { // return this._pageList; // } // @Input() set pageList(val) { // this._pageList = val; // if (this.pager) { // this.pager.setPageList(val); // } // } /** 总条数 */ private _total = 0; get total() { return this._total; } @Input() set total(val) { this._total = val; // this.paginationOptions.totalItems = val; this.initPaginationOptions(); // if(val){ // this.initPaginationOptions(); // } } /** 每页显示个数 */ private _pageSize = 10; get pageSize() { return this._pageSize; } @Input() set pageSize(val) { this._pageSize = val; // this.paginationOptions.itemsPerPage = val; this.initPaginationOptions(); } /** 总条数 */ // @Input() total = 0; /** 评论数据 */ innerDiscussionData = []; _discussionData = []; @Input() set discussionData(val) { if (val) { this._discussionData = val; this.innerDiscussionData = val; } } get discussionData() { return this._discussionData; } @Output() replyMessage = new EventEmitter(); // 分页事件 @Output() pageChanged = new EventEmitter(); @Output() pageSizeChanged = new EventEmitter(); /** 附件预览 */ @Output() filePreview = new EventEmitter(); /** 附件下载 */ @Output() fileDownload = new EventEmitter(); public labels: any = { previousLabel: ' ', nextLabel: ' ' }; public directionLinks = true; public maxSize = 7; public responsive = true; public autoHide = false; paginationOptions: PaginationInstance; @ViewChild('pager') pager: PaginationControlsComponent; constructor(private discussionListService: DiscussionListService) { } ngOnInit() { // this.paginationOptions = { // id: 'Farris-discussion-Pagination', // itemsPerPage: this.pageSize, // currentPage: this.pageIndex, // // pageList: this.pageList, // totalItems: this.total // }; this.initPaginationOptions(); /** 监听指令得到的数据 */ this.discussionListService.getData().subscribe((data: any): void => { if (data && !this._discussionData.length) { this.innerDiscussionData = data; } }); } initPaginationOptions() { this.paginationOptions = { id: 'Farris-discussion-Pagination', itemsPerPage: this._pageSize, currentPage: this.pageIndex, pageList: [10, 20, 30, 50, 100], totalItems: this._total, remote: this.pagerOnServer }; } /** 点击回复留言 */ reply(item) { this.replyMessage.emit(item); } /** 页码变化 */ onPageChange(page: { pageIndex: number, pageSize: number }) { if (this.pageIndex !== page.pageIndex) { this.pageIndex = page.pageIndex; this.paginationOptions.currentPage = page.pageIndex; this.pageChanged.emit({ pageInfo: page }); } } /** 每页显示条数变化 */ onPageSizeChange(pageSize: number) { if (this.pageSize !== pageSize && this.total) { this.paginationOptions.itemsPerPage = pageSize; this.pageSize = pageSize; const total = this.total; let pageLength = Math.floor(total / pageSize); if (total % pageSize > 0) { pageLength += 1; } if (pageLength && this.pageIndex > pageLength) { this.pageIndex = pageLength; this.paginationOptions.currentPage = this.pageIndex; } this.pageSizeChanged.emit({ pageInfo: { pageIndex: this.pageIndex, pageSize: pageSize } }); } } /** 附件预览 */ filePreviewEventHandler(info) { this.filePreview.emit(info); } /** 附件下载 */ fileDownloadEventHandler(info) { this.fileDownload.emit(info); } /** 占位头像文字 */ getAvatar(item) { if (item && item[this.personnelsDisplayKey]) { let str = item[this.personnelsDisplayKey]; return str.substring(str.length - 2, str.length); } else { return ''; } } }