init
This commit is contained in:
@@ -0,0 +1,70 @@
|
||||
package option_providers
|
||||
|
||||
import (
|
||||
"github.com/goravel/framework/contracts/http"
|
||||
"github.com/goravel/framework/facades"
|
||||
"github.com/goravel/framework/support/str"
|
||||
"github.com/samber/lo"
|
||||
"github.com/spf13/cast"
|
||||
|
||||
"goravel/app/models"
|
||||
)
|
||||
|
||||
type AdminOptionProvider struct{}
|
||||
|
||||
func NewAdminOptionProvider() *AdminOptionProvider {
|
||||
return &AdminOptionProvider{}
|
||||
}
|
||||
|
||||
func (p *AdminOptionProvider) GetOptions(ctx http.Context) (map[string]any, error) {
|
||||
var admins []models.Admin
|
||||
|
||||
// 排除开发者ID
|
||||
developerIDsStr := facades.Config().GetString("admin.developer_ids", "2")
|
||||
developerIDs := parseProtectedIDs(developerIDsStr)
|
||||
|
||||
query := facades.Orm().Query().Where("status", 1)
|
||||
if len(developerIDs) > 0 {
|
||||
query = query.Where("id NOT IN ?", developerIDs)
|
||||
}
|
||||
|
||||
if err := query.Order("id asc").Get(&admins); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
options := lo.Map(admins, func(admin models.Admin, _ int) map[string]any {
|
||||
label := admin.Username
|
||||
if admin.Nickname != "" {
|
||||
label = admin.Nickname + " (" + admin.Username + ")"
|
||||
}
|
||||
return map[string]any{
|
||||
"label": label,
|
||||
"value": cast.ToString(admin.ID),
|
||||
}
|
||||
})
|
||||
|
||||
return map[string]any{
|
||||
"options": options,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// parseProtectedIDs 解析受保护的管理员ID字符串(支持逗号分隔)
|
||||
func parseProtectedIDs(idsStr string) []uint {
|
||||
var ids []uint
|
||||
if idsStr == "" {
|
||||
return ids
|
||||
}
|
||||
|
||||
// 使用字符串分割
|
||||
parts := str.Of(idsStr).Split(",")
|
||||
for _, part := range parts {
|
||||
part = str.Of(part).Trim().String()
|
||||
if !str.Of(part).IsEmpty() {
|
||||
if id := cast.ToUint(part); id > 0 {
|
||||
ids = append(ids, id)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return ids
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
package option_providers
|
||||
|
||||
import (
|
||||
"github.com/goravel/framework/contracts/http"
|
||||
"github.com/goravel/framework/facades"
|
||||
|
||||
"goravel/app/models"
|
||||
)
|
||||
|
||||
type DepartmentOptionProvider struct{}
|
||||
|
||||
func NewDepartmentOptionProvider() *DepartmentOptionProvider {
|
||||
return &DepartmentOptionProvider{}
|
||||
}
|
||||
|
||||
func (p *DepartmentOptionProvider) GetOptions(ctx http.Context) (map[string]any, error) {
|
||||
var departments []models.Department
|
||||
if err := facades.Orm().Query().Where("status", 1).Order("sort asc, id asc").Get(&departments); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
tree := p.buildDepartmentTree(departments, 0)
|
||||
|
||||
return map[string]any{
|
||||
"options": tree,
|
||||
"list": departments,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (p *DepartmentOptionProvider) buildDepartmentTree(departments []models.Department, parentID uint) []map[string]any {
|
||||
var tree []map[string]any
|
||||
for _, dept := range departments {
|
||||
if dept.ParentID == parentID {
|
||||
node := map[string]any{
|
||||
"id": dept.ID,
|
||||
"name": dept.Name,
|
||||
}
|
||||
children := p.buildDepartmentTree(departments, dept.ID)
|
||||
if len(children) > 0 {
|
||||
node["children"] = children
|
||||
}
|
||||
tree = append(tree, node)
|
||||
}
|
||||
}
|
||||
return tree
|
||||
}
|
||||
|
||||
@@ -0,0 +1,57 @@
|
||||
package option_providers
|
||||
|
||||
import (
|
||||
"github.com/goravel/framework/contracts/http"
|
||||
|
||||
"goravel/app/models"
|
||||
"goravel/app/services"
|
||||
)
|
||||
|
||||
type MenuOptionProvider struct {
|
||||
treeService services.TreeService
|
||||
}
|
||||
|
||||
func NewMenuOptionProvider(treeService services.TreeService) *MenuOptionProvider {
|
||||
return &MenuOptionProvider{
|
||||
treeService: treeService,
|
||||
}
|
||||
}
|
||||
|
||||
func (p *MenuOptionProvider) GetOptions(ctx http.Context) (map[string]any, error) {
|
||||
menus, err := p.treeService.BuildMenuTree(0)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
tree := p.buildMenuTree(menus)
|
||||
|
||||
return map[string]any{
|
||||
"options": tree,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (p *MenuOptionProvider) buildMenuTree(menus []models.Menu) []map[string]any {
|
||||
var tree []map[string]any
|
||||
for _, menu := range menus {
|
||||
// 使用菜单标题和路径构建显示标签
|
||||
label := menu.Title
|
||||
if menu.Path != "" {
|
||||
label = label + " (" + menu.Path + ")"
|
||||
}
|
||||
|
||||
node := map[string]any{
|
||||
"id": menu.ID,
|
||||
"name": menu.Title,
|
||||
"label": label,
|
||||
"value": menu.ID,
|
||||
}
|
||||
|
||||
if len(menu.Children) > 0 {
|
||||
node["children"] = p.buildMenuTree(menu.Children)
|
||||
}
|
||||
|
||||
tree = append(tree, node)
|
||||
}
|
||||
return tree
|
||||
}
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
package option_providers
|
||||
|
||||
import (
|
||||
"github.com/goravel/framework/contracts/http"
|
||||
)
|
||||
|
||||
type MethodOptionProvider struct{}
|
||||
|
||||
func NewMethodOptionProvider() *MethodOptionProvider {
|
||||
return &MethodOptionProvider{}
|
||||
}
|
||||
|
||||
func (p *MethodOptionProvider) GetOptions(ctx http.Context) (map[string]any, error) {
|
||||
options := []map[string]any{
|
||||
{"label": "GET", "value": "GET"},
|
||||
{"label": "POST", "value": "POST"},
|
||||
{"label": "PUT", "value": "PUT"},
|
||||
{"label": "DELETE", "value": "DELETE"},
|
||||
{"label": "PATCH", "value": "PATCH"},
|
||||
}
|
||||
|
||||
return map[string]any{
|
||||
"options": options,
|
||||
}, nil
|
||||
}
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
package option_providers
|
||||
|
||||
import (
|
||||
"github.com/goravel/framework/contracts/http"
|
||||
"github.com/goravel/framework/facades"
|
||||
"github.com/samber/lo"
|
||||
"github.com/spf13/cast"
|
||||
|
||||
"goravel/app/models"
|
||||
)
|
||||
|
||||
type PaymentMethodOptionProvider struct{}
|
||||
|
||||
func NewPaymentMethodOptionProvider() *PaymentMethodOptionProvider {
|
||||
return &PaymentMethodOptionProvider{}
|
||||
}
|
||||
|
||||
func (p *PaymentMethodOptionProvider) GetOptions(ctx http.Context) (map[string]any, error) {
|
||||
var paymentMethods []models.PaymentMethod
|
||||
|
||||
// 只查询已启用的支付方式
|
||||
query := facades.Orm().Query().Model(&models.PaymentMethod{}).Where("is_active", true).Order("sort asc").Order("id asc")
|
||||
if err := query.Get(&paymentMethods); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
options := lo.Map(paymentMethods, func(pm models.PaymentMethod, _ int) map[string]any {
|
||||
return map[string]any{
|
||||
"label": pm.Name,
|
||||
"value": cast.ToString(pm.ID),
|
||||
}
|
||||
})
|
||||
|
||||
return map[string]any{
|
||||
"options": options,
|
||||
}, nil
|
||||
}
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
package option_providers
|
||||
|
||||
import (
|
||||
"github.com/samber/lo"
|
||||
"github.com/goravel/framework/contracts/http"
|
||||
"github.com/goravel/framework/facades"
|
||||
"github.com/spf13/cast"
|
||||
|
||||
"goravel/app/models"
|
||||
)
|
||||
|
||||
type RoleOptionProvider struct{}
|
||||
|
||||
func NewRoleOptionProvider() *RoleOptionProvider {
|
||||
return &RoleOptionProvider{}
|
||||
}
|
||||
|
||||
func (p *RoleOptionProvider) GetOptions(ctx http.Context) (map[string]any, error) {
|
||||
var roles []models.Role
|
||||
if err := facades.Orm().Query().Where("status", 1).Order("id asc").Get(&roles); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
options := lo.Map(roles, func(role models.Role, _ int) map[string]any {
|
||||
return map[string]any{
|
||||
"label": role.Name,
|
||||
"value": cast.ToString(role.ID),
|
||||
}
|
||||
})
|
||||
|
||||
return map[string]any{
|
||||
"options": options,
|
||||
}, nil
|
||||
}
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
package option_providers
|
||||
|
||||
import (
|
||||
"github.com/goravel/framework/contracts/http"
|
||||
|
||||
"goravel/app/http/trans"
|
||||
)
|
||||
|
||||
type StatusOptionProvider struct{}
|
||||
|
||||
func NewStatusOptionProvider() *StatusOptionProvider {
|
||||
return &StatusOptionProvider{}
|
||||
}
|
||||
|
||||
func (p *StatusOptionProvider) GetOptions(ctx http.Context) (map[string]any, error) {
|
||||
options := []map[string]any{
|
||||
{"label": trans.Get(ctx, "common.enabled"), "value": "1"},
|
||||
{"label": trans.Get(ctx, "common.disabled"), "value": "0"},
|
||||
}
|
||||
|
||||
return map[string]any{
|
||||
"options": options,
|
||||
}, nil
|
||||
}
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
package option_providers
|
||||
|
||||
import (
|
||||
"github.com/goravel/framework/contracts/http"
|
||||
|
||||
"goravel/app/http/trans"
|
||||
)
|
||||
|
||||
type YesNoOptionProvider struct{}
|
||||
|
||||
func NewYesNoOptionProvider() *YesNoOptionProvider {
|
||||
return &YesNoOptionProvider{}
|
||||
}
|
||||
|
||||
func (p *YesNoOptionProvider) GetOptions(ctx http.Context) (map[string]any, error) {
|
||||
options := []map[string]any{
|
||||
{"label": trans.Get(ctx, "common.yes"), "value": "1"},
|
||||
{"label": trans.Get(ctx, "common.no"), "value": "0"},
|
||||
}
|
||||
|
||||
return map[string]any{
|
||||
"options": options,
|
||||
}, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user