fix: sidebar collapse width, CRUD height overflow, dashboard VScrollPanel

This commit is contained in:
yumoqing 2026-05-30 21:20:29 +08:00
parent d8ec4e7142
commit c36ada56b1
3 changed files with 19 additions and 2 deletions

View File

@ -5,6 +5,12 @@
"height": "100%" "height": "100%"
}, },
"subwidgets": [ "subwidgets": [
{
"widgettype": "VScrollPanel",
"options": {
"css": "filler"
},
"subwidgets": [
{ {
"widgettype": "HBox", "widgettype": "HBox",
"options": { "options": {
@ -530,5 +536,7 @@
} }
] ]
} }
]
}
] ]
} }

View File

@ -178,11 +178,12 @@ body {
.sage-main { .sage-main {
flex: 1; flex: 1;
overflow-y: auto; overflow: hidden;
overflow-x: hidden; overflow-x: hidden;
padding: 24px; padding: 24px;
background-color: var(--sage-bg-primary); background-color: var(--sage-bg-primary);
min-width: 0; /* Prevent flex item from overflowing */ min-width: 0; /* Prevent flex item from overflowing */
min-height: 0; /* Allow flex children to shrink below content size */
transition: margin-left 0.3s ease; transition: margin-left 0.3s ease;
} }

View File

@ -51,6 +51,7 @@
var sidebar = document.getElementById('sage_sidebar'); var sidebar = document.getElementById('sage_sidebar');
if (sidebar && collapsed) { if (sidebar && collapsed) {
sidebar.classList.add('collapsed'); sidebar.classList.add('collapsed');
sidebar.style.width = '64px';
} }
} }
@ -61,6 +62,7 @@
if (isMobile() && !sidebar.classList.contains('collapsed')) { if (isMobile() && !sidebar.classList.contains('collapsed')) {
sidebar.classList.add('collapsed'); sidebar.classList.add('collapsed');
sidebar.style.width = '64px';
try { localStorage.setItem(SIDEBAR_KEY, 'true'); } catch(e) {} try { localStorage.setItem(SIDEBAR_KEY, 'true'); } catch(e) {}
updateSidebarIcon(true); updateSidebarIcon(true);
} }
@ -81,6 +83,7 @@
// If click is outside sidebar and toggle button, close sidebar // If click is outside sidebar and toggle button, close sidebar
if (!sidebar.contains(e.target) && (!toggleBtn || !toggleBtn.contains(e.target))) { if (!sidebar.contains(e.target) && (!toggleBtn || !toggleBtn.contains(e.target))) {
sidebar.classList.add('collapsed'); sidebar.classList.add('collapsed');
sidebar.style.width = '64px';
try { localStorage.setItem(SIDEBAR_KEY, 'true'); } catch(ex) {} try { localStorage.setItem(SIDEBAR_KEY, 'true'); } catch(ex) {}
updateSidebarIcon(true); updateSidebarIcon(true);
} }
@ -105,6 +108,8 @@
var isCollapsed = sidebar.classList.contains('collapsed'); var isCollapsed = sidebar.classList.contains('collapsed');
try { localStorage.setItem(SIDEBAR_KEY, isCollapsed); } catch(e) {} try { localStorage.setItem(SIDEBAR_KEY, isCollapsed); } catch(e) {}
updateSidebarIcon(isCollapsed); updateSidebarIcon(isCollapsed);
// Override inline width style (bricks sets inline style which beats CSS class)
sidebar.style.width = isCollapsed ? '64px' : '240px';
// Toggle Menu widget collapse state // Toggle Menu widget collapse state
if (typeof bricks !== 'undefined') { if (typeof bricks !== 'undefined') {
var menu = bricks.getWidgetById('global_nav_menu', bricks.app); var menu = bricks.getWidgetById('global_nav_menu', bricks.app);
@ -151,8 +156,9 @@
var w = await bricks.widgetBuild(desc, sidebar); var w = await bricks.widgetBuild(desc, sidebar);
if (w) { if (w) {
sidebar.addSubWidget(w); sidebar.addSubWidget(w);
// Re-apply collapsed state to newly built menu // Re-apply collapsed state and inline width to newly built menu
if (isCollapsed) { if (isCollapsed) {
sidebar.el.style.width = '64px';
var menu = bricks.getWidgetById('global_nav_menu', bricks.app); var menu = bricks.getWidgetById('global_nav_menu', bricks.app);
if (menu && menu.collapse) { if (menu && menu.collapse) {
menu.collapse(); menu.collapse();
@ -201,6 +207,8 @@
if (btn && sidebar) { if (btn && sidebar) {
var isCollapsed = sidebar.classList.contains('collapsed'); var isCollapsed = sidebar.classList.contains('collapsed');
updateSidebarIcon(isCollapsed); updateSidebarIcon(isCollapsed);
// Sync inline width with collapsed state (bricks may have overridden it)
sidebar.style.width = isCollapsed ? '64px' : '240px';
// Apply collapsed state to Menu if sidebar was already collapsed // Apply collapsed state to Menu if sidebar was already collapsed
if (isCollapsed && typeof bricks !== 'undefined') { if (isCollapsed && typeof bricks !== 'undefined') {
var menu = bricks.getWidgetById('global_nav_menu', bricks.app); var menu = bricks.getWidgetById('global_nav_menu', bricks.app);