Update App.jsx via upload script - 2026-08-01 00:20:34

This commit is contained in:
mike 2026-08-01 00:20:58 +08:00
parent 3292dd7552
commit 1bdb84c240
1 changed files with 14 additions and 3 deletions

17
App.jsx
View File

@ -4279,7 +4279,7 @@ async function jmsResolveIp(domain) {
return answer ? answer.data : null; 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 meta = JMS_PROTO_META[line.protocol];
const status = line.monitorStatus || 'normal'; const status = line.monitorStatus || 'normal';
const dotClass = status === 'abnormal' ? 'jms-dot-abnormal' : status === 'checking' ? 'jms-dot-checking' : 'jms-dot-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
<div className="jms-card-actions"> <div className="jms-card-actions">
<button className="btn btn-sm" onClick={() => onCopy(line)}><Copy size={13} />复制链接</button> <button className="btn btn-sm" onClick={() => onCopy(line)}><Copy size={13} />复制链接</button>
<button className="btn btn-sm" onClick={() => onQr(line)}><QrCode size={13} />二维码</button> <button className="btn btn-sm" onClick={() => onQr(line)}><QrCode size={13} />二维码</button>
<button className="btn btn-sm btn-ghost" onClick={() => onEdit(line)}><Edit2 size={13} /></button> <button className="btn btn-sm btn-ghost" onClick={() => onDuplicate(line)} title="复制为新线路"><Layers size={13} /></button>
<button className="btn btn-sm btn-ghost btn-danger" onClick={() => onDelete(line.id)}><Trash2 size={13} /></button> <button className="btn btn-sm btn-ghost" onClick={() => onEdit(line)} title="编辑"><Edit2 size={13} /></button>
<button className="btn btn-sm btn-ghost btn-danger" onClick={() => onDelete(line.id)} title="删除"><Trash2 size={13} /></button>
</div> </div>
</div> </div>
); );
@ -4434,6 +4435,15 @@ function JmsPage({ lines, onSave, onDelete, onCheck, onNotify }) {
setDraft({ ...line }); setDraft({ ...line });
setModalOpen(true); 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 closeModal() { setModalOpen(false); }
function handleGroupChange(g) { function handleGroupChange(g) {
@ -4481,6 +4491,7 @@ function JmsPage({ lines, onSave, onDelete, onCheck, onNotify }) {
onCheck={onCheck} onCheck={onCheck}
onCopy={copyLink} onCopy={copyLink}
onQr={openQr} onQr={openQr}
onDuplicate={duplicateLine}
onEdit={openEditModal} onEdit={openEditModal}
onDelete={onDelete} onDelete={onDelete}
/> />