import os, time, shutil import gradio as gr from utils import get_models_data, save_config, get_contacts, save_contacts BASE_DIR = os.path.dirname(os.path.abspath(__file__)) def build_admin_app(): initial_models = get_models_data(BASE_DIR) with gr.Blocks(title="Unstop Admin", analytics_enabled=False) as app_admin: with gr.Tabs(): # ── ВКЛ 1: ТОВАРИ ────────────────────────────────────────────── with gr.Tab("🛒 Товари"): with gr.Row(): model_selector = gr.Dropdown( choices=[m['name'] for m in initial_models], label="Оберіть товар для редагування", value=initial_models[0]['name'] if initial_models else None, scale=4 ) add_btn = gr.Button("➕ Створити новий", variant="primary", scale=1) del_btn = gr.Button("🗑 Видалити товар", variant="stop", scale=1) status_msg = gr.Markdown("") with gr.Group(): gr.Markdown("## 🗂 Структура картки товару") with gr.Row(): with gr.Column(scale=1, variant="panel"): gr.Markdown("### 🖼 Фотографії") m_folder = gr.Textbox(label="Назва папки (у /models/)", info="Порожнє = автостворення") m_images = gr.File(label="Завантажити нові фото", file_count="multiple", type="filepath") with gr.Row(): upload_btn = gr.Button("✅ Завантажити") clear_img_btn = gr.Button("🗑 Очистити папку") with gr.Column(scale=1, variant="panel"): gr.Markdown("### 📄 Основна інформація") m_name = gr.Textbox(label="Назва (вкладка)", placeholder="Unstop Retail 4032W") m_price = gr.Textbox(label="💵 Ціна", placeholder="49 000 грн") m_title = gr.Textbox(label="⚡ Заголовок H1") m_subtitle = gr.Textbox(label="🔋 Підзаголовок") with gr.Row(): with gr.Column(variant="panel"): gr.Markdown("### 📝 Детальний опис (Markdown)") m_opis = gr.Textbox(label="Текст опису", lines=12, show_label=False) with gr.Row(): save_btn = gr.Button("💾 ЗБЕРЕГТИ ЗМІНИ ТОВАРУ", variant="primary", size="lg") # ── ВКЛ 2: НАЛАШТУВАННЯ САЙТУ ────────────────────────────────── with gr.Tab("⚙️ Налаштування сайту"): gr.Markdown("## 📞 Глобальні контакти") _c = get_contacts(BASE_DIR) c_phone = gr.Textbox(label="Телефон (для tel:)", value=_c.get("phone", ""), placeholder="+380675745662") c_phone_display = gr.Textbox(label="Телефон (відображення)", value=_c.get("phone_display", ""), placeholder="+38 067 574 56 62") c_tg_link = gr.Textbox(label="Telegram посилання", value=_c.get("tg_link", ""), placeholder="https://t.me/...") c_tg_display = gr.Textbox(label="Telegram підпис кнопки", value=_c.get("tg_display", ""), placeholder="Написати в Telegram") c_address = gr.Textbox(label="Адреса (HTML дозволено)", value=_c.get("address", ""), placeholder="м. Харків, ...") c_map_src = gr.Textbox(label="Src для