mirror of
https://github.com/kuaifan/dootask.git
synced 2026-01-26 20:48:12 +00:00
perf: 优化应用
This commit is contained in:
parent
099004a080
commit
f9276f4d83
@ -122,11 +122,13 @@ export default {
|
|||||||
},
|
},
|
||||||
|
|
||||||
mounted() {
|
mounted() {
|
||||||
emitter.on('observeMicroApp:open', this.observeMicroApp);
|
emitter.on('observeMicroApp:open', this.onOpen);
|
||||||
|
emitter.on('observeMicroApp:updatedOrUninstalled', this.onUpdatedOrUninstalled);
|
||||||
},
|
},
|
||||||
|
|
||||||
beforeDestroy() {
|
beforeDestroy() {
|
||||||
emitter.off('observeMicroApp:open', this.observeMicroApp);
|
emitter.off('observeMicroApp:open', this.onOpen);
|
||||||
|
emitter.off('observeMicroApp:updatedOrUninstalled', this.onUpdatedOrUninstalled);
|
||||||
},
|
},
|
||||||
|
|
||||||
watch: {
|
watch: {
|
||||||
@ -316,7 +318,7 @@ export default {
|
|||||||
* 观察打开微应用
|
* 观察打开微应用
|
||||||
* @param config
|
* @param config
|
||||||
*/
|
*/
|
||||||
async observeMicroApp(config) {
|
async onOpen(config) {
|
||||||
if (/_blank$/i.test(config.url_type)) {
|
if (/_blank$/i.test(config.url_type)) {
|
||||||
await this.inlineBlank(config)
|
await this.inlineBlank(config)
|
||||||
return
|
return
|
||||||
@ -336,7 +338,7 @@ export default {
|
|||||||
|
|
||||||
// 更新微应用
|
// 更新微应用
|
||||||
if (app.url != config.url) {
|
if (app.url != config.url) {
|
||||||
await microApp.unmountApp(app.name, {destroy: true})
|
this.unmountMicroApp(app)
|
||||||
app.isLoading = true
|
app.isLoading = true
|
||||||
}
|
}
|
||||||
Object.assign(app, config)
|
Object.assign(app, config)
|
||||||
@ -467,7 +469,7 @@ export default {
|
|||||||
|
|
||||||
app.isOpen = false
|
app.isOpen = false
|
||||||
if (destroy) {
|
if (destroy) {
|
||||||
microApp.unmountApp(app.name, {destroy: true})
|
this.unmountMicroApp(app)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -479,11 +481,23 @@ export default {
|
|||||||
this.microApps.forEach(app => {
|
this.microApps.forEach(app => {
|
||||||
app.isOpen = false
|
app.isOpen = false
|
||||||
if (destroy) {
|
if (destroy) {
|
||||||
microApp.unmountApp(app.name, {destroy: true})
|
this.unmountMicroApp(app)
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 卸载微应用
|
||||||
|
* @param app
|
||||||
|
*/
|
||||||
|
unmountMicroApp(app) {
|
||||||
|
if (app.keep_alive) {
|
||||||
|
app.keepAliveBackup = true
|
||||||
|
app.keep_alive = false
|
||||||
|
}
|
||||||
|
microApp.unmountApp(app.name, {destroy: true})
|
||||||
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 关闭之前判断
|
* 关闭之前判断
|
||||||
* @param name
|
* @param name
|
||||||
@ -550,6 +564,22 @@ export default {
|
|||||||
*/
|
*/
|
||||||
shouldRenderIFrame(app) {
|
shouldRenderIFrame(app) {
|
||||||
return app.url_type === 'iframe' && (app.isOpen || app.keep_alive) && app.url;
|
return app.url_type === 'iframe' && (app.isOpen || app.keep_alive) && app.url;
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 应用更新或卸载
|
||||||
|
* @param apps
|
||||||
|
*/
|
||||||
|
onUpdatedOrUninstalled(apps) {
|
||||||
|
const ids = apps.map(item => item.id)
|
||||||
|
if (ids.length === 0) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
this.microApps.forEach(app => {
|
||||||
|
if (ids.includes(app.id)) {
|
||||||
|
this.closeMicroApp(app.name, true)
|
||||||
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -21,7 +21,7 @@ export default {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
await this.$refs.app.observeMicroApp(app)
|
await this.$refs.app.onOpen(app)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
27
resources/assets/js/store/mutations.js
vendored
27
resources/assets/js/store/mutations.js
vendored
@ -1,3 +1,5 @@
|
|||||||
|
import emitter from "./events";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
// 路由加载
|
// 路由加载
|
||||||
'route/loading': function(state, load) {
|
'route/loading': function(state, load) {
|
||||||
@ -332,10 +334,12 @@ export default {
|
|||||||
state.microApps.splice(index, count, data)
|
state.microApps.splice(index, count, data)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
'microApps/data': function(state, data) {
|
'microApps/data': function(state, data) {
|
||||||
|
// 添加应用商店
|
||||||
data.unshift({
|
data.unshift({
|
||||||
id: 'appstore',
|
id: 'appstore',
|
||||||
|
version: '1.0.0',
|
||||||
menu_items: [{
|
menu_items: [{
|
||||||
location: "application/admin",
|
location: "application/admin",
|
||||||
label: $A.L("应用商店"),
|
label: $A.L("应用商店"),
|
||||||
@ -346,10 +350,21 @@ export default {
|
|||||||
auto_dark_theme: false,
|
auto_dark_theme: false,
|
||||||
}]
|
}]
|
||||||
})
|
})
|
||||||
const ids = [];
|
// 找出已卸载的应用和版本更新的应用
|
||||||
|
const updatedOrUninstalledApps = state.microAppsInstalled
|
||||||
|
.filter((oldApp) => !data.some((newApp) => newApp.id === oldApp.id))
|
||||||
|
.map((app) => ({type: 'uninstall', id: app.id}));
|
||||||
|
state.microAppsInstalled.forEach((oldApp) => {
|
||||||
|
const newApp = data.find((app) => app.id === oldApp.id);
|
||||||
|
if (newApp && oldApp.version !== newApp.version) {
|
||||||
|
updatedOrUninstalledApps.push({type: 'update', id: oldApp.id});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
state.microAppsInstalled = data;
|
||||||
|
emitter.emit('observeMicroApp:updatedOrUninstalled', updatedOrUninstalledApps);
|
||||||
|
// 更新菜单
|
||||||
const menus = [];
|
const menus = [];
|
||||||
data.forEach((item) => {
|
data.forEach((item) => {
|
||||||
ids.push(item.id);
|
|
||||||
if (item.menu_items) {
|
if (item.menu_items) {
|
||||||
menus.push(...item.menu_items.map(m => Object.assign(m, {id: item.id})));
|
menus.push(...item.menu_items.map(m => Object.assign(m, {id: item.id})));
|
||||||
}
|
}
|
||||||
@ -357,14 +372,16 @@ export default {
|
|||||||
menus.forEach(item => {
|
menus.forEach(item => {
|
||||||
let name = item.id
|
let name = item.id
|
||||||
if (menus.filter(m => m.id === item.id).length > 1) {
|
if (menus.filter(m => m.id === item.id).length > 1) {
|
||||||
name += "_" + `${item.url}`.replace(/^https?:\/\/.*?\//, '').replace(/[^a-zA-Z0-9]/g, '_');
|
name += "_" + `${item.url}`
|
||||||
|
.replace(/^https?:\/\/.*?\//, '')
|
||||||
|
.replace(/[^a-zA-Z0-9]/g, '_');
|
||||||
}
|
}
|
||||||
if (menus.find(m => m.name === name)) {
|
if (menus.find(m => m.name === name)) {
|
||||||
name += "_" + $A.randomString(8)
|
name += "_" + $A.randomString(8)
|
||||||
}
|
}
|
||||||
item.name = name;
|
item.name = name;
|
||||||
})
|
})
|
||||||
$A.IDBSave("microAppsIds", state.microAppsIds = ids);
|
$A.IDBSave("microAppsIds", state.microAppsIds = data.map(item => item.id));
|
||||||
$A.IDBSave("microAppsMenus", state.microAppsMenus = menus);
|
$A.IDBSave("microAppsMenus", state.microAppsMenus = menus);
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
1
resources/assets/js/store/state.js
vendored
1
resources/assets/js/store/state.js
vendored
@ -268,6 +268,7 @@ export default {
|
|||||||
|
|
||||||
// 微应用数据
|
// 微应用数据
|
||||||
microApps: [],
|
microApps: [],
|
||||||
|
microAppsInstalled: [],
|
||||||
microAppsIds: [],
|
microAppsIds: [],
|
||||||
microAppsMenus: [],
|
microAppsMenus: [],
|
||||||
};
|
};
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user