Browse Source

修复mixins路径,调整目录结构

QM303176530 4 years ago
parent
commit
24e4f24bb8
41 changed files with 294 additions and 333 deletions
  1. 0 32
      .docker-compose/shell/server-handle.sh
  2. 3 15
      dockerfile_server
  3. 15 14
      server/Dockerfile
  4. 1 0
      server/api/v1/exa_breakpoint_continue.go
  5. 3 3
      server/api/v1/exa_customer.go
  6. 1 1
      server/api/v1/sys_api.go
  7. 8 2
      server/cmd/datas/AuthorityMenu.go
  8. 73 67
      server/cmd/datas/apis.go
  9. 6 1
      server/cmd/datas/authorities.go
  10. 6 1
      server/cmd/datas/authority_Ids.go
  11. 6 1
      server/cmd/datas/authority_menus.go
  12. 8 8
      server/cmd/datas/casbins.go
  13. 8 2
      server/cmd/datas/customers.go
  14. 14 35
      server/cmd/datas/dictionaries.go
  15. 30 24
      server/cmd/datas/dictionary_details.go
  16. 9 3
      server/cmd/datas/files.go
  17. 4 52
      server/cmd/datas/init.go
  18. 34 28
      server/cmd/datas/menus.go
  19. 9 3
      server/cmd/datas/users.go
  20. 1 3
      server/cmd/gva/initdb.go
  21. 1 1
      server/cmd/gva/version.go
  22. 13 0
      server/global/model.go
  23. 1 5
      server/go.mod
  24. 3 3
      server/model/exa_breakpoint_continue.go
  25. 2 2
      server/model/exa_customer.go
  26. 2 2
      server/model/exa_file_upload_download.go
  27. 2 2
      server/model/sys_api.go
  28. 3 3
      server/model/sys_base_menu.go
  29. 2 2
      server/model/sys_dictionary.go
  30. 2 2
      server/model/sys_dictionary_detail.go
  31. 2 2
      server/model/sys_jwt_blacklist.go
  32. 2 2
      server/model/sys_operation_record.go
  33. 2 2
      server/model/sys_user.go
  34. 3 3
      server/model/sys_workflow.go
  35. 4 2
      server/model/sys_workflow_process.go
  36. 2 2
      server/resource/template/te/model.go.tpl
  37. 2 1
      server/service/sys_api.go
  38. 1 1
      web/src/api/user.js
  39. 0 0
      web/src/utils/date.js
  40. 1 1
      web/src/view/example/upload/upload.vue
  41. 5 0
      web/src/view/superAdmin/dictionary/sysDictionaryDetail.vue

+ 0 - 32
.docker-compose/shell/server-handle.sh

@@ -49,8 +49,6 @@ system:
   addr: 8888
   db-type: 'mysql'
   oss-type: 'local'
-  config-env: 'GVA_CONFIG'
-  need-init-data: true
   use-multipoint: false
 
 # captcha configuration
@@ -70,36 +68,6 @@ mysql:
   max-open-conns: 10
   log-mode: false
 
-# sqlite connect configuration (sqlite需要gcc支持 windows用户需要自行安装gcc)
-sqlite:
-  path: 'db.db'
-  max-idle-conns: 10
-  max-open-conns: 10
-  logger: true
-
-# Sqlserver connect configuration
-sqlserver:
-  path: 'localhost:9930'
-  db-name: 'gorm'
-  username: 'gorm'
-  password: 'LoremIpsum86'
-  max-idle-conns: 10
-  max-open-conns: 10
-  logger: true
-
-# Postgresql connect configuration
-postgresql:
-  host: '127.0.0.1'
-  port: '9920'
-  config: 'sslmode=disable TimeZone=Asia/Shanghai'
-  db-name: 'gorm'
-  username: 'gorm'
-  password: 'gorm'
-  max-idle-conns: 10
-  max-open-conns: 10
-  prefer-simple-protocol: true
-  logger: false
-
 # local configuration
 local:
   path: 'uploads/file'

+ 3 - 15
dockerfile_server

@@ -12,6 +12,7 @@ RUN sh ./server-handle.sh
 RUN rm -f server-handle.sh
 RUN cat ./config.yaml
 
+RUN go build -o gva cmd/main.go
 RUN go env && go build -o server .
 
 
@@ -20,24 +21,11 @@ LABEL MAINTAINER="SliverHorn@[email protected]"
 
 WORKDIR /go/src/gin-vue-admin
 
+COPY --from=0 /go/src/gin-vue-admin/gva ./
 COPY --from=0 /go/src/gin-vue-admin/server ./
 COPY --from=0 /go/src/gin-vue-admin/config.yaml ./
 COPY --from=0 /go/src/gin-vue-admin/resource ./resource
 
 EXPOSE 8888
 
-ENTRYPOINT ./server
-
-# 根据Dockerfile生成Docker镜像
-
-# docker build -t gva-server:1.0 .
-
-#- 根据Docker镜像启动Docker容器
-#    - 后台运行
-#    - ```
-#    docker run -d -p 8888:8888 --name gva-server-v1 gva-server:1.0
-#      ```
-#    - 以可交互模式运行, Ctrl + p + q
-#    - ```
-#    docker run -it -p 8888:8888 --name gva-server-v1 gva-server:1.0
-#      ```
+ENTRYPOINT ./gva initdb && ./server

+ 15 - 14
server/Dockerfile

@@ -1,19 +1,20 @@
-FROM golang:alpine as builder
+FROM golang:alpine
 
-# 设置go mod proxy 国内代理
-# 设置golang path
-ENV GOPROXY=https://goproxy.cn,https://goproxy.io,direct \
-    GO111MODULE=on \
-    CGO_ENABLED=1
-WORKDIR /ginvue
-RUN go env -w GOPROXY=https://goproxy.cn,https://goproxy.io,direct
+ENV GO111MODULE=on
+ENV GOPROXY=https://goproxy.io,direct
+
+WORKDIR /go/src/gin-vue-admin
 COPY . .
-RUN go env && go list && go build -o app main.go
+RUN go env && go build -o server .
+
+FROM alpine:latest
+LABEL MAINTAINER="SliverHorn@[email protected]"
+
+WORKDIR /go/src/gin-vue-admin
+COPY --from=0 /go/src/gin-vue-admin/server ./
+COPY --from=0 /go/src/gin-vue-admin/config.yaml ./
+COPY --from=0 /go/src/gin-vue-admin/resource ./resource
 
 EXPOSE 8888
-ENTRYPOINT /ginvue/app
 
-# 根据Dockerfile生成Docker镜像
-# docker build -t ginvue .
-# 根据Docker镜像启动Docker容器
-# docker run -itd -p 8888:8888 --name ginvue ginvue
+ENTRYPOINT ./server

+ 1 - 0
server/api/v1/exa_breakpoint_continue.go

@@ -38,6 +38,7 @@ func BreakpointContinue(c *gin.Context) {
 	defer f.Close()
 	cen, _ := ioutil.ReadAll(f)
 	if flag := utils.CheckMd5(cen, chunkMd5); !flag {
+		response.FailWithMessage(err.Error(), c)
 		return
 	}
 	err, file := service.FindOrCreateFile(fileMd5, fileName, chunkTotal)

+ 3 - 3
server/api/v1/exa_customer.go

@@ -57,7 +57,7 @@ func DeleteExaCustomer(c *gin.Context) {
 	CustomerVerify := utils.Rules{
 		"ID": {utils.NotEmpty()},
 	}
-	CustomerVerifyErr := utils.Verify(cu.Model, CustomerVerify)
+	CustomerVerifyErr := utils.Verify(cu.GVA_MODEL, CustomerVerify)
 	if CustomerVerifyErr != nil {
 		response.FailWithMessage(CustomerVerifyErr.Error(), c)
 		return
@@ -84,7 +84,7 @@ func UpdateExaCustomer(c *gin.Context) {
 	IdCustomerVerify := utils.Rules{
 		"ID": {utils.NotEmpty()},
 	}
-	IdCustomerVerifyErr := utils.Verify(cu.Model, IdCustomerVerify)
+	IdCustomerVerifyErr := utils.Verify(cu.GVA_MODEL, IdCustomerVerify)
 	if IdCustomerVerifyErr != nil {
 		response.FailWithMessage(IdCustomerVerifyErr.Error(), c)
 		return
@@ -120,7 +120,7 @@ func GetExaCustomer(c *gin.Context) {
 	IdCustomerVerify := utils.Rules{
 		"ID": {utils.NotEmpty()},
 	}
-	IdCustomerVerifyErr := utils.Verify(cu.Model, IdCustomerVerify)
+	IdCustomerVerifyErr := utils.Verify(cu.GVA_MODEL, IdCustomerVerify)
 	if IdCustomerVerifyErr != nil {
 		response.FailWithMessage(IdCustomerVerifyErr.Error(), c)
 		return

+ 1 - 1
server/api/v1/sys_api.go

@@ -55,7 +55,7 @@ func DeleteApi(c *gin.Context) {
 	ApiVerify := utils.Rules{
 		"ID": {utils.NotEmpty()},
 	}
-	ApiVerifyErr := utils.Verify(a.Model, ApiVerify)
+	ApiVerifyErr := utils.Verify(a.GVA_MODEL, ApiVerify)
 	if ApiVerifyErr != nil {
 		response.FailWithMessage(ApiVerifyErr.Error(), c)
 		return

+ 8 - 2
server/cmd/datas/AuthorityMenu.go

@@ -1,7 +1,13 @@
 package datas
 
-import "gorm.io/gorm"
+import (
+	"github.com/gookit/color"
+	"gorm.io/gorm"
+)
 
 func InitAuthorityMenu(db *gorm.DB) (err error) {
-	return 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
+	if err := 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; err != nil {
+		color.Danger.Println("authority_menu视图已存在!")
+	}
+	return nil
 }

+ 73 - 67
server/cmd/datas/apis.go

@@ -1,84 +1,90 @@
 package datas
 
 import (
+	"gin-vue-admin/global"
 	"gin-vue-admin/model"
+	"github.com/gookit/color"
 	"time"
 
 	"gorm.io/gorm"
 )
 
 var Apis = []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"},
-	{gorm.Model{ID: 66, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/system/getServerInfo", "获取服务器信息", "system", "POST"},
-	{gorm.Model{ID: 67, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/email/emailTest", "发送测试邮件", "email", "POST"},
+	{global.GVA_MODEL{ID: 1, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/base/login", "用户登录", "base", "POST"},
+	{global.GVA_MODEL{ID: 2, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/user/register", "用户注册", "user", "POST"},
+	{global.GVA_MODEL{ID: 3, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/api/createApi", "创建api", "api", "POST"},
+	{global.GVA_MODEL{ID: 4, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/api/getApiList", "获取api列表", "api", "POST"},
+	{global.GVA_MODEL{ID: 5, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/api/getApiById", "获取api详细信息", "api", "POST"},
+	{global.GVA_MODEL{ID: 6, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/api/deleteApi", "删除Api", "api", "POST"},
+	{global.GVA_MODEL{ID: 7, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/api/updateApi", "更新Api", "api", "POST"},
+	{global.GVA_MODEL{ID: 8, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/api/getAllApis", "获取所有api", "api", "POST"},
+	{global.GVA_MODEL{ID: 9, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/authority/createAuthority", "创建角色", "authority", "POST"},
+	{global.GVA_MODEL{ID: 10, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/authority/deleteAuthority", "删除角色", "authority", "POST"},
+	{global.GVA_MODEL{ID: 11, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/authority/getAuthorityList", "获取角色列表", "authority", "POST"},
+	{global.GVA_MODEL{ID: 12, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/menu/getMenu", "获取菜单树", "menu", "POST"},
+	{global.GVA_MODEL{ID: 13, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/menu/getMenuList", "分页获取基础menu列表", "menu", "POST"},
+	{global.GVA_MODEL{ID: 14, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/menu/addBaseMenu", "新增菜单", "menu", "POST"},
+	{global.GVA_MODEL{ID: 15, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/menu/getBaseMenuTree", "获取用户动态路由", "menu", "POST"},
+	{global.GVA_MODEL{ID: 16, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/menu/addMenuAuthority", "增加menu和角色关联关系", "menu", "POST"},
+	{global.GVA_MODEL{ID: 17, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/menu/getMenuAuthority", "获取指定角色menu", "menu", "POST"},
+	{global.GVA_MODEL{ID: 18, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/menu/deleteBaseMenu", "删除菜单", "menu", "POST"},
+	{global.GVA_MODEL{ID: 19, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/menu/updateBaseMenu", "更新菜单", "menu", "POST"},
+	{global.GVA_MODEL{ID: 20, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/menu/getBaseMenuById", "根据id获取菜单", "menu", "POST"},
+	{global.GVA_MODEL{ID: 21, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/user/changePassword", "修改密码", "user", "POST"},
+	{global.GVA_MODEL{ID: 23, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/user/getUserList", "获取用户列表", "user", "POST"},
+	{global.GVA_MODEL{ID: 24, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/user/setUserAuthority", "修改用户角色", "user", "POST"},
+	{global.GVA_MODEL{ID: 25, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/fileUploadAndDownload/upload", "文件上传示例", "fileUploadAndDownload", "POST"},
+	{global.GVA_MODEL{ID: 26, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/fileUploadAndDownload/getFileList", "获取上传文件列表", "fileUploadAndDownload", "POST"},
+	{global.GVA_MODEL{ID: 27, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/casbin/updateCasbin", "更改角色api权限", "casbin", "POST"},
+	{global.GVA_MODEL{ID: 28, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/casbin/getPolicyPathByAuthorityId", "获取权限列表", "casbin", "POST"},
+	{global.GVA_MODEL{ID: 29, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/fileUploadAndDownload/deleteFile", "删除文件", "fileUploadAndDownload", "POST"},
+	{global.GVA_MODEL{ID: 30, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/jwt/jsonInBlacklist", "jwt加入黑名单", "jwt", "POST"},
+	{global.GVA_MODEL{ID: 31, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/authority/setDataAuthority", "设置角色资源权限", "authority", "POST"},
+	{global.GVA_MODEL{ID: 32, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/system/getSystemConfig", "获取配置文件内容", "system", "POST"},
+	{global.GVA_MODEL{ID: 33, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/system/setSystemConfig", "设置配置文件内容", "system", "POST"},
+	{global.GVA_MODEL{ID: 34, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/customer/customer", "创建客户", "customer", "POST"},
+	{global.GVA_MODEL{ID: 35, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/customer/customer", "更新客户", "customer", "PUT"},
+	{global.GVA_MODEL{ID: 36, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/customer/customer", "删除客户", "customer", "DELETE"},
+	{global.GVA_MODEL{ID: 37, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/customer/customer", "获取单一客户", "customer", "GET"},
+	{global.GVA_MODEL{ID: 38, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/customer/customerList", "获取客户列表", "customer", "GET"},
+	{global.GVA_MODEL{ID: 39, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/casbin/casbinTest/:pathParam", "RESTFUL模式测试", "casbin", "GET"},
+	{global.GVA_MODEL{ID: 40, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/autoCode/createTemp", "自动化代码", "autoCode", "POST"},
+	{global.GVA_MODEL{ID: 41, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/authority/updateAuthority", "更新角色信息", "authority", "PUT"},
+	{global.GVA_MODEL{ID: 42, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/authority/copyAuthority", "拷贝角色", "authority", "POST"},
+	{global.GVA_MODEL{ID: 43, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/user/deleteUser", "删除用户", "user", "DELETE"},
+	{global.GVA_MODEL{ID: 44, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/sysDictionaryDetail/createSysDictionaryDetail", "新增字典内容", "sysDictionaryDetail", "POST"},
+	{global.GVA_MODEL{ID: 45, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/sysDictionaryDetail/deleteSysDictionaryDetail", "删除字典内容", "sysDictionaryDetail", "DELETE"},
+	{global.GVA_MODEL{ID: 46, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/sysDictionaryDetail/updateSysDictionaryDetail", "更新字典内容", "sysDictionaryDetail", "PUT"},
+	{global.GVA_MODEL{ID: 47, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/sysDictionaryDetail/findSysDictionaryDetail", "根据ID获取字典内容", "sysDictionaryDetail", "GET"},
+	{global.GVA_MODEL{ID: 48, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/sysDictionaryDetail/getSysDictionaryDetailList", "获取字典内容列表", "sysDictionaryDetail", "GET"},
+	{global.GVA_MODEL{ID: 49, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/sysDictionary/createSysDictionary", "新增字典", "sysDictionary", "POST"},
+	{global.GVA_MODEL{ID: 50, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/sysDictionary/deleteSysDictionary", "删除字典", "sysDictionary", "DELETE"},
+	{global.GVA_MODEL{ID: 51, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/sysDictionary/updateSysDictionary", "更新字典", "sysDictionary", "PUT"},
+	{global.GVA_MODEL{ID: 52, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/sysDictionary/findSysDictionary", "根据ID获取字典", "sysDictionary", "GET"},
+	{global.GVA_MODEL{ID: 53, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/sysDictionary/getSysDictionaryList", "获取字典列表", "sysDictionary", "GET"},
+	{global.GVA_MODEL{ID: 54, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/sysOperationRecord/createSysOperationRecord", "新增操作记录", "sysOperationRecord", "POST"},
+	{global.GVA_MODEL{ID: 55, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/sysOperationRecord/deleteSysOperationRecord", "删除操作记录", "sysOperationRecord", "DELETE"},
+	{global.GVA_MODEL{ID: 56, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/sysOperationRecord/findSysOperationRecord", "根据ID获取操作记录", "sysOperationRecord", "GET"},
+	{global.GVA_MODEL{ID: 57, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/sysOperationRecord/getSysOperationRecordList", "获取操作记录列表", "sysOperationRecord", "GET"},
+	{global.GVA_MODEL{ID: 58, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/autoCode/getTables", "获取数据库表", "autoCode", "GET"},
+	{global.GVA_MODEL{ID: 59, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/autoCode/getDB", "获取所有数据库", "autoCode", "GET"},
+	{global.GVA_MODEL{ID: 60, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/autoCode/getColume", "获取所选table的所有字段", "autoCode", "GET"},
+	{global.GVA_MODEL{ID: 61, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/sysOperationRecord/deleteSysOperationRecordByIds", "批量删除操作历史", "sysOperationRecord", "DELETE"},
+	{global.GVA_MODEL{ID: 62, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/simpleUploader/upload", "插件版分片上传", "simpleUploader", "POST"},
+	{global.GVA_MODEL{ID: 63, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/simpleUploader/checkFileMd5", "文件完整度验证", "simpleUploader", "GET"},
+	{global.GVA_MODEL{ID: 64, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/simpleUploader/mergeFileMd5", "上传完成合并文件", "simpleUploader", "GET"},
+	{global.GVA_MODEL{ID: 65, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/user/setUserInfo", "设置用户信息", "user", "PUT"},
+	{global.GVA_MODEL{ID: 66, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/system/getServerInfo", "获取服务器信息", "system", "POST"},
+	{global.GVA_MODEL{ID: 67, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "/email/emailTest", "发送测试邮件", "email", "POST"},
 }
 
 func InitSysApi(db *gorm.DB) (err error) {
 	return db.Transaction(func(tx *gorm.DB) error {
-		if tx.Create(&Apis).Error != nil { // 遇到错误时回滚事务
+		if tx.Where("id IN ?", []int{1, 67}).Find(&[]model.SysApi{}).RowsAffected == 2 {
+			color.Danger.Println("sys_apis表的初始数据已存在!")
+			return nil
+		}
+		if err := tx.Create(&Apis).Error; err != nil { // 遇到错误时回滚事务
 			return err
 		}
 		return nil

+ 6 - 1
server/cmd/datas/authorities.go

@@ -1,6 +1,7 @@
 package datas
 
 import (
+	"github.com/gookit/color"
 	"time"
 
 	"gin-vue-admin/model"
@@ -15,7 +16,11 @@ var Authorities = []model.SysAuthority{
 
 func InitSysAuthority(db *gorm.DB) (err error) {
 	return db.Transaction(func(tx *gorm.DB) error {
-		if tx.Create(&Authorities).Error != nil { // 遇到错误时回滚事务
+		if tx.Where("authority_id IN ? ", []string{"888", "9528"}).Find(&[]model.SysAuthority{}).RowsAffected == 2 {
+			color.Danger.Println("sys_authorities表的初始数据已存在!")
+			return nil
+		}
+		if err := tx.Create(&Authorities).Error; err != nil { // 遇到错误时回滚事务
 			return err
 		}
 		return nil

+ 6 - 1
server/cmd/datas/authority_Ids.go

@@ -1,6 +1,7 @@
 package datas
 
 import (
+	"github.com/gookit/color"
 	"gorm.io/gorm"
 )
 
@@ -19,7 +20,11 @@ var DataAuthorityId = []SysDataAuthorityId{
 
 func InitSysDataAuthorityId(db *gorm.DB) (err error) {
 	return db.Table("sys_data_authority_id").Transaction(func(tx *gorm.DB) error {
-		if tx.Create(&DataAuthorityId).Error != nil { // 遇到错误时回滚事务
+		if tx.Where("sys_authority_authority_id IN ?", []string{"888", "9528"}).Find(&[]SysDataAuthorityId{}).RowsAffected == 5 {
+			color.Danger.Println("sys_data_authority_id表的初始数据已存在!")
+			return nil
+		}
+		if err := tx.Create(&DataAuthorityId).Error; err != nil { // 遇到错误时回滚事务
 			return err
 		}
 		return nil

+ 6 - 1
server/cmd/datas/authority_menus.go

@@ -1,6 +1,7 @@
 package datas
 
 import (
+	"github.com/gookit/color"
 	"gorm.io/gorm"
 )
 
@@ -67,7 +68,11 @@ var AuthorityMenus = []SysAuthorityMenus{
 
 func InitSysAuthorityMenus(db *gorm.DB) (err error) {
 	return db.Table("sys_authority_menus").Transaction(func(tx *gorm.DB) error {
-		if tx.Create(&AuthorityMenus).Error != nil { // 遇到错误时回滚事务
+		if tx.Where("sys_authority_authority_id IN ?", []string{"888", "8881", "9528"}).Find(&[]SysAuthorityMenus{}).RowsAffected == 53 {
+			color.Danger.Println("sys_authority_menus表的初始数据已存在!")
+			return nil
+		}
+		if err := tx.Create(&AuthorityMenus).Error; err != nil { // 遇到错误时回滚事务
 			return err
 		}
 		return nil

+ 8 - 8
server/cmd/datas/casbins.go

@@ -2,12 +2,13 @@ package datas
 
 import (
 	gormadapter "github.com/casbin/gorm-adapter/v3"
+	"github.com/gookit/color"
 	"gorm.io/gorm"
 )
 
 var Carbines = []gormadapter.CasbinRule{
 	{PType: "p", V0: "888", V1: "/base/login", V2: "POST"},
-	{PType: "p", V0: "888", V1: "/base/register", V2: "POST"},
+	{PType: "p", V0: "888", V1: "/user/register", V2: "POST"},
 	{PType: "p", V0: "888", V1: "/api/createApi", V2: "POST"},
 	{PType: "p", V0: "888", V1: "/api/getApiList", V2: "POST"},
 	{PType: "p", V0: "888", V1: "/api/getApiById", V2: "POST"},
@@ -74,7 +75,7 @@ var Carbines = []gormadapter.CasbinRule{
 	{PType: "p", V0: "888", V1: "/simpleUploader/checkFileMd5", V2: "GET"},
 	{PType: "p", V0: "888", V1: "/simpleUploader/mergeFileMd5", V2: "GET"},
 	{PType: "p", V0: "8881", V1: "/base/login", V2: "POST"},
-	{PType: "p", V0: "8881", V1: "/base/register", V2: "POST"},
+	{PType: "p", V0: "8881", V1: "/user/register", V2: "POST"},
 	{PType: "p", V0: "8881", V1: "/api/createApi", V2: "POST"},
 	{PType: "p", V0: "8881", V1: "/api/getApiList", V2: "POST"},
 	{PType: "p", V0: "8881", V1: "/api/getApiById", V2: "POST"},
@@ -111,7 +112,7 @@ var Carbines = []gormadapter.CasbinRule{
 	{PType: "p", V0: "8881", V1: "/customer/customer", V2: "GET"},
 	{PType: "p", V0: "8881", V1: "/customer/customerList", V2: "GET"},
 	{PType: "p", V0: "9528", V1: "/base/login", V2: "POST"},
-	{PType: "p", V0: "9528", V1: "/base/register", V2: "POST"},
+	{PType: "p", V0: "9528", V1: "/user/register", V2: "POST"},
 	{PType: "p", V0: "9528", V1: "/api/createApi", V2: "POST"},
 	{PType: "p", V0: "9528", V1: "/api/getApiList", V2: "POST"},
 	{PType: "p", V0: "9528", V1: "/api/getApiById", V2: "POST"},
@@ -152,12 +153,11 @@ var Carbines = []gormadapter.CasbinRule{
 
 func InitCasbinModel(db *gorm.DB) (err error) {
 	return db.Transaction(func(tx *gorm.DB) error {
-		if !tx.Migrator().HasTable("casbin_rule") {
-			if err := tx.Migrator().CreateTable(&gormadapter.CasbinRule{}); err != nil {
-				return err
-			}
+		if tx.Where("p_type = ? AND v0 IN ?", "p", []string{"888", "8881", "9528"}).Find(&[]gormadapter.CasbinRule{}).RowsAffected == 142 {
+			color.Danger.Println("casbin_rule表的初始数据已存在!")
+			return nil
 		}
-		if tx.Create(&Carbines).Error != nil { // 遇到错误时回滚事务
+		if err := tx.Create(&Carbines).Error; err != nil { // 遇到错误时回滚事务
 			return err
 		}
 		return nil

+ 8 - 2
server/cmd/datas/customers.go

@@ -1,6 +1,8 @@
 package datas
 
 import (
+	"gin-vue-admin/global"
+	"github.com/gookit/color"
 	"time"
 
 	"gin-vue-admin/model"
@@ -8,12 +10,16 @@ import (
 )
 
 var Customers = []model.ExaCustomer{
-	{Model: gorm.Model{ID: 1, CreatedAt: time.Now(), UpdatedAt: time.Now()}, CustomerName: "测试客户", CustomerPhoneData: "1761111111", SysUserID: 1, SysUserAuthorityID: "888"},
+	{GVA_MODEL: global.GVA_MODEL{ID: 1, CreatedAt: time.Now(), UpdatedAt: time.Now()}, CustomerName: "测试客户", CustomerPhoneData: "1761111111", SysUserID: 1, SysUserAuthorityID: "888"},
 }
 
 func InitExaCustomer(db *gorm.DB) (err error) {
 	return db.Transaction(func(tx *gorm.DB) error {
-		if tx.Create(&Customers).Error != nil { // 遇到错误时回滚事务
+		if tx.Where("id IN ? ", []int{1}).Find(&[]model.ExaCustomer{}).RowsAffected == 1 {
+			color.Danger.Println("exa_customers表的初始数据已存在!")
+			return nil
+		}
+		if err := tx.Create(&Customers).Error; err != nil { // 遇到错误时回滚事务
 			return err
 		}
 		return nil

+ 14 - 35
server/cmd/datas/dictionaries.go

@@ -1,54 +1,33 @@
 package datas
 
 import (
+	"gin-vue-admin/global"
+	"github.com/gookit/color"
 	"time"
 
 	"gin-vue-admin/model"
 	"gorm.io/gorm"
 )
 
-type SysDictionaryToPostgresql struct {
-	gorm.Model
-	Name                 string                `json:"name" form:"name" gorm:"column:name;comment:字典名(中)"`
-	Type                 string                `json:"type" form:"type" gorm:"column:type;comment:字典名(英)"`
-	Status               *bool                 `json:"status" form:"status" gorm:"column:status;comment:状态"`
-	Description          string                `json:"description" form:"description" gorm:"column:description;comment:'描述'"`
-	SysDictionaryDetails []model.SysDictionaryDetail `json:"sysDictionaryDetails" form:"sysDictionaryDetails"`
-}
-
 func InitSysDictionary(db *gorm.DB) (err error) {
 	var status = new(bool)
 	*status = true
 	Dictionaries := []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类型"},
+		{GVA_MODEL: global.GVA_MODEL{ID: 1, CreatedAt: time.Now(), UpdatedAt: time.Now()}, Name: "性别", Type: "sex", Status: status, Desc: "性别字典"},
+		{GVA_MODEL: global.GVA_MODEL{ID: 2, CreatedAt: time.Now(), UpdatedAt: time.Now()}, Name: "数据库int类型", Type: "int", Status: status, Desc: "int类型对应的数据库类型"},
+		{GVA_MODEL: global.GVA_MODEL{ID: 3, CreatedAt: time.Now(), UpdatedAt: time.Now()}, Name: "数据库时间日期类型", Type: "time.Time", Status: status, Desc: "数据库时间日期类型"},
+		{GVA_MODEL: global.GVA_MODEL{ID: 4, CreatedAt: time.Now(), UpdatedAt: time.Now()}, Name: "数据库浮点型", Type: "float64", Status: status, Desc: "数据库浮点型"},
+		{GVA_MODEL: global.GVA_MODEL{ID: 5, CreatedAt: time.Now(), UpdatedAt: time.Now()}, Name: "数据库字符串", Type: "string", Status: status, Desc: "数据库字符串"},
+		{GVA_MODEL: global.GVA_MODEL{ID: 6, CreatedAt: time.Now(), UpdatedAt: time.Now()}, Name: "数据库bool类型", Type: "bool", Status: status, Desc: "数据库bool类型"},
 	}
 	return db.Transaction(func(tx *gorm.DB) error {
-		if tx.Create(&Dictionaries).Error != nil { // 遇到错误时回滚事务
+		if tx.Where("id IN ?", []int{1, 6}).Find(&[]model.SysDictionary{}).RowsAffected == 2 {
+			color.Danger.Println("sys_dictionaries表的初始数据已存在!")
+			return nil
+		}
+		if err := tx.Create(&Dictionaries).Error; err != nil { // 遇到错误时回滚事务
 			return err
 		}
 		return nil
 	})
-}
-
-func InitSysDictionaryToPostgresql(db *gorm.DB) (err error) {
-	status := new(bool)
-	*status = true
-	tx := db.Begin() // 开始事务
-	insert := []SysDictionaryToPostgresql{
-		{Model: gorm.Model{ID: 1, CreatedAt: time.Now(), UpdatedAt: time.Now()}, Name: "性别", Type: "sex", Status: status, Description: "性别字典"},
-		{Model: gorm.Model{ID: 2, CreatedAt: time.Now(), UpdatedAt: time.Now()}, Name: "数据库int类型", Type: "int", Status: status, Description: "int类型对应的数据库类型"},
-		{Model: gorm.Model{ID: 3, CreatedAt: time.Now(), UpdatedAt: time.Now()}, Name: "数据库时间日期类型", Type: "time.Time", Status: status, Description: "数据库时间日期类型"},
-		{Model: gorm.Model{ID: 4, CreatedAt: time.Now(), UpdatedAt: time.Now()}, Name: "数据库浮点型", Type: "float64", Status: status, Description: "数据库浮点型"},
-		{Model: gorm.Model{ID: 5, CreatedAt: time.Now(), UpdatedAt: time.Now()}, Name: "数据库字符串", Type: "string", Status: status, Description: "数据库字符串"},
-		{Model: gorm.Model{ID: 6, CreatedAt: time.Now(), UpdatedAt: time.Now()}, Name: "数据库bool类型", Type: "bool", Status: status, Description: "数据库bool类型"},
-	}
-	if tx.Create(&insert).Error != nil { // 遇到错误时回滚事务
-		tx.Rollback()
-	}
-	return tx.Commit().Error
-}
+}

+ 30 - 24
server/cmd/datas/dictionary_details.go

@@ -1,6 +1,8 @@
 package datas
 
 import (
+	"gin-vue-admin/global"
+	"github.com/gookit/color"
 	"time"
 
 	"gin-vue-admin/model"
@@ -11,32 +13,36 @@ func InitSysDictionaryDetail(db *gorm.DB) (err error) {
 	status := new(bool)
 	*status = true
 	DictionaryDetail := []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},
+		{global.GVA_MODEL{ID: 1, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "smallint", 1, status, 1, 2},
+		{global.GVA_MODEL{ID: 2, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "mediumint", 2, status, 2, 2},
+		{global.GVA_MODEL{ID: 3, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "int", 3, status, 3, 2},
+		{global.GVA_MODEL{ID: 4, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "bigint", 4, status, 4, 2},
+		{global.GVA_MODEL{ID: 5, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "date", 0, status, 0, 3},
+		{global.GVA_MODEL{ID: 6, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "time", 1, status, 1, 3},
+		{global.GVA_MODEL{ID: 7, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "year", 2, status, 2, 3},
+		{global.GVA_MODEL{ID: 8, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "datetime", 3, status, 3, 3},
+		{global.GVA_MODEL{ID: 9, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "timestamp", 5, status, 5, 3},
+		{global.GVA_MODEL{ID: 10, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "float", 0, status, 0, 4},
+		{global.GVA_MODEL{ID: 11, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "double", 1, status, 1, 4},
+		{global.GVA_MODEL{ID: 12, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "decimal", 2, status, 2, 4},
+		{global.GVA_MODEL{ID: 13, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "char", 0, status, 0, 5},
+		{global.GVA_MODEL{ID: 14, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "varchar", 1, status, 1, 5},
+		{global.GVA_MODEL{ID: 15, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "tinyblob", 2, status, 2, 5},
+		{global.GVA_MODEL{ID: 16, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "tinytext", 3, status, 3, 5},
+		{global.GVA_MODEL{ID: 17, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "text", 4, status, 4, 5},
+		{global.GVA_MODEL{ID: 18, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "blob", 5, status, 5, 5},
+		{global.GVA_MODEL{ID: 19, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "mediumblob", 6, status, 6, 5},
+		{global.GVA_MODEL{ID: 20, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "mediumtext", 7, status, 7, 5},
+		{global.GVA_MODEL{ID: 21, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "longblob", 8, status, 8, 5},
+		{global.GVA_MODEL{ID: 22, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "longtext", 9, status, 9, 5},
+		{global.GVA_MODEL{ID: 23, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "tinyint", 0, status, 0, 6},
 	}
 	return db.Transaction(func(tx *gorm.DB) error {
-		if tx.Create(&DictionaryDetail).Error != nil { // 遇到错误时回滚事务
+		if tx.Where("id IN ?", []int{1, 23}).Find(&[]model.SysDictionaryDetail{}).RowsAffected == 2 {
+			color.Danger.Println("sys_dictionary_details表的初始数据已存在!")
+			return nil
+		}
+		if err := tx.Create(&DictionaryDetail).Error; err != nil { // 遇到错误时回滚事务
 			return err
 		}
 		return nil

+ 9 - 3
server/cmd/datas/files.go

@@ -1,6 +1,8 @@
 package datas
 
 import (
+	"gin-vue-admin/global"
+	"github.com/gookit/color"
 	"time"
 
 	"gin-vue-admin/model"
@@ -8,13 +10,17 @@ import (
 )
 
 var Files = []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"},
+	{global.GVA_MODEL{ID: 1, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "10.png", "http://qmplusimg.henrongyi.top/gvalogo.png", "png", "158787308910.png"},
+	{global.GVA_MODEL{ID: 2, CreatedAt: time.Now(), UpdatedAt: time.Now()}, "logo.png", "http://qmplusimg.henrongyi.top/1576554439myAvatar.png", "png", "1587973709logo.png"},
 }
 
 func InitExaFileUploadAndDownload(db *gorm.DB) (err error) {
 	return db.Transaction(func(tx *gorm.DB) error {
-		if tx.Create(&Files).Error != nil { // 遇到错误时回滚事务
+		if tx.Where("id IN ?", []int{1, 2}).Find(&[]model.ExaFileUploadAndDownload{}).RowsAffected == 2 {
+			color.Danger.Println("exa_file_upload_and_downloads表的初始数据已存在!")
+			return nil
+		}
+		if err := tx.Create(&Files).Error; err != nil { // 遇到错误时回滚事务
 			return err
 		}
 		return nil

+ 4 - 52
server/cmd/datas/init.go

@@ -30,54 +30,6 @@ func InitMysqlData(db *gorm.DB) {
 }
 
 func InitMysqlTables(db *gorm.DB) {
-	var err error
-	err = db.AutoMigrate(
-		model.SysApi{},
-		model.SysUser{},
-		model.ExaFile{},
-		model.ExaCustomer{},
-		model.SysBaseMenu{},
-		model.SysWorkflow{},
-		model.SysAuthority{},
-		model.JwtBlacklist{},
-		model.ExaFileChunk{},
-		model.SysDictionary{},
-		model.ExaSimpleUploader{},
-		model.SysOperationRecord{},
-		model.SysWorkflowStepInfo{},
-		model.SysDictionaryDetail{},
-		model.SysBaseMenuParameter{},
-		model.ExaFileUploadAndDownload{},
-	)
-	if err != nil {
-		color.Warn.Printf("[Mysql]-->初始化数据表失败,err: %v\n", err)
-		os.Exit(0)
-	}
-	color.Info.Println("[Mysql]-->初始化数据表成功")
-}
-
-func InitPostgresqlData(db *gorm.DB) {
-	var err error
-	err = InitSysApi(db)
-	err = InitSysUser(db)
-	err = InitExaCustomer(db)
-	err = InitCasbinModel(db)
-	err = InitSysAuthority(db)
-	err = InitSysBaseMenus(db)
-	err = InitAuthorityMenu(db)
-	err = InitSysAuthorityMenus(db)
-	err = InitSysDataAuthorityId(db)
-	err = InitSysDictionaryDetail(db)
-	err = InitExaFileUploadAndDownload(db)
-	err = InitSysDictionaryToPostgresql(db)
-	if err != nil {
-		color.Error.Printf("[Postgresql]-->初始化数据失败,err: %v\n", err)
-		os.Exit(0)
-	}
-	color.Info.Println("[Postgresql]-->初始化数据成功")
-}
-
-func InitPostgresqlTables(db *gorm.DB) {
 	var err error
 	if !db.Migrator().HasTable("casbin_rule") {
 		err = db.Migrator().CreateTable(&gormadapter.CasbinRule{})
@@ -92,17 +44,17 @@ func InitPostgresqlTables(db *gorm.DB) {
 		model.SysAuthority{},
 		model.JwtBlacklist{},
 		model.ExaFileChunk{},
+		model.SysDictionary{},
 		model.ExaSimpleUploader{},
 		model.SysOperationRecord{},
 		model.SysWorkflowStepInfo{},
 		model.SysDictionaryDetail{},
 		model.SysBaseMenuParameter{},
 		model.ExaFileUploadAndDownload{},
-		SysDictionaryToPostgresql{},
 	)
 	if err != nil {
-		color.Error.Printf("[Postgresql]-->初始化数据表失败,err: %v\n", err)
+		color.Warn.Printf("[Mysql]-->初始化数据表失败,err: %v\n", err)
 		os.Exit(0)
 	}
-	color.Info.Println("[Postgresql]-->初始化数据表成功")
-}
+	color.Info.Println("[Mysql]-->初始化数据表成功")
+}

+ 34 - 28
server/cmd/datas/menus.go

@@ -1,6 +1,8 @@
 package datas
 
 import (
+	"gin-vue-admin/global"
+	"github.com/gookit/color"
 	"time"
 
 	"gin-vue-admin/model"
@@ -8,38 +10,42 @@ import (
 )
 
 var BaseMenus = []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"}},
-	{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"}},
-	{Model: gorm.Model{ID: 27, CreatedAt: time.Now(), UpdatedAt: time.Now()}, MenuLevel: 0, ParentId: "0", Path: "state", Name: "state", Hidden: false, Component: "view/system/state.vue", Sort: 6, Meta: model.Meta{Title: "服务器状态", Icon: "cloudy"}},
+	{GVA_MODEL: global.GVA_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"}},
+	{GVA_MODEL: global.GVA_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"}},
+	{GVA_MODEL: global.GVA_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"}},
+	{GVA_MODEL: global.GVA_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"}},
+	{GVA_MODEL: global.GVA_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}},
+	{GVA_MODEL: global.GVA_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}},
+	{GVA_MODEL: global.GVA_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"}},
+	{GVA_MODEL: global.GVA_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"}},
+	{GVA_MODEL: global.GVA_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"}},
+	{GVA_MODEL: global.GVA_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"}},
+	{GVA_MODEL: global.GVA_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"}},
+	{GVA_MODEL: global.GVA_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"}},
+	{GVA_MODEL: global.GVA_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"}},
+	{GVA_MODEL: global.GVA_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"}},
+	{GVA_MODEL: global.GVA_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"}},
+	{GVA_MODEL: global.GVA_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"}},
+	{GVA_MODEL: global.GVA_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"}},
+	{GVA_MODEL: global.GVA_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}},
+	{GVA_MODEL: global.GVA_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}},
+	{GVA_MODEL: global.GVA_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"}},
+	{GVA_MODEL: global.GVA_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"}},
+	{GVA_MODEL: global.GVA_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"}},
+	{GVA_MODEL: global.GVA_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"}},
+	{GVA_MODEL: global.GVA_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"}},
+	{GVA_MODEL: global.GVA_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"}},
+	{GVA_MODEL: global.GVA_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"}},
+	{GVA_MODEL: global.GVA_MODEL{ID: 27, CreatedAt: time.Now(), UpdatedAt: time.Now()}, MenuLevel: 0, ParentId: "0", Path: "state", Name: "state", Hidden: false, Component: "view/system/state.vue", Sort: 6, Meta: model.Meta{Title: "服务器状态", Icon: "cloudy"}},
 }
 
 func InitSysBaseMenus(db *gorm.DB) (err error) {
 	return db.Transaction(func(tx *gorm.DB) error {
-		if tx.Create(&BaseMenus).Error != nil { // 遇到错误时回滚事务
+		if tx.Where("id IN ?", []int{1, 27}).Find(&[]model.SysBaseMenu{}).RowsAffected == 2 {
+			color.Danger.Println("sys_base_menus表的初始数据已存在!")
+			return nil
+		}
+		if err := tx.Create(&BaseMenus).Error; err != nil { // 遇到错误时回滚事务
 			return err
 		}
 		return nil

+ 9 - 3
server/cmd/datas/users.go

@@ -1,6 +1,8 @@
 package datas
 
 import (
+	"gin-vue-admin/global"
+	"github.com/gookit/color"
 	"time"
 
 	"gin-vue-admin/model"
@@ -9,13 +11,17 @@ import (
 )
 
 var Users = []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"},
+	{GVA_MODEL: global.GVA_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"},
+	{GVA_MODEL: global.GVA_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"},
 }
 
 func InitSysUser(db *gorm.DB) (err error) {
 	return db.Transaction(func(tx *gorm.DB) error {
-		if tx.Create(&Users).Error != nil { // 遇到错误时回滚事务
+		if tx.Where("id IN ?", []int{1, 2}).Find(&[]model.SysUser{}).RowsAffected == 2 {
+			color.Danger.Println("sys_users表的初始数据已存在!")
+			return nil
+		}
+		if err := tx.Create(&Users).Error; err != nil { // 遇到错误时回滚事务
 			return err
 		}
 		return nil

+ 1 - 3
server/cmd/gva/initdb.go

@@ -47,8 +47,7 @@ var initdbCmd = &cobra.Command{
 			datas.InitMysqlTables(db)
 			datas.InitMysqlData(db)
 		case "postgresql":
-			datas.InitPostgresqlTables(db)
-			datas.InitPostgresqlData(db)
+			color.Info.Println("postgresql功能开发中")
 		case "sqlite":
 			color.Info.Println("sqlite功能开发中")
 		case "sqlserver":
@@ -56,7 +55,6 @@ var initdbCmd = &cobra.Command{
 		default:
 			datas.InitMysqlTables(db)
 			datas.InitMysqlData(db)
-			color.Info.Println("sqlserver功能开发中")
 		}
 		frame, _ := cmd.Flags().GetString("frame")
 		if frame == "gf" {

+ 1 - 1
server/cmd/gva/version.go

@@ -27,7 +27,7 @@ var versionCmd = &cobra.Command{
 	Short: "版本信息",
 	Long:  `版本的长信息`,
 	Run: func(cmd *cobra.Command, args []string) {
-		color.Green.Println("v0.0.2")
+		color.Green.Println("v0.0.3")
 	},
 }
 

+ 13 - 0
server/global/model.go

@@ -0,0 +1,13 @@
+package global
+
+import (
+	"gorm.io/gorm"
+	"time"
+)
+
+type GVA_MODEL struct {
+	ID        uint `gorm:"primarykey"`
+	CreatedAt time.Time
+	UpdatedAt time.Time
+	DeletedAt gorm.DeletedAt `gorm:"index" json:"-"`
+}

+ 1 - 5
server/go.mod

@@ -5,7 +5,6 @@ go 1.12
 require (
 	github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d // indirect
 	github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751
-	github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6 // indirect
 	github.com/casbin/casbin v1.9.1
 	github.com/casbin/casbin/v2 v2.11.0
 	github.com/casbin/gorm-adapter/v3 v3.0.2
@@ -47,7 +46,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/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77 // indirect
 	go.uber.org/zap v1.10.0
 	golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e // indirect
 	golang.org/x/sys v0.0.0-20200610111108-226ff32320da // indirect
@@ -56,7 +54,5 @@ require (
 	gopkg.in/ini.v1 v1.55.0 // indirect
 	gopkg.in/yaml.v2 v2.3.0 // indirect
 	gorm.io/driver/mysql v0.3.0
-	gorm.io/driver/postgres v0.2.6
-	gorm.io/driver/sqlserver v0.2.4
-	gorm.io/gorm v1.20.1
+	gorm.io/gorm v1.20.5
 )

+ 3 - 3
server/model/exa_breakpoint_continue.go

@@ -1,12 +1,12 @@
 package model
 
 import (
-	"gorm.io/gorm"
+	"gin-vue-admin/global"
 )
 
 // file struct, 文件结构体
 type ExaFile struct {
-	gorm.Model
+	global.GVA_MODEL
 	FileName     string
 	FileMd5      string
 	FilePath     string
@@ -17,7 +17,7 @@ type ExaFile struct {
 
 // file chunk struct, 切片结构体
 type ExaFileChunk struct {
-	gorm.Model
+	global.GVA_MODEL
 	ExaFileID       uint
 	FileChunkNumber int
 	FileChunkPath   string

+ 2 - 2
server/model/exa_customer.go

@@ -1,11 +1,11 @@
 package model
 
 import (
-	"gorm.io/gorm"
+	"gin-vue-admin/global"
 )
 
 type ExaCustomer struct {
-	gorm.Model
+	global.GVA_MODEL
 	CustomerName       string  `json:"customerName" form:"customerName" gorm:"comment:客户名"`
 	CustomerPhoneData  string  `json:"customerPhoneData" form:"customerPhoneData" gorm:"comment:客户手机号"`
 	SysUserID          uint    `json:"sysUserId" form:"sysUserId" gorm:"comment:管理ID"`

+ 2 - 2
server/model/exa_file_upload_download.go

@@ -1,11 +1,11 @@
 package model
 
 import (
-	"gorm.io/gorm"
+	"gin-vue-admin/global"
 )
 
 type ExaFileUploadAndDownload struct {
-	gorm.Model
+	global.GVA_MODEL
 	Name string `json:"name" gorm:"comment:文件名"`
 	Url  string `json:"url" gorm:"comment:文件地址"`
 	Tag  string `json:"tag" gorm:"comment:文件标签"`

+ 2 - 2
server/model/sys_api.go

@@ -1,11 +1,11 @@
 package model
 
 import (
-	"gorm.io/gorm"
+	"gin-vue-admin/global"
 )
 
 type SysApi struct {
-	gorm.Model
+	global.GVA_MODEL
 	Path        string `json:"path" gorm:"comment:api路径"`
 	Description string `json:"description" gorm:"comment:api中文描述"`
 	ApiGroup    string `json:"apiGroup" gorm:"comment:api组"`

+ 3 - 3
server/model/sys_base_menu.go

@@ -1,11 +1,11 @@
 package model
 
 import (
-	"gorm.io/gorm"
+	"gin-vue-admin/global"
 )
 
 type SysBaseMenu struct {
-	gorm.Model
+	global.GVA_MODEL
 	MenuLevel     uint   `json:"-"`
 	ParentId      string `json:"parentId" gorm:"comment:父菜单ID"`
 	Path          string `json:"path" gorm:"comment:路由path"`
@@ -27,7 +27,7 @@ type Meta struct {
 }
 
 type SysBaseMenuParameter struct {
-	gorm.Model
+	global.GVA_MODEL
 	SysBaseMenuID uint
 	Type          string `json:"type" gorm:"commit:'地址栏携带参数为params还是query'"`
 	Key           string `json:"key" gorm:"commit:'地址栏携带参数的key'"`

+ 2 - 2
server/model/sys_dictionary.go

@@ -2,12 +2,12 @@
 package model
 
 import (
-	"gorm.io/gorm"
+	"gin-vue-admin/global"
 )
 
 // 如果含有time.Time 请自行import time包
 type SysDictionary struct {
-	gorm.Model
+	global.GVA_MODEL
 	Name                 string                `json:"name" form:"name" gorm:"column:name;comment:字典名(中)"`
 	Type                 string                `json:"type" form:"type" gorm:"column:type;comment:字典名(英)"`
 	Status               *bool                 `json:"status" form:"status" gorm:"column:status;comment:状态"`

+ 2 - 2
server/model/sys_dictionary_detail.go

@@ -2,12 +2,12 @@
 package model
 
 import (
-	"gorm.io/gorm"
+	"gin-vue-admin/global"
 )
 
 // 如果含有time.Time 请自行import time包
 type SysDictionaryDetail struct {
-	gorm.Model
+	global.GVA_MODEL
 	Label           string `json:"label" form:"label" gorm:"column:label;comment:展示值"`
 	Value           int    `json:"value" form:"value" gorm:"column:value;comment:字典值"`
 	Status          *bool  `json:"status" form:"status" gorm:"column:status;comment:启用状态"`

+ 2 - 2
server/model/sys_jwt_blacklist.go

@@ -1,10 +1,10 @@
 package model
 
 import (
-	"gorm.io/gorm"
+	"gin-vue-admin/global"
 )
 
 type JwtBlacklist struct {
-	gorm.Model
+	global.GVA_MODEL
 	Jwt string `gorm:"type:text;comment:jwt"`
 }

+ 2 - 2
server/model/sys_operation_record.go

@@ -2,13 +2,13 @@
 package model
 
 import (
-	"gorm.io/gorm"
+	"gin-vue-admin/global"
 	"time"
 )
 
 // 如果含有time.Time 请自行import time包
 type SysOperationRecord struct {
-	gorm.Model
+	global.GVA_MODEL
 	Ip           string        `json:"ip" form:"ip" gorm:"column:ip;comment:请求ip"`
 	Method       string        `json:"method" form:"method" gorm:"column:method;comment:请求方法"`
 	Path         string        `json:"path" form:"path" gorm:"column:path;comment:请求路径"`

+ 2 - 2
server/model/sys_user.go

@@ -1,12 +1,12 @@
 package model
 
 import (
+	"gin-vue-admin/global"
 	"github.com/satori/go.uuid"
-	"gorm.io/gorm"
 )
 
 type SysUser struct {
-	gorm.Model
+	global.GVA_MODEL
 	UUID        uuid.UUID    `json:"uuid" gorm:"comment:用户UUID"`
 	Username    string       `json:"userName" gorm:"comment:用户登录名"`
 	Password    string       `json:"-"  gorm:"comment:用户登录密码"`

+ 3 - 3
server/model/sys_workflow.go

@@ -1,12 +1,12 @@
 package model
 
 import (
-	"gorm.io/gorm"
+	"gin-vue-admin/global"
 )
 
 // 工作流属性表
 type SysWorkflow struct {
-	gorm.Model
+	global.GVA_MODEL
 	WorkflowNickName    string                `json:"workflowNickName" gorm:"comment:工作流中文名称"`  // 工作流名称
 	WorkflowName        string                `json:"workflowName" gorm:"comment:工作流英文名称"`      // 工作流英文id
 	WorkflowDescription string                `json:"workflowDescription" gorm:"comment:工作流描述"` // 工作流描述
@@ -15,7 +15,7 @@ type SysWorkflow struct {
 
 // 工作流状态表
 type SysWorkflowStepInfo struct {
-	gorm.Model
+	global.GVA_MODEL
 	SysWorkflowID   uint    `json:"workflowID" gorm:"comment:所属工作流ID"`      // 所属工作流ID
 	IsStart         bool    `json:"isStart" gorm:"comment:是否是开始流节点"`        // 是否是开始流节点
 	StepName        string  `json:"stepName" gorm:"comment:工作流节点名称"`        // 工作流名称

+ 4 - 2
server/model/sys_workflow_process.go

@@ -1,10 +1,12 @@
 package model
 
-import "gorm.io/gorm"
+import (
+	"gin-vue-admin/global"
+)
 
 // 工作流流转表
 type SysWorkFlowProcess struct {
-	gorm.Model
+	global.GVA_MODEL
 	ApplicationID  uint   `json:"applicationID" gorm:"comment:当前工作流所属申请的ID"` // 当前工作流所属申请的ID
 	CurrentNode    string `json:"currentNode" gorm:"comment:当前进度节点"`         // 当前进度节点
 	HistoricalNode string `json:"historicalNode" gorm:"comment:上一个进度节点"`     // 上一个进度节点

+ 2 - 2
server/resource/template/te/model.go.tpl

@@ -2,12 +2,12 @@
 package model
 
 import (
-	"gorm.io/gorm"
+	"gin-vue-admin/global"
 )
 
 // 如果含有time.Time 请自行import time包
 type {{.StructName}} struct {
-      gorm.Model {{- range .Fields}}
+      global.GVA_MODEL {{- range .Fields}}
             {{- if eq .FieldType "bool" }}
       {{.FieldName}}  *{{.FieldType}} `json:"{{.FieldJson}}" form:"{{.FieldJson}}" gorm:"column:{{.ColumnName}};comment:{{.Comment}}{{- if .DataType -}};type:{{.DataType}}{{- if .DataTypeLong -}}({{.DataTypeLong}}){{- end -}};{{- if .DataTypeLong -}}size:{{.DataTypeLong}};{{- end -}}{{- end -}}"`
             {{- else }}

+ 2 - 1
server/service/sys_api.go

@@ -15,7 +15,8 @@ import (
 // @return                    error
 
 func CreateApi(api model.SysApi) (err error) {
-	if !errors.Is(global.GVA_DB.Where("path = ? AND method = ?", api.Path, api.Method).First(&model.SysApi{}).Error, gorm.ErrRecordNotFound){
+
+	if !errors.Is(global.GVA_DB.Where("path = ? AND method = ?", api.Path, api.Method).First(&model.SysApi{}).Error, gorm.ErrRecordNotFound) {
 		return errors.New("存在相同api")
 	}
 	return global.GVA_DB.Create(&api).Error

+ 1 - 1
web/src/api/user.js

@@ -110,4 +110,4 @@ export const setUserInfo = (data) => {
         method: 'put',
         data: data
     })
-}
+}

+ 0 - 0
web/src/utils/data.js → web/src/utils/date.js


+ 1 - 1
web/src/view/example/upload/upload.vue

@@ -85,7 +85,7 @@ import { mapGetters } from "vuex";
 import infoList from "@/mixins/infoList";
 import { getFileList, deleteFile } from "@/api/fileUploadAndDownload";
 import { downloadImage } from "@/utils/downloadImg";
-import { formatTimeToStr } from "@/utils/data";
+import { formatTimeToStr } from "@/utils/date";
 import CustomPic from "@/components/customPic";
 import UploadImage from "@/components/upload/image.vue";
 export default {

+ 5 - 0
web/src/view/superAdmin/dictionary/sysDictionaryDetail.vue

@@ -114,8 +114,13 @@ import {
   findSysDictionaryDetail,
   getSysDictionaryDetailList
 } from "@/api/sysDictionaryDetail"; //  此处请自行替换地址
+<<<<<<< HEAD
 import { formatTimeToStr } from "@/utils/data";
 import infoList from "@/mixins/infoList";
+=======
+import { formatTimeToStr } from "@/utils/date";
+import infoList from "@/components/mixins/infoList";
+>>>>>>> 439ffe64d529496a87535ed9ec234002c41b4f09
 
 export default {
   name: "SysDictionaryDetail",