20 Commits

Author SHA1 Message Date
mengshuai
b58643cc2f fix 修复生成代码 pgsql 菜单权限生成和个别数据类型生成错误,vue 方法导入改为自动导入 2025-11-09 13:49:11 +08:00
孟帅
a7234bc330 feat 调整 mysql 、pgsql 初始化数据; 完善pgsql 兼容性,适配代码生成逻辑 2025-11-08 12:40:03 +08:00
孟帅
3989996448 Merge pull request #211 from 0x76long/0x76long-patch-1
修复因大小写导致找不到表主键的问题
2025-11-07 12:44:11 +08:00
vlong
c94184a385 修复因大小写导致找不到表主键的问题 2025-11-07 11:41:13 +08:00
孟帅
7313d22cdb 发布v2.18.6版本,更新内容请查看:https://github.com/bufanyun/hotgo/blob/v2.0/docs/guide-zh-CN/start-update-log.md 2025-10-25 00:35:30 +08:00
孟帅
5ebc33f28b Merge pull request #205 from youluo1230/v2.0
fix(admin):修复消息查询
2025-10-21 22:45:51 +08:00
小宝
70076c90fd fix(admin):修复消息查询 2025-10-21 15:04:58 +08:00
孟帅
e8c94f1c98 Merge pull request #204 from yemangran/v2.0
修复新增按钮类型的菜单到hg_admin_menu时,component空串被清空导致新增失败
2025-10-15 22:40:14 +08:00
孟帅
5fa7b471f5 Merge pull request #203 from yemangran/yemangran-patch
修复字典管理页面新增时表单检验
2025-10-15 22:39:40 +08:00
孟帅
4b0f5066b7 Merge pull request #199 from osindex/develop
🎨 去除mysql硬编码 方便切换pgsql
2025-10-15 22:32:14 +08:00
孟帅
36ddd091c8 Merge pull request #198 from zhangshican/v2.0
bug修复
2025-10-15 22:31:42 +08:00
孟帅
f85d21a124 Merge pull request #197 from wangle201210/feat/yaml
添加yaml字段类型
2025-10-15 22:29:37 +08:00
孟帅
0f6f74214a Merge pull request #196 from wangle201210/fix/model
fix model.ts
2025-10-15 22:28:31 +08:00
yemangran
334f9a7888 Merge pull request #1 from yemangran/yemangran-patch-1
Update menu.go
2025-10-15 01:31:43 +08:00
yemangran
58213e83db Update menu.go
修复新增按钮类型的菜单到hg_admin_menu时,component空串被清空导致新增失败
2025-10-15 01:31:02 +08:00
yemangran
f2454ce09b Update CreateDrawer.vue 2025-10-08 13:53:55 +08:00
yemangran
31f8102cc1 Update CreateDrawer.vue 2025-10-08 13:49:12 +08:00
ss
776307e65b bug修复
本地 64 位 int → 安全;线上 32 位 int → 溢出 → panic
exception recovered: runtime error: index out of range [-2]
2025-09-12 00:17:08 +08:00
wanna
a98a25ea12 添加yaml字段类型 2025-09-11 13:37:57 +08:00
wanna
e3eb4bd728 fix model.ts 2025-09-11 00:16:33 +08:00
290 changed files with 9113 additions and 9338 deletions

View File

@@ -6,13 +6,13 @@
</p>
<p align="center">
<a href="https://goframe.org/pages/viewpage.action?pageId=1114119" target="_blank">
<img src="https://img.shields.io/badge/goframe-2.9.0-green" alt="goframe">
<img src="https://img.shields.io/badge/goframe-2.9.4-green" alt="goframe">
</a>
<a href="https://v3.vuejs.org/" target="_blank">
<img src="https://img.shields.io/badge/vue.js-vue3.4-green" alt="vue">
</a>
<a href="https://www.naiveui.com" target="_blank">
<img src="https://img.shields.io/badge/naiveui-%3E2.42.0-blue" alt="naiveui">
<img src="https://img.shields.io/badge/naiveui-%3E2.43.1-blue" alt="naiveui">
</a>
<a href="https://www.tslang.cn/" target="_blank">
<img src="https://img.shields.io/badge/typescript-%3E4.0.0-blue" alt="typescript">
@@ -136,7 +136,7 @@
* 本项目包含的第三方源码和二进制文件之版权信息另行标注。
* 版权所有Copyright © 2020-2025 by Ms (https://github.com/bufanyun/hotgo)
* 版权所有Copyright © 2020-2026 by Ms (https://github.com/bufanyun/hotgo)
* All rights reserved。
@@ -158,7 +158,7 @@
## License
[MIT © HotGo-2025](./LICENSE)
[MIT © HotGo-2026](./LICENSE)

View File

@@ -27,6 +27,7 @@
- [WebSocket服务器](sys-websocket-server.md)
- [TCP服务器](sys-tcp-server.md)
- [SaaS多租户](sys-tenant.md)
- [国际化](sys-i18n.md)
- [单元测试](sys-test.md)

View File

@@ -92,6 +92,7 @@ gfcli:
gen:
dao:
- link: "mysql:hotgo:hg123456.@tcp(127.0.0.1:3306)/hotgo?loc=Local&parseTime=true"
# - link: "pgsql:postgres:hg123456@tcp(127.0.0.1:5432)/hotgo"
group: "default" # 分组 使用hotgo代码生成功能时必须填
# tables: "" # 指定当前数据库中需要执行代码生成的数据表。如果为空,表示数据库的所有表都会生成。
tablesEx: "hg_sys_addons_install" # 指定当前数据库中需要排除代码生成的数据表。
@@ -147,6 +148,7 @@ database:
stdout: true
default:
link: "mysql:hotgo:hg123456.@tcp(127.0.0.1:3306)/hotgo?loc=Local&parseTime=true"
# link: "pgsql:postgres:hg123456@tcp(127.0.0.1:5432)/hotgo"
debug: true
Prefix: "hg_"
default2:

View File

@@ -32,7 +32,7 @@
### 指定数据库驱动
> HotGo默认使用mysql驱动如果你想用其他数据库驱动打开下方文件中注释即可
> HotGo默认使用mysql驱动如果你想用其他数据库驱动打开下方文件中注释即可目前已支持mysql、pgsql
- 修改文件路径:[server/internal/library/hggen/internal/cmd/cmd_gen_dao.go](../../server/internal/library/hggen/internal/cmd/cmd_gen_dao.go)
@@ -44,7 +44,7 @@ import (
//_ "github.com/gogf/gf/contrib/drivers/mssql/v2"
_ "github.com/gogf/gf/contrib/drivers/mysql/v2"
//_ "github.com/gogf/gf/contrib/drivers/oracle/v2"
//_ "github.com/gogf/gf/contrib/drivers/pgsql/v2"
_ "github.com/gogf/gf/contrib/drivers/pgsql/v2"
//_ "github.com/gogf/gf/contrib/drivers/sqlite/v2"
"hotgo/internal/library/hggen/internal/cmd/gendao"

View File

@@ -27,5 +27,5 @@
- node版本 >= 20.0.0
- golang版本 >= 1.23
- mysql版本 >= 5.7,引擎需要是 innoDB
- mysql版本 >= 5.7,引擎需要是 innoDB 或 postgresql版本 >=14
- IDE推荐Goland

View File

@@ -9,8 +9,8 @@
- node版本 >= v20.0.0
- golang版本 >= v1.23
- goframe版本 >=v2.7.0
- mysql版本 >=5.7
- goframe版本 >=v2.9.4
- mysql版本 >=5.7 或 postgresql版本 >=14
> 必须先看[环境搭建文档](start-environment.md),如果安装遇到问题务必先查看[常见问题文档](start-issue.md)

View File

@@ -12,6 +12,19 @@
> 如果升级(覆盖)代码后打开会出现 sql 报错, 请检查更新的数据库格式或自行调整
### v2.18.6
updated 2025.10.25
- 新增国际化i18n支持内置简体中文、繁体中文、英文三种语言包
- 新增:附件管理支持外链图片转存至系统存储驱动
- 优化:全局微信公众号实例初始化逻辑,`AccessToken` 获取方式调整为稳定版接口
- 优化:菜单权限搜索功能,支持按菜单名称或路由地址进行检索
- 优化:角色权限管理中的菜单权限分配交互体验
- 优化naive-ui版本升级到2.43.1
- 优化gf版本升级到v2.9.4
- 修复:删除角色导致关联用户无法登录的问题,新增角色删除前置校验(检查是否存在关联用户)
### v2.17.8
updated 2025.7.13

View File

@@ -108,6 +108,7 @@ gfcli:
gen:
dao:
- link: "mysql:hotgo:hg123456.@tcp(127.0.0.1:3306)/hotgo?loc=Local&parseTime=true"
# - link: "pgsql:postgres:hg123456@tcp(127.0.0.1:5432)/hotgo"
group: "default" # 分组 使用hotgo代码生成功能时必须填
# tables: "" # 指定当前数据库中需要执行代码生成的数据表。如果为空,表示数据库的所有表都会生成。
tablesEx: "hg_sys_addons_install" # 指定当前数据库中需要排除代码生成的数据表。
@@ -267,6 +268,7 @@ INSERT INTO `hg_test_table` (`id`, `category_id`, `title`, `description`, `conte
gen:
dao:
- link: "mysql:hotgo:hg123456.@tcp(127.0.0.1:3306)/hotgo?loc=Local&parseTime=true"
# - link: "pgsql:postgres:hg123456@tcp(127.0.0.1:5432)/hotgo"
group: "default" # 分组 使用hotgo代码生成功能时必须填
tablesEx: "hg_sys_addons_install" # 指定当前数据库中需要排除代码生成的数据表。
removePrefix: "hg_"
@@ -296,6 +298,7 @@ database:
stdout: true
default:
link: "mysql:hotgo:hg123456.@tcp(127.0.0.1:3306)/hotgo?loc=Local&parseTime=true"
# - link: "pgsql:postgres:hg123456@tcp(127.0.0.1:5432)/hotgo"
debug: true
Prefix: "hg_"
default2:
@@ -350,7 +353,7 @@ hggen:
### 指定数据库驱动
> HotGo默认使用mysql驱动如果你想用其他数据库驱动打开下方文件中注释即可
> HotGo默认使用mysql驱动如果你想用其他数据库驱动打开下方文件中注释即可目前已支持mysql、pgsql
修改文件路径server/internal/library/hggen/internal/cmd/cmd_gen_dao.go
```go
@@ -361,7 +364,7 @@ import (
//_ "github.com/gogf/gf/contrib/drivers/mssql/v2"
_ "github.com/gogf/gf/contrib/drivers/mysql/v2"
//_ "github.com/gogf/gf/contrib/drivers/oracle/v2"
//_ "github.com/gogf/gf/contrib/drivers/pgsql/v2"
_ "github.com/gogf/gf/contrib/drivers/pgsql/v2"
//_ "github.com/gogf/gf/contrib/drivers/sqlite/v2"
"hotgo/internal/library/hggen/internal/cmd/gendao"

View File

@@ -0,0 +1,73 @@
## 国际化
目录
- 介绍
- 配置文件
- 服务端使用
- Web端使用
- 更多文档
### 介绍
`v2.18.6`版本开始HotGo 提供了完善的国际化i18n支持内置简体中文、繁体中文和英文三种语言包默认语言为简体中文。目前已对后台管理首页进行了多语言适配开发者可基于该机制扩展实现业务模块的多语言功能。
### 配置文件
国际化配置位于 `server/manifest/config/config.yaml` 文件中:
```yaml
# hotgo系统配置
system:
# ...
# 国际化
i18n:
switch: true # 国际化功能开关可选值false|true默认true
defaultLanguage: "zh-CN" # 默认语言可选值zh-CN|zh-TW|en默认zh-CN
```
### 服务端使用
多语言配置文件存放目录:`server/manifest/i18n`,您可以在该目录下添加自定义的语言映射文件。
**使用示例:**
```go
// 设置当前上下文的语言为英文
ctx := gctx.New()
gi18n.WithLanguage(ctx, "en")
// 基础翻译
gi18n.T(ctx, "你好,美丽世界")
// 输出Hello, Beautiful World
// 格式化翻译(支持参数替换)
gi18n.Tf(ctx, "剩余%v余额", 100)
// 输出Remaining 100 Balance
```
### Web端使用
多语言配置文件存放目录:`web/src/locale`,您可以在该目录下添加自定义的语言映射文件。
> 提示:启用国际化功能后,后台管理界面右上角将显示语言切换选项。
**使用示例(假设当前语言为英文):**
```vue
<!-- 基础翻译 -->
<div>{{ t('你好,美丽世界') }}</div>
<!-- 输出Hello, Beautiful World -->
<!-- 格式化翻译支持参数替换 -->
<div>{{ t('剩余{num}余额', {num:100}) }}</div>
<!-- 输出Remaining 100 Balance -->
```
### 更多文档
- [gi18n](https://goframe.org/docs/core/gi18n)
- [vie-i18n](https://vue-i18n.intlify.dev)

View File

@@ -1,45 +0,0 @@
## 轮播图管理
### 简介
### 使用说明
### 迁移或安装
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"
```
4HotGo 后台进入 开发工具->插件管理->找到 轮播图管理 (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\
```

View File

@@ -1,65 +0,0 @@
// 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{}

View File

@@ -1,30 +0,0 @@
// 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 {
}

View File

@@ -1,33 +0,0 @@
// 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
}

View File

@@ -1,23 +0,0 @@
// 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
}

View File

@@ -1,21 +0,0 @@
// 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
}

View File

@@ -1,21 +0,0 @@
// 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:"<html/>"`
}

View File

@@ -1,21 +0,0 @@
// 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
}

View File

@@ -1,9 +0,0 @@
// 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
// 常量枚举.
// 插件中的常量枚举可以统一在这目录下

View File

@@ -1,81 +0,0 @@
// 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
}

View File

@@ -1,14 +0,0 @@
// 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
)

View File

@@ -1,33 +0,0 @@
// 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
}

View File

@@ -1,30 +0,0 @@
// 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
}

View File

@@ -1,41 +0,0 @@
// 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
}

View File

@@ -1,31 +0,0 @@
// 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
}

View File

@@ -1,34 +0,0 @@
// 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
}

View File

@@ -1,30 +0,0 @@
// 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
}

View File

@@ -1,9 +0,0 @@
// 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
// 定时任务.
// 插件中的定时任务可以统一在这里注册和处理

View File

@@ -1,12 +0,0 @@
// 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()
)

View File

@@ -1,89 +0,0 @@
// ==========================================================================
// 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)
}

View File

@@ -1,12 +0,0 @@
// 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 // 插件架子
)

View File

@@ -1,22 +0,0 @@
// 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
}

View File

@@ -1,9 +0,0 @@
// ==========================================================================
// Code generated by GoFrame CLI tool. DO NOT EDIT.
// ==========================================================================
package logic
import (
_ "hotgo/addons/flashbanner/logic/sys"
)

View File

@@ -1,173 +0,0 @@
// 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
}

View File

@@ -1,59 +0,0 @@
// 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)
}

View File

@@ -1,35 +0,0 @@
// 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
}

View File

@@ -1,176 +0,0 @@
// 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
}

View File

@@ -1,11 +0,0 @@
// 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"`
}

View File

@@ -1,22 +0,0 @@
// =================================================================================
// 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:""`
}

View File

@@ -1,98 +0,0 @@
// 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{}

View File

@@ -1,24 +0,0 @@
// 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"`
}

View File

@@ -1,27 +0,0 @@
// 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:"当前时间"`
}

View File

@@ -1,9 +0,0 @@
// 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
// 消息队列.
// 插件中的消息队列消费者可以统一在这里注册和处理

View File

@@ -1 +0,0 @@
Hello这是创建插件 [轮播图管理] 时默认生成的一个静态目录文件用于测试当你看到这个提示时说明已经联调成功啦

View File

@@ -1,30 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0,user-scalable=no">
<meta name="keywords" content="@{.Keywords}"/>
<meta name="description" content="@{.Description}"/>
<title>@{.Title}</title>
<script type="text/javascript" src="/resource/home/js/jquery-3.6.0.min.js"></script>
<style>
html, body {
width: 100%;
height: 100%;
margin: 0;
padding: 0;
background-color: #f6f6f6;
}
</style>
</head>
<body>
<div style="padding-top: 100px;text-align:center;">
<h1><p>Hello@{.Data.name}!!</p></h1>
<h2><p>@{.Data.module}</p></h2>
<h2><p>服务器时间@{.Data.time}</p></h2>
</div>
</body>
<script>
</script>
</html>

View File

@@ -1,36 +0,0 @@
// Package router
// @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 router
import (
"context"
"github.com/gogf/gf/v2/net/ghttp"
"hotgo/addons/flashbanner/controller/admin/sys"
"hotgo/addons/flashbanner/controller/admin/banner"
"hotgo/addons/flashbanner/global"
"hotgo/addons/flashbanner/router/genrouter"
"hotgo/internal/consts"
"hotgo/internal/library/addons"
"hotgo/internal/service"
)
// Admin 后台路由
func Admin(ctx context.Context, group *ghttp.RouterGroup) {
prefix := addons.RouterPrefix(ctx, consts.AppAdmin, global.GetSkeleton().Name)
group.Group(prefix, func(group *ghttp.RouterGroup) {
group.Bind(
sys.Index,
)
group.Middleware(service.Middleware().AdminAuth)
group.Bind(
sys.Config,
banner.Banner,
)
})
// 注册生成路由
genrouter.Register(ctx, group)
}

View File

@@ -1,32 +0,0 @@
// Package router
// @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 router
import (
"context"
"github.com/gogf/gf/v2/net/ghttp"
"hotgo/addons/flashbanner/controller/api/banner"
"hotgo/addons/flashbanner/global"
"hotgo/internal/consts"
"hotgo/internal/library/addons"
"hotgo/internal/service"
)
// Api 前台路由
func Api(ctx context.Context, group *ghttp.RouterGroup) {
prefix := addons.RouterPrefix(ctx, consts.AppApi, global.GetSkeleton().Name)
group.Group(prefix, func(group *ghttp.RouterGroup) {
group.Bind(
// 无需验证的路由
banner.BannerIndex,
)
group.Middleware(service.Middleware().ApiAuth)
group.Bind(
// 需要验证的路由
// ...
)
})
}

View File

@@ -1,34 +0,0 @@
// Package genrouter
// @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 genrouter
import (
"context"
"github.com/gogf/gf/v2/net/ghttp"
"hotgo/addons/flashbanner/global"
"hotgo/internal/consts"
"hotgo/internal/library/addons"
"hotgo/internal/service"
)
var (
NoLoginRouter []interface{} // 无需登录
LoginRequiredRouter []interface{} // 需要登录
)
// Register 注册通过代码生成的后台路由
func Register(ctx context.Context, group *ghttp.RouterGroup) {
prefix := addons.RouterPrefix(ctx, consts.AppAdmin, global.GetSkeleton().Name)
group.Group(prefix, func(group *ghttp.RouterGroup) {
if len(NoLoginRouter) > 0 {
group.Bind(NoLoginRouter...)
}
group.Middleware(service.Middleware().AdminAuth)
if len(LoginRequiredRouter) > 0 {
group.Bind(LoginRequiredRouter...)
}
})
}

View File

@@ -1,25 +0,0 @@
// Package router
// @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 router
import (
"context"
"github.com/gogf/gf/v2/net/ghttp"
"hotgo/addons/flashbanner/controller/home"
"hotgo/addons/flashbanner/global"
"hotgo/internal/consts"
"hotgo/internal/library/addons"
)
// Home 前台页面路由
func Home(ctx context.Context, group *ghttp.RouterGroup) {
prefix := addons.RouterPrefix(ctx, consts.AppHome, global.GetSkeleton().Name)
group.Group(prefix, func(group *ghttp.RouterGroup) {
group.Bind(
home.Index,
)
})
}

View File

@@ -1,39 +0,0 @@
// Package router
// @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 router
import (
"context"
"github.com/gogf/gf/v2/net/ghttp"
"hotgo/addons/flashbanner/controller/websocket"
"hotgo/addons/flashbanner/global"
"hotgo/internal/consts"
"hotgo/internal/library/addons"
"hotgo/internal/service"
ws "hotgo/internal/websocket"
)
// WebSocket ws路由配置
func WebSocket(ctx context.Context, group *ghttp.RouterGroup) {
prefix := addons.RouterPrefix(ctx, consts.AppWebSocket, global.GetSkeleton().Name)
group.Group(prefix, func(group *ghttp.RouterGroup) {
group.Bind(
// 无需验证的路由
websocket.Index,
)
// ws连接中间件
group.Middleware(service.Middleware().WebSocketAuth)
group.Bind(
// 需要验证的路由
// ..
)
})
// 注册消息路由
ws.RegisterMsg(ws.EventHandlers{
// ...
})
}

View File

@@ -1,71 +0,0 @@
// ================================================================================
// Code generated by GoFrame CLI tool. DO NOT EDIT.
// You can delete these comments if you wish manually maintain this interface file.
// ================================================================================
package service
import (
"context"
"hotgo/addons/flashbanner/model"
"hotgo/addons/flashbanner/model/input/sysin"
)
type (
ISysConfig interface {
GetBasic(ctx context.Context) (conf *model.BasicConfig, err error)
GetConfigByGroup(ctx context.Context, in *sysin.GetConfigInp) (res *sysin.GetConfigModel, err error)
UpdateConfigByGroup(ctx context.Context, in *sysin.UpdateConfigInp) error
}
ISysIndex interface {
Test(ctx context.Context, in *sysin.IndexTestInp) (res *sysin.IndexTestModel, err error)
}
ISysBanner interface {
Create(ctx context.Context, in *sysin.BannerCreateInp) (err error)
Edit(ctx context.Context, in *sysin.BannerEditInp) (err error)
Delete(ctx context.Context, in *sysin.BannerDeleteInp) (err error)
View(ctx context.Context, in *sysin.BannerViewInp) (res *sysin.BannerViewModel, err error)
List(ctx context.Context, in *sysin.BannerListInp) (list []*sysin.BannerListModel, totalCount int, err error)
Status(ctx context.Context, in *sysin.BannerStatusInp) (err error)
GetMaxSort(ctx context.Context) (maxSort int, err error)
}
)
var (
localSysConfig ISysConfig
localSysIndex ISysIndex
localSysBanner ISysBanner
)
func SysConfig() ISysConfig {
if localSysConfig == nil {
panic("implement not found for interface ISysConfig, forgot register?")
}
return localSysConfig
}
func RegisterSysConfig(i ISysConfig) {
localSysConfig = i
}
func SysIndex() ISysIndex {
if localSysIndex == nil {
panic("implement not found for interface ISysIndex, forgot register?")
}
return localSysIndex
}
func RegisterSysIndex(i ISysIndex) {
localSysIndex = i
}
func SysBanner() ISysBanner {
if localSysBanner == nil {
panic("implement not found for interface ISysBanner, forgot register?")
}
return localSysBanner
}
func RegisterSysBanner(i ISysBanner) {
localSysBanner = i
}

View File

@@ -1,17 +0,0 @@
import { http } from '@/utils/http/axios';
export function getConfig(params) {
return http.request({
url: '/flashbanner/config/get',
method: 'get',
params,
});
}
export function updateConfig(params) {
return http.request({
url: '/flashbanner/config/update',
method: 'post',
params,
});
}

View File

@@ -1,33 +0,0 @@
import { http } from '@/utils/http/axios';
export function List(params) {
return http.request({
url: '/flashbanner/banner/list',
method: 'GET',
params,
});
}
export function Add(params) {
return http.request({
url: '/flashbanner/banner/create',
method: 'POST',
params,
});
}
export function Edit(params) {
return http.request({
url: '/flashbanner/banner/edit',
method: 'POST',
params,
});
}
export function Delete(params) {
return http.request({
url: '/flashbanner/banner/delete',
method: 'POST',
params,
});
}

View File

@@ -1,106 +0,0 @@
<template>
<div>
<n-modal
v-model:show="showModal"
:on-after-leave="cancelForm"
:mask-closable="false"
:show-icon="false"
preset="dialog"
:title="formParams?.id > 0 ? '编辑 #' + formParams?.id : '添加'"
:style="{
width: dialogWidth,
}"
>
<n-form
:model="formParams"
:rules="rules"
ref="formRef"
label-placement="left"
:label-width="100"
class="py-8"
>
<n-grid x-gap="24" :cols="1">
<n-gi>
<n-form-item label="名称" path="name">
<n-input placeholder="请输入名称" v-model:value="formParams.name" />
</n-form-item>
</n-gi>
<n-gi>
<n-form-item label="上传图片" path="cover">
<UploadImage v-model:value="formParams.cover" />
</n-form-item>
</n-gi>
<n-gi>
<n-form-item label="链接地址" path="link">
<n-input placeholder="请输入链接地址" v-model:value="formParams.link" />
</n-form-item>
</n-gi>
</n-grid>
</n-form>
<template #action>
<n-space>
<n-button @click="cancelForm">取消</n-button>
<n-button type="info" :loading="formBtnLoading" @click="confirmForm">确定</n-button>
</n-space>
</template>
</n-modal>
</div>
</template>
<script lang="ts" setup>
import { h, reactive, ref, computed, defineExpose, defineEmits } from 'vue';
import { useDialog, useMessage } from 'naive-ui';
import UploadImage from '@/components/Upload/uploadImage.vue';
import { rules } from './model';
import { Edit, Add } from '@/api/addons/flashbanner/index';
import { adaModalWidth } from '@/utils/hotgo';
import { cloneDeep } from 'lodash-es';
const emit = defineEmits(['on-refresh']);
const defaultState = {
name: '',
cover: '',
link: '',
};
const message = useMessage();
const showModal = ref(false);
const formBtnLoading = ref(false);
const formRef = ref<any>();
const formParams = ref<any>(cloneDeep(defaultState));
const dialogWidth = computed(() => {
return adaModalWidth();
});
// 关闭表单
const cancelForm = () => {
showModal.value = false;
formParams.value = cloneDeep(defaultState);
};
// 新增或编辑
function confirmForm(e) {
e.preventDefault();
formBtnLoading.value = true;
const Request = formParams.value.id > 0 ? Edit : Add;
formRef.value.validate((errors) => {
if (!errors) {
Request(formParams.value).then((_res) => {
message.success('操作成功');
cancelForm();
emit('on-refresh');
});
} else {
message.error('请填写完整信息');
}
formBtnLoading.value = false;
});
}
defineExpose({ showModal, formParams });
</script>
<style lang="less" scoped></style>

View File

@@ -1,83 +0,0 @@
import { h, render } from 'vue';
import { FormSchema, useForm } from '@/components/Form';
import { NImage } from 'naive-ui';
import { fallbackSrc } from '@/utils/hotgo';
// **********查询表单********
const detailSchemas: FormSchema[] = [
{
field: 'name',
component: 'NInput',
label: '图片名称',
defaultValue: null,
componentProps: {
placeholder: '请输入图片名称',
},
},
];
export const [register, {}] = useForm({
gridProps: { cols: '1 s:1 m:2 l:3 xl:4 2xl:4' },
labelWidth: 80,
schemas: detailSchemas,
});
// *********表格**********
export const defaultColumns = [
{
title: 'ID',
key: 'id',
width: 100,
},
{
title: '图片名称',
key: 'name',
},
{
title: '图片',
key: 'cover',
render(row) {
if (row.cover !== '') {
return h(NImage, {
width: 40,
height: 40,
src: row.cover,
fallbackSrc: fallbackSrc(),
style: {
width: '40px',
height: '40px',
'max-width': '100%',
'max-height': '100%',
},
});
} else {
return '暂无图片'
}
},
},
{
title: '链接地址',
key: 'link',
render(row) {
return h('a', { href: row.link, target: '_blank' }, row.link);
}
},
{
title: '创建时间',
key: 'createdAt',
width: 180,
},
];
// *********编辑表单规则***********
export const rules = {
name: {
required: true,
trigger: ['blur', 'input'],
message: '请输入图片名称',
},
cover: {
required: true,
trigger: ['blur', 'input'],
message: '请上传图片',
},
};

View File

@@ -1,74 +0,0 @@
<template>
<div>
<n-spin :show="show" description="请稍候...">
<n-form :label-width="80" :model="formValue" :rules="rules" ref="formRef">
<n-form-item label="测试参数" path="basicTest">
<n-input v-model:value="formValue.basicTest" placeholder="请输入测试参数" />
<template #feedback>
这是一个测试参数每个插件都可以有独立的配置项可以按需添加</template
>
</n-form-item>
<div>
<n-space>
<n-button type="primary" @click="formSubmit">保存更新</n-button>
</n-space>
</div>
</n-form>
</n-spin>
</div>
</template>
<script lang="ts" setup>
import { ref, onMounted } from 'vue';
import { useMessage } from 'naive-ui';
import { getConfig, updateConfig } from '@/api/addons/flashbanner/config';
const group = ref('basic');
const show = ref(false);
const rules = {
basicTest: {
required: true,
message: '请输入测试参数',
trigger: 'blur',
},
};
const formRef: any = ref(null);
const message = useMessage();
const formValue = ref({
basicTest: 'HotGo',
});
function formSubmit() {
formRef.value.validate((errors) => {
if (!errors) {
updateConfig({ group: group.value, list: formValue.value }).then((_res) => {
message.success('更新成功');
load();
});
} else {
message.error('验证失败请填写完整信息');
}
});
}
onMounted(() => {
load();
});
function load() {
show.value = true;
new Promise((_resolve, _reject) => {
getConfig({ group: group.value })
.then((res) => {
formValue.value = res.list;
})
.finally(() => {
show.value = false;
});
});
}
</script>

View File

@@ -1,82 +0,0 @@
<template>
<div>
<n-grid cols="24 300:1 600:24" :x-gap="12">
<n-grid-item span="6">
<n-card :bordered="false" size="small" class="proCard">
<n-thing
class="thing-cell"
v-for="item in typeTabList"
:key="item.key"
:class="{ 'thing-cell-on': type === item.key }"
@click="switchType(item)"
>
<template #header>{{ item.name }}</template>
<template #description>{{ item.desc }}</template>
</n-thing>
</n-card>
</n-grid-item>
<n-grid-item span="18">
<n-card :bordered="false" size="small" :title="typeTitle" class="proCard">
<BasicSetting v-if="type === 1" />
</n-card>
</n-grid-item>
</n-grid>
</div>
</template>
<script lang="ts">
import { defineComponent, reactive, toRefs } from 'vue';
import BasicSetting from './BasicSetting.vue';
const typeTabList = [
{
name: '基本设置',
desc: '系统常规设置',
key: 1,
},
];
export default defineComponent({
components: {
BasicSetting,
},
setup() {
const state = reactive({
type: 1,
typeTitle: '基本设置',
});
function switchType(e) {
state.type = e.key;
state.typeTitle = e.name;
}
return {
...toRefs(state),
switchType,
typeTabList,
};
},
});
</script>
<style lang="less" scoped>
.thing-cell {
margin: 0 -16px 10px;
padding: 5px 16px;
&:hover {
background: #f3f3f3;
cursor: pointer;
}
}
.thing-cell-on {
background: #f0faff;
color: #2d8cf0;
::v-deep(.n-thing-main .n-thing-header .n-thing-header__title) {
color: #2d8cf0;
}
&:hover {
background: #f0faff;
}
}
</style>

View File

@@ -1,151 +0,0 @@
<template>
<div>
<n-card :bordered="false" class="proCard" title="轮播图管理">
<BasicForm
@register="register"
@submit="handleQuery"
@reset="resetForm"
@keyup.enter="handleQuery"
ref="searchFormRef"
>
<template #statusSlot="{ model, field }">
<n-input v-model:value="model[field]" />
</template>
</BasicForm>
<BasicTable
:openChecked="true"
:columns="columns"
:actionColumn="actionColumn"
:request="loadDataTable"
:row-key="(row) => row.id"
ref="tableRef"
:scroll-x="scrollX"
:resizeHeightOffset="-10000"
>
<template #tableTitle>
<n-button
type="primary"
@click="handleAdd"
class="min-left-space"
v-if="hasPermission(['/member/edit'])"
>
<template #icon>
<n-icon>
<PlusOutlined />
</n-icon>
</template>
添加
</n-button>
</template>
</BasicTable>
<BasicEdit ref="editRef" @on-refresh="onRefresh" />
</n-card>
</div>
</template>
<script lang="ts" setup>
import { h, onMounted, ref, computed, watch, reactive } from 'vue';
import { register, defaultColumns } from './components/model';
import BasicEdit from './components/Edit.vue';
import { BasicForm } from '@/components/Form/index';
import { BasicTable, TableAction } from '@/components/Table';
import { usePermission } from '@/hooks/web/usePermission';
import { List, Delete } from '@/api/addons/flashbanner/index';
import { PlusOutlined } from '@vicons/antd';
import { useDialog, useMessage } from 'naive-ui';
import { cloneDeep } from 'lodash-es';
import { adaTableScrollX } from '@/utils/hotgo';
interface TableActionState {
reload: () => void;
}
const { hasPermission } = usePermission();
const dialog = useDialog();
const message = useMessage();
const formParams = ref({});
const tableRef = ref<TableActionState>();
const editRef = ref();
const columns = ref(defaultColumns);
const actionColumn = reactive({
width: 200,
title: '操作',
key: 'action',
fixed: 'right',
render(record) {
return h(TableAction as any, {
style: 'button',
actions: [
{
label: '编辑',
onClick: handleEdit.bind(null, record),
auth: ['/member/delete'],
},
{
label: '删除',
onClick: handleDelete.bind(null, record),
auth: ['/member/delete'],
},
],
});
},
});
const scrollX = computed(() => {
return adaTableScrollX(defaultColumns, actionColumn.width);
});
const loadDataTable = async (res) => {
return await List({ ...formParams.value, ...res });
};
// 刷新table
const onRefresh = () => {
tableRef.value?.reload();
};
// 重置查询框
const resetForm = () => {
formParams.value = {};
onRefresh();
};
// 查询
const handleQuery = (e: any) => {
formParams.value = { ...e };
onRefresh();
};
// 添加
const handleAdd = () => {
if (editRef.value) {
editRef.value.showModal = true;
}
};
// 编辑
const handleEdit = (record: Recordable) => {
if (editRef.value) {
editRef.value.showModal = true;
editRef.value.formParams = cloneDeep(record);
}
}
// 删除
const handleDelete = (record: Recordable) => {
dialog.warning({
title: '警告',
content: '你确定要删除',
positiveText: '确定',
negativeText: '取消',
onPositiveClick: () => {
Delete({ id: record.id }).then((_res) => {
message.success('操作成功');
onRefresh();
});
},
});
}
</script>
<style lang="less"></style>

View File

@@ -87,7 +87,7 @@ func (s *sSysTable) List(ctx context.Context, in *sysin.TableListInp) (list []*s
mod = mod.Where(fmt.Sprintf(`JSON_CONTAINS(%s,'%v')`, cols.Hobby, in.Hobby))
}
totalCount, err = mod.Clone().Count(1)
totalCount, err = mod.Clone().Count()
if err != nil {
err = gerror.Wrap(err, "获取表格数据行失败,请稍后重试!")
return

View File

@@ -87,7 +87,7 @@ func (s *sSysTreeTable) List(ctx context.Context, in *sysin.TreeTableListInp) (l
mod = mod.Where(fmt.Sprintf(`JSON_CONTAINS(%s,'%v')`, cols.Hobby, in.Hobby))
}
totalCount, err = mod.Clone().Count(1)
totalCount, err = mod.Clone().Count()
if err != nil {
err = gerror.Wrap(err, "获取表格数据行失败,请稍后重试!")
return

View File

@@ -1,167 +0,0 @@
-- 删除表如果存在
DROP TABLE IF EXISTS hg_banner;
-- 创建表
CREATE TABLE hg_banner (
id SERIAL PRIMARY KEY,
name VARCHAR(255) NOT NULL,
cover VARCHAR(255) DEFAULT NULL,
link VARCHAR(255) DEFAULT NULL,
type INTEGER DEFAULT 0,
status SMALLINT DEFAULT 1,
sort INTEGER DEFAULT 0,
created_at TIMESTAMP DEFAULT NULL,
updated_at TIMESTAMP DEFAULT NULL
);
-- 添加表注释
COMMENT ON TABLE hg_banner IS '轮播图表';
-- 添加列注释
COMMENT ON COLUMN hg_banner.name IS '轮播图名称';
COMMENT ON COLUMN hg_banner.cover IS '图片URL';
COMMENT ON COLUMN hg_banner.link IS '跳转链接小程序内用相对地址';
COMMENT ON COLUMN hg_banner.type IS '类型默认不传';
COMMENT ON COLUMN hg_banner.status IS '1可用,2不可用';
COMMENT ON COLUMN hg_banner.sort IS '排序数字越大越靠前';
-- 添加 updated_at 字段的更新触发器模拟 MySQL ON UPDATE CURRENT_TIMESTAMP
CREATE OR REPLACE FUNCTION update_updated_at_column()
RETURNS TRIGGER AS $$
BEGIN
NEW.updated_at = NOW();
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER trigger_update_updated_at
BEFORE UPDATE ON hg_banner
FOR EACH ROW
EXECUTE FUNCTION update_updated_at_column();
-- 添加菜单项
-- 先查找或创建"内容管理"父菜单如果不存在
INSERT INTO hg_admin_menu (pid, level, tree, title, name, path, icon, type, redirect, permissions, permission_name, component, always_show, active_menu, is_root, is_frame, frame_src, keep_alive, hidden, affix, sort, remark, status, updated_at, created_at)
SELECT 0, 1, '', '内容管理', 'content', '/content', 'BookOutlined', 1, '/content', '', '', 'LAYOUT', 2, '', 1, 2, '', 2, 2, 2, 12, '内容管理模块', 1, NOW(), NOW()
WHERE NOT EXISTS (SELECT 1 FROM hg_admin_menu WHERE name = 'content');
-- 获取内容管理菜单ID并添加轮播图管理菜单
WITH content_parent AS (
SELECT id FROM hg_admin_menu WHERE name = 'content' LIMIT 1
),
inserted_menu AS (
INSERT INTO hg_admin_menu (pid, level, tree, title, name, path, icon, type, redirect, permissions, permission_name, component, always_show, active_menu, is_root, is_frame, frame_src, keep_alive, hidden, affix, sort, remark, status, updated_at, created_at)
SELECT
cp.id,
2,
'tr_' || cp.id::text || ' ',
'轮播图管理',
'flashbanner',
'/flashbanner',
'',
2,
'',
'/flashbanner/banner/list',
'',
'/addons/flashbanner/index',
2,
'',
2,
2,
'',
1,
2,
2,
10,
'轮播图管理模块',
1,
NOW(),
NOW()
FROM content_parent cp
RETURNING id
)
-- 添加子菜单和按钮
INSERT INTO hg_admin_menu (pid, level, tree, title, name, path, icon, type, redirect, permissions, permission_name, component, always_show, active_menu, is_root, is_frame, frame_src, keep_alive, hidden, affix, sort, remark, status, updated_at, created_at)
SELECT
im.id,
3,
'tr_' || (SELECT id FROM content_parent)::text || ' tr_' || im.id::text || ' ',
'新增轮播',
'addbanner',
'',
'',
3,
'',
'/flashbanner/banner/create',
'',
'',
2,
'',
2,
2,
'',
2,
2,
2,
10,
'新增轮播图权限',
1,
NOW(),
NOW()
FROM inserted_menu im
UNION ALL
SELECT
im.id,
3,
'tr_' || (SELECT id FROM content_parent)::text || ' tr_' || im.id::text || ' ',
'轮播编辑',
'editbanner',
'',
'',
3,
'',
'/flashbanner/banner/update',
'',
'',
2,
'',
2,
2,
'',
2,
2,
2,
10,
'编辑轮播图权限',
1,
NOW(),
NOW()
FROM inserted_menu im
UNION ALL
SELECT
im.id,
3,
'tr_' || (SELECT id FROM content_parent)::text || ' tr_' || im.id::text || ' ',
'删除轮播',
'delbanner',
'',
'',
3,
'',
'/flashbanner/banner/delete',
'',
'',
2,
'',
2,
2,
'',
2,
2,
2,
10,
'删除轮播图权限',
1,
NOW(),
NOW()
FROM inserted_menu im;

View File

@@ -1,33 +0,0 @@
DROP TABLE IF EXISTS `hg_banner`;
CREATE TABLE `hg_banner` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL COMMENT '轮播图名称',
`cover` varchar(255) DEFAULT NULL COMMENT '图片URL',
`link` varchar(255) DEFAULT NULL COMMENT '跳转链接小程序内用相对地址',
`type` int(11) DEFAULT 0 COMMENT '类型默认不传',
`status` tinyint(1) DEFAULT 1 COMMENT '1可用,2不可用',
`sort` int(11) DEFAULT 0 COMMENT '排序数字越大越靠前',
`created_at` datetime DEFAULT NULL,
`updated_at` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='轮播图表';
-- 添加菜单项
-- 先查找或创建"内容管理"父菜单如果不存在
INSERT IGNORE INTO `hg_admin_menu`(`pid`, `level`, `tree`, `title`, `name`, `path`, `icon`, `type`, `redirect`, `permissions`, `permission_name`, `component`, `always_show`, `active_menu`, `is_root`, `is_frame`, `frame_src`, `keep_alive`, `hidden`, `affix`, `sort`, `remark`, `status`, `updated_at`, `created_at`) VALUES
(0, 1, '', '内容管理', 'content', '/content', 'BookOutlined', 1, '/content', '', '', 'LAYOUT', 2, '', 1, 2, '', 2, 2, 2, 12, '内容管理模块', 1, NOW(), NOW());
-- 获取内容管理菜单ID并添加轮播图管理菜单
SET @content_parent_id = (SELECT id FROM `hg_admin_menu` WHERE `name` = 'content' LIMIT 1);
INSERT INTO `hg_admin_menu`(`pid`, `level`, `tree`, `title`, `name`, `path`, `icon`, `type`, `redirect`, `permissions`, `permission_name`, `component`, `always_show`, `active_menu`, `is_root`, `is_frame`, `frame_src`, `keep_alive`, `hidden`, `affix`, `sort`, `remark`, `status`, `updated_at`, `created_at`) VALUES
(@content_parent_id, 2, CONCAT('tr_', @content_parent_id, ' '), '轮播图管理', 'flashbanner', '/flashbanner', '', 2, '', '/flashbanner/banner/list', '', '/addons/flashbanner/index', 2, '', 2, 2, '', 1, 2, 2, 10, '轮播图管理模块', 1, NOW(), NOW());
-- 添加子菜单和按钮
SET @flashbanner_menu_id = LAST_INSERT_ID();
INSERT INTO `hg_admin_menu`(`pid`, `level`, `tree`, `title`, `name`, `path`, `icon`, `type`, `redirect`, `permissions`, `permission_name`, `component`, `always_show`, `active_menu`, `is_root`, `is_frame`, `frame_src`, `keep_alive`, `hidden`, `affix`, `sort`, `remark`, `status`, `updated_at`, `created_at`) VALUES
(@flashbanner_menu_id, 3, CONCAT('tr_', @content_parent_id, ' tr_', @flashbanner_menu_id, ' '), '新增轮播', 'addbanner', '', '', 3, '', '/flashbanner/banner/create', '', '', 2, '', 2, 2, '', 2, 2, 2, 10, '新增轮播图权限', 1, NOW(), NOW()),
(@flashbanner_menu_id, 3, CONCAT('tr_', @content_parent_id, ' tr_', @flashbanner_menu_id, ' '), '轮播编辑', 'editbanner', '', '', 3, '', '/flashbanner/banner/update', '', '', 2, '', 2, 2, '', 2, 2, 2, 10, '编辑轮播图权限', 1, NOW(), NOW()),
(@flashbanner_menu_id, 3, CONCAT('tr_', @content_parent_id, ' tr_', @flashbanner_menu_id, ' '), '删除轮播', 'delbanner', '', '', 3, '', '/flashbanner/banner/delete', '', '', 2, '', 2, 2, '', 2, 2, 2, 10, '删除轮播图权限', 1, NOW(), NOW());

View File

@@ -1,9 +0,0 @@
-- 删除表
DROP TABLE IF EXISTS hg_banner;
-- 删除 flashbanner 相关菜单
-- 先删除子菜单权限按钮
DELETE FROM hg_admin_menu WHERE name IN ('addbanner', 'editbanner', 'delbanner');
-- 删除主菜单
DELETE FROM hg_admin_menu WHERE name = 'flashbanner';

View File

@@ -1,9 +0,0 @@
-- 删除表
DROP TABLE IF EXISTS `hg_banner`;
-- 删除 flashbanner 相关菜单
-- 先删除子菜单权限按钮
DELETE FROM `hg_admin_menu` WHERE `name` IN ('addbanner', 'editbanner', 'delbanner');
-- 删除主菜单
DELETE FROM `hg_admin_menu` WHERE `name` = 'flashbanner';

View File

@@ -1,2 +0,0 @@
# 为了在容器映射sql所以需要独立出来
# 兼容数据库和前端文件的迁移

View File

@@ -1,66 +0,0 @@
package migrations
import (
"context"
"io"
"os"
"strings"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/container/gvar"
)
func DoSqlContent(ctx context.Context, sqlPath string) (string, error) {
open, err := os.Open(sqlPath)
if err != nil {
return "fail", err
}
defer open.Close()
sqlContent, err := io.ReadAll(open)
if err != nil {
return "fail", err
}
// 首先尝试整个执行
_, err = g.DB().Exec(ctx, string(sqlContent))
if err != nil {
g.Log().Error(ctx, "整个执行SQL失败尝试分句执行:", err)
// 整个执行失败,尝试按分号分割执行
sqls := strings.Split(string(sqlContent), ";")
for _, sql := range sqls {
sql = strings.TrimSpace(sql)
if sql != "" {
_, err := g.DB().Exec(ctx, sql)
if err != nil {
g.Log().Error(ctx, "执行SQL失败:", err, sql)
return "fail", err
}
}
}
}
return "success", nil
}
func GetDbLink(ctx context.Context) *gvar.Var {
link := g.Cfg().MustGet(ctx, "database.default")
//读写分离
if !link.IsSlice() {
return g.Cfg().MustGet(ctx, "database.default.link")
}
for _, v := range link.Array() {
// 只获取主库
val := v.(map[string]interface{})
if val["role"] == "master" {
return gvar.New(val["link"])
}
}
return gvar.New("database.default.0.link")
}
func GetDbType(ctx context.Context) string {
var (
link = GetDbLink(ctx)
)
config := strings.SplitN(link.String(), ":", 2)
return config[0]
}

View File

@@ -1,8 +0,0 @@
// Package modules
// @Link https://github.com/bufanyun/hotgo
// @Copyright Copyright (c) 2023 HotGo CLI
// @Author Ms <133814250@qq.com>
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
package modules
import _ "hotgo/addons/flashbanner"

View File

@@ -77,6 +77,9 @@ type SiteLoginConfigReq struct {
type SiteLoginConfigRes struct {
*model.LoginConfig
I18nSwitch bool `json:"i18nSwitch" dc:"国际化开关"`
DefaultLanguage string `json:"defaultLanguage" dc:"默认语言设置"`
ProjectName string `json:"projectName" dc:"项目名称"`
}
// SitePingReq ping

View File

@@ -36,3 +36,13 @@ type UploadPartReq struct {
type UploadPartRes struct {
*sysin.UploadPartModel
}
// ImageTransferStorageReq 图片链接转存
type ImageTransferStorageReq struct {
g.Meta `path:"/upload/imageTransferStorage" tags:"附件" method:"post" summary:"图片链接转存"`
sysin.ImageTransferStorageInp
}
type ImageTransferStorageRes struct {
*sysin.ImageTransferStorageModel
}

View File

@@ -1,9 +1,9 @@
// Package curddemo
// @Link https://github.com/bufanyun/hotgo
// @Copyright Copyright (c) 2024 HotGo CLI
// @Copyright Copyright (c) 2025 HotGo CLI
// @Author Ms <133814250@qq.com>
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
// @AutoGenerate Version 2.15.7
// @AutoGenerate Version 2.18.6
package curddemo
import (
@@ -82,4 +82,4 @@ type SwitchReq struct {
sysin.CurdDemoSwitchInp
}
type SwitchRes struct{}
type SwitchRes struct{}

View File

@@ -1,9 +1,9 @@
// Package optiontreedemo
// @Link https://github.com/bufanyun/hotgo
// @Copyright Copyright (c) 2024 HotGo CLI
// @Copyright Copyright (c) 2025 HotGo CLI
// @Author Ms <133814250@qq.com>
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
// @AutoGenerate Version 2.15.7
// @AutoGenerate Version 2.17.8
package optiontreedemo
import (
@@ -66,4 +66,4 @@ type TreeOptionReq struct {
g.Meta `path:"/optionTreeDemo/treeOption" method:"get" tags:"选项树表" summary:"获取选项树表关系树选项"`
}
type TreeOptionRes []tree.Node
type TreeOptionRes []tree.Node

View File

@@ -14,17 +14,19 @@ require (
github.com/forgoer/openssl v1.6.1
github.com/go-pay/crypto v0.0.1
github.com/go-pay/gopay v1.5.114
github.com/gogf/gf/contrib/drivers/mysql/v2 v2.9.0
github.com/gogf/gf/contrib/nosql/redis/v2 v2.9.0
github.com/go-pay/smap v0.0.2
github.com/gogf/gf/contrib/drivers/mysql/v2 v2.9.4
github.com/gogf/gf/contrib/drivers/pgsql/v2 v2.9.5-0.20251017101031-c02148cd6b8b
github.com/gogf/gf/contrib/nosql/redis/v2 v2.9.4
github.com/gogf/gf/contrib/trace/jaeger/v2 v2.7.4
github.com/gogf/gf/v2 v2.9.1-0.20250624075347-5fa656d1cc92
github.com/gogf/gf/v2 v2.9.4
github.com/gogf/selfupdate v0.0.0-20231215043001-5c48c528462f
github.com/golang-jwt/jwt/v5 v5.2.2
github.com/gorilla/websocket v1.5.3
github.com/kayon/iploc v0.0.0-20200312105652-bda3e968a794
github.com/minio/minio-go/v7 v7.0.94
github.com/mojocn/base64Captcha v1.3.8
github.com/olekukonko/tablewriter v0.0.5
github.com/olekukonko/tablewriter v1.1.0
github.com/qiniu/go-sdk/v7 v7.25.4
github.com/schollz/progressbar/v3 v3.18.0
github.com/shirou/gopsutil/v3 v3.24.5
@@ -34,16 +36,16 @@ require (
github.com/tencentyun/cos-go-sdk-v5 v0.7.66
github.com/ufilesdk-dev/ufile-gosdk v1.0.6
github.com/xuri/excelize/v2 v2.9.1
go.opentelemetry.io/otel v1.37.0
golang.org/x/mod v0.25.0
golang.org/x/net v0.41.0
golang.org/x/tools v0.34.0
go.opentelemetry.io/otel v1.38.0
golang.org/x/mod v0.26.0
golang.org/x/net v0.43.0
golang.org/x/tools v0.35.0
gopkg.in/yaml.v3 v3.0.1
)
require (
aead.dev/minisign v0.2.0 // indirect
github.com/BurntSushi/toml v1.4.0 // indirect
github.com/BurntSushi/toml v1.5.0 // indirect
github.com/alex-ant/gomath v0.0.0-20160516115720-89013a210a82 // indirect
github.com/alibabacloud-go/alibabacloud-gateway-spi v0.0.5 // indirect
github.com/alibabacloud-go/debug v1.0.1 // indirect
@@ -66,14 +68,13 @@ require (
github.com/emirpasic/gods v1.18.1 // indirect
github.com/fatih/color v1.18.0 // indirect
github.com/fatih/structs v1.1.0 // indirect
github.com/fsnotify/fsnotify v1.7.0 // indirect
github.com/fsnotify/fsnotify v1.9.0 // indirect
github.com/gammazero/toposort v0.1.1 // indirect
github.com/go-ini/ini v1.67.0 // indirect
github.com/go-logr/logr v1.4.3 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/go-ole/go-ole v1.2.6 // indirect
github.com/go-pay/errgroup v0.0.3 // indirect
github.com/go-pay/smap v0.0.2 // indirect
github.com/go-pay/util v0.0.4 // indirect
github.com/go-pay/xlog v0.0.3 // indirect
github.com/go-pay/xtime v0.0.2 // indirect
@@ -99,9 +100,10 @@ require (
github.com/json-iterator/go v1.1.12 // indirect
github.com/klauspost/compress v1.18.0 // indirect
github.com/klauspost/cpuid/v2 v2.2.10 // indirect
github.com/lib/pq v1.10.9 // indirect
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect
github.com/magiconair/properties v1.8.9 // indirect
github.com/mattn/go-colorable v0.1.13 // indirect
github.com/magiconair/properties v1.8.10 // indirect
github.com/mattn/go-colorable v0.1.14 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
github.com/mattn/go-runewidth v0.0.16 // indirect
github.com/minio/crc64nvme v1.0.1 // indirect
@@ -111,15 +113,15 @@ require (
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/mozillazg/go-httpheader v0.2.1 // indirect
github.com/olekukonko/errors v0.0.0-20250405072817-4e6d85265da6 // indirect
github.com/olekukonko/ll v0.0.8 // indirect
github.com/olekukonko/errors v1.1.0 // indirect
github.com/olekukonko/ll v0.0.9 // indirect
github.com/patrickmn/go-cache v2.1.0+incompatible // indirect
github.com/philhofer/fwd v1.1.3-0.20240916144458-20a13a1f6b7c // indirect
github.com/pierrec/lz4/v4 v4.1.22 // indirect
github.com/pkg/errors v0.8.1 // indirect
github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect
github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect
github.com/redis/go-redis/v9 v9.7.0 // indirect
github.com/redis/go-redis/v9 v9.12.1 // indirect
github.com/richardlehane/mscfb v1.0.4 // indirect
github.com/richardlehane/msoleps v1.0.4 // indirect
github.com/rivo/uniseg v0.4.7 // indirect
@@ -140,17 +142,17 @@ require (
github.com/yusufpapurcu/wmi v1.2.4 // indirect
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
go.opentelemetry.io/otel/exporters/jaeger v1.14.0 // indirect
go.opentelemetry.io/otel/metric v1.37.0 // indirect
go.opentelemetry.io/otel/sdk v1.32.0 // indirect
go.opentelemetry.io/otel/trace v1.37.0 // indirect
go.opentelemetry.io/otel/metric v1.38.0 // indirect
go.opentelemetry.io/otel/sdk v1.38.0 // indirect
go.opentelemetry.io/otel/trace v1.38.0 // indirect
go.uber.org/atomic v1.5.1 // indirect
golang.org/x/crypto v0.39.0 // indirect
golang.org/x/crypto v0.41.0 // indirect
golang.org/x/image v0.25.0 // indirect
golang.org/x/lint v0.0.0-20190930215403-16217165b5de // indirect
golang.org/x/sync v0.15.0 // indirect
golang.org/x/sys v0.33.0 // indirect
golang.org/x/term v0.32.0 // indirect
golang.org/x/text v0.26.0 // indirect
golang.org/x/sync v0.16.0 // indirect
golang.org/x/sys v0.35.0 // indirect
golang.org/x/term v0.34.0 // indirect
golang.org/x/text v0.28.0 // indirect
golang.org/x/time v0.12.0 // indirect
gopkg.in/ini.v1 v1.67.0 // indirect
gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect

View File

@@ -4,8 +4,8 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/BurntSushi/toml v1.1.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
github.com/BurntSushi/toml v1.4.0 h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0=
github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho=
github.com/BurntSushi/toml v1.5.0 h1:W5quZX/G/csjUnuI8SUYlsHs9M38FC7znL0lIO+DvMg=
github.com/BurntSushi/toml v1.5.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho=
github.com/IBM/sarama v1.45.2 h1:8m8LcMCu3REcwpa7fCP6v2fuPuzVwXDAM2DOv3CBrKw=
github.com/IBM/sarama v1.45.2/go.mod h1:ppaoTcVdGv186/z6MEKsMm70A5fwJfRTpstI37kVn3Y=
github.com/QcloudApi/qcloud_sign_golang v0.0.0-20141224014652-e4130a326409/go.mod h1:1pk82RBxDY/JZnPQrtqHlUFfCctgdorsd9M06fMynOM=
@@ -131,8 +131,8 @@ github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8
github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k=
github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0=
github.com/gammazero/toposort v0.1.1 h1:OivGxsWxF3U3+U80VoLJ+f50HcPU1MIqE1JlKzoJ2Eg=
github.com/gammazero/toposort v0.1.1/go.mod h1:H2cozTnNpMw0hg2VHAYsAxmkHXBYroNangj2NTBQDvw=
github.com/go-ini/ini v1.67.0 h1:z6ZrTEZqSWOTyH2FlglNbNgARyHG8oLW9gMELqKr06A=
@@ -173,16 +173,16 @@ github.com/goccy/go-json v0.10.5 h1:Fq85nIqj+gXn/S5ahsiTlK3TmC85qgirsdTP/+DeaC4=
github.com/goccy/go-json v0.10.5/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M=
github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw=
github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU=
github.com/gogf/gf/contrib/drivers/mysql/v2 v2.9.0 h1:1f7EeD0lfPHoXfaJDSL7cxRcSRelbsAKgF3MGXY+Uyo=
github.com/gogf/gf/contrib/drivers/mysql/v2 v2.9.0/go.mod h1:tToO1PjGkLIR+9DbJ0wrKicYma0H/EUHXOpwel6Dw+0=
github.com/gogf/gf/contrib/nosql/redis/v2 v2.9.0 h1:EEZqu1PNRSmm+7Cqm9A/8+ObgfbMzhE1ps9Z3LD7HgM=
github.com/gogf/gf/contrib/nosql/redis/v2 v2.9.0/go.mod h1:LHrxY+2IzNTHVTPG/s5yaz1VmXbj+CQ7Hr5SeVkHiTw=
github.com/gogf/gf/contrib/drivers/mysql/v2 v2.9.4 h1:ntAPahCjQwQ79CC6tI67QDgj17NTWp+lMd1SaL2jJhs=
github.com/gogf/gf/contrib/drivers/mysql/v2 v2.9.4/go.mod h1:/350+9clTW5ktUvF+hePMN9yDknB2ipslqcx3Y2rLDQ=
github.com/gogf/gf/contrib/drivers/pgsql/v2 v2.9.5-0.20251017101031-c02148cd6b8b h1:f866FHfg85dSbO3A8w1PLOyZm0IERqD4q0nutIubDHU=
github.com/gogf/gf/contrib/drivers/pgsql/v2 v2.9.5-0.20251017101031-c02148cd6b8b/go.mod h1:FCGqaKJdbpqLdGkOPb/u2sfJxqQbJecqU5F9D9hCRC4=
github.com/gogf/gf/contrib/nosql/redis/v2 v2.9.4 h1:iKXUQ+8TklSriAqOQjfwioI36zlByqrDqz4ISaRFvm8=
github.com/gogf/gf/contrib/nosql/redis/v2 v2.9.4/go.mod h1:PYVwyQ0gN+w3wL7zKAoeUpy2WFs4/V8+Ls+eNsy7Uo0=
github.com/gogf/gf/contrib/trace/jaeger/v2 v2.7.4 h1:JnUjXb7C9vmwcZFwXqnxi9H4/I0rir9LmRryIX7xNds=
github.com/gogf/gf/contrib/trace/jaeger/v2 v2.7.4/go.mod h1:A3NhV8u45twLq5VdqObhYNhT4szLFLCROw4LzHM+lYg=
github.com/gogf/gf/v2 v2.9.0 h1:semN5Q5qGjDQEv4620VzxcJzJlSD07gmyJ9Sy9zfbHk=
github.com/gogf/gf/v2 v2.9.0/go.mod h1:sWGQw+pLILtuHmbOxoe0D+0DdaXxbleT57axOLH2vKI=
github.com/gogf/gf/v2 v2.9.1-0.20250624075347-5fa656d1cc92 h1:ydiVI+0OGCH8eeuAq+P6XzyIX7CCbYose+AFvJdMD7k=
github.com/gogf/gf/v2 v2.9.1-0.20250624075347-5fa656d1cc92/go.mod h1:sWGQw+pLILtuHmbOxoe0D+0DdaXxbleT57axOLH2vKI=
github.com/gogf/gf/v2 v2.9.4 h1:6vleEWypot9WBPncP2GjbpgAUeG6Mzb1YESb9nPMkjY=
github.com/gogf/gf/v2 v2.9.4/go.mod h1:Ukl+5HUH9S7puBmNLR4L1zUqeRwi0nrW4OigOknEztU=
github.com/gogf/selfupdate v0.0.0-20231215043001-5c48c528462f h1:7xfXR/BhG3JDqO1s45n65Oyx9t4E/UqDOXep6jXdLCM=
github.com/gogf/selfupdate v0.0.0-20231215043001-5c48c528462f/go.mod h1:HnYoio6S7VaFJdryKcD/r9HgX+4QzYfr00XiXUo/xz0=
github.com/golang-jwt/jwt/v5 v5.2.1/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk=
@@ -287,16 +287,16 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY=
github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw=
github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ81pIr0yLvtUWk2if982qA3F3QD6H4=
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I=
github.com/magiconair/properties v1.8.9 h1:nWcCbLq1N2v/cpNsy5WvQ37Fb+YElfq20WJ/a8RkpQM=
github.com/magiconair/properties v1.8.9/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
github.com/magiconair/properties v1.8.10 h1:s31yESBquKXCV9a/ScB3ESkOjUYYv+X0rg8SYxI99mE=
github.com/magiconair/properties v1.8.10/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE=
github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8=
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc=
github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
github.com/minio/crc64nvme v1.0.1 h1:DHQPrYPdqK7jQG/Ls5CTBZWeex/2FMS3G5XGkycuFrY=
@@ -325,14 +325,12 @@ github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLA
github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE=
github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU=
github.com/olekukonko/errors v0.0.0-20250405072817-4e6d85265da6 h1:r3FaAI0NZK3hSmtTDrBVREhKULp8oUeqLT5Eyl2mSPo=
github.com/olekukonko/errors v0.0.0-20250405072817-4e6d85265da6/go.mod h1:ppzxA5jBKcO1vIpCXQ9ZqgDh8iwODz6OXIGKU8r5m4Y=
github.com/olekukonko/ll v0.0.8 h1:sbGZ1Fx4QxJXEqL/6IG8GEFnYojUSQ45dJVwN2FH2fc=
github.com/olekukonko/ll v0.0.8/go.mod h1:En+sEW0JNETl26+K8eZ6/W4UQ7CYSrrgg/EdIYT2H8g=
github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec=
github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY=
github.com/olekukonko/tablewriter v1.0.8 h1:f6wJzHg4QUtJdvrVPKco4QTrAylgaU0+b9br/lJxEiQ=
github.com/olekukonko/tablewriter v1.0.8/go.mod h1:H428M+HzoUXC6JU2Abj9IT9ooRmdq9CxuDmKMtrOCMs=
github.com/olekukonko/errors v1.1.0 h1:RNuGIh15QdDenh+hNvKrJkmxxjV4hcS50Db478Ou5sM=
github.com/olekukonko/errors v1.1.0/go.mod h1:ppzxA5jBKcO1vIpCXQ9ZqgDh8iwODz6OXIGKU8r5m4Y=
github.com/olekukonko/ll v0.0.9 h1:Y+1YqDfVkqMWuEQMclsF9HUR5+a82+dxJuL1HHSRpxI=
github.com/olekukonko/ll v0.0.9/go.mod h1:En+sEW0JNETl26+K8eZ6/W4UQ7CYSrrgg/EdIYT2H8g=
github.com/olekukonko/tablewriter v1.1.0 h1:N0LHrshF4T39KvI96fn6GT8HEjXRXYNDrDjKFDB7RIY=
github.com/olekukonko/tablewriter v1.1.0/go.mod h1:5c+EBPeSqvXnLLgkm9isDdzR3wjfBkHR9Nhfp3NWrzo=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0=
@@ -364,8 +362,8 @@ github.com/qiniu/go-sdk/v7 v7.25.4/go.mod h1:dmKtJ2ahhPWFVi9o1D5GemmWoh/ctuB9peq
github.com/qiniu/x v1.10.5/go.mod h1:03Ni9tj+N2h2aKnAz+6N0Xfl8FwMEDRC2PAlxekASDs=
github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM=
github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
github.com/redis/go-redis/v9 v9.7.0 h1:HhLSs+B6O021gwzl+locl0zEDnyNkxMtf/Z3NNBMa9E=
github.com/redis/go-redis/v9 v9.7.0/go.mod h1:f6zhXITC7JUJIlPEiBOTXxJgPLdZcA93GewI7inzyWw=
github.com/redis/go-redis/v9 v9.12.1 h1:k5iquqv27aBtnTm2tIkROUDp8JBXhXZIVu1InSgvovg=
github.com/redis/go-redis/v9 v9.12.1/go.mod h1:huWgSWd8mW6+m0VPhJjSSQ+d6Nh1VICQ6Q5lHuCH/Iw=
github.com/richardlehane/mscfb v1.0.4 h1:WULscsljNPConisD5hR0+OyZjwK46Pfyr6mPu5ZawpM=
github.com/richardlehane/mscfb v1.0.4/go.mod h1:YzVpcZg9czvAuhk9T+a3avCpcFPMUWm7gK3DypaEsUk=
github.com/richardlehane/msoleps v1.0.1/go.mod h1:BWev5JBpU9Ko2WAgmZEuiz4/u3ZYTKbjLycmwiWUfWg=
@@ -415,8 +413,8 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.563/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1200/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1202 h1:3QTQZXLLGLALyHNHs6WAsFCWvElMEXfOdaFM01/3Zjo=
@@ -462,18 +460,22 @@ github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo
github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
go.opentelemetry.io/otel v1.37.0 h1:9zhNfelUvx0KBfu/gb+ZgeAfAgtWrfHJZcAqFC228wQ=
go.opentelemetry.io/otel v1.37.0/go.mod h1:ehE/umFRLnuLa/vSccNq9oS1ErUlkkK71gMcN34UG8I=
go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8=
go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM=
go.opentelemetry.io/otel/exporters/jaeger v1.14.0 h1:CjbUNd4iN2hHmWekmOqZ+zSCU+dzZppG8XsV+A3oc8Q=
go.opentelemetry.io/otel/exporters/jaeger v1.14.0/go.mod h1:4Ay9kk5vELRrbg5z4cpP9EtmQRFap2Wb0woPG4lujZA=
go.opentelemetry.io/otel/metric v1.37.0 h1:mvwbQS5m0tbmqML4NqK+e3aDiO02vsf/WgbsdpcPoZE=
go.opentelemetry.io/otel/metric v1.37.0/go.mod h1:04wGrZurHYKOc+RKeye86GwKiTb9FKm1WHtO+4EVr2E=
go.opentelemetry.io/otel/sdk v1.32.0 h1:RNxepc9vK59A8XsgZQouW8ue8Gkb4jpWtJm9ge5lEG4=
go.opentelemetry.io/otel/sdk v1.32.0/go.mod h1:LqgegDBjKMmb2GC6/PrTnteJG39I8/vJCAP9LlJXEjU=
go.opentelemetry.io/otel/trace v1.37.0 h1:HLdcFNbRQBE2imdSEgm/kwqmQj1Or1l/7bW6mxVK7z4=
go.opentelemetry.io/otel/trace v1.37.0/go.mod h1:TlgrlQ+PtQO5XFerSPUYG0JSgGyryXewPGyayAWSBS0=
go.opentelemetry.io/otel/metric v1.38.0 h1:Kl6lzIYGAh5M159u9NgiRkmoMKjvbsKtYRwgfrA6WpA=
go.opentelemetry.io/otel/metric v1.38.0/go.mod h1:kB5n/QoRM8YwmUahxvI3bO34eVtQf2i4utNVLr9gEmI=
go.opentelemetry.io/otel/sdk v1.38.0 h1:l48sr5YbNf2hpCUj/FoGhW9yDkl+Ma+LrVl8qaM5b+E=
go.opentelemetry.io/otel/sdk v1.38.0/go.mod h1:ghmNdGlVemJI3+ZB5iDEuk4bWA3GkTpW+DOoZMYBVVg=
go.opentelemetry.io/otel/sdk/metric v1.38.0 h1:aSH66iL0aZqo//xXzQLYozmWrXxyFkBJ6qT5wthqPoM=
go.opentelemetry.io/otel/sdk/metric v1.38.0/go.mod h1:dg9PBnW9XdQ1Hd6ZnRz689CbtrUp0wMMs9iPcgT9EZA=
go.opentelemetry.io/otel/trace v1.38.0 h1:Fxk5bKrDZJUH+AMyyIXGcFAPah0oRcT+LuNtJrmcNLE=
go.opentelemetry.io/otel/trace v1.38.0/go.mod h1:j1P9ivuFsTceSWe1oY+EeW3sc+Pp42sO++GHkg4wwhs=
go.uber.org/atomic v1.5.1 h1:rsqfU5vBkVknbhUGbAUwQKR2H4ItV8tjJ+6kJX4cxHM=
go.uber.org/atomic v1.5.1/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
@@ -492,8 +494,8 @@ golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDf
golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs=
golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8=
golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM=
golang.org/x/crypto v0.39.0 h1:SHs+kF4LP+f+p14esP5jAoDpHU8Gu/v9lFRK6IT5imM=
golang.org/x/crypto v0.39.0/go.mod h1:L+Xg3Wf6HoL4Bn4238Z6ft6KfEpN0tJGo53AAPC632U=
golang.org/x/crypto v0.41.0 h1:WKYxWedPGCTVVl5+WHSSrOBT0O8lx32+zxmHxijgXp4=
golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/image v0.23.0/go.mod h1:wJJBTdLfCCf3tiHa1fNxpZmUI4mmoZvwMCPP0ddoNKY=
golang.org/x/image v0.25.0 h1:Y6uW6rH1y5y/LK1J8BPWZtr6yZ7hrsy6hFrXjgsc2fQ=
@@ -510,8 +512,8 @@ golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
golang.org/x/mod v0.25.0 h1:n7a+ZbQKQA/Ysbyb0/6IbB1H/X41mKgbhfv7AfG/44w=
golang.org/x/mod v0.25.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww=
golang.org/x/mod v0.26.0 h1:EGMPT//Ezu+ylkCijjPc+f4Aih7sZvaAr+O3EHBxvZg=
golang.org/x/mod v0.26.0/go.mod h1:/j6NAhSk8iQ723BGAUyoAcn7SlD7s15Dp9Nd/SfeaFQ=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -539,8 +541,8 @@ golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44=
golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM=
golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE=
golang.org/x/net v0.41.0 h1:vBTly1HeNPEn3wtREYfy4GZ/NECgw2Cnl+nK6Nz3uvw=
golang.org/x/net v0.41.0/go.mod h1:B/K4NNqkfmg07DQYrbwvSluqCJOOXwUjeb/5lOisjbA=
golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE=
golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -554,8 +556,8 @@ golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y=
golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sync v0.15.0 h1:KWH3jNZsfyT6xfAfKiz6MRNmd46ByHDYaZ7KSkCtdW8=
golang.org/x/sync v0.15.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw=
golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -581,7 +583,6 @@ golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
@@ -593,8 +594,8 @@ golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw=
golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI=
golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE=
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
@@ -608,8 +609,8 @@ golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk=
golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58=
golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY=
golang.org/x/term v0.21.0/go.mod h1:ooXLefLobQVslOqselCNF4SxFAaoS6KujMbsGzSDmX0=
golang.org/x/term v0.32.0 h1:DR4lr0TjUs3epypdhTOkMmuF5CDFJ/8pOnbzMZPQ7bg=
golang.org/x/term v0.32.0/go.mod h1:uZG1FhGx848Sqfsq4/DlJr3xGGsYMu/L5GW4abiaEPQ=
golang.org/x/term v0.34.0 h1:O/2T7POpk0ZZ7MAzMeWFSg6S5IpWd/RXDlM9hgM3DR4=
golang.org/x/term v0.34.0/go.mod h1:5jC53AEywhIVebHgPVeg0mj8OD3VO9OzclacVrqpaAw=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
@@ -622,8 +623,8 @@ golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI=
golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
golang.org/x/text v0.26.0 h1:P42AVeLghgTYr4+xUnTRKDMqpar+PtX7KWuNQL21L8M=
golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA=
golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng=
golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU=
golang.org/x/time v0.12.0 h1:ScB/8o8olJvc+CQPWrK3fPZNfh7qgwCrY0zJmoEQLSE=
golang.org/x/time v0.12.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
@@ -641,8 +642,8 @@ golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58=
golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk=
golang.org/x/tools v0.34.0 h1:qIpSLOxeCYGg9TrcJokLBG4KFA6d795g0xkBkiESGlo=
golang.org/x/tools v0.34.0/go.mod h1:pAP9OwEaY1CAW3HOmg3hLZC5Z0CCmzjAF2UQMSqNARg=
golang.org/x/tools v0.35.0 h1:mBffYraMEf7aa0sB+NuKnuCy8qI/9Bughn8dC2Gu5r0=
golang.org/x/tools v0.35.0/go.mod h1:NKdj5HkL/73byiZSJjqJgKn3ep7KjFkBOkR/Hps3VPw=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=

View File

@@ -23,6 +23,7 @@ gfcli:
gen:
dao:
- link: "mysql:hotgo:hg123456.@tcp(127.0.0.1:3306)/hotgo?loc=Local&parseTime=true&charset=utf8mb4"
# - link: "pgsql:postgres:hg123456@tcp(127.0.0.1:5432)/hotgo"
group: "default" # 分组 使用hotgo代码生成功能时必须填
# tables: "" # 指定当前数据库中需要执行代码生成的数据表如果为空表示数据库的所有表都会生成
tablesEx: "hg_sys_addons_install" # 指定当前数据库中需要排除代码生成的数据表

View File

@@ -1,6 +1,6 @@
// Package consts
// @Link https://github.com/bufanyun/hotgo
// @Copyright Copyright (c) 2023 HotGo CLI
// @Copyright Copyright (c) 2025 HotGo CLI
// @Author Ms <133814250@qq.com>
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
package consts
@@ -14,6 +14,7 @@ const (
Unknown = "Unknown" // Unknown
SuperRoleKey = "super" // 超管角色唯一标识符,通过角色验证超管
MaxServeLogContentLen = 2048 // 最大保留服务日志内容大小
SysDefaultLanguage = "zh_CN" // 系统默认语言,当配置文件没有国际化配置时生效
)
// curd.
@@ -29,3 +30,8 @@ const (
MerchantId = "merchant_id" // 商户ID
UserId = "user_id" // 用户ID
)
const (
DBMysql = "mysql"
DBPgsql = "pgsql"
)

View File

@@ -1,11 +1,11 @@
// Package consts
// @Link https://github.com/bufanyun/hotgo
// @Copyright Copyright (c) 2023 HotGo CLI
// @Copyright Copyright (c) 2025 HotGo CLI
// @Author Ms <133814250@qq.com>
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
package consts
// VersionApp HotGo版本
const (
VersionApp = "2.17.8"
VersionApp = "2.18.6"
)

View File

@@ -7,6 +7,7 @@ package common
import (
"context"
"github.com/gogf/gf/v2/i18n/gi18n"
"hotgo/api/admin/common"
"hotgo/internal/consts"
"hotgo/internal/library/captcha"
@@ -90,6 +91,9 @@ func (c *cSite) LoginConfig(ctx context.Context, _ *common.SiteLoginConfigReq) (
}
res.LoginConfig = login
res.I18nSwitch = g.Cfg().MustGet(ctx, "system.i18n.switch", true).Bool()
res.DefaultLanguage = g.Cfg().MustGet(ctx, "system.i18n.defaultLanguage", consts.SysDefaultLanguage).String()
res.ProjectName = gi18n.T(ctx, "HotGo管理系统")
return
}

View File

@@ -57,3 +57,10 @@ func (c *cUpload) UploadPart(ctx context.Context, req *common.UploadPartReq) (re
res.UploadPartModel = data
return
}
// ImageTransferStorage 图片链接转存
func (c *cUpload) ImageTransferStorage(ctx context.Context, req *common.ImageTransferStorageReq) (res *common.ImageTransferStorageRes, err error) {
res = new(common.ImageTransferStorageRes)
res.ImageTransferStorageModel, err = service.CommonUpload().ImageTransferStorage(ctx, &req.ImageTransferStorageInp)
return
}

View File

@@ -1,9 +1,9 @@
// Package sys
// @Link https://github.com/bufanyun/hotgo
// @Copyright Copyright (c) 2024 HotGo CLI
// @Copyright Copyright (c) 2025 HotGo CLI
// @Author Ms <133814250@qq.com>
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
// @AutoGenerate Version 2.15.7
// @AutoGenerate Version 2.18.6
package sys
import (
@@ -88,4 +88,4 @@ func (c *cCurdDemo) Status(ctx context.Context, req *curddemo.StatusReq) (res *c
func (c *cCurdDemo) Switch(ctx context.Context, req *curddemo.SwitchReq) (res *curddemo.SwitchRes, err error) {
err = service.SysCurdDemo().Switch(ctx, &req.CurdDemoSwitchInp)
return
}
}

View File

@@ -1,9 +1,9 @@
// Package sys
// @Link https://github.com/bufanyun/hotgo
// @Copyright Copyright (c) 2024 HotGo CLI
// @Copyright Copyright (c) 2025 HotGo CLI
// @Author Ms <133814250@qq.com>
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
// @AutoGenerate Version 2.15.7
// @AutoGenerate Version 2.17.8
package sys
import (
@@ -86,4 +86,4 @@ func (c *cOptionTreeDemo) TreeOption(ctx context.Context, req *optiontreedemo.Tr
res = &temp
}
return
}
}

View File

@@ -1,5 +1,5 @@
// =================================================================================
// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish.
// This file is auto-generated by the GoFrame CLI tool. You may modify it as needed.
// =================================================================================
package dao
@@ -8,20 +8,15 @@ import (
"hotgo/internal/dao/internal"
)
// internalAddonHgexampleTableDao is internal type for wrapping internal DAO implements.
type internalAddonHgexampleTableDao = *internal.AddonHgexampleTableDao
// addonHgexampleTableDao is the data access object for table hg_addon_hgexample_table.
// You can define custom methods on it to extend its functionality as you wish.
// addonHgexampleTableDao is the data access object for the table hg_addon_hgexample_table.
// You can define custom methods on it to extend its functionality as needed.
type addonHgexampleTableDao struct {
internalAddonHgexampleTableDao
*internal.AddonHgexampleTableDao
}
var (
// AddonHgexampleTable is globally public accessible object for table hg_addon_hgexample_table operations.
AddonHgexampleTable = addonHgexampleTableDao{
internal.NewAddonHgexampleTableDao(),
}
// AddonHgexampleTable is a globally accessible object for table hg_addon_hgexample_table operations.
AddonHgexampleTable = addonHgexampleTableDao{internal.NewAddonHgexampleTableDao()}
)
// Fill with you ideas below.
// Add your custom methods and functionality below.

View File

@@ -1,5 +1,5 @@
// =================================================================================
// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish.
// This file is auto-generated by the GoFrame CLI tool. You may modify it as needed.
// =================================================================================
package dao
@@ -8,20 +8,15 @@ import (
"hotgo/internal/dao/internal"
)
// internalAddonHgexampleTenantOrderDao is internal type for wrapping internal DAO implements.
type internalAddonHgexampleTenantOrderDao = *internal.AddonHgexampleTenantOrderDao
// addonHgexampleTenantOrderDao is the data access object for table hg_addon_hgexample_tenant_order.
// You can define custom methods on it to extend its functionality as you wish.
// addonHgexampleTenantOrderDao is the data access object for the table hg_addon_hgexample_tenant_order.
// You can define custom methods on it to extend its functionality as needed.
type addonHgexampleTenantOrderDao struct {
internalAddonHgexampleTenantOrderDao
*internal.AddonHgexampleTenantOrderDao
}
var (
// AddonHgexampleTenantOrder is globally public accessible object for table hg_addon_hgexample_tenant_order operations.
AddonHgexampleTenantOrder = addonHgexampleTenantOrderDao{
internal.NewAddonHgexampleTenantOrderDao(),
}
// AddonHgexampleTenantOrder is a globally accessible object for table hg_addon_hgexample_tenant_order operations.
AddonHgexampleTenantOrder = addonHgexampleTenantOrderDao{internal.NewAddonHgexampleTenantOrderDao()}
)
// Fill with you ideas below.
// Add your custom methods and functionality below.

View File

@@ -1,5 +1,5 @@
// =================================================================================
// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish.
// This file is auto-generated by the GoFrame CLI tool. You may modify it as needed.
// =================================================================================
package dao
@@ -8,20 +8,15 @@ import (
"hotgo/internal/dao/internal"
)
// internalAdminCashDao is internal type for wrapping internal DAO implements.
type internalAdminCashDao = *internal.AdminCashDao
// adminCashDao is the data access object for table hg_admin_cash.
// You can define custom methods on it to extend its functionality as you wish.
// adminCashDao is the data access object for the table hg_admin_cash.
// You can define custom methods on it to extend its functionality as needed.
type adminCashDao struct {
internalAdminCashDao
*internal.AdminCashDao
}
var (
// AdminCash is globally public accessible object for table hg_admin_cash operations.
AdminCash = adminCashDao{
internal.NewAdminCashDao(),
}
// AdminCash is a globally accessible object for table hg_admin_cash operations.
AdminCash = adminCashDao{internal.NewAdminCashDao()}
)
// Fill with you ideas below.
// Add your custom methods and functionality below.

View File

@@ -1,5 +1,5 @@
// =================================================================================
// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish.
// This file is auto-generated by the GoFrame CLI tool. You may modify it as needed.
// =================================================================================
package dao
@@ -8,20 +8,15 @@ import (
"hotgo/internal/dao/internal"
)
// internalAdminCreditsLogDao is internal type for wrapping internal DAO implements.
type internalAdminCreditsLogDao = *internal.AdminCreditsLogDao
// adminCreditsLogDao is the data access object for table hg_admin_credits_log.
// You can define custom methods on it to extend its functionality as you wish.
// adminCreditsLogDao is the data access object for the table hg_admin_credits_log.
// You can define custom methods on it to extend its functionality as needed.
type adminCreditsLogDao struct {
internalAdminCreditsLogDao
*internal.AdminCreditsLogDao
}
var (
// AdminCreditsLog is globally public accessible object for table hg_admin_credits_log operations.
AdminCreditsLog = adminCreditsLogDao{
internal.NewAdminCreditsLogDao(),
}
// AdminCreditsLog is a globally accessible object for table hg_admin_credits_log operations.
AdminCreditsLog = adminCreditsLogDao{internal.NewAdminCreditsLogDao()}
)
// Fill with you ideas below.
// Add your custom methods and functionality below.

View File

@@ -1,5 +1,5 @@
// =================================================================================
// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish.
// This file is auto-generated by the GoFrame CLI tool. You may modify it as needed.
// =================================================================================
package dao
@@ -8,20 +8,15 @@ import (
"hotgo/internal/dao/internal"
)
// internalAdminDeptDao is internal type for wrapping internal DAO implements.
type internalAdminDeptDao = *internal.AdminDeptDao
// adminDeptDao is the data access object for table hg_admin_dept.
// You can define custom methods on it to extend its functionality as you wish.
// adminDeptDao is the data access object for the table hg_admin_dept.
// You can define custom methods on it to extend its functionality as needed.
type adminDeptDao struct {
internalAdminDeptDao
*internal.AdminDeptDao
}
var (
// AdminDept is globally public accessible object for table hg_admin_dept operations.
AdminDept = adminDeptDao{
internal.NewAdminDeptDao(),
}
// AdminDept is a globally accessible object for table hg_admin_dept operations.
AdminDept = adminDeptDao{internal.NewAdminDeptDao()}
)
// Fill with you ideas below.
// Add your custom methods and functionality below.

View File

@@ -1,5 +1,5 @@
// =================================================================================
// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish.
// This file is auto-generated by the GoFrame CLI tool. You may modify it as needed.
// =================================================================================
package dao
@@ -8,20 +8,15 @@ import (
"hotgo/internal/dao/internal"
)
// internalAdminMemberDao is internal type for wrapping internal DAO implements.
type internalAdminMemberDao = *internal.AdminMemberDao
// adminMemberDao is the data access object for table hg_admin_member.
// You can define custom methods on it to extend its functionality as you wish.
// adminMemberDao is the data access object for the table hg_admin_member.
// You can define custom methods on it to extend its functionality as needed.
type adminMemberDao struct {
internalAdminMemberDao
*internal.AdminMemberDao
}
var (
// AdminMember is globally public accessible object for table hg_admin_member operations.
AdminMember = adminMemberDao{
internal.NewAdminMemberDao(),
}
// AdminMember is a globally accessible object for table hg_admin_member operations.
AdminMember = adminMemberDao{internal.NewAdminMemberDao()}
)
// Fill with you ideas below.
// Add your custom methods and functionality below.

View File

@@ -1,5 +1,5 @@
// =================================================================================
// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish.
// This file is auto-generated by the GoFrame CLI tool. You may modify it as needed.
// =================================================================================
package dao
@@ -8,20 +8,15 @@ import (
"hotgo/internal/dao/internal"
)
// internalAdminMemberPostDao is internal type for wrapping internal DAO implements.
type internalAdminMemberPostDao = *internal.AdminMemberPostDao
// adminMemberPostDao is the data access object for table hg_admin_member_post.
// You can define custom methods on it to extend its functionality as you wish.
// adminMemberPostDao is the data access object for the table hg_admin_member_post.
// You can define custom methods on it to extend its functionality as needed.
type adminMemberPostDao struct {
internalAdminMemberPostDao
*internal.AdminMemberPostDao
}
var (
// AdminMemberPost is globally public accessible object for table hg_admin_member_post operations.
AdminMemberPost = adminMemberPostDao{
internal.NewAdminMemberPostDao(),
}
// AdminMemberPost is a globally accessible object for table hg_admin_member_post operations.
AdminMemberPost = adminMemberPostDao{internal.NewAdminMemberPostDao()}
)
// Fill with you ideas below.
// Add your custom methods and functionality below.

View File

@@ -1,5 +1,5 @@
// =================================================================================
// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish.
// This file is auto-generated by the GoFrame CLI tool. You may modify it as needed.
// =================================================================================
package dao
@@ -8,20 +8,15 @@ import (
"hotgo/internal/dao/internal"
)
// internalAdminMemberRoleDao is internal type for wrapping internal DAO implements.
type internalAdminMemberRoleDao = *internal.AdminMemberRoleDao
// adminMemberRoleDao is the data access object for table hg_admin_member_role.
// You can define custom methods on it to extend its functionality as you wish.
// adminMemberRoleDao is the data access object for the table hg_admin_member_role.
// You can define custom methods on it to extend its functionality as needed.
type adminMemberRoleDao struct {
internalAdminMemberRoleDao
*internal.AdminMemberRoleDao
}
var (
// AdminMemberRole is globally public accessible object for table hg_admin_member_role operations.
AdminMemberRole = adminMemberRoleDao{
internal.NewAdminMemberRoleDao(),
}
// AdminMemberRole is a globally accessible object for table hg_admin_member_role operations.
AdminMemberRole = adminMemberRoleDao{internal.NewAdminMemberRoleDao()}
)
// Fill with you ideas below.
// Add your custom methods and functionality below.

View File

@@ -1,5 +1,5 @@
// =================================================================================
// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish.
// This file is auto-generated by the GoFrame CLI tool. You may modify it as needed.
// =================================================================================
package dao
@@ -8,20 +8,15 @@ import (
"hotgo/internal/dao/internal"
)
// internalAdminMenuDao is internal type for wrapping internal DAO implements.
type internalAdminMenuDao = *internal.AdminMenuDao
// adminMenuDao is the data access object for table hg_admin_menu.
// You can define custom methods on it to extend its functionality as you wish.
// adminMenuDao is the data access object for the table hg_admin_menu.
// You can define custom methods on it to extend its functionality as needed.
type adminMenuDao struct {
internalAdminMenuDao
*internal.AdminMenuDao
}
var (
// AdminMenu is globally public accessible object for table hg_admin_menu operations.
AdminMenu = adminMenuDao{
internal.NewAdminMenuDao(),
}
// AdminMenu is a globally accessible object for table hg_admin_menu operations.
AdminMenu = adminMenuDao{internal.NewAdminMenuDao()}
)
// Fill with you ideas below.
// Add your custom methods and functionality below.

View File

@@ -1,5 +1,5 @@
// =================================================================================
// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish.
// This file is auto-generated by the GoFrame CLI tool. You may modify it as needed.
// =================================================================================
package dao
@@ -8,20 +8,15 @@ import (
"hotgo/internal/dao/internal"
)
// internalAdminNoticeDao is internal type for wrapping internal DAO implements.
type internalAdminNoticeDao = *internal.AdminNoticeDao
// adminNoticeDao is the data access object for table hg_admin_notice.
// You can define custom methods on it to extend its functionality as you wish.
// adminNoticeDao is the data access object for the table hg_admin_notice.
// You can define custom methods on it to extend its functionality as needed.
type adminNoticeDao struct {
internalAdminNoticeDao
*internal.AdminNoticeDao
}
var (
// AdminNotice is globally public accessible object for table hg_admin_notice operations.
AdminNotice = adminNoticeDao{
internal.NewAdminNoticeDao(),
}
// AdminNotice is a globally accessible object for table hg_admin_notice operations.
AdminNotice = adminNoticeDao{internal.NewAdminNoticeDao()}
)
// Fill with you ideas below.
// Add your custom methods and functionality below.

View File

@@ -1,5 +1,5 @@
// =================================================================================
// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish.
// This file is auto-generated by the GoFrame CLI tool. You may modify it as needed.
// =================================================================================
package dao
@@ -8,20 +8,15 @@ import (
"hotgo/internal/dao/internal"
)
// internalAdminNoticeReadDao is internal type for wrapping internal DAO implements.
type internalAdminNoticeReadDao = *internal.AdminNoticeReadDao
// adminNoticeReadDao is the data access object for table hg_admin_notice_read.
// You can define custom methods on it to extend its functionality as you wish.
// adminNoticeReadDao is the data access object for the table hg_admin_notice_read.
// You can define custom methods on it to extend its functionality as needed.
type adminNoticeReadDao struct {
internalAdminNoticeReadDao
*internal.AdminNoticeReadDao
}
var (
// AdminNoticeRead is globally public accessible object for table hg_admin_notice_read operations.
AdminNoticeRead = adminNoticeReadDao{
internal.NewAdminNoticeReadDao(),
}
// AdminNoticeRead is a globally accessible object for table hg_admin_notice_read operations.
AdminNoticeRead = adminNoticeReadDao{internal.NewAdminNoticeReadDao()}
)
// Fill with you ideas below.
// Add your custom methods and functionality below.

View File

@@ -1,5 +1,5 @@
// =================================================================================
// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish.
// This file is auto-generated by the GoFrame CLI tool. You may modify it as needed.
// =================================================================================
package dao
@@ -8,20 +8,15 @@ import (
"hotgo/internal/dao/internal"
)
// internalAdminOauthDao is internal type for wrapping internal DAO implements.
type internalAdminOauthDao = *internal.AdminOauthDao
// adminOauthDao is the data access object for table hg_admin_oauth.
// You can define custom methods on it to extend its functionality as you wish.
// adminOauthDao is the data access object for the table hg_admin_oauth.
// You can define custom methods on it to extend its functionality as needed.
type adminOauthDao struct {
internalAdminOauthDao
*internal.AdminOauthDao
}
var (
// AdminOauth is globally public accessible object for table hg_admin_oauth operations.
AdminOauth = adminOauthDao{
internal.NewAdminOauthDao(),
}
// AdminOauth is a globally accessible object for table hg_admin_oauth operations.
AdminOauth = adminOauthDao{internal.NewAdminOauthDao()}
)
// Fill with you ideas below.
// Add your custom methods and functionality below.

View File

@@ -1,5 +1,5 @@
// =================================================================================
// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish.
// This file is auto-generated by the GoFrame CLI tool. You may modify it as needed.
// =================================================================================
package dao
@@ -8,20 +8,15 @@ import (
"hotgo/internal/dao/internal"
)
// internalAdminOrderDao is internal type for wrapping internal DAO implements.
type internalAdminOrderDao = *internal.AdminOrderDao
// adminOrderDao is the data access object for table hg_admin_order.
// You can define custom methods on it to extend its functionality as you wish.
// adminOrderDao is the data access object for the table hg_admin_order.
// You can define custom methods on it to extend its functionality as needed.
type adminOrderDao struct {
internalAdminOrderDao
*internal.AdminOrderDao
}
var (
// AdminOrder is globally public accessible object for table hg_admin_order operations.
AdminOrder = adminOrderDao{
internal.NewAdminOrderDao(),
}
// AdminOrder is a globally accessible object for table hg_admin_order operations.
AdminOrder = adminOrderDao{internal.NewAdminOrderDao()}
)
// Fill with you ideas below.
// Add your custom methods and functionality below.

View File

@@ -1,5 +1,5 @@
// =================================================================================
// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish.
// This file is auto-generated by the GoFrame CLI tool. You may modify it as needed.
// =================================================================================
package dao
@@ -8,20 +8,15 @@ import (
"hotgo/internal/dao/internal"
)
// internalAdminPostDao is internal type for wrapping internal DAO implements.
type internalAdminPostDao = *internal.AdminPostDao
// adminPostDao is the data access object for table hg_admin_post.
// You can define custom methods on it to extend its functionality as you wish.
// adminPostDao is the data access object for the table hg_admin_post.
// You can define custom methods on it to extend its functionality as needed.
type adminPostDao struct {
internalAdminPostDao
*internal.AdminPostDao
}
var (
// AdminPost is globally public accessible object for table hg_admin_post operations.
AdminPost = adminPostDao{
internal.NewAdminPostDao(),
}
// AdminPost is a globally accessible object for table hg_admin_post operations.
AdminPost = adminPostDao{internal.NewAdminPostDao()}
)
// Fill with you ideas below.
// Add your custom methods and functionality below.

View File

@@ -1,5 +1,5 @@
// =================================================================================
// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish.
// This file is auto-generated by the GoFrame CLI tool. You may modify it as needed.
// =================================================================================
package dao
@@ -8,20 +8,15 @@ import (
"hotgo/internal/dao/internal"
)
// internalAdminRoleDao is internal type for wrapping internal DAO implements.
type internalAdminRoleDao = *internal.AdminRoleDao
// adminRoleDao is the data access object for table hg_admin_role.
// You can define custom methods on it to extend its functionality as you wish.
// adminRoleDao is the data access object for the table hg_admin_role.
// You can define custom methods on it to extend its functionality as needed.
type adminRoleDao struct {
internalAdminRoleDao
*internal.AdminRoleDao
}
var (
// AdminRole is globally public accessible object for table hg_admin_role operations.
AdminRole = adminRoleDao{
internal.NewAdminRoleDao(),
}
// AdminRole is a globally accessible object for table hg_admin_role operations.
AdminRole = adminRoleDao{internal.NewAdminRoleDao()}
)
// Fill with you ideas below.
// Add your custom methods and functionality below.

View File

@@ -1,5 +1,5 @@
// =================================================================================
// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish.
// This file is auto-generated by the GoFrame CLI tool. You may modify it as needed.
// =================================================================================
package dao
@@ -8,20 +8,15 @@ import (
"hotgo/internal/dao/internal"
)
// internalAdminRoleCasbinDao is internal type for wrapping internal DAO implements.
type internalAdminRoleCasbinDao = *internal.AdminRoleCasbinDao
// adminRoleCasbinDao is the data access object for table hg_admin_role_casbin.
// You can define custom methods on it to extend its functionality as you wish.
// adminRoleCasbinDao is the data access object for the table hg_admin_role_casbin.
// You can define custom methods on it to extend its functionality as needed.
type adminRoleCasbinDao struct {
internalAdminRoleCasbinDao
*internal.AdminRoleCasbinDao
}
var (
// AdminRoleCasbin is globally public accessible object for table hg_admin_role_casbin operations.
AdminRoleCasbin = adminRoleCasbinDao{
internal.NewAdminRoleCasbinDao(),
}
// AdminRoleCasbin is a globally accessible object for table hg_admin_role_casbin operations.
AdminRoleCasbin = adminRoleCasbinDao{internal.NewAdminRoleCasbinDao()}
)
// Fill with you ideas below.
// Add your custom methods and functionality below.

View File

@@ -1,5 +1,5 @@
// =================================================================================
// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish.
// This file is auto-generated by the GoFrame CLI tool. You may modify it as needed.
// =================================================================================
package dao
@@ -8,20 +8,15 @@ import (
"hotgo/internal/dao/internal"
)
// internalAdminRoleMenuDao is internal type for wrapping internal DAO implements.
type internalAdminRoleMenuDao = *internal.AdminRoleMenuDao
// adminRoleMenuDao is the data access object for table hg_admin_role_menu.
// You can define custom methods on it to extend its functionality as you wish.
// adminRoleMenuDao is the data access object for the table hg_admin_role_menu.
// You can define custom methods on it to extend its functionality as needed.
type adminRoleMenuDao struct {
internalAdminRoleMenuDao
*internal.AdminRoleMenuDao
}
var (
// AdminRoleMenu is globally public accessible object for table hg_admin_role_menu operations.
AdminRoleMenu = adminRoleMenuDao{
internal.NewAdminRoleMenuDao(),
}
// AdminRoleMenu is a globally accessible object for table hg_admin_role_menu operations.
AdminRoleMenu = adminRoleMenuDao{internal.NewAdminRoleMenuDao()}
)
// Fill with you ideas below.
// Add your custom methods and functionality below.

View File

@@ -25,7 +25,7 @@ type SysAddonsConfigColumns struct {
AddonName string // 插件名称
Group string // 分组
Name string // 参数名称
Type string // 键值类型:string,int,uint,bool,datetime,date
Type string // 键值类型:string,int,uint,bool,TIMESTAMP,date
Key string // 参数键名
Value string // 参数键值
DefaultValue string // 默认值

Some files were not shown because too many files have changed in this diff Show More