feat: 项目模块加删除按钮(仅超管 + 无版本可删)

- useProductStore 加 deleteProject(productId, projectId) action
- ProjectRow 行右侧加三点菜单(MoreHorizontal)+ 下拉项「删除项目」
- 项目下有版本时菜单项 disabled + tooltip「项目下还有 N 个版本,不可删除」
- 仅有 project:delete 权限的角色(默认仅超管)能看到三点 icon
- 点击删除 → confirm → 调 deleteProject

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Script Generator
2026-06-17 11:11:19 +08:00
parent 53ae3f02a5
commit cad190d83b
3 changed files with 169 additions and 7 deletions

View File

@@ -79,6 +79,7 @@ interface ProductState {
createVersion: (productId: string, data: { name: string; status: string }) => void;
updateVersion: (productId: string, versionId: string, data: Partial<VersionItem>) => void;
deleteVersion: (productId: string, versionId: string) => void;
deleteProject: (productId: string, projectId: string) => void;
}
export const useProductStore = create<ProductState>((set, get) => ({
@@ -273,6 +274,19 @@ export const useProductStore = create<ProductState>((set, get) => ({
set({ overview: updated });
saveLocal(updated);
},
deleteProject: (productId, projectId) => {
const updated = get().overview.map((p) => {
if (p.id !== productId) return p;
return {
...p,
projects: p.projects.filter((proj) => proj.id !== projectId),
_count: { ...p._count, projects: Math.max(0, (p._count?.projects ?? 0) - 1) } as any,
};
});
set({ overview: updated });
saveLocal(updated);
},
}));
const STORAGE_KEY = 'ftb_products_overview_v4';