""" UI модуль для мониторинга топлива """ import streamlit as st from api_client import upload_file_to_api, make_api_request from config import FUEL_COLUMNS def render_monitoring_fuel_tab(): """Рендер вкладки мониторинга топлива""" st.header("⛽ Мониторинг топлива - Полный функционал") # Секция загрузки файлов st.subheader("📤 Загрузка файлов") uploaded_fuel = st.file_uploader( "Выберите ZIP архив с мониторингом топлива", type=['zip'], key="fuel_upload" ) if uploaded_fuel is not None: if st.button("📤 Загрузить мониторинг топлива", key="upload_fuel_btn"): with st.spinner("Загружаю файл..."): result, status = upload_file_to_api( "/monitoring_fuel/upload-zip", uploaded_fuel.read(), uploaded_fuel.name ) if status == 200: st.success(f"✅ {result.get('message', 'Файл загружен')}") st.info(f"ID объекта: {result.get('object_id', 'N/A')}") else: st.error(f"❌ Ошибка: {result.get('message', 'Неизвестная ошибка')}") st.markdown("---") # Секция получения данных st.subheader("🔍 Получение данных") col1, col2 = st.columns(2) with col1: st.subheader("Агрегация по колонкам") columns_fuel = st.multiselect( "Выберите столбцы", FUEL_COLUMNS, default=["normativ", "total"], key="fuel_columns" ) if st.button("🔍 Получить агрегированные данные", key="fuel_total_btn"): if columns_fuel: with st.spinner("Получаю данные..."): data = { "columns": columns_fuel } result, status = make_api_request("/monitoring_fuel/get_total_by_columns", data) if status == 200: st.success("✅ Данные получены") st.json(result) else: st.error(f"❌ Ошибка: {result.get('message', 'Неизвестная ошибка')}") else: st.warning("⚠️ Выберите столбцы") with col2: st.subheader("Данные за месяц") month = st.selectbox( "Выберите месяц", [f"{i:02d}" for i in range(1, 13)], key="fuel_month" ) if st.button("🔍 Получить данные за месяц", key="fuel_month_btn"): with st.spinner("Получаю данные..."): data = { "month": month } result, status = make_api_request("/monitoring_fuel/get_month_by_code", data) if status == 200: st.success("✅ Данные получены") st.json(result) else: st.error(f"❌ Ошибка: {result.get('message', 'Неизвестная ошибка')}")