diff --git a/web/src/components/ChatSidebarComponent.vue b/web/src/components/ChatSidebarComponent.vue
index f9c94bbe..78e7b6a0 100644
--- a/web/src/components/ChatSidebarComponent.vue
+++ b/web/src/components/ChatSidebarComponent.vue
@@ -36,7 +36,7 @@
:disabled="chatUIStore.creatingNewChat"
>
-
+
创建新对话
@@ -112,7 +112,7 @@ import { computed, h } from 'vue'
import { message, Modal } from 'ant-design-vue'
import {
PanelLeftClose,
- MessageSquarePlus,
+ MessageCirclePlus,
LoaderCircle,
Pin,
PinOff,
@@ -318,15 +318,15 @@ const togglePin = (chatId) => {
height: 100%;
&.sidebar-open {
- box-shadow: 4px 0 16px rgba(0, 0, 0, 0.08);
- border-right: none;
+ box-shadow: 4px 0 16px var(--dark-5);
+ border-right: 1px solid var(--gray-50);
}
}
&.sidebar-open {
width: 280px;
max-width: 300px;
- border-right: 1px solid var(--gray-200);
+ border-right: 1px solid var(--gray-150);
}
.sidebar-header {
diff --git a/web/src/components/FileDetailModal.vue b/web/src/components/FileDetailModal.vue
index f97756fd..d3d3463d 100644
--- a/web/src/components/FileDetailModal.vue
+++ b/web/src/components/FileDetailModal.vue
@@ -156,6 +156,13 @@ const downloadingMarkdown = ref(false)
const sourcePreviewLoading = ref(false)
const sourcePreviewUrl = ref('')
+const revokeSourcePreviewUrl = () => {
+ if (sourcePreviewUrl.value) {
+ window.URL.revokeObjectURL(sourcePreviewUrl.value)
+ sourcePreviewUrl.value = ''
+ }
+}
+
// 主题设置
const theme = computed(() => (themeStore.isDark ? 'dark' : 'light'))
@@ -239,13 +246,6 @@ const afterOpenChange = (open) => {
}
}
-const revokeSourcePreviewUrl = () => {
- if (sourcePreviewUrl.value) {
- window.URL.revokeObjectURL(sourcePreviewUrl.value)
- sourcePreviewUrl.value = ''
- }
-}
-
const loadSourcePreview = async () => {
if (!file.value?.file_id || !store.databaseId || !hasSourcePreview.value) return
if (sourcePreviewUrl.value) return
diff --git a/web/src/components/KnowledgeBaseCard.vue b/web/src/components/KnowledgeBaseCard.vue
index 14cea0b6..c9b8da3b 100644
--- a/web/src/components/KnowledgeBaseCard.vue
+++ b/web/src/components/KnowledgeBaseCard.vue
@@ -501,7 +501,6 @@ const deleteDatabase = () => {
.tags-section {
display: flex;
- gap: 6px;
align-items: center;
flex-wrap: wrap;
}
diff --git a/web/src/components/UserManagementComponent.vue b/web/src/components/UserManagementComponent.vue
index 94759ea8..32b8f7e9 100644
--- a/web/src/components/UserManagementComponent.vue
+++ b/web/src/components/UserManagementComponent.vue
@@ -132,7 +132,6 @@
@@ -141,23 +140,19 @@
-
+
-
- 此ID将用于登录,根据用户名自动生成
-
- 编辑模式下不能修改用户ID
+ 此ID将用于登录,根据用户名自动生成
@@ -165,7 +160,6 @@
@@ -186,7 +180,6 @@
@@ -194,7 +187,6 @@
@@ -204,11 +196,11 @@
label="角色"
class="form-item"
>
-
+
超级管理员账户无法修改角色
-
+
普通用户
管理员
@@ -218,7 +210,6 @@
import { reactive, onMounted, watch } from 'vue'
-import { notification, Modal } from 'ant-design-vue'
+import { message, Modal } from 'ant-design-vue'
import { useUserStore } from '@/stores/user'
import { departmentApi } from '@/apis'
import { Plus, Pencil, Trash2, User, UserLock, UserStar } from 'lucide-vue-next'
@@ -407,7 +398,7 @@ const handleUserFormSubmit = async () => {
try {
// 简单验证
if (!userManagement.form.username.trim()) {
- notification.error({ message: '用户名不能为空' })
+ message.error('用户名不能为空')
return
}
@@ -416,24 +407,24 @@ const handleUserFormSubmit = async () => {
userManagement.form.username.trim().length < 2 ||
userManagement.form.username.trim().length > 20
) {
- notification.error({ message: '用户名长度必须在 2-20 个字符之间' })
+ message.error('用户名长度必须在 2-20 个字符之间')
return
}
// 验证手机号
if (userManagement.form.phoneNumber && !validatePhoneNumber(userManagement.form.phoneNumber)) {
- notification.error({ message: '请输入正确的手机号格式' })
+ message.error('请输入正确的手机号格式')
return
}
if (userManagement.displayPasswordFields) {
if (!userManagement.form.password) {
- notification.error({ message: '密码不能为空' })
+ message.error('密码不能为空')
return
}
if (userManagement.form.password !== userManagement.form.confirmPassword) {
- notification.error({ message: '两次输入的密码不一致' })
+ message.error('两次输入的密码不一致')
return
}
}
@@ -464,7 +455,7 @@ const handleUserFormSubmit = async () => {
}
await userStore.updateUser(userManagement.editUserId, updateData)
- notification.success({ message: '用户更新成功' })
+ message.success('用户更新成功')
} else {
// 创建新用户
const createData = {
@@ -484,7 +475,7 @@ const handleUserFormSubmit = async () => {
}
await userStore.createUser(createData)
- notification.success({ message: '用户创建成功' })
+ message.success('用户创建成功')
}
// 重新获取用户列表
@@ -492,10 +483,7 @@ const handleUserFormSubmit = async () => {
userManagement.modalVisible = false
} catch (error) {
console.error('用户操作失败:', error)
- notification.error({
- message: '操作失败',
- description: error.message || '请稍后重试'
- })
+ message.error(error.message || '操作失败,请稍后重试')
} finally {
userManagement.loading = false
}
@@ -505,7 +493,7 @@ const handleUserFormSubmit = async () => {
const confirmDeleteUser = (user) => {
// 自己不能删除自己
if (user.id === userStore.userId) {
- notification.error({ message: '不能删除自己的账户' })
+ message.error('不能删除自己的账户')
return
}
@@ -520,15 +508,12 @@ const confirmDeleteUser = (user) => {
try {
userManagement.loading = true
await userStore.deleteUser(user.id)
- notification.success({ message: '用户删除成功' })
+ message.success('用户删除成功')
// 重新获取用户列表
await fetchUsers()
} catch (error) {
console.error('删除用户失败:', error)
- notification.error({
- message: '删除失败',
- description: error.message || '请稍后重试'
- })
+ message.error(error.message || '删除失败,请稍后重试')
} finally {
userManagement.loading = false
}
@@ -776,30 +761,31 @@ onMounted(async () => {
.user-modal {
:deep(.ant-modal-header) {
- padding: 20px 24px;
+ padding: 20px 24px 16px;
border-bottom: 1px solid var(--gray-150);
.ant-modal-title {
- font-size: 16px;
+ font-size: 17px;
font-weight: 600;
color: var(--gray-900);
}
}
:deep(.ant-modal-body) {
- padding: 24px;
+ padding: 20px 24px 24px;
}
.user-form {
.form-item {
- margin-bottom: 20px;
+ margin-bottom: 16px;
:deep(.ant-form-item-label) {
- padding-bottom: 4px;
+ padding-bottom: 6px;
label {
- font-weight: 500;
- color: var(--gray-900);
+ font-weight: 600;
+ font-size: 13px;
+ color: var(--gray-800);
}
}
}
@@ -820,10 +806,15 @@ onMounted(async () => {
.password-toggle {
margin-bottom: 16px;
+ padding: 12px 16px;
+ background: var(--gray-25);
+ border-radius: 8px;
+ border: 1px solid var(--gray-100);
:deep(.ant-checkbox-wrapper) {
font-weight: 500;
- color: var(--gray-600);
+ color: var(--gray-700);
+ font-size: 13px;
}
}
}