diff --git a/app/handler/admin_log.go b/app/controller/admin_log.go similarity index 100% rename from app/handler/admin_log.go rename to app/controller/admin_log.go diff --git a/app/handler/default.go b/app/controller/default.go similarity index 95% rename from app/handler/default.go rename to app/controller/default.go index 3ab8b099d23aad09945b44f521ae9477c5368c4c..df622b941c16c194546823a8ffe2074f1f437f53 100644 --- a/app/handler/default.go +++ b/app/controller/default.go @@ -18,7 +18,7 @@ import ( "time" ) -func DefaultUpload(c *gin.Context) { +func Upload(c *gin.Context) { file, err := c.FormFile("file") if err != nil { response.ErrorResp(c).SetMsg(err.Error()).SetType(model.OperAdd).WriteJsonExit() @@ -46,7 +46,7 @@ func DefaultUpload(c *gin.Context) { response.SuccessResp(c).SetData(backFilePath).SetType(model.OperAdd).Log(e.DefaultUpload, file).WriteJsonExit() } -func PearConfig(c *gin.Context) { +func Pear(c *gin.Context) { var ( data *model.PearConfigForm err error @@ -70,7 +70,7 @@ func PearConfig(c *gin.Context) { c.JSON(http.StatusOK, data) } -func GetMenu(c *gin.Context) { +func Menu(c *gin.Context) { menuResp := service.MenuServiceV2(c) c.JSON(http.StatusOK, menuResp.MenuResp) } diff --git a/app/handler/index.go b/app/controller/index.go similarity index 94% rename from app/handler/index.go rename to app/controller/index.go index 03e1f8479d5dbd52d94ffae51845d3f54f00c3a1..f5bb313cf8459c6c83e4ee9dc2b34a9cf1d29a55 100644 --- a/app/handler/index.go +++ b/app/controller/index.go @@ -22,6 +22,6 @@ func Index(c *gin.Context) { }) } -func FrameIndex(c *gin.Context) { +func FramePage(c *gin.Context) { c.HTML(http.StatusOK, "main.html", gin.H{}) } diff --git a/app/handler/login.go b/app/controller/login.go similarity index 100% rename from app/handler/login.go rename to app/controller/login.go diff --git a/app/handler/role.go b/app/controller/role.go similarity index 50% rename from app/handler/role.go rename to app/controller/role.go index 1a69ab079caf40573831534535db0045d3648abb..af9bb3a94d352166cf8642257f037a7a34453323 100644 --- a/app/handler/role.go +++ b/app/controller/role.go @@ -21,42 +21,42 @@ func IconShow(c *gin.Context) { } func AdminAdd(c *gin.Context) { - var rolesShow []model.RoleEditShow - roles, err := dao2.NewRoleDaoImpl().FindRoles("status = ?", "1") // 查找全部的分组 - if err != nil { - c.String(http.StatusOK, err.Error()) - return - } - for _, v := range roles { - rolesShow = append(rolesShow, model.RoleEditShow{ - ID: gconv.Int(v.ID), - RoleName: v.RoleName, - Status: v.Status, - }) - } - c.HTML(http.StatusOK, "admin_add.html", gin.H{"role": rolesShow}) -} - -func AdminAddHandler(c *gin.Context) { - roles := c.PostFormArray("role_ids") - roleIds := pkg.Array2Str(roles) - status := c.PostForm("status") - if status == "" { - status = "0" - } else if status == "on" { - status = "1" - } - var f request.AdminAddForm - if err := c.ShouldBind(&f); err != nil { - response.ErrorResp(c).SetMsg(err.Error()).SetType(model.OperAdd).Log(e.AdminAddHandler, gin.H{"form": c.Request.PostForm}).WriteJsonExit() - return - } - if err := service.AdminAddHandlerService(roleIds, status, f, c); err != nil { - response.ErrorResp(c).SetMsg(err.Error()).SetType(model.OperAdd).Log(e.AdminAddHandler, gin.H{"form": c.Request.PostForm}).WriteJsonExit() + if c.Request.Method == "GET" { + var rolesShow []model.RoleEditShow + roles, err := dao2.NewRoleDaoImpl().FindRoles("status = ?", "1") // 查找全部的分组 + if err != nil { + c.String(http.StatusOK, err.Error()) + return + } + for _, v := range roles { + rolesShow = append(rolesShow, model.RoleEditShow{ + ID: gconv.Int(v.ID), + RoleName: v.RoleName, + Status: v.Status, + }) + } + c.HTML(http.StatusOK, "admin_add.html", gin.H{"role": rolesShow}) + } else { + roles := c.PostFormArray("role_ids") + roleIds := pkg.Array2Str(roles) + status := c.PostForm("status") + if status == "" { + status = "0" + } else if status == "on" { + status = "1" + } + var f request.AdminAddForm + if err := c.ShouldBind(&f); err != nil { + response.ErrorResp(c).SetMsg(err.Error()).SetType(model.OperAdd).Log(e.AdminAddHandler, gin.H{"form": c.Request.PostForm}).WriteJsonExit() + return + } + if err := service.AdminAddHandlerService(roleIds, status, f, c); err != nil { + response.ErrorResp(c).SetMsg(err.Error()).SetType(model.OperAdd).Log(e.AdminAddHandler, gin.H{"form": c.Request.PostForm}).WriteJsonExit() + return + } + response.SuccessResp(c).SetMsg("创建成功!").SetType(model.OperAdd).Log(e.AdminAddHandler, gin.H{"form": c.Request.PostForm}).WriteJsonExit() return } - response.SuccessResp(c).SetMsg("创建成功!").SetType(model.OperAdd).Log(e.AdminAddHandler, gin.H{"form": c.Request.PostForm}).WriteJsonExit() - return } func AdminList(c *gin.Context) { @@ -64,20 +64,44 @@ func AdminList(c *gin.Context) { } func AdminEdit(c *gin.Context) { - uid := c.Query("id") - if uid == "" { - c.String(http.StatusOK, "请检查参数") - return - } - show, rolesShow, err := service.AdminEditService(uid) - if err != nil { - c.String(http.StatusOK, err.Error()) + if c.Request.Method == "GET" { + uid := c.Query("id") + if uid == "" { + c.String(http.StatusOK, "请检查参数") + return + } + show, rolesShow, err := service.AdminEditService(uid) + if err != nil { + c.String(http.StatusOK, err.Error()) + return + } + c.HTML(http.StatusOK, "admin_edit.html", gin.H{"show": show, "role": rolesShow}) + } else { + roles := c.PostFormArray("role_ids") + roleIds := pkg.Array2Str(roles) + status := c.PostForm("status") + if status == "" { + status = "0" + } else if status == "on" { + status = "1" + } + var f request.AdminEditForm + if err := c.ShouldBind(&f); err != nil { + response.ErrorResp(c).SetMsg(validate.GetValidateError(err)).SetType(model.OperEdit).Log(e.AdminEditHandler, gin.H{"form": c.Request.PostForm}).WriteJsonExit() + return + } + f.RoleIds = roleIds + f.Status = gconv.Int(status) + if err := service.UpdateAdminAttrService(f); err != nil { + response.ErrorResp(c).SetMsg(err.Error()).SetType(model.OperEdit).Log(e.AdminEditHandler, gin.H{"form": c.Request.PostForm}).WriteJsonExit() + return + } + response.SuccessResp(c).SetMsg("更新成功").SetType(model.OperEdit).Log(e.AdminEditHandler, gin.H{"form": c.Request.PostForm}).WriteJsonExit() return } - c.HTML(http.StatusOK, "admin_edit.html", gin.H{"show": show, "role": rolesShow}) } -func AdminChangeStatus(c *gin.Context) { +func AdminStatus(c *gin.Context) { user := service.GetProfile(c) if service.IsAdmin(user) == false { response.ErrorResp(c).SetMsg("权限不足,无法修改").SetType(model.OperEdit).Log(e.AdminEditHandler, gin.H{"form": c.Request.Form}).WriteJsonExit() @@ -98,31 +122,7 @@ func AdminChangeStatus(c *gin.Context) { return } -func AdminEditHandler(c *gin.Context) { - roles := c.PostFormArray("role_ids") - roleIds := pkg.Array2Str(roles) - status := c.PostForm("status") - if status == "" { - status = "0" - } else if status == "on" { - status = "1" - } - var f request.AdminEditForm - if err := c.ShouldBind(&f); err != nil { - response.ErrorResp(c).SetMsg(validate.GetValidateError(err)).SetType(model.OperEdit).Log(e.AdminEditHandler, gin.H{"form": c.Request.PostForm}).WriteJsonExit() - return - } - f.RoleIds = roleIds - f.Status = gconv.Int(status) - if err := service.UpdateAdminAttrService(f); err != nil { - response.ErrorResp(c).SetMsg(err.Error()).SetType(model.OperEdit).Log(e.AdminEditHandler, gin.H{"form": c.Request.PostForm}).WriteJsonExit() - return - } - response.SuccessResp(c).SetMsg("更新成功").SetType(model.OperEdit).Log(e.AdminEditHandler, gin.H{"form": c.Request.PostForm}).WriteJsonExit() - return -} - -func AdminListJson(c *gin.Context) { +func AdminJson(c *gin.Context) { var f request.AdminForm if err := c.ShouldBind(&f); err != nil { response.SuccessResp(c).SetCode(0).SetMsg(err.Error()).WriteJsonExit() @@ -152,7 +152,7 @@ func RoleList(c *gin.Context) { c.HTML(http.StatusOK, "role_list.html", gin.H{}) } -func RoleListJson(c *gin.Context) { +func RoleJson(c *gin.Context) { var f request.RoleForm if err := c.ShouldBind(&f); err != nil { response.SuccessResp(c).SetCode(0).SetMsg(err.Error()).WriteJsonExit() @@ -167,20 +167,20 @@ func RoleListJson(c *gin.Context) { } func RoleAdd(c *gin.Context) { - c.HTML(http.StatusOK, "role_add.html", gin.H{}) -} - -func RoleAddHandler(c *gin.Context) { - var f request.RoleAddForm - if err := c.ShouldBind(&f); err != nil { - response.ErrorResp(c).SetMsg(err.Error()).SetType(model.OperAdd).Log(e.RoleAddHandler, c.Request.PostForm).WriteJsonExit() - return - } - if err := service.RoleAddHandlerService(f, c); err != nil { - response.ErrorResp(c).SetMsg(err.Error()).SetType(model.OperAdd).Log(e.RoleAddHandler, c.Request.PostForm).WriteJsonExit() - return + if c.Request.Method == "GET" { + c.HTML(http.StatusOK, "role_add.html", gin.H{}) + } else { + var f request.RoleAddForm + if err := c.ShouldBind(&f); err != nil { + response.ErrorResp(c).SetMsg(err.Error()).SetType(model.OperAdd).Log(e.RoleAddHandler, c.Request.PostForm).WriteJsonExit() + return + } + if err := service.RoleAddHandlerService(f, c); err != nil { + response.ErrorResp(c).SetMsg(err.Error()).SetType(model.OperAdd).Log(e.RoleAddHandler, c.Request.PostForm).WriteJsonExit() + return + } + response.SuccessResp(c).SetType(model.OperAdd).Log(e.RoleAddHandler, c.Request.PostForm).WriteJsonExit() } - response.SuccessResp(c).SetType(model.OperAdd).Log(e.RoleAddHandler, c.Request.PostForm).WriteJsonExit() } func RolePower(c *gin.Context) { @@ -209,26 +209,26 @@ func SaveRolePower(c *gin.Context) { } func RoleEdit(c *gin.Context) { - id := c.Query("id") - role, err := service.RoleEditService(id) - - if err != nil { - c.String(http.StatusOK, err.Error()) - } - c.HTML(http.StatusOK, "role_edit.html", gin.H{"role": role}) -} + if c.Request.Method == "GET" { + id := c.Query("id") + role, err := service.RoleEditService(id) -func RoleEditHandler(c *gin.Context) { - var f request.RoleEditForm - if err := c.ShouldBindJSON(&f); err != nil { - response.ErrorResp(c).SetMsg(validate.GetValidateError(err)).SetType(model.OperEdit).Log(e.RoleEditHandler, c.Request.Form).WriteJsonExit() - return - } - if err := service.RoleEditHandlerService(f); err != nil { - response.ErrorResp(c).SetMsg(err.Error()).SetType(model.OperEdit).Log(e.RoleEditHandler, f).WriteJsonExit() - return + if err != nil { + c.String(http.StatusOK, err.Error()) + } + c.HTML(http.StatusOK, "role_edit.html", gin.H{"role": role}) + } else { + var f request.RoleEditForm + if err := c.ShouldBindJSON(&f); err != nil { + response.ErrorResp(c).SetMsg(validate.GetValidateError(err)).SetType(model.OperEdit).Log(e.RoleEditHandler, c.Request.Form).WriteJsonExit() + return + } + if err := service.RoleEditHandlerService(f); err != nil { + response.ErrorResp(c).SetMsg(err.Error()).SetType(model.OperEdit).Log(e.RoleEditHandler, f).WriteJsonExit() + return + } + response.SuccessResp(c).SetType(model.OperEdit).Log(e.RoleEditHandler, f).WriteJsonExit() } - response.SuccessResp(c).SetType(model.OperEdit).Log(e.RoleEditHandler, f).WriteJsonExit() } func RoleDeleteHandler(c *gin.Context) { @@ -244,26 +244,37 @@ func AuthList(c *gin.Context) { c.HTML(http.StatusOK, "auth_list.html", gin.H{}) } -func AuthNodeEdit(c *gin.Context) { - var req request.AuthNodeReq - if err := c.ShouldBindJSON(&req); err != nil { - response.ErrorResp(c).SetType(model.OperOther).SetMsg(err.Error()).Log(e.AuthNode, nil).WriteJsonExit() - return - } - if req.ID == "" { - if err := service.AuthInsert(req); err != nil { - response.ErrorResp(c).SetMsg(err.Error()).SetType(model.OperOther).Log(e.AuthNodeAdd, req).WriteJsonExit() - return +func AuthEdit(c *gin.Context) { + if c.Request.Method == "GET" { + authID := c.Query("id") + resp, err := service.FindAuthByID(authID) + if err != nil { + c.String(http.StatusOK, err.Error()) } - cache.Instance().Delete(e.MenuCache + gconv.String(service.GetUid(c))) // 删除栏目列表缓存,重新进行设置 - response.SuccessResp(c).SetType(model.OperEdit).Log(e.AuthNodeAdd, req).WriteJsonExit() + firstAuths := service.FindAuthName(0) + secondAuths := service.FindAuthName(1) + c.HTML(http.StatusOK, "auth_edit.html", gin.H{"parents": firstAuths, "seconds": secondAuths, "auth": resp}) } else { - if err := service.AuthUpdate(req); err != nil { - response.ErrorResp(c).SetMsg(err.Error()).SetType(model.OperOther).Log(e.AuthNodeEdit, req).WriteJsonExit() + var req request.AuthNodeReq + if err := c.ShouldBindJSON(&req); err != nil { + response.ErrorResp(c).SetType(model.OperOther).SetMsg(err.Error()).Log(e.AuthNode, nil).WriteJsonExit() return } - cache.Instance().Delete(e.MenuCache + gconv.String(service.GetUid(c))) // 删除栏目列表缓存,重新进行设置 - response.SuccessResp(c).SetType(model.OperEdit).Log(e.AuthNodeEdit, req).WriteJsonExit() + if req.ID == "" { + if err := service.AuthInsert(req); err != nil { + response.ErrorResp(c).SetMsg(err.Error()).SetType(model.OperOther).Log(e.AuthNodeAdd, req).WriteJsonExit() + return + } + cache.Instance().Delete(e.MenuCache + gconv.String(service.GetUid(c))) // 删除栏目列表缓存,重新进行设置 + response.SuccessResp(c).SetType(model.OperEdit).Log(e.AuthNodeAdd, req).WriteJsonExit() + } else { + if err := service.AuthUpdate(req); err != nil { + response.ErrorResp(c).SetMsg(err.Error()).SetType(model.OperOther).Log(e.AuthNodeEdit, req).WriteJsonExit() + return + } + cache.Instance().Delete(e.MenuCache + gconv.String(service.GetUid(c))) // 删除栏目列表缓存,重新进行设置 + response.SuccessResp(c).SetType(model.OperEdit).Log(e.AuthNodeEdit, req).WriteJsonExit() + } } } @@ -277,7 +288,7 @@ func AuthDelete(c *gin.Context) { response.SuccessResp(c).SetType(model.OperOther).Log(e.AuthDelete, c.Request.PostForm).WriteJsonExit() } -func GetNode(c *gin.Context) { +func AuthNode(c *gin.Context) { authID := c.PostForm("id") resp, err := service.FindAuthByID(authID) if err != nil { @@ -287,7 +298,7 @@ func GetNode(c *gin.Context) { response.SuccessResp(c).SetData(resp).WriteJsonExit() } -func GetNodes(c *gin.Context) { +func AuthNodes(c *gin.Context) { resp, count := service.FindAuths() response.SuccessResp(c).SetCount(gconv.Int(count)).SetData(resp).WriteJsonExit() } @@ -298,18 +309,7 @@ func AddNode(c *gin.Context) { c.HTML(http.StatusOK, "auth_add.html", gin.H{"parents": firstAuths, "seconds": secondAuths}) } -func EditNode(c *gin.Context) { - authID := c.Query("id") - resp, err := service.FindAuthByID(authID) - if err != nil { - c.String(http.StatusOK, err.Error()) - } - firstAuths := service.FindAuthName(0) - secondAuths := service.FindAuthName(1) - c.HTML(http.StatusOK, "auth_edit.html", gin.H{"parents": firstAuths, "seconds": secondAuths, "auth": resp}) -} - -func SelectParent(c *gin.Context) { +func Parent(c *gin.Context) { data := service.FindAllPower() c.JSON(http.StatusOK, data) } diff --git a/app/handler/sysconf.go b/app/controller/sysconf.go similarity index 77% rename from app/handler/sysconf.go rename to app/controller/sysconf.go index 1612c41eb00d26a9a067e4026fe8065da9614699..68984cb73920efa110d69971702444a2aa4c4929 100644 --- a/app/handler/sysconf.go +++ b/app/controller/sysconf.go @@ -12,22 +12,22 @@ import ( "pear-admin-go/app/util/e" ) -func SiteList(c *gin.Context) { - site, sysID := service.GetSiteConf() - c.HTML(http.StatusOK, "site_config.html", gin.H{"id": sysID, "site": site}) -} - func SiteEdit(c *gin.Context) { - var f request.SiteConfForm - if err := c.ShouldBind(&f); err != nil { - response.ErrorResp(c).SetMsg(err.Error()).SetType(model.OperEdit).Log(e.SiteEdit, c.Request.PostForm).WriteJsonExit() - return - } - if err := service.SiteEditService(f); err != nil { - response.ErrorResp(c).SetType(model.OperEdit).Log(e.SiteEdit, c.Request.PostForm).WriteJsonExit() - return + if c.Request.Method == "GET"{ + site, sysID := service.GetSiteConf() + c.HTML(http.StatusOK, "site_config.html", gin.H{"id": sysID, "site": site}) + }else{ + var f request.SiteConfForm + if err := c.ShouldBind(&f); err != nil { + response.ErrorResp(c).SetMsg(err.Error()).SetType(model.OperEdit).Log(e.SiteEdit, c.Request.PostForm).WriteJsonExit() + return + } + if err := service.SiteEditService(f); err != nil { + response.ErrorResp(c).SetType(model.OperEdit).Log(e.SiteEdit, c.Request.PostForm).WriteJsonExit() + return + } + response.SuccessResp(c).SetType(model.OperEdit).Log(e.SiteEdit, c.Request.PostForm).WriteJsonExit() } - response.SuccessResp(c).SetType(model.OperEdit).Log(e.SiteEdit, c.Request.PostForm).WriteJsonExit() } func MailList(c *gin.Context) { diff --git a/app/handler/user.go b/app/controller/user.go similarity index 37% rename from app/handler/user.go rename to app/controller/user.go index 4151c85b74b886f00c093ccb7212275723cbaeb1..8affef0a9f53090f8aa68e9aa75b3f66b172475c 100644 --- a/app/handler/user.go +++ b/app/controller/user.go @@ -11,13 +11,26 @@ import ( "pear-admin-go/app/util/validate" ) -func UserShow(c *gin.Context) { - pro := service.GetProfile(c) - if pro.Avatar == "" { - pro.Avatar = e.DefaultAvatar +func UserEdit(c *gin.Context) { + if c.Request.Method == "GET" { + pro := service.GetProfile(c) + if pro.Avatar == "" { + pro.Avatar = e.DefaultAvatar + } + info, _ := service.GetLoginInfo(c) + c.HTML(http.StatusOK, "user_show.html", gin.H{"user": pro, "info": info}) + } else { + var pro request.ProfileForm + if err := c.ShouldBind(&pro); err != nil { + response.ErrorResp(c).SetMsg(err.Error()).SetType(model.OperEdit).Log(e.ProfileEdit, c.Request.PostForm).WriteJsonExit() + return + } + if err := service.ProfileEditService(pro, c); err != nil { + response.ErrorResp(c).SetMsg(err.Error()).SetType(model.OperEdit).Log(e.ProfileEdit, c.Request.PostForm).WriteJsonExit() + return + } + response.SuccessResp(c).SetType(model.OperEdit).Log(e.ProfileEdit, c.Request.PostForm).WriteJsonExit() } - info, _ := service.GetLoginInfo() - c.HTML(http.StatusOK, "user_show.html", gin.H{"user": pro, "info": info}) } func UploadPage(c *gin.Context) { @@ -27,7 +40,7 @@ func UploadPage(c *gin.Context) { func AvatarEdit(c *gin.Context) { var f request.AvatarForm if err := c.ShouldBind(&f); err != nil { - response.ErrorResp(c).SetMsg("上传失败"+validate.GetValidateError(err)).SetType(model.OperEdit).Log(e.AvatarEdit, c.Request.PostForm).WriteJsonExit() + response.ErrorResp(c).SetMsg(validate.GetValidateError(err)).SetType(model.OperEdit).Log(e.AvatarEdit, c.Request.PostForm).WriteJsonExit() return } err := service.UpdateAvatarService(f.Avatar, c) @@ -38,32 +51,19 @@ func AvatarEdit(c *gin.Context) { response.SuccessResp(c).SetMsg(f.Avatar).SetType(model.OperEdit).Log(e.AvatarEdit, c.Request.PostForm).WriteJsonExit() } -func ProfileEdit(c *gin.Context) { - var pro request.ProfileForm - if err := c.ShouldBind(&pro); err != nil { - response.ErrorResp(c).SetMsg(err.Error()).SetType(model.OperEdit).Log(e.ProfileEdit, c.Request.PostForm).WriteJsonExit() - return - } - if err := service.ProfileEditService(pro, c); err != nil { - response.ErrorResp(c).SetMsg(err.Error()).SetType(model.OperEdit).Log(e.ProfileEdit, c.Request.PostForm).WriteJsonExit() - return - } - response.SuccessResp(c).SetType(model.OperEdit).Log(e.ProfileEdit, c.Request.PostForm).WriteJsonExit() -} - func PwdEdit(c *gin.Context) { - c.HTML(http.StatusOK, "user_pwd.html", gin.H{}) -} - -func PwdEditHandler(c *gin.Context) { - var pwd request.PasswordForm - if err := c.ShouldBind(&pwd); err != nil { - response.ErrorResp(c).SetMsg(validate.GetValidateError(err)).SetType(model.OperEdit).Log(e.PwdEditHandler, c.Request.PostForm).WriteJsonExit() - return + if c.Request.Method == "GET"{ + c.HTML(http.StatusOK, "user_pwd.html", gin.H{}) + }else{ + var pwd request.PasswordForm + if err := c.ShouldBind(&pwd); err != nil { + response.ErrorResp(c).SetMsg(validate.GetValidateError(err)).SetType(model.OperEdit).Log(e.PwdEditHandler, c.Request.PostForm).WriteJsonExit() + return + } + if err := service.PwdEditHandlerService(pwd, c); err != nil { + response.ErrorResp(c).SetMsg(err.Error()).SetType(model.OperEdit).Log(e.PwdEditHandler, c.Request.PostForm).WriteJsonExit() + return + } + response.SuccessResp(c).SetType(model.OperEdit).Log(e.PwdEditHandler, c.Request.PostForm).WriteJsonExit() } - if err := service.PwdEditHandlerService(pwd, c); err != nil { - response.ErrorResp(c).SetMsg(err.Error()).SetType(model.OperEdit).Log(e.PwdEditHandler, c.Request.PostForm).WriteJsonExit() - return - } - response.SuccessResp(c).SetType(model.OperEdit).Log(e.PwdEditHandler, c.Request.PostForm).WriteJsonExit() -} +} \ No newline at end of file diff --git a/app/router/common.go b/app/router/common.go index 31de8f8e68f096bd3fb0565f0c4085c89df8af5e..56ea84939e45063e89dc8bfd9b0c877c8708c80f 100644 --- a/app/router/common.go +++ b/app/router/common.go @@ -2,7 +2,7 @@ package router import ( "github.com/gin-gonic/gin" - controller "pear-admin-go/app/handler" + controller "pear-admin-go/app/controller" "pear-admin-go/app/middleware" ) diff --git a/app/router/router.go b/app/router/router.go index 3c0c567f38b318fad6b55286bbaf4fbdd0eff1b0..2ead65547a008b7144556152094784d05d20f7bc 100644 --- a/app/router/router.go +++ b/app/router/router.go @@ -29,6 +29,7 @@ func InitRouter(staticFs, templateFs embed.FS) *gin.Engine { r.Use(gin.Recovery()) r.Use(middleware.Cors()) r.Use(session.EnableCookieSession(config.Conf.App.JwtSecret)) + CommonRouter(r) SystemRouter(r) return r diff --git a/app/router/system.go b/app/router/system.go index 506a3898e7d735458f93e819771a8aba90496ad9..1c30317905390327f3873243d2480d2e7b03cf85 100644 --- a/app/router/system.go +++ b/app/router/system.go @@ -2,71 +2,81 @@ package router import ( "github.com/gin-gonic/gin" - controller "pear-admin-go/app/handler" + controller "pear-admin-go/app/controller" "pear-admin-go/app/middleware" ) func SystemRouter(r *gin.Engine) { - sr := r.Group("system", middleware.AuthMiddleware) + sr := r.Group("system") + + // default + sr.GET("pear", controller.Pear) + sr.GET("menu", controller.Menu) + sr.GET("server_err", controller.ServerErr) + sr.GET("ui/icon", controller.IconShow) + sr.GET("file", controller.ShowFile) + + sr.Use(middleware.AuthMiddleware) // 下面的使用中间件验证 上面的路由为基础路由 不需要验证权限 + + // default + sr.POST("upload", controller.Upload) // index sr.GET("/", controller.Index) sr.GET("index", controller.Index) - sr.GET("main", controller.FrameIndex) + sr.GET("main", controller.FramePage) // log sr.GET("/log/list", controller.LogList) - sr.GET("/log/log_operate", controller.LogOperate) - sr.GET("/log/log_login", controller.LogLogin) - - // default - sr.POST("upload/def_upload", controller.DefaultUpload) - sr.GET("pear_config", controller.PearConfig) - sr.GET("menu_config", controller.GetMenu) - sr.GET("server_err", controller.ServerErr) - sr.GET("file", controller.ShowFile) + sr.GET("/log/operate", controller.LogOperate) + sr.GET("/log/login", controller.LogLogin) - // role - sr.GET("admin/list", controller.AdminList) // 管理员列表页 - sr.GET("admin/list_json", controller.AdminListJson) + // role 管理员列表页 + sr.GET("admin/list", controller.AdminList) + sr.GET("admin/json", controller.AdminJson) sr.GET("admin/add", controller.AdminAdd) - sr.POST("admin/add", controller.AdminAddHandler) + sr.POST("admin/add", controller.AdminAdd) sr.GET("admin/edit", controller.AdminEdit) - sr.POST("admin/edit", controller.AdminEditHandler) - sr.POST("admin/edit_status", controller.AdminChangeStatus) + sr.POST("admin/edit", controller.AdminEdit) + sr.POST("admin/status", controller.AdminStatus) r.DELETE("admin/delete", controller.AdminDelete) - sr.GET("role/list", controller.RoleList) // 角色管理列表页 - sr.GET("role/list_json", controller.RoleListJson) + + // role 角色管理列表页 + sr.GET("role/list", controller.RoleList) + sr.GET("role/json", controller.RoleJson) sr.GET("role/add", controller.RoleAdd) - sr.POST("role/add", controller.RoleAddHandler) + sr.POST("role/add", controller.RoleAdd) sr.GET("role/power", controller.RolePower) sr.GET("role/getRolePower", controller.GetRolePower) sr.POST("role/saveRolePower", controller.SaveRolePower) sr.GET("role/edit", controller.RoleEdit) - sr.POST("role/edit", controller.RoleEditHandler) + sr.POST("role/edit", controller.RoleEdit) sr.POST("role/delete", controller.RoleDeleteHandler) - sr.GET("auth/list", controller.AuthList) // 权限因子列表页 - sr.POST("auth/edit", controller.AuthNodeEdit) // 新增、修改权限 - sr.GET("auth/get_nodes", controller.GetNodes) // 权限配置页面 - sr.GET("auth/add", controller.AddNode) // 新增权限 - sr.GET("auth/edit", controller.EditNode) // 修改权限 - sr.POST("auth/get_node", controller.GetNode) // 权限因子列表页 - sr.POST("auth/delete", controller.AuthDelete) // 权限因子列表页 - sr.GET("auth/selectParent", controller.SelectParent) // 权限列表 - sr.GET("ui/icon", controller.IconShow) - // sysconf - sr.GET("site/list", controller.SiteList) + // role 权限因子列表页 + sr.GET("auth/list", controller.AuthList) + sr.GET("auth/nodes", controller.AuthNodes) // 权限配置页面 + sr.GET("auth/add", controller.AddNode) // 新增权限 + sr.GET("auth/edit", controller.AuthEdit) // 修改权限 + sr.POST("auth/edit", controller.AuthEdit) // 新增、修改权限 + sr.POST("auth/node", controller.AuthNode) // 权限因子列表页 + sr.POST("auth/delete", controller.AuthDelete) // 权限因子列表页 + sr.GET("auth/parent", controller.Parent) // 权限列表 + + // 站点设置 + sr.GET("site/edit", controller.SiteEdit) sr.POST("site/edit", controller.SiteEdit) + + // mail 邮件配置暂未启用 sr.GET("mail/list", controller.MailList) sr.POST("mail/edit", controller.MailEdit) sr.POST("mail/test", controller.MailTest) // user - sr.GET("user/edit", controller.UserShow) - sr.GET("user/uploadPage", controller.UploadPage) - sr.POST("user/edit", controller.ProfileEdit) sr.POST("user/avatar", controller.AvatarEdit) + sr.GET("user/uploadPage", controller.UploadPage) + sr.GET("user/edit", controller.UserEdit) + sr.POST("user/edit", controller.UserEdit) sr.GET("user/pwd", controller.PwdEdit) - sr.POST("user/pwd", controller.PwdEditHandler) + sr.POST("user/pwd", controller.PwdEdit) } diff --git a/app/service/admin_service.go b/app/service/admin_service.go index af034a93b87ccae34bb8768ac3b0da5b04eb6005..63562d493e223debbed1798ca3c0dd9a1f3fb52f 100644 --- a/app/service/admin_service.go +++ b/app/service/admin_service.go @@ -6,6 +6,7 @@ import ( "github.com/cilidm/toolbox/gconv" pkg "github.com/cilidm/toolbox/str" "github.com/gin-gonic/gin" + "go.uber.org/zap" "pear-admin-go/app/core/cache" "pear-admin-go/app/core/config" "pear-admin-go/app/dao" @@ -49,6 +50,7 @@ func AdminListJsonService(f request.AdminForm) (count int, data []map[string]int filters := BuildFilter(f) list, count, err := dao.NewAdminDaoImpl().FindByPage(f.Page, f.Limit, filters...) if err != nil { + global.Log.Error("AdminListJsonService.FindByPage", zap.Error(err)) return count, data, err } for _, v := range list { @@ -89,6 +91,7 @@ func CreateAdminService(r request.AdminAddForm, uid int) error { LastLogin: time.Now().Format(e.TimeFormat), }) if err != nil { + global.Log.Error("CreateAdminService.Insert", zap.Error(err)) return err } return nil @@ -99,6 +102,7 @@ func UpdateAdminStatus(id, status string) error { attr["status"] = status admin, err := dao.NewAdminDaoImpl().FindAdmin("id = ?", id) if err != nil { + global.Log.Error("UpdateAdminStatus.FindAdmin", zap.Error(err)) return err } if admin.ID < 1 { @@ -126,23 +130,34 @@ func UpdateAdminAttrService(f request.AdminEditForm) error { } admin, err := dao.NewAdminDaoImpl().FindAdmin("id = ?", f.ID) if err != nil { + global.Log.Error("UpdateAdminAttrService.FindAdmin", zap.Error(err)) return err } if admin.ID < 1 { return errors.New("未找到用户") } err = dao.NewAdminDaoImpl().Update(admin, attr) - return err + if err != nil { + global.Log.Error("UpdateAdminAttrService.Update", zap.Error(err)) + return err + } + return nil } func AdminEditService(uid string) (show model.AdminShow, rolesShow []model.RoleEditShow, err error) { admin, err := dao.NewAdminDaoImpl().FindAdmin("id = ?", uid) if err != nil { + global.Log.Error("AdminEditService.FindAdmin", zap.Error(err)) + return show, rolesShow, err + } + err = pkg.CopyFields(&show, admin) + if err != nil { + global.Log.Error("AdminEditService.CopyFields", zap.Error(err)) return show, rolesShow, err } - pkg.CopyFields(&show, admin) roles, err := dao.NewRoleDaoImpl().FindRoles("status = ?", "1") // 查找全部的分组 if err != nil { + global.Log.Error("AdminEditService.FindRoles", zap.Error(err)) return show, rolesShow, err } check := strings.Split(admin.RoleIds, ",") @@ -168,6 +183,7 @@ func AdminAddHandlerService(roleIds, status string, f request.AdminAddForm, c *g f.RoleIds = roleIds f.Status = gconv.Int(status) if err := CreateAdminService(f, GetUid(c)); err != nil { + global.Log.Error("AdminAddHandlerService.CreateAdminService", zap.Error(err)) return err } return nil @@ -176,16 +192,18 @@ func AdminAddHandlerService(roleIds, status string, f request.AdminAddForm, c *g func AdminDeleteService(uid string, c *gin.Context) error { admin, err := dao.NewAdminDaoImpl().FindAdmin("id = ?", uid) if err != nil { + global.Log.Error("AdminDeleteService.FindAdmin", zap.Error(err)) return err } if admin.ID == 1 || admin.Level == 99 { - return err + return errors.New("超级管理员不能删除") } userId := GetUid(c) if admin.ID == gconv.Uint(userId) { - return err + return errors.New("不能删除本人账号") } if err := dao.NewAdminDaoImpl().Delete(gconv.Int(uid)); err != nil { + global.Log.Error("AdminDeleteService.Delete", zap.Error(err)) return err } return nil @@ -374,8 +392,11 @@ func GetImgSavePath(path string) string { return strings.ReplaceAll(path, config.Conf.App.ImgUrlPath, config.Conf.App.ImgSavePath) } -func GetLoginInfo() ([]model.LoginInfo, error) { - info, _, err := dao.NewLoginInfoImpl().FindByPage(1, 5) +func GetLoginInfo(c *gin.Context) ([]model.LoginInfo, error) { + user := GetProfile(c) + filters := make([]interface{}, 0) + filters = append(filters, "login_name = ?", user.LoginName) + info, _, err := dao.NewLoginInfoImpl().FindByPage(1, 5, filters...) if err != nil { return nil, err } diff --git a/app/util/e/const.go b/app/util/e/const.go index 392690f0550d9f0e9f1a8ca6b0a7d1d83dd40da1..d008292b8fa5a7ed8778e5a35ad423badea42a52 100644 --- a/app/util/e/const.go +++ b/app/util/e/const.go @@ -7,7 +7,7 @@ const ( DefUploadSize = 2 * 1024 * 1024 // 默认最大上传 DefaultSaltLen = 10 - AllowAuth = "/system,/system/index,/system/main,/system/pear_config,/system/menu_config" // 不需要验证的地址放在这里 + AllowAuth = "/system,/system/index,/system/main,/system/pear,/system/menu" // 不需要验证的地址放在这里 // 日期格式化 TimeFormatDay = "20060102" diff --git a/database/base_system.sql b/database/base_system.sql index f3844371ac33141009f73e3932538b8d4120944f..01cd13104ddec2be756db6768d96f88d794cae6d 100644 --- a/database/base_system.sql +++ b/database/base_system.sql @@ -23,17 +23,15 @@ VALUES (15, '个人中心', 'profile/edit', 1, 0, 4, 'layui-icon layui-icon-user', 1, 1, 0, 0, 1, '2020-10-14 17:04:30', '2020-10-14 17:04:30'), (20, '基础设置', '/', 1, 0, 2, 'layui-icon layui-icon-auz', 1, 1, 0, 1, 1, '2020-10-14 17:04:30', '2020-10-14 17:04:30'), (24, '资料修改', '/system/user/edit', 1, 15, 1, 'fa-edit', 1, 1, 1, 0, 1, '2020-10-14 17:04:30', '2020-10-14 17:04:30'), - (45, '权限树', '/system/auth/get_nodes', 0, 11, 4, '', 0, 1, 2, 0, 0, '2020-10-14 17:04:30', '2020-10-14 17:04:30'), - (46, '单个权限获取', '/system/auth/get_node', 0, 11, 5, '', 0, 1, 2, 0, 0, '2020-10-14 17:04:30', '2020-10-14 17:04:30'), - (47, '管理员列表', '/system/admin/list_json', 0, 3, 4, '', 0, 1, 2, 0, 0, '2020-10-14 17:04:30', '2020-10-14 17:04:30'), - (48, '角色列表', '/system/role/list_json', 0, 4, 4, '', 0, 1, 2, 0, 0, '2020-10-14 17:04:30', '2020-10-14 17:04:30'), - (49, '站点设置', '/system/site/list', 0, 20, 1, 'layui-icon layui-icon-home', 1, 1, 1, 0, 0, '2020-10-14 17:04:30', '2020-10-14 17:04:30'), - (50, '上传图片', '/system/upload/def_upload', 0, 49, 1, '', 0, 1, 2, 0, 0, '2020-10-14 17:04:30', '2020-10-14 17:04:30'), + (45, '权限树', '/system/auth/nodes', 0, 11, 4, '', 0, 1, 2, 0, 0, '2020-10-14 17:04:30', '2020-10-14 17:04:30'), + (46, '单个权限获取', '/system/auth/node', 0, 11, 5, '', 0, 1, 2, 0, 0, '2020-10-14 17:04:30', '2020-10-14 17:04:30'), + (47, '管理员列表', '/system/admin/json', 0, 3, 4, '', 0, 1, 2, 0, 0, '2020-10-14 17:04:30', '2020-10-14 17:04:30'), + (48, '角色列表', '/system/role/json', 0, 4, 4, '', 0, 1, 2, 0, 0, '2020-10-14 17:04:30', '2020-10-14 17:04:30'), + (49, '站点设置', '/system/site/edit', 0, 20, 1, 'layui-icon layui-icon-home', 1, 1, 1, 0, 0, '2020-10-14 17:04:30', '2020-10-14 17:04:30'), + (50, '上传图片', '/system/upload', 0, 49, 1, '', 0, 1, 2, 0, 0, '2020-10-14 17:04:30', '2020-10-14 17:04:30'), (51, '更新站点设置', '/system/site/edit', 0, 49, 2, '', 0, 1, 2, 0, 0, '2020-10-14 17:04:30', '2020-10-14 17:04:30'), (55, '更新头像', '/system/user/avatar', 0, 24, 2, '', 0, 1, 2, 0, 0, '2020-10-14 17:04:30', '2020-10-14 17:04:30'), (56, '修改密码', '/system/user/pwd', 0, 15, 2, '', 1, 1, 2, 0, 0, '2020-10-14 17:04:30', '2020-10-14 17:04:30'), - (57, 'pear-config', '/system/pear_config', 1, 49, 2, 'layui-icon ', 0, 1, 2, 1, 0, '2021-05-06 17:32:06', '2021-05-06 17:32:08'), - (58, 'menu_config', '/system/menu_config', 1, 49, 3, 'layui-icon ', 0, 1, 2, 1, 0, '2021-05-06 17:32:40', '2021-05-06 17:32:43'), (59, '工作空间', '/', 0, 0, 1, 'layui-icon layui-icon-console', 1, 1, 0, 0, 0, '2021-05-21 15:16:44', '2021-05-21 15:16:44'), (60, '后台首页', '/system/main', 0, 59, 1, 'layui-icon layui-icon-rate', 1, 1, 1, 0, 0, '2021-05-21 15:22:36', '2021-05-21 15:22:36'); @@ -63,4 +61,4 @@ VALUES -- name: create-pear-config INSERT INTO `pear_config`(`id`, `created_at`, `updated_at`, `config_type`, `config_data`, `config_status`) VALUES - (1, '2021-05-28 10:48:35', '2021-05-28 10:48:35', 'pear-config', '{"colors":[{"color":"#2d8cf0","id":"1"},{"color":"#5FB878","id":"2"},{"color":"#1E9FFF","id":"3"},{"color":"#FFB800","id":"4"},{"color":"darkgray","id":"5"}],"header":{"message":"/static/admin/data/message.json"},"links":[{"href":"http://www.pearadmin.com","icon":"layui-icon layui-icon-auz","title":"官方网站"},{"href":"http://www.pearadmin.com","icon":"layui-icon layui-icon-auz","title":"开发文档"},{"href":"https://gitee.com/Jmysy/Pear-Admin-Layui","icon":"layui-icon layui-icon-auz","title":"开源地址"}],"logo":{"image":"/static/admin/images/logo.png","title":"Pear Admin"},"menu":{"accordion":true,"control":false,"data":"/system/menu_config","method":"GET","select":"60"},"other":{"autoHead":false,"keepLoad":100},"tab":{"index":{"href":"/system/main","id":"60","title":"首页"},"keepState":true,"muiltTab":true,"tabMax":30},"theme":{"allowCustom":true,"defaultColor":"2","defaultMenu":"dark-theme"}}', 1); + (1, '2021-05-28 10:48:35', '2021-05-28 10:48:35', 'pear-config', '{"colors":[{"color":"#2d8cf0","id":"1"},{"color":"#5FB878","id":"2"},{"color":"#1E9FFF","id":"3"},{"color":"#FFB800","id":"4"},{"color":"darkgray","id":"5"}],"header":{"message":"/static/admin/data/message.json"},"links":[{"href":"http://www.pearadmin.com","icon":"layui-icon layui-icon-auz","title":"官方网站"},{"href":"http://www.pearadmin.com","icon":"layui-icon layui-icon-auz","title":"开发文档"},{"href":"https://gitee.com/Jmysy/Pear-Admin-Layui","icon":"layui-icon layui-icon-auz","title":"开源地址"}],"logo":{"image":"/static/admin/images/logo.png","title":"Pear Admin"},"menu":{"accordion":true,"control":false,"data":"/system/menu","method":"GET","select":"60"},"other":{"autoHead":false,"keepLoad":100},"tab":{"index":{"href":"/system/main","id":"60","title":"首页"},"keepState":true,"muiltTab":true,"tabMax":30},"theme":{"allowCustom":true,"defaultColor":"2","defaultMenu":"dark-theme"}}', 1); diff --git a/static/config/pear.config.json b/static/config/pear.config.json index d646df76e078bd338a180c3519cd5099912b61a2..f8124ae3d5a0fdb2d717a02b2d68bfb63d64ef7b 100644 --- a/static/config/pear.config.json +++ b/static/config/pear.config.json @@ -4,7 +4,7 @@ "image": "/static/admin/images/logo.png" }, "menu": { - "data": "/system/menu_config", + "data": "/system/menu", "accordion": true, "method": "GET", "control": false, diff --git a/static/config/pear.config.yml b/static/config/pear.config.yml index 728be9077a1b716d3df9d2fdeb719546960713ba..6809cc87065f9cbdda0ab49ce934c6ee5525e023 100644 --- a/static/config/pear.config.yml +++ b/static/config/pear.config.yml @@ -8,7 +8,7 @@ logo: ## 菜单配置 menu: ## 菜单数据来源 - data: "/system/menu_config" + data: "/system/menu" ## 菜单接口的请求方式 GET / POST method: "GET" ## 是否同时只打开一个菜单目录 diff --git a/template/system/admin_log/log_list.html b/template/system/admin_log/log_list.html index e180feb408febf05f694d4d23607c55547386b10..655be48c85b5577cfdec7ebfb6f20c08b02a3510 100644 --- a/template/system/admin_log/log_list.html +++ b/template/system/admin_log/log_list.html @@ -91,7 +91,7 @@ table.render({ elem: '#log-operate-table', - url: MODULE_PATH + 'log_operate', + url: MODULE_PATH + 'operate', page: true, cols: operate_cols, skin: 'line', @@ -100,7 +100,7 @@ table.render({ elem: '#log-login-table', - url: MODULE_PATH + 'log_login', + url: MODULE_PATH + 'login', page: true, cols: login_cols, skin: 'line', diff --git a/template/system/index/index.html b/template/system/index/index.html index aceb7a3a6d13faba8dba6da2d21ebc3acc7cb94b..78943b3a1ca367ac7b0ae08687c3c826748f79b0 100644 --- a/template/system/index/index.html +++ b/template/system/index/index.html @@ -91,7 +91,7 @@ // 你可以通过 admin.setConfigPath 方法修改配置文件位置 // 你可以通过 admin.setConfigType 方法修改配置文件类型 admin.setConfigType("json"); - admin.setConfigPath("/system/pear_config"); + admin.setConfigPath("/system/pear"); admin.render(); // 登出逻辑 diff --git a/template/system/role/role_list.html b/template/system/role/role_list.html index b25d6bde6717fc78562a1b54ba2ca2544f2df85f..856a496a11b8796aa13a999bd3368f4474e3676f 100644 --- a/template/system/role/role_list.html +++ b/template/system/role/role_list.html @@ -84,7 +84,7 @@ }); table.render({ elem: '#role-table', - url: '/system/role/list_json', + url: '/system/role/json', page: true, cols: [ [{ @@ -156,7 +156,7 @@ status = 1 } $.ajax({ - url: "/system/admin/edit_status", + url: "/system/admin/status", type: "POST", data: {id:this.value,status:status}, dataType:'json', diff --git a/template/system/role_admin/admin_list.html b/template/system/role_admin/admin_list.html index d91b17913b7b8e83e8dbad1e02241cd261f7597e..493712e762925e4e82257e0a8e40841d66b59016 100644 --- a/template/system/role_admin/admin_list.html +++ b/template/system/role_admin/admin_list.html @@ -83,7 +83,7 @@ }); table.render({ elem: '#user-table', - url: '/system/admin/list_json', + url: '/system/admin/json', page: true, cols: [ [{ @@ -169,7 +169,7 @@ status = 1 } $.ajax({ - url: "/system/admin/edit_status", + url: "/system/admin/status", type: "POST", data: {id:this.value,status:status}, dataType:'json', diff --git a/template/system/role_auth/auth_add.html b/template/system/role_auth/auth_add.html index 5fb684af4058261fca3cc45407b0c761b5bc3dc8..ae04a3db1fd301aa71dfbfd0d7232682b9652ce6 100644 --- a/template/system/role_auth/auth_add.html +++ b/template/system/role_auth/auth_add.html @@ -84,7 +84,7 @@ dtree.renderSelect({ elem: "#selectParent", - url: "/system/auth/selectParent", + url: "/system/auth/parent", method: 'get', selectInputName: {nodeId: "parentId", context: "powerName"}, skin: "layui", diff --git a/template/system/role_auth/auth_edit.html b/template/system/role_auth/auth_edit.html index 5fb677f171ca66baa8da178fcb7007df345fdfb5..4a87566084c3524eb0608eafdbb479c4c177218d 100644 --- a/template/system/role_auth/auth_edit.html +++ b/template/system/role_auth/auth_edit.html @@ -85,7 +85,7 @@ dtree.renderSelect({ elem: "#selectParent", - url: "/system/auth/selectParent", + url: "/system/auth/parent", method: 'get', selectInputName: {nodeId: "parentId", context: "powerName"}, skin: "layui", diff --git a/template/system/role_auth/auth_list.html b/template/system/role_auth/auth_list.html index 203553e10ebeabb85e5a6d99cf2de0bf17605087..ef2271de7dd093baba7bf918d5ccc34c11e871ab 100644 --- a/template/system/role_auth/auth_list.html +++ b/template/system/role_auth/auth_list.html @@ -59,7 +59,7 @@ treeDefaultClose: true, toolbar:'#power-toolbar', elem: '#power-table', - url: '/system/auth/get_nodes', + url: '/system/auth/nodes', page: false, cols: [ [ diff --git a/template/system/user/upload_profile.html b/template/system/user/upload_profile.html index b783b46927d13acf880acc67faec106349d7aa77..bc2ce1ed2c1e9e1b414d70a4c41622908a02b77b 100644 --- a/template/system/user/upload_profile.html +++ b/template/system/user/upload_profile.html @@ -63,7 +63,7 @@ formData.append('fileToken', timeStamp); $.ajax({ method: "post", - url: "/system/upload/def_upload", //用于文件上传的服务器端请求地址 + url: "/system/upload", //用于文件上传的服务器端请求地址 data: formData, processData: false, contentType: false,