瀏覽代碼

每行数可配置,完善样式

master
父節點
當前提交
96b3dd80c6
共有 3 個檔案被更改,包括 136 行新增210 行删除
  1. +34
    -51
      src/app/routes/data-v/s1/s1.component.html
  2. +38
    -8
      src/app/routes/data-v/s1/s1.component.less
  3. +64
    -151
      src/app/routes/data-v/s1/s1.component.ts

+ 34
- 51
src/app/routes/data-v/s1/s1.component.html 查看文件

@@ -1,45 +1,41 @@
<div nz-row [nzGutter]="16" class="s1-container"> <div nz-row [nzGutter]="16" class="s1-container">
<div nz-col nzSpan="8"> <div nz-col nzSpan="8">
<data-v-card title="系统状态"> <data-v-card title="系统状态">
<div nz-row style="justify-content: center;align-items: center;">
<div nz-row style="justify-content: center; align-items: center">
<div nz-col nzSpan="12"> <div nz-col nzSpan="12">
<div class="centered-element"> <div class="centered-element">
<app-chart-component [options]="chart_options" style="width: 26rem; height: 11rem;" />

<app-chart-component [options]="chart_options" style="width: 26rem; height: 11rem" />
</div> </div>
<div class="sys-status-title">系统健康度</div> <div class="sys-status-title">系统健康度</div>
</div> </div>
<div nz-col nzSpan="12"> <div nz-col nzSpan="12">
<div class="centered-element"> <div class="centered-element">
<app-chart-component [options]="chart_options0" style="width: 26rem; height: 11rem;" />

<app-chart-component [options]="chart_options0" style="width: 26rem; height: 11rem" />
</div> </div>
<div class="sys-status-title">设备投运度</div> <div class="sys-status-title">设备投运度</div>
</div> </div>
</div> </div>
</data-v-card> </data-v-card>


<data-v-card title="系统操作记录" style="margin-top: 1rem;">
<ag-grid-angular [rowData]="rowData" [columnDefs]="colDefs1" class="ag-theme-datav">
</ag-grid-angular>
<data-v-card title="系统操作记录" style="margin-top: 1rem">
<ag-grid-angular [rowData]="rowData" [columnDefs]="colDefs1" class="ag-theme-datav"> </ag-grid-angular>
</data-v-card> </data-v-card>


<data-v-card title="系统报警信息" style="margin-top: 1rem;">
<ag-grid-angular [rowData]="rowData" [columnDefs]="colDefs2" class="ag-theme-datav">
</ag-grid-angular>
<data-v-card title="系统报警信息" style="margin-top: 1rem">
<ag-grid-angular [rowData]="rowData" [columnDefs]="colDefs2" class="ag-theme-datav"> </ag-grid-angular>
</data-v-card> </data-v-card>


<data-v-card title="" style="margin-top: 1rem;">
<data-v-card title="" style="margin-top: 1rem">
<!-- <div class="progress-display">完成样品数量/时长 16/8</div> --> <!-- <div class="progress-display">完成样品数量/时长 16/8</div> -->
<div class="progress-container"> <div class="progress-container">
<span class="status-text">化验效率:</span> <span class="status-text">化验效率:</span>
<nz-progress [nzPercent]="64" [nzStrokeColor]="'#74FAFB'" style="width: 100%; "></nz-progress>
<nz-progress [nzPercent]="64" [nzStrokeColor]="'#74FAFB'" style="width: 100%"></nz-progress>
<span class="status-ext-text">(16/25)</span> <span class="status-ext-text">(16/25)</span>
</div> </div>


<div class="progress-container mt-sm"> <div class="progress-container mt-sm">
<span class="status-text">完 成 率 :</span> <span class="status-text">完 成 率 :</span>
<nz-progress [nzPercent]="60" [nzStrokeColor]="'#74FAFB'" style="width: 100%;"></nz-progress>
<nz-progress [nzPercent]="60" [nzStrokeColor]="'#74FAFB'" style="width: 100%"></nz-progress>
<span class="status-ext-text">(12/20)</span> <span class="status-ext-text">(12/20)</span>
</div> </div>
</data-v-card> </data-v-card>
@@ -47,56 +43,43 @@


<div nz-col nzSpan="8"> <div nz-col nzSpan="8">
<data-v-card title=""> <data-v-card title="">
<div style="height: 34.6rem;">
<img src="assets/dashboard/dashboard_ws_demo1.png" style="width: 100%;" />
<div style="height: 34.6rem">
<img src="assets/dashboard/dashboard_ws_demo1.png" style="width: 100%" />


<div nz-row style="justify-content: center;align-items: center;margin-top: 0.5rem;">
<div nz-col nzSpan="12" class="sys-status-title">
机器人
</div>
<div nz-col nzSpan="12" class="sys-status-title">
全硫仪
</div>
<div nz-col nzSpan="12" class="sys-status-title">
全水分析仪
</div>
<div nz-col nzSpan="12" class="sys-status-title">
挥发分仪
</div>
<div nz-col nzSpan="12" class="sys-status-title">
量热仪
</div>
<div nz-col nzSpan="12" class="sys-status-title">
谈情氮元素
</div>
<div nz-row style="justify-content: center; align-items: center; margin-top: 0.5rem">
<div nz-col nzSpan="12" class="sys-status-title"> 机器人 </div>
<div nz-col nzSpan="12" class="sys-status-title"> 全硫仪 </div>
<div nz-col nzSpan="12" class="sys-status-title"> 全水分析仪 </div>
<div nz-col nzSpan="12" class="sys-status-title"> 挥发分仪 </div>
<div nz-col nzSpan="12" class="sys-status-title"> 量热仪 </div>
<div nz-col nzSpan="12" class="sys-status-title"> 谈情氮元素 </div>
</div> </div>
</div> </div>
</data-v-card> </data-v-card>
</div> </div>


<div nz-col nzSpan="8"> <div nz-col nzSpan="8">
<data-v-card title="化验结果" [showSetting]="true" [optionsList]="optionsCheckList"
<data-v-card title="化验结果" [showSetting]="true" [optionsList]="chartConfig.optionsCheckList"
(onCheckedItemsChange)="handleCheckedItems($event)"> (onCheckedItemsChange)="handleCheckedItems($event)">
<div class="scrollable-container">
@for (item of optionsCheckList; track item) {
<div *ngIf="item.checked" class="centered-element">
<app-chart-component [options]="item.options" style="width: 80%; height: 16rem;" />
<div nz-row class="scrollable-container">
@for (item of chartConfig.optionsCheckList; track item) {
<div nz-col [nzSpan]="24 / chartConfig.rowNumber" *ngIf="item.checked" class="centered-element">
<!-- 添加上下外边距 -->
<app-chart-component [options]="item.options"
[style]="{'margin': '20px ' + (20 / chartConfig.rowNumber) + 'px','width': '100%', 'height': '16rem'}"
*ngIf="item.checked" />
</div> </div>
} }
</div> </div>
<div nz-row style="justify-content: center;align-items: center;margin-top: 0.4rem;">
<div nz-row>
@for (item of chartConfig.optionBottomList; track item) {
<div nz-col nzSpan="12"> <div nz-col nzSpan="12">
<div class="centered-element">
<app-chart-component [options]="chart_options3" style="width: 26rem; height: 11rem;" />
</div>
</div>
<div nz-col nzSpan="12">
<div class="centered-element">
<app-chart-component [options]="chart_options4" style="width: 26rem; height: 11rem;" />

<div class="centered-element" style="margin: 2px">
<app-chart-component [options]="item" style="width: 26rem; height: 11rem; margin-left: 0.4rem" />
</div> </div>
</div> </div>
}
</div> </div>
</data-v-card> </data-v-card>
</div>
</div>
</div>

+ 38
- 8
src/app/routes/data-v/s1/s1.component.less 查看文件

@@ -28,14 +28,7 @@
height: 5rem; height: 5rem;
} }


.scrollable-container {
overflow-y: auto;
/* 水平滚动关闭,垂直滚动开启 */
width: 100%;
/* 或者指定一个固定的宽度 */
height: 20rem;
/* 根据需求设置容器的高度以触发滚动条 */
}



.centered-element { .centered-element {
display: flex; display: flex;
@@ -100,4 +93,41 @@


.white-color-theme { .white-color-theme {
color: #74FAFB; color: #74FAFB;
}




//滚动
.scrollable-container {
scrollbar-color: auto;
overflow-y: auto;
/* 水平滚动关闭,垂直滚动开启 */
width: 100%;
/* 或者指定一个固定的宽度 */
height: 20rem;
/* 根据需求设置容器的高度以触发滚动条 */
}

::ng-deep ::-webkit-scrollbar {
width: 10px;
/* 滚动条宽度 */
}

::ng-deep ::-webkit-scrollbar-track {
background-color: #0A1632;
/* 轨道颜色 */
}

/** 滚动条样式 */
::ng-deep ::-webkit-scrollbar-thumb {
background-color: #74FAFB;
/* 按钮颜色 */
border-radius: 2px;
/* 按钮圆角 */
}

::ng-deep ::-webkit-scrollbar-thumb:hover {
background-color: #74FAFB;
/* 滑动时按钮颜色 */
} }

+ 64
- 151
src/app/routes/data-v/s1/s1.component.ts 查看文件

@@ -11,11 +11,10 @@ import { DataVTitleComponent } from '../title/title.component';
import { ColDef } from 'ag-grid-community'; // Column Definition Type Interface import { ColDef } from 'ag-grid-community'; // Column Definition Type Interface
import { NzProgressModule } from 'ng-zorro-antd/progress'; import { NzProgressModule } from 'ng-zorro-antd/progress';
import { NzBadgeModule } from 'ng-zorro-antd/badge'; import { NzBadgeModule } from 'ng-zorro-antd/badge';
import { Subscription } from 'rxjs';
import { Subscription, finalize } from 'rxjs';
import { IMqttMessage, MqttService } from 'ngx-mqtt'; import { IMqttMessage, MqttService } from 'ngx-mqtt';
import { ChartComponentComponent } from './chart-component/chart-component.component'; import { ChartComponentComponent } from './chart-component/chart-component.component';
import { NzListModule } from 'ng-zorro-antd/list'; import { NzListModule } from 'ng-zorro-antd/list';

@Component({ @Component({
selector: 'app-data-v-s1', selector: 'app-data-v-s1',
standalone: true, standalone: true,
@@ -26,20 +25,23 @@ import { NzListModule } from 'ng-zorro-antd/list';
export class DataVS1Component implements OnInit { export class DataVS1Component implements OnInit {
private readonly http = inject(_HttpClient); private readonly http = inject(_HttpClient);
private readonly modal = inject(ModalHelper); private readonly modal = inject(ModalHelper);
optionsCheckList = [
{ label: '全水', options: {}, checked: true },
{ label: '热值', options: {}, checked: true },
{ label: '全硫', options: {}, checked: false },
{ label: '内水', options: {}, checked: false },
{ label: '灰分', options: {}, checked: false },
{ label: '挥发分', options: {}, checked: false },
{ label: '碳', options: {}, checked: false },
{ label: '氢', options: {}, checked: false },
{ label: '氮', options: {}, checked: false },
];
chartConfig = {
//每行数
rowNumber: 1,
//check 表格
optionsCheckList: [
{ label: '全水', options: {}, checked: true },
{ label: '热值', options: {}, checked: true },
{ label: '全硫', options: {}, checked: false },
{ label: '内水', options: {}, checked: false },
{ label: '灰分', options: {}, checked: false },
{ label: '挥发分', options: {}, checked: false },
],
//底部
optionBottomList: [{}]
};
handleCheckedItems(checkedItems: { label: string, checked: boolean }[]) { handleCheckedItems(checkedItems: { label: string, checked: boolean }[]) {
console.log('当前选中的项目:', checkedItems); console.log('当前选中的项目:', checkedItems);
// 在此处添加更多逻辑来处理这些选中项
} }
chart_options = {} chart_options = {}
chart_options0 = {} chart_options0 = {}
@@ -47,127 +49,20 @@ export class DataVS1Component implements OnInit {
chart_options2 = {} chart_options2 = {}
chart_options3 = {} chart_options3 = {}
chart_options4 = {} chart_options4 = {}


rowData = [
{
rwmc: '任务1',
rwms: '任务描述1',
kssj: '2024-1-1',
jhwcsj: '2024-1-2',
sfcq: '否',
dqzt: '正常',
dqjd: '节点1',
sjwcsj: '2024-1-2',
bjmc: '报警1',
bjms: '报警描述1',
bjsj: '2024-1-1',
gzyy: '-',
clff: '-',
tzsj: '2024-1-2',
zycd: '一般',
tzmc: '系统提示',
tznr: '账户登录',
fj: '-'
},
{
rwmc: '任务2',
rwms: '任务描述2',
kssj: '2024-1-2',
jhwcsj: '2024-1-3',
sfcq: '否',
dqzt: '正常',
dqjd: '节点2',
sjwcsj: '2024-1-2',
bjmc: '报警2',
bjms: '报警描述2',
bjsj: '2024-1-2',
gzyy: '-',
clff: '-',
tzsj: '2024-1-2',
zycd: '一般',
tzmc: '系统提示',
tznr: '账户登录',
fj: '-'
},
{
rwmc: '任务3',
rwms: '任务描述3',
kssj: '2024-1-3',
jhwcsj: '2024-1-4',
sfcq: '否',
dqzt: '正常',
dqjd: '节点3',
sjwcsj: '2024-1-2',
bjmc: '报警3',
bjms: '报警描述3',
bjsj: '2024-1-3',
gzyy: '-',
clff: '-',
tzsj: '2024-1-2',
zycd: '一般',
tzmc: '系统提示',
tznr: '账户登录',
fj: '-'
},
{
rwmc: '任务4',
rwms: '任务描述4',
kssj: '2024-1-4',
jhwcsj: '2024-1-5',
sfcq: '否',
dqzt: '正常',
dqjd: '节点4',
sjwcsj: '2024-1-2',
bjmc: '报警4',
bjms: '报警描述4',
bjsj: '2024-1-4',
gzyy: '-',
clff: '-',
tzsj: '2024-1-2',
zycd: '一般',
tzmc: '系统提示',
tznr: '账户登录',
fj: '-'
},
{
rwmc: '任务5',
rwms: '任务描述5',
kssj: '2024-1-5',
jhwcsj: '2024-1-6',
sfcq: '否',
dqzt: '正常',
dqjd: '节点5',
sjwcsj: '2024-1-2',
bjmc: '报警5',
bjms: '报警描述5',
bjsj: '2024-1-5',
gzyy: '-',
clff: '-',
tzsj: '2024-1-2',
zycd: '一般',
tzmc: '系统提示',
tznr: '账户登录',
fj: '-'
}
];

rowData: object[] = [];
colDefs1: ColDef[] = [ colDefs1: ColDef[] = [
{ headerName: '时间', field: 'rwmc', flex: 1 }, { headerName: '时间', field: 'rwmc', flex: 1 },
{ headerName: '系统/设备', field: 'rwms', flex: 1 }, { headerName: '系统/设备', field: 'rwms', flex: 1 },
{ headerName: '操作描述', field: 'kssj', flex: 1 }, { headerName: '操作描述', field: 'kssj', flex: 1 },
{ headerName: '操作人员', field: 'jhwcsj', flex: 1 } { headerName: '操作人员', field: 'jhwcsj', flex: 1 }
]; ];

colDefs2: ColDef[] = [ colDefs2: ColDef[] = [
{ headerName: '序号', field: 'rwmc', flex: 1 }, { headerName: '序号', field: 'rwmc', flex: 1 },
{ headerName: '时间', field: 'kssj', flex: 2 }, { headerName: '时间', field: 'kssj', flex: 2 },
{ headerName: '任务描述', field: 'rwms', flex: 1 }, { headerName: '任务描述', field: 'rwms', flex: 1 },
{ headerName: '等级', field: 'dqzt', flex: 1.5 } { headerName: '等级', field: 'dqzt', flex: 1.5 }
]; ];

private subscription: Subscription; private subscription: Subscription;

constructor(private _mqttService: MqttService) { constructor(private _mqttService: MqttService) {
this.subscription = this._mqttService.observe('s1').subscribe((message: IMqttMessage) => { this.subscription = this._mqttService.observe('s1').subscribe((message: IMqttMessage) => {
const messagePayload = JSON.parse(message.payload.toString()); const messagePayload = JSON.parse(message.payload.toString());
@@ -175,9 +70,16 @@ export class DataVS1Component implements OnInit {
this.chart_options0 = messagePayload.msg; this.chart_options0 = messagePayload.msg;
}); });
} }

ngOnInit(): void { ngOnInit(): void {

/** 获取服务器配置 */
this.getServerConfig();
for (var i = 1; i < 30; i++) {
this.rowData.push({
rwmc: '任务' + i, rwms: '任务描述' + i, kssj: '2024-1-' + i + ' 13:38:' + i * 11, jhwcsj: '2024-1-' + i + ' 13:38:' + i * 10, sfcq: '否',
dqzt: "正常", dqjd: "节点" + i, sjwcsj: '2024-1-' + i + ' 13:38:' + i * 27, bjmc: "报警5", bjms: "报警描述5", bjsj: '2024-1-' + i + ' 13:38:' + i * 12,
gzyy: "-", clff: "-", tzsj: '2024-1-' + i + ' 13:38:' + i * 19, zycd: "一般", tzmc: '系统提示', tznr: '账户登录', fj: "-", cz: "操作"
});
}
var errorData = []; var errorData = [];
var categoryData = []; var categoryData = [];
var barData = []; var barData = [];
@@ -192,8 +94,6 @@ export class DataVS1Component implements OnInit {
]); ]);
barData.push(echarts.number.round(val, 2)); barData.push(echarts.number.round(val, 2));
} }


this.chart_options = { this.chart_options = {
backgroundColor: 'transparent', backgroundColor: 'transparent',
series: [ series: [
@@ -484,25 +384,9 @@ export class DataVS1Component implements OnInit {
text: '热值', text: '热值',
subtext: '(kg/kg)' subtext: '(kg/kg)'
}, },
grid: {
left: '3%',
right: '3%',
bottom: '3%',
containLabel: true
},
legend: { legend: {
data: ['超差样数量', '不合格样数量'] data: ['超差样数量', '不合格样数量']
}, },
toolbox: {
show: false,
feature: {
dataView: { show: true, readOnly: false },
magicType: { show: true, type: ['line', 'bar'] },
restore: { show: true },
saveAsImage: { show: true }
}
},
calculable: true,
xAxis: [ xAxis: [
{ {
type: 'category', type: 'category',
@@ -541,7 +425,25 @@ export class DataVS1Component implements OnInit {
data: [{ type: 'average', name: 'Avg' }] data: [{ type: 'average', name: 'Avg' }]
} }
} }
]
],
grid: {
left: '3%',
right: '3%',
bottom: '3%',
containLabel: true
},

toolbox: {
show: false,
feature: {
dataView: { show: true, readOnly: false },
magicType: { show: true, type: ['line', 'bar'] },
restore: { show: true },
saveAsImage: { show: true }
}
},
calculable: true,

}; };
this.chart_options3 = { this.chart_options3 = {
title: { title: {
@@ -605,19 +507,30 @@ export class DataVS1Component implements OnInit {
}, },
}] }]
}; };
this.optionsCheckList[0].options = this.chart_options1;
this.optionsCheckList[1].options = this.chart_options2;
this.optionsCheckList[2].options = this.chart_options3;
this.optionsCheckList[3].options = this.chart_options4;
this.chartConfig.optionsCheckList[0].options = this.chart_options1;
this.chartConfig.optionsCheckList[1].options = this.chart_options2;
this.chartConfig.optionsCheckList[2].options = this.chart_options3;
this.chartConfig.optionsCheckList[3].options = this.chart_options4;
this.chartConfig.optionBottomList[0] = this.chart_options3;
this.chartConfig.optionBottomList[1] = this.chart_options4;
} }

add(): void { }

public unsafePublish(topic: string, message: string): void { public unsafePublish(topic: string, message: string): void {
this._mqttService.unsafePublish(topic, message, { qos: 1, retain: true }); this._mqttService.unsafePublish(topic, message, { qos: 1, retain: true });
} }

ngOnDestroy(): void { ngOnDestroy(): void {
this.subscription.unsubscribe(); this.subscription.unsubscribe();
} }

/**
* 服务器获取配置
*/
getServerConfig() {
this.http
.get('s1/',)
.subscribe(res => {
this.chartConfig = res['data'];
});

}

} }

Loading…
取消
儲存