From b1230f289169b69294249d3a4251a211aa1beaea Mon Sep 17 00:00:00 2001 From: kangwenjing <1138819403@qq.com> Date: Wed, 1 Jul 2026 18:20:29 +0800 Subject: [PATCH] 12 --- .DS_Store | Bin 14340 -> 14340 bytes .../pages/system/user-data-scope/index.less | 26 +++----------- .../pages/system/user-data-scope/index.tsx | 32 ++++++++++++++++-- 3 files changed, 33 insertions(+), 25 deletions(-) diff --git a/.DS_Store b/.DS_Store index a02c7be31c0a73aae257a844bdb8ad863a7985fd..15ee85da885ce3ca78e2fe0b2eedafb6c272c9e7 100644 GIT binary patch delta 18 ZcmZoEXeroWB*e%#`JAZuW-p;#ssKOV23i0B delta 18 ZcmZoEXeroWB*e%t`JAZuW-p;#ssKOL23Y_A diff --git a/frontend1/src/pages/system/user-data-scope/index.less b/frontend1/src/pages/system/user-data-scope/index.less index 41bb8ed4..4322bedf 100644 --- a/frontend1/src/pages/system/user-data-scope/index.less +++ b/frontend1/src/pages/system/user-data-scope/index.less @@ -1,6 +1,5 @@ .user-data-scope-page { min-height: 100%; - overflow: hidden; } .user-data-scope-overview { @@ -39,43 +38,26 @@ } .user-data-scope-table-card { - flex: 1; min-height: 0; overflow: hidden; .ant-card-body { - height: 100%; - display: flex; - flex-direction: column; - overflow: hidden; + min-height: 0; } } .user-data-scope-table { - min-height: 0; - display: flex; - flex: 1; - flex-direction: column; - .ant-spin-nested-loading, .ant-spin-container { min-height: 0; - display: flex; - flex: 1; - flex-direction: column; } - .ant-table { - min-height: 0; - flex: 1; - } - - .ant-table-container { - min-height: 0; + .ant-table-body { + overflow-y: auto !important; } .ant-table-pagination { - flex-shrink: 0; + background: #fff; margin: 12px 16px !important; } } diff --git a/frontend1/src/pages/system/user-data-scope/index.tsx b/frontend1/src/pages/system/user-data-scope/index.tsx index 280addf3..a91b6535 100644 --- a/frontend1/src/pages/system/user-data-scope/index.tsx +++ b/frontend1/src/pages/system/user-data-scope/index.tsx @@ -1,7 +1,7 @@ import { App, Button, Card, Col, DatePicker, Drawer, Form, Input, Popconfirm, Row, Select, Space, Table, Tag, Tooltip, Typography } from "antd"; import type { ColumnsType } from "antd/es/table"; import dayjs from "dayjs"; -import { useCallback, useEffect, useMemo, useState } from "react"; +import { useCallback, useEffect, useMemo, useRef, useState } from "react"; import { DeleteOutlined, EditOutlined, PlusOutlined, SearchOutlined, TeamOutlined } from "@ant-design/icons"; import PageHeader from "@/components/shared/PageHeader"; import { deleteUserDataScopeGrant, fetchUsersByRoleId, listRoles, listTenants, listUserDataScopeGrants, listUserDataScopeUsers, saveUserDataScopeAssignment } from "@/api"; @@ -148,6 +148,8 @@ export default function UserDataScopePage() { const [tenants, setTenants] = useState([]); const [drawerOpen, setDrawerOpen] = useState(false); const [editingGrantGroup, setEditingGrantGroup] = useState(null); + const [tableScrollY, setTableScrollY] = useState(360); + const tableCardRef = useRef(null); const [selectedTenantId, setSelectedTenantId] = useState(() => getActiveTenantId()); const [query, setQuery] = useState<{ keyword?: string; viewerUserId?: number; resourceType?: string; current: number; pageSize: number }>({ current: 1, @@ -203,6 +205,30 @@ export default function UserDataScopePage() { loadPageData(); }, [loadPageData]); + useEffect(() => { + const updateTableScrollY = () => { + const tableCard = tableCardRef.current; + if (!tableCard) { + return; + } + const rect = tableCard.getBoundingClientRect(); + const footerReserve = 112; + const nextScrollY = Math.max(260, Math.floor(window.innerHeight - rect.top - footerReserve)); + setTableScrollY(nextScrollY); + }; + + updateTableScrollY(); + window.addEventListener("resize", updateTableScrollY); + const observer = typeof ResizeObserver === "undefined" ? null : new ResizeObserver(updateTableScrollY); + if (observer && tableCardRef.current) { + observer.observe(tableCardRef.current); + } + return () => { + window.removeEventListener("resize", updateTableScrollY); + observer?.disconnect(); + }; + }, [filteredGrantGroups.length, query.pageSize]); + const userOptions = useMemo(() => users.map((user) => ({ label: ( @@ -516,7 +542,7 @@ export default function UserDataScopePage() { - +