fix: improve rule detail dependency sync

This commit is contained in:
wren
2026-05-07 11:20:55 +08:00
parent d6ce62457a
commit 87e82d1caa
2 changed files with 58 additions and 2 deletions
+45 -2
View File
@@ -788,6 +788,21 @@ export default function RulesTestDetail() {
}));
};
const removeCurrentRuleDependencies = (targets: string[]) => {
if (!currentRule) return;
const normalizedTargets = targets.map((item) => String(item || '').trim()).filter(Boolean);
if (normalizedTargets.length === 0) return;
setRules((current) => current.map((rule) => {
if (rule.id !== currentRule.id) return rule;
return {
...rule,
dependencies: rule.dependencies.filter((dependency) => (
!normalizedTargets.some((target) => dependency === target || dependency.startsWith(`${target}.`))
)),
};
}));
};
const saveRule = () => {
if (!editor || editor.kind !== 'rule') return;
const existingRule = editor.id ? rules.find(rule => rule.id === editor.id) : undefined;
@@ -883,7 +898,12 @@ export default function RulesTestDetail() {
};
const removeDocument = (documentId: string) => {
const target = subDocuments.find((document) => document.id === documentId);
setSubDocuments((current) => current.filter((document) => document.id !== documentId));
removeCurrentRuleDependencies([
documentId,
target?.name || '',
]);
setDraftSaved(false);
};
@@ -960,7 +980,14 @@ export default function RulesTestDetail() {
};
const removeVisual = (visualId: string) => {
const target = visualElements.find((item) => item.id === visualId);
setVisualElements((current) => current.filter((item) => item.id !== visualId));
removeCurrentRuleDependencies([
visualId,
target?.name || '',
`visual.${visualId}`,
`visual.${target?.name || visualId}`,
]);
setDraftSaved(false);
};
@@ -1239,7 +1266,7 @@ export default function RulesTestDetail() {
<Card className="ant-card" title="子文档 / 文书">
<div className="config-section-tools">
<span className="config-section-tip"></span>
<span className="config-section-tip"></span>
<button type="button" className="ant-btn ant-btn-default" onClick={() => openDocumentEditor()}>
<i className="ri-add-line mr-1.5"></i>
</button>
@@ -1267,7 +1294,7 @@ export default function RulesTestDetail() {
<Card className="ant-card" title="视觉要素">
<div className="config-section-tools">
<span className="config-section-tip"></span>
<span className="config-section-tip"></span>
<button type="button" className="ant-btn ant-btn-default" onClick={() => openVisualEditor()}>
<i className="ri-add-line mr-1.5"></i>
</button>
@@ -1689,6 +1716,22 @@ export default function RulesTestDetail() {
placeholder="如:合同专用章,公章"
/>
</label>
<label>
<span></span>
<input
value={(visualDraft.signerRoles || []).join('')}
onChange={(event) => setVisualDraft({ ...visualDraft, signerRoles: event.target.value.split(/[,]/).map((item) => item.trim()).filter(Boolean) })}
placeholder="如:甲方,乙方,承办人"
/>
</label>
<label className="drawer-checkbox-row">
<input
type="checkbox"
checked={Boolean(visualDraft.privateSealRestricted)}
onChange={(event) => setVisualDraft({ ...visualDraft, privateSealRestricted: event.target.checked })}
/>
<span> / </span>
</label>
<div className="drawer-actions">
<Button type="default" onClick={() => setEditor(null)}></Button>
<Button type="primary" onClick={saveVisual}></Button>
+13
View File
@@ -726,6 +726,19 @@
font-weight: 600;
}
.rules-test-page .drawer-form label.drawer-checkbox-row {
flex-direction: row;
align-items: center;
gap: 10px;
font-weight: 500;
}
.rules-test-page .drawer-form label.drawer-checkbox-row input[type="checkbox"] {
width: 16px;
height: 16px;
margin: 0;
}
.rules-test-page .drawer-form input,
.rules-test-page .drawer-form select,
.rules-test-page .drawer-form textarea {