From cad61239eba0208868a2ff1111453aaff09c388a Mon Sep 17 00:00:00 2001 From: hptangxi Date: Sun, 6 Jul 2025 15:49:33 +0800 Subject: [PATCH] delete group --- web/src/components/keys/GroupFormModal.vue | 8 +- web/src/components/keys/GroupInfoCard.vue | 97 +++++++++++++++------- web/src/types/models.ts | 1 + web/src/views/Keys.vue | 16 +++- 4 files changed, 82 insertions(+), 40 deletions(-) diff --git a/web/src/components/keys/GroupFormModal.vue b/web/src/components/keys/GroupFormModal.vue index 449a363..d3613d4 100644 --- a/web/src/components/keys/GroupFormModal.vue +++ b/web/src/components/keys/GroupFormModal.vue @@ -245,11 +245,9 @@ async function handleSubmit() { if (props.group?.id) { // 编辑模式 res = await keysApi.updateGroup(props.group.id, submitData); - message.success("分组更新成功"); } else { // 新建模式 res = await keysApi.createGroup(submitData); - message.success("分组创建成功"); } emit("success", res); @@ -295,11 +293,7 @@ async function handleSubmit() {

基础信息

- + diff --git a/web/src/components/keys/GroupInfoCard.vue b/web/src/components/keys/GroupInfoCard.vue index 6c33624..1e399de 100644 --- a/web/src/components/keys/GroupInfoCard.vue +++ b/web/src/components/keys/GroupInfoCard.vue @@ -7,12 +7,13 @@ import { NCard, NCollapse, NCollapseItem, - NFlex, NForm, NFormItem, + NGrid, + NGridItem, NSpin, NTag, - useMessage, + useDialog, } from "naive-ui"; import { onMounted, ref, watch } from "vue"; import GroupFormModal from "./GroupFormModal.vue"; @@ -23,6 +24,7 @@ interface Props { interface Emits { (e: "refresh", value: Group): void; + (e: "delete", value: Group): void; } const props = defineProps(); @@ -31,7 +33,7 @@ const emit = defineEmits(); const stats = ref(null); const loading = ref(false); -const message = useMessage(); +const dialog = useDialog(); const showEditModal = ref(false); onMounted(() => { @@ -53,7 +55,9 @@ async function loadStats() { try { loading.value = true; - stats.value = await keysApi.getGroupStats(props.group.id); + if (props.group?.id) { + stats.value = await keysApi.getGroupStats(props.group.id); + } } finally { loading.value = false; } @@ -71,7 +75,26 @@ function handleGroupEdited(newGroup: Group) { } function handleDelete() { - message.info("删除分组功能开发中..."); + if (!props.group) { + return; + } + + dialog.warning({ + title: "删除分组", + content: `确定要删除分组 "${getGroupDisplayName(props.group)}" 吗?此操作不可恢复。`, + positiveText: "确定", + negativeText: "取消", + onPositiveClick: async () => { + try { + if (props.group?.id) { + await keysApi.deleteGroup(props.group.id); + emit("delete", props.group); + } + } catch (error) { + console.error("删除分组失败:", error); + } + }, + }); } function formatNumber(num: number): string { @@ -108,12 +131,8 @@ function copyUrl(url: string) {

{{ group ? getGroupDisplayName(group) : "请选择分组" }} - - https://gpt-load.com/{{ group?.name }} + + {{ group.endpoint }}

@@ -134,6 +153,7 @@ function copyUrl(url: string) { @click="handleDelete" title="删除分组" type="error" + :disabled="!group" >