mirror of
https://github.com/SECTL/SecScore.git
synced 2026-07-21 20:29:03 +08:00
支持侧边栏折叠为图标模式
This commit is contained in:
+45
-22
@@ -9,6 +9,8 @@ import {
|
|||||||
FileTextOutlined,
|
FileTextOutlined,
|
||||||
CloudOutlined,
|
CloudOutlined,
|
||||||
UploadOutlined,
|
UploadOutlined,
|
||||||
|
MenuFoldOutlined,
|
||||||
|
MenuUnfoldOutlined,
|
||||||
} from "@ant-design/icons"
|
} from "@ant-design/icons"
|
||||||
import { useState, useEffect } from "react"
|
import { useState, useEffect } from "react"
|
||||||
import { useTranslation } from "react-i18next"
|
import { useTranslation } from "react-i18next"
|
||||||
@@ -30,6 +32,7 @@ interface DbStatus {
|
|||||||
|
|
||||||
export function Sidebar({ activeMenu, permission, onMenuChange }: SidebarProps): React.JSX.Element {
|
export function Sidebar({ activeMenu, permission, onMenuChange }: SidebarProps): React.JSX.Element {
|
||||||
const { t } = useTranslation()
|
const { t } = useTranslation()
|
||||||
|
const [collapsed, setCollapsed] = useState(false)
|
||||||
const [dbStatus, setDbStatus] = useState<DbStatus>({ type: "sqlite", connected: true })
|
const [dbStatus, setDbStatus] = useState<DbStatus>({ type: "sqlite", connected: true })
|
||||||
const [syncLoading, setSyncLoading] = useState(false)
|
const [syncLoading, setSyncLoading] = useState(false)
|
||||||
const [messageApi, contextHolder] = message.useMessage()
|
const [messageApi, contextHolder] = message.useMessage()
|
||||||
@@ -176,6 +179,8 @@ export function Sidebar({ activeMenu, permission, onMenuChange }: SidebarProps):
|
|||||||
<Sider
|
<Sider
|
||||||
className="ss-sidebar"
|
className="ss-sidebar"
|
||||||
width={200}
|
width={200}
|
||||||
|
collapsed={collapsed}
|
||||||
|
collapsedWidth={80}
|
||||||
style={{
|
style={{
|
||||||
background: "var(--ss-sidebar-bg)",
|
background: "var(--ss-sidebar-bg)",
|
||||||
borderRight: "1px solid var(--ss-border-color)",
|
borderRight: "1px solid var(--ss-border-color)",
|
||||||
@@ -188,43 +193,61 @@ export function Sidebar({ activeMenu, permission, onMenuChange }: SidebarProps):
|
|||||||
data-tauri-drag-region
|
data-tauri-drag-region
|
||||||
style={
|
style={
|
||||||
{
|
{
|
||||||
padding: "32px 24px 16px",
|
padding: collapsed ? "24px 8px 12px" : "32px 24px 16px",
|
||||||
textAlign: "center",
|
textAlign: "center",
|
||||||
WebkitAppRegion: "drag",
|
WebkitAppRegion: "drag",
|
||||||
userSelect: "none",
|
userSelect: "none",
|
||||||
flexShrink: 0,
|
flexShrink: 0,
|
||||||
|
position: "relative",
|
||||||
} as React.CSSProperties
|
} as React.CSSProperties
|
||||||
}
|
}
|
||||||
>
|
>
|
||||||
|
<Button
|
||||||
|
type="text"
|
||||||
|
size="small"
|
||||||
|
onClick={() => setCollapsed((prev) => !prev)}
|
||||||
|
icon={collapsed ? <MenuUnfoldOutlined /> : <MenuFoldOutlined />}
|
||||||
|
style={{
|
||||||
|
position: "absolute",
|
||||||
|
top: "8px",
|
||||||
|
right: "8px",
|
||||||
|
WebkitAppRegion: "no-drag",
|
||||||
|
}}
|
||||||
|
/>
|
||||||
<img
|
<img
|
||||||
src={appLogo}
|
src={appLogo}
|
||||||
style={{ width: "48px", height: "48px", marginBottom: "12px" }}
|
style={{ width: "48px", height: "48px", marginBottom: collapsed ? "0" : "12px" }}
|
||||||
alt="logo"
|
alt="logo"
|
||||||
/>
|
/>
|
||||||
<h2
|
{!collapsed && (
|
||||||
style={{
|
<>
|
||||||
color: "var(--ss-sidebar-text, var(--ss-text-main))",
|
<h2
|
||||||
margin: 0,
|
style={{
|
||||||
fontSize: "20px",
|
color: "var(--ss-sidebar-text, var(--ss-text-main))",
|
||||||
}}
|
margin: 0,
|
||||||
>
|
fontSize: "20px",
|
||||||
SecScore
|
}}
|
||||||
</h2>
|
>
|
||||||
<div
|
SecScore
|
||||||
style={{
|
</h2>
|
||||||
fontSize: "12px",
|
<div
|
||||||
color: "var(--ss-sidebar-text, var(--ss-text-main))",
|
style={{
|
||||||
opacity: 0.8,
|
fontSize: "12px",
|
||||||
marginTop: "4px",
|
color: "var(--ss-sidebar-text, var(--ss-text-main))",
|
||||||
}}
|
opacity: 0.8,
|
||||||
>
|
marginTop: "4px",
|
||||||
{t("settings.about.appName")}
|
}}
|
||||||
</div>
|
>
|
||||||
|
{t("settings.about.appName")}
|
||||||
|
</div>
|
||||||
|
</>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div style={{ flex: 1, overflowY: "auto", display: "flex", flexDirection: "column" }}>
|
<div style={{ flex: 1, overflowY: "auto", display: "flex", flexDirection: "column" }}>
|
||||||
<Menu
|
<Menu
|
||||||
mode="inline"
|
mode="inline"
|
||||||
|
inlineCollapsed={collapsed}
|
||||||
selectedKeys={[activeMenu]}
|
selectedKeys={[activeMenu]}
|
||||||
onClick={({ key }) => onMenuChange(key)}
|
onClick={({ key }) => onMenuChange(key)}
|
||||||
style={{
|
style={{
|
||||||
@@ -236,7 +259,7 @@ export function Sidebar({ activeMenu, permission, onMenuChange }: SidebarProps):
|
|||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{dbStatus.type === "postgresql" && (
|
{!collapsed && dbStatus.type === "postgresql" && (
|
||||||
<Card
|
<Card
|
||||||
size="small"
|
size="small"
|
||||||
style={{
|
style={{
|
||||||
|
|||||||
Reference in New Issue
Block a user