Commit 3cc706f5 authored by drigle's avatar drigle

fix: refresh records when switching project views

parent dfebeb43
......@@ -5,7 +5,6 @@ import {
batchRemoveRecords,
cloneRecord,
} from '@/services/DataService';
import { getSelectOptions } from '@/utils/subjectView';
import { Copy, Delete, Edit, PlusIcon } from '@/components/AppIcons';
import { useCallback, useEffect, useMemo, useState } from 'react';
import DynamicRecordDialog from './DynamicRecordDialog';
......@@ -13,9 +12,7 @@ import {
buildConfiguredWorkbenchView,
buildGridViews,
buildViewCountMap,
collectProjectStatuses,
collectProjectYears,
findSubjectField,
loadSubjectWorkbenchResources,
} from '@/pages/project_manager_xy/SubjectWorkbenchService';
......@@ -90,6 +87,17 @@ export default function SubjectRecordWorkbench({
reload();
}, [reload]);
const handleViewChange = useCallback(async (viewName) => {
if (!viewName || viewName === activeViewName) {
return;
}
setActiveViewName(viewName);
setSelectedIds([]);
setPage(0);
await reload({ keepFeedback: true });
}, [activeViewName, reload]);
const gridViews = useMemo(() => buildGridViews(views), [views]);
useEffect(() => {
......@@ -138,7 +146,6 @@ export default function SubjectRecordWorkbench({
() => buildViewCountMap(records, filters, gridViews, subject),
[records, filters, gridViews, subject],
);
const statusField = findSubjectField(subject, 'project_status');
const filterSchema = useMemo(() => {
const fields = [
{
......@@ -149,23 +156,12 @@ export default function SubjectRecordWorkbench({
placeholder: '请输入关键词',
},
];
if (statusField) {
const configuredStatusOptions = getSelectOptions(statusField);
fields.push({
key: 'status',
label: statusField.label || '项目状态',
type: 'select',
options: configuredStatusOptions.length > 0
? configuredStatusOptions
: collectProjectStatuses(records),
});
}
const yearOptions = collectProjectYears(records);
if (yearOptions.length > 0) {
fields.push({ key: 'year', label: '项目年度', type: 'select', options: yearOptions });
}
return fields;
}, [statusField, records]);
}, [records]);
const feedbackHelpers = useMemo(() => ({
reload,
......@@ -303,11 +299,7 @@ export default function SubjectRecordWorkbench({
summaryItems={summaryItems}
views={gridViews.map((view) => ({ ...view, count: viewCounts[view.name] || 0 }))}
activeViewName={activeView?.name || ''}
onViewChange={(viewName) => {
setActiveViewName(viewName);
setSelectedIds([]);
setPage(0);
}}
onViewChange={handleViewChange}
filters={filters}
filterSchema={filterSchema}
onFiltersChange={(key, value) => {
......
......@@ -28,6 +28,7 @@
1. 页面通过 `loadSubject`、`getSubjectView` 和 `POST /record/query` 读取字段、视图和记录。
2. 表格列、视图限制、排序、选择字段选项和字段分组来自服务端配置;字段分组读取当前 Grid View 的 `settings.groups`,按配置展示分组表头并支持展开或收起。当前 Grid View 的 `settings.shortTitle === true` 时只隐藏通用 `title` 展示列;`false` 或未配置时正常展示。`title` 数据仍参与关键词搜索、排序、详情和保存,详情入口保留在项目名称和固定操作列。
切换 Grid View 时立即切换当前视图、清空跨视图选择并回到第一页,同时重新读取 Subject、视图配置和 `/record/query` 数据;项目状态不再单独提供下拉筛选,按顶部 Grid View Tabs 切换。
View 中兼容历史字段 `metadata.project_finish_time` 时按数据定义显示为“项目完成时间”;
内部 `metadata.*` 路径不作为可见表头,字段取值路径和服务端配置保持不变。
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