From 734ff79890763ba7ecd72e1cfcf35ea9e9e4bc78 Mon Sep 17 00:00:00 2001
From: SliverHorn <503551462@qq.com>
Date: Mon, 7 Sep 2020 09:55:15 +0800
Subject: [PATCH 01/31] =?UTF-8?q?=E6=9B=B4=E6=96=B0docker-compose=E7=9A=84?=
=?UTF-8?q?server-handle.sh?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.docker-compose/shell/server-handle.sh | 25 +++++++++++++++++--------
1 file changed, 17 insertions(+), 8 deletions(-)
diff --git a/.docker-compose/shell/server-handle.sh b/.docker-compose/shell/server-handle.sh
index 1bfc524b..232a1daf 100644
--- a/.docker-compose/shell/server-handle.sh
+++ b/.docker-compose/shell/server-handle.sh
@@ -11,6 +11,7 @@ import (
"fmt"
"gin-vue-admin/global"
"gin-vue-admin/initialize"
+ "go.uber.org/zap"
"time"
)
@@ -35,10 +36,10 @@ func RunWindowsServer() {
// 保证文本顺序输出
// In order to ensure that the text order output can be deleted
time.Sleep(10 * time.Microsecond)
- global.GVA_LOG.Debug("server run success on ", address)
+ global.GVA_LOG.Debug("server run success on ", zap.String("address", address))
fmt.Printf("欢迎使用 Gin-Vue-Admin默认自动化文档地址:http://127.0.0.1%s/swagger/index.html\n 默认前端文件运行地址:http://127.0.0.1:8888/admin\n", address)
- global.GVA_LOG.Error(s.ListenAndServe())
+ global.GVA_LOG.Error(s.ListenAndServe().Error())
}
EOF
@@ -108,11 +109,19 @@ captcha:
img-width: 240
img-height: 80
-# logger configuration
-log:
- prefix: '[GIN-VUE-ADMIN]'
- log-file: true
- stdout: 'DEBUG'
- file: 'DEBUG'
+# zap logger configuration
+zap:
+ # 可使用 "debug", "info", "warn", "error", "dpanic", "panic", "fatal",
+ level: 'debug'
+ # console: 控制台, json: json格式输出
+ format: 'console'
+ prefix: '[GIN-VUE-ADMIN]'
+ director: 'log'
+ link_name: 'latest_log'
+ show_line: true
+ # LowercaseLevelEncoder:小写, LowercaseColorLevelEncoder:小写带颜色,CapitalLevelEncoder: 大写, CapitalColorLevelEncoder: 大写带颜色,
+ encode_level: 'LowercaseColorLevelEncoder'
+ stacktrace_key: 'stacktrace'
+ log_in_console: true
EOF
From fb6dfcbd72046570e11f835d97ab4b40ebe00ea6 Mon Sep 17 00:00:00 2001
From: pixel <303176530@qq.com>
Date: Mon, 7 Sep 2020 11:33:28 +0800
Subject: [PATCH 02/31] =?UTF-8?q?=E8=87=AA=E5=8A=A8=E5=88=9D=E5=A7=8B?=
=?UTF-8?q?=E5=8C=96=E5=8D=95=E7=8B=AC=E5=BB=BA=E4=BB=93=20=E4=B8=BA=20?=
=?UTF-8?q?=E5=91=BD=E4=BB=A4=E8=A1=8C=E5=81=9A=E5=9F=BA=E7=A1=80?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
server/go.mod | 3 +-
server/gva/init_data/init_data.go | 482 +++++++++++++++++++++++
server/initialize/data.go | 26 --
server/main.go | 3 +-
server/model/exa_customer.go | 7 -
server/model/exa_file_upload_download.go | 8 -
server/model/sys_api.go | 70 ----
server/model/sys_authority.go | 8 -
server/model/sys_base_menu.go | 31 --
server/model/sys_casbin.go | 142 -------
server/model/sys_dictionary.go | 14 -
server/model/sys_dictionary_detail.go | 31 --
server/model/sys_user.go | 8 -
server/service/sys_db_initialize.go | 183 ---------
14 files changed, 485 insertions(+), 531 deletions(-)
create mode 100644 server/gva/init_data/init_data.go
delete mode 100644 server/initialize/data.go
delete mode 100644 server/service/sys_db_initialize.go
diff --git a/server/go.mod b/server/go.mod
index 588472f5..fb4f9148 100644
--- a/server/go.mod
+++ b/server/go.mod
@@ -39,10 +39,9 @@ require (
github.com/spf13/pflag v1.0.5 // indirect
github.com/spf13/viper v1.6.2
github.com/swaggo/gin-swagger v1.2.0
- github.com/swaggo/swag v1.6.7
+ github.com/swaggo/swag v1.5.1
github.com/tebeka/strftime v0.1.3 // indirect
github.com/unrolled/secure v1.0.7
- github.com/urfave/cli v1.22.2 // indirect
golang.org/x/net v0.0.0-20200320220750-118fecf932d8 // indirect
golang.org/x/sys v0.0.0-20200610111108-226ff32320da // indirect
golang.org/x/tools v0.0.0-20200324003944-a576cf524670 // indirect
diff --git a/server/gva/init_data/init_data.go b/server/gva/init_data/init_data.go
new file mode 100644
index 00000000..4610370b
--- /dev/null
+++ b/server/gva/init_data/init_data.go
@@ -0,0 +1,482 @@
+package init_data
+
+import (
+ "gin-vue-admin/global"
+ "gin-vue-admin/model"
+ gormadapter "github.com/casbin/gorm-adapter/v3"
+ "github.com/satori/go.uuid"
+ "gorm.io/gorm"
+ "time"
+)
+
+type SysAuthorityMenus struct {
+ SysAuthorityAuthorityId string
+ SysBaseMenuId uint
+}
+
+type SysDataAuthorityId struct {
+ SysAuthorityAuthorityId string
+ DataAuthorityIdAuthorityId string
+}
+
+func InitSysApi() (err error) {
+ tx := global.GVA_DB.Begin() // 开始事务
+ insert := []model.SysApi{
+ {gorm.Model{ID: 1, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/base/login", "用户登录", "base", "POST"},
+ {gorm.Model{ID: 2, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/base/register", "用户注册", "base", "POST"},
+ {gorm.Model{ID: 3, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/api/createApi", "创建api", "api", "POST"},
+ {gorm.Model{ID: 4, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/api/getApiList", "获取api列表", "api", "POST"},
+ {gorm.Model{ID: 5, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/api/getApiById", "获取api详细信息", "api", "POST"},
+ {gorm.Model{ID: 6, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/api/deleteApi", "删除Api", "api", "POST"},
+ {gorm.Model{ID: 7, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/api/updateApi", "更新Api", "api", "POST"},
+ {gorm.Model{ID: 8, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/api/getAllApis", "获取所有api", "api", "POST"},
+ {gorm.Model{ID: 9, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/authority/createAuthority", "创建角色", "authority", "POST"},
+ {gorm.Model{ID: 10, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/authority/deleteAuthority", "删除角色", "authority", "POST"},
+ {gorm.Model{ID: 11, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/authority/getAuthorityList", "获取角色列表", "authority", "POST"},
+ {gorm.Model{ID: 12, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/menu/getMenu", "获取菜单树", "menu", "POST"},
+ {gorm.Model{ID: 13, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/menu/getMenuList", "分页获取基础menu列表", "menu", "POST"},
+ {gorm.Model{ID: 14, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/menu/addBaseMenu", "新增菜单", "menu", "POST"},
+ {gorm.Model{ID: 15, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/menu/getBaseMenuTree", "获取用户动态路由", "menu", "POST"},
+ {gorm.Model{ID: 16, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/menu/addMenuAuthority", "增加menu和角色关联关系", "menu", "POST"},
+ {gorm.Model{ID: 17, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/menu/getMenuAuthority", "获取指定角色menu", "menu", "POST"},
+ {gorm.Model{ID: 18, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/menu/deleteBaseMenu", "删除菜单", "menu", "POST"},
+ {gorm.Model{ID: 19, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/menu/updateBaseMenu", "更新菜单", "menu", "POST"},
+ {gorm.Model{ID: 20, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/menu/getBaseMenuById", "根据id获取菜单", "menu", "POST"},
+ {gorm.Model{ID: 21, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/user/changePassword", "修改密码", "user", "POST"},
+ {gorm.Model{ID: 23, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/user/getUserList", "获取用户列表", "user", "POST"},
+ {gorm.Model{ID: 24, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/user/setUserAuthority", "修改用户角色", "user", "POST"},
+ {gorm.Model{ID: 25, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/fileUploadAndDownload/upload", "文件上传示例", "fileUploadAndDownload", "POST"},
+ {gorm.Model{ID: 26, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/fileUploadAndDownload/getFileList", "获取上传文件列表", "fileUploadAndDownload", "POST"},
+ {gorm.Model{ID: 27, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/casbin/updateCasbin", "更改角色api权限", "casbin", "POST"},
+ {gorm.Model{ID: 28, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/casbin/getPolicyPathByAuthorityId", "获取权限列表", "casbin", "POST"},
+ {gorm.Model{ID: 29, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/fileUploadAndDownload/deleteFile", "删除文件", "fileUploadAndDownload", "POST"},
+ {gorm.Model{ID: 30, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/jwt/jsonInBlacklist", "jwt加入黑名单", "jwt", "POST"},
+ {gorm.Model{ID: 31, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/authority/setDataAuthority", "设置角色资源权限", "authority", "POST"},
+ {gorm.Model{ID: 32, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/system/getSystemConfig", "获取配置文件内容", "system", "POST"},
+ {gorm.Model{ID: 33, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/system/setSystemConfig", "设置配置文件内容", "system", "POST"},
+ {gorm.Model{ID: 34, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/customer/customer", "创建客户", "customer", "POST"},
+ {gorm.Model{ID: 35, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/customer/customer", "更新客户", "customer", "PUT"},
+ {gorm.Model{ID: 36, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/customer/customer", "删除客户", "customer", "DELETE"},
+ {gorm.Model{ID: 37, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/customer/customer", "获取单一客户", "customer", "GET"},
+ {gorm.Model{ID: 38, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/customer/customerList", "获取客户列表", "customer", "GET"},
+ {gorm.Model{ID: 39, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/casbin/casbinTest/:pathParam", "RESTFUL模式测试", "casbin", "GET"},
+ {gorm.Model{ID: 40, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/autoCode/createTemp", "自动化代码", "autoCode", "POST"},
+ {gorm.Model{ID: 41, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/authority/updateAuthority", "更新角色信息", "authority", "PUT"},
+ {gorm.Model{ID: 42, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/authority/copyAuthority", "拷贝角色", "authority", "POST"},
+ {gorm.Model{ID: 43, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/user/deleteUser", "删除用户", "user", "DELETE"},
+ {gorm.Model{ID: 44, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/sysDictionaryDetail/createSysDictionaryDetail", "新增字典内容", "sysDictionaryDetail", "POST"},
+ {gorm.Model{ID: 45, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/sysDictionaryDetail/deleteSysDictionaryDetail", "删除字典内容", "sysDictionaryDetail", "DELETE"},
+ {gorm.Model{ID: 46, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/sysDictionaryDetail/updateSysDictionaryDetail", "更新字典内容", "sysDictionaryDetail", "PUT"},
+ {gorm.Model{ID: 47, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/sysDictionaryDetail/findSysDictionaryDetail", "根据ID获取字典内容", "sysDictionaryDetail", "GET"},
+ {gorm.Model{ID: 48, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/sysDictionaryDetail/getSysDictionaryDetailList", "获取字典内容列表", "sysDictionaryDetail", "GET"},
+ {gorm.Model{ID: 49, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/sysDictionary/createSysDictionary", "新增字典", "sysDictionary", "POST"},
+ {gorm.Model{ID: 50, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/sysDictionary/deleteSysDictionary", "删除字典", "sysDictionary", "DELETE"},
+ {gorm.Model{ID: 51, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/sysDictionary/updateSysDictionary", "更新字典", "sysDictionary", "PUT"},
+ {gorm.Model{ID: 52, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/sysDictionary/findSysDictionary", "根据ID获取字典", "sysDictionary", "GET"},
+ {gorm.Model{ID: 53, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/sysDictionary/getSysDictionaryList", "获取字典列表", "sysDictionary", "GET"},
+ {gorm.Model{ID: 54, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/sysOperationRecord/createSysOperationRecord", "新增操作记录", "sysOperationRecord", "POST"},
+ {gorm.Model{ID: 55, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/sysOperationRecord/deleteSysOperationRecord", "删除操作记录", "sysOperationRecord", "DELETE"},
+ {gorm.Model{ID: 56, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/sysOperationRecord/findSysOperationRecord", "根据ID获取操作记录", "sysOperationRecord", "GET"},
+ {gorm.Model{ID: 57, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/sysOperationRecord/getSysOperationRecordList", "获取操作记录列表", "sysOperationRecord", "GET"},
+ {gorm.Model{ID: 58, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/autoCode/getTables", "获取数据库表", "autoCode", "GET"},
+ {gorm.Model{ID: 59, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/autoCode/getDB", "获取所有数据库", "autoCode", "GET"},
+ {gorm.Model{ID: 60, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/autoCode/getColume", "获取所选table的所有字段", "autoCode", "GET"},
+ {gorm.Model{ID: 61, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/sysOperationRecord/deleteSysOperationRecordByIds", "批量删除操作历史", "sysOperationRecord", "DELETE"},
+ {gorm.Model{ID: 62, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/simpleUploader/upload", "插件版分片上传", "simpleUploader", "POST"},
+ {gorm.Model{ID: 63, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/simpleUploader/checkFileMd5", "文件完整度验证", "simpleUploader", "GET"},
+ {gorm.Model{ID: 64, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/simpleUploader/mergeFileMd5", "上传完成合并文件", "simpleUploader", "GET"},
+ {gorm.Model{ID: 65, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/user/setUserInfo", "设置用户信息", "user", "PUT"},
+ }
+ if tx.Create(&insert).Error != nil { // 遇到错误时回滚事务
+ tx.Rollback()
+ }
+ return tx.Commit().Error
+}
+
+func InitSysUser() (err error) {
+ tx := global.GVA_DB.Begin() // 开始事务
+ insert := []model.SysUser{
+ {Model: gorm.Model{ID: 1, CreatedAt: time.Now(), UpdatedAt: time.Now()}, UUID: uuid.NewV4(), Username: "admin", Password: "e10adc3949ba59abbe56e057f20f883e", NickName: "超级管理员", HeaderImg: "http://qmplusimg.henrongyi.top/1571627762timg.jpg", AuthorityId: "888"},
+ {Model: gorm.Model{ID: 2, CreatedAt: time.Now(), UpdatedAt: time.Now()}, UUID: uuid.NewV4(), Username: "a303176530", Password: "3ec063004a6f31642261936a379fde3d", NickName: "QMPlusUser", HeaderImg: "http://qmplusimg.henrongyi.top/1572075907logo.png", AuthorityId: "9528"},
+ }
+ if tx.Create(&insert).Error != nil { // 遇到错误时回滚事务
+ tx.Rollback()
+ }
+ return tx.Commit().Error
+}
+
+func InitExaCustomer() (err error) {
+ tx := global.GVA_DB.Begin() // 开始事务
+ insert := []model.ExaCustomer{
+ {Model: gorm.Model{ID: 1, CreatedAt: time.Now(), UpdatedAt: time.Now()}, CustomerName: "测试客户", CustomerPhoneData: "1761111111", SysUserID: 1, SysUserAuthorityID: "888"},
+ }
+ if tx.Create(&insert).Error != nil { // 遇到错误时回滚事务
+ tx.Rollback()
+ }
+ return tx.Commit().Error
+}
+
+func InitCasbinModel() (err error) {
+ if !global.GVA_DB.Migrator().HasTable("casbin_rule") {
+ if err := global.GVA_DB.Migrator().CreateTable(&gormadapter.CasbinRule{}); err != nil {
+ return err
+ }
+ }
+ tx := global.GVA_DB.Begin() // 开始事务
+ insert := []model.CasbinModel{
+ {"p", "888", "/base/login", "POST"},
+ {"p", "888", "/base/register", "POST"},
+ {"p", "888", "/api/createApi", "POST"},
+ {"p", "888", "/api/getApiList", "POST"},
+ {"p", "888", "/api/getApiById", "POST"},
+ {"p", "888", "/api/deleteApi", "POST"},
+ {"p", "888", "/api/updateApi", "POST"},
+ {"p", "888", "/api/getAllApis", "POST"},
+ {"p", "888", "/authority/createAuthority", "POST"},
+ {"p", "888", "/authority/deleteAuthority", "POST"},
+ {"p", "888", "/authority/getAuthorityList", "POST"},
+ {"p", "888", "/authority/setDataAuthority", "POST"},
+ {"p", "888", "/authority/updateAuthority", "PUT"},
+ {"p", "888", "/authority/copyAuthority", "POST"},
+ {"p", "888", "/menu/getMenu", "POST"},
+ {"p", "888", "/menu/getMenuList", "POST"},
+ {"p", "888", "/menu/addBaseMenu", "POST"},
+ {"p", "888", "/menu/getBaseMenuTree", "POST"},
+ {"p", "888", "/menu/addMenuAuthority", "POST"},
+ {"p", "888", "/menu/getMenuAuthority", "POST"},
+ {"p", "888", "/menu/deleteBaseMenu", "POST"},
+ {"p", "888", "/menu/updateBaseMenu", "POST"},
+ {"p", "888", "/menu/getBaseMenuById", "POST"},
+ {"p", "888", "/user/changePassword", "POST"},
+ {"p", "888", "/user/getUserList", "POST"},
+ {"p", "888", "/user/setUserAuthority", "POST"},
+ {"p", "888", "/user/deleteUser", "DELETE"},
+ {"p", "888", "/fileUploadAndDownload/upload", "POST"},
+ {"p", "888", "/fileUploadAndDownload/getFileList", "POST"},
+ {"p", "888", "/fileUploadAndDownload/deleteFile", "POST"},
+ {"p", "888", "/casbin/updateCasbin", "POST"},
+ {"p", "888", "/casbin/getPolicyPathByAuthorityId", "POST"},
+ {"p", "888", "/casbin/casbinTest/:pathParam", "GET"},
+ {"p", "888", "/jwt/jsonInBlacklist", "POST"},
+ {"p", "888", "/system/getSystemConfig", "POST"},
+ {"p", "888", "/system/setSystemConfig", "POST"},
+ {"p", "888", "/customer/customer", "POST"},
+ {"p", "888", "/customer/customer", "PUT"},
+ {"p", "888", "/customer/customer", "DELETE"},
+ {"p", "888", "/customer/customer", "GET"},
+ {"p", "888", "/customer/customerList", "GET"},
+ {"p", "888", "/autoCode/createTemp", "POST"},
+ {"p", "888", "/autoCode/getTables", "GET"},
+ {"p", "888", "/autoCode/getDB", "GET"},
+ {"p", "888", "/autoCode/getColume", "GET"},
+ {"p", "888", "/sysDictionaryDetail/createSysDictionaryDetail", "POST"},
+ {"p", "888", "/sysDictionaryDetail/deleteSysDictionaryDetail", "DELETE"},
+ {"p", "888", "/sysDictionaryDetail/updateSysDictionaryDetail", "PUT"},
+ {"p", "888", "/sysDictionaryDetail/findSysDictionaryDetail", "GET"},
+ {"p", "888", "/sysDictionaryDetail/getSysDictionaryDetailList", "GET"},
+ {"p", "888", "/sysDictionary/createSysDictionary", "POST"},
+ {"p", "888", "/sysDictionary/deleteSysDictionary", "DELETE"},
+ {"p", "888", "/sysDictionary/updateSysDictionary", "PUT"},
+ {"p", "888", "/sysDictionary/findSysDictionary", "GET"},
+ {"p", "888", "/sysDictionary/getSysDictionaryList", "GET"},
+ {"p", "888", "/sysOperationRecord/createSysOperationRecord", "POST"},
+ {"p", "888", "/sysOperationRecord/deleteSysOperationRecord", "DELETE"},
+ {"p", "888", "/sysOperationRecord/updateSysOperationRecord", "PUT"},
+ {"p", "888", "/sysOperationRecord/findSysOperationRecord", "GET"},
+ {"p", "888", "/sysOperationRecord/getSysOperationRecordList", "GET"},
+ {"p", "888", "/sysOperationRecord/deleteSysOperationRecordByIds", "DELETE"},
+ {"p", "888", "/user/setUserInfo", "PUT"},
+ {"p", "8881", "/base/login", "POST"},
+ {"p", "8881", "/base/register", "POST"},
+ {"p", "8881", "/api/createApi", "POST"},
+ {"p", "8881", "/api/getApiList", "POST"},
+ {"p", "8881", "/api/getApiById", "POST"},
+ {"p", "8881", "/api/deleteApi", "POST"},
+ {"p", "8881", "/api/updateApi", "POST"},
+ {"p", "8881", "/api/getAllApis", "POST"},
+ {"p", "8881", "/authority/createAuthority", "POST"},
+ {"p", "8881", "/authority/deleteAuthority", "POST"},
+ {"p", "8881", "/authority/getAuthorityList", "POST"},
+ {"p", "8881", "/authority/setDataAuthority", "POST"},
+ {"p", "8881", "/menu/getMenu", "POST"},
+ {"p", "8881", "/menu/getMenuList", "POST"},
+ {"p", "8881", "/menu/addBaseMenu", "POST"},
+ {"p", "8881", "/menu/getBaseMenuTree", "POST"},
+ {"p", "8881", "/menu/addMenuAuthority", "POST"},
+ {"p", "8881", "/menu/getMenuAuthority", "POST"},
+ {"p", "8881", "/menu/deleteBaseMenu", "POST"},
+ {"p", "8881", "/menu/updateBaseMenu", "POST"},
+ {"p", "8881", "/menu/getBaseMenuById", "POST"},
+ {"p", "8881", "/user/changePassword", "POST"},
+ {"p", "8881", "/user/getUserList", "POST"},
+ {"p", "8881", "/user/setUserAuthority", "POST"},
+ {"p", "8881", "/fileUploadAndDownload/upload", "POST"},
+ {"p", "8881", "/fileUploadAndDownload/getFileList", "POST"},
+ {"p", "8881", "/fileUploadAndDownload/deleteFile", "POST"},
+ {"p", "8881", "/casbin/updateCasbin", "POST"},
+ {"p", "8881", "/casbin/getPolicyPathByAuthorityId", "POST"},
+ {"p", "8881", "/jwt/jsonInBlacklist", "POST"},
+ {"p", "8881", "/system/getSystemConfig", "POST"},
+ {"p", "8881", "/system/setSystemConfig", "POST"},
+ {"p", "8881", "/customer/customer", "POST"},
+ {"p", "8881", "/customer/customer", "PUT"},
+ {"p", "8881", "/customer/customer", "DELETE"},
+ {"p", "8881", "/customer/customer", "GET"},
+ {"p", "8881", "/customer/customerList", "GET"},
+ {"p", "9528", "/base/login", "POST"},
+ {"p", "9528", "/base/register", "POST"},
+ {"p", "9528", "/api/createApi", "POST"},
+ {"p", "9528", "/api/getApiList", "POST"},
+ {"p", "9528", "/api/getApiById", "POST"},
+ {"p", "9528", "/api/deleteApi", "POST"},
+ {"p", "9528", "/api/updateApi", "POST"},
+ {"p", "9528", "/api/getAllApis", "POST"},
+ {"p", "9528", "/authority/createAuthority", "POST"},
+ {"p", "9528", "/authority/deleteAuthority", "POST"},
+ {"p", "9528", "/authority/getAuthorityList", "POST"},
+ {"p", "9528", "/authority/setDataAuthority", "POST"},
+ {"p", "9528", "/menu/getMenu", "POST"},
+ {"p", "9528", "/menu/getMenuList", "POST"},
+ {"p", "9528", "/menu/addBaseMenu", "POST"},
+ {"p", "9528", "/menu/getBaseMenuTree", "POST"},
+ {"p", "9528", "/menu/addMenuAuthority", "POST"},
+ {"p", "9528", "/menu/getMenuAuthority", "POST"},
+ {"p", "9528", "/menu/deleteBaseMenu", "POST"},
+ {"p", "9528", "/menu/updateBaseMenu", "POST"},
+ {"p", "9528", "/menu/getBaseMenuById", "POST"},
+ {"p", "9528", "/user/changePassword", "POST"},
+ {"p", "9528", "/user/getUserList", "POST"},
+ {"p", "9528", "/user/setUserAuthority", "POST"},
+ {"p", "9528", "/fileUploadAndDownload/upload", "POST"},
+ {"p", "9528", "/fileUploadAndDownload/getFileList", "POST"},
+ {"p", "9528", "/fileUploadAndDownload/deleteFile", "POST"},
+ {"p", "9528", "/casbin/updateCasbin", "POST"},
+ {"p", "9528", "/casbin/getPolicyPathByAuthorityId", "POST"},
+ {"p", "9528", "/jwt/jsonInBlacklist", "POST"},
+ {"p", "9528", "/system/getSystemConfig", "POST"},
+ {"p", "9528", "/system/setSystemConfig", "POST"},
+ {"p", "9528", "/customer/customer", "POST"},
+ {"p", "9528", "/customer/customer", "PUT"},
+ {"p", "9528", "/customer/customer", "DELETE"},
+ {"p", "9528", "/customer/customer", "GET"},
+ {"p", "9528", "/customer/customerList", "GET"},
+ {"p", "9528", "/autoCode/createTemp", "POST"},
+ }
+ if tx.Table("casbin_rule").Create(&insert).Error != nil { // 遇到错误时回滚事务
+ tx.Rollback()
+ }
+ return tx.Commit().Error
+}
+
+func InitSysAuthority() (err error) {
+ tx := global.GVA_DB.Begin() // 开始事务
+ insert := []model.SysAuthority{
+ {CreatedAt: time.Now(), UpdatedAt: time.Now(), AuthorityId: "888", AuthorityName: "普通用户", ParentId: "0"},
+ {CreatedAt: time.Now(), UpdatedAt: time.Now(), AuthorityId: "8881", AuthorityName: "普通用户子角色", ParentId: "888"},
+ {CreatedAt: time.Now(), UpdatedAt: time.Now(), AuthorityId: "9528", AuthorityName: "测试角色", ParentId: "0"},
+ }
+ if tx.Create(&insert).Error != nil { // 遇到错误时回滚事务
+ tx.Rollback()
+ }
+ return tx.Commit().Error
+}
+
+func InitSysBaseMenus() (err error) {
+ tx := global.GVA_DB.Begin() // 开始事务
+ insert := []model.SysBaseMenu{
+ {Model: gorm.Model{ID: 1, CreatedAt: time.Now(), UpdatedAt: time.Now()}, MenuLevel: 0, ParentId: "0", Path: "dashboard", Name: "dashboard", Hidden: false, Component: "view/dashboard/index.vue", Sort: 1, Meta: model.Meta{Title: "仪表盘", Icon: "setting"}},
+ {Model: gorm.Model{ID: 2, CreatedAt: time.Now(), UpdatedAt: time.Now()}, MenuLevel: 0, Hidden: false, ParentId: "0", Path: "about", Name: "about", Component: "view/about/index.vue", Sort: 7, Meta: model.Meta{Title: "关于我们", Icon: "info"}},
+ {Model: gorm.Model{ID: 3, CreatedAt: time.Now(), UpdatedAt: time.Now()}, MenuLevel: 0, Hidden: false, ParentId: "0", Path: "admin", Name: "superAdmin", Component: "view/superAdmin/index.vue", Sort: 3, Meta: model.Meta{Title: "超级管理员", Icon: "user-solid"}},
+ {Model: gorm.Model{ID: 4, CreatedAt: time.Now(), UpdatedAt: time.Now()}, MenuLevel: 0, Hidden: false, ParentId: "3", Path: "authority", Name: "authority", Component: "view/superAdmin/authority/authority.vue", Sort: 1, Meta: model.Meta{Title: "角色管理", Icon: "s-custom"}},
+ {Model: gorm.Model{ID: 5, CreatedAt: time.Now(), UpdatedAt: time.Now()}, MenuLevel: 0, Hidden: false, ParentId: "3", Path: "menu", Name: "menu", Component: "view/superAdmin/menu/menu.vue", Sort: 2, Meta: model.Meta{Title: "菜单管理", Icon: "s-order", KeepAlive: true}},
+ {Model: gorm.Model{ID: 6, CreatedAt: time.Now(), UpdatedAt: time.Now()}, MenuLevel: 0, Hidden: false, ParentId: "3", Path: "api", Name: "api", Component: "view/superAdmin/api/api.vue", Sort: 3, Meta: model.Meta{Title: "api管理", Icon: "s-platform", KeepAlive: true}},
+ {Model: gorm.Model{ID: 7, CreatedAt: time.Now(), UpdatedAt: time.Now()}, MenuLevel: 0, Hidden: false, ParentId: "3", Path: "user", Name: "user", Component: "view/superAdmin/user/user.vue", Sort: 4, Meta: model.Meta{Title: "用户管理", Icon: "coordinate"}},
+ {Model: gorm.Model{ID: 8, CreatedAt: time.Now(), UpdatedAt: time.Now()}, MenuLevel: 0, Hidden: true, ParentId: "0", Path: "person", Name: "person", Component: "view/person/person.vue", Sort: 4, Meta: model.Meta{Title: "个人信息", Icon: "message-solid"}},
+ {Model: gorm.Model{ID: 9, CreatedAt: time.Now(), UpdatedAt: time.Now()}, MenuLevel: 0, Hidden: false, ParentId: "0", Path: "example", Name: "example", Component: "view/example/index.vue", Sort: 6, Meta: model.Meta{Title: "示例文件", Icon: "s-management"}},
+ {Model: gorm.Model{ID: 10, CreatedAt: time.Now(), UpdatedAt: time.Now()}, MenuLevel: 0, Hidden: false, ParentId: "9", Path: "table", Name: "table", Component: "view/example/table/table.vue", Sort: 1, Meta: model.Meta{Title: "表格示例", Icon: "s-order"}},
+ {Model: gorm.Model{ID: 11, CreatedAt: time.Now(), UpdatedAt: time.Now()}, MenuLevel: 0, Hidden: false, ParentId: "9", Path: "form", Name: "form", Component: "view/example/form/form.vue", Sort: 2, Meta: model.Meta{Title: "表单示例", Icon: "document"}},
+ {Model: gorm.Model{ID: 12, CreatedAt: time.Now(), UpdatedAt: time.Now()}, MenuLevel: 0, Hidden: false, ParentId: "9", Path: "rte", Name: "rte", Component: "view/example/rte/rte.vue", Sort: 3, Meta: model.Meta{Title: "富文本编辑器", Icon: "reading"}},
+ {Model: gorm.Model{ID: 13, CreatedAt: time.Now(), UpdatedAt: time.Now()}, MenuLevel: 0, Hidden: false, ParentId: "9", Path: "excel", Name: "excel", Component: "view/example/excel/excel.vue", Sort: 4, Meta: model.Meta{Title: "excel导入导出", Icon: "s-marketing"}},
+ {Model: gorm.Model{ID: 14, CreatedAt: time.Now(), UpdatedAt: time.Now()}, MenuLevel: 0, Hidden: false, ParentId: "9", Path: "upload", Name: "upload", Component: "view/example/upload/upload.vue", Sort: 5, Meta: model.Meta{Title: "上传下载", Icon: "upload"}},
+ {Model: gorm.Model{ID: 15, CreatedAt: time.Now(), UpdatedAt: time.Now()}, MenuLevel: 0, Hidden: false, ParentId: "9", Path: "breakpoint", Name: "breakpoint", Component: "view/example/breakpoint/breakpoint.vue", Sort: 6, Meta: model.Meta{Title: "断点续传", Icon: "upload"}},
+ {Model: gorm.Model{ID: 16, CreatedAt: time.Now(), UpdatedAt: time.Now()}, MenuLevel: 0, Hidden: false, ParentId: "9", Path: "customer", Name: "customer", Component: "view/example/customer/customer.vue", Sort: 7, Meta: model.Meta{Title: "客户列表(资源示例)", Icon: "s-custom"}},
+ {Model: gorm.Model{ID: 17, CreatedAt: time.Now(), UpdatedAt: time.Now()}, MenuLevel: 0, Hidden: false, ParentId: "0", Path: "systemTools", Name: "systemTools", Component: "view/systemTools/index.vue", Sort: 5, Meta: model.Meta{Title: "系统工具", Icon: "s-cooperation"}},
+ {Model: gorm.Model{ID: 18, CreatedAt: time.Now(), UpdatedAt: time.Now()}, MenuLevel: 0, Hidden: false, ParentId: "17", Path: "autoCode", Name: "autoCode", Component: "view/systemTools/autoCode/index.vue", Sort: 1, Meta: model.Meta{Title: "代码生成器", Icon: "cpu", KeepAlive: true}},
+ {Model: gorm.Model{ID: 19, CreatedAt: time.Now(), UpdatedAt: time.Now()}, MenuLevel: 0, Hidden: false, ParentId: "17", Path: "formCreate", Name: "formCreate", Component: "view/systemTools/formCreate/index.vue", Sort: 2, Meta: model.Meta{Title: "表单生成器", Icon: "magic-stick", KeepAlive: true}},
+ {Model: gorm.Model{ID: 20, CreatedAt: time.Now(), UpdatedAt: time.Now()}, MenuLevel: 0, Hidden: false, ParentId: "17", Path: "system", Name: "system", Component: "view/systemTools/system/system.vue", Sort: 3, Meta: model.Meta{Title: "系统配置", Icon: "s-operation"}},
+ {Model: gorm.Model{ID: 21, CreatedAt: time.Now(), UpdatedAt: time.Now()}, MenuLevel: 0, Hidden: false, ParentId: "0", Path: "iconList", Name: "iconList", Component: "view/iconList/index.vue", Sort: 2, Meta: model.Meta{Title: "图标集合", Icon: "star-on"}},
+ {Model: gorm.Model{ID: 22, CreatedAt: time.Now(), UpdatedAt: time.Now()}, MenuLevel: 0, Hidden: false, ParentId: "3", Path: "dictionary", Name: "dictionary", Component: "view/superAdmin/dictionary/sysDictionary.vue", Sort: 5, Meta: model.Meta{Title: "字典管理", Icon: "notebook-2"}},
+ {Model: gorm.Model{ID: 23, CreatedAt: time.Now(), UpdatedAt: time.Now()}, MenuLevel: 0, Hidden: true, ParentId: "3", Path: "dictionaryDetail/:id", Name: "dictionaryDetail", Component: "view/superAdmin/dictionary/sysDictionaryDetail.vue", Sort: 1, Meta: model.Meta{Title: "字典详情", Icon: "s-order"}},
+ {Model: gorm.Model{ID: 24, CreatedAt: time.Now(), UpdatedAt: time.Now()}, MenuLevel: 0, Hidden: false, ParentId: "3", Path: "operation", Name: "operation", Component: "view/superAdmin/operation/sysOperationRecord.vue", Sort: 6, Meta: model.Meta{Title: "操作历史", Icon: "time"}},
+ {Model: gorm.Model{ID: 25, CreatedAt: time.Now(), UpdatedAt: time.Now()}, MenuLevel: 0, Hidden: false, ParentId: "9", Path: "simpleUploader", Name: "simpleUploader", Component: "view/example/simpleUploader/simpleUploader", Sort: 6, Meta: model.Meta{Title: "断点续传(插件版)", Icon: "upload"}},
+ }
+ if tx.Create(&insert).Error != nil { // 遇到错误时回滚事务
+ tx.Rollback()
+ }
+ return tx.Commit().Error
+}
+
+func InitAuthorityMenu() (err error) {
+ return global.GVA_DB.Exec("CREATE ALGORITHM = UNDEFINED SQL SECURITY DEFINER VIEW `authority_menu` AS select `sys_base_menus`.`id` AS `id`,`sys_base_menus`.`created_at` AS `created_at`, `sys_base_menus`.`updated_at` AS `updated_at`, `sys_base_menus`.`deleted_at` AS `deleted_at`, `sys_base_menus`.`menu_level` AS `menu_level`,`sys_base_menus`.`parent_id` AS `parent_id`,`sys_base_menus`.`path` AS `path`,`sys_base_menus`.`name` AS `name`,`sys_base_menus`.`hidden` AS `hidden`,`sys_base_menus`.`component` AS `component`, `sys_base_menus`.`title` AS `title`,`sys_base_menus`.`icon` AS `icon`,`sys_base_menus`.`sort` AS `sort`,`sys_authority_menus`.`sys_authority_authority_id` AS `authority_id`,`sys_authority_menus`.`sys_base_menu_id` AS `menu_id`,`sys_base_menus`.`keep_alive` AS `keep_alive`,`sys_base_menus`.`default_menu` AS `default_menu` from (`sys_authority_menus` join `sys_base_menus` on ((`sys_authority_menus`.`sys_base_menu_id` = `sys_base_menus`.`id`)))").Error
+}
+
+func InitSysDictionary() (err error) {
+ status := new(bool)
+ *status = true
+ tx := global.GVA_DB.Begin() // 开始事务
+ insert := []model.SysDictionary{
+ {Model: gorm.Model{ID: 1, CreatedAt: time.Now(), UpdatedAt: time.Now()}, Name: "性别", Type: "sex", Status: status, Desc: "性别字典"},
+ {Model: gorm.Model{ID: 2, CreatedAt: time.Now(), UpdatedAt: time.Now()}, Name: "数据库int类型", Type: "int", Status: status, Desc: "int类型对应的数据库类型"},
+ {Model: gorm.Model{ID: 3, CreatedAt: time.Now(), UpdatedAt: time.Now()}, Name: "数据库时间日期类型", Type: "time.Time", Status: status, Desc: "数据库时间日期类型"},
+ {Model: gorm.Model{ID: 4, CreatedAt: time.Now(), UpdatedAt: time.Now()}, Name: "数据库浮点型", Type: "float64", Status: status, Desc: "数据库浮点型"},
+ {Model: gorm.Model{ID: 5, CreatedAt: time.Now(), UpdatedAt: time.Now()}, Name: "数据库字符串", Type: "string", Status: status, Desc: "数据库字符串"},
+ {Model: gorm.Model{ID: 6, CreatedAt: time.Now(), UpdatedAt: time.Now()}, Name: "数据库bool类型", Type: "bool", Status: status, Desc: "数据库bool类型"},
+ }
+ if tx.Create(&insert).Error != nil { // 遇到错误时回滚事务
+ tx.Rollback()
+ }
+ return tx.Commit().Error
+}
+
+func InitSysAuthorityMenus() (err error) {
+ tx := global.GVA_DB.Begin() // 开始事务
+ insert := []SysAuthorityMenus{
+ {"888", 1},
+ {"888", 2},
+ {"888", 3},
+ {"888", 4},
+ {"888", 5},
+ {"888", 6},
+ {"888", 7},
+ {"888", 8},
+ {"888", 9},
+ {"888", 10},
+ {"888", 11},
+ {"888", 12},
+ {"888", 13},
+ {"888", 14},
+ {"888", 15},
+ {"888", 16},
+ {"888", 17},
+ {"888", 18},
+ {"888", 19},
+ {"888", 20},
+ {"888", 21},
+ {"888", 22},
+ {"888", 23},
+ {"888", 24},
+ {"888", 25},
+ {"8881", 1},
+ {"8881", 2},
+ {"8881", 8},
+ {"8881", 17},
+ {"8881", 18},
+ {"8881", 19},
+ {"8881", 20},
+ {"9528", 1},
+ {"9528", 2},
+ {"9528", 3},
+ {"9528", 4},
+ {"9528", 5},
+ {"9528", 6},
+ {"9528", 7},
+ {"9528", 8},
+ {"9528", 9},
+ {"9528", 10},
+ {"9528", 11},
+ {"9528", 12},
+ {"9528", 13},
+ {"9528", 14},
+ {"9528", 15},
+ {"9528", 17},
+ {"9528", 18},
+ {"9528", 19},
+ {"9528", 20},
+ }
+ if tx.Table("sys_authority_menus").Create(&insert).Error != nil { // 遇到错误时回滚事务
+ tx.Rollback()
+ }
+ return tx.Commit().Error
+}
+
+func InitSysDataAuthorityId() (err error) {
+ tx := global.GVA_DB.Begin() // 开始事务
+ insert := []SysDataAuthorityId{
+ {"888", "888"},
+ {"888", "8881"},
+ {"888", "9528"},
+ {"9528", "8881"},
+ {"9528", "9528"},
+ }
+ if tx.Table("sys_data_authority_ids").Create(&insert).Error != nil { // 遇到错误时回滚事务
+ tx.Rollback()
+ }
+ return tx.Commit().Error
+}
+
+func InitSysDictionaryDetail() (err error) {
+ status := new(bool)
+ *status = true
+ tx := global.GVA_DB.Begin() // 开始事务
+ insert := []model.SysDictionaryDetail{
+ {gorm.Model{ID: 1, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "smallint", 1, status, 1, 2},
+ {gorm.Model{ID: 2, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "mediumint", 2, status, 2, 2},
+ {gorm.Model{ID: 3, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "int", 3, status, 3, 2},
+ {gorm.Model{ID: 4, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "bigint", 4, status, 4, 2},
+ {gorm.Model{ID: 5, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "data", 0, status, 0, 3},
+ {gorm.Model{ID: 6, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "time", 1, status, 1, 3},
+ {gorm.Model{ID: 7, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "year", 2, status, 2, 3},
+ {gorm.Model{ID: 8, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "datetime", 3, status, 3, 3},
+ {gorm.Model{ID: 9, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "timestamp", 5, status, 5, 3},
+ {gorm.Model{ID: 10, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "float", 0, status, 0, 4},
+ {gorm.Model{ID: 11, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "double", 1, status, 1, 4},
+ {gorm.Model{ID: 12, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "decimal", 2, status, 2, 4},
+ {gorm.Model{ID: 13, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "char", 0, status, 0, 5},
+ {gorm.Model{ID: 14, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "varchar", 1, status, 1, 5},
+ {gorm.Model{ID: 15, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "tinyblob", 2, status, 2, 5},
+ {gorm.Model{ID: 16, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "tinytext", 3, status, 3, 5},
+ {gorm.Model{ID: 17, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "text", 4, status, 4, 5},
+ {gorm.Model{ID: 18, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "blob", 5, status, 5, 5},
+ {gorm.Model{ID: 19, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "mediumblob", 6, status, 6, 5},
+ {gorm.Model{ID: 20, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "mediumtext", 7, status, 7, 5},
+ {gorm.Model{ID: 21, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "longblob", 8, status, 8, 5},
+ {gorm.Model{ID: 22, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "longtext", 9, status, 9, 5},
+ {gorm.Model{ID: 23, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "tinyint", 0, status, 0, 6},
+ }
+ if tx.Create(&insert).Error != nil { // 遇到错误时回滚事务
+ tx.Rollback()
+ }
+ return tx.Commit().Error
+}
+
+func InitExaFileUploadAndDownload() (err error) {
+ tx := global.GVA_DB.Begin() // 开始事务
+ insert := []model.ExaFileUploadAndDownload{
+ {gorm.Model{ID: 1, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "10.png", "http://qmplusimg.henrongyi.top/gvalogo.png", "png", "158787308910.png"},
+ {gorm.Model{ID: 2, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "logo.png", "http://qmplusimg.henrongyi.top/1576554439myAvatar.png", "png", "1587973709logo.png"},
+ }
+ if tx.Create(&insert).Error != nil { // 遇到错误时回滚事务
+ tx.Rollback()
+ }
+ return tx.Commit().Error
+}
+
+func InitData() {
+ var err error
+ err = InitSysApi()
+ err = InitSysUser()
+ err = InitExaCustomer()
+ err = InitCasbinModel()
+ err = InitSysAuthority()
+ err = InitSysBaseMenus()
+ err = InitAuthorityMenu()
+ err = InitSysDictionary()
+ err = InitSysAuthorityMenus()
+ err = InitSysDataAuthorityId()
+ err = InitSysDictionaryDetail()
+ err = InitExaFileUploadAndDownload()
+ if err != nil {
+ global.GVA_LOG.Error("initialize data failed", err)
+ }
+ global.GVA_LOG.Debug("initialize data success")
+}
diff --git a/server/initialize/data.go b/server/initialize/data.go
deleted file mode 100644
index b7010c82..00000000
--- a/server/initialize/data.go
+++ /dev/null
@@ -1,26 +0,0 @@
-package initialize
-
-import (
- "gin-vue-admin/global"
- "gin-vue-admin/service"
-)
-
-func Data() {
- var err error
- err = service.InitSysApi()
- err = service.InitSysUser()
- err = service.InitExaCustomer()
- err = service.InitCasbinModel()
- err = service.InitSysAuthority()
- err = service.InitSysBaseMenus()
- err = service.InitAuthorityMenu()
- err = service.InitSysDictionary()
- err = service.InitSysAuthorityMenus()
- err = service.InitSysDataAuthorityId()
- err = service.InitSysDictionaryDetail()
- err = service.InitExaFileUploadAndDownload()
- if err != nil {
- global.GVA_LOG.Error("initialize data failed", err)
- }
- global.GVA_LOG.Debug("initialize data success")
-}
diff --git a/server/main.go b/server/main.go
index 49e6919c..3429c443 100644
--- a/server/main.go
+++ b/server/main.go
@@ -3,6 +3,7 @@ package main
import (
"gin-vue-admin/core"
"gin-vue-admin/global"
+ "gin-vue-admin/gva/init_data"
"gin-vue-admin/initialize"
//"runtime"
)
@@ -24,7 +25,7 @@ func main() {
initialize.Mysql()
}
initialize.DBTables()
- //initialize.Data() // 打开注释即可初始化数据
+ init_data.InitData() // 打开注释即可初始化数据
// 程序结束前关闭数据库链接
db, _ := global.GVA_DB.DB()
defer db.Close()
diff --git a/server/model/exa_customer.go b/server/model/exa_customer.go
index d4610206..20c56781 100644
--- a/server/model/exa_customer.go
+++ b/server/model/exa_customer.go
@@ -2,7 +2,6 @@ package model
import (
"gorm.io/gorm"
- "time"
)
type ExaCustomer struct {
@@ -13,9 +12,3 @@ type ExaCustomer struct {
SysUserAuthorityID string `json:"sysUserAuthorityID" form:"sysUserAuthorityID" gorm:"comment:'管理角色ID'"`
SysUser SysUser `json:"sysUser" form:"sysUser" gorm:"comment:'管理详情'"`
}
-
-func ExaCustomerData() []ExaCustomer {
- return []ExaCustomer{
- {Model: gorm.Model{ID: 1, CreatedAt: time.Now(), UpdatedAt: time.Now()}, CustomerName: "测试客户", CustomerPhoneData: "1761111111", SysUserID: 1, SysUserAuthorityID: "888"},
- }
-}
diff --git a/server/model/exa_file_upload_download.go b/server/model/exa_file_upload_download.go
index 33e3357f..e7d72320 100644
--- a/server/model/exa_file_upload_download.go
+++ b/server/model/exa_file_upload_download.go
@@ -2,7 +2,6 @@ package model
import (
"gorm.io/gorm"
- "time"
)
type ExaFileUploadAndDownload struct {
@@ -12,10 +11,3 @@ type ExaFileUploadAndDownload struct {
Tag string `json:"tag" gorm:"comment:'文件标签'"`
Key string `json:"key" gorm:"comment:'编号'"`
}
-
-func ExaFileUploadAndDownloadData() []ExaFileUploadAndDownload {
- return []ExaFileUploadAndDownload{
- {gorm.Model{ID: 1, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "10.png", "http://qmplusimg.henrongyi.top/gvalogo.png", "png", "158787308910.png"},
- {gorm.Model{ID: 2, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "logo.png", "http://qmplusimg.henrongyi.top/1576554439myAvatar.png", "png", "1587973709logo.png"},
- }
-}
diff --git a/server/model/sys_api.go b/server/model/sys_api.go
index 6dcc7713..c816d23f 100644
--- a/server/model/sys_api.go
+++ b/server/model/sys_api.go
@@ -2,7 +2,6 @@ package model
import (
"gorm.io/gorm"
- "time"
)
type SysApi struct {
@@ -12,72 +11,3 @@ type SysApi struct {
ApiGroup string `json:"apiGroup" gorm:"comment:'api组'"`
Method string `json:"method" gorm:"default:'POST'" gorm:"comment:'方法'"`
}
-
-func SysApiData() []SysApi {
- return []SysApi{
- {gorm.Model{ID: 1, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/base/login", "用户登录", "base", "POST"},
- {gorm.Model{ID: 2, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/base/register", "用户注册", "base", "POST"},
- {gorm.Model{ID: 3, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/api/createApi", "创建api", "api", "POST"},
- {gorm.Model{ID: 4, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/api/getApiList", "获取api列表", "api", "POST"},
- {gorm.Model{ID: 5, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/api/getApiById", "获取api详细信息", "api", "POST"},
- {gorm.Model{ID: 6, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/api/deleteApi", "删除Api", "api", "POST"},
- {gorm.Model{ID: 7, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/api/updateApi", "更新Api", "api", "POST"},
- {gorm.Model{ID: 8, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/api/getAllApis", "获取所有api", "api", "POST"},
- {gorm.Model{ID: 9, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/authority/createAuthority", "创建角色", "authority", "POST"},
- {gorm.Model{ID: 10, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/authority/deleteAuthority", "删除角色", "authority", "POST"},
- {gorm.Model{ID: 11, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/authority/getAuthorityList", "获取角色列表", "authority", "POST"},
- {gorm.Model{ID: 12, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/menu/getMenu", "获取菜单树", "menu", "POST"},
- {gorm.Model{ID: 13, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/menu/getMenuList", "分页获取基础menu列表", "menu", "POST"},
- {gorm.Model{ID: 14, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/menu/addBaseMenu", "新增菜单", "menu", "POST"},
- {gorm.Model{ID: 15, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/menu/getBaseMenuTree", "获取用户动态路由", "menu", "POST"},
- {gorm.Model{ID: 16, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/menu/addMenuAuthority", "增加menu和角色关联关系", "menu", "POST"},
- {gorm.Model{ID: 17, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/menu/getMenuAuthority", "获取指定角色menu", "menu", "POST"},
- {gorm.Model{ID: 18, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/menu/deleteBaseMenu", "删除菜单", "menu", "POST"},
- {gorm.Model{ID: 19, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/menu/updateBaseMenu", "更新菜单", "menu", "POST"},
- {gorm.Model{ID: 20, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/menu/getBaseMenuById", "根据id获取菜单", "menu", "POST"},
- {gorm.Model{ID: 21, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/user/changePassword", "修改密码", "user", "POST"},
- {gorm.Model{ID: 23, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/user/getUserList", "获取用户列表", "user", "POST"},
- {gorm.Model{ID: 24, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/user/setUserAuthority", "修改用户角色", "user", "POST"},
- {gorm.Model{ID: 25, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/fileUploadAndDownload/upload", "文件上传示例", "fileUploadAndDownload", "POST"},
- {gorm.Model{ID: 26, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/fileUploadAndDownload/getFileList", "获取上传文件列表", "fileUploadAndDownload", "POST"},
- {gorm.Model{ID: 27, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/casbin/updateCasbin", "更改角色api权限", "casbin", "POST"},
- {gorm.Model{ID: 28, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/casbin/getPolicyPathByAuthorityId", "获取权限列表", "casbin", "POST"},
- {gorm.Model{ID: 29, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/fileUploadAndDownload/deleteFile", "删除文件", "fileUploadAndDownload", "POST"},
- {gorm.Model{ID: 30, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/jwt/jsonInBlacklist", "jwt加入黑名单", "jwt", "POST"},
- {gorm.Model{ID: 31, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/authority/setDataAuthority", "设置角色资源权限", "authority", "POST"},
- {gorm.Model{ID: 32, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/system/getSystemConfig", "获取配置文件内容", "system", "POST"},
- {gorm.Model{ID: 33, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/system/setSystemConfig", "设置配置文件内容", "system", "POST"},
- {gorm.Model{ID: 34, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/customer/customer", "创建客户", "customer", "POST"},
- {gorm.Model{ID: 35, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/customer/customer", "更新客户", "customer", "PUT"},
- {gorm.Model{ID: 36, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/customer/customer", "删除客户", "customer", "DELETE"},
- {gorm.Model{ID: 37, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/customer/customer", "获取单一客户", "customer", "GET"},
- {gorm.Model{ID: 38, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/customer/customerList", "获取客户列表", "customer", "GET"},
- {gorm.Model{ID: 39, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/casbin/casbinTest/:pathParam", "RESTFUL模式测试", "casbin", "GET"},
- {gorm.Model{ID: 40, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/autoCode/createTemp", "自动化代码", "autoCode", "POST"},
- {gorm.Model{ID: 41, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/authority/updateAuthority", "更新角色信息", "authority", "PUT"},
- {gorm.Model{ID: 42, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/authority/copyAuthority", "拷贝角色", "authority", "POST"},
- {gorm.Model{ID: 43, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/user/deleteUser", "删除用户", "user", "DELETE"},
- {gorm.Model{ID: 44, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/sysDictionaryDetail/createSysDictionaryDetail", "新增字典内容", "sysDictionaryDetail", "POST"},
- {gorm.Model{ID: 45, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/sysDictionaryDetail/deleteSysDictionaryDetail", "删除字典内容", "sysDictionaryDetail", "DELETE"},
- {gorm.Model{ID: 46, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/sysDictionaryDetail/updateSysDictionaryDetail", "更新字典内容", "sysDictionaryDetail", "PUT"},
- {gorm.Model{ID: 47, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/sysDictionaryDetail/findSysDictionaryDetail", "根据ID获取字典内容", "sysDictionaryDetail", "GET"},
- {gorm.Model{ID: 48, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/sysDictionaryDetail/getSysDictionaryDetailList", "获取字典内容列表", "sysDictionaryDetail", "GET"},
- {gorm.Model{ID: 49, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/sysDictionary/createSysDictionary", "新增字典", "sysDictionary", "POST"},
- {gorm.Model{ID: 50, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/sysDictionary/deleteSysDictionary", "删除字典", "sysDictionary", "DELETE"},
- {gorm.Model{ID: 51, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/sysDictionary/updateSysDictionary", "更新字典", "sysDictionary", "PUT"},
- {gorm.Model{ID: 52, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/sysDictionary/findSysDictionary", "根据ID获取字典", "sysDictionary", "GET"},
- {gorm.Model{ID: 53, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/sysDictionary/getSysDictionaryList", "获取字典列表", "sysDictionary", "GET"},
- {gorm.Model{ID: 54, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/sysOperationRecord/createSysOperationRecord", "新增操作记录", "sysOperationRecord", "POST"},
- {gorm.Model{ID: 55, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/sysOperationRecord/deleteSysOperationRecord", "删除操作记录", "sysOperationRecord", "DELETE"},
- {gorm.Model{ID: 56, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/sysOperationRecord/findSysOperationRecord", "根据ID获取操作记录", "sysOperationRecord", "GET"},
- {gorm.Model{ID: 57, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/sysOperationRecord/getSysOperationRecordList", "获取操作记录列表", "sysOperationRecord", "GET"},
- {gorm.Model{ID: 58, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/autoCode/getTables", "获取数据库表", "autoCode", "GET"},
- {gorm.Model{ID: 59, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/autoCode/getDB", "获取所有数据库", "autoCode", "GET"},
- {gorm.Model{ID: 60, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/autoCode/getColume", "获取所选table的所有字段", "autoCode", "GET"},
- {gorm.Model{ID: 61, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/sysOperationRecord/deleteSysOperationRecordByIds", "批量删除操作历史", "sysOperationRecord", "DELETE"},
- {gorm.Model{ID: 62, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/simpleUploader/upload", "插件版分片上传", "simpleUploader", "POST"},
- {gorm.Model{ID: 63, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/simpleUploader/checkFileMd5", "文件完整度验证", "simpleUploader", "GET"},
- {gorm.Model{ID: 64, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/simpleUploader/mergeFileMd5", "上传完成合并文件", "simpleUploader", "GET"},
- {gorm.Model{ID: 65, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/user/setUserInfo", "设置用户信息", "user", "PUT"},
- }
-}
diff --git a/server/model/sys_authority.go b/server/model/sys_authority.go
index 07add7e2..e7052c1e 100644
--- a/server/model/sys_authority.go
+++ b/server/model/sys_authority.go
@@ -15,11 +15,3 @@ type SysAuthority struct {
Children []SysAuthority `json:"children" gorm:"-"`
SysBaseMenus []SysBaseMenu `json:"menus" gorm:"many2many:sys_authority_menus;"`
}
-
-func SysAuthorityData() []SysAuthority {
- return []SysAuthority{
- {CreatedAt: time.Now(), UpdatedAt: time.Now(), AuthorityId: "888", AuthorityName: "普通用户", ParentId: "0"},
- {CreatedAt: time.Now(), UpdatedAt: time.Now(), AuthorityId: "8881", AuthorityName: "普通用户子角色", ParentId: "888"},
- {CreatedAt: time.Now(), UpdatedAt: time.Now(), AuthorityId: "9528", AuthorityName: "测试角色", ParentId: "0"},
- }
-}
diff --git a/server/model/sys_base_menu.go b/server/model/sys_base_menu.go
index 5d775926..019c1ce6 100644
--- a/server/model/sys_base_menu.go
+++ b/server/model/sys_base_menu.go
@@ -2,7 +2,6 @@ package model
import (
"gorm.io/gorm"
- "time"
)
type SysBaseMenu struct {
@@ -34,33 +33,3 @@ type SysBaseMenuParameter struct {
Key string `json:"key" gorm:"commit:'地址栏携带参数的key'"`
Value string `json:"value" gorm:"commit:'地址栏携带参数的值'"`
}
-
-func SysBaseMenusData() []SysBaseMenu {
- return []SysBaseMenu{
- {Model: gorm.Model{ID: 1, CreatedAt: time.Now(), UpdatedAt: time.Now()}, MenuLevel: 0, ParentId: "0", Path: "dashboard", Name: "dashboard", Hidden: false, Component: "view/dashboard/index.vue", Sort: 1, Meta: Meta{Title: "仪表盘", Icon: "setting"}},
- {Model: gorm.Model{ID: 2, CreatedAt: time.Now(), UpdatedAt: time.Now()}, MenuLevel: 0, Hidden: false, ParentId: "0", Path: "about", Name: "about", Component: "view/about/index.vue", Sort: 7, Meta: Meta{Title: "关于我们", Icon: "info"}},
- {Model: gorm.Model{ID: 3, CreatedAt: time.Now(), UpdatedAt: time.Now()}, MenuLevel: 0, Hidden: false, ParentId: "0", Path: "admin", Name: "superAdmin", Component: "view/superAdmin/index.vue", Sort: 3, Meta: Meta{Title: "超级管理员", Icon: "user-solid"}},
- {Model: gorm.Model{ID: 4, CreatedAt: time.Now(), UpdatedAt: time.Now()}, MenuLevel: 0, Hidden: false, ParentId: "3", Path: "authority", Name: "authority", Component: "view/superAdmin/authority/authority.vue", Sort: 1, Meta: Meta{Title: "角色管理", Icon: "s-custom"}},
- {Model: gorm.Model{ID: 5, CreatedAt: time.Now(), UpdatedAt: time.Now()}, MenuLevel: 0, Hidden: false, ParentId: "3", Path: "menu", Name: "menu", Component: "view/superAdmin/menu/menu.vue", Sort: 2, Meta: Meta{Title: "菜单管理", Icon: "s-order", KeepAlive: true}},
- {Model: gorm.Model{ID: 6, CreatedAt: time.Now(), UpdatedAt: time.Now()}, MenuLevel: 0, Hidden: false, ParentId: "3", Path: "api", Name: "api", Component: "view/superAdmin/api/api.vue", Sort: 3, Meta: Meta{Title: "api管理", Icon: "s-platform", KeepAlive: true}},
- {Model: gorm.Model{ID: 7, CreatedAt: time.Now(), UpdatedAt: time.Now()}, MenuLevel: 0, Hidden: false, ParentId: "3", Path: "user", Name: "user", Component: "view/superAdmin/user/user.vue", Sort: 4, Meta: Meta{Title: "用户管理", Icon: "coordinate"}},
- {Model: gorm.Model{ID: 8, CreatedAt: time.Now(), UpdatedAt: time.Now()}, MenuLevel: 0, Hidden: true, ParentId: "0", Path: "person", Name: "person", Component: "view/person/person.vue", Sort: 4, Meta: Meta{Title: "个人信息", Icon: "message-solid"}},
- {Model: gorm.Model{ID: 9, CreatedAt: time.Now(), UpdatedAt: time.Now()}, MenuLevel: 0, Hidden: false, ParentId: "0", Path: "example", Name: "example", Component: "view/example/index.vue", Sort: 6, Meta: Meta{Title: "示例文件", Icon: "s-management"}},
- {Model: gorm.Model{ID: 10, CreatedAt: time.Now(), UpdatedAt: time.Now()}, MenuLevel: 0, Hidden: false, ParentId: "9", Path: "table", Name: "table", Component: "view/example/table/table.vue", Sort: 1, Meta: Meta{Title: "表格示例", Icon: "s-order"}},
- {Model: gorm.Model{ID: 11, CreatedAt: time.Now(), UpdatedAt: time.Now()}, MenuLevel: 0, Hidden: false, ParentId: "9", Path: "form", Name: "form", Component: "view/example/form/form.vue", Sort: 2, Meta: Meta{Title: "表单示例", Icon: "document"}},
- {Model: gorm.Model{ID: 12, CreatedAt: time.Now(), UpdatedAt: time.Now()}, MenuLevel: 0, Hidden: false, ParentId: "9", Path: "rte", Name: "rte", Component: "view/example/rte/rte.vue", Sort: 3, Meta: Meta{Title: "富文本编辑器", Icon: "reading"}},
- {Model: gorm.Model{ID: 13, CreatedAt: time.Now(), UpdatedAt: time.Now()}, MenuLevel: 0, Hidden: false, ParentId: "9", Path: "excel", Name: "excel", Component: "view/example/excel/excel.vue", Sort: 4, Meta: Meta{Title: "excel导入导出", Icon: "s-marketing"}},
- {Model: gorm.Model{ID: 14, CreatedAt: time.Now(), UpdatedAt: time.Now()}, MenuLevel: 0, Hidden: false, ParentId: "9", Path: "upload", Name: "upload", Component: "view/example/upload/upload.vue", Sort: 5, Meta: Meta{Title: "上传下载", Icon: "upload"}},
- {Model: gorm.Model{ID: 15, CreatedAt: time.Now(), UpdatedAt: time.Now()}, MenuLevel: 0, Hidden: false, ParentId: "9", Path: "breakpoint", Name: "breakpoint", Component: "view/example/breakpoint/breakpoint.vue", Sort: 6, Meta: Meta{Title: "断点续传", Icon: "upload"}},
- {Model: gorm.Model{ID: 16, CreatedAt: time.Now(), UpdatedAt: time.Now()}, MenuLevel: 0, Hidden: false, ParentId: "9", Path: "customer", Name: "customer", Component: "view/example/customer/customer.vue", Sort: 7, Meta: Meta{Title: "客户列表(资源示例)", Icon: "s-custom"}},
- {Model: gorm.Model{ID: 17, CreatedAt: time.Now(), UpdatedAt: time.Now()}, MenuLevel: 0, Hidden: false, ParentId: "0", Path: "systemTools", Name: "systemTools", Component: "view/systemTools/index.vue", Sort: 5, Meta: Meta{Title: "系统工具", Icon: "s-cooperation"}},
- {Model: gorm.Model{ID: 18, CreatedAt: time.Now(), UpdatedAt: time.Now()}, MenuLevel: 0, Hidden: false, ParentId: "17", Path: "autoCode", Name: "autoCode", Component: "view/systemTools/autoCode/index.vue", Sort: 1, Meta: Meta{Title: "代码生成器", Icon: "cpu", KeepAlive: true}},
- {Model: gorm.Model{ID: 19, CreatedAt: time.Now(), UpdatedAt: time.Now()}, MenuLevel: 0, Hidden: false, ParentId: "17", Path: "formCreate", Name: "formCreate", Component: "view/systemTools/formCreate/index.vue", Sort: 2, Meta: Meta{Title: "表单生成器", Icon: "magic-stick", KeepAlive: true}},
- {Model: gorm.Model{ID: 20, CreatedAt: time.Now(), UpdatedAt: time.Now()}, MenuLevel: 0, Hidden: false, ParentId: "17", Path: "system", Name: "system", Component: "view/systemTools/system/system.vue", Sort: 3, Meta: Meta{Title: "系统配置", Icon: "s-operation"}},
- {Model: gorm.Model{ID: 21, CreatedAt: time.Now(), UpdatedAt: time.Now()}, MenuLevel: 0, Hidden: false, ParentId: "0", Path: "iconList", Name: "iconList", Component: "view/iconList/index.vue", Sort: 2, Meta: Meta{Title: "图标集合", Icon: "star-on"}},
- {Model: gorm.Model{ID: 22, CreatedAt: time.Now(), UpdatedAt: time.Now()}, MenuLevel: 0, Hidden: false, ParentId: "3", Path: "dictionary", Name: "dictionary", Component: "view/superAdmin/dictionary/sysDictionary.vue", Sort: 5, Meta: Meta{Title: "字典管理", Icon: "notebook-2"}},
- {Model: gorm.Model{ID: 23, CreatedAt: time.Now(), UpdatedAt: time.Now()}, MenuLevel: 0, Hidden: true, ParentId: "3", Path: "dictionaryDetail/:id", Name: "dictionaryDetail", Component: "view/superAdmin/dictionary/sysDictionaryDetail.vue", Sort: 1, Meta: Meta{Title: "字典详情", Icon: "s-order"}},
- {Model: gorm.Model{ID: 24, CreatedAt: time.Now(), UpdatedAt: time.Now()}, MenuLevel: 0, Hidden: false, ParentId: "3", Path: "operation", Name: "operation", Component: "view/superAdmin/operation/sysOperationRecord.vue", Sort: 6, Meta: Meta{Title: "操作历史", Icon: "time"}},
- {Model: gorm.Model{ID: 25, CreatedAt: time.Now(), UpdatedAt: time.Now()}, MenuLevel: 0, Hidden: false, ParentId: "9", Path: "simpleUploader", Name: "simpleUploader", Component: "view/example/simpleUploader/simpleUploader", Sort: 6, Meta: Meta{Title: "断点续传(插件版)", Icon: "upload"}},
- }
-}
diff --git a/server/model/sys_casbin.go b/server/model/sys_casbin.go
index 861184d7..83f55f4d 100644
--- a/server/model/sys_casbin.go
+++ b/server/model/sys_casbin.go
@@ -6,145 +6,3 @@ type CasbinModel struct {
Path string `json:"path" gorm:"column:v1"`
Method string `json:"method" gorm:"column:v2"`
}
-
-func CasbinModelData() []CasbinModel {
- return []CasbinModel{
- {"p", "888", "/base/login", "POST"},
- {"p", "888", "/base/register", "POST"},
- {"p", "888", "/api/createApi", "POST"},
- {"p", "888", "/api/getApiList", "POST"},
- {"p", "888", "/api/getApiById", "POST"},
- {"p", "888", "/api/deleteApi", "POST"},
- {"p", "888", "/api/updateApi", "POST"},
- {"p", "888", "/api/getAllApis", "POST"},
- {"p", "888", "/authority/createAuthority", "POST"},
- {"p", "888", "/authority/deleteAuthority", "POST"},
- {"p", "888", "/authority/getAuthorityList", "POST"},
- {"p", "888", "/authority/setDataAuthority", "POST"},
- {"p", "888", "/authority/updateAuthority", "PUT"},
- {"p", "888", "/authority/copyAuthority", "POST"},
- {"p", "888", "/menu/getMenu", "POST"},
- {"p", "888", "/menu/getMenuList", "POST"},
- {"p", "888", "/menu/addBaseMenu", "POST"},
- {"p", "888", "/menu/getBaseMenuTree", "POST"},
- {"p", "888", "/menu/addMenuAuthority", "POST"},
- {"p", "888", "/menu/getMenuAuthority", "POST"},
- {"p", "888", "/menu/deleteBaseMenu", "POST"},
- {"p", "888", "/menu/updateBaseMenu", "POST"},
- {"p", "888", "/menu/getBaseMenuById", "POST"},
- {"p", "888", "/user/changePassword", "POST"},
- {"p", "888", "/user/getUserList", "POST"},
- {"p", "888", "/user/setUserAuthority", "POST"},
- {"p", "888", "/user/deleteUser", "DELETE"},
- {"p", "888", "/fileUploadAndDownload/upload", "POST"},
- {"p", "888", "/fileUploadAndDownload/getFileList", "POST"},
- {"p", "888", "/fileUploadAndDownload/deleteFile", "POST"},
- {"p", "888", "/casbin/updateCasbin", "POST"},
- {"p", "888", "/casbin/getPolicyPathByAuthorityId", "POST"},
- {"p", "888", "/casbin/casbinTest/:pathParam", "GET"},
- {"p", "888", "/jwt/jsonInBlacklist", "POST"},
- {"p", "888", "/system/getSystemConfig", "POST"},
- {"p", "888", "/system/setSystemConfig", "POST"},
- {"p", "888", "/customer/customer", "POST"},
- {"p", "888", "/customer/customer", "PUT"},
- {"p", "888", "/customer/customer", "DELETE"},
- {"p", "888", "/customer/customer", "GET"},
- {"p", "888", "/customer/customerList", "GET"},
- {"p", "888", "/autoCode/createTemp", "POST"},
- {"p", "888", "/autoCode/getTables", "GET"},
- {"p", "888", "/autoCode/getDB", "GET"},
- {"p", "888", "/autoCode/getColume", "GET"},
- {"p", "888", "/sysDictionaryDetail/createSysDictionaryDetail", "POST"},
- {"p", "888", "/sysDictionaryDetail/deleteSysDictionaryDetail", "DELETE"},
- {"p", "888", "/sysDictionaryDetail/updateSysDictionaryDetail", "PUT"},
- {"p", "888", "/sysDictionaryDetail/findSysDictionaryDetail", "GET"},
- {"p", "888", "/sysDictionaryDetail/getSysDictionaryDetailList", "GET"},
- {"p", "888", "/sysDictionary/createSysDictionary", "POST"},
- {"p", "888", "/sysDictionary/deleteSysDictionary", "DELETE"},
- {"p", "888", "/sysDictionary/updateSysDictionary", "PUT"},
- {"p", "888", "/sysDictionary/findSysDictionary", "GET"},
- {"p", "888", "/sysDictionary/getSysDictionaryList", "GET"},
- {"p", "888", "/sysOperationRecord/createSysOperationRecord", "POST"},
- {"p", "888", "/sysOperationRecord/deleteSysOperationRecord", "DELETE"},
- {"p", "888", "/sysOperationRecord/updateSysOperationRecord", "PUT"},
- {"p", "888", "/sysOperationRecord/findSysOperationRecord", "GET"},
- {"p", "888", "/sysOperationRecord/getSysOperationRecordList", "GET"},
- {"p", "888", "/sysOperationRecord/deleteSysOperationRecordByIds", "DELETE"},
- {"p", "888", "/user/setUserInfo", "PUT"},
- {"p", "8881", "/base/login", "POST"},
- {"p", "8881", "/base/register", "POST"},
- {"p", "8881", "/api/createApi", "POST"},
- {"p", "8881", "/api/getApiList", "POST"},
- {"p", "8881", "/api/getApiById", "POST"},
- {"p", "8881", "/api/deleteApi", "POST"},
- {"p", "8881", "/api/updateApi", "POST"},
- {"p", "8881", "/api/getAllApis", "POST"},
- {"p", "8881", "/authority/createAuthority", "POST"},
- {"p", "8881", "/authority/deleteAuthority", "POST"},
- {"p", "8881", "/authority/getAuthorityList", "POST"},
- {"p", "8881", "/authority/setDataAuthority", "POST"},
- {"p", "8881", "/menu/getMenu", "POST"},
- {"p", "8881", "/menu/getMenuList", "POST"},
- {"p", "8881", "/menu/addBaseMenu", "POST"},
- {"p", "8881", "/menu/getBaseMenuTree", "POST"},
- {"p", "8881", "/menu/addMenuAuthority", "POST"},
- {"p", "8881", "/menu/getMenuAuthority", "POST"},
- {"p", "8881", "/menu/deleteBaseMenu", "POST"},
- {"p", "8881", "/menu/updateBaseMenu", "POST"},
- {"p", "8881", "/menu/getBaseMenuById", "POST"},
- {"p", "8881", "/user/changePassword", "POST"},
- {"p", "8881", "/user/getUserList", "POST"},
- {"p", "8881", "/user/setUserAuthority", "POST"},
- {"p", "8881", "/fileUploadAndDownload/upload", "POST"},
- {"p", "8881", "/fileUploadAndDownload/getFileList", "POST"},
- {"p", "8881", "/fileUploadAndDownload/deleteFile", "POST"},
- {"p", "8881", "/casbin/updateCasbin", "POST"},
- {"p", "8881", "/casbin/getPolicyPathByAuthorityId", "POST"},
- {"p", "8881", "/jwt/jsonInBlacklist", "POST"},
- {"p", "8881", "/system/getSystemConfig", "POST"},
- {"p", "8881", "/system/setSystemConfig", "POST"},
- {"p", "8881", "/customer/customer", "POST"},
- {"p", "8881", "/customer/customer", "PUT"},
- {"p", "8881", "/customer/customer", "DELETE"},
- {"p", "8881", "/customer/customer", "GET"},
- {"p", "8881", "/customer/customerList", "GET"},
- {"p", "9528", "/base/login", "POST"},
- {"p", "9528", "/base/register", "POST"},
- {"p", "9528", "/api/createApi", "POST"},
- {"p", "9528", "/api/getApiList", "POST"},
- {"p", "9528", "/api/getApiById", "POST"},
- {"p", "9528", "/api/deleteApi", "POST"},
- {"p", "9528", "/api/updateApi", "POST"},
- {"p", "9528", "/api/getAllApis", "POST"},
- {"p", "9528", "/authority/createAuthority", "POST"},
- {"p", "9528", "/authority/deleteAuthority", "POST"},
- {"p", "9528", "/authority/getAuthorityList", "POST"},
- {"p", "9528", "/authority/setDataAuthority", "POST"},
- {"p", "9528", "/menu/getMenu", "POST"},
- {"p", "9528", "/menu/getMenuList", "POST"},
- {"p", "9528", "/menu/addBaseMenu", "POST"},
- {"p", "9528", "/menu/getBaseMenuTree", "POST"},
- {"p", "9528", "/menu/addMenuAuthority", "POST"},
- {"p", "9528", "/menu/getMenuAuthority", "POST"},
- {"p", "9528", "/menu/deleteBaseMenu", "POST"},
- {"p", "9528", "/menu/updateBaseMenu", "POST"},
- {"p", "9528", "/menu/getBaseMenuById", "POST"},
- {"p", "9528", "/user/changePassword", "POST"},
- {"p", "9528", "/user/getUserList", "POST"},
- {"p", "9528", "/user/setUserAuthority", "POST"},
- {"p", "9528", "/fileUploadAndDownload/upload", "POST"},
- {"p", "9528", "/fileUploadAndDownload/getFileList", "POST"},
- {"p", "9528", "/fileUploadAndDownload/deleteFile", "POST"},
- {"p", "9528", "/casbin/updateCasbin", "POST"},
- {"p", "9528", "/casbin/getPolicyPathByAuthorityId", "POST"},
- {"p", "9528", "/jwt/jsonInBlacklist", "POST"},
- {"p", "9528", "/system/getSystemConfig", "POST"},
- {"p", "9528", "/system/setSystemConfig", "POST"},
- {"p", "9528", "/customer/customer", "POST"},
- {"p", "9528", "/customer/customer", "PUT"},
- {"p", "9528", "/customer/customer", "DELETE"},
- {"p", "9528", "/customer/customer", "GET"},
- {"p", "9528", "/customer/customerList", "GET"},
- {"p", "9528", "/autoCode/createTemp", "POST"},
- }
-}
diff --git a/server/model/sys_dictionary.go b/server/model/sys_dictionary.go
index 574bd738..eb206d77 100644
--- a/server/model/sys_dictionary.go
+++ b/server/model/sys_dictionary.go
@@ -3,7 +3,6 @@ package model
import (
"gorm.io/gorm"
- "time"
)
// 如果含有time.Time 请自行import time包
@@ -15,16 +14,3 @@ type SysDictionary struct {
Desc string `json:"desc" form:"desc" gorm:"column:desc;comment:'描述'"`
SysDictionaryDetails []SysDictionaryDetail `json:"sysDictionaryDetails" form:"sysDictionaryDetails"`
}
-
-func SysDictionaryData() []SysDictionary {
- status := new(bool)
- *status = true
- return []SysDictionary{
- {Model: gorm.Model{ID: 1, CreatedAt: time.Now(), UpdatedAt: time.Now()}, Name: "性别", Type: "sex", Status: status, Desc: "性别字典"},
- {Model: gorm.Model{ID: 2, CreatedAt: time.Now(), UpdatedAt: time.Now()}, Name: "数据库int类型", Type: "int", Status: status, Desc: "int类型对应的数据库类型"},
- {Model: gorm.Model{ID: 3, CreatedAt: time.Now(), UpdatedAt: time.Now()}, Name: "数据库时间日期类型", Type: "time.Time", Status: status, Desc: "数据库时间日期类型"},
- {Model: gorm.Model{ID: 4, CreatedAt: time.Now(), UpdatedAt: time.Now()}, Name: "数据库浮点型", Type: "float64", Status: status, Desc: "数据库浮点型"},
- {Model: gorm.Model{ID: 5, CreatedAt: time.Now(), UpdatedAt: time.Now()}, Name: "数据库字符串", Type: "string", Status: status, Desc: "数据库字符串"},
- {Model: gorm.Model{ID: 6, CreatedAt: time.Now(), UpdatedAt: time.Now()}, Name: "数据库bool类型", Type: "bool", Status: status, Desc: "数据库bool类型"},
- }
-}
\ No newline at end of file
diff --git a/server/model/sys_dictionary_detail.go b/server/model/sys_dictionary_detail.go
index 886deafb..ec8c7bf7 100644
--- a/server/model/sys_dictionary_detail.go
+++ b/server/model/sys_dictionary_detail.go
@@ -3,7 +3,6 @@ package model
import (
"gorm.io/gorm"
- "time"
)
// 如果含有time.Time 请自行import time包
@@ -15,33 +14,3 @@ type SysDictionaryDetail struct {
Sort int `json:"sort" form:"sort" gorm:"column:sort;comment:'排序标记'"`
SysDictionaryID int `json:"sysDictionaryID" form:"sysDictionaryID" gorm:"column:sys_dictionary_id;comment:'关联标记'"`
}
-
-func SysDictionaryDetailData() []SysDictionaryDetail {
- status := new(bool)
- *status = true
- return []SysDictionaryDetail{
- {gorm.Model{ID: 1, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "smallint", 1, status, 1, 2},
- {gorm.Model{ID: 2, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "mediumint", 2, status, 2, 2},
- {gorm.Model{ID: 3, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "int", 3, status, 3, 2},
- {gorm.Model{ID: 4, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "bigint", 4, status, 4, 2},
- {gorm.Model{ID: 5, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "data", 0, status, 0, 3},
- {gorm.Model{ID: 6, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "time", 1, status, 1, 3},
- {gorm.Model{ID: 7, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "year", 2, status, 2, 3},
- {gorm.Model{ID: 8, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "datetime", 3, status, 3, 3},
- {gorm.Model{ID: 9, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "timestamp", 5, status, 5, 3},
- {gorm.Model{ID: 10, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "float", 0, status, 0, 4},
- {gorm.Model{ID: 11, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "double", 1, status, 1, 4},
- {gorm.Model{ID: 12, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "decimal", 2, status, 2, 4},
- {gorm.Model{ID: 13, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "char", 0, status, 0, 5},
- {gorm.Model{ID: 14, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "varchar", 1, status, 1, 5},
- {gorm.Model{ID: 15, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "tinyblob", 2, status, 2, 5},
- {gorm.Model{ID: 16, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "tinytext", 3, status, 3, 5},
- {gorm.Model{ID: 17, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "text", 4, status, 4, 5},
- {gorm.Model{ID: 18, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "blob", 5, status, 5, 5},
- {gorm.Model{ID: 19, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "mediumblob", 6, status, 6, 5},
- {gorm.Model{ID: 20, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "mediumtext", 7, status, 7, 5},
- {gorm.Model{ID: 21, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "longblob", 8, status, 8, 5},
- {gorm.Model{ID: 22, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "longtext", 9, status, 9, 5},
- {gorm.Model{ID: 23, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "tinyint", 0, status, 0, 6},
- }
-}
\ No newline at end of file
diff --git a/server/model/sys_user.go b/server/model/sys_user.go
index e63ac9f7..dc4da061 100644
--- a/server/model/sys_user.go
+++ b/server/model/sys_user.go
@@ -3,7 +3,6 @@ package model
import (
"github.com/satori/go.uuid"
"gorm.io/gorm"
- "time"
)
type SysUser struct {
@@ -16,10 +15,3 @@ type SysUser struct {
Authority SysAuthority `json:"authority" gorm:"foreignKey:AuthorityId;references:AuthorityId;comment:'用户角色'"`
AuthorityId string `json:"authorityId" gorm:"default:888;comment:'用户角色ID'"`
}
-
-func SysUserData() []SysUser {
- return []SysUser{
- {Model: gorm.Model{ID: 1, CreatedAt: time.Now(), UpdatedAt: time.Now()}, UUID: uuid.NewV4(), Username: "admin", Password: "e10adc3949ba59abbe56e057f20f883e", NickName: "超级管理员", HeaderImg: "http://qmplusimg.henrongyi.top/1571627762timg.jpg", AuthorityId: "888"},
- {Model: gorm.Model{ID: 2, CreatedAt: time.Now(), UpdatedAt: time.Now()}, UUID: uuid.NewV4(), Username: "a303176530", Password: "3ec063004a6f31642261936a379fde3d", NickName: "QMPlusUser", HeaderImg: "http://qmplusimg.henrongyi.top/1572075907logo.png", AuthorityId: "9528"},
- }
-}
diff --git a/server/service/sys_db_initialize.go b/server/service/sys_db_initialize.go
deleted file mode 100644
index ed43b6fc..00000000
--- a/server/service/sys_db_initialize.go
+++ /dev/null
@@ -1,183 +0,0 @@
-package service
-
-import (
- "gin-vue-admin/global"
- "gin-vue-admin/model"
- gormadapter "github.com/casbin/gorm-adapter/v3"
-)
-
-type SysAuthorityMenus struct {
- SysAuthorityAuthorityId string
- SysBaseMenuId uint
-}
-
-type SysDataAuthorityId struct {
- SysAuthorityAuthorityId string
- DataAuthorityIdAuthorityId string
-}
-
-func InitSysApi() (err error) {
- tx := global.GVA_DB.Begin() // 开始事务
- insert := model.SysApiData()
- if tx.Create(&insert).Error != nil { // 遇到错误时回滚事务
- tx.Rollback()
- }
- return tx.Commit().Error
-}
-
-func InitSysUser() (err error) {
- tx := global.GVA_DB.Begin() // 开始事务
- insert := model.SysUserData()
- if tx.Create(&insert).Error != nil { // 遇到错误时回滚事务
- tx.Rollback()
- }
- return tx.Commit().Error
-}
-
-func InitExaCustomer() (err error) {
- tx := global.GVA_DB.Begin() // 开始事务
- insert := model.ExaCustomerData()
- if tx.Create(&insert).Error != nil { // 遇到错误时回滚事务
- tx.Rollback()
- }
- return tx.Commit().Error
-}
-
-func InitCasbinModel() (err error) {
- if !global.GVA_DB.Migrator().HasTable("casbin_rule") {
- if err := global.GVA_DB.Migrator().CreateTable(&gormadapter.CasbinRule{}); err != nil {
- return err
- }
- }
- tx := global.GVA_DB.Begin() // 开始事务
- insert := model.CasbinModelData()
- if tx.Table("casbin_rule").Create(&insert).Error != nil { // 遇到错误时回滚事务
- tx.Rollback()
- }
- return tx.Commit().Error
-}
-
-func InitSysAuthority() (err error) {
- tx := global.GVA_DB.Begin() // 开始事务
- insert := model.SysAuthorityData()
- if tx.Create(&insert).Error != nil { // 遇到错误时回滚事务
- tx.Rollback()
- }
- return tx.Commit().Error
-}
-
-func InitSysBaseMenus() (err error) {
- tx := global.GVA_DB.Begin() // 开始事务
- insert := model.SysBaseMenusData()
- if tx.Create(&insert).Error != nil { // 遇到错误时回滚事务
- tx.Rollback()
- }
- return tx.Commit().Error
-}
-
-func InitAuthorityMenu() (err error) {
- return global.GVA_DB.Exec("CREATE ALGORITHM = UNDEFINED SQL SECURITY DEFINER VIEW `authority_menu` AS select `sys_base_menus`.`id` AS `id`,`sys_base_menus`.`created_at` AS `created_at`, `sys_base_menus`.`updated_at` AS `updated_at`, `sys_base_menus`.`deleted_at` AS `deleted_at`, `sys_base_menus`.`menu_level` AS `menu_level`,`sys_base_menus`.`parent_id` AS `parent_id`,`sys_base_menus`.`path` AS `path`,`sys_base_menus`.`name` AS `name`,`sys_base_menus`.`hidden` AS `hidden`,`sys_base_menus`.`component` AS `component`, `sys_base_menus`.`title` AS `title`,`sys_base_menus`.`icon` AS `icon`,`sys_base_menus`.`sort` AS `sort`,`sys_authority_menus`.`sys_authority_authority_id` AS `authority_id`,`sys_authority_menus`.`sys_base_menu_id` AS `menu_id`,`sys_base_menus`.`keep_alive` AS `keep_alive`,`sys_base_menus`.`default_menu` AS `default_menu` from (`sys_authority_menus` join `sys_base_menus` on ((`sys_authority_menus`.`sys_base_menu_id` = `sys_base_menus`.`id`)))").Error
-}
-
-func InitSysDictionary() (err error) {
- tx := global.GVA_DB.Begin() // 开始事务
- insert := model.SysDictionaryData()
- if tx.Create(&insert).Error != nil { // 遇到错误时回滚事务
- tx.Rollback()
- }
- return tx.Commit().Error
-}
-
-func InitSysAuthorityMenus() (err error) {
- tx := global.GVA_DB.Begin() // 开始事务
- insert := []SysAuthorityMenus{
- {"888", 1},
- {"888", 2},
- {"888", 3},
- {"888", 4},
- {"888", 5},
- {"888", 6},
- {"888", 7},
- {"888", 8},
- {"888", 9},
- {"888", 10},
- {"888", 11},
- {"888", 12},
- {"888", 13},
- {"888", 14},
- {"888", 15},
- {"888", 16},
- {"888", 17},
- {"888", 18},
- {"888", 19},
- {"888", 20},
- {"888", 21},
- {"888", 22},
- {"888", 23},
- {"888", 24},
- {"888", 25},
- {"8881", 1},
- {"8881", 2},
- {"8881", 8},
- {"8881", 17},
- {"8881", 18},
- {"8881", 19},
- {"8881", 20},
- {"9528", 1},
- {"9528", 2},
- {"9528", 3},
- {"9528", 4},
- {"9528", 5},
- {"9528", 6},
- {"9528", 7},
- {"9528", 8},
- {"9528", 9},
- {"9528", 10},
- {"9528", 11},
- {"9528", 12},
- {"9528", 13},
- {"9528", 14},
- {"9528", 15},
- {"9528", 17},
- {"9528", 18},
- {"9528", 19},
- {"9528", 20},
- }
- if tx.Table("sys_authority_menus").Create(&insert).Error != nil { // 遇到错误时回滚事务
- tx.Rollback()
- }
- return tx.Commit().Error
-}
-
-func InitSysDataAuthorityId() (err error) {
- tx := global.GVA_DB.Begin() // 开始事务
- insert := []SysDataAuthorityId{
- {"888", "888"},
- {"888", "8881"},
- {"888", "9528"},
- {"9528", "8881"},
- {"9528", "9528"},
- }
- if tx.Table("sys_data_authority_ids").Create(&insert).Error != nil { // 遇到错误时回滚事务
- tx.Rollback()
- }
- return tx.Commit().Error
-}
-
-func InitSysDictionaryDetail() (err error) {
- tx := global.GVA_DB.Begin() // 开始事务
- insert := model.SysDictionaryDetailData()
- if tx.Create(&insert).Error != nil { // 遇到错误时回滚事务
- tx.Rollback()
- }
- return tx.Commit().Error
-}
-
-func InitExaFileUploadAndDownload() (err error) {
- tx := global.GVA_DB.Begin() // 开始事务
- insert := model.ExaFileUploadAndDownloadData()
- if tx.Create(&insert).Error != nil { // 遇到错误时回滚事务
- tx.Rollback()
- }
- return tx.Commit().Error
-}
From 513259f65f738401cddf02f0774fcf22fa721ad7 Mon Sep 17 00:00:00 2001
From: pixel <303176530@qq.com>
Date: Mon, 7 Sep 2020 13:10:53 +0800
Subject: [PATCH 03/31] =?UTF-8?q?=E8=87=AA=E5=8A=A8=E5=88=9D=E5=A7=8B?=
=?UTF-8?q?=E5=8C=96=E5=8D=95=E7=8B=AC=E5=BB=BA=E5=8C=85=20=E4=B8=BA=20?=
=?UTF-8?q?=E5=91=BD=E4=BB=A4=E8=A1=8C=E5=81=9A=E5=9F=BA=E7=A1=80?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
server/go.mod | 3 ---
server/gva/init_data/init_data.go | 5 ++++-
server/initialize/data.go | 0
server/main.go | 4 ++--
server/service/sys_db_initialize.go | 0
5 files changed, 6 insertions(+), 6 deletions(-)
delete mode 100644 server/initialize/data.go
delete mode 100644 server/service/sys_db_initialize.go
diff --git a/server/go.mod b/server/go.mod
index 7686a496..6ac4777f 100644
--- a/server/go.mod
+++ b/server/go.mod
@@ -22,8 +22,6 @@ require (
github.com/json-iterator/go v1.1.10 // indirect
github.com/lestrrat-go/file-rotatelogs v2.3.0+incompatible
github.com/lestrrat-go/strftime v1.0.3 // indirect
- github.com/lestrrat/go-envload v0.0.0-20180220120943-6ed08b54a570 // indirect
- github.com/lestrrat/go-strftime v0.0.0-20180220042222-ba3bf9c1d042 // indirect
github.com/mailru/easyjson v0.7.1 // indirect
github.com/mitchellh/mapstructure v1.2.2 // indirect
github.com/mojocn/base64Captcha v1.3.1
@@ -42,7 +40,6 @@ require (
github.com/swaggo/swag v1.6.7
github.com/tebeka/strftime v0.1.3 // indirect
github.com/unrolled/secure v1.0.7
- github.com/urfave/cli v1.22.2 // indirect
go.uber.org/zap v1.10.0
golang.org/x/net v0.0.0-20200320220750-118fecf932d8 // indirect
golang.org/x/sys v0.0.0-20200610111108-226ff32320da // indirect
diff --git a/server/gva/init_data/init_data.go b/server/gva/init_data/init_data.go
index 4610370b..5aff1dd4 100644
--- a/server/gva/init_data/init_data.go
+++ b/server/gva/init_data/init_data.go
@@ -5,6 +5,7 @@ import (
"gin-vue-admin/model"
gormadapter "github.com/casbin/gorm-adapter/v3"
"github.com/satori/go.uuid"
+ "go.uber.org/zap"
"gorm.io/gorm"
"time"
)
@@ -309,6 +310,7 @@ func InitSysBaseMenus() (err error) {
{Model: gorm.Model{ID: 23, CreatedAt: time.Now(), UpdatedAt: time.Now()}, MenuLevel: 0, Hidden: true, ParentId: "3", Path: "dictionaryDetail/:id", Name: "dictionaryDetail", Component: "view/superAdmin/dictionary/sysDictionaryDetail.vue", Sort: 1, Meta: model.Meta{Title: "字典详情", Icon: "s-order"}},
{Model: gorm.Model{ID: 24, CreatedAt: time.Now(), UpdatedAt: time.Now()}, MenuLevel: 0, Hidden: false, ParentId: "3", Path: "operation", Name: "operation", Component: "view/superAdmin/operation/sysOperationRecord.vue", Sort: 6, Meta: model.Meta{Title: "操作历史", Icon: "time"}},
{Model: gorm.Model{ID: 25, CreatedAt: time.Now(), UpdatedAt: time.Now()}, MenuLevel: 0, Hidden: false, ParentId: "9", Path: "simpleUploader", Name: "simpleUploader", Component: "view/example/simpleUploader/simpleUploader", Sort: 6, Meta: model.Meta{Title: "断点续传(插件版)", Icon: "upload"}},
+ {Model: gorm.Model{ID: 26, CreatedAt: time.Now(), UpdatedAt: time.Now()}, MenuLevel: 0, ParentId: "0", Path: "https://www.gin-vue-admin.com", Name: "https://www.gin-vue-admin.com", Hidden: false, Component: "/", Sort: 0, Meta: model.Meta{Title: "官方网站", Icon: "s-home"}},
}
if tx.Create(&insert).Error != nil { // 遇到错误时回滚事务
tx.Rollback()
@@ -366,6 +368,7 @@ func InitSysAuthorityMenus() (err error) {
{"888", 23},
{"888", 24},
{"888", 25},
+ {"888", 26},
{"8881", 1},
{"8881", 2},
{"8881", 8},
@@ -476,7 +479,7 @@ func InitData() {
err = InitSysDictionaryDetail()
err = InitExaFileUploadAndDownload()
if err != nil {
- global.GVA_LOG.Error("initialize data failed", err)
+ global.GVA_LOG.Error("initialize data failed", zap.Any("err", err))
}
global.GVA_LOG.Debug("initialize data success")
}
diff --git a/server/initialize/data.go b/server/initialize/data.go
deleted file mode 100644
index e69de29b..00000000
diff --git a/server/main.go b/server/main.go
index 3429c443..e0ad59e1 100644
--- a/server/main.go
+++ b/server/main.go
@@ -3,7 +3,7 @@ package main
import (
"gin-vue-admin/core"
"gin-vue-admin/global"
- "gin-vue-admin/gva/init_data"
+ //"gin-vue-admin/gva/init_data"
"gin-vue-admin/initialize"
//"runtime"
)
@@ -25,7 +25,7 @@ func main() {
initialize.Mysql()
}
initialize.DBTables()
- init_data.InitData() // 打开注释即可初始化数据
+ //init_data.InitData() // 打开注释即可初始化数据 使用过后一定要再次注释或删除
// 程序结束前关闭数据库链接
db, _ := global.GVA_DB.DB()
defer db.Close()
diff --git a/server/service/sys_db_initialize.go b/server/service/sys_db_initialize.go
deleted file mode 100644
index e69de29b..00000000
From a8b01b6314ea8ea4b0eaabc9f2abb185d4fe008a Mon Sep 17 00:00:00 2001
From: pixel <303176530@qq.com>
Date: Mon, 7 Sep 2020 13:18:02 +0800
Subject: [PATCH 04/31] =?UTF-8?q?=E5=BC=80=E5=90=AF=E5=88=9D=E5=A7=8B?=
=?UTF-8?q?=E5=8C=96=E9=85=8D=E7=BD=AE=20=E6=9A=82=E6=97=B6=E4=BF=AE?=
=?UTF-8?q?=E6=94=B9=E4=B8=BA=20=E9=85=8D=E7=BD=AE=E6=96=87=E4=BB=B6?=
=?UTF-8?q?=E6=8E=A7=E5=88=B6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
server/config.yaml | 1 +
server/config/config.go | 1 +
server/main.go | 6 +++++-
3 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/server/config.yaml b/server/config.yaml
index abf6d5df..037c17f9 100644
--- a/server/config.yaml
+++ b/server/config.yaml
@@ -52,6 +52,7 @@ system:
env: 'public' # Change to "develop" to skip authentication for development mode
addr: 8888
db-type: "mysql" # support mysql/sqlite
+ need-init-data: false
# captcha configuration
captcha:
diff --git a/server/config/config.go b/server/config/config.go
index d91cf21d..9a1197ac 100644
--- a/server/config/config.go
+++ b/server/config/config.go
@@ -18,6 +18,7 @@ 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"`
+ NeedInitData bool `mapstructure:"need-init-data" json:"needInitData" yaml:"need-init-data"`
}
type JWT struct {
diff --git a/server/main.go b/server/main.go
index e0ad59e1..9bbb166b 100644
--- a/server/main.go
+++ b/server/main.go
@@ -3,6 +3,8 @@ package main
import (
"gin-vue-admin/core"
"gin-vue-admin/global"
+ "gin-vue-admin/gva/init_data"
+
//"gin-vue-admin/gva/init_data"
"gin-vue-admin/initialize"
//"runtime"
@@ -25,7 +27,9 @@ func main() {
initialize.Mysql()
}
initialize.DBTables()
- //init_data.InitData() // 打开注释即可初始化数据 使用过后一定要再次注释或删除
+ if global.GVA_CONFIG.System.NeedInitData {
+ init_data.InitData() // 通过配置文件初始化数据 默认为 false 首次运行需要将 ./config.yaml中 system下的 need-init-data 修改为true
+ }
// 程序结束前关闭数据库链接
db, _ := global.GVA_DB.DB()
defer db.Close()
From be9c85ae423d8304d79878469a8f72aa923b6534 Mon Sep 17 00:00:00 2001
From: pixel <303176530@qq.com>
Date: Mon, 7 Sep 2020 13:56:21 +0800
Subject: [PATCH 05/31] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=97=A0=E7=94=A8?=
=?UTF-8?q?=E5=87=BD=E6=95=B0=EF=BC=8C=E6=95=B4=E6=B4=81=E7=BB=93=E6=9E=84?=
=?UTF-8?q?=E7=9B=AE=E5=BD=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
server/main.go | 3 --
server/utils/array_to_string.go | 10 ----
server/utils/des.go | 40 --------------
.../utils/{struct_to_map.go => fmt_plus.go} | 11 +++-
server/utils/upload_avatar_local.go | 54 -------------------
5 files changed, 10 insertions(+), 108 deletions(-)
delete mode 100644 server/utils/array_to_string.go
delete mode 100644 server/utils/des.go
rename server/utils/{struct_to_map.go => fmt_plus.go} (61%)
delete mode 100644 server/utils/upload_avatar_local.go
diff --git a/server/main.go b/server/main.go
index 9bbb166b..a8e566e2 100644
--- a/server/main.go
+++ b/server/main.go
@@ -4,10 +4,7 @@ import (
"gin-vue-admin/core"
"gin-vue-admin/global"
"gin-vue-admin/gva/init_data"
-
- //"gin-vue-admin/gva/init_data"
"gin-vue-admin/initialize"
- //"runtime"
)
// @title Swagger Example API
diff --git a/server/utils/array_to_string.go b/server/utils/array_to_string.go
deleted file mode 100644
index b99012f1..00000000
--- a/server/utils/array_to_string.go
+++ /dev/null
@@ -1,10 +0,0 @@
-package utils
-
-import (
- "fmt"
- "strings"
-)
-
-func ArrayToString(array []interface{}) string {
- return strings.Replace(strings.Trim(fmt.Sprint(array), "[]"), " ", ",", -1)
-}
diff --git a/server/utils/des.go b/server/utils/des.go
deleted file mode 100644
index ecdbe78f..00000000
--- a/server/utils/des.go
+++ /dev/null
@@ -1,40 +0,0 @@
-package utils
-
-import (
- "bytes"
- "crypto/cipher"
- "crypto/des"
-)
-
-func padding(src []byte, blocksize int) []byte {
- n := len(src)
- padnum := blocksize - n%blocksize
- pad := bytes.Repeat([]byte{byte(padnum)}, padnum)
- dst := append(src, pad...)
- return dst
-}
-
-func unpadding(src []byte) []byte {
- n := len(src)
- unpadnum := int(src[n-1])
- dst := src[:n-unpadnum]
- return dst
-}
-
-func EncryptDES(src []byte) []byte {
- key := []byte("qimiao66")
- block, _ := des.NewCipher(key)
- src = padding(src, block.BlockSize())
- blockmode := cipher.NewCBCEncrypter(block, key)
- blockmode.CryptBlocks(src, src)
- return src
-}
-
-func DecryptDES(src []byte) []byte {
- key := []byte("qimiao66")
- block, _ := des.NewCipher(key)
- blockmode := cipher.NewCBCDecrypter(block, key)
- blockmode.CryptBlocks(src, src)
- src = unpadding(src)
- return src
-}
diff --git a/server/utils/struct_to_map.go b/server/utils/fmt_plus.go
similarity index 61%
rename from server/utils/struct_to_map.go
rename to server/utils/fmt_plus.go
index 2cc309da..9fca8882 100644
--- a/server/utils/struct_to_map.go
+++ b/server/utils/fmt_plus.go
@@ -1,6 +1,10 @@
package utils
-import "reflect"
+import (
+ "fmt"
+ "reflect"
+ "strings"
+)
// 利用反射将结构体转化为map
func StructToMap(obj interface{}) map[string]interface{} {
@@ -13,3 +17,8 @@ func StructToMap(obj interface{}) map[string]interface{} {
}
return data
}
+
+//将数组格式化为字符串
+func ArrayToString(array []interface{}) string {
+ return strings.Replace(strings.Trim(fmt.Sprint(array), "[]"), " ", ",", -1)
+}
diff --git a/server/utils/upload_avatar_local.go b/server/utils/upload_avatar_local.go
deleted file mode 100644
index b8081877..00000000
--- a/server/utils/upload_avatar_local.go
+++ /dev/null
@@ -1,54 +0,0 @@
-package utils
-
-import (
- "gin-vue-admin/global"
- "go.uber.org/zap"
- "io"
- "mime/multipart"
- "os"
- "path"
- "strings"
- "time"
-)
-
-func UploadAvatarLocal(file *multipart.FileHeader) (err error, localPath string, key string) {
- // 读取文件后缀
- ext := path.Ext(file.Filename)
- // 读取文件名并加密
- fileName := strings.TrimSuffix(file.Filename, ext)
- fileName = MD5V([]byte(fileName))
- // 拼接新文件名
- lastName := fileName + "_" + time.Now().Format("20060102150405") + ext
- // 读取全局变量的定义路径
- savePath := global.GVA_CONFIG.LocalUpload.AvatarPath
- // 尝试创建此路径
- err = os.MkdirAll(savePath, os.ModePerm)
- if err != nil{
- global.GVA_LOG.Error("upload local file fail:", zap.Any("err", err))
- return err, "", ""
- }
- // 拼接路径和文件名
- dst := savePath + "/" + lastName
- // 下面为上传逻辑
- // 打开文件 defer 关闭
- src, err := file.Open()
- if err != nil {
- global.GVA_LOG.Error("upload local file fail:", zap.Any("err", err))
- return err, "", ""
- }
- defer src.Close()
- // 创建文件 defer 关闭
- out, err := os.Create(dst)
- if err != nil {
- global.GVA_LOG.Error("upload local file fail:", zap.Any("err", err))
- return err, "", ""
- }
- defer out.Close()
- // 传输(拷贝)文件
- _, err = io.Copy(out, src)
- if err != nil {
- global.GVA_LOG.Error("upload local file fail:", zap.Any("err", err))
- return err, "", ""
- }
- return nil, dst, lastName
-}
From e9ef8f78827ed3da51fa7dd5a10991a7c3765030 Mon Sep 17 00:00:00 2001
From: SliverHorn <503551462@qq.com>
Date: Mon, 7 Sep 2020 18:17:27 +0800
Subject: [PATCH 06/31] =?UTF-8?q?=E5=AE=8C=E6=88=90GORM=E7=9A=84=E6=94=AF?=
=?UTF-8?q?=E6=8C=81=E5=9B=9B=E4=B8=AA=E6=95=B0=E6=8D=AE=E5=BA=93=E7=9A=84?=
=?UTF-8?q?=E9=85=8D=E7=BD=AE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
server/config.yaml | 35 ++++++++++--
server/config/config.go | 39 ++++++++++---
server/go.mod | 4 +-
server/initialize/gorm.go | 117 ++++++++++++++++++++++++++++++++++++++
server/main.go | 9 +--
5 files changed, 182 insertions(+), 22 deletions(-)
create mode 100644 server/initialize/gorm.go
diff --git a/server/config.yaml b/server/config.yaml
index 037c17f9..5b95f9be 100644
--- a/server/config.yaml
+++ b/server/config.yaml
@@ -19,11 +19,36 @@ mysql:
max-open-conns: 10
log-mode: false
-#sqlite 配置
+# Postgresql connect configuration
+postgresql:
+ username: 'gorm'
+ password: 'gorm'
+ db-name: 'gorm'
+ port: '9920'
+ config: 'sslmode=disable TimeZone=Asia/Shanghai'
+ max-idle-conns: 10
+ max-open-conns: 10
+ logger: false
+ prefer-simple-protocol: true
+
+# sqlite connect configuration
+# sqlite需要gcc支持 windows用户需要自行安装gcc
sqlite:
- path: db.db
- log-mode: true
- config: 'loc=Asia/Shanghai'
+ # path: 'file::memory:?cache=shared' # 内存模式
+ path: 'db.db'
+ max-idle-conns: 10
+ max-open-conns: 10
+ logger: true
+
+# Sqlserver connect configuration
+sqlserver:
+ username: 'gorm'
+ password: 'LoremIpsum86'
+ db-name: 'gorm'
+ path: 'localhost:9930'
+ max-idle-conns: 10
+ max-open-conns: 10
+ logger: true
# oss configuration
@@ -51,7 +76,7 @@ system:
use-multipoint: false
env: 'public' # Change to "develop" to skip authentication for development mode
addr: 8888
- db-type: "mysql" # support mysql/sqlite
+ db-type: "mysql" # support mysql/postgresql/sqlite/sqlserver
need-init-data: false
# captcha configuration
diff --git a/server/config/config.go b/server/config/config.go
index 9a1197ac..108e6add 100644
--- a/server/config/config.go
+++ b/server/config/config.go
@@ -2,7 +2,9 @@ package config
type Server struct {
Mysql Mysql `mapstructure:"mysql" json:"mysql" yaml:"mysql"`
+ Postgresql Postgresql `mapstructure:"postgresql" json:"postgresql" yaml:"postgresql"`
Sqlite Sqlite `mapstructure:"sqlite" json:"sqlite" yaml:"sqlite"`
+ Sqlserver Sqlserver `mapstructure:"sqlserver" json:"sqlserver" yaml:"sqlserver"`
Qiniu Qiniu `mapstructure:"qiniu" json:"qiniu" yaml:"qiniu"`
Casbin Casbin `mapstructure:"casbin" json:"casbin" yaml:"casbin"`
Redis Redis `mapstructure:"redis" json:"redis" yaml:"redis"`
@@ -40,6 +42,35 @@ type Mysql struct {
LogMode bool `mapstructure:"log-mode" json:"logMode" yaml:"log-mode"`
}
+type Postgresql struct {
+ Username string `mapstructure:"username" json:"username" yaml:"username"`
+ Password string `mapstructure:"password" json:"password" yaml:"password"`
+ Dbname string `mapstructure:"db-name" json:"dbname" yaml:"db-name"`
+ Port string `mapstructure:"port" json:"port" yaml:"port"`
+ Config string `mapstructure:"config" json:"config" yaml:"config"`
+ MaxIdleConns int `mapstructure:"max-idle-conns" json:"maxIdleConns" yaml:"max-idle-conns"`
+ MaxOpenConns int `mapstructure:"max-open-conns" json:"maxOpenConns" yaml:"max-open-conns"`
+ Logger bool `mapstructure:"logger" json:"logger" yaml:"logger"`
+ PreferSimpleProtocol bool `mapstructure:"prefer-simple-protocol" json:"preferSimpleProtocol" yaml:"prefer-simple-protocol"`
+}
+
+type Sqlite struct {
+ Path string `mapstructure:"path" json:"path" yaml:"path"`
+ MaxIdleConns int `mapstructure:"max-idle-conns" json:"maxIdleConns" yaml:"max-idle-conns"`
+ MaxOpenConns int `mapstructure:"max-open-conns" json:"maxOpenConns" yaml:"max-open-conns"`
+ Logger bool `mapstructure:"logger" json:"logger" yaml:"logger"`
+}
+
+type Sqlserver struct {
+ Username string `mapstructure:"username" json:"username" yaml:"username"`
+ Password string `mapstructure:"password" json:"password" yaml:"password"`
+ Path string `mapstructure:"path" json:"path" yaml:"path"`
+ Dbname string `mapstructure:"db-name" json:"dbname" yaml:"db-name"`
+ MaxIdleConns int `mapstructure:"max-idle-conns" json:"maxIdleConns" yaml:"max-idle-conns"`
+ MaxOpenConns int `mapstructure:"max-open-conns" json:"maxOpenConns" yaml:"max-open-conns"`
+ Logger bool `mapstructure:"logger" json:"logger" yaml:"logger"`
+}
+
type Redis struct {
Addr string `mapstructure:"addr" json:"addr" yaml:"addr"`
Password string `mapstructure:"password" json:"password" yaml:"password"`
@@ -65,14 +96,6 @@ type Captcha struct {
ImgHeight int `mapstructure:"img-height" json:"imgHeight" yaml:"img-height"`
}
-type Sqlite struct {
- Username string `mapstructure:"username" json:"username" yaml:"username"`
- Password string `mapstructure:"password" json:"password" yaml:"password"`
- Path string `mapstructure:"path" json:"path" yaml:"path"`
- Config string `mapstructure:"config" json:"config" yaml:"config"`
- LogMode bool `mapstructure:"log-mode" json:"logMode" yaml:"log-mode"`
-}
-
type Zap struct {
Level string `mapstructure:"level" json:"level" yaml:"level"`
Format string `mapstructure:"format" json:"format" yaml:"format"`
diff --git a/server/go.mod b/server/go.mod
index 6ac4777f..143a7a35 100644
--- a/server/go.mod
+++ b/server/go.mod
@@ -41,12 +41,14 @@ require (
github.com/tebeka/strftime v0.1.3 // indirect
github.com/unrolled/secure v1.0.7
go.uber.org/zap v1.10.0
- golang.org/x/net v0.0.0-20200320220750-118fecf932d8 // indirect
golang.org/x/sys v0.0.0-20200610111108-226ff32320da // indirect
golang.org/x/tools v0.0.0-20200324003944-a576cf524670 // indirect
google.golang.org/protobuf v1.24.0 // indirect
gopkg.in/ini.v1 v1.55.0 // indirect
gopkg.in/yaml.v2 v2.3.0 // indirect
gorm.io/driver/mysql v0.3.1
+ gorm.io/driver/postgres v0.2.6
+ gorm.io/driver/sqlite v1.1.1
+ gorm.io/driver/sqlserver v0.2.4
gorm.io/gorm v0.2.35
)
diff --git a/server/initialize/gorm.go b/server/initialize/gorm.go
new file mode 100644
index 00000000..7dce551a
--- /dev/null
+++ b/server/initialize/gorm.go
@@ -0,0 +1,117 @@
+package initialize
+
+import (
+ "gin-vue-admin/global"
+ "go.uber.org/zap"
+ "gorm.io/driver/mysql"
+ "gorm.io/driver/postgres"
+ "gorm.io/driver/sqlite"
+ "gorm.io/driver/sqlserver"
+ "gorm.io/gorm"
+ "gorm.io/gorm/logger"
+ "os"
+)
+
+// Gorm 初始化数据库并产生数据库全局变量
+func Gorm() {
+ switch global.GVA_CONFIG.System.DbType {
+ case "mysql":
+ GormMysql()
+ case "postgresql":
+ GormPostgreSql()
+ case "sqlite":
+ GormSqlite()
+ case "sqlserver":
+ GormSqlServer()
+ }
+}
+
+// GormMysql 初始化Mysql数据库
+func GormMysql() {
+ m := global.GVA_CONFIG.Mysql
+ dsn := m.Username + ":" + m.Password + "@(" + m.Path + ")/" + m.Dbname + "?" + m.Config
+ mysqlConfig := mysql.Config{
+ DSN: dsn, // DSN data source name
+ DefaultStringSize: 191, // string 类型字段的默认长度
+ DisableDatetimePrecision: true, // 禁用 datetime 精度,MySQL 5.6 之前的数据库不支持
+ DontSupportRenameIndex: true, // 重命名索引时采用删除并新建的方式,MySQL 5.7 之前的数据库和 MariaDB 不支持重命名索引
+ DontSupportRenameColumn: true, // 用 `change` 重命名列,MySQL 8 之前的数据库和 MariaDB 不支持重命名列
+ SkipInitializeWithVersion: false, // 根据版本自动配置
+ }
+ gormConfig := config(m.LogMode)
+ if db, err := gorm.Open(mysql.New(mysqlConfig), gormConfig); err != nil {
+ global.GVA_LOG.Error("MySQL启动异常", zap.Any("err", err))
+ os.Exit(0)
+ } else {
+ global.GVA_DB = db
+ sqlDB, _ := db.DB()
+ sqlDB.SetMaxIdleConns(m.MaxIdleConns)
+ sqlDB.SetMaxOpenConns(m.MaxOpenConns)
+ }
+}
+
+// GormPostgreSql 初始化PostgreSql数据库
+func GormPostgreSql() {
+ p := global.GVA_CONFIG.Postgresql
+ dsn := "user=" + p.Username + " password=" + p.Password + " dbname=" + p.Dbname + " port=" + p.Port + " " + p.Config
+ postgresConfig := postgres.Config{
+ DSN: dsn, // DSN data source name
+ PreferSimpleProtocol: p.PreferSimpleProtocol, // 禁用隐式 prepared statement
+ }
+ gormConfig := config(p.Logger)
+ if db, err := gorm.Open(postgres.New(postgresConfig), gormConfig); err != nil {
+ global.GVA_LOG.Error("PostgreSql启动异常", zap.Any("err", err))
+ os.Exit(0)
+ } else {
+ global.GVA_DB = db
+ sqlDB, _ := db.DB()
+ sqlDB.SetMaxIdleConns(p.MaxIdleConns)
+ sqlDB.SetMaxOpenConns(p.MaxOpenConns)
+ }
+}
+
+// GormSqlite 初始化Sqlite数据库
+func GormSqlite() {
+ s := global.GVA_CONFIG.Sqlite
+ gormConfig := config(s.Logger)
+ if db, err := gorm.Open(sqlite.Open(s.Path), gormConfig); err != nil {
+ global.GVA_LOG.Error("Sqlite启动异常", zap.Any("err", err))
+ os.Exit(0)
+ } else {
+ global.GVA_DB = db
+ sqlDB, _ := db.DB()
+ sqlDB.SetMaxIdleConns(s.MaxIdleConns)
+ sqlDB.SetMaxOpenConns(s.MaxOpenConns)
+ }
+}
+
+// GormSqlite 初始化Sqlite数据库
+func GormSqlServer() {
+ ss := global.GVA_CONFIG.Sqlserver
+ dsn := "sqlserver://" + ss.Username + ":" + ss.Password + "@" + ss.Path + "?database=gorm"
+ if db, err := gorm.Open(sqlserver.Open(dsn), &gorm.Config{}); err != nil {
+ global.GVA_LOG.Error("SqlServer启动异常", zap.Any("err", err))
+ os.Exit(0)
+ } else {
+ global.GVA_DB = db
+ sqlDB, _ := db.DB()
+ sqlDB.SetMaxIdleConns(ss.MaxIdleConns)
+ sqlDB.SetMaxOpenConns(ss.MaxOpenConns)
+ }
+}
+
+// config 根据配置决定是否开启日志
+func config(mod bool) (c *gorm.Config) {
+ if mod {
+ c = &gorm.Config{
+ Logger: logger.Default.LogMode(logger.Info),
+ DisableForeignKeyConstraintWhenMigrating: true,
+ }
+ } else {
+ c = &gorm.Config{
+ Logger: logger.Default.LogMode(logger.Silent),
+ DisableForeignKeyConstraintWhenMigrating: true,
+ }
+ }
+ return
+}
diff --git a/server/main.go b/server/main.go
index a8e566e2..e3d1d9dc 100644
--- a/server/main.go
+++ b/server/main.go
@@ -15,14 +15,7 @@ import (
// @name x-token
// @BasePath /
func main() {
- switch global.GVA_CONFIG.System.DbType {
- case "mysql":
- initialize.Mysql()
- // case "sqlite":
- // initialize.Sqlite() // sqlite需要gcc支持 windows用户需要自行安装gcc 如需使用打开注释即可
- default:
- initialize.Mysql()
- }
+ initialize.Gorm()
initialize.DBTables()
if global.GVA_CONFIG.System.NeedInitData {
init_data.InitData() // 通过配置文件初始化数据 默认为 false 首次运行需要将 ./config.yaml中 system下的 need-init-data 修改为true
From 6631aa35db64624dd949ccbbc4d287bde362e494 Mon Sep 17 00:00:00 2001
From: maplepie <358689072@qq.com>
Date: Tue, 8 Sep 2020 15:57:46 +0800
Subject: [PATCH 07/31] add email module
---
server/api/v1/sys_email.go | 23 ++++++++++
server/config.yaml | 13 +++++-
server/config/config.go | 11 +++++
server/go.mod | 1 +
server/initialize/router.go | 1 +
server/router/sys_email.go | 14 ++++++
server/service/sys_email.go | 17 ++++++++
server/utils/email.go | 50 ++++++++++++++++++++++
web/src/api/email.js | 15 +++++++
web/src/view/systemTools/system/system.vue | 44 ++++++++++++++++++-
10 files changed, 186 insertions(+), 3 deletions(-)
create mode 100644 server/api/v1/sys_email.go
create mode 100644 server/router/sys_email.go
create mode 100644 server/service/sys_email.go
create mode 100644 server/utils/email.go
create mode 100644 web/src/api/email.js
diff --git a/server/api/v1/sys_email.go b/server/api/v1/sys_email.go
new file mode 100644
index 00000000..264ae340
--- /dev/null
+++ b/server/api/v1/sys_email.go
@@ -0,0 +1,23 @@
+package v1
+
+import (
+ "fmt"
+ "gin-vue-admin/global/response"
+ "gin-vue-admin/service"
+ "github.com/gin-gonic/gin"
+)
+
+// @Tags system
+// @Summary 发送测试邮件
+// @Security ApiKeyAuth
+// @Produce application/json
+// @Success 200 {string} string "{"success":true,"data":{},"msg":"返回成功"}"
+// @Router /email/emailTest [post]
+func EmailTest(c *gin.Context) {
+ err := service.EmailTest()
+ if err != nil {
+ response.FailWithMessage(fmt.Sprintf("发送失败,%v", err), c)
+ } else {
+ response.OkWithData("发送成功", c)
+ }
+}
diff --git a/server/config.yaml b/server/config.yaml
index 037c17f9..c03b1eab 100644
--- a/server/config.yaml
+++ b/server/config.yaml
@@ -11,7 +11,7 @@ jwt:
# mysql connect configuration
mysql:
username: root
- password: 'Aa@6447985'
+ password: 'root'
path: '127.0.0.1:3306'
db-name: 'qmPlus'
config: 'charset=utf8mb4&parseTime=True&loc=Local'
@@ -80,4 +80,13 @@ zap:
# LowercaseLevelEncoder:小写, LowercaseColorLevelEncoder:小写带颜色,CapitalLevelEncoder: 大写, CapitalColorLevelEncoder: 大写带颜色,
encode_level: 'LowercaseColorLevelEncoder'
stacktrace_key: 'stacktrace'
- log_in_console: true
\ No newline at end of file
+ log_in_console: true
+
+email:
+ email_from: 'xxx@163.com'
+ email_nick_name: 'test'
+ email_secret: 'xxx'
+ email_to: 'xxx@qq.com'
+ email_host: 'smtp.163.com'
+ email_port: 465
+ email_isSSL: true
\ No newline at end of file
diff --git a/server/config/config.go b/server/config/config.go
index 9a1197ac..3aee6358 100644
--- a/server/config/config.go
+++ b/server/config/config.go
@@ -11,6 +11,7 @@ type Server struct {
Captcha Captcha `mapstructure:"captcha" json:"captcha" yaml:"captcha"`
Zap Zap `mapstructure:"zap" json:"zap" yaml:"zap"`
LocalUpload LocalUpload `mapstructure:"localUpload" json:"localUpload" yaml:"localUpload"`
+ Email Email `mapstructure:"email" json:"email" yaml:"email"`
}
type System struct {
@@ -84,3 +85,13 @@ type Zap struct {
StacktraceKey string `mapstructure:"stacktrace_key" json:"stacktraceKey" yaml:"stacktrace_key"`
LogInConsole bool `mapstructure:"log_in_console" json:"logInConsole" yaml:"log_in_console"`
}
+
+type Email struct {
+ EmailFrom string `mapstructure:"email_from" json:"emailFrom" yaml:"email_from"`
+ EmailNickName string `mapstructure:"email_nick_name" json:"emailNickName" yaml:"email_nick_name"`
+ EmailSecret string `mapstructure:"email_secret" json:"emailSecret" yaml:"email_secret"`
+ EmailTo string `mapstructure:"email_to" json:"emailTo" yaml:"email_to"`
+ EmailHost string `mapstructure:"email_host" json:"emailHost" yaml:"email_host"`
+ EmailPort int `mapstructure:"email_port" json:"emailPort" yaml:"email_port"`
+ EmailIsSSL bool `mapstructure:"email_isSSL" json:"emailIsSSL" yaml:"email_isSSL"`
+}
diff --git a/server/go.mod b/server/go.mod
index 6ac4777f..d3084fc8 100644
--- a/server/go.mod
+++ b/server/go.mod
@@ -19,6 +19,7 @@ require (
github.com/go-sql-driver/mysql v1.5.0
github.com/golang/protobuf v1.4.2 // indirect
github.com/jehiah/go-strftime v0.0.0-20171201141054-1d33003b3869 // indirect
+ github.com/jordan-wright/email v0.0.0-20200824153738-3f5bafa1cd84
github.com/json-iterator/go v1.1.10 // indirect
github.com/lestrrat-go/file-rotatelogs v2.3.0+incompatible
github.com/lestrrat-go/strftime v1.0.3 // indirect
diff --git a/server/initialize/router.go b/server/initialize/router.go
index 14ebefbc..97703554 100644
--- a/server/initialize/router.go
+++ b/server/initialize/router.go
@@ -43,6 +43,7 @@ func Routers() *gin.Engine {
router.InitSysDictionaryDetailRouter(ApiGroup) // 字典详情管理
router.InitSysDictionaryRouter(ApiGroup) // 字典管理
router.InitSysOperationRecordRouter(ApiGroup) // 操作记录
+ router.InitEmailRouter(ApiGroup) // 邮件相关路由
global.GVA_LOG.Info("router register success")
return Router
diff --git a/server/router/sys_email.go b/server/router/sys_email.go
new file mode 100644
index 00000000..6d201cf0
--- /dev/null
+++ b/server/router/sys_email.go
@@ -0,0 +1,14 @@
+package router
+
+import (
+ "gin-vue-admin/api/v1"
+ "gin-vue-admin/middleware"
+ "github.com/gin-gonic/gin"
+)
+
+func InitEmailRouter(Router *gin.RouterGroup) {
+ UserRouter := Router.Group("email").Use(middleware.JWTAuth()).Use(middleware.CasbinHandler())
+ {
+ UserRouter.POST("emailTest", v1.EmailTest) // 发送测试邮件
+ }
+}
diff --git a/server/service/sys_email.go b/server/service/sys_email.go
new file mode 100644
index 00000000..0db1416f
--- /dev/null
+++ b/server/service/sys_email.go
@@ -0,0 +1,17 @@
+package service
+
+import (
+ "gin-vue-admin/utils"
+)
+
+// @title EmailTest
+// @description 发送邮件测试
+// @auth (2020/09/08 13:58
+// @return err error
+
+func EmailTest() (err error) {
+ subject := "test"
+ body := "test"
+ err = utils.EmailTest(subject, body)
+ return err
+}
diff --git a/server/utils/email.go b/server/utils/email.go
new file mode 100644
index 00000000..7e87383a
--- /dev/null
+++ b/server/utils/email.go
@@ -0,0 +1,50 @@
+package utils
+
+import (
+ "fmt"
+ "strings"
+ "net/smtp"
+ "crypto/tls"
+
+ "gin-vue-admin/global"
+
+ "github.com/jordan-wright/email"
+)
+
+func Email(subject string, body string) error {
+ to := strings.Split(global.GVA_CONFIG.Email.EmailTo, ",")
+ return send(to, subject, body)
+}
+
+func EmailTest(subject string, body string) error {
+ to := []string{global.GVA_CONFIG.Email.EmailFrom}
+ return send(to, subject, body)
+}
+
+func send(to []string, subject string, body string) error {
+ from := global.GVA_CONFIG.Email.EmailFrom
+ nickName := global.GVA_CONFIG.Email.EmailNickName
+ secret := global.GVA_CONFIG.Email.EmailSecret
+ host := global.GVA_CONFIG.Email.EmailHost
+ port := global.GVA_CONFIG.Email.EmailPort
+ isSSL := global.GVA_CONFIG.Email.EmailIsSSL
+
+ auth := smtp.PlainAuth("", from, secret, host)
+ e := email.NewEmail()
+ if nickName == "" {
+ e.From = fmt.Sprintf("%s <%s>", nickName, from)
+ }else{
+ e.From = from
+ }
+ e.To = to
+ e.Subject = subject
+ e.HTML = []byte(body)
+ var err error
+ hostAddr := fmt.Sprintf("%s:%d", host, port)
+ if isSSL {
+ err = e.SendWithTLS(hostAddr, auth, &tls.Config{ServerName: host})
+ }else{
+ err = e.Send(hostAddr, auth)
+ }
+ return err
+}
\ No newline at end of file
diff --git a/web/src/api/email.js b/web/src/api/email.js
new file mode 100644
index 00000000..25023533
--- /dev/null
+++ b/web/src/api/email.js
@@ -0,0 +1,15 @@
+import service from '@/utils/request'
+
+// @Tags email
+// @Summary 发送测试邮件
+// @Security ApiKeyAuth
+// @Produce application/json
+// @Success 200 {string} string "{"success":true,"data":{},"msg":"返回成功"}"
+// @Router /email/emailTest [post]
+export const emailTest = (data) => {
+ return service({
+ url: "/email/emailTest",
+ method: 'post',
+ data
+ })
+}
\ No newline at end of file
diff --git a/web/src/view/systemTools/system/system.vue b/web/src/view/systemTools/system/system.vue
index 4ec3aa4d..5d2e791b 100644
--- a/web/src/view/systemTools/system/system.vue
+++ b/web/src/view/systemTools/system/system.vue
@@ -105,6 +105,31 @@