Liitteiden näyttö Zammad-viesteissä + download proxy
- dbLoadTickets: attachments & zammad_article_id mukaan viestidataan - ticket_detail on-demand: liitteiden metadata talteen (sama kuin sync) - Uusi zammad_attachment proxy-endpoint liitteiden lataukseen - JS: liitteet näkyvät tikettiviesteissä (ikoni, nimi, koko, latauslinkki) - CSS: .msg-attachments ja .msg-attachment-link tyylit Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
16
script.js
16
script.js
@@ -1816,6 +1816,21 @@ async function showTicketDetail(id, companyId = '') {
|
||||
const isNote = m.type === 'note';
|
||||
const typeClass = (isOut || isAutoReply) ? 'ticket-msg-out' : (isNote ? 'ticket-msg-note' : 'ticket-msg-in');
|
||||
const typeIcon = isAutoReply ? '⚡ Automaattinen vastaus' : (isOut ? '→ Lähetetty' : (isNote ? '📝 Muistiinpano' : '← Saapunut'));
|
||||
// Liitteet
|
||||
let attachmentsHtml = '';
|
||||
if (m.attachments && m.attachments.length > 0) {
|
||||
const attItems = m.attachments.map(att => {
|
||||
const sizeStr = att.size > 1048576 ? (att.size / 1048576).toFixed(1) + ' MB' : att.size > 1024 ? (att.size / 1024).toFixed(0) + ' KB' : att.size + ' B';
|
||||
const icon = att.type && att.type.startsWith('image/') ? '🖼️' : att.type && att.type.includes('pdf') ? '📄' : '📎';
|
||||
// Zammad-liite: lataa proxy-endpointin kautta
|
||||
if (att.id && m.zammad_article_id) {
|
||||
const dlUrl = `api.php?action=zammad_attachment&ticket_id=${encodeURIComponent(ticket.id)}&article_id=${m.zammad_article_id}&attachment_id=${att.id}&filename=${encodeURIComponent(att.filename)}`;
|
||||
return `<a href="${dlUrl}" target="_blank" class="msg-attachment-link">${icon} ${esc(att.filename)} <span class="msg-att-size">(${sizeStr})</span></a>`;
|
||||
}
|
||||
return `<span class="msg-attachment-link">${icon} ${esc(att.filename)} <span class="msg-att-size">(${sizeStr})</span></span>`;
|
||||
}).join('');
|
||||
attachmentsHtml = `<div class="msg-attachments">${attItems}</div>`;
|
||||
}
|
||||
return `<div class="ticket-message ${typeClass}">
|
||||
<div class="ticket-msg-header">
|
||||
<span class="ticket-msg-type">${typeIcon}</span>
|
||||
@@ -1823,6 +1838,7 @@ async function showTicketDetail(id, companyId = '') {
|
||||
<span class="ticket-msg-time">${esc(m.timestamp)}</span>
|
||||
</div>
|
||||
<div class="ticket-msg-body">${m.type === 'email_in' || m.type === 'incoming' || m.type === 'outgoing' ? sanitizeHtml(m.body) : esc(m.body).replace(/\n/g, '<br>')}</div>
|
||||
${attachmentsHtml}
|
||||
</div>`;
|
||||
}).join('');
|
||||
|
||||
|
||||
Reference in New Issue
Block a user