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 @@ +

邮箱配置

+ + + + + + + + + + + + + + + + + + + + + + + 测试邮件 + 立即更新 重启服务(开发中) @@ -115,6 +140,7 @@