初始化

This commit is contained in:
2026-07-18 05:58:41 +08:00
commit e4b95eb05e
69 changed files with 2289 additions and 0 deletions

View File

@@ -0,0 +1,9 @@
package admin
// ControllerV1 是后台管理控制器。
type ControllerV1 struct{}
// NewV1 创建后台管理控制器实例。
func NewV1() *ControllerV1 {
return &ControllerV1{}
}

View File

@@ -0,0 +1,111 @@
package admin
import (
"context"
"xk-of-api/api/admin/v1"
"xk-of-api/internal/model"
"xk-of-api/internal/response"
"xk-of-api/internal/service"
)
// Login 处理后台登录请求。
func (c *ControllerV1) Login(ctx context.Context, req *v1.LoginReq) (res *v1.LoginRes, err error) {
response.Success(ctx, service.Admin.Login(req.Account))
return nil, nil
}
// MenuTree 返回后台多级菜单树。
func (c *ControllerV1) MenuTree(ctx context.Context, req *v1.MenuTreeReq) (res *v1.MenuTreeRes, err error) {
response.Success(ctx, service.Admin.Menus())
return nil, nil
}
// MenuLayout 返回当前管理员菜单布局。
func (c *ControllerV1) MenuLayout(ctx context.Context, req *v1.MenuLayoutReq) (res *v1.MenuLayoutRes, err error) {
response.Success(ctx, service.Admin.MenuLayout())
return nil, nil
}
// UpdateMenuLayout 更新当前管理员菜单布局偏好。
func (c *ControllerV1) UpdateMenuLayout(ctx context.Context, req *v1.UpdateMenuLayoutReq) (res *v1.UpdateMenuLayoutRes, err error) {
response.Success(ctx, service.Admin.UpdateMenuLayout(req.MenuLayout))
return nil, nil
}
// Roles 返回角色列表。
func (c *ControllerV1) Roles(ctx context.Context, req *v1.RolesReq) (res *v1.RolesRes, err error) {
response.Success(ctx, service.Admin.Roles())
return nil, nil
}
// SaveRoleMenus 保存角色菜单授权。
func (c *ControllerV1) SaveRoleMenus(ctx context.Context, req *v1.SaveRoleMenusReq) (res *v1.SaveRoleMenusRes, err error) {
response.Success(ctx, service.Admin.SaveRoleMenus(req.RoleId, req.MenuIds))
return nil, nil
}
// SitePages 获取页面 SEO/GSO 配置。
func (c *ControllerV1) SitePages(ctx context.Context, req *v1.SitePagesReq) (res *v1.SitePagesRes, err error) {
response.Success(ctx, service.Admin.SitePages())
return nil, nil
}
// SaveSitePage 保存页面 SEO/GSO 配置。
func (c *ControllerV1) SaveSitePage(ctx context.Context, req *v1.SaveSitePageReq) (res *v1.SaveSitePageRes, err error) {
page := model.SitePage{Id: req.Id, Code: req.Code, Title: req.Title, SeoTitle: req.SeoTitle, SeoKeywords: req.SeoKeywords, SeoDescription: req.SeoDescription, GsoContent: req.GsoContent, Status: req.Status, Sort: req.Sort}
response.Success(ctx, service.Admin.SaveSitePage(page))
return nil, nil
}
// SiteSections 获取官网页面模块。
func (c *ControllerV1) SiteSections(ctx context.Context, req *v1.SiteSectionsReq) (res *v1.SiteSectionsRes, err error) {
response.Success(ctx, service.Admin.SiteSections(req.PageCode))
return nil, nil
}
// SaveSiteSection 保存官网页面模块。
func (c *ControllerV1) SaveSiteSection(ctx context.Context, req *v1.SaveSiteSectionReq) (res *v1.SaveSiteSectionRes, err error) {
section := model.SiteSection{Id: req.Id, PageCode: req.PageCode, SectionKey: req.SectionKey, Title: req.Title, Subtitle: req.Subtitle, Content: req.Content, Status: req.Status, Sort: req.Sort}
response.Success(ctx, service.Admin.SaveSiteSection(section))
return nil, nil
}
// SiteMedia 获取官网素材列表。
func (c *ControllerV1) SiteMedia(ctx context.Context, req *v1.SiteMediaReq) (res *v1.SiteMediaRes, err error) {
response.Success(ctx, service.Admin.SiteMedia(req.MediaType))
return nil, nil
}
// SaveSiteMedia 保存官网素材。
func (c *ControllerV1) SaveSiteMedia(ctx context.Context, req *v1.SaveSiteMediaReq) (res *v1.SaveSiteMediaRes, err error) {
media := model.SiteMedia{Id: req.Id, MediaType: req.MediaType, GroupCode: req.GroupCode, Title: req.Title, Url: req.Url, Alt: req.Alt, Status: req.Status, Sort: req.Sort}
response.Success(ctx, service.Admin.SaveSiteMedia(media))
return nil, nil
}
// RecruitJobs 获取后台招聘职位列表。
func (c *ControllerV1) RecruitJobs(ctx context.Context, req *v1.RecruitJobsReq) (res *v1.RecruitJobsRes, err error) {
response.Success(ctx, service.Admin.RecruitJobs())
return nil, nil
}
// SaveRecruitJob 保存招聘职位。
func (c *ControllerV1) SaveRecruitJob(ctx context.Context, req *v1.SaveRecruitJobReq) (res *v1.SaveRecruitJobRes, err error) {
job := model.RecruitJob{Id: req.Id, Title: req.Title, Department: req.Department, JobType: req.JobType, City: req.City, Salary: req.Salary, Experience: req.Experience, Description: req.Description, Requirements: req.Requirements, Manager: req.Manager, ManagerTitle: req.ManagerTitle, Email: req.Email, Phone: req.Phone, Featured: req.Featured, Status: req.Status, Sort: req.Sort}
response.Success(ctx, service.Admin.SaveRecruitJob(job))
return nil, nil
}
// SiteSettings 获取站点全局配置。
func (c *ControllerV1) SiteSettings(ctx context.Context, req *v1.SiteSettingsReq) (res *v1.SiteSettingsRes, err error) {
response.Success(ctx, service.Admin.SiteSettings())
return nil, nil
}
// SaveSiteSettings 保存站点全局配置。
func (c *ControllerV1) SaveSiteSettings(ctx context.Context, req *v1.SaveSiteSettingsReq) (res *v1.SaveSiteSettingsRes, err error) {
settings := model.SiteSettings{SiteTitle: req.SiteTitle, SiteLogo: req.SiteLogo, SiteLogoDark: req.SiteLogoDark, SiteFavicon: req.SiteFavicon, IcpText: req.IcpText, Copyright: req.Copyright, ContactPhone: req.ContactPhone, ContactEmail: req.ContactEmail, ContactAddress: req.ContactAddress, DefaultSeo: req.DefaultSeo, DefaultGso: req.DefaultGso, AmapKey: req.AmapKey, AmapSecurityCode: req.AmapSecurityCode}
response.Success(ctx, service.Admin.SaveSiteSettings(settings))
return nil, nil
}

View File

@@ -0,0 +1,5 @@
// =================================================================================
// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish.
// =================================================================================
package hello

View File

@@ -0,0 +1,15 @@
// =================================================================================
// Code generated and maintained by GoFrame CLI tool. DO NOT EDIT.
// =================================================================================
package hello
import (
"xk-of-api/api/hello"
)
type ControllerV1 struct{}
func NewV1() hello.IHelloV1 {
return &ControllerV1{}
}

View File

@@ -0,0 +1,13 @@
package hello
import (
"context"
"github.com/gogf/gf/v2/frame/g"
"xk-of-api/api/hello/v1"
)
func (c *ControllerV1) Hello(ctx context.Context, req *v1.HelloReq) (res *v1.HelloRes, err error) {
g.RequestFromCtx(ctx).Response.Writeln("Hello World!")
return
}

View File

@@ -0,0 +1,9 @@
package lead
// ControllerV1 是官网线索控制器。
type ControllerV1 struct{}
// NewV1 创建官网线索控制器实例。
func NewV1() *ControllerV1 {
return &ControllerV1{}
}

View File

@@ -0,0 +1,27 @@
package lead
import (
"context"
"xk-of-api/api/lead/v1"
"xk-of-api/internal/model"
"xk-of-api/internal/response"
"xk-of-api/internal/service"
)
// Create 创建官网咨询或预约演示线索。
func (c *ControllerV1) Create(ctx context.Context, req *v1.CreateReq) (res *v1.CreateRes, err error) {
result, err := service.Lead.Create(model.Lead{Name: req.Name, Phone: req.Phone, ClinicName: req.ClinicName, City: req.City, PlanCode: req.PlanCode, SourcePage: req.SourcePage, Remark: req.Remark})
if err != nil {
response.Error(ctx, 400, err.Error())
return nil, nil
}
response.Success(ctx, result)
return nil, nil
}
// AdminList 获取后台线索列表。
func (c *ControllerV1) AdminList(ctx context.Context, req *v1.AdminListReq) (res *v1.AdminListRes, err error) {
response.Success(ctx, service.Lead.List())
return nil, nil
}

View File

@@ -0,0 +1,9 @@
package order
// ControllerV1 是订购订单控制器。
type ControllerV1 struct{}
// NewV1 创建订购订单控制器实例。
func NewV1() *ControllerV1 {
return &ControllerV1{}
}

View File

@@ -0,0 +1,37 @@
package order
import (
"context"
"xk-of-api/api/order/v1"
"xk-of-api/internal/model"
"xk-of-api/internal/response"
"xk-of-api/internal/service"
)
// Create 创建套餐订购订单。
func (c *ControllerV1) Create(ctx context.Context, req *v1.CreateReq) (res *v1.CreateRes, err error) {
result, err := service.Order.Create(model.Order{TenantName: req.TenantName, ContactName: req.ContactName, Phone: req.Phone, PlanCode: req.PlanCode, BillingCycle: req.BillingCycle})
if err != nil {
response.Error(ctx, 400, err.Error())
return nil, nil
}
response.Success(ctx, result)
return nil, nil
}
// Detail 获取订单详情。
func (c *ControllerV1) Detail(ctx context.Context, req *v1.DetailReq) (res *v1.DetailRes, err error) {
if req.OrderNo == "" {
response.Error(ctx, 400, "订单号不能为空")
return nil, nil
}
response.Success(ctx, service.Order.Detail(req.OrderNo))
return nil, nil
}
// AdminList 获取后台订单列表。
func (c *ControllerV1) AdminList(ctx context.Context, req *v1.AdminListReq) (res *v1.AdminListRes, err error) {
response.Success(ctx, service.Order.List())
return nil, nil
}

View File

@@ -0,0 +1,9 @@
package payment
// ControllerV1 是支付回调控制器。
type ControllerV1 struct{}
// NewV1 创建支付回调控制器实例。
func NewV1() *ControllerV1 {
return &ControllerV1{}
}

View File

@@ -0,0 +1,21 @@
package payment
import (
"context"
"github.com/gogf/gf/v2/frame/g"
"xk-of-api/api/payment/v1"
"xk-of-api/internal/response"
"xk-of-api/internal/service"
)
// Notify 接收支付渠道回调,后续在 service 中扩展验签和状态流转。
func (c *ControllerV1) Notify(ctx context.Context, req *v1.NotifyReq) (res *v1.NotifyRes, err error) {
if req.Channel == "" {
response.Error(ctx, 400, "支付渠道不能为空")
return nil, nil
}
response.Success(ctx, service.Order.Notify(req.Channel, g.RequestFromCtx(ctx).GetMap()))
return nil, nil
}

View File

@@ -0,0 +1,9 @@
package pricing
// ControllerV1 是套餐定价控制器。
type ControllerV1 struct{}
// NewV1 创建套餐定价控制器实例。
func NewV1() *ControllerV1 {
return &ControllerV1{}
}

View File

@@ -0,0 +1,21 @@
package pricing
import (
"context"
"xk-of-api/api/pricing/v1"
"xk-of-api/internal/response"
"xk-of-api/internal/service"
)
// Plans 获取官网可展示套餐。
func (c *ControllerV1) Plans(ctx context.Context, req *v1.PlansReq) (res *v1.PlansRes, err error) {
response.Success(ctx, service.Pricing.Plans())
return nil, nil
}
// AdminPlans 获取后台套餐列表。
func (c *ControllerV1) AdminPlans(ctx context.Context, req *v1.AdminPlansReq) (res *v1.AdminPlansRes, err error) {
response.Success(ctx, service.Pricing.Plans())
return nil, nil
}

View File

@@ -0,0 +1,9 @@
package site
// ControllerV1 是官网内容控制器。
type ControllerV1 struct{}
// NewV1 创建官网内容控制器实例。
func NewV1() *ControllerV1 {
return &ControllerV1{}
}

View File

@@ -0,0 +1,27 @@
package site
import (
"context"
"xk-of-api/api/site/v1"
"xk-of-api/internal/response"
"xk-of-api/internal/service"
)
// Home 获取官网首页聚合内容。
func (c *ControllerV1) Home(ctx context.Context, req *v1.HomeReq) (res *v1.HomeRes, err error) {
response.Success(ctx, service.Site.Home())
return nil, nil
}
// Settings 获取前台站点公开配置。
func (c *ControllerV1) Settings(ctx context.Context, req *v1.SettingsReq) (res *v1.SettingsRes, err error) {
response.Success(ctx, service.Site.Settings())
return nil, nil
}
// RecruitJobs 获取前台招聘职位。
func (c *ControllerV1) RecruitJobs(ctx context.Context, req *v1.RecruitJobsReq) (res *v1.RecruitJobsRes, err error) {
response.Success(ctx, service.Site.RecruitJobs())
return nil, nil
}