From cc43fe2e0110f5ff680d011cdc411dc5e59d4aac Mon Sep 17 00:00:00 2001 From: puz <13060209078@163.com> Date: Thu, 2 Jul 2026 17:29:39 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=95=8C=E9=9D=A2=E4=BC=98=E5=8C=961?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../shared/DataListPanel/DataListPanel.css | 7 + .../components/shared/ListTable/ListTable.css | 18 + .../SummaryStatCards/SummaryStatCards.css | 38 ++ .../shared/SummaryStatCards/index.tsx | 41 +++ frontend/src/pages/access/users/index.tsx | 14 +- .../src/pages/business/ClientManagement.css | 41 +-- .../src/pages/business/ClientManagement.tsx | 24 +- .../pages/business/ExternalAppManagement.css | 39 +-- .../pages/business/ExternalAppManagement.tsx | 45 ++- .../src/pages/business/LicenseManagement.css | 41 +-- .../src/pages/business/LicenseManagement.tsx | 34 +- frontend/src/pages/business/MeetingDetail.css | 325 +++++++++++++++++- frontend/src/pages/business/MeetingDetail.tsx | 69 ++-- frontend/src/pages/business/Meetings.css | 20 +- frontend/src/pages/business/Meetings.tsx | 8 +- frontend/src/pages/dashboard/index.css | 21 -- frontend/src/pages/dashboard/index.tsx | 29 +- frontend/src/pages/devices/index.less | 39 +-- frontend/src/pages/devices/index.tsx | 28 +- .../src/pages/organization/tenants/index.less | 20 +- .../src/pages/system/dictionaries/index.less | 12 + .../src/pages/system/dictionaries/index.tsx | 6 +- 22 files changed, 605 insertions(+), 314 deletions(-) create mode 100644 frontend/src/components/shared/SummaryStatCards/SummaryStatCards.css create mode 100644 frontend/src/components/shared/SummaryStatCards/index.tsx diff --git a/frontend/src/components/shared/DataListPanel/DataListPanel.css b/frontend/src/components/shared/DataListPanel/DataListPanel.css index 399bed0..cc35036 100644 --- a/frontend/src/components/shared/DataListPanel/DataListPanel.css +++ b/frontend/src/components/shared/DataListPanel/DataListPanel.css @@ -177,6 +177,13 @@ line-height: 22px; } +.data-list-panel__table-area .ant-table-thead > tr > th:last-child, +.data-list-panel__table-area .ant-table-tbody > tr > td:last-child, +.data-list-panel__table-area .ant-table-thead > tr > th.ant-table-cell-fix-right, +.data-list-panel__table-area .ant-table-tbody > tr > td.ant-table-cell-fix-right { + padding-right: 24px; +} + .data-list-panel__table-area .ant-table-content, .data-list-panel__table-area .ant-table-body { overflow-x: auto !important; diff --git a/frontend/src/components/shared/ListTable/ListTable.css b/frontend/src/components/shared/ListTable/ListTable.css index 1f2d1d9..95c8d2c 100644 --- a/frontend/src/components/shared/ListTable/ListTable.css +++ b/frontend/src/components/shared/ListTable/ListTable.css @@ -70,6 +70,24 @@ border-bottom: 1px solid var(--app-border-color, #f0f0f0); } +.list-table-container .ant-table-thead > tr > th:last-child, +.list-table-container .ant-table-tbody > tr > td:last-child, +.list-table-container .ant-table-thead > tr > th.ant-table-cell-fix-right, +.list-table-container .ant-table-tbody > tr > td.ant-table-cell-fix-right { + padding-right: 24px; +} + +.list-table-container .ant-table-thead > tr > th:last-child, +.list-table-container .ant-table-tbody > tr > td:last-child { + text-align: right; +} + +.list-table-container .ant-table-tbody > tr > td:last-child .ant-space, +.list-table-container .ant-table-tbody > tr > td.ant-table-cell-fix-right .ant-space { + justify-content: flex-end; + width: 100%; +} + .list-table-container .ant-table-tbody > tr:not(.row-selected):not(.ant-table-row-selected):hover > td { background: var(--app-surface-color, #fff) !important; } diff --git a/frontend/src/components/shared/SummaryStatCards/SummaryStatCards.css b/frontend/src/components/shared/SummaryStatCards/SummaryStatCards.css new file mode 100644 index 0000000..3f0453f --- /dev/null +++ b/frontend/src/components/shared/SummaryStatCards/SummaryStatCards.css @@ -0,0 +1,38 @@ +.summary-stat-cards { + flex-shrink: 0; + min-width: 0; +} + +.summary-stat-cards__card { + height: 100%; + min-height: 112px; + border: 1px solid #e6e6e6; + border-radius: 12px; + background: #fff; + box-shadow: none; +} + +.summary-stat-cards__card .ant-card-body { + height: 100%; + padding: 26px 24px; + display: flex; + align-items: center; +} + +.summary-stat-cards__label { + color: var(--app-text-secondary, #9095a1); + font-size: 13px; +} + +.summary-stat-cards__card .ant-statistic-content { + display: flex; + align-items: center; + line-height: 1; +} + +.summary-stat-cards__icon { + margin-right: 8px; + display: inline-flex; + align-items: center; + line-height: 1; +} diff --git a/frontend/src/components/shared/SummaryStatCards/index.tsx b/frontend/src/components/shared/SummaryStatCards/index.tsx new file mode 100644 index 0000000..b1c80af --- /dev/null +++ b/frontend/src/components/shared/SummaryStatCards/index.tsx @@ -0,0 +1,41 @@ +import type { CSSProperties, ReactNode } from "react"; +import { Card, Col, Row, Statistic } from "antd"; +import "./SummaryStatCards.css"; + +export interface SummaryStatCardItem { + key: string; + label: ReactNode; + value: string | number; + icon: ReactNode; + color: string; +} + +interface SummaryStatCardsProps { + items: SummaryStatCardItem[]; + ariaLabel?: string; +} + +export default function SummaryStatCards({ items, ariaLabel }: SummaryStatCardsProps) { + return ( +