各种配置项修复,优化到后台管理端配置
Build docker and publish / build (20.15.1) (push) Has been cancelled

This commit is contained in:
2026-03-04 17:58:40 -08:00
parent 149dfe1ac3
commit 4752f844ef
31 changed files with 1467 additions and 148 deletions
+75 -9
View File
@@ -3,6 +3,7 @@ package user
import (
"context"
"fmt"
"strings"
"time"
"github.com/perfect-panel/server/internal/model/order"
@@ -57,13 +58,17 @@ type LoginLogFilterParams struct {
}
type UserFilterParams struct {
Search string
UserId *int64
SubscribeId *int64
UserSubscribeId *int64
ShortCode string
Order string // Order by id, e.g., "desc"
Unscoped bool // Whether to include soft-deleted records
Search string
UserId *int64
SubscribeId *int64
UserSubscribeId *int64
ShortCode string
FamilyJoined *bool
FamilyStatus string
FamilyOwnerUserId *int64
FamilyId *int64
Order string // Order by id, e.g., "desc"
Unscoped bool // Whether to include soft-deleted records
}
type customUserLogicModel interface {
@@ -117,8 +122,9 @@ type customUserLogicModel interface {
}
type UserStatusInfo struct {
MemberStatus string
LastTrafficAt *time.Time
MemberStatus string
LastTrafficAt *time.Time
PurchasedPackage string
}
type UserStatisticsWithDate struct {
@@ -140,6 +146,26 @@ func (m *customUserModel) QueryPageList(ctx context.Context, page, size int, fil
var list []*User
var total int64
err := m.QueryNoCacheCtx(ctx, &list, func(conn *gorm.DB, v interface{}) error {
joinedFamily := false
joinFamily := func(c *gorm.DB) *gorm.DB {
if joinedFamily {
return c
}
joinedFamily = true
return c.
Joins("JOIN user_family_member ufm ON ufm.user_id = user.id AND ufm.deleted_at IS NULL AND ufm.status = ?", FamilyMemberActive).
Joins("JOIN user_family uf ON uf.id = ufm.family_id AND uf.deleted_at IS NULL")
}
joinFamilyLeft := func(c *gorm.DB) *gorm.DB {
if joinedFamily {
return c
}
joinedFamily = true
return c.
Joins("LEFT JOIN user_family_member ufm ON ufm.user_id = user.id AND ufm.deleted_at IS NULL AND ufm.status = ?", FamilyMemberActive).
Joins("LEFT JOIN user_family uf ON uf.id = ufm.family_id AND uf.deleted_at IS NULL")
}
if filter != nil {
if filter.UserId != nil {
conn = conn.Where("user.id =?", *filter.UserId)
@@ -160,6 +186,46 @@ func (m *customUserModel) QueryPageList(ctx context.Context, page, size int, fil
conn = conn.Joins("LEFT JOIN user_device ON user.id = user_device.user_id").
Where("user_device.short_code LIKE ?", "%"+filter.ShortCode+"%")
}
if filter.FamilyJoined != nil {
if *filter.FamilyJoined {
conn = joinFamily(conn)
} else {
conn = joinFamilyLeft(conn)
conn = conn.Where("ufm.id IS NULL")
}
}
if filter.FamilyOwnerUserId != nil {
conn = joinFamily(conn)
conn = conn.Where("uf.owner_user_id = ?", *filter.FamilyOwnerUserId)
}
if filter.FamilyId != nil {
conn = joinFamily(conn)
conn = conn.Where("uf.id = ?", *filter.FamilyId)
}
if filter.FamilyStatus != "" {
normalizedStatus := strings.ToLower(strings.TrimSpace(filter.FamilyStatus))
var (
statusValue uint8
hasStatus bool
)
switch normalizedStatus {
case "active", "1":
statusValue = FamilyStatusActive
hasStatus = true
case "disabled", "0":
statusValue = 0
hasStatus = true
}
if hasStatus {
conn = joinFamily(conn)
conn = conn.Where("uf.status = ?", statusValue)
}
}
if filter.Order != "" {
conn = conn.Order(fmt.Sprintf("user.id %s", filter.Order))
}