|
@@ -31,7 +31,7 @@
|
|
|
</div>
|
|
|
<div class="user-info" v-if="!isMobile" @click="toggleDropdown">
|
|
|
<div class="user-name">商户名称:{{ userInfo.merchant_name || '未登录用户' }}</div>
|
|
|
- <div class="user-name">当前用户:{{ userInfo.username || '未登录用户' }}</div>
|
|
|
+ <div class="user-name" style="margin-left: 10px;">当前用户:{{ userInfo.username || '未登录用户' }}</div>
|
|
|
<!-- <div class="user-role">{{ userInfo.role || '未设置角色' }}</div> -->
|
|
|
</div>
|
|
|
<div class="avatar" @click="toggleDropdown">
|
|
@@ -104,6 +104,13 @@
|
|
|
</div>
|
|
|
|
|
|
<div class="chat">
|
|
|
+ <div class="chat-header">
|
|
|
+ <h2>智能运维助手</h2>
|
|
|
+ <div class="chat-status">
|
|
|
+ <span class="status-indicator online"></span>
|
|
|
+ <span>在线</span>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
<!-- 欢迎消息 -->
|
|
|
<div v-if="messages.length === 0" class="welcome-section">
|
|
|
<!-- Do you want 部分 -->
|
|
@@ -564,6 +571,14 @@
|
|
|
>
|
|
|
<div v-if="inferenceModel">
|
|
|
<div style="height: 91vh;overflow: auto;" class="file-list">
|
|
|
+ <!-- <div class="panel-header">
|
|
|
+ <h3>查询结果</h3>
|
|
|
+ <button class="panel-toggle">
|
|
|
+ <svg width="16" height="16" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
|
+ <polyline points="6,9 12,15 18,9" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
|
|
+ </svg>
|
|
|
+ </button>
|
|
|
+ </div> -->
|
|
|
<!-- 步骤显示区域 -->
|
|
|
<div id="stepsContainer" v-show="showSteps" class="steps-container">
|
|
|
<h3 class="steps-title">📋 处理步骤</h3>
|
|
@@ -951,11 +966,13 @@ const createStepElement = (step) => {
|
|
|
const stepEl = document.createElement('div');
|
|
|
stepEl.className = `step ${step.status}`;
|
|
|
stepEl.id = `step-${step.step_id}`;
|
|
|
-
|
|
|
+ /* <div class="step-icon">${getStepIcon(step.status)}</div> */
|
|
|
stepEl.innerHTML = `
|
|
|
<div class="step-header">
|
|
|
- <div class="step-icon">${getStepIcon(step.status)}</div>
|
|
|
- <div class="step-name">${step.name || step.step_id}</div>
|
|
|
+ <div class="step-header-content">
|
|
|
+ <div class="step-icon" style="display: none;">${getStepIcon(step.status)}</div>
|
|
|
+ <div class="step-name">${step.name || step.step_id}</div>
|
|
|
+ </div>
|
|
|
</div>
|
|
|
<div class="step-details">${step.details || ''}</div>
|
|
|
<div class="progress-bar">
|
|
@@ -2673,21 +2690,30 @@ const updateCollapsedState = () => {
|
|
|
|
|
|
|
|
|
}
|
|
|
-.user-info-bar{
|
|
|
+.user-info-bar {
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
justify-content: flex-end;
|
|
|
- width: 100%;
|
|
|
+ width: auto;
|
|
|
height: 100%;
|
|
|
- background-color: #f7f7f8;
|
|
|
-
|
|
|
+ background-color: var(--primary-bg);
|
|
|
+ border-radius: 10px;
|
|
|
+ padding: 4px 12px;
|
|
|
+ margin-right: 12px;
|
|
|
+ box-shadow: var(--shadow-sm);
|
|
|
}
|
|
|
.avatar {
|
|
|
- width: 40px;
|
|
|
- height: 40px;
|
|
|
+ width: 32px;
|
|
|
+ height: 32px;
|
|
|
border-radius: 50%;
|
|
|
overflow: hidden;
|
|
|
- margin-right: 12px;
|
|
|
+ margin-left: 12px;
|
|
|
+ cursor: pointer;
|
|
|
+ transition: transform 0.2s ease;
|
|
|
+}
|
|
|
+
|
|
|
+.avatar:hover {
|
|
|
+ transform: scale(1.05);
|
|
|
}
|
|
|
|
|
|
.avatar img {
|
|
@@ -2698,14 +2724,16 @@ const updateCollapsedState = () => {
|
|
|
|
|
|
.user-info {
|
|
|
display: flex;
|
|
|
- flex-direction: column;
|
|
|
- margin-right: 15px;
|
|
|
+ /* flex-direction: column; */
|
|
|
+ margin-right: 8px;
|
|
|
+ cursor: pointer;
|
|
|
}
|
|
|
|
|
|
.user-name {
|
|
|
- font-size: 14px;
|
|
|
- font-weight: 500;
|
|
|
+ font-size: 13px;
|
|
|
+ font-weight: 400;
|
|
|
color: var(--primary-text);
|
|
|
+ line-height: 1.4;
|
|
|
}
|
|
|
|
|
|
.dropdown-menu {
|
|
@@ -2740,6 +2768,7 @@ const updateCollapsedState = () => {
|
|
|
|
|
|
.menu {
|
|
|
margin-top: 64px;
|
|
|
+ padding-top: 15px;
|
|
|
background: #f7f7f8;
|
|
|
width: 260px;
|
|
|
height: 93%;
|
|
@@ -2767,14 +2796,12 @@ const updateCollapsedState = () => {
|
|
|
|
|
|
.chat {
|
|
|
flex: 1;
|
|
|
- padding: 24px;
|
|
|
+ margin: 75px 24px 24px;
|
|
|
display: flex;
|
|
|
flex-direction: column;
|
|
|
gap: 24px;
|
|
|
overflow-y: auto;
|
|
|
overflow-x: hidden;
|
|
|
- margin-left: 0;
|
|
|
- margin-right: 0;
|
|
|
transition: all 0.3s ease;
|
|
|
position: absolute;
|
|
|
left: 0;
|
|
@@ -2783,6 +2810,42 @@ const updateCollapsedState = () => {
|
|
|
bottom: 0;
|
|
|
justify-content: space-between;
|
|
|
background-color: var(--primary-bg);
|
|
|
+
|
|
|
+ /* margin: 16px; */
|
|
|
+ border-radius: 16px;
|
|
|
+ box-shadow: 0 10px 15px rgba(0, 0, 0, 0.1);
|
|
|
+}
|
|
|
+
|
|
|
+.chat-header {
|
|
|
+ padding: 20px 24px;
|
|
|
+ border-bottom: 1px solid var(--border-color);
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: space-between;
|
|
|
+ background: var(--secondary-bg);
|
|
|
+}
|
|
|
+
|
|
|
+.chat-header h2 {
|
|
|
+ font-size: 18px;
|
|
|
+ font-weight: 600;
|
|
|
+ color: var(--text-primary);
|
|
|
+ margin: 0;
|
|
|
+}
|
|
|
+
|
|
|
+.chat-status {
|
|
|
+ display: flex;
|
|
|
+ align-items: center;
|
|
|
+ gap: 8px;
|
|
|
+ font-size: 14px;
|
|
|
+ color: var(--text-secondary);
|
|
|
+}
|
|
|
+
|
|
|
+.status-indicator {
|
|
|
+ width: 8px;
|
|
|
+ height: 8px;
|
|
|
+ border-radius: 50%;
|
|
|
+ background: var(--success-color);
|
|
|
+ animation: pulse 2s infinite;
|
|
|
}
|
|
|
|
|
|
.menu:not(.collapsed) + .chat {
|
|
@@ -2945,11 +3008,14 @@ const updateCollapsedState = () => {
|
|
|
}
|
|
|
|
|
|
.input-container {
|
|
|
- width: 61%;
|
|
|
- margin: auto auto 0;
|
|
|
+ padding: 15px;
|
|
|
+ width: 98%;
|
|
|
+ /* margin: auto auto 0;
|
|
|
display: flex;
|
|
|
- flex-direction: column;
|
|
|
+ flex-direction: column; */
|
|
|
gap: 8px;
|
|
|
+ background-color: var(--secondary-bg);
|
|
|
+ border-radius: 5px;
|
|
|
}
|
|
|
|
|
|
.tabs-wrapper {
|
|
@@ -2989,7 +3055,7 @@ const updateCollapsedState = () => {
|
|
|
padding: 8px 12px;
|
|
|
border: 1px solid var(--border-color);
|
|
|
border-radius: 8px;
|
|
|
- background: var(--primary-bg);
|
|
|
+ background: var(--secondary-bg);
|
|
|
color: var(--primary-text);
|
|
|
}
|
|
|
|
|
@@ -3449,11 +3515,11 @@ const updateCollapsedState = () => {
|
|
|
width: 60%;
|
|
|
overflow-y: auto;
|
|
|
overflow-x: hidden;
|
|
|
- padding: 20px;
|
|
|
+ padding: 0 20px;
|
|
|
display: flex;
|
|
|
flex-direction: column;
|
|
|
gap: 16px;
|
|
|
- margin: 30px auto 0;
|
|
|
+ margin: 0px auto 0;
|
|
|
}
|
|
|
|
|
|
.message-item {
|
|
@@ -3477,7 +3543,7 @@ const updateCollapsedState = () => {
|
|
|
|
|
|
/* 用户消息的气泡样式 */
|
|
|
.user .message-bubble {
|
|
|
- background: #fff;
|
|
|
+ background: #edf2f7;
|
|
|
color: rgba(0, 0, 0, 0.88);
|
|
|
}
|
|
|
|
|
@@ -3648,7 +3714,7 @@ const updateCollapsedState = () => {
|
|
|
|
|
|
/* 修改用户消息气泡样式,确保文件信息正确显示 */
|
|
|
.user .message-bubble {
|
|
|
- background: #fff;
|
|
|
+ background: #edf2f7;
|
|
|
color: rgba(0, 0, 0, 0.88);
|
|
|
}
|
|
|
|
|
@@ -4977,8 +5043,8 @@ button,
|
|
|
/* 全局主题变量 */
|
|
|
:root {
|
|
|
/* 浅色主题变量 */
|
|
|
- --primary-bg: #ffffff;
|
|
|
- --secondary-bg: #f5f5f5;
|
|
|
+ --primary-bg: #f7fafc;
|
|
|
+ --secondary-bg: #ffffff;
|
|
|
--primary-text: #333333;
|
|
|
--secondary-text: #666666;
|
|
|
--border-color: #e0e0e0;
|
|
@@ -5017,24 +5083,46 @@ button,
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
justify-content: center;
|
|
|
- width: 25px;
|
|
|
- height: 25px;
|
|
|
- margin-right: 16px;
|
|
|
- padding: 8px;
|
|
|
+ width: 28px;
|
|
|
+ height: 28px;
|
|
|
+ margin-right: 8px;
|
|
|
+ padding: 6px;
|
|
|
border-radius: 50%;
|
|
|
cursor: pointer;
|
|
|
- background-color: var(--hover-bg);
|
|
|
transition: all var(--theme-transition);
|
|
|
}
|
|
|
|
|
|
+.panel-header {
|
|
|
+ width: 100%;
|
|
|
+ padding: 10px;
|
|
|
+ border-bottom: 1px solid var(--border-color);
|
|
|
+ height: 30px;
|
|
|
+ /* display: flex;
|
|
|
+ align-items: center;
|
|
|
+ justify-content: space-between; */
|
|
|
+ background: var(--bg-primary);
|
|
|
+}
|
|
|
+
|
|
|
+.panel-header h3 {
|
|
|
+ font-size: 16px;
|
|
|
+ font-weight: 600;
|
|
|
+ color: var(--text-primary);
|
|
|
+ margin: 0;
|
|
|
+}
|
|
|
+
|
|
|
.theme-switch:hover {
|
|
|
- background-color: var(--border-color);
|
|
|
+ background-color: var(--hover-bg);
|
|
|
}
|
|
|
|
|
|
.theme-icon {
|
|
|
- width: 20px;
|
|
|
- height: 20px;
|
|
|
+ width: 18px;
|
|
|
+ height: 18px;
|
|
|
color: var(--primary-text);
|
|
|
+ transition: transform 0.2s ease;
|
|
|
+}
|
|
|
+
|
|
|
+.theme-switch:hover .theme-icon {
|
|
|
+ transform: scale(1.1);
|
|
|
}
|
|
|
|
|
|
/* 主题图标切换动画 */
|
|
@@ -5063,7 +5151,8 @@ button,
|
|
|
|
|
|
:deep(.header) {
|
|
|
background-color: var(--secondary-bg);
|
|
|
- border-bottom: 1px solid var(--border-color);
|
|
|
+ /* border-bottom: 1px solid var(--border-color); */
|
|
|
+ box-shadow: var(--shadow-sm)
|
|
|
}
|
|
|
|
|
|
:deep(.menu) {
|
|
@@ -5072,7 +5161,7 @@ button,
|
|
|
}
|
|
|
|
|
|
:deep(.user-info-bar) {
|
|
|
- background-color: var(--secondary-bg);
|
|
|
+ /* background-color: var(--secondary-bg); */
|
|
|
color: var(--primary-text);
|
|
|
}
|
|
|
|
|
@@ -5863,10 +5952,25 @@ button,
|
|
|
font-weight: 500;
|
|
|
}
|
|
|
.step-header {
|
|
|
+ position: relative;
|
|
|
display: flex;
|
|
|
align-items: center;
|
|
|
gap: 12px;
|
|
|
margin-bottom: 8px;
|
|
|
+ padding-left: 12px;
|
|
|
+ }
|
|
|
+
|
|
|
+ .step-header::before {
|
|
|
+ content: '';
|
|
|
+ position: absolute;
|
|
|
+ left: 0;
|
|
|
+ top: 50%;
|
|
|
+ transform: translateY(-50%);
|
|
|
+ width: 4px;
|
|
|
+ height: 16px;
|
|
|
+ background: var(--highlight-color);
|
|
|
+ background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
|
|
+ border-radius: 2px;
|
|
|
}
|
|
|
|
|
|
.step-icon {
|
|
@@ -5908,7 +6012,7 @@ button,
|
|
|
.step-details {
|
|
|
color: #6b7280;
|
|
|
font-size: 14px;
|
|
|
- margin-left: 36px;
|
|
|
+
|
|
|
}
|
|
|
|
|
|
/* .progress-bar {
|