Files
school-developer/src/flow/designer/components/flow-sub-param.vue
吴红兵 1f645dad3e init
2025-12-02 10:37:49 +08:00

362 lines
17 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<el-form label-position="left" class="flow-attr flow-param-attr" label-width="200px">
<el-divider>关联子流程Http接口</el-divider>
<el-form-item label="保存子流程表单Http请求地址">
<el-input class="input-attr" placeholder="可输入全路径或相对路径" v-model="props.currSelect.attributes.attrs.cdata.attrs.startSubFlow"
clearable>
<template #prepend>
<el-select v-model="props.currSelect.attributes.attrs.cdata.attrs.startSubMethod">
<el-option v-for="(item, index) in DIC_PROP.HTTP_METHODS" :key="index" :label="item.label" :value="item.value"></el-option>
</el-select>
</template>
</el-input>
<el-tooltip placement="top">
<template #content>启动子流程时更新子流程表单接口可输入全路径或相对路径</template>
<el-icon style="margin-left: 10px">
<QuestionFilled/>
</el-icon>
</el-tooltip>
</el-form-item>
<el-form-item label="更新子流程表单Http请求地址">
<el-input class="input-attr" placeholder="可输入全路径或相对路径" v-model="props.currSelect.attributes.attrs.cdata.attrs.restartSubFlow"
clearable>
<template #prepend>
<el-select v-model="props.currSelect.attributes.attrs.cdata.attrs.restartSubMethod">
<el-option v-for="(item, index) in DIC_PROP.HTTP_METHODS" :key="index" :label="item.label" :value="item.value"></el-option>
</el-select>
</template>
</el-input>
<el-tooltip placement="top">
<template #content>重入或重启子流程时更新子流程表单接口可输入全路径或相对路径</template>
<el-icon style="margin-left: 10px">
<QuestionFilled/>
</el-icon>
</el-tooltip>
</el-form-item>
<el-form-item label="更新父流程表单Http请求地址">
<el-input class="input-attr" placeholder="可输入全路径或相对路径" v-model="props.currSelect.attributes.attrs.cdata.attrs.backParFlow"
clearable>
<template #prepend>
<el-select v-model="props.currSelect.attributes.attrs.cdata.attrs.backParMethod">
<el-option v-for="(item, index) in DIC_PROP.HTTP_METHODS" :key="index" :label="item.label" :value="item.value"></el-option>
</el-select>
</template>
</el-input>
<el-tooltip placement="top">
<template #content>返回父流程时更新父流程表单接口可输入全路径或相对路径</template>
<el-icon style="margin-left: 10px">
<QuestionFilled/>
</el-icon>
</el-tooltip>
</el-form-item>
<el-divider>关联子流程Http请求头</el-divider>
<el-table :data="data.subFlowParams.filter(f => f.paramFrom === DIC_PROP.PARAM_FROM[0].value)"
border style="width: 100%; margin-bottom: 10px" max-height="500">
<el-table-column type="index" :label="t('jfI18n.operate')" width="80">
<template #header>
<el-button icon="Plus" size="small" type="primary" circle
@click="methods.onAddItem(DIC_PROP.PARAM_FROM[0].value, true)"></el-button>
</template>
<template #default="scope">
<el-button icon="Minus" size="small" type="danger" circle
@click="methods.handleSubFlowDelete(scope.$index, scope.row)"></el-button>
</template>
</el-table-column>
<el-table-column prop="targetProp" :label="t('jfAttr.requestHeader')" show-overflow-tooltip>
<template #default="scope">
<el-input v-model="scope.row.targetProp" :placeholder="scope.row.paramValType === DIC_PROP.PARAM_VAL_TYPE[0].value ? scope.row.varKeyVal : null"
clearable></el-input>
</template>
</el-table-column>
<el-table-column prop="paramValType" :label="t('jfAttr.paramValType')" width="145px">
<template #default="scope">
<el-select v-model="scope.row.paramValType" clearable>
<el-option v-for="(item, index) in DIC_PROP.PARAM_VAL_TYPE" :key="index" :label="item.label" :value="item.value"></el-option>
</el-select>
</template>
</el-table-column>
<el-table-column prop="varKeyVal" :label="t('jfAttr.varKeyVal')" show-overflow-tooltip>
<template #default="scope">
<el-select v-model="scope.row.varKeyVal"
v-if="scope.row.paramValType === DIC_PROP.PARAM_VAL_TYPE[0].value"
clearable filterable>
<el-option-group
v-for="(group, index) in data.allFieldPerms"
:key="index"
:label="group.label">
<el-option
v-for="(item, index) in group.options"
:disabled="item.prop.indexOf('_define_') !== -1"
:key="index"
:label="item.label"
:value="item.prop">
</el-option>
</el-option-group>
</el-select>
<el-input v-else v-model="scope.row.varKeyVal" clearable> </el-input>
</template>
</el-table-column>
</el-table>
<el-divider>父流程传参到子流程</el-divider>
<el-table :data="data.subFlowParams.filter(f => f.paramFrom === DIC_PROP.PARAM_FROM[1].value)"
border style="width: 100%; margin-bottom: 10px" max-height="500">
<el-table-column type="index" :label="t('jfI18n.operate')" width="80">
<template #header>
<el-button icon="Plus" size="small" type="primary" circle
@click="methods.onAddItem(DIC_PROP.PARAM_FROM[1].value, true)"></el-button>
</template>
<template #default="scope">
<el-button icon="Minus" size="small" type="danger" circle
@click="methods.handleSubFlowDelete(scope.$index, scope.row)"></el-button>
</template>
</el-table-column>
<el-table-column prop="varKeyVal" :label="t('jfAttr.varKeyVal')" show-overflow-tooltip>
<template #default="scope">
<el-select v-model="scope.row.varKeyVal"
v-if="scope.row.paramValType === DIC_PROP.PARAM_VAL_TYPE[0].value"
clearable filterable>
<el-option-group
v-for="(group, index) in data.allFieldPerms"
:key="index"
:label="group.label">
<el-option
v-for="(item, index) in group.options"
:disabled="item.prop.indexOf('_define_') !== -1"
:key="index"
:label="item.label"
:value="item.prop">
</el-option>
</el-option-group>
</el-select>
<el-input v-else v-model="scope.row.varKeyVal" clearable> </el-input>
</template>
</el-table-column>
<el-table-column prop="paramValType" :label="t('jfAttr.paramValType')" width="145px">
<template #default="scope">
<el-select v-model="scope.row.paramValType" clearable>
<el-option v-for="(item, index) in DIC_PROP.PARAM_VAL_TYPE" :key="index" :label="item.label" :value="item.value"></el-option>
</el-select>
</template>
</el-table-column>
<el-table-column prop="targetProp" :label="t('jfAttr.subVarKeyVal')" show-overflow-tooltip>
<template #default="scope">
<el-input v-model="scope.row.targetProp" :placeholder="scope.row.paramValType === DIC_PROP.PARAM_VAL_TYPE[0].value ? scope.row.varKeyVal : null"
clearable></el-input>
</template>
</el-table-column>
</el-table>
<el-divider>子流程回参到父流程</el-divider>
<el-table :data="data.subFlowParams.filter(f => f.paramFrom === DIC_PROP.PARAM_FROM[2].value)"
border style="width: 100%; margin-bottom: 10px" max-height="500">
<el-table-column type="index" :label="t('jfI18n.operate')" width="80">
<template #header>
<el-button icon="Plus" size="small" type="primary" circle
@click="methods.onAddItem(DIC_PROP.PARAM_FROM[2].value, true)"></el-button>
</template>
<template #default="scope">
<el-button icon="Minus" size="small" type="danger" circle
@click="methods.handleSubFlowDelete(scope.$index, scope.row)"></el-button>
</template>
</el-table-column>
<el-table-column prop="targetProp" :label="t('jfAttr.subVarKeyVal2')" show-overflow-tooltip>
<template #default="scope">
<el-input v-model="scope.row.targetProp"
:placeholder="scope.row.paramValType === DIC_PROP.PARAM_VAL_TYPE[0].value ? scope.row.varKeyVal : null"
clearable></el-input>
</template>
</el-table-column>
<el-table-column prop="paramValType" :label="t('jfAttr.paramValType')" width="145px">
<template #default="scope">
<el-switch
v-model="scope.row.paramValType"
:active-value="DIC_PROP.PARAM_VAL_TYPE[0].value"
:active-text="DIC_PROP.PARAM_VAL_TYPE[0].label"
:inactive-value="DIC_PROP.PARAM_VAL_TYPE[2].value"
:inactive-text="DIC_PROP.PARAM_VAL_TYPE[2].label"
inline-prompt>
</el-switch>
</template>
</el-table-column>
<el-table-column prop="varKeyVal" :label="t('flowClazz.varKeyVal')" show-overflow-tooltip>
<template #default="scope">
<el-select v-model="scope.row.varKeyVal"
clearable filterable>
<el-option-group
v-for="(group, index) in data.allFieldPerms"
:key="index"
:label="group.label">
<el-option
v-for="(item, index) in group.options"
:disabled="item.prop.indexOf('_define_') !== -1"
:key="index"
:label="item.label"
:value="item.prop">
</el-option>
</el-option-group>
</el-select>
</template>
</el-table-column>
</el-table>
</el-form>
</template>
<script setup lang="ts" name="FlowSubParam">
import {useI18n} from "vue-i18n";
import {useMessage} from "/@/hooks/message";
import {validateNull} from "/@/utils/validate";
import {buildSysFieldsFormOption} from "../../utils/form-perm";
import {DIC_PROP} from "../../support/dict-prop";
const {proxy} = getCurrentInstance();
const {t} = useI18n();
const $message = useMessage();
const props = defineProps({
currFlowForm: {
type: Object,
default: null,
},
currSelect: {
type: Object,
default: null,
},
flowData: {
type: Object,
default: null,
},
});
const data = reactive({
allFieldPerms: [],
formFieldPerms: [],
subFlowParams: [],
})
// 定义字典
onMounted(async () => {
methods.changeTabPane(props.currSelect)
})
const methods = {
listFormFieldPerms() {
if (validateNull(data.formFieldPerms)) {
buildSysFieldsFormOption(data, props, $message)
}
},
onAddItem(paramFrom, isAdd) {
methods.listFormFieldPerms()
let value = DIC_PROP.PARAM_VAL_TYPE[0].value;
if (data.subFlowParams.length > 0) {
let find = data.subFlowParams.filter(f => f.paramFrom === paramFrom).find(f => !f.varKeyVal || (f.paramValType !== value && !f.targetProp));
if (find) {
if (isAdd) {
if (!find.varKeyVal) {
$message.warning("请先填写 表单字段")
return
}
if (find.paramValType !== value && !find.targetProp) {
if (DIC_PROP.PARAM_FROM[0].value === paramFrom) {
$message.warning("请先填写 请求头")
} else {
$message.warning("请先填写 子流程表单字段")
}
return
}
}
}
if (!isAdd) data.subFlowParams.splice(0, data.subFlowParams.length);
}
let obj = {paramFrom: paramFrom, varKeyVal: null, paramValType: value, targetProp: null};
data.subFlowParams.push(obj);
methods.changeSubFlowParams()
},
handleSubFlowDelete(index: number, row: any) {
let splice = data.subFlowParams.filter(f => f.paramFrom === row.paramFrom);
splice.splice(index, 1);
if (DIC_PROP.PARAM_FROM[0].value === row.paramFrom) {
let res = data.subFlowParams.filter(f => f.paramFrom === DIC_PROP.PARAM_FROM[1].value);
let res2 = data.subFlowParams.filter(f => f.paramFrom === DIC_PROP.PARAM_FROM[2].value);
splice.push(...res)
splice.push(...res2)
} else if (DIC_PROP.PARAM_FROM[1].value === row.paramFrom) {
let res = data.subFlowParams.filter(f => f.paramFrom === DIC_PROP.PARAM_FROM[0].value);
let res2 = data.subFlowParams.filter(f => f.paramFrom === DIC_PROP.PARAM_FROM[2].value);
splice.push(...res)
splice.push(...res2)
} else if (DIC_PROP.PARAM_FROM[2].value === row.paramFrom) {
let res = data.subFlowParams.filter(f => f.paramFrom === DIC_PROP.PARAM_FROM[0].value);
let res2 = data.subFlowParams.filter(f => f.paramFrom === DIC_PROP.PARAM_FROM[1].value);
splice.push(...res)
splice.push(...res2)
}
data.subFlowParams = splice
methods.changeSubFlowParams()
},
validateSubFlowData() {
// 兼容老版本
let subFlowParams = props.currSelect.attributes.attrs.cdata.attrs.subFlowParams;
if (!subFlowParams) {
props.currSelect.attributes.attrs.cdata.attrs.subFlowParams = []
}
let startSubMethod = props.currSelect.attributes.attrs.cdata.attrs.startSubMethod;
if (!startSubMethod) props.currSelect.attributes.attrs.cdata.attrs.startSubMethod = 'POST'
let restartSubMethod = props.currSelect.attributes.attrs.cdata.attrs.restartSubMethod;
if (!restartSubMethod) props.currSelect.attributes.attrs.cdata.attrs.restartSubMethod = 'PUT'
let backParMethod = props.currSelect.attributes.attrs.cdata.attrs.backParMethod;
if (!backParMethod) props.currSelect.attributes.attrs.cdata.attrs.backParMethod = 'PUT'
data.subFlowParams = props.currSelect.attributes.attrs.cdata.attrs.subFlowParams
},
changeSubFlowParams() {
props.currSelect.attributes.attrs.cdata.attrs.subFlowParams = data.subFlowParams
},
changeTabPane(val) {
methods.validateSubFlowData()
methods.listFormFieldPerms()
}
}
// 监听双向绑定
watch(
() => props.currSelect,
(val) => {
if (Object.keys(val).length === 0) {
return
}
methods.changeTabPane(val)
}
);
</script>
<style lang="scss">
@import '../assets/style/flow-attr.scss';
</style>