- 数据: Project.autoArchive + Task.archived/archivedAt/archiveSource, 迁移 20261026000000_task_archive (两索引) - 领域: server/task-domain/archive.js —— hiddenAtOf 与保留口径精确同源, autoArchiveDue 到期判定, runAutoArchiveForProject (读时惰性) + runAutoArchiveSweep (每小时 cron 兜底) - 接口: POST /tasks/:id/archive|unarchive (连带子任务, 幂等); GET /projects/:id/tasks/archived (keyword/kind/columnId/from/to 过滤, archivedAt+id 游标分页); 项目 PUT 收 autoArchive (枚举校验); 主列表/子任务/项目 taskCount 全部排除归档 - 前端: ⋯ 菜单「归档」(确认含子任务条数); 项目栏「已归档」入口 → ArchivedTasks 弹层 (关键词/类型/列/归档时段过滤 + 加载更多 + 恢复/删除); 项目管理「归档设置」四档 Picker
This commit is contained in:
@@ -38,4 +38,7 @@ export const taskApi = {
|
||||
reorder: (projectId, ids) => api(`/projects/${projectId}/tasks/reorder`, { method: 'POST', body: { ids } }),
|
||||
remove: (id) => api(`/tasks/${id}`, { method: 'DELETE' }),
|
||||
copy: (id, projectId) => api(`/tasks/${id}/copy`, { method: 'POST', body: { projectId } }),
|
||||
archive: (id) => api(`/tasks/${id}/archive`, { method: 'POST', body: {} }),
|
||||
unarchive: (id) => api(`/tasks/${id}/unarchive`, { method: 'POST', body: {} }),
|
||||
archivedList: (projectId, params) => api(`/projects/${projectId}/tasks/archived` + q(params)),
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user