onClickAuditResult(record)}>
- {result?.length > 1 ? (
+
onClickAuditResult(record)}
+ >
+ {results.length > 1 ? (
{
- return item.level ?? '';
- })}
+ auditResultInfo={results.map((item) => ({
+ level: item.level ?? '',
+ executionFailed: false,
+ error_priority: item.error_priority
+ }))}
/>
) : (
)}
diff --git a/packages/base/src/page/DataExportManagement/Common/AuditResultList/__snapshots__/index.test.tsx.snap b/packages/base/src/page/DataExportManagement/Common/AuditResultList/__snapshots__/index.test.tsx.snap
index 69d109a073..14f4f4a45a 100644
--- a/packages/base/src/page/DataExportManagement/Common/AuditResultList/__snapshots__/index.test.tsx.snap
+++ b/packages/base/src/page/DataExportManagement/Common/AuditResultList/__snapshots__/index.test.tsx.snap
@@ -593,9 +593,11 @@ exports[`test DataExport/Common/AuditResultList should match snapshot 3`] = `
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
+
+ 错误
+
@@ -2926,24 +2964,33 @@ exports[`test DataExport/Common/AuditResultList should match snapshot when data
-
+
@@ -3392,9 +3439,11 @@ exports[`test DataExport/Common/AuditResultList should switch tab when click lab
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
= ({
- auditResult
-}) => {
- const { t } = useTranslation();
+export type AuditResultTagProps = {
+ auditResult?: IAuditSQLResult[];
+};
- const noticeResult = useMemo(() => {
- return (
- auditResult?.filter((i) => i.level === RuleResV1LevelEnum.notice) || []
- );
- }, [auditResult]);
+type AuditResultWithPriority = IAuditSQLResult & { error_priority?: string };
- const errorResult = useMemo(() => {
- return (
- auditResult?.filter((i) => i.level === RuleResV1LevelEnum.error) || []
- );
- }, [auditResult]);
+/** 卡片计数展示顺序:P0 > P1 > 未分级 error > warn > notice > normal */
+const TAG_DISPLAY_ORDER: AuditLevelIconKey[] = [
+ 'error_P0',
+ 'error_P1',
+ 'error',
+ 'warn',
+ 'notice',
+ 'normal'
+];
- const warnResult = useMemo(() => {
- return (
- auditResult?.filter((i) => i.level === RuleResV1LevelEnum.warn) || []
- );
- }, [auditResult]);
+const countResultsByDisplayKey = (
+ auditResult?: AuditResultWithPriority[]
+): Partial> => {
+ const counts: Partial> = {};
+ if (!Array.isArray(auditResult)) {
+ return counts;
+ }
+ auditResult.forEach((item) => {
+ const level = item.level ?? '';
+ if (!level) {
+ return;
+ }
+ const key = getAuditResultIconDedupKey(level, item.error_priority);
+ if (!TAG_DISPLAY_ORDER.includes(key)) {
+ return;
+ }
+ counts[key] = (counts[key] ?? 0) + 1;
+ });
+ return counts;
+};
+
+const AuditResultTag: React.FC = ({ auditResult }) => {
+ const { t } = useTranslation();
- if (!auditResult?.length) {
+ const activeAuditResult = useMemo(
+ () => (auditResult ?? []) as AuditResultWithPriority[],
+ [auditResult]
+ );
+
+ const displayCounts = useMemo(
+ () => countResultsByDisplayKey(activeAuditResult),
+ [activeAuditResult]
+ );
+
+ if (!activeAuditResult.length) {
return (
= ({
{t('audit.auditSuccess')}
);
- } else {
- return (
-
- {noticeResult.length > 0 ? (
- }
- bordered={false}
- >
- {noticeResult.length}
-
- ) : null}
- {warnResult.length > 0 ? (
- }
- bordered={false}
- >
- {warnResult.length}
-
- ) : null}
- {errorResult.length > 0 ? (
+ }
+
+ return (
+
+ {TAG_DISPLAY_ORDER.map((iconKey) => {
+ const count = displayCounts[iconKey];
+ if (!count) {
+ return null;
+ }
+
+ const meta = resolveAuditLevelDisplayMeta(
+ iconKey.startsWith('error') ? 'error' : iconKey,
+ iconKey === 'error_P0' ? 'P0' : iconKey === 'error_P1' ? 'P1' : ''
+ );
+ const label = t(meta.labelKey);
+ const isErrorFamily = iconKey.startsWith('error');
+
+ if (iconKey === 'normal') {
+ return (
+ }
+ bordered={false}
+ data-icon-key={iconKey}
+ aria-label={label}
+ title={label}
+ >
+ {count}
+
+ );
+ }
+
+ if (iconKey === 'notice') {
+ return (
+ }
+ bordered={false}
+ data-icon-key={iconKey}
+ aria-label={label}
+ title={label}
+ >
+ {count}
+
+ );
+ }
+
+ if (iconKey === 'warn') {
+ return (
+ }
+ bordered={false}
+ data-icon-key={iconKey}
+ aria-label={label}
+ title={label}
+ >
+ {count}
+
+ );
+ }
+
+ // error / error_P0 / error_P1:文案分列,不得合并为单一「错误」总数
+ const icon =
+ iconKey === 'error_P1' ? (
+
+ ) : (
+
+ );
+
+ return (
}
+ icon={icon}
bordered={false}
+ data-icon-key={iconKey}
+ data-error-priority={
+ isErrorFamily ? meta.dataErrorPriority || 'ungraded' : undefined
+ }
+ aria-label={label}
+ title={label}
>
- {errorResult.length}
+ {label}
+ {count}
- ) : null}
-
- );
- }
+ );
+ })}
+
+ );
};
export default AuditResultTag;
diff --git a/packages/base/src/page/DataExportManagement/Detail/components/ExportDetail/ExportTaskList/ResultCard/AuditResultTree.tsx b/packages/base/src/page/DataExportManagement/Detail/components/ExportDetail/ExportTaskList/ResultCard/AuditResultTree.tsx
index a6c9634754..8c9c757955 100644
--- a/packages/base/src/page/DataExportManagement/Detail/components/ExportDetail/ExportTaskList/ResultCard/AuditResultTree.tsx
+++ b/packages/base/src/page/DataExportManagement/Detail/components/ExportDetail/ExportTaskList/ResultCard/AuditResultTree.tsx
@@ -43,13 +43,17 @@ const AuditResultTree: React.FC<{ auditResult?: IAuditSQLResult[] }> = ({
),
key: 'audit_tree_title',
children: auditResult.map((item, index) => {
+ const itemWithPriority = item as IAuditSQLResult & {
+ error_priority?: string;
+ };
return {
title: (
),
diff --git a/packages/base/src/page/DataExportManagement/Detail/components/ExportDetail/ExportTaskList/ResultCard/__tests__/AuditResultTag.test.tsx b/packages/base/src/page/DataExportManagement/Detail/components/ExportDetail/ExportTaskList/ResultCard/__tests__/AuditResultTag.test.tsx
index af6393565f..19b46088a5 100644
--- a/packages/base/src/page/DataExportManagement/Detail/components/ExportDetail/ExportTaskList/ResultCard/__tests__/AuditResultTag.test.tsx
+++ b/packages/base/src/page/DataExportManagement/Detail/components/ExportDetail/ExportTaskList/ResultCard/__tests__/AuditResultTag.test.tsx
@@ -1,6 +1,7 @@
import { RuleResV1LevelEnum } from '@actiontech/shared/lib/api/sqle/service/common.enum';
import { superRender } from '../../../../../../../../testUtils/customRender';
-import AuditResultTag from '../AuditResultTag';
+import { screen } from '@testing-library/react';
+import AuditResultTag, { AuditResultTagProps } from '../AuditResultTag';
describe('test base/DataExport/Detail/ExportDetail/ExportTaskList/AuditResultTag', () => {
it('should match snapshot', () => {
@@ -41,4 +42,37 @@ describe('test base/DataExport/Detail/ExportDetail/ExportTaskList/AuditResultTag
)
).toMatchSnapshot();
});
+
+ it('render tag splits error P0 and P1', () => {
+ superRender(
+
+ );
+ expect(screen.getByText('错误(P0)')).toBeInTheDocument();
+ expect(screen.getByText('错误(P1)')).toBeInTheDocument();
+ expect(screen.getByLabelText('错误(P0)')).toHaveAttribute(
+ 'data-error-priority',
+ 'P0'
+ );
+ expect(screen.getByLabelText('错误(P1)')).toHaveAttribute(
+ 'data-error-priority',
+ 'P1'
+ );
+ });
});
diff --git a/packages/base/src/page/DataExportManagement/Detail/components/ExportDetail/ExportTaskList/ResultCard/__tests__/__snapshots__/AuditResultTag.test.tsx.snap b/packages/base/src/page/DataExportManagement/Detail/components/ExportDetail/ExportTaskList/ResultCard/__tests__/__snapshots__/AuditResultTag.test.tsx.snap
index 696f115c47..686004d977 100644
--- a/packages/base/src/page/DataExportManagement/Detail/components/ExportDetail/ExportTaskList/ResultCard/__tests__/__snapshots__/AuditResultTag.test.tsx.snap
+++ b/packages/base/src/page/DataExportManagement/Detail/components/ExportDetail/ExportTaskList/ResultCard/__tests__/__snapshots__/AuditResultTag.test.tsx.snap
@@ -125,13 +125,19 @@ exports[`test base/DataExport/Detail/ExportDetail/ExportTaskList/AuditResultTag
- 1
+
+ 错误
+
+
+
+ 1
+
@@ -154,13 +170,19 @@ exports[`test base/DataExport/Detail/ExportDetail/ExportTaskList/AuditResultTag
| | |