@@ -61,7 +61,20 @@ const PromptManager = () => {
6161 const storedPrompts = await storage . getItem < PromptItem [ ] > (
6262 `local:${ BROWSER_STORAGE_KEY } `
6363 ) ;
64- setPrompts ( storedPrompts || [ ] ) ;
64+
65+ // 按照 sortOrder 排序,置顶项目优先
66+ const sortedPrompts = ( storedPrompts || [ ] ) . sort ( ( a , b ) => {
67+ // 置顶项目始终在前面
68+ if ( a . pinned && ! b . pinned ) return - 1 ;
69+ if ( ! a . pinned && b . pinned ) return 1 ;
70+
71+ // 在同一置顶状态下,按照 sortOrder 排序
72+ const aOrder = a . sortOrder !== undefined ? a . sortOrder : 999999 ;
73+ const bOrder = b . sortOrder !== undefined ? b . sortOrder : 999999 ;
74+ return aOrder - bOrder ;
75+ } ) ;
76+
77+ setPrompts ( sortedPrompts ) ;
6578
6679 // 加载分类
6780 const storedCategories = await getCategories ( ) ;
@@ -102,16 +115,16 @@ const PromptManager = () => {
102115 } ) ;
103116 }
104117
105- // 按置顶状态和最后修改时间排序 :置顶的在前面,同级别内按最后修改时间降序
118+ // 按置顶状态和排序号排序 :置顶的在前面,同级别内按 sortOrder 升序
106119 filtered . sort ( ( a , b ) => {
107120 // 首先按置顶状态排序,置顶的在前面
108121 if ( a . pinned && ! b . pinned ) return - 1 ;
109122 if ( ! a . pinned && b . pinned ) return 1 ;
110123
111- // 如果置顶状态相同,按最后修改时间降序排序(新的在前面)
112- const aTime = a . lastModified ? new Date ( a . lastModified ) . getTime ( ) : 0 ;
113- const bTime = b . lastModified ? new Date ( b . lastModified ) . getTime ( ) : 0 ;
114- return bTime - aTime ;
124+ // 如果置顶状态相同,按 sortOrder 升序排序
125+ const aOrder = a . sortOrder !== undefined ? a . sortOrder : 999999 ;
126+ const bOrder = b . sortOrder !== undefined ? b . sortOrder : 999999 ;
127+ return aOrder - bOrder ;
115128 } ) ;
116129
117130 setFilteredPrompts ( filtered ) ;
@@ -239,6 +252,28 @@ const PromptManager = () => {
239252 await savePrompts ( newPrompts ) ;
240253 } ;
241254
255+ // 添加拖拽排序处理函数
256+ const handleReorder = async ( activeId : string , overId : string ) => {
257+ const oldIndex = prompts . findIndex ( p => p . id === activeId ) ;
258+ const newIndex = prompts . findIndex ( p => p . id === overId ) ;
259+
260+ if ( oldIndex === - 1 || newIndex === - 1 ) return ;
261+
262+ // 重新排列数组
263+ const newPrompts = [ ...prompts ] ;
264+ const [ removed ] = newPrompts . splice ( oldIndex , 1 ) ;
265+ newPrompts . splice ( newIndex , 0 , removed ) ;
266+
267+ // 更新 sortOrder 字段
268+ const updatedPrompts = newPrompts . map ( ( prompt , index ) => ( {
269+ ...prompt ,
270+ sortOrder : index ,
271+ lastModified : new Date ( ) . toISOString ( )
272+ } ) ) ;
273+
274+ await savePrompts ( updatedPrompts ) ;
275+ } ;
276+
242277 // 导出提示词
243278 const exportPrompts = ( ) => {
244279 if ( prompts . length === 0 ) {
@@ -729,6 +764,7 @@ const PromptManager = () => {
729764 prompts = { filteredPrompts }
730765 onEdit = { startEdit }
731766 onDelete = { deletePrompt }
767+ onReorder = { handleReorder }
732768 searchTerm = { searchTerm }
733769 allPromptsCount = { prompts . length }
734770 onToggleEnabled = { togglePromptEnabled }
0 commit comments