mirror of
https://github.com/bufanyun/hotgo.git
synced 2025-09-17 08:46:39 +08:00
Compare commits
8 Commits
2f5dce599a
...
fd6562c0d0
Author | SHA1 | Date | |
---|---|---|---|
|
fd6562c0d0 | ||
|
86805ba047 | ||
|
abfd6a056f | ||
|
b82dd60604 | ||
|
3becb49ed1 | ||
|
e0d9279685 | ||
|
f18ce6384b | ||
|
2a87055b62 |
@ -65,5 +65,31 @@ Error: connect ECONNREFUSED ::1:8000
|
|||||||
- 服务端没有启动
|
- 服务端没有启动
|
||||||
- `.\wen\.env.development`中的`VITE_PROXY`配置的服务器地址或端口与实际不一致
|
- `.\wen\.env.development`中的`VITE_PROXY`配置的服务器地址或端口与实际不一致
|
||||||
|
|
||||||
|
### 四、Debug相关
|
||||||
|
|
||||||
|
如果Debug不能正常运行,请手动更换Goland调试工具路径
|
||||||
|
|
||||||
|
首先安装GO最新调试工具(注意是master分支)
|
||||||
|
```shell
|
||||||
|
go install github.com/go-delve/delve/cmd/dlv@master
|
||||||
|
```
|
||||||
|
或
|
||||||
|
```shell
|
||||||
|
git clone https://github.com/go-delve/delve
|
||||||
|
cd delve
|
||||||
|
go install github.com/go-delve/delve/cmd/dlv
|
||||||
|
```
|
||||||
|
依次打开Goland对应配置
|
||||||
|
```text
|
||||||
|
Toolbar->Help->Edit Customer Properties
|
||||||
|
```
|
||||||
|
```properties
|
||||||
|
dlv.path=/${your path}/go/bin/dlv
|
||||||
|
```
|
||||||
|
重启Goland
|
||||||
|
|
||||||
|
- 服务端没有启动
|
||||||
|
- `.\wen\.env.development`中的`VITE_PROXY`配置的服务器地址或端口与实际不一致
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -29,7 +29,7 @@ func init() {
|
|||||||
func (s *sSysIndex) Test(ctx context.Context, in *sysin.IndexTestInp) (res *sysin.IndexTestModel, err error) {
|
func (s *sSysIndex) Test(ctx context.Context, in *sysin.IndexTestInp) (res *sysin.IndexTestModel, err error) {
|
||||||
res = new(sysin.IndexTestModel)
|
res = new(sysin.IndexTestModel)
|
||||||
res.Name = in.Name
|
res.Name = in.Name
|
||||||
res.Module = fmt.Sprintf("当前插件模块是:%s,当前应用模块是:%s", global.GetSkeleton().Name, contexts.Get(ctx).Module)
|
res.Module = fmt.Sprintf("当前插件模块是:%s,当前应用模块是:%s", global.GetSkeleton().Name, contexts.Get[any](ctx).Module)
|
||||||
res.Time = gtime.Now()
|
res.Time = gtime.Now()
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -128,7 +128,7 @@ func (s *sSysTable) Export(ctx context.Context, in *sysin.TableListInp) (err err
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if err = excel.ExportByStructs(ctx, tags, exports, fileName, sheetName); err != nil {
|
if err = excel.ExportByStructs[any](ctx, tags, exports, fileName, sheetName); err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
@ -143,7 +143,7 @@ func (s *sSysTable) Edit(ctx context.Context, in *sysin.TableEditInp) (err error
|
|||||||
|
|
||||||
// 修改
|
// 修改
|
||||||
if in.Id > 0 {
|
if in.Id > 0 {
|
||||||
in.UpdatedBy = contexts.GetUserId(ctx)
|
in.UpdatedBy = contexts.GetUserId[any](ctx)
|
||||||
if _, err = s.Model(ctx).WherePri(in.Id).Data(in).Update(); err != nil {
|
if _, err = s.Model(ctx).WherePri(in.Id).Data(in).Update(); err != nil {
|
||||||
err = gerror.Wrap(err, "修改表格失败,请稍后重试!")
|
err = gerror.Wrap(err, "修改表格失败,请稍后重试!")
|
||||||
return
|
return
|
||||||
@ -152,7 +152,7 @@ func (s *sSysTable) Edit(ctx context.Context, in *sysin.TableEditInp) (err error
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 新增
|
// 新增
|
||||||
in.CreatedBy = contexts.GetUserId(ctx)
|
in.CreatedBy = contexts.GetUserId[any](ctx)
|
||||||
if _, err = s.Model(ctx, &handler.Option{FilterAuth: false}).Data(in).OmitEmptyData().Insert(); err != nil {
|
if _, err = s.Model(ctx, &handler.Option{FilterAuth: false}).Data(in).OmitEmptyData().Insert(); err != nil {
|
||||||
err = gerror.Wrap(err, "新增表格失败,请稍后重试!")
|
err = gerror.Wrap(err, "新增表格失败,请稍后重试!")
|
||||||
return
|
return
|
||||||
@ -173,7 +173,7 @@ func (s *sSysTable) Delete(ctx context.Context, in *sysin.TableDeleteInp) (err e
|
|||||||
func (s *sSysTable) Status(ctx context.Context, in *sysin.TableStatusInp) (err error) {
|
func (s *sSysTable) Status(ctx context.Context, in *sysin.TableStatusInp) (err error) {
|
||||||
update := g.Map{
|
update := g.Map{
|
||||||
dao.AddonHgexampleTable.Columns().Status: in.Status,
|
dao.AddonHgexampleTable.Columns().Status: in.Status,
|
||||||
dao.AddonHgexampleTable.Columns().UpdatedBy: contexts.GetUserId(ctx),
|
dao.AddonHgexampleTable.Columns().UpdatedBy: contexts.GetUserId[any](ctx),
|
||||||
}
|
}
|
||||||
|
|
||||||
if _, err = s.Model(ctx).WherePri(in.Id).Data(update).Update(); err != nil {
|
if _, err = s.Model(ctx).WherePri(in.Id).Data(update).Update(); err != nil {
|
||||||
@ -197,7 +197,7 @@ func (s *sSysTable) Switch(ctx context.Context, in *sysin.TableSwitchInp) (err e
|
|||||||
|
|
||||||
update := g.Map{
|
update := g.Map{
|
||||||
in.Key: in.Value,
|
in.Key: in.Value,
|
||||||
dao.AddonHgexampleTable.Columns().UpdatedBy: contexts.GetUserId(ctx),
|
dao.AddonHgexampleTable.Columns().UpdatedBy: contexts.GetUserId[any](ctx),
|
||||||
}
|
}
|
||||||
|
|
||||||
if _, err = s.Model(ctx).Where(dao.AddonHgexampleTable.Columns().Id, in.Id).Data(update).Update(); err != nil {
|
if _, err = s.Model(ctx).Where(dao.AddonHgexampleTable.Columns().Id, in.Id).Data(update).Update(); err != nil {
|
||||||
|
@ -126,7 +126,7 @@ func (s *sSysTenantOrder) Export(ctx context.Context, in *sysin.TenantOrderListI
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
err = excel.ExportByStructs(ctx, tags, exports, fileName, sheetName)
|
err = excel.ExportByStructs[any](ctx, tags, exports, fileName, sheetName)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -118,13 +118,13 @@ func (s *sSysTreeTable) Edit(ctx context.Context, in *sysin.TableEditInp) (err e
|
|||||||
}
|
}
|
||||||
|
|
||||||
if in.Id > 0 {
|
if in.Id > 0 {
|
||||||
in.UpdatedBy = contexts.GetUserId(ctx)
|
in.UpdatedBy = contexts.GetUserId[any](ctx)
|
||||||
if _, err = s.Model(ctx).WherePri(in.Id).Data(in).Update(); err != nil {
|
if _, err = s.Model(ctx).WherePri(in.Id).Data(in).Update(); err != nil {
|
||||||
err = gerror.Wrap(err, "修改表格失败,请稍后重试!")
|
err = gerror.Wrap(err, "修改表格失败,请稍后重试!")
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
in.CreatedBy = contexts.GetUserId(ctx)
|
in.CreatedBy = contexts.GetUserId[any](ctx)
|
||||||
if _, err = s.Model(ctx, &handler.Option{FilterAuth: false}).Data(in).OmitEmptyData().Insert(); err != nil {
|
if _, err = s.Model(ctx, &handler.Option{FilterAuth: false}).Data(in).OmitEmptyData().Insert(); err != nil {
|
||||||
err = gerror.Wrap(err, "新增表格失败,请稍后重试!")
|
err = gerror.Wrap(err, "新增表格失败,请稍后重试!")
|
||||||
return err
|
return err
|
||||||
|
@ -1,23 +1,23 @@
|
|||||||
module hotgo
|
module hotgo
|
||||||
|
|
||||||
go 1.23.0
|
go 1.23.1
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/IBM/sarama v1.43.3
|
github.com/IBM/sarama v1.43.3
|
||||||
github.com/alibabacloud-go/darabonba-openapi/v2 v2.0.9
|
github.com/alibabacloud-go/darabonba-openapi/v2 v2.0.9
|
||||||
github.com/alibabacloud-go/dysmsapi-20170525/v3 v3.0.6
|
github.com/alibabacloud-go/dysmsapi-20170525/v3 v3.0.6
|
||||||
github.com/alibabacloud-go/tea v1.2.2
|
github.com/alibabacloud-go/tea v1.2.2
|
||||||
github.com/alibabacloud-go/tea-utils/v2 v2.0.6
|
github.com/alibabacloud-go/tea-utils/v2 v2.0.7
|
||||||
github.com/aliyun/aliyun-oss-go-sdk v3.0.2+incompatible
|
github.com/aliyun/aliyun-oss-go-sdk v3.0.2+incompatible
|
||||||
github.com/apache/rocketmq-client-go/v2 v2.1.2
|
github.com/apache/rocketmq-client-go/v2 v2.1.2
|
||||||
github.com/casbin/casbin/v2 v2.99.0
|
github.com/casbin/casbin/v2 v2.100.0
|
||||||
github.com/forgoer/openssl v1.6.0
|
github.com/forgoer/openssl v1.6.0
|
||||||
github.com/go-pay/crypto v0.0.1
|
github.com/go-pay/crypto v0.0.1
|
||||||
github.com/go-pay/gopay v1.5.104
|
github.com/go-pay/gopay v1.5.104
|
||||||
github.com/gogf/gf/contrib/drivers/mysql/v2 v2.7.2
|
github.com/gogf/gf/contrib/drivers/mysql/v2 v2.7.3
|
||||||
github.com/gogf/gf/contrib/nosql/redis/v2 v2.7.2
|
github.com/gogf/gf/contrib/nosql/redis/v2 v2.7.3
|
||||||
github.com/gogf/gf/contrib/trace/jaeger/v2 v2.7.2
|
github.com/gogf/gf/contrib/trace/jaeger/v2 v2.7.3
|
||||||
github.com/gogf/gf/v2 v2.7.2
|
github.com/gogf/gf/v2 v2.7.3
|
||||||
github.com/gogf/selfupdate v0.0.0-20231215043001-5c48c528462f
|
github.com/gogf/selfupdate v0.0.0-20231215043001-5c48c528462f
|
||||||
github.com/golang-jwt/jwt/v5 v5.2.1
|
github.com/golang-jwt/jwt/v5 v5.2.1
|
||||||
github.com/gorilla/websocket v1.5.3
|
github.com/gorilla/websocket v1.5.3
|
||||||
@ -25,18 +25,18 @@ require (
|
|||||||
github.com/minio/minio-go/v7 v7.0.76
|
github.com/minio/minio-go/v7 v7.0.76
|
||||||
github.com/mojocn/base64Captcha v1.3.6
|
github.com/mojocn/base64Captcha v1.3.6
|
||||||
github.com/olekukonko/tablewriter v0.0.5
|
github.com/olekukonko/tablewriter v0.0.5
|
||||||
github.com/qiniu/go-sdk/v7 v7.21.1
|
github.com/qiniu/go-sdk/v7 v7.22.0
|
||||||
github.com/shirou/gopsutil/v3 v3.24.5
|
github.com/shirou/gopsutil/v3 v3.24.5
|
||||||
github.com/silenceper/wechat/v2 v2.1.6
|
github.com/silenceper/wechat/v2 v2.1.6
|
||||||
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.993
|
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1006
|
||||||
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sms v1.0.993
|
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sms v1.0.1006
|
||||||
github.com/tencentyun/cos-go-sdk-v5 v0.7.54
|
github.com/tencentyun/cos-go-sdk-v5 v0.7.55
|
||||||
github.com/ufilesdk-dev/ufile-gosdk v1.0.4
|
github.com/ufilesdk-dev/ufile-gosdk v1.0.4
|
||||||
github.com/xuri/excelize/v2 v2.6.0
|
github.com/xuri/excelize/v2 v2.8.1
|
||||||
go.opentelemetry.io/otel v1.29.0
|
go.opentelemetry.io/otel v1.30.0
|
||||||
golang.org/x/mod v0.20.0
|
golang.org/x/mod v0.21.0
|
||||||
golang.org/x/net v0.28.0
|
golang.org/x/net v0.29.0
|
||||||
golang.org/x/tools v0.24.0
|
golang.org/x/tools v0.25.0
|
||||||
gopkg.in/yaml.v3 v3.0.1
|
gopkg.in/yaml.v3 v3.0.1
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -50,7 +50,7 @@ require (
|
|||||||
github.com/alibabacloud-go/endpoint-util v1.1.1 // indirect
|
github.com/alibabacloud-go/endpoint-util v1.1.1 // indirect
|
||||||
github.com/alibabacloud-go/openapi-util v0.1.1 // indirect
|
github.com/alibabacloud-go/openapi-util v0.1.1 // indirect
|
||||||
github.com/alibabacloud-go/tea-xml v1.1.3 // indirect
|
github.com/alibabacloud-go/tea-xml v1.1.3 // indirect
|
||||||
github.com/aliyun/credentials-go v1.3.9 // indirect
|
github.com/aliyun/credentials-go v1.3.10 // indirect
|
||||||
github.com/bmatcuk/doublestar/v4 v4.6.1 // indirect
|
github.com/bmatcuk/doublestar/v4 v4.6.1 // indirect
|
||||||
github.com/bradfitz/gomemcache v0.0.0-20230905024940-24af94b03874 // indirect
|
github.com/bradfitz/gomemcache v0.0.0-20230905024940-24af94b03874 // indirect
|
||||||
github.com/casbin/govaluate v1.2.0 // indirect
|
github.com/casbin/govaluate v1.2.0 // indirect
|
||||||
@ -63,10 +63,13 @@ require (
|
|||||||
github.com/eapache/go-resiliency v1.7.0 // indirect
|
github.com/eapache/go-resiliency v1.7.0 // indirect
|
||||||
github.com/eapache/go-xerial-snappy v0.0.0-20230731223053-c322873962e3 // indirect
|
github.com/eapache/go-xerial-snappy v0.0.0-20230731223053-c322873962e3 // indirect
|
||||||
github.com/eapache/queue v1.1.0 // indirect
|
github.com/eapache/queue v1.1.0 // indirect
|
||||||
|
github.com/elastic/go-sysinfo v1.14.1 // indirect
|
||||||
|
github.com/elastic/go-windows v1.0.2 // indirect
|
||||||
github.com/emirpasic/gods v1.18.1 // indirect
|
github.com/emirpasic/gods v1.18.1 // indirect
|
||||||
github.com/fatih/color v1.17.0 // indirect
|
github.com/fatih/color v1.17.0 // indirect
|
||||||
github.com/fatih/structs v1.1.0 // indirect
|
github.com/fatih/structs v1.1.0 // indirect
|
||||||
github.com/fsnotify/fsnotify v1.7.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-ini/ini v1.67.0 // indirect
|
||||||
github.com/go-logr/logr v1.4.2 // indirect
|
github.com/go-logr/logr v1.4.2 // indirect
|
||||||
github.com/go-logr/stdr v1.2.2 // indirect
|
github.com/go-logr/stdr v1.2.2 // indirect
|
||||||
@ -97,9 +100,8 @@ require (
|
|||||||
github.com/json-iterator/go v1.1.12 // indirect
|
github.com/json-iterator/go v1.1.12 // indirect
|
||||||
github.com/klauspost/compress v1.17.9 // indirect
|
github.com/klauspost/compress v1.17.9 // indirect
|
||||||
github.com/klauspost/cpuid/v2 v2.2.8 // indirect
|
github.com/klauspost/cpuid/v2 v2.2.8 // indirect
|
||||||
github.com/lufia/plan9stats v0.0.0-20240819163618-b1d8f4d146e7 // indirect
|
github.com/lufia/plan9stats v0.0.0-20240909124753-873cd0166683 // indirect
|
||||||
github.com/magiconair/properties v1.8.7 // indirect
|
github.com/magiconair/properties v1.8.7 // indirect
|
||||||
github.com/matishsiao/goInfo v0.0.0-20210923090445-da2e3fa8d45f // indirect
|
|
||||||
github.com/mattn/go-colorable v0.1.13 // indirect
|
github.com/mattn/go-colorable v0.1.13 // indirect
|
||||||
github.com/mattn/go-isatty v0.0.20 // indirect
|
github.com/mattn/go-isatty v0.0.20 // indirect
|
||||||
github.com/mattn/go-runewidth v0.0.16 // indirect
|
github.com/mattn/go-runewidth v0.0.16 // indirect
|
||||||
@ -113,10 +115,11 @@ require (
|
|||||||
github.com/pierrec/lz4/v4 v4.1.21 // indirect
|
github.com/pierrec/lz4/v4 v4.1.21 // indirect
|
||||||
github.com/pkg/errors v0.9.1 // indirect
|
github.com/pkg/errors v0.9.1 // indirect
|
||||||
github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 // indirect
|
github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 // indirect
|
||||||
|
github.com/prometheus/procfs v0.15.1 // indirect
|
||||||
github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect
|
github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect
|
||||||
github.com/redis/go-redis/v9 v9.6.1 // indirect
|
github.com/redis/go-redis/v9 v9.6.1 // indirect
|
||||||
github.com/richardlehane/mscfb v1.0.4 // indirect
|
github.com/richardlehane/mscfb v1.0.4 // indirect
|
||||||
github.com/richardlehane/msoleps v1.0.3 // indirect
|
github.com/richardlehane/msoleps v1.0.4 // indirect
|
||||||
github.com/rivo/uniseg v0.4.7 // indirect
|
github.com/rivo/uniseg v0.4.7 // indirect
|
||||||
github.com/rs/xid v1.6.0 // indirect
|
github.com/rs/xid v1.6.0 // indirect
|
||||||
github.com/shoenig/go-m1cpu v0.1.6 // indirect
|
github.com/shoenig/go-m1cpu v0.1.6 // indirect
|
||||||
@ -132,17 +135,19 @@ require (
|
|||||||
github.com/xuri/nfp v0.0.0-20240318013403-ab9948c2c4a7 // indirect
|
github.com/xuri/nfp v0.0.0-20240318013403-ab9948c2c4a7 // indirect
|
||||||
github.com/yusufpapurcu/wmi v1.2.4 // indirect
|
github.com/yusufpapurcu/wmi v1.2.4 // indirect
|
||||||
go.opentelemetry.io/otel/exporters/jaeger v1.17.0 // indirect
|
go.opentelemetry.io/otel/exporters/jaeger v1.17.0 // indirect
|
||||||
go.opentelemetry.io/otel/metric v1.29.0 // indirect
|
go.opentelemetry.io/otel/metric v1.30.0 // indirect
|
||||||
go.opentelemetry.io/otel/sdk v1.29.0 // indirect
|
go.opentelemetry.io/otel/sdk v1.30.0 // indirect
|
||||||
go.opentelemetry.io/otel/trace v1.29.0 // indirect
|
go.opentelemetry.io/otel/trace v1.30.0 // indirect
|
||||||
go.uber.org/atomic v1.11.0 // indirect
|
go.uber.org/atomic v1.11.0 // indirect
|
||||||
golang.org/x/crypto v0.26.0 // indirect
|
golang.org/x/crypto v0.27.0 // indirect
|
||||||
golang.org/x/image v0.19.0 // indirect
|
golang.org/x/image v0.20.0 // indirect
|
||||||
golang.org/x/sync v0.8.0 // indirect
|
golang.org/x/sync v0.8.0 // indirect
|
||||||
golang.org/x/sys v0.24.0 // indirect
|
golang.org/x/sys v0.25.0 // indirect
|
||||||
golang.org/x/text v0.17.0 // indirect
|
golang.org/x/text v0.18.0 // indirect
|
||||||
golang.org/x/time v0.6.0 // indirect
|
golang.org/x/time v0.6.0 // indirect
|
||||||
gopkg.in/ini.v1 v1.67.0 // indirect
|
gopkg.in/ini.v1 v1.67.0 // indirect
|
||||||
gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect
|
gopkg.in/natefinch/lumberjack.v2 v2.2.1 // indirect
|
||||||
|
howett.net/plist v1.0.1 // indirect
|
||||||
|
modernc.org/fileutil v1.3.0 // indirect
|
||||||
stathat.com/c/consistent v1.0.0 // indirect
|
stathat.com/c/consistent v1.0.0 // indirect
|
||||||
)
|
)
|
||||||
|
144
server/go.sum
144
server/go.sum
@ -43,8 +43,9 @@ github.com/alibabacloud-go/tea v1.2.2/go.mod h1:CF3vOzEMAG+bR4WOql8gc2G9H3EkH3ZL
|
|||||||
github.com/alibabacloud-go/tea-utils v1.3.1/go.mod h1:EI/o33aBfj3hETm4RLiAxF/ThQdSngxrpF8rKUDJjPE=
|
github.com/alibabacloud-go/tea-utils v1.3.1/go.mod h1:EI/o33aBfj3hETm4RLiAxF/ThQdSngxrpF8rKUDJjPE=
|
||||||
github.com/alibabacloud-go/tea-utils/v2 v2.0.0/go.mod h1:U5MTY10WwlquGPS34DOeomUGBB0gXbLueiq5Trwu0C4=
|
github.com/alibabacloud-go/tea-utils/v2 v2.0.0/go.mod h1:U5MTY10WwlquGPS34DOeomUGBB0gXbLueiq5Trwu0C4=
|
||||||
github.com/alibabacloud-go/tea-utils/v2 v2.0.3/go.mod h1:sj1PbjPodAVTqGTA3olprfeeqqmwD0A5OQz94o9EuXQ=
|
github.com/alibabacloud-go/tea-utils/v2 v2.0.3/go.mod h1:sj1PbjPodAVTqGTA3olprfeeqqmwD0A5OQz94o9EuXQ=
|
||||||
github.com/alibabacloud-go/tea-utils/v2 v2.0.6 h1:ZkmUlhlQbaDC+Eba/GARMPy6hKdCLiSke5RsN5LcyQ0=
|
|
||||||
github.com/alibabacloud-go/tea-utils/v2 v2.0.6/go.mod h1:qxn986l+q33J5VkialKMqT/TTs3E+U9MJpd001iWQ9I=
|
github.com/alibabacloud-go/tea-utils/v2 v2.0.6/go.mod h1:qxn986l+q33J5VkialKMqT/TTs3E+U9MJpd001iWQ9I=
|
||||||
|
github.com/alibabacloud-go/tea-utils/v2 v2.0.7 h1:WDx5qW3Xa5ZgJ1c8NfqJkF6w+AU5wB8835UdhPr6Ax0=
|
||||||
|
github.com/alibabacloud-go/tea-utils/v2 v2.0.7/go.mod h1:qxn986l+q33J5VkialKMqT/TTs3E+U9MJpd001iWQ9I=
|
||||||
github.com/alibabacloud-go/tea-xml v1.1.2/go.mod h1:Rq08vgCcCAjHyRi/M7xlHKUykZCEtyBy9+DPF6GgEu8=
|
github.com/alibabacloud-go/tea-xml v1.1.2/go.mod h1:Rq08vgCcCAjHyRi/M7xlHKUykZCEtyBy9+DPF6GgEu8=
|
||||||
github.com/alibabacloud-go/tea-xml v1.1.3 h1:7LYnm+JbOq2B+T/B0fHC4Ies4/FofC4zHzYtqw7dgt0=
|
github.com/alibabacloud-go/tea-xml v1.1.3 h1:7LYnm+JbOq2B+T/B0fHC4Ies4/FofC4zHzYtqw7dgt0=
|
||||||
github.com/alibabacloud-go/tea-xml v1.1.3/go.mod h1:Rq08vgCcCAjHyRi/M7xlHKUykZCEtyBy9+DPF6GgEu8=
|
github.com/alibabacloud-go/tea-xml v1.1.3/go.mod h1:Rq08vgCcCAjHyRi/M7xlHKUykZCEtyBy9+DPF6GgEu8=
|
||||||
@ -57,8 +58,8 @@ github.com/aliyun/aliyun-oss-go-sdk v3.0.2+incompatible/go.mod h1:T/Aws4fEfogEE9
|
|||||||
github.com/aliyun/credentials-go v1.1.2/go.mod h1:ozcZaMR5kLM7pwtCMEpVmQ242suV6qTJya2bDq4X1Tw=
|
github.com/aliyun/credentials-go v1.1.2/go.mod h1:ozcZaMR5kLM7pwtCMEpVmQ242suV6qTJya2bDq4X1Tw=
|
||||||
github.com/aliyun/credentials-go v1.3.1/go.mod h1:8jKYhQuDawt8x2+fusqa1Y6mPxemTsBEN04dgcAcYz0=
|
github.com/aliyun/credentials-go v1.3.1/go.mod h1:8jKYhQuDawt8x2+fusqa1Y6mPxemTsBEN04dgcAcYz0=
|
||||||
github.com/aliyun/credentials-go v1.3.6/go.mod h1:1LxUuX7L5YrZUWzBrRyk0SwSdH4OmPrib8NVePL3fxM=
|
github.com/aliyun/credentials-go v1.3.6/go.mod h1:1LxUuX7L5YrZUWzBrRyk0SwSdH4OmPrib8NVePL3fxM=
|
||||||
github.com/aliyun/credentials-go v1.3.9 h1:xz4W+ebo2xlq5LXshm4YLz7P7ZfmQaNYGTx+Lm0HbQ4=
|
github.com/aliyun/credentials-go v1.3.10 h1:45Xxrae/evfzQL9V10zL3xX31eqgLWEaIdCoPipOEQA=
|
||||||
github.com/aliyun/credentials-go v1.3.9/go.mod h1:Jm6d+xIgwJVLVWT561vy67ZRP4lPTQxMbEYRuT2Ti1U=
|
github.com/aliyun/credentials-go v1.3.10/go.mod h1:Jm6d+xIgwJVLVWT561vy67ZRP4lPTQxMbEYRuT2Ti1U=
|
||||||
github.com/apache/rocketmq-client-go/v2 v2.1.2 h1:yt73olKe5N6894Dbm+ojRf/JPiP0cxfDNNffKwhpJVg=
|
github.com/apache/rocketmq-client-go/v2 v2.1.2 h1:yt73olKe5N6894Dbm+ojRf/JPiP0cxfDNNffKwhpJVg=
|
||||||
github.com/apache/rocketmq-client-go/v2 v2.1.2/go.mod h1:6I6vgxHR3hzrvn+6n/4mrhS+UTulzK/X9LB2Vk1U5gE=
|
github.com/apache/rocketmq-client-go/v2 v2.1.2/go.mod h1:6I6vgxHR3hzrvn+6n/4mrhS+UTulzK/X9LB2Vk1U5gE=
|
||||||
github.com/bmatcuk/doublestar/v4 v4.6.1 h1:FH9SifrbvJhnlQpztAx++wlkk70QBf0iBWDwNy7PA4I=
|
github.com/bmatcuk/doublestar/v4 v4.6.1 h1:FH9SifrbvJhnlQpztAx++wlkk70QBf0iBWDwNy7PA4I=
|
||||||
@ -70,8 +71,8 @@ github.com/bsm/ginkgo/v2 v2.12.0 h1:Ny8MWAHyOepLGlLKYmXG4IEkioBysk6GpaRTLC8zwWs=
|
|||||||
github.com/bsm/ginkgo/v2 v2.12.0/go.mod h1:SwYbGRRDovPVboqFv0tPTcG1sN61LM1Z4ARdbAV9g4c=
|
github.com/bsm/ginkgo/v2 v2.12.0/go.mod h1:SwYbGRRDovPVboqFv0tPTcG1sN61LM1Z4ARdbAV9g4c=
|
||||||
github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA=
|
github.com/bsm/gomega v1.27.10 h1:yeMWxP2pV2fG3FgAODIY8EiRE3dy0aeFYt4l7wh6yKA=
|
||||||
github.com/bsm/gomega v1.27.10/go.mod h1:JyEr/xRbxbtgWNi8tIEVPUYZ5Dzef52k01W3YH0H+O0=
|
github.com/bsm/gomega v1.27.10/go.mod h1:JyEr/xRbxbtgWNi8tIEVPUYZ5Dzef52k01W3YH0H+O0=
|
||||||
github.com/casbin/casbin/v2 v2.99.0 h1:Y993vfRenh8Xtb4XVaK8KeYJTjD4Zn1XVewGszhzk1E=
|
github.com/casbin/casbin/v2 v2.100.0 h1:aeugSNjjHfCrgA22nHkVvw2xsscboHv5r0a13ljQKGQ=
|
||||||
github.com/casbin/casbin/v2 v2.99.0/go.mod h1:LO7YPez4dX3LgoTCqSQAleQDo0S0BeZBDxYnPUl95Ng=
|
github.com/casbin/casbin/v2 v2.100.0/go.mod h1:LO7YPez4dX3LgoTCqSQAleQDo0S0BeZBDxYnPUl95Ng=
|
||||||
github.com/casbin/govaluate v1.2.0 h1:wXCXFmqyY+1RwiKfYo3jMKyrtZmOL3kHwaqDyCPOYak=
|
github.com/casbin/govaluate v1.2.0 h1:wXCXFmqyY+1RwiKfYo3jMKyrtZmOL3kHwaqDyCPOYak=
|
||||||
github.com/casbin/govaluate v1.2.0/go.mod h1:G/UnbIjZk/0uMNaLwZZmFQrR72tYRZWQkO70si/iR7A=
|
github.com/casbin/govaluate v1.2.0/go.mod h1:G/UnbIjZk/0uMNaLwZZmFQrR72tYRZWQkO70si/iR7A=
|
||||||
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
|
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
|
||||||
@ -93,7 +94,6 @@ github.com/dave/jennifer v1.6.1/go.mod h1:nXbxhEmQfOZhWml3D1cDK5M1FLnMSozpbFN/m3
|
|||||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
|
|
||||||
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78=
|
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78=
|
||||||
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=
|
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=
|
||||||
github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
|
github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
|
||||||
@ -104,6 +104,12 @@ github.com/eapache/go-xerial-snappy v0.0.0-20230731223053-c322873962e3 h1:Oy0F4A
|
|||||||
github.com/eapache/go-xerial-snappy v0.0.0-20230731223053-c322873962e3/go.mod h1:YvSRo5mw33fLEx1+DlK6L2VV43tJt5Eyel9n9XBcR+0=
|
github.com/eapache/go-xerial-snappy v0.0.0-20230731223053-c322873962e3/go.mod h1:YvSRo5mw33fLEx1+DlK6L2VV43tJt5Eyel9n9XBcR+0=
|
||||||
github.com/eapache/queue v1.1.0 h1:YOEu7KNc61ntiQlcEeUIoDTJ2o8mQznoNvUhiigpIqc=
|
github.com/eapache/queue v1.1.0 h1:YOEu7KNc61ntiQlcEeUIoDTJ2o8mQznoNvUhiigpIqc=
|
||||||
github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I=
|
github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I=
|
||||||
|
github.com/elastic/go-sysinfo v1.0.2/go.mod h1:O/D5m1VpYLwGjCYzEt63g3Z1uO3jXfwyzzjiW90t8cY=
|
||||||
|
github.com/elastic/go-sysinfo v1.14.1 h1:BpY/Utfz75oKSpsQnbAJmmlnT3gBV9WFsopBEYgjhZY=
|
||||||
|
github.com/elastic/go-sysinfo v1.14.1/go.mod h1:FKUXnZWhnYI0ueO7jhsGV3uQJ5hiz8OqM5b3oGyaRr8=
|
||||||
|
github.com/elastic/go-windows v1.0.0/go.mod h1:TsU0Nrp7/y3+VwE82FoZF8gC/XFg/Elz6CcloAxnPgU=
|
||||||
|
github.com/elastic/go-windows v1.0.2 h1:yoLLsAsV5cfg9FLhZ9EXZ2n2sQFKeDYrHenkcivY4vI=
|
||||||
|
github.com/elastic/go-windows v1.0.2/go.mod h1:bGcDpBzXgYSqM0Gx3DM4+UxFj300SZLixie9u9ixLM8=
|
||||||
github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o=
|
github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o=
|
||||||
github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc=
|
github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc=
|
||||||
github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ=
|
github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ=
|
||||||
@ -124,6 +130,8 @@ github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMo
|
|||||||
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
|
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
|
||||||
github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
|
github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA=
|
||||||
github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM=
|
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=
|
github.com/go-ini/ini v1.67.0 h1:z6ZrTEZqSWOTyH2FlglNbNgARyHG8oLW9gMELqKr06A=
|
||||||
github.com/go-ini/ini v1.67.0/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8=
|
github.com/go-ini/ini v1.67.0/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8=
|
||||||
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
|
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
|
||||||
@ -151,7 +159,7 @@ github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTM
|
|||||||
github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs=
|
github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs=
|
||||||
github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA=
|
github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA=
|
||||||
github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA=
|
github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA=
|
||||||
github.com/go-playground/validator/v10 v10.8.0/go.mod h1:9JhgTzTaE31GZDpH/HSvHiRJrJ3iKAgqqH0Bl/Ocjdk=
|
github.com/go-playground/validator/v10 v10.7.0/go.mod h1:xm76BBt941f7yWdGnI2DVPFFg1UK3YY04qifoXU3lOk=
|
||||||
github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI=
|
github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI=
|
||||||
github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo=
|
github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo=
|
||||||
github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y=
|
github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y=
|
||||||
@ -162,14 +170,14 @@ github.com/goccy/go-json v0.10.3/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PU
|
|||||||
github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU=
|
github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU=
|
||||||
github.com/gofrs/flock v0.12.1 h1:MTLVXXHf8ekldpJk3AKicLij9MdwOWkZ+a/jHHZby9E=
|
github.com/gofrs/flock v0.12.1 h1:MTLVXXHf8ekldpJk3AKicLij9MdwOWkZ+a/jHHZby9E=
|
||||||
github.com/gofrs/flock v0.12.1/go.mod h1:9zxTsyu5xtJ9DK+1tFZyibEV7y3uwDxPPfbxeeHCoD0=
|
github.com/gofrs/flock v0.12.1/go.mod h1:9zxTsyu5xtJ9DK+1tFZyibEV7y3uwDxPPfbxeeHCoD0=
|
||||||
github.com/gogf/gf/contrib/drivers/mysql/v2 v2.7.2 h1:GpE2JuHVoNJD4lNP1omC1+TKXNCSvXr5oil1bNULYd0=
|
github.com/gogf/gf/contrib/drivers/mysql/v2 v2.7.3 h1:VvDrsKuKa2obtMqbmdGt73YOpnDCiZ+dPcHfKtdcHLE=
|
||||||
github.com/gogf/gf/contrib/drivers/mysql/v2 v2.7.2/go.mod h1:0h3UmNAmA8hnjvTyozZelSWWxiAjGDQttzZqMhkCkJo=
|
github.com/gogf/gf/contrib/drivers/mysql/v2 v2.7.3/go.mod h1:WsLwt84iuBi2e+RVWb65yfyaaYxGWCtpqOoviH2JpIA=
|
||||||
github.com/gogf/gf/contrib/nosql/redis/v2 v2.7.2 h1:V1hdGnyjU9kT0I3DDDFDl6Ll8yC6aAIFJa/lMQwB8V4=
|
github.com/gogf/gf/contrib/nosql/redis/v2 v2.7.3 h1:DUnJFoxLgOMmUjbybZ6X7x9G3vS8eujq5hbnBMTSyLs=
|
||||||
github.com/gogf/gf/contrib/nosql/redis/v2 v2.7.2/go.mod h1:XzkPv3G8TdKczqoB/ydR3bxvBRdQLQNCOCEgxso/c3o=
|
github.com/gogf/gf/contrib/nosql/redis/v2 v2.7.3/go.mod h1:3GNHVmnA/dnTsMFOWQw65AsFTJBHI9xpIUc4lwyPNig=
|
||||||
github.com/gogf/gf/contrib/trace/jaeger/v2 v2.7.2 h1:YKMJMhJJjbaPhgjpH9veZpn80mwkPgPAIatSvUFTt38=
|
github.com/gogf/gf/contrib/trace/jaeger/v2 v2.7.3 h1:Zf+ZdgeB5rQeH4SGaM6XVwsZ3hnzTIDgY1/iTdQzzcg=
|
||||||
github.com/gogf/gf/contrib/trace/jaeger/v2 v2.7.2/go.mod h1:kzxWAaY5Livk2SNPNrs9PJJvxK8A7uVwd8UGwjdMEfU=
|
github.com/gogf/gf/contrib/trace/jaeger/v2 v2.7.3/go.mod h1:VLaGqNbTiEh21qvBz9XHJj8vbOpCWC38i885+6bX+y8=
|
||||||
github.com/gogf/gf/v2 v2.7.2 h1:uZDfyblasI12lZUtFd1mfxsIr8b14cd/F88DJUTCSDM=
|
github.com/gogf/gf/v2 v2.7.3 h1:0RTqeDYJOrD/FpiSsEopTs5SvYg+u6WPtS0TaXJcGoQ=
|
||||||
github.com/gogf/gf/v2 v2.7.2/go.mod h1:EBXneAg/wes86rfeh68XC0a2JBNQylmT7Sp6/8Axk88=
|
github.com/gogf/gf/v2 v2.7.3/go.mod h1:EBXneAg/wes86rfeh68XC0a2JBNQylmT7Sp6/8Axk88=
|
||||||
github.com/gogf/selfupdate v0.0.0-20231215043001-5c48c528462f h1:7xfXR/BhG3JDqO1s45n65Oyx9t4E/UqDOXep6jXdLCM=
|
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/gogf/selfupdate v0.0.0-20231215043001-5c48c528462f/go.mod h1:HnYoio6S7VaFJdryKcD/r9HgX+4QzYfr00XiXUo/xz0=
|
||||||
github.com/golang-jwt/jwt/v5 v5.2.1 h1:OuVbFODueb089Lh128TAcimifWaLhJwVflnrgM17wHk=
|
github.com/golang-jwt/jwt/v5 v5.2.1 h1:OuVbFODueb089Lh128TAcimifWaLhJwVflnrgM17wHk=
|
||||||
@ -217,11 +225,12 @@ github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+
|
|||||||
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
|
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
|
||||||
github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00 h1:l5lAOZEym3oK3SQ2HBHWsJUfbNBiTXJDeW2QDxw9AQ0=
|
github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00 h1:l5lAOZEym3oK3SQ2HBHWsJUfbNBiTXJDeW2QDxw9AQ0=
|
||||||
github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
|
github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
|
||||||
|
github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY=
|
||||||
|
github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ=
|
||||||
github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4=
|
github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4=
|
||||||
github.com/gorilla/sessions v1.2.1/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/zI+bUmuGM=
|
github.com/gorilla/sessions v1.2.1/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/zI+bUmuGM=
|
||||||
github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg=
|
github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg=
|
||||||
github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
||||||
github.com/grafov/m3u8 v0.12.0/go.mod h1:nqzOkfBiZJENr52zTVd/Dcl03yzphIMbJqkXGu+u080=
|
|
||||||
github.com/grokify/html-strip-tags-go v0.1.0 h1:03UrQLjAny8xci+R+qjCce/MYnpNXCtgzltlQbOBae4=
|
github.com/grokify/html-strip-tags-go v0.1.0 h1:03UrQLjAny8xci+R+qjCce/MYnpNXCtgzltlQbOBae4=
|
||||||
github.com/grokify/html-strip-tags-go v0.1.0/go.mod h1:ZdzgfHEzAfz9X6Xe5eBLVblWIxXfYSQ40S/VKrAOGpc=
|
github.com/grokify/html-strip-tags-go v0.1.0/go.mod h1:ZdzgfHEzAfz9X6Xe5eBLVblWIxXfYSQ40S/VKrAOGpc=
|
||||||
github.com/h2non/parth v0.0.0-20190131123155-b4df798d6542 h1:2VTzZjLZBgl62/EtslCrtky5vbi9dd7HrQPQIx6wqiw=
|
github.com/h2non/parth v0.0.0-20190131123155-b4df798d6542 h1:2VTzZjLZBgl62/EtslCrtky5vbi9dd7HrQPQIx6wqiw=
|
||||||
@ -249,6 +258,8 @@ github.com/jcmturner/gokrb5/v8 v8.4.4 h1:x1Sv4HaTpepFkXbt2IkL29DXRf8sOfZXo8eRKh6
|
|||||||
github.com/jcmturner/gokrb5/v8 v8.4.4/go.mod h1:1btQEpgT6k+unzCwX1KdWMEwPPkkgBtP+F6aCACiMrs=
|
github.com/jcmturner/gokrb5/v8 v8.4.4/go.mod h1:1btQEpgT6k+unzCwX1KdWMEwPPkkgBtP+F6aCACiMrs=
|
||||||
github.com/jcmturner/rpc/v2 v2.0.3 h1:7FXXj8Ti1IaVFpSAziCZWNzbNuZmnvw/i6CqLNdWfZY=
|
github.com/jcmturner/rpc/v2 v2.0.3 h1:7FXXj8Ti1IaVFpSAziCZWNzbNuZmnvw/i6CqLNdWfZY=
|
||||||
github.com/jcmturner/rpc/v2 v2.0.3/go.mod h1:VUJYCIDm3PVOEHw8sgt091/20OJjskO/YJki3ELg/Hc=
|
github.com/jcmturner/rpc/v2 v2.0.3/go.mod h1:VUJYCIDm3PVOEHw8sgt091/20OJjskO/YJki3ELg/Hc=
|
||||||
|
github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
|
||||||
|
github.com/joeshaw/multierror v0.0.0-20140124173710-69b34d4ec901/go.mod h1:Z86h9688Y0wesXCyonoVr47MasHilkuLMqGhRZ4Hpak=
|
||||||
github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
|
github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
|
||||||
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
|
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
|
||||||
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
|
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
|
||||||
@ -271,12 +282,12 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
|||||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
||||||
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
|
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
|
||||||
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
|
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/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY=
|
||||||
github.com/lufia/plan9stats v0.0.0-20240819163618-b1d8f4d146e7 h1:5RK988zAqB3/AN3opGfRpoQgAVqr6/A5+qRTi67VUZY=
|
github.com/lufia/plan9stats v0.0.0-20240909124753-873cd0166683 h1:7UMa6KCCMjZEMDtTVdcGu0B1GmmC7QJKiCCjyTAWQy0=
|
||||||
github.com/lufia/plan9stats v0.0.0-20240819163618-b1d8f4d146e7/go.mod h1:ilwx/Dta8jXAgpFYFvSWEMwxmbWXyiUHkd5FwyKhb5k=
|
github.com/lufia/plan9stats v0.0.0-20240909124753-873cd0166683/go.mod h1:ilwx/Dta8jXAgpFYFvSWEMwxmbWXyiUHkd5FwyKhb5k=
|
||||||
github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY=
|
github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY=
|
||||||
github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
|
github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
|
||||||
github.com/matishsiao/goInfo v0.0.0-20210923090445-da2e3fa8d45f h1:B0OD7nYl2FPQEVrw8g2uyc1lGEzNbvrKh7fspGZcbvY=
|
|
||||||
github.com/matishsiao/goInfo v0.0.0-20210923090445-da2e3fa8d45f/go.mod h1:aEt7p9Rvh67BYApmZwNDPpgircTO2kgdmDUoF/1QmwA=
|
github.com/matishsiao/goInfo v0.0.0-20210923090445-da2e3fa8d45f/go.mod h1:aEt7p9Rvh67BYApmZwNDPpgircTO2kgdmDUoF/1QmwA=
|
||||||
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA=
|
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-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg=
|
||||||
@ -338,19 +349,23 @@ github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZN
|
|||||||
github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 h1:o4JXh1EVt9k/+g42oCprj/FisM4qX9L3sZB3upGN2ZU=
|
github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 h1:o4JXh1EVt9k/+g42oCprj/FisM4qX9L3sZB3upGN2ZU=
|
||||||
github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE=
|
github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE=
|
||||||
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||||
|
github.com/prometheus/procfs v0.0.0-20190425082905-87a4384529e0/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
|
||||||
|
github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc=
|
||||||
|
github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk=
|
||||||
github.com/qiniu/dyn v1.3.0/go.mod h1:E8oERcm8TtwJiZvkQPbcAh0RL8jO1G0VXJMW3FAWdkk=
|
github.com/qiniu/dyn v1.3.0/go.mod h1:E8oERcm8TtwJiZvkQPbcAh0RL8jO1G0VXJMW3FAWdkk=
|
||||||
github.com/qiniu/go-sdk/v7 v7.21.1 h1:D/IjVOlg5pTw0jeDjqTo6H5QM73Obb1AYfPOHmIFN+Q=
|
github.com/qiniu/go-sdk/v7 v7.22.0 h1:NiRj6+beSkKsPBr4XN9OdjPJQKhERtOwOwu3HJtzcWQ=
|
||||||
github.com/qiniu/go-sdk/v7 v7.21.1/go.mod h1:8EM2awITynlem2VML2dXGHkMYP2UyECsGLOdp6yMpco=
|
github.com/qiniu/go-sdk/v7 v7.22.0/go.mod h1:44lnyCs6gflCxMUV1yTBlZhPEB4ZO6LIDHkMV8Rofms=
|
||||||
github.com/qiniu/x v1.10.5/go.mod h1:03Ni9tj+N2h2aKnAz+6N0Xfl8FwMEDRC2PAlxekASDs=
|
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 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM=
|
||||||
github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
|
github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4=
|
||||||
github.com/redis/go-redis/v9 v9.6.1 h1:HHDteefn6ZkTtY5fGUE8tj8uy85AHk6zP7CpzIAM0y4=
|
github.com/redis/go-redis/v9 v9.6.1 h1:HHDteefn6ZkTtY5fGUE8tj8uy85AHk6zP7CpzIAM0y4=
|
||||||
github.com/redis/go-redis/v9 v9.6.1/go.mod h1:0C0c6ycQsdpVNQpxb1njEQIqkx5UcsM8FJCQLgE9+RA=
|
github.com/redis/go-redis/v9 v9.6.1/go.mod h1:0C0c6ycQsdpVNQpxb1njEQIqkx5UcsM8FJCQLgE9+RA=
|
||||||
|
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
|
||||||
github.com/richardlehane/mscfb v1.0.4 h1:WULscsljNPConisD5hR0+OyZjwK46Pfyr6mPu5ZawpM=
|
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/mscfb v1.0.4/go.mod h1:YzVpcZg9czvAuhk9T+a3avCpcFPMUWm7gK3DypaEsUk=
|
||||||
github.com/richardlehane/msoleps v1.0.1/go.mod h1:BWev5JBpU9Ko2WAgmZEuiz4/u3ZYTKbjLycmwiWUfWg=
|
github.com/richardlehane/msoleps v1.0.1/go.mod h1:BWev5JBpU9Ko2WAgmZEuiz4/u3ZYTKbjLycmwiWUfWg=
|
||||||
github.com/richardlehane/msoleps v1.0.3 h1:aznSZzrwYRl3rLKRT3gUk9am7T/mLNSnJINvN0AQoVM=
|
github.com/richardlehane/msoleps v1.0.4 h1:WuESlvhX3gH2IHcd8UqyCuFY5yiq/GR/yqaSM/9/g00=
|
||||||
github.com/richardlehane/msoleps v1.0.3/go.mod h1:BWev5JBpU9Ko2WAgmZEuiz4/u3ZYTKbjLycmwiWUfWg=
|
github.com/richardlehane/msoleps v1.0.4/go.mod h1:BWev5JBpU9Ko2WAgmZEuiz4/u3ZYTKbjLycmwiWUfWg=
|
||||||
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
|
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
|
||||||
github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ=
|
github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ=
|
||||||
github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
|
github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
|
||||||
@ -398,13 +413,13 @@ github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o
|
|||||||
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
|
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
|
||||||
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
|
github.com/stretchr/testify v1.9.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.563/go.mod h1:7sCQWVkxcsR38nffDW057DRGk8mUjK1Ing/EFOK8s8Y=
|
||||||
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.993 h1:+iJMmF0q1MPyhLs0+J7CcJ47w/vq6ICsCxnV4gc0dKw=
|
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1006 h1:WX1KDLeAIhhcYMD5uqrnQ4Fv3Dmg9GPv0shNVBS/6fA=
|
||||||
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.993/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
|
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1006/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0=
|
||||||
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/kms v1.0.563/go.mod h1:uom4Nvi9W+Qkom0exYiJ9VWJjXwyxtPYTkKkaLMlfE0=
|
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/kms v1.0.563/go.mod h1:uom4Nvi9W+Qkom0exYiJ9VWJjXwyxtPYTkKkaLMlfE0=
|
||||||
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sms v1.0.993 h1:3zYeUpzNdskHZUr+NEBghvX3mPU5fNclBEhAvWG1eUU=
|
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sms v1.0.1006 h1:MOO8u4x6yuXvnBUVsHEdVSrvofKijdKP/aSxebETvuM=
|
||||||
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sms v1.0.993/go.mod h1:dVBlwaxkRoDVWQbx+ocWn3FZh1OzP3trPvgn5o8zUlE=
|
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/sms v1.0.1006/go.mod h1:WRkBZPfVh7StMaI4IFyXPzRS1HKpwTAV2AP6TjDi2q0=
|
||||||
github.com/tencentyun/cos-go-sdk-v5 v0.7.54 h1:FRamEhNBbSeggyYfWfzFejTLftgbICocSYFk4PKTSV4=
|
github.com/tencentyun/cos-go-sdk-v5 v0.7.55 h1:9DfH3umWUd0I2jdqcUxrU1kLfUPOydULNy4T9qN5PF8=
|
||||||
github.com/tencentyun/cos-go-sdk-v5 v0.7.54/go.mod h1:UN+VdbCl1hg+kKi5RXqZgaP+Boqfmk+D04GRc4XFk70=
|
github.com/tencentyun/cos-go-sdk-v5 v0.7.55/go.mod h1:8+hG+mQMuRP/OIS9d83syAvXvrMj9HhkND6Q1fLghw0=
|
||||||
github.com/tidwall/gjson v1.13.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
|
github.com/tidwall/gjson v1.13.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
|
||||||
github.com/tidwall/gjson v1.14.1/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
|
github.com/tidwall/gjson v1.14.1/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
|
||||||
github.com/tidwall/gjson v1.17.3 h1:bwWLZU7icoKRG+C+0PNwIKC6FCJO/Q3p2pZvuP0jN94=
|
github.com/tidwall/gjson v1.17.3 h1:bwWLZU7icoKRG+C+0PNwIKC6FCJO/Q3p2pZvuP0jN94=
|
||||||
@ -423,12 +438,10 @@ github.com/tklauser/numcpus v0.8.0 h1:Mx4Wwe/FjZLeQsK/6kt2EOepwwSl7SmJrK5bV/dXYg
|
|||||||
github.com/tklauser/numcpus v0.8.0/go.mod h1:ZJZlAY+dmR4eut8epnzf0u/VwodKmryxR8txiloSqBE=
|
github.com/tklauser/numcpus v0.8.0/go.mod h1:ZJZlAY+dmR4eut8epnzf0u/VwodKmryxR8txiloSqBE=
|
||||||
github.com/ufilesdk-dev/ufile-gosdk v1.0.4 h1:55/M4SvRKi9LHJVItaTn9TS806oQmKIugDtnmN5eA5E=
|
github.com/ufilesdk-dev/ufile-gosdk v1.0.4 h1:55/M4SvRKi9LHJVItaTn9TS806oQmKIugDtnmN5eA5E=
|
||||||
github.com/ufilesdk-dev/ufile-gosdk v1.0.4/go.mod h1:R5FMQxkQ+QK/9Vz+jfnJP4rZIktYrRcWmuAnbOSkROI=
|
github.com/ufilesdk-dev/ufile-gosdk v1.0.4/go.mod h1:R5FMQxkQ+QK/9Vz+jfnJP4rZIktYrRcWmuAnbOSkROI=
|
||||||
github.com/xuri/efp v0.0.0-20220407160117-ad0f7a785be8/go.mod h1:ybY/Jr0T0GTCnYjKqmdwxyxn2BQf2RcQIIvex5QldPI=
|
|
||||||
github.com/xuri/efp v0.0.0-20240408161823-9ad904a10d6d h1:llb0neMWDQe87IzJLS4Ci7psK/lVsjIS2otl+1WyRyY=
|
github.com/xuri/efp v0.0.0-20240408161823-9ad904a10d6d h1:llb0neMWDQe87IzJLS4Ci7psK/lVsjIS2otl+1WyRyY=
|
||||||
github.com/xuri/efp v0.0.0-20240408161823-9ad904a10d6d/go.mod h1:ybY/Jr0T0GTCnYjKqmdwxyxn2BQf2RcQIIvex5QldPI=
|
github.com/xuri/efp v0.0.0-20240408161823-9ad904a10d6d/go.mod h1:ybY/Jr0T0GTCnYjKqmdwxyxn2BQf2RcQIIvex5QldPI=
|
||||||
github.com/xuri/excelize/v2 v2.6.0 h1:m/aXAzSAqxgt74Nfd+sNzpzVKhTGl7+S9nbG4A57mF4=
|
github.com/xuri/excelize/v2 v2.8.1 h1:pZLMEwK8ep+CLIUWpWmvW8IWE/yxqG0I1xcN6cVMGuQ=
|
||||||
github.com/xuri/excelize/v2 v2.6.0/go.mod h1:Q1YetlHesXEKwGFfeJn7PfEZz2IvHb6wdOeYjBxVcVs=
|
github.com/xuri/excelize/v2 v2.8.1/go.mod h1:oli1E4C3Pa5RXg1TBXn4ENCXDV5JUMlBluUhG7c+CEE=
|
||||||
github.com/xuri/nfp v0.0.0-20220409054826-5e722a1d9e22/go.mod h1:WwHg+CVyzlv/TX9xqBFXEZAuxOPxn2k1GNHwG41IIUQ=
|
|
||||||
github.com/xuri/nfp v0.0.0-20240318013403-ab9948c2c4a7 h1:hPVCafDV85blFTabnqKgNhDCkJX25eik94Si9cTER4A=
|
github.com/xuri/nfp v0.0.0-20240318013403-ab9948c2c4a7 h1:hPVCafDV85blFTabnqKgNhDCkJX25eik94Si9cTER4A=
|
||||||
github.com/xuri/nfp v0.0.0-20240318013403-ab9948c2c4a7/go.mod h1:WwHg+CVyzlv/TX9xqBFXEZAuxOPxn2k1GNHwG41IIUQ=
|
github.com/xuri/nfp v0.0.0-20240318013403-ab9948c2c4a7/go.mod h1:WwHg+CVyzlv/TX9xqBFXEZAuxOPxn2k1GNHwG41IIUQ=
|
||||||
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||||
@ -440,16 +453,16 @@ github.com/yuin/gopher-lua v0.0.0-20220504180219-658193537a64 h1:5mLPGnFdSsevFRF
|
|||||||
github.com/yuin/gopher-lua v0.0.0-20220504180219-658193537a64/go.mod h1:GBR0iDaNXjAgGg9zfCvksxSRnQx76gclCIb7kdAd1Pw=
|
github.com/yuin/gopher-lua v0.0.0-20220504180219-658193537a64/go.mod h1:GBR0iDaNXjAgGg9zfCvksxSRnQx76gclCIb7kdAd1Pw=
|
||||||
github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0=
|
github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0=
|
||||||
github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
|
github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
|
||||||
go.opentelemetry.io/otel v1.29.0 h1:PdomN/Al4q/lN6iBJEN3AwPvUiHPMlt93c8bqTG5Llw=
|
go.opentelemetry.io/otel v1.30.0 h1:F2t8sK4qf1fAmY9ua4ohFS/K+FUuOPemHUIXHtktrts=
|
||||||
go.opentelemetry.io/otel v1.29.0/go.mod h1:N/WtXPs1CNCUEx+Agz5uouwCba+i+bJGFicT8SR4NP8=
|
go.opentelemetry.io/otel v1.30.0/go.mod h1:tFw4Br9b7fOS+uEao81PJjVMjW/5fvNCbpsDIXqP0pc=
|
||||||
go.opentelemetry.io/otel/exporters/jaeger v1.17.0 h1:D7UpUy2Xc2wsi1Ras6V40q806WM07rqoCWzXu7Sqy+4=
|
go.opentelemetry.io/otel/exporters/jaeger v1.17.0 h1:D7UpUy2Xc2wsi1Ras6V40q806WM07rqoCWzXu7Sqy+4=
|
||||||
go.opentelemetry.io/otel/exporters/jaeger v1.17.0/go.mod h1:nPCqOnEH9rNLKqH/+rrUjiMzHJdV1BlpKcTwRTyKkKI=
|
go.opentelemetry.io/otel/exporters/jaeger v1.17.0/go.mod h1:nPCqOnEH9rNLKqH/+rrUjiMzHJdV1BlpKcTwRTyKkKI=
|
||||||
go.opentelemetry.io/otel/metric v1.29.0 h1:vPf/HFWTNkPu1aYeIsc98l4ktOQaL6LeSoeV2g+8YLc=
|
go.opentelemetry.io/otel/metric v1.30.0 h1:4xNulvn9gjzo4hjg+wzIKG7iNFEaBMX00Qd4QIZs7+w=
|
||||||
go.opentelemetry.io/otel/metric v1.29.0/go.mod h1:auu/QWieFVWx+DmQOUMgj0F8LHWdgalxXqvp7BII/W8=
|
go.opentelemetry.io/otel/metric v1.30.0/go.mod h1:aXTfST94tswhWEb+5QjlSqG+cZlmyXy/u8jFpor3WqQ=
|
||||||
go.opentelemetry.io/otel/sdk v1.29.0 h1:vkqKjk7gwhS8VaWb0POZKmIEDimRCMsopNYnriHyryo=
|
go.opentelemetry.io/otel/sdk v1.30.0 h1:cHdik6irO49R5IysVhdn8oaiR9m8XluDaJAs4DfOrYE=
|
||||||
go.opentelemetry.io/otel/sdk v1.29.0/go.mod h1:pM8Dx5WKnvxLCb+8lG1PRNIDxu9g9b9g59Qr7hfAAok=
|
go.opentelemetry.io/otel/sdk v1.30.0/go.mod h1:p14X4Ok8S+sygzblytT1nqG98QG2KYKv++HE0LY/mhg=
|
||||||
go.opentelemetry.io/otel/trace v1.29.0 h1:J/8ZNK4XgR7a21DZUAsbF8pZ5Jcw1VhACmnYt39JTi4=
|
go.opentelemetry.io/otel/trace v1.30.0 h1:7UBkkYzeg3C7kQX8VAidWh2biiQbtAKjyIML8dQ9wmc=
|
||||||
go.opentelemetry.io/otel/trace v1.29.0/go.mod h1:eHl3w0sp3paPkYstJOmAimxhiFXPg+MMTlEh3nsQgWQ=
|
go.opentelemetry.io/otel/trace v1.30.0/go.mod h1:5EyKqTzzmyqB9bwtCCq6pDLktPK6fmGf/Dph+8VI02o=
|
||||||
go.uber.org/atomic v1.5.1/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
|
go.uber.org/atomic v1.5.1/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ=
|
||||||
go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE=
|
go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE=
|
||||||
go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0=
|
go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0=
|
||||||
@ -460,21 +473,17 @@ golang.org/x/crypto v0.0.0-20191219195013-becbf705a915/go.mod h1:LzIPMQfyMNhhGPh
|
|||||||
golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||||
golang.org/x/crypto v0.0.0-20201012173705-84dcc777aaee/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
golang.org/x/crypto v0.0.0-20201012173705-84dcc777aaee/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||||
golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
|
||||||
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
|
||||||
golang.org/x/crypto v0.0.0-20220408190544-5352b0902921/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
|
||||||
golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
||||||
golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw=
|
|
||||||
golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58=
|
golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58=
|
||||||
golang.org/x/crypto v0.10.0/go.mod h1:o4eNf7Ede1fv+hwOwZsTHl9EsPFO6q6ZvYR8vYfY45I=
|
golang.org/x/crypto v0.10.0/go.mod h1:o4eNf7Ede1fv+hwOwZsTHl9EsPFO6q6ZvYR8vYfY45I=
|
||||||
golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg=
|
golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg=
|
||||||
golang.org/x/crypto v0.26.0 h1:RrRspgV4mU+YwB4FYnuBoKsUapNIL5cohGAmSH3azsw=
|
golang.org/x/crypto v0.27.0 h1:GXm2NjJrPaiv/h1tb2UH8QfgC/hOf/+z0p6PT8o1w7A=
|
||||||
golang.org/x/crypto v0.26.0/go.mod h1:GY7jblb9wI+FOo5y8/S2oY4zWP07AkOJ4+jxCqdqn54=
|
golang.org/x/crypto v0.27.0/go.mod h1:1Xngt8kV6Dvbssa53Ziq6Eqn0HqbZi5Z6R0ZpwQzt70=
|
||||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||||
golang.org/x/image v0.0.0-20211028202545-6944b10bf410/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM=
|
|
||||||
golang.org/x/image v0.13.0/go.mod h1:6mmbMOeV28HuMTgA6OSRkdXKYw/t5W9Uwn2Yv1r3Yxk=
|
golang.org/x/image v0.13.0/go.mod h1:6mmbMOeV28HuMTgA6OSRkdXKYw/t5W9Uwn2Yv1r3Yxk=
|
||||||
golang.org/x/image v0.19.0 h1:D9FX4QWkLfkeqaC62SonffIIuYdOk/UE2XKUBgRIBIQ=
|
golang.org/x/image v0.20.0 h1:7cVCUjQwfL18gyBJOmYvptfSHS8Fb3YUDtfLIZ7Nbpw=
|
||||||
golang.org/x/image v0.19.0/go.mod h1:y0zrRqlQRWQ5PXaYCOMLTW2fpsxZ8Qh9I/ohnInJEys=
|
golang.org/x/image v0.20.0/go.mod h1:0a88To4CYVBAHp5FXJm8o7QbUl37Vd85ply1vyD8auM=
|
||||||
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
||||||
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
|
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
|
||||||
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
|
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
|
||||||
@ -482,10 +491,11 @@ golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHl
|
|||||||
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||||
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||||
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||||
|
golang.org/x/mod v0.6.0-dev/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro=
|
||||||
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
||||||
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
|
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
|
||||||
golang.org/x/mod v0.20.0 h1:utOm6MM3R3dnawAiJgn0y+xvuYRsm1RKM/4giyfDgV0=
|
golang.org/x/mod v0.21.0 h1:vvrHzRwRfVKSiLrG+d4FMl/Qi4ukBCE6kZlTUkDYRT0=
|
||||||
golang.org/x/mod v0.20.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
|
golang.org/x/mod v0.21.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY=
|
||||||
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
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-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
@ -503,19 +513,18 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v
|
|||||||
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
|
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
|
||||||
golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk=
|
golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk=
|
||||||
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||||
golang.org/x/net v0.0.0-20220407224826-aac1ed45d8e3/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
|
|
||||||
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
|
||||||
golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco=
|
|
||||||
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
||||||
golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
|
||||||
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
|
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
|
||||||
golang.org/x/net v0.11.0/go.mod h1:2L/ixqYpgIVXmeoSA/4Lu7BzTG4KIyPIryS4IsOd1oQ=
|
golang.org/x/net v0.11.0/go.mod h1:2L/ixqYpgIVXmeoSA/4Lu7BzTG4KIyPIryS4IsOd1oQ=
|
||||||
golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY=
|
golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY=
|
||||||
golang.org/x/net v0.28.0 h1:a9JDOJc5GMUJ0+UDqmLT86WiEy7iWyIhz8gz8E4e5hE=
|
golang.org/x/net v0.29.0 h1:5ORfpBpCs4HzDYoodCDBbwHzdR5UrLBZ3sOnUJmFoHo=
|
||||||
golang.org/x/net v0.28.0/go.mod h1:yqtgsTWOOnlGLG9GFRrK3++bGOUEkNBoHZc8MEDWPNg=
|
golang.org/x/net v0.29.0/go.mod h1:gLkgy8jTGERgjzMic6DS9+SP0ajcu6Xu3Orq/SpETg0=
|
||||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
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-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
|
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
@ -531,6 +540,7 @@ golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5h
|
|||||||
golang.org/x/sys v0.0.0-20190204203706-41f3e6584952/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20190204203706-41f3e6584952/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
golang.org/x/sys v0.0.0-20190425145619-16072639606e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
@ -546,7 +556,6 @@ golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7w
|
|||||||
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
|
||||||
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
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-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
@ -557,13 +566,11 @@ 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.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
|
||||||
golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||||
golang.org/x/sys v0.24.0 h1:Twjiwq9dn6R1fQcyiK+wQyHWfaz/BJB+YIpzU/Cv3Xg=
|
golang.org/x/sys v0.25.0 h1:r+8e+loiHxRqhXVl6ML1nO3l1+oFoWbnlu2Ehimmi34=
|
||||||
golang.org/x/sys v0.24.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
golang.org/x/sys v0.25.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||||
golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
|
||||||
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
|
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
|
||||||
golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
|
golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
|
||||||
golang.org/x/term v0.9.0/go.mod h1:M6DEAAIenWoTxdKrOltXcmDY3rSplQUkrvaDU5FcQyo=
|
golang.org/x/term v0.9.0/go.mod h1:M6DEAAIenWoTxdKrOltXcmDY3rSplQUkrvaDU5FcQyo=
|
||||||
@ -573,14 +580,13 @@ 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=
|
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||||
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
|
||||||
golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
|
||||||
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
|
||||||
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
|
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
|
||||||
golang.org/x/text v0.10.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
|
golang.org/x/text v0.10.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
|
||||||
golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
|
golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
|
||||||
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
|
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
|
||||||
golang.org/x/text v0.17.0 h1:XtiM5bkSOt+ewxlOE/aE/AKEHibwj/6gvWMl9Rsh0Qc=
|
golang.org/x/text v0.18.0 h1:XvMDiNzPAl0jr17s6W9lcaIhGUfUORdGCNsuLmPG224=
|
||||||
golang.org/x/text v0.17.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY=
|
golang.org/x/text v0.18.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY=
|
||||||
golang.org/x/time v0.6.0 h1:eTDhh4ZXt5Qf0augr54TN6suAUudPcawVZeIAPU7D4U=
|
golang.org/x/time v0.6.0 h1:eTDhh4ZXt5Qf0augr54TN6suAUudPcawVZeIAPU7D4U=
|
||||||
golang.org/x/time v0.6.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
|
golang.org/x/time v0.6.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
|
||||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
@ -597,8 +603,8 @@ golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4f
|
|||||||
golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
||||||
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
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.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
|
||||||
golang.org/x/tools v0.24.0 h1:J1shsA93PJUEVaUSaay7UXAyE8aimq3GW0pjlolpa24=
|
golang.org/x/tools v0.25.0 h1:oFU9pkj/iJgs+0DT+VMHrx+oBKs/LJMV+Uvg78sl+fE=
|
||||||
golang.org/x/tools v0.24.0/go.mod h1:YhNqVBIfWHdzvTLs0d8LCuMhkKUgSUKldakyV7W/WDQ=
|
golang.org/x/tools v0.25.0/go.mod h1:/vtpO8WL1N9cQC3FN5zPqb//fRXskFHbLKk4OW1Q7rg=
|
||||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
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-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
@ -636,6 +642,8 @@ gopkg.in/natefinch/lumberjack.v2 v2.2.1 h1:bBRl1b0OH9s/DuPhuXpNl+VtCaJXFZ5/uEFST
|
|||||||
gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc=
|
gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc=
|
||||||
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
|
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
|
||||||
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
|
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
|
||||||
|
gopkg.in/yaml.v1 v1.0.0-20140924161607-9f9df34309c0/go.mod h1:WDnlLJ4WF5VGsH/HVa3CI79GS0ol3YnhVnKP89i0kNg=
|
||||||
|
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
@ -648,5 +656,11 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
|||||||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||||
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||||
|
howett.net/plist v0.0.0-20181124034731-591f970eefbb/go.mod h1:vMygbs4qMhSZSc4lCUl2OEE+rDiIIJAIdR4m7MiMcm0=
|
||||||
|
howett.net/plist v1.0.1 h1:37GdZ8tP09Q35o9ych3ehygcsL+HqKSwzctveSlarvM=
|
||||||
|
howett.net/plist v1.0.1/go.mod h1:lqaXoTrLY4hg8tnEzNru53gicrbv7rrk+2xJA/7hw9g=
|
||||||
|
modernc.org/fileutil v1.3.0 h1:gQ5SIzK3H9kdfai/5x41oQiKValumqNTDXMvKo62HvE=
|
||||||
|
modernc.org/fileutil v1.3.0/go.mod h1:XatxS8fZi3pS8/hKG2GH/ArUogfxjpEKs3Ku3aK4JyQ=
|
||||||
|
modernc.org/mathutil v1.6.0/go.mod h1:Ui5Q9q1TR2gFm0AQRqQUaBWFLAhQpCwNcuhBOSedWPo=
|
||||||
stathat.com/c/consistent v1.0.0 h1:ezyc51EGcRPJUxfHGSgJjWzJdj3NiMU9pNfLNGiXV0c=
|
stathat.com/c/consistent v1.0.0 h1:ezyc51EGcRPJUxfHGSgJjWzJdj3NiMU9pNfLNGiXV0c=
|
||||||
stathat.com/c/consistent v1.0.0/go.mod h1:QkzMWzcbB+yQBL2AttO6sgsQS/JSTapcDISJalmCDS0=
|
stathat.com/c/consistent v1.0.0/go.mod h1:QkzMWzcbB+yQBL2AttO6sgsQS/JSTapcDISJalmCDS0=
|
||||||
|
@ -48,7 +48,7 @@ func (c *cCash) List(ctx context.Context, req *cash.ListReq) (res *cash.ListRes,
|
|||||||
func (c *cCash) Apply(ctx context.Context, req *cash.ApplyReq) (res *cash.ApplyRes, err error) {
|
func (c *cCash) Apply(ctx context.Context, req *cash.ApplyReq) (res *cash.ApplyRes, err error) {
|
||||||
err = service.AdminCash().Apply(ctx, &adminin.CashApplyInp{
|
err = service.AdminCash().Apply(ctx, &adminin.CashApplyInp{
|
||||||
Money: req.Money,
|
Money: req.Money,
|
||||||
MemberId: contexts.GetUserId(ctx),
|
MemberId: contexts.GetUserId[any](ctx),
|
||||||
})
|
})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -46,7 +46,7 @@ func (c *cMember) UpdateProfile(ctx context.Context, req *member.UpdateProfileRe
|
|||||||
|
|
||||||
// UpdatePwd 修改登录密码
|
// UpdatePwd 修改登录密码
|
||||||
func (c *cMember) UpdatePwd(ctx context.Context, req *member.UpdatePwdReq) (res *member.UpdatePwdRes, err error) {
|
func (c *cMember) UpdatePwd(ctx context.Context, req *member.UpdatePwdReq) (res *member.UpdatePwdRes, err error) {
|
||||||
var memberId = contexts.Get(ctx).User.Id
|
var memberId = contexts.Get[any](ctx).User.Id
|
||||||
if memberId <= 0 {
|
if memberId <= 0 {
|
||||||
err = gerror.New("获取用户信息失败!")
|
err = gerror.New("获取用户信息失败!")
|
||||||
return
|
return
|
||||||
|
@ -46,7 +46,7 @@ func (c *cRole) Delete(ctx context.Context, req *role.DeleteReq) (res *role.Dele
|
|||||||
|
|
||||||
// Dynamic 动态路由
|
// Dynamic 动态路由
|
||||||
func (c *cRole) Dynamic(ctx context.Context, _ *role.DynamicReq) (res *role.DynamicRes, err error) {
|
func (c *cRole) Dynamic(ctx context.Context, _ *role.DynamicReq) (res *role.DynamicRes, err error) {
|
||||||
return service.AdminMenu().GetMenuList(ctx, contexts.GetUserId(ctx))
|
return service.AdminMenu().GetMenuList(ctx, contexts.GetUserId[any](ctx))
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetPermissions 获取指定角色权限
|
// GetPermissions 获取指定角色权限
|
||||||
|
@ -44,7 +44,7 @@ func (c *cEms) SendTest(ctx context.Context, req *common.SendTestEmailReq) (res
|
|||||||
// SendBindEms 发送换绑邮件
|
// SendBindEms 发送换绑邮件
|
||||||
func (c *cEms) SendBindEms(ctx context.Context, _ *common.SendBindEmsReq) (res *common.SendBindEmsRes, err error) {
|
func (c *cEms) SendBindEms(ctx context.Context, _ *common.SendBindEmsReq) (res *common.SendBindEmsRes, err error) {
|
||||||
var (
|
var (
|
||||||
memberId = contexts.GetUserId(ctx)
|
memberId = contexts.GetUserId[any](ctx)
|
||||||
models *entity.AdminMember
|
models *entity.AdminMember
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -143,6 +143,6 @@ func (c *cSite) MobileLogin(ctx context.Context, req *common.MobileLoginReq) (re
|
|||||||
|
|
||||||
// Logout 注销登录
|
// Logout 注销登录
|
||||||
func (c *cSite) Logout(ctx context.Context, _ *common.LoginLogoutReq) (res *common.LoginLogoutRes, err error) {
|
func (c *cSite) Logout(ctx context.Context, _ *common.LoginLogoutReq) (res *common.LoginLogoutRes, err error) {
|
||||||
err = token.Logout(ghttp.RequestFromCtx(ctx))
|
err = token.Logout[any](ghttp.RequestFromCtx(ctx))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -30,7 +30,7 @@ func (c *cSms) SendTest(ctx context.Context, req *common.SendTestSmsReq) (res *c
|
|||||||
// SendBindSms 发送换绑短信
|
// SendBindSms 发送换绑短信
|
||||||
func (c *cSms) SendBindSms(ctx context.Context, _ *common.SendBindSmsReq) (res *common.SendBindSmsRes, err error) {
|
func (c *cSms) SendBindSms(ctx context.Context, _ *common.SendBindSmsReq) (res *common.SendBindSmsRes, err error) {
|
||||||
var (
|
var (
|
||||||
memberId = contexts.GetUserId(ctx)
|
memberId = contexts.GetUserId[any](ctx)
|
||||||
models *entity.AdminMember
|
models *entity.AdminMember
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -14,25 +14,25 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// Init 初始化上下文对象指针到上下文对象中,以便后续的请求流程中可以修改
|
// Init 初始化上下文对象指针到上下文对象中,以便后续的请求流程中可以修改
|
||||||
func Init(r *ghttp.Request, customCtx *model.Context) {
|
func Init[T any](r *ghttp.Request, customCtx *model.Context[T]) {
|
||||||
r.SetCtxVar(consts.ContextHTTPKey, customCtx)
|
r.SetCtxVar(consts.ContextHTTPKey, customCtx)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get 获得上下文变量,如果没有设置,那么返回nil
|
// Get 获得上下文变量,如果没有设置,那么返回nil
|
||||||
func Get(ctx context.Context) *model.Context {
|
func Get[T any](ctx context.Context) *model.Context[T] {
|
||||||
value := ctx.Value(consts.ContextHTTPKey)
|
value := ctx.Value(consts.ContextHTTPKey)
|
||||||
if value == nil {
|
if value == nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
if localCtx, ok := value.(*model.Context); ok {
|
if localCtx, ok := value.(*model.Context[T]); ok {
|
||||||
return localCtx
|
return localCtx
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetUser 将上下文信息设置到上下文请求中,注意是完整覆盖
|
// SetUser 将上下文信息设置到上下文请求中,注意是完整覆盖
|
||||||
func SetUser(ctx context.Context, user *model.Identity) {
|
func SetUser[T any](ctx context.Context, user *model.Identity) {
|
||||||
c := Get(ctx)
|
c := Get[T](ctx)
|
||||||
if c == nil {
|
if c == nil {
|
||||||
g.Log().Warning(ctx, "contexts.SetUser, c == nil ")
|
g.Log().Warning(ctx, "contexts.SetUser, c == nil ")
|
||||||
return
|
return
|
||||||
@ -41,8 +41,8 @@ func SetUser(ctx context.Context, user *model.Identity) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// SetResponse 设置组件响应 用于访问日志使用
|
// SetResponse 设置组件响应 用于访问日志使用
|
||||||
func SetResponse(ctx context.Context, response *model.Response) {
|
func SetResponse[T any](ctx context.Context, response *model.Response[T]) {
|
||||||
c := Get(ctx)
|
c := Get[T](ctx)
|
||||||
if c == nil {
|
if c == nil {
|
||||||
g.Log().Warning(ctx, "contexts.SetResponse, c == nil ")
|
g.Log().Warning(ctx, "contexts.SetResponse, c == nil ")
|
||||||
return
|
return
|
||||||
@ -51,8 +51,8 @@ func SetResponse(ctx context.Context, response *model.Response) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// SetModule 设置应用模块
|
// SetModule 设置应用模块
|
||||||
func SetModule(ctx context.Context, module string) {
|
func SetModule[T any](ctx context.Context, module string) {
|
||||||
c := Get(ctx)
|
c := Get[T](ctx)
|
||||||
if c == nil {
|
if c == nil {
|
||||||
g.Log().Warning(ctx, "contexts.SetModule, c == nil ")
|
g.Log().Warning(ctx, "contexts.SetModule, c == nil ")
|
||||||
return
|
return
|
||||||
@ -61,8 +61,8 @@ func SetModule(ctx context.Context, module string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// GetUser 获取用户信息
|
// GetUser 获取用户信息
|
||||||
func GetUser(ctx context.Context) *model.Identity {
|
func GetUser[T any](ctx context.Context) *model.Identity {
|
||||||
c := Get(ctx)
|
c := Get[T](ctx)
|
||||||
if c == nil {
|
if c == nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
@ -70,8 +70,8 @@ func GetUser(ctx context.Context) *model.Identity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// GetUserId 获取用户ID
|
// GetUserId 获取用户ID
|
||||||
func GetUserId(ctx context.Context) int64 {
|
func GetUserId[T any](ctx context.Context) int64 {
|
||||||
user := GetUser(ctx)
|
user := GetUser[T](ctx)
|
||||||
if user == nil {
|
if user == nil {
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
@ -79,8 +79,8 @@ func GetUserId(ctx context.Context) int64 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// GetRoleId 获取用户角色ID
|
// GetRoleId 获取用户角色ID
|
||||||
func GetRoleId(ctx context.Context) int64 {
|
func GetRoleId[T any](ctx context.Context) int64 {
|
||||||
user := GetUser(ctx)
|
user := GetUser[T](ctx)
|
||||||
if user == nil {
|
if user == nil {
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
@ -88,8 +88,8 @@ func GetRoleId(ctx context.Context) int64 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// GetRoleKey 获取用户角色唯一编码
|
// GetRoleKey 获取用户角色唯一编码
|
||||||
func GetRoleKey(ctx context.Context) string {
|
func GetRoleKey[T any](ctx context.Context) string {
|
||||||
user := GetUser(ctx)
|
user := GetUser[T](ctx)
|
||||||
if user == nil {
|
if user == nil {
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
@ -97,8 +97,8 @@ func GetRoleKey(ctx context.Context) string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// GetDeptType 获取用户部门类型
|
// GetDeptType 获取用户部门类型
|
||||||
func GetDeptType(ctx context.Context) string {
|
func GetDeptType[T any](ctx context.Context) string {
|
||||||
user := GetUser(ctx)
|
user := GetUser[T](ctx)
|
||||||
if user == nil {
|
if user == nil {
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
@ -106,28 +106,28 @@ func GetDeptType(ctx context.Context) string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// IsCompanyDept 是否为公司部门
|
// IsCompanyDept 是否为公司部门
|
||||||
func IsCompanyDept(ctx context.Context) bool {
|
func IsCompanyDept[T any](ctx context.Context) bool {
|
||||||
return GetDeptType(ctx) == consts.DeptTypeCompany
|
return GetDeptType[T](ctx) == consts.DeptTypeCompany
|
||||||
}
|
}
|
||||||
|
|
||||||
// IsTenantDept 是否为租户部门
|
// IsTenantDept 是否为租户部门
|
||||||
func IsTenantDept(ctx context.Context) bool {
|
func IsTenantDept[T any](ctx context.Context) bool {
|
||||||
return GetDeptType(ctx) == consts.DeptTypeTenant
|
return GetDeptType[T](ctx) == consts.DeptTypeTenant
|
||||||
}
|
}
|
||||||
|
|
||||||
// IsMerchantDept 是否为商户部门
|
// IsMerchantDept 是否为商户部门
|
||||||
func IsMerchantDept(ctx context.Context) bool {
|
func IsMerchantDept[T any](ctx context.Context) bool {
|
||||||
return GetDeptType(ctx) == consts.DeptTypeMerchant
|
return GetDeptType[T](ctx) == consts.DeptTypeMerchant
|
||||||
}
|
}
|
||||||
|
|
||||||
// IsUserDept 是否为普通用户部门
|
// IsUserDept 是否为普通用户部门
|
||||||
func IsUserDept(ctx context.Context) bool {
|
func IsUserDept[T any](ctx context.Context) bool {
|
||||||
return GetDeptType(ctx) == consts.DeptTypeUser
|
return GetDeptType[T](ctx) == consts.DeptTypeUser
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetModule 获取应用模块
|
// GetModule 获取应用模块
|
||||||
func GetModule(ctx context.Context) string {
|
func GetModule[T any](ctx context.Context) string {
|
||||||
c := Get(ctx)
|
c := Get[T](ctx)
|
||||||
if c == nil {
|
if c == nil {
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
@ -135,59 +135,59 @@ func GetModule(ctx context.Context) string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// SetAddonName 设置插件信息
|
// SetAddonName 设置插件信息
|
||||||
func SetAddonName(ctx context.Context, name string) {
|
func SetAddonName[T any](ctx context.Context, name string) {
|
||||||
c := Get(ctx)
|
c := Get[T](ctx)
|
||||||
if c == nil {
|
if c == nil {
|
||||||
g.Log().Warning(ctx, "contexts.SetAddonName, c == nil ")
|
g.Log().Warning(ctx, "contexts.SetAddonName, c == nil ")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
Get(ctx).AddonName = name
|
Get[T](ctx).AddonName = name
|
||||||
}
|
}
|
||||||
|
|
||||||
// IsAddonRequest 是否为插件模块请求
|
// IsAddonRequest 是否为插件模块请求
|
||||||
func IsAddonRequest(ctx context.Context) bool {
|
func IsAddonRequest[T any](ctx context.Context) bool {
|
||||||
c := Get(ctx)
|
c := Get[T](ctx)
|
||||||
if c == nil {
|
if c == nil {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
return GetAddonName(ctx) != ""
|
return GetAddonName[T](ctx) != ""
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetAddonName 获取插件信息
|
// GetAddonName 获取插件信息
|
||||||
func GetAddonName(ctx context.Context) string {
|
func GetAddonName[T any](ctx context.Context) string {
|
||||||
c := Get(ctx)
|
c := Get[T](ctx)
|
||||||
if c == nil {
|
if c == nil {
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
return Get(ctx).AddonName
|
return Get[T](ctx).AddonName
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetData 设置额外数据
|
// SetData 设置额外数据
|
||||||
func SetData(ctx context.Context, k string, v interface{}) {
|
func SetData[T any](ctx context.Context, k string, v interface{}) {
|
||||||
c := Get(ctx)
|
c := Get[T](ctx)
|
||||||
if c == nil {
|
if c == nil {
|
||||||
g.Log().Warning(ctx, "contexts.SetData, c == nil ")
|
g.Log().Warning(ctx, "contexts.SetData, c == nil ")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
Get(ctx).Data[k] = v
|
Get[T](ctx).Data[k] = v
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetDataMap 设置额外数据
|
// SetDataMap 设置额外数据
|
||||||
func SetDataMap(ctx context.Context, vs g.Map) {
|
func SetDataMap[T any](ctx context.Context, vs g.Map) {
|
||||||
c := Get(ctx)
|
c := Get[T](ctx)
|
||||||
if c == nil {
|
if c == nil {
|
||||||
g.Log().Warning(ctx, "contexts.SetData, c == nil ")
|
g.Log().Warning(ctx, "contexts.SetData, c == nil ")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
for k, v := range vs {
|
for k, v := range vs {
|
||||||
Get(ctx).Data[k] = v
|
Get[T](ctx).Data[k] = v
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetData 获取额外数据
|
// GetData 获取额外数据
|
||||||
func GetData(ctx context.Context) g.Map {
|
func GetData[T any](ctx context.Context) g.Map {
|
||||||
c := Get(ctx)
|
c := Get[T](ctx)
|
||||||
if c == nil {
|
if c == nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -19,7 +19,7 @@ import (
|
|||||||
|
|
||||||
// FilterAuth 过滤数据权限
|
// FilterAuth 过滤数据权限
|
||||||
// 通过上下文中的用户角色权限和表中是否含有需要过滤的字段附加查询条件
|
// 通过上下文中的用户角色权限和表中是否含有需要过滤的字段附加查询条件
|
||||||
func FilterAuth(m *gdb.Model) *gdb.Model {
|
func FilterAuth[T any](m *gdb.Model) *gdb.Model {
|
||||||
var (
|
var (
|
||||||
needAuth bool
|
needAuth bool
|
||||||
filterField string
|
filterField string
|
||||||
@ -40,16 +40,16 @@ func FilterAuth(m *gdb.Model) *gdb.Model {
|
|||||||
if !needAuth {
|
if !needAuth {
|
||||||
return m
|
return m
|
||||||
}
|
}
|
||||||
return m.Handler(FilterAuthWithField(filterField))
|
return m.Handler(FilterAuthWithField[T](filterField))
|
||||||
}
|
}
|
||||||
|
|
||||||
// FilterAuthWithField 过滤数据权限,设置指定字段
|
// FilterAuthWithField 过滤数据权限,设置指定字段
|
||||||
func FilterAuthWithField(filterField string) func(m *gdb.Model) *gdb.Model {
|
func FilterAuthWithField[T any](filterField string) func(m *gdb.Model) *gdb.Model {
|
||||||
return func(m *gdb.Model) *gdb.Model {
|
return func(m *gdb.Model) *gdb.Model {
|
||||||
var (
|
var (
|
||||||
role *entity.AdminRole
|
role *entity.AdminRole
|
||||||
ctx = m.GetCtx()
|
ctx = m.GetCtx()
|
||||||
co = contexts.Get(ctx)
|
co = contexts.Get[T](ctx)
|
||||||
)
|
)
|
||||||
|
|
||||||
if co == nil || co.User == nil {
|
if co == nil || co.User == nil {
|
||||||
|
@ -30,13 +30,13 @@ func Model(m *gdb.Model, opt ...*Option) *gdb.Model {
|
|||||||
option = DefaultOption
|
option = DefaultOption
|
||||||
}
|
}
|
||||||
if option.FilterAuth {
|
if option.FilterAuth {
|
||||||
m = m.Handler(FilterAuth)
|
m = m.Handler(FilterAuth[any])
|
||||||
}
|
}
|
||||||
if option.ForceCache {
|
if option.ForceCache {
|
||||||
m = m.Handler(ForceCache)
|
m = m.Handler(ForceCache)
|
||||||
}
|
}
|
||||||
if option.FilterTenant {
|
if option.FilterTenant {
|
||||||
m = m.Handler(FilterTenant)
|
m = m.Handler(FilterTenant[any])
|
||||||
}
|
}
|
||||||
return m
|
return m
|
||||||
}
|
}
|
||||||
|
@ -14,7 +14,7 @@ import (
|
|||||||
|
|
||||||
// FilterTenant 过滤多租户数据权限
|
// FilterTenant 过滤多租户数据权限
|
||||||
// 根据部门类型识别当前租户、商户、用户身份,过滤只属于自己的数据
|
// 根据部门类型识别当前租户、商户、用户身份,过滤只属于自己的数据
|
||||||
func FilterTenant(m *gdb.Model) *gdb.Model {
|
func FilterTenant[T any](m *gdb.Model) *gdb.Model {
|
||||||
var (
|
var (
|
||||||
needAuth bool
|
needAuth bool
|
||||||
filterField string
|
filterField string
|
||||||
@ -23,19 +23,19 @@ func FilterTenant(m *gdb.Model) *gdb.Model {
|
|||||||
)
|
)
|
||||||
|
|
||||||
// 租户
|
// 租户
|
||||||
if contexts.IsTenantDept(ctx) && gstr.InArray(fields, "tenant_id") {
|
if contexts.IsTenantDept[T](ctx) && gstr.InArray(fields, "tenant_id") {
|
||||||
needAuth = true
|
needAuth = true
|
||||||
filterField = "tenant_id"
|
filterField = "tenant_id"
|
||||||
}
|
}
|
||||||
|
|
||||||
// 商户
|
// 商户
|
||||||
if contexts.IsMerchantDept(ctx) && gstr.InArray(fields, "merchant_id") {
|
if contexts.IsMerchantDept[T](ctx) && gstr.InArray(fields, "merchant_id") {
|
||||||
needAuth = true
|
needAuth = true
|
||||||
filterField = "merchant_id"
|
filterField = "merchant_id"
|
||||||
}
|
}
|
||||||
|
|
||||||
// 用户
|
// 用户
|
||||||
if contexts.IsUserDept(ctx) && gstr.InArray(fields, "user_id") {
|
if contexts.IsUserDept[T](ctx) && gstr.InArray(fields, "user_id") {
|
||||||
needAuth = true
|
needAuth = true
|
||||||
filterField = "user_id"
|
filterField = "user_id"
|
||||||
}
|
}
|
||||||
@ -44,6 +44,6 @@ func FilterTenant(m *gdb.Model) *gdb.Model {
|
|||||||
return m
|
return m
|
||||||
}
|
}
|
||||||
|
|
||||||
m = m.Where(filterField, contexts.GetUserId(ctx))
|
m = m.Where(filterField, contexts.GetUserId[T](ctx))
|
||||||
return m
|
return m
|
||||||
}
|
}
|
||||||
|
@ -165,7 +165,7 @@ func (h *hookSaveTenant) checkRelationSingle(idx any, relation, limitType string
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
relationId := contexts.GetUserId(h.ctx)
|
relationId := contexts.GetUserId[any](h.ctx)
|
||||||
switch relation {
|
switch relation {
|
||||||
case consts.DeptTypeTenant:
|
case consts.DeptTypeTenant:
|
||||||
if ok = tr.TenantId == relationId; !ok {
|
if ok = tr.TenantId == relationId; !ok {
|
||||||
@ -210,8 +210,8 @@ func (h *hookSaveTenant) handle() (result sql.Result, err error) {
|
|||||||
var (
|
var (
|
||||||
update = make(g.Map)
|
update = make(g.Map)
|
||||||
fields = h.getFields()
|
fields = h.getFields()
|
||||||
memberId = contexts.GetUserId(h.ctx)
|
memberId = contexts.GetUserId[any](h.ctx)
|
||||||
deptType = contexts.GetDeptType(h.ctx)
|
deptType = contexts.GetDeptType[any](h.ctx)
|
||||||
tr *hgorm.TenantRelation
|
tr *hgorm.TenantRelation
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -221,7 +221,7 @@ func (h *hookSaveTenant) handle() (result sql.Result, err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 非公司类型,加载自己的租户关系,用于重写关系
|
// 非公司类型,加载自己的租户关系,用于重写关系
|
||||||
if !contexts.IsCompanyDept(h.ctx) {
|
if !contexts.IsCompanyDept[any](h.ctx) {
|
||||||
tr, err = h.getRelation(memberId)
|
tr, err = h.getRelation(memberId)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -22,12 +22,13 @@ func JsonExit(r *ghttp.Request, code int, message string, data ...interface{}) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// RXml xml
|
// RXml xml
|
||||||
func RXml(r *ghttp.Request, code int, message string, data ...interface{}) {
|
func RXml[T any](r *ghttp.Request, code int, message string, data ...T) {
|
||||||
responseData := interface{}(nil)
|
//responseData := interface{}(nil)
|
||||||
|
var responseData T
|
||||||
if len(data) > 0 {
|
if len(data) > 0 {
|
||||||
responseData = data[0]
|
responseData = data[0]
|
||||||
}
|
}
|
||||||
res := &model.Response{
|
res := &model.Response[T]{
|
||||||
Code: code,
|
Code: code,
|
||||||
Message: message,
|
Message: message,
|
||||||
Timestamp: gtime.Timestamp(),
|
Timestamp: gtime.Timestamp(),
|
||||||
@ -52,12 +53,13 @@ func RXml(r *ghttp.Request, code int, message string, data ...interface{}) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// RJson 标准返回结果数据结构封装
|
// RJson 标准返回结果数据结构封装
|
||||||
func RJson(r *ghttp.Request, code int, message string, data ...interface{}) {
|
func RJson[T any](r *ghttp.Request, code int, message string, data ...T) {
|
||||||
responseData := interface{}(nil)
|
//responseData := interface{}(nil)
|
||||||
|
var responseData T
|
||||||
if len(data) > 0 {
|
if len(data) > 0 {
|
||||||
responseData = data[0]
|
responseData = data[0]
|
||||||
}
|
}
|
||||||
res := &model.Response{
|
res := &model.Response[T]{
|
||||||
Code: code,
|
Code: code,
|
||||||
Message: message,
|
Message: message,
|
||||||
Timestamp: gtime.Timestamp(),
|
Timestamp: gtime.Timestamp(),
|
||||||
@ -82,7 +84,7 @@ func RJson(r *ghttp.Request, code int, message string, data ...interface{}) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// CustomJson 自定义JSON
|
// CustomJson 自定义JSON
|
||||||
func CustomJson(r *ghttp.Request, content interface{}) {
|
func CustomJson[T any](r *ghttp.Request, content T) {
|
||||||
// 清空响应
|
// 清空响应
|
||||||
r.Response.ClearBuffer()
|
r.Response.ClearBuffer()
|
||||||
|
|
||||||
@ -90,7 +92,7 @@ func CustomJson(r *ghttp.Request, content interface{}) {
|
|||||||
r.Response.WriteJson(content)
|
r.Response.WriteJson(content)
|
||||||
|
|
||||||
// 加入到上下文
|
// 加入到上下文
|
||||||
contexts.SetResponse(r.Context(), &model.Response{
|
contexts.SetResponse(r.Context(), &model.Response[T]{
|
||||||
Code: 0,
|
Code: 0,
|
||||||
Message: "",
|
Message: "",
|
||||||
Data: content,
|
Data: content,
|
||||||
|
@ -67,7 +67,7 @@ func New(name ...string) UploadDrive {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// DoUpload 上传入口
|
// DoUpload 上传入口
|
||||||
func DoUpload(ctx context.Context, typ string, file *ghttp.UploadFile) (result *entity.SysAttachment, err error) {
|
func DoUpload[T any](ctx context.Context, typ string, file *ghttp.UploadFile) (result *entity.SysAttachment, err error) {
|
||||||
if file == nil {
|
if file == nil {
|
||||||
err = gerror.New("文件必须!")
|
err = gerror.New("文件必须!")
|
||||||
return
|
return
|
||||||
@ -88,7 +88,7 @@ func DoUpload(ctx context.Context, typ string, file *ghttp.UploadFile) (result *
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 相同存储相同身份才复用
|
// 相同存储相同身份才复用
|
||||||
if result != nil && result.Drive == config.Drive && result.MemberId == contexts.GetUserId(ctx) && result.AppId == contexts.GetModule(ctx) {
|
if result != nil && result.Drive == config.Drive && result.MemberId == contexts.GetUserId[T](ctx) && result.AppId == contexts.GetModule[T](ctx) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -98,7 +98,7 @@ func DoUpload(ctx context.Context, typ string, file *ghttp.UploadFile) (result *
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
// 写入附件记录
|
// 写入附件记录
|
||||||
return write(ctx, meta, fullPath)
|
return write[T](ctx, meta, fullPath)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ValidateFileMeta 验证文件元数据
|
// ValidateFileMeta 验证文件元数据
|
||||||
@ -215,11 +215,11 @@ func GenFullPath(basePath, ext string) string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// write 写入附件记录
|
// write 写入附件记录
|
||||||
func write(ctx context.Context, meta *FileMeta, fullPath string) (models *entity.SysAttachment, err error) {
|
func write[T any](ctx context.Context, meta *FileMeta, fullPath string) (models *entity.SysAttachment, err error) {
|
||||||
models = &entity.SysAttachment{
|
models = &entity.SysAttachment{
|
||||||
Id: 0,
|
Id: 0,
|
||||||
AppId: contexts.GetModule(ctx),
|
AppId: contexts.GetModule[T](ctx),
|
||||||
MemberId: contexts.GetUserId(ctx),
|
MemberId: contexts.GetUserId[T](ctx),
|
||||||
Drive: config.Drive,
|
Drive: config.Drive,
|
||||||
Size: meta.Size,
|
Size: meta.Size,
|
||||||
Path: fullPath,
|
Path: fullPath,
|
||||||
@ -264,7 +264,7 @@ func HasFile(ctx context.Context, md5 string) (res *entity.SysAttachment, err er
|
|||||||
}
|
}
|
||||||
|
|
||||||
// CheckMultipart 检查文件分片
|
// CheckMultipart 检查文件分片
|
||||||
func CheckMultipart(ctx context.Context, in *CheckMultipartParams) (res *CheckMultipartModel, err error) {
|
func CheckMultipart[T any](ctx context.Context, in *CheckMultipartParams) (res *CheckMultipartModel, err error) {
|
||||||
res = new(CheckMultipartModel)
|
res = new(CheckMultipartModel)
|
||||||
|
|
||||||
meta := new(FileMeta)
|
meta := new(FileMeta)
|
||||||
@ -295,7 +295,7 @@ func CheckMultipart(ctx context.Context, in *CheckMultipartParams) (res *CheckMu
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 文件已存在,直接返回。相同存储相同身份才复用
|
// 文件已存在,直接返回。相同存储相同身份才复用
|
||||||
if result != nil && result.Drive == config.Drive && result.MemberId == contexts.GetUserId(ctx) && result.AppId == contexts.GetModule(ctx) {
|
if result != nil && result.Drive == config.Drive && result.MemberId == contexts.GetUserId[T](ctx) && result.AppId == contexts.GetModule[T](ctx) {
|
||||||
res.Attachment = result
|
res.Attachment = result
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -305,7 +305,7 @@ func CheckMultipart(ctx context.Context, in *CheckMultipartParams) (res *CheckMu
|
|||||||
}
|
}
|
||||||
|
|
||||||
in.meta = meta
|
in.meta = meta
|
||||||
progress, err := GetOrCreateMultipartProgress(ctx, in)
|
progress, err := GetOrCreateMultipartProgress[T](ctx, in)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -329,13 +329,13 @@ func CalcUploadProgress(uploadedIndex []int, shardCount int) float64 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// GenUploadId 生成上传ID
|
// GenUploadId 生成上传ID
|
||||||
func GenUploadId(ctx context.Context, md5 string) string {
|
func GenUploadId[T any](ctx context.Context, md5 string) string {
|
||||||
return fmt.Sprintf("%v:%v:%v@%v", md5, contexts.GetUserId(ctx), contexts.GetModule(ctx), config.Drive)
|
return fmt.Sprintf("%v:%v:%v@%v", md5, contexts.GetUserId[T](ctx), contexts.GetModule[T](ctx), config.Drive)
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetOrCreateMultipartProgress 获取或创建分片上传事件进度
|
// GetOrCreateMultipartProgress 获取或创建分片上传事件进度
|
||||||
func GetOrCreateMultipartProgress(ctx context.Context, in *CheckMultipartParams) (res *MultipartProgress, err error) {
|
func GetOrCreateMultipartProgress[T any](ctx context.Context, in *CheckMultipartParams) (res *MultipartProgress, err error) {
|
||||||
uploadId := GenUploadId(ctx, in.Md5)
|
uploadId := GenUploadId[T](ctx, in.Md5)
|
||||||
res, err = GetMultipartProgress(ctx, uploadId)
|
res, err = GetMultipartProgress(ctx, uploadId)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -55,7 +55,7 @@ func (d *LocalDrive) Upload(ctx context.Context, file *ghttp.UploadFile) (fullPa
|
|||||||
// CreateMultipart 创建分片事件
|
// CreateMultipart 创建分片事件
|
||||||
func (d *LocalDrive) CreateMultipart(ctx context.Context, in *CheckMultipartParams) (mp *MultipartProgress, err error) {
|
func (d *LocalDrive) CreateMultipart(ctx context.Context, in *CheckMultipartParams) (mp *MultipartProgress, err error) {
|
||||||
mp = new(MultipartProgress)
|
mp = new(MultipartProgress)
|
||||||
mp.UploadId = GenUploadId(ctx, in.Md5)
|
mp.UploadId = GenUploadId[any](ctx, in.Md5)
|
||||||
mp.Meta = in.meta
|
mp.Meta = in.meta
|
||||||
mp.ShardCount = in.ShardCount
|
mp.ShardCount = in.ShardCount
|
||||||
mp.UploadedIndex = make([]int, 0)
|
mp.UploadedIndex = make([]int, 0)
|
||||||
@ -119,7 +119,7 @@ func (d *LocalDrive) UploadPart(ctx context.Context, in *UploadPartParams) (res
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 写入附件记录
|
// 写入附件记录
|
||||||
attachment, err := write(ctx, in.mp.Meta, finalDirPath)
|
attachment, err := write[any](ctx, in.mp.Meta, finalDirPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -90,7 +90,7 @@ func Login(ctx context.Context, user *model.Identity) (string, int64, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Logout 注销登录
|
// Logout 注销登录
|
||||||
func Logout(r *ghttp.Request) (err error) {
|
func Logout[T any](r *ghttp.Request) (err error) {
|
||||||
var (
|
var (
|
||||||
ctx = r.Context()
|
ctx = r.Context()
|
||||||
header = GetAuthorization(r)
|
header = GetAuthorization(r)
|
||||||
@ -112,9 +112,9 @@ func Logout(r *ghttp.Request) (err error) {
|
|||||||
// 认证key
|
// 认证key
|
||||||
authKey = GetAuthKey(header)
|
authKey = GetAuthKey(header)
|
||||||
// 登录token
|
// 登录token
|
||||||
tokenKey = GetTokenKey(contexts.GetModule(ctx), authKey)
|
tokenKey = GetTokenKey(contexts.GetModule[T](ctx), authKey)
|
||||||
// 身份绑定
|
// 身份绑定
|
||||||
bindKey = GetBindKey(contexts.GetModule(ctx), claims.Id)
|
bindKey = GetBindKey(contexts.GetModule[T](ctx), claims.Id)
|
||||||
)
|
)
|
||||||
|
|
||||||
// 删除token
|
// 删除token
|
||||||
|
@ -27,18 +27,18 @@ import (
|
|||||||
|
|
||||||
type sAdminCash struct{}
|
type sAdminCash struct{}
|
||||||
|
|
||||||
func NewAdminCash() *sAdminCash {
|
func newAdminCash() *sAdminCash {
|
||||||
return &sAdminCash{}
|
return &sAdminCash{}
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
service.RegisterAdminCash(NewAdminCash())
|
service.RegisterAdminCash(newAdminCash())
|
||||||
}
|
}
|
||||||
|
|
||||||
// View 获取指定提现信息
|
// View 获取指定提现信息
|
||||||
func (s *sAdminCash) View(ctx context.Context, in *adminin.CashViewInp) (res *adminin.CashViewModel, err error) {
|
func (s *sAdminCash) View(ctx context.Context, in *adminin.CashViewInp) (res *adminin.CashViewModel, err error) {
|
||||||
// 这里做了强制限制非超管不允许访问,如果你想通过菜单权限控制,请注释掉以下验证
|
// 这里做了强制限制非超管不允许访问,如果你想通过菜单权限控制,请注释掉以下验证
|
||||||
if !service.AdminMember().VerifySuperId(ctx, contexts.GetUserId(ctx)) {
|
if !service.AdminMember().VerifySuperId(ctx, contexts.GetUserId[any](ctx)) {
|
||||||
err = gerror.New("没有访问权限")
|
err = gerror.New("没有访问权限")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -72,7 +72,7 @@ func (s *sAdminCash) View(ctx context.Context, in *adminin.CashViewInp) (res *ad
|
|||||||
func (s *sAdminCash) List(ctx context.Context, in *adminin.CashListInp) (list []*adminin.CashListModel, totalCount int, err error) {
|
func (s *sAdminCash) List(ctx context.Context, in *adminin.CashListInp) (list []*adminin.CashListModel, totalCount int, err error) {
|
||||||
var (
|
var (
|
||||||
mod = dao.AdminCash.Ctx(ctx)
|
mod = dao.AdminCash.Ctx(ctx)
|
||||||
opMemberId = contexts.GetUserId(ctx)
|
opMemberId = contexts.GetUserId[any](ctx)
|
||||||
isSuper = service.AdminMember().VerifySuperId(ctx, opMemberId)
|
isSuper = service.AdminMember().VerifySuperId(ctx, opMemberId)
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -233,8 +233,8 @@ func (s *sAdminCash) Apply(ctx context.Context, in *adminin.CashApplyInp) (err e
|
|||||||
// 更新余额
|
// 更新余额
|
||||||
_, err = service.AdminCreditsLog().SaveBalance(ctx, &adminin.CreditsLogSaveBalanceInp{
|
_, err = service.AdminCreditsLog().SaveBalance(ctx, &adminin.CreditsLogSaveBalanceInp{
|
||||||
MemberId: in.MemberId,
|
MemberId: in.MemberId,
|
||||||
AppId: contexts.GetModule(ctx),
|
AppId: contexts.GetModule[any](ctx),
|
||||||
AddonsName: contexts.GetAddonName(ctx),
|
AddonsName: contexts.GetAddonName[any](ctx),
|
||||||
CreditGroup: consts.CreditGroupApplyCash,
|
CreditGroup: consts.CreditGroupApplyCash,
|
||||||
Num: -in.Money,
|
Num: -in.Money,
|
||||||
MapId: lastInsertId,
|
MapId: lastInsertId,
|
||||||
@ -253,7 +253,7 @@ func (s *sAdminCash) Apply(ctx context.Context, in *adminin.CashApplyInp) (err e
|
|||||||
|
|
||||||
// Payment 提现打款处理
|
// Payment 提现打款处理
|
||||||
func (s *sAdminCash) Payment(ctx context.Context, in *adminin.CashPaymentInp) (err error) {
|
func (s *sAdminCash) Payment(ctx context.Context, in *adminin.CashPaymentInp) (err error) {
|
||||||
if !service.AdminMember().VerifySuperId(ctx, contexts.GetUserId(ctx)) {
|
if !service.AdminMember().VerifySuperId(ctx, contexts.GetUserId[any](ctx)) {
|
||||||
err = gerror.New("没有访问权限")
|
err = gerror.New("没有访问权限")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -29,12 +29,12 @@ import (
|
|||||||
|
|
||||||
type sAdminCreditsLog struct{}
|
type sAdminCreditsLog struct{}
|
||||||
|
|
||||||
func NewAdminCreditsLog() *sAdminCreditsLog {
|
func newAdminCreditsLog() *sAdminCreditsLog {
|
||||||
return &sAdminCreditsLog{}
|
return &sAdminCreditsLog{}
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
service.RegisterAdminCreditsLog(NewAdminCreditsLog())
|
service.RegisterAdminCreditsLog(newAdminCreditsLog())
|
||||||
}
|
}
|
||||||
|
|
||||||
// Model 资产变动ORM模型
|
// Model 资产变动ORM模型
|
||||||
@ -245,6 +245,6 @@ func (s *sAdminCreditsLog) Export(ctx context.Context, in *adminin.CreditsLogLis
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
err = excel.ExportByStructs(ctx, tags, exports, fileName, sheetName)
|
err = excel.ExportByStructs[any](ctx, tags, exports, fileName, sheetName)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -26,12 +26,12 @@ import (
|
|||||||
|
|
||||||
type sAdminDept struct{}
|
type sAdminDept struct{}
|
||||||
|
|
||||||
func NewAdminDept() *sAdminDept {
|
func newAdminDept() *sAdminDept {
|
||||||
return &sAdminDept{}
|
return &sAdminDept{}
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
service.RegisterAdminDept(NewAdminDept())
|
service.RegisterAdminDept(newAdminDept())
|
||||||
}
|
}
|
||||||
|
|
||||||
// Model 部门ORM模型
|
// Model 部门ORM模型
|
||||||
@ -255,7 +255,7 @@ func (s *sAdminDept) GetName(ctx context.Context, id int64) (name string, err er
|
|||||||
func (s *sAdminDept) VerifyDeptId(ctx context.Context, id int64) (err error) {
|
func (s *sAdminDept) VerifyDeptId(ctx context.Context, id int64) (err error) {
|
||||||
var (
|
var (
|
||||||
pid int64 = 0
|
pid int64 = 0
|
||||||
mb = contexts.GetUser(ctx)
|
mb = contexts.GetUser[any](ctx)
|
||||||
mod = dao.AdminDept.Ctx(ctx).Fields(dao.AdminDept.Columns().Id)
|
mod = dao.AdminDept.Ctx(ctx).Fields(dao.AdminDept.Columns().Id)
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -291,8 +291,8 @@ func (s *sAdminDept) Option(ctx context.Context, in *adminin.DeptOptionInp) (res
|
|||||||
)
|
)
|
||||||
|
|
||||||
// 非超管只获取下级
|
// 非超管只获取下级
|
||||||
if !service.AdminMember().VerifySuperId(ctx, contexts.GetUserId(ctx)) {
|
if !service.AdminMember().VerifySuperId(ctx, contexts.GetUserId[any](ctx)) {
|
||||||
pid = contexts.GetUser(ctx).DeptId
|
pid = contexts.GetUser[any](ctx).DeptId
|
||||||
mod = mod.WhereLike(dao.AdminDept.Columns().Tree, "%"+tree.GetIdLabel(pid)+"%")
|
mod = mod.WhereLike(dao.AdminDept.Columns().Tree, "%"+tree.GetIdLabel(pid)+"%")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -44,21 +44,21 @@ type sAdminMember struct {
|
|||||||
superAdmin *SuperAdmin
|
superAdmin *SuperAdmin
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewAdminMember() *sAdminMember {
|
func newAdminMember() *sAdminMember {
|
||||||
return &sAdminMember{
|
return &sAdminMember{
|
||||||
superAdmin: new(SuperAdmin),
|
superAdmin: new(SuperAdmin),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
service.RegisterAdminMember(NewAdminMember())
|
service.RegisterAdminMember(newAdminMember())
|
||||||
}
|
}
|
||||||
|
|
||||||
// AddBalance 增加余额
|
// AddBalance 增加余额
|
||||||
func (s *sAdminMember) AddBalance(ctx context.Context, in *adminin.MemberAddBalanceInp) (err error) {
|
func (s *sAdminMember) AddBalance(ctx context.Context, in *adminin.MemberAddBalanceInp) (err error) {
|
||||||
var (
|
var (
|
||||||
mb *entity.AdminMember
|
mb *entity.AdminMember
|
||||||
memberId = contexts.GetUserId(ctx)
|
memberId = contexts.GetUserId[any](ctx)
|
||||||
)
|
)
|
||||||
|
|
||||||
if err = s.FilterAuthModel(ctx, memberId).WherePri(in.Id).Scan(&mb); err != nil {
|
if err = s.FilterAuthModel(ctx, memberId).WherePri(in.Id).Scan(&mb); err != nil {
|
||||||
@ -102,7 +102,7 @@ func (s *sAdminMember) AddBalance(ctx context.Context, in *adminin.MemberAddBala
|
|||||||
func (s *sAdminMember) AddIntegral(ctx context.Context, in *adminin.MemberAddIntegralInp) (err error) {
|
func (s *sAdminMember) AddIntegral(ctx context.Context, in *adminin.MemberAddIntegralInp) (err error) {
|
||||||
var (
|
var (
|
||||||
mb *entity.AdminMember
|
mb *entity.AdminMember
|
||||||
memberId = contexts.GetUserId(ctx)
|
memberId = contexts.GetUserId[any](ctx)
|
||||||
)
|
)
|
||||||
|
|
||||||
if err = s.FilterAuthModel(ctx, memberId).WherePri(in.Id).Scan(&mb); err != nil {
|
if err = s.FilterAuthModel(ctx, memberId).WherePri(in.Id).Scan(&mb); err != nil {
|
||||||
@ -144,7 +144,7 @@ func (s *sAdminMember) AddIntegral(ctx context.Context, in *adminin.MemberAddInt
|
|||||||
|
|
||||||
// UpdateCash 修改提现信息
|
// UpdateCash 修改提现信息
|
||||||
func (s *sAdminMember) UpdateCash(ctx context.Context, in *adminin.MemberUpdateCashInp) (err error) {
|
func (s *sAdminMember) UpdateCash(ctx context.Context, in *adminin.MemberUpdateCashInp) (err error) {
|
||||||
memberId := contexts.Get(ctx).User.Id
|
memberId := contexts.Get[any](ctx).User.Id
|
||||||
if memberId <= 0 {
|
if memberId <= 0 {
|
||||||
err = gerror.New("获取用户信息失败!")
|
err = gerror.New("获取用户信息失败!")
|
||||||
return
|
return
|
||||||
@ -180,7 +180,7 @@ func (s *sAdminMember) UpdateCash(ctx context.Context, in *adminin.MemberUpdateC
|
|||||||
|
|
||||||
// UpdateEmail 换绑邮箱
|
// UpdateEmail 换绑邮箱
|
||||||
func (s *sAdminMember) UpdateEmail(ctx context.Context, in *adminin.MemberUpdateEmailInp) (err error) {
|
func (s *sAdminMember) UpdateEmail(ctx context.Context, in *adminin.MemberUpdateEmailInp) (err error) {
|
||||||
memberId := contexts.Get(ctx).User.Id
|
memberId := contexts.Get[any](ctx).User.Id
|
||||||
if memberId <= 0 {
|
if memberId <= 0 {
|
||||||
err = gerror.New("获取用户信息失败!")
|
err = gerror.New("获取用户信息失败!")
|
||||||
return
|
return
|
||||||
@ -232,7 +232,7 @@ func (s *sAdminMember) UpdateEmail(ctx context.Context, in *adminin.MemberUpdate
|
|||||||
|
|
||||||
// UpdateMobile 换绑手机号
|
// UpdateMobile 换绑手机号
|
||||||
func (s *sAdminMember) UpdateMobile(ctx context.Context, in *adminin.MemberUpdateMobileInp) (err error) {
|
func (s *sAdminMember) UpdateMobile(ctx context.Context, in *adminin.MemberUpdateMobileInp) (err error) {
|
||||||
memberId := contexts.Get(ctx).User.Id
|
memberId := contexts.Get[any](ctx).User.Id
|
||||||
if memberId <= 0 {
|
if memberId <= 0 {
|
||||||
err = gerror.New("获取用户信息失败!")
|
err = gerror.New("获取用户信息失败!")
|
||||||
return
|
return
|
||||||
@ -284,7 +284,7 @@ func (s *sAdminMember) UpdateMobile(ctx context.Context, in *adminin.MemberUpdat
|
|||||||
|
|
||||||
// UpdateProfile 更新用户资料
|
// UpdateProfile 更新用户资料
|
||||||
func (s *sAdminMember) UpdateProfile(ctx context.Context, in *adminin.MemberUpdateProfileInp) (err error) {
|
func (s *sAdminMember) UpdateProfile(ctx context.Context, in *adminin.MemberUpdateProfileInp) (err error) {
|
||||||
memberId := contexts.Get(ctx).User.Id
|
memberId := contexts.Get[any](ctx).User.Id
|
||||||
if memberId <= 0 {
|
if memberId <= 0 {
|
||||||
err = gerror.New("获取用户信息失败!")
|
err = gerror.New("获取用户信息失败!")
|
||||||
return
|
return
|
||||||
@ -347,7 +347,7 @@ func (s *sAdminMember) UpdatePwd(ctx context.Context, in *adminin.MemberUpdatePw
|
|||||||
func (s *sAdminMember) ResetPwd(ctx context.Context, in *adminin.MemberResetPwdInp) (err error) {
|
func (s *sAdminMember) ResetPwd(ctx context.Context, in *adminin.MemberResetPwdInp) (err error) {
|
||||||
var (
|
var (
|
||||||
mb *entity.AdminMember
|
mb *entity.AdminMember
|
||||||
memberId = contexts.GetUserId(ctx)
|
memberId = contexts.GetUserId[any](ctx)
|
||||||
)
|
)
|
||||||
|
|
||||||
if err = s.FilterAuthModel(ctx, memberId).WherePri(in.Id).Scan(&mb); err != nil {
|
if err = s.FilterAuthModel(ctx, memberId).WherePri(in.Id).Scan(&mb); err != nil {
|
||||||
@ -403,7 +403,7 @@ func (s *sAdminMember) VerifyUnique(ctx context.Context, in *adminin.VerifyUniqu
|
|||||||
|
|
||||||
// Delete 删除用户
|
// Delete 删除用户
|
||||||
func (s *sAdminMember) Delete(ctx context.Context, in *adminin.MemberDeleteInp) (err error) {
|
func (s *sAdminMember) Delete(ctx context.Context, in *adminin.MemberDeleteInp) (err error) {
|
||||||
memberId := contexts.GetUserId(ctx)
|
memberId := contexts.GetUserId[any](ctx)
|
||||||
if memberId <= 0 {
|
if memberId <= 0 {
|
||||||
err = gerror.New("获取用户信息失败!")
|
err = gerror.New("获取用户信息失败!")
|
||||||
return
|
return
|
||||||
@ -454,7 +454,7 @@ func (s *sAdminMember) Delete(ctx context.Context, in *adminin.MemberDeleteInp)
|
|||||||
|
|
||||||
// Edit 修改/新增用户
|
// Edit 修改/新增用户
|
||||||
func (s *sAdminMember) Edit(ctx context.Context, in *adminin.MemberEditInp) (err error) {
|
func (s *sAdminMember) Edit(ctx context.Context, in *adminin.MemberEditInp) (err error) {
|
||||||
opMemberId := contexts.GetUserId(ctx)
|
opMemberId := contexts.GetUserId[any](ctx)
|
||||||
if opMemberId <= 0 {
|
if opMemberId <= 0 {
|
||||||
err = gerror.New("获取用户信息失败!")
|
err = gerror.New("获取用户信息失败!")
|
||||||
return
|
return
|
||||||
@ -582,7 +582,7 @@ func (s *sAdminMember) Edit(ctx context.Context, in *adminin.MemberEditInp) (err
|
|||||||
|
|
||||||
// View 获取用户信息
|
// View 获取用户信息
|
||||||
func (s *sAdminMember) View(ctx context.Context, in *adminin.MemberViewInp) (res *adminin.MemberViewModel, err error) {
|
func (s *sAdminMember) View(ctx context.Context, in *adminin.MemberViewInp) (res *adminin.MemberViewModel, err error) {
|
||||||
if err = s.FilterAuthModel(ctx, contexts.GetUserId(ctx)).Hook(hook.MemberInfo).WherePri(in.Id).Scan(&res); err != nil {
|
if err = s.FilterAuthModel(ctx, contexts.GetUserId[any](ctx)).Hook(hook.MemberInfo).WherePri(in.Id).Scan(&res); err != nil {
|
||||||
err = gerror.Wrap(err, "获取用户信息失败,请稍后重试!")
|
err = gerror.Wrap(err, "获取用户信息失败,请稍后重试!")
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
@ -590,7 +590,7 @@ func (s *sAdminMember) View(ctx context.Context, in *adminin.MemberViewInp) (res
|
|||||||
|
|
||||||
// List 获取用户列表
|
// List 获取用户列表
|
||||||
func (s *sAdminMember) List(ctx context.Context, in *adminin.MemberListInp) (list []*adminin.MemberListModel, totalCount int, err error) {
|
func (s *sAdminMember) List(ctx context.Context, in *adminin.MemberListInp) (list []*adminin.MemberListModel, totalCount int, err error) {
|
||||||
mod := s.FilterAuthModel(ctx, contexts.GetUserId(ctx))
|
mod := s.FilterAuthModel(ctx, contexts.GetUserId[any](ctx))
|
||||||
cols := dao.AdminMember.Columns()
|
cols := dao.AdminMember.Columns()
|
||||||
|
|
||||||
if in.RealName != "" {
|
if in.RealName != "" {
|
||||||
@ -652,7 +652,7 @@ func (s *sAdminMember) Status(ctx context.Context, in *adminin.MemberStatusInp)
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if _, err = s.FilterAuthModel(ctx, contexts.GetUserId(ctx)).WherePri(in.Id).Data(dao.AdminMember.Columns().Status, in.Status).Update(); err != nil {
|
if _, err = s.FilterAuthModel(ctx, contexts.GetUserId[any](ctx)).WherePri(in.Id).Data(dao.AdminMember.Columns().Status, in.Status).Update(); err != nil {
|
||||||
err = gerror.Wrap(err, "更新用户状态失败,请稍后重试!")
|
err = gerror.Wrap(err, "更新用户状态失败,请稍后重试!")
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
@ -677,7 +677,7 @@ func (s *sAdminMember) GenTree(ctx context.Context, pid int64) (level int, newTr
|
|||||||
|
|
||||||
// LoginMemberInfo 获取登录用户信息
|
// LoginMemberInfo 获取登录用户信息
|
||||||
func (s *sAdminMember) LoginMemberInfo(ctx context.Context) (res *adminin.LoginMemberInfoModel, err error) {
|
func (s *sAdminMember) LoginMemberInfo(ctx context.Context) (res *adminin.LoginMemberInfoModel, err error) {
|
||||||
var memberId = contexts.GetUserId(ctx)
|
var memberId = contexts.GetUserId[any](ctx)
|
||||||
if memberId <= 0 {
|
if memberId <= 0 {
|
||||||
err = gerror.New("用户身份异常,请重新登录!")
|
err = gerror.New("用户身份异常,请重新登录!")
|
||||||
return
|
return
|
||||||
@ -710,7 +710,7 @@ func (s *sAdminMember) LoginMemberInfo(ctx context.Context) (res *adminin.LoginM
|
|||||||
res.Mobile = gstr.HideStr(res.Mobile, 40, `*`)
|
res.Mobile = gstr.HideStr(res.Mobile, 40, `*`)
|
||||||
res.Email = gstr.HideStr(res.Email, 40, `*`)
|
res.Email = gstr.HideStr(res.Email, 40, `*`)
|
||||||
res.OpenId, _ = service.CommonWechat().GetOpenId(ctx)
|
res.OpenId, _ = service.CommonWechat().GetOpenId(ctx)
|
||||||
res.DeptType = contexts.GetDeptType(ctx)
|
res.DeptType = contexts.GetDeptType[any](ctx)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -756,7 +756,7 @@ func (s *sAdminMember) GetIdByCode(ctx context.Context, in *adminin.GetIdByCodeI
|
|||||||
// Select 获取可选的用户选项
|
// Select 获取可选的用户选项
|
||||||
func (s *sAdminMember) Select(ctx context.Context, in *adminin.MemberSelectInp) (res []*adminin.MemberSelectModel, err error) {
|
func (s *sAdminMember) Select(ctx context.Context, in *adminin.MemberSelectInp) (res []*adminin.MemberSelectModel, err error) {
|
||||||
err = dao.AdminMember.Ctx(ctx).Fields("id as value,real_name as label,username,avatar").
|
err = dao.AdminMember.Ctx(ctx).Fields("id as value,real_name as label,username,avatar").
|
||||||
Handler(handler.FilterAuthWithField("id")).
|
Handler(handler.FilterAuthWithField[any]("id")).
|
||||||
Scan(&res)
|
Scan(&res)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
err = gerror.Wrap(err, "获取可选用户选项失败,请稍后重试!")
|
err = gerror.Wrap(err, "获取可选用户选项失败,请稍后重试!")
|
||||||
@ -837,9 +837,9 @@ func (s *sAdminMember) FilterAuthModel(ctx context.Context, memberId int64) *gdb
|
|||||||
}
|
}
|
||||||
|
|
||||||
var roleId int64
|
var roleId int64
|
||||||
if contexts.GetUserId(ctx) == memberId {
|
if contexts.GetUserId[any](ctx) == memberId {
|
||||||
// 当前登录用户直接从上下文中取角色ID
|
// 当前登录用户直接从上下文中取角色ID
|
||||||
roleId = contexts.GetRoleId(ctx)
|
roleId = contexts.GetRoleId[any](ctx)
|
||||||
} else {
|
} else {
|
||||||
ro, err := dao.AdminMember.Ctx(ctx).Fields("role_id").Where("id", memberId).Value()
|
ro, err := dao.AdminMember.Ctx(ctx).Fields("role_id").Where("id", memberId).Value()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -854,5 +854,5 @@ func (s *sAdminMember) FilterAuthModel(ctx context.Context, memberId int64) *gdb
|
|||||||
g.Log().Panicf(ctx, "get the subordinate role permission exception, err:%+v", err)
|
g.Log().Panicf(ctx, "get the subordinate role permission exception, err:%+v", err)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
return m.Where("id <> ?", memberId).WhereIn("role_id", roleIds).Handler(handler.FilterAuthWithField("id"))
|
return m.Where("id <> ?", memberId).WhereIn("role_id", roleIds).Handler(handler.FilterAuthWithField[any]("id"))
|
||||||
}
|
}
|
||||||
|
@ -15,12 +15,12 @@ import (
|
|||||||
|
|
||||||
type sAdminMemberPost struct{}
|
type sAdminMemberPost struct{}
|
||||||
|
|
||||||
func NewAdminMemberPost() *sAdminMemberPost {
|
func newAdminMemberPost() *sAdminMemberPost {
|
||||||
return &sAdminMemberPost{}
|
return &sAdminMemberPost{}
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
service.RegisterAdminMemberPost(NewAdminMemberPost())
|
service.RegisterAdminMemberPost(newAdminMemberPost())
|
||||||
}
|
}
|
||||||
|
|
||||||
// UpdatePostIds 更新用户岗位
|
// UpdatePostIds 更新用户岗位
|
||||||
|
@ -29,12 +29,12 @@ import (
|
|||||||
|
|
||||||
type sAdminMenu struct{}
|
type sAdminMenu struct{}
|
||||||
|
|
||||||
func NewAdminMenu() *sAdminMenu {
|
func newAdminMenu() *sAdminMenu {
|
||||||
return &sAdminMenu{}
|
return &sAdminMenu{}
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
service.RegisterAdminMenu(NewAdminMenu())
|
service.RegisterAdminMenu(newAdminMenu())
|
||||||
}
|
}
|
||||||
|
|
||||||
// Model Orm模型
|
// Model Orm模型
|
||||||
@ -183,7 +183,7 @@ func (s *sAdminMenu) GetMenuList(ctx context.Context, memberId int64) (res *role
|
|||||||
|
|
||||||
// 非超管验证允许的菜单列表
|
// 非超管验证允许的菜单列表
|
||||||
if !service.AdminMember().VerifySuperId(ctx, memberId) {
|
if !service.AdminMember().VerifySuperId(ctx, memberId) {
|
||||||
menuIds, err := dao.AdminRoleMenu.Ctx(ctx).Fields("menu_id").Where("role_id", contexts.GetRoleId(ctx)).Array()
|
menuIds, err := dao.AdminRoleMenu.Ctx(ctx).Fields("menu_id").Where("role_id", contexts.GetRoleId[any](ctx)).Array()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -242,7 +242,7 @@ func (s *sAdminMenu) LoginPermissions(ctx context.Context, memberId int64) (list
|
|||||||
|
|
||||||
// 非超管验证允许的菜单列表
|
// 非超管验证允许的菜单列表
|
||||||
if !service.AdminMember().VerifySuperId(ctx, memberId) {
|
if !service.AdminMember().VerifySuperId(ctx, memberId) {
|
||||||
menuIds, err := dao.AdminRoleMenu.Ctx(ctx).Fields("menu_id").Where("role_id", contexts.GetRoleId(ctx)).Array()
|
menuIds, err := dao.AdminRoleMenu.Ctx(ctx).Fields("menu_id").Where("role_id", contexts.GetRoleId[any](ctx)).Array()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -26,14 +26,14 @@ type sAdminMonitor struct {
|
|||||||
sync.RWMutex
|
sync.RWMutex
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewAdminMonitor() *sAdminMonitor {
|
func newAdminMonitor() *sAdminMonitor {
|
||||||
return &sAdminMonitor{
|
return &sAdminMonitor{
|
||||||
data: new(model.MonitorData),
|
data: new(model.MonitorData),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
service.RegisterAdminMonitor(NewAdminMonitor())
|
service.RegisterAdminMonitor(newAdminMonitor())
|
||||||
}
|
}
|
||||||
|
|
||||||
// StartMonitor 启动服务监控
|
// StartMonitor 启动服务监控
|
||||||
|
@ -27,12 +27,12 @@ import (
|
|||||||
|
|
||||||
type sAdminNotice struct{}
|
type sAdminNotice struct{}
|
||||||
|
|
||||||
func NewAdminNotice() *sAdminNotice {
|
func newAdminNotice() *sAdminNotice {
|
||||||
return &sAdminNotice{}
|
return &sAdminNotice{}
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
service.RegisterAdminNotice(NewAdminNotice())
|
service.RegisterAdminNotice(newAdminNotice())
|
||||||
}
|
}
|
||||||
|
|
||||||
// Model Orm模型
|
// Model Orm模型
|
||||||
@ -48,7 +48,7 @@ func (s *sAdminNotice) Delete(ctx context.Context, in *adminin.NoticeDeleteInp)
|
|||||||
|
|
||||||
// Edit 修改/新增
|
// Edit 修改/新增
|
||||||
func (s *sAdminNotice) Edit(ctx context.Context, in *adminin.NoticeEditInp) (err error) {
|
func (s *sAdminNotice) Edit(ctx context.Context, in *adminin.NoticeEditInp) (err error) {
|
||||||
var member = contexts.Get(ctx).User
|
var member = contexts.Get[any](ctx).User
|
||||||
if member == nil {
|
if member == nil {
|
||||||
err = gerror.New("获取用户信息失败!")
|
err = gerror.New("获取用户信息失败!")
|
||||||
return
|
return
|
||||||
@ -66,7 +66,7 @@ func (s *sAdminNotice) Edit(ctx context.Context, in *adminin.NoticeEditInp) (err
|
|||||||
|
|
||||||
// 检查选项接收人是否合法
|
// 检查选项接收人是否合法
|
||||||
if in.Type == consts.NoticeTypeLetter {
|
if in.Type == consts.NoticeTypeLetter {
|
||||||
count, _ := dao.AdminMember.Ctx(ctx).Handler(handler.FilterAuthWithField("id")).WhereIn("id", in.Receiver).Count()
|
count, _ := dao.AdminMember.Ctx(ctx).Handler(handler.FilterAuthWithField[any]("id")).WhereIn("id", in.Receiver).Count()
|
||||||
if count != len(in.Receiver) {
|
if count != len(in.Receiver) {
|
||||||
err = gerror.New("接收人不合法")
|
err = gerror.New("接收人不合法")
|
||||||
return
|
return
|
||||||
@ -159,7 +159,7 @@ func (s *sAdminNotice) View(ctx context.Context, in *adminin.NoticeViewInp) (res
|
|||||||
|
|
||||||
// List 获取列表
|
// List 获取列表
|
||||||
func (s *sAdminNotice) List(ctx context.Context, in *adminin.NoticeListInp) (list []*adminin.NoticeListModel, totalCount int, err error) {
|
func (s *sAdminNotice) List(ctx context.Context, in *adminin.NoticeListInp) (list []*adminin.NoticeListModel, totalCount int, err error) {
|
||||||
var memberId = contexts.GetUserId(ctx)
|
var memberId = contexts.GetUserId[any](ctx)
|
||||||
if memberId <= 0 {
|
if memberId <= 0 {
|
||||||
err = gerror.New("获取用户信息失败!")
|
err = gerror.New("获取用户信息失败!")
|
||||||
return
|
return
|
||||||
@ -224,7 +224,7 @@ func (s *sAdminNotice) List(ctx context.Context, in *adminin.NoticeListInp) (lis
|
|||||||
|
|
||||||
// PullMessages 拉取未读消息列表
|
// PullMessages 拉取未读消息列表
|
||||||
func (s *sAdminNotice) PullMessages(ctx context.Context, in *adminin.PullMessagesInp) (res *adminin.PullMessagesModel, err error) {
|
func (s *sAdminNotice) PullMessages(ctx context.Context, in *adminin.PullMessagesInp) (res *adminin.PullMessagesModel, err error) {
|
||||||
var memberId = contexts.GetUserId(ctx)
|
var memberId = contexts.GetUserId[any](ctx)
|
||||||
if memberId <= 0 {
|
if memberId <= 0 {
|
||||||
err = gerror.New("获取用户信息失败!")
|
err = gerror.New("获取用户信息失败!")
|
||||||
return
|
return
|
||||||
@ -269,7 +269,7 @@ func (s *sAdminNotice) PullMessages(ctx context.Context, in *adminin.PullMessage
|
|||||||
// UnreadCount 获取所有类型消息的未读数量
|
// UnreadCount 获取所有类型消息的未读数量
|
||||||
func (s *sAdminNotice) UnreadCount(ctx context.Context, in *adminin.NoticeUnreadCountInp) (res *adminin.NoticeUnreadCountModel, err error) {
|
func (s *sAdminNotice) UnreadCount(ctx context.Context, in *adminin.NoticeUnreadCountInp) (res *adminin.NoticeUnreadCountModel, err error) {
|
||||||
if in.MemberId <= 0 {
|
if in.MemberId <= 0 {
|
||||||
if in.MemberId = contexts.GetUserId(ctx); in.MemberId <= 0 {
|
if in.MemberId = contexts.GetUserId[any](ctx); in.MemberId <= 0 {
|
||||||
err = gerror.New("获取用户信息失败!")
|
err = gerror.New("获取用户信息失败!")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -340,7 +340,7 @@ func (s *sAdminNotice) messageIds(ctx context.Context, memberId int64) (ids []in
|
|||||||
func (s *sAdminNotice) UpRead(ctx context.Context, in *adminin.NoticeUpReadInp) (err error) {
|
func (s *sAdminNotice) UpRead(ctx context.Context, in *adminin.NoticeUpReadInp) (err error) {
|
||||||
var (
|
var (
|
||||||
data *entity.AdminNotice
|
data *entity.AdminNotice
|
||||||
memberId = contexts.GetUserId(ctx)
|
memberId = contexts.GetUserId[any](ctx)
|
||||||
)
|
)
|
||||||
|
|
||||||
if memberId <= 0 {
|
if memberId <= 0 {
|
||||||
@ -361,7 +361,7 @@ func (s *sAdminNotice) UpRead(ctx context.Context, in *adminin.NoticeUpReadInp)
|
|||||||
|
|
||||||
// ReadAll 已读全部
|
// ReadAll 已读全部
|
||||||
func (s *sAdminNotice) ReadAll(ctx context.Context, in *adminin.NoticeReadAllInp) (err error) {
|
func (s *sAdminNotice) ReadAll(ctx context.Context, in *adminin.NoticeReadAllInp) (err error) {
|
||||||
var memberId = contexts.GetUserId(ctx)
|
var memberId = contexts.GetUserId[any](ctx)
|
||||||
if memberId <= 0 {
|
if memberId <= 0 {
|
||||||
err = gerror.New("获取用户信息失败!")
|
err = gerror.New("获取用户信息失败!")
|
||||||
return
|
return
|
||||||
@ -435,7 +435,7 @@ func (s *sAdminNotice) updatedReadClicks(ctx context.Context, noticeId, memberId
|
|||||||
|
|
||||||
// MessageList 我的消息列表
|
// MessageList 我的消息列表
|
||||||
func (s *sAdminNotice) MessageList(ctx context.Context, in *adminin.NoticeMessageListInp) (list []*adminin.NoticeMessageListModel, totalCount int, err error) {
|
func (s *sAdminNotice) MessageList(ctx context.Context, in *adminin.NoticeMessageListInp) (list []*adminin.NoticeMessageListModel, totalCount int, err error) {
|
||||||
var memberId = contexts.GetUserId(ctx)
|
var memberId = contexts.GetUserId[any](ctx)
|
||||||
if memberId <= 0 {
|
if memberId <= 0 {
|
||||||
err = gerror.New("获取用户信息失败!")
|
err = gerror.New("获取用户信息失败!")
|
||||||
return
|
return
|
||||||
|
@ -34,12 +34,12 @@ import (
|
|||||||
|
|
||||||
type sAdminOrder struct{}
|
type sAdminOrder struct{}
|
||||||
|
|
||||||
func NewAdminOrder() *sAdminOrder {
|
func newAdminOrder() *sAdminOrder {
|
||||||
return &sAdminOrder{}
|
return &sAdminOrder{}
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
service.RegisterAdminOrder(NewAdminOrder())
|
service.RegisterAdminOrder(newAdminOrder())
|
||||||
}
|
}
|
||||||
|
|
||||||
// Model 充值订单ORM模型
|
// Model 充值订单ORM模型
|
||||||
@ -70,8 +70,8 @@ func (s *sAdminOrder) AcceptRefund(ctx context.Context, in *adminin.OrderAcceptR
|
|||||||
// 更新余额
|
// 更新余额
|
||||||
_, err = service.AdminCreditsLog().SaveBalance(ctx, &adminin.CreditsLogSaveBalanceInp{
|
_, err = service.AdminCreditsLog().SaveBalance(ctx, &adminin.CreditsLogSaveBalanceInp{
|
||||||
MemberId: view.MemberId,
|
MemberId: view.MemberId,
|
||||||
AppId: contexts.GetModule(ctx),
|
AppId: contexts.GetModule[any](ctx),
|
||||||
AddonsName: contexts.GetAddonName(ctx),
|
AddonsName: contexts.GetAddonName[any](ctx),
|
||||||
CreditGroup: consts.CreditGroupBalanceRefund,
|
CreditGroup: consts.CreditGroupBalanceRefund,
|
||||||
Num: -view.Money,
|
Num: -view.Money,
|
||||||
MapId: view.Id,
|
MapId: view.Id,
|
||||||
@ -217,7 +217,7 @@ func (s *sAdminOrder) Create(ctx context.Context, in *adminin.OrderCreateInp) (r
|
|||||||
res = new(adminin.OrderCreateModel)
|
res = new(adminin.OrderCreateModel)
|
||||||
err = g.DB().Transaction(ctx, func(ctx context.Context, tx gdb.TX) (err error) {
|
err = g.DB().Transaction(ctx, func(ctx context.Context, tx gdb.TX) (err error) {
|
||||||
_, err = s.Model(ctx).Data(entity.AdminOrder{
|
_, err = s.Model(ctx).Data(entity.AdminOrder{
|
||||||
MemberId: contexts.GetUserId(ctx),
|
MemberId: contexts.GetUserId[any](ctx),
|
||||||
OrderType: in.OrderType,
|
OrderType: in.OrderType,
|
||||||
ProductId: in.ProductId,
|
ProductId: in.ProductId,
|
||||||
OrderSn: orderSn,
|
OrderSn: orderSn,
|
||||||
@ -326,7 +326,7 @@ func (s *sAdminOrder) Export(ctx context.Context, in *adminin.OrderListInp) (err
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
err = excel.ExportByStructs(ctx, tags, exports, fileName, sheetName)
|
err = excel.ExportByStructs[any](ctx, tags, exports, fileName, sheetName)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -22,12 +22,12 @@ import (
|
|||||||
|
|
||||||
type sAdminPost struct{}
|
type sAdminPost struct{}
|
||||||
|
|
||||||
func NewAdminPost() *sAdminPost {
|
func newAdminPost() *sAdminPost {
|
||||||
return &sAdminPost{}
|
return &sAdminPost{}
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
service.RegisterAdminPost(NewAdminPost())
|
service.RegisterAdminPost(newAdminPost())
|
||||||
dict.RegisterFunc("adminPostOption", "岗位选项", service.AdminPost().Option)
|
dict.RegisterFunc("adminPostOption", "岗位选项", service.AdminPost().Option)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -28,18 +28,18 @@ import (
|
|||||||
|
|
||||||
type sAdminRole struct{}
|
type sAdminRole struct{}
|
||||||
|
|
||||||
func NewAdminRole() *sAdminRole {
|
func newAdminRole() *sAdminRole {
|
||||||
return &sAdminRole{}
|
return &sAdminRole{}
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
service.RegisterAdminRole(NewAdminRole())
|
service.RegisterAdminRole(newAdminRole())
|
||||||
}
|
}
|
||||||
|
|
||||||
// Verify 验证权限
|
// Verify 验证权限
|
||||||
func (s *sAdminRole) Verify(ctx context.Context, path, method string) bool {
|
func (s *sAdminRole) Verify(ctx context.Context, path, method string) bool {
|
||||||
var (
|
var (
|
||||||
user = contexts.Get(ctx).User
|
user = contexts.Get[any](ctx).User
|
||||||
err error
|
err error
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -69,8 +69,8 @@ func (s *sAdminRole) List(ctx context.Context, in *adminin.RoleListInp) (res *ad
|
|||||||
)
|
)
|
||||||
|
|
||||||
// 非超管只获取下级角色
|
// 非超管只获取下级角色
|
||||||
if !service.AdminMember().VerifySuperId(ctx, contexts.GetUserId(ctx)) {
|
if !service.AdminMember().VerifySuperId(ctx, contexts.GetUserId[any](ctx)) {
|
||||||
pid = contexts.GetRoleId(ctx)
|
pid = contexts.GetRoleId[any](ctx)
|
||||||
mod = mod.WhereLike(dao.AdminRole.Columns().Tree, "%"+tree.GetIdLabel(pid)+"%")
|
mod = mod.WhereLike(dao.AdminRole.Columns().Tree, "%"+tree.GetIdLabel(pid)+"%")
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -309,7 +309,7 @@ func (s *sAdminRole) treeList(pid int64, nodes []*entity.AdminRole) (list []*adm
|
|||||||
|
|
||||||
// VerifyRoleId 验证角色ID
|
// VerifyRoleId 验证角色ID
|
||||||
func (s *sAdminRole) VerifyRoleId(ctx context.Context, id int64) (err error) {
|
func (s *sAdminRole) VerifyRoleId(ctx context.Context, id int64) (err error) {
|
||||||
mb := contexts.GetUser(ctx)
|
mb := contexts.GetUser[any](ctx)
|
||||||
if mb == nil {
|
if mb == nil {
|
||||||
err = gerror.New("用户信息获取失败!")
|
err = gerror.New("用户信息获取失败!")
|
||||||
return
|
return
|
||||||
|
@ -28,12 +28,12 @@ import (
|
|||||||
|
|
||||||
type sAdminSite struct{}
|
type sAdminSite struct{}
|
||||||
|
|
||||||
func NewAdminSite() *sAdminSite {
|
func newAdminSite() *sAdminSite {
|
||||||
return &sAdminSite{}
|
return &sAdminSite{}
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
service.RegisterAdminSite(NewAdminSite())
|
service.RegisterAdminSite(newAdminSite())
|
||||||
}
|
}
|
||||||
|
|
||||||
// Register 账号注册
|
// Register 账号注册
|
||||||
@ -333,6 +333,6 @@ func (s *sAdminSite) BindUserContext(ctx context.Context, claims *model.Identity
|
|||||||
LoginAt: claims.LoginAt,
|
LoginAt: claims.LoginAt,
|
||||||
}
|
}
|
||||||
|
|
||||||
contexts.SetUser(ctx, user)
|
contexts.SetUser[any](ctx, user)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -26,7 +26,7 @@ func init() {
|
|||||||
|
|
||||||
// UploadFile 上传文件
|
// UploadFile 上传文件
|
||||||
func (s *sCommonUpload) UploadFile(ctx context.Context, uploadType string, file *ghttp.UploadFile) (res *sysin.AttachmentListModel, err error) {
|
func (s *sCommonUpload) UploadFile(ctx context.Context, uploadType string, file *ghttp.UploadFile) (res *sysin.AttachmentListModel, err error) {
|
||||||
attachment, err := storager.DoUpload(ctx, uploadType, file)
|
attachment, err := storager.DoUpload[any](ctx, uploadType, file)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -41,7 +41,7 @@ func (s *sCommonUpload) UploadFile(ctx context.Context, uploadType string, file
|
|||||||
|
|
||||||
// CheckMultipart 检查文件分片
|
// CheckMultipart 检查文件分片
|
||||||
func (s *sCommonUpload) CheckMultipart(ctx context.Context, in *sysin.CheckMultipartInp) (res *sysin.CheckMultipartModel, err error) {
|
func (s *sCommonUpload) CheckMultipart(ctx context.Context, in *sysin.CheckMultipartInp) (res *sysin.CheckMultipartModel, err error) {
|
||||||
data, err := storager.CheckMultipart(ctx, in.CheckMultipartParams)
|
data, err := storager.CheckMultipart[any](ctx, in.CheckMultipartParams)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -64,7 +64,7 @@ func (s *sCommonWechat) Authorize(ctx context.Context, in *commonin.WechatAuthor
|
|||||||
prefix = g.Cfg().MustGet(ctx, "router.admin.prefix", "/admin").String()
|
prefix = g.Cfg().MustGet(ctx, "router.admin.prefix", "/admin").String()
|
||||||
path = gmeta.Get(common.WechatAuthorizeCallReq{}, "path").String()
|
path = gmeta.Get(common.WechatAuthorizeCallReq{}, "path").String()
|
||||||
redirectUri = basic.Domain + prefix + path
|
redirectUri = basic.Domain + prefix + path
|
||||||
memberId = contexts.GetUserId(ctx)
|
memberId = contexts.GetUserId[any](ctx)
|
||||||
state = s.GetCacheKey(in.Type, token.GetAuthKey(token.GetAuthorization(request)))
|
state = s.GetCacheKey(in.Type, token.GetAuthKey(token.GetAuthorization(request)))
|
||||||
scope string
|
scope string
|
||||||
)
|
)
|
||||||
|
@ -27,11 +27,11 @@ func (s *sHook) accessLog(r *ghttp.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var ctx = r.Context()
|
var ctx = r.Context()
|
||||||
if contexts.Get(ctx) == nil {
|
if contexts.Get[any](ctx) == nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
contexts.SetDataMap(ctx, g.Map{
|
contexts.SetDataMap[any](ctx, g.Map{
|
||||||
"request.takeUpTime": gtime.Now().Sub(gtime.New(r.EnterTime)).Milliseconds(),
|
"request.takeUpTime": gtime.Now().Sub(gtime.New(r.EnterTime)).Milliseconds(),
|
||||||
// ...
|
// ...
|
||||||
})
|
})
|
||||||
|
@ -71,7 +71,7 @@ func (s *sHook) lastAdminActive(r *ghttp.Request) {
|
|||||||
|
|
||||||
var (
|
var (
|
||||||
ctx = r.Context()
|
ctx = r.Context()
|
||||||
member = contexts.GetUser(ctx)
|
member = contexts.GetUser[any](ctx)
|
||||||
)
|
)
|
||||||
|
|
||||||
if member == nil || member.App != consts.AppAdmin {
|
if member == nil || member.App != consts.AppAdmin {
|
||||||
|
@ -44,7 +44,7 @@ func (s *sMiddleware) AdminAuth(r *ghttp.Request) {
|
|||||||
|
|
||||||
// 验证路由访问权限
|
// 验证路由访问权限
|
||||||
if !service.AdminRole().Verify(ctx, path, r.Method) {
|
if !service.AdminRole().Verify(ctx, path, r.Method) {
|
||||||
g.Log().Debugf(ctx, "AdminAuth fail path:%+v, GetRoleKey:%+v, r.Method:%+v", path, contexts.GetRoleKey(ctx), r.Method)
|
g.Log().Debugf(ctx, "AdminAuth fail path:%+v, GetRoleKey:%+v, r.Method:%+v", path, contexts.GetRoleKey[any](ctx), r.Method)
|
||||||
response.JsonExit(r, gcode.CodeSecurityReason.Code(), "你没有访问权限!")
|
response.JsonExit(r, gcode.CodeSecurityReason.Code(), "你没有访问权限!")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -73,7 +73,7 @@ func (s *sMiddleware) Ctx(r *ghttp.Request) {
|
|||||||
data["request.body"] = gjson.New(r.GetBodyString())
|
data["request.body"] = gjson.New(r.GetBodyString())
|
||||||
}
|
}
|
||||||
|
|
||||||
contexts.Init(r, &model.Context{
|
contexts.Init(r, &model.Context[any]{
|
||||||
Data: data,
|
Data: data,
|
||||||
Module: getModule(r.URL.Path),
|
Module: getModule(r.URL.Path),
|
||||||
})
|
})
|
||||||
@ -129,13 +129,13 @@ func (s *sMiddleware) DemoLimit(r *ghttp.Request) {
|
|||||||
func (s *sMiddleware) Addon(r *ghttp.Request) {
|
func (s *sMiddleware) Addon(r *ghttp.Request) {
|
||||||
var ctx = r.Context()
|
var ctx = r.Context()
|
||||||
|
|
||||||
if contexts.Get(ctx).Module == "" {
|
if contexts.Get[any](ctx).Module == "" {
|
||||||
g.Log().Warning(ctx, "application module is not initialized.")
|
g.Log().Warning(ctx, "application module is not initialized.")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// 替换掉应用模块前缀
|
// 替换掉应用模块前缀
|
||||||
path := gstr.Replace(r.URL.Path, "/"+contexts.Get(ctx).Module+"/", "", 1)
|
path := gstr.Replace(r.URL.Path, "/"+contexts.Get[any](ctx).Module+"/", "", 1)
|
||||||
ss := gstr.Explode("/", path)
|
ss := gstr.Explode("/", path)
|
||||||
if len(ss) == 0 {
|
if len(ss) == 0 {
|
||||||
g.Log().Warning(ctx, "addon was not recognized.")
|
g.Log().Warning(ctx, "addon was not recognized.")
|
||||||
@ -154,7 +154,7 @@ func (s *sMiddleware) Addon(r *ghttp.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
contexts.SetAddonName(ctx, sk.Name)
|
contexts.SetAddonName[any](ctx, sk.Name)
|
||||||
r.Middleware.Next()
|
r.Middleware.Next()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -171,7 +171,7 @@ func (s *sMiddleware) DeliverUserContext(r *ghttp.Request) (err error) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
contexts.SetUser(r.Context(), user)
|
contexts.SetUser[any](r.Context(), user)
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -69,9 +69,9 @@ func (s *sPay) Create(ctx context.Context, in payin.PayCreateInp) (res *payin.Pa
|
|||||||
}
|
}
|
||||||
|
|
||||||
data := &entity.PayLog{
|
data := &entity.PayLog{
|
||||||
MemberId: contexts.GetUserId(ctx),
|
MemberId: contexts.GetUserId[any](ctx),
|
||||||
AppId: contexts.GetModule(ctx),
|
AppId: contexts.GetModule[any](ctx),
|
||||||
AddonsName: contexts.GetAddonName(ctx),
|
AddonsName: contexts.GetAddonName[any](ctx),
|
||||||
OrderSn: in.OrderSn,
|
OrderSn: in.OrderSn,
|
||||||
OrderGroup: in.OrderGroup,
|
OrderGroup: in.OrderGroup,
|
||||||
Openid: in.Openid,
|
Openid: in.Openid,
|
||||||
|
@ -97,7 +97,7 @@ func (s *sPay) Export(ctx context.Context, in payin.PayListInp) (err error) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
err = excel.ExportByStructs(ctx, tags, exports, fileName, sheetName)
|
err = excel.ExportByStructs[any](ctx, tags, exports, fileName, sheetName)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -213,6 +213,6 @@ func (s *sPayRefund) Export(ctx context.Context, in *payin.PayRefundListInp) (er
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
err = excel.ExportByStructs(ctx, tags, exports, fileName, sheetName)
|
err = excel.ExportByStructs[any](ctx, tags, exports, fileName, sheetName)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -55,7 +55,7 @@ func (s *sSysAttachment) View(ctx context.Context, in *sysin.AttachmentViewInp)
|
|||||||
// List 获取附件列表
|
// List 获取附件列表
|
||||||
func (s *sSysAttachment) List(ctx context.Context, in *sysin.AttachmentListInp) (list []*sysin.AttachmentListModel, totalCount int, err error) {
|
func (s *sSysAttachment) List(ctx context.Context, in *sysin.AttachmentListInp) (list []*sysin.AttachmentListModel, totalCount int, err error) {
|
||||||
mod := s.Model(ctx)
|
mod := s.Model(ctx)
|
||||||
memberId := contexts.GetUserId(ctx)
|
memberId := contexts.GetUserId[any](ctx)
|
||||||
|
|
||||||
// 超管允许查看指定用户的附件
|
// 超管允许查看指定用户的附件
|
||||||
if service.AdminMember().VerifySuperId(ctx, memberId) && in.MemberId > 0 {
|
if service.AdminMember().VerifySuperId(ctx, memberId) && in.MemberId > 0 {
|
||||||
@ -108,7 +108,7 @@ func (s *sSysAttachment) List(ctx context.Context, in *sysin.AttachmentListInp)
|
|||||||
|
|
||||||
// ClearKind 清空上传类型
|
// ClearKind 清空上传类型
|
||||||
func (s *sSysAttachment) ClearKind(ctx context.Context, in *sysin.AttachmentClearKindInp) (err error) {
|
func (s *sSysAttachment) ClearKind(ctx context.Context, in *sysin.AttachmentClearKindInp) (err error) {
|
||||||
memberId := contexts.GetUserId(ctx)
|
memberId := contexts.GetUserId[any](ctx)
|
||||||
if _, err = s.Model(ctx).Where(dao.SysAttachment.Columns().MemberId, memberId).Where(dao.SysAttachment.Columns().Kind, in.Kind).Delete(); err != nil {
|
if _, err = s.Model(ctx).Where(dao.SysAttachment.Columns().MemberId, memberId).Where(dao.SysAttachment.Columns().Kind, in.Kind).Delete(); err != nil {
|
||||||
err = gerror.Wrap(err, "删除附件上传类型失败,请稍后重试!")
|
err = gerror.Wrap(err, "删除附件上传类型失败,请稍后重试!")
|
||||||
}
|
}
|
||||||
|
@ -129,7 +129,7 @@ func (s *sSysCurdDemo) Export(ctx context.Context, in *sysin.CurdDemoListInp) (e
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
err = excel.ExportByStructs(ctx, tags, exports, fileName, sheetName)
|
err = excel.ExportByStructs[any](ctx, tags, exports, fileName, sheetName)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -139,7 +139,7 @@ func (s *sSysCurdDemo) Edit(ctx context.Context, in *sysin.CurdDemoEditInp) (err
|
|||||||
|
|
||||||
// 修改
|
// 修改
|
||||||
if in.Id > 0 {
|
if in.Id > 0 {
|
||||||
in.UpdatedBy = contexts.GetUserId(ctx)
|
in.UpdatedBy = contexts.GetUserId[any](ctx)
|
||||||
if _, err = s.Model(ctx).
|
if _, err = s.Model(ctx).
|
||||||
Fields(sysin.CurdDemoUpdateFields{}).
|
Fields(sysin.CurdDemoUpdateFields{}).
|
||||||
WherePri(in.Id).Data(in).Update(); err != nil {
|
WherePri(in.Id).Data(in).Update(); err != nil {
|
||||||
@ -149,7 +149,7 @@ func (s *sSysCurdDemo) Edit(ctx context.Context, in *sysin.CurdDemoEditInp) (err
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 新增
|
// 新增
|
||||||
in.CreatedBy = contexts.GetUserId(ctx)
|
in.CreatedBy = contexts.GetUserId[any](ctx)
|
||||||
if _, err = s.Model(ctx, &handler.Option{FilterAuth: false}).
|
if _, err = s.Model(ctx, &handler.Option{FilterAuth: false}).
|
||||||
Fields(sysin.CurdDemoInsertFields{}).
|
Fields(sysin.CurdDemoInsertFields{}).
|
||||||
Data(in).OmitEmptyData().Insert(); err != nil {
|
Data(in).OmitEmptyData().Insert(); err != nil {
|
||||||
@ -163,7 +163,7 @@ func (s *sSysCurdDemo) Edit(ctx context.Context, in *sysin.CurdDemoEditInp) (err
|
|||||||
func (s *sSysCurdDemo) Delete(ctx context.Context, in *sysin.CurdDemoDeleteInp) (err error) {
|
func (s *sSysCurdDemo) Delete(ctx context.Context, in *sysin.CurdDemoDeleteInp) (err error) {
|
||||||
|
|
||||||
if _, err = s.Model(ctx).WherePri(in.Id).Data(g.Map{
|
if _, err = s.Model(ctx).WherePri(in.Id).Data(g.Map{
|
||||||
dao.SysGenCurdDemo.Columns().DeletedBy: contexts.GetUserId(ctx),
|
dao.SysGenCurdDemo.Columns().DeletedBy: contexts.GetUserId[any](ctx),
|
||||||
dao.SysGenCurdDemo.Columns().DeletedAt: gtime.Now(),
|
dao.SysGenCurdDemo.Columns().DeletedAt: gtime.Now(),
|
||||||
}).Update(); err != nil {
|
}).Update(); err != nil {
|
||||||
err = gerror.Wrap(err, "删除CURD列表失败,请稍后重试!")
|
err = gerror.Wrap(err, "删除CURD列表失败,请稍后重试!")
|
||||||
@ -200,7 +200,7 @@ func (s *sSysCurdDemo) View(ctx context.Context, in *sysin.CurdDemoViewInp) (res
|
|||||||
func (s *sSysCurdDemo) Status(ctx context.Context, in *sysin.CurdDemoStatusInp) (err error) {
|
func (s *sSysCurdDemo) Status(ctx context.Context, in *sysin.CurdDemoStatusInp) (err error) {
|
||||||
if _, err = s.Model(ctx).WherePri(in.Id).Data(g.Map{
|
if _, err = s.Model(ctx).WherePri(in.Id).Data(g.Map{
|
||||||
dao.SysGenCurdDemo.Columns().Status: in.Status,
|
dao.SysGenCurdDemo.Columns().Status: in.Status,
|
||||||
dao.SysGenCurdDemo.Columns().UpdatedBy: contexts.GetUserId(ctx),
|
dao.SysGenCurdDemo.Columns().UpdatedBy: contexts.GetUserId[any](ctx),
|
||||||
}).Update(); err != nil {
|
}).Update(); err != nil {
|
||||||
err = gerror.Wrap(err, "更新CURD列表状态失败,请稍后重试!")
|
err = gerror.Wrap(err, "更新CURD列表状态失败,请稍后重试!")
|
||||||
return
|
return
|
||||||
@ -222,7 +222,7 @@ func (s *sSysCurdDemo) Switch(ctx context.Context, in *sysin.CurdDemoSwitchInp)
|
|||||||
|
|
||||||
if _, err = s.Model(ctx).WherePri(in.Id).Data(g.Map{
|
if _, err = s.Model(ctx).WherePri(in.Id).Data(g.Map{
|
||||||
in.Key: in.Value,
|
in.Key: in.Value,
|
||||||
dao.SysGenCurdDemo.Columns().UpdatedBy: contexts.GetUserId(ctx),
|
dao.SysGenCurdDemo.Columns().UpdatedBy: contexts.GetUserId[any](ctx),
|
||||||
}).Update(); err != nil {
|
}).Update(); err != nil {
|
||||||
err = gerror.Wrap(err, "更新CURD列表开关失败,请稍后重试!")
|
err = gerror.Wrap(err, "更新CURD列表开关失败,请稍后重试!")
|
||||||
return
|
return
|
||||||
|
@ -210,7 +210,7 @@ func (s *sSysEmsLog) newView(ctx context.Context, in *sysin.SendEmsInp, config *
|
|||||||
|
|
||||||
var (
|
var (
|
||||||
username string
|
username string
|
||||||
user = contexts.GetUser(ctx)
|
user = contexts.GetUser[any](ctx)
|
||||||
request = ghttp.RequestFromCtx(ctx)
|
request = ghttp.RequestFromCtx(ctx)
|
||||||
ip = location.GetClientIp(request)
|
ip = location.GetClientIp(request)
|
||||||
)
|
)
|
||||||
|
@ -101,7 +101,7 @@ func (s *sSysLog) Export(ctx context.Context, in *sysin.LogListInp) (err error)
|
|||||||
exportList = append(exportList, row)
|
exportList = append(exportList, row)
|
||||||
}
|
}
|
||||||
|
|
||||||
err = excel.ExportByStructs(ctx, titleList, exportList, fileName, sheetName)
|
err = excel.ExportByStructs[any](ctx, titleList, exportList, fileName, sheetName)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -151,7 +151,7 @@ func (s *sSysLog) AutoLog(ctx context.Context) error {
|
|||||||
// AnalysisLog 解析日志数据
|
// AnalysisLog 解析日志数据
|
||||||
func (s *sSysLog) AnalysisLog(ctx context.Context) entity.SysLog {
|
func (s *sSysLog) AnalysisLog(ctx context.Context) entity.SysLog {
|
||||||
var (
|
var (
|
||||||
mctx = contexts.Get(ctx)
|
mctx = contexts.Get[any](ctx)
|
||||||
response = mctx.Response
|
response = mctx.Response
|
||||||
user = mctx.User
|
user = mctx.User
|
||||||
request = ghttp.RequestFromCtx(ctx)
|
request = ghttp.RequestFromCtx(ctx)
|
||||||
|
@ -115,7 +115,7 @@ func (s *sSysLoginLog) Export(ctx context.Context, in *sysin.LoginLogListInp) (e
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
err = excel.ExportByStructs(ctx, tags, exports, fileName, sheetName)
|
err = excel.ExportByStructs[any](ctx, tags, exports, fileName, sheetName)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -100,7 +100,7 @@ func (s *sSysNormalTreeDemo) Edit(ctx context.Context, in *sysin.NormalTreeDemoE
|
|||||||
}
|
}
|
||||||
// 修改
|
// 修改
|
||||||
if in.Id > 0 {
|
if in.Id > 0 {
|
||||||
in.UpdatedBy = contexts.GetUserId(ctx)
|
in.UpdatedBy = contexts.GetUserId[any](ctx)
|
||||||
if _, err = s.Model(ctx).
|
if _, err = s.Model(ctx).
|
||||||
Fields(sysin.NormalTreeDemoUpdateFields{}).
|
Fields(sysin.NormalTreeDemoUpdateFields{}).
|
||||||
WherePri(in.Id).Data(in).Update(); err != nil {
|
WherePri(in.Id).Data(in).Update(); err != nil {
|
||||||
@ -110,7 +110,7 @@ func (s *sSysNormalTreeDemo) Edit(ctx context.Context, in *sysin.NormalTreeDemoE
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 新增
|
// 新增
|
||||||
in.CreatedBy = contexts.GetUserId(ctx)
|
in.CreatedBy = contexts.GetUserId[any](ctx)
|
||||||
if _, err = s.Model(ctx, &handler.Option{FilterAuth: false}).
|
if _, err = s.Model(ctx, &handler.Option{FilterAuth: false}).
|
||||||
Fields(sysin.NormalTreeDemoInsertFields{}).
|
Fields(sysin.NormalTreeDemoInsertFields{}).
|
||||||
Data(in).OmitEmptyData().Insert(); err != nil {
|
Data(in).OmitEmptyData().Insert(); err != nil {
|
||||||
|
@ -100,7 +100,7 @@ func (s *sSysOptionTreeDemo) Edit(ctx context.Context, in *sysin.OptionTreeDemoE
|
|||||||
}
|
}
|
||||||
// 修改
|
// 修改
|
||||||
if in.Id > 0 {
|
if in.Id > 0 {
|
||||||
in.UpdatedBy = contexts.GetUserId(ctx)
|
in.UpdatedBy = contexts.GetUserId[any](ctx)
|
||||||
if _, err = s.Model(ctx).
|
if _, err = s.Model(ctx).
|
||||||
Fields(sysin.OptionTreeDemoUpdateFields{}).
|
Fields(sysin.OptionTreeDemoUpdateFields{}).
|
||||||
WherePri(in.Id).Data(in).Update(); err != nil {
|
WherePri(in.Id).Data(in).Update(); err != nil {
|
||||||
@ -110,7 +110,7 @@ func (s *sSysOptionTreeDemo) Edit(ctx context.Context, in *sysin.OptionTreeDemoE
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 新增
|
// 新增
|
||||||
in.CreatedBy = contexts.GetUserId(ctx)
|
in.CreatedBy = contexts.GetUserId[any](ctx)
|
||||||
if _, err = s.Model(ctx, &handler.Option{FilterAuth: false}).
|
if _, err = s.Model(ctx, &handler.Option{FilterAuth: false}).
|
||||||
Fields(sysin.OptionTreeDemoInsertFields{}).
|
Fields(sysin.OptionTreeDemoInsertFields{}).
|
||||||
Data(in).OmitEmptyData().Insert(); err != nil {
|
Data(in).OmitEmptyData().Insert(); err != nil {
|
||||||
|
@ -123,7 +123,7 @@ func (s *sSysServeLicense) Export(ctx context.Context, in *sysin.ServeLicenseLis
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
err = excel.ExportByStructs(ctx, tags, exports, fileName, sheetName)
|
err = excel.ExportByStructs[any](ctx, tags, exports, fileName, sheetName)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -88,7 +88,7 @@ func (s *sSysServeLog) List(ctx context.Context, in *sysin.ServeLogListInp) (lis
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
err = mod.Fields(fields).Handler(handler.FilterAuth).Page(in.Page, in.PerPage).OrderDesc(dao.SysServeLog.Columns().Id).Scan(&list)
|
err = mod.Fields(fields).Handler(handler.FilterAuth[any]).Page(in.Page, in.PerPage).OrderDesc(dao.SysServeLog.Columns().Id).Scan(&list)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -115,7 +115,7 @@ func (s *sSysServeLog) Export(ctx context.Context, in *sysin.ServeLogListInp) (e
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
err = excel.ExportByStructs(ctx, tags, exports, fileName, sheetName)
|
err = excel.ExportByStructs[any](ctx, tags, exports, fileName, sheetName)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -83,7 +83,7 @@ func (s *sView) RenderTpl(ctx context.Context, tpl string, data ...model.View) {
|
|||||||
viewData["BuildIn"] = &viewBuildIn{httpRequest: request}
|
viewData["BuildIn"] = &viewBuildIn{httpRequest: request}
|
||||||
|
|
||||||
// 插件模板,兼容从资源文件中读取
|
// 插件模板,兼容从资源文件中读取
|
||||||
if addonName := contexts.GetAddonName(ctx); len(addonName) > 0 {
|
if addonName := contexts.GetAddonName[any](ctx); len(addonName) > 0 {
|
||||||
basePath := addons.GetResourcePath(ctx)
|
basePath := addons.GetResourcePath(ctx)
|
||||||
if len(basePath) > 0 && !gstr.Contains(tpl, basePath) {
|
if len(basePath) > 0 && !gstr.Contains(tpl, basePath) {
|
||||||
path := addons.ViewPath(addonName, basePath)
|
path := addons.ViewPath(addonName, basePath)
|
||||||
|
@ -11,12 +11,12 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// Context 请求上下文结构
|
// Context 请求上下文结构
|
||||||
type Context struct {
|
type Context[T any] struct {
|
||||||
Module string // 应用模块 admin|api|home|websocket
|
Module string // 应用模块 admin|api|home|websocket
|
||||||
AddonName string // 插件名称 如果不是插件模块请求,可能为空
|
AddonName string // 插件名称 如果不是插件模块请求,可能为空
|
||||||
User *Identity // 上下文用户信息
|
User *Identity // 上下文用户信息
|
||||||
Response *Response // 请求响应
|
Response *Response[T] // 请求响应
|
||||||
Data g.Map // 自定kv变量 业务模块根据需要设置,不固定
|
Data g.Map // 自定kv变量 业务模块根据需要设置,不固定
|
||||||
}
|
}
|
||||||
|
|
||||||
// Identity 通用身份模型
|
// Identity 通用身份模型
|
||||||
|
@ -37,7 +37,7 @@ func (in *CreditsLogSaveBalanceInp) Filter(ctx context.Context) (err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if in.AppId == "" {
|
if in.AppId == "" {
|
||||||
in.AppId = contexts.GetModule(ctx)
|
in.AppId = contexts.GetModule[any](ctx)
|
||||||
}
|
}
|
||||||
|
|
||||||
if in.CreditGroup == "" {
|
if in.CreditGroup == "" {
|
||||||
@ -75,7 +75,7 @@ func (in *CreditsLogSaveIntegralInp) Filter(ctx context.Context) (err error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if in.AppId == "" {
|
if in.AppId == "" {
|
||||||
in.AppId = contexts.GetModule(ctx)
|
in.AppId = contexts.GetModule[any](ctx)
|
||||||
}
|
}
|
||||||
|
|
||||||
if in.CreditGroup == "" {
|
if in.CreditGroup == "" {
|
||||||
|
@ -287,8 +287,8 @@ func (in *MemberAddBalanceInp) Filter(ctx context.Context) (err error) {
|
|||||||
in.Remark = fmt.Sprintf("扣除余额:%v", in.OtherNum)
|
in.Remark = fmt.Sprintf("扣除余额:%v", in.OtherNum)
|
||||||
}
|
}
|
||||||
|
|
||||||
in.AppId = contexts.GetModule(ctx)
|
in.AppId = contexts.GetModule[any](ctx)
|
||||||
in.AddonsName = contexts.GetAddonName(ctx)
|
in.AddonsName = contexts.GetAddonName[any](ctx)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -330,8 +330,8 @@ func (in *MemberAddIntegralInp) Filter(ctx context.Context) (err error) {
|
|||||||
in.Remark = fmt.Sprintf("扣除积分:%v", in.OtherNum)
|
in.Remark = fmt.Sprintf("扣除积分:%v", in.OtherNum)
|
||||||
}
|
}
|
||||||
|
|
||||||
in.AppId = contexts.GetModule(ctx)
|
in.AppId = contexts.GetModule[any](ctx)
|
||||||
in.AddonsName = contexts.GetAddonName(ctx)
|
in.AddonsName = contexts.GetAddonName[any](ctx)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,14 +3,13 @@
|
|||||||
// @Copyright Copyright (c) 2023 HotGo CLI
|
// @Copyright Copyright (c) 2023 HotGo CLI
|
||||||
// @Author Ms <133814250@qq.com>
|
// @Author Ms <133814250@qq.com>
|
||||||
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
|
// @License https://github.com/bufanyun/hotgo/blob/master/LICENSE
|
||||||
//
|
|
||||||
package model
|
package model
|
||||||
|
|
||||||
// Response HTTP响应
|
// Response HTTP响应
|
||||||
type Response struct {
|
type Response[T any] struct {
|
||||||
Code int `json:"code" example:"0" description:"状态码"`
|
Code int `json:"code" example:"0" description:"状态码"`
|
||||||
Message string `json:"message,omitempty" example:"操作成功" description:"提示消息"`
|
Message string `json:"message,omitempty" example:"操作成功" description:"提示消息"`
|
||||||
Data interface{} `json:"data,omitempty" description:"数据集"`
|
Data T `json:"data,omitempty" description:"数据集"`
|
||||||
Error interface{} `json:"error,omitempty" description:"错误信息"`
|
Error interface{} `json:"error,omitempty" description:"错误信息"`
|
||||||
Timestamp int64 `json:"timestamp" example:"1640966400" description:"服务器时间戳"`
|
Timestamp int64 `json:"timestamp" example:"1640966400" description:"服务器时间戳"`
|
||||||
TraceID string `json:"traceID" v:"0" example:"d0bb93048bc5c9164cdee845dcb7f820" description:"链路ID"`
|
TraceID string `json:"traceID" v:"0" example:"d0bb93048bc5c9164cdee845dcb7f820" description:"链路ID"`
|
||||||
|
@ -29,7 +29,7 @@ func WebSocket(ctx context.Context, group *ghttp.RouterGroup) {
|
|||||||
group.Middleware(service.Middleware().WebSocketAuth)
|
group.Middleware(service.Middleware().WebSocketAuth)
|
||||||
|
|
||||||
// ws
|
// ws
|
||||||
group.GET("/", websocket.WsPage)
|
group.GET("/", websocket.WsPage[any])
|
||||||
})
|
})
|
||||||
|
|
||||||
// 启动websocket监听
|
// 启动websocket监听
|
||||||
|
@ -55,7 +55,7 @@ type Client struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// NewClient 初始化
|
// NewClient 初始化
|
||||||
func NewClient(r *ghttp.Request, socket *websocket.Conn, firstTime uint64) (client *Client) {
|
func NewClient[T any](r *ghttp.Request, socket *websocket.Conn, firstTime uint64) (client *Client) {
|
||||||
client = &Client{
|
client = &Client{
|
||||||
Addr: socket.RemoteAddr().String(),
|
Addr: socket.RemoteAddr().String(),
|
||||||
ID: guid.S(),
|
ID: guid.S(),
|
||||||
@ -65,7 +65,7 @@ func NewClient(r *ghttp.Request, socket *websocket.Conn, firstTime uint64) (clie
|
|||||||
closeSignal: make(chan struct{}, 1),
|
closeSignal: make(chan struct{}, 1),
|
||||||
FirstTime: firstTime,
|
FirstTime: firstTime,
|
||||||
HeartbeatTime: firstTime,
|
HeartbeatTime: firstTime,
|
||||||
User: contexts.GetUser(r.Context()),
|
User: contexts.GetUser[T](r.Context()),
|
||||||
IP: location.GetClientIp(r),
|
IP: location.GetClientIp(r),
|
||||||
UserAgent: r.UserAgent(),
|
UserAgent: r.UserAgent(),
|
||||||
}
|
}
|
||||||
|
@ -35,7 +35,7 @@ func Stop() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// WsPage ws入口
|
// WsPage ws入口
|
||||||
func WsPage(r *ghttp.Request) {
|
func WsPage[T any](r *ghttp.Request) {
|
||||||
upGrader := websocket.Upgrader{
|
upGrader := websocket.Upgrader{
|
||||||
ReadBufferSize: 1024,
|
ReadBufferSize: 1024,
|
||||||
WriteBufferSize: 1024,
|
WriteBufferSize: 1024,
|
||||||
@ -48,7 +48,7 @@ func WsPage(r *ghttp.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
currentTime := uint64(gtime.Now().Unix())
|
currentTime := uint64(gtime.Now().Unix())
|
||||||
client := NewClient(r, conn, currentTime)
|
client := NewClient[T](r, conn, currentTime)
|
||||||
go client.read()
|
go client.read()
|
||||||
go client.write()
|
go client.write()
|
||||||
// 用户连接事件
|
// 用户连接事件
|
||||||
|
@ -26,11 +26,22 @@ var (
|
|||||||
// 单元格表头
|
// 单元格表头
|
||||||
char = []string{"", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"}
|
char = []string{"", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"}
|
||||||
// 默认行样式
|
// 默认行样式
|
||||||
defaultRowStyle = `{"font":{"color":"#666666","size":13,"family":"arial"},"alignment":{"vertical":"center","horizontal":"center"}}`
|
//defaultRowStyle = `{"font":{"color":"#666666","size":13,"family":"arial"},"alignment":{"vertical":"center","horizontal":"center"}}`
|
||||||
|
defaultRowStyle = &excelize.Style{
|
||||||
|
Font: &excelize.Font{
|
||||||
|
Color: "#666666",
|
||||||
|
Size: 13,
|
||||||
|
Family: "arial",
|
||||||
|
},
|
||||||
|
Alignment: &excelize.Alignment{
|
||||||
|
Vertical: "center",
|
||||||
|
Horizontal: "center",
|
||||||
|
},
|
||||||
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
// ExportByStructs 导出切片结构体到excel表格
|
// ExportByStructs 导出切片结构体到excel表格
|
||||||
func ExportByStructs(ctx context.Context, tags []string, list interface{}, fileName string, sheetName string) (err error) {
|
func ExportByStructs[T any](ctx context.Context, tags []string, list interface{}, fileName string, sheetName string) (err error) {
|
||||||
f := excelize.NewFile()
|
f := excelize.NewFile()
|
||||||
f.SetSheetName("Sheet1", sheetName)
|
f.SetSheetName("Sheet1", sheetName)
|
||||||
_ = f.SetRowHeight("Sheet1", 1, 30)
|
_ = f.SetRowHeight("Sheet1", 1, 30)
|
||||||
@ -94,7 +105,7 @@ func ExportByStructs(ctx context.Context, tags []string, list interface{}, fileN
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 加入到上下文
|
// 加入到上下文
|
||||||
contexts.SetResponse(ctx, &model.Response{
|
contexts.SetResponse(ctx, &model.Response[T]{
|
||||||
Code: gcode.CodeOK.Code(),
|
Code: gcode.CodeOK.Code(),
|
||||||
Message: "export successfully!",
|
Message: "export successfully!",
|
||||||
Timestamp: time.Now().Unix(),
|
Timestamp: time.Now().Unix(),
|
||||||
|
26
uniapp/.gitignore
vendored
Normal file
26
uniapp/.gitignore
vendored
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
# Logs
|
||||||
|
logs
|
||||||
|
*.log
|
||||||
|
npm-debug.log*
|
||||||
|
yarn-debug.log*
|
||||||
|
yarn-error.log*
|
||||||
|
pnpm-debug.log*
|
||||||
|
lerna-debug.log*
|
||||||
|
|
||||||
|
node_modules
|
||||||
|
|
||||||
|
.DS_Store
|
||||||
|
dist
|
||||||
|
*.local
|
||||||
|
|
||||||
|
# Editor directories and files
|
||||||
|
.idea
|
||||||
|
*.suo
|
||||||
|
*.ntvs*
|
||||||
|
*.njsproj
|
||||||
|
*.sln
|
||||||
|
*.sw?
|
||||||
|
|
||||||
|
.vscode
|
||||||
|
.hbuilderx
|
||||||
|
unpackage
|
20
uniapp/index.html
Normal file
20
uniapp/index.html
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<script>
|
||||||
|
var coverSupport = 'CSS' in window && typeof CSS.supports === 'function' && (CSS.supports('top: env(a)') ||
|
||||||
|
CSS.supports('top: constant(a)'))
|
||||||
|
document.write(
|
||||||
|
'<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' +
|
||||||
|
(coverSupport ? ', viewport-fit=cover' : '') + '" />')
|
||||||
|
</script>
|
||||||
|
<title></title>
|
||||||
|
<!--preload-links-->
|
||||||
|
<!--app-context-->
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="app"><!--app-html--></div>
|
||||||
|
<script type="module" src="/src/main.ts"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
13532
uniapp/package-lock.json
generated
Normal file
13532
uniapp/package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
77
uniapp/package.json
Normal file
77
uniapp/package.json
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
{
|
||||||
|
"name": "uni-preset-vue",
|
||||||
|
"version": "0.0.0",
|
||||||
|
"scripts": {
|
||||||
|
"dev:app": "uni -p app",
|
||||||
|
"dev:app-android": "uni -p app-android",
|
||||||
|
"dev:app-ios": "uni -p app-ios",
|
||||||
|
"dev:app-harmony": "uni -p app-harmony",
|
||||||
|
"dev:custom": "uni -p",
|
||||||
|
"dev:h5": "uni",
|
||||||
|
"dev:h5:ssr": "uni --ssr",
|
||||||
|
"dev:mp-alipay": "uni -p mp-alipay",
|
||||||
|
"dev:mp-baidu": "uni -p mp-baidu",
|
||||||
|
"dev:mp-jd": "uni -p mp-jd",
|
||||||
|
"dev:mp-kuaishou": "uni -p mp-kuaishou",
|
||||||
|
"dev:mp-lark": "uni -p mp-lark",
|
||||||
|
"dev:mp-qq": "uni -p mp-qq",
|
||||||
|
"dev:mp-toutiao": "uni -p mp-toutiao",
|
||||||
|
"dev:mp-weixin": "uni -p mp-weixin",
|
||||||
|
"dev:mp-xhs": "uni -p mp-xhs",
|
||||||
|
"dev:quickapp-webview": "uni -p quickapp-webview",
|
||||||
|
"dev:quickapp-webview-huawei": "uni -p quickapp-webview-huawei",
|
||||||
|
"dev:quickapp-webview-union": "uni -p quickapp-webview-union",
|
||||||
|
"build:app": "uni build -p app",
|
||||||
|
"build:app-android": "uni build -p app-android",
|
||||||
|
"build:app-ios": "uni build -p app-ios",
|
||||||
|
"build:app-harmony": "uni build -p app-harmony",
|
||||||
|
"build:custom": "uni build -p",
|
||||||
|
"build:h5": "uni build",
|
||||||
|
"build:h5:ssr": "uni build --ssr",
|
||||||
|
"build:mp-alipay": "uni build -p mp-alipay",
|
||||||
|
"build:mp-baidu": "uni build -p mp-baidu",
|
||||||
|
"build:mp-jd": "uni build -p mp-jd",
|
||||||
|
"build:mp-kuaishou": "uni build -p mp-kuaishou",
|
||||||
|
"build:mp-lark": "uni build -p mp-lark",
|
||||||
|
"build:mp-qq": "uni build -p mp-qq",
|
||||||
|
"build:mp-toutiao": "uni build -p mp-toutiao",
|
||||||
|
"build:mp-weixin": "uni build -p mp-weixin",
|
||||||
|
"build:mp-xhs": "uni build -p mp-xhs",
|
||||||
|
"build:quickapp-webview": "uni build -p quickapp-webview",
|
||||||
|
"build:quickapp-webview-huawei": "uni build -p quickapp-webview-huawei",
|
||||||
|
"build:quickapp-webview-union": "uni build -p quickapp-webview-union",
|
||||||
|
"type-check": "vue-tsc --noEmit"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@dcloudio/uni-app": "3.0.0-4020420240722002",
|
||||||
|
"@dcloudio/uni-app-harmony": "3.0.0-4020420240722002",
|
||||||
|
"@dcloudio/uni-app-plus": "3.0.0-4020420240722002",
|
||||||
|
"@dcloudio/uni-components": "3.0.0-4020420240722002",
|
||||||
|
"@dcloudio/uni-h5": "3.0.0-4020420240722002",
|
||||||
|
"@dcloudio/uni-mp-alipay": "3.0.0-4020420240722002",
|
||||||
|
"@dcloudio/uni-mp-baidu": "3.0.0-4020420240722002",
|
||||||
|
"@dcloudio/uni-mp-jd": "3.0.0-4020420240722002",
|
||||||
|
"@dcloudio/uni-mp-kuaishou": "3.0.0-4020420240722002",
|
||||||
|
"@dcloudio/uni-mp-lark": "3.0.0-4020420240722002",
|
||||||
|
"@dcloudio/uni-mp-qq": "3.0.0-4020420240722002",
|
||||||
|
"@dcloudio/uni-mp-toutiao": "3.0.0-4020420240722002",
|
||||||
|
"@dcloudio/uni-mp-weixin": "3.0.0-4020420240722002",
|
||||||
|
"@dcloudio/uni-mp-xhs": "3.0.0-4020420240722002",
|
||||||
|
"@dcloudio/uni-quickapp-webview": "3.0.0-4020420240722002",
|
||||||
|
"vue": "^3.5.7",
|
||||||
|
"vue-i18n": "^10.0.1"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@dcloudio/types": "^3.4.12",
|
||||||
|
"@dcloudio/uni-automator": "3.0.0-4020420240722002",
|
||||||
|
"@dcloudio/uni-cli-shared": "3.0.0-4020420240722002",
|
||||||
|
"@dcloudio/uni-stacktracey": "3.0.0-4020420240722002",
|
||||||
|
"@dcloudio/vite-plugin-uni": "3.0.0-4020420240722002",
|
||||||
|
"@vue/runtime-core": "^3.5.7",
|
||||||
|
"@vue/tsconfig": "^0.5.1",
|
||||||
|
"npm-check-updates": "^17.1.2",
|
||||||
|
"typescript": "^5.6.2",
|
||||||
|
"vite": "5.4.7",
|
||||||
|
"vue-tsc": "^2.1.6"
|
||||||
|
}
|
||||||
|
}
|
10
uniapp/shims-uni.d.ts
vendored
Normal file
10
uniapp/shims-uni.d.ts
vendored
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
/// <reference types='@dcloudio/types' />
|
||||||
|
import 'vue'
|
||||||
|
|
||||||
|
declare module '@vue/runtime-core' {
|
||||||
|
type Hooks = App.AppInstance & Page.PageInstance;
|
||||||
|
|
||||||
|
interface ComponentCustomOptions extends Hooks {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
13
uniapp/src/App.vue
Normal file
13
uniapp/src/App.vue
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
import { onLaunch, onShow, onHide } from "@dcloudio/uni-app";
|
||||||
|
onLaunch(() => {
|
||||||
|
console.log("App Launch");
|
||||||
|
});
|
||||||
|
onShow(() => {
|
||||||
|
console.log("App Show");
|
||||||
|
});
|
||||||
|
onHide(() => {
|
||||||
|
console.log("App Hide");
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
<style></style>
|
8
uniapp/src/env.d.ts
vendored
Normal file
8
uniapp/src/env.d.ts
vendored
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
/// <reference types="vite/client" />
|
||||||
|
|
||||||
|
declare module '*.vue' {
|
||||||
|
import { DefineComponent } from 'vue'
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/ban-types
|
||||||
|
const component: DefineComponent<{}, {}, any>
|
||||||
|
export default component
|
||||||
|
}
|
8
uniapp/src/main.ts
Normal file
8
uniapp/src/main.ts
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
import { createSSRApp } from "vue";
|
||||||
|
import App from "./App.vue";
|
||||||
|
export function createApp() {
|
||||||
|
const app = createSSRApp(App);
|
||||||
|
return {
|
||||||
|
app,
|
||||||
|
};
|
||||||
|
}
|
72
uniapp/src/manifest.json
Normal file
72
uniapp/src/manifest.json
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
{
|
||||||
|
"name" : "",
|
||||||
|
"appid" : "",
|
||||||
|
"description" : "",
|
||||||
|
"versionName" : "1.0.0",
|
||||||
|
"versionCode" : "100",
|
||||||
|
"transformPx" : false,
|
||||||
|
/* 5+App特有相关 */
|
||||||
|
"app-plus" : {
|
||||||
|
"usingComponents" : true,
|
||||||
|
"nvueStyleCompiler" : "uni-app",
|
||||||
|
"compilerVersion" : 3,
|
||||||
|
"splashscreen" : {
|
||||||
|
"alwaysShowBeforeRender" : true,
|
||||||
|
"waiting" : true,
|
||||||
|
"autoclose" : true,
|
||||||
|
"delay" : 0
|
||||||
|
},
|
||||||
|
/* 模块配置 */
|
||||||
|
"modules" : {},
|
||||||
|
/* 应用发布信息 */
|
||||||
|
"distribute" : {
|
||||||
|
/* android打包配置 */
|
||||||
|
"android" : {
|
||||||
|
"permissions" : [
|
||||||
|
"<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
|
||||||
|
"<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
|
||||||
|
"<uses-permission android:name=\"android.permission.VIBRATE\"/>",
|
||||||
|
"<uses-permission android:name=\"android.permission.READ_LOGS\"/>",
|
||||||
|
"<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
|
||||||
|
"<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
|
||||||
|
"<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>",
|
||||||
|
"<uses-permission android:name=\"android.permission.CAMERA\"/>",
|
||||||
|
"<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",
|
||||||
|
"<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
|
||||||
|
"<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>",
|
||||||
|
"<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
|
||||||
|
"<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
|
||||||
|
"<uses-feature android:name=\"android.hardware.camera\"/>",
|
||||||
|
"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
/* ios打包配置 */
|
||||||
|
"ios" : {},
|
||||||
|
/* SDK配置 */
|
||||||
|
"sdkConfigs" : {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
/* 快应用特有相关 */
|
||||||
|
"quickapp" : {},
|
||||||
|
/* 小程序特有相关 */
|
||||||
|
"mp-weixin" : {
|
||||||
|
"appid" : "",
|
||||||
|
"setting" : {
|
||||||
|
"urlCheck" : false
|
||||||
|
},
|
||||||
|
"usingComponents" : true
|
||||||
|
},
|
||||||
|
"mp-alipay" : {
|
||||||
|
"usingComponents" : true
|
||||||
|
},
|
||||||
|
"mp-baidu" : {
|
||||||
|
"usingComponents" : true
|
||||||
|
},
|
||||||
|
"mp-toutiao" : {
|
||||||
|
"usingComponents" : true
|
||||||
|
},
|
||||||
|
"uniStatistics": {
|
||||||
|
"enable": false
|
||||||
|
},
|
||||||
|
"vueVersion" : "3"
|
||||||
|
}
|
16
uniapp/src/pages.json
Normal file
16
uniapp/src/pages.json
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
{
|
||||||
|
"pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages
|
||||||
|
{
|
||||||
|
"path": "pages/index/index",
|
||||||
|
"style": {
|
||||||
|
"navigationBarTitleText": "uni-app"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"globalStyle": {
|
||||||
|
"navigationBarTextStyle": "black",
|
||||||
|
"navigationBarTitleText": "uni-app",
|
||||||
|
"navigationBarBackgroundColor": "#F8F8F8",
|
||||||
|
"backgroundColor": "#F8F8F8"
|
||||||
|
}
|
||||||
|
}
|
41
uniapp/src/pages/index/index.vue
Normal file
41
uniapp/src/pages/index/index.vue
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
<template>
|
||||||
|
<view class="content">
|
||||||
|
<image class="logo" src="/static/logo.png" />
|
||||||
|
<view class="text-area">
|
||||||
|
<text class="title">{{ title }}</text>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { ref } from 'vue'
|
||||||
|
const title = ref('Hello')
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.content {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.logo {
|
||||||
|
height: 200rpx;
|
||||||
|
width: 200rpx;
|
||||||
|
margin-top: 200rpx;
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
margin-bottom: 50rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.text-area {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title {
|
||||||
|
font-size: 36rpx;
|
||||||
|
color: #8f8f94;
|
||||||
|
}
|
||||||
|
</style>
|
6
uniapp/src/shime-uni.d.ts
vendored
Normal file
6
uniapp/src/shime-uni.d.ts
vendored
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
export {}
|
||||||
|
|
||||||
|
declare module "vue" {
|
||||||
|
type Hooks = App.AppInstance & Page.PageInstance;
|
||||||
|
interface ComponentCustomOptions extends Hooks {}
|
||||||
|
}
|
BIN
uniapp/src/static/logo.png
Normal file
BIN
uniapp/src/static/logo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.9 KiB |
76
uniapp/src/uni.scss
Normal file
76
uniapp/src/uni.scss
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
/**
|
||||||
|
* 这里是uni-app内置的常用样式变量
|
||||||
|
*
|
||||||
|
* uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量
|
||||||
|
* 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能
|
||||||
|
*
|
||||||
|
* 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* 颜色变量 */
|
||||||
|
|
||||||
|
/* 行为相关颜色 */
|
||||||
|
$uni-color-primary: #007aff;
|
||||||
|
$uni-color-success: #4cd964;
|
||||||
|
$uni-color-warning: #f0ad4e;
|
||||||
|
$uni-color-error: #dd524d;
|
||||||
|
|
||||||
|
/* 文字基本颜色 */
|
||||||
|
$uni-text-color: #333; // 基本色
|
||||||
|
$uni-text-color-inverse: #fff; // 反色
|
||||||
|
$uni-text-color-grey: #999; // 辅助灰色,如加载更多的提示信息
|
||||||
|
$uni-text-color-placeholder: #808080;
|
||||||
|
$uni-text-color-disable: #c0c0c0;
|
||||||
|
|
||||||
|
/* 背景颜色 */
|
||||||
|
$uni-bg-color: #fff;
|
||||||
|
$uni-bg-color-grey: #f8f8f8;
|
||||||
|
$uni-bg-color-hover: #f1f1f1; // 点击状态颜色
|
||||||
|
$uni-bg-color-mask: rgba(0, 0, 0, 0.4); // 遮罩颜色
|
||||||
|
|
||||||
|
/* 边框颜色 */
|
||||||
|
$uni-border-color: #c8c7cc;
|
||||||
|
|
||||||
|
/* 尺寸变量 */
|
||||||
|
|
||||||
|
/* 文字尺寸 */
|
||||||
|
$uni-font-size-sm: 12px;
|
||||||
|
$uni-font-size-base: 14px;
|
||||||
|
$uni-font-size-lg: 16;
|
||||||
|
|
||||||
|
/* 图片尺寸 */
|
||||||
|
$uni-img-size-sm: 20px;
|
||||||
|
$uni-img-size-base: 26px;
|
||||||
|
$uni-img-size-lg: 40px;
|
||||||
|
|
||||||
|
/* Border Radius */
|
||||||
|
$uni-border-radius-sm: 2px;
|
||||||
|
$uni-border-radius-base: 3px;
|
||||||
|
$uni-border-radius-lg: 6px;
|
||||||
|
$uni-border-radius-circle: 50%;
|
||||||
|
|
||||||
|
/* 水平间距 */
|
||||||
|
$uni-spacing-row-sm: 5px;
|
||||||
|
$uni-spacing-row-base: 10px;
|
||||||
|
$uni-spacing-row-lg: 15px;
|
||||||
|
|
||||||
|
/* 垂直间距 */
|
||||||
|
$uni-spacing-col-sm: 4px;
|
||||||
|
$uni-spacing-col-base: 8px;
|
||||||
|
$uni-spacing-col-lg: 12px;
|
||||||
|
|
||||||
|
/* 透明度 */
|
||||||
|
$uni-opacity-disabled: 0.3; // 组件禁用态的透明度
|
||||||
|
|
||||||
|
/* 文章场景相关 */
|
||||||
|
$uni-color-title: #2c405a; // 文章标题颜色
|
||||||
|
$uni-font-size-title: 20px;
|
||||||
|
$uni-color-subtitle: #555; // 二级标题颜色
|
||||||
|
$uni-font-size-subtitle: 18px;
|
||||||
|
$uni-color-paragraph: #3f536e; // 文章段落颜色
|
||||||
|
$uni-font-size-paragraph: 15px;
|
13
uniapp/tsconfig.json
Normal file
13
uniapp/tsconfig.json
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
"extends": "@vue/tsconfig/tsconfig.json",
|
||||||
|
"compilerOptions": {
|
||||||
|
"sourceMap": true,
|
||||||
|
"baseUrl": ".",
|
||||||
|
"paths": {
|
||||||
|
"@/*": ["./src/*"]
|
||||||
|
},
|
||||||
|
"lib": ["esnext", "dom"],
|
||||||
|
"types": ["@dcloudio/types"]
|
||||||
|
},
|
||||||
|
"include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"]
|
||||||
|
}
|
7
uniapp/vite.config.ts
Normal file
7
uniapp/vite.config.ts
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
import { defineConfig } from "vite";
|
||||||
|
import uni from "@dcloudio/vite-plugin-uni";
|
||||||
|
|
||||||
|
// https://vitejs.dev/config/
|
||||||
|
export default defineConfig({
|
||||||
|
plugins: [uni()],
|
||||||
|
});
|
@ -68,7 +68,7 @@
|
|||||||
"@commitlint/config-conventional": "^19.4.1",
|
"@commitlint/config-conventional": "^19.4.1",
|
||||||
"@eslint/eslintrc": "^3.1.0",
|
"@eslint/eslintrc": "^3.1.0",
|
||||||
"@types/fs-extra": "^11.0.4",
|
"@types/fs-extra": "^11.0.4",
|
||||||
"@types/lodash": "^4.17.7",
|
"@types/lodash-es": "^4.17.12",
|
||||||
"@types/node": "^22.5.2",
|
"@types/node": "^22.5.2",
|
||||||
"@typescript-eslint/eslint-plugin": "^8.4.0",
|
"@typescript-eslint/eslint-plugin": "^8.4.0",
|
||||||
"@typescript-eslint/parser": "^8.4.0",
|
"@typescript-eslint/parser": "^8.4.0",
|
||||||
|
@ -120,9 +120,9 @@ importers:
|
|||||||
'@types/fs-extra':
|
'@types/fs-extra':
|
||||||
specifier: ^11.0.4
|
specifier: ^11.0.4
|
||||||
version: 11.0.4
|
version: 11.0.4
|
||||||
'@types/lodash':
|
'@types/lodash-es':
|
||||||
specifier: ^4.17.7
|
specifier: ^4.17.12
|
||||||
version: 4.17.7
|
version: 4.17.12
|
||||||
'@types/node':
|
'@types/node':
|
||||||
specifier: ^22.5.2
|
specifier: ^22.5.2
|
||||||
version: 22.5.2
|
version: 22.5.2
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { ref, onMounted, onUnmounted } from 'vue';
|
import { ref, onMounted, onUnmounted } from 'vue';
|
||||||
import { debounce } from 'lodash';
|
import { debounce } from 'lodash-es';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* description: 获取页面宽度
|
* description: 获取页面宽度
|
||||||
|
Loading…
Reference in New Issue
Block a user