diff --git a/server/addons/flashbanner/README.MD b/server/addons/flashbanner/README.MD new file mode 100644 index 0000000..76a4f7b --- /dev/null +++ b/server/addons/flashbanner/README.MD @@ -0,0 +1,45 @@ +## 轮播图管理 + +### 简介 + + + + +### 使用说明 + + + + +### 迁移或安装 + +1、安装 HotGo (2.17.8及以上) + +项目介绍:https://github.com/bufanyun/hotgo + +2、将当前插件项目拷贝进 HotGo 根目录的 server/addons 目录下 + +3、在 HotGo 根目录的 server/addons/modules 目录下创建go文件:flashbanner.go,内容如下: +```go +package modules + +import _ "hotgo/addons/flashbanner" +``` + +4、HotGo 后台进入 开发工具->插件管理->找到 轮播图管理 (flashbanner) 进行安装 + +5、重启服务即可生效 + + +### 常用命令行 + +```shell +# 接口维护-gen service +gf gen service -s=addons/flashbanner/logic -d=addons/flashbanner/service + +``` + +### `gf gen dao` 之后迁移model文件 +``` +cp .\internal\dao\internal\banner* .\addons\flashbanner\dao\internal\ +cp .\internal\model\entity\banner* .\addons\flashbanner\model\entity\ +``` diff --git a/server/addons/flashbanner/api/admin/banner/banner.go b/server/addons/flashbanner/api/admin/banner/banner.go new file mode 100644 index 0000000..9d75f55 --- /dev/null +++ b/server/addons/flashbanner/api/admin/banner/banner.go @@ -0,0 +1,65 @@ +// Package banner +// @Link https://github.com/bufanyun/hotgo +// @Copyright Copyright (c) 2024 HotGo CLI +// @Author Ms <133814250@qq.com> +// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE +package banner + +import ( + "github.com/gogf/gf/v2/frame/g" + "hotgo/addons/flashbanner/model/input/sysin" + "hotgo/internal/model/input/form" +) + +// CreateReq 创建轮播图 +type CreateReq struct { + g.Meta `path:"/banner/create" method:"post" tags:"轮播图" summary:"创建轮播图"` + sysin.BannerCreateInp +} + +type CreateRes struct{} + +// ListReq 查询列表 +type ListReq struct { + g.Meta `path:"/banner/list" method:"get" tags:"轮播图" summary:"获取轮播图列表"` + sysin.BannerListInp +} + +type ListRes struct { + List []*sysin.BannerListModel `json:"list" dc:"数据列表"` + form.PageRes +} + +// ViewReq 获取指定信息 +type ViewReq struct { + g.Meta `path:"/banner/view" method:"get" tags:"轮播图" summary:"获取指定轮播图信息"` + sysin.BannerViewInp +} + +type ViewRes struct { + *sysin.BannerViewModel +} + +// EditReq 修改/新增轮播图 +type EditReq struct { + g.Meta `path:"/banner/edit" method:"post" tags:"轮播图" summary:"修改/新增轮播图"` + sysin.BannerEditInp +} + +type EditRes struct{} + +// DeleteReq 删除轮播图 +type DeleteReq struct { + g.Meta `path:"/banner/delete" method:"post" tags:"轮播图" summary:"删除轮播图"` + sysin.BannerDeleteInp +} + +type DeleteRes struct{} + +// StatusReq 更新轮播图状态 +type StatusReq struct { + g.Meta `path:"/banner/status" method:"post" tags:"轮播图" summary:"更新轮播图状态"` + sysin.BannerStatusInp +} + +type StatusRes struct{} \ No newline at end of file diff --git a/server/addons/flashbanner/api/admin/config/config.go b/server/addons/flashbanner/api/admin/config/config.go new file mode 100644 index 0000000..e54dc78 --- /dev/null +++ b/server/addons/flashbanner/api/admin/config/config.go @@ -0,0 +1,30 @@ +// Package config +// @Link https://github.com/bufanyun/hotgo +// @Copyright Copyright (c) 2024 HotGo CLI +// @Author Ms <133814250@qq.com> +// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE +package config + +import ( + "github.com/gogf/gf/v2/frame/g" + "hotgo/addons/flashbanner/model/input/sysin" +) + +// GetReq 获取指定分组的配置 +type GetReq struct { + g.Meta `path:"/config/get" method:"get" tags:"轮播图管理" summary:"获取指定分组的配置"` + sysin.GetConfigInp +} + +type GetRes struct { + *sysin.GetConfigModel +} + +// UpdateReq 获取指定分组的配置 +type UpdateReq struct { + g.Meta `path:"/config/update" method:"post" tags:"轮播图管理" summary:"获取指定分组的配置"` + sysin.UpdateConfigInp +} + +type UpdateRes struct { +} diff --git a/server/addons/flashbanner/api/admin/index/banner/banner.go b/server/addons/flashbanner/api/admin/index/banner/banner.go new file mode 100644 index 0000000..8ef1cb2 --- /dev/null +++ b/server/addons/flashbanner/api/admin/index/banner/banner.go @@ -0,0 +1,33 @@ +// Package banner +// @Link https://github.com/bufanyun/hotgo +// @Copyright Copyright (c) 2024 HotGo CLI +// @Author Ms <133814250@qq.com> +// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE +package banner + +import ( + "github.com/gogf/gf/v2/frame/g" + "hotgo/addons/flashbanner/model/input/sysin" + "hotgo/internal/model/input/form" +) + +// ListReq 查询列表 +type ListReq struct { + g.Meta `path:"/banner/list" method:"get" tags:"轮播图" summary:"获取轮播图列表"` + sysin.BannerListInp +} + +type ListRes struct { + List []*sysin.BannerListModel `json:"list" dc:"数据列表"` + form.PageRes +} + +// ViewReq 获取指定信息 +type ViewReq struct { + g.Meta `path:"/banner/view" method:"get" tags:"轮播图" summary:"获取指定轮播图信息"` + sysin.BannerViewInp +} + +type ViewRes struct { + *sysin.BannerViewModel +} diff --git a/server/addons/flashbanner/api/admin/index/index.go b/server/addons/flashbanner/api/admin/index/index.go new file mode 100644 index 0000000..9688324 --- /dev/null +++ b/server/addons/flashbanner/api/admin/index/index.go @@ -0,0 +1,23 @@ +// Package index +// @Link https://github.com/bufanyun/hotgo +// @Copyright Copyright (c) 2024 HotGo CLI +// @Author Ms <133814250@qq.com> +// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE +package index + +import ( + "github.com/gogf/gf/v2/frame/g" + "hotgo/addons/flashbanner/model/input/sysin" +) + +// TestReq 测试 +type TestReq struct { + g.Meta `path:"/index/test" method:"get" tags:"轮播图管理" summary:"测试后台API"` + sysin.IndexTestInp +} + +type TestRes struct { + *sysin.IndexTestModel +} + + diff --git a/server/addons/flashbanner/api/api/index/index.go b/server/addons/flashbanner/api/api/index/index.go new file mode 100644 index 0000000..763ef79 --- /dev/null +++ b/server/addons/flashbanner/api/api/index/index.go @@ -0,0 +1,21 @@ +// Package index +// @Link https://github.com/bufanyun/hotgo +// @Copyright Copyright (c) 2024 HotGo CLI +// @Author Ms <133814250@qq.com> +// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE +package index + +import ( + "github.com/gogf/gf/v2/frame/g" + "hotgo/addons/flashbanner/model/input/sysin" +) + +// TestReq 测试 +type TestReq struct { + g.Meta `path:"/index/test" method:"get" tags:"轮播图管理" summary:"测试前台API"` + sysin.IndexTestInp +} + +type TestRes struct { + *sysin.IndexTestModel +} diff --git a/server/addons/flashbanner/api/home/index/index.go b/server/addons/flashbanner/api/home/index/index.go new file mode 100644 index 0000000..31fce84 --- /dev/null +++ b/server/addons/flashbanner/api/home/index/index.go @@ -0,0 +1,21 @@ +// Package index +// @Link https://github.com/bufanyun/hotgo +// @Copyright Copyright (c) 2024 HotGo CLI +// @Author Ms <133814250@qq.com> +// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE +package index + +import ( + "github.com/gogf/gf/v2/frame/g" + "hotgo/addons/flashbanner/model/input/sysin" +) + +// TestReq 测试 +type TestReq struct { + g.Meta `path:"/index/test" method:"get" summary:"轮播图管理" tags:"测试首页"` + sysin.IndexTestInp +} + +type TestRes struct { + g.Meta `mime:"text/html" type:"string" example:"
"` +} diff --git a/server/addons/flashbanner/api/websocket/index/index.go b/server/addons/flashbanner/api/websocket/index/index.go new file mode 100644 index 0000000..c437577 --- /dev/null +++ b/server/addons/flashbanner/api/websocket/index/index.go @@ -0,0 +1,21 @@ +// Package index +// @Link https://github.com/bufanyun/hotgo +// @Copyright Copyright (c) 2024 HotGo CLI +// @Author Ms <133814250@qq.com> +// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE +package index + +import ( + "github.com/gogf/gf/v2/frame/g" + "hotgo/addons/flashbanner/model/input/sysin" +) + +// TestReq 测试 +type TestReq struct { + g.Meta `path:"/index/test" method:"get" tags:"轮播图管理" summary:"测试websocket"` + sysin.IndexTestInp +} + +type TestRes struct { + *sysin.IndexTestModel +} diff --git a/server/addons/flashbanner/consts/consts.go b/server/addons/flashbanner/consts/consts.go new file mode 100644 index 0000000..4306296 --- /dev/null +++ b/server/addons/flashbanner/consts/consts.go @@ -0,0 +1,9 @@ +// Package consts +// @Link https://github.com/bufanyun/hotgo +// @Copyright Copyright (c) 2024 HotGo CLI +// @Author Ms <133814250@qq.com> +// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE +package consts + +// 常量枚举. +// 插件中的常量枚举可以统一在这目录下 diff --git a/server/addons/flashbanner/controller/admin/banner/banner.go b/server/addons/flashbanner/controller/admin/banner/banner.go new file mode 100644 index 0000000..45f2c2c --- /dev/null +++ b/server/addons/flashbanner/controller/admin/banner/banner.go @@ -0,0 +1,81 @@ +// Package banner +// @Link https://github.com/bufanyun/hotgo +// @Copyright Copyright (c) 2024 HotGo CLI +// @Author Ms <133814250@qq.com> +// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE +package banner + +import ( + "context" + "hotgo/addons/flashbanner/api/admin/banner" + "hotgo/addons/flashbanner/service" +) + +var ( + Banner = cBanner{} +) + +type cBanner struct{} + +// Create 创建轮播图 +func (c *cBanner) Create(ctx context.Context, req *banner.CreateReq) (res *banner.CreateRes, err error) { + err = service.SysBanner().Create(ctx, &req.BannerCreateInp) + if err != nil { + return nil, err + } + res = &banner.CreateRes{} + return res, nil +} + +// List 获取轮播图列表 +func (c *cBanner) List(ctx context.Context, req *banner.ListReq) (res *banner.ListRes, err error) { + list, totalCount, err := service.SysBanner().List(ctx, &req.BannerListInp) + if err != nil { + return nil, err + } + res = &banner.ListRes{ + List: list, + } + res.PageRes.Pack(&req.BannerListInp, totalCount) + return res, nil +} + +// View 获取指定轮播图信息 +func (c *cBanner) View(ctx context.Context, req *banner.ViewReq) (res *banner.ViewRes, err error) { + model, err := service.SysBanner().View(ctx, &req.BannerViewInp) + if err != nil { + return nil, err + } + res = &banner.ViewRes{model} + return res, nil +} + +// Edit 修改/新增轮播图 +func (c *cBanner) Edit(ctx context.Context, req *banner.EditReq) (res *banner.EditRes, err error) { + err = service.SysBanner().Edit(ctx, &req.BannerEditInp) + if err != nil { + return nil, err + } + res = &banner.EditRes{} + return res, nil +} + +// Delete 删除轮播图 +func (c *cBanner) Delete(ctx context.Context, req *banner.DeleteReq) (res *banner.DeleteRes, err error) { + err = service.SysBanner().Delete(ctx, &req.BannerDeleteInp) + if err != nil { + return nil, err + } + res = &banner.DeleteRes{} + return res, nil +} + +// Status 更新轮播图状态 +func (c *cBanner) Status(ctx context.Context, req *banner.StatusReq) (res *banner.StatusRes, err error) { + err = service.SysBanner().Status(ctx, &req.BannerStatusInp) + if err != nil { + return nil, err + } + res = &banner.StatusRes{} + return res, nil +} \ No newline at end of file diff --git a/server/addons/flashbanner/controller/admin/sys/banner.go b/server/addons/flashbanner/controller/admin/sys/banner.go new file mode 100644 index 0000000..47dbe1e --- /dev/null +++ b/server/addons/flashbanner/controller/admin/sys/banner.go @@ -0,0 +1,14 @@ +// Package sys +// @Link https://github.com/bufanyun/hotgo +// @Copyright Copyright (c) 2024 HotGo CLI +// @Author Ms <133814250@qq.com> +// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE +package sys + +import ( + "hotgo/addons/flashbanner/controller/admin/banner" +) + +var ( + Banner = banner.Banner +) \ No newline at end of file diff --git a/server/addons/flashbanner/controller/admin/sys/config.go b/server/addons/flashbanner/controller/admin/sys/config.go new file mode 100644 index 0000000..8d72a27 --- /dev/null +++ b/server/addons/flashbanner/controller/admin/sys/config.go @@ -0,0 +1,33 @@ +// Package sys +// @Link https://github.com/bufanyun/hotgo +// @Copyright Copyright (c) 2024 HotGo CLI +// @Author Ms <133814250@qq.com> +// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE +package sys + +import ( + "context" + "hotgo/addons/flashbanner/api/admin/config" + "hotgo/addons/flashbanner/service" +) + +var ( + Config = cConfig{} +) + +type cConfig struct{} + +// GetConfig 获取指定分组的配置 +func (c *cConfig) GetConfig(ctx context.Context, req *config.GetReq) (res *config.GetRes, err error) { + data, err := service.SysConfig().GetConfigByGroup(ctx, &req.GetConfigInp) + + res = new(config.GetRes) + res.GetConfigModel = data + return +} + +// UpdateConfig 更新指定分组的配置 +func (c *cConfig) UpdateConfig(ctx context.Context, req *config.UpdateReq) (res *config.UpdateRes, err error) { + err = service.SysConfig().UpdateConfigByGroup(ctx, &req.UpdateConfigInp) + return +} diff --git a/server/addons/flashbanner/controller/admin/sys/index.go b/server/addons/flashbanner/controller/admin/sys/index.go new file mode 100644 index 0000000..74fa221 --- /dev/null +++ b/server/addons/flashbanner/controller/admin/sys/index.go @@ -0,0 +1,30 @@ +// Package sys +// @Link https://github.com/bufanyun/hotgo +// @Copyright Copyright (c) 2024 HotGo CLI +// @Author Ms <133814250@qq.com> +// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE +package sys + +import ( + "context" + "hotgo/addons/flashbanner/api/admin/index" + "hotgo/addons/flashbanner/service" +) + +var ( + Index = cIndex{} +) + +type cIndex struct{} + +// Test 测试 +func (c *cIndex) Test(ctx context.Context, req *index.TestReq) (res *index.TestRes, err error) { + data, err := service.SysIndex().Test(ctx, &req.IndexTestInp) + if err != nil { + return + } + + res = new(index.TestRes) + res.IndexTestModel = data + return +} diff --git a/server/addons/flashbanner/controller/api/banner/banner.go b/server/addons/flashbanner/controller/api/banner/banner.go new file mode 100644 index 0000000..bdbea11 --- /dev/null +++ b/server/addons/flashbanner/controller/api/banner/banner.go @@ -0,0 +1,41 @@ +// Package banner +// @Link https://github.com/bufanyun/hotgo +// @Copyright Copyright (c) 2024 HotGo CLI +// @Author Ms <133814250@qq.com> +// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE +package banner + +import ( + "context" + "hotgo/addons/flashbanner/api/admin/banner" + "hotgo/addons/flashbanner/service" +) + +var ( + BannerIndex = cBanner{} +) + +type cBanner struct{} + +// List 获取轮播图列表 +func (c *cBanner) List(ctx context.Context, req *banner.ListReq) (res *banner.ListRes, err error) { + list, totalCount, err := service.SysBanner().List(ctx, &req.BannerListInp) + if err != nil { + return nil, err + } + res = &banner.ListRes{ + List: list, + } + res.PageRes.Pack(&req.BannerListInp, totalCount) + return res, nil +} + +// View 获取指定轮播图信息 +func (c *cBanner) View(ctx context.Context, req *banner.ViewReq) (res *banner.ViewRes, err error) { + model, err := service.SysBanner().View(ctx, &req.BannerViewInp) + if err != nil { + return nil, err + } + res = &banner.ViewRes{model} + return res, nil +} diff --git a/server/addons/flashbanner/controller/api/index.go b/server/addons/flashbanner/controller/api/index.go new file mode 100644 index 0000000..3e03d76 --- /dev/null +++ b/server/addons/flashbanner/controller/api/index.go @@ -0,0 +1,31 @@ +// Package api +// @Link https://github.com/bufanyun/hotgo +// @Copyright Copyright (c) 2024 HotGo CLI +// @Author Ms <133814250@qq.com> +// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE +package api + +import ( + "context" + "hotgo/addons/flashbanner/api/api/index" + "hotgo/addons/flashbanner/service" +) + +var ( + Index = cIndex{} +) + +type cIndex struct{} + +// Test 测试 +func (c *cIndex) Test(ctx context.Context, req *index.TestReq) (res *index.TestRes, err error) { + data, err := service.SysIndex().Test(ctx, &req.IndexTestInp) + if err != nil { + return + } + + res = new(index.TestRes) + res.IndexTestModel = data + return +} + diff --git a/server/addons/flashbanner/controller/home/index.go b/server/addons/flashbanner/controller/home/index.go new file mode 100644 index 0000000..a615998 --- /dev/null +++ b/server/addons/flashbanner/controller/home/index.go @@ -0,0 +1,34 @@ +// Package home +// @Link https://github.com/bufanyun/hotgo +// @Copyright Copyright (c) 2024 HotGo CLI +// @Author Ms <133814250@qq.com> +// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE +package home + +import ( + "context" + "github.com/gogf/gf/v2/frame/g" + "hotgo/addons/flashbanner/api/home/index" + "hotgo/addons/flashbanner/service" + "hotgo/internal/model" + isc "hotgo/internal/service" +) + +// Index 基础 +var Index = cIndex{} + +type cIndex struct{} + +func (a *cIndex) Index(ctx context.Context, req *index.TestReq) (res *index.TestRes, err error) { + data, err := service.SysIndex().Test(ctx, &req.IndexTestInp) + if err != nil { + return + } + + isc.View().RenderTpl(ctx, "home/index.html", model.View{Data: g.Map{ + "name": data.Name, + "module": data.Module, + "time": data.Time, + }}) + return +} diff --git a/server/addons/flashbanner/controller/websocket/index.go b/server/addons/flashbanner/controller/websocket/index.go new file mode 100644 index 0000000..117b8b0 --- /dev/null +++ b/server/addons/flashbanner/controller/websocket/index.go @@ -0,0 +1,30 @@ +// Package websocket +// @Link https://github.com/bufanyun/hotgo +// @Copyright Copyright (c) 2024 HotGo CLI +// @Author Ms <133814250@qq.com> +// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE +package websocket + +import ( + "context" + "hotgo/addons/flashbanner/api/websocket/index" + "hotgo/addons/flashbanner/service" +) + +var ( + Index = cIndex{} +) + +type cIndex struct{} + +// Test 测试 +func (c *cIndex) Test(ctx context.Context, req *index.TestReq) (res *index.TestRes, err error) { + data, err := service.SysIndex().Test(ctx, &req.IndexTestInp) + if err != nil { + return + } + + res = new(index.TestRes) + res.IndexTestModel = data + return +} diff --git a/server/addons/flashbanner/crons/crons.go b/server/addons/flashbanner/crons/crons.go new file mode 100644 index 0000000..fd6a45f --- /dev/null +++ b/server/addons/flashbanner/crons/crons.go @@ -0,0 +1,9 @@ +// Package crons +// @Link https://github.com/bufanyun/hotgo +// @Copyright Copyright (c) 2024 HotGo CLI +// @Author Ms <133814250@qq.com> +// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE +package crons + +// 定时任务. +// 插件中的定时任务可以统一在这里注册和处理 diff --git a/server/addons/flashbanner/dao/banner.go b/server/addons/flashbanner/dao/banner.go new file mode 100644 index 0000000..82e8627 --- /dev/null +++ b/server/addons/flashbanner/dao/banner.go @@ -0,0 +1,12 @@ +// Package dao +// @Link https://github.com/bufanyun/hotgo +// @Copyright Copyright (c) 2024 HotGo CLI +// @Author Ms <133814250@qq.com> +// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE +package dao + +import "hotgo/addons/flashbanner/dao/internal" + +var ( + Banner = internal.NewBannerDao() +) \ No newline at end of file diff --git a/server/addons/flashbanner/dao/internal/banner.go b/server/addons/flashbanner/dao/internal/banner.go new file mode 100644 index 0000000..41250f1 --- /dev/null +++ b/server/addons/flashbanner/dao/internal/banner.go @@ -0,0 +1,89 @@ +// ========================================================================== +// Code generated and maintained by GoFrame CLI tool. DO NOT EDIT. +// ========================================================================== + +package internal + +import ( + "context" + + "github.com/gogf/gf/v2/database/gdb" + "github.com/gogf/gf/v2/frame/g" +) + +// BannerDao is the data access object for table hg_banner. +type BannerDao struct { + table string // table is the underlying table name of the DAO. + group string // group is the database configuration group name of current DAO. + columns BannerColumns // columns contains all the column names of Table for convenient usage. +} + +// BannerColumns defines and stores column names for table hg_banner. +type BannerColumns struct { + Id string // + Name string // 轮播图名称 + Cover string // 图片URL + Link string // 跳转链接,小程序内用相对地址 + Type string // 类型默认不传 + Status string // 1可用 + Sort string // 排序,数字越大越靠前 + CreatedAt string // + UpdatedAt string // +} + +// bannerColumns holds the columns for table hg_banner. +var bannerColumns = BannerColumns{ + Id: "id", + Name: "name", + Cover: "cover", + Link: "link", + Type: "type", + Status: "status", + Sort: "sort", + CreatedAt: "created_at", + UpdatedAt: "updated_at", +} + +// NewBannerDao creates and returns a new DAO object for table data access. +func NewBannerDao() *BannerDao { + return &BannerDao{ + group: "default", + table: "hg_banner", + columns: bannerColumns, + } +} + +// DB retrieves and returns the underlying raw database management object of current DAO. +func (dao *BannerDao) DB() gdb.DB { + return g.DB(dao.group) +} + +// Table returns the table name of current dao. +func (dao *BannerDao) Table() string { + return dao.table +} + +// Columns returns all column names of current dao. +func (dao *BannerDao) Columns() BannerColumns { + return dao.columns +} + +// Group returns the configuration group name of database of current dao. +func (dao *BannerDao) Group() string { + return dao.group +} + +// Ctx creates and returns the Model for current DAO, It automatically sets the context for current operation. +func (dao *BannerDao) Ctx(ctx context.Context) *gdb.Model { + return dao.DB().Model(dao.table).Safe().Ctx(ctx) +} + +// Transaction wraps the transaction logic using function f. +// It rollbacks the transaction and returns the error from function f if it returns non-nil error. +// It commits the transaction and returns nil if function f returns nil. +// +// Note that, you should not Commit or Rollback the transaction in function f +// as it is automatically handled by this function. +func (dao *BannerDao) Transaction(ctx context.Context, f func(ctx context.Context, tx gdb.TX) error) (err error) { + return dao.Ctx(ctx).Transaction(ctx, f) +} diff --git a/server/addons/flashbanner/global/global.go b/server/addons/flashbanner/global/global.go new file mode 100644 index 0000000..4dbc10a --- /dev/null +++ b/server/addons/flashbanner/global/global.go @@ -0,0 +1,12 @@ +// Package global +// @Link https://github.com/bufanyun/hotgo +// @Copyright Copyright (c) 2024 HotGo CLI +// @Author Ms <133814250@qq.com> +// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE +package global + +import "hotgo/internal/library/addons" + +var ( + skeleton *addons.Skeleton // 插件架子 +) diff --git a/server/addons/flashbanner/global/init.go b/server/addons/flashbanner/global/init.go new file mode 100644 index 0000000..1cebca1 --- /dev/null +++ b/server/addons/flashbanner/global/init.go @@ -0,0 +1,22 @@ +// Package global +// @Link https://github.com/bufanyun/hotgo +// @Copyright Copyright (c) 2024 HotGo CLI +// @Author Ms <133814250@qq.com> +// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE +package global + +import ( + "context" + "hotgo/internal/library/addons" +) + +func Init(ctx context.Context, sk *addons.Skeleton) { + skeleton = sk +} + +func GetSkeleton() *addons.Skeleton { + if skeleton == nil { + panic("addon skeleton not initialized.") + } + return skeleton +} diff --git a/server/addons/flashbanner/logic/.gitkeep b/server/addons/flashbanner/logic/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/server/addons/flashbanner/logic/logic.go b/server/addons/flashbanner/logic/logic.go new file mode 100644 index 0000000..bd63903 --- /dev/null +++ b/server/addons/flashbanner/logic/logic.go @@ -0,0 +1,9 @@ +// ========================================================================== +// Code generated by GoFrame CLI tool. DO NOT EDIT. +// ========================================================================== + +package logic + +import ( + _ "hotgo/addons/flashbanner/logic/sys" +) diff --git a/server/addons/flashbanner/logic/sys/banner.go b/server/addons/flashbanner/logic/sys/banner.go new file mode 100644 index 0000000..d2d1f66 --- /dev/null +++ b/server/addons/flashbanner/logic/sys/banner.go @@ -0,0 +1,173 @@ +// Package sys +// @Link https://github.com/bufanyun/hotgo +// @Copyright Copyright (c) 2024 HotGo CLI +// @Author Ms <133814250@qq.com> +// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE +package sys + +import ( + "context" + "hotgo/addons/flashbanner/dao" + "hotgo/addons/flashbanner/model/entity" + "hotgo/addons/flashbanner/model/input/sysin" + "hotgo/addons/flashbanner/service" + "github.com/gogf/gf/v2/errors/gerror" + "github.com/gogf/gf/v2/frame/g" + "github.com/gogf/gf/v2/os/gtime" +) + +type sSysBanner struct{} + +func NewSysBanner() *sSysBanner { + return &sSysBanner{} +} + +func init() { + service.RegisterSysBanner(NewSysBanner()) +} + +// GetMaxSort 获取最大排序值 +func (s *sSysBanner) GetMaxSort(ctx context.Context) (maxSort int, err error) { + var result struct { + MaxSort int `json:"maxSort"` + } + err = dao.Banner.Ctx(ctx).Fields("MAX(sort) as maxSort").Scan(&result) + if err != nil { + return 0, gerror.Wrap(err, "获取最大排序值失败") + } + return result.MaxSort, nil +} + +// Create 创建轮播图 +func (s *sSysBanner) Create(ctx context.Context, in *sysin.BannerCreateInp) (err error) { + // 如果没有设置排序值,自动设置为最大值+1 + if in.Sort == 0 { + maxSort, err := s.GetMaxSort(ctx) + if err != nil { + return err + } + in.Sort = maxSort + 1 + } + + _, err = dao.Banner.Ctx(ctx).Data(g.Map{ + dao.Banner.Columns().Name: in.Name, + dao.Banner.Columns().Cover: in.Cover, + dao.Banner.Columns().Link: in.Link, + dao.Banner.Columns().Type: in.Type, + dao.Banner.Columns().Status: 1, // 默认启用 + dao.Banner.Columns().Sort: in.Sort, + dao.Banner.Columns().CreatedAt: gtime.Now(), + dao.Banner.Columns().UpdatedAt: gtime.Now(), + }).Insert() + if err != nil { + err = gerror.Wrap(err, "创建轮播图失败") + return + } + return +} + +// Edit 修改/新增轮播图 +func (s *sSysBanner) Edit(ctx context.Context, in *sysin.BannerEditInp) (err error) { + if in.Id > 0 { + // 修改 + _, err = dao.Banner.Ctx(ctx).Where(dao.Banner.Columns().Id, in.Id).Data(g.Map{ + dao.Banner.Columns().Name: in.Name, + dao.Banner.Columns().Cover: in.Cover, + dao.Banner.Columns().Link: in.Link, + dao.Banner.Columns().Type: in.Type, + dao.Banner.Columns().Status: in.Status, + dao.Banner.Columns().Sort: in.Sort, + dao.Banner.Columns().UpdatedAt: gtime.Now(), + }).Update() + if err != nil { + err = gerror.Wrap(err, "修改轮播图失败") + return + } + } else { + // 新增 + _, err = dao.Banner.Ctx(ctx).Data(g.Map{ + dao.Banner.Columns().Name: in.Name, + dao.Banner.Columns().Cover: in.Cover, + dao.Banner.Columns().Link: in.Link, + dao.Banner.Columns().Type: in.Type, + dao.Banner.Columns().Status: in.Status, + dao.Banner.Columns().Sort: in.Sort, + dao.Banner.Columns().CreatedAt: gtime.Now(), + dao.Banner.Columns().UpdatedAt: gtime.Now(), + }).Insert() + if err != nil { + err = gerror.Wrap(err, "新增轮播图失败") + return + } + } + return +} + +// Delete 删除轮播图 +func (s *sSysBanner) Delete(ctx context.Context, in *sysin.BannerDeleteInp) (err error) { + _, err = dao.Banner.Ctx(ctx).Where(dao.Banner.Columns().Id, in.Id).Delete() + if err != nil { + err = gerror.Wrap(err, "删除轮播图失败") + return + } + return +} + +// View 获取指定轮播图信息 +func (s *sSysBanner) View(ctx context.Context, in *sysin.BannerViewInp) (res *sysin.BannerViewModel, err error) { + var banner entity.Banner + err = dao.Banner.Ctx(ctx).Where(dao.Banner.Columns().Id, in.Id).Scan(&banner) + if err != nil { + err = gerror.Wrap(err, "获取轮播图信息失败") + return + } + if banner.Id == 0 { + err = gerror.New("轮播图不存在") + return + } + res = &sysin.BannerViewModel{Banner: banner} + return +} + +// List 获取轮播图列表 +func (s *sSysBanner) List(ctx context.Context, in *sysin.BannerListInp) (list []*sysin.BannerListModel, totalCount int, err error) { + m := dao.Banner.Ctx(ctx) + + // 条件查询 + if in.Name != "" { + m = m.WhereLike(dao.Banner.Columns().Name, "%"+in.Name+"%") + } + if in.Type > 0 { + m = m.Where(dao.Banner.Columns().Type, in.Type) + } + + var banners []*entity.Banner + if in.Page > 0 && in.PerPage > 0 { + err = m.Page(in.Page, in.PerPage).OrderDesc(dao.Banner.Columns().Sort).OrderDesc(dao.Banner.Columns().Id).ScanAndCount(&banners, &totalCount, false) + } else { + err = m.OrderDesc(dao.Banner.Columns().Sort).OrderDesc(dao.Banner.Columns().Id).ScanAndCount(&banners, &totalCount, false) + } + if err != nil { + err = gerror.Wrap(err, "获取轮播图列表失败") + return + } + + list = make([]*sysin.BannerListModel, len(banners)) + for i, banner := range banners { + list[i] = &sysin.BannerListModel{Banner: *banner} + } + return +} + +// Status 更新轮播图状态 +func (s *sSysBanner) Status(ctx context.Context, in *sysin.BannerStatusInp) (err error) { + _, err = dao.Banner.Ctx(ctx).Where(dao.Banner.Columns().Id, in.Id).Data(g.Map{ + dao.Banner.Columns().Status: in.Status, + dao.Banner.Columns().UpdatedAt: gtime.Now(), + }).Update() + if err != nil { + err = gerror.Wrap(err, "更新轮播图状态失败") + return + } + return +} \ No newline at end of file diff --git a/server/addons/flashbanner/logic/sys/config.go b/server/addons/flashbanner/logic/sys/config.go new file mode 100644 index 0000000..958b35c --- /dev/null +++ b/server/addons/flashbanner/logic/sys/config.go @@ -0,0 +1,59 @@ +// Package sys +// @Link https://github.com/bufanyun/hotgo +// @Copyright Copyright (c) 2024 HotGo CLI +// @Author Ms <133814250@qq.com> +// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE +package sys + +import ( + "context" + "github.com/gogf/gf/v2/util/gconv" + "hotgo/addons/flashbanner/global" + "hotgo/addons/flashbanner/model" + "hotgo/addons/flashbanner/model/input/sysin" + "hotgo/addons/flashbanner/service" + isc "hotgo/internal/service" +) + +type sSysConfig struct{} + +func NewSysConfig() *sSysConfig { + return &sSysConfig{} +} + +func init() { + service.RegisterSysConfig(NewSysConfig()) +} + +// GetBasic 获取基础配置 +func (s *sSysConfig) GetBasic(ctx context.Context) (conf *model.BasicConfig, err error) { + var in sysin.GetConfigInp + in.GetAddonsConfigInp.AddonName = global.GetSkeleton().Name + in.GetAddonsConfigInp.Group = "basic" + models, err := isc.SysAddonsConfig().GetConfigByGroup(ctx, &in.GetAddonsConfigInp) + if err != nil { + return + } + + err = gconv.Struct(models.List, &conf) + return +} + +// GetConfigByGroup 获取指定分组配置 +func (s *sSysConfig) GetConfigByGroup(ctx context.Context, in *sysin.GetConfigInp) (res *sysin.GetConfigModel, err error) { + in.GetAddonsConfigInp.AddonName = global.GetSkeleton().Name + models, err := isc.SysAddonsConfig().GetConfigByGroup(ctx, &in.GetAddonsConfigInp) + if err != nil { + return + } + + res = new(sysin.GetConfigModel) + res.List = models.List + return +} + +// UpdateConfigByGroup 更新指定分组的配置 +func (s *sSysConfig) UpdateConfigByGroup(ctx context.Context, in *sysin.UpdateConfigInp) error { + in.UpdateAddonsConfigInp.AddonName = global.GetSkeleton().Name + return isc.SysAddonsConfig().UpdateConfigByGroup(ctx, &in.UpdateAddonsConfigInp) +} diff --git a/server/addons/flashbanner/logic/sys/index.go b/server/addons/flashbanner/logic/sys/index.go new file mode 100644 index 0000000..7b7878d --- /dev/null +++ b/server/addons/flashbanner/logic/sys/index.go @@ -0,0 +1,35 @@ +// Package sys +// @Link https://github.com/bufanyun/hotgo +// @Copyright Copyright (c) 2024 HotGo CLI +// @Author Ms <133814250@qq.com> +// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE +package sys + +import ( + "context" + "fmt" + "github.com/gogf/gf/v2/os/gtime" + "hotgo/addons/flashbanner/global" + "hotgo/addons/flashbanner/model/input/sysin" + "hotgo/addons/flashbanner/service" + "hotgo/internal/library/contexts" +) + +type sSysIndex struct{} + +func NewSysIndex() *sSysIndex { + return &sSysIndex{} +} + +func init() { + service.RegisterSysIndex(NewSysIndex()) +} + +// Test 测试 +func (s *sSysIndex) Test(ctx context.Context, in *sysin.IndexTestInp) (res *sysin.IndexTestModel, err error) { + res = new(sysin.IndexTestModel) + res.Name = in.Name + res.Module = fmt.Sprintf("当前插件模块是:%s,当前应用模块是:%s", global.GetSkeleton().Name, contexts.Get(ctx).Module) + res.Time = gtime.Now() + return +} diff --git a/server/addons/flashbanner/main.go b/server/addons/flashbanner/main.go new file mode 100644 index 0000000..b33799a --- /dev/null +++ b/server/addons/flashbanner/main.go @@ -0,0 +1,176 @@ +// Package flashbanner +// @Link https://github.com/bufanyun/hotgo +// @Copyright Copyright (c) 2024 HotGo CLI +// @Author Ms <133814250@qq.com> +// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE +package flashbanner + +import ( + "context" + "github.com/gogf/gf/v2/net/ghttp" + "github.com/gogf/gf/v2/os/gctx" + _ "hotgo/addons/flashbanner/crons" + "hotgo/addons/flashbanner/global" + _ "hotgo/addons/flashbanner/logic" + _ "hotgo/addons/flashbanner/queues" + "hotgo/addons/flashbanner/router" + "hotgo/addons/migrations" + "hotgo/internal/library/addons" + "hotgo/internal/service" + "sync" + + "github.com/gogf/gf/v2/frame/g" + "github.com/gogf/gf/v2/os/gfile" + + +) + +type module struct { + skeleton *addons.Skeleton + ctx context.Context + sync.Mutex +} + +func init() { + newModule() +} + +func newModule() { + m := &module{ + skeleton: &addons.Skeleton{ + Label: `轮播图管理`, + Name: `flashbanner`, + Group: 6, + Logo: "", + Brief: ``, + Description: ``, + Author: ``, + Version: `v1.0.0`, // 当该版本号高于已安装的版本号时,会提示可以更新 + }, + ctx: gctx.New(), + } + addons.RegisterModule(m) +} + +// Start 启动模块 +func (m *module) Start(option *addons.Option) (err error) { + // 初始化模块 + global.Init(m.ctx, m.skeleton) + + // 注册插件路由 + option.Server.Group("/", func(group *ghttp.RouterGroup) { + group.Middleware(service.Middleware().Addon) + router.Admin(m.ctx, group) + router.Api(m.ctx, group) + router.Home(m.ctx, group) + router.WebSocket(m.ctx, group) + }) + return +} + +// Stop 停止模块 +func (m *module) Stop() (err error) { + return +} + +// Ctx 上下文 +func (m *module) Ctx() context.Context { + return m.ctx +} + +// GetSkeleton 获取模块 +func (m *module) GetSkeleton() *addons.Skeleton { + return m.skeleton +} + +// Install 安装模块 +func (m *module) Install(ctx context.Context) (err error) { + // 执行数据库安装文件 + // 获取当前目录 + sqlPath := gfile.Pwd() + gfile.Separator + "addons/migrations/flashbanner/install.sql" + g.Log().Debug(ctx, "安装模块", m.skeleton.Label, "路径", sqlPath) + result, err := migrations.DoSqlContent(ctx, sqlPath) + if err != nil { + g.Log().Error(ctx, "安装模块", m.skeleton.Label, "失败", err) + return + } + g.Log().Debug(ctx, "安装模块", m.skeleton.Label, "成功", result) + // 复制web目录下的文件到管理后台对应位置 + // 插件的前端配置文件位于插件目录下的web子目录 + sourceWebPath := gfile.Pwd() + gfile.Separator + "addons/" + m.skeleton.Name + "/web/src/views/addons/" + m.skeleton.Name + targetWebPath := "../web/src/views/addons/" + m.skeleton.Name + g.Log().Debug(ctx, "复制前端配置文件", "源路径:", sourceWebPath, "目标路径:", targetWebPath) + + // 检查源路径是否存在 + if gfile.Exists(sourceWebPath) { + err = gfile.CopyDir(sourceWebPath, targetWebPath) + if err != nil { + g.Log().Error(ctx, "复制前端配置文件失败:", err) + } else { + g.Log().Debug(ctx, "复制前端配置文件成功") + } + } else { + g.Log().Warning(ctx, "前端配置文件源路径不存在:", sourceWebPath) + } + + // 复制API文件 + sourceApiPath := gfile.Pwd() + gfile.Separator + "addons/" + m.skeleton.Name + "/web/src/api/addons/" + m.skeleton.Name + targetApiPath := "../web/src/api/addons/" + m.skeleton.Name + g.Log().Debug(ctx, "复制API文件", "源路径:", sourceApiPath, "目标路径:", targetApiPath) + if gfile.Exists(sourceApiPath) { + err = gfile.CopyDir(sourceApiPath, targetApiPath) + if err != nil { + g.Log().Error(ctx, "复制API文件失败:", err) + } else { + g.Log().Debug(ctx, "复制API文件成功") + } + } else { + g.Log().Warning(ctx, "API文件源路径不存在:", sourceApiPath) + } + return +} + +// Upgrade 更新模块 +func (m *module) Upgrade(ctx context.Context) (err error) { + // ... + return +} + +// UnInstall 卸载模块 +func (m *module) UnInstall(ctx context.Context) (err error) { + // ... + // 移除数据库安装文件 + sqlPath := gfile.Pwd() + gfile.Separator + "addons/migrations/flashbanner/uninstall.sql" + g.Log().Debug(ctx, "卸载模块", m.skeleton.Label, "路径", sqlPath) + result, err := migrations.DoSqlContent(ctx, sqlPath) + if err != nil { + g.Log().Error(ctx, "卸载模块", m.skeleton.Label, "失败", err) + return + } + g.Log().Debug(ctx, "卸载模块", m.skeleton.Label, "成功", result) + // 删除前端文件 + targetWebPath := "../web/src/views/addons/" + m.skeleton.Name + targetApiPath := "../web/src/api/addons/" + m.skeleton.Name + + // 删除配置页面文件 + if gfile.Exists(targetWebPath) { + err = gfile.Remove(targetWebPath) + if err != nil { + g.Log().Warning(ctx, "删除前端配置文件失败:", err) + } else { + g.Log().Debug(ctx, "删除前端配置文件成功") + } + } + + // 删除API文件 + if gfile.Exists(targetApiPath) { + err = gfile.Remove(targetApiPath) + if err != nil { + g.Log().Warning(ctx, "删除API文件失败:", err) + } else { + g.Log().Debug(ctx, "删除API文件成功") + } + } + + return +} diff --git a/server/addons/flashbanner/model/config.go b/server/addons/flashbanner/model/config.go new file mode 100644 index 0000000..7ad8505 --- /dev/null +++ b/server/addons/flashbanner/model/config.go @@ -0,0 +1,11 @@ +// Package model +// @Link https://github.com/bufanyun/hotgo +// @Copyright Copyright (c) 2024 HotGo CLI +// @Author Ms <133814250@qq.com> +// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE +package model + +// BasicConfig 基础配置 +type BasicConfig struct { + Test string `json:"basicTest"` +} diff --git a/server/addons/flashbanner/model/entity/banner.go b/server/addons/flashbanner/model/entity/banner.go new file mode 100644 index 0000000..bc5689d --- /dev/null +++ b/server/addons/flashbanner/model/entity/banner.go @@ -0,0 +1,22 @@ +// ================================================================================= +// Code generated and maintained by GoFrame CLI tool. DO NOT EDIT. +// ================================================================================= + +package entity + +import ( + "github.com/gogf/gf/v2/os/gtime" +) + +// Banner is the golang structure for table banner. +type Banner struct { + Id int `json:"id" orm:"id" description:""` + Name string `json:"name" orm:"name" description:"轮播图名称"` + Cover string `json:"cover" orm:"cover" description:"图片URL"` + Link string `json:"link" orm:"link" description:"跳转链接,小程序内用相对地址"` + Type int `json:"type" orm:"type" description:"类型默认不传"` + Status uint `json:"status" orm:"status" description:"1可用"` + Sort int `json:"sort" orm:"sort" description:"排序,数字越大越靠前"` + CreatedAt *gtime.Time `json:"createdAt" orm:"created_at" description:""` + UpdatedAt *gtime.Time `json:"updatedAt" orm:"updated_at" description:""` +} diff --git a/server/addons/flashbanner/model/input/sysin/banner.go b/server/addons/flashbanner/model/input/sysin/banner.go new file mode 100644 index 0000000..127f60e --- /dev/null +++ b/server/addons/flashbanner/model/input/sysin/banner.go @@ -0,0 +1,98 @@ +// Package sysin +// @Link https://github.com/bufanyun/hotgo +// @Copyright Copyright (c) 2024 HotGo CLI +// @Author Ms <133814250@qq.com> +// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE +package sysin + +import ( + "context" + "hotgo/addons/flashbanner/model/entity" + "hotgo/internal/model/input/form" + "github.com/gogf/gf/v2/errors/gerror" +) + +// BannerCreateInp 创建轮播图 +type BannerCreateInp struct { + Name string `json:"name" v:"required#轮播图名称不能为空" dc:"轮播图名称"` + Cover string `json:"cover" v:"required#轮播图封面不能为空" dc:"轮播图封面"` + Link string `json:"link" dc:"轮播图链接"` + Type int `json:"type" dc:"轮播图类型"` + Sort int `json:"sort" dc:"排序,数字越大越靠前"` +} + +func (in *BannerCreateInp) Filter(ctx context.Context) (err error) { + return +} + +type BannerCreateModel struct{} + +// BannerEditInp 修改/新增轮播图 +type BannerEditInp struct { + entity.Banner +} + +func (in *BannerEditInp) Filter(ctx context.Context) (err error) { + if in.Name == "" { + err = gerror.New("轮播图名称不能为空") + return + } + if in.Cover == "" { + err = gerror.New("轮播图封面不能为空") + return + } + return +} + +type BannerEditModel struct{} + +// BannerDeleteInp 删除轮播图 +type BannerDeleteInp struct { + Id interface{} `json:"id" v:"required#轮播图ID不能为空" dc:"轮播图ID"` +} + +func (in *BannerDeleteInp) Filter(ctx context.Context) (err error) { + return +} + +type BannerDeleteModel struct{} + +// BannerViewInp 获取指定轮播图信息 +type BannerViewInp struct { + Id int64 `json:"id" v:"required#轮播图ID不能为空" dc:"轮播图ID"` +} + +func (in *BannerViewInp) Filter(ctx context.Context) (err error) { + return +} + +type BannerViewModel struct { + entity.Banner +} + +// BannerListInp 获取轮播图列表 +type BannerListInp struct { + form.PageReq + Name string `json:"name" dc:"轮播图名称"` + Type int `json:"type" dc:"轮播图类型"` +} + +func (in *BannerListInp) Filter(ctx context.Context) (err error) { + return +} + +type BannerListModel struct { + entity.Banner +} + +// BannerStatusInp 更新轮播图状态 +type BannerStatusInp struct { + Id int64 `json:"id" v:"required#轮播图ID不能为空" dc:"轮播图ID"` + Status int `json:"status" v:"required#状态不能为空" dc:"状态"` +} + +func (in *BannerStatusInp) Filter(ctx context.Context) (err error) { + return +} + +type BannerStatusModel struct{} \ No newline at end of file diff --git a/server/addons/flashbanner/model/input/sysin/config.go b/server/addons/flashbanner/model/input/sysin/config.go new file mode 100644 index 0000000..de3b02c --- /dev/null +++ b/server/addons/flashbanner/model/input/sysin/config.go @@ -0,0 +1,24 @@ +// Package sysin +// @Link https://github.com/bufanyun/hotgo +// @Copyright Copyright (c) 2024 HotGo CLI +// @Author Ms <133814250@qq.com> +// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE +package sysin + +import ( + "github.com/gogf/gf/v2/frame/g" + "hotgo/internal/model/input/sysin" +) + +// UpdateConfigInp 更新指定配置 +type UpdateConfigInp struct { + sysin.UpdateAddonsConfigInp +} + +type GetConfigInp struct { + sysin.GetAddonsConfigInp +} + +type GetConfigModel struct { + List g.Map `json:"list"` +} diff --git a/server/addons/flashbanner/model/input/sysin/index.go b/server/addons/flashbanner/model/input/sysin/index.go new file mode 100644 index 0000000..01d3bdc --- /dev/null +++ b/server/addons/flashbanner/model/input/sysin/index.go @@ -0,0 +1,27 @@ +// Package sysin +// @Link https://github.com/bufanyun/hotgo +// @Copyright Copyright (c) 2024 HotGo CLI +// @Author Ms <133814250@qq.com> +// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE +// +package sysin + +import ( + "context" + "github.com/gogf/gf/v2/os/gtime" +) + +// IndexTestInp 测试 +type IndexTestInp struct { + Name string `json:"name" d:"HotGo" dc:"名称"` +} + +func (in *IndexTestInp) Filter(ctx context.Context) (err error) { + return +} + +type IndexTestModel struct { + Name string `json:"name" dc:"名称"` + Module string `json:"module" dc:"当前插件模块"` + Time *gtime.Time `json:"time" dc:"当前时间"` +} diff --git a/server/addons/flashbanner/queues/queues.go b/server/addons/flashbanner/queues/queues.go new file mode 100644 index 0000000..4d0559c --- /dev/null +++ b/server/addons/flashbanner/queues/queues.go @@ -0,0 +1,9 @@ +// Package queues +// @Link https://github.com/bufanyun/hotgo +// @Copyright Copyright (c) 2024 HotGo CLI +// @Author Ms <133814250@qq.com> +// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE +package queues + +// 消息队列. +// 插件中的消息队列消费者可以统一在这里注册和处理 diff --git a/server/addons/flashbanner/resource/public/.gitkeep b/server/addons/flashbanner/resource/public/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/server/addons/flashbanner/resource/public/default b/server/addons/flashbanner/resource/public/default new file mode 100644 index 0000000..e3ad56a --- /dev/null +++ b/server/addons/flashbanner/resource/public/default @@ -0,0 +1 @@ +Hello!这是创建插件 [轮播图管理] 时默认生成的一个静态目录文件,用于测试,当你看到这个提示时,说明已经联调成功啦! diff --git a/server/addons/flashbanner/resource/template/home/index.html b/server/addons/flashbanner/resource/template/home/index.html new file mode 100644 index 0000000..3502f4a --- /dev/null +++ b/server/addons/flashbanner/resource/template/home/index.html @@ -0,0 +1,30 @@ + + + + + + + + +Hello,@{.Data.name}!!
+@{.Data.module}
+服务器时间:@{.Data.time}
+