Geräte-Tab: Wipe-Aktion mit Benutzerdaten-Option, Suchfeld vergrößert

Wipe-Button mit eigenem Modal: Checkbox ob Benutzerdaten behalten werden
(keepUserData). Suchfeld auf max-width 600px vergrößert.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-08-12 14:34:38 +02:00
co-authored by Claude Sonnet 4.6
parent f94141dbe0
commit 337709b685
4 changed files with 80 additions and 5 deletions
+49 -3
View File
@@ -5395,6 +5395,25 @@ function devRenderDetail(d) {
if (autopilotBtn) autopilotBtn.style.display = isWin ? '' : 'none';
}
// Wipe-Dialog (Promise: true=keepUserData, false=löschen, null=abgebrochen)
function devWipeDialog(deviceName) {
return new Promise(resolve => {
document.getElementById('wipeDeviceName').textContent = deviceName;
document.getElementById('wipeKeepUserData').checked = false;
const backdrop = document.getElementById('wipeModalBackdrop');
backdrop.classList.remove('hidden');
const close = (result) => {
backdrop.classList.add('hidden');
resolve(result);
};
document.getElementById('wipeCancel').onclick = () => close(null);
document.getElementById('wipeModalClose').onclick = () => close(null);
document.getElementById('wipeConfirm').onclick = () => close(document.getElementById('wipeKeepUserData').checked);
backdrop.onclick = (e) => { if (e.target === backdrop) close(null); };
});
}
// Aktion ausführen
document.getElementById('devActions')?.addEventListener('click', async (e) => {
const btn = e.target.closest('.dev-action-btn');
@@ -5409,10 +5428,38 @@ document.getElementById('devActions')?.addEventListener('click', async (e) => {
collectDiagnostics: 'Diagnose sammeln',
rotateBitLockerKeys: 'BitLocker-Schlüssel rotieren',
autopilotReset: 'Autopilot Reset',
retire: 'Retire (MDM entfernen)'
retire: 'Retire (MDM entfernen)',
wipe: 'Wipe'
};
const isDangerous = action === 'retire' || action === 'autopilotReset';
const devName = DevState.selected.DeviceName || DevState.selected.Id;
// Wipe: eigener Dialog mit Benutzerdaten-Option
if (action === 'wipe') {
const keepUserData = await devWipeDialog(devName);
if (keepUserData === null) return;
btn.disabled = true;
const origText2 = btn.textContent.trim();
btn.textContent = '…';
try {
await api(`/api/devices/${encodeURIComponent(DevState.selected.Id)}/action`, {
method: 'POST',
body: JSON.stringify({ action: 'wipe', keepUserData })
});
toast(`Wipe gesendet${keepUserData ? ' (Benutzerdaten behalten)' : ''}`, 'ok');
DevState.items = DevState.items.filter(d => d.Id !== DevState.selected.Id);
DevState.selected = null;
document.getElementById('devDetail').classList.add('hidden');
devApplyFilters();
} catch (e) {
toast(`Fehler bei Wipe: ${e}`, 'error');
} finally {
btn.disabled = false;
btn.textContent = origText2;
}
return;
}
const isDangerous = action === 'retire' || action === 'autopilotReset';
const dangerMsg = {
retire: `ACHTUNG: "Retire" auf "${devName}" ausführen?\n\nDas MDM-Profil wird entfernt — Gerät wird nicht mehr verwaltet.`,
autopilotReset: `ACHTUNG: "Autopilot Reset" auf "${devName}" ausführen?\n\nDas Gerät wird auf OOBE zurückgesetzt. Enrollment-Daten bleiben erhalten, Benutzerdaten werden gelöscht.`
@@ -5431,7 +5478,6 @@ document.getElementById('devActions')?.addEventListener('click', async (e) => {
});
toast(`${labels[action]}: Aktion wurde gesendet`, 'ok');
if (action === 'retire') {
// Gerät aus Liste entfernen
DevState.items = DevState.items.filter(d => d.Id !== DevState.selected.Id);
DevState.selected = null;
document.getElementById('devDetail').classList.add('hidden');