Bladeren bron

页面权限管理修改

huwei 2 dagen geleden
bovenliggende
commit
239e6ae6af
2 gewijzigde bestanden met toevoegingen van 63 en 4 verwijderingen
  1. 50 3
      server/internal/admin/service/admin_role.go
  2. 13 1
      web/src/views/permission/role/role.vue

+ 50 - 3
server/internal/admin/service/admin_role.go

@@ -60,7 +60,8 @@ func (s *sAdminRole) List(ctx *gin.Context, req forms.AdminRoleListReq) serializ
 			}
 			logDB := query.Use(config.LogDBGroup[sid])
 			pq := logDB.AdminRolePermission
-			mq := logDB.AdminRoleMenu
+			rmq := logDB.AdminRoleMenu
+			mq := logDB.AdminMenu
 			// 查询该角色各系统下的权限
 			permissionIds := make([]int32, 0)
 			if err := pq.Where(pq.RoleID.Eq(int32(v.ID))).Pluck(pq.PermissionID, &permissionIds); err != nil {
@@ -72,10 +73,56 @@ func (s *sAdminRole) List(ctx *gin.Context, req forms.AdminRoleListReq) serializ
 				permissionsMap[sid] = permissionIds
 			}
 			// 查询该角色各系统下的页面
+			type RolePage struct {
+				PageID   int32
+				ParentID int32
+			}
+			pages := make([]*RolePage, 0)
+			if err := rmq.LeftJoin(mq, mq.ID.EqCol(rmq.PageID)).Where(rmq.RoleID.Eq(int32(v.ID))).Select(rmq.PageID, mq.ParentID).Scan(&pages); err != nil {
+				return serializer.Err(consts.CodeDBError, "查询出错 RolePage", err)
+			}
+			rolePageMap := make(map[int32][]int32)
+			parentPageIdsMap := make(map[int32]struct{}, 0)
+			for _, item := range pages {
+				parentPageIdsMap[item.ParentID] = struct{}{}
+				if item.ParentID == 0 {
+					rolePageMap[item.ParentID] = make([]int32, 0)
+				} else {
+					if _, ok := rolePageMap[item.ParentID]; ok {
+						rolePageMap[item.ParentID] = append(rolePageMap[item.ParentID], item.PageID)
+					} else {
+						rolePageMap[item.ParentID] = []int32{item.PageID}
+					}
+				}
+			}
+
+			parentPageIds := make([]int32, 0)
+			for k := range parentPageIdsMap {
+				parentPageIds = append(parentPageIds, k)
+			}
+			type ParentPageSubNum struct {
+				SubNum   int32
+				ParentID int32
+			}
+			parentPageSubs := make([]*ParentPageSubNum, 0)
+			if err := mq.Select(mq.ParentID, mq.ID.Count().As("subNum")).Where(mq.ParentID.In(parentPageIds...)).Group(mq.ParentID).Scan(&parentPageSubs); err != nil {
+				return serializer.Err(consts.CodeDBError, "查询出错 allPages", err)
+			}
+
+			parentPageSubMap := make(map[int32]int32)
+			for _, item := range parentPageSubs {
+				parentPageSubMap[item.ParentID] = item.SubNum
+			}
 			pageIds := make([]int32, 0)
-			if err := mq.Where(mq.RoleID.Eq(int32(v.ID))).Pluck(mq.PageID, &pageIds); err != nil {
-				return serializer.Response{}
+			for parentId, subPages := range rolePageMap {
+				if parentPageSubMap[parentId] == int32(len(subPages)) {
+					pageIds = append(pageIds, subPages...)
+					pageIds = append(pageIds, parentId)
+				} else {
+					pageIds = append(pageIds, subPages...)
+				}
 			}
+
 			if _, ok := pagesMap[sid]; ok {
 				pagesMap[sid] = append(pagesMap[sid], pageIds...)
 			} else {

+ 13 - 1
web/src/views/permission/role/role.vue

@@ -149,7 +149,7 @@
 
       <template #action>
         <n-space>
-          <n-button @click="() => (showModal = false)">取消</n-button>
+          <n-button @click="cancelForm">取消</n-button>
           <n-button type="info" :loading="formBtnLoading" @click="confirmForm">确定</n-button>
         </n-space>
       </template>
@@ -317,6 +317,18 @@
     actionRef.value.reload();
   }
 
+  function cancelForm() {
+    actionRef.value.reload();
+    showModal.value = false;
+    return;
+
+    // pages.value = formParams.value.pages;
+    // permissions.value = formParams.value.permissions;
+    // formSystems.value = formParams.value.systems;
+    // selectSystem.value = formParams.value.systems;
+    // showModal.value = false;
+  }
+
   function confirmForm(e: any) {
     formParams.value.systems = formSystems.value;
     formParams.value.permissions = permissions.value;