refactor: 更新AgentPanel、HeaderComponent和SkillsManager组件的样式和结构

- 重新排列了AgentPanel中的标签页以提升用户体验。
- 将AgentPanel中的默认活动标签页从'todos'更改为'files'。
- 更新了HeaderComponent中的标题样式以提高可读性。
- 调整了HeaderComponent段落的边距以获得更好的间距效果。
- 重构SkillsManagerComponent以增强布局和可用性:
  - 引入了新的HeaderComponent以获得更好的结构。
  - 改进了技能列表和详情面板的布局。
  - 添加了技能搜索功能。
  - 通过更好的样式和布局增强了依赖管理界面。
  - 更新了文件编辑器和树形结构以改善用户体验。
This commit is contained in:
Wenjie Zhang 2026-03-02 02:48:30 +08:00
parent 69281f6fe1
commit bfd22c760f
5 changed files with 576 additions and 515 deletions

View File

@ -44,27 +44,14 @@ body {
} }
} }
.iconfont { .lucide-icon-btn {
max-width: 100%; display: inline-flex;
max-height: 100%; align-items: center;
justify-content: center;
&.icon-10 { gap: 6px;
width: 10px;
height: 10px;
}
&.icon-16 {
width: 16px;
height: 16px;
}
&.icon-20 {
width: 20px;
height: 20px;
}
&.icon-24 {
width: 24px;
height: 24px;
}
} }
.lucide-icon-btn svg {
flex-shrink: 0;
}

View File

@ -19,12 +19,12 @@
</div> </div>
<div class="tabs"> <div class="tabs">
<button class="tab" :class="{ active: activeTab === 'todos' }" @click="activeTab = 'todos'">
任务 ({{ completedCount }}/{{ todos.length }})
</button>
<button class="tab" :class="{ active: activeTab === 'files' }" @click="activeTab = 'files'"> <button class="tab" :class="{ active: activeTab === 'files' }" @click="activeTab = 'files'">
文件 ({{ fileCount }}) 文件 ({{ fileCount }})
</button> </button>
<button class="tab" :class="{ active: activeTab === 'todos' }" @click="activeTab = 'todos'">
任务 ({{ completedCount }}/{{ todos.length }})
</button>
</div> </div>
<div class="tab-content"> <div class="tab-content">
<!-- Todo Display --> <!-- Todo Display -->
@ -181,7 +181,7 @@ const props = defineProps({
const emit = defineEmits(['refresh', 'close', 'resize', 'resizing']) const emit = defineEmits(['refresh', 'close', 'resize', 'resizing'])
const activeTab = ref('todos') const activeTab = ref('files')
const modalVisible = ref(false) const modalVisible = ref(false)
const currentFile = ref(null) const currentFile = ref(null)
const currentFilePath = ref('') const currentFilePath = ref('')
@ -566,7 +566,7 @@ const stopResize = () => {
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
padding: 4px 16px; padding: 4px 16px;
height: 40px; height: 48px;
background: var(--gray-25); background: var(--gray-25);
flex-shrink: 0; flex-shrink: 0;
} }

View File

@ -61,7 +61,7 @@ const props = defineProps({
flex: 1; flex: 1;
width: 100%; width: 100%;
font-size: 14px; font-size: 14px;
color: rgba(0, 0, 0, 0.45); color: var(--gray-900);
.header-title-block { .header-title-block {
display: flex; display: flex;
@ -77,7 +77,7 @@ const props = defineProps({
} }
p { p {
margin: 8px 0 0; margin: 4px 0 0;
} }
} }

View File

@ -58,15 +58,6 @@
<ApiOutlined class="icon" /> <ApiOutlined class="icon" />
<span>MCP 管理</span> <span>MCP 管理</span>
</div> </div>
<div
class="sider-item"
:class="{ activesec: activeTab === 'skills' }"
@click="activeTab = 'skills'"
v-if="userStore.isSuperAdmin"
>
<FolderOutlined class="icon" />
<span>Skills 管理</span>
</div>
</div> </div>
<!-- 顶部导航 (Mobile) --> <!-- 顶部导航 (Mobile) -->
@ -103,14 +94,6 @@
> >
MCP 管理 MCP 管理
</div> </div>
<div
class="nav-item"
:class="{ active: activeTab === 'skills' }"
@click="activeTab = 'skills'"
v-if="userStore.isSuperAdmin"
>
Skills 管理
</div>
<div <div
class="nav-item" class="nav-item"
:class="{ active: activeTab === 'department' }" :class="{ active: activeTab === 'department' }"
@ -140,10 +123,6 @@
<McpServersComponent /> <McpServersComponent />
</div> </div>
<div v-show="activeTab === 'skills'" v-if="userStore.isSuperAdmin">
<SkillsManagerComponent />
</div>
<div v-show="activeTab === 'department'" v-if="userStore.isSuperAdmin"> <div v-show="activeTab === 'department'" v-if="userStore.isSuperAdmin">
<DepartmentManagementComponent /> <DepartmentManagementComponent />
</div> </div>
@ -161,15 +140,13 @@ import {
CodeOutlined, CodeOutlined,
UserOutlined, UserOutlined,
ApiOutlined, ApiOutlined,
TeamOutlined, TeamOutlined
FolderOutlined
} from '@ant-design/icons-vue' } from '@ant-design/icons-vue'
import BasicSettingsSection from '@/components/BasicSettingsSection.vue' import BasicSettingsSection from '@/components/BasicSettingsSection.vue'
import ModelProvidersComponent from '@/components/ModelProvidersComponent.vue' import ModelProvidersComponent from '@/components/ModelProvidersComponent.vue'
import UserManagementComponent from '@/components/UserManagementComponent.vue' import UserManagementComponent from '@/components/UserManagementComponent.vue'
import McpServersComponent from '@/components/McpServersComponent.vue' import McpServersComponent from '@/components/McpServersComponent.vue'
import DepartmentManagementComponent from '@/components/DepartmentManagementComponent.vue' import DepartmentManagementComponent from '@/components/DepartmentManagementComponent.vue'
import SkillsManagerComponent from '@/components/SkillsManagerComponent.vue'
const props = defineProps({ const props = defineProps({
visible: { visible: {

File diff suppressed because it is too large Load Diff