From 3c12f724107f3b66cbad7418023beef10a974200 Mon Sep 17 00:00:00 2001 From: chenyt Date: Thu, 28 Aug 2025 20:18:57 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E6=A1=8C=E9=9D=A2):=20=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pc-fe/.umirc.ts | 20 +-- pc-fe/src/assets/barIcon.png | Bin 0 -> 3509 bytes pc-fe/src/main/index.ts | 27 +++ pc-fe/src/main/ipc/platform.ts | 67 ++++++- pc-fe/src/main/preload.ts | 6 +- .../src/pages/components/TitleBar/index.less | 108 +++++++++++ pc-fe/src/pages/components/TitleBar/index.tsx | 71 ++++++++ .../components/terminalGetImage/index.tsx | 14 +- pc-fe/src/pages/imagesList/index.less | 0 pc-fe/src/pages/imagesList/index.tsx | 11 ++ pc-fe/src/pages/login/index.less | 169 +++++++++++++----- pc-fe/src/pages/login/index.tsx | 98 +++++----- 12 files changed, 484 insertions(+), 107 deletions(-) create mode 100644 pc-fe/src/assets/barIcon.png create mode 100644 pc-fe/src/pages/components/TitleBar/index.less create mode 100644 pc-fe/src/pages/components/TitleBar/index.tsx create mode 100644 pc-fe/src/pages/imagesList/index.less create mode 100644 pc-fe/src/pages/imagesList/index.tsx diff --git a/pc-fe/.umirc.ts b/pc-fe/.umirc.ts index 2e6dc81..c8d5163 100644 --- a/pc-fe/.umirc.ts +++ b/pc-fe/.umirc.ts @@ -24,18 +24,18 @@ export default defineConfig({ }, // 路由配置 routes: [ - // { - // path: '/', - // component: '@/pages/welcome', - // }, - // { - // path: '/login', - // component: '@/pages/login', - // }, { path: '/', component: '@/pages/components/Layout/index', routes: [ + { + path: '/imagesList', + component: '@/pages/imagesList', + }, + { + path: '/login', + component: '@/pages/login', + }, { path: '/grpc', component: '@/pages/grpc/grpc', @@ -44,10 +44,6 @@ export default defineConfig({ path: '/welcome', component: '@/pages/welcome', }, - { - path: '/login', - component: '@/pages/login', - }, { path: '/configSteps', component: '@/pages/configSteps', diff --git a/pc-fe/src/assets/barIcon.png b/pc-fe/src/assets/barIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..120620cbb1449d1e8e6c1de1f662d19e0d896d2e GIT binary patch literal 3509 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 literal 0 HcmV?d00001 diff --git a/pc-fe/src/main/index.ts b/pc-fe/src/main/index.ts index 7a60796..05d80dc 100644 --- a/pc-fe/src/main/index.ts +++ b/pc-fe/src/main/index.ts @@ -1 +1,28 @@ getBrowserWindowRuntime().webContents.openDevTools(); + +// import { BrowserWindow } from 'electron'; +// import path from 'path'; + +// // 修复:添加默认值处理 +// const APP_ROOT = process.env.APP_ROOT || '.'; +// const MAIN_DIST = path.join(APP_ROOT, 'dist-electron'); + +// getBrowserWindowRuntime().webContents.openDevTools(); + +// const createNewWindow = () => { +// const newWindow = new BrowserWindow({ +// width: 200, +// height: 200, +// webPreferences: { +// nodeIntegration: true, +// contextIsolation: false +// } +// }); + +// // 加载页面内容 +// newWindow.loadURL('file:/' + __dirname + '/index.html'); + +// return newWindow; +// }; + +// createNewWindow(); \ No newline at end of file diff --git a/pc-fe/src/main/ipc/platform.ts b/pc-fe/src/main/ipc/platform.ts index 5cc52cb..e16ff7c 100644 --- a/pc-fe/src/main/ipc/platform.ts +++ b/pc-fe/src/main/ipc/platform.ts @@ -12,16 +12,54 @@ const window = getBrowserWindowRuntime(); let currentServerIp: string | undefined; +// 添加处理窗口调整 +ipcMain.handle('adjust-window-for-normal', async (event) => { + try { + const window = BrowserWindow.fromWebContents(event.sender); + if (window) { + // 调整窗口大小和配置 + window.setKiosk(false); // 退出全屏模式 + window.setMinimumSize(1200, 800); + window.setSize(1200, 800); + window.setResizable(true); + window.setMaximizable(true); + window.setMinimizable(true); + // 保持无边框和隐藏标题栏的设置 + window.setFullScreen(false); + } + return { success: true }; + } catch (error) { + console.error('调整窗口失败:', error); + return { success: false, }; + } +}); + +/**拖动窗口 */ +ipcMain.handle('drag-window', (event) => { + const focusedWindow = BrowserWindow.getFocusedWindow(); + if (focusedWindow) { + // 通知渲染进程开始拖拽 + focusedWindow.webContents.send('start-drag'); + } +}); + // 监听渲染进程发送的消息 ipcMain.handle('getPlatform', () => { return `hi, i'm from ${process.platform}`; }); -// 窗口控制:最小化,退出全屏 +// 窗口控制:最小化,退出全屏,关闭, +// 获取窗口最大化状态 +ipcMain.handle('get-window-maximized', (event) => { + const window = BrowserWindow.fromWebContents(event.sender); + return window?.isMaximized() || false; +}); + ipcMain.on('close-app', () => { app.quit(); }); +// 最小化 ipcMain.on('minimize-app', () => { const focusedWindow = BrowserWindow.getFocusedWindow(); if (focusedWindow) { @@ -30,16 +68,39 @@ ipcMain.on('minimize-app', () => { // window?.minimize(); }); -ipcMain.on('exit-kiosk', () => { +// 退出全屏 +ipcMain.on('restore-window', () => { const focusedWindow = BrowserWindow.getFocusedWindow(); if (focusedWindow) { - focusedWindow.setFullScreen(false); + focusedWindow.unmaximize(); } // if (window) { // window.setFullScreen(false); // } }); +// 设置全屏 +ipcMain.on('maximize-window', () => { + const focusedWindow = BrowserWindow.getFocusedWindow(); + if (focusedWindow) { + focusedWindow.maximize(); + } +}) + +// 监听窗口状态变化并通知渲染进程 +ipcMain.on('register-window-state-listeners', (event) => { + const window = BrowserWindow.fromWebContents(event.sender); + if (window) { + window.on('maximize', () => { + event.sender.send('window-maximized'); + }); + + window.on('unmaximize', () => { + event.sender.send('window-unmaximized'); + }); + } +}); + ipcMain.handle('get-device-id',async()=>{ const deviceId = await getDeviceId(); diff --git a/pc-fe/src/main/preload.ts b/pc-fe/src/main/preload.ts index abaca82..7b7ca5c 100644 --- a/pc-fe/src/main/preload.ts +++ b/pc-fe/src/main/preload.ts @@ -7,12 +7,14 @@ contextBridge.exposeInMainWorld('electronAPI', { }, closeApp: () => ipcRenderer.send('close-app'), minimizeApp: () => ipcRenderer.send('minimize-app'), - exitKiosk: () => ipcRenderer.send('exit-kiosk'), + restoreWindow: () => ipcRenderer.send('restore-window'), + maximizeWindow: () => ipcRenderer.send('maximize-window'), + getWindowMaximized: () => ipcRenderer.invoke('get-window-maximized'), + adjustWindowForNormal:() => ipcRenderer.invoke('adjust-window-for-normal'), // 版本更新相关API downloadAndUpdate: (url: string) => ipcRenderer.invoke('download-and-update', url), // 服务器IP获取 getCurrentServerIp: () => ipcRenderer.invoke('get-current-server-ip'), - // 事件监听 onMainProcessMessage: (callback: (data: string) => void) => { ipcRenderer.on('main-process-message', (_, data) => callback(data)); diff --git a/pc-fe/src/pages/components/TitleBar/index.less b/pc-fe/src/pages/components/TitleBar/index.less new file mode 100644 index 0000000..55105cd --- /dev/null +++ b/pc-fe/src/pages/components/TitleBar/index.less @@ -0,0 +1,108 @@ +// src/pages/components/TitleBar/index.less +.title-bar { + margin: 20px 0; + padding: 0 20px; + width: 100%; + height: 34px; + display: flex; + justify-content: space-between; + align-items: center; + -webkit-app-region: drag; // 使整个标题栏可拖动 + user-select: none; + + .title-bar-right { + display: flex; + align-items: center; + -webkit-app-region: no-drag; // 使按钮区域不可拖动 + + .window-control { + width: 18px; + height: 18px; + border: 1.5px solid rgba(34, 34, 34, 1); + margin-left: 10px; + cursor: pointer; + + &.minimize { + // 最小化按钮样式(一条线) + position: relative; + + &::before { + content: ''; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 10px; + height: 1.5px; + background-color: rgba(34, 34, 34, 1); + } + } + + &.restore { + position: relative; + + &::before { + content: ''; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 8px; + height: 8px; + border: 1px solid rgba(34, 34, 34, 1); + } + + &::after { + content: ''; + position: absolute; + top: 30%; + left: 30%; + width: 8px; + height: 8px; + border: 1px solid rgba(34, 34, 34, 1); + background: white; + } + } + + &.maximize { + // 最大化按钮样式(正方形框) + position: relative; + + &::before { + content: ''; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 10px; + height: 10px; + border: 1px solid rgba(34, 34, 34, 1); + } + } + + &.close { + // 关闭按钮样式(×) + position: relative; + + &::before, + &::after { + content: ''; + position: absolute; + top: 50%; + left: 50%; + width: 12px; + height: 1.5px; + background-color: rgba(34, 34, 34, 1); + } + + &::before { + transform: translate(-50%, -50%) rotate(45deg); + } + + &::after { + transform: translate(-50%, -50%) rotate(-45deg); + } + } + } + } +} \ No newline at end of file diff --git a/pc-fe/src/pages/components/TitleBar/index.tsx b/pc-fe/src/pages/components/TitleBar/index.tsx new file mode 100644 index 0000000..2e5a22c --- /dev/null +++ b/pc-fe/src/pages/components/TitleBar/index.tsx @@ -0,0 +1,71 @@ +// src/pages/components/TitleBar/index.tsx +import React,{ useState, useEffect } from 'react'; +import './index.less'; +import BarIcon from '@assets/barIcon.png' + +const TitleBar = () => { + const [isMaximized, setIsMaximized] = useState(false); + + // 监听窗口状态变化 + useEffect(() => { + if (window.electronAPI) { + // 注册窗口状态变化监听器 + window.electronAPI.send('register-window-state-listeners'); + + window.electronAPI.on('window-maximized', () => { + setIsMaximized(true); + }); + + window.electronAPI.on('window-unmaximized', () => { + setIsMaximized(false); + }); + + // 初始化时获取窗口状态 + window.electronAPI.getWindowMaximized().then((maximized: boolean) => { + setIsMaximized(maximized); + }); + } +}, []); + const closeApp = () => { + if (window.electronAPI) { + window.electronAPI.closeApp(); + } + }; + + const minimizeApp = () => { + if (window.electronAPI) { + window.electronAPI.minimizeApp(); + } + }; + + // 区分当前是最小化还是最大化 + const toggleMaximize = () => { + if (window.electronAPI) { + if (isMaximized) { + window.electronAPI.restoreWindow(); + } else { + window.electronAPI.maximizeWindow(); + } + } +}; + + return ( +
{ + // 只有点击在标题栏空白处才触发拖动 + if (e.target === e.currentTarget) { + window.electronAPI.send('drag-window'); + } + }}> +
+ +
+
+
+
+
+
+
+ ); +}; + +export default TitleBar; \ No newline at end of file diff --git a/pc-fe/src/pages/configSteps/components/terminalGetImage/index.tsx b/pc-fe/src/pages/configSteps/components/terminalGetImage/index.tsx index 67a2380..fa9966e 100644 --- a/pc-fe/src/pages/configSteps/components/terminalGetImage/index.tsx +++ b/pc-fe/src/pages/configSteps/components/terminalGetImage/index.tsx @@ -74,8 +74,18 @@ const Index = () => { ); - const handleSubmit = () => { - history.push('/login'); + const handleSubmit = async() => { + try { + // 调用主进程调整窗口 + if (window.electronAPI) { + await window.electronAPI.adjustWindowForNormal(); + } + // 跳转到登录页面 + history.push('/login'); + } catch (error) { + console.error('跳转登录页失败:', error); + message.error('跳转失败,请重试'); + } } return ( diff --git a/pc-fe/src/pages/imagesList/index.less b/pc-fe/src/pages/imagesList/index.less new file mode 100644 index 0000000..e69de29 diff --git a/pc-fe/src/pages/imagesList/index.tsx b/pc-fe/src/pages/imagesList/index.tsx new file mode 100644 index 0000000..47aaec2 --- /dev/null +++ b/pc-fe/src/pages/imagesList/index.tsx @@ -0,0 +1,11 @@ +import React from 'react'; + +const Index = () => { + return ( +
+ 镜像列表 +
+ ); +} + +export default Index; diff --git a/pc-fe/src/pages/login/index.less b/pc-fe/src/pages/login/index.less index befeeee..6b75dad 100644 --- a/pc-fe/src/pages/login/index.less +++ b/pc-fe/src/pages/login/index.less @@ -1,34 +1,142 @@ .login-container { display: flex; - justify-content: center; + justify-content: space-between; + flex-direction: column; align-items: center; min-height: 100vh; - background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); } .login-content { width: 100%; - max-width: 400px; - padding: 20px; + flex: 1; + display: flex; + align-items: center; + justify-content: center; } .login-card { box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1); border-radius: 12px; - - .ant-card-head { - text-align: center; - border-bottom: 1px solid #f0f0f0; - - .ant-card-head-title { - font-size: 24px; - font-weight: 600; - color: #333; - } - } + width: 390px; + height: 520px; + padding: 0 30px; + padding-top: 79px; + box-sizing: border-box; .ant-card-body { - padding: 32px 24px; + padding: 0; + } +} + +.welcome-text { + font-family: "Microsoft YaHei UI"; + font-weight: 700; + font-style: normal; + font-size: 20px; + line-height: 100%; + letter-spacing: 0%; + color: rgba(36, 47, 72, 1); + margin-bottom: 40px; + text-align: center; +} + +.input-group { + margin-bottom: 40px; + + .ant-form-item { + margin-bottom: 20px; + + &:last-child { + margin-bottom: 0; + } + } +} + +.custom-input { + width: 330px; + height: 39px; + border-radius: 8px; + background: rgba(255, 255, 255, 1); + border: 1px solid rgba(215, 217, 224, 1); + + .ant-input-prefix { + margin-right: 0; + } + + .input-icon { + width: 18px; + height: 18px; + margin-left: 10px; + margin-right: 14px; + } + + &::placeholder { + font-family: "Microsoft YaHei UI"; + font-weight: 400; + font-style: normal; + font-size: 16px; + line-height: 100%; + letter-spacing: 0%; + color: rgba(160, 163, 173, 1); + } + + input { + font-family: "Microsoft YaHei UI"; + font-weight: 400; + font-style: normal; + font-size: 16px; + line-height: 100%; + letter-spacing: 0%; + color: rgba(160, 163, 173, 1); + } +} + +.login-button { + height: 39px; + border-radius: 8px; + background: rgba(1, 90, 255, 1); + border: none; + font-family: "Microsoft YaHei UI"; + font-weight: 400; + font-style: normal; + font-size: 16px; + line-height: 100%; + letter-spacing: 0%; + color: rgba(255, 255, 255, 1); + width: 100%; + + &:hover { + background: rgba(1, 90, 255, 0.9); + } +} + +.checkbox-group { + display: flex; + justify-content: space-between; + margin-bottom: 20px; +} + +.custom-checkbox { + font-family: "Microsoft YaHei UI"; + font-weight: 400; + font-style: normal; + font-size: 14px; + line-height: 100%; + letter-spacing: 0%; + color: rgba(88, 97, 116, 1); + + .ant-checkbox-inner { + width: 16px; + height: 16px; + } + + .ant-checkbox-checked .ant-checkbox-inner { + background-color: rgba(1, 90, 255, 1); + border-color: rgba(1, 90, 255, 1); + } + + &:first-child { + margin-right: 10px; } } @@ -48,31 +156,4 @@ .ant-form-item { margin-bottom: 24px; -} - -.ant-input-affix-wrapper { - border-radius: 6px; - border: 1px solid #d9d9d9; - - &:hover, - &:focus, - &.ant-input-affix-wrapper-focused { - border-color: #667eea; - box-shadow: 0 0 0 2px rgba(102, 126, 234, 0.2); - } -} - -.ant-btn-primary { - background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); - border: none; - border-radius: 6px; - height: 44px; - font-size: 16px; - font-weight: 500; - - &:hover { - background: linear-gradient(135deg, #5a6fd8 0%, #6a4190 100%); - transform: translateY(-1px); - box-shadow: 0 4px 12px rgba(102, 126, 234, 0.3); - } -} \ No newline at end of file +} \ No newline at end of file diff --git a/pc-fe/src/pages/login/index.tsx b/pc-fe/src/pages/login/index.tsx index 4cb530b..fd46d93 100644 --- a/pc-fe/src/pages/login/index.tsx +++ b/pc-fe/src/pages/login/index.tsx @@ -1,12 +1,14 @@ import React, { useState } from 'react'; -import { Form, Input, Button, Card, message } from 'antd'; -import { UserOutlined, LockOutlined } from '@ant-design/icons'; +import { Form, Input, Button, Card, message, Checkbox } from 'antd'; +import { UserOutlined, LockOutlined, LinkOutlined } from '@ant-design/icons'; import { history } from 'umi'; +import TitleBar from '../components/TitleBar'; import './index.less'; interface LoginForm { username: string; password: string; + server: string; } const LoginPage: React.FC = () => { @@ -22,7 +24,7 @@ const LoginPage: React.FC = () => { localStorage.setItem('isLoggedIn', 'true'); localStorage.setItem('username', values.username); // 跳转到镜像列表页面 - history.push('/images'); + history.push('/imagesList'); } else { message.error('用户名或密码错误!'); } @@ -33,53 +35,60 @@ const LoginPage: React.FC = () => { } }; - const closeApp = () => { - if (window.electronAPI) { - window.electronAPI.closeApp(); - } - }; - - const minimizeApp = () => { - if (window.electronAPI) { - window.electronAPI.minimizeApp(); - } - }; - - const exitKioskMode = () => { - if (window.electronAPI) { - window.electronAPI.exitKiosk(); - } - }; + const test = () => { + setTimeout(() => { + // history.push('/login'); + history.push('/configSteps?tab=terminalGetImage'); + },1000) + } return (
+ +
- + +
欢迎登录 X Space
- - } - placeholder="用户名" - /> - +
+ + } + placeholder="请输入账户名" + className="custom-input" + /> + - - } - placeholder="密码" - /> - + + } + placeholder="请输入密码" + className="custom-input" + /> + + + + } + placeholder="请输入服务器地址" + className="custom-input" + /> + +
-
- - - -
+ +
+ 自动登录 + 记住密码 +

提示:用户名 admin,密码 123456