feat: 添加许愿树功能和Go后端服务

- 新增许愿树页面(Canvas绘制、许愿条展示)
- 新增许愿详情页面
- 新增许愿创建弹窗(免费/付费两种模式)
- 新增网络请求封装 utils/request.js
- 新增Go后端项目结构(Gin + Inertia.js)
- 新增用户、订单、许愿数据模型
- 新增数据库迁移脚本
- 更新.gitignore补全忽略规则
- 更新.env.local配置(robot=2, 版本1.0.1)
- 添加secrets目录说明文档
This commit is contained in:
gouki
2026-08-06 12:26:29 +00:00
parent 9c178e6d49
commit 11bfc15141
31 changed files with 2025 additions and 1 deletions
+32
View File
@@ -0,0 +1,32 @@
package model
import (
"time"
)
// Order 订单模型
type Order struct {
ID uint `gorm:"primaryKey" json:"id"`
OrderNo string `gorm:"uniqueIndex;size:32" json:"orderNo"` // 订单号
UserID uint `gorm:"index" json:"userId"`
Type string `gorm:"size:20" json:"type"` // wish:许愿 vip:会员
ProductID uint `json:"productId"`
ProductName string `gorm:"size:100" json:"productName"`
Amount int `json:"amount"` // 金额(分)
Status string `gorm:"size:20;default:'pending'" json:"status"` // pending:待支付 paid:已支付 cancelled:已取消 refunded:已退款
PayTime *time.Time `json:"payTime"`
ExpireTime *time.Time `json:"expireTime"`
Remark string `gorm:"size:255" json:"remark"`
CreatedAt time.Time `json:"createdAt"`
UpdatedAt time.Time `json:"updatedAt"`
}
// OrderItem 订单项
type OrderItem struct {
ID uint `gorm:"primaryKey" json:"id"`
OrderID uint `gorm:"index" json:"orderId"`
ProductID uint `json:"productId"`
Name string `gorm:"size:100" json:"name"`
Price int `json:"price"` // 单价(分)
Quantity int `json:"quantity"` // 数量
}
+34
View File
@@ -0,0 +1,34 @@
package model
import (
"time"
)
// User 用户模型
type User struct {
ID uint `gorm:"primaryKey" json:"id"`
OpenID string `gorm:"uniqueIndex;size:64" json:"openId"`
UnionID string `gorm:"size:64" json:"unionId"`
Nickname string `gorm:"size:64" json:"nickname"`
Avatar string `gorm:"size:255" json:"avatar"`
Gender int `gorm:"default:0" json:"gender"` // 0:未知 1:男 2:女
Phone string `gorm:"size:20" json:"phone"`
Email string `gorm:"size:100" json:"email"`
Status int `gorm:"default:1" json:"status"` // 1:正常 0:禁用
CreatedAt time.Time `json:"createdAt"`
UpdatedAt time.Time `json:"updatedAt"`
}
// UserProfile 用户资料扩展
type UserProfile struct {
ID uint `gorm:"primaryKey" json:"id"`
UserID uint `gorm:"index" json:"userId"`
RealName string `gorm:"size:32" json:"realName"`
Birthday string `gorm:"size:10" json:"birthday"` // YYYY-MM-DD
BirthTime string `gorm:"size:8" json:"birthTime"` // HH:mm:ss
Gender int `gorm:"default:0" json:"gender"`
Zodiac string `gorm:"size:10" json:"zodiac"` // 生肖
Constellation string `gorm:"size:20" json:"constellation"` // 星座
CreatedAt time.Time `json:"createdAt"`
UpdatedAt time.Time `json:"updatedAt"`
}
+41
View File
@@ -0,0 +1,41 @@
package model
import (
"time"
)
// Wish 许愿模型
type Wish struct {
ID uint `gorm:"primaryKey" json:"id"`
UserID uint `gorm:"index" json:"userId"`
TreeID uint `gorm:"index" json:"treeId"` // 许愿树ID
Content string `gorm:"size:500" json:"content"` // 许愿内容
Type string `gorm:"size:20;default:'free'" json:"type"` // free:免费 paid:付费
Position int `gorm:"default:0" json:"position"` // 位置(用于排序/覆盖)
Status int `gorm:"default:1" json:"status"` // 1:正常 0:隐藏/删除
IsRobot bool `gorm:"default:false" json:"isRobot"` // 是否机器人发布
CreatedAt time.Time `json:"createdAt"`
UpdatedAt time.Time `json:"updatedAt"`
}
// WishTree 许愿树模型
type WishTree struct {
ID uint `gorm:"primaryKey" json:"id"`
Name string `gorm:"size:50" json:"name"`
Description string `gorm:"size:255" json:"description"`
MaxWishes int `gorm:"default:100" json:"maxWishes"` // 最大许愿条数
Status int `gorm:"default:1" json:"status"`
CreatedAt time.Time `json:"createdAt"`
UpdatedAt time.Time `json:"updatedAt"`
}
// WishProduct 许愿商品(付费许愿)
type WishProduct struct {
ID uint `gorm:"primaryKey" json:"id"`
Name string `gorm:"size:50" json:"name"` // 商品名称
Description string `gorm:"size:255" json:"description"`
Price int `json:"price"` // 价格(分)
Duration int `json:"duration"` // 展示时长(天)
Position int `json:"position"` // 优先位置
Status int `gorm:"default:1" json:"status"`
}