From 006bc6cedadea51b7883357b16e516e3b590a593 Mon Sep 17 00:00:00 2001 From: kuaifan Date: Thu, 8 May 2025 00:38:46 +0800 Subject: [PATCH] no message --- electron/electron.js | 5 ++- language/original-web.txt | 1 + .../assets/js/components/MicroApps/index.vue | 37 +++++++++++++++- resources/assets/js/functions/common.js | 13 ++++++ resources/assets/js/pages/single/apps.vue | 43 ++++++------------- resources/assets/js/routes.js | 2 +- 6 files changed, 68 insertions(+), 33 deletions(-) diff --git a/electron/electron.js b/electron/electron.js index ac32dcec0..c1c3f08d1 100644 --- a/electron/electron.js +++ b/electron/electron.js @@ -313,7 +313,8 @@ function preCreateChildWindow() { /** * 创建子窗口 - * @param args {path, hash, title, titleFixed, force, userAgent, config, webPreferences} + * @param args {name, path, hash, force, userAgent, config, webPreferences} + * - config: {title, titleFixed, ...BrowserWindowConstructorOptions} */ function createChildWindow(args) { if (!args) { @@ -378,7 +379,7 @@ function createChildWindow(args) { } browser.on('page-title-updated', (event, title) => { - if (title == "index.html" || config.titleFixed === true) { + if (title == "index.html" || options.titleFixed === true) { event.preventDefault() } }) diff --git a/language/original-web.txt b/language/original-web.txt index 1835ae94f..2ee16a343 100644 --- a/language/original-web.txt +++ b/language/original-web.txt @@ -2067,3 +2067,4 @@ AI开启新会话失败 按状态 应用加载失败 +应用不存在 diff --git a/resources/assets/js/components/MicroApps/index.vue b/resources/assets/js/components/MicroApps/index.vue index 5adc44b05..254c7e07d 100644 --- a/resources/assets/js/components/MicroApps/index.vue +++ b/resources/assets/js/components/MicroApps/index.vue @@ -244,6 +244,37 @@ export default { } return 1000; }, + popoutWindow: async (config) => { + let appConfig = {} + if (config.url) { + appConfig = { + name: `url-${await $A.getSHA256Hash(config.url)}`, + url: config.url, + } + delete config.url + } else { + const app = this.apps.find(item => item.name == name); + if (!app) { + $A.modalError("应用不存在"); + return + } + appConfig = Object.assign({}, app) + } + appConfig.transparent = true + appConfig.keepAlive = false + + const apps = (await $A.IDBArray("cacheMicroApps")).filter(item => item.name != appConfig.name); + apps.length > 50 && apps.splice(0, 10) + apps.push(appConfig) + await $A.IDBSet("cacheMicroApps", apps); + + await this.$store.dispatch('openChildWindow', { + name: `single-apps-${$A.randomString(6)}`, + path: `/single/apps/${appConfig.name}`, + force: false, + config + }); + }, openWindow: (params) => { if (!$A.isJson(params)) { params = {path: params} @@ -353,7 +384,11 @@ export default { return new Promise(resolve => { microApp.forceSetData(name, {type: 'beforeClose'}, array => { if (!array?.find(item => item === true)) { - resolve() + if ($A.isSubElectron) { + $A.Electron.sendMessage('windowDestroy'); + } else { + resolve() + } } }) }) diff --git a/resources/assets/js/functions/common.js b/resources/assets/js/functions/common.js index 5358e0e76..4ab5f479e 100755 --- a/resources/assets/js/functions/common.js +++ b/resources/assets/js/functions/common.js @@ -1508,6 +1508,19 @@ const timezone = require("dayjs/plugin/timezone"); img.src = url; }) }, + + /** + * 获取SHA256哈希值 + * @param str + * @returns {Promise} + */ + async getSHA256Hash(str) { + const encoder = new TextEncoder(); + const data = encoder.encode(str); + const hashBuffer = await crypto.subtle.digest('SHA-256', data); + const hashArray = Array.from(new Uint8Array(hashBuffer)); + return hashArray.map(b => b.toString(16).padStart(2, '0')).join(''); + }, }); /** diff --git a/resources/assets/js/pages/single/apps.vue b/resources/assets/js/pages/single/apps.vue index b10470c2a..1f520deab 100644 --- a/resources/assets/js/pages/single/apps.vue +++ b/resources/assets/js/pages/single/apps.vue @@ -1,7 +1,5 @@ diff --git a/resources/assets/js/routes.js b/resources/assets/js/routes.js index b44754a9c..2ac788e9f 100755 --- a/resources/assets/js/routes.js +++ b/resources/assets/js/routes.js @@ -160,7 +160,7 @@ export default [ }, { name: 'single-apps', - path: '/single/apps/*', + path: '/single/apps/:appName', component: () => import('./pages/single/apps.vue') }, {