| Форум » Флуд » Общение » Поговорим о... |
| Поговорим о... |
Среда, 2025-10-01, 12:51
# 211
Лллро
Прикрепления:
5714055.zip
(11.1 Kb)
|
Среда, 2025-10-01, 12:54
# 212
// Данные документирования
let primaryDocInfo = null; let finalDocInfo = null; const docNodes = xmlDoc.getElementsByTagName('MR_DBA.PO_DOCUM_PODC'); for (let i = 0; i < docNodes.length; i++) { const doc = docNodes[i]; const docType = getSafeTextContent(doc, 'ID_TYPE_DOCUM_PODC'); const startDate = formatDate(getSafeTextContent(doc, 'DATE_BEG_DOCUM_PODC')); const endDate = formatDate(getSafeTextContent(doc, 'DATE_END_DOCUM_PODC')); const depth = formatNumber(getSafeTextContent(doc, 'DEPTH_FACT_PODC')); const authorId = getSafeTextContent(doc, 'AUTOR_PODC'); // ИСПРАВЛЕНО - вернул AUTOR_PODC let authorName = 'Не указано'; if (authorId && authorId !== 'Не указано' && employeeMap.has(authorId)) { authorName = employeeMap.get(authorId); } else if (authorId && authorId !== 'Не указано') { authorName = `Код: ${authorId}`; } const docInfo = { startDate, endDate, depth, author: authorName }; if (docType.includes('Первич') || docType.includes('ПЕРВИЧ') || docType === '1') { primaryDocInfo = docInfo; } else if (docType.includes('Итогов') || docType.includes('ИТОГОВ') || docType === '2') { finalDocInfo = docInfo; } } |
Среда, 2025-10-01, 12:57
# 213
// Загрузка данных о скважине
async function loadWellData(file, fileNumber) { const wellDataElement = document.getElementById('wellData'); wellDataElement.innerHTML = '<div class="loading"><p>Загрузка данных...</p></div>'; try { // Получаем файл из FileSystemFileHandle const fileObj = await file.handle.getFile(); // Увеличиваем лимит для больших архивов if (fileObj.size > 500 * 1024 * 1024) { // 500MB limit throw new Error('Файл слишком большой для обработки в браузере (более 500 МБ)'); } // ВЕРНУТЬ ОРИГИНАЛЬНЫЙ МЕТОД ЧТЕНИЯ ФАЙЛА const arrayBuffer = await fileObj.arrayBuffer(); // Распаковываем архив с оптимизацией для больших файлов const zip = await JSZip.loadAsync(arrayBuffer, { // Опции для лучшей обработки больших файлов createFolders: false, checkCRC32: false // Отключаем проверку CRC для скорости }); // Определяем тип файла по имени let targetFile = null; let fileType = ''; // Ищем файлы в архиве по приоритету for (const filename in zip.files) { if (filename.startsWith('906~')) { targetFile = zip.files[filename]; fileType = 'all'; break; } else if (filename.startsWith('911~')) { targetFile = zip.files[filename]; fileType = 'final'; } else if (filename.startsWith('909~') && !targetFile) { targetFile = zip.files[filename]; fileType = 'primary'; } } if (!targetFile) { throw new Error('В архиве не найден файл с данными (начинающийся с 906~, 909~ или 911~)'); } // Проверяем размер INU файла внутри архива if (targetFile._data.uncompressedSize > 100 * 1024 * 1024) { throw new Error('INU файл внутри архива слишком большой для обработки (более 100 МБ)'); } // Читаем XML данные с оптимизацией const xmlContent = await targetFile.async('text', { optimizeMemory: true }); // Парсинг XML данных await parseXMLData(xmlContent, fileType); // Отображение данных displayWellData(fileType, fileNumber, file.name); } catch (error) { console.error('Ошибка загрузки данных:', error); wellDataElement.innerHTML = ` <div class="error"> <p>Ошибка загрузки данных: ${error.message}</p> <p>Попробуйте выбрать другой файл или архив</p> </div> `; } } |
Среда, 2025-10-01, 13:04
# 214
// Загрузка данных о скважине
async function loadWellData(file, fileNumber) { const wellDataElement = document.getElementById('wellData'); wellDataElement.innerHTML = '<div class="loading"><p>Загрузка данных...</p></div>'; try { // Получаем файл из FileSystemFileHandle const fileObj = await file.handle.getFile(); // Проверяем размер файла if (fileObj.size > 100 * 1024 * 1024) { // 100MB limit throw new Error('Файл слишком большой для обработки в браузере (более 100 МБ)'); } // Читаем архив - ИСПОЛЬЗУЕМ СТАНДАРТНЫЙ МЕТОД const arrayBuffer = await fileObj.arrayBuffer(); // Распаковываем архив const zip = await JSZip.loadAsync(arrayBuffer); // Определяем тип файла по имени let targetFile = null; let fileType = ''; // Ищем файлы в архиве по приоритету for (const filename in zip.files) { if (filename.startsWith('906~')) { targetFile = zip.files[filename]; fileType = 'all'; break; } else if (filename.startsWith('911~')) { targetFile = zip.files[filename]; fileType = 'final'; } else if (filename.startsWith('909~') && !targetFile) { targetFile = zip.files[filename]; fileType = 'primary'; } } if (!targetFile) { throw new Error('В архиве не найден файл с данными (начинающийся с 906~, 909~ или 911~)'); } // Читаем XML данные const xmlContent = await targetFile.async('text'); // Парсинг XML данных await parseXMLData(xmlContent, fileType); // Отображение данных displayWellData(fileType, fileNumber, file.name); } catch (error) { console.error('Ошибка загрузки данных:', error); wellDataElement.innerHTML = ` <div class="error"> <p>Ошибка загрузки данных: ${error.message}</p> <p>Попробуйте выбрать другой файл или архив</p> </div> `; } } |
Среда, 2025-10-01, 13:15
# 215
// Загрузка данных о скважине
async function loadWellData(file, fileNumber) { const wellDataElement = document.getElementById('wellData'); wellDataElement.innerHTML = '<div class="loading"><p>Загрузка данных...</p></div>'; try { // Получаем файл из FileSystemFileHandle const fileObj = await file.handle.getFile(); // Увеличиваем лимит для больших архивов if (fileObj.size > 200 * 1024 * 1024) { // 200MB limit throw new Error('Файл слишком большой для обработки в браузере (более 200 МБ)'); } // Показываем прогресс для больших файлов if (fileObj.size > 10 * 1024 * 1024) { wellDataElement.innerHTML = '<div class="loading"><p>Чтение архива... (это может занять некоторое время)</p></div>'; } // Читаем архив const arrayBuffer = await fileObj.arrayBuffer(); // Показываем прогресс распаковки if (fileObj.size > 10 * 1024 * 1024) { wellDataElement.innerHTML = '<div class="loading"><p>Распаковка архива...</p></div>'; } // Распаковываем архив с оптимизацией для больших файлов const zip = await JSZip.loadAsync(arrayBuffer, { // Опции для лучшей обработки больших файлов createFolders: false, checkCRC32: false, // Отключаем проверку CRC для скорости optimizedBinaryString: true }); // Определяем тип файла по имени let targetFile = null; let fileType = ''; // Ищем файлы в архиве по приоритету for (const filename in zip.files) { if (filename.startsWith('906~')) { targetFile = zip.files[filename]; fileType = 'all'; break; } else if (filename.startsWith('911~')) { targetFile = zip.files[filename]; fileType = 'final'; } else if (filename.startsWith('909~') && !targetFile) { targetFile = zip.files[filename]; fileType = 'primary'; } } if (!targetFile) { throw new Error('В архиве не найден файл с данными (начинающийся с 906~, 909~ или 911~)'); } // Проверяем размер INU файла внутри архива if (targetFile._data.uncompressedSize > 50 * 1024 * 1024) { throw new Error('INU файл внутри архива слишком большой для обработки (более 50 МБ)'); } // Показываем прогресс чтения XML if (targetFile._data.uncompressedSize > 1 * 1024 * 1024) { wellDataElement.innerHTML = '<div class="loading"><p>Чтение XML данных...</p></div>'; } // Читаем XML данные с оптимизацией для больших файлов const xmlContent = await targetFile.async('text', { optimizeMemory: true }); // Парсинг XML данных await parseXMLData(xmlContent, fileType); // Отображение данных displayWellData(fileType, fileNumber, file.name); } catch (error) { console.error('Ошибка загрузки данных:', error); let errorMessage = error.message; // Более понятные сообщения об ошибках if (error.message.includes('malloc') || error.message.includes('memory')) { errorMessage = 'Недостаточно памяти для обработки файла. Попробуйте открыть INU файл отдельно.'; } else if (error.message.includes('timeout') || error.message.includes('time out')) { errorMessage = 'Превышено время обработки файла. Файл слишком большой для браузера.'; } wellDataElement.innerHTML = ` <div class="error"> <p>Ошибка загрузки данных: ${errorMessage}</p> <p>Рекомендации:</p> <ul style="text-align: left; margin: 10px 0;"> <li>Попробуйте открыть INU файл отдельно через "Открыть INU файл"</li> <li>Используйте файлы меньшего размера</li> <li>Закройте другие вкладки браузера для освобождения памяти</li> </ul> </div> `; } } |
Среда, 2025-10-01, 13:19
# 216
Проблема в настройках JSZip. Давайте вернем простой рабочий вариант и попробуем другую версию JSZip. Вот исправления:
1. Вернем простой рабочий код для loadWellData: ```javascript // Загрузка данных о скважине async function loadWellData(file, fileNumber) { const wellDataElement = document.getElementById('wellData'); wellDataElement.innerHTML = '<div class="loading"><p>Загрузка данных...</p></div>'; try { // Получаем файл из FileSystemFileHandle const fileObj = await file.handle.getFile(); // Проверяем размер файла if (fileObj.size > 50 * 1024 * 1024) { // 50MB limit throw new Error('Файл слишком большой для обработки в браузере'); } // Читаем архив const arrayBuffer = await fileObj.arrayBuffer(); // Распаковываем архив БЕЗ дополнительных опций const zip = await JSZip.loadAsync(arrayBuffer); // Определяем тип файла по имени let targetFile = null; let fileType = ''; // Ищем файлы в архиве по приоритету for (const filename in zip.files) { if (filename.startsWith('906~')) { targetFile = zip.files[filename]; fileType = 'all'; break; } else if (filename.startsWith('911~')) { targetFile = zip.files[filename]; fileType = 'final'; } else if (filename.startsWith('909~') && !targetFile) { targetFile = zip.files[filename]; fileType = 'primary'; } } if (!targetFile) { throw new Error('В архиве не найден файл с данными (начинающийся с 906~, 909~ или 911~)'); } // Читаем XML данные const xmlContent = await targetFile.async('text'); // Парсинг XML данных await parseXMLData(xmlContent, fileType); // Отображение данных displayWellData(fileType, fileNumber, file.name); } catch (error) { console.error('Ошибка загрузки данных:', error); wellDataElement.innerHTML = ` <div class="error"> <p>Ошибка загрузки данных: ${error.message}</p> <p>Попробуйте выбрать другой файл или открыть INU файл отдельно</p> </div> `; } } ``` 1. Попробуем другую версию JSZip. Замени ссылку в конце файла: ```html <!-- Подключаем библиотеку JSZip для работы с архивами --> <script src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.7.1/jszip.min.js"></script> ``` Или попробуй более стабильную версию: ```html <script src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.6.0/jszip.min.js"></script> ``` 1. Если не поможет, попробуй эту версию: ```html <script src="https://cdn.jsdelivr.net/npm/jszip@3.10.1/dist/jszip.min.js"></script> ``` Проблема скорее всего в том, что опции optimizedBinaryString и checkCRC32 не поддерживаются в некоторых версиях JSZip. Простой вызов JSZip.loadAsync(arrayBuffer) должен работать надежнее. Попробуй поочередно разные версии JSZip с простым кодом без дополнительных опций. |
Среда, 2025-10-01, 13:27
# 217
// Загрузка данных о скважине
async function loadWellData(file, fileNumber) { const wellDataElement = document.getElementById('wellData'); wellDataElement.innerHTML = '<div class="loading"><p>Загрузка данных...</p></div>'; try { console.log('Начало загрузки файла:', file.name); // Получаем файл из FileSystemFileHandle const fileObj = await file.handle.getFile(); console.log('Размер файла:', fileObj.size, 'байт'); // Проверяем размер файла if (fileObj.size > 50 * 1024 * 1024) { throw new Error('Файл слишком большой для обработки в браузере'); } // Читаем архив console.log('Чтение arrayBuffer...'); const arrayBuffer = await fileObj.arrayBuffer(); console.log('ArrayBuffer прочитан, размер:', arrayBuffer.byteLength); // Распаковываем архив console.log('Распаковка ZIP...'); const zip = await JSZip.loadAsync(arrayBuffer); console.log('ZIP распакован, файлов:', Object.keys(zip.files).length); // Определяем тип файла по имени let targetFile = null; let fileType = ''; // Ищем файлы в архиве по приоритету for (const filename in zip.files) { console.log('Файл в архиве:', filename); if (filename.startsWith('906~')) { targetFile = zip.files[filename]; fileType = 'all'; break; } else if (filename.startsWith('911~')) { targetFile = zip.files[filename]; fileType = 'final'; } else if (filename.startsWith('909~') && !targetFile) { targetFile = zip.files[filename]; fileType = 'primary'; } } if (!targetFile) { throw new Error('В архиве не найден файл с данными (начинающийся с 906~, 909~ или 911~)'); } console.log('Найден INU файл:', targetFile.name, 'Размер:', targetFile._data.uncompressedSize); // Читаем XML данные console.log('Чтение XML...'); const xmlContent = await targetFile.async('text'); console.log('XML прочитан, длина:', xmlContent.length); // Парсинг XML данных console.log('Парсинг XML...'); await parseXMLData(xmlContent, fileType); console.log('XML распарсен'); // Отображение данных displayWellData(fileType, fileNumber, file.name); console.log('Данные отображены'); } catch (error) { console.error('Полная ошибка загрузки:', error); wellDataElement.innerHTML = ` <div class="error"> <p>Ошибка загрузки данных: ${error.message}</p> <p>Попробуйте выбрать другой файл или открыть INU файл отдельно</p> <p style="font-size: 12px; margin-top: 10px;">Техническая информация: ${error.toString()}</p> </div> `; } } |
Среда, 2025-10-01, 13:33
# 218
// Загрузка данных о скважине
async function loadWellData(file, fileNumber) { const wellDataElement = document.getElementById('wellData'); wellDataElement.innerHTML = '<div class="loading"><p>Загрузка данных...</p></div>'; try { console.log('Начало загрузки файла:', file.name); // Получаем файл из FileSystemFileHandle const fileObj = await file.handle.getFile(); console.log('Размер файла:', fileObj.size, 'байт'); // Проверяем размер файла if (fileObj.size > 50 * 1024 * 1024) { throw new Error('Файл слишком большой для обработки в браузере'); } // Читаем архив console.log('Чтение arrayBuffer...'); const arrayBuffer = await fileObj.arrayBuffer(); console.log('ArrayBuffer прочитан, размер:', arrayBuffer.byteLength); // Распаковываем архив console.log('Распаковка ZIP...'); const zip = await JSZip.loadAsync(arrayBuffer); console.log('ZIP распакован, файлов:', Object.keys(zip.files).length); // Определяем тип файла по имени let targetFile = null; let fileType = ''; // Ищем файлы в архиве по приоритету, ИСКЛЮЧАЯ ПАПКИ for (const filename in zip.files) { const zipEntry = zip.files[filename]; // Пропускаем папки (у них есть слеш в конце или они директории) if (zipEntry.dir || filename.endsWith('/')) { console.log('Пропущена папка:', filename); continue; } console.log('Файл в архиве:', filename, 'Размер:', zipEntry._data.uncompressedSize); if (filename.startsWith('906~')) { targetFile = zipEntry; fileType = 'all'; break; } else if (filename.startsWith('911~')) { targetFile = zipEntry; fileType = 'final'; } else if (filename.startsWith('909~') && !targetFile) { targetFile = zipEntry; fileType = 'primary'; } } if (!targetFile) { throw new Error('В архиве не найден файл с данными (начинающийся с 906~, 909~ или 911~)'); } console.log('Найден INU файл:', targetFile.name, 'Размер:', targetFile._data.uncompressedSize); // Проверяем размер INU файла if (targetFile._data.uncompressedSize > 10 * 1024 * 1024) { throw new Error('INU файл слишком большой для обработки в браузере'); } // Читаем XML данные console.log('Чтение XML...'); const xmlContent = await targetFile.async('text'); console.log('XML прочитан, длина:', xmlContent.length); // Парсинг XML данных console.log('Парсинг XML...'); await parseXMLData(xmlContent, fileType); console.log('XML распарсен'); // Отображение данных displayWellData(fileType, fileNumber, file.name); console.log('Данные отображены'); } catch (error) { console.error('Полная ошибка загрузки:', error); wellDataElement.innerHTML = ` <div class="error"> <p>Ошибка загрузки данных: ${error.message}</p> <p>Попробуйте выбрать другой файл или открыть INU файл отдельно</p> <p style="font-size: 12px; margin-top: 10px;">Техническая информация: ${error.toString()}</p> </div> `; } } |
Среда, 2025-10-01, 13:40
# 219
Отлично! Вот исправления для выравнивания и читаемости:
1. Исправление стиля для компактного списка информации: ```css /* Компактный список информации */ .doc-info-list { background-color: #f8f9fa; padding: 15px; border-radius: 5px; margin-bottom: 20px; border-left: 4px solid #3498db; } .doc-info-item { display: flex; margin-bottom: 8px; align-items: center; min-height: 24px; } .doc-info-label { font-weight: 600; color: #2c3e50; min-width: 220px; /* Увеличим ширину для выравнивания */ font-size: 0.9rem; flex-shrink: 0; } .doc-info-value { color: #333; font-size: 0.9rem; flex-grow: 1; } ``` 2. Функция для форматирования длинных текстов (добавить в скрипт): ```javascript // Функция для форматирования длинных текстов (перенос по словам) function formatLongText(text, maxLength = 50) { if (!text || text === 'Не указано') return text; if (text.length > maxLength) { // Добавляем переносы для длинных текстов return text.match(new RegExp(`.{1,${maxLength}}`, 'g')).join(' '); } return text; } ``` 3. Исправление отображения основной информации (заменить соответствующий раздел в displayWellData): ```javascript // Основная информация о скважине html += ` <div class="section"> <h2>Основная информация</h2> <div class="info-group"> <div class="info-group-title">Общие сведения</div> <div class="info-group-grid"> <div class="info-card"> <h3>Объект работ</h3> <p>${formatLongText(xmlData.object)}</p> </div> <div class="info-card"> <h3>Геологический участок</h3> <p>${formatLongText(xmlData.area)}</p> </div> <div class="info-card"> <h3>Тип скважины</h3> <p>${xmlData.wellType}</p> </div> </div> </div> <div class="info-group"> <div class="info-group-title">Бурение</div> <div class="info-group-grid"> <div class="info-card"> <h3>Начало бурения</h3> <p>${xmlData.drillingStartDate}</p> </div> <div class="info-card"> <h3>Окончание бурения</h3> <p>${xmlData.drillingEndDate}</p> </div> <div class="info-card"> <h3>Бригада бурения</h3> <p>${formatLongText(xmlData.drillingBrigade)}</p> </div> </div> </div> </div> `; ``` 4. Исправление отображения информации о документировании (заменить соответствующие блоки): Для первичного документирования: ```javascript // Информация о первичном документировании в компактном виде if (xmlData.primaryDocInfo) { html += ` <div class="doc-info-list"> <div class="doc-info-item"> <span class="doc-info-label">Начало документирования:</span> <span class="doc-info-value">${xmlData.primaryDocInfo.startDate}</span> </div> <div class="doc-info-item"> <span class="doc-info-label">Окончание документирования:</span> <span class="doc-info-value">${xmlData.primaryDocInfo.endDate}</span> </div> <div class="doc-info-item"> <span class="doc-info-label">Фактическая глубина:</span> <span class="doc-info-value">${xmlData.primaryDocInfo.depth} м</span> </div> <div class="doc-info-item"> <span class="doc-info-label">Документатор:</span> <span class="doc-info-value">${formatLongText(xmlData.primaryDocInfo.author)}</span> </div> </div> `; } ``` Для итогового документирования: ```javascript // Информация об итоговом документировании в компактном виде if (xmlData.finalDocInfo) { html += ` <div class="doc-info-list"> <div class="doc-info-item"> <span class="doc-info-label">Начало документирования:</span> <span class="doc-info-value">${xmlData.finalDocInfo.startDate}</span> </div> <div class="doc-info-item"> <span class="doc-info-label">Окончание документирования:</span> <span class="doc-info-value">${xmlData.finalDocInfo.endDate}</span> </div> <div class="doc-info-item"> <span class="doc-info-label">Фактическая глубина:</span> <span class="doc-info-value">${xmlData.finalDocInfo.depth} м</span> </div> <div class="doc-info-item"> <span class="doc-info-label">Документатор:</span> <span class="doc-info-value">${formatLongText(xmlData.finalDocInfo.author)}</span> </div> </div> `; } ``` Что изменилось: 1. Выравнивание - добавлены flex-shrink: 0 и min-width для меток 2. Читаемость - переименованы заголовки: "Объект" → "Объект работ", "Участок" → "Геологический участок" 3. Форматирование текста - длинные тексты теперь переносятся по словам 4. Единообразие - все элементы списка теперь имеют одинаковую высоту и выравнивание Теперь информация должна отображаться аккуратно и читаемо! |
Среда, 2025-10-01, 13:58
# 220
Отлично! Вот исправления:
1. Добавляем "Номер выработки:" перед названием скважины: В функции displayWellData найди строку с обновлением заголовка и замени её: ```javascript // Обновление заголовка document.getElementById('wellName').innerHTML = `Номер выработки: ${xmlData.wellName} <span class="file-type-badge">${ fileType === 'all' ? 'Все типы документаций' : fileType === 'primary' ? 'Первичная документация' : fileType === 'final' ? 'Итоговая документация' : 'Неизвестный тип' }</span>`; ``` 2. Добавляем разные цвета для типов документации в CSS: Добавь эти стили в CSS секцию (можно после стилей для .file-type-badge): ```css .file-type-badge.all { background-color: #2c3e50; /* Черный для всех типов */ } .file-type-badge.primary { background-color: #3498db; /* Голубой для первичной */ } .file-type-badge.final { background-color: #e74c3c; /* Красный для итоговой */ } .file-type-badge.unknown { background-color: #7f8c8d; /* Серый для неизвестного */ } ``` 3. Обновляем отображение бейджа с классами в функции displayWellData: Замени полностью блок обновления заголовка на этот: ```javascript // Обновление заголовка const badgeClass = fileType === 'all' ? 'all' : fileType === 'primary' ? 'primary' : fileType === 'final' ? 'final' : 'unknown'; document.getElementById('wellName').innerHTML = `Номер выработки: ${xmlData.wellName} <span class="file-type-badge ${badgeClass}">${ fileType === 'all' ? 'Все типы документаций' : fileType === 'primary' ? 'Первичная документация' : fileType === 'final' ? 'Итоговая документация' : 'Неизвестный тип' }</span>`; ``` Итоговые изменения: 1. Добавлен текст "Номер выработки:" перед названием скважины 2. Разные цвета для типов: · 🔵 Голубой - Первичная документация · 🔴 Красный - Итоговая документация · ⚫ Черный - Все типы документаций · ⚪ Серый - Неизвестный тип Теперь сразу видно какой тип документации загружен по цвету бейджа! |
Среда, 2025-10-01, 14:06
# 221
Отлично! Вот исправления для более гармоничного отображения:
1. Обновляем стили для заголовка и описания: Добавь эти стили в CSS: ```css /* Стили для заголовка скважины */ .well-title { color: #2c3e50; margin-bottom: 5px; font-size: 1.8rem; font-weight: 600; } .well-number { font-size: 1.8rem; font-weight: 600; color: #2c3e50; } .well-line-info { color: #7f8c8d; font-size: 1rem; margin-bottom: 10px; font-weight: normal; } .well-description-label { color: #7f8c8d; font-size: 0.9rem; font-weight: 600; margin-top: 10px; } .well-description-text { color: #7f8c8d; font-size: 0.9rem; margin-top: 5px; line-height: 1.4; } /* Позиционирование бейджа типа документации */ .file-type-badge-container { position: relative; display: inline-block; } .file-type-badge { position: absolute; top: -8px; right: -10px; padding: 3px 8px; color: white; border-radius: 12px; font-size: 0.7rem; font-weight: 500; transform: translateY(-50%); } .file-type-badge.all { background-color: #2c3e50; } .file-type-badge.primary { background-color: #3498db; } .file-type-badge.final { background-color: #e74c3c; } .file-type-badge.unknown { background-color: #7f8c8d; } ``` 2. Обновляем HTML структуру в функции displayWellData: Замени блок обновления заголовка на этот: ```javascript // Обновление заголовка const badgeClass = fileType === 'all' ? 'all' : fileType === 'primary' ? 'primary' : fileType === 'final' ? 'final' : 'unknown'; const badgeText = fileType === 'all' ? 'Все типы' : fileType === 'primary' ? 'Первичная' : fileType === 'final' ? 'Итоговая' : 'Неизвестно'; document.getElementById('wellName').innerHTML = ` <div class="well-title"> <div class="file-type-badge-container"> Номер выработки: <span class="well-number">${xmlData.wellName}</span> <span class="file-type-badge ${badgeClass}">${badgeText}</span> </div> </div> `; document.getElementById('wellLine').innerHTML = ` <div class="well-line-info">Линия №: ${xmlData.lineNumber}</div> `; // Обновляем описание const wellDescriptionElement = document.getElementById('wellDescription'); const wellDescriptionTextElement = document.getElementById('wellDescriptionText'); if (xmlData.wellDescription && xmlData.wellDescription !== 'Не указано') { wellDescriptionElement.innerHTML = '<div class="well-description-label">Описание:</div>'; wellDescriptionTextElement.innerHTML = `<div class="well-description-text">${xmlData.wellDescription}</div>`; wellDescriptionTextElement.style.display = 'block'; } else { wellDescriptionElement.innerHTML = '<div class="well-description-label">Описание отсутствует</div>'; wellDescriptionTextElement.style.display = 'none'; } ``` Что изменилось: 1. Бейдж типа документации теперь расположен как надстрочный элемент справа от номера выработки 2. "Номер выработки:" отображается нормальным шрифтом, а сам номер - жирным 3. Номер линии стилизован так же гармонично 4. Добавлена подпись "Описание:" перед текстом описания 5. Текст бейджа укорочен для лучшего отображения в маленьком размере Теперь интерфейс выглядит более профессионально и гармонично! |
Среда, 2025-10-01, 14:21
# 222
Понял! Вот исправления:
1. Обновляем стили для правильного позиционирования бейджа: ```css /* Стили для заголовка скважины */ .well-title { color: #2c3e50; margin-bottom: 5px; display: flex; align-items: flex-start; gap: 10px; } .well-number-container { position: relative; display: inline-block; } .well-number-label { color: #7f8c8d; font-size: 1rem; font-weight: normal; } .well-number { font-size: 1.8rem; font-weight: 600; color: #2c3e50; display: block; margin-top: 2px; } /* Бейдж типа документации в виде верхнего индекса */ .file-type-badge { position: absolute; top: -5px; right: -25px; padding: 2px 6px; color: white; border-radius: 8px; font-size: 0.6rem; font-weight: 500; line-height: 1; transform: translateY(-50%); min-width: 50px; text-align: center; } .file-type-badge.all { background-color: #2c3e50; } .file-type-badge.primary { background-color: #3498db; } .file-type-badge.final { background-color: #e74c3c; } .file-type-badge.unknown { background-color: #7f8c8d; } .well-line-info { color: #7f8c8d; font-size: 1rem; margin-bottom: 10px; font-weight: normal; } .well-description-label { color: #7f8c8d; font-size: 0.9rem; font-weight: 600; margin-top: 10px; } .well-description-text { color: #7f8c8d; font-size: 0.9rem; margin-top: 5px; line-height: 1.4; } ``` 2. Обновляем HTML структуру в функции displayWellData: ```javascript // Обновление заголовка const badgeClass = fileType === 'all' ? 'all' : fileType === 'primary' ? 'primary' : fileType === 'final' ? 'final' : 'unknown'; const badgeText = fileType === 'all' ? 'Все типы' : fileType === 'primary' ? 'Первичная' : fileType === 'final' ? 'Итоговая' : 'Неизвестно'; document.getElementById('wellName').innerHTML = ` <div class="well-title"> <div class="well-number-container"> <div class="well-number-label">Номер выработки</div> <span class="well-number">${xmlData.wellName}</span> <span class="file-type-badge ${badgeClass}">${badgeText}</span> </div> </div> `; document.getElementById('wellLine').innerHTML = ` <div class="well-line-info">Линия №: ${xmlData.lineNumber}</div> `; // Обновляем описание const wellDescriptionElement = document.getElementById('wellDescription'); const wellDescriptionTextElement = document.getElementById('wellDescriptionText'); if (xmlData.wellDescription && xmlData.wellDescription !== 'Не указано') { wellDescriptionElement.innerHTML = '<div class="well-description-label">Описание:</div>'; wellDescriptionTextElement.innerHTML = `<div class="well-description-text">${xmlData.wellDescription}</div>`; wellDescriptionTextElement.style.display = 'block'; } else { wellDescriptionElement.innerHTML = '<div class="well-description-label">Описание отсутствует</div>'; wellDescriptionTextElement.style.display = 'none'; } ``` Что изменилось: 1. Бейдж типа документации теперь расположен как верхний индекс справа сверху от номера выработки 2. "Номер выработки" стал серым текстом обычного размера (как у номера линии) 3. Сам номер выработки остался крупным черным жирным шрифтом 4. Номер линии остался серым обычного размера 5. Бейдж смещен правее чтобы не перекрывать номер Теперь бейдж выглядит как математический верхний индекс, а заголовки гармонично сочетаются! |
Среда, 2025-10-01, 14:28
# 223
Понял! Вот исправления для строчного расположения и увеличенного бейджа:
1. Обновляем стили: ```css /* Стили для заголовка скважины */ .well-title { color: #2c3e50; margin-bottom: 5px; display: flex; align-items: baseline; gap: 15px; flex-wrap: wrap; } .well-number-container { display: flex; align-items: baseline; gap: 8px; position: relative; } .well-number-label { color: #7f8c8d; font-size: 1rem; font-weight: normal; } .well-number { font-size: 1.8rem; font-weight: 600; color: #2c3e50; } /* Бейдж типа документации */ .file-type-badge { padding: 4px 10px; color: white; border-radius: 10px; font-size: 0.8rem; font-weight: 500; line-height: 1; margin-left: 10px; } .file-type-badge.all { background-color: #2c3e50; } .file-type-badge.primary { background-color: #3498db; } .file-type-badge.final { background-color: #e74c3c; } .file-type-badge.unknown { background-color: #7f8c8d; } .well-line-container { display: flex; align-items: baseline; gap: 8px; } .well-line-label { color: #7f8c8d; font-size: 1rem; font-weight: normal; } .well-line-number { font-size: 1.8rem; font-weight: 600; color: #2c3e50; } .well-description-label { color: #7f8c8d; font-size: 0.9rem; font-weight: 600; margin-top: 10px; } .well-description-text { color: #7f8c8d; font-size: 0.9rem; margin-top: 5px; line-height: 1.4; } ``` 2. Обновляем HTML структуру в функции displayWellData: ```javascript // Обновление заголовка const badgeClass = fileType === 'all' ? 'all' : fileType === 'primary' ? 'primary' : fileType === 'final' ? 'final' : 'unknown'; const badgeText = fileType === 'all' ? 'Все типы' : fileType === 'primary' ? 'Первичная' : fileType === 'final' ? 'Итоговая' : 'Неизвестно'; document.getElementById('wellName').innerHTML = ` <div class="well-title"> <div class="well-number-container"> <div class="well-number-label">Номер выработки:</div> <div class="well-number">${xmlData.wellName}</div> <span class="file-type-badge ${badgeClass}">${badgeText}</span> </div> <div class="well-line-container"> <div class="well-line-label">Линия №:</div> <div class="well-line-number">${xmlData.lineNumber}</div> </div> </div> `; // Убираем старый элемент wellLine так как теперь он в wellName document.getElementById('wellLine').innerHTML = ''; // Обновляем описание const wellDescriptionElement = document.getElementById('wellDescription'); const wellDescriptionTextElement = document.getElementById('wellDescriptionText'); if (xmlData.wellDescription && xmlData.wellDescription !== 'Не указано') { wellDescriptionElement.innerHTML = '<div class="well-description-label">Описание:</div>'; wellDescriptionTextElement.innerHTML = `<div class="well-description-text">${xmlData.wellDescription}</div>`; wellDescriptionTextElement.style.display = 'block'; } else { wellDescriptionElement.innerHTML = '<div class="well-description-label">Описание отсутствует</div>'; wellDescriptionTextElement.style.display = 'none'; } ``` Что изменилось: 1. Все в одной строке - номер выработки и номер линии теперь в одной строке 2. Увеличен размер бейджа - стал больше и читаемее 3. Одинаковые большие номера - и номер выработки и номер линии теперь большие черные жирные 4. Серые подписи - "Номер выработки:" и "Линия №:" серые обычного размера 5. Горизонтальное расположение - все элементы выстроены в линию с равными отступами Теперь заголовок выглядит компактно и информативно! |
Среда, 2025-10-01, 14:38
# 224
/* Стили для заголовка скважины */
.well-header-content { margin-bottom: 15px; } .doc-type-badge { padding: 6px 12px; color: white; border-radius: 12px; font-size: 0.9rem; font-weight: 600; line-height: 1; margin-bottom: 10px; display: inline-block; } .doc-type-badge.all { background-color: #2c3e50; } .doc-type-badge.primary { background-color: #3498db; } .doc-type-badge.final { background-color: #e74c3c; } .doc-type-badge.unknown { background-color: #7f8c8d; } .well-title { color: #2c3e50; margin-bottom: 5px; display: flex; align-items: baseline; gap: 15px; flex-wrap: wrap; } .well-number-container { display: flex; align-items: baseline; gap: 8px; } .well-number-label { color: #7f8c8d; font-size: 1rem; font-weight: normal; } .well-number { font-size: 1.8rem; font-weight: 600; color: #2c3e50; } .well-line-container { display: flex; align-items: baseline; gap: 8px; } .well-line-label { color: #7f8c8d; font-size: 1rem; font-weight: normal; } .well-line-number { font-size: 1.8rem; font-weight: 600; color: #2c3e50; } .well-description-label { color: #7f8c8d; font-size: 0.9rem; font-weight: 600; margin-top: 10px; } .well-description-text { color: #7f8c8d; font-size: 0.9rem; margin-top: 5px; line-height: 1.4; } |
Среда, 2025-10-01, 14:39
# 225
Отлично! Вот исправления чтобы тип документации был в самом верху:
1. Обновляем стили: ```css /* Стили для заголовка скважины */ .well-header-content { margin-bottom: 15px; } .doc-type-badge { padding: 6px 12px; color: white; border-radius: 12px; font-size: 0.9rem; font-weight: 600; line-height: 1; margin-bottom: 10px; display: inline-block; } .doc-type-badge.all { background-color: #2c3e50; } .doc-type-badge.primary { background-color: #3498db; } .doc-type-badge.final { background-color: #e74c3c; } .doc-type-badge.unknown { background-color: #7f8c8d; } .well-title { color: #2c3e50; margin-bottom: 5px; display: flex; align-items: baseline; gap: 15px; flex-wrap: wrap; } .well-number-container { display: flex; align-items: baseline; gap: 8px; } .well-number-label { color: #7f8c8d; font-size: 1rem; font-weight: normal; } .well-number { font-size: 1.8rem; font-weight: 600; color: #2c3e50; } .well-line-container { display: flex; align-items: baseline; gap: 8px; } .well-line-label { color: #7f8c8d; font-size: 1rem; font-weight: normal; } .well-line-number { font-size: 1.8rem; font-weight: 600; color: #2c3e50; } .well-description-label { color: #7f8c8d; font-size: 0.9rem; font-weight: 600; margin-top: 10px; } .well-description-text { color: #7f8c8d; font-size: 0.9rem; margin-top: 5px; line-height: 1.4; } ``` 2. Обновляем HTML структуру в функции displayWellData: ```javascript // Обновление заголовка const badgeClass = fileType === 'all' ? 'all' : fileType === 'primary' ? 'primary' : fileType === 'final' ? 'final' : 'unknown'; const badgeText = fileType === 'all' ? 'Все типы документаций' : fileType === 'primary' ? 'Первичная документация' : fileType === 'final' ? 'Итоговая документация' : 'Неизвестный тип'; document.getElementById('wellName').innerHTML = ` <div class="well-header-content"> <div class="doc-type-badge ${badgeClass}">${badgeText}</div> <div class="well-title"> <div class="well-number-container"> <div class="well-number-label">Номер выработки:</div> <div class="well-number">${xmlData.wellName}</div> </div> <div class="well-line-container"> <div class="well-line-label">Линия №:</div> <div class="well-line-number">${xmlData.lineNumber}</div> </div> </div> </div> `; // Убираем старый элемент wellLine так как теперь он в wellName document.getElementById('wellLine').innerHTML = ''; // Обновляем описание const wellDescriptionElement = document.getElementById('wellDescription'); const wellDescriptionTextElement = document.getElementById('wellDescriptionText'); if (xmlData.wellDescription && xmlData.wellDescription !== 'Не указано') { wellDescriptionElement.innerHTML = '<div class="well-description-label">Описание:</div>'; wellDescriptionTextElement.innerHTML = `<div class="well-description-text">${xmlData.wellDescription}</div>`; wellDescriptionTextElement.style.display = 'block'; } else { wellDescriptionElement.innerHTML = '<div class="well-description-label">Описание отсутствует</div>'; wellDescriptionTextElement.style.display = 'none'; } ``` Что изменилось: 1. Тип документации в самом верху - теперь первым элементом отображается бейдж типа 2. Увеличенный бейдж - стал больше с полным текстом "Первичная документация" и т.д. 3. Четкая иерархия - сначала тип, потом основные данные скважины 4. Убран старый бейдж из строки с номером выработки Теперь тип документации сразу бросается в глаза в самом верху! |
| |||


