From c7ff189b96b8a08a6197781c9e642b427e274bff Mon Sep 17 00:00:00 2001 From: kuaifan Date: Fri, 2 Dec 2022 01:59:50 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E5=AE=A2=E6=88=B7=E7=AB=AF=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E6=88=AA=E5=9B=BE=E5=BF=AB=E6=8D=B7=E9=94=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- electron/electron.js | 44 ++++++++-- electron/package.json | 12 +-- resources/assets/js/App.vue | 1 + resources/assets/js/app.js | 13 +++ .../assets/js/pages/manage/setting/index.vue | 4 + .../js/pages/manage/setting/keyboard.vue | 86 +++++++++++++++++++ .../js/pages/manage/setting/language.vue | 2 - resources/assets/js/routes.js | 5 ++ resources/assets/js/store/actions.js | 2 + 9 files changed, 156 insertions(+), 13 deletions(-) create mode 100644 resources/assets/js/pages/manage/setting/keyboard.vue diff --git a/electron/electron.js b/electron/electron.js index 9b1341657..7bb5a01ea 100644 --- a/electron/electron.js +++ b/electron/electron.js @@ -19,6 +19,9 @@ let mainWindow = null, devloadUrl = "", devloadCachePath = path.resolve(__dirname, ".devload"); +let screenshotObj = null, + screenshotKey = null; + if (fs.existsSync(devloadCachePath)) { devloadUrl = fs.readFileSync(devloadCachePath, 'utf8') } @@ -196,13 +199,15 @@ if (!getTheLock) { if (process.platform === 'win32') { app.setAppUserModelId(config.name) } - // 截图 - const screenshots = new Screenshots({ + // 截图对象 + screenshotObj = new Screenshots({ singleWindow: true }) - globalShortcut.register('ctrl+shift+a', () => { - screenshots.startCapture().then(_ => {}) - }) + globalShortcut.register("esc", () => { + if (screenshotObj.$win?.isFocused()) { + screenshotObj.endCapture().then(_ => {}); + } + }); }) } @@ -454,6 +459,35 @@ ipcMain.on('copyBase64Image', (event, args) => { event.returnValue = "ok" }) +/** + * 绑定截图快捷键 + * @param args + */ +ipcMain.on('bindScreenshotKey', (event, args) => { + const { key } = args; + if (screenshotKey !== key) { + if (screenshotKey) { + globalShortcut.unregister(screenshotKey) + screenshotKey = null + } + if (key) { + screenshotKey = key + globalShortcut.register(key, () => { + screenshotObj.startCapture().then(_ => {}) + }) + } + } + event.returnValue = "ok" +}) + +/** + * 执行截图 + */ +ipcMain.on('onScreenshot', (event) => { + screenshotObj.startCapture().then(_ => {}) + event.returnValue = "ok" +}) + //================================================================ // Update //================================================================ diff --git a/electron/package.json b/electron/package.json index 874d04d16..26d88956f 100644 --- a/electron/package.json +++ b/electron/package.json @@ -26,13 +26,13 @@ "url": "https://github.com/kuaifan/dootask.git" }, "devDependencies": { - "@electron-forge/cli": "^6.0.1", - "@electron-forge/maker-deb": "^6.0.1", - "@electron-forge/maker-rpm": "^6.0.1", - "@electron-forge/maker-squirrel": "^6.0.1", - "@electron-forge/maker-zip": "^6.0.1", + "@electron-forge/cli": "^6.0.4", + "@electron-forge/maker-deb": "^6.0.4", + "@electron-forge/maker-rpm": "^6.0.4", + "@electron-forge/maker-squirrel": "^6.0.4", + "@electron-forge/maker-zip": "^6.0.4", "dotenv": "^16.0.3", - "electron": "^21.3.0", + "electron": "^22.0.0", "electron-builder": "^23.6.0", "electron-notarize": "^1.2.2", "form-data": "^4.0.0", diff --git a/resources/assets/js/App.vue b/resources/assets/js/App.vue index dcdbecae4..6325d8b49 100755 --- a/resources/assets/js/App.vue +++ b/resources/assets/js/App.vue @@ -237,6 +237,7 @@ export default { key: 'manifest', url: $A.apiUrl("../manifest") }) + $A.bindScreenshotKey($A.jsonParse(window.localStorage['__keyboard:data__'] || {})); }, eeuiEvents() { diff --git a/resources/assets/js/app.js b/resources/assets/js/app.js index aa49d83ef..a9a2f28eb 100644 --- a/resources/assets/js/app.js +++ b/resources/assets/js/app.js @@ -193,3 +193,16 @@ $A.execMainCacheJudge = (key) => { return val }; +$A.bindScreenshotKey = (data) => { + let key = ""; + if (data.screenshot_key && (data.screenshot_mate || data.screenshot_shift)) { + if (data.screenshot_mate) { + key = /macintosh|mac os x/i.test(navigator.userAgent) ? 'command' : 'ctrl' + } + if (data.screenshot_shift) { + key = `${key ? `${key}+` : ''}shift` + } + key = `${key}+${data.screenshot_key.toLowerCase()}` + } + $A.Electron.sendMessage('bindScreenshotKey', {key}); +}; diff --git a/resources/assets/js/pages/manage/setting/index.vue b/resources/assets/js/pages/manage/setting/index.vue index 135abb2e6..f431bac00 100644 --- a/resources/assets/js/pages/manage/setting/index.vue +++ b/resources/assets/js/pages/manage/setting/index.vue @@ -76,6 +76,10 @@ export default { {path: 'email', name: '修改邮箱'}, ] + if (this.$Electron) { + menu.splice(2, 0, {path: 'keyboard', name: '快捷键'}) + } + if ([ '127.0.0.1:2222', '192.168.100.88:2222', diff --git a/resources/assets/js/pages/manage/setting/keyboard.vue b/resources/assets/js/pages/manage/setting/keyboard.vue new file mode 100644 index 000000000..ad19d6c1e --- /dev/null +++ b/resources/assets/js/pages/manage/setting/keyboard.vue @@ -0,0 +1,86 @@ + + + + diff --git a/resources/assets/js/pages/manage/setting/language.vue b/resources/assets/js/pages/manage/setting/language.vue index fd41fbfb7..d4413b9e5 100644 --- a/resources/assets/js/pages/manage/setting/language.vue +++ b/resources/assets/js/pages/manage/setting/language.vue @@ -15,11 +15,9 @@