11<template >
2- <div class =" stored-projects-panel " >
2+ <div class =" popover " >
33 <div class =" stored-projects-toolbar" >
44 <span >本地工程</span >
55 <button
1111 <RefreshCcw class="ui-icon" aria-hidden="true" />
1212 </button >
1313 </div >
14- <div v-if =" storedProjects .length === 0" class =" stored-projects-empty" >
14+ <div v-if =" projects .length === 0" class =" stored-projects-empty" >
1515 当前没有已保存的本地工程
1616 </div >
1717 <div
18- v-for =" project in storedProjects "
18+ v-for =" project in projects "
1919 :key =" project.projectId"
2020 class =" stored-project-item"
21+ @click =" handleOpenStoredProject(project.projectId)"
2122 >
2223 <div class =" stored-project-main" >
2324 <div class =" stored-project-name" >
2930 </div >
3031 </div >
3132 <div class =" stored-project-actions" >
32- <button
33- class =" icon-interactive"
34- type =" button"
35- title =" 打开工程"
36- @click =" handleOpenStoredProject(project.projectId)"
37- >
38- <FolderOpen class="ui-icon" aria-hidden="true" />
39- </button >
4033 <button
4134 class =" icon-interactive icon-button-warning"
4235 type =" button"
5043 </div >
5144</template >
5245<script setup lang="ts">
53- import { ref } from ' vue' ;
46+ import { RefreshCcw , Trash2 } from ' @lucide/ vue' ;
5447import { formatDate } from ' @/utils/date' ;
5548import type { ProjectFile } from ' @/types/project' ;
5649import { useProjectManager } from ' @/composables/useProjectManager' ;
5750
51+ defineProps <{
52+ projects: ProjectFile [];
53+ }>();
54+
55+ const emit = defineEmits <{
56+ refresh: [];
57+ close: [];
58+ }>();
59+
5860const projectManager = useProjectManager ();
59- const storedProjects = ref <ProjectFile []>([]);
6061
6162function refreshStoredProjects() {
62- storedProjects . value = projectManager . getStoredProjects ( );
63+ emit ( ' refresh ' );
6364}
6465
6566function handleOpenStoredProject(projectId : string ) {
6667 try {
6768 if (projectManager .openStoredProject (projectId )) {
6869 refreshStoredProjects ();
70+ emit (' close' );
6971 }
7072 } catch (error ) {
7173 console .error (error );
@@ -96,21 +98,19 @@ function formatStoredProjectTime(time: string) {
9698}
9799 </script >
98100<style scoped>
99- .stored-projects-panel {
101+ .popover {
100102 width : 280px ;
101- box-sizing : border-box ;
102103 max-height : 400px ;
103104 overflow-y : auto ;
104- padding : 10px 12px ;
105- color : var (--text-primary );
106- background : var (--bg-topbar );
105+ padding-top : 10px ;
107106 box-shadow : 0 4px 12px var (--box-shadow );
108107}
109108
110109.stored-projects-toolbar {
111110 display : flex ;
112111 align-items : center ;
113112 justify-content : space-between ;
113+ padding : 0px 10px ;
114114 margin-bottom : 4px ;
115115 font-size : 13px ;
116116 color : var (--text-muted );
@@ -124,7 +124,7 @@ function formatStoredProjectTime(time: string) {
124124}
125125
126126.stored-projects-empty {
127- padding : 10px 0 ;
127+ padding : 10px 12 px ;
128128 font-size : 12px ;
129129 color : var (--text-muted );
130130}
@@ -134,9 +134,12 @@ function formatStoredProjectTime(time: string) {
134134 align-items : center ;
135135 justify-content : space-between ;
136136 gap : 8px ;
137- padding : 8 px 0 ;
137+ padding : 10 px 12 px ;
138138 border-top : none ;
139139}
140+ .stored-project-item :hover {
141+ background-color : var (--hover-bg );
142+ }
140143
141144.stored-project-main {
142145 min-width : 0 ;
0 commit comments