From b6d0e34b517e2e7d580bb0e00b444a35c041020d Mon Sep 17 00:00:00 2001 From: caoqianming Date: Fri, 28 Aug 2026 13:37:15 +0800 Subject: [PATCH] =?UTF-8?q?fix(web):=20=E8=AE=A9=20embed=20=E6=A8=A1?= =?UTF-8?q?=E5=BC=8F=E5=8F=AF=E8=AE=BF=E9=97=AE=E7=AE=A1=E7=90=86=E5=85=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tests/test_static_vendor.py | 11 +++++++++++ web/static/dev.html | 12 +++++------- web/static/js/main.js | 4 ++-- 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/tests/test_static_vendor.py b/tests/test_static_vendor.py index 8c037e1..dd277fb 100644 --- a/tests/test_static_vendor.py +++ b/tests/test_static_vendor.py @@ -140,6 +140,17 @@ class StaticVendorTests(unittest.TestCase): self.assertIn(":focus-visible", css) self.assertIn("@media (max-width: 640px)", css) + def test_admin_entry_lives_in_main_conversation_panel(self) -> None: + html = DEV_HTML.read_text(encoding="utf-8") + header = html.split("
", 1)[1].split("
", 1)[0] + conversation_head = html.split('id="pane-mid"', 1)[1].split( + 'id="chat-meta"', 1 + )[0] + + self.assertNotIn('id="hd-admin"', header) + self.assertIn('id="hd-admin"', conversation_head) + self.assertIn('href="/static/admin.html"', conversation_head) + def test_file_toolbar_keeps_hidden_toggle_and_groups_add_actions(self) -> None: html = DEV_HTML.read_text(encoding="utf-8") files_js = (JS_DIR / "files.js").read_text(encoding="utf-8") diff --git a/web/static/dev.html b/web/static/dev.html index e1341e1..4da8da4 100644 --- a/web/static/dev.html +++ b/web/static/dev.html @@ -1730,14 +1730,12 @@ header .who { display: none; } header .brand { min-width: 0; flex-shrink: 1; } header .title { font-size: 14px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } - /* tab 行:order 让 tabs 换行到 header 末行,「管理」(order 更大)跟到 tabs 右侧 - 成小按钮 —— 首行只留 brand + 改密码/退出。flex-basis 70% 是换行开关: - 首行剩余空间塞不下 70% → tabs 必换行;换行后 70% + 管理(~15%)同行放得下 */ + /* tab 行换到 header 末行。flex-basis 70% 是换行开关: + 首行剩余空间塞不下 70% → tabs 必换行。 */ .mobile-tabs { display: flex; order: 99; flex: 1 1 70%; } .mobile-tabs button { flex: 1; } - #hd-admin { order: 100; flex-shrink: 0; padding: 5px 10px; font-size: 12px; } #hd-chpw, #hd-logout { padding: 4px 8px; font-size: 12px; } - /* embed(企业微信免登)时 brand/改密码/退出已藏 → tabs +「管理」自然收成单行 */ + /* embed(企业微信免登)时 brand/改密码/退出已藏 → tabs 自然收成单行 */ body.embed-mode header .spacer { display: none; } /* 浮层菜单:加大触控目标(桌面 6px 高度在手机上难点准) */ @@ -2132,8 +2130,6 @@
- @@ -2218,6 +2214,8 @@
对话 + diff --git a/web/static/js/main.js b/web/static/js/main.js index ab7afa3..d02a90a 100644 --- a/web/static/js/main.js +++ b/web/static/js/main.js @@ -39,7 +39,7 @@ export function enterApp(initialTaskId = "") { loadModels(); // 模型清单缓存:chat-meta 下拉 + 新建对话框 + 历史小标 loadFolderSuggestions(); // 灌 filter-wd select(modal 打开时会重拉,这里让左 pane 先有选项) loadStorage(); // 顶栏存储用量(后台扫描快照,非实时) - loadRole(); // 拉 /v1/me,admin 才显「管理」入口(/static/admin.html) + loadRole(); // 拉 /v1/me,admin 才显对话面板的「管理」入口(/static/admin.html) refreshProcs(); // 后台进程(bg proc):上个会话遗留的 running proc 恢复轮询/展示 initSoftwareJobs(); } @@ -53,7 +53,7 @@ function renderWho() { } // 当前用户身份 + 角色:/v1/me 返 {user_id, role, name, user_name, email}。 -// admin → 显顶栏「管理」链接;并用服务端权威值校准顶栏用户名(platform_key 登录 / 老 token +// admin → 显对话面板「管理」链接;并用服务端权威值校准顶栏用户名(platform_key 登录 / 老 token // 升级后,name/user_name 这一刻才到齐)。失败静默(增量功能,拉不到就维持登录时的兜底值)。 async function loadRole() { const link = $("hd-admin");