Skip to content

Commit 78770d8

Browse files
committed
✨ feat: 添加拖拽排序功能和相关依赖
* 在提示词列表中实现拖拽排序功能,允许用户通过拖拽重新排列提示词顺序。 * 引入 @dnd-kit/core、@dnd-kit/sortable 和 @dnd-kit/utilities 作为依赖。 * 更新提示词管理逻辑,支持根据排序号进行排序。 * 添加国际化支持,更新相关翻译信息。
1 parent c47b773 commit 78770d8

File tree

10 files changed

+553
-283
lines changed

10 files changed

+553
-283
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
## [1.0.2] - 2025-09-12
2+
3+
### 新增
4+
- 提示词支持拖拽排序功能
5+
16
## [1.0.1] - 2025-08-03
27

38
### 新增

entrypoints/options/components/PromptList.tsx

Lines changed: 99 additions & 273 deletions
Large diffs are not rendered by default.

entrypoints/options/components/PromptManager.tsx

Lines changed: 42 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)