diff --git a/src/modules/system/plugins/components/PluginListItem.vue b/src/modules/system/plugins/components/PluginListItem.vue index 8ce89ed72..fad3488c4 100644 --- a/src/modules/system/plugins/components/PluginListItem.vue +++ b/src/modules/system/plugins/components/PluginListItem.vue @@ -107,6 +107,9 @@ const { isStarted, changeStatus, uninstall } = usePluginLifeCycle(plugin); 卸载 + + 卸载并删除配置 + diff --git a/src/modules/system/plugins/composables/use-plugin.ts b/src/modules/system/plugins/composables/use-plugin.ts index 7cd08c76a..57bd6a670 100644 --- a/src/modules/system/plugins/composables/use-plugin.ts +++ b/src/modules/system/plugins/composables/use-plugin.ts @@ -8,7 +8,7 @@ import { useDialog } from "@halo-dev/components"; interface usePluginLifeCycleReturn { isStarted: ComputedRef; changeStatus: () => void; - uninstall: () => void; + uninstall: (deleteExtensions?: boolean) => void; } export function usePluginLifeCycle( @@ -45,13 +45,17 @@ export function usePluginLifeCycle( }); }; - const uninstall = () => { + const uninstall = (deleteExtensions?: boolean) => { if (!plugin?.value) return; const { enabled } = plugin.value.spec; dialog.warning({ - title: `确定要卸载该插件吗?`, + title: `${ + deleteExtensions + ? "是否确认卸载该插件以及对应的配置?" + : "是否确认卸载该插件?" + }`, description: `${ enabled ? "当前插件还在启用状态,将在停止运行后卸载。" : "" }`, @@ -73,8 +77,27 @@ export function usePluginLifeCycle( await apiClient.extension.plugin.deletepluginHaloRunV1alpha1Plugin({ name: plugin.value.metadata.name, }); + + // delete plugin setting and configMap + if (!deleteExtensions) { + return; + } + + const { settingName, configMapName } = plugin.value.spec; + + if (settingName) { + await apiClient.extension.setting.deletev1alpha1Setting({ + name: settingName, + }); + } + + if (configMapName) { + await apiClient.extension.configMap.deletev1alpha1ConfigMap({ + name: configMapName, + }); + } } catch (e) { - console.error(e); + console.error("Failed to uninstall plugin", e); } finally { window.location.reload(); }