From f71ee2f861b69ea0061a1ca7cc194fcd48009415 Mon Sep 17 00:00:00 2001 From: iqudoo Date: Sat, 13 Jun 2026 06:13:25 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E7=BE=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/PropSidebar.tsx | 28 ++- src/components/TextDisplayAffixFields.tsx | 51 +++++ src/components/ValueExtractFields.tsx | 135 ++++++++++++++ src/components/VisibilityRuleDialog.tsx | 37 ++-- src/components/VisibilityRuleForm.tsx | 136 +++++++++----- src/components/VisibilityRuleSummary.tsx | 11 +- src/types.ts | 30 +++ src/utils.ts | 218 +++++++++++++++++++--- 8 files changed, 543 insertions(+), 103 deletions(-) create mode 100644 src/components/TextDisplayAffixFields.tsx create mode 100644 src/components/ValueExtractFields.tsx diff --git a/src/components/PropSidebar.tsx b/src/components/PropSidebar.tsx index 2f9f3b8..bd39dbe 100644 --- a/src/components/PropSidebar.tsx +++ b/src/components/PropSidebar.tsx @@ -10,6 +10,8 @@ import { } from '../utils'; import { VisibilityRuleDialog } from './VisibilityRuleDialog'; import { VisibilityRuleSummary } from './VisibilityRuleSummary'; +import { ValueExtractFields } from './ValueExtractFields'; +import { TextDisplayAffixFields } from './TextDisplayAffixFields'; import { alignToSelectionBounds, alignSelectionToCanvas, @@ -226,7 +228,9 @@ export const PropSidebar: React.FC = ({ const addableVisibilityVariables = useMemo(() => { if (!selectedElem || !isConditionalVisibility(selectedElem)) return []; const rules = resolveVisibilityRules(selectedElem); - return templateVariables.filter((v) => !rules.some((r) => r.variable === v)); + return templateVariables.filter( + (v) => !rules.some((r) => r.target !== 'content' && r.variable === v) + ); }, [selectedElem, templateVariables]); const visibilityRuleDialogVariableOptions = useMemo(() => { @@ -237,6 +241,7 @@ export const PropSidebar: React.FC = ({ } const usedByOthers = rules .filter((_, i) => i !== visibilityRuleDialog.index) + .filter((r) => r.target !== 'content') .map((r) => r.variable); return templateVariables.filter((v) => !usedByOthers.includes(v)); }, [selectedElem, visibilityRuleDialog, addableVisibilityVariables, templateVariables]); @@ -661,6 +666,17 @@ export const PropSidebar: React.FC = ({ )} + {(selectedElem.type === 'text' || + selectedElem.type === 'barcode' || + selectedElem.type === 'qrcode' || + selectedElem.type === 'image') && ( +
+ + {selectedElem.type === 'text' && ( + + )} +
+ )} {renderVariableManagementBlock()}
显示控制
@@ -723,7 +739,7 @@ export const PropSidebar: React.FC = ({
{rules.map((rule, index) => ( setVisibilityRuleDialog({ mode: 'edit', index })} onDelete={() => removeRule(index)} @@ -736,13 +752,7 @@ export const PropSidebar: React.FC = ({
- {variableOptions.length === 0 ? ( -

- 请先在「变量管理」中添加变量,再配置显示条件。 -

- ) : ( - setDraft((d) => ({ ...d, ...patch }))} - variableOptions={variableOptions} - /> - )} + setDraft((d) => ({ ...d, ...patch }))} + variableOptions={variableOptions} + />