diff --git a/build/builder-debug.yml b/build/builder-debug.yml new file mode 100644 index 0000000..a4905e1 --- /dev/null +++ b/build/builder-debug.yml @@ -0,0 +1,17 @@ +arm64: + firstOrDefaultFilePatterns: + - '!**/node_modules' + - '!build{,/**/*}' + - '!build{,/**/*}' + - dist/electron/**/* + - package.json + - '!**/*.{iml,hprof,orig,pyc,pyo,rbc,swp,csproj,sln,suo,xproj,cc,d.ts,mk,a,o,forge-meta,pdb}' + - '!**/._*' + - '!**/electron-builder.{yaml,yml,json,json5,toml,ts}' + - '!**/{.git,.hg,.svn,CVS,RCS,SCCS,__pycache__,.DS_Store,thumbs.db,.gitignore,.gitkeep,.gitattributes,.npmignore,.idea,.vs,.flowconfig,.jshintrc,.eslintrc,.circleci,.yarn-integrity,.yarn-metadata.json,yarn-error.log,yarn.lock,package-lock.json,npm-debug.log,appveyor.yml,.travis.yml,circle.yml,.nyc_output,.husky,.github}' + - '!.yarn{,/**/*}' + - '!.editorconfig' + - '!.yarnrc.yml' + nodeModuleFilePatterns: + - '**/*' + - dist/electron/**/* diff --git a/src/main/config/SettingFile.js b/src/main/config/SettingFile.js new file mode 100644 index 0000000..3032ebf --- /dev/null +++ b/src/main/config/SettingFile.js @@ -0,0 +1,21 @@ +import fs from "fs"; +import path from "path"; +export function readSettingFile () { + try { + const res = fs.readFileSync(path.resolve(__static, "./setting.json"), "utf-8") + global._DefaultSetting = JSON.parse(res) + return JSON.parse(res) + } catch (err) { + throw new Error(err) + } +} + +export function writeSettingFile (data) { + try { + fs.writeFileSync(path.resolve(__static, "./setting.json"), data) + return true + } catch (err) { + console.error(err) + return false + } +} diff --git a/src/main/config/StaticPath.js b/src/main/config/StaticPath.js index e7f54c3..3122461 100644 --- a/src/main/config/StaticPath.js +++ b/src/main/config/StaticPath.js @@ -16,4 +16,4 @@ export const loadingURL = process.env.NODE_ENV === 'development' ? `http://local export const libPath = process.env.libPath export const remindURL = 'development' ? `http://localhost:${process.env.PORT}/#/remind` : `file://${__dirname}/index.html/#/remind` //export const adminWebUri = process.env.NODE_ENV === 'development' ? "http://contract-sqhj-test.ali251.langye.net/admin_test/#/" : "http://contract-sqhj.ali251.langye.net/admin/#/" -export const adminWebUri = "http://contract-sqhj-test.ali251.langye.net/admin_test/#/" +export let adminWebUri = "http://contract-sqhj-test.ali251.langye.net/admin_test/#/" diff --git a/src/main/config/menu.js b/src/main/config/menu.js index 3149a53..367c70b 100644 --- a/src/main/config/menu.js +++ b/src/main/config/menu.js @@ -1,5 +1,5 @@ // 这里是定义菜单的地方,详情请查看 https://electronjs.org/docs/api/menu -const { dialog } = require('electron') +const { dialog,app } = require('electron') const os = require('os') const version = require('../../../package.json').version const menu = [ @@ -9,6 +9,12 @@ const menu = [ label: '快速重启', accelerator: 'F5', role: 'reload' + },{ + label: '退出', + accelerator: 'CmdOrCtrl+F4', + click(){ + app.quit() + } }] }, { @@ -53,11 +59,6 @@ const menu = [ }, { type: "separator" - }, - { - label: '退出', - accelerator: 'CmdOrCtrl+F4', - role: 'close' }] function info() { dialog.showMessageBox({ diff --git a/src/main/index.js b/src/main/index.js index 1d4e949..fc68859 100644 --- a/src/main/index.js +++ b/src/main/index.js @@ -5,7 +5,9 @@ import { initWindow, initTrayIcon, tray } from './services/windowManager' import DisableButton from './config/DisableButton' import electronDevtoolsInstaller, { VUEJS_DEVTOOLS } from 'electron-devtools-installer' import { init } from "./services/notices" +import { readSettingFile } from "./config/SettingFile" function onAppReady () { + readSettingFile() initWindow() initTrayIcon() init() @@ -30,7 +32,7 @@ app.on('window-all-closed', () => { tray.destroy(); } // 所有平台均为所有窗口关闭就退出软件 - app.quit() + //app.quit() }) app.on('browser-window-created', () => { console.log('window-created') diff --git a/src/main/services/ipcMain.js b/src/main/services/ipcMain.js index 83f11ad..e14cf66 100644 --- a/src/main/services/ipcMain.js +++ b/src/main/services/ipcMain.js @@ -5,6 +5,7 @@ import downloadFile from './downloadFile' import Update from './checkupdate' import { updater } from './HotUpdater' import { createNotification } from "./notices" +import { writeSettingFile } from "../config/SettingFile" import { createAdminWindow, toggleMainWindowResizable, @@ -22,6 +23,12 @@ import { export default { Mainfunc(IsUseSysTitle) { const allUpdater = new Update(); + ipcMain.handle('write-default-setting', async (event, str) => { + return writeSettingFile(str) + }) + ipcMain.handle('get-default-setting',async _ => { + return global._DefaultSetting + }) ipcMain.handle('create-notice', async (event, args) => { const { title,body } = args createNotification(title,body) diff --git a/src/main/services/notices.js b/src/main/services/notices.js index 3f7b1f7..b257fff 100644 --- a/src/main/services/notices.js +++ b/src/main/services/notices.js @@ -5,6 +5,9 @@ export function init () { notification = new Notification() } export function createNotification(title,body) { + if (!global._DefaultSetting?.isNotice) { + return + } if (Notification.isSupported()) { notification.title = title; notification.body = body; diff --git a/src/main/services/windowManager.js b/src/main/services/windowManager.js index 27cfd3b..c5ca56b 100644 --- a/src/main/services/windowManager.js +++ b/src/main/services/windowManager.js @@ -44,11 +44,11 @@ function createAdminView () { mainWindow.setBrowserView(adminView) mainWindow?.webContents.executeJavaScript("window.localStorage.getItem('token')",true).then((token) => { session.defaultSession.cookies.set({ - url: adminWebUri, + url: global._DefaultSetting.adminWebUri, name: "sqhj_workerbench_web_token", value: token }).then(_ => { - adminView.webContents.loadURL(adminWebUri) + adminView.webContents.loadURL(global._DefaultSetting.adminWebUri) }) }) adminView.webContents.on('dom-ready', () => { @@ -71,7 +71,7 @@ function createAdminView () { export function setAdminCookie () { mainWindow?.webContents.executeJavaScript("window.localStorage.getItem('token')",true).then((token) => { session.defaultSession.cookies.set({ - url: adminWebUri, + url: global._DefaultSetting.adminWebUri, name: "sqhj_workerbench_web_token", value: token }).then(_ => { @@ -102,11 +102,11 @@ function createAdminWindow() { mainWindow?.webContents.executeJavaScript("window.localStorage.getItem('token')",true).then((token) => { session.defaultSession.cookies.set({ - url: adminWebUri, + url: global._DefaultSetting.adminWebUri, name: "sqhj_workerbench_web_token", value: token }).then(_ => { - adminWindow.loadURL(adminWebUri) + adminWindow.loadURL(global._DefaultSetting.adminWebUri) }) }) @@ -127,8 +127,9 @@ function createAdminWindow() { adminWindow = null }) } +const iconPath = path.join(__static,"./ico.png") function initTrayIcon () { - tray = new Tray(path.join(__static,"./ico.png")) + tray = new Tray(iconPath) tray.setToolTip("江苏省宿迁环境监测中心") const menu = Menu.buildFromTemplate(menuconfig) tray.setContextMenu(menu) @@ -136,7 +137,6 @@ function initTrayIcon () { if (!mainWindow.isVisible()) { mainWindow.show() } - mainWindow.webContents.send("to-notice") }) } let trayTimer = null; @@ -158,7 +158,11 @@ function setTrayTitle (title) { if (process.platform === "darwin") { tray.setTitle(title.toString()) } else { - noticeFlash() + if (Number(title) && Number(title) > 0) { + noticeFlash() + } else { + tray.setImage(iconPath) + } } } function createMainWindow() { @@ -218,10 +222,10 @@ function createMainWindow() { mainWindow.webContents.send("w-max", false) }) mainWindow.on('closed', () => { - mainWindow = null - adminView = null - remindWindow = null - app.quit(); + // mainWindow = null + // adminView = null + // remindWindow = null + // app.quit(); }) } function createRemindWindow () { diff --git a/src/renderer/App.vue b/src/renderer/App.vue index 8843ec8..adc681d 100644 --- a/src/renderer/App.vue +++ b/src/renderer/App.vue @@ -12,17 +12,14 @@ import CHeader from "./components/title"; import { useNoticeStore } from "@/store/notice"; import { onUnmounted } from "vue"; import { ipcRenderer } from "electron" -import { useRouter } from "@/hooks/use-router" - +import { useRouter, useRoute } from "@/hooks/use-router" +const $route = useRoute() const $router = useRouter() const noticeStore = useNoticeStore() noticeStore.startNoticeTimer() -ipcRenderer.on("to-notice",_ => { - $router.push("/notice/index") -}) + onUnmounted(() => { noticeStore.destroyNoticeTimer() - ipcRenderer.removeListener("to-notice") }) diff --git a/src/renderer/icons/svg/setting.svg b/src/renderer/icons/svg/setting.svg new file mode 100644 index 0000000..21f3639 --- /dev/null +++ b/src/renderer/icons/svg/setting.svg @@ -0,0 +1,2 @@ + + diff --git a/src/renderer/layout/components/Sidebar/index.vue b/src/renderer/layout/components/Sidebar/index.vue index 5fedf57..c09b99a 100644 --- a/src/renderer/layout/components/Sidebar/index.vue +++ b/src/renderer/layout/components/Sidebar/index.vue @@ -7,6 +7,7 @@ :collapse="isCollapse"> + @@ -21,7 +22,7 @@ import { useAppStore } from "@/store/app" import { usePermissionStore } from "@/store/permission" import { constantRouterMap } from "@/router" import SvgIcon from "@/components/SvgIcon"; -import { useRouter } from "@/hooks/use-router"; +import { useRouter, useRoute } from "@/hooks/use-router"; import { useUserStore } from "@/store/user" defineComponent({ name: 'Sidebar' @@ -36,12 +37,17 @@ const isCollapse = computed(() => !sidebarStatus.opened) const { logOut } = useUserStore() const router = useRouter() +const route = useRoute() const logout = async () => { await ipcRenderer.invoke("hide-admin-view") logOut().then(() => { router.push('/login') }) } +const toSetting = () => { + if (route.path === '/setting' || route.path === '/setting/index') return + router.push('/setting/index') +} diff --git a/static/setting.json b/static/setting.json new file mode 100644 index 0000000..870a99d --- /dev/null +++ b/static/setting.json @@ -0,0 +1 @@ +{"adminWebUri":"http://contract-sqhj-test.ali251.langye.net/admin_test/#/","api":"http://contract-sqhj-test.ali251.langye.net/","uploadApi":"http://contract-sqhj-test.ali251.langye.net/api/admin/upload-file","isNotice":true}