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();
}