diff --git a/packages/base/src/hooks/useThemeStyleData/__snapshots__/index.test.tsx.snap b/packages/base/src/hooks/useThemeStyleData/__snapshots__/index.test.tsx.snap index 0e3f47e183..cdd8e0fb01 100644 --- a/packages/base/src/hooks/useThemeStyleData/__snapshots__/index.test.tsx.snap +++ b/packages/base/src/hooks/useThemeStyleData/__snapshots__/index.test.tsx.snap @@ -784,6 +784,7 @@ exports[`test base/hooks/useThemeStyleData should match snapshot 3`] = ` "archived": "#52c41a", "initiated_by_me": "#1677ff", "pending_for_me": "#fa8c16", + "view_all": "#722ed1", }, }, }, diff --git a/packages/shared/lib/api/sqle/service/GlobalDashboard/index.enum.ts b/packages/shared/lib/api/sqle/service/GlobalDashboard/index.enum.ts index 8f3fe0cbea..be63331aed 100644 --- a/packages/shared/lib/api/sqle/service/GlobalDashboard/index.enum.ts +++ b/packages/shared/lib/api/sqle/service/GlobalDashboard/index.enum.ts @@ -17,7 +17,9 @@ export enum GetGlobalWorkflowListV2FilterCardEnum { 'pending_for_me' = 'pending_for_me', - 'initiated_by_me' = 'initiated_by_me' + 'initiated_by_me' = 'initiated_by_me', + + 'view_all' = 'view_all' } export enum GetGlobalWorkflowListV2WorkflowTypeEnum { diff --git a/packages/shared/lib/api/sqle/service/common.d.ts b/packages/shared/lib/api/sqle/service/common.d.ts index 581a17455f..0b4e1f88e6 100644 --- a/packages/shared/lib/api/sqle/service/common.d.ts +++ b/packages/shared/lib/api/sqle/service/common.d.ts @@ -288,6 +288,8 @@ export interface IGlobalWorkflowStatisticsV2 { initiated_by_me_count?: number; pending_for_me_count?: number; + + view_all_count?: number; } export interface IAuditResultInfo { diff --git a/packages/shared/lib/testUtil/mockApi/sqle/globalDashboard/data.ts b/packages/shared/lib/testUtil/mockApi/sqle/globalDashboard/data.ts index dad10adbe9..11a9c0b4d8 100644 --- a/packages/shared/lib/testUtil/mockApi/sqle/globalDashboard/data.ts +++ b/packages/shared/lib/testUtil/mockApi/sqle/globalDashboard/data.ts @@ -15,7 +15,8 @@ import { export const mockGlobalWorkflowStatisticsData: IGlobalWorkflowStatisticsV2 = { pending_for_me_count: 8, initiated_by_me_count: 5, - archived_count: 12 + archived_count: 12, + view_all_count: 25 }; export const mockGlobalWorkflowListData: IGlobalWorkflowListData = { diff --git a/packages/sqle/src/locale/en-US/globalDashboard.ts b/packages/sqle/src/locale/en-US/globalDashboard.ts index 43ee7e1319..fb1a5eb2b5 100644 --- a/packages/sqle/src/locale/en-US/globalDashboard.ts +++ b/packages/sqle/src/locale/en-US/globalDashboard.ts @@ -24,7 +24,9 @@ export default { initiated: 'Initiated By Me', initiatedSubtitle: 'Track progress', archived: 'Archived', - archivedSubtitle: 'Completed tasks' + archivedSubtitle: 'Completed tasks', + viewAll: 'View All', + viewAllSubtitle: 'Visible scope' }, column: { name: 'Workflow Name', diff --git a/packages/sqle/src/locale/zh-CN/globalDashboard.ts b/packages/sqle/src/locale/zh-CN/globalDashboard.ts index ed8e783ef7..b14a15730d 100644 --- a/packages/sqle/src/locale/zh-CN/globalDashboard.ts +++ b/packages/sqle/src/locale/zh-CN/globalDashboard.ts @@ -19,7 +19,9 @@ export default { initiated: '我发起的', initiatedSubtitle: '关注进度', archived: '已归档', - archivedSubtitle: '已完结任务' + archivedSubtitle: '已完结任务', + viewAll: '查看全部', + viewAllSubtitle: '当前可见范围' }, column: { name: '工单名称', diff --git a/packages/sqle/src/page/GlobalDashboard/__tests__/__snapshots__/index.sqle.test.tsx.snap b/packages/sqle/src/page/GlobalDashboard/__tests__/__snapshots__/index.sqle.test.tsx.snap index 7623745fc0..ddd94e5aca 100644 --- a/packages/sqle/src/page/GlobalDashboard/__tests__/__snapshots__/index.sqle.test.tsx.snap +++ b/packages/sqle/src/page/GlobalDashboard/__tests__/__snapshots__/index.sqle.test.tsx.snap @@ -343,6 +343,45 @@ exports[`GlobalDashboard should render workflow tab by default 1`] = ` 已完结任务 +
+
+ 查看全部 +
+
+ + + + + + + 25 + +
+
+ 当前可见范围 +
+
+
+
+ 查看全部 +
+
+ + + + + + + 25 + +
+
+ 当前可见范围 +
+
{ const openSpy = jest.spyOn(window, 'open').mockImplementation(jest.fn()); @@ -204,4 +205,79 @@ describe('GlobalDashboard/WorkflowPanel', () => { }) ); }); + + describe('view_all card', () => { + const viewAllTestCases = [ + { + name: 'should render four stat cards with the fourth being "查看全部"', + action: async () => { + superRender(); + await act(async () => jest.advanceTimersByTime(3000)); + }, + assertion: () => { + expect(screen.getByText('待我处理')).toBeInTheDocument(); + expect(screen.getByText('我发起的')).toBeInTheDocument(); + expect(screen.getByText('已归档')).toBeInTheDocument(); + expect(screen.getByText('查看全部')).toBeInTheDocument(); + + const statCards = document.querySelectorAll('.stat-card-title'); + expect(statCards).toHaveLength(4); + expect(statCards[3].textContent).toBe('查看全部'); + } + }, + { + name: 'should request list with filter_card=view_all when clicking "查看全部" card', + action: async () => { + superRender(); + await act(async () => jest.advanceTimersByTime(3000)); + + fireEvent.click(screen.getByText('查看全部')); + await act(async () => jest.advanceTimersByTime(0)); + }, + assertion: () => { + expect(getGlobalWorkflowListSpy).toHaveBeenLastCalledWith( + expect.objectContaining({ + filter_card: 'view_all' + }) + ); + } + }, + { + name: 'should not have "查看全部" card selected by default (pending_for_me is default)', + action: async () => { + superRender(); + await act(async () => jest.advanceTimersByTime(3000)); + }, + assertion: () => { + expect(getGlobalWorkflowListSpy).toHaveBeenCalledWith( + expect.objectContaining({ + filter_card: 'pending_for_me' + }) + ); + } + }, + { + name: 'should display view_all_count value on the "查看全部" card', + action: async () => { + superRender(); + await act(async () => jest.advanceTimersByTime(3000)); + }, + assertion: () => { + const expectedCount = String( + mockGlobalWorkflowStatisticsData.view_all_count + ); + const statCountElements = + document.querySelectorAll('.stat-card-count'); + expect(statCountElements[3].textContent).toBe(expectedCount); + } + } + ]; + + viewAllTestCases.forEach(({ name, action, assertion }) => { + it(name, async () => { + await action(); + assertion(); + }); + }); + }); }); diff --git a/packages/sqle/src/page/GlobalDashboard/components/WorkflowPanel/index.tsx b/packages/sqle/src/page/GlobalDashboard/components/WorkflowPanel/index.tsx index 48f3caa706..fa32022f25 100644 --- a/packages/sqle/src/page/GlobalDashboard/components/WorkflowPanel/index.tsx +++ b/packages/sqle/src/page/GlobalDashboard/components/WorkflowPanel/index.tsx @@ -8,6 +8,7 @@ import { useTableRequestParams } from '@actiontech/dms-kit'; import { + CheckboxMultipleBlankFilled, ClockCircleOutlined, EditFilled, ProfileSquareFilled @@ -197,6 +198,23 @@ const WorkflowPanel: React.FC = ({ sqleTheme.globalDashboard.filterCardAccent.workflow[ GetGlobalWorkflowListV2FilterCardEnum.archived ] + }, + { + key: GetGlobalWorkflowListV2FilterCardEnum.view_all, + title: t('globalDashboard.workflow.card.viewAll'), + subtitle: t('globalDashboard.workflow.card.viewAllSubtitle'), + count: workflowStats.data?.data.data?.view_all_count ?? 0, + icon: ( + + ), + accentColor: + sqleTheme.globalDashboard.filterCardAccent.workflow[ + GetGlobalWorkflowListV2FilterCardEnum.view_all + ] } ]; diff --git a/packages/sqle/src/theme/globalDashboard.ts b/packages/sqle/src/theme/globalDashboard.ts index aa7ea93f8c..aab037ea55 100644 --- a/packages/sqle/src/theme/globalDashboard.ts +++ b/packages/sqle/src/theme/globalDashboard.ts @@ -19,7 +19,8 @@ export const globalDashboardTheme: GlobalDashboardTheme = { workflow: { [GetGlobalWorkflowListV2FilterCardEnum.pending_for_me]: '#fa8c16', [GetGlobalWorkflowListV2FilterCardEnum.initiated_by_me]: '#1677ff', - [GetGlobalWorkflowListV2FilterCardEnum.archived]: '#52c41a' + [GetGlobalWorkflowListV2FilterCardEnum.archived]: '#52c41a', + [GetGlobalWorkflowListV2FilterCardEnum.view_all]: '#722ed1' } } };