Browse Source

Merge branch 'gin-vue-admin_v2_dev' of
https://github.com/flipped-aurora/gin-vue-admin into
gin-vue-admin_v2_dev

klausY 4 years ago
parent
commit
2d7c6a7fd1
63 changed files with 366 additions and 348 deletions
  1. 27 28
      server/api/v1/exa_breakpoint_continue.go
  2. 2 2
      server/api/v1/exa_file_upload_download.go
  3. 1 1
      server/api/v1/sys_api.go
  4. 2 2
      server/api/v1/sys_authority.go
  5. 6 6
      server/api/v1/sys_auto_code.go
  6. 1 1
      server/api/v1/sys_menu.go
  7. 1 1
      server/api/v1/sys_system.go
  8. 48 51
      server/api/v1/sys_user.go
  9. 5 5
      server/api/v1/sys_work_flow.go
  10. 2 2
      server/config/config.go
  11. 2 2
      server/global/response/response.go
  12. 1 1
      server/initialize/db_table.go
  13. 1 1
      server/initialize/mysql.go
  14. 2 2
      server/initialize/router.go
  15. 16 16
      server/initialize/sqlite.go
  16. 1 1
      server/main.go
  17. 5 5
      server/middleware/casbin_rcba.go
  18. 1 1
      server/middleware/cors.go
  19. 6 6
      server/middleware/jwt.go
  20. 1 1
      server/middleware/loadtls.go
  21. 1 1
      server/model/exa_breakpoint_continue.go
  22. 1 1
      server/model/exa_customer.go
  23. 1 1
      server/model/exa_file_upload_download.go
  24. 1 1
      server/model/request/jwt.go
  25. 1 1
      server/model/request/sys_api.go
  26. 1 1
      server/model/request/sys_menu.go
  27. 1 1
      server/model/request/sys_user.go
  28. 1 1
      server/model/response/exa_breakpoint_continue.go
  29. 1 1
      server/model/sys_api.go
  30. 1 1
      server/model/sys_authority.go
  31. 1 1
      server/model/sys_authority_menu.go
  32. 1 1
      server/model/sys_casbin.go
  33. 1 1
      server/model/sys_jwt_blacklist.go
  34. 2 2
      server/model/sys_system.go
  35. 1 1
      server/model/sys_user.go
  36. 2 2
      server/model/sys_workflow.go
  37. 1 1
      server/model/sys_workflow_process.go
  38. 2 2
      server/router/exp_customer.go
  39. 1 1
      server/router/exp_file_upload_and_download.go
  40. 5 5
      server/router/sys_api.go
  41. 6 6
      server/router/sys_authority.go
  42. 1 1
      server/router/sys_auto_code.go
  43. 1 1
      server/router/sys_jwt.go
  44. 2 2
      server/router/sys_menu.go
  45. 3 3
      server/router/sys_user.go
  46. 2 2
      server/service/sys_authority.go
  47. 3 3
      server/service/sys_auto_code.go
  48. 2 2
      server/service/sys_casbin.go
  49. 16 16
      server/service/sys_menu.go
  50. 3 3
      server/service/sys_user.go
  51. 1 1
      server/utils/breakpoint_continue.go
  52. 0 1
      server/utils/des.go
  53. 5 5
      server/utils/directory.go
  54. 1 1
      server/utils/upload.go
  55. 9 9
      server/utils/validator.go
  56. 1 1
      server/utils/zipfiles.go
  57. 1 1
      web/src/style/main.scss
  58. 22 23
      web/src/view/example/breakpoint/breakpoint.vue
  59. 1 1
      web/src/view/example/customer/customer.vue
  60. 4 4
      web/src/view/example/table/table.vue
  61. 2 2
      web/src/view/example/upload/upload.vue
  62. 1 1
      web/src/view/superAdmin/authority/authority.vue
  63. 121 97
      web/src/view/superAdmin/menu/menu.vue

+ 27 - 28
server/api/v1/exa_breakpoint_continue.go

@@ -3,7 +3,6 @@ package v1
 import (
 	"fmt"
 	"gin-vue-admin/global/response"
-	_ "gin-vue-admin/model/response"
 	resp "gin-vue-admin/model/response"
 	"gin-vue-admin/service"
 	"gin-vue-admin/utils"
@@ -29,34 +28,34 @@ func BreakpointContinue(c *gin.Context) {
 	_, FileHeader, err := c.Request.FormFile("file")
 	if err != nil {
 		response.FailWithMessage(err.Error(), c)
-	} else {
-		f, err := FileHeader.Open()
-		if err != nil {
-			response.FailWithMessage(err.Error(), c)
-		} else {
-			cen, _ := ioutil.ReadAll(f)
-			defer f.Close()
-			if flag := utils.CheckMd5(cen, chunkMd5); flag {
-				err, file := service.FindOrCreateFile(fileMd5, fileName, chunkTotal)
-				if err != nil {
-					response.FailWithMessage(err.Error(), c)
-				} else {
-					err, pathc := utils.BreakPointContinue(cen, fileName, chunkNumber, chunkTotal, fileMd5)
-					if err != nil {
-						response.FailWithMessage(err.Error(), c)
-					} else {
-						err = service.CreateFileChunk(file.ID, pathc, chunkNumber)
-						if err != nil {
-							response.FailWithMessage(err.Error(), c)
-						} else {
-							response.OkWithMessage("切片创建成功", c)
-						}
-					}
-				}
-			} else {
-			}
-		}
+		return
+	}
+	f, err := FileHeader.Open()
+	if err != nil {
+		response.FailWithMessage(err.Error(), c)
+		return
+	}
+	defer f.Close()
+	cen, _ := ioutil.ReadAll(f)
+	if flag := utils.CheckMd5(cen, chunkMd5); !flag {
+		return
+	}
+	err, file := service.FindOrCreateFile(fileMd5, fileName, chunkTotal)
+	if err != nil {
+		response.FailWithMessage(err.Error(), c)
+		return
+	}
+	err, pathc := utils.BreakPointContinue(cen, fileName, chunkNumber, chunkTotal, fileMd5)
+	if err != nil {
+		response.FailWithMessage(err.Error(), c)
+		return
+	}
+
+	if err = service.CreateFileChunk(file.ID, pathc, chunkNumber); err != nil {
+		response.FailWithMessage(err.Error(), c)
+		return
 	}
+	response.OkWithMessage("切片创建成功", c)
 }
 
 // @Tags ExaFileUploadAndDownload

+ 2 - 2
server/api/v1/exa_file_upload_download.go

@@ -26,12 +26,12 @@ func UploadFile(c *gin.Context) {
 	if err != nil {
 		response.FailWithMessage(fmt.Sprintf("上传文件失败,%v", err), c)
 	} else {
-		//文件上传后拿到文件路径
+		// 文件上传后拿到文件路径
 		err, filePath, key := utils.Upload(header)
 		if err != nil {
 			response.FailWithMessage(fmt.Sprintf("接收返回值失败,%v", err), c)
 		} else {
-			//修改数据库后得到修改后的user并且返回供前端使用
+			// 修改数据库后得到修改后的user并且返回供前端使用
 			var file model.ExaFileUploadAndDownload
 			file.Url = filePath
 			file.Name = header.Filename

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

@@ -68,7 +68,7 @@ func DeleteApi(c *gin.Context) {
 	}
 }
 
-//条件搜索后端看此api
+// 条件搜索后端看此api
 
 // @Tags SysApi
 // @Summary 分页获取API列表

+ 2 - 2
server/api/v1/sys_authority.go

@@ -93,7 +93,7 @@ func DeleteAuthority(c *gin.Context) {
 		response.FailWithMessage(AuthorityIdVerifyErr.Error(), c)
 		return
 	}
-	//删除角色之前需要判断是否有用户正在使用此角色
+	// 删除角色之前需要判断是否有用户正在使用此角色
 	err := service.DeleteAuthority(&a)
 	if err != nil {
 		response.FailWithMessage(fmt.Sprintf("删除失败,%v", err), c)
@@ -127,7 +127,7 @@ func UpdateAuthority(c *gin.Context) {
 	if err != nil {
 		response.FailWithMessage(fmt.Sprintf("更新失败,%v", err), c)
 	} else {
-		response.OkWithData(resp.SysAuthorityResponse{authority}, c)
+		response.OkWithData(resp.SysAuthorityResponse{Authority: authority}, c)
 	}
 }
 

+ 6 - 6
server/api/v1/sys_auto_code.go

@@ -23,13 +23,13 @@ func CreateTemp(c *gin.Context) {
 	var a model.AutoCodeStruct
 	_ = c.ShouldBindJSON(&a)
 	AutoCodeVerify := utils.Rules{
-		"Abbreviation":      {utils.NotEmpty()},
-		"StructName":      {utils.NotEmpty()},
-		"PackageName":      {utils.NotEmpty()},
-		"Fields":      {utils.NotEmpty()},
+		"Abbreviation": {utils.NotEmpty()},
+		"StructName":   {utils.NotEmpty()},
+		"PackageName":  {utils.NotEmpty()},
+		"Fields":       {utils.NotEmpty()},
 	}
 	WKVerifyErr := utils.Verify(a, AutoCodeVerify)
-	if WKVerifyErr!=nil {
+	if WKVerifyErr != nil {
 		response.FailWithMessage(WKVerifyErr.Error(), c)
 		return
 	}
@@ -80,7 +80,7 @@ func CreateTemp(c *gin.Context) {
 		response.FailWithMessage(fmt.Sprintf("创建失败,%v", err), c)
 		os.Remove("./ginvueadmin.zip")
 	} else {
-		c.Writer.Header().Add("Content-Disposition", fmt.Sprintf("attachment; filename=%s", "ginvueadmin.zip")) //fmt.Sprintf("attachment; filename=%s", filename)对下载的文件重命名
+		c.Writer.Header().Add("Content-Disposition", fmt.Sprintf("attachment; filename=%s", "ginvueadmin.zip")) // fmt.Sprintf("attachment; filename=%s", filename)对下载的文件重命名
 		c.Writer.Header().Add("Content-Type", "application/json")
 		c.Writer.Header().Add("success", "true")
 		c.File("./ginvueadmin.zip")

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

@@ -70,7 +70,7 @@ func AddBaseMenu(c *gin.Context) {
 	var menu model.SysBaseMenu
 	_ = c.ShouldBindJSON(&menu)
 	MenuVerify := utils.Rules{
-		"Path":      {"notEmpty"},
+		"Path":      {utils.NotEmpty()},
 		"ParentId":  {utils.NotEmpty()},
 		"Name":      {utils.NotEmpty()},
 		"Component": {utils.NotEmpty()},

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

@@ -42,7 +42,7 @@ func SetSystemConfig(c *gin.Context) {
 	}
 }
 
-//本方法开发中 开发者windows系统 缺少linux系统所需的包 因此搁置
+// 本方法开发中 开发者windows系统 缺少linux系统所需的包 因此搁置
 // @Tags system
 // @Summary 设置配置文件内容
 // @Security ApiKeyAuth

+ 48 - 51
server/api/v1/sys_user.go

@@ -80,10 +80,10 @@ func Login(c *gin.Context) {
 
 }
 
-//登录以后签发jwt
+// 登录以后签发jwt
 func tokenNext(c *gin.Context, user model.SysUser) {
 	j := &middleware.JWT{
-		[]byte(global.GVA_CONFIG.JWT.SigningKey), // 唯一签名
+		SigningKey: []byte(global.GVA_CONFIG.JWT.SigningKey), // 唯一签名
 	}
 	clams := request.CustomClaims{
 		UUID:        user.UUID,
@@ -91,58 +91,55 @@ func tokenNext(c *gin.Context, user model.SysUser) {
 		NickName:    user.NickName,
 		AuthorityId: user.AuthorityId,
 		StandardClaims: jwt.StandardClaims{
-			NotBefore: int64(time.Now().Unix() - 1000),       // 签名生效时间
-			ExpiresAt: int64(time.Now().Unix() + 60*60*24*7), // 过期时间 一周
-			Issuer:    "qmPlus",                              //签名的发行者
+			NotBefore: time.Now().Unix() - 1000,       // 签名生效时间
+			ExpiresAt: time.Now().Unix() + 60*60*24*7, // 过期时间 一周
+			Issuer:    "qmPlus",                       // 签名的发行者
 		},
 	}
 	token, err := j.CreateToken(clams)
 	if err != nil {
 		response.FailWithMessage("获取token失败", c)
+		return
+	}
+	if !global.GVA_CONFIG.System.UseMultipoint {
+		response.OkWithData(resp.LoginResponse{
+			User:      user,
+			Token:     token,
+			ExpiresAt: clams.StandardClaims.ExpiresAt * 1000,
+		}, c)
+		return
+	}
+	var loginJwt model.JwtBlacklist
+	loginJwt.Jwt = token
+	err, jwtStr := service.GetRedisJWT(user.Username)
+	if err == redis.Nil {
+		if err := service.SetRedisJWT(loginJwt, user.Username); err != nil {
+			response.FailWithMessage("设置登录状态失败", c)
+			return
+		}
+		response.OkWithData(resp.LoginResponse{
+			User:      user,
+			Token:     token,
+			ExpiresAt: clams.StandardClaims.ExpiresAt * 1000,
+		}, c)
+	} else if err != nil {
+		response.FailWithMessage(fmt.Sprintf("%v", err), c)
 	} else {
-		if global.GVA_CONFIG.System.UseMultipoint {
-			var loginJwt model.JwtBlacklist
-			loginJwt.Jwt = token
-			err, jwtStr := service.GetRedisJWT(user.Username)
-			if err == redis.Nil {
-				err2 := service.SetRedisJWT(loginJwt, user.Username)
-				if err2 != nil {
-					response.FailWithMessage("设置登录状态失败", c)
-				} else {
-					response.OkWithData(resp.LoginResponse{
-						User:      user,
-						Token:     token,
-						ExpiresAt: clams.StandardClaims.ExpiresAt * 1000,
-					}, c)
-				}
-			} else if err != nil {
-				response.FailWithMessage(fmt.Sprintf("%v", err), c)
-			} else {
-				var blackJWT model.JwtBlacklist
-				blackJWT.Jwt = jwtStr
-				err3 := service.JsonInBlacklist(blackJWT)
-				if err3 != nil {
-					response.FailWithMessage("jwt作废失败", c)
-				} else {
-					err2 := service.SetRedisJWT(loginJwt, user.Username)
-					if err2 != nil {
-						response.FailWithMessage("设置登录状态失败", c)
-					} else {
-						response.OkWithData(resp.LoginResponse{
-							User:      user,
-							Token:     token,
-							ExpiresAt: clams.StandardClaims.ExpiresAt * 1000,
-						}, c)
-					}
-				}
-			}
-		} else {
-			response.OkWithData(resp.LoginResponse{
-				User:      user,
-				Token:     token,
-				ExpiresAt: clams.StandardClaims.ExpiresAt * 1000,
-			}, c)
+		var blackJWT model.JwtBlacklist
+		blackJWT.Jwt = jwtStr
+		if err := service.JsonInBlacklist(blackJWT); err != nil {
+			response.FailWithMessage("jwt作废失败", c)
+			return
+		}
+		if err := service.SetRedisJWT(loginJwt, user.Username); err != nil {
+			response.FailWithMessage("设置登录状态失败", c)
+			return
 		}
+		response.OkWithData(resp.LoginResponse{
+			User:      user,
+			Token:     token,
+			ExpiresAt: clams.StandardClaims.ExpiresAt * 1000,
+		}, c)
 	}
 }
 
@@ -189,21 +186,21 @@ type UserHeaderImg struct {
 // @Router /user/uploadHeaderImg [post]
 func UploadHeaderImg(c *gin.Context) {
 	claims, _ := c.Get("claims")
-	//获取头像文件
+	// 获取头像文件
 	// 这里我们通过断言获取 claims内的所有内容
 	waitUse := claims.(*request.CustomClaims)
 	uuid := waitUse.UUID
 	_, header, err := c.Request.FormFile("headerImg")
-	//便于找到用户 以后从jwt中取
+	// 便于找到用户 以后从jwt中取
 	if err != nil {
 		response.FailWithMessage(fmt.Sprintf("上传文件失败,%v", err), c)
 	} else {
-		//文件上传后拿到文件路径
+		// 文件上传后拿到文件路径
 		err, filePath, _ := utils.Upload(header)
 		if err != nil {
 			response.FailWithMessage(fmt.Sprintf("接收返回值失败,%v", err), c)
 		} else {
-			//修改数据库后得到修改后的user并且返回供前端使用
+			// 修改数据库后得到修改后的user并且返回供前端使用
 			err, user := service.UploadHeaderImg(uuid, filePath)
 			if err != nil {
 				response.FailWithMessage(fmt.Sprintf("修改数据库链接失败,%v", err), c)

+ 5 - 5
server/api/v1/sys_work_flow.go

@@ -19,13 +19,13 @@ func CreateWorkFlow(c *gin.Context) {
 	var wk model.SysWorkflow
 	_ = c.ShouldBindJSON(&wk)
 	WKVerify := utils.Rules{
-		"WorkflowNickName":      {utils.NotEmpty()},
-		"WorkflowName":  {utils.NotEmpty()},
-		"WorkflowDescription":      {utils.NotEmpty()},
-		"WorkflowStepInfo":      {utils.NotEmpty()},
+		"WorkflowNickName":    {utils.NotEmpty()},
+		"WorkflowName":        {utils.NotEmpty()},
+		"WorkflowDescription": {utils.NotEmpty()},
+		"WorkflowStepInfo":    {utils.NotEmpty()},
 	}
 	WKVerifyErr := utils.Verify(wk, WKVerify)
-	if WKVerifyErr!=nil {
+	if WKVerifyErr != nil {
 		response.FailWithMessage(WKVerifyErr.Error(), c)
 		return
 	}

+ 2 - 2
server/config/config.go

@@ -46,8 +46,8 @@ type Redis struct {
 type Qiniu struct {
 	AccessKey string `mapstructure:"access-key" json:"accessKey" yaml:"access-key"`
 	SecretKey string `mapstructure:"secret-key" json:"secretKey" yaml:"secret-key"`
-	Bucket string `mapstructure:"bucket" json:"bucket" yaml:"bucket"`
-	ImgPath string `mapstructure:"img-path" json:"imgPath" yaml:"img-path"`
+	Bucket    string `mapstructure:"bucket" json:"bucket" yaml:"bucket"`
+	ImgPath   string `mapstructure:"img-path" json:"imgPath" yaml:"img-path"`
 }
 
 type Captcha struct {

+ 2 - 2
server/global/response/response.go

@@ -50,5 +50,5 @@ func FailWithMessage(message string, c *gin.Context) {
 }
 
 func FailWithDetailed(code int, data interface{}, message string, c *gin.Context) {
-	Result(code, data, message, c )
-}
+	Result(code, data, message, c)
+}

+ 1 - 1
server/initialize/db_table.go

@@ -5,7 +5,7 @@ import (
 	"gin-vue-admin/model"
 )
 
-//注册数据库表专用
+// 注册数据库表专用
 func DBTables() {
 	db := global.GVA_DB
 	db.AutoMigrate(model.SysUser{},

+ 1 - 1
server/initialize/mysql.go

@@ -7,7 +7,7 @@ import (
 	"os"
 )
 
-//初始化数据库并产生数据库全局变量
+// 初始化数据库并产生数据库全局变量
 func Mysql() {
 	admin := global.GVA_CONFIG.Mysql
 	if db, err := gorm.Open("mysql", admin.Username+":"+admin.Password+"@("+admin.Path+")/"+admin.Dbname+"?"+admin.Config); err != nil {

+ 2 - 2
server/initialize/router.go

@@ -10,11 +10,11 @@ import (
 	"github.com/swaggo/gin-swagger/swaggerFiles"
 )
 
-//初始化总路由
+// 初始化总路由
 
 func Routers() *gin.Engine {
 	var Router = gin.Default()
-	//Router.Use(middleware.LoadTls())  // 打开就能玩https了
+	// Router.Use(middleware.LoadTls())  // 打开就能玩https了
 	global.GVA_LOG.Debug("use middleware logger")
 	// 跨域
 	Router.Use(middleware.Cors())

+ 16 - 16
server/initialize/sqlite.go

@@ -4,20 +4,20 @@ package initialize
 
 // 感谢 sqlitet提供者 [rikugun] 作者github: https://github.com/rikugun
 
-//import (
-//	"fmt"
-//	"gin-vue-admin/global"
-//	"github.com/jinzhu/gorm"
-//	_ "github.com/jinzhu/gorm/dialects/sqlite"
-//)
+// import (
+// 	"fmt"
+// 	"gin-vue-admin/global"
+// 	"github.com/jinzhu/gorm"
+// 	_ "github.com/jinzhu/gorm/dialects/sqlite"
+// )
 //
-////初始化数据库并产生数据库全局变量
-//func Sqlite() {
-//	admin := global.GVA_CONFIG.Sqlite
-//	if db, err := gorm.Open("sqlite3", fmt.Sprintf("%s?%s", admin.Path,admin.Config)); err != nil {
-//		global.GVA_LOG.Error("DEFAULTDB数据库启动异常", err)
-//	} else {
-//		global.GVA_DB = db
-//		global.GVA_DB.LogMode(admin.LogMode)
-//	}
-//}
+// // 初始化数据库并产生数据库全局变量
+// func Sqlite() {
+// 	admin := global.GVA_CONFIG.Sqlite
+// 	if db, err := gorm.Open("sqlite3", fmt.Sprintf("%s?%s", admin.Path,admin.Config)); err != nil {
+// 		global.GVA_LOG.Error("DEFAULTDB数据库启动异常", err)
+// 	} else {
+// 		global.GVA_DB = db
+// 		global.GVA_DB.LogMode(admin.LogMode)
+// 	}
+// }

+ 1 - 1
server/main.go

@@ -18,7 +18,7 @@ func main() {
 	switch global.GVA_CONFIG.System.DbType {
 	case "mysql":
 		initialize.Mysql()
-	//case "sqlite":
+	// case "sqlite":
 	//	initialize.Sqlite()  // sqlite需要gcc支持 windows用户需要自行安装gcc 如需使用打开注释即可
 	default:
 		initialize.Mysql()

+ 5 - 5
server/middleware/casbin_rcba.go

@@ -8,19 +8,19 @@ import (
 	"github.com/gin-gonic/gin"
 )
 
-//拦截器
+// 拦截器
 func CasbinHandler() gin.HandlerFunc {
 	return func(c *gin.Context) {
 		claims, _ := c.Get("claims")
 		waitUse := claims.(*request.CustomClaims)
-		//获取请求的URI
+		// 获取请求的URI
 		obj := c.Request.URL.RequestURI()
-		//获取请求方法
+		// 获取请求方法
 		act := c.Request.Method
-		//获取用户的角色
+		// 获取用户的角色
 		sub := waitUse.AuthorityId
 		e := service.Casbin()
-		//判断策略中是否存在
+		// 判断策略中是否存在
 		if global.GVA_CONFIG.System.Env == "develop" || e.Enforce(sub, obj, act) {
 			c.Next()
 		} else {

+ 1 - 1
server/middleware/cors.go

@@ -15,7 +15,7 @@ func Cors() gin.HandlerFunc {
 		c.Header("Access-Control-Expose-Headers", "Content-Length, Access-Control-Allow-Origin, Access-Control-Allow-Headers, Content-Type")
 		c.Header("Access-Control-Allow-Credentials", "true")
 
-		//放行所有OPTIONS方法
+		// 放行所有OPTIONS方法
 		if method == "OPTIONS" {
 			c.AbortWithStatus(http.StatusNoContent)
 		}

+ 6 - 6
server/middleware/jwt.go

@@ -60,10 +60,10 @@ type JWT struct {
 }
 
 var (
-	TokenExpired     error = errors.New("Token is expired")
-	TokenNotValidYet error = errors.New("Token not active yet")
-	TokenMalformed   error = errors.New("That's not even a token")
-	TokenInvalid     error = errors.New("Couldn't handle this token:")
+	TokenExpired     = errors.New("Token is expired")
+	TokenNotValidYet = errors.New("Token not active yet")
+	TokenMalformed   = errors.New("That's not even a token")
+	TokenInvalid     = errors.New("Couldn't handle this token:")
 )
 
 func NewJWT() *JWT {
@@ -72,13 +72,13 @@ func NewJWT() *JWT {
 	}
 }
 
-//创建一个token
+// 创建一个token
 func (j *JWT) CreateToken(claims request.CustomClaims) (string, error) {
 	token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
 	return token.SignedString(j.SigningKey)
 }
 
-//解析 token
+// 解析 token
 func (j *JWT) ParseToken(tokenString string) (*request.CustomClaims, error) {
 	token, err := jwt.ParseWithClaims(tokenString, &request.CustomClaims{}, func(token *jwt.Token) (i interface{}, e error) {
 		return j.SigningKey, nil

+ 1 - 1
server/middleware/loadtls.go

@@ -16,7 +16,7 @@ func LoadTls() gin.HandlerFunc {
 		})
 		err := middleware.Process(c.Writer, c.Request)
 		if err != nil {
-			//如果出现错误,请不要继续
+			// 如果出现错误,请不要继续
 			fmt.Println(err)
 			return
 		}

+ 1 - 1
server/model/exa_breakpoint_continue.go

@@ -21,4 +21,4 @@ type ExaFileChunk struct {
 	ExaFileId       uint
 	FileChunkNumber int
 	FileChunkPath   string
-}
+}

+ 1 - 1
server/model/exa_customer.go

@@ -11,4 +11,4 @@ type ExaCustomer struct {
 	SysUserID          uint    `json:"sysUserId" form:"sysUserId"`
 	SysUserAuthorityID string  `json:"sysUserAuthorityID" form:"sysUserAuthorityID"`
 	SysUser            SysUser `json:"sysUser" form:"sysUser"`
-}
+}

+ 1 - 1
server/model/exa_file_upload_download.go

@@ -10,4 +10,4 @@ type ExaFileUploadAndDownload struct {
 	Url  string `json:"url"`
 	Tag  string `json:"tag"`
 	Key  string `json:"key"`
-}
+}

+ 1 - 1
server/model/request/jwt.go

@@ -12,4 +12,4 @@ type CustomClaims struct {
 	NickName    string
 	AuthorityId string
 	jwt.StandardClaims
-}
+}

+ 1 - 1
server/model/request/sys_api.go

@@ -2,7 +2,7 @@ package request
 
 import "gin-vue-admin/model"
 
-//api分页条件查询及排序结构体
+// api分页条件查询及排序结构体
 type SearchApiParams struct {
 	model.SysApi
 	PageInfo

+ 1 - 1
server/model/request/sys_menu.go

@@ -11,4 +11,4 @@ type AddMenuAuthorityInfo struct {
 // Get role by id structure
 type AuthorityIdInfo struct {
 	AuthorityId string
-}
+}

+ 1 - 1
server/model/request/sys_user.go

@@ -30,4 +30,4 @@ type ChangePasswordStruct struct {
 type SetUserAuth struct {
 	UUID        uuid.UUID `json:"uuid"`
 	AuthorityId string    `json:"authorityId"`
-}
+}

+ 1 - 1
server/model/response/exa_breakpoint_continue.go

@@ -8,4 +8,4 @@ type FilePathResponse struct {
 
 type FileResponse struct {
 	File model.ExaFile `json:"file"`
-}
+}

+ 1 - 1
server/model/sys_api.go

@@ -10,4 +10,4 @@ type SysApi struct {
 	Description string `json:"description"`
 	ApiGroup    string `json:"apiGroup"`
 	Method      string `json:"method" gorm:"default:'POST'"`
-}
+}

+ 1 - 1
server/model/sys_authority.go

@@ -14,4 +14,4 @@ type SysAuthority struct {
 	DataAuthorityId []SysAuthority `json:"dataAuthorityId" gorm:"many2many:sys_data_authority_id;association_jointable_foreignkey:data_authority_id"`
 	Children        []SysAuthority `json:"children"`
 	SysBaseMenus    []SysBaseMenu  `json:"menus" gorm:"many2many:sys_authority_menus;"`
-}
+}

+ 1 - 1
server/model/sys_authority_menu.go

@@ -5,4 +5,4 @@ type SysMenu struct {
 	MenuId      string    `json:"menuId"`
 	AuthorityId string    `json:"-"`
 	Children    []SysMenu `json:"children"`
-}
+}

+ 1 - 1
server/model/sys_casbin.go

@@ -6,4 +6,4 @@ type CasbinModel struct {
 	AuthorityId string `json:"rolename" gorm:"column:v0"`
 	Path        string `json:"path" gorm:"column:v1"`
 	Method      string `json:"method" gorm:"column:v2"`
-}
+}

+ 1 - 1
server/model/sys_jwt_blacklist.go

@@ -7,4 +7,4 @@ import (
 type JwtBlacklist struct {
 	gorm.Model
 	Jwt string `gorm:"type:text"`
-}
+}

+ 2 - 2
server/model/sys_system.go

@@ -4,7 +4,7 @@ import (
 	"gin-vue-admin/config"
 )
 
-//配置文件结构体
+// 配置文件结构体
 type System struct {
 	Config config.Server
-}
+}

+ 1 - 1
server/model/sys_user.go

@@ -14,4 +14,4 @@ type SysUser struct {
 	HeaderImg   string       `json:"headerImg" gorm:"default:'http://qmplusimg.henrongyi.top/head.png'"`
 	Authority   SysAuthority `json:"authority" gorm:"ForeignKey:AuthorityId;AssociationForeignKey:AuthorityId"`
 	AuthorityId string       `json:"authorityId" gorm:"default:888"`
-}
+}

+ 2 - 2
server/model/sys_workflow.go

@@ -4,7 +4,7 @@ import (
 	"github.com/jinzhu/gorm"
 )
 
-//工作流属性表
+// 工作流属性表
 type SysWorkflow struct {
 	gorm.Model
 	WorkflowNickName    string                `json:"workflowNickName"`    // 工作流名称
@@ -22,4 +22,4 @@ type SysWorkflowStepInfo struct {
 	StepNo          float64 `json:"stepNo"`          // 步骤id (第几步)
 	StepAuthorityID string  `json:"stepAuthorityID"` // 操作者级别id
 	IsEnd           bool    `json:"isEnd"`           // 是否是完结流节点
-}
+}

+ 1 - 1
server/model/sys_workflow_process.go

@@ -7,7 +7,7 @@ type SysWorkFlowProcess struct {
 	gorm.Model
 	ApplicationID  uint   // 当前工作流所属申请的ID
 	CurrentNode    string // 当前进度节点
-	HistoricalNode string //上一个进度节点
+	HistoricalNode string // 上一个进度节点
 	CurrentUser    string // 当前进度操作人
 	HistoricalUser string // 上一个进度的操作人
 	State          bool   // 状态 是否是正在进行的状态

+ 2 - 2
server/router/exp_customer.go

@@ -9,8 +9,8 @@ import (
 func InitCustomerRouter(Router *gin.RouterGroup) {
 	ApiRouter := Router.Group("customer").Use(middleware.JWTAuth()).Use(middleware.CasbinHandler())
 	{
-		ApiRouter.POST("customer", v1.CreateExaCustomer)   // 创建客户
-		ApiRouter.PUT("customer", v1.UpdateExaCustomer)   // 更新客户
+		ApiRouter.POST("customer", v1.CreateExaCustomer)     // 创建客户
+		ApiRouter.PUT("customer", v1.UpdateExaCustomer)      // 更新客户
 		ApiRouter.DELETE("customer", v1.DeleteExaCustomer)   // 删除客户
 		ApiRouter.GET("customer", v1.GetExaCustomer)         // 获取单一客户信息
 		ApiRouter.GET("customerList", v1.GetExaCustomerList) // 获取客户列表

+ 1 - 1
server/router/exp_file_upload_and_download.go

@@ -7,7 +7,7 @@ import (
 
 func InitFileUploadAndDownloadRouter(Router *gin.RouterGroup) {
 	FileUploadAndDownloadGroup := Router.Group("fileUploadAndDownload")
-	//.Use(middleware.JWTAuth()).Use(middleware.CasbinHandler())
+	// .Use(middleware.JWTAuth()).Use(middleware.CasbinHandler())
 	{
 		FileUploadAndDownloadGroup.POST("/upload", v1.UploadFile)                                 // 上传文件
 		FileUploadAndDownloadGroup.POST("/getFileList", v1.GetFileList)                           // 获取上传文件列表

+ 5 - 5
server/router/sys_api.go

@@ -9,11 +9,11 @@ import (
 func InitApiRouter(Router *gin.RouterGroup) {
 	ApiRouter := Router.Group("api").Use(middleware.JWTAuth()).Use(middleware.CasbinHandler())
 	{
-		ApiRouter.POST("createApi", v1.CreateApi)   //创建Api
-		ApiRouter.POST("deleteApi", v1.DeleteApi)   //删除Api
-		ApiRouter.POST("getApiList", v1.GetApiList) //获取Api列表
-		ApiRouter.POST("getApiById", v1.GetApiById) //获取单条Api消息
-		ApiRouter.POST("updateApi", v1.UpdateApi)   //更新api
+		ApiRouter.POST("createApi", v1.CreateApi)   // 创建Api
+		ApiRouter.POST("deleteApi", v1.DeleteApi)   // 删除Api
+		ApiRouter.POST("getApiList", v1.GetApiList) // 获取Api列表
+		ApiRouter.POST("getApiById", v1.GetApiById) // 获取单条Api消息
+		ApiRouter.POST("updateApi", v1.UpdateApi)   // 更新api
 		ApiRouter.POST("getAllApis", v1.GetAllApis) // 获取所有api
 	}
 }

+ 6 - 6
server/router/sys_authority.go

@@ -9,11 +9,11 @@ import (
 func InitAuthorityRouter(Router *gin.RouterGroup) {
 	AuthorityRouter := Router.Group("authority").Use(middleware.JWTAuth()).Use(middleware.CasbinHandler())
 	{
-		AuthorityRouter.POST("createAuthority", v1.CreateAuthority)   //创建角色
-		AuthorityRouter.POST("deleteAuthority", v1.DeleteAuthority)   //删除角色
-		AuthorityRouter.PUT("updateAuthority", v1.UpdateAuthority)    //更新角色
-		AuthorityRouter.POST("copyAuthority", v1.CopyAuthority)       //更新角色
-		AuthorityRouter.POST("getAuthorityList", v1.GetAuthorityList) //获取角色列表
-		AuthorityRouter.POST("setDataAuthority", v1.SetDataAuthority) //设置角色资源权限
+		AuthorityRouter.POST("createAuthority", v1.CreateAuthority)   // 创建角色
+		AuthorityRouter.POST("deleteAuthority", v1.DeleteAuthority)   // 删除角色
+		AuthorityRouter.PUT("updateAuthority", v1.UpdateAuthority)    // 更新角色
+		AuthorityRouter.POST("copyAuthority", v1.CopyAuthority)       // 更新角色
+		AuthorityRouter.POST("getAuthorityList", v1.GetAuthorityList) // 获取角色列表
+		AuthorityRouter.POST("setDataAuthority", v1.SetDataAuthority) // 设置角色资源权限
 	}
 }

+ 1 - 1
server/router/sys_auto_code.go

@@ -9,6 +9,6 @@ import (
 func InitAutoCodeRouter(Router *gin.RouterGroup) {
 	AutoCodeRouter := Router.Group("autoCode").Use(middleware.JWTAuth()).Use(middleware.CasbinHandler())
 	{
-		AutoCodeRouter.POST("createTemp", v1.CreateTemp) //创建自动化代码
+		AutoCodeRouter.POST("createTemp", v1.CreateTemp) // 创建自动化代码
 	}
 }

+ 1 - 1
server/router/sys_jwt.go

@@ -9,6 +9,6 @@ import (
 func InitJwtRouter(Router *gin.RouterGroup) {
 	ApiRouter := Router.Group("jwt").Use(middleware.JWTAuth()).Use(middleware.CasbinHandler())
 	{
-		ApiRouter.POST("jsonInBlacklist", v1.JsonInBlacklist) //jwt加入黑名单
+		ApiRouter.POST("jsonInBlacklist", v1.JsonInBlacklist) // jwt加入黑名单
 	}
 }

+ 2 - 2
server/router/sys_menu.go

@@ -9,7 +9,7 @@ import (
 func InitMenuRouter(Router *gin.RouterGroup) (R gin.IRoutes) {
 	MenuRouter := Router.Group("menu").Use(middleware.JWTAuth()).Use(middleware.CasbinHandler())
 	{
-		MenuRouter.POST("getMenu", v1.GetMenu)                   //获取菜单树
+		MenuRouter.POST("getMenu", v1.GetMenu)                   // 获取菜单树
 		MenuRouter.POST("getMenuList", v1.GetMenuList)           // 分页获取基础menu列表
 		MenuRouter.POST("addBaseMenu", v1.AddBaseMenu)           // 新增菜单
 		MenuRouter.POST("getBaseMenuTree", v1.GetBaseMenuTree)   // 获取用户动态路由
@@ -17,7 +17,7 @@ func InitMenuRouter(Router *gin.RouterGroup) (R gin.IRoutes) {
 		MenuRouter.POST("getMenuAuthority", v1.GetMenuAuthority) // 获取指定角色menu
 		MenuRouter.POST("deleteBaseMenu", v1.DeleteBaseMenu)     // 删除菜单
 		MenuRouter.POST("updateBaseMenu", v1.UpdateBaseMenu)     // 更新菜单
-		MenuRouter.POST("getBaseMenuById", v1.GetBaseMenuById)   //根据id获取菜单
+		MenuRouter.POST("getBaseMenuById", v1.GetBaseMenuById)   // 根据id获取菜单
 	}
 	return MenuRouter
 }

+ 3 - 3
server/router/sys_user.go

@@ -10,9 +10,9 @@ func InitUserRouter(Router *gin.RouterGroup) {
 	UserRouter := Router.Group("user").Use(middleware.JWTAuth()).Use(middleware.CasbinHandler())
 	{
 		UserRouter.POST("changePassword", v1.ChangePassword)     // 修改密码
-		UserRouter.POST("uploadHeaderImg", v1.UploadHeaderImg)   //上传头像
+		UserRouter.POST("uploadHeaderImg", v1.UploadHeaderImg)   // 上传头像
 		UserRouter.POST("getUserList", v1.GetUserList)           // 分页获取用户列表
-		UserRouter.POST("setUserAuthority", v1.SetUserAuthority) //设置用户权限
-		UserRouter.DELETE("deleteUser", v1.DeleteUser)           //删除用户
+		UserRouter.POST("setUserAuthority", v1.SetUserAuthority) // 设置用户权限
+		UserRouter.DELETE("deleteUser", v1.DeleteUser)           // 删除用户
 	}
 }

+ 2 - 2
server/service/sys_authority.go

@@ -112,7 +112,7 @@ func GetAuthorityInfoList(info request.PageInfo) (err error, list interface{}, t
 	var authority []model.SysAuthority
 	err = db.Limit(limit).Offset(offset).Preload("DataAuthorityId").Where("parent_id = 0").Find(&authority).Error
 	if len(authority) > 0 {
-		for k, _ := range authority {
+		for k := range authority {
 			err = findChildrenAuthority(&authority[k])
 		}
 	}
@@ -166,7 +166,7 @@ func SetMenuAuthority(auth *model.SysAuthority) error {
 func findChildrenAuthority(authority *model.SysAuthority) (err error) {
 	err = global.GVA_DB.Preload("DataAuthorityId").Where("parent_id = ?", authority.AuthorityId).Find(&authority.Children).Error
 	if len(authority.Children) > 0 {
-		for k, _ := range authority.Children {
+		for k := range authority.Children {
 			err = findChildrenAuthority(&authority.Children[k])
 		}
 	}

+ 3 - 3
server/service/sys_auto_code.go

@@ -43,16 +43,16 @@ func CreateTemp(autoCode model.AutoCodeStruct) (err error) {
 	if err != nil {
 		return err
 	}
-	//自动化总目录
+	// 自动化总目录
 	_autoCode := "./autoCode/"
-	//自动化后台代码目录
+	// 自动化后台代码目录
 	_te := "./autoCode/te/"
 	_dir := _te + autoCode.PackageName
 	_modeldir := _te + autoCode.PackageName + "/model"
 	_apidir := _te + autoCode.PackageName + "/api"
 	_routerdir := _te + autoCode.PackageName + "/router"
 	_servicedir := _te + autoCode.PackageName + "/service"
-	//自动化前台代码目录
+	// 自动化前台代码目录
 	_fe := "./autoCode/fe/"
 	_fe_dir := _fe + autoCode.PackageName
 	_fe_apidir := _fe + autoCode.PackageName + "/api"

+ 2 - 2
server/service/sys_casbin.go

@@ -117,7 +117,7 @@ func Casbin() *casbin.Enforcer {
 
 func ParamsMatch(fullNameKey1 string, key2 string) bool {
 	key1 := strings.Split(fullNameKey1, "?")[0]
-	//剥离路径后再使用casbin的keyMatch2
+	// 剥离路径后再使用casbin的keyMatch2
 	return util.KeyMatch2(key1, key2)
 }
 
@@ -132,5 +132,5 @@ func ParamsMatchFunc(args ...interface{}) (interface{}, error) {
 	name1 := args[0].(string)
 	name2 := args[1].(string)
 
-	return (bool)(ParamsMatch(name1, name2)), nil
+	return ParamsMatch(name1, name2), nil
 }

+ 16 - 16
server/service/sys_menu.go

@@ -13,15 +13,15 @@ import (
 // @return     err             error
 // @return    menusMsp            map{string}[]SysBaseMenu
 
-func getMenuTreeMap(authorityId string)(err error,treeMap map[string][]model.SysMenu){
+func getMenuTreeMap(authorityId string) (err error, treeMap map[string][]model.SysMenu) {
 	var allMenus []model.SysMenu
 	treeMap = make(map[string][]model.SysMenu)
 	sql := "SELECT authority_menu.keep_alive,authority_menu.default_menu,authority_menu.created_at,authority_menu.updated_at,authority_menu.deleted_at,authority_menu.menu_level,authority_menu.parent_id,authority_menu.path,authority_menu.`name`,authority_menu.hidden,authority_menu.component,authority_menu.title,authority_menu.icon,authority_menu.sort,authority_menu.menu_id,authority_menu.authority_id FROM authority_menu WHERE authority_menu.authority_id = ? ORDER BY authority_menu.sort ASC"
-	err = global.GVA_DB.Raw(sql,authorityId).Scan(&allMenus).Error
-	for _,v := range allMenus{
+	err = global.GVA_DB.Raw(sql, authorityId).Scan(&allMenus).Error
+	for _, v := range allMenus {
 		treeMap[v.ParentId] = append(treeMap[v.ParentId], v)
 	}
-	return err,treeMap
+	return err, treeMap
 }
 
 // @title    GetMenuTree
@@ -32,7 +32,7 @@ func getMenuTreeMap(authorityId string)(err error,treeMap map[string][]model.Sys
 // @return    menus           []model.SysMenu
 
 func GetMenuTree(authorityId string) (err error, menus []model.SysMenu) {
-	err,menuTree := getMenuTreeMap(authorityId)
+	err, menuTree := getMenuTreeMap(authorityId)
 	menus = menuTree["0"]
 	for i := 0; i < len(menus); i++ {
 		err = getChildrenList(&menus[i], menuTree)
@@ -47,7 +47,7 @@ func GetMenuTree(authorityId string) (err error, menus []model.SysMenu) {
 // @param     sql             string
 // @return    err             error
 
-func getChildrenList(menu *model.SysMenu,treeMap map[string][]model.SysMenu) (err error) {
+func getChildrenList(menu *model.SysMenu, treeMap map[string][]model.SysMenu) (err error) {
 	menu.Children = treeMap[menu.MenuId]
 	for i := 0; i < len(menu.Children); i++ {
 		err = getChildrenList(&menu.Children[i], treeMap)
@@ -65,10 +65,10 @@ func getChildrenList(menu *model.SysMenu,treeMap map[string][]model.SysMenu) (er
 
 func GetInfoList() (err error, list interface{}, total int) {
 	var menuList []model.SysBaseMenu
-	err,treeMap := getBaseMenuTreeMap()
+	err, treeMap := getBaseMenuTreeMap()
 	menuList = treeMap["0"]
 	for i := 0; i < len(menuList); i++ {
-		err = getBaseChildrenList(&menuList[i],treeMap)
+		err = getBaseChildrenList(&menuList[i], treeMap)
 	}
 	return err, menuList, total
 }
@@ -79,10 +79,10 @@ func GetInfoList() (err error, list interface{}, total int) {
 // @param     menu            *model.SysBaseMenu
 // @return    err             error
 
-func getBaseChildrenList(menu *model.SysBaseMenu ,treeMap map[string][]model.SysBaseMenu) (err error) {
+func getBaseChildrenList(menu *model.SysBaseMenu, treeMap map[string][]model.SysBaseMenu) (err error) {
 	menu.Children = treeMap[strconv.Itoa(int(menu.ID))]
 	for i := 0; i < len(menu.Children); i++ {
-		err = getBaseChildrenList(&menu.Children[i],treeMap)
+		err = getBaseChildrenList(&menu.Children[i], treeMap)
 	}
 	return err
 }
@@ -92,7 +92,7 @@ func getBaseChildrenList(menu *model.SysBaseMenu ,treeMap map[string][]model.Sys
 // @auth                     (2020/04/05  20:22)
 // @param     menu            *model.SysBaseMenu
 // @return    err             error
-//增加基础路由
+// 增加基础路由
 
 func AddBaseMenu(menu model.SysBaseMenu) (err error) {
 	findOne := global.GVA_DB.Where("name = ?", menu.Name).Find(&model.SysBaseMenu{}).Error
@@ -110,14 +110,14 @@ func AddBaseMenu(menu model.SysBaseMenu) (err error) {
 // @return     err             error
 // @return    menusMsp            map{string}[]SysBaseMenu
 
-func getBaseMenuTreeMap()(err error,treeMap map[string][]model.SysBaseMenu){
+func getBaseMenuTreeMap() (err error, treeMap map[string][]model.SysBaseMenu) {
 	var allMenus []model.SysBaseMenu
 	treeMap = make(map[string][]model.SysBaseMenu)
 	err = global.GVA_DB.Order("sort", true).Find(&allMenus).Error
-	for _,v := range allMenus{
+	for _, v := range allMenus {
 		treeMap[v.ParentId] = append(treeMap[v.ParentId], v)
 	}
-	return err,treeMap
+	return err, treeMap
 }
 
 // @title    GetBaseMenuTree
@@ -127,10 +127,10 @@ func getBaseMenuTreeMap()(err error,treeMap map[string][]model.SysBaseMenu){
 // @return    menus            []SysBaseMenu
 
 func GetBaseMenuTree() (err error, menus []model.SysBaseMenu) {
-	err,treeMap := getBaseMenuTreeMap()
+	err, treeMap := getBaseMenuTreeMap()
 	menus = treeMap["0"]
 	for i := 0; i < len(menus); i++ {
-		err = getBaseChildrenList(&menus[i],treeMap)
+		err = getBaseChildrenList(&menus[i], treeMap)
 	}
 	return err, menus
 }

+ 3 - 3
server/service/sys_user.go

@@ -18,9 +18,9 @@ import (
 
 func Register(u model.SysUser) (err error, userInter model.SysUser) {
 	var user model.SysUser
-	//判断用户名是否注册
+	// 判断用户名是否注册
 	notRegister := global.GVA_DB.Where("username = ?", u.Username).First(&user).RecordNotFound()
-	//notRegister为false表明读取到了 不能注册
+	// notRegister为false表明读取到了 不能注册
 	if !notRegister {
 		return errors.New("用户名已注册"), userInter
 	} else {
@@ -60,7 +60,7 @@ func Login(u *model.SysUser) (err error, userInter *model.SysUser) {
 
 func ChangePassword(u *model.SysUser, newPassword string) (err error, userInter *model.SysUser) {
 	var user model.SysUser
-	//后期修改jwt+password模式
+	// TODO:后期修改jwt+password模式
 	u.Password = utils.MD5V([]byte(u.Password))
 	err = global.GVA_DB.Where("username = ? AND password = ?", u.Username, u.Password).First(&user).Update("password", utils.MD5V([]byte(newPassword))).Error
 	return err, u

+ 1 - 1
server/utils/breakpoint_continue.go

@@ -56,7 +56,7 @@ func MakeFile(fileName string, FileMd5 string) (error, string) {
 	}
 	_ = os.MkdirAll(finishDir, os.ModePerm)
 	fd, _ := os.OpenFile(finishDir+fileName, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0644)
-	for k, _ := range rd {
+	for k := range rd {
 		content, _ := ioutil.ReadFile(breakpointDir + FileMd5 + "/" + fileName + "_" + strconv.Itoa(k))
 		_, err = fd.Write(content)
 		if err != nil {

+ 0 - 1
server/utils/des.go

@@ -37,5 +37,4 @@ func DecryptDES(src []byte) []byte {
 	blockmode.CryptBlocks(src, src)
 	src = unpadding(src)
 	return src
-
 }

+ 5 - 5
server/utils/directory.go

@@ -32,19 +32,19 @@ func CreateDir(dirs ...string) (err error) {
 	for _, v := range dirs {
 		exist, err := PathExists(v)
 		if err != nil {
-			//log.L.Info(fmt.Sprintf("get dir error![%v]\n", err))
+			// log.L.Info(fmt.Sprintf("get dir error![%v]\n", err))
 			return err
 		}
 		if exist {
-			//log.L.Info(fmt.Sprintf("has dir![%v]\n"+_dir))
+			// log.L.Info(fmt.Sprintf("has dir![%v]\n"+_dir))
 		} else {
-			//log.L.Info(fmt.Sprintf("no dir![%v]\n"+_dir))
+			// log.L.Info(fmt.Sprintf("no dir![%v]\n"+_dir))
 			// 创建文件夹
 			err = os.Mkdir(v, os.ModePerm)
 			if err != nil {
-				//log.L.Error(fmt.Sprintf("mkdir error![%v]\n",err))
+				// log.L.Error(fmt.Sprintf("mkdir error![%v]\n",err))
 			} else {
-				//log.L.Info("mkdir success!\n")
+				// log.L.Info("mkdir success!\n")
 			}
 		}
 	}

+ 1 - 1
server/utils/upload.go

@@ -55,7 +55,7 @@ func DeleteFile(key string) error {
 	}
 	// 指定空间所在的区域,如果不指定将自动探测
 	// 如果没有特殊需求,默认不需要指定
-	//cfg.Zone=&storage.ZoneHuabei
+	// cfg.Zone=&storage.ZoneHuabei
 	bucketManager := storage.NewBucketManager(mac, &cfg)
 	err := bucketManager.Delete(global.GVA_CONFIG.Qiniu.Bucket, key)
 	if err != nil {

+ 9 - 9
server/utils/validator.go

@@ -28,32 +28,32 @@ func NotEmpty() string {
 	return "notEmpty"
 }
 
-//小于入参(<) 如果为string array Slice则为长度比较 如果是 int uint float 则为数值比较
+// 小于入参(<) 如果为string array Slice则为长度比较 如果是 int uint float 则为数值比较
 func Lt(mark string) string {
 	return "lt=" + mark
 }
 
-//小于等于入参(<=) 如果为string array Slice则为长度比较 如果是 int uint float 则为数值比较
+// 小于等于入参(<=) 如果为string array Slice则为长度比较 如果是 int uint float 则为数值比较
 func Le(mark string) string {
 	return "le=" + mark
 }
 
-//等于入参(==) 如果为string array Slice则为长度比较 如果是 int uint float 则为数值比较
+// 等于入参(==) 如果为string array Slice则为长度比较 如果是 int uint float 则为数值比较
 func Eq(mark string) string {
 	return "eq=" + mark
 }
 
-//不等于入参(!=)  如果为string array Slice则为长度比较 如果是 int uint float 则为数值比较
+// 不等于入参(!=)  如果为string array Slice则为长度比较 如果是 int uint float 则为数值比较
 func Ne(mark string) string {
 	return "ne=" + mark
 }
 
-//大于等于入参(>=) 如果为string array Slice则为长度比较 如果是 int uint float 则为数值比较
+// 大于等于入参(>=) 如果为string array Slice则为长度比较 如果是 int uint float 则为数值比较
 func Ge(mark string) string {
 	return "ge=" + mark
 }
 
-//大于入参(>) 如果为string array Slice则为长度比较 如果是 int uint float 则为数值比较
+// 大于入参(>) 如果为string array Slice则为长度比较 如果是 int uint float 则为数值比较
 func Gt(mark string) string {
 	return "gt=" + mark
 }
@@ -70,14 +70,14 @@ func Verify(st interface{}, roleMap Rules) (err error) {
 	}
 
 	typ := reflect.TypeOf(st)
-	val := reflect.ValueOf(st) //获取reflect.Type类型
+	val := reflect.ValueOf(st) // 获取reflect.Type类型
 
-	kd := val.Kind() //获取到st对应的类别
+	kd := val.Kind() // 获取到st对应的类别
 	if kd != reflect.Struct {
 		return errors.New("expect struct")
 	}
 	num := val.NumField()
-	//遍历结构体的所有字段
+	// 遍历结构体的所有字段
 	for i := 0; i < num; i++ {
 		tagVal := typ.Field(i)
 		val := val.Field(i)

+ 1 - 1
server/utils/zipfiles.go

@@ -38,7 +38,7 @@ func ZipFiles(filename string, files []string, oldform, newform string) error {
 			return err
 		}
 
-		//使用上面的FileInforHeader() 就可以把文件保存的路径替换成我们自己想要的了,如下面
+		// 使用上面的FileInforHeader() 就可以把文件保存的路径替换成我们自己想要的了,如下面
 		header.Name = strings.Replace(file, oldform, newform, -1)
 
 		// 优化压缩

+ 1 - 1
web/src/style/main.scss

@@ -1039,4 +1039,4 @@ li {
             width: 10px;
         }
     }
-}
+}

+ 22 - 23
web/src/view/example/breakpoint/breakpoint.vue

@@ -2,24 +2,24 @@
   <div class="hello">
      <el-divider content-position="left">大文件上传</el-divider>
     <form id="fromCont" method="post" >
-      <div class="fileUpload">
-        选择文件<input @change="choseFile" id="file" multiple="multiple" type="file"  />
+      <div class="fileUpload" @click="inputChange">
+        选择文件
+        <input v-show="false"  @change="choseFile" id="file" multiple="multiple" type="file" ref="Input"  />
       </div>
     </form>
      <el-button @click="getFile" :disabled="limitFileSize" type="primary" size="medium" class="uploadBtn">上传文件</el-button>
     <div class="el-upload__tip">请上传不超过5MB的文件</div>
     <div class="list">
-      <transition-group name="list" tag="p">
-        <div class="list-item" v-for="item in uploadList" :key="item.name" >
+      <transition  name="list" tag="p">
+        <div class="list-item" v-if="file" >
           <i class="el-icon-document"></i>
-          <span>{{ item.name }}</span>
-          <span v-if="file" class="percentage" >{{percentage}}%</span>
+          <span>{{ file.name }}</span>
+          <span class="percentage" >{{percentage}}%</span>
           <el-progress  :show-text='false' :text-inside="false" :stroke-width="2" :percentage="percentage"></el-progress>
         </div> 
-      </transition-group>
+      </transition>
    </div>
-    
-    <!-- <span
+     <!-- <span
       v-if="this.file"
     >{{Math.floor(((this.formDataList.length-this.waitNum)/this.formDataList.length)*100)}}%</span> -->
     <div class="tips">此版本为先行体验功能测试版,样式美化和性能优化正在进行中,上传切片文件和合成的完整文件分别再QMPlusserver目录的breakpointDir文件夹和fileDir文件夹</div>
@@ -45,8 +45,7 @@ export default {
       limitFileSize: false,
       percentage:0,
       percentageFlage: true,
-      customColor: '#409eff',
-      uploadList:[]
+      customColor: '#409eff'
     }
   },
   created(){
@@ -59,6 +58,7 @@ export default {
       const file = e.target.files[0] // 获取当前文件
       const maxSize = 5*1024*1024
       this.file = file // file 丢全局方便后面用 可以改进为func传参形式
+      this.percentage = 0
     if(file.size<maxSize){
       fileR.readAsArrayBuffer(file) // 把文件读成ArrayBuffer  主要为了保持跟后端的流一致
       fileR.onload = async e => {
@@ -123,9 +123,6 @@ export default {
         this.percentageFlage = false
       }
       this.sliceFile() // 上传切片
-      if(this.percentage == 100){
-        this.uploadList.push(this.file)
-      }
     },
     sliceFile() {
       this.waitUpLoad &&
@@ -164,6 +161,9 @@ export default {
           await removeChunk(params)
         }
       }
+    },
+    inputChange(){
+      this.$refs.Input.dispatchEvent(new MouseEvent('click'))
     }
   }
 }
@@ -198,15 +198,14 @@ a {
     border-radius: 4px;
     overflow: hidden;
     display: inline-block;
-  input{
-    position: absolute;
-    font-size: 100px;
-    right: 0;
-    top: 0;
-    opacity: 0;
-    cursor: pointer;
-  }
- 
+    input{
+      position: absolute;
+      font-size: 100px;
+      right: 0;
+      top: 0;
+      opacity: 0;
+      cursor: pointer;
+    }
 }
  .fileName{
     display: inline-block;

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

@@ -22,7 +22,7 @@
       <el-table-column label="姓名" prop="customerName" width="120"></el-table-column>
       <el-table-column label="电话" prop="customerPhoneData" width="120"></el-table-column>
       <el-table-column label="接入人ID" prop="sysUserId" width="120"></el-table-column>
-      <el-table-column label="按钮组">
+      <el-table-column label="按钮组" min-width="160">
         <template slot-scope="scope">
           <el-button @click="updateCustomer(scope.row)" size="small" type="text">变更</el-button>
           <el-popover placement="top" width="160" v-model="scope.row.visible">

+ 4 - 4
web/src/view/example/table/table.vue

@@ -16,14 +16,14 @@
       </el-table-column>
       <el-table-column label="姓名" prop="name" width="120"></el-table-column>
       <el-table-column label="年龄" prop="age" width="120"></el-table-column>
-      <el-table-column label="住址" prop="address" show-overflow-tooltip></el-table-column>
-      <el-table-column label="是否禁用" prop="switch">
+      <el-table-column label="住址" prop="address" min-width="200" show-overflow-tooltip></el-table-column>
+      <el-table-column label="是否禁用" prop="switch" width="180">
         <template slot-scope="scope">
           <el-switch active-text="开启" inactive-text="禁用" v-model="scope.row.switch"></el-switch>
         </template>
       </el-table-column>
-      <el-table-column label="按钮组">
-        <template slot-scope="scope">
+      <el-table-column label="按钮组" width="200">
+        <template slot-scope="scope" >
             <el-button type="text" size="small" @click="toggleSelection([scope.row])">按钮1</el-button>
             <el-button type="text" size="small" @click="toggleSelection([scope.row])">按钮2</el-button>
             <el-button type="text" size="small" @click="toggleSelection([scope.row])">按钮3</el-button>

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

@@ -35,7 +35,7 @@
           prop="name"
           width="180"
         ></el-table-column>
-        <el-table-column label="链接" prop="url"></el-table-column>
+        <el-table-column label="链接" prop="url" min-width="300"></el-table-column>
         <el-table-column label="标签" prop="tag" width="100">
           <template slot-scope="scope">
             <el-tag
@@ -45,7 +45,7 @@
             >
           </template>
         </el-table-column>
-        <el-table-column label="操作" width="100">
+        <el-table-column label="操作" width="160">
           <template slot-scope="scope">
             <el-button @click="downloadFile(scope.row)" size="small" type="text"
               >下载</el-button

+ 1 - 1
web/src/view/superAdmin/authority/authority.vue

@@ -13,7 +13,7 @@
     >
       <el-table-column label="角色id" min-width="180" prop="authorityId"></el-table-column>
       <el-table-column label="角色名称" min-width="180" prop="authorityName"></el-table-column>
-      <el-table-column fixed="right" label="操作" min-width="300">
+      <el-table-column fixed="right" label="操作" width="460">
         <template slot-scope="scope">
           <el-button @click="opdendrawer(scope.row)" size="small" type="text">设置权限</el-button>
           <el-button @click="addAuthority(scope.row.authorityId)" size="small" type="text">新增子角色</el-button>

+ 121 - 97
web/src/view/superAdmin/menu/menu.vue

@@ -8,6 +8,7 @@
     <el-table :data="tableData" border row-key="ID" stripe>
       <el-table-column label="ID" min-width="100" prop="ID"></el-table-column>
       <el-table-column label="路由Name" min-width="160" prop="name"></el-table-column>
+      <el-table-column label="路由Path" min-width="160" prop="path"></el-table-column>
       <el-table-column label="是否隐藏" min-width="100" prop="hidden">
         <template slot-scope="scope">
           <span>{{scope.row.hidden?"隐藏":"显示"}}</span>
@@ -36,17 +37,36 @@
       </el-table-column>
     </el-table>
 
-    <el-dialog :before-close="handleClose" :visible.sync="dialogFormVisible" :title="dialogTitle">
+    <el-dialog :before-close="handleClose" :title="dialogTitle" :visible.sync="dialogFormVisible">
+      
       <el-form
         :inline="true"
         :model="form"
         :rules="rules"
+        label-position="top"
         label-width="85px"
         ref="menuForm"
-        label-position="top"
       >
         <el-form-item label="路由name" prop="path" style="width:30%">
-          <el-input autocomplete="off" placeholder="唯一英文字符串" v-model="form.path"></el-input>
+          <el-input
+            @change="changeName"
+            autocomplete="off"
+            placeholder="唯一英文字符串"
+            v-model="form.name"
+          ></el-input>
+        </el-form-item>
+        <el-form-item prop="path" style="width:30%">
+          <div style="display:inline-block" slot="label">
+            路由path
+            <el-checkbox style="float:right;margin-left:20px;" v-model="checkFlag">添加参数</el-checkbox>
+          </div>
+          
+          <el-input
+            :disabled="!checkFlag"
+            autocomplete="off"
+            placeholder="建议只在后方拼接参数"
+            v-model="form.path"
+          ></el-input>
         </el-form-item>
         <el-form-item label="是否隐藏" style="width:30%">
           <el-select placeholder="是否在列表隐藏" v-model="form.hidden">
@@ -57,11 +77,11 @@
         <el-form-item label="父节点Id" style="width:30%">
           <el-cascader
             :disabled="!this.isEdit"
-            v-model="form.parentId"
             :options="menuOption"
-            :show-all-levels="false"
             :props="{ checkStrictly: true,label:'title',value:'ID',disabled:'disabled',emitPath:false}"
+            :show-all-levels="false"
             filterable
+            v-model="form.parentId"
           ></el-cascader>
         </el-form-item>
         <el-form-item label="文件路径" prop="component" style="width:30%">
@@ -72,7 +92,7 @@
         </el-form-item>
         <el-form-item label="图标" prop="meta.icon" style="width:30%">
           <icon :meta="form.meta">
-            <template slot="prepend" >el-icon-</template>
+            <template slot="prepend">el-icon-</template>
           </icon>
         </el-form-item>
         <el-form-item label="排序标记" prop="sort" style="width:30%">
@@ -103,203 +123,207 @@ import {
   addBaseMenu,
   deleteBaseMenu,
   getBaseMenuById
-} from "@/api/menu";
-import infoList from "@/components/mixins/infoList";
-import icon from '@/view/superAdmin/menu/icon';
+} from '@/api/menu'
+import infoList from '@/components/mixins/infoList'
+import icon from '@/view/superAdmin/menu/icon'
 export default {
-  name: "Menus",
+  name: 'Menus',
   mixins: [infoList],
   data() {
     return {
+      checkFlag: false,
       listApi: getMenuList,
       dialogFormVisible: false,
-      dialogTitle: "新增菜单",
+      dialogTitle: '新增菜单',
       menuOption: [
         {
-          ID: "0",
-          title: "根菜单"
+          ID: '0',
+          title: '根菜单'
         }
       ],
       form: {
         ID: 0,
-        path: "",
-        name: "",
-        hidden: "",
-        parentId: "",
-        component: "",
+        path: '',
+        name: '',
+        hidden: '',
+        parentId: '',
+        component: '',
         meta: {
-          title: "",
-          icon: "",
+          title: '',
+          icon: '',
           defaultMenu: false,
           keepAlive: false
         }
       },
       rules: {
-        path: [{ required: true, message: "请输入菜单name", trigger: "blur" }],
+        path: [{ required: true, message: '请输入菜单name', trigger: 'blur' }],
         component: [
-          { required: true, message: "请输入文件路径", trigger: "blur" }
+          { required: true, message: '请输入文件路径', trigger: 'blur' }
         ],
-        "meta.title": [
-          { required: true, message: "请输入菜单展示名称", trigger: "blur" }
+        'meta.title': [
+          { required: true, message: '请输入菜单展示名称', trigger: 'blur' }
         ]
       },
       isEdit: false,
-      test:''
-    };
+      test: ''
+    }
   },
-  components:{
+  components: {
     icon
   },
   methods: {
+    changeName() {
+      this.form.path = this.form.name
+    },
     setOptions() {
       this.menuOption = [
         {
-          ID: "0",
-          title: "根目录"
+          ID: '0',
+          title: '根目录'
         }
-      ];
-      this.setMenuOptions(this.tableData, this.menuOption, false);
+      ]
+      this.setMenuOptions(this.tableData, this.menuOption, false)
     },
     setMenuOptions(menuData, optionsData, disabled) {
       menuData &&
         menuData.map(item => {
-          if (item.children&&item.children.length) {
+          if (item.children && item.children.length) {
             const option = {
               title: item.meta.title,
               ID: String(item.ID),
               disabled: disabled || item.ID == this.form.ID,
               children: []
-            };
+            }
             this.setMenuOptions(
               item.children,
               option.children,
               disabled || item.ID == this.form.ID
-            );
-            optionsData.push(option);
+            )
+            optionsData.push(option)
           } else {
             const option = {
               title: item.meta.title,
               ID: String(item.ID),
               disabled: disabled || item.ID == this.form.ID
-            };
-            optionsData.push(option);
+            }
+            optionsData.push(option)
           }
-        });
+        })
     },
     handleClose(done) {
-      this.initForm();
-      done();
+      this.initForm()
+      done()
     },
     // 懒加载子菜单
     load(tree, treeNode, resolve) {
       resolve([
         {
           id: 31,
-          date: "2016-05-01",
-          name: "王小虎",
-          address: "上海市普陀区金沙江路 1519 弄"
+          date: '2016-05-01',
+          name: '王小虎',
+          address: '上海市普陀区金沙江路 1519 弄'
         },
         {
           id: 32,
-          date: "2016-05-01",
-          name: "王小虎",
-          address: "上海市普陀区金沙江路 1519 弄"
+          date: '2016-05-01',
+          name: '王小虎',
+          address: '上海市普陀区金沙江路 1519 弄'
         }
-      ]);
+      ])
     },
     // 删除菜单
     deleteMenu(ID) {
-      this.$confirm("此操作将永久删除所有角色下该菜单, 是否继续?", "提示", {
-        confirmButtonText: "确定",
-        cancelButtonText: "取消",
-        type: "warning"
+      this.$confirm('此操作将永久删除所有角色下该菜单, 是否继续?', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
       })
         .then(async () => {
-          const res = await deleteBaseMenu({ ID });
+          const res = await deleteBaseMenu({ ID })
           if (res.code == 0) {
             this.$message({
-              type: "success",
-              message: "删除成功!"
-            });
-            this.getTableData();
+              type: 'success',
+              message: '删除成功!'
+            })
+            this.getTableData()
           }
         })
         .catch(() => {
           this.$message({
-            type: "info",
-            message: "已取消删除"
-          });
-        });
+            type: 'info',
+            message: '已取消删除'
+          })
+        })
     },
     // 初始化弹窗内表格方法
     initForm() {
-      this.$refs.menuForm.resetFields();
+      this.checkFlag = false
+      this.$refs.menuForm.resetFields()
       this.form = {
         ID: 0,
-        path: "",
-        name: "",
-        hidden: "",
-        parentId: "",
-        component: "",
+        path: '',
+        name: '',
+        hidden: '',
+        parentId: '',
+        component: '',
         meta: {
-          title: "",
-          icon: "",
+          title: '',
+          icon: '',
           defaultMenu: false,
-          keepAlive: ""
+          keepAlive: ''
         }
-      };
+      }
     },
     // 关闭弹窗
     closeDialog() {
-      this.initForm();
-      this.dialogFormVisible = false;
+      this.initForm()
+      this.dialogFormVisible = false
     },
     // 添加menu
     async enterDialog() {
       this.$refs.menuForm.validate(async valid => {
         if (valid) {
-          let res;
-          this.form.name = this.form.path;
+          let res
           if (this.isEdit) {
-            res = await updateBaseMenu(this.form);
+            res = await updateBaseMenu(this.form)
           } else {
-            res = await addBaseMenu(this.form);
+            res = await addBaseMenu(this.form)
           }
           if (res.code == 0) {
             this.$message({
-              type: "success",
-              message: this.isEdit ? "编辑成功" : "添加成功!"
-            });
-            this.getTableData();
+              type: 'success',
+              message: this.isEdit ? '编辑成功' : '添加成功!'
+            })
+            this.getTableData()
           }
-          this.initForm();
-          this.dialogFormVisible = false;
+          this.initForm()
+          this.dialogFormVisible = false
         }
-      });
+      })
     },
     // 添加菜单方法,id为 0则为添加根菜单
     addMenu(id) {
-      this.dialogTitle = "新增菜单";
-      this.form.parentId = String(id);
-      this.isEdit = false;
-      this.setOptions();
-      this.dialogFormVisible = true;
+      this.dialogTitle = '新增菜单'
+      this.form.parentId = String(id)
+      this.isEdit = false
+      this.setOptions()
+      this.dialogFormVisible = true
     },
     // 修改菜单方法
     async editMenu(id) {
-      this.dialogTitle = "编辑菜单";
-      const res = await getBaseMenuById({ id });
-      this.form = res.data.menu;
-      this.isEdit = true;
-      this.setOptions();
-      this.dialogFormVisible = true;
+      this.dialogTitle = '编辑菜单'
+      const res = await getBaseMenuById({ id })
+      this.form = res.data.menu
+      this.isEdit = true
+      this.setOptions()
+      this.dialogFormVisible = true
     }
   },
   async created() {
-    this.pageSize = 999;
-    await this.getTableData();
+    this.pageSize = 999
+    await this.getTableData()
   }
-};
+}
 </script>
 <style scoped lang="scss">
 .button-box {