diff --git a/index.html b/index.html index 20ce57b..cae04f6 100644 --- a/index.html +++ b/index.html @@ -2,13 +2,10 @@ - + - Uppeta - - - - + Limq +
diff --git a/src/assets/logo-collapsed.png b/public/minilogo.png similarity index 100% rename from src/assets/logo-collapsed.png rename to public/minilogo.png diff --git a/src/assets/minilogo.png b/src/assets/minilogo.png new file mode 100644 index 0000000..23b251f Binary files /dev/null and b/src/assets/minilogo.png differ diff --git a/src/components/ChatAi/index.jsx b/src/components/ChatAi/index.jsx index f3512d2..4587fd0 100644 --- a/src/components/ChatAi/index.jsx +++ b/src/components/ChatAi/index.jsx @@ -8,11 +8,11 @@ import Editor from "@monaco-editor/react"; export default function ChatAIDrawer({ open, onClose, onExport }) { const STORAGE_KEY = 'chat_history'; - const [storedMessages, setStoredMessages] = useSessionStorage(STORAGE_KEY, '[]'); + const [storedMessages, setStoredMessages] = useSessionStorage(STORAGE_KEY, []); const { messages, input, handleSubmit, handleInputChange, isLoading, setMessages } = useChat({ api: "https://test-ai-quirkyai.vercel.app/api/chat", - initialMessages: JSON.parse(storedMessages), + initialMessages: storedMessages.length>0? JSON.parse(storedMessages):[], }); const messagesEndRef = useRef(null); @@ -88,7 +88,6 @@ export default function ChatAIDrawer({ open, onClose, onExport }) { width={800} open={open} onClose={onClose} - className="rounded-l-xl" >
diff --git a/src/components/Layout/Logo.jsx b/src/components/Layout/Logo.jsx index 0762fc9..076c4d0 100644 --- a/src/components/Layout/Logo.jsx +++ b/src/components/Layout/Logo.jsx @@ -1,7 +1,7 @@ import React from "react"; import logo from "@/assets/logo.png"; -import logoCollapsed from "@/assets/logo-collapsed.png"; +import logoCollapsed from "@/assets/minilogo.png"; export const Logo = ({ collapsed, isDarkMode }) => (
diff --git a/src/components/difyChatAi/index.jsx b/src/components/difyChatAi/index.jsx index 4e93cfd..f93991e 100644 --- a/src/components/difyChatAi/index.jsx +++ b/src/components/difyChatAi/index.jsx @@ -3,6 +3,8 @@ import { CodeHighlight } from "@mantine/code-highlight"; import { DownloadOutlined, EditOutlined, CheckOutlined, CloseOutlined } from '@ant-design/icons'; import { useRef, useEffect, useState } from 'react'; import { useDifyChat } from '@/hooks/aichat'; +import Editor from "@monaco-editor/react"; +import {useTheme}from '@/contexts/ThemeContext' export default function DifyChatDrawer({ open, onClose, onExport }) { const { @@ -14,7 +16,7 @@ export default function DifyChatDrawer({ open, onClose, onExport }) { storedMessages, setStoredMessages } = useDifyChat(); - + const {isDarkMode}=useTheme() const [input, setInput] = useState(''); const messagesEndRef = useRef(null); @@ -25,6 +27,20 @@ export default function DifyChatDrawer({ open, onClose, onExport }) { messagesEndRef.current?.scrollIntoView({ behavior: 'smooth' }); }, [messages]); + useEffect(() => { + if (storedMessages && storedMessages.length > 0) { + console.log(storedMessages,'storedMessages'); + + setMessages(storedMessages); + } + }, []); + + useEffect(() => { + if (messages.length > 0) { + setStoredMessages(messages); + } + }, [messages]); + const handleSendMessage = async (e) => { e.preventDefault(); await sendMessage(input); @@ -67,15 +83,20 @@ export default function DifyChatDrawer({ open, onClose, onExport }) { } }; + const handleClearHistory = () => { + clearHistory(); + setStoredMessages([]); + }; + return ( - AI 助手 + AI 助手 @@ -85,7 +106,6 @@ export default function DifyChatDrawer({ open, onClose, onExport }) { width={800} open={open} onClose={onClose} - className="rounded-l-xl" >
@@ -94,13 +114,15 @@ export default function DifyChatDrawer({ open, onClose, onExport }) { key={message.id} className={`rounded-lg p-4 transition-all ${ message.role === 'assistant' - ? 'bg-blue-50 hover:bg-blue-100' - : 'bg-gray-50 hover:bg-gray-100' + ? 'bg-blue-50 hover:bg-blue-100 dark:bg-blue-900/30 dark:hover:bg-blue-900/50' + : 'bg-gray-50 hover:bg-gray-100 dark:bg-gray-800 dark:hover:bg-gray-700' }`} >
{message.role === 'assistant' ? 'AI 助手' : '用户'} @@ -112,7 +134,7 @@ export default function DifyChatDrawer({ open, onClose, onExport }) { icon={} disabled={isLoading} onClick={() => handleEdit(message)} - className="text-gray-500 hover:text-blue-600" + className="text-gray-500 hover:text-blue-600 dark:text-gray-400 dark:hover:text-blue-400" > 编辑 @@ -121,7 +143,7 @@ export default function DifyChatDrawer({ open, onClose, onExport }) { size="small" icon={} onClick={() => handleExport(message.content)} - className="text-gray-500 hover:text-blue-600" + className="text-gray-500 hover:text-blue-600 dark:text-gray-400 dark:hover:text-blue-400" > 导出 @@ -132,12 +154,12 @@ export default function DifyChatDrawer({ open, onClose, onExport }) { {message.role === "assistant" ? (
{editingMessageId === message.id ? ( -
+
-
+
@@ -166,7 +188,7 @@ export default function DifyChatDrawer({ open, onClose, onExport }) { size="small" icon={} onClick={handleSaveEdit} - className="bg-blue-600 hover:bg-blue-700" + className="bg-blue-600 hover:bg-blue-700 dark:bg-blue-700 dark:hover:bg-blue-800" > 保存 @@ -179,12 +201,12 @@ export default function DifyChatDrawer({ open, onClose, onExport }) { copyLabel="复制代码" copiedLabel="已复制!" withLineNumbers - className="rounded-lg" + className="rounded-lg dark:border-gray-700" /> )}
) : ( -
+
{message.content}
)} @@ -193,20 +215,20 @@ export default function DifyChatDrawer({ open, onClose, onExport }) {
-
+
setInput(e.target.value)} disabled={isLoading} - className="flex-1 rounded-lg border-gray-300 hover:border-blue-400 focus:border-blue-600 focus:shadow-blue-100" + className="flex-1 rounded-lg border-gray-300 dark:border-gray-600 hover:border-blue-400 dark:hover:border-blue-500 focus:border-blue-600 dark:focus:border-blue-500 focus:shadow-blue-100 dark:focus:shadow-blue-900 dark:bg-gray-700 dark:text-gray-200" /> diff --git a/src/hooks/aichat.jsx b/src/hooks/aichat.jsx index dd7a40d..002cbce 100644 --- a/src/hooks/aichat.jsx +++ b/src/hooks/aichat.jsx @@ -9,7 +9,7 @@ const STORAGE_KEY = 'dify_chat_history'; const CONVERSATION_ID_KEY = 'dify_conversation_id'; export function useDifyChat() { - const [storedMessages, setStoredMessages] = useSessionStorage(STORAGE_KEY, '[]'); + const [storedMessages, setStoredMessages] = useSessionStorage(STORAGE_KEY, []); const [conversationId, setConversationId] = useSessionStorage(CONVERSATION_ID_KEY, ''); const [messages, setMessages] = useState([]); const [isLoading, setIsLoading] = useState(false); @@ -18,7 +18,7 @@ export function useDifyChat() { const clearHistory = () => { setMessages([]); - setStoredMessages('[]'); + setStoredMessages([]); setConversationId(''); message.success('历史记录已清空'); }; diff --git a/src/pages/resource/menu/index.jsx b/src/pages/resource/menu/index.jsx index f0b8bd7..ff8dd60 100644 --- a/src/pages/resource/menu/index.jsx +++ b/src/pages/resource/menu/index.jsx @@ -201,7 +201,7 @@ export default function MenuManagement() { }, []); return ( -
+
菜单权限管理 diff --git a/src/routes/AppRoutes.jsx b/src/routes/AppRoutes.jsx index 4da2594..287dc18 100644 --- a/src/routes/AppRoutes.jsx +++ b/src/routes/AppRoutes.jsx @@ -89,10 +89,7 @@ const AppRoutes = () => { index element={} /> - - {/* 渲染所有路由 */} {renderRoutes(allRoutes)} - } /> diff --git a/src/styles/main.scss b/src/styles/main.scss index b185d19..4a175dc 100644 --- a/src/styles/main.scss +++ b/src/styles/main.scss @@ -112,27 +112,27 @@ body { .dark { @apply bg-gray-900; - .ant-card { - background: #1f1f1f; + // .ant-card { + // background: #1f1f1f; - .ant-card-head { - color: rgba(255, 255, 255, 0.85); - border-bottom-color: #303030; - } - } + // .ant-card-head { + // color: rgba(255, 255, 255, 0.85); + // border-bottom-color: #303030; + // } + // } - .ant-table { - background: #1f1f1f; + // .ant-table { + // background: #1f1f1f; - .ant-table-thead>tr>th { - background: #141414; - color: rgba(255, 255, 255, 0.85); - } + // .ant-table-thead>tr>th { + // background: #141414; + // color: rgba(255, 255, 255, 0.85); + // } - .ant-table-tbody>tr>td { - border-bottom: 1px solid #303030; - } - } + // .ant-table-tbody>tr>td { + // border-bottom: 1px solid #303030; + // } + // } } // Statistics card styles diff --git a/src/utils/menuUtils.jsx b/src/utils/menuUtils.jsx index ca0ee54..19771bc 100644 --- a/src/utils/menuUtils.jsx +++ b/src/utils/menuUtils.jsx @@ -13,15 +13,21 @@ const getAntIcon = (iconName) => { const generateMenuItems = (routes, menuKeys = [], parentPath = "") => { return routes .filter((route) => { - if (!menuKeys.length) return !route.hidden; + if (route.hidden) return false; + + if (!menuKeys.length) return true; const isRouteAllowed = menuKeys.includes(route.key); // 如果有子路由,只要子路由中有被授权的,父路由就应该显示 if (route.children) { const hasAllowedChildren = route.children.some(child => - menuKeys.includes(child.key) || - (child.children && child.children.some(grandChild => menuKeys.includes(grandChild.key))) + !child.hidden && ( + menuKeys.includes(child.key) || + (child.children && child.children.some(grandChild => + !grandChild.hidden && menuKeys.includes(grandChild.key) + )) + ) ); return hasAllowedChildren || isRouteAllowed; } @@ -56,16 +62,12 @@ export const filterRoutesByMenuKeys = (routes, menuKeys) => { return []; } return routes.reduce((acc, route) => { - // 检查当前路由的 key 是否在 menuKeys 中 const isRouteAllowed = menuKeys.includes(route.key); - // 递归处理子路由 let filteredChildren = []; if (route.children) { filteredChildren = filterRoutesByMenuKeys(route.children, menuKeys); } - - // 如果当前路由被允许或者有被允许的子路由,则保留该路由 if (isRouteAllowed || filteredChildren.length > 0) { acc.push({ ...route,