工作流管理相关
This commit is contained in:
@@ -82,13 +82,13 @@
|
||||
<el-checkbox
|
||||
size="small"
|
||||
:model-value="def.runtimeShow ?? false"
|
||||
:disabled="hasReference"
|
||||
:disabled="hasValueSource"
|
||||
@change="toggleExpose"
|
||||
class="mf-leaf-expose"
|
||||
>表单展示</el-checkbox>
|
||||
</el-tooltip>
|
||||
<el-popover
|
||||
v-if="canReference"
|
||||
v-if="canValueSource"
|
||||
placement="bottom"
|
||||
:width="260"
|
||||
trigger="click"
|
||||
@@ -119,7 +119,7 @@
|
||||
v-for="of in node.outputFields"
|
||||
:key="of.field"
|
||||
class="mf-ref-field"
|
||||
@click="setReference(node, of)"
|
||||
@click="setValueSource(node, of)"
|
||||
>
|
||||
{{ of.label || of.field }}
|
||||
</div>
|
||||
@@ -128,9 +128,9 @@
|
||||
</div>
|
||||
</el-popover>
|
||||
</div>
|
||||
<div v-if="hasReference" class="mf-ref-bound" :class="{ 'is-invalid': referenceInvalid }">
|
||||
<span class="mf-ref-bound-text">已引用:{{ referenceLabel }}</span>
|
||||
<el-button size="small" text type="danger" @click="clearReference">清除</el-button>
|
||||
<div v-if="hasValueSource" class="mf-ref-bound" :class="{ 'is-invalid': valueSourceInvalid }">
|
||||
<span class="mf-ref-bound-text">已引用:{{ valueSourceLabel }}</span>
|
||||
<el-button size="small" text type="danger" @click="clearValueSource">清除</el-button>
|
||||
</div>
|
||||
<div v-else-if="!isUpload" class="mf-leaf-ctrl">
|
||||
<el-input-number
|
||||
@@ -220,13 +220,13 @@ const isTextarea = computed(() => isLeaf.value && fieldType.value === 'textarea'
|
||||
const isUpload = computed(() => isLeaf.value && fieldType.value === 'upload');
|
||||
|
||||
// ===== 引用上级节点输出 =====
|
||||
// 可引用:叶子 + 非开关 + 非固定选项下拉 + 非上传(开关/下拉值来自模型;上传类型不提供引用)
|
||||
const canReference = computed(() => isLeaf.value && !isSwitch.value && !isSelect.value && !isUpload.value);
|
||||
// 可引用:叶子 + 非开关 + 非固定选项下拉(开关/下拉值来自模型;上传类型同样支持引用上级输出)
|
||||
const canValueSource = computed(() => isLeaf.value && !isSwitch.value && !isSelect.value);
|
||||
const hasUpstream = computed(() => (props.upstreamNodes?.length ?? 0) > 0);
|
||||
const hasReference = computed(() => !!def.value?.reference);
|
||||
const hasValueSource = computed(() => !!def.value?.valueSource);
|
||||
// 已引用时的展示文案:{节点label}.{字段label}
|
||||
const referenceLabel = computed(() => {
|
||||
const ref = def.value?.reference;
|
||||
const valueSourceLabel = computed(() => {
|
||||
const ref = def.value?.valueSource;
|
||||
if (!ref) return '';
|
||||
const node = props.upstreamNodes?.find((n) => n.id === ref.nodeId);
|
||||
const nodeName = node?.label || ref.nodeId;
|
||||
@@ -235,34 +235,34 @@ const referenceLabel = computed(() => {
|
||||
});
|
||||
|
||||
// 引用是否已失效:上游节点被删除,或其输出字段已不存在(换模型/换配置导致 schema 变化)
|
||||
const referenceInvalid = computed(() => {
|
||||
const ref = def.value?.reference;
|
||||
const valueSourceInvalid = computed(() => {
|
||||
const ref = def.value?.valueSource;
|
||||
if (!ref) return false;
|
||||
const node = props.upstreamNodes?.find((n) => n.id === ref.nodeId);
|
||||
if (!node) return true;
|
||||
return !node.outputFields.some((f) => f.field === ref.field);
|
||||
});
|
||||
|
||||
// 失效引用自动清理,避免保存脏数据(就地删除 reference,复用深 watch 上传链路)
|
||||
// 失效引用自动清理,避免保存脏数据(就地删除 valueSource,复用深 watch 上传链路)
|
||||
watch(
|
||||
referenceInvalid,
|
||||
valueSourceInvalid,
|
||||
(invalid) => {
|
||||
if (invalid && def.value) {
|
||||
delete def.value.reference;
|
||||
delete def.value.valueSource;
|
||||
}
|
||||
},
|
||||
{ immediate: true }
|
||||
);
|
||||
|
||||
// 选中前驱节点输出字段:就地写 def.reference,复用深 watch 上传链路
|
||||
const setReference = (node: UpstreamNodeInfo, of: { field: string; label: string }) => {
|
||||
// 选中前驱节点输出字段:就地写 def.valueSource,复用深 watch 上传链路
|
||||
const setValueSource = (node: UpstreamNodeInfo, of: { field: string; label: string }) => {
|
||||
if (!def.value) return;
|
||||
def.value.reference = { nodeId: node.id, field: of.field };
|
||||
def.value.valueSource = { nodeId: node.id, field: of.field };
|
||||
};
|
||||
|
||||
const clearReference = () => {
|
||||
const clearValueSource = () => {
|
||||
if (!def.value) return;
|
||||
delete def.value.reference;
|
||||
delete def.value.valueSource;
|
||||
};
|
||||
|
||||
// ===== 叶子值(兼容字符串/布尔/数字) =====
|
||||
|
||||
Reference in New Issue
Block a user