This is an automated email from the ASF dual-hosted git repository.
Duansg pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hertzbeat.git
The following commit(s) were added to refs/heads/master by this push:
new ecb238804b [improve] Improve status page settings UI for better UX
(#4139)
ecb238804b is described below
commit ecb238804b4998224e23176bd2f62569b4165a2c
Author: Duansg <[email protected]>
AuthorDate: Fri May 22 14:30:34 2026 +0800
[improve] Improve status page settings UI for better UX (#4139)
Co-authored-by: Tomsun28 <[email protected]>
---
.../routes/setting/status/status.component.html | 335 ++++++++++++---------
.../routes/setting/status/status.component.less | 267 ++++++++++++++++
.../app/routes/setting/status/status.component.ts | 13 +
web-app/src/assets/i18n/en-US.json | 7 +
web-app/src/assets/i18n/ja-JP.json | 7 +
web-app/src/assets/i18n/pt-BR.json | 7 +
web-app/src/assets/i18n/zh-CN.json | 7 +
web-app/src/assets/i18n/zh-TW.json | 7 +
8 files changed, 515 insertions(+), 135 deletions(-)
diff --git a/web-app/src/app/routes/setting/status/status.component.html
b/web-app/src/app/routes/setting/status/status.component.html
index edbd709228..de038ee6b0 100644
--- a/web-app/src/app/routes/setting/status/status.component.html
+++ b/web-app/src/app/routes/setting/status/status.component.html
@@ -26,122 +26,200 @@
<nz-divider></nz-divider>
<nz-spin [nzSpinning]="orgLoading" [nzTip]="'Loading...'" nzSize="large">
- <div class="-inner-content">
- <form nz-form #newForm="ngForm">
- <nz-form-item>
- <nz-form-label [nzSpan]="7" nzFor="name" nzRequired="true">
- {{ 'status.org.name' | i18n }}
- </nz-form-label>
- <nz-form-control [nzSpan]="8" [nzErrorTip]="'validation.required' |
i18n">
- <input
- [(ngModel)]="statusOrgForEdit.name"
- nz-input
- name="name"
- type="text"
- id="name"
- required
- [placeholder]="'status.org.name.tip' | i18n"
- />
- </nz-form-control>
- </nz-form-item>
- <nz-form-item>
- <nz-form-label [nzSpan]="7" nzFor="desc" nzRequired="true">
- {{ 'status.org.desc' | i18n }}
- </nz-form-label>
- <nz-form-control [nzSpan]="8" [nzErrorTip]="'validation.required' |
i18n">
- <input
- [(ngModel)]="statusOrgForEdit.description"
- nz-input
- required
- name="desc"
- type="text"
- id="desc"
- [placeholder]="'status.org.desc.tip' | i18n"
- />
- </nz-form-control>
- </nz-form-item>
- <nz-form-item>
- <nz-form-label [nzSpan]="7" nzFor="home" nzRequired="true">
- {{ 'status.org.home' | i18n }}
- </nz-form-label>
- <nz-form-control [nzSpan]="8" [nzErrorTip]="'validation.required' |
i18n">
- <input
- [(ngModel)]="statusOrgForEdit.home"
- nz-input
- required
- name="home"
- type="text"
- id="home"
- [placeholder]="'status.org.home.tip' | i18n"
- />
- </nz-form-control>
- </nz-form-item>
- <nz-form-item>
- <nz-form-label [nzSpan]="7" nzFor="logo" nzRequired="true">
- {{ 'status.org.logo' | i18n }}
- </nz-form-label>
- <nz-form-control [nzSpan]="8" [nzErrorTip]="'validation.required' |
i18n">
- <input
- [(ngModel)]="statusOrgForEdit.logo"
- nz-input
- required
- name="logo"
- type="text"
- id="logo"
- [placeholder]="'status.org.logo.tip' | i18n"
- />
- </nz-form-control>
- </nz-form-item>
- <nz-form-item>
- <nz-form-label [nzSpan]="7" nzFor="feedback" nzRequired="true">
- {{ 'status.org.feedback' | i18n }}
- </nz-form-label>
- <nz-form-control [nzSpan]="8" [nzErrorTip]="'validation.required' |
i18n">
- <input
- [(ngModel)]="statusOrgForEdit.feedback"
- nz-input
- required
- name="feedback"
- type="text"
- id="feedback"
- [placeholder]="'status.org.feedback.tip' | i18n"
- />
- </nz-form-control>
- </nz-form-item>
- <nz-form-item>
- <nz-form-label [nzSpan]="7" nzFor="color">
- {{ 'status.org.color' | i18n }}
- </nz-form-label>
- <nz-form-control [nzSpan]="8">
- <input
- [(colorPicker)]="statusOrgForEdit.color"
- cpFallbackColor="#e9f3d3"
- cpOutputFormat="hex"
- [style.background]="statusOrgForEdit.color"
- style="width: 100%"
- nz-input
- required
- name="color"
- type="text"
- id="color"
- [placeholder]="statusOrgForEdit.color == undefined ?
('status.org.color.tip' | i18n) : ''"
- />
- </nz-form-control>
- </nz-form-item>
- <div nz-row>
- <div nz-col [nzXs]="{ span: 24 }" [nzLg]="{ span: 8, offset: 7 }"
style="text-align: center">
- <button nz-button nzType="primary" type="submit"
(click)="onSaveStatusOrg(newForm.form)">
- {{ 'common.button.ok' | i18n }}
+ <!-- Organization brand card: empty-state guide / configured summary /
inline edit form -->
+ <div class="status-org-card">
+ <!-- Empty state: organization not configured -->
+ <ng-container *ngIf="!orgEditing && statusOrg?.id == undefined">
+ <div class="status-org-empty">
+ <div class="status-org-empty-icon">
+ <i nz-icon nzType="appstore" nzTheme="outline"></i>
+ </div>
+ <div class="status-org-empty-content">
+ <div class="status-org-empty-title">{{ 'status.org.empty.title' |
i18n }}</div>
+ <div class="status-org-empty-desc">{{ 'status.org.empty.desc' | i18n
}}</div>
+ </div>
+ <div class="status-org-empty-action">
+ <button nz-button nzType="primary" (click)="startEditOrg()">
+ <i nz-icon nzType="setting" nzTheme="outline"></i>
+ {{ 'status.org.setup' | i18n }}
</button>
</div>
</div>
- </form>
+ </ng-container>
+
+ <!-- Configured summary: shows brand at a glance -->
+ <ng-container *ngIf="!orgEditing && statusOrg?.id != undefined">
+ <div class="status-org-summary" [style.borderLeftColor]="statusOrg.color
|| '#1890ff'">
+ <div class="status-org-summary-logo"
[style.backgroundColor]="statusOrg.color || '#f0f5ff'">
+ <img *ngIf="statusOrg.logo" [src]="statusOrg.logo" alt="logo" />
+ <i *ngIf="!statusOrg.logo" nz-icon nzType="appstore"
nzTheme="outline"></i>
+ </div>
+ <div class="status-org-summary-body">
+ <div class="status-org-summary-title">
+ <span class="status-org-name">{{ statusOrg.name }}</span>
+ <nz-tag nzColor="success" class="status-org-tag">
+ <i nz-icon nzType="check-circle" nzTheme="fill"></i>
+ {{ 'status.org.configured' | i18n }}
+ </nz-tag>
+ </div>
+ <div class="status-org-summary-desc"
*ngIf="statusOrg.description">{{ statusOrg.description }}</div>
+ <div class="status-org-summary-meta">
+ <span class="meta-item" *ngIf="statusOrg.home">
+ <i nz-icon nzType="link" nzTheme="outline"></i>
+ <a [href]="statusOrg.home" target="_blank" rel="noopener">{{
statusOrg.home }}</a>
+ </span>
+ <span class="meta-item" *ngIf="statusOrg.feedback">
+ <i nz-icon nzType="message" nzTheme="outline"></i>
+ <a [href]="statusOrg.feedback" target="_blank" rel="noopener">{{
statusOrg.feedback }}</a>
+ </span>
+ <span class="meta-item" *ngIf="statusOrg.color">
+ <i nz-icon nzType="bg-colors" nzTheme="outline"></i>
+ <span class="color-chip"
[style.background]="statusOrg.color"></span>
+ <span>{{ statusOrg.color }}</span>
+ </span>
+ </div>
+ </div>
+ <div class="status-org-summary-actions">
+ <a routerLink="/status" target="_blank" class="status-preview-link">
+ <i nz-icon nzType="eye" nzTheme="outline"></i>
+ {{ 'status.preview' | i18n }}
+ <i nz-icon nzType="arrow-right" nzTheme="outline"></i>
+ </a>
+ <button nz-button nzType="default" (click)="startEditOrg()">
+ <i nz-icon nzType="edit" nzTheme="outline"></i>
+ {{ 'common.button.edit' | i18n }}
+ </button>
+ </div>
+ </div>
+ </ng-container>
+
+ <!-- Inline edit form -->
+ <ng-container *ngIf="orgEditing">
+ <div class="status-org-edit-header">
+ <span class="status-org-edit-title">
+ <i nz-icon nzType="setting" nzTheme="outline"></i>
+ {{ 'status.org.edit' | i18n }}
+ </span>
+ </div>
+ <div class="-inner-content">
+ <form nz-form #newForm="ngForm">
+ <nz-form-item>
+ <nz-form-label [nzSpan]="7" nzFor="name" nzRequired="true">
+ {{ 'status.org.name' | i18n }}
+ </nz-form-label>
+ <nz-form-control [nzSpan]="12" [nzErrorTip]="'validation.required'
| i18n">
+ <input
+ [(ngModel)]="statusOrgForEdit.name"
+ nz-input
+ name="name"
+ type="text"
+ id="name"
+ required
+ [placeholder]="'status.org.name.tip' | i18n"
+ />
+ </nz-form-control>
+ </nz-form-item>
+ <nz-form-item>
+ <nz-form-label [nzSpan]="7" nzFor="desc" nzRequired="true">
+ {{ 'status.org.desc' | i18n }}
+ </nz-form-label>
+ <nz-form-control [nzSpan]="12" [nzErrorTip]="'validation.required'
| i18n">
+ <input
+ [(ngModel)]="statusOrgForEdit.description"
+ nz-input
+ required
+ name="desc"
+ type="text"
+ id="desc"
+ [placeholder]="'status.org.desc.tip' | i18n"
+ />
+ </nz-form-control>
+ </nz-form-item>
+ <nz-form-item>
+ <nz-form-label [nzSpan]="7" nzFor="home" nzRequired="true">
+ {{ 'status.org.home' | i18n }}
+ </nz-form-label>
+ <nz-form-control [nzSpan]="12" [nzErrorTip]="'validation.required'
| i18n">
+ <input
+ [(ngModel)]="statusOrgForEdit.home"
+ nz-input
+ required
+ name="home"
+ type="text"
+ id="home"
+ [placeholder]="'status.org.home.tip' | i18n"
+ />
+ </nz-form-control>
+ </nz-form-item>
+ <nz-form-item>
+ <nz-form-label [nzSpan]="7" nzFor="logo" nzRequired="true">
+ {{ 'status.org.logo' | i18n }}
+ </nz-form-label>
+ <nz-form-control [nzSpan]="12" [nzErrorTip]="'validation.required'
| i18n">
+ <input
+ [(ngModel)]="statusOrgForEdit.logo"
+ nz-input
+ required
+ name="logo"
+ type="text"
+ id="logo"
+ [placeholder]="'status.org.logo.tip' | i18n"
+ />
+ </nz-form-control>
+ </nz-form-item>
+ <nz-form-item>
+ <nz-form-label [nzSpan]="7" nzFor="feedback" nzRequired="true">
+ {{ 'status.org.feedback' | i18n }}
+ </nz-form-label>
+ <nz-form-control [nzSpan]="12" [nzErrorTip]="'validation.required'
| i18n">
+ <input
+ [(ngModel)]="statusOrgForEdit.feedback"
+ nz-input
+ required
+ name="feedback"
+ type="text"
+ id="feedback"
+ [placeholder]="'status.org.feedback.tip' | i18n"
+ />
+ </nz-form-control>
+ </nz-form-item>
+ <nz-form-item>
+ <nz-form-label [nzSpan]="7" nzFor="color">
+ {{ 'status.org.color' | i18n }}
+ </nz-form-label>
+ <nz-form-control [nzSpan]="12">
+ <input
+ [(colorPicker)]="statusOrgForEdit.color"
+ cpFallbackColor="#e9f3d3"
+ cpOutputFormat="hex"
+ [style.background]="statusOrgForEdit.color"
+ style="width: 100%"
+ nz-input
+ required
+ name="color"
+ type="text"
+ id="color"
+ [placeholder]="statusOrgForEdit.color == undefined ?
('status.org.color.tip' | i18n) : ''"
+ />
+ </nz-form-control>
+ </nz-form-item>
+ <div nz-row>
+ <div nz-col [nzXs]="{ span: 24 }" [nzLg]="{ span: 12, offset: 7 }"
class="status-org-edit-actions">
+ <button nz-button type="button" (click)="cancelEditOrg()"
*ngIf="statusOrg?.id != undefined">
+ {{ 'common.button.cancel' | i18n }}
+ </button>
+ <button nz-button nzType="primary" type="submit"
(click)="onSaveStatusOrg(newForm.form)">
+ {{ 'common.button.ok' | i18n }}
+ </button>
+ </div>
+ </div>
+ </form>
+ </div>
+ </ng-container>
</div>
</nz-spin>
-<nz-divider></nz-divider>
-
-<nz-tabset nzSize="large" [nzTabBarGutter]="8">
+<nz-tabset nzSize="large" [nzTabBarGutter]="8" class="status-tabset">
<nz-tab [nzTitle]="'status.component' | i18n"
(nzClick)="loadComponentInfo()">
<app-toolbar>
<ng-template #left>
@@ -152,23 +230,17 @@
<i nz-icon nzType="appstore-add" nzTheme="outline"></i>
{{ 'status.component.new' | i18n }}
</button>
- <button *ngIf="statusOrg?.id != undefined && statusOrg?.name !=
undefined" nz-button nzType="primary">
- <a routerLink="/status" target="_blank">
- <i nz-icon nzType="link" nzTheme="outline"></i>
- {{ statusOrg.name + ' ' + ('menu.advanced.status' | i18n) }}
- </a>
- </button>
</ng-template>
</app-toolbar>
- <nz-table #fixedTable [nzData]="statusComponents"
nzFrontPagination="false" [nzLoading]="componentLoading" [nzScroll]="{ x:
'1240px' }">
+ <nz-table #fixedTable [nzData]="statusComponents"
nzFrontPagination="false" [nzLoading]="componentLoading">
<thead>
<tr>
- <th nzAlign="center" nzWidth="15%">{{ 'status.component.name' | i18n
}}</th>
- <th nzAlign="center" nzWidth="15%">{{ 'status.component.state' |
i18n }}</th>
- <th nzAlign="center" nzWidth="15%">{{ 'status.component.method' |
i18n }}</th>
- <th nzAlign="center" nzWidth="15%">{{ 'status.component.tag' | i18n
}}</th>
- <th nzAlign="center" nzWidth="20%">{{ 'common.edit-time' | i18n
}}</th>
- <th nzAlign="center" nzWidth="15%">{{ 'common.edit' | i18n }}</th>
+ <th nzAlign="center" nzWidth="18%">{{ 'status.component.name' | i18n
}}</th>
+ <th nzAlign="center" nzWidth="12%">{{ 'status.component.state' |
i18n }}</th>
+ <th nzAlign="center" nzWidth="14%">{{ 'status.component.method' |
i18n }}</th>
+ <th nzAlign="center" nzWidth="20%">{{ 'status.component.tag' | i18n
}}</th>
+ <th nzAlign="center" nzWidth="22%">{{ 'common.edit-time' | i18n
}}</th>
+ <th nzAlign="center" nzWidth="14%">{{ 'common.edit' | i18n }}</th>
</tr>
</thead>
<tbody>
@@ -244,12 +316,6 @@
<i nz-icon nzType="appstore-add" nzTheme="outline"></i>
{{ 'status.incident.new' | i18n }}
</button>
- <button *ngIf="statusOrg?.id != undefined && statusOrg?.name !=
undefined" nz-button nzType="primary">
- <a routerLink="/status" target="_blank">
- <i nz-icon nzType="link" nzTheme="outline"></i>
- {{ statusOrg.name + ' ' + ('menu.advanced.status' | i18n) }}
- </a>
- </button>
</ng-template>
<ng-template #right>
<app-multi-func-input
@@ -279,16 +345,15 @@
nzShowPagination="true"
nzShowSizeChanger
[nzLoading]="incidentLoading"
- [nzScroll]="{ x: '1240px' }"
>
<thead>
<tr>
- <th nzAlign="center" nzWidth="15%">{{ 'status.incident.name' | i18n
}}</th>
+ <th nzAlign="center" nzWidth="16%">{{ 'status.incident.name' | i18n
}}</th>
<th nzAlign="center" nzWidth="10%">{{ 'status.incident.state' | i18n
}}</th>
- <th nzAlign="center" nzWidth="40%">{{
'status.incident.message-latest' | i18n }}</th>
- <th nzAlign="center" nzWidth="15%">{{ 'status.incident.component' |
i18n }}</th>
- <th nzAlign="center" nzWidth="10%">{{ 'common.new-time' | i18n
}}</th>
- <th nzAlign="center" nzWidth="10%">{{ 'common.edit' | i18n }}</th>
+ <th nzAlign="center" nzWidth="34%">{{
'status.incident.message-latest' | i18n }}</th>
+ <th nzAlign="center" nzWidth="14%">{{ 'status.incident.component' |
i18n }}</th>
+ <th nzAlign="center" nzWidth="12%">{{ 'common.new-time' | i18n
}}</th>
+ <th nzAlign="center" nzWidth="14%">{{ 'common.edit' | i18n }}</th>
</tr>
</thead>
<tbody>
diff --git a/web-app/src/app/routes/setting/status/status.component.less
b/web-app/src/app/routes/setting/status/status.component.less
index e69de29bb2..eeb634bd1d 100644
--- a/web-app/src/app/routes/setting/status/status.component.less
+++ b/web-app/src/app/routes/setting/status/status.component.less
@@ -0,0 +1,267 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ */
+
+:host {
+ display: block;
+}
+
+.status-org-card {
+ background: #fff;
+ border-radius: 8px;
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04), 0 2px 8px rgba(0, 0, 0, 0.04);
+ margin-bottom: 20px;
+ overflow: hidden;
+ transition: box-shadow 0.2s ease;
+
+ &:hover {
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.06), 0 4px 16px rgba(0, 0, 0, 0.06);
+ }
+}
+
+/* ---------- Empty state ---------- */
+.status-org-empty {
+ display: flex;
+ align-items: center;
+ gap: 20px;
+ padding: 28px 32px;
+ background: linear-gradient(135deg, #f0f5ff 0%, #fafafa 100%);
+ border-left: 4px solid #1890ff;
+}
+
+.status-org-empty-icon {
+ flex: 0 0 64px;
+ height: 64px;
+ border-radius: 50%;
+ background: #fff;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 28px;
+ color: #1890ff;
+ box-shadow: 0 2px 8px rgba(24, 144, 255, 0.15);
+}
+
+.status-org-empty-content {
+ flex: 1;
+ min-width: 0;
+}
+
+.status-org-empty-title {
+ font-size: 16px;
+ font-weight: 600;
+ color: rgba(0, 0, 0, 0.85);
+ margin-bottom: 4px;
+}
+
+.status-org-empty-desc {
+ font-size: 13px;
+ color: rgba(0, 0, 0, 0.55);
+ line-height: 1.6;
+}
+
+.status-org-empty-action {
+ flex: 0 0 auto;
+}
+
+/* ---------- Configured summary ---------- */
+.status-org-summary {
+ display: flex;
+ align-items: center;
+ gap: 20px;
+ padding: 20px 24px;
+ border-left: 4px solid #1890ff;
+ transition: border-color 0.2s ease;
+}
+
+.status-org-summary-logo {
+ flex: 0 0 64px;
+ width: 64px;
+ height: 64px;
+ border-radius: 12px;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ overflow: hidden;
+ color: #fff;
+ font-size: 28px;
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
+
+ img {
+ max-width: 100%;
+ max-height: 100%;
+ object-fit: contain;
+ }
+}
+
+.status-org-summary-body {
+ flex: 1;
+ min-width: 0;
+}
+
+.status-org-summary-title {
+ display: flex;
+ align-items: center;
+ gap: 10px;
+ margin-bottom: 6px;
+
+ .status-org-name {
+ font-size: 18px;
+ font-weight: 600;
+ color: rgba(0, 0, 0, 0.88);
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ }
+
+ .status-org-tag {
+ margin-right: 0;
+ display: inline-flex;
+ align-items: center;
+ gap: 4px;
+ }
+}
+
+.status-org-summary-desc {
+ font-size: 13px;
+ color: rgba(0, 0, 0, 0.55);
+ margin-bottom: 8px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ display: -webkit-box;
+ -webkit-line-clamp: 2;
+ -webkit-box-orient: vertical;
+}
+
+.status-org-summary-meta {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 16px;
+ font-size: 12px;
+ color: rgba(0, 0, 0, 0.55);
+
+ .meta-item {
+ display: inline-flex;
+ align-items: center;
+ gap: 6px;
+ max-width: 260px;
+
+ a {
+ color: rgba(0, 0, 0, 0.55);
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+
+ &:hover {
+ color: #1890ff;
+ }
+ }
+ }
+
+ .color-chip {
+ display: inline-block;
+ width: 12px;
+ height: 12px;
+ border-radius: 3px;
+ border: 1px solid rgba(0, 0, 0, 0.08);
+ }
+}
+
+.status-org-summary-actions {
+ flex: 0 0 auto;
+ display: flex;
+ align-items: center;
+ gap: 12px;
+}
+
+.status-preview-link {
+ display: inline-flex;
+ align-items: center;
+ gap: 6px;
+ padding: 6px 14px;
+ border-radius: 16px;
+ background: linear-gradient(135deg, #1890ff 0%, #36cfc9 100%);
+ color: #fff !important;
+ font-size: 13px;
+ font-weight: 500;
+ transition: all 0.2s ease;
+ box-shadow: 0 2px 6px rgba(24, 144, 255, 0.25);
+
+ &:hover {
+ transform: translateY(-1px);
+ box-shadow: 0 4px 12px rgba(24, 144, 255, 0.35);
+ color: #fff !important;
+ }
+
+ i {
+ font-size: 12px;
+ }
+}
+
+/* ---------- Inline edit form ---------- */
+.status-org-edit-header {
+ padding: 16px 24px;
+ border-bottom: 1px solid #f0f0f0;
+ background: #fafafa;
+
+ .status-org-edit-title {
+ display: inline-flex;
+ align-items: center;
+ gap: 8px;
+ font-size: 15px;
+ font-weight: 600;
+ color: rgba(0, 0, 0, 0.85);
+ }
+}
+
+.status-org-card .-inner-content {
+ padding: 24px 24px 8px;
+}
+
+.status-org-edit-actions {
+ text-align: right;
+ display: flex;
+ justify-content: flex-end;
+ gap: 12px;
+ padding-top: 8px;
+}
+
+/* ---------- Tabset polish ---------- */
+.status-tabset {
+ background: #fff;
+ border-radius: 8px;
+ padding: 8px 16px 16px;
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04), 0 2px 8px rgba(0, 0, 0, 0.04);
+}
+
+/* ---------- Responsive ---------- */
+@media (max-width: 768px) {
+ .status-org-empty,
+ .status-org-summary {
+ flex-wrap: wrap;
+ padding: 20px 16px;
+ }
+
+ .status-org-summary-actions {
+ width: 100%;
+ justify-content: flex-end;
+ padding-top: 12px;
+ border-top: 1px dashed #f0f0f0;
+ }
+
+ .status-org-summary-meta {
+ gap: 10px;
+
+ .meta-item {
+ max-width: 100%;
+ }
+ }
+}
diff --git a/web-app/src/app/routes/setting/status/status.component.ts
b/web-app/src/app/routes/setting/status/status.component.ts
index 660b12ea8e..cd33eac8e1 100644
--- a/web-app/src/app/routes/setting/status/status.component.ts
+++ b/web-app/src/app/routes/setting/status/status.component.ts
@@ -71,6 +71,7 @@ export class StatusComponent implements OnInit {
pageIndex: number = 1;
pageSize: number = 8;
total: number = 0;
+ orgEditing: boolean = false;
ngOnInit(): void {
this.loadStatusPageConfig();
@@ -184,6 +185,8 @@ export class StatusComponent implements OnInit {
(message: Message<StatusPageOrg>) => {
if (message.code === 0) {
this.statusOrg = message.data;
+ this.statusOrgForEdit = { ...this.statusOrg };
+ this.orgEditing = false;
this.notifySvc.success(this.i18nSvc.fanyi('common.notify.apply-success'), '');
} else {
this.notifySvc.error(this.i18nSvc.fanyi('common.notify.apply-fail'),
message.msg);
@@ -197,6 +200,16 @@ export class StatusComponent implements OnInit {
);
}
+ startEditOrg() {
+ this.statusOrgForEdit = { ...this.statusOrg };
+ this.orgEditing = true;
+ }
+
+ cancelEditOrg() {
+ this.statusOrgForEdit = { ...this.statusOrg };
+ this.orgEditing = false;
+ }
+
onNewStatusComponent() {
this.isComponentModalAdd = true;
this.currentStatusComponent = new StatusPageComponent();
diff --git a/web-app/src/assets/i18n/en-US.json
b/web-app/src/assets/i18n/en-US.json
index 0f82ca7be5..7095b07d2a 100644
--- a/web-app/src/assets/i18n/en-US.json
+++ b/web-app/src/assets/i18n/en-US.json
@@ -1074,8 +1074,12 @@
"status.incident.update": "Update Incident",
"status.org.color": "Theme Color",
"status.org.color.tip": "Please config the status page theme color",
+ "status.org.configured": "Configured",
"status.org.desc": "Introduction",
"status.org.desc.tip": "Introduction to the organization information
displayed on the status page",
+ "status.org.edit": "Edit Organization",
+ "status.org.empty.desc": "Set up your organization name, logo and theme
color to publish a branded status page for your users.",
+ "status.org.empty.title": "Organization information not configured yet",
"status.org.feedback": "Feedback Link",
"status.org.feedback.tip": "Please config the users feedback contact
address",
"status.org.home": "Website Link",
@@ -1084,7 +1088,10 @@
"status.org.logo.tip": "Please config the organization logo image URL
address, suggest svg",
"status.org.name": "Organization Name",
"status.org.name.tip": "The name of the organization team displayed on the
status page, such as TanCloud",
+ "status.org.setup": "Set Up Now",
"status.org.state": "Organization State",
+ "status.org.title": "Organization",
+ "status.preview": "View Status Page",
"status.page": "Status Page",
"status.public.30-day": "30 days ago",
"status.public.feedback": "Feedback Issue",
diff --git a/web-app/src/assets/i18n/ja-JP.json
b/web-app/src/assets/i18n/ja-JP.json
index 352f40db66..3901bce547 100644
--- a/web-app/src/assets/i18n/ja-JP.json
+++ b/web-app/src/assets/i18n/ja-JP.json
@@ -997,13 +997,20 @@
"status.org.desc.tip": "ステータスページに表示される組織情報の紹介",
"status.org.feedback": "フィードバックリンク",
"status.org.feedback.tip": "ユーザーのフィードバック連絡先を設定してください",
+ "status.org.configured": "設定済み",
+ "status.org.edit": "組織情報を編集",
+ "status.org.empty.desc": "組織名、ロゴ、テーマカラーなどのブランド情報を設定すると、ステータスページを公開できます。",
+ "status.org.empty.title": "組織情報がまだ設定されていません",
"status.org.home": "ウェブサイトリンク",
"status.org.home.tip": "組織のウェブサイトのホームページアドレスを設定してください",
"status.org.logo": "ロゴ画像",
"status.org.logo.tip": "組織のロゴ画像のURLアドレスを設定してください。svgを推奨します",
"status.org.name": "組織名",
"status.org.name.tip": "ステータスページに表示される組織チームの名前。例:TanCloud",
+ "status.org.setup": "今すぐ設定",
"status.org.state": "組織ステータス",
+ "status.org.title": "組織情報",
+ "status.preview": "ステータスページを表示",
"status.page": "ステータスページ",
"status.public.30-day": "30日前",
"status.public.feedback": "フィードバック問題",
diff --git a/web-app/src/assets/i18n/pt-BR.json
b/web-app/src/assets/i18n/pt-BR.json
index 0cb486e1ef..7b4acec48b 100644
--- a/web-app/src/assets/i18n/pt-BR.json
+++ b/web-app/src/assets/i18n/pt-BR.json
@@ -981,7 +981,14 @@
"status.org.feedback.tip": "Por favor, configure o endereço de contato de
feedback dos usuários",
"status.org.color": "Cor do Tema",
"status.org.color.tip": "Por favor, configure a cor do tema da página de
status",
+ "status.org.configured": "Configurado",
+ "status.org.edit": "Editar Organização",
+ "status.org.empty.desc": "Configure o nome da organização, logo e cor do
tema para publicar uma página de status com sua marca.",
+ "status.org.empty.title": "Informações da organização ainda não
configuradas",
+ "status.org.setup": "Configurar Agora",
"status.org.state": "Estado da Organização",
+ "status.org.title": "Organização",
+ "status.preview": "Ver Página de Status",
"status.public.feedback": "FEEDBACK DE PROBLEMAS",
"status.public.org.state.0": "Todos os Sistemas Operacionais",
"status.public.org.state.1": "Alguns Sistemas Anormais",
diff --git a/web-app/src/assets/i18n/zh-CN.json
b/web-app/src/assets/i18n/zh-CN.json
index d4c74654eb..7921a5dab4 100644
--- a/web-app/src/assets/i18n/zh-CN.json
+++ b/web-app/src/assets/i18n/zh-CN.json
@@ -1077,8 +1077,12 @@
"status.incident.update": "更新事件",
"status.org.color": "主题颜色",
"status.org.color.tip": "请配置状态页面主题背景颜色",
+ "status.org.configured": "已配置",
"status.org.desc": "组织介绍",
"status.org.desc.tip": "状态页面展示的组织信息介绍",
+ "status.org.edit": "编辑组织信息",
+ "status.org.empty.desc": "完善组织名称、Logo、主题色等品牌信息后,即可对外展示状态页。",
+ "status.org.empty.title": "尚未配置状态页组织信息",
"status.org.feedback": "反馈地址",
"status.org.feedback.tip": "请配置用户报告反馈问题的地址",
"status.org.home": "网站链接",
@@ -1087,7 +1091,10 @@
"status.org.logo.tip": "请配置组织Logo图片URL地址,建议SVG格式",
"status.org.name": "组织名称",
"status.org.name.tip": "状态页面展示的组织团队名称,如 TanCloud",
+ "status.org.setup": "立即配置",
"status.org.state": "组织状态",
+ "status.org.title": "组织信息",
+ "status.preview": "查看状态页",
"status.page": "状态页面",
"status.public.30-day": "30天前",
"status.public.feedback": "问题反馈",
diff --git a/web-app/src/assets/i18n/zh-TW.json
b/web-app/src/assets/i18n/zh-TW.json
index ba46a82bb6..219d38891d 100644
--- a/web-app/src/assets/i18n/zh-TW.json
+++ b/web-app/src/assets/i18n/zh-TW.json
@@ -1011,13 +1011,20 @@
"status.org.desc.tip": "狀態頁面展示的組織信息介紹",
"status.org.feedback": "反饋地址",
"status.org.feedback.tip": "請配置用戶報告反饋問題的地址",
+ "status.org.configured": "已配置",
+ "status.org.edit": "編輯組織資訊",
+ "status.org.empty.desc": "完善組織名稱、Logo、主題色等品牌資訊後,即可對外展示狀態頁。",
+ "status.org.empty.title": "尚未配置狀態頁組織資訊",
"status.org.home": "網站鏈接",
"status.org.home.tip": "請配置組織的網站主頁地址",
"status.org.logo": "標誌圖片",
"status.org.logo.tip": "請配置組織Logo圖片URL地址,建議SVG格式",
"status.org.name": "組織名稱",
"status.org.name.tip": "狀態頁面展示的組織團隊名稱,如 TanCloud",
+ "status.org.setup": "立即配置",
"status.org.state": "組織狀態",
+ "status.org.title": "組織資訊",
+ "status.preview": "查看狀態頁",
"status.page": "狀態頁面",
"status.public.30-day": "30天前",
"status.public.feedback": "問題反饋",
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]