From f38d23365ce2678bba8b865cef92b20994cbc1e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=A6=82=E5=A8=81?= Date: Tue, 30 Dec 2025 17:26:27 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=AE=80=E6=98=93=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/defaultSettings.ts | 13 +- public/favicon.ico | Bin 4286 -> 15406 bytes public/logo.svg | 1 - public/pro_icon.svg | 5 - src/app.tsx | 2 +- src/pages/Welcome.tsx | 153 +-- .../login/__snapshots__/login.test.tsx.snap | 1088 ----------------- src/pages/user/login/login.test.tsx | 102 -- 8 files changed, 8 insertions(+), 1356 deletions(-) delete mode 100644 public/logo.svg delete mode 100644 public/pro_icon.svg delete mode 100644 src/pages/user/login/__snapshots__/login.test.tsx.snap delete mode 100644 src/pages/user/login/login.test.tsx diff --git a/config/defaultSettings.ts b/config/defaultSettings.ts index 6e47385..d627ccd 100644 --- a/config/defaultSettings.ts +++ b/config/defaultSettings.ts @@ -7,22 +7,19 @@ const Settings: ProLayoutProps & { pwa?: boolean; logo?: string; } = { - navTheme: 'light', + navTheme: 'realDark', // 拂晓蓝 - colorPrimary: '#1890ff', - layout: 'mix', + colorPrimary: '#2F54EB', + layout: 'side', contentWidth: 'Fluid', fixedHeader: false, fixSiderbar: true, - colorWeak: false, + // colorWeak: false, title: 'AI Pipeline', pwa: true, logo: false, iconfontUrl: '', - token: { - // 参见ts声明,demo 见文档,通过token 修改样式 - //https://procomponents.ant.design/components/layout#%E9%80%9A%E8%BF%87-token-%E4%BF%AE%E6%94%B9%E6%A0%B7%E5%BC%8F - }, + token: {}, }; export default Settings; diff --git a/public/favicon.ico b/public/favicon.ico index e2e93252988b5bed120ddeb168eb577bf0caa881..eee15f5c2d914670007f6413bcd16e2a6d1d4cf8 100644 GIT binary patch literal 15406 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 diff --git a/public/logo.svg b/public/logo.svg deleted file mode 100644 index 239bf69..0000000 --- a/public/logo.svg +++ /dev/null @@ -1 +0,0 @@ -Group 28 Copy 5Created with Sketch. \ No newline at end of file diff --git a/public/pro_icon.svg b/public/pro_icon.svg deleted file mode 100644 index e075b78..0000000 --- a/public/pro_icon.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/src/app.tsx b/src/app.tsx index 599b811..a7ae802 100644 --- a/src/app.tsx +++ b/src/app.tsx @@ -66,7 +66,7 @@ export const layout: RunTimeLayoutConfig = ({ }) => { return { actionsRender: () => [ - , + // , , ], avatarProps: { diff --git a/src/pages/Welcome.tsx b/src/pages/Welcome.tsx index da8ee6b..1252686 100644 --- a/src/pages/Welcome.tsx +++ b/src/pages/Welcome.tsx @@ -1,164 +1,15 @@ -import { PageContainer } from '@ant-design/pro-components'; +import { PageContainer, ProCard } from '@ant-design/pro-components'; import { useModel } from '@umijs/max'; import { Card, theme } from 'antd'; import React from 'react'; -/** - * 每个单独的卡片,为了复用样式抽成了组件 - * @param param0 - * @returns - */ -const InfoCard: React.FC<{ - title: string; - index: number; - desc: string; - href: string; -}> = ({ title, href, index, desc }) => { - const { useToken } = theme; - - const { token } = useToken(); - - return ( -
-
-
- {index} -
-
- {title} -
-
-
- {desc} -
- - 了解更多 {'>'} - -
- ); -}; const Welcome: React.FC = () => { const { token } = theme.useToken(); const { initialState } = useModel('@@initialState'); return ( - -
-
- 欢迎使用 AI Pipeline -
-

- AI Pipeline 是一个整合了 umi,AI Pipeline 和 ProComponents - 的脚手架方案。致力于在设计规范和基础组件的基础上,继续向上构建,提炼出典型模板/业务组件/配套设计资源,进一步提升企业级中后台产品设计研发过程中的『用户』和『设计者』的体验。 -

-
- - - -
-
-
+
); }; diff --git a/src/pages/user/login/__snapshots__/login.test.tsx.snap b/src/pages/user/login/__snapshots__/login.test.tsx.snap deleted file mode 100644 index ab36431..0000000 --- a/src/pages/user/login/__snapshots__/login.test.tsx.snap +++ /dev/null @@ -1,1088 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`Login Page should login success 1`] = ` - -
-
-
- - - - - -
-
- -
- -`; - -exports[`Login Page should show login form 1`] = ` - -
-
-
- - - - - -
-
- -
- -`; diff --git a/src/pages/user/login/login.test.tsx b/src/pages/user/login/login.test.tsx deleted file mode 100644 index 78eab41..0000000 --- a/src/pages/user/login/login.test.tsx +++ /dev/null @@ -1,102 +0,0 @@ -// @ts-ignore -import { startMock } from '@@/requestRecordMock'; -import { TestBrowser } from '@@/testBrowser'; -import { fireEvent, render } from '@testing-library/react'; -import React, { act } from 'react'; - -const waitTime = (time: number = 100) => { - return new Promise((resolve) => { - setTimeout(() => { - resolve(true); - }, time); - }); -}; - -let server: { - close: () => void; -}; - -describe('Login Page', () => { - beforeAll(async () => { - server = await startMock({ - port: 8000, - scene: 'login', - }); - }); - - afterAll(() => { - server?.close(); - }); - - it('should show login form', async () => { - const historyRef = React.createRef(); - const rootContainer = render( - , - ); - - await rootContainer.findAllByText('AI Pipeline'); - - act(() => { - historyRef.current?.push('/user/login'); - }); - - expect( - rootContainer.baseElement?.querySelector('.ant-pro-form-login-desc') - ?.textContent, - ).toBe( - 'AI Pipeline is the most influential web design specification in Xihu district', - ); - - expect(rootContainer.asFragment()).toMatchSnapshot(); - - rootContainer.unmount(); - }); - - it('should login success', async () => { - const historyRef = React.createRef(); - const rootContainer = render( - , - ); - - await rootContainer.findAllByText('AI Pipeline'); - - const userNameInput = await rootContainer.findByPlaceholderText( - 'Username: admin or user', - ); - - act(() => { - fireEvent.change(userNameInput, { target: { value: 'admin' } }); - }); - - const passwordInput = await rootContainer.findByPlaceholderText( - 'Password: ant.design', - ); - - act(() => { - fireEvent.change(passwordInput, { target: { value: 'ant.design' } }); - }); - - await (await rootContainer.findByText('Login')).click(); - - // 等待接口返回结果 - await waitTime(5000); - - await rootContainer.findAllByText('AI Pipeline'); - - expect(rootContainer.asFragment()).toMatchSnapshot(); - - await waitTime(2000); - - rootContainer.unmount(); - }); -});