feat: 支持采购任务追溯并安全重新创建 (#186)
This commit is contained in:
+52
-23
@@ -61,6 +61,31 @@ func (h *Handler) renderSybListWithLoginReason(c *gin.Context, keyword, pageRaw,
|
||||
"读取顺运宝货运单列表失败,数据没有被改动。刷新页面重试;一直失败请把这句话报给维护者。")
|
||||
return
|
||||
}
|
||||
purchaseRows := append([]service.SybOrderView(nil), result.Rows...)
|
||||
openSybID := strings.TrimSpace(c.Query("open_syb_id"))
|
||||
openPurchaseSybID := ""
|
||||
if openSybID != "" && c.Query("purchase_intent") == "1" {
|
||||
focused, err := service.GetSybOrderView(h.db, openSybID)
|
||||
if err != nil {
|
||||
fail(c, http.StatusInternalServerError,
|
||||
"读取原货运单采购信息失败,数据没有被改动。刷新页面重试。")
|
||||
return
|
||||
}
|
||||
if focused != nil && focused.CanPurchase {
|
||||
found := false
|
||||
for _, row := range purchaseRows {
|
||||
if row.SybID == focused.SybID {
|
||||
found = true
|
||||
break
|
||||
}
|
||||
}
|
||||
if !found {
|
||||
purchaseRows = append(purchaseRows, *focused)
|
||||
}
|
||||
openPurchaseSybID = focused.SybID
|
||||
openSybID = ""
|
||||
}
|
||||
}
|
||||
history, err := service.ListSybSyncHistory(h.db, service.ParsePage(c.Query("history_page")))
|
||||
if err != nil {
|
||||
fail(c, http.StatusInternalServerError,
|
||||
@@ -161,28 +186,31 @@ func (h *Handler) renderSybListWithLoginReason(c *gin.Context, keyword, pageRaw,
|
||||
}
|
||||
|
||||
c.HTML(http.StatusOK, "syb/list", page(c, "syb", "顺运宝数据", gin.H{
|
||||
"Keyword": keyword,
|
||||
"ShopFilter": shop,
|
||||
"StageFilter": stage,
|
||||
"StageOptions": service.SybStageOptions(),
|
||||
"CurrentPage": result.Page,
|
||||
"Rows": result.Rows,
|
||||
"Status": status,
|
||||
"HasAny": result.HasAny,
|
||||
"IsFiltered": result.IsFiltered,
|
||||
"NeedLogin": needLogin,
|
||||
"NeedLoginReason": loginReason,
|
||||
"LoginHint": loginHint,
|
||||
"Username": username,
|
||||
"ConfigProblem": configProblem,
|
||||
"Today": today,
|
||||
"SyncDateFrom": dateFrom,
|
||||
"SyncDateTo": dateTo,
|
||||
"RangeError": c.Query("range_error"),
|
||||
"RangeWarning": rangeWarning,
|
||||
"SyncRunning": syncStatus.Running,
|
||||
"SyncHistory": history,
|
||||
"NeedSyncHistory": c.Query("history") == "1",
|
||||
"Keyword": keyword,
|
||||
"ShopFilter": shop,
|
||||
"StageFilter": stage,
|
||||
"StageOptions": service.SybStageOptions(),
|
||||
"CurrentPage": result.Page,
|
||||
"Rows": result.Rows,
|
||||
"PurchaseRows": purchaseRows,
|
||||
"OpenSybID": openSybID,
|
||||
"OpenPurchaseSybID": openPurchaseSybID,
|
||||
"Status": status,
|
||||
"HasAny": result.HasAny,
|
||||
"IsFiltered": result.IsFiltered,
|
||||
"NeedLogin": needLogin,
|
||||
"NeedLoginReason": loginReason,
|
||||
"LoginHint": loginHint,
|
||||
"Username": username,
|
||||
"ConfigProblem": configProblem,
|
||||
"Today": today,
|
||||
"SyncDateFrom": dateFrom,
|
||||
"SyncDateTo": dateTo,
|
||||
"RangeError": c.Query("range_error"),
|
||||
"RangeWarning": rangeWarning,
|
||||
"SyncRunning": syncStatus.Running,
|
||||
"SyncHistory": history,
|
||||
"NeedSyncHistory": c.Query("history") == "1",
|
||||
"HistoryFetchURL": sybHistoryPartialURL(history.Page,
|
||||
keyword, shop, stage, dateFrom, dateTo),
|
||||
"HistoryPagination": sybHistoryPagination(history.Page, history.TotalPages,
|
||||
@@ -805,7 +833,8 @@ func (h *Handler) TaskList(c *gin.Context) {
|
||||
|
||||
// TaskDetail 渲染双击行弹出的只读详情弹窗内容(不是整页)。
|
||||
//
|
||||
// `[必须]` 只读。改派 / 重试 / 取消是后续工单的范围,这里不提供入口。
|
||||
// `[必须]` 字段只读,不提供改派 / 重试 / 取消或直接创建入口。失败/取消采购
|
||||
// 只生成返回原顺运宝明细的导航链接,真正创建仍走原确认表单和服务端门禁。
|
||||
// 弹窗机制复用 #18 已有的那套(static/js/app.js 的 setupRowDetail),
|
||||
// 不新造一套。
|
||||
func (h *Handler) TaskDetail(c *gin.Context) {
|
||||
|
||||
Reference in New Issue
Block a user