import gradio as gr from datetime import datetime ADMIN_PASSWORD = "CLDAI" def render_admin_ui(is_admin_state): # 管理员主面板(登录成功后显示) with gr.Column(visible=False) as admin_panel: gr.Markdown("### 🛠️ 管理员控制面板") kb_files = gr.File(file_types=[".pdf", ".docx"], file_count="multiple", label="📘 上传参考资料文件") prompt_file = gr.File(file_types=[".txt", ".docx"], label="🧠 上传 Prompt 文档") template_file = gr.File(file_types=[".docx"], label="📄 上传报告输出模版") api_key_file = gr.File(file_types=[".txt"], label="🔑 上传 API Key 文件(每行一个)") preset_btn = gr.Button("⚙️ 执行预设构建") admin_status = gr.Textbox(label="管理员状态 / 执行日志", lines=6) def run_preset(kb, prompt, template, keyfile): now = datetime.now().strftime("%Y-%m-%d %H:%M:%S") return f"✅ 执行预设构建成功\n时间:{now}" preset_btn.click( fn=run_preset, inputs=[kb_files, prompt_file, template_file, api_key_file], outputs=admin_status ) # ✅ 只保留一段登录区域 with gr.Row(): with gr.Column(): pwd_input = gr.Textbox( label="🔐 请输入管理员密码:", placeholder="请输入密码", type="password", value="", # 确保无默认值 show_label=True, interactive=True ) login_btn = gr.Button("登录") login_status = gr.Textbox(label="登录状态", lines=1, interactive=False) def verify_login(pwd): if pwd == ADMIN_PASSWORD: return True, "✅ 登录成功" else: return False, "❌ 密码错误,请重试" login_btn.click(fn=verify_login, inputs=pwd_input, outputs=[is_admin_state, login_status]) def show_admin_panel(is_admin): return gr.update(visible=is_admin) is_admin_state.change(fn=show_admin_panel, inputs=is_admin_state, outputs=admin_panel)