From 1bdb84c2405d75c790c5f56a36559ebc80f481b0 Mon Sep 17 00:00:00 2001 From: mike Date: Sat, 1 Aug 2026 00:20:58 +0800 Subject: [PATCH] Update App.jsx via upload script - 2026-08-01 00:20:34 --- App.jsx | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/App.jsx b/App.jsx index 979d477..6fb823c 100644 --- a/App.jsx +++ b/App.jsx @@ -4279,7 +4279,7 @@ async function jmsResolveIp(domain) { return answer ? answer.data : null; } -function JmsLineCard({ line, ip, onRefreshIp, onCheck, onCopy, onQr, onEdit, onDelete }) { +function JmsLineCard({ line, ip, onRefreshIp, onCheck, onCopy, onQr, onDuplicate, onEdit, onDelete }) { const meta = JMS_PROTO_META[line.protocol]; const status = line.monitorStatus || 'normal'; const dotClass = status === 'abnormal' ? 'jms-dot-abnormal' : status === 'checking' ? 'jms-dot-checking' : 'jms-dot-normal'; @@ -4320,8 +4320,9 @@ function JmsLineCard({ line, ip, onRefreshIp, onCheck, onCopy, onQr, onEdit, onD
- - + + +
); @@ -4434,6 +4435,15 @@ function JmsPage({ lines, onSave, onDelete, onCheck, onNotify }) { setDraft({ ...line }); setModalOpen(true); } + function duplicateLine(line) { + setEditingId(null); // 不带id,保存时会当成全新的一条线路,不会覆盖原线路 + setGroup(line.group); + setProtocol(line.protocol); + const { id, monitorStatus, lastChecked, ...rest } = line; + setDraft({ ...rest, name: line.name ? `${line.name} 副本` : '' }); + setModalOpen(true); + onNotify('已复制配置,改一下地址/端口/名称就能存成新线路'); + } function closeModal() { setModalOpen(false); } function handleGroupChange(g) { @@ -4481,6 +4491,7 @@ function JmsPage({ lines, onSave, onDelete, onCheck, onNotify }) { onCheck={onCheck} onCopy={copyLink} onQr={openQr} + onDuplicate={duplicateLine} onEdit={openEditModal} onDelete={onDelete} />