feat: 增强维护模式和审计页面功能,优化构建流程
All checks were successful
docker-images / resolve-build-targets (push) Successful in 4s
ui-regression / playwright-regression (push) Successful in 5m55s
docker-images / build-and-push (admin) (push) Successful in 54s
docker-images / build-and-push (backend) (push) Successful in 4s
docker-images / build-and-push (frontend) (push) Successful in 1m8s
docker-images / submit-indexnow (push) Successful in 15s

This commit is contained in:
2026-04-03 01:33:24 +08:00
parent 9665c933b5
commit 27d0827f3e
10 changed files with 208 additions and 33 deletions

View File

@@ -62,7 +62,12 @@ const errorMessage =
)}
</div>
<form method="post" action="/api/maintenance/unlock" class="space-y-4">
<form
method="post"
action="/api/maintenance/unlock"
class="space-y-4"
data-maintenance-unlock-form
>
<input type="hidden" name="returnTo" value={returnTo} />
<label class="block">
@@ -95,5 +100,52 @@ const errorMessage =
</div>
</section>
</main>
<script>
const maintenanceForm = document.querySelector('[data-maintenance-unlock-form]');
if (maintenanceForm instanceof HTMLFormElement) {
maintenanceForm.addEventListener('submit', async (event) => {
event.preventDefault();
const submitButton = maintenanceForm.querySelector('button[type="submit"]');
if (submitButton instanceof HTMLButtonElement) {
submitButton.disabled = true;
}
try {
const formData = new FormData(maintenanceForm);
const response = await fetch(maintenanceForm.action, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
credentials: 'same-origin',
body: JSON.stringify({
code: String(formData.get('code') || ''),
returnTo: String(formData.get('returnTo') || '/'),
}),
});
window.location.assign(response.url);
} catch (error) {
console.error('Failed to submit maintenance unlock form:', error);
const currentUrl = new URL(window.location.href);
const nextUrl = new URL('/maintenance', currentUrl.origin);
const returnToValue = new FormData(maintenanceForm).get('returnTo');
nextUrl.searchParams.set(
'returnTo',
String(returnToValue || currentUrl.searchParams.get('returnTo') || '/'),
);
nextUrl.searchParams.set('error', 'unavailable');
window.location.assign(nextUrl.toString());
} finally {
if (submitButton instanceof HTMLButtonElement) {
submitButton.disabled = false;
}
}
});
}
</script>
</body>
</html>