From 12d4135d691247bfae3f59a1d586eb6b331b7a05 Mon Sep 17 00:00:00 2001 From: Ryan Wang Date: Tue, 26 Jul 2022 21:15:24 +0800 Subject: [PATCH] refactor: logic for plugin lifecircle management Signed-off-by: Ryan Wang --- src/modules/system/plugins/PluginDetail.vue | 30 +---- src/modules/system/plugins/PluginList.vue | 114 ++++++------------ .../system/plugins/composables/use-plugin.ts | 74 ++++++++++++ 3 files changed, 115 insertions(+), 103 deletions(-) create mode 100644 src/modules/system/plugins/composables/use-plugin.ts diff --git a/src/modules/system/plugins/PluginDetail.vue b/src/modules/system/plugins/PluginDetail.vue index ee86b6041..e493ad7b4 100644 --- a/src/modules/system/plugins/PluginDetail.vue +++ b/src/modules/system/plugins/PluginDetail.vue @@ -1,42 +1,20 @@ @@ -266,25 +214,37 @@ onMounted(handleFetchPlugins); >
-
- -
+
+ +
+
- - {{ plugin.spec.displayName }} - + + {{ plugin.spec.displayName }} + + {{ isStarted(plugin) ? "已启用" : "未启用" }} diff --git a/src/modules/system/plugins/composables/use-plugin.ts b/src/modules/system/plugins/composables/use-plugin.ts new file mode 100644 index 000000000..43a5d0079 --- /dev/null +++ b/src/modules/system/plugins/composables/use-plugin.ts @@ -0,0 +1,74 @@ +import type { Ref } from "vue"; +import type { Plugin } from "@halo-dev/api-client"; +import cloneDeep from "lodash.clonedeep"; +import { apiClient } from "@halo-dev/admin-shared"; +import { useDialog } from "@halo-dev/components"; + +export function usePluginLifeCycle(plugin: Ref) { + const dialog = useDialog(); + + const changeStatus = () => { + if (!plugin.value) return; + + const pluginToUpdate = cloneDeep(plugin.value); + + dialog.info({ + title: `确定要${pluginToUpdate.spec.enabled ? "停止" : "启动"}该插件吗?`, + onConfirm: async () => { + try { + pluginToUpdate.spec.enabled = !pluginToUpdate.spec.enabled; + await apiClient.extension.plugin.updatepluginHaloRunV1alpha1Plugin( + pluginToUpdate.metadata.name, + pluginToUpdate + ); + } catch (e) { + console.error(e); + } finally { + window.location.reload(); + } + }, + }); + }; + + const uninstall = () => { + if (!plugin.value) return; + + const { enabled } = plugin.value.spec; + + dialog.warning({ + title: `确定要卸载该插件吗?`, + description: `${ + enabled ? "当前插件还在启用状态,将在停止运行后卸载。" : "" + }`, + confirmType: "danger", + confirmText: `${enabled ? "停止运行并卸载" : "卸载"}`, + onConfirm: async () => { + if (!plugin.value) return; + + try { + if (enabled) { + const pluginToUpdate = cloneDeep(plugin.value); + pluginToUpdate.spec.enabled = false; + await apiClient.extension.plugin.updatepluginHaloRunV1alpha1Plugin( + pluginToUpdate.metadata.name, + pluginToUpdate + ); + } + + await apiClient.extension.plugin.deletepluginHaloRunV1alpha1Plugin( + plugin.value.metadata.name + ); + } catch (e) { + console.error(e); + } finally { + window.location.reload(); + } + }, + }); + }; + + return { + changeStatus, + uninstall, + }; +}