From 544880af7b2fe5297c3320388425859c58cab143 Mon Sep 17 00:00:00 2001 From: lizhensheng Date: Tue, 24 Mar 2026 17:42:57 +0800 Subject: [PATCH 1/3] [fix]: add button permission checks and fix top announcement banner layout --- packages/base/src/locale/en-US/dmsHome.ts | 5 +- packages/base/src/locale/zh-CN/dmsHome.ts | 5 +- .../__snapshots__/index.test.tsx.snap | 10 +-- .../Home/AIBanner/__test__/index.test.tsx | 54 ++++++++++----- .../__snapshots__/index.test.tsx.snap | 20 +++++- .../SqlRewrittenExampleDrawer/index.test.tsx | 9 +++ .../SqlRewrittenExampleDrawer/index.tsx | 11 +++ .../base/src/page/Home/AIBanner/index.tsx | 67 +++++++++++-------- packages/base/src/page/Home/AIBanner/style.ts | 29 ++++---- .../page/Nav/CompanyNoticeBanner/index.tsx | 13 ++++ .../src/page/Nav/CompanyNoticeBanner/style.ts | 10 ++- .../CompanyNoticeForm/index.tsx | 12 ---- .../src/components/PageHeader/style.ts | 1 + packages/dms-kit/src/styleWrapper/nav.ts | 1 + .../components/SqlRewrittenDrawer/index.tsx | 2 +- .../SqlRewrittenDrawer/index.type.ts | 3 +- .../sqle/src/page/ReportStatistics/style.ts | 6 +- 17 files changed, 170 insertions(+), 88 deletions(-) diff --git a/packages/base/src/locale/en-US/dmsHome.ts b/packages/base/src/locale/en-US/dmsHome.ts index 139501b9e3..bde3974da4 100644 --- a/packages/base/src/locale/en-US/dmsHome.ts +++ b/packages/base/src/locale/en-US/dmsHome.ts @@ -12,7 +12,10 @@ export default { aiPerformanceEngine: 'AI Performance Engine', aiSmartCorrection: 'AI Smart Correction', paidFeaturePrompt: - 'This feature is a paid value-added module. Please contact sales for details' + 'This feature is a paid value-added module. Please contact sales for details', + aiBannerExampleDrawerTitle: 'SQL Rewritten Example', + aiBannerExampleDrawerDescription: + 'This example shows the SQL comparison after AI smart correction. When using it in practice, please first perform SQL audit, and the system will automatically provide the correction entry for the SQL that triggers the rules.' }, defaultScene: { header: { diff --git a/packages/base/src/locale/zh-CN/dmsHome.ts b/packages/base/src/locale/zh-CN/dmsHome.ts index 6b08a85967..fa4864ad82 100644 --- a/packages/base/src/locale/zh-CN/dmsHome.ts +++ b/packages/base/src/locale/zh-CN/dmsHome.ts @@ -10,7 +10,10 @@ export default { times: '次', aiPerformanceEngine: 'AI 性能引擎', aiSmartCorrection: 'AI 智能修正', - paidFeaturePrompt: '当前功能为付费增值模块,请联系商务获取详细信息' + paidFeaturePrompt: '当前功能为付费增值模块,请联系商务获取详细信息', + aiBannerExampleDrawerTitle: 'SQL 重写示例', + aiBannerExampleDrawerDescription: + '本示例展示 AI 智能修正后的 SQL 对比。实际使用时,请先进行 SQL 审核,系统将针对触发规则的 SQL 自动提供修正入口。' }, defaultScene: { header: { diff --git a/packages/base/src/page/Home/AIBanner/__test__/__snapshots__/index.test.tsx.snap b/packages/base/src/page/Home/AIBanner/__test__/__snapshots__/index.test.tsx.snap index 4a868e11e4..43491f284f 100644 --- a/packages/base/src/page/Home/AIBanner/__test__/__snapshots__/index.test.tsx.snap +++ b/packages/base/src/page/Home/AIBanner/__test__/__snapshots__/index.test.tsx.snap @@ -4,7 +4,7 @@ exports[`test base/home/AIBanner should match snapshot and render metrics and ac
@@ -176,7 +176,7 @@ exports[`test base/home/AIBanner should match snapshot and render metrics and ac
@@ -186,7 +186,7 @@ exports[`test base/home/AIBanner should match snapshot and render metrics and ac class="right-section" >
)} @@ -211,9 +221,9 @@ const AIBanner: React.FC = () => { {bannerState.metrics.performanceOptimization.evaluation && ( - + {bannerState.metrics.performanceOptimization.evaluation} - + )} )} @@ -221,21 +231,22 @@ const AIBanner: React.FC = () => { {/* 右侧:快捷行动按钮 */}
- {showPerformanceEngineButton && ( - - )} + {showPerformanceEngineButton && + checkPagePermission(PERMISSIONS.PAGES.SQLE.SQL_OPTIMIZATION) && ( + + + {t('dmsHome.aiBanner.aiPerformanceEngine')} + + + + )} {showSmartCorrectionButton && ( - + )}
diff --git a/packages/base/src/page/Home/AIBanner/style.ts b/packages/base/src/page/Home/AIBanner/style.ts index 3c7dad4939..b0463b251f 100644 --- a/packages/base/src/page/Home/AIBanner/style.ts +++ b/packages/base/src/page/Home/AIBanner/style.ts @@ -154,25 +154,22 @@ export const AIBannerStyleWrapper = styled('div')` font-size: 14px; &.primary-button { - background: linear-gradient(135deg, #722ed1 0%, #9254de 100%); + background: linear-gradient( + 135deg, + #722ed1 0%, + #9254de 100% + ) !important; border: none; - color: #fff; - - &:hover { - background: linear-gradient(135deg, #9254de 0%, #b37feb 100%); - color: #fff; - } - } - - &.secondary-button { - background: ${({ theme }) => theme.sharedTheme.uiToken.colorBgBase}; - border: 1px solid - ${({ theme }) => theme.sharedTheme.uiToken.colorBorder}; - color: ${({ theme }) => theme.sharedTheme.uiToken.colorText}; + color: ${({ theme }) => theme.sharedTheme.basic.colorWhite}; + box-shadow: none !important; &:hover { - border-color: #722ed1; - color: #722ed1; + background: linear-gradient( + 135deg, + #9254de 0%, + #b37feb 100% + ) !important; + color: ${({ theme }) => theme.sharedTheme.basic.colorWhite}; } } } diff --git a/packages/base/src/page/Nav/CompanyNoticeBanner/index.tsx b/packages/base/src/page/Nav/CompanyNoticeBanner/index.tsx index 419ffc1fb3..4b527f102b 100644 --- a/packages/base/src/page/Nav/CompanyNoticeBanner/index.tsx +++ b/packages/base/src/page/Nav/CompanyNoticeBanner/index.tsx @@ -30,6 +30,19 @@ const CompanyNoticeBanner: React.FC = () => { } ); + useEffect(() => { + document.documentElement.style.setProperty( + '--notice-banner-height', + noticeStr ? '34px' : '0px' + ); + return () => { + document.documentElement.style.setProperty( + '--notice-banner-height', + '0px' + ); + }; + }, [noticeStr]); + useEffect(() => { const el = textRef.current; if (!el || !noticeStr) return; diff --git a/packages/base/src/page/Nav/CompanyNoticeBanner/style.ts b/packages/base/src/page/Nav/CompanyNoticeBanner/style.ts index 093be2c565..45087aaf62 100644 --- a/packages/base/src/page/Nav/CompanyNoticeBanner/style.ts +++ b/packages/base/src/page/Nav/CompanyNoticeBanner/style.ts @@ -1,15 +1,21 @@ import { styled } from '@mui/material/styles'; export const CompanyNoticeBannerStyleWrapper = styled('div')` + position: fixed; + top: 0; + left: ${({ theme }) => theme.sharedTheme.nav.width}px; + width: calc(100% - ${({ theme }) => theme.sharedTheme.nav.width}px); display: flex; align-items: center; height: 36px; flex-shrink: 0; background: linear-gradient( 90deg, - ${({ theme }) => theme.sharedTheme.uiToken.colorWarningBgHover} 0%, - ${({ theme }) => theme.sharedTheme.uiToken.colorWarningBgHover}cc 100% + ${({ theme }) => theme.sharedTheme.uiToken.colorWarningBgHover}e6 0%, + ${({ theme }) => theme.sharedTheme.uiToken.colorWarningBgHover}bf 100% ); + backdrop-filter: blur(6px); + -webkit-backdrop-filter: blur(6px); border-bottom: 1px solid ${({ theme }) => theme.sharedTheme.uiToken.colorWarning}66; padding: 0 16px; diff --git a/packages/base/src/page/Nav/SideMenu/UserMenu/Modal/CompanyNoticeModal/CompanyNoticeForm/index.tsx b/packages/base/src/page/Nav/SideMenu/UserMenu/Modal/CompanyNoticeModal/CompanyNoticeForm/index.tsx index 9351f6152b..aaa7815a86 100644 --- a/packages/base/src/page/Nav/SideMenu/UserMenu/Modal/CompanyNoticeModal/CompanyNoticeForm/index.tsx +++ b/packages/base/src/page/Nav/SideMenu/UserMenu/Modal/CompanyNoticeModal/CompanyNoticeForm/index.tsx @@ -80,14 +80,6 @@ export const CompanyNoticeForm: React.FC<{ { if (!value || !Array.isArray(value) || !value[0] || !value[1]) { diff --git a/packages/dms-kit/src/components/PageHeader/style.ts b/packages/dms-kit/src/components/PageHeader/style.ts index 877ddc9967..1afc237731 100644 --- a/packages/dms-kit/src/components/PageHeader/style.ts +++ b/packages/dms-kit/src/components/PageHeader/style.ts @@ -33,6 +33,7 @@ export const PageHeaderStyleWrapper = styled('div')` &.fixed-style { position: fixed; + top: var(--notice-banner-height, 0px); width: calc(100% - 220px); left: 220px; z-index: 9; diff --git a/packages/dms-kit/src/styleWrapper/nav.ts b/packages/dms-kit/src/styleWrapper/nav.ts index 7de79f7479..f9581ec529 100644 --- a/packages/dms-kit/src/styleWrapper/nav.ts +++ b/packages/dms-kit/src/styleWrapper/nav.ts @@ -391,6 +391,7 @@ export const LayoutStyleWrapper = styled('section')` overflow: hidden; display: flex; flex-direction: column; + padding-top: var(--notice-banner-height, 0px); .copyright-information { color: ${({ theme }) => theme.sharedTheme.uiToken.colorTextTertiary}; diff --git a/packages/sqle/src/components/SqlRewrittenDrawer/index.tsx b/packages/sqle/src/components/SqlRewrittenDrawer/index.tsx index b588721104..2a5a205093 100644 --- a/packages/sqle/src/components/SqlRewrittenDrawer/index.tsx +++ b/packages/sqle/src/components/SqlRewrittenDrawer/index.tsx @@ -9,9 +9,9 @@ import SqlRewrittenDrawerCE from './index.ce'; const SqlRewrittenDrawer: React.FC = (props) => { const { t } = useTranslation(); const commonProps: SqlRewrittenDrawerWithBaseProps = { - ...props, width: 920, title: t('sqlRewrite.rewriteDetails'), + ...props, maskClosable: false }; return ( diff --git a/packages/sqle/src/components/SqlRewrittenDrawer/index.type.ts b/packages/sqle/src/components/SqlRewrittenDrawer/index.type.ts index 1c939904b2..185dc93b83 100644 --- a/packages/sqle/src/components/SqlRewrittenDrawer/index.type.ts +++ b/packages/sqle/src/components/SqlRewrittenDrawer/index.type.ts @@ -11,12 +11,13 @@ export type SqlRewrittenDrawerProps = { instanceName?: string; schema?: string; }; + title?: React.ReactNode; }; interface SqlRewrittenDrawerBaseProps { maskClosable: boolean; width: number; - title: string; + title?: React.ReactNode; } export interface SqlRewrittenDrawerWithBaseProps diff --git a/packages/sqle/src/page/ReportStatistics/style.ts b/packages/sqle/src/page/ReportStatistics/style.ts index b624125239..0c54fe8af7 100644 --- a/packages/sqle/src/page/ReportStatistics/style.ts +++ b/packages/sqle/src/page/ReportStatistics/style.ts @@ -6,10 +6,10 @@ export const ReportStatisticsEEIndexStyleWrapper = styled('section')` .fixed-tabs-row { position: fixed; - top: 0; - left: 220px; + top: var(--notice-banner-height, 0px); + left: ${({ theme }) => theme.sharedTheme.nav.width}px; right: 0; - width: calc(100% - 220px); + width: calc(100% - ${({ theme }) => theme.sharedTheme.nav.width}px); z-index: 9; background-color: ${({ theme }) => theme.sharedTheme.uiToken.colorBgBase}; From 90bf2deef1ce708f4327ba0cf73167f965bdbc16 Mon Sep 17 00:00:00 2001 From: lizhensheng Date: Tue, 24 Mar 2026 18:04:58 +0800 Subject: [PATCH 2/3] [fix]: resolve stylelint error Made-with: Cursor --- packages/base/src/page/Home/AIBanner/index.tsx | 3 ++- packages/base/src/page/Nav/CompanyNoticeBanner/style.ts | 1 - packages/dms-kit/src/components/PageHeader/style.ts | 2 +- packages/sqle/src/page/ReportStatistics/style.ts | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/base/src/page/Home/AIBanner/index.tsx b/packages/base/src/page/Home/AIBanner/index.tsx index 506be8f9de..2b1b8db5a8 100644 --- a/packages/base/src/page/Home/AIBanner/index.tsx +++ b/packages/base/src/page/Home/AIBanner/index.tsx @@ -2,7 +2,8 @@ import { useMemo, useState } from 'react'; import { useRequest } from 'ahooks'; import { Card, Space, Typography, message } from 'antd'; import { useTranslation } from 'react-i18next'; -import { BasicButton, BasicTag, useTypedNavigate } from '@actiontech/shared'; +import { useTypedNavigate } from '@actiontech/shared'; +import { BasicButton, BasicTag } from '@actiontech/dms-kit'; import { AiHubService } from '@actiontech/shared/lib/api/sqle'; import { ClockCircleOutlined, diff --git a/packages/base/src/page/Nav/CompanyNoticeBanner/style.ts b/packages/base/src/page/Nav/CompanyNoticeBanner/style.ts index 45087aaf62..62c8a46370 100644 --- a/packages/base/src/page/Nav/CompanyNoticeBanner/style.ts +++ b/packages/base/src/page/Nav/CompanyNoticeBanner/style.ts @@ -15,7 +15,6 @@ export const CompanyNoticeBannerStyleWrapper = styled('div')` ${({ theme }) => theme.sharedTheme.uiToken.colorWarningBgHover}bf 100% ); backdrop-filter: blur(6px); - -webkit-backdrop-filter: blur(6px); border-bottom: 1px solid ${({ theme }) => theme.sharedTheme.uiToken.colorWarning}66; padding: 0 16px; diff --git a/packages/dms-kit/src/components/PageHeader/style.ts b/packages/dms-kit/src/components/PageHeader/style.ts index 1afc237731..41e581eb4f 100644 --- a/packages/dms-kit/src/components/PageHeader/style.ts +++ b/packages/dms-kit/src/components/PageHeader/style.ts @@ -33,7 +33,7 @@ export const PageHeaderStyleWrapper = styled('div')` &.fixed-style { position: fixed; - top: var(--notice-banner-height, 0px); + top: var(--notice-banner-height, 0); width: calc(100% - 220px); left: 220px; z-index: 9; diff --git a/packages/sqle/src/page/ReportStatistics/style.ts b/packages/sqle/src/page/ReportStatistics/style.ts index 0c54fe8af7..077e37e497 100644 --- a/packages/sqle/src/page/ReportStatistics/style.ts +++ b/packages/sqle/src/page/ReportStatistics/style.ts @@ -6,7 +6,7 @@ export const ReportStatisticsEEIndexStyleWrapper = styled('section')` .fixed-tabs-row { position: fixed; - top: var(--notice-banner-height, 0px); + top: var(--notice-banner-height, 0); left: ${({ theme }) => theme.sharedTheme.nav.width}px; right: 0; width: calc(100% - ${({ theme }) => theme.sharedTheme.nav.width}px); From b438eeeee788cf83c5df2fd4583aac94f63fcda5 Mon Sep 17 00:00:00 2001 From: lizhensheng Date: Fri, 27 Mar 2026 17:04:13 +0800 Subject: [PATCH 3/3] [test]: update snapshot --- .../base/src/__snapshots__/App.test.tsx.snap | 12 ++--- .../__snapshots__/index.ce.test.tsx.snap | 2 +- .../Account/__snapshots__/index.test.tsx.snap | 6 +-- .../__snapshots__/index.test.tsx.snap | 4 +- .../__snapshots__/index.ce.test.tsx.snap | 6 +-- .../__snapshots__/index.test.tsx.snap | 6 +-- .../__snapshots__/index.test.tsx.snap | 4 +- .../__snapshots__/index.test.tsx.snap | 4 +- .../__snapshots__/index.test.tsx.snap | 4 +- .../__snapshots__/index.test.tsx.snap | 10 ++-- .../__snapshots__/index.test.tsx.snap | 8 ++-- .../__snapshots__/index.ce.test.tsx.snap | 2 +- .../__snapshots__/index.test.tsx.snap | 6 +-- .../__snapshots__/index.test.tsx.snap | 6 +-- .../List/__snapshots__/index.ce.test.tsx.snap | 2 +- .../List/__snapshots__/index.test.tsx.snap | 24 +++++----- .../__snapshots__/index.test.tsx.snap | 10 ++-- .../__snapshots__/index.ce.test.tsx.snap | 4 +- .../__snapshots__/index.test.tsx.snap | 4 +- .../__snapshots__/index.test.tsx.snap | 10 ++-- .../__snapshots__/index.test.tsx.snap | 8 ++-- .../__snapshots__/index.ce.test.tsx.snap | 2 +- .../__snapshots__/index.test.tsx.snap | 4 +- .../__snapshots__/index.test.tsx.snap | 4 +- .../__snapshots__/index.test.tsx.snap | 14 +++--- .../__snapshots__/index.test.tsx.snap | 12 ++--- .../__snapshots__/index.test.tsx.snap | 6 +-- .../__snapshots__/index.test.tsx.snap | 8 ++-- .../Project/__snapshots__/index.test.tsx.snap | 4 +- .../__snapshots__/index.test.tsx.snap | 2 +- .../AddPage/__snapshots__/index.test.tsx.snap | 6 +-- .../__snapshots__/index.test.tsx.snap | 16 +++---- .../__snapshots__/index.ce.test.tsx.snap | 6 +-- .../System/__snapshots__/index.test.tsx.snap | 8 ++-- .../__snapshots__/index.test.tsx.snap | 8 ++-- .../__snapshots__/PageHeader.test.tsx.snap | 2 +- .../__snapshots__/index.test.tsx.snap | 8 ++-- .../__snapshots__/index.test.tsx.snap | 6 +-- .../__snapshots__/index.test.tsx.snap | 6 +-- .../__snapshots__/index.ce.test.tsx.snap | 2 +- .../__snapshots__/index.ce.test.tsx.snap | 2 +- .../__snapshots__/index.test.tsx.snap | 2 +- .../__snapshots__/index.test.tsx.snap | 6 +-- .../__snapshots__/index.test.tsx.snap | 8 ++-- .../__snapshots__/index.test.tsx.snap | 2 +- .../__snapshots__/index.test.tsx.snap | 6 +-- .../Home/__snapshots__/index.test.tsx.snap | 2 +- .../__snapshots__/index.test.tsx.snap | 2 +- .../__snapshots__/index.test.tsx.snap | 2 +- .../List/__snapshots__/index.test.tsx.snap | 8 ++-- .../__snapshots__/index.ce.test.tsx.snap | 2 +- .../__snapshots__/index.test.tsx.snap | 2 +- .../__snapshots__/index.test.tsx.snap | 6 +-- .../__snapshots__/index.test.tsx.snap | 4 +- .../__snapshots__/index.test.tsx.snap | 6 +-- .../__snapshots__/index.ce.test.tsx.snap | 2 +- .../__snapshots__/index.test.tsx.snap | 2 +- .../__snapshots__/index.test.tsx.snap | 4 +- .../__snapshots__/index.ce.test.tsx.snap | 2 +- .../__snapshots__/index.test.tsx.snap | 2 +- .../__snapshots__/ce.test.tsx.snap | 4 +- .../__snapshots__/index.test.tsx.snap | 2 +- .../Rule/__snapshots__/index.test.tsx.snap | 10 ++-- .../__snapshots__/index.test.tsx.snap | 8 ++-- .../__snapshots__/index.ce.test.tsx.snap | 2 +- .../__snapshots__/index.test.tsx.snap | 6 +-- .../__snapshots__/index.test.tsx.snap | 6 +-- .../__snapshots__/index.test.tsx.snap | 8 ++-- .../__snapshots__/index.test.tsx.snap | 2 +- .../__snapshots__/index.test.tsx.snap | 6 +-- .../__snapshots__/index.test.tsx.snap | 6 +-- .../__snapshots__/index.test.tsx.snap | 10 ++-- .../__snapshots__/SqlAnalyze.test.tsx.snap | 16 +++---- .../__snapshots__/index.test.tsx.snap | 12 ++--- .../__snapshots__/index.test.tsx.snap | 10 ++-- .../Create/__snapshots__/index.test.tsx.snap | 12 ++--- .../Detail/__snapshots__/index.test.tsx.snap | 2 +- .../__snapshots__/index.test.tsx.snap | 2 +- .../__snapshots__/index.ce.test.tsx.snap | 2 +- .../__snapshots__/index.test.tsx.snap | 46 +++++++++---------- .../__snapshots__/index.ce.test.tsx.snap | 2 +- .../__snapshots__/index.test.tsx.snap | 6 +-- .../__snapshots__/index.test.tsx.snap | 2 +- .../__snapshots__/index.test.tsx.snap | 10 ++-- .../__snapshots__/index.test.tsx.snap | 4 +- .../__snapshots__/index.test.tsx.snap | 8 ++-- .../__snapshots__/index.test.tsx.snap | 4 +- .../__snapshots__/index.test.tsx.snap | 4 +- .../__snapshots__/index.ce.test.tsx.snap | 2 +- .../__snapshots__/index.test.tsx.snap | 6 +-- .../__snapshots__/index.ce.test.tsx.snap | 2 +- .../__snapshots__/index.test.tsx.snap | 2 +- .../__snapshots__/index.test.tsx.snap | 16 +++---- .../__snapshots__/index.test.tsx.snap | 16 +++---- .../__snapshots__/index.test.tsx.snap | 8 ++-- .../__snapshots__/index.test.tsx.snap | 10 ++-- .../__snapshots__/index.test.tsx.snap | 6 +-- .../__snapshots__/index.test.tsx.snap | 2 +- .../__snapshots__/index.ce.test.tsx.snap | 2 +- .../__snapshots__/index.test.tsx.snap | 2 +- .../Create/__snapshots__/index.test.tsx.snap | 2 +- .../__snapshots__/index.test.tsx.snap | 2 +- .../__snapshots__/index.test.tsx.snap | 4 +- .../__snapshots__/index.test.tsx.snap | 8 ++-- .../__snapshots__/index.test.tsx.snap | 4 +- .../__snapshots__/index.test.tsx.snap | 4 +- .../__snapshots__/index.test.tsx.snap | 4 +- .../__snapshots__/index.ce.test.tsx.snap | 2 +- .../__snapshots__/index.test.tsx.snap | 2 +- .../List/__snapshots__/index.test.tsx.snap | 2 +- .../Whitelist/__snapshots__/ce.test.tsx.snap | 2 +- .../__snapshots__/index.test.tsx.snap | 2 +- .../__snapshots__/index.test.tsx.snap | 10 ++-- .../__snapshots__/index.ce.test.tsx.snap | 2 +- .../__snapshots__/index.test.tsx.snap | 6 +-- scripts/jest/run.sh | 4 +- 116 files changed, 340 insertions(+), 344 deletions(-) diff --git a/packages/base/src/__snapshots__/App.test.tsx.snap b/packages/base/src/__snapshots__/App.test.tsx.snap index ef75cb9e75..951794302a 100644 --- a/packages/base/src/__snapshots__/App.test.tsx.snap +++ b/packages/base/src/__snapshots__/App.test.tsx.snap @@ -3,7 +3,7 @@ exports[`App render App when "checkPageAction" is false 1`] = `
`; exports[`App render App when token is existed 1`] = `
@@ -176,7 +176,7 @@ exports[`test base/home/AIBanner should match snapshot and render metrics and ac
@@ -186,7 +186,7 @@ exports[`test base/home/AIBanner should match snapshot and render metrics and ac class="right-section" >