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:
parent
f750f024f9
commit
4ef2825b59
@ -32,3 +32,5 @@ Submit: Submit
|
|||||||
营销产线: Marketing Pipeline
|
营销产线: Marketing Pipeline
|
||||||
运维产线(面向FOMS)规划中,尚未开发: Operations Pipeline (for FOMS) is planned, not yet developed
|
运维产线(面向FOMS)规划中,尚未开发: Operations Pipeline (for FOMS) is planned, not yet developed
|
||||||
营销产线规划中,尚未开发: Marketing Pipeline is planned, not yet developed
|
营销产线规划中,尚未开发: Marketing Pipeline is planned, not yet developed
|
||||||
|
切换主题: Toggle theme
|
||||||
|
显示所有已最小化的窗口: Show all minimized windows
|
||||||
|
|||||||
@ -32,3 +32,5 @@ Submit: 送信
|
|||||||
营销产线: マーケティングパイプライン
|
营销产线: マーケティングパイプライン
|
||||||
运维产线(面向FOMS)规划中,尚未开发: 運用パイプライン(FOMS向け)は計画中で、まだ開発されていません
|
运维产线(面向FOMS)规划中,尚未开发: 運用パイプライン(FOMS向け)は計画中で、まだ開発されていません
|
||||||
营销产线规划中,尚未开发: マーケティングパイプラインは計画中で、まだ開発されていません
|
营销产线规划中,尚未开发: マーケティングパイプラインは計画中で、まだ開発されていません
|
||||||
|
切换主题: テーマ切替
|
||||||
|
显示所有已最小化的窗口: 最小化されたすべてのウィンドウを表示
|
||||||
|
|||||||
@ -32,3 +32,5 @@ Submit: 제출
|
|||||||
营销产线: 마케팅 파이프라인
|
营销产线: 마케팅 파이프라인
|
||||||
运维产线(面向FOMS)规划中,尚未开发: 운영 파이프라인(FOMS 대상)은 계획 중이며 아직 개발되지 않았습니다
|
运维产线(面向FOMS)规划中,尚未开发: 운영 파이프라인(FOMS 대상)은 계획 중이며 아직 개발되지 않았습니다
|
||||||
营销产线规划中,尚未开发: 마케팅 파이프라인은 계획 중이며 아직 개발되지 않았습니다
|
营销产线规划中,尚未开发: 마케팅 파이프라인은 계획 중이며 아직 개발되지 않았습니다
|
||||||
|
切换主题: 테마 전환
|
||||||
|
显示所有已最小化的窗口: 최소화된 모든 창 표시
|
||||||
|
|||||||
@ -32,3 +32,5 @@ Submit: Submit
|
|||||||
营销产线: 营销产线
|
营销产线: 营销产线
|
||||||
运维产线(面向FOMS)规划中,尚未开发: 运维产线(面向FOMS)规划中,尚未开发
|
运维产线(面向FOMS)规划中,尚未开发: 运维产线(面向FOMS)规划中,尚未开发
|
||||||
营销产线规划中,尚未开发: 营销产线规划中,尚未开发
|
营销产线规划中,尚未开发: 营销产线规划中,尚未开发
|
||||||
|
切换主题: 切换主题
|
||||||
|
显示所有已最小化的窗口: 显示所有已最小化的窗口
|
||||||
|
|||||||
@ -55,6 +55,7 @@ PERMS = [
|
|||||||
("/index.ui", "app", "any"),
|
("/index.ui", "app", "any"),
|
||||||
("/todo_badge.js", "app", "any"),
|
("/todo_badge.js", "app", "any"),
|
||||||
("/index_tab.js", "app", "any"),
|
("/index_tab.js", "app", "any"),
|
||||||
|
("/theme_toggle.js", "app", "any"),
|
||||||
("/pipeline-sdlc/index.ui", "pipeline_sdlc", "any"),
|
("/pipeline-sdlc/index.ui", "pipeline_sdlc", "any"),
|
||||||
("/pipeline_core/index.ui", "pipeline_core", "any"),
|
("/pipeline_core/index.ui", "pipeline_core", "any"),
|
||||||
("/pipeline_ops/index.ui", "pipeline_ops", "any"),
|
("/pipeline_ops/index.ui", "pipeline_ops", "any"),
|
||||||
|
|||||||
@ -273,5 +273,7 @@
|
|||||||
"🎤 KTV": "🎤 KTV",
|
"🎤 KTV": "🎤 KTV",
|
||||||
"🎬 MTV": "🎬 MTV",
|
"🎬 MTV": "🎬 MTV",
|
||||||
"🎵 音乐": "🎵 Music",
|
"🎵 音乐": "🎵 Music",
|
||||||
"📱 短视频": "📱 Short Video"
|
"📱 短视频": "📱 Short Video",
|
||||||
|
"切换主题": "Toggle theme",
|
||||||
|
"显示所有已最小化的窗口": "Show all minimized windows"
|
||||||
}
|
}
|
||||||
@ -273,5 +273,7 @@
|
|||||||
"🎤 KTV": "🎤 KTV",
|
"🎤 KTV": "🎤 KTV",
|
||||||
"🎬 MTV": "🎬 MTV",
|
"🎬 MTV": "🎬 MTV",
|
||||||
"🎵 音乐": "🎵 音楽",
|
"🎵 音乐": "🎵 音楽",
|
||||||
"📱 短视频": "📱 ショート動画"
|
"📱 短视频": "📱 ショート動画",
|
||||||
|
"切换主题": "テーマ切替",
|
||||||
|
"显示所有已最小化的窗口": "最小化されたすべてのウィンドウを表示"
|
||||||
}
|
}
|
||||||
@ -273,5 +273,7 @@
|
|||||||
"🎤 KTV": "🎤 KTV",
|
"🎤 KTV": "🎤 KTV",
|
||||||
"🎬 MTV": "🎬 MTV",
|
"🎬 MTV": "🎬 MTV",
|
||||||
"🎵 音乐": "🎵 음악",
|
"🎵 音乐": "🎵 음악",
|
||||||
"📱 短视频": "📱 숏폼 영상"
|
"📱 短视频": "📱 숏폼 영상",
|
||||||
|
"切换主题": "테마 전환",
|
||||||
|
"显示所有已最小化的窗口": "최소화된 모든 창 표시"
|
||||||
}
|
}
|
||||||
@ -95,5 +95,7 @@
|
|||||||
"🎤 KTV": "🎤 KTV",
|
"🎤 KTV": "🎤 KTV",
|
||||||
"🎬 MTV": "🎬 MTV",
|
"🎬 MTV": "🎬 MTV",
|
||||||
"🎵 音乐": "🎵 音乐",
|
"🎵 音乐": "🎵 音乐",
|
||||||
"📱 短视频": "📱 短视频"
|
"📱 短视频": "📱 短视频",
|
||||||
|
"切换主题": "切换主题",
|
||||||
|
"显示所有已最小化的窗口": "显示所有已最小化的窗口"
|
||||||
}
|
}
|
||||||
@ -51,6 +51,48 @@
|
|||||||
{
|
{
|
||||||
"widgettype": "Filler"
|
"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",
|
"widgettype": "urlwidget",
|
||||||
"options": {
|
"options": {
|
||||||
|
|||||||
27
wwwroot/theme_toggle.js
Normal file
27
wwwroot/theme_toggle.js
Normal 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);
|
||||||
|
})();
|
||||||
Loading…
x
Reference in New Issue
Block a user