import streamlit as st from config import setup_page_config, API_PUBLIC_URL from api_client import check_api_health from sidebar import render_sidebar, render_footer from sync_parsers_page import render_sync_parsers_page from async_upload_page import render_async_upload_page from tasks_page import render_tasks_page # Конфигурация страницы setup_page_config() def main(): # Определяем активную страницу для заголовка active_page = st.session_state.get("active_page", 0) page_titles = { 0: "Синхронные парсеры", 1: "Асинхронная загрузка", 2: "Управление задачами" } st.title(f"🚀 NIN Excel Parsers API - {page_titles.get(active_page, 'Демонстрация')}") st.markdown("---") # Проверка доступности API if not check_api_health(): st.error(f"❌ API недоступен по адресу {API_PUBLIC_URL}") st.info("Убедитесь, что FastAPI сервер запущен") return st.success(f"✅ API доступен по адресу {API_PUBLIC_URL}") # Боковая панель с информацией и навигацией render_sidebar() # Обрабатываем клики по кнопкам в сайдбаре if st.session_state.get("sidebar_sync_clicked", False): st.session_state.sidebar_sync_clicked = False st.session_state.active_page = 0 elif st.session_state.get("sidebar_async_clicked", False): st.session_state.sidebar_async_clicked = False st.session_state.active_page = 1 elif st.session_state.get("sidebar_tasks_clicked", False): st.session_state.sidebar_tasks_clicked = False st.session_state.active_page = 2 # Определяем активную страницу active_page = st.session_state.get("active_page", 0) # Рендерим соответствующую страницу if active_page == 0: render_sync_parsers_page() elif active_page == 1: render_async_upload_page() else: render_tasks_page() # Футер render_footer() if __name__ == "__main__": main()