diff --git a/src/main/index.js b/src/main/index.js
index fca4014..b8c9e93 100644
--- a/src/main/index.js
+++ b/src/main/index.js
@@ -1,4 +1,4 @@
-import { app, shell, BrowserWindow, ipcMain } from 'electron'
+import { app, shell, BrowserWindow, ipcMain, session } from 'electron'
import { join } from 'path'
import { electronApp, optimizer, is } from '@electron-toolkit/utils'
import icon from '../../resources/icon.png?asset'
@@ -6,12 +6,15 @@ import File from './file'
import Tool from './tool'
File({ app, shell, BrowserWindow, ipcMain })
-// zdg: 创建工具-如 悬浮球
-Tool(app, shell, BrowserWindow, ipcMain)
-function createWindow() {
- // Create the browser window.
- const mainWindow = new BrowserWindow({
+
+
+let mainWindow, loginWindow
+
+//登录窗口
+function createLoginWindow() {
+ if (loginWindow) return
+ loginWindow = new BrowserWindow({
width: 888,
height: 520,
show: false,
@@ -24,53 +27,154 @@ function createWindow() {
nodeIntegration: true
}
})
+ const loginURL = is.dev ? `http://localhost:5173/#/login` : `file://${__dirname}/index.html/login`
+ loginWindow.loadURL(loginURL)
+
+ loginWindow.once('ready-to-show', () => {
+ loginWindow.show()
+ })
+
+ loginWindow.on('closed', () => {
+ loginWindow = null
+ })
+}
+//主窗口
+function createMainWindow() {
+ mainWindow = new BrowserWindow({
+ width: 1200,
+ height: 700,
+ show: false,
+ frame: false,
+ autoHideMenuBar: true,
+ ...(process.platform === 'linux' ? { icon } : {}),
+ webPreferences: {
+ preload: join(__dirname, '../preload/index.js'),
+ sandbox: false,
+ nodeIntegration: true
+ }
+ })
mainWindow.on('ready-to-show', () => {
mainWindow.show()
})
-
-
-
mainWindow.webContents.setWindowOpenHandler((details) => {
shell.openExternal(details.url)
return { action: 'deny' }
})
mainWindow.webContents.openDevTools()
- // HMR for renderer base on electron-vite cli.
- // Load the remote URL for development or the local html file for production.
+
if (is.dev && process.env['ELECTRON_RENDERER_URL']) {
mainWindow.loadURL(process.env['ELECTRON_RENDERER_URL'])
-
- // mainWindow.loadURL('https://file.ysaix.com:7868/')
-
} else {
- // mainWindow.loadURL('https://file.ysaix.com:7868/')
mainWindow.loadFile(join(__dirname, '../renderer/index.html'))
}
}
-// This method will be called when Electron has finished
-// initialization and is ready to create browser windows.
-// Some APIs can only be used after this event occurs.
-app.whenReady().then(() => {
- // Set app user model id for windows
+// 作业窗口相关-开发中
+let workWindow
+function createWork(data) {
+ if (workWindow) return
+ workWindow = new BrowserWindow({
+ width: 650,
+ height: 500,
+ show: false,
+ frame: true,
+
+ autoHideMenuBar: true,
+ ...(process.platform === 'linux' ? { icon } : {}),
+ webPreferences: {
+ sandbox: false,
+ nodeIntegration: true
+ }
+ })
+
+ workWindow.webContents.session.cookies.set(
+ {
+ url: 'https://file.ysaix.com:7868',
+ name: 'Admin-Token',
+ value: data
+ },
+ function (error) {
+ if (error) {
+ console.error('Set cookie failed:', error)
+ } else {
+ console.log('Cookie set successfully.')
+ }
+ }
+ )
+ workWindow.loadURL(
+ 'https://file.ysaix.com:7868/teaching/classtaskassign?titleName=%E4%BD%9C%E4%B8%9A%E5%B8%83%E7%BD%AE'
+ )
+
+ workWindow.once('ready-to-show', () => {
+ workWindow.show()
+ })
+ workWindow.on('closed', () => {
+ workWindow = null
+ })
+}
+
+// 初始化完成
+app.on('ready', () => {
+ // 设置应用程序用户模型标识符
electronApp.setAppUserModelId('com.electron')
- // Default open or close DevTools by F12 in development
- // and ignore CommandOrControl + R in production.
- // see https://github.com/alex8088/electron-toolkit/tree/master/packages/utils
+ //一个新的browserWindow 被创建时触发
app.on('browser-window-created', (_, window) => {
optimizer.watchWindowShortcuts(window)
})
+ //窗口 最大、最小、关闭
+ ipcMain.on('minimize-window', () => {
+ if (loginWindow) {
+ loginWindow.minimize()
+ }
+ if (mainWindow) {
+ mainWindow.minimize()
+ }
+ })
+ ipcMain.on('maximize-window', () => {
+ mainWindow.isMaximized() ? mainWindow.unmaximize() : mainWindow.maximize()
+ })
- createWindow()
+ ipcMain.on('close-window', () => {
+ if (loginWindow) {
+ loginWindow.destroy()
+ }
+ if (mainWindow) {
+ mainWindow.destroy()
+ }
+ })
+ // 打开主窗口
+ ipcMain.on('openMainWindow', () => {
+ if (!mainWindow) {
+ createMainWindow()
+ }
+
+ loginWindow.destroy()
+ loginWindow = null
+ })
+ // 打开登录窗口
+ ipcMain.on('openLoginWindow', () => {
+ if (!loginWindow) {
+ createLoginWindow()
+ }
+ mainWindow.destroy()
+ loginWindow.show()
+ loginWindow.focus()
+ })
+
+ //打开作业窗口
+ ipcMain.on('openWork', (e, data) => {
+ createWork(data)
+ })
+ // zdg: 创建工具窗口-如 悬浮球
+ // Tool(app, shell, BrowserWindow, ipcMain)
+ createLoginWindow()
app.on('activate', function () {
- // On macOS it's common to re-create a window in the app when the
- // dock icon is clicked and there are no other windows open.
- if (BrowserWindow.getAllWindows().length === 0) createWindow()
+ if (BrowserWindow.getAllWindows().length === 0) createLoginWindow()
})
})
@@ -82,35 +186,3 @@ app.on('window-all-closed', () => {
app.quit()
}
})
-
-ipcMain.on('toggle-top', (event) => {
- const win = BrowserWindow.getFocusedWindow();
- const isAlwaysOnTop = win.isAlwaysOnTop();
- win.setAlwaysOnTop(!isAlwaysOnTop);
- event.sender.send('top-status-changed', !isAlwaysOnTop);
-})
-
-
-ipcMain.on('minimize-window', () => {
- const win = BrowserWindow.getFocusedWindow();
- win.minimize();
-});
-
-ipcMain.on('maximize-window', () => {
- const win = BrowserWindow.getFocusedWindow();
- if (win.isMaximized()) {
- win.unmaximize();
- } else {
- win.maximize();
- }
-});
-
-ipcMain.on('close-window', () => {
- const win = BrowserWindow.getFocusedWindow();
- win.close();
-});
-ipcMain.on('set-winsize', (e, {x, y})=>{
- const win = BrowserWindow.getFocusedWindow();
- win.setSize(x,y);
- win.center()
-})
diff --git a/src/renderer/src/components/window-tools/index.vue b/src/renderer/src/components/window-tools/index.vue
new file mode 100644
index 0000000..f32fe27
--- /dev/null
+++ b/src/renderer/src/components/window-tools/index.vue
@@ -0,0 +1,61 @@
+
+