| @@ -1,4 +1,4 @@ | |||||
| .containers { | |||||
| .data-container { | |||||
| align-items: center; | align-items: center; | ||||
| color: white; | color: white; | ||||
| @@ -9,7 +9,7 @@ import { SHARED_IMPORTS } from '@shared'; | |||||
| selector: 'data-v-date', | selector: 'data-v-date', | ||||
| standalone: true, | standalone: true, | ||||
| imports: [CommonModule, ...SHARED_IMPORTS], | imports: [CommonModule, ...SHARED_IMPORTS], | ||||
| template: ` <div class="containers"> | |||||
| template: ` <div class="data-container"> | |||||
| {{ currentTime | date: 'yyyy-MM-dd HH:mm:ss' }} | {{ currentTime | date: 'yyyy-MM-dd HH:mm:ss' }} | ||||
| </div>`, | </div>`, | ||||
| styleUrls: ['./date.component.less'] | styleUrls: ['./date.component.less'] | ||||
| @@ -0,0 +1,34 @@ | |||||
| import { CommonModule } from '@angular/common'; | |||||
| import { ChangeDetectionStrategy, Component, HostListener } from '@angular/core'; | |||||
| import { I18nPipe } from '@delon/theme'; | |||||
| import { NzIconModule } from 'ng-zorro-antd/icon'; | |||||
| import screenfull from 'screenfull'; | |||||
| @Component({ | |||||
| selector: 'data-v-fullscreen', | |||||
| template: ` | |||||
| <i nz-icon [nzType]="status ? 'fullscreen-exit' : 'fullscreen'"></i> | |||||
| {{ (status ? '退出全屏' : '进入全屏') }} | |||||
| `, | |||||
| host: { | |||||
| '[class.flex-1]': 'true' | |||||
| }, | |||||
| changeDetection: ChangeDetectionStrategy.OnPush, | |||||
| standalone: true, | |||||
| imports: [CommonModule, NzIconModule, I18nPipe] | |||||
| }) | |||||
| export class DataVFullScreenComponent { | |||||
| status = false; | |||||
| @HostListener('window:resize') | |||||
| _resize(): void { | |||||
| this.status = screenfull.isFullscreen; | |||||
| } | |||||
| @HostListener('click') | |||||
| _click(): void { | |||||
| if (screenfull.isEnabled) { | |||||
| screenfull.toggle(); | |||||
| } | |||||
| } | |||||
| } | |||||
| @@ -1,6 +1,9 @@ | |||||
| <div class="header-container"> | <div class="header-container"> | ||||
| <div class="data-v-sysinfo mr-sm"> | <div class="data-v-sysinfo mr-sm"> | ||||
| <data-v-user></data-v-user> | |||||
| <data-v-date></data-v-date> | |||||
| <data-v-setting class="mr-sm"></data-v-setting> | |||||
| <data-v-user class="mr-sm"></data-v-user> | |||||
| <data-v-date class="mr-sm"></data-v-date> | |||||
| <!-- <data-v-fullscreen></data-v-fullscreen> --> | |||||
| </div> | </div> | ||||
| </div> | |||||
| </div> | |||||
| @@ -1,12 +1,12 @@ | |||||
| .header-container { | .header-container { | ||||
| width: 100vw; | width: 100vw; | ||||
| min-width: 1360px; | |||||
| min-width: 1280px; | |||||
| /* 水平宽度占据整个视口宽度 */ | /* 水平宽度占据整个视口宽度 */ | ||||
| height: 10%; | height: 10%; | ||||
| /* 垂直高度占据整个视口高度 */ | /* 垂直高度占据整个视口高度 */ | ||||
| background-image: url('../../../../assets/dashboard/dashboard_bg_1.jpg'); | |||||
| background-image: url('../../../../assets/dashboard/screen_header2.png'); | |||||
| /* 背景图片尺寸适应 */ | /* 背景图片尺寸适应 */ | ||||
| background-position: top; | background-position: top; | ||||
| @@ -8,11 +8,14 @@ import { LayoutDefaultModule } from '@delon/theme/layout-default'; | |||||
| import { DataVDateComponent } from '../date/date.component'; | import { DataVDateComponent } from '../date/date.component'; | ||||
| import { DataVNavigationComponent } from '../navigation/navigation.component'; | import { DataVNavigationComponent } from '../navigation/navigation.component'; | ||||
| import { RouterOutlet } from '@angular/router'; | import { RouterOutlet } from '@angular/router'; | ||||
| import { DataVFullScreenComponent } from '../fullscreen/fullscreen.component'; | |||||
| import { DataVSettingComponent } from '../setting/setting.component'; | |||||
| @Component({ | @Component({ | ||||
| selector: 'app-data-v-header', | selector: 'app-data-v-header', | ||||
| standalone: true, | standalone: true, | ||||
| imports: [DataVUserComponent, DataVDateComponent, DataVNavigationComponent, LayoutDefaultModule, RouterOutlet, ...SHARED_IMPORTS], | |||||
| imports: [DataVSettingComponent, DataVFullScreenComponent, DataVUserComponent, | |||||
| DataVDateComponent, DataVNavigationComponent, LayoutDefaultModule, RouterOutlet, ...SHARED_IMPORTS], | |||||
| templateUrl: './header.component.html', | templateUrl: './header.component.html', | ||||
| styleUrls: ['./header.component.less'] | styleUrls: ['./header.component.less'] | ||||
| }) | }) | ||||
| @@ -20,7 +23,7 @@ export class DataVHeaderComponent implements OnInit { | |||||
| private readonly http = inject(_HttpClient); | private readonly http = inject(_HttpClient); | ||||
| private readonly modal = inject(ModalHelper); | private readonly modal = inject(ModalHelper); | ||||
| ngOnInit(): void {} | |||||
| ngOnInit(): void { } | |||||
| add(): void { | add(): void { | ||||
| // this.modal | // this.modal | ||||
| @@ -1,15 +1,9 @@ | |||||
| <div class="home-container"> | <div class="home-container"> | ||||
| <!-- <div class="data-v-sysinfo mr-sm"> | |||||
| <data-v-user></data-v-user> | |||||
| <data-v-date></data-v-date> | |||||
| </div> --> | |||||
| <app-data-v-header></app-data-v-header> | <app-data-v-header></app-data-v-header> | ||||
| <data-v-navigation></data-v-navigation> | <data-v-navigation></data-v-navigation> | ||||
| <img src="assets/dashboard/dashboard_menu.jpg" style="width: 100%;" /> | |||||
| <img src="assets/dashboard/dashboard_menu.jpg" style="width: 100%; height: 1.8rem;" /> | |||||
| <div style="margin: 1rem;"> | <div style="margin: 1rem;"> | ||||
| <router-outlet /> | <router-outlet /> | ||||
| </div> | </div> | ||||
| </div> | |||||
| </div> | |||||
| @@ -1,9 +1,10 @@ | |||||
| .home-container { | .home-container { | ||||
| width: 100vw; | width: 100vw; | ||||
| min-width: 1360px; | |||||
| min-width: 1280px; | |||||
| /* 水平宽度占据整个视口宽度 */ | /* 水平宽度占据整个视口宽度 */ | ||||
| height: 100vh; | height: 100vh; | ||||
| min-height: 768px; | |||||
| background-color: #040516; | background-color: #040516; | ||||
| /* 垂直高度占据整个视口高度 */ | /* 垂直高度占据整个视口高度 */ | ||||
| @@ -1,75 +1,80 @@ | |||||
| .navigation-container { | .navigation-container { | ||||
| display: flex; | |||||
| flex-direction: row; | |||||
| width: 100%; | |||||
| //height: 4rem; | |||||
| //margin-top: 2.5rem; | |||||
| padding-left: 2rem; | |||||
| display: flex; | |||||
| flex-direction: row; | |||||
| width: 100%; | |||||
| padding-left: 2rem; | |||||
| } | } | ||||
| // .menu-image-container { | |||||
| // position: relative;positionpositionpositionpositionpositionpositionpositionpositionpositionpositionpositionpositionpositionpositionpositionpositionpositionpositionpositionpositionpositionpositionpositionpositionpositionpositionpositionposition | |||||
| // overflow: hidden;overflowoverflowoverflowoverflowoverflowoverflowoverflowoverflowoverflowoverflowoverflowoverflowoverflowoverflowoverflowoverflowoverflowoverflowoverflowoverflowoverflowoverflowoverflowoverflowoverflowoverflowoverflowoverflow | |||||
| // text-align: center;text-aligntext-aligntext-aligntext-aligntext-aligntext-aligntext-aligntext-aligntext-aligntext-aligntext-aligntext-aligntext-aligntext-aligntext-aligntext-aligntext-aligntext-aligntext-aligntext-aligntext-aligntext-aligntext-aligntext-aligntext-aligntext-aligntext-aligntext-align | |||||
| // } | |||||
| // .menu-image { | |||||
| // height: 1.6rem;heightheightheightheightheightheightheightheightheightheightheightheightheightheightheightheightheightheightheightheightheightheightheightheightheightheightheightheightheightheightheightheightheightheightheightheightheightheightheightheight // 保持图片纵横比 | |||||
| // margin-left: 0.5rem;margin-leftmargin-leftmargin-leftmargin-leftmargin-leftmargin-leftmargin-leftmargin-leftmargin-leftmargin-leftmargin-leftmargin-leftmargin-leftmargin-leftmargin-leftmargin-leftmargin-leftmargin-leftmargin-leftmargin-leftmargin-leftmargin-leftmargin-leftmargin-leftmargin-leftmargin-leftmargin-leftmargin-leftmargin-leftmargin-leftmargin-leftmargin-leftmargin-leftmargin-leftmargin-leftmargin-leftmargin-leftmargin-leftmargin-leftmargin-leftmargin-leftmargin-left | |||||
| // background-size: cover;background-sizebackground-sizebackground-sizebackground-sizebackground-sizebackground-sizebackground-sizebackground-sizebackground-sizebackground-sizebackground-sizebackground-sizebackground-sizebackground-sizebackground-sizebackground-sizebackground-sizebackground-sizebackground-sizebackground-sizebackground-sizebackground-sizebackground-sizebackground-sizebackground-sizebackground-sizebackground-sizebackground-sizebackground-sizebackground-sizebackground-sizebackground-sizebackground-sizebackground-sizebackground-sizebackground-sizebackground-sizebackground-sizebackground-sizebackground-sizebackground-size | |||||
| // } | |||||
| // .menu-title { | |||||
| // position: absolute;positionpositionpositionpositionpositionpositionpositionpositionpositionpositionpositionpositionpositionpositionpositionpositionpositionpositionpositionpositionpositionpositionpositionpositionpositionpositionpositionposition | |||||
| // top: 20%;toptoptoptoptoptoptoptoptoptoptoptoptoptoptoptoptoptoptoptoptoptoptoptoptoptoptoptop | |||||
| // left: 50%;leftleftleftleftleftleftleftleftleftleftleftleftleftleftleftleftleftleftleftleftleftleftleftleftleftleftleftleft | |||||
| // transform: translate(-50%, -50%);transformtransformtransformtransformtransformtransformtransformtransformtransformtransformtransformtransformtransformtransformtransformtransformtransformtransformtransformtransformtransformtransformtransformtransformtransformtransformtransformtransform | |||||
| // font-weight: 600;font-weightfont-weightfont-weightfont-weightfont-weightfont-weightfont-weightfont-weightfont-weightfont-weightfont-weightfont-weightfont-weightfont-weightfont-weightfont-weightfont-weightfont-weightfont-weightfont-weightfont-weightfont-weightfont-weightfont-weightfont-weightfont-weightfont-weightfont-weight | |||||
| // } | |||||
| ul { | ul { | ||||
| display: inline-flex; | |||||
| width: max-content; | |||||
| margin-right: auto; | |||||
| margin-bottom: 0rem; | |||||
| li { | |||||
| display: inline-flex; | display: inline-flex; | ||||
| width: max-content; | |||||
| margin-right: auto; | |||||
| li { | |||||
| display: inline-flex; | |||||
| a { | |||||
| clear: both; | |||||
| display: block; | |||||
| width: 100%; | |||||
| min-width: 4rem; | |||||
| margin-right: 1rem; | |||||
| padding: 0.5rem 1.5rem; | |||||
| font-weight: 600; | |||||
| color: #74FAFB; | |||||
| text-align: inherit; | |||||
| white-space: nowrap; | |||||
| background-color: #054254; | |||||
| border: 0 solid red; | |||||
| border-color: #74FAFB; | |||||
| &:hover, | |||||
| &:active, | |||||
| &.active { | |||||
| color: #000; | |||||
| text-decoration: none; | |||||
| background-color: #fff; | |||||
| } | |||||
| } | |||||
| .dropdown-menu { | |||||
| color: #fff; | |||||
| background-color: #337AB7; | |||||
| } | |||||
| } | |||||
| a { | |||||
| clear: both; | |||||
| display: block; | |||||
| width: 100%; | |||||
| margin-right: 1rem; | |||||
| padding: 0.5rem 2rem; | |||||
| font-weight: 600; | |||||
| color: #74FAFB; | |||||
| text-align: inherit; | |||||
| white-space: nowrap; | |||||
| background-color: #054254; | |||||
| border: 0 solid red; | |||||
| border-color: #74FAFB; | |||||
| >.dropdown-submenu { | |||||
| position: relative; | |||||
| &:hover, &:active, &.active{ | |||||
| color: #000; | |||||
| text-decoration: none; | |||||
| background-color: #fff; | |||||
| } | |||||
| } | |||||
| .dropdown-menu { | |||||
| position: absolute; | |||||
| top: 2rem; | |||||
| margin-top: 0; | |||||
| margin-left: 0; | |||||
| } | |||||
| .dropdown-menu { | |||||
| color: #fff; | |||||
| background-color: #337AB7; | |||||
| } | |||||
| &:hover>.dropdown-menu { | |||||
| display: block; | |||||
| } | } | ||||
| >.dropdown-submenu { | |||||
| .dropdown-submenu { | |||||
| position: relative; | position: relative; | ||||
| .dropdown-menu { | |||||
| position: absolute; | |||||
| top: 2rem; | |||||
| >a { | |||||
| display: block; | |||||
| &::after { | |||||
| content: "\f054"; | |||||
| position: absolute; | |||||
| right: .5rem; | |||||
| } | |||||
| } | |||||
| >.dropdown-menu { | |||||
| top: 0; | |||||
| bottom: unset; | |||||
| left: 100%; | |||||
| margin-top: 0; | margin-top: 0; | ||||
| margin-left: 0; | margin-left: 0; | ||||
| } | } | ||||
| @@ -77,38 +82,16 @@ ul { | |||||
| &:hover>.dropdown-menu { | &:hover>.dropdown-menu { | ||||
| display: block; | display: block; | ||||
| } | } | ||||
| .dropdown-submenu { | |||||
| position: relative; | |||||
| >a { | |||||
| display: block; | |||||
| &::after { | |||||
| content: "\f054"; | |||||
| position: absolute; | |||||
| right: .5rem; | |||||
| } | |||||
| } | |||||
| >.dropdown-menu { | |||||
| top: 0; | |||||
| bottom: unset; | |||||
| left: 100%; | |||||
| margin-top: 0; | |||||
| margin-left: 0; | |||||
| } | |||||
| &:hover>.dropdown-menu { | |||||
| display: block; | |||||
| } | |||||
| } | |||||
| } | } | ||||
| } | |||||
| &.dev-mode { | |||||
| a:hover, a:active, a.active{ | |||||
| color: #fff; | |||||
| background-color: #DC3545; | |||||
| } | |||||
| &.dev-mode { | |||||
| a:hover, | |||||
| a:active, | |||||
| a.active { | |||||
| color: #fff; | |||||
| background-color: #DC3545; | |||||
| } | } | ||||
| } | |||||
| } | |||||
| } | |||||
| @@ -1,6 +1,6 @@ | |||||
| import { CommonModule } from '@angular/common'; | import { CommonModule } from '@angular/common'; | ||||
| import { Component, OnInit, ViewChild, inject } from '@angular/core'; | import { Component, OnInit, ViewChild, inject } from '@angular/core'; | ||||
| import { RouterOutlet } from '@angular/router'; | |||||
| import { Router, RouterOutlet } from '@angular/router'; | |||||
| import { STColumn, STComponent } from '@delon/abc/st'; | import { STColumn, STComponent } from '@delon/abc/st'; | ||||
| import { SFSchema } from '@delon/form'; | import { SFSchema } from '@delon/form'; | ||||
| import { ModalHelper, _HttpClient } from '@delon/theme'; | import { ModalHelper, _HttpClient } from '@delon/theme'; | ||||
| @@ -11,35 +11,10 @@ import { SHARED_IMPORTS } from '@shared'; | |||||
| standalone: true, | standalone: true, | ||||
| imports: [RouterOutlet, CommonModule, ...SHARED_IMPORTS], | imports: [RouterOutlet, CommonModule, ...SHARED_IMPORTS], | ||||
| template: ` <div class="navigation-container"> | template: ` <div class="navigation-container"> | ||||
| <!-- <div class="menu-image-container"> | |||||
| <img src="{{ imageUrl }}" class="menu-image" /> | |||||
| <div class="menu-title">{{ title }}</div> | |||||
| </div> | |||||
| <div class="menu-image-container"> | |||||
| <img src="{{ imageUrl }}" class="menu-image" /> | |||||
| <div class="menu-title">{{ title }}</div> | |||||
| </div> | |||||
| <div class="menu-image-container"> | |||||
| <img src="{{ imageUrl }}" class="menu-image" /> | |||||
| <div class="menu-title">{{ title }}</div> | |||||
| </div> --> | |||||
| <ul> | <ul> | ||||
| <li class="dropdown-submenu" *ngFor="let menu of menuList" (mouseover)="menuOver(menu, $event)"> | <li class="dropdown-submenu" *ngFor="let menu of menuList" (mouseover)="menuOver(menu, $event)"> | ||||
| <a href="javascript:void(0);" class="menu-group" [class.active]="isActive(menu.MenuGrpCd)">{{ menu.text }}</a> | |||||
| <!-- <div class="dropdown-menu" *ngIf="menu && menu.SubList && menu.SubList.length > 0"> | |||||
| <a | |||||
| class="dropdown-item" | |||||
| href=".{{ getMenuPath(menu, subMenu) }}" | |||||
| *ngFor="let subMenu of menu.SubList" | |||||
| (click)="onMenuClick(menu, subMenu, $event)" | |||||
| > | |||||
| <span *ngIf="!changeMenuText(subMenu)" | |||||
| ><app-text-loader *ngIf="showAppTextloader(subMenu)"></app-text-loader>{{ subMenu.MenuCd + '.title' | appLocaleText }}</span | |||||
| > | |||||
| <span *ngIf="changeMenuText(subMenu)">{{ getChangeMenuText(subMenu) }}</span> | |||||
| </a> | |||||
| </div> --> | |||||
| <a href="javascript:void(0);" class="menu-group" [class.active]="isActive(menu.MenuGrpCd)" | |||||
| (click)="navigate(menu)">{{ menu.text }}</a> | |||||
| </li> | </li> | ||||
| </ul> | </ul> | ||||
| </div>`, | </div>`, | ||||
| @@ -48,16 +23,19 @@ import { SHARED_IMPORTS } from '@shared'; | |||||
| export class DataVNavigationComponent implements OnInit { | export class DataVNavigationComponent implements OnInit { | ||||
| private readonly http = inject(_HttpClient); | private readonly http = inject(_HttpClient); | ||||
| private readonly modal = inject(ModalHelper); | private readonly modal = inject(ModalHelper); | ||||
| private readonly router = inject(Router); | |||||
| menuList: any = [ | menuList: any = [ | ||||
| { | { | ||||
| text: '工作站1' | |||||
| code: '01', | |||||
| text: '我的工作站' | |||||
| }, | }, | ||||
| { | { | ||||
| text: '工作站2' | |||||
| code: '02', | |||||
| text: '化验总览' | |||||
| }, | }, | ||||
| { | { | ||||
| text: '工作站3' | |||||
| text: '...' | |||||
| } | } | ||||
| ]; | ]; | ||||
| @@ -66,11 +44,22 @@ export class DataVNavigationComponent implements OnInit { | |||||
| context: string = '2024-02-29 10:00'; | context: string = '2024-02-29 10:00'; | ||||
| ngOnInit(): void {} | |||||
| ngOnInit(): void { } | |||||
| add(): void { } | |||||
| add(): void {} | |||||
| menuOver(menu: any, $event: any) { } | |||||
| menuOver(menu: any, $event: any) {} | |||||
| isActive(menu: any) { } | |||||
| isActive(menu: any) {} | |||||
| // 新的 navigate 方法 | |||||
| navigate(menu: any) { | |||||
| if (menu.code == '01') { | |||||
| // 你可能想根据菜单项来确定导航的路径 | |||||
| this.router.navigateByUrl('/'); // 将'/data-v/s1'替换为正确的路径 | |||||
| } else if (menu.code == '02') { | |||||
| // 你可能想根据菜单项来确定导航的路径 | |||||
| this.router.navigateByUrl('/data-v/s1'); // 将'/data-v/s1'替换为正确的路径 | |||||
| } | |||||
| } | |||||
| } | } | ||||
| @@ -4,13 +4,13 @@ | |||||
| <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"> | ||||
| <div id="c1" style="width: 20rem; height: 16rem;"></div> | |||||
| <div id="c1" style="width: 20rem; height: 12rem;"></div> | |||||
| </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"> | ||||
| <div id="c2" style="width: 20rem; height: 16rem;"></div> | |||||
| <div id="c2" style="width: 20rem; height: 12rem;"></div> | |||||
| </div> | </div> | ||||
| <div class="sys-status-title">设备投运度</div> | <div class="sys-status-title">设备投运度</div> | ||||
| </div> | </div> | ||||
| @@ -150,17 +150,17 @@ | |||||
| <div nz-col nzSpan="12"> | <div nz-col nzSpan="12"> | ||||
| <data-v-card title="化验结果"> | <data-v-card title="化验结果"> | ||||
| <div class="centered-element"> | <div class="centered-element"> | ||||
| <div id="d1" style="width: 40rem; height: 14rem;"> | |||||
| <div id="d1" style="width: 40rem; height: 12rem;"> | |||||
| </div> | </div> | ||||
| </div> | </div> | ||||
| <div class="centered-element"> | <div class="centered-element"> | ||||
| <div id="d2" style="width: 40rem; height: 14rem; margin-top: 1rem;"> | |||||
| <div id="d2" style="width: 40rem; height: 12rem; margin-top: 1rem;"> | |||||
| </div> | </div> | ||||
| </div> | </div> | ||||
| <div class="centered-element"> | <div class="centered-element"> | ||||
| <div id="d3" style="width: 40rem; height: 14rem; margin-top: 1rem;"></div> | |||||
| <div id="d3" style="width: 40rem; height: 12rem; margin-top: 1rem;"></div> | |||||
| </div> | </div> | ||||
| <div class="statistic-item-container"> | <div class="statistic-item-container"> | ||||
| @@ -181,4 +181,4 @@ | |||||
| <div class="sys-status-title">煤样合格率:合格样量/总样量 15/16</div> | <div class="sys-status-title">煤样合格率:合格样量/总样量 15/16</div> | ||||
| </data-v-card> | </data-v-card> | ||||
| </div> | </div> | ||||
| </div> | |||||
| </div> | |||||
| @@ -1,4 +1,4 @@ | |||||
| .sys-status-title{ | |||||
| .sys-status-title { | |||||
| font-size: 18px; | font-size: 18px; | ||||
| font-weight: 600; | font-weight: 600; | ||||
| color: #94DDF3; | color: #94DDF3; | ||||
| @@ -23,52 +23,54 @@ | |||||
| display: flex; | display: flex; | ||||
| align-items: center; | align-items: center; | ||||
| justify-content: center; | justify-content: center; | ||||
| height: 100%; /* 如果需要垂直居中,可以设置高度为 100% */ | |||||
| } | |||||
| height: 100%; | |||||
| /* 如果需要垂直居中,可以设置高度为 100% */ | |||||
| } | |||||
| .status-container { | |||||
| .status-container { | |||||
| display: flex; | display: flex; | ||||
| align-items: center; | align-items: center; | ||||
| padding: 0.5rem; | padding: 0.5rem; | ||||
| } | |||||
| } | |||||
| .status-circle { | |||||
| width: 24px; | |||||
| height: 24px; | |||||
| .status-circle { | |||||
| width: 18px; | |||||
| height: 18px; | |||||
| border-radius: 50%; | border-radius: 50%; | ||||
| &.red{ | |||||
| &.red { | |||||
| background-color: red; | background-color: red; | ||||
| } | } | ||||
| &.green{ | |||||
| background-color:green; | |||||
| &.green { | |||||
| background-color: green; | |||||
| } | } | ||||
| } | |||||
| } | |||||
| .status-text { | |||||
| margin-left: 10px; /* 调整文字与圆形之间的间距 */ | |||||
| font-size: 18px; | |||||
| .status-text { | |||||
| margin-left: 6px; | |||||
| /* 调整文字与圆形之间的间距 */ | |||||
| font-size: 16px; | |||||
| font-weight: 600; | font-weight: 600; | ||||
| color: #74FAFB; | color: #74FAFB; | ||||
| } | |||||
| } | |||||
| .progress-container{ | |||||
| .progress-container { | |||||
| display: flex; | display: flex; | ||||
| color: white; | color: white; | ||||
| } | } | ||||
| .progress-display{ | |||||
| .progress-display { | |||||
| color: white; | color: white; | ||||
| text-align: right; | text-align: right; | ||||
| } | } | ||||
| .statistic-item-container{ | |||||
| .statistic-item-container { | |||||
| display: flex; | display: flex; | ||||
| padding: 1rem 0; | padding: 1rem 0; | ||||
| color: white; | color: white; | ||||
| } | } | ||||
| .white-color-theme{ | |||||
| .white-color-theme { | |||||
| color: #74FAFB; | color: #74FAFB; | ||||
| } | } | ||||
| @@ -0,0 +1,46 @@ | |||||
| import { CommonModule } from '@angular/common'; | |||||
| import { Component, OnInit, ViewChild, inject } from '@angular/core'; | |||||
| import { STColumn, STComponent } from '@delon/abc/st'; | |||||
| import { SFSchema } from '@delon/form'; | |||||
| import { ModalHelper, _HttpClient } from '@delon/theme'; | |||||
| import { SHARED_IMPORTS } from '@shared'; | |||||
| import { DataVFullScreenComponent } from '../fullscreen/fullscreen.component'; | |||||
| @Component({ | |||||
| selector: 'data-v-setting', | |||||
| standalone: true, | |||||
| imports: [DataVFullScreenComponent, CommonModule, ...SHARED_IMPORTS], | |||||
| template: ` <div layout-default-header-item-trigger nz-dropdown [nzDropdownMenu]="settingsMenu" nzTrigger="click" nzPlacement="bottomRight"> | |||||
| <i nz-icon nzType="setting" [ngStyle]="{'color': 'white'}"></i> | |||||
| </div> | |||||
| <nz-dropdown-menu #settingsMenu="nzDropdownMenu"> | |||||
| <div nz-menu style="width: 8rem;"> | |||||
| <div nz-menu-item> | |||||
| <data-v-fullscreen /> | |||||
| </div> | |||||
| </div> | |||||
| </nz-dropdown-menu>` | |||||
| }) | |||||
| export class DataVSettingComponent implements OnInit { | |||||
| private readonly http = inject(_HttpClient); | |||||
| private readonly modal = inject(ModalHelper); | |||||
| currentTime: any; | |||||
| ngOnInit(): void { | |||||
| this.updateCurrentTime(); | |||||
| setInterval(() => { | |||||
| this.updateCurrentTime(); | |||||
| }, 1000); | |||||
| } | |||||
| add(): void { | |||||
| // this.modal | |||||
| // .createStatic(FormEditComponent, { i: { id: 0 } }) | |||||
| // .subscribe(() => this.st.reload()); | |||||
| } | |||||
| updateCurrentTime() { | |||||
| this.currentTime = new Date(); | |||||
| } | |||||
| } | |||||
| @@ -1,4 +1,4 @@ | |||||
| <div class="alain-default__nav-item d-flex align-items-center px-sm mr-sm" nz-dropdown nzPlacement="bottomRight" | |||||
| <div class="alain-default__nav-item d-flex align-items-center px-sm" nz-dropdown nzPlacement="bottomRight" | |||||
| [nzDropdownMenu]="userMenu"> | [nzDropdownMenu]="userMenu"> | ||||
| <nz-avatar [nzSrc]="user.avatar" nzSize="small" class="mr-sm" /> | <nz-avatar [nzSrc]="user.avatar" nzSize="small" class="mr-sm" /> | ||||
| {{ user.name }} | {{ user.name }} | ||||
| @@ -5,7 +5,7 @@ export const environment = { | |||||
| useHash: true, | useHash: true, | ||||
| api: { | api: { | ||||
| baseUrl: './', | baseUrl: './', | ||||
| refreshTokenEnabled: true, | |||||
| refreshTokenEnabled: false, | |||||
| refreshTokenType: 'auth-refresh' | refreshTokenType: 'auth-refresh' | ||||
| } | } | ||||
| } as Environment; | } as Environment; | ||||