diff --git a/README.md b/README.md index 60b0a134e..ca00f90f0 100644 --- a/README.md +++ b/README.md @@ -212,17 +212,76 @@ swag init ├── timer (定时器接口封装) └── upload (oss接口封装) - └─web (前端文件) - ├─public (发布模板) - └─src (源码包) - ├─api (向后台发送ajax的封装层) - ├─assets (静态文件) - ├─components(组件) - ├─router (前端路由) - ├─store (vuex 状态管理仓) - ├─style (通用样式文件) - ├─utils (前端工具库) - └─view (前端页面) + web + ├── babel.config.js + ├── Dockerfile + ├── favicon.ico + ├── index.html -- 主页面 + ├── limit.js -- 助手代码 + ├── package.json -- 包管理器代码 + ├── src -- 源代码 + │ ├── api -- api 组 + │ ├── App.vue -- 主页面 + │ ├── assets -- 静态资源 + │ ├── components -- 全局组件 + │ ├── core -- gva 组件包 + │ │ ├── config.js -- gva网站配置文件 + │ │ ├── gin-vue-admin.js -- 注册欢迎文件 + │ │ └── global.js -- 统一导入文件 + │ ├── directive -- v-auth 注册文件 + │ ├── main.js -- 主文件 + │ ├── permission.js -- 路由中间件 + │ ├── pinia -- pinia 状态管理器,取代vuex + │ │ ├── index.js -- 入口文件 + │ │ └── modules -- modules + │ │ ├── dictionary.js + │ │ ├── router.js + │ │ └── user.js + │ ├── router -- 路由声明文件 + │ │ └── index.js + │ ├── style -- 全局样式 + │ │ ├── base.scss + │ │ ├── basics.scss + │ │ ├── element_visiable.scss -- 此处可以全局覆盖 element-plus 样式 + │ │ ├── iconfont.css -- 顶部几个icon的样式文件 + │ │ ├── main.scss + │ │ ├── mobile.scss + │ │ └── newLogin.scss + │ ├── utils -- 方法包库 + │ │ ├── asyncRouter.js -- 动态路由相关 + │ │ ├── btnAuth.js -- 动态权限按钮相关 + │ │ ├── bus.js -- 全局mitt声明文件 + │ │ ├── date.js -- 日期相关 + │ │ ├── dictionary.js -- 获取字典方法 + │ │ ├── downloadImg.js -- 下载图片方法 + │ │ ├── format.js -- 格式整理相关 + │ │ ├── image.js -- 图片相关方法 + │ │ ├── page.js -- 设置页面标题 + │ │ ├── request.js -- 请求 + │ │ └── stringFun.js -- 字符串文件 + | ├── view -- 主要view代码 + | | ├── about -- 关于我们 + | | ├── dashboard -- 面板 + | | ├── error -- 错误 + | | ├── example --上传案例 + | | ├── iconList -- icon列表 + | | ├── init -- 初始化数据 + | | | ├── index -- 新版本 + | | | ├── init -- 旧版本 + | | ├── layout -- layout约束页面 + | | | ├── aside + | | | ├── bottomInfo -- bottomInfo + | | | ├── screenfull -- 全屏设置 + | | | ├── setting -- 系统设置 + | | | └── index.vue -- base 约束 + | | ├── login --登录 + | | ├── person --个人中心 + | | ├── superAdmin -- 超级管理员操作 + | | ├── system -- 系统检测页面 + | | ├── systemTools -- 系统配置相关页面 + | | └── routerHolder.vue -- page 入口页面 + ├── vite.config.js -- vite 配置文件 + └── yarn.lock ``` diff --git a/server/api/v1/autocode/auto_code_example.go b/server/api/v1/autocode/auto_code_example.go deleted file mode 100644 index 5eb18013c..000000000 --- a/server/api/v1/autocode/auto_code_example.go +++ /dev/null @@ -1,120 +0,0 @@ -package autocode - -import ( - "github.com/flipped-aurora/gin-vue-admin/server/global" - "github.com/flipped-aurora/gin-vue-admin/server/model/autocode" - autocodeReq "github.com/flipped-aurora/gin-vue-admin/server/model/autocode/request" - "github.com/flipped-aurora/gin-vue-admin/server/model/common/response" - "github.com/flipped-aurora/gin-vue-admin/server/service" - "github.com/flipped-aurora/gin-vue-admin/server/utils" - "github.com/gin-gonic/gin" - "go.uber.org/zap" -) - -type AutoCodeExampleApi struct{} - -var autoCodeExampleService = service.ServiceGroupApp.AutoCodeServiceGroup.AutoCodeExampleService - -// @Tags AutoCodeExample -// @Summary 创建AutoCodeExample -// @Security ApiKeyAuth -// @accept application/json -// @Produce application/json -// @Param data body autocode.AutoCodeExample true "AutoCodeExample模型" -// @Success 200 {object} response.Response{msg=string} "创建AutoCodeExample" -// @Router /autoCodeExample/createAutoCodeExample [post] -func (autoCodeExampleApi *AutoCodeExampleApi) CreateAutoCodeExample(c *gin.Context) { - var autoCodeExample autocode.AutoCodeExample - _ = c.ShouldBindJSON(&autoCodeExample) - if err := autoCodeExampleService.CreateAutoCodeExample(autoCodeExample); err != nil { - global.GVA_LOG.Error(global.Translate("general.creationFail"), zap.Error(err)) - response.FailWithMessage(global.Translate("general.creationFailErr"), c) - } else { - response.OkWithMessage(global.Translate("general.createSuccss"), c) - } -} - -// @Tags AutoCodeExample -// @Summary 删除AutoCodeExample -// @Security ApiKeyAuth -// @accept application/json -// @Produce application/json -// @Param data body autocode.AutoCodeExample true "AutoCodeExample模型" -// @Success 200 {object} response.Response{msg=string} "删除AutoCodeExample" -// @Router /autoCodeExample/deleteAutoCodeExample [delete] -func (autoCodeExampleApi *AutoCodeExampleApi) DeleteAutoCodeExample(c *gin.Context) { - var autoCodeExample autocode.AutoCodeExample - _ = c.ShouldBindJSON(&autoCodeExample) - if err := autoCodeExampleService.DeleteAutoCodeExample(autoCodeExample); err != nil { - global.GVA_LOG.Error(global.Translate("general.deleteFail"), zap.Error(err)) - response.FailWithMessage(global.Translate("general.deletFailErr"), c) - } else { - response.OkWithMessage(global.Translate("general.deleteSuccess"), c) - } -} - -// @Tags AutoCodeExample -// @Summary 更新AutoCodeExample -// @Security ApiKeyAuth -// @accept application/json -// @Produce application/json -// @Param data body autocode.AutoCodeExample true "更新AutoCodeExample" -// @Success 200 {object} response.Response{msg=string} "更新AutoCodeExample" -// @Router /autoCodeExample/updateAutoCodeExample [put] -func (autoCodeExampleApi *AutoCodeExampleApi) UpdateAutoCodeExample(c *gin.Context) { - var autoCodeExample autocode.AutoCodeExample - _ = c.ShouldBindJSON(&autoCodeExample) - if err := autoCodeExampleService.UpdateAutoCodeExample(&autoCodeExample); err != nil { - global.GVA_LOG.Error(global.Translate("general.updateFail"), zap.Error(err)) - response.FailWithMessage(global.Translate("general.updateFailErr"), c) - } else { - response.OkWithMessage(global.Translate("general.updateSuccess"), c) - } -} - -// @Tags AutoCodeExample -// @Summary 用id查询AutoCodeExample -// @Security ApiKeyAuth -// @accept application/json -// @Produce application/json -// @Param data query autocode.AutoCodeExample true "用id查询AutoCodeExample" -// @Success 200 {object} response.Response{data=map[string]interface{},msg=string} "用id查询AutoCodeExample" -// @Router /autoCodeExample/findAutoCodeExample [get] -func (autoCodeExampleApi *AutoCodeExampleApi) FindAutoCodeExample(c *gin.Context) { - var autoCodeExample autocode.AutoCodeExample - _ = c.ShouldBindQuery(&autoCodeExample) - if err := utils.Verify(autoCodeExample, utils.IdVerify); err != nil { - response.FailWithMessage(err.Error(), c) - return - } - if err, reAutoCodeExample := autoCodeExampleService.GetAutoCodeExample(autoCodeExample.ID); err != nil { - global.GVA_LOG.Error(global.Translate("general.queryFailErr"), zap.Error(err)) - response.FailWithMessage(global.Translate("general.queryFailErr"), c) - } else { - response.OkWithDetailed(gin.H{"reAutoCodeExample": reAutoCodeExample}, global.Translate("general.querySuccess"), c) - } -} - -// @Tags AutoCodeExample -// @Summary 分页获取AutoCodeExample列表 -// @Security ApiKeyAuth -// @accept application/json -// @Produce application/json -// @Param data query autocodeReq.AutoCodeExampleSearch true "页码, 每页大小, 搜索条件" -// @Success 200 {object} response.Response{data=response.PageResult,msg=string} "分页获取AutoCodeExample列表,返回包括列表,总数,页码,每页数量" -// @Router /autoCodeExample/getAutoCodeExampleList [get] -func (autoCodeExampleApi *AutoCodeExampleApi) GetAutoCodeExampleList(c *gin.Context) { - var pageInfo autocodeReq.AutoCodeExampleSearch - _ = c.ShouldBindQuery(&pageInfo) - if err, list, total := autoCodeExampleService.GetAutoCodeExampleInfoList(pageInfo); err != nil { - global.GVA_LOG.Error(global.Translate("general.getDataFail"), zap.Error(err)) - response.FailWithMessage(global.Translate("general.getDataFailErr"), c) - } else { - response.OkWithDetailed(response.PageResult{ - List: list, - Total: total, - Page: pageInfo.Page, - PageSize: pageInfo.PageSize, - }, global.Translate("general.getDataSuccess"), c) - } -} diff --git a/server/api/v1/enter.go b/server/api/v1/enter.go index 919f6881f..5f9d63a2f 100644 --- a/server/api/v1/enter.go +++ b/server/api/v1/enter.go @@ -1,7 +1,6 @@ package v1 import ( - "github.com/flipped-aurora/gin-vue-admin/server/api/v1/autocode" "github.com/flipped-aurora/gin-vue-admin/server/api/v1/example" "github.com/flipped-aurora/gin-vue-admin/server/api/v1/system" ) @@ -9,7 +8,6 @@ import ( type ApiGroup struct { SystemApiGroup system.ApiGroup ExampleApiGroup example.ApiGroup - AutoCodeApiGroup autocode.ApiGroup } var ApiGroupApp = new(ApiGroup) diff --git a/server/api/v1/system/sys_auto_code.go b/server/api/v1/system/sys_auto_code.go index 2acc230b9..6b4592d69 100644 --- a/server/api/v1/system/sys_auto_code.go +++ b/server/api/v1/system/sys_auto_code.go @@ -5,6 +5,7 @@ import ( "fmt" "net/url" "os" + "strings" "github.com/flipped-aurora/gin-vue-admin/server/global" "github.com/flipped-aurora/gin-vue-admin/server/model/common/response" @@ -33,6 +34,7 @@ func (autoApi *AutoCodeApi) PreviewTemp(c *gin.Context) { response.FailWithMessage(err.Error(), c) return } + a.PackageT = strings.Title(a.Package) autoCode, err := autoCodeService.PreviewTemp(a) if err != nil { global.GVA_LOG.Error(global.Translate("sys_auto_code.previewFail"), zap.Error(err)) @@ -69,6 +71,7 @@ func (autoApi *AutoCodeApi) CreateTemp(c *gin.Context) { apiIds = ids } } + a.PackageT = strings.Title(a.Package) err := autoCodeService.CreateTemp(a, apiIds...) if err != nil { if errors.Is(err, system.AutoMoveErr) { @@ -142,3 +145,71 @@ func (autoApi *AutoCodeApi) GetColumn(c *gin.Context) { } response.OkWithDetailed(gin.H{"columns": columns}, global.Translate("general.getDataSuccess"), c) } + + +// CreatePackage +// @Tags AutoCode +// @Summary 创建package +// @Security ApiKeyAuth +// @accept application/json +// @Produce application/json +// @Param data body system.SysAutoCode true "创建package" +// @Success 200 {object} response.Response{data=map[string]interface{},msg=string} "创建package成功" +// @Router /autoCode/createPackage [post] +func (autoApi *AutoCodeApi) CreatePackage(c *gin.Context) { + var a system.SysAutoCode + _ = c.ShouldBindJSON(&a) + if err := utils.Verify(a, utils.AutoPackageVerify); err != nil { + response.FailWithMessage(err.Error(), c) + return + } + err := autoCodeService.CreateAutoCode(&a) + if err != nil { + global.GVA_LOG.Error("创建成功!", zap.Error(err)) + response.FailWithMessage("创建失败", c) + } else { + response.OkWithMessage("创建成功", c) + } +} + + +// GetPackage +// @Tags AutoCode +// @Summary 获取package +// @Security ApiKeyAuth +// @accept application/json +// @Produce application/json +// @Success 200 {object} response.Response{data=map[string]interface{},msg=string} "创建package成功" +// @Router /autoCode/getPackage [post] +func (autoApi *AutoCodeApi) GetPackage(c *gin.Context) { + pkgs,err := autoCodeService.GetPackage() + if err != nil { + global.GVA_LOG.Error("获取失败!", zap.Error(err)) + response.FailWithMessage("获取失败", c) + } else { + response.OkWithDetailed(gin.H{"pkgs": pkgs},"获取成功", c) + } +} + + + +// DelPackage +// @Tags AutoCode +// @Summary 删除package +// @Security ApiKeyAuth +// @accept application/json +// @Produce application/json +// @Param data body system.SysAutoCode true "创建package" +// @Success 200 {object} response.Response{data=map[string]interface{},msg=string} "删除package成功" +// @Router /autoCode/delPackage [post] +func (autoApi *AutoCodeApi) DelPackage(c *gin.Context) { + var a system.SysAutoCode + _ = c.ShouldBindJSON(&a) + err := autoCodeService.DelPackage(a) + if err != nil { + global.GVA_LOG.Error("删除失败!", zap.Error(err)) + response.FailWithMessage("删除失败", c) + } else { + response.OkWithMessage("删除成功", c) + } +} diff --git a/server/config.yaml b/server/config.yaml index 98ce1597f..e9eaa8b48 100644 --- a/server/config.yaml +++ b/server/config.yaml @@ -111,12 +111,12 @@ autocode: # 请不要手动配置,他会在项目加载的时候识别出根路径 root: "" server: /server - server-api: /api/v1/autocode + server-api: /api/v1/%s server-initialize: /initialize - server-model: /model/autocode - server-request: /model/autocode/request/ - server-router: /router/autocode - server-service: /service/autocode + server-model: /model/%s + server-request: /model/%s/request/ + server-router: /router/%s + server-service: /service/%s web: /web/src web-api: /api web-form: /view diff --git a/server/config/auto_code.go b/server/config/auto_code.go index 4182625ce..41958ccb5 100644 --- a/server/config/auto_code.go +++ b/server/config/auto_code.go @@ -1,17 +1,17 @@ package config type Autocode struct { - TransferRestart bool `mapstructure:"transfer-restart" json:"transferRestart" yaml:"transfer-restart"` + TransferRestart bool `mapstructure:"transfer-restart" json:"transfer-restart" yaml:"transfer-restart"` Root string `mapstructure:"root" json:"root" yaml:"root"` Server string `mapstructure:"server" json:"server" yaml:"server"` - SApi string `mapstructure:"server-api" json:"serverApi" yaml:"server-api"` - SInitialize string `mapstructure:"server-initialize" json:"serverInitialize" yaml:"server-initialize"` - SModel string `mapstructure:"server-model" json:"serverModel" yaml:"server-model"` - SRequest string `mapstructure:"server-request" json:"serverRequest" yaml:"server-request"` - SRouter string `mapstructure:"server-router" json:"serverRouter" yaml:"server-router"` - SService string `mapstructure:"server-service" json:"serverService" yaml:"server-service"` + SApi string `mapstructure:"server-api" json:"server-api" yaml:"server-api"` + SInitialize string `mapstructure:"server-initialize" json:"server-initialize" yaml:"server-initialize"` + SModel string `mapstructure:"server-model" json:"server-model" yaml:"server-model"` + SRequest string `mapstructure:"server-request" json:"server-request" yaml:"server-request"` + SRouter string `mapstructure:"server-router" json:"server-router" yaml:"server-router"` + SService string `mapstructure:"server-service" json:"server-service" yaml:"server-service"` Web string `mapstructure:"web" json:"web" yaml:"web"` - WApi string `mapstructure:"web-api" json:"webApi" yaml:"web-api"` - WForm string `mapstructure:"web-form" json:"webForm" yaml:"web-form"` - WTable string `mapstructure:"web-table" json:"webTable" yaml:"web-table"` + WApi string `mapstructure:"web-api" json:"web-api" yaml:"web-api"` + WForm string `mapstructure:"web-form" json:"web-form" yaml:"web-form"` + WTable string `mapstructure:"web-table" json:"web-table" yaml:"web-table"` } diff --git a/server/config/captcha.go b/server/config/captcha.go index af329bfc5..f629c17f1 100644 --- a/server/config/captcha.go +++ b/server/config/captcha.go @@ -1,7 +1,7 @@ package config type Captcha struct { - KeyLong int `mapstructure:"key-long" json:"keyLong" yaml:"key-long"` // 验证码长度 - ImgWidth int `mapstructure:"img-width" json:"imgWidth" yaml:"img-width"` // 验证码宽度 - ImgHeight int `mapstructure:"img-height" json:"imgHeight" yaml:"img-height"` // 验证码高度 + KeyLong int `mapstructure:"key-long" json:"key-long" yaml:"key-long"` // 验证码长度 + ImgWidth int `mapstructure:"img-width" json:"img-width" yaml:"img-width"` // 验证码宽度 + ImgHeight int `mapstructure:"img-height" json:"img-height" yaml:"img-height"` // 验证码高度 } diff --git a/server/config/casbin.go b/server/config/casbin.go index 1b32f2bc2..917a4b39c 100644 --- a/server/config/casbin.go +++ b/server/config/casbin.go @@ -1,5 +1,5 @@ package config type Casbin struct { - ModelPath string `mapstructure:"model-path" json:"modelPath" yaml:"model-path"` // 存放casbin模型的相对路径 + ModelPath string `mapstructure:"model-path" json:"model-path" yaml:"model-path"` // 存放casbin模型的相对路径 } diff --git a/server/config/config.go b/server/config/config.go index de9900afd..f806d73f9 100644 --- a/server/config/config.go +++ b/server/config/config.go @@ -9,7 +9,7 @@ type Server struct { System System `mapstructure:"system" json:"system" yaml:"system"` Captcha Captcha `mapstructure:"captcha" json:"captcha" yaml:"captcha"` // auto - AutoCode Autocode `mapstructure:"autoCode" json:"autoCode" yaml:"autoCode"` + AutoCode Autocode `mapstructure:"autocode" json:"autocode" yaml:"autocode"` // gorm Mysql Mysql `mapstructure:"mysql" json:"mysql" yaml:"mysql"` Pgsql Pgsql `mapstructure:"pgsql" json:"pgsql" yaml:"pgsql"` @@ -17,10 +17,10 @@ type Server struct { // oss Local Local `mapstructure:"local" json:"local" yaml:"local"` Qiniu Qiniu `mapstructure:"qiniu" json:"qiniu" yaml:"qiniu"` - AliyunOSS AliyunOSS `mapstructure:"aliyun-oss" json:"aliyunOSS" yaml:"aliyun-oss"` - HuaWeiObs HuaWeiObs `mapstructure:"hua-wei-obs" json:"huaWeiObs" yaml:"hua-wei-obs"` - TencentCOS TencentCOS `mapstructure:"tencent-cos" json:"tencentCOS" yaml:"tencent-cos"` - AwsS3 AwsS3 `mapstructure:"aws-s3" json:"awsS3" yaml:"aws-s3"` + AliyunOSS AliyunOSS `mapstructure:"aliyun-oss" json:"aliyun-oss" yaml:"aliyun-oss"` + HuaWeiObs HuaWeiObs `mapstructure:"hua-wei-obs" json:"hua-wei-obs" yaml:"hua-wei-obs"` + TencentCOS TencentCOS `mapstructure:"tencent-cos" json:"tencent-cos" yaml:"tencent-cos"` + AwsS3 AwsS3 `mapstructure:"aws-s3" json:"aws-s3" yaml:"aws-s3"` Excel Excel `mapstructure:"excel" json:"excel" yaml:"excel"` Timer Timer `mapstructure:"timer" json:"timer" yaml:"timer"` diff --git a/server/config/db_list.go b/server/config/db_list.go index 2933e8e4b..1f2347eba 100644 --- a/server/config/db_list.go +++ b/server/config/db_list.go @@ -4,16 +4,16 @@ type DB struct { Disable bool `mapstructure:"disable" json:"disable" yaml:"disable"` Type string `mapstructure:"type" json:"type" yaml:"type"` AliasName string `mapstructure:"alias-name" json:"alias-name" yaml:"alias-name"` - Path string `mapstructure:"path" json:"path" yaml:"path"` // 服务器地址:端口 - Port string `mapstructure:"port" json:"port" yaml:"port"` //:端口 - Config string `mapstructure:"config" json:"config" yaml:"config"` // 高级配置 - Dbname string `mapstructure:"db-name" json:"dbname" yaml:"db-name"` // 数据库名 - Username string `mapstructure:"username" json:"username" yaml:"username"` // 数据库用户名 - Password string `mapstructure:"password" json:"password" yaml:"password"` // 数据库密码 - MaxIdleConns int `mapstructure:"max-idle-conns" json:"maxIdleConns" yaml:"max-idle-conns"` // 空闲中的最大连接数 - MaxOpenConns int `mapstructure:"max-open-conns" json:"maxOpenConns" yaml:"max-open-conns"` // 打开到数据库的最大连接数 - LogMode string `mapstructure:"log-mode" json:"logMode" yaml:"log-mode"` // 是否开启Gorm全局日志 - LogZap bool `mapstructure:"log-zap" json:"logZap" yaml:"log-zap"` + Path string `mapstructure:"path" json:"path" yaml:"path"` // 服务器地址:端口 + Port string `mapstructure:"port" json:"port" yaml:"port"` //:端口 + Config string `mapstructure:"config" json:"config" yaml:"config"` // 高级配置 + Dbname string `mapstructure:"db-name" json:"db-name" yaml:"db-name"` // 数据库名 + Username string `mapstructure:"username" json:"username" yaml:"username"` // 数据库用户名 + Password string `mapstructure:"password" json:"password" yaml:"password"` // 数据库密码 + MaxIdleConns int `mapstructure:"max-idle-conns" json:"max-idle-conns" yaml:"max-idle-conns"` // 空闲中的最大连接数 + MaxOpenConns int `mapstructure:"max-open-conns" json:"max-open-conns" yaml:"max-open-conns"` // 打开到数据库的最大连接数 + LogMode string `mapstructure:"log-mode" json:"log-mode" yaml:"log-mode"` // 是否开启Gorm全局日志 + LogZap bool `mapstructure:"log-zap" json:"log-zap" yaml:"log-zap"` } func (m *DB) Dsn() string { diff --git a/server/config/email.go b/server/config/email.go index 7a8676d90..6914593e6 100644 --- a/server/config/email.go +++ b/server/config/email.go @@ -5,7 +5,7 @@ type Email struct { Port int `mapstructure:"port" json:"port" yaml:"port"` // 端口 From string `mapstructure:"from" json:"from" yaml:"from"` // 收件人 Host string `mapstructure:"host" json:"host" yaml:"host"` // 服务器地址 - IsSSL bool `mapstructure:"is-ssl" json:"isSSL" yaml:"is-ssl"` // 是否SSL + IsSSL bool `mapstructure:"is-ssl" json:"is-ssl" yaml:"is-ssl"` // 是否SSL Secret string `mapstructure:"secret" json:"secret" yaml:"secret"` // 密钥 Nickname string `mapstructure:"nickname" json:"nickname" yaml:"nickname"` // 昵称 } diff --git a/server/config/gorm_mysql.go b/server/config/gorm_mysql.go index 4ae62ad64..95f5b5c0c 100644 --- a/server/config/gorm_mysql.go +++ b/server/config/gorm_mysql.go @@ -1,16 +1,16 @@ package config type Mysql struct { - Path string `mapstructure:"path" json:"path" yaml:"path"` // 服务器地址 - Port string `mapstructure:"port" json:"port" yaml:"port"` // 端口 - Config string `mapstructure:"config" json:"config" yaml:"config"` // 高级配置 - Dbname string `mapstructure:"db-name" json:"dbname" yaml:"db-name"` // 数据库名 - Username string `mapstructure:"username" json:"username" yaml:"username"` // 数据库用户名 - Password string `mapstructure:"password" json:"password" yaml:"password"` // 数据库密码 - MaxIdleConns int `mapstructure:"max-idle-conns" json:"maxIdleConns" yaml:"max-idle-conns"` // 空闲中的最大连接数 - MaxOpenConns int `mapstructure:"max-open-conns" json:"maxOpenConns" yaml:"max-open-conns"` // 打开到数据库的最大连接数 - LogMode string `mapstructure:"log-mode" json:"logMode" yaml:"log-mode"` // 是否开启Gorm全局日志 - LogZap bool `mapstructure:"log-zap" json:"logZap" yaml:"log-zap"` // 是否通过zap写入日志文件 + Path string `mapstructure:"path" json:"path" yaml:"path"` // 服务器地址 + Port string `mapstructure:"port" json:"port" yaml:"port"` // 端口 + Config string `mapstructure:"config" json:"config" yaml:"config"` // 高级配置 + Dbname string `mapstructure:"db-name" json:"db-name" yaml:"db-name"` // 数据库名 + Username string `mapstructure:"username" json:"username" yaml:"username"` // 数据库用户名 + Password string `mapstructure:"password" json:"password" yaml:"password"` // 数据库密码 + MaxIdleConns int `mapstructure:"max-idle-conns" json:"max-idle-conns" yaml:"max-idle-conns"` // 空闲中的最大连接数 + MaxOpenConns int `mapstructure:"max-open-conns" json:"max-open-conns" yaml:"max-open-conns"` // 打开到数据库的最大连接数 + LogMode string `mapstructure:"log-mode" json:"log-mode" yaml:"log-mode"` // 是否开启Gorm全局日志 + LogZap bool `mapstructure:"log-zap" json:"log-zap" yaml:"log-zap"` // 是否通过zap写入日志文件 } func (m *Mysql) Dsn() string { diff --git a/server/config/gorm_pgsql.go b/server/config/gorm_pgsql.go index 7865fa6f0..87b5fdd7f 100644 --- a/server/config/gorm_pgsql.go +++ b/server/config/gorm_pgsql.go @@ -1,16 +1,16 @@ package config type Pgsql struct { - Path string `mapstructure:"path" json:"path" yaml:"path"` // 服务器地址:端口 - Port string `mapstructure:"port" json:"port" yaml:"port"` //:端口 - Config string `mapstructure:"config" json:"config" yaml:"config"` // 高级配置 - Dbname string `mapstructure:"db-name" json:"dbname" yaml:"db-name"` // 数据库名 - Username string `mapstructure:"username" json:"username" yaml:"username"` // 数据库用户名 - Password string `mapstructure:"password" json:"password" yaml:"password"` // 数据库密码 - MaxIdleConns int `mapstructure:"max-idle-conns" json:"maxIdleConns" yaml:"max-idle-conns"` // 空闲中的最大连接数 - MaxOpenConns int `mapstructure:"max-open-conns" json:"maxOpenConns" yaml:"max-open-conns"` // 打开到数据库的最大连接数 - LogMode string `mapstructure:"log-mode" json:"logMode" yaml:"log-mode"` // 是否开启Gorm全局日志 - LogZap bool `mapstructure:"log-zap" json:"logZap" yaml:"log-zap"` // 是否通过zap写入日志文件 + Path string `mapstructure:"path" json:"path" yaml:"path"` // 服务器地址:端口 + Port string `mapstructure:"port" json:"port" yaml:"port"` //:端口 + Config string `mapstructure:"config" json:"config" yaml:"config"` // 高级配置 + Dbname string `mapstructure:"db-name" json:"db-name" yaml:"db-name"` // 数据库名 + Username string `mapstructure:"username" json:"username" yaml:"username"` // 数据库用户名 + Password string `mapstructure:"password" json:"password" yaml:"password"` // 数据库密码 + MaxIdleConns int `mapstructure:"max-idle-conns" json:"max-idle-conns" yaml:"max-idle-conns"` // 空闲中的最大连接数 + MaxOpenConns int `mapstructure:"max-open-conns" json:"max-open-conns" yaml:"max-open-conns"` // 打开到数据库的最大连接数 + LogMode string `mapstructure:"log-mode" json:"log-mode" yaml:"log-mode"` // 是否开启Gorm全局日志 + LogZap bool `mapstructure:"log-zap" json:"log-zap" yaml:"log-zap"` // 是否通过zap写入日志文件 } // Dsn 基于配置文件获取 dsn diff --git a/server/config/jwt.go b/server/config/jwt.go index 4f4198530..51979b6a2 100644 --- a/server/config/jwt.go +++ b/server/config/jwt.go @@ -1,8 +1,8 @@ package config type JWT struct { - SigningKey string `mapstructure:"signing-key" json:"signingKey" yaml:"signing-key"` // jwt签名 - ExpiresTime int64 `mapstructure:"expires-time" json:"expiresTime" yaml:"expires-time"` // 过期时间 - BufferTime int64 `mapstructure:"buffer-time" json:"bufferTime" yaml:"buffer-time"` // 缓冲时间 - Issuer string `mapstructure:"issuer" json:"issuer" yaml:"issuer"` // 签发者 + SigningKey string `mapstructure:"signing-key" json:"signing-key" yaml:"signing-key"` // jwt签名 + ExpiresTime int64 `mapstructure:"expires-time" json:"expires-time" yaml:"expires-time"` // 过期时间 + BufferTime int64 `mapstructure:"buffer-time" json:"buffer-time" yaml:"buffer-time"` // 缓冲时间 + Issuer string `mapstructure:"issuer" json:"issuer" yaml:"issuer"` // 签发者 } diff --git a/server/config/oss_aliyun.go b/server/config/oss_aliyun.go index 519f89fca..934bd782a 100644 --- a/server/config/oss_aliyun.go +++ b/server/config/oss_aliyun.go @@ -2,9 +2,9 @@ package config type AliyunOSS struct { Endpoint string `mapstructure:"endpoint" json:"endpoint" yaml:"endpoint"` - AccessKeyId string `mapstructure:"access-key-id" json:"accessKeyId" yaml:"access-key-id"` - AccessKeySecret string `mapstructure:"access-key-secret" json:"accessKeySecret" yaml:"access-key-secret"` - BucketName string `mapstructure:"bucket-name" json:"bucketName" yaml:"bucket-name"` - BucketUrl string `mapstructure:"bucket-url" json:"bucketUrl" yaml:"bucket-url"` - BasePath string `mapstructure:"base-path" json:"basePath" yaml:"base-path"` + AccessKeyId string `mapstructure:"access-key-id" json:"access-key-id" yaml:"access-key-id"` + AccessKeySecret string `mapstructure:"access-key-secret" json:"access-key-secret" yaml:"access-key-secret"` + BucketName string `mapstructure:"bucket-name" json:"bucket-name" yaml:"bucket-name"` + BucketUrl string `mapstructure:"bucket-url" json:"bucket-url" yaml:"bucket-url"` + BasePath string `mapstructure:"base-path" json:"base-path" yaml:"base-path"` } diff --git a/server/config/oss_aws.go b/server/config/oss_aws.go index c66b49c0a..0db2d9172 100644 --- a/server/config/oss_aws.go +++ b/server/config/oss_aws.go @@ -4,10 +4,10 @@ type AwsS3 struct { Bucket string `mapstructure:"bucket" json:"bucket" yaml:"bucket"` Region string `mapstructure:"region" json:"region" yaml:"region"` Endpoint string `mapstructure:"endpoint" json:"endpoint" yaml:"endpoint"` - S3ForcePathStyle bool `mapstructure:"s3-force-path-style" json:"s3ForcePathStyle" yaml:"s3-force-path-style"` - DisableSSL bool `mapstructure:"disable-ssl" json:"disableSSL" yaml:"disable-ssl"` - SecretID string `mapstructure:"secret-id" json:"secretID" yaml:"secret-id"` - SecretKey string `mapstructure:"secret-key" json:"secretKey" yaml:"secret-key"` - BaseURL string `mapstructure:"base-url" json:"baseURL" yaml:"base-url"` - PathPrefix string `mapstructure:"path-prefix" json:"pathPrefix" yaml:"path-prefix"` + S3ForcePathStyle bool `mapstructure:"s3-force-path-style" json:"s3-force-path-style" yaml:"s3-force-path-style"` + DisableSSL bool `mapstructure:"disable-ssl" json:"disable-ssl" yaml:"disable-ssl"` + SecretID string `mapstructure:"secret-id" json:"secret-id" yaml:"secret-id"` + SecretKey string `mapstructure:"secret-key" json:"secret-key" yaml:"secret-key"` + BaseURL string `mapstructure:"base-url" json:"base-url" yaml:"base-url"` + PathPrefix string `mapstructure:"path-prefix" json:"path-prefix" yaml:"path-prefix"` } diff --git a/server/config/oss_huawei.go b/server/config/oss_huawei.go index 9462c0254..45dfbcdb0 100644 --- a/server/config/oss_huawei.go +++ b/server/config/oss_huawei.go @@ -4,6 +4,6 @@ type HuaWeiObs struct { Path string `mapstructure:"path" json:"path" yaml:"path"` Bucket string `mapstructure:"bucket" json:"bucket" yaml:"bucket"` Endpoint string `mapstructure:"endpoint" json:"endpoint" yaml:"endpoint"` - AccessKey string `mapstructure:"access-key" json:"accessKey" yaml:"access-key"` - SecretKey string `mapstructure:"secret-key" json:"secretKey" yaml:"secret-key"` + AccessKey string `mapstructure:"access-key" json:"access-key" yaml:"access-key"` + SecretKey string `mapstructure:"secret-key" json:"secret-key" yaml:"secret-key"` } diff --git a/server/config/oss_qiniu.go b/server/config/oss_qiniu.go index af554b785..94ac91d8f 100644 --- a/server/config/oss_qiniu.go +++ b/server/config/oss_qiniu.go @@ -1,11 +1,11 @@ package config type Qiniu struct { - Zone string `mapstructure:"zone" json:"zone" yaml:"zone"` // 存储区域 - Bucket string `mapstructure:"bucket" json:"bucket" yaml:"bucket"` // 空间名称 - ImgPath string `mapstructure:"img-path" json:"imgPath" yaml:"img-path"` // CDN加速域名 - UseHTTPS bool `mapstructure:"use-https" json:"useHttps" yaml:"use-https"` // 是否使用https - AccessKey string `mapstructure:"access-key" json:"accessKey" yaml:"access-key"` // 秘钥AK - SecretKey string `mapstructure:"secret-key" json:"secretKey" yaml:"secret-key"` // 秘钥SK - UseCdnDomains bool `mapstructure:"use-cdn-domains" json:"useCdnDomains" yaml:"use-cdn-domains"` // 上传是否使用CDN上传加速 + Zone string `mapstructure:"zone" json:"zone" yaml:"zone"` // 存储区域 + Bucket string `mapstructure:"bucket" json:"bucket" yaml:"bucket"` // 空间名称 + ImgPath string `mapstructure:"img-path" json:"img-path" yaml:"img-path"` // CDN加速域名 + UseHTTPS bool `mapstructure:"use-https" json:"use-https" yaml:"use-https"` // 是否使用https + AccessKey string `mapstructure:"access-key" json:"access-key" yaml:"access-key"` // 秘钥AK + SecretKey string `mapstructure:"secret-key" json:"secret-key" yaml:"secret-key"` // 秘钥SK + UseCdnDomains bool `mapstructure:"use-cdn-domains" json:"use-cdn-domains" yaml:"use-cdn-domains"` // 上传是否使用CDN上传加速 } diff --git a/server/config/oss_tencent.go b/server/config/oss_tencent.go index 0a7e190b2..39a29d116 100644 --- a/server/config/oss_tencent.go +++ b/server/config/oss_tencent.go @@ -3,8 +3,8 @@ package config type TencentCOS struct { Bucket string `mapstructure:"bucket" json:"bucket" yaml:"bucket"` Region string `mapstructure:"region" json:"region" yaml:"region"` - SecretID string `mapstructure:"secret-id" json:"secretID" yaml:"secret-id"` - SecretKey string `mapstructure:"secret-key" json:"secretKey" yaml:"secret-key"` - BaseURL string `mapstructure:"base-url" json:"baseURL" yaml:"base-url"` - PathPrefix string `mapstructure:"path-prefix" json:"pathPrefix" yaml:"path-prefix"` + SecretID string `mapstructure:"secret-id" json:"secret-id" yaml:"secret-id"` + SecretKey string `mapstructure:"secret-key" json:"secret-key" yaml:"secret-key"` + BaseURL string `mapstructure:"base-url" json:"base-url" yaml:"base-url"` + PathPrefix string `mapstructure:"path-prefix" json:"path-prefix" yaml:"path-prefix"` } diff --git a/server/config/system.go b/server/config/system.go index 5a8d22999..e52de1272 100644 --- a/server/config/system.go +++ b/server/config/system.go @@ -1,12 +1,12 @@ package config type System struct { - Env string `mapstructure:"env" json:"env" yaml:"env"` // 环境值 - Addr int `mapstructure:"addr" json:"addr" yaml:"addr"` // 端口值 - DbType string `mapstructure:"db-type" json:"dbType" yaml:"db-type"` // 数据库类型:mysql(默认)|sqlite|sqlserver|postgresql - OssType string `mapstructure:"oss-type" json:"ossType" yaml:"oss-type"` // Oss类型 - UseMultipoint bool `mapstructure:"use-multipoint" json:"useMultipoint" yaml:"use-multipoint"` // 多点登录拦截 - UseRedis bool `mapstructure:"use-redis" json:"useRedis" yaml:"use-redis"` // 使用redis - LimitCountIP int `mapstructure:"iplimit-count" json:"iplimitCount" yaml:"iplimit-count"` - LimitTimeIP int `mapstructure:"iplimit-time" json:"iplimitTime" yaml:"iplimit-time"` + Env string `mapstructure:"env" json:"env" yaml:"env"` // 环境值 + Addr int `mapstructure:"addr" json:"addr" yaml:"addr"` // 端口值 + DbType string `mapstructure:"db-type" json:"db-type" yaml:"db-type"` // 数据库类型:mysql(默认)|sqlite|sqlserver|postgresql + OssType string `mapstructure:"oss-type" json:"oss-type" yaml:"oss-type"` // Oss类型 + UseMultipoint bool `mapstructure:"use-multipoint" json:"use-multipoint" yaml:"use-multipoint"` // 多点登录拦截 + UseRedis bool `mapstructure:"use-redis" json:"use-redis" yaml:"use-redis"` // 使用redis + LimitCountIP int `mapstructure:"iplimit-count" json:"iplimit-count" yaml:"iplimit-count"` + LimitTimeIP int `mapstructure:"iplimit-time" json:"iplimit-time" yaml:"iplimit-time"` } diff --git a/server/config/zap.go b/server/config/zap.go index e5a00916c..65ab73ec0 100644 --- a/server/config/zap.go +++ b/server/config/zap.go @@ -1,12 +1,12 @@ package config type Zap struct { - Level string `mapstructure:"level" json:"level" yaml:"level"` // 级别 - Format string `mapstructure:"format" json:"format" yaml:"format"` // 输出 - Prefix string `mapstructure:"prefix" json:"prefix" yaml:"prefix"` // 日志前缀 - Director string `mapstructure:"director" json:"director" yaml:"director"` // 日志文件夹 - ShowLine bool `mapstructure:"show-line" json:"showLine" yaml:"showLine"` // 显示行 - EncodeLevel string `mapstructure:"encode-level" json:"encodeLevel" yaml:"encode-level"` // 编码级 - StacktraceKey string `mapstructure:"stacktrace-key" json:"stacktraceKey" yaml:"stacktrace-key"` // 栈名 - LogInConsole bool `mapstructure:"log-in-console" json:"logInConsole" yaml:"log-in-console"` // 输出控制台 + Level string `mapstructure:"level" json:"level" yaml:"level"` // 级别 + Format string `mapstructure:"format" json:"format" yaml:"format"` // 输出 + Prefix string `mapstructure:"prefix" json:"prefix" yaml:"prefix"` // 日志前缀 + Director string `mapstructure:"director" json:"director" yaml:"director"` // 日志文件夹 + ShowLine bool `mapstructure:"show-line" json:"show-line" yaml:"show-line"` // 显示行 + EncodeLevel string `mapstructure:"encode-level" json:"encode-level" yaml:"encode-level"` // 编码级 + StacktraceKey string `mapstructure:"stacktrace-key" json:"stacktrace-key" yaml:"stacktrace-key"` // 栈名 + LogInConsole bool `mapstructure:"log-in-console" json:"log-in-console" yaml:"log-in-console"` // 输出控制台 } diff --git a/server/core/server.go b/server/core/server.go index 885321cba..2535a4646 100644 --- a/server/core/server.go +++ b/server/core/server.go @@ -37,7 +37,7 @@ func RunWindowsServer() { fmt.Printf(` 欢迎使用 github.com/flipped-aurora/gin-vue-admin/server - 当前版本:V2.5.0 + 当前版本:V2.5.1 beta 加群方式:微信号:shouzi_1994 QQ群:622360840 GVA讨论社区:https://support.qq.com/products/371961 默认自动化文档地址:http://127.0.0.1%s/swagger/index.html diff --git a/server/initialize/gorm.go b/server/initialize/gorm.go index 7c0325088..9acb4937f 100644 --- a/server/initialize/gorm.go +++ b/server/initialize/gorm.go @@ -4,7 +4,6 @@ import ( "os" "github.com/flipped-aurora/gin-vue-admin/server/global" - "github.com/flipped-aurora/gin-vue-admin/server/model/autocode" "github.com/flipped-aurora/gin-vue-admin/server/model/example" "github.com/flipped-aurora/gin-vue-admin/server/model/system" @@ -42,6 +41,8 @@ func RegisterTables(db *gorm.DB) { system.SysBaseMenuParameter{}, system.SysBaseMenuBtn{}, system.SysAuthorityBtn{}, + system.SysAutoCode{}, + // 示例模块表 example.ExaFile{}, example.ExaCustomer{}, @@ -50,7 +51,7 @@ func RegisterTables(db *gorm.DB) { // 自动化模块表 // Code generated by github.com/flipped-aurora/gin-vue-admin/server Begin; DO NOT EDIT. - autocode.AutoCodeExample{}, + // Code generated by github.com/flipped-aurora/gin-vue-admin/server End; DO NOT EDIT. ) if err != nil { diff --git a/server/initialize/plugin.go b/server/initialize/plugin.go index 2181acb32..a7dd4875b 100644 --- a/server/initialize/plugin.go +++ b/server/initialize/plugin.go @@ -2,9 +2,7 @@ package initialize import ( "github.com/flipped-aurora/gin-vue-admin/server/global" - email "github.com/flipped-aurora/gva-plugins/email" // 在线仓库模式go - //"github.com/flipped-aurora/gin-vue-admin/server/plugin/email" // 本地插件仓库地址模式 - "github.com/flipped-aurora/gin-vue-admin/server/plugin/example_plugin" + "github.com/flipped-aurora/gin-vue-admin/server/plugin/email" "github.com/flipped-aurora/gin-vue-admin/server/utils/plugin" "github.com/gin-gonic/gin" ) @@ -17,10 +15,6 @@ func PluginInit(group *gin.RouterGroup, Plugin ...plugin.Plugin) { } func InstallPlugin(PublicGroup *gin.RouterGroup, PrivateGroup *gin.RouterGroup) { - // 添加开放权限的插件 示例 - PluginInit(PublicGroup, - example_plugin.ExamplePlugin) - // 添加跟角色挂钩权限的插件 示例 本地示例模式于在线仓库模式注意上方的import 可以自行切换 效果相同 PluginInit(PrivateGroup, email.CreateEmailPlug( global.GVA_CONFIG.Email.To, diff --git a/server/initialize/router.go b/server/initialize/router.go index d61d514dd..1240b53e9 100644 --- a/server/initialize/router.go +++ b/server/initialize/router.go @@ -16,7 +16,8 @@ import ( func Routers() *gin.Engine { Router := gin.Default() - + systemRouter := router.RouterGroupApp.System + exampleRouter := router.RouterGroupApp.Example // 如果想要不使用nginx代理前端网页,可以修改 web/.env.production 下的 // VUE_APP_BASE_API = / // VUE_APP_BASE_PATH = http://localhost @@ -41,10 +42,6 @@ func Routers() *gin.Engine { global.GVA_LOG.Info("register swagger handler") // 方便统一添加路由组前缀 多服务器上线使用 - // 获取路由组实例 - systemRouter := router.RouterGroupApp.System - exampleRouter := router.RouterGroupApp.Example - autocodeRouter := router.RouterGroupApp.Autocode PublicGroup := Router.Group("") { // 健康监测 @@ -78,7 +75,7 @@ func Routers() *gin.Engine { exampleRouter.InitFileUploadAndDownloadRouter(PrivateGroup) // 文件上传下载功能路由 // Code generated by github.com/flipped-aurora/gin-vue-admin/server Begin; DO NOT EDIT. - autocodeRouter.InitSysAutoCodeExampleRouter(PrivateGroup) + // Code generated by github.com/flipped-aurora/gin-vue-admin/server End; DO NOT EDIT. } diff --git a/server/model/autocode/autocodeExample.go b/server/model/autocode/autocodeExample.go deleted file mode 100644 index 425e504b7..000000000 --- a/server/model/autocode/autocodeExample.go +++ /dev/null @@ -1,12 +0,0 @@ -// 自动生成模板SysDictionaryDetail -package autocode - -import ( - "github.com/flipped-aurora/gin-vue-admin/server/global" -) - -// 如果含有time.Time 请自行import time包 -type AutoCodeExample struct { - global.GVA_MODEL - AutoCodeExampleField string `json:"autoCodeExampleField" form:"autoCodeExampleField" gorm:"column:auto_code_example_field;comment:仅作示例条目无实际作用"` // 展示值 -} diff --git a/server/model/autocode/request/autocodeExample.go b/server/model/autocode/request/autocodeExample.go deleted file mode 100644 index d048a988a..000000000 --- a/server/model/autocode/request/autocodeExample.go +++ /dev/null @@ -1,13 +0,0 @@ -// 自动生成模板SysDictionaryDetail -package request - -import ( - "github.com/flipped-aurora/gin-vue-admin/server/model/autocode" - "github.com/flipped-aurora/gin-vue-admin/server/model/common/request" -) - -// 如果含有time.Time 请自行import time包 -type AutoCodeExampleSearch struct { - autocode.AutoCodeExample - request.PageInfo -} diff --git a/server/model/system/sys_auto_code.go b/server/model/system/sys_auto_code.go index 349bec61e..406c9019c 100644 --- a/server/model/system/sys_auto_code.go +++ b/server/model/system/sys_auto_code.go @@ -1,6 +1,9 @@ package system -import "errors" +import ( + "errors" + "github.com/flipped-aurora/gin-vue-admin/server/global" +) // AutoCodeStruct 初始版本自动化代码工具 type AutoCodeStruct struct { @@ -14,6 +17,8 @@ type AutoCodeStruct struct { AutoMoveFile bool `json:"autoMoveFile"` // 是否自动移动文件 Fields []*Field `json:"fields"` DictTypes []string `json:"-"` + Package string `json:"package"` + PackageT string `json:"-"` } type Field struct { @@ -29,3 +34,10 @@ type Field struct { } var AutoMoveErr error = errors.New("创建代码成功并移动文件成功") + +type SysAutoCode struct { + global.GVA_MODEL + PackageName string `json:"packageName" gorm:"comment:包名"` + Label string `json:"label" gorm:"comment:展示名"` + Desc string `json:"desc" gorm:"comment:描述"` +} diff --git a/server/model/system/sys_autocode_history.go b/server/model/system/sys_autocode_history.go index f052746d0..ec2b3ceff 100644 --- a/server/model/system/sys_autocode_history.go +++ b/server/model/system/sys_autocode_history.go @@ -11,6 +11,7 @@ import ( // SysAutoCodeHistory 自动迁移代码记录,用于回滚,重放使用 type SysAutoCodeHistory struct { global.GVA_MODEL + Package string `json:"package"` TableName string `json:"tableName"` RequestMeta string `gorm:"type:text" json:"requestMeta,omitempty"` // 前端传入的结构化信息 AutoCodePath string `gorm:"type:text" json:"autoCodePath,omitempty"` // 其他meta信息 path;path diff --git a/server/plugin/example_plugin/main.go b/server/plugin/example_plugin/main.go deleted file mode 100644 index 79518e485..000000000 --- a/server/plugin/example_plugin/main.go +++ /dev/null @@ -1,27 +0,0 @@ -package example_plugin - -import ( - "github.com/gin-gonic/gin" -) - -var ExamplePlugin = new(pluginExample) - -type pluginExample struct{} - -func (*pluginExample) Register(group *gin.RouterGroup) { - //如需细分权限 可以在此处use中间件 gva项目包名已改为github模式 - //所以整个plugin可以直接独立到外层开启为新的项目 然后用包的形式导入也是可以完整运行的 - // 例: - /* - group.Use(middleware.JWTAuth()).Use(middleware.CasbinHandler()).GET("hello", func(context *gin.Context) { - context.JSON(200, "hello world") - }) - */ - group.GET("hello", func(context *gin.Context) { - context.JSON(200, "hello world") - }) -} - -func (*pluginExample) RouterPath() string { - return "group" -} diff --git a/server/resource/example_plugin/main.go b/server/resource/example_plugin/main.go new file mode 100644 index 000000000..a6b30bc89 --- /dev/null +++ b/server/resource/example_plugin/main.go @@ -0,0 +1,32 @@ +package example_plugin + +// 我们为您准备了一个需要提供api的插件模板 您只需要按照此模板注册路由即可 插件使用请把此包放置在plugin下 +import ( + "github.com/gin-gonic/gin" +) + +var ExamplePlugin = new(pluginExample) + +type pluginExample struct{} + +func NewPluginExample() *pluginExample { + // 此处为注册生命周期 可以在此处写初始化内容 + return &pluginExample{} +} + +func (*pluginExample) Register(group *gin.RouterGroup) { + //如需细分权限 可以在此处use中间件 gva项目包名已改为github模式 + //所以整个plugin可以直接独立到外层开启为新的项目 然后用包的形式导入也是可以完整运行的 + + group.GET("hello", + func(context *gin.Context) { + // 此处请填写handle函数 + // 您依然可以模仿gva分层进行插件制作 当然您也可以按照您所习惯的分层模式开发 + context.JSON(200, "hello world") + }) +} + +func (*pluginExample) RouterPath() string { + // 此处为您插件的总路由path 录入本插件安装进入项目后 会自动产生路由 /[主项目跟路由(如果有的话)]/group/xxxx + return "group" +} diff --git a/server/resource/template/server/api.go.tpl b/server/resource/template/server/api.go.tpl index 9596b06b5..9e4653450 100644 --- a/server/resource/template/server/api.go.tpl +++ b/server/resource/template/server/api.go.tpl @@ -1,10 +1,10 @@ -package autocode +package {{.Package}} import ( "github.com/flipped-aurora/gin-vue-admin/server/global" - "github.com/flipped-aurora/gin-vue-admin/server/model/autocode" + "github.com/flipped-aurora/gin-vue-admin/server/model/{{.Package}}" "github.com/flipped-aurora/gin-vue-admin/server/model/common/request" - autocodeReq "github.com/flipped-aurora/gin-vue-admin/server/model/autocode/request" + {{.Package}}Req "github.com/flipped-aurora/gin-vue-admin/server/model/{{.Package}}/request" "github.com/flipped-aurora/gin-vue-admin/server/model/common/response" "github.com/flipped-aurora/gin-vue-admin/server/service" "github.com/gin-gonic/gin" @@ -14,7 +14,7 @@ import ( type {{.StructName}}Api struct { } -var {{.Abbreviation}}Service = service.ServiceGroupApp.AutoCodeServiceGroup.{{.StructName}}Service +var {{.Abbreviation}}Service = service.ServiceGroupApp.{{.PackageT}}ServiceGroup.{{.StructName}}Service // Create{{.StructName}} 创建{{.StructName}} @@ -23,11 +23,16 @@ var {{.Abbreviation}}Service = service.ServiceGroupApp.AutoCodeServiceGroup.{{.S // @Security ApiKeyAuth // @accept application/json // @Produce application/json +<<<<<<< HEAD // @Param data body autocode.{{.StructName}} true "创建{{.StructName}}" // @Success 200 {string} string "{"success":true,"data":{},"msg":global.Translate("general.getDataSuccess")}" +======= +// @Param data body {{.Package}}.{{.StructName}} true "创建{{.StructName}}" +// @Success 200 {string} string "{"success":true,"data":{},"msg":"获取成功"}" +>>>>>>> main // @Router /{{.Abbreviation}}/create{{.StructName}} [post] func ({{.Abbreviation}}Api *{{.StructName}}Api) Create{{.StructName}}(c *gin.Context) { - var {{.Abbreviation}} autocode.{{.StructName}} + var {{.Abbreviation}} {{.Package}}.{{.StructName}} _ = c.ShouldBindJSON(&{{.Abbreviation}}) if err := {{.Abbreviation}}Service.Create{{.StructName}}({{.Abbreviation}}); err != nil { global.GVA_LOG.Error(global.Translate("general.creationFail"), zap.Error(err)) @@ -43,11 +48,11 @@ func ({{.Abbreviation}}Api *{{.StructName}}Api) Create{{.StructName}}(c *gin.Con // @Security ApiKeyAuth // @accept application/json // @Produce application/json -// @Param data body autocode.{{.StructName}} true "删除{{.StructName}}" +// @Param data body {{.Package}}.{{.StructName}} true "删除{{.StructName}}" // @Success 200 {string} string "{"success":true,"data":{},"msg":"删除成功"}" // @Router /{{.Abbreviation}}/delete{{.StructName}} [delete] func ({{.Abbreviation}}Api *{{.StructName}}Api) Delete{{.StructName}}(c *gin.Context) { - var {{.Abbreviation}} autocode.{{.StructName}} + var {{.Abbreviation}} {{.Package}}.{{.StructName}} _ = c.ShouldBindJSON(&{{.Abbreviation}}) if err := {{.Abbreviation}}Service.Delete{{.StructName}}({{.Abbreviation}}); err != nil { global.GVA_LOG.Error(global.Translate("general.deleteFail"), zap.Error(err)) @@ -83,11 +88,11 @@ func ({{.Abbreviation}}Api *{{.StructName}}Api) Delete{{.StructName}}ByIds(c *gi // @Security ApiKeyAuth // @accept application/json // @Produce application/json -// @Param data body autocode.{{.StructName}} true "更新{{.StructName}}" +// @Param data body {{.Package}}.{{.StructName}} true "更新{{.StructName}}" // @Success 200 {string} string "{"success":true,"data":{},"msg":"更新成功"}" // @Router /{{.Abbreviation}}/update{{.StructName}} [put] func ({{.Abbreviation}}Api *{{.StructName}}Api) Update{{.StructName}}(c *gin.Context) { - var {{.Abbreviation}} autocode.{{.StructName}} + var {{.Abbreviation}} {{.Package}}.{{.StructName}} _ = c.ShouldBindJSON(&{{.Abbreviation}}) if err := {{.Abbreviation}}Service.Update{{.StructName}}({{.Abbreviation}}); err != nil { global.GVA_LOG.Error(global.Translate("general.updateFail"), zap.Error(err)) @@ -103,11 +108,11 @@ func ({{.Abbreviation}}Api *{{.StructName}}Api) Update{{.StructName}}(c *gin.Con // @Security ApiKeyAuth // @accept application/json // @Produce application/json -// @Param data query autocode.{{.StructName}} true "用id查询{{.StructName}}" +// @Param data query {{.Package}}.{{.StructName}} true "用id查询{{.StructName}}" // @Success 200 {string} string "{"success":true,"data":{},"msg":"查询成功"}" // @Router /{{.Abbreviation}}/find{{.StructName}} [get] func ({{.Abbreviation}}Api *{{.StructName}}Api) Find{{.StructName}}(c *gin.Context) { - var {{.Abbreviation}} autocode.{{.StructName}} + var {{.Abbreviation}} {{.Package}}.{{.StructName}} _ = c.ShouldBindQuery(&{{.Abbreviation}}) if err, re{{.Abbreviation}} := {{.Abbreviation}}Service.Get{{.StructName}}({{.Abbreviation}}.ID); err != nil { global.GVA_LOG.Error(global.Translate("general.queryFail"), zap.Error(err)) @@ -123,11 +128,11 @@ func ({{.Abbreviation}}Api *{{.StructName}}Api) Find{{.StructName}}(c *gin.Conte // @Security ApiKeyAuth // @accept application/json // @Produce application/json -// @Param data query autocodeReq.{{.StructName}}Search true "分页获取{{.StructName}}列表" -// @Success 200 {string} string "{"success":true,"data":{},"msg":global.Translate("general.getDataSuccess")}" +// @Param data query {{.Package}}Req.{{.StructName}}Search true "分页获取{{.StructName}}列表" +// @Success 200 {string} string "{"success":true,"data":{},"msg":"获取成功"}" // @Router /{{.Abbreviation}}/get{{.StructName}}List [get] func ({{.Abbreviation}}Api *{{.StructName}}Api) Get{{.StructName}}List(c *gin.Context) { - var pageInfo autocodeReq.{{.StructName}}Search + var pageInfo {{.Package}}Req.{{.StructName}}Search _ = c.ShouldBindQuery(&pageInfo) if err, list, total := {{.Abbreviation}}Service.Get{{.StructName}}InfoList(pageInfo); err != nil { global.GVA_LOG.Error(global.Translate("general.getDataFail"), zap.Error(err)) diff --git a/server/resource/template/server/model.go.tpl b/server/resource/template/server/model.go.tpl index e585cc206..d631958a5 100644 --- a/server/resource/template/server/model.go.tpl +++ b/server/resource/template/server/model.go.tpl @@ -1,5 +1,5 @@ // 自动生成模板{{.StructName}} -package autocode +package {{.Package}} import ( "github.com/flipped-aurora/gin-vue-admin/server/global" diff --git a/server/resource/template/server/request.go.tpl b/server/resource/template/server/request.go.tpl index 262b55c4d..b6c2e3d10 100644 --- a/server/resource/template/server/request.go.tpl +++ b/server/resource/template/server/request.go.tpl @@ -1,11 +1,11 @@ package request import ( - "github.com/flipped-aurora/gin-vue-admin/server/model/autocode" + "github.com/flipped-aurora/gin-vue-admin/server/model/{{.Package}}" "github.com/flipped-aurora/gin-vue-admin/server/model/common/request" ) type {{.StructName}}Search struct{ - autocode.{{.StructName}} + {{.Package}}.{{.StructName}} request.PageInfo -} \ No newline at end of file +} diff --git a/server/resource/template/server/router.go.tpl b/server/resource/template/server/router.go.tpl index 85f0f2bce..1bfc9edff 100644 --- a/server/resource/template/server/router.go.tpl +++ b/server/resource/template/server/router.go.tpl @@ -1,4 +1,4 @@ -package autocode +package {{.Package}} import ( "github.com/flipped-aurora/gin-vue-admin/server/api/v1" @@ -13,7 +13,7 @@ type {{.StructName}}Router struct { func (s *{{.StructName}}Router) Init{{.StructName}}Router(Router *gin.RouterGroup) { {{.Abbreviation}}Router := Router.Group("{{.Abbreviation}}").Use(middleware.OperationRecord()) {{.Abbreviation}}RouterWithoutRecord := Router.Group("{{.Abbreviation}}") - var {{.Abbreviation}}Api = v1.ApiGroupApp.AutoCodeApiGroup.{{.StructName}}Api + var {{.Abbreviation}}Api = v1.ApiGroupApp.{{.PackageT}}ApiGroup.{{.StructName}}Api { {{.Abbreviation}}Router.POST("create{{.StructName}}", {{.Abbreviation}}Api.Create{{.StructName}}) // 新建{{.StructName}} {{.Abbreviation}}Router.DELETE("delete{{.StructName}}", {{.Abbreviation}}Api.Delete{{.StructName}}) // 删除{{.StructName}} diff --git a/server/resource/template/server/service.go.tpl b/server/resource/template/server/service.go.tpl index f944e6e88..6caf0ed53 100644 --- a/server/resource/template/server/service.go.tpl +++ b/server/resource/template/server/service.go.tpl @@ -1,10 +1,10 @@ -package autocode +package {{.Package}} import ( "github.com/flipped-aurora/gin-vue-admin/server/global" - "github.com/flipped-aurora/gin-vue-admin/server/model/autocode" + "github.com/flipped-aurora/gin-vue-admin/server/model/{{.Package}}" "github.com/flipped-aurora/gin-vue-admin/server/model/common/request" - autoCodeReq "github.com/flipped-aurora/gin-vue-admin/server/model/autocode/request" + {{.Package}}Req "github.com/flipped-aurora/gin-vue-admin/server/model/{{.Package}}/request" ) type {{.StructName}}Service struct { @@ -12,14 +12,14 @@ type {{.StructName}}Service struct { // Create{{.StructName}} 创建{{.StructName}}记录 // Author [piexlmax](https://github.com/piexlmax) -func ({{.Abbreviation}}Service *{{.StructName}}Service) Create{{.StructName}}({{.Abbreviation}} autocode.{{.StructName}}) (err error) { +func ({{.Abbreviation}}Service *{{.StructName}}Service) Create{{.StructName}}({{.Abbreviation}} {{.Package}}.{{.StructName}}) (err error) { err = global.GVA_DB.Create(&{{.Abbreviation}}).Error return err } // Delete{{.StructName}} 删除{{.StructName}}记录 // Author [piexlmax](https://github.com/piexlmax) -func ({{.Abbreviation}}Service *{{.StructName}}Service)Delete{{.StructName}}({{.Abbreviation}} autocode.{{.StructName}}) (err error) { +func ({{.Abbreviation}}Service *{{.StructName}}Service)Delete{{.StructName}}({{.Abbreviation}} {{.Package}}.{{.StructName}}) (err error) { err = global.GVA_DB.Delete(&{{.Abbreviation}}).Error return err } @@ -27,32 +27,32 @@ func ({{.Abbreviation}}Service *{{.StructName}}Service)Delete{{.StructName}}({{. // Delete{{.StructName}}ByIds 批量删除{{.StructName}}记录 // Author [piexlmax](https://github.com/piexlmax) func ({{.Abbreviation}}Service *{{.StructName}}Service)Delete{{.StructName}}ByIds(ids request.IdsReq) (err error) { - err = global.GVA_DB.Delete(&[]autocode.{{.StructName}}{},"id in ?",ids.Ids).Error + err = global.GVA_DB.Delete(&[]{{.Package}}.{{.StructName}}{},"id in ?",ids.Ids).Error return err } // Update{{.StructName}} 更新{{.StructName}}记录 // Author [piexlmax](https://github.com/piexlmax) -func ({{.Abbreviation}}Service *{{.StructName}}Service)Update{{.StructName}}({{.Abbreviation}} autocode.{{.StructName}}) (err error) { +func ({{.Abbreviation}}Service *{{.StructName}}Service)Update{{.StructName}}({{.Abbreviation}} {{.Package}}.{{.StructName}}) (err error) { err = global.GVA_DB.Save(&{{.Abbreviation}}).Error return err } // Get{{.StructName}} 根据id获取{{.StructName}}记录 // Author [piexlmax](https://github.com/piexlmax) -func ({{.Abbreviation}}Service *{{.StructName}}Service)Get{{.StructName}}(id uint) (err error, {{.Abbreviation}} autocode.{{.StructName}}) { +func ({{.Abbreviation}}Service *{{.StructName}}Service)Get{{.StructName}}(id uint) (err error, {{.Abbreviation}} {{.Package}}.{{.StructName}}) { err = global.GVA_DB.Where("id = ?", id).First(&{{.Abbreviation}}).Error return } // Get{{.StructName}}InfoList 分页获取{{.StructName}}记录 // Author [piexlmax](https://github.com/piexlmax) -func ({{.Abbreviation}}Service *{{.StructName}}Service)Get{{.StructName}}InfoList(info autoCodeReq.{{.StructName}}Search) (err error, list interface{}, total int64) { +func ({{.Abbreviation}}Service *{{.StructName}}Service)Get{{.StructName}}InfoList(info {{.Package}}Req.{{.StructName}}Search) (err error, list interface{}, total int64) { limit := info.PageSize offset := info.PageSize * (info.Page - 1) // 创建db - db := global.GVA_DB.Model(&autocode.{{.StructName}}{}) - var {{.Abbreviation}}s []autocode.{{.StructName}} + db := global.GVA_DB.Model(&{{.Package}}.{{.StructName}}{}) + var {{.Abbreviation}}s []{{.Package}}.{{.StructName}} // 如果有条件搜索 下方会自动创建搜索语句 {{- range .Fields}} {{- if .FieldSearchType}} diff --git a/server/api/v1/autocode/enter.go b/server/resource/template/subcontract/api_enter.go.tpl similarity index 84% rename from server/api/v1/autocode/enter.go rename to server/resource/template/subcontract/api_enter.go.tpl index ea9dd214d..a1ddc6e99 100644 --- a/server/api/v1/autocode/enter.go +++ b/server/resource/template/subcontract/api_enter.go.tpl @@ -1,7 +1,7 @@ -package autocode +package {{ .PackageName }} type ApiGroup struct { // Code generated by github.com/flipped-aurora/gin-vue-admin/server Begin; DO NOT EDIT. - AutoCodeExampleApi + // Code generated by github.com/flipped-aurora/gin-vue-admin/server End; DO NOT EDIT. } diff --git a/server/resource/template/subcontract/data.go b/server/resource/template/subcontract/data.go new file mode 100644 index 000000000..cb445a5e1 --- /dev/null +++ b/server/resource/template/subcontract/data.go @@ -0,0 +1,14 @@ +package subcontract + +import ( + _ "embed" +) + +//go:embed api_enter.go.tpl +var API []byte + +//go:embed router_enter.go.tpl +var Router []byte + +//go:embed service_enter.go.tpl +var Server []byte diff --git a/server/resource/template/subcontract/router_enter.go.tpl b/server/resource/template/subcontract/router_enter.go.tpl new file mode 100644 index 000000000..761c1fd66 --- /dev/null +++ b/server/resource/template/subcontract/router_enter.go.tpl @@ -0,0 +1,7 @@ +package {{ .PackageName }} + +type RouterGroup struct { + // Code generated by github.com/flipped-aurora/gin-vue-admin/server Begin; DO NOT EDIT. + + // Code generated by github.com/flipped-aurora/gin-vue-admin/server End; DO NOT EDIT. +} diff --git a/server/resource/template/subcontract/service_enter.go.tpl b/server/resource/template/subcontract/service_enter.go.tpl new file mode 100644 index 000000000..aba140f5f --- /dev/null +++ b/server/resource/template/subcontract/service_enter.go.tpl @@ -0,0 +1,9 @@ +package {{ .PackageName }} + + +type ServiceGroup struct { + // Code generated by github.com/flipped-aurora/gin-vue-admin/server Begin; DO NOT EDIT. + + // Code generated by github.com/flipped-aurora/gin-vue-admin/server End; DO NOT EDIT. +} + diff --git a/server/router/autocode/auto_code_example.go b/server/router/autocode/auto_code_example.go deleted file mode 100644 index 11a183b86..000000000 --- a/server/router/autocode/auto_code_example.go +++ /dev/null @@ -1,24 +0,0 @@ -package autocode - -import ( - v1 "github.com/flipped-aurora/gin-vue-admin/server/api/v1" - "github.com/flipped-aurora/gin-vue-admin/server/middleware" - "github.com/gin-gonic/gin" -) - -type AutoCodeExampleRouter struct{} - -func (s *AutoCodeExampleRouter) InitSysAutoCodeExampleRouter(Router *gin.RouterGroup) { - autoCodeExampleRouter := Router.Group("autoCodeExample").Use(middleware.OperationRecord()) - autoCodeExampleRouterWithoutRecord := Router.Group("autoCodeExample") - autoCodeExampleApi := v1.ApiGroupApp.AutoCodeApiGroup.AutoCodeExampleApi - { - autoCodeExampleRouter.POST("createSysAutoCodeExample", autoCodeExampleApi.CreateAutoCodeExample) // 新建AutoCodeExample - autoCodeExampleRouter.DELETE("deleteSysAutoCodeExample", autoCodeExampleApi.DeleteAutoCodeExample) // 删除AutoCodeExample - autoCodeExampleRouter.PUT("updateSysAutoCodeExample", autoCodeExampleApi.UpdateAutoCodeExample) // 更新AutoCodeExample - } - { - autoCodeExampleRouterWithoutRecord.GET("findSysAutoCodeExample", autoCodeExampleApi.FindAutoCodeExample) // 根据ID获取AutoCodeExample - autoCodeExampleRouterWithoutRecord.GET("getSysAutoCodeExampleList", autoCodeExampleApi.GetAutoCodeExampleList) // 获取AutoCodeExample列表 - } -} diff --git a/server/router/autocode/enter.go b/server/router/autocode/enter.go deleted file mode 100644 index c8c71d660..000000000 --- a/server/router/autocode/enter.go +++ /dev/null @@ -1,7 +0,0 @@ -package autocode - -type RouterGroup struct { - // Code generated by github.com/flipped-aurora/gin-vue-admin/server Begin; DO NOT EDIT. - AutoCodeExampleRouter - // Code generated by github.com/flipped-aurora/gin-vue-admin/server End; DO NOT EDIT. -} diff --git a/server/router/enter.go b/server/router/enter.go index 737fc5a90..ce8b5de39 100644 --- a/server/router/enter.go +++ b/server/router/enter.go @@ -1,7 +1,6 @@ package router import ( - "github.com/flipped-aurora/gin-vue-admin/server/router/autocode" "github.com/flipped-aurora/gin-vue-admin/server/router/example" "github.com/flipped-aurora/gin-vue-admin/server/router/system" ) @@ -9,7 +8,6 @@ import ( type RouterGroup struct { System system.RouterGroup Example example.RouterGroup - Autocode autocode.RouterGroup } var RouterGroupApp = new(RouterGroup) diff --git a/server/router/system/sys_auto_code.go b/server/router/system/sys_auto_code.go index 27dcce5e7..62678520c 100644 --- a/server/router/system/sys_auto_code.go +++ b/server/router/system/sys_auto_code.go @@ -16,5 +16,8 @@ func (s *AutoCodeRouter) InitAutoCodeRouter(Router *gin.RouterGroup) { autoCodeRouter.GET("getColumn", autoCodeApi.GetColumn) // 获取指定表所有字段信息 autoCodeRouter.POST("preview", autoCodeApi.PreviewTemp) // 获取自动创建代码预览 autoCodeRouter.POST("createTemp", autoCodeApi.CreateTemp) // 创建自动化代码 + autoCodeRouter.POST("createPackage",autoCodeApi.CreatePackage) // 创建package包 + autoCodeRouter.POST("getPackage",autoCodeApi.GetPackage) // 获取package包 + autoCodeRouter.POST("delPackage",autoCodeApi.DelPackage) // 获取package包 } } diff --git a/server/service/autocode/auto_code_example.go b/server/service/autocode/auto_code_example.go deleted file mode 100644 index 50a38e005..000000000 --- a/server/service/autocode/auto_code_example.go +++ /dev/null @@ -1,77 +0,0 @@ -package autocode - -import ( - "github.com/flipped-aurora/gin-vue-admin/server/global" - "github.com/flipped-aurora/gin-vue-admin/server/model/autocode" - "github.com/flipped-aurora/gin-vue-admin/server/model/autocode/request" -) - -type AutoCodeExampleService struct{} - -//@author: [piexlmax](https://github.com/piexlmax) -//@function: CreateAutoCodeExample -//@description: 创建自动化示例数据 -//@param: autoCodeExampleService *AutoCodeExampleService -//@return: err error - -func (autoCodeExampleService *AutoCodeExampleService) CreateAutoCodeExample(autoCodeExample autocode.AutoCodeExample) (err error) { - err = global.GVA_DB.Create(&autoCodeExample).Error - return err -} - -//@author: [piexlmax](https://github.com/piexlmax) -//@function: DeleteAutoCodeExample -//@description: 删除自动化示例数据 -//@param: autoCodeExample autocode.AutoCodeExample -//@return: err error - -func (autoCodeExampleService *AutoCodeExampleService) DeleteAutoCodeExample(autoCodeExample autocode.AutoCodeExample) (err error) { - err = global.GVA_DB.Delete(&autoCodeExample).Error - return err -} - -//@author: [piexlmax](https://github.com/piexlmax) -//@function: UpdateAutoCodeExample -//@description: 更新自动化示例数据 -//@param: autoCodeExample *autocode.AutoCodeExample -//@return: err error - -func (autoCodeExampleService *AutoCodeExampleService) UpdateAutoCodeExample(autoCodeExample *autocode.AutoCodeExample) (err error) { - err = global.GVA_DB.Save(autoCodeExample).Error - return err -} - -//@author: [piexlmax](https://github.com/piexlmax) -//@function: GetAutoCodeExampleDetail -//@description: 根据id获取自动化示例数据 -//@param: id uint -//@return: err error, autoCodeExample autocode.AutoCodeExample - -func (autoCodeExampleService *AutoCodeExampleService) GetAutoCodeExample(id uint) (err error, autoCodeExample autocode.AutoCodeExample) { - err = global.GVA_DB.Where("id = ?", id).First(&autoCodeExample).Error - return -} - -//@author: [piexlmax](https://github.com/piexlmax) -//@function: GetAutoCodeExampleInfoList -//@description: 分页获取自动化示例数据 -//@param: info request.AutoCodeExampleSearch -//@return: err error, list interface{}, total int64 - -func (autoCodeExampleService *AutoCodeExampleService) GetAutoCodeExampleInfoList(info request.AutoCodeExampleSearch) (err error, list interface{}, total int64) { - limit := info.PageSize - offset := info.PageSize * (info.Page - 1) - // 创建db - db := global.GVA_DB.Model(&autocode.AutoCodeExample{}) - var autoCodeExamples []autocode.AutoCodeExample - // 如果有条件搜索 下方会自动创建搜索语句 - if info.AutoCodeExampleField != "" { - db = db.Where("label LIKE ?", "%"+info.AutoCodeExampleField+"%") - } - err = db.Count(&total).Error - if err != nil { - return - } - err = db.Limit(limit).Offset(offset).Find(&autoCodeExamples).Error - return err, autoCodeExamples, total -} diff --git a/server/service/autocode/enter.go b/server/service/autocode/enter.go deleted file mode 100644 index 9f4db68d6..000000000 --- a/server/service/autocode/enter.go +++ /dev/null @@ -1,7 +0,0 @@ -package autocode - -type ServiceGroup struct { - // Code generated by github.com/flipped-aurora/gin-vue-admin/server Begin; DO NOT EDIT. - AutoCodeExampleService - // Code generated by github.com/flipped-aurora/gin-vue-admin/server End; DO NOT EDIT. -} diff --git a/server/service/enter.go b/server/service/enter.go index 9df585980..7f217afb5 100644 --- a/server/service/enter.go +++ b/server/service/enter.go @@ -1,7 +1,6 @@ package service import ( - "github.com/flipped-aurora/gin-vue-admin/server/service/autocode" "github.com/flipped-aurora/gin-vue-admin/server/service/example" "github.com/flipped-aurora/gin-vue-admin/server/service/system" ) @@ -9,7 +8,6 @@ import ( type ServiceGroup struct { SystemServiceGroup system.ServiceGroup ExampleServiceGroup example.ServiceGroup - AutoCodeServiceGroup autocode.ServiceGroup } var ServiceGroupApp = new(ServiceGroup) diff --git a/server/service/system/sys_auto_code.go b/server/service/system/sys_auto_code.go index e8cabc57c..f78d840db 100644 --- a/server/service/system/sys_auto_code.go +++ b/server/service/system/sys_auto_code.go @@ -1,16 +1,24 @@ package system import ( + "bytes" "encoding/json" "errors" "fmt" + "go/ast" + "go/format" + "go/parser" + "go/token" "io/ioutil" + "log" "os" "path/filepath" "strconv" "strings" "text/template" + "github.com/flipped-aurora/gin-vue-admin/server/resource/template/subcontract" + "github.com/flipped-aurora/gin-vue-admin/server/global" "github.com/flipped-aurora/gin-vue-admin/server/model/system" "github.com/flipped-aurora/gin-vue-admin/server/utils" @@ -19,48 +27,87 @@ import ( ) const ( - autoPath = "autocode_template/" - basePath = "resource/template" + autoPath = "autocode_template/" + basePath = "resource/template" + packageService = "service/%s/enter.go" + packageServiceName = "service" + packageRouter = "router/%s/enter.go" + packageRouterName = "router" + packageAPI = "api/v1/%s/enter.go" + packageAPIName = "api/v1" ) -var injectionPaths []injectionMeta +type autoPackage struct { + path string + temp string + name string +} -func Init() { - if len(injectionPaths) != 0 { - return - } +var ( + packageInjectionMap map[string]astInjectionMeta + injectionPaths []injectionMeta +) + +func Init(Package string) { injectionPaths = []injectionMeta{ { path: filepath.Join(global.GVA_CONFIG.AutoCode.Root, global.GVA_CONFIG.AutoCode.Server, global.GVA_CONFIG.AutoCode.SInitialize, "gorm.go"), funcName: "MysqlTables", - structNameF: "autocode.%s{},", + structNameF: Package + ".%s{},", }, { path: filepath.Join(global.GVA_CONFIG.AutoCode.Root, global.GVA_CONFIG.AutoCode.Server, global.GVA_CONFIG.AutoCode.SInitialize, "router.go"), funcName: "Routers", - structNameF: "autocodeRouter.Init%sRouter(PrivateGroup)", + structNameF: Package + "Router.Init%sRouter(PrivateGroup)", }, { path: filepath.Join(global.GVA_CONFIG.AutoCode.Root, - global.GVA_CONFIG.AutoCode.Server, global.GVA_CONFIG.AutoCode.SApi, "enter.go"), + global.GVA_CONFIG.AutoCode.Server, fmt.Sprintf(global.GVA_CONFIG.AutoCode.SApi, Package), "enter.go"), funcName: "ApiGroup", structNameF: "%sApi", }, { path: filepath.Join(global.GVA_CONFIG.AutoCode.Root, - global.GVA_CONFIG.AutoCode.Server, global.GVA_CONFIG.AutoCode.SRouter, "enter.go"), + global.GVA_CONFIG.AutoCode.Server, fmt.Sprintf(global.GVA_CONFIG.AutoCode.SRouter, Package), "enter.go"), funcName: "RouterGroup", structNameF: "%sRouter", }, { path: filepath.Join(global.GVA_CONFIG.AutoCode.Root, - global.GVA_CONFIG.AutoCode.Server, global.GVA_CONFIG.AutoCode.SService, "enter.go"), + global.GVA_CONFIG.AutoCode.Server, fmt.Sprintf(global.GVA_CONFIG.AutoCode.SService, Package), "enter.go"), funcName: "ServiceGroup", structNameF: "%sService", }, } + + packageInjectionMap = map[string]astInjectionMeta{ + packageServiceName: { + path: filepath.Join(global.GVA_CONFIG.AutoCode.Root, + global.GVA_CONFIG.AutoCode.Server, "service", "enter.go"), + importCodeF: "github.com/flipped-aurora/gin-vue-admin/server/%s/%s", + packageNameF: "%s", + groupName: "ServiceGroup", + structNameF: "%sServiceGroup", + }, + packageRouterName: { + path: filepath.Join(global.GVA_CONFIG.AutoCode.Root, + global.GVA_CONFIG.AutoCode.Server, "router", "enter.go"), + importCodeF: "github.com/flipped-aurora/gin-vue-admin/server/%s/%s", + packageNameF: "%s", + groupName: "RouterGroup", + structNameF: "%s", + }, + packageAPIName: { + path: filepath.Join(global.GVA_CONFIG.AutoCode.Root, + global.GVA_CONFIG.AutoCode.Server, "api/v1", "enter.go"), + importCodeF: "github.com/flipped-aurora/gin-vue-admin/server/%s/%s", + packageNameF: "%s", + groupName: "ApiGroup", + structNameF: "%sApiGroup", + }, + } } type injectionMeta struct { @@ -69,8 +116,17 @@ type injectionMeta struct { structNameF string // 带格式化的 } +type astInjectionMeta struct { + path string + importCodeF string + structNameF string + packageNameF string + groupName string +} + type tplData struct { template *template.Template + autoPackage string locationPath string autoCodePath string autoMoveFilePath string @@ -168,7 +224,7 @@ func makeDictTypes(autoCode *system.AutoCodeStruct) { func (autoCodeService *AutoCodeService) CreateTemp(autoCode system.AutoCodeStruct, ids ...uint) (err error) { makeDictTypes(&autoCode) // 增加判断: 重复创建struct - if autoCode.AutoMoveFile && AutoCodeHistoryServiceApp.Repeat(autoCode.StructName) { + if autoCode.AutoMoveFile && AutoCodeHistoryServiceApp.Repeat(autoCode.StructName, autoCode.Package) { return RepeatErr } dataList, fileList, needMkdir, err := autoCodeService.getNeedList(&autoCode) @@ -206,7 +262,7 @@ func (autoCodeService *AutoCodeService) CreateTemp(autoCode system.AutoCodeStruc idBf.WriteString(";") } if autoCode.AutoMoveFile { // 判断是否需要自动转移 - Init() + Init(autoCode.Package) for index := range dataList { autoCodeService.addAutoMoveFile(&dataList[index]) } @@ -233,11 +289,14 @@ func (autoCodeService *AutoCodeService) CreateTemp(autoCode system.AutoCodeStruc } } - if global.GVA_CONFIG.AutoCode.TransferRestart { - // endless 会复用之前的指令 - // 如果是你 goland debug/run 后用的还是之前打包的文件,没有做到真正意义上的重启 - // 故此,拿掉迁移后的重启功能 - } + var gormPath = filepath.Join(global.GVA_CONFIG.AutoCode.Root, + global.GVA_CONFIG.AutoCode.Server, global.GVA_CONFIG.AutoCode.SInitialize, "gorm.go") + var routePath = filepath.Join(global.GVA_CONFIG.AutoCode.Root, + global.GVA_CONFIG.AutoCode.Server, global.GVA_CONFIG.AutoCode.SInitialize, "router.go") + var imporStr = fmt.Sprintf("github.com/flipped-aurora/gin-vue-admin/server/model/%s", autoCode.Package) + _ = ImportReference(routePath, "", "", autoCode.Package, "") + _ = ImportReference(gormPath, imporStr, "", "", "") + } else { // 打包 if err = utils.ZipFiles("./ginvueadmin.zip", fileList, ".", "."); err != nil { return err @@ -253,6 +312,7 @@ func (autoCodeService *AutoCodeService) CreateTemp(autoCode system.AutoCodeStruc injectionCodeMeta.String(), autoCode.TableName, idBf.String(), + autoCode.Package, ) } else { err = AutoCodeHistoryServiceApp.CreateAutoCodeHistory( @@ -263,6 +323,7 @@ func (autoCodeService *AutoCodeService) CreateTemp(autoCode system.AutoCodeStruc injectionCodeMeta.String(), autoCode.StructName, idBf.String(), + autoCode.Package, ) } } @@ -325,19 +386,19 @@ func (autoCodeService *AutoCodeService) addAutoMoveFile(data *tplData) { if strings.Contains(fileSlice[1], "server") { if strings.Contains(fileSlice[n-2], "router") { data.autoMoveFilePath = filepath.Join(global.GVA_CONFIG.AutoCode.Root, global.GVA_CONFIG.AutoCode.Server, - global.GVA_CONFIG.AutoCode.SRouter, base) + fmt.Sprintf(global.GVA_CONFIG.AutoCode.SRouter, data.autoPackage), base) } else if strings.Contains(fileSlice[n-2], "api") { data.autoMoveFilePath = filepath.Join(global.GVA_CONFIG.AutoCode.Root, - global.GVA_CONFIG.AutoCode.Server, global.GVA_CONFIG.AutoCode.SApi, base) + global.GVA_CONFIG.AutoCode.Server, fmt.Sprintf(global.GVA_CONFIG.AutoCode.SApi, data.autoPackage), base) } else if strings.Contains(fileSlice[n-2], "service") { data.autoMoveFilePath = filepath.Join(global.GVA_CONFIG.AutoCode.Root, - global.GVA_CONFIG.AutoCode.Server, global.GVA_CONFIG.AutoCode.SService, base) + global.GVA_CONFIG.AutoCode.Server, fmt.Sprintf(global.GVA_CONFIG.AutoCode.SService, data.autoPackage), base) } else if strings.Contains(fileSlice[n-2], "model") { data.autoMoveFilePath = filepath.Join(global.GVA_CONFIG.AutoCode.Root, - global.GVA_CONFIG.AutoCode.Server, global.GVA_CONFIG.AutoCode.SModel, base) + global.GVA_CONFIG.AutoCode.Server, fmt.Sprintf(global.GVA_CONFIG.AutoCode.SModel, data.autoPackage), base) } else if strings.Contains(fileSlice[n-2], "request") { data.autoMoveFilePath = filepath.Join(global.GVA_CONFIG.AutoCode.Root, - global.GVA_CONFIG.AutoCode.Server, global.GVA_CONFIG.AutoCode.SRequest, base) + global.GVA_CONFIG.AutoCode.Server, fmt.Sprintf(global.GVA_CONFIG.AutoCode.SRequest, data.autoPackage), base) } } else if strings.Contains(fileSlice[1], "web") { if strings.Contains(fileSlice[n-1], "js") { @@ -431,7 +492,7 @@ func (autoCodeService *AutoCodeService) getNeedList(autoCode *system.AutoCodeStr needMkdir = make([]string, 0, len(tplFileList)) // 当文件夹下存在多个tpl文件时,改为map更合理 // 根据文件路径生成 tplData 结构体,待填充数据 for _, value := range tplFileList { - dataList = append(dataList, tplData{locationPath: value}) + dataList = append(dataList, tplData{locationPath: value, autoPackage: autoCode.Package}) } // 生成 *Template, 填充 template 字段 for index, value := range dataList { @@ -487,3 +548,244 @@ func injectionCode(structName string, bf *strings.Builder) error { } return nil } + +func (autoCodeService *AutoCodeService) CreateAutoCode(s *system.SysAutoCode) error { + if s.PackageName == "autocode" || s.PackageName == "system" || s.PackageName == "example" || s.PackageName == "" { + return errors.New("不能使用已保留的package name") + } + if !errors.Is(global.GVA_DB.Where("package_name = ?", s.PackageName).First(&system.SysAutoCode{}).Error, gorm.ErrRecordNotFound) { + return errors.New("存在相同PackageName") + } + if e := autoCodeService.CreatePackageTemp(s.PackageName); e != nil { + return e + } + return global.GVA_DB.Create(&s).Error +} + +func (autoCodeService *AutoCodeService) GetPackage() (pkgList []system.SysAutoCode, err error) { + err = global.GVA_DB.Find(&pkgList).Error + return pkgList, err +} + +func (AutoCodeService *AutoCodeService) DelPackage(a system.SysAutoCode) error { + return global.GVA_DB.Delete(a).Error +} + +func (autoCodeService *AutoCodeService) CreatePackageTemp(packageName string) error { + Init(packageName) + pendingTemp := []autoPackage{{ + path: packageService, + name: packageServiceName, + temp: string(subcontract.Server), + }, { + path: packageRouter, + name: packageRouterName, + temp: string(subcontract.Router), + }, { + path: packageAPI, + name: packageAPIName, + temp: string(subcontract.API), + }} + for i, s := range pendingTemp { + pendingTemp[i].path = filepath.Join(global.GVA_CONFIG.AutoCode.Root, global.GVA_CONFIG.AutoCode.Server, filepath.Clean(fmt.Sprintf(s.path, packageName))) + } + // 选择模板 + for _, s := range pendingTemp { + err := os.MkdirAll(filepath.Dir(s.path), 0755) + if err != nil { + return err + } + + f, err := os.Create(s.path) + if err != nil { + return err + } + + defer f.Close() + + temp, err := template.New("").Parse(s.temp) + if err != nil { + return err + } + err = temp.Execute(f, struct { + PackageName string `json:"package_name"` + }{packageName}) + if err != nil { + return err + } + } + // 创建完成后在对应的位置插入结构代码 + for _, v := range pendingTemp { + meta := packageInjectionMap[v.name] + if err := ImportReference(meta.path, fmt.Sprintf(meta.importCodeF, v.name, packageName), fmt.Sprintf(meta.structNameF, strings.Title(packageName)), fmt.Sprintf(meta.packageNameF, packageName), meta.groupName); err != nil { + return err + } + } + return nil +} + +type Visitor struct { + ImportCode string + StructName string + PackageName string + GroupName string +} + +func (vi *Visitor) Visit(node ast.Node) ast.Visitor { + switch n := node.(type) { + case *ast.GenDecl: + // 查找有没有import context包 + // Notice:没有考虑没有import任何包的情况 + if n.Tok == token.IMPORT && vi.ImportCode != "" { + vi.addImport(n) + // 不需要再遍历子树 + return nil + } + if n.Tok == token.TYPE && vi.StructName != "" && vi.PackageName != "" && vi.GroupName != "" { + vi.addStruct(n) + return nil + } + case *ast.FuncDecl: + if n.Name.Name == "Routers" { + vi.addFuncBodyVar(n) + return nil + } + + } + return vi +} + +func (vi *Visitor) addStruct(genDecl *ast.GenDecl) ast.Visitor { + for i := range genDecl.Specs { + switch n := genDecl.Specs[i].(type) { + case *ast.TypeSpec: + if strings.Index(n.Name.Name, "Group") > -1 { + switch t := n.Type.(type) { + case *ast.StructType: + f := &ast.Field{ + Names: []*ast.Ident{ + &ast.Ident{ + Name: vi.StructName, + Obj: &ast.Object{ + Kind: ast.Var, + Name: vi.StructName, + }, + }, + }, + Type: &ast.SelectorExpr{ + X: &ast.Ident{ + Name: vi.PackageName, + }, + Sel: &ast.Ident{ + Name: vi.GroupName, + }, + }, + } + t.Fields.List = append(t.Fields.List, f) + } + } + } + } + return vi +} + +func (vi *Visitor) addImport(genDecl *ast.GenDecl) ast.Visitor { + // 是否已经import + hasImported := false + for _, v := range genDecl.Specs { + importSpec := v.(*ast.ImportSpec) + // 如果已经包含 + if importSpec.Path.Value == strconv.Quote(vi.ImportCode) { + hasImported = true + } + } + if !hasImported { + genDecl.Specs = append(genDecl.Specs, &ast.ImportSpec{ + Path: &ast.BasicLit{ + Kind: token.STRING, + Value: strconv.Quote(vi.ImportCode), + }, + }) + } + return vi +} + +func (vi *Visitor) addFuncBodyVar(funDecl *ast.FuncDecl) ast.Visitor { + hasVar := false + for _, v := range funDecl.Body.List { + switch varSpec := v.(type) { + case *ast.AssignStmt: + for i := range varSpec.Lhs { + switch nn := varSpec.Lhs[i].(type) { + case *ast.Ident: + if nn.Name == vi.PackageName+"Router" { + hasVar = true + } + } + } + } + } + if !hasVar { + assignStmt := &ast.AssignStmt{ + Lhs: []ast.Expr{ + &ast.Ident{ + Name: vi.PackageName + "Router", + Obj: &ast.Object{ + Kind: ast.Var, + Name: vi.PackageName + "Router", + }, + }, + }, + Tok: token.DEFINE, + Rhs: []ast.Expr{ + &ast.SelectorExpr{ + X: &ast.SelectorExpr{ + X: &ast.Ident{ + Name: "router", + }, + Sel: &ast.Ident{ + Name: "RouterGroupApp", + }, + }, + Sel: &ast.Ident{ + Name: strings.Title(vi.PackageName), + }, + }, + }, + } + funDecl.Body.List = append(funDecl.Body.List, funDecl.Body.List[1]) + index := 1 + copy(funDecl.Body.List[index+1:], funDecl.Body.List[index:]) + funDecl.Body.List[index] = assignStmt + } + return vi +} + +func ImportReference(filepath, importCode, structName, packageName, groupName string) error { + fSet := token.NewFileSet() + fParser, err := parser.ParseFile(fSet, filepath, nil, parser.ParseComments) + if err != nil { + return err + } + importCode = strings.TrimSpace(importCode) + v := &Visitor{ + ImportCode: importCode, + StructName: structName, + PackageName: packageName, + GroupName: groupName, + } + if importCode == "" { + ast.Print(fSet, fParser) + } + + ast.Walk(v, fParser) + + var output []byte + buffer := bytes.NewBuffer(output) + err = format.Node(buffer, fSet, fParser) + if err != nil { + log.Fatal(err) + } + // 写回数据 + return ioutil.WriteFile(filepath, buffer.Bytes(), 0o600) +} diff --git a/server/service/system/sys_autocode_history.go b/server/service/system/sys_autocode_history.go index 450ce485c..b3076546a 100644 --- a/server/service/system/sys_autocode_history.go +++ b/server/service/system/sys_autocode_history.go @@ -27,8 +27,9 @@ var AutoCodeHistoryServiceApp = new(AutoCodeHistoryService) // RouterPath : RouterPath@RouterString;RouterPath2@RouterString2 // Author [SliverHorn](https://github.com/SliverHorn) // Author [songzhibin97](https://github.com/songzhibin97) -func (autoCodeHistoryService *AutoCodeHistoryService) CreateAutoCodeHistory(meta, structName, structCNName, autoCodePath string, injectionMeta string, tableName string, apiIds string) error { +func (autoCodeHistoryService *AutoCodeHistoryService) CreateAutoCodeHistory(meta, structName, structCNName, autoCodePath string, injectionMeta string, tableName string, apiIds string, Package string) error { return global.GVA_DB.Create(&system.SysAutoCodeHistory{ + Package: Package, RequestMeta: meta, AutoCodePath: autoCodePath, InjectionMeta: injectionMeta, @@ -50,9 +51,9 @@ func (autoCodeHistoryService *AutoCodeHistoryService) First(info *request.GetByI // Repeat 检测重复 // Author [SliverHorn](https://github.com/SliverHorn) // Author [songzhibin97](https://github.com/songzhibin97) -func (autoCodeHistoryService *AutoCodeHistoryService) Repeat(structName string) bool { +func (autoCodeHistoryService *AutoCodeHistoryService) Repeat(structName string, Package string) bool { var count int64 - global.GVA_DB.Model(&system.SysAutoCodeHistory{}).Where("struct_name = ? and flag = 0", structName).Count(&count) + global.GVA_DB.Model(&system.SysAutoCodeHistory{}).Where("struct_name = ? and package = ? and flag = 0", structName, Package).Count(&count) return count > 0 } @@ -69,19 +70,9 @@ func (autoCodeHistoryService *AutoCodeHistoryService) RollBack(info *request.Get if err != nil { global.GVA_LOG.Error("ClearTag DeleteApiByIds:", zap.Error(err)) } - // 获取全部表名 - dbNames, err := AutoCodeServiceApp.Database().GetTables(global.GVA_CONFIG.Mysql.Dbname) - if err != nil { - global.GVA_LOG.Error("ClearTag GetTables:", zap.Error(err)) - } // 删除表 - for _, name := range dbNames { - if strings.Contains(strings.ToUpper(strings.Replace(name.TableName, "_", "", -1)), strings.ToUpper(md.TableName)) { - // 删除表 - if err = AutoCodeServiceApp.DropTable(name.TableName); err != nil { - global.GVA_LOG.Error("ClearTag DropTable:", zap.Error(err)) - } - } + if err = AutoCodeServiceApp.DropTable(md.TableName); err != nil { + global.GVA_LOG.Error("ClearTag DropTable:", zap.Error(err)) } // 删除文件 diff --git a/server/service/system/sys_initdb.go b/server/service/system/sys_initdb.go index 22c8161a7..31f4d755d 100644 --- a/server/service/system/sys_initdb.go +++ b/server/service/system/sys_initdb.go @@ -44,6 +44,7 @@ func (initDBService *InitDBService) initTables() error { system.SysBaseMenuParameter{}, system.SysBaseMenuBtn{}, system.SysAuthorityBtn{}, + system.SysAutoCode{}, adapter.CasbinRule{}, diff --git a/server/service/system/sys_initdb_mysql.go b/server/service/system/sys_initdb_mysql.go index 85b44298a..66220d7b0 100644 --- a/server/service/system/sys_initdb_mysql.go +++ b/server/service/system/sys_initdb_mysql.go @@ -4,13 +4,14 @@ import ( "fmt" "path/filepath" + "github.com/flipped-aurora/gin-vue-admin/server/utils" + "github.com/flipped-aurora/gin-vue-admin/server/config" "github.com/flipped-aurora/gin-vue-admin/server/global" model "github.com/flipped-aurora/gin-vue-admin/server/model/system" "github.com/flipped-aurora/gin-vue-admin/server/model/system/request" "github.com/flipped-aurora/gin-vue-admin/server/source/example" "github.com/flipped-aurora/gin-vue-admin/server/source/system" - "github.com/flipped-aurora/gin-vue-admin/server/utils" uuid "github.com/satori/go.uuid" "gorm.io/driver/mysql" "gorm.io/gorm" diff --git a/server/service/system/sys_initdb_pgsql.go b/server/service/system/sys_initdb_pgsql.go index 848dbc9e0..09f9c5011 100644 --- a/server/service/system/sys_initdb_pgsql.go +++ b/server/service/system/sys_initdb_pgsql.go @@ -3,13 +3,14 @@ package system import ( "path/filepath" + "github.com/flipped-aurora/gin-vue-admin/server/utils" + "github.com/flipped-aurora/gin-vue-admin/server/config" "github.com/flipped-aurora/gin-vue-admin/server/global" model "github.com/flipped-aurora/gin-vue-admin/server/model/system" "github.com/flipped-aurora/gin-vue-admin/server/model/system/request" "github.com/flipped-aurora/gin-vue-admin/server/source/example" "github.com/flipped-aurora/gin-vue-admin/server/source/system" - "github.com/flipped-aurora/gin-vue-admin/server/utils" uuid "github.com/satori/go.uuid" "gorm.io/driver/postgres" "gorm.io/gorm" diff --git a/server/source/system/authorities_menus.go b/server/source/system/authorities_menus.go index 4867964ea..d01dd4685 100644 --- a/server/source/system/authorities_menus.go +++ b/server/source/system/authorities_menus.go @@ -45,6 +45,7 @@ func (a *authoritiesMenus) Initialize() error { {BaseMenuId: 23, AuthorityId: "888"}, {BaseMenuId: 24, AuthorityId: "888"}, {BaseMenuId: 25, AuthorityId: "888"}, + {BaseMenuId: 26, AuthorityId: "888"}, {BaseMenuId: 1, AuthorityId: "8881"}, {BaseMenuId: 2, AuthorityId: "8881"}, diff --git a/server/source/system/casbin.go b/server/source/system/casbin.go index f7f9c009a..5d6fe5277 100644 --- a/server/source/system/casbin.go +++ b/server/source/system/casbin.go @@ -89,6 +89,9 @@ func (c *casbin) Initialize() error { {PType: "p", V0: "888", V1: "/autoCode/createTemp", V2: "POST"}, {PType: "p", V0: "888", V1: "/autoCode/delSysHistory", V2: "POST"}, {PType: "p", V0: "888", V1: "/autoCode/getSysHistory", V2: "POST"}, + {PType: "p", V0: "888", V1: "/autoCode/createPackage", V2: "POST"}, + {PType: "p", V0: "888", V1: "/autoCode/getPackage", V2: "POST"}, + {PType: "p", V0: "888", V1: "/autoCode/delPackage", V2: "POST"}, {PType: "p", V0: "888", V1: "/sysDictionaryDetail/findSysDictionaryDetail", V2: "GET"}, {PType: "p", V0: "888", V1: "/sysDictionaryDetail/updateSysDictionaryDetail", V2: "PUT"}, diff --git a/server/source/system/menu.go b/server/source/system/menu.go index e0aa13016..88b51c7a4 100644 --- a/server/source/system/menu.go +++ b/server/source/system/menu.go @@ -42,6 +42,7 @@ func (m *menu) Initialize() error { {GVA_MODEL: global.GVA_MODEL{ID: 23}, MenuLevel: 0, Hidden: false, ParentId: "0", Path: "state", Name: "state", Component: "view/system/state.vue", Sort: 6, Meta: system.Meta{Title: global.Translate("system.menu.serverStatus"), Icon: "cloudy"}}, {GVA_MODEL: global.GVA_MODEL{ID: 24}, MenuLevel: 0, Hidden: false, ParentId: "14", Path: "autoCodeAdmin", Name: "autoCodeAdmin", Component: "view/systemTools/autoCodeAdmin/index.vue", Sort: 1, Meta: system.Meta{Title: global.Translate("system.menu.autoCodeManage"), Icon: "magic-stick"}}, {GVA_MODEL: global.GVA_MODEL{ID: 25}, MenuLevel: 0, Hidden: true, ParentId: "14", Path: "autoCodeEdit/:id", Name: "autoCodeEdit", Component: "view/systemTools/autoCode/index.vue", Sort: 0, Meta: system.Meta{Title: global.Translate("system.menu.autoCodeEdit"), Icon: "magic-stick"}}, + {GVA_MODEL: global.GVA_MODEL{ID: 26}, MenuLevel: 0, Hidden: false, ParentId: "14", Path: "autoPkg", Name: "autoPkg", Component: "view/systemTools/autoPkg/autoPkg.vue", Sort: 0, Meta: system.Meta{Title: "自动化package", Icon: "folder"}}, } if err := global.GVA_DB.Create(&entities).Error; err != nil { // 创建 model.User 初始化数据 return errors.Wrap(err, m.TableName()+" "+global.Translate("general.tabelDataInitFail")) diff --git a/server/utils/injectionCode.go b/server/utils/injection_code.go similarity index 100% rename from server/utils/injectionCode.go rename to server/utils/injection_code.go diff --git a/server/utils/verify.go b/server/utils/verify.go index 2725d4736..770d460a9 100644 --- a/server/utils/verify.go +++ b/server/utils/verify.go @@ -10,6 +10,7 @@ var ( PageInfoVerify = Rules{"Page": {NotEmpty()}, "PageSize": {NotEmpty()}} CustomerVerify = Rules{"CustomerName": {NotEmpty()}, "CustomerPhoneData": {NotEmpty()}} AutoCodeVerify = Rules{"Abbreviation": {NotEmpty()}, "StructName": {NotEmpty()}, "PackageName": {NotEmpty()}, "Fields": {NotEmpty()}} + AutoPackageVerify = Rules{"PackageName": {NotEmpty()}} AuthorityVerify = Rules{"AuthorityId": {NotEmpty()}, "AuthorityName": {NotEmpty()}, "ParentId": {NotEmpty()}} AuthorityIdVerify = Rules{"AuthorityId": {NotEmpty()}} OldAuthorityVerify = Rules{"OldAuthorityId": {NotEmpty()}} diff --git a/web/README.md b/web/README.md index bd6807479..c947159af 100644 --- a/web/README.md +++ b/web/README.md @@ -31,57 +31,74 @@ See [Configuration Reference](https://cli.vuejs.org/config/). 整理代码结构 ``` lua web -├── public -- public -| ├── favicon.ico -- ico -| └── index.html -- index -├── src -- 源代码 -│ ├── api -- 所有请求 -│ ├── assets -- 主题 字体等静态资源 -| ├── components -- components组件 -| ├── core -- gva抽离的一些前端资源 -| | ├── config.js -- 配置文件 -| | └── element_lazy.js -- elementt按需引入文件 -| | └── gin-vue-admin.js -- gva前端控制库 -| ├── directive -- 公用方法 -| ├── mixins -- 公用方法 -| ├── router -- 路由权限 -| ├── store -- store -| | ├── modules -- modules -| | | ├── dictionary.js -- 动态路由 -| | | ├── router.js -- 路由 -| | | └── user.js -- 用户权限菜单过滤 -| | ├── getters.js -- getters -| | └── index.js -- index -| ├── styles -- css -| ├── utils -- utils 组件 -| ├── view -- 主要view代码 -| | ├── about -- 关于我们 -| | ├── dashboard -- 面板 -| | ├── error -- 错误 -| | ├── example --上传案例 -| | ├── iconList -- icon列表 -| | ├── init -- 初始化数据 -| | | ├── index -- 新版本 -| | | ├── init -- 旧版本 -| | ├── layout -- layout约束页面 -| | | ├── aside -- -| | | ├── bottomInfo -- bottomInfo -| | | ├── screenfull -- 全屏设置 -| | | ├── setting -- 系统设置 -| | | └── index.vue -- base 约束 -| | ├── login --登录 -| | ├── person --个人中心 -| | ├── superAdmin -- 超级管理员操作 -| | ├── system -- 系统检测页面 -| | ├── systemTools -- 系统配置相关页面 -| | └── routerHolder.vue -- page 入口页面 -│ ├── App.vue -- 入口页面 -│ ├── main.js -- 入口文件 加载组件 初始化等 -│ └── permission.js -- 跳转 -├── build.config.js -- 环境变量build配置 -├── openDocument.js -- 商用代码公司自用产品无需授权 -├── .babelrc -- babel-loader 配置 -├── .travis.yml -- 自动化CI配置 -├── vue.config.js -- vue-cli 配置 -└── package.json -- package.json + ├── babel.config.js + ├── Dockerfile + ├── favicon.ico + ├── index.html -- 主页面 + ├── limit.js -- 助手代码 + ├── package.json -- 包管理器代码 + ├── src -- 源代码 + │ ├── api -- api 组 + │ ├── App.vue -- 主页面 + │ ├── assets -- 静态资源 + │ ├── components -- 全局组件 + │ ├── core -- gva 组件包 + │ │ ├── config.js -- gva网站配置文件 + │ │ ├── gin-vue-admin.js -- 注册欢迎文件 + │ │ └── global.js -- 统一导入文件 + │ ├── directive -- v-auth 注册文件 + │ ├── main.js -- 主文件 + │ ├── permission.js -- 路由中间件 + │ ├── pinia -- pinia 状态管理器,取代vuex + │ │ ├── index.js -- 入口文件 + │ │ └── modules -- modules + │ │ ├── dictionary.js + │ │ ├── router.js + │ │ └── user.js + │ ├── router -- 路由声明文件 + │ │ └── index.js + │ ├── style -- 全局样式 + │ │ ├── base.scss + │ │ ├── basics.scss + │ │ ├── element_visiable.scss -- 此处可以全局覆盖 element-plus 样式 + │ │ ├── iconfont.css -- 顶部几个icon的样式文件 + │ │ ├── main.scss + │ │ ├── mobile.scss + │ │ └── newLogin.scss + │ ├── utils -- 方法包库 + │ │ ├── asyncRouter.js -- 动态路由相关 + │ │ ├── btnAuth.js -- 动态权限按钮相关 + │ │ ├── bus.js -- 全局mitt声明文件 + │ │ ├── date.js -- 日期相关 + │ │ ├── dictionary.js -- 获取字典方法 + │ │ ├── downloadImg.js -- 下载图片方法 + │ │ ├── format.js -- 格式整理相关 + │ │ ├── image.js -- 图片相关方法 + │ │ ├── page.js -- 设置页面标题 + │ │ ├── request.js -- 请求 + │ │ └── stringFun.js -- 字符串文件 + | ├── view -- 主要view代码 + | | ├── about -- 关于我们 + | | ├── dashboard -- 面板 + | | ├── error -- 错误 + | | ├── example --上传案例 + | | ├── iconList -- icon列表 + | | ├── init -- 初始化数据 + | | | ├── index -- 新版本 + | | | ├── init -- 旧版本 + | | ├── layout -- layout约束页面 + | | | ├── aside + | | | ├── bottomInfo -- bottomInfo + | | | ├── screenfull -- 全屏设置 + | | | ├── setting -- 系统设置 + | | | └── index.vue -- base 约束 + | | ├── login --登录 + | | ├── person --个人中心 + | | ├── superAdmin -- 超级管理员操作 + | | ├── system -- 系统检测页面 + | | ├── systemTools -- 系统配置相关页面 + | | └── routerHolder.vue -- page 入口页面 + ├── vite.config.js -- vite 配置文件 + └── yarn.lock + ``` \ No newline at end of file diff --git a/web/src/api/autoCode.js b/web/src/api/autoCode.js index fc7329191..8be6dd86a 100644 --- a/web/src/api/autoCode.js +++ b/web/src/api/autoCode.js @@ -92,3 +92,26 @@ export const delSysHistory = (data) => { data }) } + +export const createPackageApi = (data) => { + return service({ + url: '/autoCode/createPackage', + method: 'post', + data + }) +} + +export const getPackageApi = () => { + return service({ + url: '/autoCode/getPackage', + method: 'post' + }) +} + +export const deletePackageApi = (data) => { + return service({ + url: '/autoCode/delPackage', + method: 'post', + data + }) +} diff --git a/web/src/core/config.js b/web/src/core/config.js index 9efd6a2a1..5dd0d882e 100644 --- a/web/src/core/config.js +++ b/web/src/core/config.js @@ -18,7 +18,7 @@ export const viteLogo = (env) => { ) console.log( chalk.green( - `> 当前版本:V2.5.0` + `> 当前版本:v2.5.1 beta` ) ) console.log( diff --git a/web/src/core/gin-vue-admin.js b/web/src/core/gin-vue-admin.js index fbd2affb2..b589e3261 100644 --- a/web/src/core/gin-vue-admin.js +++ b/web/src/core/gin-vue-admin.js @@ -10,7 +10,7 @@ export default { register(app) console.log(` 欢迎使用 Gin-Vue-Admin - 当前版本:V2.5.0 + 当前版本:v2.5.1 beta 加群方式:微信:shouzi_1994 QQ群:622360840 GVA讨论社区:https://support.qq.com/products/371961 默认自动化文档地址:http://127.0.0.1:${import.meta.env.VITE_SERVER_PORT}/swagger/index.html diff --git a/web/src/pinia/modules/router.js b/web/src/pinia/modules/router.js index 2769e7b5b..41d81d3b3 100644 --- a/web/src/pinia/modules/router.js +++ b/web/src/pinia/modules/router.js @@ -51,7 +51,7 @@ export const useRouterStore = defineStore('router', () => { }] const asyncRouterRes = await asyncMenu() const asyncRouter = asyncRouterRes.data.menus - asyncRouter.push({ + asyncRouter && asyncRouter.push({ path: '404', name: '404', hidden: true, diff --git a/web/src/pinia/modules/user.js b/web/src/pinia/modules/user.js index 39bbc4776..962d3a4f7 100644 --- a/web/src/pinia/modules/user.js +++ b/web/src/pinia/modules/user.js @@ -1,12 +1,14 @@ import { login, getUserInfo, setSelfInfo } from '@/api/user' import { jsonInBlacklist } from '@/api/jwt' import router from '@/router/index' -import { ElMessage } from 'element-plus' +import { ElLoading, ElMessage } from 'element-plus' import { defineStore } from 'pinia' import { ref, computed, watch } from 'vue' import { useRouterStore } from './router' export const useUserStore = defineStore('user', () => { + const loadingInstance = ref(null) + const userInfo = ref({ uuid: '', nickName: '', @@ -60,19 +62,28 @@ export const useUserStore = defineStore('user', () => { } /* 登录*/ const LoginIn = async(loginInfo) => { - const res = await login(loginInfo) - if (res.code === 0) { - setUserInfo(res.data.user) - setToken(res.data.token) - const routerStore = useRouterStore() - await routerStore.SetAsyncRouter() - const asyncRouters = routerStore.asyncRouters - asyncRouters.forEach(asyncRouter => { - router.addRoute(asyncRouter) - }) - router.push({ name: userInfo.value.authority.defaultRouter }) - return true + loadingInstance.value = ElLoading.service({ + fullscreen: true, + text: '登陆中,请稍候...', + }) + try { + const res = await login(loginInfo) + if (res.code === 0) { + setUserInfo(res.data.user) + setToken(res.data.token) + const routerStore = useRouterStore() + await routerStore.SetAsyncRouter() + const asyncRouters = routerStore.asyncRouters + asyncRouters.forEach(asyncRouter => { + router.addRoute(asyncRouter) + }) + router.push({ name: userInfo.value.authority.defaultRouter }) + return true + } + } catch (e) { + loadingInstance.value.close() } + loadingInstance.value.close() } /* 登出*/ const LoginOut = async() => { @@ -143,6 +154,7 @@ export const useUserStore = defineStore('user', () => { sideMode, setToken, baseColor, - activeColor + activeColor, + loadingInstance } }) diff --git a/web/src/style/iconfont.css b/web/src/style/iconfont.css new file mode 100644 index 000000000..bc091a05c --- /dev/null +++ b/web/src/style/iconfont.css @@ -0,0 +1,47 @@ +@font-face { + font-family: 'gvaIcon'; + src: url('data:font/ttf;charset=utf-8;base64,AAEAAAANAIAAAwBQRkZUTZJUyU8AAA14AAAAHEdERUYAKQARAAANWAAAAB5PUy8yPJpJTAAAAVgAAABgY21hcM0T0L4AAAHYAAABWmdhc3D//wADAAANUAAAAAhnbHlmRk3UvwAAA0wAAAbYaGVhZB/a5jgAAADcAAAANmhoZWEHngOFAAABFAAAACRobXR4DaoBrAAAAbgAAAAebG9jYQbMCGgAAAM0AAAAGG1heHABGgB+AAABOAAAACBuYW1lXoIBAgAACiQAAAKCcG9zdN15OnUAAAyoAAAAqAABAAAAAQAA+a916l8PPPUACwQAAAAAAN5YUSMAAAAA3lhRIwBL/8ADwAM1AAAACAACAAAAAAAAAAEAAAOA/4AAXAQAAAAAAAPAAAEAAAAAAAAAAAAAAAAAAAAEAAEAAAALAHIABQAAAAAAAgAAAAoACgAAAP8AAAAAAAAABAQAAZAABQAAAokCzAAAAI8CiQLMAAAB6wAyAQgAAAIABQMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUGZFZADA5mXmfQOA/4AAAAPcAIAAAAABAAAAAAAAAAAAAAAgAAEEAAAAAAAAAAQAAAAEAACLAIoAYAB1AHYASwBLAGAAAAAAAAMAAAADAAAAHAABAAAAAABUAAMAAQAAABwABAA4AAAACgAIAAIAAuZm5mrmduZ9//8AAOZl5mrmdeZ7//8ZnhmbGZEZjQABAAAAAAAAAAAAAAAAAQYAAAEAAAAAAAAAAQIAAAACAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEYAigEcAbgCUAK6AxoDbAACAIsAIANsAswAEQAjAAAlIicBJjQ3ATYeAQYHCQEeAQYhIicBJjQ3ATYeAQYHCQEeAQYDSw0J/qsLCwFVChsSAgr+xAE8CgIV/qkNCP6qCgoBVgkbEgIK/sUBOwoCFCAJATULGQsBNQoCExwI/uL+4ggbFAkBNQsZCwE1CgITHAj+4v7iCRoUAAAAAAIAigAgA2sCzAARACIAAAE0JwEmDgEWFwkBDgEWMjcBNiUBJg4BFhcJAQ4BFjI3ATY0AiAL/qsJHBECCQE8/sQJAhQZCQFVCwFA/qsKGxICCgE8/sQKAhUZCQFVCwF1DQsBNQoCExwI/uL+4gkaFAkBNQskATUKAhMcCP7i/uIJGhQJATULGQADAGD/wAOgAzUATABcAGwAAAE1NCcmJyYiBwYHBh0BDgEdARQWOwEyNj0BNCYrATU0NzY3NjIXFhcWHQEjIgYdARQWOwEGBwYHLgEjIgYUFjMyNjc2NzY3PgE9ATQmBRUUBisBIiY9ATQ2OwEyFgUUBisBIiY9ATQ2OwEyFhUDYDAvT1O+U08vMBslLB9VHi0tHiAoJkFDnENBJiggHi0tHhUPJC5SChwRHCQkHBEeCHJAMxAfKiX9kAYFVQUGBgVVBQYCVQYFVQUGBgVVBQYByQxgUlAuMDAuUFJgDAQqG6seLCweqx4tCk5DQScnJydBQ04KLR6rHiwrGiAGDxElNiUSEAc1KkUBKx6rGyhFqwQGBgSrBQYGsAQGBgSrBQYGBQAABAB1//UDjQMLABsANwBSAHEAABMyNj0BFxYyNjQvATMyNjQmKwEiBwYHBh0BFBYFIgYdAScmIgYUHwEjIgYUFjsBMjc2NzY9ATYmJQc1NCYiBh0BFBcWFxY7ATI2NCYrATc2NCYGATQ1FSYnJisBIgYUFjsBBwYUFjI/ARUUFjI2PQEnJpUNE7wJHRMKvIcMFBQM1ggCDAgCFALiDRPJCRoTCcmJDBQUDNYIAg8CAwES/gbJExkUAggKBAbWDBQUDInJCRMXAgEHCwQG2AwUFAyJvAkSHgi8ExoTAgEB9RQMibwIEhkKvBMZFAIGDAQI1gwU6hQMickJExoJyRMZFAIICgQG2AwUIsmHDBQUDNYIAg8CAxQZE8kKGRMBAcABAQIOAwMUGRO8ChkTCbyHDBQUDNYFBAAABAB2//cDjgMMABoANQBRAG0AAAEjIgYUFjsBMjc2NzY9ATQmIgYdAScmIgYUFwEzMjY0JisBIgcGBwYdARQWMjY9ARcWMjY0JyUmJyYrASIGFBY7AQcGFBYyPwEVFBYyNj0BLgE3FhcWOwEyNjQmKwE3NjQmIg8BNTQmIgYdAR4BATqJDRMTDdUJAg8CAhMaE7cKGRQKAjeJDRMTDdUJAg8CAhMaE8gJHhIK/i8HCgQH1w0TEw2JyQoTHQnIFBkTAQKoBwoEBtYNExMNibwKFBkKvBMZFAICAhoUGRMCBwoEBtYNExMNib4KExoK/iAUGRMCBwoEB9UNExMNickIEhkK8w8CAhMZFMgKGRMJyYkNExMN1QIJzQ8CAhMZFLsKGhMKvIkNExMN1QMIAAAAAAUAS//LA7UDNQAUACkAKgA3AEQAAAEiBwYHBhQXFhcWMjc2NzY0JyYnJgMiJyYnJjQ3Njc2MhcWFxYUBwYHBgMjFB4BMj4BNC4BIg4BFyIGHQEUFjI2PQE0JgIAd2ZiOzs7O2Jm7mZiOzs7O2Jmd2VXVDIzMzJUV8pXVDIzMzJUV2UrDBQWFAwMFBYUDCsNExMaExMDNTs7YmbuZmI7Ozs7YmbuZmI7O/zWMzJUV8pXVDIzMzJUV8pXVDIzAjULFAwMFBYUDAwUgBQM6w0TEw3rDBQAAQBL/+ADwAMgAD0AAAEmBg8BLgEjIgcGBwYUFxYXFjMyPgE3Ni4BBgcOAiMiJyYnJjQ3Njc2MzIeARcnJg4BFh8BMj8BNj8BNCYDpgwXAxc5yXZyY184Ojo4X2NyWaB4HgULGhcFGWaJS2FUUTAwMTBRU2FIhGQbgA0WBw4NwgUIBAwDMQ0CsQMODFhmeDk3XmHiYV43OUV9UQ0XCQsMRWo6MC9PUr9TTy8wNmNBJQMOGhYDMwMBCAu6DRYAAAAAAgBg/8YDugMiAB4AMwAABSc+ATU0JyYnJiIHBgcGFBcWFxYzMjc2NxcWMjc2JiUiJyYnJjQ3Njc2MhcWFxYUBwYHBgOxviouNDFVV8lXVTIzMzJVV2RDPzwzvgkeCAcB/hxUSEYpKiopRkioSEYpKyspRkgCvjB9RGRYVDIzNDJVWMlXVTE0GBYqvgkJChuBKylGSKhIRikqKilGSKhIRikrAAAAABIA3gABAAAAAAAAABMAKAABAAAAAAABAAgATgABAAAAAAACAAcAZwABAAAAAAADAAgAgQABAAAAAAAEAAgAnAABAAAAAAAFAAsAvQABAAAAAAAGAAgA2wABAAAAAAAKACsBPAABAAAAAAALABMBkAADAAEECQAAACYAAAADAAEECQABABAAPAADAAEECQACAA4AVwADAAEECQADABAAbwADAAEECQAEABAAigADAAEECQAFABYApQADAAEECQAGABAAyQADAAEECQAKAFYA5AADAAEECQALACYBaABDAHIAZQBhAHQAZQBkACAAYgB5ACAAaQBjAG8AbgBmAG8AbgB0AABDcmVhdGVkIGJ5IGljb25mb250AABpAGMAbwBuAGYAbwBuAHQAAGljb25mb250AABSAGUAZwB1AGwAYQByAABSZWd1bGFyAABpAGMAbwBuAGYAbwBuAHQAAGljb25mb250AABpAGMAbwBuAGYAbwBuAHQAAGljb25mb250AABWAGUAcgBzAGkAbwBuACAAMQAuADAAAFZlcnNpb24gMS4wAABpAGMAbwBuAGYAbwBuAHQAAGljb25mb250AABHAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAHMAdgBnADIAdAB0AGYAIABmAHIAbwBtACAARgBvAG4AdABlAGwAbABvACAAcAByAG8AagBlAGMAdAAuAABHZW5lcmF0ZWQgYnkgc3ZnMnR0ZiBmcm9tIEZvbnRlbGxvIHByb2plY3QuAABoAHQAdABwADoALwAvAGYAbwBuAHQAZQBsAGwAbwAuAGMAbwBtAABodHRwOi8vZm9udGVsbG8uY29tAAAAAAIAAAAAAAAACgAAAAAAAQAAAAAAAAAAAAAAAAAAAAAACwAAAAEAAgECAQMBBAEFAQYBBwEIAQkRYXJyb3ctZG91YmxlLWxlZnQSYXJyb3ctZG91YmxlLXJpZ2h0EGN1c3RvbWVyLXNlcnZpY2URZnVsbHNjcmVlbi1leHBhbmQRZnVsbHNjcmVlbi1zaHJpbmsGcHJvbXB0B3JlZnJlc2gGc2VhcmNoAAAAAf//AAIAAQAAAAwAAAAWAAAAAgABAAMACgABAAQAAAACAAAAAAAAAAEAAAAA1aQnCAAAAADeWFEjAAAAAN5YUSM=') format('truetype'); + font-weight: 600; + font-style: normal; + font-display: swap; +} +.gvaIcon { + font-family: "gvaIcon" !important; + font-size: 16px; + font-style: normal; + font-weight: 800; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + } + +.gvaIcon-arrow-double-left:before { + content: "\e665"; + } + +.gvaIcon-arrow-double-right:before { + content: "\e666"; +} + +.gvaIcon-fullscreen-shrink:before { + content: "\e676"; +} +.gvaIcon-customer-service:before { + content: "\e66a"; + } + +.gvaIcon-fullscreen-expand:before { + content: "\e675"; +} + +.gvaIcon-prompt:before { + content: "\e67b"; +} + +.gvaIcon-refresh:before { + content: "\e67c"; +} + +.gvaIcon-search:before { + content: "\e67d"; +} + diff --git a/web/src/style/init.sass b/web/src/style/init.sass deleted file mode 100644 index e69de29bb..000000000 diff --git a/web/src/style/main.scss b/web/src/style/main.scss index 7a34d7f5f..ed6d8707a 100644 --- a/web/src/style/main.scss +++ b/web/src/style/main.scss @@ -8,6 +8,7 @@ */ @import '@/style/basics.scss'; +@import '@/style/iconfont.css'; html { line-height: 1.15; /* 1 */ @@ -665,8 +666,6 @@ li { } .main-cont.el-main { min-height: 100%; - -webkit-transition: margin-left .28s; - transition: margin-left .28s; margin-left: $width-aside; position: relative; } diff --git a/web/src/view/layout/index.vue b/web/src/view/layout/index.vue index 33686341a..913381294 100644 --- a/web/src/view/layout/index.vue +++ b/web/src/view/layout/index.vue @@ -17,21 +17,17 @@ class="topfix" > -