diff --git a/web/pnpm-lock.yaml b/web/pnpm-lock.yaml
index 5e07b3d..f583d9b 100644
--- a/web/pnpm-lock.yaml
+++ b/web/pnpm-lock.yaml
@@ -5,6 +5,9 @@ settings:
excludeLinksFromLockfile: false
dependencies:
+ '@vicons/ionicons5':
+ specifier: ^0.13.0
+ version: 0.13.0
axios:
specifier: ^1.9.0
version: 1.10.0
@@ -815,6 +818,10 @@ packages:
eslint-visitor-keys: 4.2.1
dev: true
+ /@vicons/ionicons5@0.13.0:
+ resolution: {integrity: sha512-zvZKBPjEXKN7AXNo2Na2uy+nvuv6SP4KAMQxpKL2vfHMj0fSvuw7JZcOPCjQC3e7ayssKnaoFVAhbYcW6v41qQ==}
+ dev: false
+
/@vitejs/plugin-vue@5.2.4(vite@6.3.5)(vue@3.5.17):
resolution: {integrity: sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==}
engines: {node: ^18.0.0 || >=20.0.0}
diff --git a/web/src/App.vue b/web/src/App.vue
index 2fe484d..2d7751e 100644
--- a/web/src/App.vue
+++ b/web/src/App.vue
@@ -1,6 +1,5 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
基础信息
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 取消
+
+ {{ group ? "更新" : "创建" }}
+
+
+
+
+
+
+
+
diff --git a/web/src/components/keys/GroupInfoCard.vue b/web/src/components/keys/GroupInfoCard.vue
index 83b3985..c2fc68f 100644
--- a/web/src/components/keys/GroupInfoCard.vue
+++ b/web/src/components/keys/GroupInfoCard.vue
@@ -1,6 +1,7 @@
@@ -87,11 +72,7 @@ async function createDemoGroup() {
@@ -131,16 +112,15 @@ async function createDemoGroup() {
+
diff --git a/web/src/components/keys/KeyTable.vue b/web/src/components/keys/KeyTable.vue
index 75a7628..2950b51 100644
--- a/web/src/components/keys/KeyTable.vue
+++ b/web/src/components/keys/KeyTable.vue
@@ -293,7 +293,7 @@ async function validateAllKeys() {
}
try {
- const result = await keysApi.validateKeys(props.selectedGroup.id);
+ const result = await keysApi.validateGroupKeys(props.selectedGroup.id);
window.$message.success(`验证完成: 有效${result.valid_count}个,无效${result.invalid_count}个`);
} catch (_error) {
// 错误已记录
diff --git a/web/src/types/models.ts b/web/src/types/models.ts
index 73e2036..d2e9956 100644
--- a/web/src/types/models.ts
+++ b/web/src/types/models.ts
@@ -20,17 +20,26 @@ export interface UpstreamInfo {
}
export interface Group {
- id: number;
+ id?: number;
name: string;
display_name: string;
description: string;
sort: number;
+ test_model: string;
channel_type: "openai" | "gemini";
upstreams: UpstreamInfo[];
config: Record;
api_keys?: APIKey[];
- created_at: string;
- updated_at: string;
+ param_overrides: any;
+ created_at?: string;
+ updated_at?: string;
+}
+
+export interface GroupConfigOption {
+ key: string;
+ name: string;
+ description: string;
+ default_value: number;
}
export interface GroupStats {
diff --git a/web/src/views/Keys.vue b/web/src/views/Keys.vue
index 227fbf9..1284782 100644
--- a/web/src/views/Keys.vue
+++ b/web/src/views/Keys.vue
@@ -22,9 +22,6 @@ async function loadGroups() {
if (groups.value.length > 0 && !selectedGroup.value) {
selectedGroup.value = groups.value[0];
}
- } catch (_error) {
- // 错误已记录
- window.$message.error("加载分组失败");
} finally {
loading.value = false;
}