release 1.1

This commit is contained in:
2026-02-22 09:40:08 +03:00
parent ea28427c3d
commit e269425fe0
10 changed files with 1173 additions and 410 deletions
+65 -42
View File
@@ -68,9 +68,9 @@
function getStatusIcon(category) {
switch (category) {
case 'completed': return '';
case 'processing': return '';
case 'error': return '';
case 'completed': return '';
case 'processing': return '';
case 'error': return '';
default: return '?';
}
}
@@ -312,6 +312,7 @@
}
}
// Рендер таблицы
// Рендер таблицы
function renderTable(data) {
if (!data || data.length === 0) {
@@ -323,56 +324,78 @@
emptyState.classList.add('hidden');
const rows = data.map(item => {
const lastStatus = item.statuses?.reduce((max, s) => s.id > max.id ? s : max, item.statuses[0]);
const statusClass = getStatusClass(lastStatus?.category);
const statusIcon = getStatusIcon(lastStatus?.category);
// Берем только общие статусы (где idPatientMis === null)
const commonStatuses = item.statuses?.filter(s => s.idPatientMis === null) || [];
// Берем последний общий статус
const lastStatus = commonStatuses.length > 0
? commonStatuses.reduce((max, s) => s.id > max.id ? s : max, commonStatuses[0])
: null;
// Если нет общих статусов, используем первый статус из списка как fallback
const displayStatus = lastStatus || (item.statuses && item.statuses[0]) || null;
const statusClass = getStatusClass(displayStatus?.category);
const statusIcon = getStatusIcon(displayStatus?.category);
// Маппинг типов доставки на отображаемые названия
const deliveryTypeLabels = {
'sms': 'СМС',
'max': 'МАХ',
'mila': 'Mila',
'goskey': 'Goskey'
};
const documentsHtml = item.documents?.map(doc => {
const isClickable = lastStatus?.category !== 'error';
// Документы можно просматривать только если статус не error
const isClickable = displayStatus?.category !== 'error' && doc.storagePath;
const baseClass = isClickable ? 'doc-item clickable-doc' : 'doc-item';
return `
<div class="${baseClass}"
${isClickable ? `data-path="${doc.storagePath}" data-title="${doc.title}"` : ''}
style="${isClickable ? 'cursor: pointer;' : ''} display: flex; align-items: center; justify-content: space-between;">
<span style="flex: 1; text-align: left; word-break: break-word;">№${doc.number} ${doc.title?.replace(/\s+/g, ' ')}</span>
${isClickable ? '<span style="margin-left: 4px;">📄</span>' : ''}
</div>
`;
<div class="${baseClass}"
${isClickable ? `data-path="${doc.storagePath}" data-title="${doc.title}"` : ''}
style="${isClickable ? 'cursor: pointer;' : ''} display: flex; align-items: center; justify-content: space-between;">
<span style="flex: 1; text-align: left; word-break: break-word;" title="${doc.title}">№${doc.number} ${doc.title?.replace(/\s+/g, ' ')}</span>
${isClickable ? '<span style="margin-left: 4px; color: #409eff;">📄</span>' : ''}
</div>
`;
}).join('');
const hasMainDocument = item.storagePath && !item.storagePath.includes('null');
const hasMainDocument = item.storagePath.length > 0;
return `
<tr>
<td>
<div class="document-name">${item.patientName || 'Неизвестно'}</div>
<div class="document-date">${formatDate(item.created_at)}</div>
<div class="doctor-name" title="${item.userName || ''}">
<span>👤 ${item.userName || 'Неизвестно'}</span>
<tr>
<td>
<div class="document-name" title="${item.patientName || 'Неизвестно'}">${item.patientName || 'Неизвестно'}</div>
<div class="document-date">${formatDate(item.created_at)}</div>
<div class="document-date">✉️ ${deliveryTypeLabels[item.deliveryType] || item.deliveryType}</div>
<div class="doctor-name" title="${item.userName || ''}">
<span>👤 ${item.userName || 'Неизвестно'}</span>
</div>
</td>
<td>
<div class="document-docs">
${documentsHtml}
</div>
</td>
<td>
<div class="status-container">
<div class="document-status ${statusClass}"
title="${displayStatus?.description || ''}">
<span style="margin-right: 4px;">${statusIcon}</span>
${displayStatus?.name || 'Неизвестно'}
</div>
</td>
<td>
<div class="document-docs">
${documentsHtml}
</div>
</td>
<td>
<div class="status-container">
<div class="document-status ${statusClass}"
title="${lastStatus?.description || ''}">
<span style="margin-right: 4px;">${statusIcon}</span>
${lastStatus?.name || 'Неизвестно'}
</div>
<div class="status-date">${formatDate(lastStatus?.created_at || item.created_at)}</div>
${hasMainDocument ? `
<button class="doc-view-btn" data-path="${item.storagePath}" data-title="Основной документ">
📄 Просмотр
<div class="status-date">${formatDate(displayStatus?.created_at || item.created_at)}</div>
${hasMainDocument && displayStatus?.category !== 'error'
? item.storagePath.map((path, index) => `
<button class="doc-view-btn" data-path="${path}" title="Итоговый документ ${index + 1}">
📄 Файл ${index + 1}
</button>
` : ''}
</div>
</td>
</tr>
`).join('')
: ''}
</div>
</td>
</tr>
`;
}).join('');