diff --git a/web/src/components/AgentChatComponent.vue b/web/src/components/AgentChatComponent.vue
index 2f8c4ac0..07902024 100644
--- a/web/src/components/AgentChatComponent.vue
+++ b/web/src/components/AgentChatComponent.vue
@@ -343,9 +343,12 @@ const onGoingConvMessages = computed(() => {
: [];
});
+const historyConversations = computed(() => {
+ return MessageProcessor.convertServerHistoryToMessages(currentThreadMessages.value);
+});
+
const conversations = computed(() => {
- const historyConvs = MessageProcessor.convertServerHistoryToMessages(currentThreadMessages.value);
- const threadState = currentThreadState.value;
+ const historyConvs = historyConversations.value;
// 如果有进行中的消息且线程状态显示正在流式处理,添加进行中的对话
if (onGoingConvMessages.value.length > 0) {
@@ -369,7 +372,6 @@ const isMediumContainer = computed(() => localUIState.containerWidth <= 768);
// ==================== SCROLL & RESIZE HANDLING ====================
const chatContainerRef = ref(null);
-const messageInputRef = ref(null);
const scrollController = new ScrollController('.chat');
let resizeObserver = null;
diff --git a/web/src/components/BasicSettingsSection.vue b/web/src/components/BasicSettingsSection.vue
new file mode 100644
index 00000000..b88a31b5
--- /dev/null
+++ b/web/src/components/BasicSettingsSection.vue
@@ -0,0 +1,349 @@
+
+
+
检索配置
+
+
+ {{ items?.default_model?.des || '默认对话模型' }}
+
+
+
+ {{ items?.fast_model.des }}
+
+
+
+ {{ items?.embed_model.des }}
+
+
+
+
{{ items?.reranker.des }}
+
+ {{ name }}
+
+
+
+
+
+
内容审查配置
+
+
+
{{ items?.enable_content_guard.des }}
+
+
+
+
{{ items?.enable_content_guard_llm.des }}
+
+
+
+ {{ items?.content_guard_llm_model.des }}
+
+
+
+
+
+
+
服务链接
+
快速访问系统相关的外部服务,需要将 localhost 替换为实际的 IP 地址。
+
+
+
+
+
+
API 接口文档
+
系统接口文档和调试工具
+
+
+ 访问
+
+
+
+
+
+
MinIO 对象存储
+
文件存储管理控制台
+
+
+ 访问
+
+
+
+
+
+
Milvus WebUI
+
向量数据库管理界面
+
+
+ 访问
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/web/src/components/ModelProvidersComponent.vue b/web/src/components/ModelProvidersComponent.vue
index b648b45f..709f0145 100644
--- a/web/src/components/ModelProvidersComponent.vue
+++ b/web/src/components/ModelProvidersComponent.vue
@@ -108,23 +108,12 @@
@@ -784,20 +773,6 @@ const testCustomProvider = async (providerId, modelName) => {
.custom-providers-section {
margin-bottom: 24px;
- .section-header {
- display: flex;
- justify-content: space-between;
- align-items: center;
- margin-bottom: 12px;
-
- h3 {
- margin: 0;
- font-size: 18px;
- font-weight: 600;
- color: var(--gray-900);
- }
- }
-
.section-description {
margin: 0 0 16px 0;
color: var(--gray-600);
@@ -850,13 +825,7 @@ const testCustomProvider = async (providerId, modelName) => {
.provider-actions {
display: flex;
- gap: 8px;
-
- .ant-btn {
- display: flex;
- align-items: center;
- gap: 4px;
- }
+ gap: 0px;
}
}
@@ -898,19 +867,23 @@ const testCustomProvider = async (providerId, modelName) => {
}
}
+
+.section-header {
+ display: flex;
+ justify-content: space-between;
+ align-items: center;
+ margin-bottom: 12px;
+
+ h3 {
+ margin: 0;
+ font-size: 16px;
+ font-weight: 600;
+ color: var(--gray-900);
+ }
+}
+
.builtin-providers-section {
.section-header {
- display: flex;
- justify-content: space-between;
- align-items: center;
- margin-bottom: 16px;
-
- h3 {
- margin: 0;
- font-size: 18px;
- font-weight: 600;
- color: var(--gray-900);
- }
.providers-stats {
display: flex;
@@ -923,13 +896,13 @@ const testCustomProvider = async (providerId, modelName) => {
font-size: 12px;
&.available {
- background: rgba(34, 197, 94, 0.1);
- color: #16a34a;
+ background: var(--color-success-50);
+ color: var(--color-success-700);
}
&.unavailable {
- background: rgba(249, 115, 22, 0.1);
- color: #ea580c;
+ background: var(--color-warning-50);
+ color: var(--color-warning-700);
}
}
}
@@ -1007,13 +980,13 @@ const testCustomProvider = async (providerId, modelName) => {
& > span {
margin-left: 6px;
user-select: all;
- background-color: rgba(251, 146, 60, 0.15);
- color: #d97706;
+ background-color: var(--color-warning-50);
+ color: var(--color-warning-700);
padding: 3px 8px;
border-radius: 6px;
font-weight: 600;
font-size: 11px;
- border: 1px solid rgba(251, 146, 60, 0.2);
+ border: 1px solid var(--color-warning-100);
}
}
}
@@ -1027,14 +1000,9 @@ const testCustomProvider = async (providerId, modelName) => {
background: var(--gray-0);
transition: all 0.3s ease;
- &:hover {
- background: var(--gray-50);
- }
-
.model-title-container {
display: flex;
flex-direction: column;
- gap: 4px;
flex: 1;
h3 {
@@ -1056,8 +1024,8 @@ const testCustomProvider = async (providerId, modelName) => {
}
.provider-id {
- background: var(--gray-100);
- color: var(--gray-600);
+ background: var(--gray-50);
+ color: var(--gray-900);
padding: 2px 6px;
border-radius: 4px;
font-size: 11px;
@@ -1095,7 +1063,7 @@ const testCustomProvider = async (providerId, modelName) => {
filter: grayscale(100%);
transition: filter 0.2s ease;
flex-shrink: 0;
- background-color: white;
+ background-color: white; /* 确保图标背景为白色 */
border: 1px solid var(--gray-200);
img {
@@ -1161,13 +1129,13 @@ const testCustomProvider = async (providerId, modelName) => {
& > span {
margin-left: 6px;
user-select: all;
- background-color: rgba(251, 146, 60, 0.15);
- color: #d97706;
+ background-color: var(--color-warning-50);
+ color: var(--color-warning-700);
padding: 3px 8px;
border-radius: 6px;
font-weight: 600;
font-size: 11px;
- border: 1px solid rgba(251, 146, 60, 0.2);
+ border: 1px solid var(--color-warning-100);
}
}
@@ -1215,7 +1183,6 @@ const testCustomProvider = async (providerId, modelName) => {
grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
gap: 12px;
padding: 16px;
- background: var(--gray-10);
// 普通模型卡片样式
.card-models {
diff --git a/web/src/components/SettingsModal.vue b/web/src/components/SettingsModal.vue
new file mode 100644
index 00000000..b0dd777d
--- /dev/null
+++ b/web/src/components/SettingsModal.vue
@@ -0,0 +1,313 @@
+
+
+
+
+
+
+
+ 基本设置
+
+
+
+ 模型配置
+
+
+
+ 用户管理
+
+
+
+
+
+
+ 基本设置
+
+
+ 模型配置
+
+
+ 用户管理
+
+
+
+
+
+
+
+
+
+
+
+
模型配置
+
请在 .env 文件中配置对应的 APIKEY,并重新启动服务
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/web/src/components/UserInfoComponent.vue b/web/src/components/UserInfoComponent.vue
index 9f7158af..7f5cb99e 100644
--- a/web/src/components/UserInfoComponent.vue
+++ b/web/src/components/UserInfoComponent.vue
@@ -158,7 +158,7 @@
@@ -195,7 +209,6 @@ const mainList = [{
@@ -218,6 +231,10 @@ const mainList = [{
+ showSettingsModal = false"
+ />
diff --git a/web/src/router/index.js b/web/src/router/index.js
index 3955d2bc..58828ab0 100644
--- a/web/src/router/index.js
+++ b/web/src/router/index.js
@@ -77,20 +77,7 @@ const router = createRouter({
}
]
},
- {
- path: '/setting',
- name: 'setting',
- component: AppLayout,
- children: [
- {
- path: '',
- name: 'SettingComp',
- component: () => import('../views/SettingView.vue'),
- meta: { keepAlive: true, requiresAuth: true, requiresAdmin: true }
- }
- ]
- },
- {
+ {
path: '/dashboard',
name: 'dashboard',
component: AppLayout,
diff --git a/web/src/views/GraphView.vue b/web/src/views/GraphView.vue
index 32c5b6e7..03507e80 100644
--- a/web/src/views/GraphView.vue
+++ b/web/src/views/GraphView.vue
@@ -3,7 +3,7 @@