streamlit fix
This commit is contained in:
@@ -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:
|
if status == 200:
|
||||||
st.success(f"✅ {result.get('message', 'Файл загружен')}")
|
st.success(f"✅ {result.get('message', 'Файл загружен')}")
|
||||||
st.info(f"ID объекта: {result.get('object_id', 'N/A')}")
|
st.info(f"ID объекта: {result.get('object_id', 'N/A')}")
|
||||||
else:
|
else:
|
||||||
st.error(f"❌ Ошибка: {result.get('message', 'Неизвестная ошибка')}")
|
st.error(f"❌ Ошибка: {result.get('message', 'Неизвестная ошибка')}")
|
||||||
except Exception as e:
|
|
||||||
st.error(f"❌ Ошибка: {str(e)}")
|
|
||||||
|
|
||||||
# Вкладка 2: Сводки ПМ
|
st.markdown("---")
|
||||||
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("⚠️ Выберите режимы и таблицы")
|
|
||||||
|
|
||||||
# Вкладка 4: Мониторинг топлива
|
st.markdown("---")
|
||||||
with tab4:
|
|
||||||
st.header("⛽ Мониторинг топлива")
|
# Секция получения данных
|
||||||
|
st.subheader("🔍 Получение данных")
|
||||||
|
|
||||||
col1, col2 = st.columns(2)
|
col1, col2 = st.columns(2)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user