diff --git a/admin.php b/admin.php index a3b85a0..7b728b8 100644 --- a/admin.php +++ b/admin.php @@ -2439,20 +2439,35 @@ async function adminTransferLand(name, currentOwner) { } if (!await glassConfirm('确定将领地 [' + name + '] 改主为 [' + trimmed + '] ?\n(将写入待验证队列,等Java端确认后生效)')) return; try { + const btn = event.target; + btn.disabled = true; + btn.textContent = '验证中...'; const res = await fetch('api/land_api.php?action=update_land_owner', { method: 'POST', headers: {'Content-Type': 'application/x-www-form-urlencoded'}, body: 'name=' + encodeURIComponent(name) + '&owner=' + encodeURIComponent(trimmed) + '&admin_token=' + (admToken||'') }); const d = await res.json(); - if (d.success) { + if (d.success && d.pending) { glassAlert(d.message || '已提交改主请求,等待Java端验证'); + btn.textContent = '改主'; + btn.disabled = false; + // 不立即刷新列表,改为5秒后轮询检查更新 + setTimeout(() => loadLands(document.getElementById('C')), 5000); + } else if (d.success) { + glassAlert(d.message || '改主成功'); + btn.textContent = '改主'; + btn.disabled = false; loadLands(document.getElementById('C')); } else { glassAlert('失败: ' + (d.error || '')); + btn.textContent = '改主'; + btn.disabled = false; } } catch(e) { glassAlert('请求失败: ' + e.message); + const btn = event.target; + if (btn) { btn.textContent = '改主'; btn.disabled = false; } } } diff --git a/api/land_api.php b/api/land_api.php index d49ddb8..d35a408 100644 --- a/api/land_api.php +++ b/api/land_api.php @@ -2203,10 +2203,15 @@ function handleOwnerChangeCallback($db, $post) { debugLog("handleOwnerChangeCallback: 改主 {$targetName} {$oldOwner}→{$newOwner} Java验证通过,已更新PHP副本"); echo json_encode(['success' => true, 'message' => '改主验证通过,已更新']); } else { - // ★ Java验证失败 + // ★ Java验证失败:更新PHP副本为原始所有者(回退)+ 标记失败 + $stmtRb = $db->prepare("UPDATE web_area_lands SET owner = :old_owner WHERE name = :name"); + $stmtRb->bindValue(':old_owner', $oldOwner, SQLITE3_TEXT); + $stmtRb->bindValue(':name', $targetName, SQLITE3_TEXT); + $stmtRb->execute(); + $db->query("UPDATE web_admin_changes SET status = 'failed', acknowledged = 1, acked_at = " . time() . " WHERE id = " . $changeId); - debugLog("handleOwnerChangeCallback: 改主 {$targetName} {$oldOwner}→{$newOwner} Java验证失败: {$reason}"); - echo json_encode(['success' => true, 'message' => "改主验证失败: {$reason}"]); + debugLog("handleOwnerChangeCallback: 改主 {$targetName} {$oldOwner}→{$newOwner} Java验证失败: {$reason},已回退为{$oldOwner}"); + echo json_encode(['success' => true, 'message' => "改主验证失败: {$reason},已回退"]); } }