Commit 05d0a6b7 authored by drigle's avatar drigle

fix: center table loading state

parent 3cc706f5
...@@ -74,9 +74,7 @@ export function DataTableEmptyState({ title = '暂无数据', size = 'md' }) { ...@@ -74,9 +74,7 @@ export function DataTableEmptyState({ title = '暂无数据', size = 'md' }) {
function DataTableLoadingState() { function DataTableLoadingState() {
return ( return (
<div className="flex min-h-48 items-center justify-center" aria-label="数据加载中"> <div className="min-h-48 w-full" aria-hidden="true" />
<Spinner size="sm" />
</div>
); );
} }
...@@ -264,7 +262,7 @@ export function DataTable({ ...@@ -264,7 +262,7 @@ export function DataTable({
return ( return (
<div className={['relative min-w-0 w-full', className].filter(Boolean).join(' ')}> <div className={['relative min-w-0 w-full', className].filter(Boolean).join(' ')}>
<div ref={gridViewportRef} className="relative min-w-0 w-full"> <div ref={gridViewportRef} className="relative min-w-0 w-full">
{isLoading && rows.length > 0 ? ( {isLoading ? (
<div <div
className="absolute inset-0 z-10 grid place-items-center" className="absolute inset-0 z-10 grid place-items-center"
aria-label="数据加载中" aria-label="数据加载中"
......
...@@ -130,6 +130,9 @@ export default function SubjectRecordWorkbench({ ...@@ -130,6 +130,9 @@ export default function SubjectRecordWorkbench({
safePage * pageSize, safePage * pageSize,
(safePage + 1) * pageSize, (safePage + 1) * pageSize,
); );
const displayRecords = loading ? [] : pageRecords;
const displaySelectedIds = loading ? [] : selectedIds;
const displayPage = loading ? 0 : safePage;
useEffect(() => { useEffect(() => {
if (safePage !== page) { if (safePage !== page) {
...@@ -311,8 +314,8 @@ export default function SubjectRecordWorkbench({ ...@@ -311,8 +314,8 @@ export default function SubjectRecordWorkbench({
description={description} description={description}
columns={visibleColumns} columns={visibleColumns}
columnGroups={activeView?.settings?.groups || []} columnGroups={activeView?.settings?.groups || []}
records={pageRecords} records={displayRecords}
selectedIds={selectedIds} selectedIds={displaySelectedIds}
onSelectionChange={setSelectedIds} onSelectionChange={setSelectedIds}
toolbarActions={builtToolbarActions} toolbarActions={builtToolbarActions}
bulkActions={builtBulkActions} bulkActions={builtBulkActions}
...@@ -345,10 +348,10 @@ export default function SubjectRecordWorkbench({ ...@@ -345,10 +348,10 @@ export default function SubjectRecordWorkbench({
: '当前账号未获得该对象 Grid 视图的查看权限。', : '当前账号未获得该对象 Grid 视图的查看权限。',
}} }}
pagination={{ pagination={{
page: safePage, page: displayPage,
pageSize, pageSize,
pageSizeOptions: PAGE_SIZE_OPTIONS, pageSizeOptions: PAGE_SIZE_OPTIONS,
totalRecords: filteredRecords.length, totalRecords: loading ? 0 : filteredRecords.length,
totalPages, totalPages,
onPageChange: (nextPage) => { onPageChange: (nextPage) => {
setPage(nextPage); setPage(nextPage);
......
...@@ -28,7 +28,7 @@ ...@@ -28,7 +28,7 @@
1. 页面通过 `loadSubject`、`getSubjectView` 和 `POST /record/query` 读取字段、视图和记录。 1. 页面通过 `loadSubject`、`getSubjectView` 和 `POST /record/query` 读取字段、视图和记录。
2. 表格列、视图限制、排序、选择字段选项和字段分组来自服务端配置;字段分组读取当前 Grid View 的 `settings.groups`,按配置展示分组表头并支持展开或收起。当前 Grid View 的 `settings.shortTitle === true` 时只隐藏通用 `title` 展示列;`false` 或未配置时正常展示。`title` 数据仍参与关键词搜索、排序、详情和保存,详情入口保留在项目名称和固定操作列。 2. 表格列、视图限制、排序、选择字段选项和字段分组来自服务端配置;字段分组读取当前 Grid View 的 `settings.groups`,按配置展示分组表头并支持展开或收起。当前 Grid View 的 `settings.shortTitle === true` 时只隐藏通用 `title` 展示列;`false` 或未配置时正常展示。`title` 数据仍参与关键词搜索、排序、详情和保存,详情入口保留在项目名称和固定操作列。
切换 Grid View 时立即切换当前视图、清空跨视图选择并回到第一页,同时重新读取 Subject、视图配置和 `/record/query` 数据;项目状态不再单独提供下拉筛选,按顶部 Grid View Tabs 切换。 切换 Grid View 时立即切换当前视图、清空跨视图选择并回到第一页,同时重新读取 Subject、视图配置和 `/record/query` 数据;项目状态不再单独提供下拉筛选,按顶部 Grid View Tabs 切换;刷新期间不展示上一次请求的记录行,表格在当前可视区域中心显示加载状态,失败时保留错误反馈并清空不可确认的旧数据。
View 中兼容历史字段 `metadata.project_finish_time` 时按数据定义显示为“项目完成时间”; View 中兼容历史字段 `metadata.project_finish_time` 时按数据定义显示为“项目完成时间”;
内部 `metadata.*` 路径不作为可见表头,字段取值路径和服务端配置保持不变。 内部 `metadata.*` 路径不作为可见表头,字段取值路径和服务端配置保持不变。
3. 新建和编辑时业务字段统一写入 `metadata`;引用和用户字段只提交 ID,日期提交 ISO 8601。 3. 新建和编辑时业务字段统一写入 `metadata`;引用和用户字段只提交 ID,日期提交 ISO 8601。
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment