mirror of
https://github.com/bufanyun/hotgo.git
synced 2025-11-20 16:13:50 +08:00
Compare commits
2 Commits
v2.0
...
bf5bcd3eeb
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bf5bcd3eeb | ||
|
|
f254132e18 |
@@ -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.4-green" alt="goframe">
|
||||
<img src="https://img.shields.io/badge/goframe-2.9.0-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.43.1-blue" alt="naiveui">
|
||||
<img src="https://img.shields.io/badge/naiveui-%3E2.42.0-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-2026 by Ms (https://github.com/bufanyun/hotgo)
|
||||
* 版权所有Copyright © 2020-2025 by Ms (https://github.com/bufanyun/hotgo)
|
||||
|
||||
* All rights reserved。
|
||||
|
||||
@@ -158,7 +158,7 @@
|
||||
|
||||
|
||||
## License
|
||||
[MIT © HotGo-2026](./LICENSE)
|
||||
[MIT © HotGo-2025](./LICENSE)
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -27,7 +27,6 @@
|
||||
- [WebSocket服务器](sys-websocket-server.md)
|
||||
- [TCP服务器](sys-tcp-server.md)
|
||||
- [SaaS多租户](sys-tenant.md)
|
||||
- [国际化](sys-i18n.md)
|
||||
- [单元测试](sys-test.md)
|
||||
|
||||
|
||||
|
||||
@@ -92,7 +92,6 @@ 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" # 指定当前数据库中需要排除代码生成的数据表。
|
||||
@@ -148,7 +147,6 @@ 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:
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
|
||||
### 指定数据库驱动
|
||||
|
||||
> HotGo默认使用mysql驱动,如果你想用其他数据库驱动打开下方文件中注释即可,目前已支持mysql、pgsql
|
||||
> HotGo默认使用mysql驱动,如果你想用其他数据库驱动打开下方文件中注释即可
|
||||
|
||||
- 修改文件路径:[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"
|
||||
|
||||
@@ -27,5 +27,5 @@
|
||||
|
||||
- node版本 >= 20.0.0
|
||||
- golang版本 >= 1.23
|
||||
- mysql版本 >= 5.7,引擎需要是 innoDB 或 postgresql版本 >=14
|
||||
- mysql版本 >= 5.7,引擎需要是 innoDB
|
||||
- IDE推荐:Goland
|
||||
|
||||
@@ -9,8 +9,8 @@
|
||||
|
||||
- node版本 >= v20.0.0
|
||||
- golang版本 >= v1.23
|
||||
- goframe版本 >=v2.9.4
|
||||
- mysql版本 >=5.7 或 postgresql版本 >=14
|
||||
- goframe版本 >=v2.7.0
|
||||
- mysql版本 >=5.7
|
||||
|
||||
> 必须先看[环境搭建文档](start-environment.md),如果安装遇到问题务必先查看[常见问题文档](start-issue.md)
|
||||
|
||||
|
||||
@@ -12,19 +12,6 @@
|
||||
> 如果升级(覆盖)代码后打开会出现 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
|
||||
|
||||
|
||||
@@ -108,7 +108,6 @@ 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" # 指定当前数据库中需要排除代码生成的数据表。
|
||||
@@ -268,7 +267,6 @@ 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_"
|
||||
@@ -298,7 +296,6 @@ 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:
|
||||
@@ -353,7 +350,7 @@ hggen:
|
||||
|
||||
### 指定数据库驱动
|
||||
|
||||
> HotGo默认使用mysql驱动,如果你想用其他数据库驱动打开下方文件中注释即可,目前已支持mysql、pgsql
|
||||
> HotGo默认使用mysql驱动,如果你想用其他数据库驱动打开下方文件中注释即可
|
||||
|
||||
修改文件路径:server/internal/library/hggen/internal/cmd/cmd_gen_dao.go
|
||||
```go
|
||||
@@ -364,7 +361,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"
|
||||
|
||||
@@ -1,73 +0,0 @@
|
||||
## 国际化
|
||||
|
||||
|
||||
目录
|
||||
|
||||
- 介绍
|
||||
- 配置文件
|
||||
- 服务端使用
|
||||
- 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)
|
||||
45
server/addons/flashbanner/README.MD
Normal file
45
server/addons/flashbanner/README.MD
Normal file
@@ -0,0 +1,45 @@
|
||||
## 轮播图管理
|
||||
|
||||
### 简介
|
||||
|
||||
|
||||
|
||||
|
||||
### 使用说明
|
||||
|
||||
|
||||
|
||||
|
||||
### 迁移或安装
|
||||
|
||||
1、安装 HotGo (2.17.8及以上)
|
||||
|
||||
项目介绍:https://github.com/bufanyun/hotgo
|
||||
|
||||
2、将当前插件项目拷贝进 HotGo 根目录的 server/addons 目录下
|
||||
|
||||
3、在 HotGo 根目录的 server/addons/modules 目录下创建go文件:flashbanner.go,内容如下:
|
||||
```go
|
||||
package modules
|
||||
|
||||
import _ "hotgo/addons/flashbanner"
|
||||
```
|
||||
|
||||
4、HotGo 后台进入 开发工具->插件管理->找到 轮播图管理 (flashbanner) 进行安装
|
||||
|
||||
5、重启服务即可生效
|
||||
|
||||
|
||||
### 常用命令行
|
||||
|
||||
```shell
|
||||
# 接口维护-gen service
|
||||
gf gen service -s=addons/flashbanner/logic -d=addons/flashbanner/service
|
||||
|
||||
```
|
||||
|
||||
### `gf gen dao` 之后迁移model文件
|
||||
```
|
||||
cp .\internal\dao\internal\banner* .\addons\flashbanner\dao\internal\
|
||||
cp .\internal\model\entity\banner* .\addons\flashbanner\model\entity\
|
||||
```
|
||||
65
server/addons/flashbanner/api/admin/banner/banner.go
Normal file
65
server/addons/flashbanner/api/admin/banner/banner.go
Normal file
@@ -0,0 +1,65 @@
|
||||
// Package banner
|
||||
// @Link https://github.com/bufanyun/hotgo
|
||||
// @Copyright Copyright (c) 2024 HotGo CLI
|
||||
// @Author Ms <133814250@qq.com>
|
||||
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
|
||||
package banner
|
||||
|
||||
import (
|
||||
"github.com/gogf/gf/v2/frame/g"
|
||||
"hotgo/addons/flashbanner/model/input/sysin"
|
||||
"hotgo/internal/model/input/form"
|
||||
)
|
||||
|
||||
// CreateReq 创建轮播图
|
||||
type CreateReq struct {
|
||||
g.Meta `path:"/banner/create" method:"post" tags:"轮播图" summary:"创建轮播图"`
|
||||
sysin.BannerCreateInp
|
||||
}
|
||||
|
||||
type CreateRes struct{}
|
||||
|
||||
// ListReq 查询列表
|
||||
type ListReq struct {
|
||||
g.Meta `path:"/banner/list" method:"get" tags:"轮播图" summary:"获取轮播图列表"`
|
||||
sysin.BannerListInp
|
||||
}
|
||||
|
||||
type ListRes struct {
|
||||
List []*sysin.BannerListModel `json:"list" dc:"数据列表"`
|
||||
form.PageRes
|
||||
}
|
||||
|
||||
// ViewReq 获取指定信息
|
||||
type ViewReq struct {
|
||||
g.Meta `path:"/banner/view" method:"get" tags:"轮播图" summary:"获取指定轮播图信息"`
|
||||
sysin.BannerViewInp
|
||||
}
|
||||
|
||||
type ViewRes struct {
|
||||
*sysin.BannerViewModel
|
||||
}
|
||||
|
||||
// EditReq 修改/新增轮播图
|
||||
type EditReq struct {
|
||||
g.Meta `path:"/banner/edit" method:"post" tags:"轮播图" summary:"修改/新增轮播图"`
|
||||
sysin.BannerEditInp
|
||||
}
|
||||
|
||||
type EditRes struct{}
|
||||
|
||||
// DeleteReq 删除轮播图
|
||||
type DeleteReq struct {
|
||||
g.Meta `path:"/banner/delete" method:"post" tags:"轮播图" summary:"删除轮播图"`
|
||||
sysin.BannerDeleteInp
|
||||
}
|
||||
|
||||
type DeleteRes struct{}
|
||||
|
||||
// StatusReq 更新轮播图状态
|
||||
type StatusReq struct {
|
||||
g.Meta `path:"/banner/status" method:"post" tags:"轮播图" summary:"更新轮播图状态"`
|
||||
sysin.BannerStatusInp
|
||||
}
|
||||
|
||||
type StatusRes struct{}
|
||||
30
server/addons/flashbanner/api/admin/config/config.go
Normal file
30
server/addons/flashbanner/api/admin/config/config.go
Normal file
@@ -0,0 +1,30 @@
|
||||
// Package config
|
||||
// @Link https://github.com/bufanyun/hotgo
|
||||
// @Copyright Copyright (c) 2024 HotGo CLI
|
||||
// @Author Ms <133814250@qq.com>
|
||||
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
|
||||
package config
|
||||
|
||||
import (
|
||||
"github.com/gogf/gf/v2/frame/g"
|
||||
"hotgo/addons/flashbanner/model/input/sysin"
|
||||
)
|
||||
|
||||
// GetReq 获取指定分组的配置
|
||||
type GetReq struct {
|
||||
g.Meta `path:"/config/get" method:"get" tags:"轮播图管理" summary:"获取指定分组的配置"`
|
||||
sysin.GetConfigInp
|
||||
}
|
||||
|
||||
type GetRes struct {
|
||||
*sysin.GetConfigModel
|
||||
}
|
||||
|
||||
// UpdateReq 获取指定分组的配置
|
||||
type UpdateReq struct {
|
||||
g.Meta `path:"/config/update" method:"post" tags:"轮播图管理" summary:"获取指定分组的配置"`
|
||||
sysin.UpdateConfigInp
|
||||
}
|
||||
|
||||
type UpdateRes struct {
|
||||
}
|
||||
33
server/addons/flashbanner/api/admin/index/banner/banner.go
Normal file
33
server/addons/flashbanner/api/admin/index/banner/banner.go
Normal file
@@ -0,0 +1,33 @@
|
||||
// Package banner
|
||||
// @Link https://github.com/bufanyun/hotgo
|
||||
// @Copyright Copyright (c) 2024 HotGo CLI
|
||||
// @Author Ms <133814250@qq.com>
|
||||
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
|
||||
package banner
|
||||
|
||||
import (
|
||||
"github.com/gogf/gf/v2/frame/g"
|
||||
"hotgo/addons/flashbanner/model/input/sysin"
|
||||
"hotgo/internal/model/input/form"
|
||||
)
|
||||
|
||||
// ListReq 查询列表
|
||||
type ListReq struct {
|
||||
g.Meta `path:"/banner/list" method:"get" tags:"轮播图" summary:"获取轮播图列表"`
|
||||
sysin.BannerListInp
|
||||
}
|
||||
|
||||
type ListRes struct {
|
||||
List []*sysin.BannerListModel `json:"list" dc:"数据列表"`
|
||||
form.PageRes
|
||||
}
|
||||
|
||||
// ViewReq 获取指定信息
|
||||
type ViewReq struct {
|
||||
g.Meta `path:"/banner/view" method:"get" tags:"轮播图" summary:"获取指定轮播图信息"`
|
||||
sysin.BannerViewInp
|
||||
}
|
||||
|
||||
type ViewRes struct {
|
||||
*sysin.BannerViewModel
|
||||
}
|
||||
23
server/addons/flashbanner/api/admin/index/index.go
Normal file
23
server/addons/flashbanner/api/admin/index/index.go
Normal file
@@ -0,0 +1,23 @@
|
||||
// Package index
|
||||
// @Link https://github.com/bufanyun/hotgo
|
||||
// @Copyright Copyright (c) 2024 HotGo CLI
|
||||
// @Author Ms <133814250@qq.com>
|
||||
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
|
||||
package index
|
||||
|
||||
import (
|
||||
"github.com/gogf/gf/v2/frame/g"
|
||||
"hotgo/addons/flashbanner/model/input/sysin"
|
||||
)
|
||||
|
||||
// TestReq 测试
|
||||
type TestReq struct {
|
||||
g.Meta `path:"/index/test" method:"get" tags:"轮播图管理" summary:"测试后台API"`
|
||||
sysin.IndexTestInp
|
||||
}
|
||||
|
||||
type TestRes struct {
|
||||
*sysin.IndexTestModel
|
||||
}
|
||||
|
||||
|
||||
21
server/addons/flashbanner/api/api/index/index.go
Normal file
21
server/addons/flashbanner/api/api/index/index.go
Normal file
@@ -0,0 +1,21 @@
|
||||
// Package index
|
||||
// @Link https://github.com/bufanyun/hotgo
|
||||
// @Copyright Copyright (c) 2024 HotGo CLI
|
||||
// @Author Ms <133814250@qq.com>
|
||||
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
|
||||
package index
|
||||
|
||||
import (
|
||||
"github.com/gogf/gf/v2/frame/g"
|
||||
"hotgo/addons/flashbanner/model/input/sysin"
|
||||
)
|
||||
|
||||
// TestReq 测试
|
||||
type TestReq struct {
|
||||
g.Meta `path:"/index/test" method:"get" tags:"轮播图管理" summary:"测试前台API"`
|
||||
sysin.IndexTestInp
|
||||
}
|
||||
|
||||
type TestRes struct {
|
||||
*sysin.IndexTestModel
|
||||
}
|
||||
21
server/addons/flashbanner/api/home/index/index.go
Normal file
21
server/addons/flashbanner/api/home/index/index.go
Normal file
@@ -0,0 +1,21 @@
|
||||
// Package index
|
||||
// @Link https://github.com/bufanyun/hotgo
|
||||
// @Copyright Copyright (c) 2024 HotGo CLI
|
||||
// @Author Ms <133814250@qq.com>
|
||||
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
|
||||
package index
|
||||
|
||||
import (
|
||||
"github.com/gogf/gf/v2/frame/g"
|
||||
"hotgo/addons/flashbanner/model/input/sysin"
|
||||
)
|
||||
|
||||
// TestReq 测试
|
||||
type TestReq struct {
|
||||
g.Meta `path:"/index/test" method:"get" summary:"轮播图管理" tags:"测试首页"`
|
||||
sysin.IndexTestInp
|
||||
}
|
||||
|
||||
type TestRes struct {
|
||||
g.Meta `mime:"text/html" type:"string" example:"<html/>"`
|
||||
}
|
||||
21
server/addons/flashbanner/api/websocket/index/index.go
Normal file
21
server/addons/flashbanner/api/websocket/index/index.go
Normal file
@@ -0,0 +1,21 @@
|
||||
// Package index
|
||||
// @Link https://github.com/bufanyun/hotgo
|
||||
// @Copyright Copyright (c) 2024 HotGo CLI
|
||||
// @Author Ms <133814250@qq.com>
|
||||
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
|
||||
package index
|
||||
|
||||
import (
|
||||
"github.com/gogf/gf/v2/frame/g"
|
||||
"hotgo/addons/flashbanner/model/input/sysin"
|
||||
)
|
||||
|
||||
// TestReq 测试
|
||||
type TestReq struct {
|
||||
g.Meta `path:"/index/test" method:"get" tags:"轮播图管理" summary:"测试websocket"`
|
||||
sysin.IndexTestInp
|
||||
}
|
||||
|
||||
type TestRes struct {
|
||||
*sysin.IndexTestModel
|
||||
}
|
||||
9
server/addons/flashbanner/consts/consts.go
Normal file
9
server/addons/flashbanner/consts/consts.go
Normal file
@@ -0,0 +1,9 @@
|
||||
// Package consts
|
||||
// @Link https://github.com/bufanyun/hotgo
|
||||
// @Copyright Copyright (c) 2024 HotGo CLI
|
||||
// @Author Ms <133814250@qq.com>
|
||||
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
|
||||
package consts
|
||||
|
||||
// 常量枚举.
|
||||
// 插件中的常量枚举可以统一在这目录下
|
||||
81
server/addons/flashbanner/controller/admin/banner/banner.go
Normal file
81
server/addons/flashbanner/controller/admin/banner/banner.go
Normal file
@@ -0,0 +1,81 @@
|
||||
// Package banner
|
||||
// @Link https://github.com/bufanyun/hotgo
|
||||
// @Copyright Copyright (c) 2024 HotGo CLI
|
||||
// @Author Ms <133814250@qq.com>
|
||||
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
|
||||
package banner
|
||||
|
||||
import (
|
||||
"context"
|
||||
"hotgo/addons/flashbanner/api/admin/banner"
|
||||
"hotgo/addons/flashbanner/service"
|
||||
)
|
||||
|
||||
var (
|
||||
Banner = cBanner{}
|
||||
)
|
||||
|
||||
type cBanner struct{}
|
||||
|
||||
// Create 创建轮播图
|
||||
func (c *cBanner) Create(ctx context.Context, req *banner.CreateReq) (res *banner.CreateRes, err error) {
|
||||
err = service.SysBanner().Create(ctx, &req.BannerCreateInp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
res = &banner.CreateRes{}
|
||||
return res, nil
|
||||
}
|
||||
|
||||
// List 获取轮播图列表
|
||||
func (c *cBanner) List(ctx context.Context, req *banner.ListReq) (res *banner.ListRes, err error) {
|
||||
list, totalCount, err := service.SysBanner().List(ctx, &req.BannerListInp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
res = &banner.ListRes{
|
||||
List: list,
|
||||
}
|
||||
res.PageRes.Pack(&req.BannerListInp, totalCount)
|
||||
return res, nil
|
||||
}
|
||||
|
||||
// View 获取指定轮播图信息
|
||||
func (c *cBanner) View(ctx context.Context, req *banner.ViewReq) (res *banner.ViewRes, err error) {
|
||||
model, err := service.SysBanner().View(ctx, &req.BannerViewInp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
res = &banner.ViewRes{model}
|
||||
return res, nil
|
||||
}
|
||||
|
||||
// Edit 修改/新增轮播图
|
||||
func (c *cBanner) Edit(ctx context.Context, req *banner.EditReq) (res *banner.EditRes, err error) {
|
||||
err = service.SysBanner().Edit(ctx, &req.BannerEditInp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
res = &banner.EditRes{}
|
||||
return res, nil
|
||||
}
|
||||
|
||||
// Delete 删除轮播图
|
||||
func (c *cBanner) Delete(ctx context.Context, req *banner.DeleteReq) (res *banner.DeleteRes, err error) {
|
||||
err = service.SysBanner().Delete(ctx, &req.BannerDeleteInp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
res = &banner.DeleteRes{}
|
||||
return res, nil
|
||||
}
|
||||
|
||||
// Status 更新轮播图状态
|
||||
func (c *cBanner) Status(ctx context.Context, req *banner.StatusReq) (res *banner.StatusRes, err error) {
|
||||
err = service.SysBanner().Status(ctx, &req.BannerStatusInp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
res = &banner.StatusRes{}
|
||||
return res, nil
|
||||
}
|
||||
14
server/addons/flashbanner/controller/admin/sys/banner.go
Normal file
14
server/addons/flashbanner/controller/admin/sys/banner.go
Normal file
@@ -0,0 +1,14 @@
|
||||
// Package sys
|
||||
// @Link https://github.com/bufanyun/hotgo
|
||||
// @Copyright Copyright (c) 2024 HotGo CLI
|
||||
// @Author Ms <133814250@qq.com>
|
||||
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
|
||||
package sys
|
||||
|
||||
import (
|
||||
"hotgo/addons/flashbanner/controller/admin/banner"
|
||||
)
|
||||
|
||||
var (
|
||||
Banner = banner.Banner
|
||||
)
|
||||
33
server/addons/flashbanner/controller/admin/sys/config.go
Normal file
33
server/addons/flashbanner/controller/admin/sys/config.go
Normal file
@@ -0,0 +1,33 @@
|
||||
// Package sys
|
||||
// @Link https://github.com/bufanyun/hotgo
|
||||
// @Copyright Copyright (c) 2024 HotGo CLI
|
||||
// @Author Ms <133814250@qq.com>
|
||||
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
|
||||
package sys
|
||||
|
||||
import (
|
||||
"context"
|
||||
"hotgo/addons/flashbanner/api/admin/config"
|
||||
"hotgo/addons/flashbanner/service"
|
||||
)
|
||||
|
||||
var (
|
||||
Config = cConfig{}
|
||||
)
|
||||
|
||||
type cConfig struct{}
|
||||
|
||||
// GetConfig 获取指定分组的配置
|
||||
func (c *cConfig) GetConfig(ctx context.Context, req *config.GetReq) (res *config.GetRes, err error) {
|
||||
data, err := service.SysConfig().GetConfigByGroup(ctx, &req.GetConfigInp)
|
||||
|
||||
res = new(config.GetRes)
|
||||
res.GetConfigModel = data
|
||||
return
|
||||
}
|
||||
|
||||
// UpdateConfig 更新指定分组的配置
|
||||
func (c *cConfig) UpdateConfig(ctx context.Context, req *config.UpdateReq) (res *config.UpdateRes, err error) {
|
||||
err = service.SysConfig().UpdateConfigByGroup(ctx, &req.UpdateConfigInp)
|
||||
return
|
||||
}
|
||||
30
server/addons/flashbanner/controller/admin/sys/index.go
Normal file
30
server/addons/flashbanner/controller/admin/sys/index.go
Normal file
@@ -0,0 +1,30 @@
|
||||
// Package sys
|
||||
// @Link https://github.com/bufanyun/hotgo
|
||||
// @Copyright Copyright (c) 2024 HotGo CLI
|
||||
// @Author Ms <133814250@qq.com>
|
||||
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
|
||||
package sys
|
||||
|
||||
import (
|
||||
"context"
|
||||
"hotgo/addons/flashbanner/api/admin/index"
|
||||
"hotgo/addons/flashbanner/service"
|
||||
)
|
||||
|
||||
var (
|
||||
Index = cIndex{}
|
||||
)
|
||||
|
||||
type cIndex struct{}
|
||||
|
||||
// Test 测试
|
||||
func (c *cIndex) Test(ctx context.Context, req *index.TestReq) (res *index.TestRes, err error) {
|
||||
data, err := service.SysIndex().Test(ctx, &req.IndexTestInp)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
res = new(index.TestRes)
|
||||
res.IndexTestModel = data
|
||||
return
|
||||
}
|
||||
41
server/addons/flashbanner/controller/api/banner/banner.go
Normal file
41
server/addons/flashbanner/controller/api/banner/banner.go
Normal file
@@ -0,0 +1,41 @@
|
||||
// Package banner
|
||||
// @Link https://github.com/bufanyun/hotgo
|
||||
// @Copyright Copyright (c) 2024 HotGo CLI
|
||||
// @Author Ms <133814250@qq.com>
|
||||
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
|
||||
package banner
|
||||
|
||||
import (
|
||||
"context"
|
||||
"hotgo/addons/flashbanner/api/admin/banner"
|
||||
"hotgo/addons/flashbanner/service"
|
||||
)
|
||||
|
||||
var (
|
||||
BannerIndex = cBanner{}
|
||||
)
|
||||
|
||||
type cBanner struct{}
|
||||
|
||||
// List 获取轮播图列表
|
||||
func (c *cBanner) List(ctx context.Context, req *banner.ListReq) (res *banner.ListRes, err error) {
|
||||
list, totalCount, err := service.SysBanner().List(ctx, &req.BannerListInp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
res = &banner.ListRes{
|
||||
List: list,
|
||||
}
|
||||
res.PageRes.Pack(&req.BannerListInp, totalCount)
|
||||
return res, nil
|
||||
}
|
||||
|
||||
// View 获取指定轮播图信息
|
||||
func (c *cBanner) View(ctx context.Context, req *banner.ViewReq) (res *banner.ViewRes, err error) {
|
||||
model, err := service.SysBanner().View(ctx, &req.BannerViewInp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
res = &banner.ViewRes{model}
|
||||
return res, nil
|
||||
}
|
||||
31
server/addons/flashbanner/controller/api/index.go
Normal file
31
server/addons/flashbanner/controller/api/index.go
Normal file
@@ -0,0 +1,31 @@
|
||||
// Package api
|
||||
// @Link https://github.com/bufanyun/hotgo
|
||||
// @Copyright Copyright (c) 2024 HotGo CLI
|
||||
// @Author Ms <133814250@qq.com>
|
||||
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
|
||||
package api
|
||||
|
||||
import (
|
||||
"context"
|
||||
"hotgo/addons/flashbanner/api/api/index"
|
||||
"hotgo/addons/flashbanner/service"
|
||||
)
|
||||
|
||||
var (
|
||||
Index = cIndex{}
|
||||
)
|
||||
|
||||
type cIndex struct{}
|
||||
|
||||
// Test 测试
|
||||
func (c *cIndex) Test(ctx context.Context, req *index.TestReq) (res *index.TestRes, err error) {
|
||||
data, err := service.SysIndex().Test(ctx, &req.IndexTestInp)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
res = new(index.TestRes)
|
||||
res.IndexTestModel = data
|
||||
return
|
||||
}
|
||||
|
||||
34
server/addons/flashbanner/controller/home/index.go
Normal file
34
server/addons/flashbanner/controller/home/index.go
Normal file
@@ -0,0 +1,34 @@
|
||||
// Package home
|
||||
// @Link https://github.com/bufanyun/hotgo
|
||||
// @Copyright Copyright (c) 2024 HotGo CLI
|
||||
// @Author Ms <133814250@qq.com>
|
||||
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
|
||||
package home
|
||||
|
||||
import (
|
||||
"context"
|
||||
"github.com/gogf/gf/v2/frame/g"
|
||||
"hotgo/addons/flashbanner/api/home/index"
|
||||
"hotgo/addons/flashbanner/service"
|
||||
"hotgo/internal/model"
|
||||
isc "hotgo/internal/service"
|
||||
)
|
||||
|
||||
// Index 基础
|
||||
var Index = cIndex{}
|
||||
|
||||
type cIndex struct{}
|
||||
|
||||
func (a *cIndex) Index(ctx context.Context, req *index.TestReq) (res *index.TestRes, err error) {
|
||||
data, err := service.SysIndex().Test(ctx, &req.IndexTestInp)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
isc.View().RenderTpl(ctx, "home/index.html", model.View{Data: g.Map{
|
||||
"name": data.Name,
|
||||
"module": data.Module,
|
||||
"time": data.Time,
|
||||
}})
|
||||
return
|
||||
}
|
||||
30
server/addons/flashbanner/controller/websocket/index.go
Normal file
30
server/addons/flashbanner/controller/websocket/index.go
Normal file
@@ -0,0 +1,30 @@
|
||||
// Package websocket
|
||||
// @Link https://github.com/bufanyun/hotgo
|
||||
// @Copyright Copyright (c) 2024 HotGo CLI
|
||||
// @Author Ms <133814250@qq.com>
|
||||
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
|
||||
package websocket
|
||||
|
||||
import (
|
||||
"context"
|
||||
"hotgo/addons/flashbanner/api/websocket/index"
|
||||
"hotgo/addons/flashbanner/service"
|
||||
)
|
||||
|
||||
var (
|
||||
Index = cIndex{}
|
||||
)
|
||||
|
||||
type cIndex struct{}
|
||||
|
||||
// Test 测试
|
||||
func (c *cIndex) Test(ctx context.Context, req *index.TestReq) (res *index.TestRes, err error) {
|
||||
data, err := service.SysIndex().Test(ctx, &req.IndexTestInp)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
res = new(index.TestRes)
|
||||
res.IndexTestModel = data
|
||||
return
|
||||
}
|
||||
9
server/addons/flashbanner/crons/crons.go
Normal file
9
server/addons/flashbanner/crons/crons.go
Normal file
@@ -0,0 +1,9 @@
|
||||
// Package crons
|
||||
// @Link https://github.com/bufanyun/hotgo
|
||||
// @Copyright Copyright (c) 2024 HotGo CLI
|
||||
// @Author Ms <133814250@qq.com>
|
||||
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
|
||||
package crons
|
||||
|
||||
// 定时任务.
|
||||
// 插件中的定时任务可以统一在这里注册和处理
|
||||
12
server/addons/flashbanner/dao/banner.go
Normal file
12
server/addons/flashbanner/dao/banner.go
Normal file
@@ -0,0 +1,12 @@
|
||||
// Package dao
|
||||
// @Link https://github.com/bufanyun/hotgo
|
||||
// @Copyright Copyright (c) 2024 HotGo CLI
|
||||
// @Author Ms <133814250@qq.com>
|
||||
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
|
||||
package dao
|
||||
|
||||
import "hotgo/addons/flashbanner/dao/internal"
|
||||
|
||||
var (
|
||||
Banner = internal.NewBannerDao()
|
||||
)
|
||||
89
server/addons/flashbanner/dao/internal/banner.go
Normal file
89
server/addons/flashbanner/dao/internal/banner.go
Normal file
@@ -0,0 +1,89 @@
|
||||
// ==========================================================================
|
||||
// Code generated and maintained by GoFrame CLI tool. DO NOT EDIT.
|
||||
// ==========================================================================
|
||||
|
||||
package internal
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/gogf/gf/v2/database/gdb"
|
||||
"github.com/gogf/gf/v2/frame/g"
|
||||
)
|
||||
|
||||
// BannerDao is the data access object for table hg_banner.
|
||||
type BannerDao struct {
|
||||
table string // table is the underlying table name of the DAO.
|
||||
group string // group is the database configuration group name of current DAO.
|
||||
columns BannerColumns // columns contains all the column names of Table for convenient usage.
|
||||
}
|
||||
|
||||
// BannerColumns defines and stores column names for table hg_banner.
|
||||
type BannerColumns struct {
|
||||
Id string //
|
||||
Name string // 轮播图名称
|
||||
Cover string // 图片URL
|
||||
Link string // 跳转链接,小程序内用相对地址
|
||||
Type string // 类型默认不传
|
||||
Status string // 1可用
|
||||
Sort string // 排序,数字越大越靠前
|
||||
CreatedAt string //
|
||||
UpdatedAt string //
|
||||
}
|
||||
|
||||
// bannerColumns holds the columns for table hg_banner.
|
||||
var bannerColumns = BannerColumns{
|
||||
Id: "id",
|
||||
Name: "name",
|
||||
Cover: "cover",
|
||||
Link: "link",
|
||||
Type: "type",
|
||||
Status: "status",
|
||||
Sort: "sort",
|
||||
CreatedAt: "created_at",
|
||||
UpdatedAt: "updated_at",
|
||||
}
|
||||
|
||||
// NewBannerDao creates and returns a new DAO object for table data access.
|
||||
func NewBannerDao() *BannerDao {
|
||||
return &BannerDao{
|
||||
group: "default",
|
||||
table: "hg_banner",
|
||||
columns: bannerColumns,
|
||||
}
|
||||
}
|
||||
|
||||
// DB retrieves and returns the underlying raw database management object of current DAO.
|
||||
func (dao *BannerDao) DB() gdb.DB {
|
||||
return g.DB(dao.group)
|
||||
}
|
||||
|
||||
// Table returns the table name of current dao.
|
||||
func (dao *BannerDao) Table() string {
|
||||
return dao.table
|
||||
}
|
||||
|
||||
// Columns returns all column names of current dao.
|
||||
func (dao *BannerDao) Columns() BannerColumns {
|
||||
return dao.columns
|
||||
}
|
||||
|
||||
// Group returns the configuration group name of database of current dao.
|
||||
func (dao *BannerDao) Group() string {
|
||||
return dao.group
|
||||
}
|
||||
|
||||
// Ctx creates and returns the Model for current DAO, It automatically sets the context for current operation.
|
||||
func (dao *BannerDao) Ctx(ctx context.Context) *gdb.Model {
|
||||
return dao.DB().Model(dao.table).Safe().Ctx(ctx)
|
||||
}
|
||||
|
||||
// Transaction wraps the transaction logic using function f.
|
||||
// It rollbacks the transaction and returns the error from function f if it returns non-nil error.
|
||||
// It commits the transaction and returns nil if function f returns nil.
|
||||
//
|
||||
// Note that, you should not Commit or Rollback the transaction in function f
|
||||
// as it is automatically handled by this function.
|
||||
func (dao *BannerDao) Transaction(ctx context.Context, f func(ctx context.Context, tx gdb.TX) error) (err error) {
|
||||
return dao.Ctx(ctx).Transaction(ctx, f)
|
||||
}
|
||||
12
server/addons/flashbanner/global/global.go
Normal file
12
server/addons/flashbanner/global/global.go
Normal file
@@ -0,0 +1,12 @@
|
||||
// Package global
|
||||
// @Link https://github.com/bufanyun/hotgo
|
||||
// @Copyright Copyright (c) 2024 HotGo CLI
|
||||
// @Author Ms <133814250@qq.com>
|
||||
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
|
||||
package global
|
||||
|
||||
import "hotgo/internal/library/addons"
|
||||
|
||||
var (
|
||||
skeleton *addons.Skeleton // 插件架子
|
||||
)
|
||||
22
server/addons/flashbanner/global/init.go
Normal file
22
server/addons/flashbanner/global/init.go
Normal file
@@ -0,0 +1,22 @@
|
||||
// Package global
|
||||
// @Link https://github.com/bufanyun/hotgo
|
||||
// @Copyright Copyright (c) 2024 HotGo CLI
|
||||
// @Author Ms <133814250@qq.com>
|
||||
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
|
||||
package global
|
||||
|
||||
import (
|
||||
"context"
|
||||
"hotgo/internal/library/addons"
|
||||
)
|
||||
|
||||
func Init(ctx context.Context, sk *addons.Skeleton) {
|
||||
skeleton = sk
|
||||
}
|
||||
|
||||
func GetSkeleton() *addons.Skeleton {
|
||||
if skeleton == nil {
|
||||
panic("addon skeleton not initialized.")
|
||||
}
|
||||
return skeleton
|
||||
}
|
||||
0
server/addons/flashbanner/logic/.gitkeep
Normal file
0
server/addons/flashbanner/logic/.gitkeep
Normal file
9
server/addons/flashbanner/logic/logic.go
Normal file
9
server/addons/flashbanner/logic/logic.go
Normal file
@@ -0,0 +1,9 @@
|
||||
// ==========================================================================
|
||||
// Code generated by GoFrame CLI tool. DO NOT EDIT.
|
||||
// ==========================================================================
|
||||
|
||||
package logic
|
||||
|
||||
import (
|
||||
_ "hotgo/addons/flashbanner/logic/sys"
|
||||
)
|
||||
173
server/addons/flashbanner/logic/sys/banner.go
Normal file
173
server/addons/flashbanner/logic/sys/banner.go
Normal file
@@ -0,0 +1,173 @@
|
||||
// Package sys
|
||||
// @Link https://github.com/bufanyun/hotgo
|
||||
// @Copyright Copyright (c) 2024 HotGo CLI
|
||||
// @Author Ms <133814250@qq.com>
|
||||
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
|
||||
package sys
|
||||
|
||||
import (
|
||||
"context"
|
||||
"hotgo/addons/flashbanner/dao"
|
||||
"hotgo/addons/flashbanner/model/entity"
|
||||
"hotgo/addons/flashbanner/model/input/sysin"
|
||||
"hotgo/addons/flashbanner/service"
|
||||
"github.com/gogf/gf/v2/errors/gerror"
|
||||
"github.com/gogf/gf/v2/frame/g"
|
||||
"github.com/gogf/gf/v2/os/gtime"
|
||||
)
|
||||
|
||||
type sSysBanner struct{}
|
||||
|
||||
func NewSysBanner() *sSysBanner {
|
||||
return &sSysBanner{}
|
||||
}
|
||||
|
||||
func init() {
|
||||
service.RegisterSysBanner(NewSysBanner())
|
||||
}
|
||||
|
||||
// GetMaxSort 获取最大排序值
|
||||
func (s *sSysBanner) GetMaxSort(ctx context.Context) (maxSort int, err error) {
|
||||
var result struct {
|
||||
MaxSort int `json:"maxSort"`
|
||||
}
|
||||
err = dao.Banner.Ctx(ctx).Fields("MAX(sort) as maxSort").Scan(&result)
|
||||
if err != nil {
|
||||
return 0, gerror.Wrap(err, "获取最大排序值失败")
|
||||
}
|
||||
return result.MaxSort, nil
|
||||
}
|
||||
|
||||
// Create 创建轮播图
|
||||
func (s *sSysBanner) Create(ctx context.Context, in *sysin.BannerCreateInp) (err error) {
|
||||
// 如果没有设置排序值,自动设置为最大值+1
|
||||
if in.Sort == 0 {
|
||||
maxSort, err := s.GetMaxSort(ctx)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
in.Sort = maxSort + 1
|
||||
}
|
||||
|
||||
_, err = dao.Banner.Ctx(ctx).Data(g.Map{
|
||||
dao.Banner.Columns().Name: in.Name,
|
||||
dao.Banner.Columns().Cover: in.Cover,
|
||||
dao.Banner.Columns().Link: in.Link,
|
||||
dao.Banner.Columns().Type: in.Type,
|
||||
dao.Banner.Columns().Status: 1, // 默认启用
|
||||
dao.Banner.Columns().Sort: in.Sort,
|
||||
dao.Banner.Columns().CreatedAt: gtime.Now(),
|
||||
dao.Banner.Columns().UpdatedAt: gtime.Now(),
|
||||
}).Insert()
|
||||
if err != nil {
|
||||
err = gerror.Wrap(err, "创建轮播图失败")
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// Edit 修改/新增轮播图
|
||||
func (s *sSysBanner) Edit(ctx context.Context, in *sysin.BannerEditInp) (err error) {
|
||||
if in.Id > 0 {
|
||||
// 修改
|
||||
_, err = dao.Banner.Ctx(ctx).Where(dao.Banner.Columns().Id, in.Id).Data(g.Map{
|
||||
dao.Banner.Columns().Name: in.Name,
|
||||
dao.Banner.Columns().Cover: in.Cover,
|
||||
dao.Banner.Columns().Link: in.Link,
|
||||
dao.Banner.Columns().Type: in.Type,
|
||||
dao.Banner.Columns().Status: in.Status,
|
||||
dao.Banner.Columns().Sort: in.Sort,
|
||||
dao.Banner.Columns().UpdatedAt: gtime.Now(),
|
||||
}).Update()
|
||||
if err != nil {
|
||||
err = gerror.Wrap(err, "修改轮播图失败")
|
||||
return
|
||||
}
|
||||
} else {
|
||||
// 新增
|
||||
_, err = dao.Banner.Ctx(ctx).Data(g.Map{
|
||||
dao.Banner.Columns().Name: in.Name,
|
||||
dao.Banner.Columns().Cover: in.Cover,
|
||||
dao.Banner.Columns().Link: in.Link,
|
||||
dao.Banner.Columns().Type: in.Type,
|
||||
dao.Banner.Columns().Status: in.Status,
|
||||
dao.Banner.Columns().Sort: in.Sort,
|
||||
dao.Banner.Columns().CreatedAt: gtime.Now(),
|
||||
dao.Banner.Columns().UpdatedAt: gtime.Now(),
|
||||
}).Insert()
|
||||
if err != nil {
|
||||
err = gerror.Wrap(err, "新增轮播图失败")
|
||||
return
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// Delete 删除轮播图
|
||||
func (s *sSysBanner) Delete(ctx context.Context, in *sysin.BannerDeleteInp) (err error) {
|
||||
_, err = dao.Banner.Ctx(ctx).Where(dao.Banner.Columns().Id, in.Id).Delete()
|
||||
if err != nil {
|
||||
err = gerror.Wrap(err, "删除轮播图失败")
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// View 获取指定轮播图信息
|
||||
func (s *sSysBanner) View(ctx context.Context, in *sysin.BannerViewInp) (res *sysin.BannerViewModel, err error) {
|
||||
var banner entity.Banner
|
||||
err = dao.Banner.Ctx(ctx).Where(dao.Banner.Columns().Id, in.Id).Scan(&banner)
|
||||
if err != nil {
|
||||
err = gerror.Wrap(err, "获取轮播图信息失败")
|
||||
return
|
||||
}
|
||||
if banner.Id == 0 {
|
||||
err = gerror.New("轮播图不存在")
|
||||
return
|
||||
}
|
||||
res = &sysin.BannerViewModel{Banner: banner}
|
||||
return
|
||||
}
|
||||
|
||||
// List 获取轮播图列表
|
||||
func (s *sSysBanner) List(ctx context.Context, in *sysin.BannerListInp) (list []*sysin.BannerListModel, totalCount int, err error) {
|
||||
m := dao.Banner.Ctx(ctx)
|
||||
|
||||
// 条件查询
|
||||
if in.Name != "" {
|
||||
m = m.WhereLike(dao.Banner.Columns().Name, "%"+in.Name+"%")
|
||||
}
|
||||
if in.Type > 0 {
|
||||
m = m.Where(dao.Banner.Columns().Type, in.Type)
|
||||
}
|
||||
|
||||
var banners []*entity.Banner
|
||||
if in.Page > 0 && in.PerPage > 0 {
|
||||
err = m.Page(in.Page, in.PerPage).OrderDesc(dao.Banner.Columns().Sort).OrderDesc(dao.Banner.Columns().Id).ScanAndCount(&banners, &totalCount, false)
|
||||
} else {
|
||||
err = m.OrderDesc(dao.Banner.Columns().Sort).OrderDesc(dao.Banner.Columns().Id).ScanAndCount(&banners, &totalCount, false)
|
||||
}
|
||||
if err != nil {
|
||||
err = gerror.Wrap(err, "获取轮播图列表失败")
|
||||
return
|
||||
}
|
||||
|
||||
list = make([]*sysin.BannerListModel, len(banners))
|
||||
for i, banner := range banners {
|
||||
list[i] = &sysin.BannerListModel{Banner: *banner}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// Status 更新轮播图状态
|
||||
func (s *sSysBanner) Status(ctx context.Context, in *sysin.BannerStatusInp) (err error) {
|
||||
_, err = dao.Banner.Ctx(ctx).Where(dao.Banner.Columns().Id, in.Id).Data(g.Map{
|
||||
dao.Banner.Columns().Status: in.Status,
|
||||
dao.Banner.Columns().UpdatedAt: gtime.Now(),
|
||||
}).Update()
|
||||
if err != nil {
|
||||
err = gerror.Wrap(err, "更新轮播图状态失败")
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
59
server/addons/flashbanner/logic/sys/config.go
Normal file
59
server/addons/flashbanner/logic/sys/config.go
Normal file
@@ -0,0 +1,59 @@
|
||||
// Package sys
|
||||
// @Link https://github.com/bufanyun/hotgo
|
||||
// @Copyright Copyright (c) 2024 HotGo CLI
|
||||
// @Author Ms <133814250@qq.com>
|
||||
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
|
||||
package sys
|
||||
|
||||
import (
|
||||
"context"
|
||||
"github.com/gogf/gf/v2/util/gconv"
|
||||
"hotgo/addons/flashbanner/global"
|
||||
"hotgo/addons/flashbanner/model"
|
||||
"hotgo/addons/flashbanner/model/input/sysin"
|
||||
"hotgo/addons/flashbanner/service"
|
||||
isc "hotgo/internal/service"
|
||||
)
|
||||
|
||||
type sSysConfig struct{}
|
||||
|
||||
func NewSysConfig() *sSysConfig {
|
||||
return &sSysConfig{}
|
||||
}
|
||||
|
||||
func init() {
|
||||
service.RegisterSysConfig(NewSysConfig())
|
||||
}
|
||||
|
||||
// GetBasic 获取基础配置
|
||||
func (s *sSysConfig) GetBasic(ctx context.Context) (conf *model.BasicConfig, err error) {
|
||||
var in sysin.GetConfigInp
|
||||
in.GetAddonsConfigInp.AddonName = global.GetSkeleton().Name
|
||||
in.GetAddonsConfigInp.Group = "basic"
|
||||
models, err := isc.SysAddonsConfig().GetConfigByGroup(ctx, &in.GetAddonsConfigInp)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
err = gconv.Struct(models.List, &conf)
|
||||
return
|
||||
}
|
||||
|
||||
// GetConfigByGroup 获取指定分组配置
|
||||
func (s *sSysConfig) GetConfigByGroup(ctx context.Context, in *sysin.GetConfigInp) (res *sysin.GetConfigModel, err error) {
|
||||
in.GetAddonsConfigInp.AddonName = global.GetSkeleton().Name
|
||||
models, err := isc.SysAddonsConfig().GetConfigByGroup(ctx, &in.GetAddonsConfigInp)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
res = new(sysin.GetConfigModel)
|
||||
res.List = models.List
|
||||
return
|
||||
}
|
||||
|
||||
// UpdateConfigByGroup 更新指定分组的配置
|
||||
func (s *sSysConfig) UpdateConfigByGroup(ctx context.Context, in *sysin.UpdateConfigInp) error {
|
||||
in.UpdateAddonsConfigInp.AddonName = global.GetSkeleton().Name
|
||||
return isc.SysAddonsConfig().UpdateConfigByGroup(ctx, &in.UpdateAddonsConfigInp)
|
||||
}
|
||||
35
server/addons/flashbanner/logic/sys/index.go
Normal file
35
server/addons/flashbanner/logic/sys/index.go
Normal file
@@ -0,0 +1,35 @@
|
||||
// Package sys
|
||||
// @Link https://github.com/bufanyun/hotgo
|
||||
// @Copyright Copyright (c) 2024 HotGo CLI
|
||||
// @Author Ms <133814250@qq.com>
|
||||
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
|
||||
package sys
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"github.com/gogf/gf/v2/os/gtime"
|
||||
"hotgo/addons/flashbanner/global"
|
||||
"hotgo/addons/flashbanner/model/input/sysin"
|
||||
"hotgo/addons/flashbanner/service"
|
||||
"hotgo/internal/library/contexts"
|
||||
)
|
||||
|
||||
type sSysIndex struct{}
|
||||
|
||||
func NewSysIndex() *sSysIndex {
|
||||
return &sSysIndex{}
|
||||
}
|
||||
|
||||
func init() {
|
||||
service.RegisterSysIndex(NewSysIndex())
|
||||
}
|
||||
|
||||
// Test 测试
|
||||
func (s *sSysIndex) Test(ctx context.Context, in *sysin.IndexTestInp) (res *sysin.IndexTestModel, err error) {
|
||||
res = new(sysin.IndexTestModel)
|
||||
res.Name = in.Name
|
||||
res.Module = fmt.Sprintf("当前插件模块是:%s,当前应用模块是:%s", global.GetSkeleton().Name, contexts.Get(ctx).Module)
|
||||
res.Time = gtime.Now()
|
||||
return
|
||||
}
|
||||
176
server/addons/flashbanner/main.go
Normal file
176
server/addons/flashbanner/main.go
Normal file
@@ -0,0 +1,176 @@
|
||||
// Package flashbanner
|
||||
// @Link https://github.com/bufanyun/hotgo
|
||||
// @Copyright Copyright (c) 2024 HotGo CLI
|
||||
// @Author Ms <133814250@qq.com>
|
||||
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
|
||||
package flashbanner
|
||||
|
||||
import (
|
||||
"context"
|
||||
"github.com/gogf/gf/v2/net/ghttp"
|
||||
"github.com/gogf/gf/v2/os/gctx"
|
||||
_ "hotgo/addons/flashbanner/crons"
|
||||
"hotgo/addons/flashbanner/global"
|
||||
_ "hotgo/addons/flashbanner/logic"
|
||||
_ "hotgo/addons/flashbanner/queues"
|
||||
"hotgo/addons/flashbanner/router"
|
||||
"hotgo/addons/migrations"
|
||||
"hotgo/internal/library/addons"
|
||||
"hotgo/internal/service"
|
||||
"sync"
|
||||
|
||||
"github.com/gogf/gf/v2/frame/g"
|
||||
"github.com/gogf/gf/v2/os/gfile"
|
||||
|
||||
|
||||
)
|
||||
|
||||
type module struct {
|
||||
skeleton *addons.Skeleton
|
||||
ctx context.Context
|
||||
sync.Mutex
|
||||
}
|
||||
|
||||
func init() {
|
||||
newModule()
|
||||
}
|
||||
|
||||
func newModule() {
|
||||
m := &module{
|
||||
skeleton: &addons.Skeleton{
|
||||
Label: `轮播图管理`,
|
||||
Name: `flashbanner`,
|
||||
Group: 6,
|
||||
Logo: "",
|
||||
Brief: ``,
|
||||
Description: ``,
|
||||
Author: ``,
|
||||
Version: `v1.0.0`, // 当该版本号高于已安装的版本号时,会提示可以更新
|
||||
},
|
||||
ctx: gctx.New(),
|
||||
}
|
||||
addons.RegisterModule(m)
|
||||
}
|
||||
|
||||
// Start 启动模块
|
||||
func (m *module) Start(option *addons.Option) (err error) {
|
||||
// 初始化模块
|
||||
global.Init(m.ctx, m.skeleton)
|
||||
|
||||
// 注册插件路由
|
||||
option.Server.Group("/", func(group *ghttp.RouterGroup) {
|
||||
group.Middleware(service.Middleware().Addon)
|
||||
router.Admin(m.ctx, group)
|
||||
router.Api(m.ctx, group)
|
||||
router.Home(m.ctx, group)
|
||||
router.WebSocket(m.ctx, group)
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
// Stop 停止模块
|
||||
func (m *module) Stop() (err error) {
|
||||
return
|
||||
}
|
||||
|
||||
// Ctx 上下文
|
||||
func (m *module) Ctx() context.Context {
|
||||
return m.ctx
|
||||
}
|
||||
|
||||
// GetSkeleton 获取模块
|
||||
func (m *module) GetSkeleton() *addons.Skeleton {
|
||||
return m.skeleton
|
||||
}
|
||||
|
||||
// Install 安装模块
|
||||
func (m *module) Install(ctx context.Context) (err error) {
|
||||
// 执行数据库安装文件
|
||||
// 获取当前目录
|
||||
sqlPath := gfile.Pwd() + gfile.Separator + "addons/migrations/flashbanner/install.sql"
|
||||
g.Log().Debug(ctx, "安装模块", m.skeleton.Label, "路径", sqlPath)
|
||||
result, err := migrations.DoSqlContent(ctx, sqlPath)
|
||||
if err != nil {
|
||||
g.Log().Error(ctx, "安装模块", m.skeleton.Label, "失败", err)
|
||||
return
|
||||
}
|
||||
g.Log().Debug(ctx, "安装模块", m.skeleton.Label, "成功", result)
|
||||
// 复制web目录下的文件到管理后台对应位置
|
||||
// 插件的前端配置文件位于插件目录下的web子目录
|
||||
sourceWebPath := gfile.Pwd() + gfile.Separator + "addons/" + m.skeleton.Name + "/web/src/views/addons/" + m.skeleton.Name
|
||||
targetWebPath := "../web/src/views/addons/" + m.skeleton.Name
|
||||
g.Log().Debug(ctx, "复制前端配置文件", "源路径:", sourceWebPath, "目标路径:", targetWebPath)
|
||||
|
||||
// 检查源路径是否存在
|
||||
if gfile.Exists(sourceWebPath) {
|
||||
err = gfile.CopyDir(sourceWebPath, targetWebPath)
|
||||
if err != nil {
|
||||
g.Log().Error(ctx, "复制前端配置文件失败:", err)
|
||||
} else {
|
||||
g.Log().Debug(ctx, "复制前端配置文件成功")
|
||||
}
|
||||
} else {
|
||||
g.Log().Warning(ctx, "前端配置文件源路径不存在:", sourceWebPath)
|
||||
}
|
||||
|
||||
// 复制API文件
|
||||
sourceApiPath := gfile.Pwd() + gfile.Separator + "addons/" + m.skeleton.Name + "/web/src/api/addons/" + m.skeleton.Name
|
||||
targetApiPath := "../web/src/api/addons/" + m.skeleton.Name
|
||||
g.Log().Debug(ctx, "复制API文件", "源路径:", sourceApiPath, "目标路径:", targetApiPath)
|
||||
if gfile.Exists(sourceApiPath) {
|
||||
err = gfile.CopyDir(sourceApiPath, targetApiPath)
|
||||
if err != nil {
|
||||
g.Log().Error(ctx, "复制API文件失败:", err)
|
||||
} else {
|
||||
g.Log().Debug(ctx, "复制API文件成功")
|
||||
}
|
||||
} else {
|
||||
g.Log().Warning(ctx, "API文件源路径不存在:", sourceApiPath)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// Upgrade 更新模块
|
||||
func (m *module) Upgrade(ctx context.Context) (err error) {
|
||||
// ...
|
||||
return
|
||||
}
|
||||
|
||||
// UnInstall 卸载模块
|
||||
func (m *module) UnInstall(ctx context.Context) (err error) {
|
||||
// ...
|
||||
// 移除数据库安装文件
|
||||
sqlPath := gfile.Pwd() + gfile.Separator + "addons/migrations/flashbanner/uninstall.sql"
|
||||
g.Log().Debug(ctx, "卸载模块", m.skeleton.Label, "路径", sqlPath)
|
||||
result, err := migrations.DoSqlContent(ctx, sqlPath)
|
||||
if err != nil {
|
||||
g.Log().Error(ctx, "卸载模块", m.skeleton.Label, "失败", err)
|
||||
return
|
||||
}
|
||||
g.Log().Debug(ctx, "卸载模块", m.skeleton.Label, "成功", result)
|
||||
// 删除前端文件
|
||||
targetWebPath := "../web/src/views/addons/" + m.skeleton.Name
|
||||
targetApiPath := "../web/src/api/addons/" + m.skeleton.Name
|
||||
|
||||
// 删除配置页面文件
|
||||
if gfile.Exists(targetWebPath) {
|
||||
err = gfile.Remove(targetWebPath)
|
||||
if err != nil {
|
||||
g.Log().Warning(ctx, "删除前端配置文件失败:", err)
|
||||
} else {
|
||||
g.Log().Debug(ctx, "删除前端配置文件成功")
|
||||
}
|
||||
}
|
||||
|
||||
// 删除API文件
|
||||
if gfile.Exists(targetApiPath) {
|
||||
err = gfile.Remove(targetApiPath)
|
||||
if err != nil {
|
||||
g.Log().Warning(ctx, "删除API文件失败:", err)
|
||||
} else {
|
||||
g.Log().Debug(ctx, "删除API文件成功")
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
11
server/addons/flashbanner/model/config.go
Normal file
11
server/addons/flashbanner/model/config.go
Normal file
@@ -0,0 +1,11 @@
|
||||
// Package model
|
||||
// @Link https://github.com/bufanyun/hotgo
|
||||
// @Copyright Copyright (c) 2024 HotGo CLI
|
||||
// @Author Ms <133814250@qq.com>
|
||||
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
|
||||
package model
|
||||
|
||||
// BasicConfig 基础配置
|
||||
type BasicConfig struct {
|
||||
Test string `json:"basicTest"`
|
||||
}
|
||||
22
server/addons/flashbanner/model/entity/banner.go
Normal file
22
server/addons/flashbanner/model/entity/banner.go
Normal file
@@ -0,0 +1,22 @@
|
||||
// =================================================================================
|
||||
// Code generated and maintained by GoFrame CLI tool. DO NOT EDIT.
|
||||
// =================================================================================
|
||||
|
||||
package entity
|
||||
|
||||
import (
|
||||
"github.com/gogf/gf/v2/os/gtime"
|
||||
)
|
||||
|
||||
// Banner is the golang structure for table banner.
|
||||
type Banner struct {
|
||||
Id int `json:"id" orm:"id" description:""`
|
||||
Name string `json:"name" orm:"name" description:"轮播图名称"`
|
||||
Cover string `json:"cover" orm:"cover" description:"图片URL"`
|
||||
Link string `json:"link" orm:"link" description:"跳转链接,小程序内用相对地址"`
|
||||
Type int `json:"type" orm:"type" description:"类型默认不传"`
|
||||
Status uint `json:"status" orm:"status" description:"1可用"`
|
||||
Sort int `json:"sort" orm:"sort" description:"排序,数字越大越靠前"`
|
||||
CreatedAt *gtime.Time `json:"createdAt" orm:"created_at" description:""`
|
||||
UpdatedAt *gtime.Time `json:"updatedAt" orm:"updated_at" description:""`
|
||||
}
|
||||
98
server/addons/flashbanner/model/input/sysin/banner.go
Normal file
98
server/addons/flashbanner/model/input/sysin/banner.go
Normal file
@@ -0,0 +1,98 @@
|
||||
// Package sysin
|
||||
// @Link https://github.com/bufanyun/hotgo
|
||||
// @Copyright Copyright (c) 2024 HotGo CLI
|
||||
// @Author Ms <133814250@qq.com>
|
||||
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
|
||||
package sysin
|
||||
|
||||
import (
|
||||
"context"
|
||||
"hotgo/addons/flashbanner/model/entity"
|
||||
"hotgo/internal/model/input/form"
|
||||
"github.com/gogf/gf/v2/errors/gerror"
|
||||
)
|
||||
|
||||
// BannerCreateInp 创建轮播图
|
||||
type BannerCreateInp struct {
|
||||
Name string `json:"name" v:"required#轮播图名称不能为空" dc:"轮播图名称"`
|
||||
Cover string `json:"cover" v:"required#轮播图封面不能为空" dc:"轮播图封面"`
|
||||
Link string `json:"link" dc:"轮播图链接"`
|
||||
Type int `json:"type" dc:"轮播图类型"`
|
||||
Sort int `json:"sort" dc:"排序,数字越大越靠前"`
|
||||
}
|
||||
|
||||
func (in *BannerCreateInp) Filter(ctx context.Context) (err error) {
|
||||
return
|
||||
}
|
||||
|
||||
type BannerCreateModel struct{}
|
||||
|
||||
// BannerEditInp 修改/新增轮播图
|
||||
type BannerEditInp struct {
|
||||
entity.Banner
|
||||
}
|
||||
|
||||
func (in *BannerEditInp) Filter(ctx context.Context) (err error) {
|
||||
if in.Name == "" {
|
||||
err = gerror.New("轮播图名称不能为空")
|
||||
return
|
||||
}
|
||||
if in.Cover == "" {
|
||||
err = gerror.New("轮播图封面不能为空")
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
type BannerEditModel struct{}
|
||||
|
||||
// BannerDeleteInp 删除轮播图
|
||||
type BannerDeleteInp struct {
|
||||
Id interface{} `json:"id" v:"required#轮播图ID不能为空" dc:"轮播图ID"`
|
||||
}
|
||||
|
||||
func (in *BannerDeleteInp) Filter(ctx context.Context) (err error) {
|
||||
return
|
||||
}
|
||||
|
||||
type BannerDeleteModel struct{}
|
||||
|
||||
// BannerViewInp 获取指定轮播图信息
|
||||
type BannerViewInp struct {
|
||||
Id int64 `json:"id" v:"required#轮播图ID不能为空" dc:"轮播图ID"`
|
||||
}
|
||||
|
||||
func (in *BannerViewInp) Filter(ctx context.Context) (err error) {
|
||||
return
|
||||
}
|
||||
|
||||
type BannerViewModel struct {
|
||||
entity.Banner
|
||||
}
|
||||
|
||||
// BannerListInp 获取轮播图列表
|
||||
type BannerListInp struct {
|
||||
form.PageReq
|
||||
Name string `json:"name" dc:"轮播图名称"`
|
||||
Type int `json:"type" dc:"轮播图类型"`
|
||||
}
|
||||
|
||||
func (in *BannerListInp) Filter(ctx context.Context) (err error) {
|
||||
return
|
||||
}
|
||||
|
||||
type BannerListModel struct {
|
||||
entity.Banner
|
||||
}
|
||||
|
||||
// BannerStatusInp 更新轮播图状态
|
||||
type BannerStatusInp struct {
|
||||
Id int64 `json:"id" v:"required#轮播图ID不能为空" dc:"轮播图ID"`
|
||||
Status int `json:"status" v:"required#状态不能为空" dc:"状态"`
|
||||
}
|
||||
|
||||
func (in *BannerStatusInp) Filter(ctx context.Context) (err error) {
|
||||
return
|
||||
}
|
||||
|
||||
type BannerStatusModel struct{}
|
||||
24
server/addons/flashbanner/model/input/sysin/config.go
Normal file
24
server/addons/flashbanner/model/input/sysin/config.go
Normal file
@@ -0,0 +1,24 @@
|
||||
// Package sysin
|
||||
// @Link https://github.com/bufanyun/hotgo
|
||||
// @Copyright Copyright (c) 2024 HotGo CLI
|
||||
// @Author Ms <133814250@qq.com>
|
||||
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
|
||||
package sysin
|
||||
|
||||
import (
|
||||
"github.com/gogf/gf/v2/frame/g"
|
||||
"hotgo/internal/model/input/sysin"
|
||||
)
|
||||
|
||||
// UpdateConfigInp 更新指定配置
|
||||
type UpdateConfigInp struct {
|
||||
sysin.UpdateAddonsConfigInp
|
||||
}
|
||||
|
||||
type GetConfigInp struct {
|
||||
sysin.GetAddonsConfigInp
|
||||
}
|
||||
|
||||
type GetConfigModel struct {
|
||||
List g.Map `json:"list"`
|
||||
}
|
||||
27
server/addons/flashbanner/model/input/sysin/index.go
Normal file
27
server/addons/flashbanner/model/input/sysin/index.go
Normal file
@@ -0,0 +1,27 @@
|
||||
// Package sysin
|
||||
// @Link https://github.com/bufanyun/hotgo
|
||||
// @Copyright Copyright (c) 2024 HotGo CLI
|
||||
// @Author Ms <133814250@qq.com>
|
||||
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
|
||||
//
|
||||
package sysin
|
||||
|
||||
import (
|
||||
"context"
|
||||
"github.com/gogf/gf/v2/os/gtime"
|
||||
)
|
||||
|
||||
// IndexTestInp 测试
|
||||
type IndexTestInp struct {
|
||||
Name string `json:"name" d:"HotGo" dc:"名称"`
|
||||
}
|
||||
|
||||
func (in *IndexTestInp) Filter(ctx context.Context) (err error) {
|
||||
return
|
||||
}
|
||||
|
||||
type IndexTestModel struct {
|
||||
Name string `json:"name" dc:"名称"`
|
||||
Module string `json:"module" dc:"当前插件模块"`
|
||||
Time *gtime.Time `json:"time" dc:"当前时间"`
|
||||
}
|
||||
9
server/addons/flashbanner/queues/queues.go
Normal file
9
server/addons/flashbanner/queues/queues.go
Normal file
@@ -0,0 +1,9 @@
|
||||
// Package queues
|
||||
// @Link https://github.com/bufanyun/hotgo
|
||||
// @Copyright Copyright (c) 2024 HotGo CLI
|
||||
// @Author Ms <133814250@qq.com>
|
||||
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
|
||||
package queues
|
||||
|
||||
// 消息队列.
|
||||
// 插件中的消息队列消费者可以统一在这里注册和处理
|
||||
0
server/addons/flashbanner/resource/public/.gitkeep
Normal file
0
server/addons/flashbanner/resource/public/.gitkeep
Normal file
1
server/addons/flashbanner/resource/public/default
Normal file
1
server/addons/flashbanner/resource/public/default
Normal file
@@ -0,0 +1 @@
|
||||
Hello!这是创建插件 [轮播图管理] 时默认生成的一个静态目录文件,用于测试,当你看到这个提示时,说明已经联调成功啦!
|
||||
30
server/addons/flashbanner/resource/template/home/index.html
Normal file
30
server/addons/flashbanner/resource/template/home/index.html
Normal file
@@ -0,0 +1,30 @@
|
||||
<!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>
|
||||
36
server/addons/flashbanner/router/admin.go
Normal file
36
server/addons/flashbanner/router/admin.go
Normal file
@@ -0,0 +1,36 @@
|
||||
// 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)
|
||||
}
|
||||
32
server/addons/flashbanner/router/api.go
Normal file
32
server/addons/flashbanner/router/api.go
Normal file
@@ -0,0 +1,32 @@
|
||||
// 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(
|
||||
// 需要验证的路由
|
||||
// ...
|
||||
)
|
||||
})
|
||||
}
|
||||
34
server/addons/flashbanner/router/genrouter/init.go
Normal file
34
server/addons/flashbanner/router/genrouter/init.go
Normal file
@@ -0,0 +1,34 @@
|
||||
// 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...)
|
||||
}
|
||||
})
|
||||
}
|
||||
25
server/addons/flashbanner/router/home.go
Normal file
25
server/addons/flashbanner/router/home.go
Normal file
@@ -0,0 +1,25 @@
|
||||
// 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,
|
||||
)
|
||||
})
|
||||
}
|
||||
39
server/addons/flashbanner/router/websocket.go
Normal file
39
server/addons/flashbanner/router/websocket.go
Normal file
@@ -0,0 +1,39 @@
|
||||
// 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{
|
||||
// ...
|
||||
})
|
||||
}
|
||||
0
server/addons/flashbanner/service/.gitkeep
Normal file
0
server/addons/flashbanner/service/.gitkeep
Normal file
71
server/addons/flashbanner/service/sys.go
Normal file
71
server/addons/flashbanner/service/sys.go
Normal file
@@ -0,0 +1,71 @@
|
||||
// ================================================================================
|
||||
// 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
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
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,
|
||||
});
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
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,
|
||||
});
|
||||
}
|
||||
@@ -0,0 +1,106 @@
|
||||
<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>
|
||||
@@ -0,0 +1,83 @@
|
||||
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: '请上传图片',
|
||||
},
|
||||
};
|
||||
@@ -0,0 +1,74 @@
|
||||
<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>
|
||||
@@ -0,0 +1,82 @@
|
||||
<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>
|
||||
@@ -0,0 +1,151 @@
|
||||
<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>
|
||||
@@ -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()
|
||||
totalCount, err = mod.Clone().Count(1)
|
||||
if err != nil {
|
||||
err = gerror.Wrap(err, "获取表格数据行失败,请稍后重试!")
|
||||
return
|
||||
|
||||
@@ -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()
|
||||
totalCount, err = mod.Clone().Count(1)
|
||||
if err != nil {
|
||||
err = gerror.Wrap(err, "获取表格数据行失败,请稍后重试!")
|
||||
return
|
||||
|
||||
167
server/addons/migrations/flashbanner/install.pg.sql
Normal file
167
server/addons/migrations/flashbanner/install.pg.sql
Normal file
@@ -0,0 +1,167 @@
|
||||
-- 删除表(如果存在)
|
||||
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;
|
||||
33
server/addons/migrations/flashbanner/install.sql
Normal file
33
server/addons/migrations/flashbanner/install.sql
Normal file
@@ -0,0 +1,33 @@
|
||||
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());
|
||||
9
server/addons/migrations/flashbanner/uninstall.pg.sql
Normal file
9
server/addons/migrations/flashbanner/uninstall.pg.sql
Normal file
@@ -0,0 +1,9 @@
|
||||
-- 删除表
|
||||
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';
|
||||
9
server/addons/migrations/flashbanner/uninstall.sql
Normal file
9
server/addons/migrations/flashbanner/uninstall.sql
Normal file
@@ -0,0 +1,9 @@
|
||||
-- 删除表
|
||||
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';
|
||||
2
server/addons/migrations/readme.md
Normal file
2
server/addons/migrations/readme.md
Normal file
@@ -0,0 +1,2 @@
|
||||
# 为了在容器映射sql所以需要独立出来
|
||||
# 兼容数据库和前端文件的迁移
|
||||
66
server/addons/migrations/sqlDo.go
Normal file
66
server/addons/migrations/sqlDo.go
Normal file
@@ -0,0 +1,66 @@
|
||||
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]
|
||||
}
|
||||
8
server/addons/modules/flashbanner.go
Normal file
8
server/addons/modules/flashbanner.go
Normal file
@@ -0,0 +1,8 @@
|
||||
// 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"
|
||||
@@ -77,9 +77,6 @@ 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
|
||||
|
||||
@@ -36,13 +36,3 @@ 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
|
||||
}
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
// Package curddemo
|
||||
// @Link https://github.com/bufanyun/hotgo
|
||||
// @Copyright Copyright (c) 2025 HotGo CLI
|
||||
// @Copyright Copyright (c) 2024 HotGo CLI
|
||||
// @Author Ms <133814250@qq.com>
|
||||
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
|
||||
// @AutoGenerate Version 2.18.6
|
||||
// @AutoGenerate Version 2.15.7
|
||||
package curddemo
|
||||
|
||||
import (
|
||||
@@ -82,4 +82,4 @@ type SwitchReq struct {
|
||||
sysin.CurdDemoSwitchInp
|
||||
}
|
||||
|
||||
type SwitchRes struct{}
|
||||
type SwitchRes struct{}
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
// Package optiontreedemo
|
||||
// @Link https://github.com/bufanyun/hotgo
|
||||
// @Copyright Copyright (c) 2025 HotGo CLI
|
||||
// @Copyright Copyright (c) 2024 HotGo CLI
|
||||
// @Author Ms <133814250@qq.com>
|
||||
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
|
||||
// @AutoGenerate Version 2.17.8
|
||||
// @AutoGenerate Version 2.15.7
|
||||
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
|
||||
|
||||
@@ -14,19 +14,17 @@ 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/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/drivers/mysql/v2 v2.9.0
|
||||
github.com/gogf/gf/contrib/nosql/redis/v2 v2.9.0
|
||||
github.com/gogf/gf/contrib/trace/jaeger/v2 v2.7.4
|
||||
github.com/gogf/gf/v2 v2.9.4
|
||||
github.com/gogf/gf/v2 v2.9.1-0.20250624075347-5fa656d1cc92
|
||||
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 v1.1.0
|
||||
github.com/olekukonko/tablewriter v0.0.5
|
||||
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
|
||||
@@ -36,16 +34,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.38.0
|
||||
golang.org/x/mod v0.26.0
|
||||
golang.org/x/net v0.43.0
|
||||
golang.org/x/tools v0.35.0
|
||||
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
|
||||
gopkg.in/yaml.v3 v3.0.1
|
||||
)
|
||||
|
||||
require (
|
||||
aead.dev/minisign v0.2.0 // indirect
|
||||
github.com/BurntSushi/toml v1.5.0 // indirect
|
||||
github.com/BurntSushi/toml v1.4.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
|
||||
@@ -68,13 +66,14 @@ 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.9.0 // indirect
|
||||
github.com/fsnotify/fsnotify v1.7.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
|
||||
@@ -100,10 +99,9 @@ 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.10 // indirect
|
||||
github.com/mattn/go-colorable v0.1.14 // indirect
|
||||
github.com/magiconair/properties v1.8.9 // indirect
|
||||
github.com/mattn/go-colorable v0.1.13 // 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
|
||||
@@ -113,15 +111,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 v1.1.0 // indirect
|
||||
github.com/olekukonko/ll v0.0.9 // indirect
|
||||
github.com/olekukonko/errors v0.0.0-20250405072817-4e6d85265da6 // indirect
|
||||
github.com/olekukonko/ll v0.0.8 // 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.12.1 // indirect
|
||||
github.com/redis/go-redis/v9 v9.7.0 // 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
|
||||
@@ -142,17 +140,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.38.0 // indirect
|
||||
go.opentelemetry.io/otel/sdk v1.38.0 // indirect
|
||||
go.opentelemetry.io/otel/trace v1.38.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.uber.org/atomic v1.5.1 // indirect
|
||||
golang.org/x/crypto v0.41.0 // indirect
|
||||
golang.org/x/crypto v0.39.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.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/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/time v0.12.0 // indirect
|
||||
gopkg.in/ini.v1 v1.67.0 // indirect
|
||||
gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect
|
||||
|
||||
111
server/go.sum
111
server/go.sum
@@ -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.5.0 h1:W5quZX/G/csjUnuI8SUYlsHs9M38FC7znL0lIO+DvMg=
|
||||
github.com/BurntSushi/toml v1.5.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho=
|
||||
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/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.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k=
|
||||
github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0=
|
||||
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/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.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/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/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.4 h1:6vleEWypot9WBPncP2GjbpgAUeG6Mzb1YESb9nPMkjY=
|
||||
github.com/gogf/gf/v2 v2.9.4/go.mod h1:Ukl+5HUH9S7puBmNLR4L1zUqeRwi0nrW4OigOknEztU=
|
||||
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/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.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/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/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,12 +325,14 @@ 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 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/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/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=
|
||||
@@ -362,8 +364,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.12.1 h1:k5iquqv27aBtnTm2tIkROUDp8JBXhXZIVu1InSgvovg=
|
||||
github.com/redis/go-redis/v9 v9.12.1/go.mod h1:huWgSWd8mW6+m0VPhJjSSQ+d6Nh1VICQ6Q5lHuCH/Iw=
|
||||
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/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=
|
||||
@@ -413,8 +415,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.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
|
||||
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
|
||||
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/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=
|
||||
@@ -460,22 +462,18 @@ 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.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8=
|
||||
go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM=
|
||||
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/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.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.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.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=
|
||||
@@ -494,8 +492,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.41.0 h1:WKYxWedPGCTVVl5+WHSSrOBT0O8lx32+zxmHxijgXp4=
|
||||
golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc=
|
||||
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/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=
|
||||
@@ -512,8 +510,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.26.0 h1:EGMPT//Ezu+ylkCijjPc+f4Aih7sZvaAr+O3EHBxvZg=
|
||||
golang.org/x/mod v0.26.0/go.mod h1:/j6NAhSk8iQ723BGAUyoAcn7SlD7s15Dp9Nd/SfeaFQ=
|
||||
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/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=
|
||||
@@ -541,8 +539,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.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE=
|
||||
golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg=
|
||||
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/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=
|
||||
@@ -556,8 +554,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.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw=
|
||||
golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
|
||||
golang.org/x/sync v0.15.0 h1:KWH3jNZsfyT6xfAfKiz6MRNmd46ByHDYaZ7KSkCtdW8=
|
||||
golang.org/x/sync v0.15.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=
|
||||
@@ -583,6 +581,7 @@ 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=
|
||||
@@ -594,8 +593,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.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI=
|
||||
golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
|
||||
golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw=
|
||||
golang.org/x/sys v0.33.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=
|
||||
@@ -609,8 +608,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.34.0 h1:O/2T7POpk0ZZ7MAzMeWFSg6S5IpWd/RXDlM9hgM3DR4=
|
||||
golang.org/x/term v0.34.0/go.mod h1:5jC53AEywhIVebHgPVeg0mj8OD3VO9OzclacVrqpaAw=
|
||||
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/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=
|
||||
@@ -623,8 +622,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.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng=
|
||||
golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU=
|
||||
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/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=
|
||||
@@ -642,8 +641,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.35.0 h1:mBffYraMEf7aa0sB+NuKnuCy8qI/9Bughn8dC2Gu5r0=
|
||||
golang.org/x/tools v0.35.0/go.mod h1:NKdj5HkL/73byiZSJjqJgKn3ep7KjFkBOkR/Hps3VPw=
|
||||
golang.org/x/tools v0.34.0 h1:qIpSLOxeCYGg9TrcJokLBG4KFA6d795g0xkBkiESGlo=
|
||||
golang.org/x/tools v0.34.0/go.mod h1:pAP9OwEaY1CAW3HOmg3hLZC5Z0CCmzjAF2UQMSqNARg=
|
||||
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=
|
||||
|
||||
@@ -23,7 +23,6 @@ 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" # 指定当前数据库中需要排除代码生成的数据表。
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// Package consts
|
||||
// @Link https://github.com/bufanyun/hotgo
|
||||
// @Copyright Copyright (c) 2025 HotGo CLI
|
||||
// @Copyright Copyright (c) 2023 HotGo CLI
|
||||
// @Author Ms <133814250@qq.com>
|
||||
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
|
||||
package consts
|
||||
@@ -14,7 +14,6 @@ const (
|
||||
Unknown = "Unknown" // Unknown
|
||||
SuperRoleKey = "super" // 超管角色唯一标识符,通过角色验证超管
|
||||
MaxServeLogContentLen = 2048 // 最大保留服务日志内容大小
|
||||
SysDefaultLanguage = "zh_CN" // 系统默认语言,当配置文件没有国际化配置时生效
|
||||
)
|
||||
|
||||
// curd.
|
||||
@@ -30,8 +29,3 @@ const (
|
||||
MerchantId = "merchant_id" // 商户ID
|
||||
UserId = "user_id" // 用户ID
|
||||
)
|
||||
|
||||
const (
|
||||
DBMysql = "mysql"
|
||||
DBPgsql = "pgsql"
|
||||
)
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
// Package consts
|
||||
// @Link https://github.com/bufanyun/hotgo
|
||||
// @Copyright Copyright (c) 2025 HotGo CLI
|
||||
// @Copyright Copyright (c) 2023 HotGo CLI
|
||||
// @Author Ms <133814250@qq.com>
|
||||
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
|
||||
package consts
|
||||
|
||||
// VersionApp HotGo版本
|
||||
const (
|
||||
VersionApp = "2.18.6"
|
||||
VersionApp = "2.17.8"
|
||||
)
|
||||
|
||||
@@ -7,7 +7,6 @@ package common
|
||||
|
||||
import (
|
||||
"context"
|
||||
"github.com/gogf/gf/v2/i18n/gi18n"
|
||||
"hotgo/api/admin/common"
|
||||
"hotgo/internal/consts"
|
||||
"hotgo/internal/library/captcha"
|
||||
@@ -91,9 +90,6 @@ 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
|
||||
}
|
||||
|
||||
|
||||
@@ -57,10 +57,3 @@ 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
|
||||
}
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
// Package sys
|
||||
// @Link https://github.com/bufanyun/hotgo
|
||||
// @Copyright Copyright (c) 2025 HotGo CLI
|
||||
// @Copyright Copyright (c) 2024 HotGo CLI
|
||||
// @Author Ms <133814250@qq.com>
|
||||
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
|
||||
// @AutoGenerate Version 2.18.6
|
||||
// @AutoGenerate Version 2.15.7
|
||||
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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
// Package sys
|
||||
// @Link https://github.com/bufanyun/hotgo
|
||||
// @Copyright Copyright (c) 2025 HotGo CLI
|
||||
// @Copyright Copyright (c) 2024 HotGo CLI
|
||||
// @Author Ms <133814250@qq.com>
|
||||
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
|
||||
// @AutoGenerate Version 2.17.8
|
||||
// @AutoGenerate Version 2.15.7
|
||||
package sys
|
||||
|
||||
import (
|
||||
@@ -86,4 +86,4 @@ func (c *cOptionTreeDemo) TreeOption(ctx context.Context, req *optiontreedemo.Tr
|
||||
res = &temp
|
||||
}
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// =================================================================================
|
||||
// This file is auto-generated by the GoFrame CLI tool. You may modify it as needed.
|
||||
// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish.
|
||||
// =================================================================================
|
||||
|
||||
package dao
|
||||
@@ -8,15 +8,20 @@ import (
|
||||
"hotgo/internal/dao/internal"
|
||||
)
|
||||
|
||||
// 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.
|
||||
// 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.
|
||||
type addonHgexampleTableDao struct {
|
||||
*internal.AddonHgexampleTableDao
|
||||
internalAddonHgexampleTableDao
|
||||
}
|
||||
|
||||
var (
|
||||
// AddonHgexampleTable is a globally accessible object for table hg_addon_hgexample_table operations.
|
||||
AddonHgexampleTable = addonHgexampleTableDao{internal.NewAddonHgexampleTableDao()}
|
||||
// AddonHgexampleTable is globally public accessible object for table hg_addon_hgexample_table operations.
|
||||
AddonHgexampleTable = addonHgexampleTableDao{
|
||||
internal.NewAddonHgexampleTableDao(),
|
||||
}
|
||||
)
|
||||
|
||||
// Add your custom methods and functionality below.
|
||||
// Fill with you ideas below.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// =================================================================================
|
||||
// This file is auto-generated by the GoFrame CLI tool. You may modify it as needed.
|
||||
// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish.
|
||||
// =================================================================================
|
||||
|
||||
package dao
|
||||
@@ -8,15 +8,20 @@ import (
|
||||
"hotgo/internal/dao/internal"
|
||||
)
|
||||
|
||||
// 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.
|
||||
// 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.
|
||||
type addonHgexampleTenantOrderDao struct {
|
||||
*internal.AddonHgexampleTenantOrderDao
|
||||
internalAddonHgexampleTenantOrderDao
|
||||
}
|
||||
|
||||
var (
|
||||
// AddonHgexampleTenantOrder is a globally accessible object for table hg_addon_hgexample_tenant_order operations.
|
||||
AddonHgexampleTenantOrder = addonHgexampleTenantOrderDao{internal.NewAddonHgexampleTenantOrderDao()}
|
||||
// AddonHgexampleTenantOrder is globally public accessible object for table hg_addon_hgexample_tenant_order operations.
|
||||
AddonHgexampleTenantOrder = addonHgexampleTenantOrderDao{
|
||||
internal.NewAddonHgexampleTenantOrderDao(),
|
||||
}
|
||||
)
|
||||
|
||||
// Add your custom methods and functionality below.
|
||||
// Fill with you ideas below.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// =================================================================================
|
||||
// This file is auto-generated by the GoFrame CLI tool. You may modify it as needed.
|
||||
// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish.
|
||||
// =================================================================================
|
||||
|
||||
package dao
|
||||
@@ -8,15 +8,20 @@ import (
|
||||
"hotgo/internal/dao/internal"
|
||||
)
|
||||
|
||||
// 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.
|
||||
// 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.
|
||||
type adminCashDao struct {
|
||||
*internal.AdminCashDao
|
||||
internalAdminCashDao
|
||||
}
|
||||
|
||||
var (
|
||||
// AdminCash is a globally accessible object for table hg_admin_cash operations.
|
||||
AdminCash = adminCashDao{internal.NewAdminCashDao()}
|
||||
// AdminCash is globally public accessible object for table hg_admin_cash operations.
|
||||
AdminCash = adminCashDao{
|
||||
internal.NewAdminCashDao(),
|
||||
}
|
||||
)
|
||||
|
||||
// Add your custom methods and functionality below.
|
||||
// Fill with you ideas below.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// =================================================================================
|
||||
// This file is auto-generated by the GoFrame CLI tool. You may modify it as needed.
|
||||
// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish.
|
||||
// =================================================================================
|
||||
|
||||
package dao
|
||||
@@ -8,15 +8,20 @@ import (
|
||||
"hotgo/internal/dao/internal"
|
||||
)
|
||||
|
||||
// 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.
|
||||
// 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.
|
||||
type adminCreditsLogDao struct {
|
||||
*internal.AdminCreditsLogDao
|
||||
internalAdminCreditsLogDao
|
||||
}
|
||||
|
||||
var (
|
||||
// AdminCreditsLog is a globally accessible object for table hg_admin_credits_log operations.
|
||||
AdminCreditsLog = adminCreditsLogDao{internal.NewAdminCreditsLogDao()}
|
||||
// AdminCreditsLog is globally public accessible object for table hg_admin_credits_log operations.
|
||||
AdminCreditsLog = adminCreditsLogDao{
|
||||
internal.NewAdminCreditsLogDao(),
|
||||
}
|
||||
)
|
||||
|
||||
// Add your custom methods and functionality below.
|
||||
// Fill with you ideas below.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// =================================================================================
|
||||
// This file is auto-generated by the GoFrame CLI tool. You may modify it as needed.
|
||||
// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish.
|
||||
// =================================================================================
|
||||
|
||||
package dao
|
||||
@@ -8,15 +8,20 @@ import (
|
||||
"hotgo/internal/dao/internal"
|
||||
)
|
||||
|
||||
// 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.
|
||||
// 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.
|
||||
type adminDeptDao struct {
|
||||
*internal.AdminDeptDao
|
||||
internalAdminDeptDao
|
||||
}
|
||||
|
||||
var (
|
||||
// AdminDept is a globally accessible object for table hg_admin_dept operations.
|
||||
AdminDept = adminDeptDao{internal.NewAdminDeptDao()}
|
||||
// AdminDept is globally public accessible object for table hg_admin_dept operations.
|
||||
AdminDept = adminDeptDao{
|
||||
internal.NewAdminDeptDao(),
|
||||
}
|
||||
)
|
||||
|
||||
// Add your custom methods and functionality below.
|
||||
// Fill with you ideas below.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// =================================================================================
|
||||
// This file is auto-generated by the GoFrame CLI tool. You may modify it as needed.
|
||||
// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish.
|
||||
// =================================================================================
|
||||
|
||||
package dao
|
||||
@@ -8,15 +8,20 @@ import (
|
||||
"hotgo/internal/dao/internal"
|
||||
)
|
||||
|
||||
// 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.
|
||||
// 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.
|
||||
type adminMemberDao struct {
|
||||
*internal.AdminMemberDao
|
||||
internalAdminMemberDao
|
||||
}
|
||||
|
||||
var (
|
||||
// AdminMember is a globally accessible object for table hg_admin_member operations.
|
||||
AdminMember = adminMemberDao{internal.NewAdminMemberDao()}
|
||||
// AdminMember is globally public accessible object for table hg_admin_member operations.
|
||||
AdminMember = adminMemberDao{
|
||||
internal.NewAdminMemberDao(),
|
||||
}
|
||||
)
|
||||
|
||||
// Add your custom methods and functionality below.
|
||||
// Fill with you ideas below.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// =================================================================================
|
||||
// This file is auto-generated by the GoFrame CLI tool. You may modify it as needed.
|
||||
// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish.
|
||||
// =================================================================================
|
||||
|
||||
package dao
|
||||
@@ -8,15 +8,20 @@ import (
|
||||
"hotgo/internal/dao/internal"
|
||||
)
|
||||
|
||||
// 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.
|
||||
// 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.
|
||||
type adminMemberPostDao struct {
|
||||
*internal.AdminMemberPostDao
|
||||
internalAdminMemberPostDao
|
||||
}
|
||||
|
||||
var (
|
||||
// AdminMemberPost is a globally accessible object for table hg_admin_member_post operations.
|
||||
AdminMemberPost = adminMemberPostDao{internal.NewAdminMemberPostDao()}
|
||||
// AdminMemberPost is globally public accessible object for table hg_admin_member_post operations.
|
||||
AdminMemberPost = adminMemberPostDao{
|
||||
internal.NewAdminMemberPostDao(),
|
||||
}
|
||||
)
|
||||
|
||||
// Add your custom methods and functionality below.
|
||||
// Fill with you ideas below.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// =================================================================================
|
||||
// This file is auto-generated by the GoFrame CLI tool. You may modify it as needed.
|
||||
// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish.
|
||||
// =================================================================================
|
||||
|
||||
package dao
|
||||
@@ -8,15 +8,20 @@ import (
|
||||
"hotgo/internal/dao/internal"
|
||||
)
|
||||
|
||||
// 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.
|
||||
// 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.
|
||||
type adminMemberRoleDao struct {
|
||||
*internal.AdminMemberRoleDao
|
||||
internalAdminMemberRoleDao
|
||||
}
|
||||
|
||||
var (
|
||||
// AdminMemberRole is a globally accessible object for table hg_admin_member_role operations.
|
||||
AdminMemberRole = adminMemberRoleDao{internal.NewAdminMemberRoleDao()}
|
||||
// AdminMemberRole is globally public accessible object for table hg_admin_member_role operations.
|
||||
AdminMemberRole = adminMemberRoleDao{
|
||||
internal.NewAdminMemberRoleDao(),
|
||||
}
|
||||
)
|
||||
|
||||
// Add your custom methods and functionality below.
|
||||
// Fill with you ideas below.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// =================================================================================
|
||||
// This file is auto-generated by the GoFrame CLI tool. You may modify it as needed.
|
||||
// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish.
|
||||
// =================================================================================
|
||||
|
||||
package dao
|
||||
@@ -8,15 +8,20 @@ import (
|
||||
"hotgo/internal/dao/internal"
|
||||
)
|
||||
|
||||
// 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.
|
||||
// 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.
|
||||
type adminMenuDao struct {
|
||||
*internal.AdminMenuDao
|
||||
internalAdminMenuDao
|
||||
}
|
||||
|
||||
var (
|
||||
// AdminMenu is a globally accessible object for table hg_admin_menu operations.
|
||||
AdminMenu = adminMenuDao{internal.NewAdminMenuDao()}
|
||||
// AdminMenu is globally public accessible object for table hg_admin_menu operations.
|
||||
AdminMenu = adminMenuDao{
|
||||
internal.NewAdminMenuDao(),
|
||||
}
|
||||
)
|
||||
|
||||
// Add your custom methods and functionality below.
|
||||
// Fill with you ideas below.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// =================================================================================
|
||||
// This file is auto-generated by the GoFrame CLI tool. You may modify it as needed.
|
||||
// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish.
|
||||
// =================================================================================
|
||||
|
||||
package dao
|
||||
@@ -8,15 +8,20 @@ import (
|
||||
"hotgo/internal/dao/internal"
|
||||
)
|
||||
|
||||
// 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.
|
||||
// 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.
|
||||
type adminNoticeDao struct {
|
||||
*internal.AdminNoticeDao
|
||||
internalAdminNoticeDao
|
||||
}
|
||||
|
||||
var (
|
||||
// AdminNotice is a globally accessible object for table hg_admin_notice operations.
|
||||
AdminNotice = adminNoticeDao{internal.NewAdminNoticeDao()}
|
||||
// AdminNotice is globally public accessible object for table hg_admin_notice operations.
|
||||
AdminNotice = adminNoticeDao{
|
||||
internal.NewAdminNoticeDao(),
|
||||
}
|
||||
)
|
||||
|
||||
// Add your custom methods and functionality below.
|
||||
// Fill with you ideas below.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// =================================================================================
|
||||
// This file is auto-generated by the GoFrame CLI tool. You may modify it as needed.
|
||||
// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish.
|
||||
// =================================================================================
|
||||
|
||||
package dao
|
||||
@@ -8,15 +8,20 @@ import (
|
||||
"hotgo/internal/dao/internal"
|
||||
)
|
||||
|
||||
// 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.
|
||||
// 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.
|
||||
type adminNoticeReadDao struct {
|
||||
*internal.AdminNoticeReadDao
|
||||
internalAdminNoticeReadDao
|
||||
}
|
||||
|
||||
var (
|
||||
// AdminNoticeRead is a globally accessible object for table hg_admin_notice_read operations.
|
||||
AdminNoticeRead = adminNoticeReadDao{internal.NewAdminNoticeReadDao()}
|
||||
// AdminNoticeRead is globally public accessible object for table hg_admin_notice_read operations.
|
||||
AdminNoticeRead = adminNoticeReadDao{
|
||||
internal.NewAdminNoticeReadDao(),
|
||||
}
|
||||
)
|
||||
|
||||
// Add your custom methods and functionality below.
|
||||
// Fill with you ideas below.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// =================================================================================
|
||||
// This file is auto-generated by the GoFrame CLI tool. You may modify it as needed.
|
||||
// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish.
|
||||
// =================================================================================
|
||||
|
||||
package dao
|
||||
@@ -8,15 +8,20 @@ import (
|
||||
"hotgo/internal/dao/internal"
|
||||
)
|
||||
|
||||
// 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.
|
||||
// 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.
|
||||
type adminOauthDao struct {
|
||||
*internal.AdminOauthDao
|
||||
internalAdminOauthDao
|
||||
}
|
||||
|
||||
var (
|
||||
// AdminOauth is a globally accessible object for table hg_admin_oauth operations.
|
||||
AdminOauth = adminOauthDao{internal.NewAdminOauthDao()}
|
||||
// AdminOauth is globally public accessible object for table hg_admin_oauth operations.
|
||||
AdminOauth = adminOauthDao{
|
||||
internal.NewAdminOauthDao(),
|
||||
}
|
||||
)
|
||||
|
||||
// Add your custom methods and functionality below.
|
||||
// Fill with you ideas below.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// =================================================================================
|
||||
// This file is auto-generated by the GoFrame CLI tool. You may modify it as needed.
|
||||
// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish.
|
||||
// =================================================================================
|
||||
|
||||
package dao
|
||||
@@ -8,15 +8,20 @@ import (
|
||||
"hotgo/internal/dao/internal"
|
||||
)
|
||||
|
||||
// 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.
|
||||
// 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.
|
||||
type adminOrderDao struct {
|
||||
*internal.AdminOrderDao
|
||||
internalAdminOrderDao
|
||||
}
|
||||
|
||||
var (
|
||||
// AdminOrder is a globally accessible object for table hg_admin_order operations.
|
||||
AdminOrder = adminOrderDao{internal.NewAdminOrderDao()}
|
||||
// AdminOrder is globally public accessible object for table hg_admin_order operations.
|
||||
AdminOrder = adminOrderDao{
|
||||
internal.NewAdminOrderDao(),
|
||||
}
|
||||
)
|
||||
|
||||
// Add your custom methods and functionality below.
|
||||
// Fill with you ideas below.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// =================================================================================
|
||||
// This file is auto-generated by the GoFrame CLI tool. You may modify it as needed.
|
||||
// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish.
|
||||
// =================================================================================
|
||||
|
||||
package dao
|
||||
@@ -8,15 +8,20 @@ import (
|
||||
"hotgo/internal/dao/internal"
|
||||
)
|
||||
|
||||
// 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.
|
||||
// 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.
|
||||
type adminPostDao struct {
|
||||
*internal.AdminPostDao
|
||||
internalAdminPostDao
|
||||
}
|
||||
|
||||
var (
|
||||
// AdminPost is a globally accessible object for table hg_admin_post operations.
|
||||
AdminPost = adminPostDao{internal.NewAdminPostDao()}
|
||||
// AdminPost is globally public accessible object for table hg_admin_post operations.
|
||||
AdminPost = adminPostDao{
|
||||
internal.NewAdminPostDao(),
|
||||
}
|
||||
)
|
||||
|
||||
// Add your custom methods and functionality below.
|
||||
// Fill with you ideas below.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// =================================================================================
|
||||
// This file is auto-generated by the GoFrame CLI tool. You may modify it as needed.
|
||||
// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish.
|
||||
// =================================================================================
|
||||
|
||||
package dao
|
||||
@@ -8,15 +8,20 @@ import (
|
||||
"hotgo/internal/dao/internal"
|
||||
)
|
||||
|
||||
// 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.
|
||||
// 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.
|
||||
type adminRoleDao struct {
|
||||
*internal.AdminRoleDao
|
||||
internalAdminRoleDao
|
||||
}
|
||||
|
||||
var (
|
||||
// AdminRole is a globally accessible object for table hg_admin_role operations.
|
||||
AdminRole = adminRoleDao{internal.NewAdminRoleDao()}
|
||||
// AdminRole is globally public accessible object for table hg_admin_role operations.
|
||||
AdminRole = adminRoleDao{
|
||||
internal.NewAdminRoleDao(),
|
||||
}
|
||||
)
|
||||
|
||||
// Add your custom methods and functionality below.
|
||||
// Fill with you ideas below.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// =================================================================================
|
||||
// This file is auto-generated by the GoFrame CLI tool. You may modify it as needed.
|
||||
// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish.
|
||||
// =================================================================================
|
||||
|
||||
package dao
|
||||
@@ -8,15 +8,20 @@ import (
|
||||
"hotgo/internal/dao/internal"
|
||||
)
|
||||
|
||||
// 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.
|
||||
// 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.
|
||||
type adminRoleCasbinDao struct {
|
||||
*internal.AdminRoleCasbinDao
|
||||
internalAdminRoleCasbinDao
|
||||
}
|
||||
|
||||
var (
|
||||
// AdminRoleCasbin is a globally accessible object for table hg_admin_role_casbin operations.
|
||||
AdminRoleCasbin = adminRoleCasbinDao{internal.NewAdminRoleCasbinDao()}
|
||||
// AdminRoleCasbin is globally public accessible object for table hg_admin_role_casbin operations.
|
||||
AdminRoleCasbin = adminRoleCasbinDao{
|
||||
internal.NewAdminRoleCasbinDao(),
|
||||
}
|
||||
)
|
||||
|
||||
// Add your custom methods and functionality below.
|
||||
// Fill with you ideas below.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// =================================================================================
|
||||
// This file is auto-generated by the GoFrame CLI tool. You may modify it as needed.
|
||||
// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish.
|
||||
// =================================================================================
|
||||
|
||||
package dao
|
||||
@@ -8,15 +8,20 @@ import (
|
||||
"hotgo/internal/dao/internal"
|
||||
)
|
||||
|
||||
// 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.
|
||||
// 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.
|
||||
type adminRoleMenuDao struct {
|
||||
*internal.AdminRoleMenuDao
|
||||
internalAdminRoleMenuDao
|
||||
}
|
||||
|
||||
var (
|
||||
// AdminRoleMenu is a globally accessible object for table hg_admin_role_menu operations.
|
||||
AdminRoleMenu = adminRoleMenuDao{internal.NewAdminRoleMenuDao()}
|
||||
// AdminRoleMenu is globally public accessible object for table hg_admin_role_menu operations.
|
||||
AdminRoleMenu = adminRoleMenuDao{
|
||||
internal.NewAdminRoleMenuDao(),
|
||||
}
|
||||
)
|
||||
|
||||
// Add your custom methods and functionality below.
|
||||
// Fill with you ideas below.
|
||||
|
||||
@@ -25,7 +25,7 @@ type SysAddonsConfigColumns struct {
|
||||
AddonName string // 插件名称
|
||||
Group string // 分组
|
||||
Name string // 参数名称
|
||||
Type string // 键值类型:string,int,uint,bool,TIMESTAMP,date
|
||||
Type string // 键值类型:string,int,uint,bool,datetime,date
|
||||
Key string // 参数键名
|
||||
Value string // 参数键值
|
||||
DefaultValue string // 默认值
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user