diff --git a/src/components/layouts/components/Header/index.tsx b/src/components/layouts/components/Header/index.tsx index 3b29124..9295a22 100644 --- a/src/components/layouts/components/Header/index.tsx +++ b/src/components/layouts/components/Header/index.tsx @@ -17,8 +17,8 @@ import { SizeType } from "antd/es/config-provider/SizeContext"; import { useDispatch, useSelector } from "@/store"; import { updateCollapsed } from "@/store/module/sidebar"; import { setComponentSize, setLanguage } from "@/store/module/global"; -import ThemeComp from "@/components/layouts/components/theme"; -import FullScreen from "@/components/layouts/components/fullScreen"; +import ThemeComp from "@/components/layouts/components/Theme"; +import FullScreen from "@/components/layouts/components/FullScreen"; import SvgIcon from "@/components/svgIcon"; const { Header } = Layout; diff --git a/src/components/layouts/components/Theme/index.less b/src/components/layouts/components/Theme/index.less new file mode 100644 index 0000000..4c27539 --- /dev/null +++ b/src/components/layouts/components/Theme/index.less @@ -0,0 +1,5 @@ +.theme { + .theme-color { + color: var(--yz-font-color); + } +} diff --git a/src/components/layouts/components/Theme/index.tsx b/src/components/layouts/components/Theme/index.tsx new file mode 100644 index 0000000..77270f9 --- /dev/null +++ b/src/components/layouts/components/Theme/index.tsx @@ -0,0 +1,132 @@ +import { Drawer, ColorPicker, theme, Button, Switch } from "antd"; +import type { Color, ColorPickerProps } from "antd/es/color-picker"; +import { useState, useMemo, useEffect } from "react"; +import { CheckOutlined, CloseOutlined } from "@ant-design/icons"; + +import { useDispatch, useSelector } from "@/store"; +import { setIsDark, setTheme, setThemeMode } from "@/store/module/global"; +import "./index.less"; + +type props = { + open: boolean; + close: () => void; +}; + +const ThemeComp = (props: props) => { + const dispatch = useDispatch(); + + const { open, close } = props; + const onClose = () => { + close(); + }; + + // 修改主题 + const { token } = theme.useToken(); + const [themeVal, setColorHex] = useState(token.colorPrimary); + const [formatHex, setFormatHex] = useState("hex"); + const hexString = useMemo(() => (typeof themeVal === "string" ? themeVal : themeVal.toHexString()), [themeVal]); + useEffect(() => { + dispatch(setTheme(hexString)); + }, [themeVal]); + + // 重置主题 + const resetTheme = () => { + setColorHex("#a855f7"); + }; + + const { themeMode, isDark, themeColor } = useSelector(state => state.global); + const changeTheme = (checked: boolean, mode: "" | "gray" | "week") => { + checked ? dispatch(setThemeMode(mode)) : dispatch(setThemeMode("")); + }; + + return ( + <> + +
+

主题颜色:

+ +
+
+

重置主题:

+ +
+
+

暗黑模式:

+ 🌞} + unCheckedChildren={<>🌜} + defaultChecked={isDark} + onChange={checked => { + dispatch(setIsDark(checked)); + }} + /> +
+
+

灰色模式:

+ } + unCheckedChildren={} + onChange={checked => changeTheme(checked, "gray")} + defaultChecked={themeMode === "gray"} + /> +
+
+

色弱模式:

+ } + unCheckedChildren={} + onChange={checked => changeTheme(checked, "week")} + defaultChecked={themeMode === "week"} + /> +
+
+ + ); +}; + +export default ThemeComp; diff --git a/src/components/layouts/components/header/index.tsx b/src/components/layouts/components/header/index.tsx index 3b29124..9295a22 100644 --- a/src/components/layouts/components/header/index.tsx +++ b/src/components/layouts/components/header/index.tsx @@ -17,8 +17,8 @@ import { SizeType } from "antd/es/config-provider/SizeContext"; import { useDispatch, useSelector } from "@/store"; import { updateCollapsed } from "@/store/module/sidebar"; import { setComponentSize, setLanguage } from "@/store/module/global"; -import ThemeComp from "@/components/layouts/components/theme"; -import FullScreen from "@/components/layouts/components/fullScreen"; +import ThemeComp from "@/components/layouts/components/Theme"; +import FullScreen from "@/components/layouts/components/FullScreen"; import SvgIcon from "@/components/svgIcon"; const { Header } = Layout; diff --git a/src/components/layouts/index.tsx b/src/components/layouts/index.tsx index b132a90..ddc94b1 100644 --- a/src/components/layouts/index.tsx +++ b/src/components/layouts/index.tsx @@ -3,9 +3,9 @@ import { Outlet } from "react-router-dom"; import { Layout } from "antd"; import "./index.less"; -import Sidebar from "@/components/layouts/components/sidebar"; -import Header from "@/components/layouts/components/header"; -import Footer from "@/components/layouts/components/footer"; +import Sidebar from "@/components/layouts/components/Sidebar"; +import Header from "@/components/layouts/components/Header"; +import Footer from "@/components/layouts/components/Footer"; const { Content } = Layout;