streamlit fix

This commit is contained in:
2025-08-29 15:22:17 +03:00
parent f16ab7133a
commit 908fb330f4

View File

@@ -94,93 +94,44 @@ def main():
for parser in parsers: for parser in parsers:
st.write(f"{parser}") st.write(f"{parser}")
# Основные вкладки # Основные вкладки - по одной на каждый парсер
tab1, tab2, tab3, tab4 = st.tabs([ tab1, tab2, tab3 = st.tabs([
"📤 Загрузка файлов",
"📊 Сводки ПМ", "📊 Сводки ПМ",
"🏭 Сводки СА", "🏭 Сводки СА",
"⛽ Мониторинг топлива" "⛽ Мониторинг топлива"
]) ])
# Вкладка 1: Загрузка файлов # Вкладка 1: Сводки ПМ - полный функционал
with tab1: with tab1:
st.header("📤 Загрузка файлов") st.header("📊 Сводки ПМ - Полный функционал")
col1, col2 = st.columns(2) # Секция загрузки файлов
st.subheader("📤 Загрузка файлов")
with col1: uploaded_pm = st.file_uploader(
st.subheader("Сводки ПМ") "Выберите ZIP архив со сводками ПМ",
uploaded_pm = st.file_uploader( type=['zip'],
"Выберите ZIP архив со сводками ПМ", key="pm_upload"
type=['zip'],
key="pm_upload"
)
if uploaded_pm is not None:
if st.button("📤 Загрузить сводки ПМ", key="upload_pm_btn"):
with st.spinner("Загружаю файл..."):
result, status = upload_file_to_api(
"/svodka_pm/upload-zip",
uploaded_pm.read(),
uploaded_pm.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', 'Неизвестная ошибка')}")
with col2:
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.subheader("Сводка СА")
uploaded_ca = st.file_uploader(
"Выберите Excel файл сводки СА",
type=['xlsx', 'xlsm', 'xls'],
key="ca_upload"
) )
if uploaded_ca is not None: if uploaded_pm is not None:
if st.button("📤 Загрузить сводку СА", key="upload_ca_btn"): if st.button("📤 Загрузить сводки ПМ", key="upload_pm_btn"):
with st.spinner("Загружаю файл..."): with st.spinner("Загружаю файл..."):
try: result, status = upload_file_to_api(
files = {"file": (uploaded_ca.name, uploaded_ca.read(), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")} "/svodka_pm/upload-zip",
response = requests.post(f"{API_BASE_URL}/svodka_ca/upload", files=files) uploaded_pm.read(),
result = response.json() uploaded_pm.name
)
if response.status_code == 200:
st.success(f"{result.get('message', 'Файл загружен')}") if status == 200:
st.info(f"ID объекта: {result.get('object_id', 'N/A')}") st.success(f" {result.get('message', 'Файл загружен')}")
else: st.info(f"ID объекта: {result.get('object_id', 'N/A')}")
st.error(f"❌ Ошибка: {result.get('message', 'Неизвестная ошибка')}") else:
except Exception as e: st.error(f"❌ Ошибка: {result.get('message', 'Неизвестная ошибка')}")
st.error(f"❌ Ошибка: {str(e)}")
st.markdown("---")
# Вкладка 2: Сводки ПМ
with tab2: # Секция получения данных
st.header("📊 Сводки ПМ") st.subheader("🔍 Получение данных")
col1, col2 = st.columns(2) col1, col2 = st.columns(2)
@@ -204,18 +155,12 @@ def main():
columns = st.multiselect( columns = st.multiselect(
"Выберите столбцы", "Выберите столбцы",
["ПП", "БП", "ТБ", "СЭБ", "НЭБ"], ["БП", "ПП", "СЭБ", "Факт", "План"],
default=["ПП", "СЭБ"], default=["БП", "ПП"],
key="pm_single_columns" key="pm_single_columns"
) )
search = st.selectbox( if st.button("🔍 Получить данные по ОГ", key="pm_single_btn"):
"Фильтр",
[None, "Итого"],
key="pm_single_search"
)
if st.button("🔍 Получить данные", key="pm_single_btn"):
if codes and columns: if codes and columns:
with st.spinner("Получаю данные..."): with st.spinner("Получаю данные..."):
data = { data = {
@@ -223,8 +168,6 @@ def main():
"codes": codes, "codes": codes,
"columns": columns "columns": columns
} }
if search:
data["search"] = search
result, status = make_api_request("/svodka_pm/get_single_og", data) result, status = make_api_request("/svodka_pm/get_single_og", data)
@@ -242,23 +185,17 @@ def main():
codes_total = st.multiselect( codes_total = st.multiselect(
"Выберите коды строк", "Выберите коды строк",
[78, 79, 394, 395, 396, 397, 81, 82, 83, 84], [78, 79, 394, 395, 396, 397, 81, 82, 83, 84],
default=[78, 79], default=[78, 79, 394, 395],
key="pm_total_codes" key="pm_total_codes"
) )
columns_total = st.multiselect( columns_total = st.multiselect(
"Выберите столбцы", "Выберите столбцы",
["ПП", "БП", "ТБ", "СЭБ", "НЭБ"], ["БП", "ПП", "СЭБ", "Факт", "План"],
default=["ПП", "СЭБ"], default=["БП", "ПП", "СЭБ"],
key="pm_total_columns" key="pm_total_columns"
) )
search_total = st.selectbox(
"Фильтр",
[None, "Итого"],
key="pm_total_search"
)
if st.button("🔍 Получить данные по всем ОГ", key="pm_total_btn"): if st.button("🔍 Получить данные по всем ОГ", key="pm_total_btn"):
if codes_total and columns_total: if codes_total and columns_total:
with st.spinner("Получаю данные..."): with st.spinner("Получаю данные..."):
@@ -266,8 +203,6 @@ def main():
"codes": codes_total, "codes": codes_total,
"columns": columns_total "columns": columns_total
} }
if search_total:
data["search"] = search_total
result, status = make_api_request("/svodka_pm/get_total_ogs", data) result, status = make_api_request("/svodka_pm/get_total_ogs", data)
@@ -279,50 +214,109 @@ def main():
else: else:
st.warning("⚠️ Выберите коды и столбцы") st.warning("⚠️ Выберите коды и столбцы")
# Вкладка 3: Сводки СА # Вкладка 2: Сводки СА - полный функционал
with tab2:
st.header("🏭 Сводки СА - Полный функционал")
# Секция загрузки файлов
st.subheader("📤 Загрузка файлов")
uploaded_ca = st.file_uploader(
"Выберите Excel файл сводки СА",
type=['xlsx', 'xlsm', 'xls'],
key="ca_upload"
)
if uploaded_ca is not None:
if st.button("📤 Загрузить сводку СА", key="upload_ca_btn"):
with st.spinner("Загружаю файл..."):
try:
files = {"file": (uploaded_ca.name, uploaded_ca.read(), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")}
response = requests.post(f"{API_BASE_URL}/svodka_ca/upload", files=files)
result = response.json()
if response.status_code == 200:
st.success(f"{result.get('message', 'Файл загружен')}")
st.info(f"ID объекта: {result.get('object_id', 'N/A')}")
else:
st.error(f"❌ Ошибка: {result.get('message', 'Неизвестная ошибка')}")
except Exception as e:
st.error(f"❌ Ошибка: {str(e)}")
st.markdown("---")
# Секция получения данных
st.subheader("🔍 Получение данных")
col1, col2 = st.columns(2)
with col1:
st.subheader("Параметры запроса")
modes = st.multiselect(
"Выберите режимы",
["План", "Факт", "Норматив"],
default=["План", "Факт"],
key="ca_modes"
)
tables = st.multiselect(
"Выберите таблицы",
["ТиП", "Топливо", "Потери"],
default=["ТиП", "Топливо"],
key="ca_tables"
)
with col2:
st.subheader("Результат")
if st.button("🔍 Получить данные СА", key="ca_btn"):
if modes and tables:
with st.spinner("Получаю данные..."):
data = {
"modes": modes,
"tables": tables
}
result, status = make_api_request("/svodka_ca/get_data", data)
if status == 200:
st.success("✅ Данные получены")
st.json(result)
else:
st.error(f"❌ Ошибка: {result.get('message', 'Неизвестная ошибка')}")
else:
st.warning("⚠️ Выберите режимы и таблицы")
# Вкладка 3: Мониторинг топлива - полный функционал
with tab3: with tab3:
st.header("🏭 Сводки СА") st.header("⛽ Мониторинг топлива - Полный функционал")
st.subheader("Получение данных из сводки СА") # Секция загрузки файлов
st.subheader("📤 Загрузка файлов")
modes = st.multiselect( uploaded_fuel = st.file_uploader(
"Выберите режимы", "Выберите ZIP архив с мониторингом топлива",
["plan", "fact", "normativ"], type=['zip'],
default=["plan", "fact"], key="fuel_upload"
key="ca_modes"
) )
tables = st.multiselect( 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(),
default=["ТиП, %", "Топливо итого, тонн"], uploaded_fuel.name
key="ca_tables" )
)
if st.button("🔍 Получить данные СА", key="ca_btn"):
if modes and tables:
with st.spinner("Получаю данные..."):
data = {
"modes": modes,
"tables": tables
}
result, status = make_api_request("/svodka_ca/get_data", data)
if status == 200: if status == 200:
st.success("Данные получены") st.success(f"{result.get('message', 'Файл загружен')}")
st.json(result) st.info(f"ID объекта: {result.get('object_id', 'N/A')}")
else: else:
st.error(f"❌ Ошибка: {result.get('message', 'Неизвестная ошибка')}") st.error(f"❌ Ошибка: {result.get('message', 'Неизвестная ошибка')}")
else:
st.warning("⚠️ Выберите режимы и таблицы") st.markdown("---")
# Вкладка 4: Мониторинг топлива # Секция получения данных
with tab4: st.subheader("🔍 Получение данных")
st.header("⛽ Мониторинг топлива")
col1, col2 = st.columns(2) col1, col2 = st.columns(2)