From 28e2efc23d3f0cca66e55ba88d7c155166990c3e Mon Sep 17 00:00:00 2001 From: 沈斌 <bluelazysb@hotmail.com> Date: Mon, 12 Mar 2018 15:19:11 +0800 Subject: [PATCH] debug --- src/app/routes/dashboard/workplace/workplace.component.html | 290 ++++++++++++++++++ src/app/routes/dashboard/workplace/workplace.component.ts | 478 ++++++++++++++++++++++++++++- src/app/routes/dashboard/workplace/workplace.component.less | 148 +++++++++ 3 files changed, 896 insertions(+), 20 deletions(-) diff --git a/src/app/routes/dashboard/workplace/workplace.component.html b/src/app/routes/dashboard/workplace/workplace.component.html index ef1a73a..9a90a97 100644 --- a/src/app/routes/dashboard/workplace/workplace.component.html +++ b/src/app/routes/dashboard/workplace/workplace.component.html @@ -37,6 +37,296 @@ </div> </ng-template> </pro-header> + +<div nz-row [nzGutter]="24" class="pt-lg" style="margin-top: -24px"> + <div nz-col nzXs="24" nzSm="12" nzMd="12" nzLg="6"> + <chart-card + [title]="'������������'" + total="�� 126,560" + contentHeight="46px" + [action]="action1" + [footer]="footer1"> + <ng-template #action1> + <nz-tooltip [nzTitle]="'������������'"> + <nz-icon nz-tooltip nzType="info-circle-o"></nz-icon> + </nz-tooltip> + </ng-template> + <trend flag="up" style="display:block; margin-top:2px;">���������<span class="pl-sm">12%</span></trend> + <trend flag="down">���������<span class="pl-sm">11%</span></trend> + <ng-template #footer1> + <p class="text-truncate">���������������<span class="ml-sm">���12,423</span></p> + </ng-template> + </chart-card> + </div> + <div nz-col nzXs="24" nzSm="12" nzMd="12" nzLg="6"> + <chart-card [title]="'���������'" + total="8,848" + contentHeight="46px" + [action]="action2" + [footer]="footer2"> + <ng-template #action2> + <nz-tooltip [nzTitle]="'������������'"> + <nz-icon nz-tooltip nzType="info-circle-o"></nz-icon> + </nz-tooltip> + </ng-template> + <mini-area + color="#975FE4" + height="46" + [data]="data.visitData"></mini-area> + <ng-template #footer2> + <p class="text-truncate">������������<span class="ml-sm">1,234</span></p> + </ng-template> + </chart-card> + </div> + <div nz-col nzXs="24" nzSm="12" nzMd="12" nzLg="6"> + <chart-card [title]="'������������'" + total="6,560" + contentHeight="46px" + [action]="action3" + [footer]="footer3"> + <ng-template #action3> + <nz-tooltip [nzTitle]="'������������'"> + <nz-icon nz-tooltip nzType="info-circle-o"></nz-icon> + </nz-tooltip> + </ng-template> + <mini-bar + height="46" + [data]="data.visitData"></mini-bar> + <ng-template #footer3> + <p class="text-truncate">���������<span class="ml-sm">60%</span></p> + </ng-template> + </chart-card> + </div> + <div nz-col nzXs="24" nzSm="12" nzMd="12" nzLg="6"> + <chart-card [title]="'������������������'" + total="78%" + contentHeight="46px" + [action]="action4" + [footer]="footer4"> + <ng-template #action4> + <nz-tooltip [nzTitle]="'������������'"> + <nz-icon nz-tooltip nzType="info-circle-o"></nz-icon> + </nz-tooltip> + </ng-template> + <mini-progress + height="46" + percent="78" + strokeWidth="8" + target="80" + color="#13C2C2"></mini-progress> + <ng-template #footer4> + <div class="d-flex justify-content-between"> + <trend flag="up">���������<span class="pl-sm">12%</span></trend> + <trend flag="down">���������<span class="pl-sm">11%</span></trend> + </div> + </ng-template> + </chart-card> + </div> +</div> +<nz-card [nzLoading]="loading" [nzBordered]="false" nzNoPadding class="sales-card"> + <ng-template #body> + <nz-tabset> + <nz-tab> + <ng-template #nzTabHeading>���������</ng-template> + <div nz-row> + <div nz-col nzXs="24" nzSm="24" nzMd="12" nzLg="16"> + <div class="bar"> + <bar + height="295" + [title]="'���������������'" + [data]="data.salesData"></bar> + </div> + </div> + <div nz-col nzXs="24" nzSm="24" nzMd="12" nzLg="8"> + <div class="rank-list"> + <h4 class="rank-title">���������������������</h4> + <ul> + <li *ngFor="let i of rankingListData; let idx = index"> + <div> + <span class="icon" [ngClass]="{'active': idx < 3}">{{idx+1}}</span> + {{i.title}} + </div> + <span>{{i.total | number: '3.0'}}</span> + </li> + </ul> + </div> + </div> + </div> + </nz-tab> + <nz-tab> + <ng-template #nzTabHeading>���������</ng-template> + <div nz-row> + <div nz-col nzXs="24" nzSm="24" nzMd="12" nzLg="16"> + <div class="bar"> + <bar + height="295" + [title]="'���������������'" + [data]="data.salesData"></bar> + </div> + </div> + <div nz-col nzXs="24" nzSm="24" nzMd="12" nzLg="8"> + <div class="rank-list"> + <h4 class="rank-title">���������������������</h4> + <ul> + <li *ngFor="let i of rankingListData; let idx = index"> + <div> + <span class="icon" [ngClass]="{'active': idx < 3}">{{idx+1}}</span> + {{i.title}} + </div> + <span>{{i.total | number: '3.0'}}</span> + </li> + </ul> + </div> + </div> + </div> + </nz-tab> + <ng-template #nzTabBarExtraContent> + <div class="sales-extra-wrap"> + <div class="sales-extra"> + <a (click)="setDate('today')">������</a> + <a (click)="setDate('week')">������</a> + <a (click)="setDate('month')">������</a> + <a (click)="setDate('year')">������</a> + </div> + <nz-datepicker style="width:120px" class="mr-md" [(ngModel)]="q.start" [nzFormat]="'YYYY-MM-DD'" [nzPlaceHolder]="'������������'"></nz-datepicker> + <nz-datepicker style="width:120px" [(ngModel)]="q.end" [nzFormat]="'YYYY-MM-DD'" [nzPlaceHolder]="'������������'"></nz-datepicker> + </div> + </ng-template> + </nz-tabset> + </ng-template> +</nz-card> +<div nz-row [nzGutter]="24"> + <div nz-col nzXs="24" nzSm="24" nzMd="24" nzLg="12"> + <nz-card [nzLoading]="loading" [nzBordered]="false" nzTitle="������������������"> + <ng-template #extra> + <nz-dropdown> + <nz-icon class="icon-group" nz-dropdown nzType="ellipsis"></nz-icon> + <ul nz-menu> + <li nz-menu-item>���������</li> + <li nz-menu-item>���������</li> + </ul> + </nz-dropdown> + </ng-template> + <ng-template #body> + <div nz-row [nzGutter]="64"> + <div nz-col nzXs="24" nzSm="12" class="mb-md"> + <number-info total="12,321" subTotal="17.1" status="up" [subTitle]="subTitle"> + <ng-template #subTitle> + ��������������� + <nz-tooltip [nzTitle]="'������������'"> + <nz-icon nz-tooltip nzType="info-circle-o" class="ml-sm"></nz-icon> + </nz-tooltip> + </ng-template> + </number-info> + <mini-area [line]="true" height="45" [data]="data.visitData2"></mini-area> + </div> + <div nz-col nzXs="24" nzSm="12" class="mb-md"> + <number-info subTitle="������������������" total="2.7" subTotal="26.2" status="down"></number-info> + <mini-area [line]="true" height="45" [data]="data.visitData2"></mini-area> + </div> + </div> + <nz-table #keyTable [nzDataSource]="data.searchData" [nzPageSize]="5" nzSize="small"> + <thead nz-thead> + <tr> + <th nz-th><span>������</span></th> + <th nz-th><span>���������������</span></th> + <th nz-th class="text-right"> + <span>���������</span> + <nz-table-sort (nzValueChange)="sort('count',$event)"></nz-table-sort> + </th> + <th nz-th class="text-right"> + <span>���������</span> + <nz-table-sort (nzValueChange)="sort('range',$event)"></nz-table-sort> + </th> + </tr> + </thead> + <tbody nz-tbody> + <tr nz-tbody-tr *ngFor="let i of keyTable.data"> + <td nz-td>{{i.index}}</td> + <td nz-td><a (click)="msg.success(i.keyword)">{{i.keyword}}</a></td> + <td nz-td class="text-right">{{i.count}}</td> + <td nz-td class="text-right"> + <trend [flag]="i.status === 1 ? 'down' : 'up'"> + <span>{{i.range}}%</span> + </trend> + </td> + </tr> + </tbody> + </nz-table> + </ng-template> + </nz-card> + </div> + <div nz-col nzXs="24" nzSm="24" nzMd="24" nzLg="12"> + <nz-card [nzLoading]="loading" [nzBordered]="false" nzTitle="���������������������" [nzBodyStyle]="{'padding.px': 24}" class="sales-card" style="min-height: 482px;"> + <ng-template #extra> + <div class="sales-card-extra"> + <nz-dropdown> + <nz-icon class="icon-group" nz-dropdown nzType="ellipsis"></nz-icon> + <ul nz-menu> + <li nz-menu-item>���������</li> + <li nz-menu-item>���������</li> + </ul> + </nz-dropdown> + <div class="sales-type-radio"> + <nz-radio-group [(ngModel)]="salesType" (ngModelChange)="changeSaleType()" [nzSize]="'large'"> + <label nz-radio-button [nzValue]="'all'"><span>������������</span></label> + <label nz-radio-button [nzValue]="'online'"><span>������</span></label> + <label nz-radio-button [nzValue]="'offline'"><span>������</span></label> + </nz-radio-group> + </div> + </div> + </ng-template> + <ng-template #body> + <h4 class="margin:8px 0 32px 0;">���������</h4> + <pie + [hasLegend]="true" + subTitle="���������" + [height]="248" + [lineWidth]="4" + [total]="salesTotal" + [data]="salesPieData" + [valueFormat]="handlePieValueFormat"> + </pie> + </ng-template> + </nz-card> + </div> +</div> +<nz-card [nzLoading]="loading" [nzBordered]="false" [nzBodyStyle]="{'padding': '0 0 32px'}" class="offline-card mt-lg"> + <ng-template #body> + <nz-tabset [(nzSelectedIndex)]="_activeTab" (nzSelectChange)="_tabChange($event)"> + <nz-tab *ngFor="let tab of data.offlineData; let i = index;"> + <ng-template #nzTabHeading> + <div nz-row [nzGutter]="8" style="width: 138px; margin: 8px 0"> + <div nz-col [nzSpan]="12"> + <number-info + [title]="tab.name" + subTitle="���������" + gap="2" + [total]="(tab.cvr * 100) + '%'" + [theme]="i !== _activeTab && 'light'"></number-info> + </div> + <div nz-col [nzSpan]="12" style="padding-top: 36px"> + <pie + [animate]="false" + [color]="i !== _activeTab && '#BDE4FF'" + [inner]="0.55" + [tooltip]="false" + [padding]="[0, 0, 0, 0]" + [percent]="tab.cvr * 100" + [height]="64"> + </pie> + </div> + </div> + </ng-template> + <div class="px-lg"> + <timeline [data]="tab.chart" + [titleMap]="{ y1: '���������', y2: '������������' }"></timeline> + </div> + </nz-tab> + </nz-tabset> + </ng-template> +</nz-card> + <div nz-row [nzGutter]="24"> <div nz-col nzXs="24" nzSm="24" nzMd="16"> <nz-card nzTitle="������������������" [nzBordered]="false" [nzLoading]="loading" nzNoPadding class="mb-lg project-list"> diff --git a/src/app/routes/dashboard/workplace/workplace.component.less b/src/app/routes/dashboard/workplace/workplace.component.less index aac89c7..c732176 100644 --- a/src/app/routes/dashboard/workplace/workplace.component.less +++ b/src/app/routes/dashboard/workplace/workplace.component.less @@ -238,4 +238,152 @@ } } } + + + + .icon-group { + transition: color 0.32s; + color: @text-color-secondary; + cursor: pointer; + margin-left: 16px; + &:hover { + color: @text-color; + } + } + + .rank-list { + padding: 0px 32px 32px 72px; + ul { + margin-top: 25px; + } + li { + zoom: 1; + margin-top: 16px; + display: flex; + justify-content: space-between; + .icon { + background-color: #f5f5f5; + border-radius: 20px; + display: inline-block; + font-size: 12px; + font-weight: 600; + margin-right: 24px; + height: 20px; + line-height: 20px; + width: 20px; + text-align: center; + } + .active { + background-color: #314659; + color: #fff; + } + } + } + + .sales-extra { + display: inline-block; + margin-right: 24px; + a { + margin-left: 24px; + } + } + + .sales-card { + .bar { + padding: 0px 0px 32px 32px; + } + .rank { + padding: 0 32px 32px 72px; + } + .ant-tabs-tab { + padding-top: 16px; + padding-bottom: 14px; + line-height: 24px; + } + + .ant-tabs-extra-content { + padding-right: 24px; + line-height: 55px; + } + + .ant-card-head { + position: relative; + } + } + + .sales-card-extra { + height: 68px; + } + + .sales-type-radio { + position: absolute; + left: 24px; + bottom: 15px; + } + + .offline-card { + .ant-tabs-ink-bar { + bottom: auto; + } + .ant-tabs-bar { + border-bottom: none; + } + .ant-tabs-nav-container-scrolling { + padding-left: 40px; + padding-right: 40px; + } + .ant-tabs-tab-prev-icon:before { + position: relative; + left: 6px; + } + .ant-tabs-tab-next-icon:before { + position: relative; + right: 6px; + } + } + + .trend-text { + margin-left: 8px; + color: @heading-color; + } + + @media screen and (max-width: @screen-lg) { + .sales-extra { + display: none; + } + + .rank-list { + li { + span:first-child { + margin-right: 8px; + } + } + } + } + + @media screen and (max-width: @screen-md) { + .rank-title { + margin-top: 16px; + } + + .sales-card .bar { + padding: 16px; + } + } + + @media screen and (max-width: @screen-sm) { + .sales-extra-wrap { + display: none; + } + + .sales-card { + .ant-tabs-content { + padding-top: 30px; + } + } + } + + .ant-table-pagination { + margin-bottom: 0; + } } diff --git a/src/app/routes/dashboard/workplace/workplace.component.ts b/src/app/routes/dashboard/workplace/workplace.component.ts index 30e2c8b..6e47987 100644 --- a/src/app/routes/dashboard/workplace/workplace.component.ts +++ b/src/app/routes/dashboard/workplace/workplace.component.ts @@ -3,6 +3,8 @@ import { NzMessageService } from 'ng-zorro-antd'; import { getTimeDistance, yuan, fixedZero } from '@delon/abc'; import { _HttpClient } from '@delon/theme'; +import {HttpClient} from '@angular/common/http'; +import * as moment from 'moment'; @Component({ selector: 'app-dashboard-workplace', @@ -76,27 +78,463 @@ ]; // endregion - constructor(private http: _HttpClient, public msg: NzMessageService) {} - - ngOnInit() { - // zip( - // this.http.get('/chart'), - // this.http.get('/api/notice'), - // this.http.get('/api/activities') - // ).subscribe(([ chart, notice, activities ]) => { - // this.radarData = chart['radarData']; - // this.notice = <any []>notice; - // this.activities = (<any []>activities).map((item: any) => { - // item.template = item.template.split(/@\{([^{}]*)\}/gi).map((key: string) => { - // if (item[key]) return `<a>${item[key].name}</a>`; - // return key; - // }); - // return item; - // }); - // this.loading = false; - // }); + ngOnDestroy(): void { } - ngOnDestroy(): void { + + data: any = { + salesData: [], + offlineData: [] + }; + + q: any = { + start: null, + end: null + }; + rankingListData: any[] = Array(7).fill({}).map((item, i) => { + return { + title: `��������� ${i} ������`, + total: 323234 + }; + }); + + constructor(private http: _HttpClient, public msg: NzMessageService, + private http2: HttpClient) {} + + ngOnInit() { + const visitData = []; + const beginDay = new Date().getTime(); + + const fakeY = [7, 5, 4, 2, 4, 7, 5, 6, 5, 9, 6, 3, 1, 5, 3, 6, 5]; + for (let i = 0; i < fakeY.length; i += 1) { + visitData.push({ + x: moment(new Date(beginDay + 1000 * 60 * 60 * 24 * i)).format( + "YYYY-MM-DD" + ), + y: fakeY[i] + }); + } + const visitData2 = []; + const fakeY2 = [1, 6, 4, 8, 3, 7, 2]; + for (let i = 0; i < fakeY2.length; i += 1) { + visitData2.push({ + x: moment(new Date(beginDay + 1000 * 60 * 60 * 24 * i)).format( + "YYYY-MM-DD" + ), + y: fakeY2[i] + }); + } + const salesData = []; + for (let i = 0; i < 12; i += 1) { + salesData.push({ + x: `${i + 1}���`, + y: Math.floor(Math.random() * 1000) + 200 + }); + } + + const salesTypeData = [ + { + x: "������������", + y: 4544 + }, + { + x: "������������", + y: 3321 + }, + { + x: "������������", + y: 3113 + }, + { + x: "������������", + y: 2341 + }, + { + x: "������������", + y: 1231 + }, + { + x: "������", + y: 1231 + } + ]; + + const salesTypeDataOnline = [ + { + x: "������������", + y: 244 + }, + { + x: "������������", + y: 321 + }, + { + x: "������������", + y: 311 + }, + { + x: "������������", + y: 41 + }, + { + x: "������������", + y: 121 + }, + { + x: '������', + y: 111 + } + ]; + + const salesTypeDataOffline = [ + { + x: '������������', + y: 99 + }, + { + x: '������������', + y: 188 + }, + { + x: '������������', + y: 344 + }, + { + x: '������������', + y: 255 + }, + { + x: '������', + y: 65 + } + ]; + + const offlineData = []; + for (let i = 0; i < 10; i += 1) { + offlineData.push({ + name: `������${i}`, + cvr: Math.ceil(Math.random() * 9) / 10 + }); + } + const offlineChartData = []; + for (let i = 0; i < 20; i += 1) { + offlineChartData.push({ + x: new Date().getTime() + 1000 * 60 * 30 * i, + y1: Math.floor(Math.random() * 100) + 10, + y2: Math.floor(Math.random() * 100) + 10 + }); + } + + const radarOriginData = [ + { + name: '������', + ref: 10, + koubei: 8, + output: 4, + contribute: 5, + hot: 7 + }, + { + name: '������', + ref: 3, + koubei: 9, + output: 6, + contribute: 3, + hot: 1 + }, + { + name: '������', + ref: 4, + koubei: 1, + output: 6, + contribute: 5, + hot: 7 + } + ]; + + const radarData = []; + const radarTitleMap = { + ref: '������', + koubei: '������', + output: '������', + contribute: '������', + hot: '������' + }; + radarOriginData.forEach(item => { + Object.keys(item).forEach(key => { + if (key !== 'name') { + radarData.push({ + name: item.name, + label: radarTitleMap[key], + value: item[key] + }); + } + }); + }); + const searchData = []; + for (let i = 0; i < 50; i += 1) { + searchData.push({ + index: i + 1, + keyword: `���������������-${i}`, + count: Math.floor(Math.random() * 1000), + range: Math.floor(Math.random() * 100), + status: Math.floor((Math.random() * 10) % 2) + }); + } + var res = { + visitData: visitData, + salesData: salesData, + visitData2: visitData2, + salesTypeData: salesTypeData, + salesTypeDataOnline: salesTypeDataOnline, + salesTypeDataOffline: salesTypeDataOffline, + offlineData: offlineData, + offlineChartData: offlineChartData, + radarOriginData: radarOriginData, + radarData: radarData, + searchData: searchData + }; + + res.offlineData.forEach((item: any) => { + item.chart = Object.assign([], res.offlineChartData); + }); + this.data = res; + this.loading = false; + this.changeSaleType(); + + this.radarData = res.radarData; + + const titles = [ + 'Alipay', + 'Angular', + 'Ant Design', + 'Ant Design Pro', + 'Bootstrap', + 'React', + 'Vue', + 'Webpack' + ]; + + const avatars = [ + 'https://gw.alipayobjects.com/zos/rmsportal/WdGqmHpayyMjiEhcKoVE.png', // Alipay + 'https://gw.alipayobjects.com/zos/rmsportal/zOsKZmFRdUtvpqCImOVY.png', // Angular + 'https://gw.alipayobjects.com/zos/rmsportal/dURIMkkrRFpPgTuzkwnB.png', // Ant Design + 'https://gw.alipayobjects.com/zos/rmsportal/sfjbOqnsXXJgNCjCzDBL.png', // Ant Design Pro + 'https://gw.alipayobjects.com/zos/rmsportal/siCrBXXhmvTQGWPNLBow.png', // Bootstrap + 'https://gw.alipayobjects.com/zos/rmsportal/kZzEzemZyKLKFsojXItE.png', // React + 'https://gw.alipayobjects.com/zos/rmsportal/ComBAopevLwENQdKWiIn.png', // Vue + 'https://gw.alipayobjects.com/zos/rmsportal/nxkuOJlFJuAUhzlMTCEe.png' // Webpack + ]; + + var notice = [ + { + id: 'xxx1', + title: titles[0], + logo: avatars[0], + description: '������������������������������ ���������������������������������������', + updatedAt: new Date(), + member: '���������������', + href: '', + memberLink: '', + }, + { + id: 'xxx2', + title: titles[1], + logo: avatars[1], + description: '���������������������������������������������������������������������������', + updatedAt: new Date('2017-07-24'), + member: '���������������������', + href: '', + memberLink: '', + }, + { + id: 'xxx3', + title: titles[2], + logo: avatars[2], + description: '������������������������������������������������������������������', + updatedAt: new Date(), + member: '���������������', + href: '', + memberLink: '', + }, + { + id: 'xxx4', + title: titles[3], + logo: avatars[3], + description: '���������������������������������������������������������������������', + updatedAt: new Date('2017-07-23'), + member: '���������������', + href: '', + memberLink: '', + }, + { + id: 'xxx5', + title: titles[4], + logo: avatars[4], + description: '������������', + updatedAt: new Date('2017-07-23'), + member: '���������������������', + href: '', + memberLink: '', + }, + { + id: 'xxx6', + title: titles[5], + logo: avatars[5], + description: '������������������������������������������������������', + updatedAt: new Date('2017-07-23'), + member: '���������������������', + href: '', + memberLink: '', + }, + ]; + this.notice = notice; + + var activities = [ + { + id: 'trend-1', + updatedAt: new Date(), + user: { + name: '���������', + avatar: avatars[0], + }, + group: { + name: '���������������������', + link: 'http://github.com/', + }, + project: { + name: '������������', + link: 'http://github.com/', + }, + template: '��� @{group} ������������ @{project}', + }, + { + id: 'trend-2', + updatedAt: new Date(), + user: { + name: '���������', + avatar: avatars[1], + }, + group: { + name: '���������������������', + link: 'http://github.com/', + }, + project: { + name: '������������', + link: 'http://github.com/', + }, + template: '��� @{group} ������������ @{project}', + }, + { + id: 'trend-3', + updatedAt: new Date(), + user: { + name: '���������', + avatar: avatars[2], + }, + group: { + name: '���������������', + link: 'http://github.com/', + }, + project: { + name: '������������', + link: 'http://github.com/', + }, + template: '��� @{group} ������������ @{project}', + }, + { + id: 'trend-4', + updatedAt: new Date(), + user: { + name: '���������', + avatar: avatars[3], + }, + project: { + name: '5 ���������������', + link: 'http://github.com/', + }, + template: '��� @{project} ������������������������', + }, + { + id: 'trend-5', + updatedAt: new Date(), + user: { + name: '���������', + avatar: avatars[4], + }, + project: { + name: '������������', + link: 'http://github.com/', + }, + comment: { + name: '������', + link: 'http://github.com/', + }, + template: '��� @{project} ��������� @{comment}', + }, + { + id: 'trend-6', + updatedAt: new Date(), + user: { + name: '������', + avatar: avatars[5], + }, + group: { + name: '���������������', + link: 'http://github.com/', + }, + project: { + name: '������������', + link: 'http://github.com/', + }, + template: '��� @{group} ������������ @{project}', + }, + ]; + this.activities = activities.map((item: any) => { + item.template = item.template.split(/@\{([^{}]*)\}/gi).map((key: string) => { + if (item[key]) return `<a>${item[key].name}</a>`; + return key; + }); + return item; + }); + } + + setDate(type: any) { + const rank = getTimeDistance(type); + this.q.start = rank[0]; + this.q.end = rank[1]; + } + + sort(sortName, sortValue) { + this.data.searchData = [ + ...(<any[]>this.data.searchData).sort((a, b) => { + if (a[ sortName ] > b[ sortName ]) { + return (sortValue === 'ascend') ? 1 : -1; + } else if (a[ sortName ] < b[ sortName ]) { + return (sortValue === 'ascend') ? -1 : 1; + } else { + return 0; + } + }) + ]; + } + + salesType = 'all'; + salesPieData: any; + salesTotal = 0; + changeSaleType() { + this.salesPieData = this.salesType === 'all' ? this.data.salesTypeData : ( + this.salesType === 'online' ? this.data.salesTypeDataOnline : this.data.salesTypeDataOffline + ); + if (this.salesPieData) this.salesTotal = this.salesPieData.reduce((pre, now) => now.y + pre, 0); + } + + handlePieValueFormat(value: any) { + return yuan(value); + } + + _activeTab = 0; + _tabChange(value: any) { + console.log('tab', this._activeTab, value); } } -- Gitblit v1.8.0