167 lines
4.3 KiB
TypeScript
167 lines
4.3 KiB
TypeScript
import { Component, ChangeDetectionStrategy, ChangeDetectorRef, TemplateRef, ViewChild } from '@angular/core';
|
|
import { STComponent, STColumn, STData, STChange } from '@delon/abc/st';
|
|
import { _HttpClient } from '@delon/theme';
|
|
import { NzSafeAny } from 'ng-zorro-antd/core/types';
|
|
import { NzMessageService } from 'ng-zorro-antd/message';
|
|
import { NzModalService } from 'ng-zorro-antd/modal';
|
|
import { map, tap } from 'rxjs/operators';
|
|
|
|
@Component({
|
|
selector: 'app-dashboard',
|
|
templateUrl: './dashboard.component.html',
|
|
styleUrls: ['./dashboard.component.less'],
|
|
changeDetection: ChangeDetectionStrategy.OnPush
|
|
})
|
|
export class DashboardComponent {
|
|
q: {
|
|
pi: number;
|
|
ps: number;
|
|
no: string;
|
|
sorter: string;
|
|
status: number | null;
|
|
statusList: NzSafeAny[];
|
|
} = {
|
|
pi: 1,
|
|
ps: 10,
|
|
no: '',
|
|
sorter: '',
|
|
status: null,
|
|
statusList: []
|
|
};
|
|
data: any[] = [];
|
|
loading = false;
|
|
status = [
|
|
{ index: 0, text: '关闭', value: false, type: 'default', checked: false },
|
|
{
|
|
index: 1,
|
|
text: '运行中',
|
|
value: false,
|
|
type: 'processing',
|
|
checked: false
|
|
},
|
|
{ index: 2, text: '已上线', value: false, type: 'success', checked: false },
|
|
{ index: 3, text: '异常', value: false, type: 'error', checked: false }
|
|
];
|
|
@ViewChild('st', { static: true })
|
|
st!: STComponent;
|
|
columns: STColumn[] = [
|
|
{ title: '', index: 'key', type: 'checkbox' },
|
|
{ title: '规则编号', index: 'no' },
|
|
{ title: '描述', index: 'description' },
|
|
{
|
|
title: '服务调用次数',
|
|
index: 'callNo',
|
|
type: 'number',
|
|
format: item => `${item.callNo} 万`,
|
|
sort: {
|
|
compare: (a, b) => a.callNo - b.callNo
|
|
}
|
|
},
|
|
{
|
|
title: '状态',
|
|
index: 'status',
|
|
render: 'status',
|
|
filter: {
|
|
menus: this.status,
|
|
fn: (filter, record) => record.status === filter.index
|
|
}
|
|
},
|
|
{
|
|
title: '更新时间',
|
|
index: 'updatedAt',
|
|
type: 'date',
|
|
sort: {
|
|
compare: (a, b) => a.updatedAt - b.updatedAt
|
|
}
|
|
},
|
|
{
|
|
title: '操作',
|
|
buttons: [
|
|
{
|
|
text: '配置',
|
|
click: item => this.msg.success(`配置${item.no}`)
|
|
},
|
|
{
|
|
text: '订阅警报',
|
|
click: item => this.msg.success(`订阅警报${item.no}`)
|
|
}
|
|
]
|
|
}
|
|
];
|
|
selectedRows: STData[] = [];
|
|
description = '';
|
|
totalCallNo = 0;
|
|
expandForm = false;
|
|
|
|
constructor(private http: _HttpClient, public msg: NzMessageService, private modalSrv: NzModalService, private cdr: ChangeDetectorRef) {}
|
|
|
|
ngOnInit(): void {
|
|
this.getData();
|
|
}
|
|
|
|
getData(): void {
|
|
this.loading = true;
|
|
this.q.statusList = this.status.filter(w => w.checked).map(item => item.index);
|
|
if (this.q.status !== null && this.q.status > -1) {
|
|
this.q.statusList.push(this.q.status);
|
|
}
|
|
this.http
|
|
.get('/rule?_allow_anonymous=true', this.q)
|
|
.pipe(
|
|
map((list: Array<{ status: number; statusText: string; statusType: string }>) =>
|
|
list.map(i => {
|
|
const statusItem = this.status[i.status];
|
|
i.statusText = statusItem.text;
|
|
i.statusType = statusItem.type;
|
|
return i;
|
|
})
|
|
),
|
|
tap(() => (this.loading = false))
|
|
)
|
|
.subscribe(res => {
|
|
this.data = res;
|
|
this.cdr.detectChanges();
|
|
});
|
|
}
|
|
|
|
stChange(e: STChange): void {
|
|
switch (e.type) {
|
|
case 'checkbox':
|
|
this.selectedRows = e.checkbox!;
|
|
this.totalCallNo = this.selectedRows.reduce((total, cv) => total + cv.callNo, 0);
|
|
this.cdr.detectChanges();
|
|
break;
|
|
case 'filter':
|
|
this.getData();
|
|
break;
|
|
}
|
|
}
|
|
|
|
remove(): void {
|
|
this.http.delete('/rule', { nos: this.selectedRows.map(i => i.no).join(',') }).subscribe(() => {
|
|
this.getData();
|
|
this.st.clearCheck();
|
|
});
|
|
}
|
|
|
|
approval(): void {
|
|
this.msg.success(`审批了 ${this.selectedRows.length} 笔`);
|
|
}
|
|
|
|
add(tpl: TemplateRef<{}>): void {
|
|
this.modalSrv.create({
|
|
nzTitle: '新建规则',
|
|
nzContent: tpl,
|
|
nzOnOk: () => {
|
|
this.loading = true;
|
|
this.http.post('/rule', { description: this.description }).subscribe(() => this.getData());
|
|
}
|
|
});
|
|
}
|
|
|
|
reset(): void {
|
|
// wait form reset updated finished
|
|
setTimeout(() => this.getData());
|
|
}
|
|
}
|