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 = () => {
|
const saveRule = () => {
|
||||||
if (!editor || editor.kind !== 'rule') return;
|
if (!editor || editor.kind !== 'rule') return;
|
||||||
const existingRule = editor.id ? rules.find(rule => rule.id === editor.id) : undefined;
|
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 removeDocument = (documentId: string) => {
|
||||||
|
const target = subDocuments.find((document) => document.id === documentId);
|
||||||
setSubDocuments((current) => current.filter((document) => document.id !== documentId));
|
setSubDocuments((current) => current.filter((document) => document.id !== documentId));
|
||||||
|
removeCurrentRuleDependencies([
|
||||||
|
documentId,
|
||||||
|
target?.name || '',
|
||||||
|
]);
|
||||||
setDraftSaved(false);
|
setDraftSaved(false);
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -960,7 +980,14 @@ export default function RulesTestDetail() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const removeVisual = (visualId: string) => {
|
const removeVisual = (visualId: string) => {
|
||||||
|
const target = visualElements.find((item) => item.id === visualId);
|
||||||
setVisualElements((current) => current.filter((item) => item.id !== visualId));
|
setVisualElements((current) => current.filter((item) => item.id !== visualId));
|
||||||
|
removeCurrentRuleDependencies([
|
||||||
|
visualId,
|
||||||
|
target?.name || '',
|
||||||
|
`visual.${visualId}`,
|
||||||
|
`visual.${target?.name || visualId}`,
|
||||||
|
]);
|
||||||
setDraftSaved(false);
|
setDraftSaved(false);
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1239,7 +1266,7 @@ export default function RulesTestDetail() {
|
|||||||
|
|
||||||
<Card className="ant-card" title="子文档 / 文书">
|
<Card className="ant-card" title="子文档 / 文书">
|
||||||
<div className="config-section-tools">
|
<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()}>
|
<button type="button" className="ant-btn ant-btn-default" onClick={() => openDocumentEditor()}>
|
||||||
<i className="ri-add-line mr-1.5"></i>新增子文档
|
<i className="ri-add-line mr-1.5"></i>新增子文档
|
||||||
</button>
|
</button>
|
||||||
@@ -1267,7 +1294,7 @@ export default function RulesTestDetail() {
|
|||||||
|
|
||||||
<Card className="ant-card" title="视觉要素">
|
<Card className="ant-card" title="视觉要素">
|
||||||
<div className="config-section-tools">
|
<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()}>
|
<button type="button" className="ant-btn ant-btn-default" onClick={() => openVisualEditor()}>
|
||||||
<i className="ri-add-line mr-1.5"></i>新增视觉要素
|
<i className="ri-add-line mr-1.5"></i>新增视觉要素
|
||||||
</button>
|
</button>
|
||||||
@@ -1689,6 +1716,22 @@ export default function RulesTestDetail() {
|
|||||||
placeholder="如:合同专用章,公章"
|
placeholder="如:合同专用章,公章"
|
||||||
/>
|
/>
|
||||||
</label>
|
</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">
|
<div className="drawer-actions">
|
||||||
<Button type="default" onClick={() => setEditor(null)}>取消</Button>
|
<Button type="default" onClick={() => setEditor(null)}>取消</Button>
|
||||||
<Button type="primary" onClick={saveVisual}>保存视觉要素</Button>
|
<Button type="primary" onClick={saveVisual}>保存视觉要素</Button>
|
||||||
|
|||||||
@@ -726,6 +726,19 @@
|
|||||||
font-weight: 600;
|
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 input,
|
||||||
.rules-test-page .drawer-form select,
|
.rules-test-page .drawer-form select,
|
||||||
.rules-test-page .drawer-form textarea {
|
.rules-test-page .drawer-form textarea {
|
||||||
|
|||||||
Reference in New Issue
Block a user