fix: improve rule detail dependency sync
This commit is contained in:
@@ -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>
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user