80 lines
3.1 KiB
Python
80 lines
3.1 KiB
Python
"""
|
||
UI модуль для парсера сводок СА
|
||
"""
|
||
import streamlit as st
|
||
import requests
|
||
from api_client import make_api_request, API_BASE_URL
|
||
from config import CA_MODES, CA_TABLES
|
||
|
||
|
||
def render_svodka_ca_tab():
|
||
"""Рендер вкладки сводок СА"""
|
||
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(
|
||
"Выберите режимы",
|
||
CA_MODES,
|
||
default=["plan", "fact"],
|
||
key="ca_modes"
|
||
)
|
||
|
||
tables = st.multiselect(
|
||
"Выберите таблицы",
|
||
CA_TABLES,
|
||
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("⚠️ Выберите режимы и таблицы") |