release 1.1
This commit is contained in:
@@ -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('');
|
||||
|
||||
|
||||
Reference in New Issue
Block a user