feat: 添加账单软删除功能
- 新增删除按钮(带二次确认)到账单详情抽屉 - 后端实现软删除(设置 is_deleted 标记) - 所有查询方法自动过滤已删除记录 - 账单列表和复核页面都支持删除 - 版本更新至 1.2.0
This commit is contained in:
42
server/handler/delete_bill.go
Normal file
42
server/handler/delete_bill.go
Normal file
@@ -0,0 +1,42 @@
|
||||
package handler
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"strings"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
|
||||
"billai-server/repository"
|
||||
)
|
||||
|
||||
type DeleteBillResponse struct {
|
||||
Result bool `json:"result"`
|
||||
Message string `json:"message,omitempty"`
|
||||
}
|
||||
|
||||
// DeleteBill DELETE /api/bills/:id 删除清洗后的账单记录
|
||||
func DeleteBill(c *gin.Context) {
|
||||
id := strings.TrimSpace(c.Param("id"))
|
||||
if id == "" {
|
||||
c.JSON(http.StatusBadRequest, DeleteBillResponse{Result: false, Message: "缺少账单 ID"})
|
||||
return
|
||||
}
|
||||
|
||||
repo := repository.GetRepository()
|
||||
if repo == nil {
|
||||
c.JSON(http.StatusInternalServerError, DeleteBillResponse{Result: false, Message: "数据库未连接"})
|
||||
return
|
||||
}
|
||||
|
||||
err := repo.DeleteCleanedBillByID(id)
|
||||
if err != nil {
|
||||
if err == repository.ErrNotFound {
|
||||
c.JSON(http.StatusNotFound, DeleteBillResponse{Result: false, Message: "账单不存在"})
|
||||
return
|
||||
}
|
||||
c.JSON(http.StatusInternalServerError, DeleteBillResponse{Result: false, Message: "删除失败: " + err.Error()})
|
||||
return
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, DeleteBillResponse{Result: true, Message: "删除成功"})
|
||||
}
|
||||
@@ -23,6 +23,7 @@ type UpdateBillRequest struct {
|
||||
PayMethod *string `json:"pay_method,omitempty"`
|
||||
Status *string `json:"status,omitempty"`
|
||||
Remark *string `json:"remark,omitempty"`
|
||||
ReviewLevel *string `json:"review_level,omitempty"`
|
||||
}
|
||||
|
||||
type UpdateBillResponse struct {
|
||||
@@ -119,6 +120,16 @@ func UpdateBill(c *gin.Context) {
|
||||
updates["remark"] = strings.TrimSpace(*req.Remark)
|
||||
}
|
||||
|
||||
if req.ReviewLevel != nil {
|
||||
// 允许设置为空字符串(清除复核等级)或 HIGH/LOW
|
||||
v := strings.TrimSpace(*req.ReviewLevel)
|
||||
if v != "" && v != "HIGH" && v != "LOW" {
|
||||
c.JSON(http.StatusBadRequest, UpdateBillResponse{Result: false, Message: "review_level 只能是空、HIGH 或 LOW"})
|
||||
return
|
||||
}
|
||||
updates["review_level"] = v
|
||||
}
|
||||
|
||||
if len(updates) == 0 {
|
||||
c.JSON(http.StatusBadRequest, UpdateBillResponse{Result: false, Message: "没有可更新的字段"})
|
||||
return
|
||||
|
||||
Reference in New Issue
Block a user