feat: 實現版本號自動化更新與修復側邊欄 RWD 問題
This commit is contained in:
@@ -386,13 +386,15 @@ export default function AuthenticatedLayout({
|
||||
});
|
||||
};
|
||||
|
||||
const renderMenuItem = (item: MenuItem, level: number = 0) => {
|
||||
const renderMenuItem = (item: MenuItem, level: number = 0, forceExpand: boolean = false) => {
|
||||
const hasChildren = item.children && item.children.length > 0;
|
||||
const isExpanded = expandedItems.includes(item.id);
|
||||
const isActive = item.route
|
||||
? (item.route === '/' ? url === '/' : url.startsWith(item.route))
|
||||
: false;
|
||||
|
||||
const effectivelyCollapsed = isCollapsed && !forceExpand;
|
||||
|
||||
return (
|
||||
<div key={item.id} className="mb-1">
|
||||
{hasChildren ? (
|
||||
@@ -401,21 +403,21 @@ export default function AuthenticatedLayout({
|
||||
className={cn(
|
||||
"w-full flex items-center transition-all rounded-lg group",
|
||||
level === 0 ? "px-3 py-2.5" : "px-3 py-2 pl-10",
|
||||
level === 0 && !isCollapsed && "hover:bg-slate-100",
|
||||
isCollapsed && level === 0 && "justify-center px-0 h-10 w-10 mx-auto hover:bg-slate-100"
|
||||
level === 0 && !effectivelyCollapsed && "hover:bg-slate-100",
|
||||
effectivelyCollapsed && level === 0 && "justify-center px-0 h-10 w-10 mx-auto hover:bg-slate-100"
|
||||
)}
|
||||
title={isCollapsed ? item.label : ""}
|
||||
title={effectivelyCollapsed ? item.label : ""}
|
||||
>
|
||||
{level === 0 && (
|
||||
<span className={cn(
|
||||
"flex-shrink-0 transition-all",
|
||||
isCollapsed ? "mr-0" : "mr-3 text-slate-500 group-hover:text-slate-900"
|
||||
effectivelyCollapsed ? "mr-0" : "mr-3 text-slate-500 group-hover:text-slate-900"
|
||||
)}>
|
||||
{item.icon}
|
||||
</span>
|
||||
)}
|
||||
|
||||
{!isCollapsed && (
|
||||
{!effectivelyCollapsed && (
|
||||
<>
|
||||
<span className="flex-1 text-left text-base font-medium text-slate-700 group-hover:text-slate-900 truncate">
|
||||
{item.label}
|
||||
@@ -438,22 +440,22 @@ export default function AuthenticatedLayout({
|
||||
className={cn(
|
||||
"w-full flex items-center transition-all rounded-lg group",
|
||||
level === 0 ? "px-3 py-2.5" : "px-3 py-2",
|
||||
level > 0 && !isCollapsed && "pl-11",
|
||||
level > 0 && !effectivelyCollapsed && "pl-11",
|
||||
isActive ? "bg-primary-lightest text-primary-main" : "text-slate-600 hover:bg-slate-100 hover:text-slate-900",
|
||||
isCollapsed && level === 0 && "justify-center px-0 h-10 w-10 mx-auto"
|
||||
effectivelyCollapsed && level === 0 && "justify-center px-0 h-10 w-10 mx-auto"
|
||||
)}
|
||||
title={isCollapsed ? item.label : ""}
|
||||
title={effectivelyCollapsed ? item.label : ""}
|
||||
>
|
||||
{item.icon && (
|
||||
<span className={cn(
|
||||
"flex-shrink-0 transition-all",
|
||||
isCollapsed ? "mr-0" : "mr-3",
|
||||
effectivelyCollapsed ? "mr-0" : "mr-3",
|
||||
isActive ? "text-primary-main" : "text-slate-500 group-hover:text-slate-900"
|
||||
)}>
|
||||
{item.icon}
|
||||
</span>
|
||||
)}
|
||||
{!isCollapsed && (
|
||||
{!effectivelyCollapsed && (
|
||||
<span className="text-base font-medium truncate">
|
||||
{item.label}
|
||||
</span>
|
||||
@@ -461,9 +463,9 @@ export default function AuthenticatedLayout({
|
||||
</Link>
|
||||
)}
|
||||
|
||||
{hasChildren && isExpanded && !isCollapsed && (
|
||||
{hasChildren && isExpanded && !effectivelyCollapsed && (
|
||||
<div className="mt-1 space-y-1">
|
||||
{item.children?.map((child) => renderMenuItem(child, level + 1))}
|
||||
{item.children?.map((child) => renderMenuItem(child, level + 1, forceExpand))}
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
@@ -573,7 +575,7 @@ export default function AuthenticatedLayout({
|
||||
</div>
|
||||
|
||||
<div className="p-4 border-t border-slate-100 flex items-center justify-between">
|
||||
{!isCollapsed && <p className="text-[10px] font-medium text-slate-400 uppercase tracking-wider px-2">Version 1.0.0</p>}
|
||||
{!isCollapsed && <p className="text-[10px] font-medium text-slate-400 uppercase tracking-wider px-2">Version {props.app_version || '1.0.0'}</p>}
|
||||
<button
|
||||
onClick={() => setIsCollapsed(!isCollapsed)}
|
||||
className={cn(
|
||||
@@ -613,7 +615,7 @@ export default function AuthenticatedLayout({
|
||||
</div>
|
||||
<div className="flex-1 overflow-y-auto p-4" scroll-region="true">
|
||||
<nav className="space-y-1">
|
||||
{menuItems.map((item) => renderMenuItem(item))}
|
||||
{menuItems.map((item) => renderMenuItem(item, 0, true))}
|
||||
</nav>
|
||||
</div>
|
||||
</aside>
|
||||
|
||||
Reference in New Issue
Block a user