diff --git a/frontend/src/components/FAQTagTooltip.vue b/frontend/src/components/FAQTagTooltip.vue
index 72b0e0134..f649bb294 100644
--- a/frontend/src/components/FAQTagTooltip.vue
+++ b/frontend/src/components/FAQTagTooltip.vue
@@ -163,16 +163,17 @@ watch(showTooltip, (newVal) => {
.faq-tag-tooltip {
position: fixed;
z-index: 9999;
- max-width: 360px;
- min-width: 120px;
- padding: 12px 16px;
+ max-width: 320px;
+ min-width: 100px;
+ padding: 10px 14px;
background: #FFFFFF;
- color: #111827;
- border: 1px solid #E7E7E7;
- border-radius: 8px;
- box-shadow: 0 4px 16px rgba(0, 0, 0, 0.12);
+ color: #000000e6;
+ border: 1px solid #e7ebf0;
+ border-radius: 6px;
+ box-shadow: 0 0 8px 0 rgba(0, 0, 0, 0.08);
font-family: "PingFang SC";
- font-size: 13px;
+ font-size: 12px;
+ font-weight: 400;
line-height: 1.6;
word-break: break-word;
pointer-events: none;
@@ -182,206 +183,100 @@ watch(showTooltip, (newVal) => {
position: absolute;
width: 0;
height: 0;
- border: 6px solid transparent;
+ border: 5px solid transparent;
}
&.placement-top::before {
- bottom: -12px;
+ bottom: -10px;
left: 50%;
transform: translateX(-50%);
- border-top-color: #E7E7E7;
- filter: drop-shadow(0 2px 4px rgba(0, 0, 0, 0.08));
+ border-top-color: #e7ebf0;
}
&.placement-top::after {
content: '';
position: absolute;
- bottom: -11px;
+ bottom: -9px;
left: 50%;
transform: translateX(-50%);
width: 0;
height: 0;
- border: 6px solid transparent;
+ border: 5px solid transparent;
border-top-color: #FFFFFF;
}
&.placement-bottom::before {
- top: -12px;
+ top: -10px;
left: 50%;
transform: translateX(-50%);
- border-bottom-color: #E7E7E7;
- filter: drop-shadow(0 -2px 4px rgba(0, 0, 0, 0.08));
+ border-bottom-color: #e7ebf0;
}
&.placement-bottom::after {
content: '';
position: absolute;
- top: -11px;
+ top: -9px;
left: 50%;
transform: translateX(-50%);
width: 0;
height: 0;
- border: 6px solid transparent;
+ border: 5px solid transparent;
border-bottom-color: #FFFFFF;
}
&.placement-left::before {
- right: -12px;
+ right: -10px;
top: 50%;
transform: translateY(-50%);
- border-left-color: #E7E7E7;
- filter: drop-shadow(2px 0 4px rgba(0, 0, 0, 0.08));
+ border-left-color: #e7ebf0;
}
&.placement-left::after {
content: '';
position: absolute;
- right: -11px;
+ right: -9px;
top: 50%;
transform: translateY(-50%);
width: 0;
height: 0;
- border: 6px solid transparent;
+ border: 5px solid transparent;
border-left-color: #FFFFFF;
}
&.placement-right::before {
- left: -12px;
+ left: -10px;
top: 50%;
transform: translateY(-50%);
- border-right-color: #E7E7E7;
- filter: drop-shadow(-2px 0 4px rgba(0, 0, 0, 0.08));
+ border-right-color: #e7ebf0;
}
&.placement-right::after {
content: '';
position: absolute;
- left: -11px;
+ left: -9px;
top: 50%;
transform: translateY(-50%);
width: 0;
height: 0;
- border: 6px solid transparent;
+ border: 5px solid transparent;
border-right-color: #FFFFFF;
}
- &.tooltip-answer {
- border-color: #07C05F;
- background: #FFFFFF;
- box-shadow: 0 4px 16px rgba(7, 192, 95, 0.15);
-
- &::before {
- border-top-color: #07C05F;
- }
-
- &.placement-bottom::before {
- border-bottom-color: #07C05F;
- }
-
- &.placement-left::before {
- border-left-color: #07C05F;
- }
-
- &.placement-right::before {
- border-right-color: #07C05F;
- }
-
- &::after {
- border-top-color: #FFFFFF;
- }
-
- &.placement-bottom::after {
- border-bottom-color: #FFFFFF;
- }
-
- &.placement-left::after {
- border-left-color: #FFFFFF;
- }
-
- &.placement-right::after {
- border-right-color: #FFFFFF;
- }
- }
-
- &.tooltip-similar {
- border-color: #07C05F;
- background: #FFFFFF;
- box-shadow: 0 4px 16px rgba(7, 192, 95, 0.15);
-
- &::before {
- border-top-color: #07C05F;
- }
-
- &.placement-bottom::before {
- border-bottom-color: #07C05F;
- }
-
- &.placement-left::before {
- border-left-color: #07C05F;
- }
-
- &.placement-right::before {
- border-right-color: #07C05F;
- }
-
- &::after {
- border-top-color: #FFFFFF;
- }
-
- &.placement-bottom::after {
- border-bottom-color: #FFFFFF;
- }
-
- &.placement-left::after {
- border-left-color: #FFFFFF;
- }
-
- &.placement-right::after {
- border-right-color: #FFFFFF;
- }
- }
-
+ // 所有类型使用统一的常规边框颜色
+ &.tooltip-answer,
+ &.tooltip-similar,
&.tooltip-negative {
- border-color: #07C05F;
- background: #FFFFFF;
- box-shadow: 0 4px 16px rgba(7, 192, 95, 0.15);
-
- &::before {
- border-top-color: #07C05F;
- }
-
- &.placement-bottom::before {
- border-bottom-color: #07C05F;
- }
-
- &.placement-left::before {
- border-left-color: #07C05F;
- }
-
- &.placement-right::before {
- border-right-color: #07C05F;
- }
-
- &::after {
- border-top-color: #FFFFFF;
- }
-
- &.placement-bottom::after {
- border-bottom-color: #FFFFFF;
- }
-
- &.placement-left::after {
- border-left-color: #FFFFFF;
- }
-
- &.placement-right::after {
- border-right-color: #FFFFFF;
- }
+ // 边框和箭头颜色已在主样式中定义为 #e7ebf0
+ // 无需额外覆盖
}
}
.tooltip-content {
- color: #111827;
+ color: #000000e6;
+ font-family: "PingFang SC";
+ font-size: 12px;
+ font-weight: 400;
+ line-height: 1.6;
white-space: pre-wrap;
word-break: break-word;
}
diff --git a/frontend/src/views/knowledge/KnowledgeBaseList.vue b/frontend/src/views/knowledge/KnowledgeBaseList.vue
index f5c92a966..f94bda1f7 100644
--- a/frontend/src/views/knowledge/KnowledgeBaseList.vue
+++ b/frontend/src/views/knowledge/KnowledgeBaseList.vue
@@ -74,6 +74,7 @@
+
{{ kb.type === 'faq' ? $t('knowledgeEditor.basic.typeFAQ') : $t('knowledgeEditor.basic.typeDocument') }}
{{ kb.updated_at }}
@@ -294,10 +295,9 @@ const handleKBEditorSuccess = (kbId: string) => {
.create-btn {
display: flex;
align-items: center;
- gap: 6px;
- padding: 8px 20px;
- height: 36px;
- border: 1px solid transparent;
+ gap: 8px;
+ padding: 10px 24px;
+ height: 40px;
border-radius: 8px;
font-family: "PingFang SC";
font-size: 14px;
@@ -307,36 +307,50 @@ const handleKBEditorSuccess = (kbId: string) => {
.btn-icon {
flex-shrink: 0;
+ font-size: 16px;
}
}
.create-btn.primary {
background: #07c05f;
color: #fff;
- border-color: #07c05f;
+ border: none;
+ box-shadow: 0 2px 6px 0 rgba(7, 192, 95, 0.2);
&:hover {
- background: #05a04f;
- border-color: #05a04f;
+ background: #05a855;
+ box-shadow: 0 3px 8px 0 rgba(7, 192, 95, 0.28);
}
&:active {
background: #048f45;
- border-color: #048f45;
}
}
.create-btn.ghost {
- background: transparent;
+ background: #ffffff;
color: #07c05f;
- border-color: #07c05f;
+ border: 1.5px solid #d4edde;
+ box-shadow: none;
+
+ .btn-icon {
+ color: #07c05f;
+ font-weight: 600;
+ }
&:hover {
- background: #07c05f1a;
+ background: #f6fdf9;
+ border-color: #07c05f;
+ color: #059669;
+
+ .btn-icon {
+ color: #059669;
+ }
}
&:active {
- background: #07c05f33;
+ background: #ecfdf5;
+ border-color: #05a855;
}
}
@@ -388,41 +402,57 @@ const handleKBEditorSuccess = (kbId: string) => {
opacity: 0.9;
}
- // 文档类型背景图案
- &.kb-type-document::before {
- content: '';
- position: absolute;
- top: 0;
- right: 0;
- width: 100%;
- height: 100%;
- background-image: url("data:image/svg+xml,%3Csvg width='32' height='32' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M14 2H6C5.46957 2 4.96086 2.21071 4.58579 2.58579C4.21071 2.96086 4 3.46957 4 4V20C4 20.5304 4.21071 21.0391 4.58579 21.4142C4.96086 21.7893 5.46957 22 6 22H18C18.5304 22 19.0391 21.7893 19.4142 21.4142C19.7893 21.0391 20 20.5304 20 20V8L14 2Z' stroke='%2307C05F' stroke-width='1' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M14 2V8H20' stroke='%2307C05F' stroke-width='1' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
- background-repeat: repeat;
- background-size: 32px 32px;
- background-position: top right;
- opacity: 0.06;
- pointer-events: none;
- z-index: 0;
+ // 文档类型样式
+ &.kb-type-document {
+ background: linear-gradient(135deg, #ffffff 0%, #f8fcfa 100%);
+ border-color: #e8f5ed;
+
+ &:hover {
+ border-color: #07c05f;
+ background: linear-gradient(135deg, #ffffff 0%, #f0fdf4 100%);
+ }
+
+ // 右上角装饰
+ &::after {
+ content: '';
+ position: absolute;
+ top: 0;
+ right: 0;
+ width: 60px;
+ height: 60px;
+ background: linear-gradient(135deg, rgba(7, 192, 95, 0.08) 0%, transparent 100%);
+ border-radius: 0 6px 0 100%;
+ pointer-events: none;
+ z-index: 0;
+ }
}
- // 问答类型背景图案
- &.kb-type-faq::before {
- content: '';
- position: absolute;
- top: 0;
- right: 0;
- width: 100%;
- height: 100%;
- background-image: url("data:image/svg+xml,%3Csvg width='32' height='32' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22Z' stroke='%231890FF' stroke-width='1' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M9.09 9C9.3251 8.33167 9.78915 7.76811 10.4 7.40913C11.0108 7.05016 11.7289 6.91894 12.4272 7.03871C13.1255 7.15849 13.7588 7.52152 14.2151 8.06353C14.6713 8.60553 14.9211 9.29152 14.92 10C14.92 12 11.92 13 11.92 13' stroke='%231890FF' stroke-width='1' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M12 17H12.01' stroke='%231890FF' stroke-width='1' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
- background-repeat: repeat;
- background-size: 32px 32px;
- background-position: top right;
- opacity: 0.06;
- pointer-events: none;
- z-index: 0;
+ // 问答类型样式
+ &.kb-type-faq {
+ background: linear-gradient(135deg, #ffffff 0%, #f8fbff 100%);
+ border-color: #e6f0ff;
+
+ &:hover {
+ border-color: #0052d9;
+ background: linear-gradient(135deg, #ffffff 0%, #eff6ff 100%);
+ }
+
+ // 右上角装饰
+ &::after {
+ content: '';
+ position: absolute;
+ top: 0;
+ right: 0;
+ width: 60px;
+ height: 60px;
+ background: linear-gradient(135deg, rgba(0, 82, 217, 0.08) 0%, transparent 100%);
+ border-radius: 0 6px 0 100%;
+ pointer-events: none;
+ z-index: 0;
+ }
}
- // 确保内容在背景图案之上
+ // 确保内容在装饰之上
.card-header,
.card-content,
.card-bottom {
@@ -453,25 +483,29 @@ const handleKBEditorSuccess = (kbId: string) => {
.more-wrap {
display: flex;
- width: 28px;
- height: 28px;
+ width: 32px;
+ height: 32px;
justify-content: center;
align-items: center;
- border-radius: 3px;
+ border-radius: 6px;
cursor: pointer;
flex-shrink: 0;
+ transition: all 0.2s ease;
+ opacity: 0.7;
&:hover {
- background: #e7e7e7;
+ background: rgba(0, 0, 0, 0.06);
+ opacity: 1;
}
&.active-more {
- background: #e7e7e7;
+ background: rgba(0, 0, 0, 0.08);
+ opacity: 1;
}
.more-icon {
- width: 14px;
- height: 14px;
+ width: 16px;
+ height: 16px;
}
}
@@ -504,23 +538,26 @@ const handleKBEditorSuccess = (kbId: string) => {
}
.type-badge {
- display: flex;
+ display: inline-flex;
align-items: center;
- gap: 3px;
- padding: 2px 8px;
- border-radius: 3px;
+ gap: 4px;
+ padding: 3px 10px;
+ border-radius: 4px;
font-family: "PingFang SC";
font-size: 12px;
font-weight: 500;
+ line-height: 18px;
&.document {
- background: #07c05f1a;
- color: #07c05f;
+ background: rgba(7, 192, 95, 0.1);
+ color: #059669;
+ border: 1px solid rgba(7, 192, 95, 0.2);
}
&.faq {
- background: #1890ff1a;
- color: #1890ff;
+ background: rgba(0, 82, 217, 0.1);
+ color: #0052d9;
+ border: 1px solid rgba(0, 82, 217, 0.2);
}
}
@@ -674,9 +711,12 @@ const handleKBEditorSuccess = (kbId: string) => {
z-index: 99 !important;
.t-popup__content {
- padding: 4px 0 !important;
- margin-top: 4px !important;
- min-width: 120px;
+ padding: 6px 0 !important;
+ margin-top: 6px !important;
+ min-width: 140px;
+ border-radius: 6px !important;
+ box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1) !important;
+ border: 1px solid #e7ebf0 !important;
}
}
@@ -688,21 +728,29 @@ const handleKBEditorSuccess = (kbId: string) => {
.popup-menu-item {
display: flex;
align-items: center;
- padding: 8px 16px;
+ gap: 10px;
+ padding: 10px 16px;
cursor: pointer;
transition: all 0.2s ease;
color: #000000e6;
font-family: "PingFang SC";
font-size: 14px;
font-weight: 400;
+ line-height: 20px;
.menu-icon {
- margin-right: 8px;
font-size: 16px;
+ flex-shrink: 0;
+ color: #00000099;
+ transition: color 0.2s ease;
}
&:hover {
- background: #f5f5f5;
+ background: #f7f9fc;
+
+ .menu-icon {
+ color: #000000e6;
+ }
}
&.delete {
@@ -710,14 +758,14 @@ const handleKBEditorSuccess = (kbId: string) => {
&:hover {
background: #fff1f0;
- color: #FA5151;
+ color: #fa5151;
.menu-icon {
- color: #FA5151;
+ color: #fa5151;
+ }
}
}
}
-}
// 创建对话框样式优化
.create-kb-dialog {
diff --git a/frontend/src/views/knowledge/components/FAQEntryManager.vue b/frontend/src/views/knowledge/components/FAQEntryManager.vue
index 0c3c0dc1b..c5cf95899 100644
--- a/frontend/src/views/knowledge/components/FAQEntryManager.vue
+++ b/frontend/src/views/knowledge/components/FAQEntryManager.vue
@@ -2769,18 +2769,20 @@ watch(() => entries.value.map(e => ({
display: flex;
align-items: center;
justify-content: space-between;
- gap: 12px;
- padding-top: 12px;
- border-top: 1px solid #F3F4F6;
- flex-wrap: wrap;
+ gap: 8px;
+ padding: 10px 16px;
+ margin: 0 -16px -12px;
+ background: rgba(48, 50, 54, 0.02);
+ border-top: 1px solid #f5f5f5;
+ flex-wrap: nowrap;
}
.faq-card-status {
display: flex;
- flex-wrap: wrap;
- gap: 8px;
- flex: 1;
- min-width: 0;
+ align-items: center;
+ gap: 6px;
+ flex-shrink: 0;
+ margin-left: auto;
}
.status-item {
@@ -2813,16 +2815,15 @@ watch(() => entries.value.map(e => ({
display: inline-flex;
align-items: center;
gap: 6px;
- padding: 4px 8px;
- border-radius: 6px;
- background: #F9FAFB;
- border: 1px solid #EEF2F7;
+ padding: 2px 4px;
+ border-radius: 4px;
+ background: transparent;
+ border: none;
cursor: pointer;
transition: all 0.2s ease;
&:hover {
- background: #F3F4F6;
- border-color: #D1D5DB;
+ background: rgba(0, 0, 0, 0.04);
}
.status-icon {
@@ -2846,19 +2847,24 @@ watch(() => entries.value.map(e => ({
.faq-card-tag {
display: flex;
align-items: center;
- justify-content: flex-end;
- flex-shrink: 0;
+ justify-content: flex-start;
+ flex: 1;
+ min-width: 0;
:deep(.t-tag) {
display: inline-flex;
align-items: center;
cursor: pointer;
- max-width: 170px;
- border-radius: 999px;
+ max-width: 140px;
+ height: 22px;
+ border-radius: 4px;
border-color: #e5e7eb;
- color: #374151;
- padding: 0 12px;
- background: #f9fafb;
+ color: #00000066;
+ padding: 0 8px;
+ background: #3032360f;
+ font-size: 12px;
+ font-weight: 400;
+ font-family: "PingFang SC";
transition: all 0.2s ease;
&:hover {
@@ -2875,11 +2881,13 @@ watch(() => entries.value.map(e => ({
cursor: pointer;
.tag-text {
- max-width: 160px;
+ max-width: 120px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
font-size: 12px;
+ font-weight: 400;
+ color: #00000066;
}
}