工作流管理相关

This commit is contained in:
2026-08-13 09:36:46 +08:00
parent 0e6381d2b3
commit 2ae59c9252
3 changed files with 52 additions and 52 deletions
@@ -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;
};
// ===== 叶子值(兼容字符串/布尔/数字) =====