feat(topbar): 语言按钮前加主题切换+最小化窗口按钮(参考sage)

- 主题按钮:dark/light切换,localStorage持久化,刷新恢复;图标随主题变
- 最小化窗口按钮:bricks.app.show_windows_panel(app-dock.svg图标)
- theme_toggle.js:页面加载恢复主题+同步图标(注册any权限,防401渲染中断)
- merge_i18n补两按钮tip词条
This commit is contained in:
yumoqing 2026-08-29 16:50:44 +08:00
parent f750f024f9
commit 4ef2825b59
11 changed files with 90 additions and 4 deletions

View File

@ -32,3 +32,5 @@ Submit: Submit
营销产线: Marketing Pipeline
运维产线面向FOMS规划中尚未开发: Operations Pipeline (for FOMS) is planned, not yet developed
营销产线规划中,尚未开发: Marketing Pipeline is planned, not yet developed
切换主题: Toggle theme
显示所有已最小化的窗口: Show all minimized windows

View File

@ -32,3 +32,5 @@ Submit: 送信
营销产线: マーケティングパイプライン
运维产线面向FOMS规划中尚未开发: 運用パイプラインFOMS向けは計画中で、まだ開発されていません
营销产线规划中,尚未开发: マーケティングパイプラインは計画中で、まだ開発されていません
切换主题: テーマ切替
显示所有已最小化的窗口: 最小化されたすべてのウィンドウを表示

View File

@ -32,3 +32,5 @@ Submit: 제출
营销产线: 마케팅 파이프라인
运维产线面向FOMS规划中尚未开发: 운영 파이프라인(FOMS 대상)은 계획 중이며 아직 개발되지 않았습니다
营销产线规划中,尚未开发: 마케팅 파이프라인은 계획 중이며 아직 개발되지 않았습니다
切换主题: 테마 전환
显示所有已最小化的窗口: 최소화된 모든 창 표시

View File

@ -32,3 +32,5 @@ Submit: Submit
营销产线: 营销产线
运维产线面向FOMS规划中尚未开发: 运维产线面向FOMS规划中尚未开发
营销产线规划中,尚未开发: 营销产线规划中,尚未开发
切换主题: 切换主题
显示所有已最小化的窗口: 显示所有已最小化的窗口

View File

@ -55,6 +55,7 @@ PERMS = [
("/index.ui", "app", "any"),
("/todo_badge.js", "app", "any"),
("/index_tab.js", "app", "any"),
("/theme_toggle.js", "app", "any"),
("/pipeline-sdlc/index.ui", "pipeline_sdlc", "any"),
("/pipeline_core/index.ui", "pipeline_core", "any"),
("/pipeline_ops/index.ui", "pipeline_ops", "any"),

View File

@ -273,5 +273,7 @@
"🎤 KTV": "🎤 KTV",
"🎬 MTV": "🎬 MTV",
"🎵 音乐": "🎵 Music",
"📱 短视频": "📱 Short Video"
"📱 短视频": "📱 Short Video",
"切换主题": "Toggle theme",
"显示所有已最小化的窗口": "Show all minimized windows"
}

View File

@ -273,5 +273,7 @@
"🎤 KTV": "🎤 KTV",
"🎬 MTV": "🎬 MTV",
"🎵 音乐": "🎵 音楽",
"📱 短视频": "📱 ショート動画"
"📱 短视频": "📱 ショート動画",
"切换主题": "テーマ切替",
"显示所有已最小化的窗口": "最小化されたすべてのウィンドウを表示"
}

View File

@ -273,5 +273,7 @@
"🎤 KTV": "🎤 KTV",
"🎬 MTV": "🎬 MTV",
"🎵 音乐": "🎵 음악",
"📱 短视频": "📱 숏폼 영상"
"📱 短视频": "📱 숏폼 영상",
"切换主题": "테마 전환",
"显示所有已最小化的窗口": "최소화된 모든 창 표시"
}

View File

@ -95,5 +95,7 @@
"🎤 KTV": "🎤 KTV",
"🎬 MTV": "🎬 MTV",
"🎵 音乐": "🎵 音乐",
"📱 短视频": "📱 短视频"
"📱 短视频": "📱 短视频",
"切换主题": "切换主题",
"显示所有已最小化的窗口": "显示所有已最小化的窗口"
}

View File

@ -51,6 +51,48 @@
{
"widgettype": "Filler"
},
{
"widgettype": "Button",
"id": "theme_toggle_btn",
"options": {
"label": "🌙",
"css": "text",
"width": "36px",
"height": "36px",
"borderRadius": "50%",
"border": "1px solid #475569",
"bgcolor": "transparent",
"cfontsize": 1.1,
"tip": "切换主题"
},
"binds": [
{
"wid": "self",
"event": "click",
"actiontype": "script",
"target": "self",
"script": "var h=document.documentElement;var t=h.getAttribute('data-theme')||'light';var n=t=='light'?'dark':'light';h.setAttribute('data-theme',n);try{localStorage.setItem('pipeline_ui_theme',n);}catch(e){}if(window.applyPipelineTheme){window.applyPipelineTheme(n);}"
}
]
},
{
"widgettype": "Svg",
"options": {
"css": "clickable",
"rate": 2,
"tip": "显示所有已最小化的窗口",
"url": "{{entire_url('/bricks/imgs/app-dock.svg')}}"
},
"binds": [
{
"wid": "self",
"event": "click",
"actiontype": "script",
"target": "app",
"script": "bricks.app.show_windows_panel(event)"
}
]
},
{
"widgettype": "urlwidget",
"options": {

27
wwwroot/theme_toggle.js Normal file
View File

@ -0,0 +1,27 @@
/* +
约定light 主题显示 🌙点击切暗dark 主题显示 点击切亮 */
(function(){
if (typeof bricks === 'undefined') return;
var KEY = 'pipeline_ui_theme';
function applyTheme(t){
document.documentElement.setAttribute('data-theme', t);
var btn = bricks.getWidgetById('theme_toggle_btn', bricks.app);
if (btn && btn.dom_element){
btn.opts.label = (t === 'light') ? '🌙' : '☀️';
btn.dom_element.textContent = btn.opts.label;
}
}
window.applyPipelineTheme = applyTheme;
function _start(){
if (bricks.app && bricks.getWidgetById){
var t = null;
try { t = localStorage.getItem(KEY); } catch(e) {}
applyTheme(t || 'light');
} else {
setTimeout(_start, 300);
}
}
setTimeout(_start, 300);
})();