新增摸大红业务并修复后台链接按钮白字
支持分类筛选、搜索、下单支付建群与固定二维码;合并迁移种子数据;后台表格编辑/详情链接恢复主题色可见。
This commit is contained in:
@@ -0,0 +1,167 @@
|
||||
package mohong
|
||||
|
||||
import "time"
|
||||
|
||||
type CategoryDTO struct {
|
||||
ID uint64 `json:"id"`
|
||||
Name string `json:"name"`
|
||||
Code string `json:"code"`
|
||||
SortOrder int `json:"sort_order"`
|
||||
Status string `json:"status"`
|
||||
ProductCount int64 `json:"product_count"`
|
||||
CreatedAt time.Time `json:"created_at"`
|
||||
UpdatedAt time.Time `json:"updated_at"`
|
||||
}
|
||||
|
||||
type CreateCategoryRequest struct {
|
||||
Name string `json:"name" binding:"required,max=64"`
|
||||
Code string `json:"code"`
|
||||
SortOrder int `json:"sort_order"`
|
||||
Status string `json:"status"`
|
||||
}
|
||||
|
||||
type UpdateCategoryRequest struct {
|
||||
Name *string `json:"name"`
|
||||
Code *string `json:"code"`
|
||||
SortOrder *int `json:"sort_order"`
|
||||
Status *string `json:"status"`
|
||||
}
|
||||
|
||||
type ProductDTO struct {
|
||||
ID uint64 `json:"id"`
|
||||
CategoryID *uint64 `json:"category_id"`
|
||||
CategoryName string `json:"category_name,omitempty"`
|
||||
Title string `json:"title"`
|
||||
CoverURL string `json:"cover_url"`
|
||||
ImageURLs []string `json:"image_urls"`
|
||||
Description string `json:"description"`
|
||||
PriceCent int64 `json:"price_cent"`
|
||||
Price string `json:"price"`
|
||||
OriginalPriceCent int64 `json:"original_price_cent"`
|
||||
OriginalPrice string `json:"original_price,omitempty"`
|
||||
Unit string `json:"unit"`
|
||||
Stock int `json:"stock"`
|
||||
SortOrder int `json:"sort_order"`
|
||||
Status string `json:"status"`
|
||||
QrcodeImageURL string `json:"qrcode_image_url,omitempty"`
|
||||
CreatedAt time.Time `json:"created_at"`
|
||||
UpdatedAt time.Time `json:"updated_at"`
|
||||
}
|
||||
|
||||
type ProductListQuery struct {
|
||||
Keyword string
|
||||
Status string
|
||||
CategoryID uint64
|
||||
Page int
|
||||
PageSize int
|
||||
}
|
||||
|
||||
type CreateProductRequest struct {
|
||||
CategoryID *uint64 `json:"category_id"`
|
||||
Title string `json:"title" binding:"required,max=128"`
|
||||
CoverURL string `json:"cover_url"`
|
||||
ImageURLs []string `json:"image_urls"`
|
||||
Description string `json:"description"`
|
||||
PriceCent int64 `json:"price_cent" binding:"required,min=1"`
|
||||
OriginalPriceCent int64 `json:"original_price_cent"`
|
||||
Unit string `json:"unit"`
|
||||
Stock *int `json:"stock"`
|
||||
SortOrder int `json:"sort_order"`
|
||||
Status string `json:"status"`
|
||||
QrcodeImageURL string `json:"qrcode_image_url"`
|
||||
}
|
||||
|
||||
type UpdateProductRequest struct {
|
||||
CategoryID *uint64 `json:"category_id"`
|
||||
ClearCategory bool `json:"clear_category"`
|
||||
Title *string `json:"title"`
|
||||
CoverURL *string `json:"cover_url"`
|
||||
ImageURLs []string `json:"image_urls"`
|
||||
Description *string `json:"description"`
|
||||
PriceCent *int64 `json:"price_cent"`
|
||||
OriginalPriceCent *int64 `json:"original_price_cent"`
|
||||
Unit *string `json:"unit"`
|
||||
Stock *int `json:"stock"`
|
||||
SortOrder *int `json:"sort_order"`
|
||||
Status *string `json:"status"`
|
||||
QrcodeImageURL *string `json:"qrcode_image_url"`
|
||||
}
|
||||
|
||||
type CreateOrderRequest struct {
|
||||
ProductID uint64 `json:"product_id" binding:"required"`
|
||||
Quantity int `json:"quantity" binding:"required,min=1,max=99"`
|
||||
}
|
||||
|
||||
type OrderDTO struct {
|
||||
ID uint64 `json:"id"`
|
||||
OrderNo string `json:"order_no"`
|
||||
UserID uint64 `json:"user_id"`
|
||||
ProductID uint64 `json:"product_id"`
|
||||
Quantity int `json:"quantity"`
|
||||
UnitPriceCent int64 `json:"unit_price_cent"`
|
||||
UnitPrice string `json:"unit_price"`
|
||||
AmountCent int64 `json:"amount_cent"`
|
||||
Amount string `json:"amount"`
|
||||
Status string `json:"status"`
|
||||
ProductTitle string `json:"product_title"`
|
||||
ProductCoverURL string `json:"product_cover_url"`
|
||||
ProductUnit string `json:"product_unit"`
|
||||
QrcodeURLSnapshot string `json:"qrcode_url_snapshot"`
|
||||
CopyText string `json:"copy_text"`
|
||||
ConversationID *uint64 `json:"conversation_id"`
|
||||
BuyerNickname string `json:"buyer_nickname,omitempty"`
|
||||
BuyerPhone string `json:"buyer_phone,omitempty"`
|
||||
AdminRemark string `json:"admin_remark,omitempty"`
|
||||
CancelReason string `json:"cancel_reason,omitempty"`
|
||||
PaidAt *time.Time `json:"paid_at"`
|
||||
CompletedAt *time.Time `json:"completed_at"`
|
||||
CancelledAt *time.Time `json:"cancelled_at"`
|
||||
CreatedAt time.Time `json:"created_at"`
|
||||
UpdatedAt time.Time `json:"updated_at"`
|
||||
}
|
||||
|
||||
type OrderListQuery struct {
|
||||
UserID uint64
|
||||
Status string
|
||||
Keyword string
|
||||
Page int
|
||||
PageSize int
|
||||
}
|
||||
|
||||
type AdminCompleteOrderRequest struct {
|
||||
Remark string `json:"remark"`
|
||||
}
|
||||
|
||||
type AdminCancelOrderRequest struct {
|
||||
Reason string `json:"reason"`
|
||||
}
|
||||
|
||||
type ConfigDTO struct {
|
||||
DefaultQrcodeURL string `json:"default_qrcode_url"`
|
||||
GroupWelcomeText string `json:"group_welcome_text"`
|
||||
OrderCopyTemplate string `json:"order_copy_template"`
|
||||
}
|
||||
|
||||
type UpdateConfigRequest struct {
|
||||
DefaultQrcodeURL *string `json:"default_qrcode_url"`
|
||||
GroupWelcomeText *string `json:"group_welcome_text"`
|
||||
OrderCopyTemplate *string `json:"order_copy_template"`
|
||||
}
|
||||
|
||||
type PaginatedResult struct {
|
||||
Items any `json:"items"`
|
||||
Total int64 `json:"total"`
|
||||
Page int `json:"page"`
|
||||
PageSize int `json:"page_size"`
|
||||
}
|
||||
|
||||
type productSnapshot struct {
|
||||
ID uint64 `json:"id"`
|
||||
Title string `json:"title"`
|
||||
CoverURL string `json:"cover_url"`
|
||||
ImageURLs []string `json:"image_urls"`
|
||||
Description string `json:"description"`
|
||||
PriceCent int64 `json:"price_cent"`
|
||||
Unit string `json:"unit"`
|
||||
QrcodeImageURL string `json:"qrcode_image_url"`
|
||||
}
|
||||
Reference in New Issue
Block a user