feat(workspace): 增强工作区侧边栏,新增快速访问功能并优化路径选择逻辑

This commit is contained in:
Wenjie Zhang 2026-04-30 22:29:22 +08:00
parent 874767d4bd
commit 9ff925e4df
2 changed files with 32 additions and 5 deletions

View File

@ -4,7 +4,7 @@
<button <button
type="button" type="button"
class="workspace-nav-item" class="workspace-nav-item"
:class="{ active: activeKey === 'personal' }" :class="{ active: activeKey === 'personal' && currentPath !== savedArtifactsPath }"
@click="$emit('select-personal')" @click="$emit('select-personal')"
> >
<FolderKanban :size="16" /> <FolderKanban :size="16" />
@ -12,6 +12,19 @@
</button> </button>
</section> </section>
<section class="sidebar-section">
<div class="section-title">快速访问</div>
<button
type="button"
class="workspace-nav-item secondary"
:class="{ active: activeKey === 'personal' && currentPath === savedArtifactsPath }"
@click="$emit('select-path', savedArtifactsPath)"
>
<Archive :size="15" />
<span>Saved Artifacts</span>
</button>
</section>
<section class="sidebar-section"> <section class="sidebar-section">
<div class="section-title">知识库</div> <div class="section-title">知识库</div>
<button <button
@ -41,15 +54,18 @@
</template> </template>
<script setup> <script setup>
import { FolderKanban, LibraryBig, UsersRound } from 'lucide-vue-next' import { Archive, FolderKanban, LibraryBig, UsersRound } from 'lucide-vue-next'
const savedArtifactsPath = '/saved_artifacts'
defineProps({ defineProps({
activeKey: { type: String, default: 'personal' }, activeKey: { type: String, default: 'personal' },
currentPath: { type: String, default: '/' },
databases: { type: Array, default: () => [] }, databases: { type: Array, default: () => [] },
loadingDatabases: { type: Boolean, default: false } loadingDatabases: { type: Boolean, default: false }
}) })
defineEmits(['select-personal', 'select-database']) defineEmits(['select-personal', 'select-database', 'select-path'])
</script> </script>
<style scoped lang="less"> <style scoped lang="less">

View File

@ -25,10 +25,12 @@
</button> </button>
<WorkspaceSidebar <WorkspaceSidebar
:active-key="activeSourceKey" :active-key="activeSourceKey"
:current-path="currentPath"
:databases="databases" :databases="databases"
:loading-databases="loadingDatabases" :loading-databases="loadingDatabases"
@select-personal="selectPersonalWorkspace" @select-personal="selectPersonalWorkspace"
@select-database="selectDatabase" @select-database="selectDatabase"
@select-path="selectWorkspacePath"
/> />
</div> </div>
<button <button
@ -268,12 +270,21 @@ const loadDatabases = async () => {
const selectPersonalWorkspace = async () => { const selectPersonalWorkspace = async () => {
activeSourceKey.value = 'personal' activeSourceKey.value = 'personal'
selectedDatabase.value = null selectedDatabase.value = null
closePreview()
clearWorkspaceSelection() clearWorkspaceSelection()
if (!entries.value.length) { if (currentPath.value !== '/' || !entries.value.length) {
await loadWorkspaceEntries(currentPath.value) await loadWorkspaceEntries('/')
} }
} }
const selectWorkspacePath = async (path) => {
activeSourceKey.value = 'personal'
selectedDatabase.value = null
closePreview()
clearWorkspaceSelection()
await loadWorkspaceEntries(path)
}
const selectDatabase = (database) => { const selectDatabase = (database) => {
closePreview() closePreview()
clearWorkspaceSelection() clearWorkspaceSelection()