feat: 按创建人隔离采集采购任务 (#127)

This commit is contained in:
chengma
2026-08-10 23:10:28 +08:00
parent 74f99f37d0
commit a9f22b9b0e
24 changed files with 655 additions and 74 deletions
+34 -14
View File
@@ -573,7 +573,7 @@ func (h *Handler) SybAssociatePdd(c *gin.Context) {
// SybCollectPdd 为货运单当前关联的 PDD 商品创建采集任务。
func (h *Handler) SybCollectPdd(c *gin.Context) {
result, err := service.CreateSybPddCollectTask(h.db, c.PostForm("syb_id"))
result, err := service.CreateSybPddCollectTaskForUser(h.db, currentUser(c), c.PostForm("syb_id"))
if err != nil {
h.sybRedirect(c, "采集任务未创建:"+err.Error())
return
@@ -689,18 +689,25 @@ func (h *Handler) SybDelete(c *gin.Context) {
// TaskList 渲染「采集采购」列表页。
func (h *Handler) TaskList(c *gin.Context) {
actor := currentUser(c)
creatorFilter := c.Query("creator")
filter := repository.TaskFilter{
Type: service.ParseTaskType(c.Query("type")),
Status: service.ParseTaskStatus(c.Query("status")),
Keyword: c.Query("q"),
}
result, err := service.ListTasksView(h.db, filter, service.ParsePage(c.Query("page")))
result, err := service.ListTasksViewForUser(h.db, actor, filter, creatorFilter, service.ParsePage(c.Query("page")))
if err != nil {
fail(c, http.StatusInternalServerError,
"读取任务列表失败,数据没有被改动。刷新页面重试;一直失败请把这句话报给维护者。")
return
}
creatorOptions, err := service.TaskCreatorOptions(h.db, actor)
if err != nil {
fail(c, http.StatusInternalServerError, "读取任务创建人筛选失败,请刷新页面重试。")
return
}
// 底部状态条平时显示统计,刚做完删除操作时先显示操作结果,
// 跳转带过来的 msg 参数,见 h.taskRedirect。
@@ -719,17 +726,23 @@ func (h *Handler) TaskList(c *gin.Context) {
if strings.TrimSpace(filter.Keyword) != "" {
values.Set("q", filter.Keyword)
}
if actor.IsAdmin() && creatorFilter != "" {
values.Set("creator", creatorFilter)
}
c.HTML(http.StatusOK, "task/list", page(c, "tasks", "采集采购", gin.H{
"Rows": result.Rows,
"Keyword": filter.Keyword,
"Status": statusLine,
"TypeFilter": string(filter.Type),
"StatusFilter": string(filter.Status),
"TypeOptions": service.TaskTypeOptions(),
"StatusOptions": service.TaskStatusOptions(),
"IsFiltered": result.IsFiltered,
"CurrentPage": result.Page,
"Pagination": service.NewPaginationView(result.Page, result.TotalPages, values.Encode()),
"Rows": result.Rows,
"Keyword": filter.Keyword,
"Status": statusLine,
"TypeFilter": string(filter.Type),
"StatusFilter": string(filter.Status),
"TypeOptions": service.TaskTypeOptions(),
"StatusOptions": service.TaskStatusOptions(),
"ShowCreator": actor.IsAdmin(),
"CreatorFilter": creatorFilter,
"CreatorOptions": creatorOptions,
"IsFiltered": result.IsFiltered,
"CurrentPage": result.Page,
"Pagination": service.NewPaginationView(result.Page, result.TotalPages, values.Encode()),
}))
}
@@ -745,7 +758,7 @@ func (h *Handler) TaskDetail(c *gin.Context) {
return
}
detail, err := service.GetTaskDetail(h.db, taskID)
detail, err := service.GetTaskDetailForUser(h.db, currentUser(c), taskID)
if err != nil {
fail(c, http.StatusInternalServerError, "读取任务详情失败,数据没有被改动。")
return
@@ -769,8 +782,12 @@ func (h *Handler) TaskDelete(c *gin.Context) {
return
}
n, err := service.DeleteTasks(h.db, ids)
n, err := service.DeleteTasksForUser(h.db, currentUser(c), ids)
if err != nil {
if errors.Is(err, service.ErrTaskNotVisible) {
fail(c, http.StatusBadRequest, "删除失败:所选任务不存在或不在当前账号可见范围。没有删除任何记录。")
return
}
fail(c, http.StatusInternalServerError,
"删除失败:"+err.Error()+"。没有删除任何记录。")
return
@@ -795,6 +812,9 @@ func (h *Handler) taskRedirect(c *gin.Context, msg string) {
if p := c.PostForm("page"); p != "" {
params.Set("page", p)
}
if creator := c.PostForm("creator"); creator != "" && currentUser(c).IsAdmin() {
params.Set("creator", creator)
}
if msg != "" {
params.Set("msg", msg)
}