+
+
-
-
-
-
-
+
+
- {{ userInfo?.nickname }}
- {{ userLevelName }}
-
-
-
+
-
-
-
-
+
-
-
+
+
+ {{ userInfo?.nickname?.charAt(0) || 'U' }}
+
+ {{ userInfo?.nickname }}
+
+
-
-
-
-
-
-
-
-
-
-
- 登录
- 注册
-
-
-
-
-
-
- {{ userInfo?.nickname }}
- {{
- userLevelName
- }}
-
-
-
-
-
+
@@ -151,33 +93,31 @@ const handleLogout = () => {
diff --git a/src/views/AIAgentView.vue b/src/views/AIAgentView.vue
index b0c9a2f..c0091ce 100644
--- a/src/views/AIAgentView.vue
+++ b/src/views/AIAgentView.vue
@@ -1,8 +1,18 @@
@@ -328,17 +366,55 @@ const renderMarkdown = (content: string): string => {
+
+ 登录
+ 注册
+
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
@@ -442,11 +433,11 @@ const renderMarkdown = (content: string): string => {
.ai-agent-view {
width: 100%;
height: calc(100vh - var(--header-height));
- padding: 2rem 0;
position: relative;
display: flex;
flex-direction: column;
overflow: hidden;
+ background-color: #343541;
}
/* 访问限制提示样式 */
@@ -575,73 +566,11 @@ const renderMarkdown = (content: string): string => {
.main-container {
display: flex;
width: 100%;
- height: calc(100% - 4rem);
+ height: 100%;
min-height: 0;
- background-color: var(--color-bg-card);
- border-radius: var(--border-radius);
+ background-color: #343541;
overflow: hidden;
- border: 1px solid var(--color-border);
- margin: 0 auto;
-}
-
-.agent-sidebar {
- width: 280px;
- border-right: 1px solid var(--color-border);
- background-color: var(--color-bg-elevated);
- display: flex;
- flex-direction: column;
-}
-
-.agent-list {
- padding: 1rem;
- display: flex;
- flex-direction: column;
- gap: 0.5rem;
-}
-
-.agent-item {
- display: flex;
- align-items: flex-start;
- gap: 0.75rem;
- padding: 1rem;
- border-radius: var(--border-radius);
- cursor: pointer;
- transition: all 0.2s ease;
- border: 1px solid var(--color-border);
- background-color: var(--color-bg-card);
-}
-
-.agent-item:hover {
- border-color: var(--color-border-hover);
- transform: translateY(-1px);
-}
-
-.agent-item-active {
- border-color: var(--color-accent);
- background-color: var(--color-bg-elevated);
-}
-
-.agent-icon {
- font-size: 1.75rem;
- line-height: 1;
-}
-
-.agent-info {
- flex: 1;
- min-width: 0;
-}
-
-.agent-name {
- font-weight: var(--font-weight-medium);
- color: var(--color-text-primary);
- margin-bottom: 0.5rem;
- font-size: 1.1rem;
-}
-
-.agent-description {
- font-size: 0.9rem;
- color: var(--color-text-secondary);
- line-height: 1.5;
+ position: relative;
}
.chat-container {
@@ -650,435 +579,410 @@ const renderMarkdown = (content: string): string => {
flex-direction: column;
min-width: 0;
min-height: 0;
+ background-color: #343541;
}
-.chat-header {
- padding: 1rem 1.5rem;
- border-bottom: 1px solid var(--color-border);
- display: flex;
- align-items: center;
-}
-
-.current-agent {
- display: flex;
- align-items: center;
- gap: 0.5rem;
-}
-
-.current-agent .agent-icon {
- font-size: 1.2rem;
-}
-
-.current-agent .agent-name {
- font-size: 1.1rem;
- font-weight: var(--font-weight-medium);
-}
-
-.chat-messages {
- flex: 1;
- overflow-y: auto;
- padding: 1.5rem;
+.chat-window {
display: flex;
flex-direction: column;
- gap: 1rem;
- min-height: 0;
+ height: 100%;
+ background-color: var(--color-bg-primary);
+ max-width: 900px;
+ margin: 0 auto;
+ box-sizing: border-box;
+ width: 100%;
}
-/* 自定义滚动条样式 - 深色系 */
-.chat-messages::-webkit-scrollbar {
- width: 8px;
+.messages-container {
+ flex: 1;
+ overflow-y: auto;
+ padding: 2rem 0.5rem;
+ scroll-behavior: smooth;
+ display: flex;
+ flex-direction: column;
+ align-items: center;
}
-.chat-messages::-webkit-scrollbar-track {
- background: rgba(0, 0, 0, 0.1);
- border-radius: 4px;
-}
-
-.chat-messages::-webkit-scrollbar-thumb {
- background: rgba(0, 0, 0, 0.4);
- border-radius: 4px;
-}
-
-.chat-messages::-webkit-scrollbar-thumb:hover {
- background: rgba(0, 0, 0, 0.6);
-}
-
-.message {
- max-width: 80%;
- padding: 1rem;
- border-radius: var(--border-radius);
- position: relative;
+.message-wrapper {
+ margin: 0.5rem 0;
+ display: flex;
+ width: 100%;
}
.user-message {
- align-self: flex-end;
- background-color: #3355ff;
- color: #ffffff;
- font-weight: 500;
+ justify-content: flex-end;
+ width: 100%;
+ display: flex;
}
.ai-message {
- align-self: flex-start;
- background-color: var(--color-bg-primary);
- border: 1px solid var(--color-border);
-}
-
-.message-content p {
- margin-bottom: 0.5rem;
-}
-
-.message-content p:last-child {
- margin-bottom: 0;
-}
-
-.chat-input {
+ justify-content: flex-start;
+ width: 100%;
display: flex;
- padding: 1rem 1.5rem;
- border-top: 1px solid var(--color-border);
}
-.input-field {
- flex: 1;
- padding: 0.8rem 1rem;
- border-radius: var(--border-radius);
- border: 1px solid var(--color-border);
+.message {
+ display: flex;
+ padding: 0;
+}
+
+.message-content {
+ display: inline-block;
+ max-width: 800px;
+ min-width: 4em;
+ padding: 1rem;
+ border-radius: 0.75rem;
+ word-break: break-word;
+ overflow-wrap: break-word;
+ white-space: pre-wrap;
+ box-sizing: border-box;
+ background-clip: padding-box;
+ overflow: hidden;
+}
+
+.user-message .message-content {
+ background-color: #2563eb;
+ color: white;
+ border-radius: 1rem 1rem 0 1rem;
+}
+
+.ai-message .message-content {
+ background-color: #1f2937;
+ color: var(--color-text-primary);
+ border-radius: 1rem 1rem 1rem 0;
+}
+
+.message-text {
+ font-size: 1rem;
+ line-height: 1.6;
+ white-space: pre-wrap;
+ word-break: break-word;
+}
+
+.message-text :deep(ul),
+.message-text :deep(ol) {
+ margin: 0.5em 0;
+ padding-left: 0;
+ list-style-position: inside;
+ width: 100%;
+ box-sizing: border-box;
+}
+
+.message-text :deep(li) {
+ margin: 0.25em 0;
+ padding-left: 0;
+ text-indent: 0;
+ list-style-position: inside;
+}
+
+.message-text :deep(li > p) {
+ display: inline;
+ margin: 0;
+}
+
+.input-container {
+ padding: 1.5rem 2rem;
background-color: var(--color-bg-primary);
+ border-top: 1px solid var(--color-divider);
+}
+
+.input-wrapper {
+ /* max-width: 48rem; */
+ margin: 0 auto;
+ position: relative;
+ display: flex;
+ align-items: flex-end;
+ gap: 0.5rem;
+}
+
+.message-input {
+ flex: 1;
+ height: 3.5rem;
+ min-height: 2.5rem;
+ max-height: 8rem;
+ padding: 0.75rem 1rem;
+ padding-right: 3rem;
+ background-color: var(--color-bg-elevated);
+ border: 1px solid var(--color-border);
+ border-radius: var(--border-radius);
color: var(--color-text-primary);
font-size: 1rem;
+ line-height: 1rem;
+ resize: none;
+ outline: none;
+ transition: border-color 0.2s ease;
+ text-align: left;
+ overflow-y: auto;
}
-.input-field:focus {
+.message-input::placeholder {
+ color: var(--color-text-secondary);
+ opacity: 1;
+ line-height: 1rem;
+ text-align: left;
+}
+
+.message-input:focus {
border-color: var(--color-accent);
- box-shadow: 0 0 0 2px var(--color-accent-light);
- outline: none;
+}
+
+.message-input:disabled {
+ opacity: 0.7;
+ cursor: not-allowed;
}
.send-button {
- background-color: #3355ff;
- color: #ffffff;
+ position: absolute;
+ right: 0.75rem;
+ bottom: 0.75rem;
+ width: 2rem;
+ height: 2rem;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ background-color: var(--color-accent);
border: none;
- border-radius: var(--border-radius);
- padding: 0 1.2rem;
- margin-left: 0.8rem;
- font-weight: var(--font-weight-bold);
+ border-radius: 50%;
+ color: white;
cursor: pointer;
transition: background-color 0.2s ease;
}
-.send-button:hover {
- background-color: #2233cc;
+.send-button:hover:not(:disabled) {
+ background-color: var(--color-accent-hover);
}
.send-button:disabled {
- background-color: #8899dd;
+ opacity: 0.7;
cursor: not-allowed;
}
-.message-files {
- margin-top: 1rem;
- display: flex;
- flex-direction: column;
- gap: 1rem;
+.send-icon {
+ font-size: 1rem;
+ transform: rotate(270deg);
}
-.message-image {
- max-width: 100%;
- border-radius: var(--border-radius);
- border: 1px solid var(--color-border);
-}
-
-.thought-message {
- align-self: flex-start;
- background-color: var(--color-bg-elevated);
- border: 1px solid var(--color-border);
- font-size: 0.9rem;
-}
-
-.thought-content {
- display: flex;
- flex-direction: column;
- gap: 0.5rem;
-}
-
-.thought-item {
- display: flex;
- gap: 0.5rem;
-}
-
-.thought-label {
- color: var(--color-text-secondary);
- font-weight: var(--font-weight-medium);
- min-width: 3rem;
-}
-
-.thought-text {
- color: var(--color-text-primary);
- word-break: break-all;
-}
-
-.agent-loading {
- padding: 1rem;
- text-align: center;
- color: var(--color-text-secondary);
-}
-
-.tools-list {
- margin-bottom: 0.8rem;
- color: var(--color-text-secondary);
- font-size: 0.9rem;
- border-bottom: 1px solid var(--color-border);
- padding-bottom: 0.8rem;
-}
-
-.tools-list p {
- margin-bottom: 0.3rem;
-}
-
-.markdown-content {
- line-height: 1.7;
+:deep(.markdown-body) {
+ color: inherit;
+ font-size: 1rem;
+ line-height: 1.6;
+ width: 100%;
overflow-wrap: break-word;
- word-wrap: break-word;
word-break: break-word;
}
-.markdown-content :deep(h1),
-.markdown-content :deep(h2),
-.markdown-content :deep(h3),
-.markdown-content :deep(h4) {
- margin-top: 1.5rem;
- margin-bottom: 1rem;
- font-weight: 600;
- border-bottom: 1px solid rgba(255, 255, 255, 0.1);
- padding-bottom: 0.3rem;
-}
-
-.markdown-content :deep(h1) {
- font-size: 1.8rem;
-}
-
-.markdown-content :deep(h2) {
- font-size: 1.5rem;
-}
-
-.markdown-content :deep(h3) {
- font-size: 1.2rem;
-}
-
-.markdown-content :deep(p) {
- margin-bottom: 1.2rem;
-}
-
-.markdown-content :deep(ul),
-.markdown-content :deep(ol) {
- padding-left: 1.8rem;
- margin-bottom: 1.2rem;
-}
-
-.markdown-content :deep(li) {
- margin-bottom: 0.5rem;
-}
-
-.markdown-content :deep(code) {
- background-color: rgba(255, 255, 255, 0.1);
- padding: 0.2rem 0.4rem;
- border-radius: 4px;
- font-family: 'Consolas', 'Monaco', 'Courier New', monospace;
- color: #ff9955;
-}
-
-.markdown-content :deep(pre) {
- background-color: rgba(0, 0, 0, 0.3);
+:deep(.markdown-body pre) {
+ background-color: rgba(0, 0, 0, 0.2);
+ border-radius: 0.5rem;
padding: 1rem;
- border-radius: 4px;
- overflow-x: auto;
margin: 1rem 0;
- border: 1px solid rgba(255, 255, 255, 0.1);
+ overflow-x: auto;
}
-.markdown-content :deep(pre code) {
+:deep(.markdown-body code) {
+ background-color: rgba(0, 0, 0, 0.2);
+ padding: 0.2em 0.4em;
+ border-radius: 0.25rem;
+ font-family: monospace;
+ font-size: 0.9em;
+}
+
+:deep(.markdown-body pre code) {
background-color: transparent;
padding: 0;
- color: #dddddd;
}
-.markdown-content :deep(blockquote) {
- border-left: 4px solid #3355ff;
- padding-left: 1rem;
- margin-left: 0;
- margin-right: 0;
- font-style: italic;
- color: rgba(255, 255, 255, 0.7);
-}
-
-.markdown-content :deep(table) {
+:deep(.markdown-body p) {
+ margin: 0.5em 0;
+ overflow-wrap: break-word;
+ word-break: break-word;
width: 100%;
- border-collapse: collapse;
- margin: 1rem 0;
- display: block;
- overflow-x: auto;
+ box-sizing: border-box;
}
-.markdown-content :deep(table th),
-.markdown-content :deep(table td) {
- border: 1px solid rgba(255, 255, 255, 0.2);
+:deep(.markdown-body blockquote) {
+ border-left: 4px solid var(--color-accent);
+ margin: 0.5rem 0;
+ padding: 0.5rem 1rem;
+ background-color: rgba(0, 0, 0, 0.2);
+ border-radius: 0 0.25rem 0.25rem 0;
+}
+
+:deep(.markdown-body table) {
+ border-collapse: collapse;
+ width: 100%;
+ margin: 0.5rem 0;
+}
+
+:deep(.markdown-body th),
+:deep(.markdown-body td) {
+ border: 1px solid var(--color-border);
padding: 0.5rem;
text-align: left;
}
-.markdown-content :deep(table th) {
- background-color: rgba(255, 255, 255, 0.1);
+:deep(.markdown-body th) {
+ background-color: rgba(0, 0, 0, 0.2);
}
-.markdown-content :deep(hr) {
- border: none;
- border-top: 1px solid rgba(255, 255, 255, 0.2);
- margin: 1.5rem 0;
+:deep(.markdown-body img) {
+ max-width: 100%;
+ height: auto;
+ border-radius: 0.5rem;
}
-.markdown-content :deep(a) {
- color: #66aaff;
+:deep(.markdown-body a) {
+ color: var(--color-accent);
text-decoration: none;
}
-.markdown-content :deep(a:hover) {
+:deep(.markdown-body a:hover) {
text-decoration: underline;
}
-.markdown-content :deep(img) {
- max-width: 100%;
- border-radius: 4px;
- margin: 1rem 0;
+/* 添加新的 Agent 选择器样式 */
+.agent-selector {
+ position: absolute;
+ top: 1rem;
+ right: 1rem;
+ z-index: 10;
}
-.markdown-content :deep(strong) {
- font-weight: 600;
+.agent-selector-button {
+ display: flex;
+ align-items: center;
+ gap: 0.5rem;
+ padding: 0.5rem 1rem;
+ background-color: var(--color-bg-elevated);
+ border: 1px solid var(--color-border);
+ border-radius: var(--border-radius);
+ color: var(--color-text-primary);
+ cursor: pointer;
+ transition: all 0.2s ease;
}
-.markdown-content :deep(em) {
- font-style: italic;
+.agent-selector-button:hover {
+ background-color: var(--color-bg-secondary);
}
+.agent-selector-menu {
+ position: absolute;
+ top: 100%;
+ right: 0;
+ margin-top: 0.5rem;
+ background-color: var(--color-bg-elevated);
+ border: 1px solid var(--color-border);
+ border-radius: var(--border-radius);
+ min-width: 200px;
+ max-width: 300px;
+ overflow: hidden;
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.2);
+}
+
+.agent-menu-item {
+ display: flex;
+ align-items: center;
+ gap: 0.75rem;
+ padding: 0.75rem 1rem;
+ cursor: pointer;
+ transition: all 0.2s ease;
+ border-bottom: 1px solid var(--color-border);
+}
+
+.agent-menu-item:last-child {
+ border-bottom: none;
+}
+
+.agent-menu-item:hover {
+ background-color: var(--color-bg-secondary);
+}
+
+.agent-menu-item.active {
+ background-color: var(--color-bg-secondary);
+}
+
+.agent-menu-item .agent-icon {
+ font-size: 1.25rem;
+}
+
+.agent-menu-item .agent-info {
+ flex: 1;
+ min-width: 0;
+}
+
+.agent-menu-item .agent-name {
+ font-weight: 500;
+ color: var(--color-text-primary);
+ margin-bottom: 0.25rem;
+}
+
+.agent-menu-item .agent-description {
+ font-size: 0.75rem;
+ color: var(--color-text-secondary);
+ line-height: 1.4;
+}
+
+/* 移动端适配 */
@media (max-width: 768px) {
- .main-container {
- flex-direction: column;
- height: 100%;
+ .agent-selector {
+ top: 0.5rem;
+ right: 0.5rem;
}
- .agent-sidebar {
- width: 100%;
- border-right: none;
- border-bottom: 1px solid var(--color-border);
- max-height: 60px;
- }
-
- .agent-list {
- padding: 0.5rem;
- display: flex;
- flex-direction: row;
- gap: 0.5rem;
- overflow-x: auto;
- }
-
- .agent-item {
- padding: 0.5rem;
- min-width: 120px;
- flex-shrink: 0;
- display: flex;
- align-items: center;
- gap: 0.5rem;
- }
-
- .agent-icon {
- font-size: 1.2rem;
- }
-
- .agent-info {
- min-width: 0;
- }
-
- .agent-name {
- font-size: 0.9rem;
- margin-bottom: 0;
- white-space: nowrap;
- overflow: hidden;
- text-overflow: ellipsis;
- }
-
- .agent-description {
- display: none;
- }
-
- .markdown-content :deep(h1) {
- font-size: 1.5rem;
- }
-
- .markdown-content :deep(h2) {
- font-size: 1.3rem;
- }
-
- .markdown-content :deep(h3) {
- font-size: 1.1rem;
- }
-
- .markdown-content :deep(pre) {
- padding: 0.8rem;
+ .agent-selector-menu {
+ max-width: calc(100vw - 2rem);
}
}
@media (max-width: 480px) {
- .agent-sidebar {
+ .agent-selector {
max-height: 50px;
}
- .agent-list {
- padding: 0.4rem;
- gap: 0.4rem;
- }
-
- .agent-item {
+ .agent-menu-item {
padding: 0.4rem;
min-width: 100px;
}
- .agent-icon {
- font-size: 1.1rem;
- }
-
.agent-name {
- font-size: 0.85rem;
+ font-size: 0.8rem;
}
- .markdown-content :deep(h1) {
- font-size: 1.3rem;
+ .message {
+ padding: 0.75rem;
}
- .markdown-content :deep(h2) {
- font-size: 1.2rem;
- }
-
- .markdown-content :deep(h3) {
- font-size: 1rem;
- }
-
- .markdown-content :deep(p) {
+ .input-field {
font-size: 0.9rem;
- }
-
- .markdown-content :deep(ul),
- .markdown-content :deep(ol) {
- padding-left: 1.2rem;
- }
-
- .markdown-content :deep(li) {
- font-size: 0.9rem;
- }
-
- .markdown-content :deep(pre) {
- padding: 0.6rem;
- }
-
- .markdown-content :deep(code) {
- font-size: 0.85rem;
+ padding: 0.75rem;
}
}
+
+.message-content {
+ overflow: auto;
+ word-break: break-all;
+}
+
+.message-content pre,
+.message-content table {
+ max-width: 100%;
+ overflow-x: auto;
+ word-break: break-all;
+}
+
+.message-content ul,
+.message-content ol {
+ margin: 0.5em 0;
+ padding-left: 1.5em;
+ box-sizing: border-box;
+ max-width: 100%;
+ overflow-wrap: break-word;
+ word-break: break-word;
+}
+
+.message-content li {
+ margin: 0.25em 0;
+ word-break: break-word;
+ overflow-wrap: break-word;
+}
diff --git a/src/views/HomeView.vue b/src/views/HomeView.vue
index a372a48..accb305 100644
--- a/src/views/HomeView.vue
+++ b/src/views/HomeView.vue
@@ -4,16 +4,7 @@ import { useUserStore } from '../stores/user'
import { useRouter } from 'vue-router'
const userStore = useUserStore()
-const router = useRouter()
const isAuthenticated = computed(() => userStore.isAuthenticated)
-
-const goToAIAgent = () => {
- router.push('/ai-agent')
-}
-
-const goToAIFeed = () => {
- router.push('/ai-feed')
-}
@@ -23,63 +14,10 @@ const goToAIFeed = () => {
加载中...
{{ agent.icon }}
@@ -349,91 +425,6 @@ const renderMarkdown = (content: string): string => {
-
-
-
-
- {{ selectedAgent.icon }}
- {{ selectedAgent.name }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 思考:
- {{ message.thought.thought }}
-
-
- 观察:
- {{ message.thought.observation }}
-
-
- 工具:
- {{ message.thought.tool }}
-
-
- 输入:
- {{ message.thought.tool_input }}
-
- - {{ line }} -
- - -
-
-
-
- - {{ toolIndex + 1 }}.已使用 {{ tool }} -
-
-
-
-
-
-
-
-
-
-
- AI Agent for Web3
立刻加入,开启 Web3 + AI 新时代
-
-
- 登录
- 注册
+
+ 登录
+ 注册
@@ -96,41 +34,25 @@ const goToAIFeed = () => {
-
-
-
-
-
-
-
-
- Crypto.AI
+
+
-
-