diff --git a/server/api/v1/system/sys_user.go b/server/api/v1/system/sys_user.go index 9169f06ce..ae6ab022b 100644 --- a/server/api/v1/system/sys_user.go +++ b/server/api/v1/system/sys_user.go @@ -264,7 +264,7 @@ func (b *BaseApi) SetUserAuthority(c *gin.Context) { } c.Header("new-token", token) c.Header("new-expires-at", strconv.FormatInt(claims.ExpiresAt.Unix(), 10)) - utils.SetToken(c, token, int((claims.ExpiresAt.Unix()-time.Now().Unix())/60)) + utils.SetToken(c, token, int(claims.ExpiresAt.Unix()-time.Now().Unix())) response.OkWithMessage("修改成功", c) } diff --git a/server/model/system/sys_base_menu.go b/server/model/system/sys_base_menu.go index 99eea2197..6595db124 100644 --- a/server/model/system/sys_base_menu.go +++ b/server/model/system/sys_base_menu.go @@ -13,7 +13,7 @@ type SysBaseMenu struct { Hidden bool `json:"hidden" gorm:"comment:是否在列表隐藏"` // 是否在列表隐藏 Component string `json:"component" gorm:"comment:对应前端文件路径"` // 对应前端文件路径 Sort int `json:"sort" gorm:"comment:排序标记"` // 排序标记 - Meta `json:"meta" gorm:"embedded;comment:附加属性"` // 附加属性 + Meta `json:"meta" gorm:"embedded"` // 附加属性 SysAuthoritys []SysAuthority `json:"authoritys" gorm:"many2many:sys_authority_menus;"` Children []SysBaseMenu `json:"children" gorm:"-"` Parameters []SysBaseMenuParameter `json:"parameters"` diff --git a/server/plugin/plugin-tool/utils/check.go b/server/plugin/plugin-tool/utils/check.go index 4ea21921e..82e31a0bf 100644 --- a/server/plugin/plugin-tool/utils/check.go +++ b/server/plugin/plugin-tool/utils/check.go @@ -1,50 +1,53 @@ package utils import ( - "fmt" + "github.com/pkg/errors" + "go.uber.org/zap" + "gorm.io/gorm" "github.com/flipped-aurora/gin-vue-admin/server/global" "github.com/flipped-aurora/gin-vue-admin/server/model/system" ) -func RegisterApis(apis ...system.SysApi) { - var count int64 - var apiPaths []string - for i := range apis { - apiPaths = append(apiPaths, apis[i].Path) - } - global.GVA_DB.Find(&[]system.SysApi{}, "path in (?)", apiPaths).Count(&count) - if count > 0 { - return - } - err := global.GVA_DB.Create(&apis).Error +func RegisterApis( apis ...system.SysApi) { + err := global.GVA_DB.Transaction(func(tx *gorm.DB) error { + for _, api := range apis { + err := tx.Model(system.SysApi{}).Where("path = ? AND method = ? AND api_group = ? ", api.Path, api.Method, api.ApiGroup).FirstOrCreate(&api).Error + if err != nil { + zap.L().Error("注册API失败", zap.Error(err), zap.String("api", api.Path), zap.String("method", api.Method), zap.String("apiGroup", api.ApiGroup)) + return err + } + } + return nil + }) if err != nil { - fmt.Println(err) + zap.L().Error("注册API失败", zap.Error(err)) } } -func RegisterMenus(menus ...system.SysBaseMenu) { - var count int64 - var menuNames []string +func RegisterMenus( menus ...system.SysBaseMenu) { parentMenu := menus[0] otherMenus := menus[1:] - for i := range menus { - menuNames = append(menuNames, menus[i].Name) - } - global.GVA_DB.Find(&[]system.SysBaseMenu{}, "name in (?)", menuNames).Count(&count) - if count > 0 { - return - } - err := global.GVA_DB.Create(&parentMenu).Error - if err != nil { - fmt.Println(err) - } - for i := range otherMenus { + err := global.GVA_DB.Transaction(func(tx *gorm.DB) error { + err := tx.Model(system.SysBaseMenu{}).Where("name = ? ", parentMenu.Name).FirstOrCreate(&parentMenu).Error + if err != nil { + zap.L().Error("注册菜单失败", zap.Error(err)) + return errors.Wrap(err, "注册菜单失败") + } pid := parentMenu.ID - otherMenus[i].ParentId = pid - } - err = global.GVA_DB.Create(&otherMenus).Error + for i := range otherMenus { + otherMenus[i].ParentId = pid + err = tx.Model(system.SysBaseMenu{}).Where("name = ? ", otherMenus[i].Name).FirstOrCreate(&otherMenus[i]).Error + if err != nil { + zap.L().Error("注册菜单失败", zap.Error(err)) + return errors.Wrap(err, "注册菜单失败") + } + } + + return nil + }) if err != nil { - fmt.Println(err) + zap.L().Error("注册菜单失败", zap.Error(err)) } + } diff --git a/server/utils/autocode/template_funcs.go b/server/utils/autocode/template_funcs.go index 5cc370cc8..2845aeac0 100644 --- a/server/utils/autocode/template_funcs.go +++ b/server/utils/autocode/template_funcs.go @@ -219,7 +219,7 @@ func GenerateSearchFormItem(field systemReq.AutoCodeField) string { if field.FieldType == "array" { multipleAttr = "multiple " } - result += fmt.Sprintf(` + result += fmt.Sprintf(` `, field.FieldJson, field.FieldDesc, field.DictType, field.Clearable, multipleAttr) } else if field.CheckDataSource { diff --git a/server/utils/claims.go b/server/utils/claims.go index 2a6308e8a..f69796718 100644 --- a/server/utils/claims.go +++ b/server/utils/claims.go @@ -49,7 +49,7 @@ func GetToken(c *gin.Context) string { global.GVA_LOG.Error("重新写入cookie token失败,未能成功解析token,请检查请求头是否存在x-token且claims是否为规定结构") return token } - SetToken(c, token, int((claims.ExpiresAt.Unix()-time.Now().Unix())/60)) + SetToken(c, token, int(claims.ExpiresAt.Unix()-time.Now().Unix())) } return token } diff --git a/web/src/core/config.js b/web/src/core/config.js index 6c63b15ff..175e24257 100644 --- a/web/src/core/config.js +++ b/web/src/core/config.js @@ -8,7 +8,7 @@ const greenText = (text) => `\x1b[32m${text}\x1b[0m` export const config = { appName: 'Gin-Vue-Admin', showViteLogo: true, - KeepAliveTabs: true, + keepAliveTabs: false, logs: [] } diff --git a/web/src/pinia/modules/router.js b/web/src/pinia/modules/router.js index c5c49ea08..66850eb51 100644 --- a/web/src/pinia/modules/router.js +++ b/web/src/pinia/modules/router.js @@ -56,7 +56,7 @@ export const useRouterStore = defineStore('router', () => { // 1. 首先添加原有的keepAlive配置 keepArrTemp.push(...keepAliveRoutersArr) - if (config.KeepAliveTabs) { + if (config.keepAliveTabs) { history.forEach((item) => { // 2. 为所有history中的路由强制启用keep-alive // 通过routeMap获取路由信息,然后通过pathInfo获取组件名 diff --git a/web/src/view/superAdmin/user/user.vue b/web/src/view/superAdmin/user/user.vue index 974edc144..1fab1c08b 100644 --- a/web/src/view/superAdmin/user/user.vue +++ b/web/src/view/superAdmin/user/user.vue @@ -174,7 +174,7 @@ - + { + authOptions.value = [] + setAuthorityOptions(authData, authOptions.value) + } + const initPage = async () => { getTableData() const res = await getAuthorityList() @@ -373,7 +379,7 @@ nickName: '', password: '' }) - + // 生成随机密码 const generateRandomPassword = () => { const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*' @@ -395,7 +401,7 @@ }) }) } - + // 打开重置密码对话框 const resetPasswordFunc = (row) => { resetPwdInfo.value.ID = row.ID @@ -404,7 +410,7 @@ resetPwdInfo.value.password = '' resetPwdDialog.value = true } - + // 确认重置密码 const confirmResetPassword = async () => { if (!resetPwdInfo.value.password) { @@ -414,12 +420,12 @@ }) return } - + const res = await resetPassword({ ID: resetPwdInfo.value.ID, password: resetPwdInfo.value.password }) - + if (res.code === 0) { ElMessage({ type: 'success', @@ -433,7 +439,7 @@ }) } } - + // 关闭重置密码对话框 const closeResetPwdDialog = () => { resetPwdInfo.value.password = '' @@ -450,12 +456,6 @@ }) } - const authOptions = ref([]) - const setOptions = (authData) => { - authOptions.value = [] - setAuthorityOptions(authData, authOptions.value) - } - const deleteUserFunc = async (row) => { ElMessageBox.confirm('确定要删除吗?', '提示', { confirmButtonText: '确定',