From 4424d8ba18b4abbc56d10537b36ad4f6a54fa01e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=80=97=E5=AD=90?= Date: Tue, 27 Jan 2026 21:45:31 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E7=BC=96=E8=BE=91=E7=BD=91=E7=AB=99?= =?UTF-8?q?=E9=83=A8=E5=88=86=E8=BE=93=E5=85=A5=E6=A1=86=E4=BC=9A=E5=A4=B1?= =?UTF-8?q?=E5=8E=BB=E7=84=A6=E7=82=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/src/views/website/EditView.vue | 41 +++++++++++++++++++++++++++--- 1 file changed, 37 insertions(+), 4 deletions(-) diff --git a/web/src/views/website/EditView.vue b/web/src/views/website/EditView.vue index bc79a80d..b07db836 100644 --- a/web/src/views/website/EditView.vue +++ b/web/src/views/website/EditView.vue @@ -194,6 +194,35 @@ const hasArg = (args: string[], arg: string) => { return args.includes(arg) } +// ========== 唯一 ID 生成 ========== +let idCounter = 0 +const generateId = () => `_${Date.now()}_${++idCounter}` + +// 确保列表项有唯一 ID +const ensureItemIds = () => { + setting.value.upstreams?.forEach((item: any) => { + if (!item._id) item._id = generateId() + }) + setting.value.proxies?.forEach((item: any) => { + if (!item._id) item._id = generateId() + }) + setting.value.redirects?.forEach((item: any) => { + if (!item._id) item._id = generateId() + }) + setting.value.custom_configs?.forEach((item: any) => { + if (!item._id) item._id = generateId() + }) +} + +// 监听 setting 变化,确保所有项都有 ID +watch( + () => setting.value, + () => { + ensureItemIds() + }, + { immediate: true, deep: false } +) + // ========== Upstreams 相关 ========== // 添加新的上游 const addUpstream = () => { @@ -202,6 +231,7 @@ const addUpstream = () => { setting.value.upstreams = [] } setting.value.upstreams.push({ + _id: generateId(), name, servers: {}, algo: '', @@ -295,6 +325,7 @@ const addProxy = () => { setting.value.proxies = [] } setting.value.proxies.push({ + _id: generateId(), location: '/', pass: 'http://127.0.0.1:8080', host: '$host', @@ -412,6 +443,7 @@ const addRedirect = () => { setting.value.redirects = [] } setting.value.redirects.push({ + _id: generateId(), type: 'url', from: '/', to: '/new', @@ -520,6 +552,7 @@ const addCustomConfig = () => { } const index = setting.value.custom_configs.length + 1 setting.value.custom_configs.push({ + _id: generateId(), name: `custom_${index}`, scope: 'site', content: '' @@ -620,7 +653,7 @@ const removeCustomConfig = (index: number) => { { { {