feat: align frontend document and rule management flows

This commit is contained in:
wren
2026-05-06 09:40:37 +08:00
parent 8a5044b024
commit c54f84382b
41 changed files with 4239 additions and 2903 deletions
+30 -4
View File
@@ -349,6 +349,8 @@ export default function RulesIndex() {
const [filteredTotalCount, setFilteredTotalCount] = useState<number>(initialTotalCount);
const [ruleTypes, setRuleTypes] = useState<ApiRuleType[]>(initialRuleTypes);
const [attributeTypes, setAttributeTypes] = useState<Array<{ code: string; label: string }>>([]);
const [selectedModuleName, setSelectedModuleName] = useState('');
const [moduleScopeReady, setModuleScopeReady] = useState(false);
// 添加一个状态来跟踪是否执行了删除操作
const [isDeleting, setIsDeleting] = useState(false);
@@ -398,7 +400,7 @@ export default function RulesIndex() {
// 🔑 从 sessionStorage 获取 documentTypeIds
const typeIdsStr = typeof window !== 'undefined' ? sessionStorage.getItem('documentTypeIds') : null;
const documentTypeIds = typeIdsStr ? JSON.parse(typeIdsStr) : null;
const selectedModuleName = typeof window !== 'undefined'
const currentModuleName = typeof window !== 'undefined'
? sessionStorage.getItem('selectedModuleName') || ''
: '';
@@ -456,7 +458,7 @@ export default function RulesIndex() {
let effectiveAttributeType = searchParams.get('documentAttributeType') || undefined;
const presetScopedAttributeTypes = resolveScopedSubtypeOptions({
documentTypeIds,
selectedModuleName,
selectedModuleName: currentModuleName,
ruleTypeName: ruleTypeNameParam,
apiOptions: apiAttributeTypes,
ruleOptions: []
@@ -497,7 +499,7 @@ export default function RulesIndex() {
).map(value => ({ code: value, label: value }));
const scopedAttributeTypes = resolveScopedSubtypeOptions({
documentTypeIds,
selectedModuleName,
selectedModuleName: currentModuleName,
ruleTypeName: ruleTypeNameParam,
apiOptions: apiAttributeTypes,
ruleOptions: ruleAttributeTypes
@@ -656,6 +658,8 @@ export default function RulesIndex() {
const typeIdsStr = sessionStorage.getItem('documentTypeIds');
const documentTypeIds = typeIdsStr ? JSON.parse(typeIdsStr) : null;
console.log("📋 组件挂载,从 sessionStorage 获取 documentTypeIds:", documentTypeIds);
setSelectedModuleName(sessionStorage.getItem('selectedModuleName') || '');
setModuleScopeReady(true);
// 如果有 documentTypeIds,加载数据
if (documentTypeIds && documentTypeIds.length > 0) {
@@ -667,6 +671,7 @@ export default function RulesIndex() {
}
} catch (error) {
console.error('获取 sessionStorage 中的 documentTypeIds 失败:', error);
setModuleScopeReady(true);
}
}, [initialLoad, fetchData]);
@@ -1118,7 +1123,14 @@ export default function RulesIndex() {
{/* 页面头部 */}
<div className="flex justify-between items-center mb-4">
<div className="flex items-center">
<h2 className="text-xl font-medium"></h2>
<div>
<h2 className="text-xl font-medium"></h2>
<p className="mt-1 text-sm text-gray-500">
{selectedModuleName
? `当前仅展示“${selectedModuleName}”入口关联文档类型的规则点。`
: '请先从首页进入具体入口模块,再查看该入口对应的规则点。'}
</p>
</div>
{loading ? (
<div className="flex items-center ml-4 bg-white px-3 py-1 rounded-md">
<NumberSkeleton className="ml-1" />
@@ -1171,6 +1183,20 @@ export default function RulesIndex() {
)}
</div>
</div>
{moduleScopeReady && !selectedModuleName && (
<Card className="ant-card mb-4 border-amber-200 bg-amber-50">
<div className="flex items-start gap-3 text-amber-900">
<i className="ri-information-line text-lg mt-0.5"></i>
<div>
<div className="font-medium"></div>
<div className="text-sm mt-1">
</div>
</div>
</div>
</Card>
)}
{/* 筛选区域 */}
<FilterPanel className="px-3 py-3" noActionDivider={true}