Upload via GUI (72 Dateien)

This commit is contained in:
2026-10-24 20:15:40 +00:00
parent e7a6ba0b86
commit 64d6cf1afb
18 changed files with 325 additions and 42 deletions
+19 -2
View File
@@ -22,10 +22,27 @@ const routes = {
return { dbReady: true, settings: { enabled: true, mode: 'offline_only', name: '', greeting: '', noAnswer: '', departmentId: 0, priorityId: 0, logDays: 90, synonyms: 'Zugang, Einladung, beitreten' }, defaults: { name: 'Digitaler Assistent', greeting: 'Hallo!', noAnswer: 'Keine Antwort.' }, state: { activeNow: true, liveChatEnabled: false, kbEnabled: true, helpdeskOffline: false }, departments: [{ id: 1, name: 'Technik' }], priorities: [{ id: 1, name: 'Normal' }] };
},
'tickets.php': () => ({ items: tickets, page: 1, perPage: 30, total: 4, hasMore: false }),
'ticket.php': () => ({ ticket: { ...tickets[0], source: 'web', firstResponseDueAt: null, resolutionDueAt: '2026-10-12 12:00:00', similar: { articles: [{ title: 'Drucker einrichten', url: '/kb_article.php?slug=drucker' }], tickets: [{ number: 'T-77', subject: 'Alter Druckerfall' }] }, lockedByOtherName: null, lockedBy: window.__lockedBy || null, canUnlock: !!window.__lockedBy, customFields: [{ label: 'Titel der Geschichte', type: 'text', value: 'Der kleine Bär' }, { label: 'Nutzerbedingungen', type: 'checkbox', value: 'Ja' }], replySignatures: { default: 'own', own: { available: true, text: 'Viele Grüße\nMax persönlich', html: '<p>Viele Grüße</p><div>Max persönlich</div>', hasImage: false }, department: { available: true, name: 'Technik', text: 'Technik-Team Support', html: '<p>Technik-Team Support</p><img src="https://example.org/logo.png" width="120" onerror="alert(1)" style="width:999px"><a href="javascript:alert(1)">Link</a><scr' + 'ipt>alert(2)</scr' + 'ipt>', hasImage: true } }, threads: [
'ticket.php': () => ({ ticket: { ...tickets[0], collaborators: window.__collabs || [{ id: 1, email: 'cc@firma.de', name: 'Cc Person' }], followers: [{ id: 2, name: 'Eva Beispiel' }], csat: { rating: 4, comment: 'Schnell und freundlich', sentAt: '2026-10-12 09:00:00', answeredAt: '2026-10-12 09:30:00' }, source: 'web', firstResponseDueAt: null, resolutionDueAt: '2026-10-12 12:00:00', similar: { articles: [{ title: 'Drucker einrichten', url: '/kb_article.php?slug=drucker' }], tickets: [{ number: 'T-77', subject: 'Alter Druckerfall' }] }, lockedByOtherName: null, lockedBy: window.__lockedBy || null, canUnlock: !!window.__lockedBy, customFields: [{ label: 'Titel der Geschichte', type: 'text', value: 'Der kleine Bär' }, { label: 'Nutzerbedingungen', type: 'checkbox', value: 'Ja' }], replySignatures: { default: 'own', own: { available: true, text: 'Viele Grüße\nMax persönlich', html: '<p>Viele Grüße</p><div>Max persönlich</div>', hasImage: false }, department: { available: true, name: 'Technik', text: 'Technik-Team Support', html: '<p>Technik-Team Support</p><img src="https://example.org/logo.png" width="120" onerror="alert(1)" style="width:999px"><a href="javascript:alert(1)">Link</a><scr' + 'ipt>alert(2)</scr' + 'ipt>', hasImage: true } }, threads: [
{ id: 1, authorType: 'user', authorName: 'Kunde 1', message: 'Mein Drucker druckt nichts mehr.\nBitte helft.', isInternalNote: false, createdAt: '2026-10-12 08:00:00', attachments: [{ id: 1, name: 'foto.png', size: 20480 }], comments: [] },
{ id: 2, authorType: 'staff', authorName: 'Max Muster', message: 'Wir schauen uns das an.', isInternalNote: false, createdAt: '2026-10-12 08:30:00', attachments: [], comments: [] },
{ id: 3, authorType: 'staff', authorName: 'Max Muster', message: 'Treiber prüfen', isInternalNote: true, createdAt: '2026-10-12 08:35:00', attachments: [], comments: [] }] } }),
'ticket_collaborators.php': (req) => {
window.__collabs = window.__collabs || [{ id: 1, email: 'cc@firma.de', name: 'Cc Person' }];
const b = req.body || {};
if (b.action === 'add') window.__collabs.push({ id: 10 + window.__collabs.length, email: b.email, name: '' });
if (b.action === 'remove') window.__collabs = window.__collabs.filter((c) => c.id !== b.id);
return { collaborators: window.__collabs };
},
'ticket_templates.php': () => ({ templates: [{ id: 1, name: 'Neuer Mitarbeiter', description: '', subject: 'Neuer Mitarbeiter: ', body: 'Name:\nStartdatum:', departmentId: 1, helpTopicId: null, priorityId: 1, isPublic: true }] }),
'csat.php': () => ({ enabled: true, days: 30, stats: { sent: 10, answered: 6, avg: 4.2, rate: 60, dist: [1, 2, 3, 4, 5].map((r) => ({ rating: r, count: r === 5 ? 3 : r === 4 ? 2 : r === 1 ? 1 : 0 })), byStaff: [{ id: 1, name: 'Max Muster', count: 4, avg: 4.5 }], recent: [{ rating: 5, comment: 'Top', answeredAt: '2026-10-12 09:30:00', number: 'T-1001', subject: 'Drucker druckt nicht' }] } }),
'status.php': (req) => {
window.__status = window.__status || { enabled: false, title: 'Systemstatus', url: 'https://demo.example.de/status.php', overall: { key: 'operational', label: 'Alle Systeme laufen', color: '#157a45' },
componentStates: [{ key: 'operational', label: 'In Betrieb' }, { key: 'maintenance', label: 'Wartung' }, { key: 'degraded', label: 'Eingeschränkt' }, { key: 'outage', label: 'Ausfall' }],
incidentStates: [{ key: 'investigating', label: 'Wird untersucht' }, { key: 'resolved', label: 'Behoben' }],
components: [{ id: 1, name: 'Webseite', description: 'Kundenportal', status: 'operational', statusLabel: 'In Betrieb' }], incidents: [] };
if (req.method === 'POST') { (window.__statusPosts = window.__statusPosts || []).push(req.body); const b = req.body; if (b.action === 'set_enabled') window.__status.enabled = b.enabled; }
return { status: window.__status, canManage: true };
},
'ticket_unlock.php': () => { window.__lockedBy = null; return { ok: true, unlocked: true }; },
'departments.php': () => ({ staffOptions: [{ id: 1, name: 'Max Muster' }, { id: 2, name: 'Eva Beispiel' }], emailOptions: [], slaPlans: [], items: [{ id: 1, name: 'Technik', email: 'technik@example.de', isDefault: true, signature: '', isActive: true, slaPlanId: null, managerId: 1, managerName: 'Max Muster', autoAssignMode: 'staff', autoAssignStaffId: 2, notes: '', members: [{ id: 1, name: 'Max Muster', isPrimary: true }] }] }),
'queues.php': () => ({ items: [{ id: 1, name: 'Meine überfälligen', isShared: false, mine: true, ownerName: 'Max Muster', filters: { status: 'open,pending', assigned: 'me', sla: 'overdue' } }, { id: 2, name: 'Team-Überblick', isShared: true, mine: false, ownerName: 'Eva Beispiel', filters: { status: 'open,pending,answered' } }] }),
@@ -52,5 +69,5 @@ window.deskhub = {
onSessionExpired() {}, onNavigate() {},
};
</script>
<script src="../src/app.js"></script><script src="../src/admin-extra.js"></script>
<script src="../src/lang-en.js"></script><script src="../src/i18n.js"></script><script src="../src/app.js"></script><script src="../src/admin-extra.js"></script><script src="../src/admin-status.js"></script>
</body></html>