fix: align rules list and review detail flows
This commit is contained in:
@@ -61,6 +61,16 @@ function unique(values: string[]): string[] {
|
||||
return Array.from(new Set(values.filter(Boolean)));
|
||||
}
|
||||
|
||||
function resolveDocumentScope(pack: Pick<RuleYamlPack, 'documentType' | 'mainType' | 'moduleType'>): string {
|
||||
const values = [pack.documentType, pack.mainType, pack.moduleType].join(' ');
|
||||
if (values.includes('合同')) return '合同';
|
||||
if (values.includes('案卷') || values.includes('卷宗') || values.includes('行政处罚') || values.includes('行政许可')) {
|
||||
return '案卷';
|
||||
}
|
||||
if (values.includes('公文')) return '内部公文';
|
||||
return pack.documentType || pack.mainType || pack.moduleType || '未分类';
|
||||
}
|
||||
|
||||
function riskColor(risk: string): TagColor {
|
||||
if (risk === 'high') return 'red';
|
||||
if (risk === 'medium') return 'orange';
|
||||
@@ -86,28 +96,36 @@ export async function loader({ request }: LoaderFunctionArgs) {
|
||||
};
|
||||
|
||||
const packs = await loadRuleConfigPacks(request);
|
||||
const documentTypes = unique(packs.map(pack => pack.documentType));
|
||||
const inferredDocumentType = packs.find(pack => pack.mainType === requestedFilters.mainType)?.documentType || '';
|
||||
const currentDocumentType = documentTypes.includes(requestedFilters.documentType)
|
||||
? requestedFilters.documentType
|
||||
const packScopes = packs.map(pack => ({
|
||||
pack,
|
||||
scope: resolveDocumentScope(pack),
|
||||
}));
|
||||
const documentTypes = unique(packScopes.map(item => item.scope));
|
||||
const requestedDocumentType = requestedFilters.documentType;
|
||||
const inferredDocumentType = requestedMainType
|
||||
? packScopes.find(item => item.pack.mainType === requestedMainType)?.scope || ''
|
||||
: '';
|
||||
const currentDocumentType = documentTypes.includes(requestedDocumentType)
|
||||
? requestedDocumentType
|
||||
: inferredDocumentType || documentTypes[0] || '';
|
||||
const scopedDocumentPacks = packScopes
|
||||
.filter(item => item.scope === currentDocumentType)
|
||||
.map(item => item.pack);
|
||||
const scopedFilters = {
|
||||
...requestedFilters,
|
||||
documentType: currentDocumentType,
|
||||
mainType: packs.some(pack => pack.documentType === currentDocumentType && pack.mainType === requestedFilters.mainType)
|
||||
mainType: scopedDocumentPacks.some(pack => pack.mainType === requestedFilters.mainType)
|
||||
? requestedFilters.mainType
|
||||
: '',
|
||||
subtype: packs.some(pack =>
|
||||
pack.documentType === currentDocumentType &&
|
||||
subtype: scopedDocumentPacks.some(pack =>
|
||||
(!requestedFilters.mainType || pack.mainType === requestedFilters.mainType) &&
|
||||
pack.subtype === requestedFilters.subtype
|
||||
)
|
||||
? requestedFilters.subtype
|
||||
: ''
|
||||
};
|
||||
const scopedByMainTypePacks = packs.filter(pack =>
|
||||
pack.documentType === scopedFilters.documentType &&
|
||||
(!scopedFilters.mainType || pack.mainType === scopedFilters.mainType)
|
||||
const scopedByMainTypePacks = scopedDocumentPacks.filter(pack =>
|
||||
!scopedFilters.mainType || pack.mainType === scopedFilters.mainType
|
||||
);
|
||||
const subtypeOptions = unique(scopedByMainTypePacks.map(pack => pack.subtype));
|
||||
const ruleGroupSourcePacks = scopedFilters.subtype
|
||||
@@ -122,8 +140,7 @@ export async function loader({ request }: LoaderFunctionArgs) {
|
||||
...scopedFilters,
|
||||
ruleGroup: ruleGroupOptions.includes(requestedFilters.ruleGroup) ? requestedFilters.ruleGroup : ''
|
||||
};
|
||||
const visiblePacks = packs.filter(pack =>
|
||||
pack.documentType === filters.documentType &&
|
||||
const visiblePacks = scopedDocumentPacks.filter(pack =>
|
||||
(!filters.mainType || pack.mainType === filters.mainType) &&
|
||||
(!filters.subtype || pack.subtype === filters.subtype)
|
||||
);
|
||||
@@ -196,7 +213,7 @@ export async function loader({ request }: LoaderFunctionArgs) {
|
||||
pageSize: filters.pageSize,
|
||||
options: {
|
||||
documentTypes,
|
||||
mainTypes: unique(packs.filter(pack => pack.documentType === filters.documentType).map(pack => pack.mainType)),
|
||||
mainTypes: unique(scopedDocumentPacks.map(pack => pack.mainType)),
|
||||
subtypes: subtypeOptions,
|
||||
ruleGroups: ruleGroupOptions
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user