Files
billai/server/router/router.go
clz 06f6c847d8 feat: 手动账单输入功能及时区修复
- 新增手动账单输入功能
  - 创建 ManualBillInput 组件,支持批量添加账单
  - 添加服务器端 API /api/bills/manual 处理手动账单创建
  - 支持时间选择器,默认当前时间
  - 交易对方字段设为可选
  - 实时显示待提交账单列表
  - 提交成功后显示成功/失败/重复统计

- 修复时区问题
  - 后端使用 time.ParseInLocation 解析本地时间,避免 UTC 时区错误
  - 确保手动输入的时间按本地时区正确存储

- UI 优化
  - 账单管理页面添加标签页切换(列表/手动添加)
  - 主页添加快捷按钮跳转至手动添加页面
  - 手动账单来源正确显示为"手动输入"
  - 使用 shadcn-svelte 组件统一 UI 风格
  - 提交成功后保持日期筛选并重新加载数据
2026-01-10 20:48:24 +08:00

60 lines
1.1 KiB
Go

// Package router 路由配置
package router
import (
"net/http"
"github.com/gin-gonic/gin"
"billai-server/handler"
)
// Config 路由配置参数
type Config struct {
OutputDir string // 输出目录(用于静态文件服务)
Version string // 应用版本
}
// Setup 设置所有路由
func Setup(r *gin.Engine, cfg Config) {
// 健康检查
r.GET("/health", healthCheck(cfg.Version))
// API 路由组
setupAPIRoutes(r)
// 静态文件下载
r.Static("/download", cfg.OutputDir)
}
// healthCheck 健康检查处理器
func healthCheck(version string) gin.HandlerFunc {
return func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"status": "ok",
"version": version,
})
}
}
// setupAPIRoutes 设置 API 路由
func setupAPIRoutes(r *gin.Engine) {
api := r.Group("/api")
{
// 账单上传
api.POST("/upload", handler.Upload)
// 复核相关
api.GET("/review", handler.Review)
// 账单查询
api.GET("/bills", handler.ListBills)
// 手动创建账单
api.POST("/bills/manual", handler.CreateManualBills)
// 月度统计(全部数据)
api.GET("/monthly-stats", handler.MonthlyStats)
}
}