From b3abe8af9cc67087578bea26c4ccb67a58b75b7d Mon Sep 17 00:00:00 2001 From: kuaifan Date: Mon, 26 May 2025 16:41:14 +0800 Subject: [PATCH] no message --- .../assets/js/components/MicroApps/index.vue | 24 +++++++++++++++++++ resources/assets/js/functions/common.js | 6 +++-- resources/assets/js/store/actions.js | 1 - 3 files changed, 28 insertions(+), 3 deletions(-) diff --git a/resources/assets/js/components/MicroApps/index.vue b/resources/assets/js/components/MicroApps/index.vue index e29e6d01c..e932af6dc 100644 --- a/resources/assets/js/components/MicroApps/index.vue +++ b/resources/assets/js/components/MicroApps/index.vue @@ -301,11 +301,30 @@ export default { } }, + /** + * 生成微应用名称 + * @param config + * @returns {Promise} + */ + async generateAppName(config) { + let name = config.id || 'micro-app' + if (!this.apps.find(item => item.name == name)) { + return name + } + name = `${config.id}_${await $A.getSHA256Hash(config.url, 8)}` + if (!this.apps.find(item => item.name == name)) { + return name + } + return `${config.id}_${await $A.getSHA256Hash(config.url)}` + }, + /** * 观察打开微应用 * @param config */ async observeMicroApp(config) { + config.name = await this.generateAppName(config) + if (config.url_type === 'inline_blank') { await this.inlineBlank(config) return @@ -314,6 +333,7 @@ export default { await this.externalWindow(config) return } + const app = this.apps.find(({name}) => name == config.name); if (app) { // 更新微应用 @@ -345,6 +365,10 @@ export default { transparent: true, keep_alive: false, }; + if (windowConfig.url) { + appConfig.url = windowConfig.url; + delete windowConfig.url; + } // const path = `/single/apps/${appConfig.name}` const apps = (await $A.IDBArray("cacheMicroApps")).filter(item => item.name != appConfig.name); diff --git a/resources/assets/js/functions/common.js b/resources/assets/js/functions/common.js index 4ab5f479e..a3351c04d 100755 --- a/resources/assets/js/functions/common.js +++ b/resources/assets/js/functions/common.js @@ -1512,14 +1512,16 @@ const timezone = require("dayjs/plugin/timezone"); /** * 获取SHA256哈希值 * @param str + * @param length * @returns {Promise} */ - async getSHA256Hash(str) { + async getSHA256Hash(str, length = 0) { 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(''); + const hash = hashArray.map(b => b.toString(16).padStart(2, '0')).join(''); + return length > 0 ? hash.slice(0, length) : hash; }, }); diff --git a/resources/assets/js/store/actions.js b/resources/assets/js/store/actions.js index b56f07975..182d4fca1 100644 --- a/resources/assets/js/store/actions.js +++ b/resources/assets/js/store/actions.js @@ -4679,7 +4679,6 @@ export default { $A.modalWarning(`应用「${config.id}」未安装`); return; } - config.name = `${config.id}_${await $A.getSHA256Hash(config.url)}` config.url = config.url.replace(/\{user_id}/g, state.userId) .replace(/\{user_nickname}/g, encodeURIComponent(state.userInfo.nickname)) .replace(/\{user_email}/g, encodeURIComponent(state.userInfo.email))