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,
+ };
+}