|
@@ -93,6 +93,52 @@
|
|
|
<el-form-item label="分支条件" v-show="nodeType === NodeTypeCondition">
|
|
|
<Branch ref="branchRef" :modelValue="formData.nodeExt" @setNodeExt="setNodeExt"></Branch>
|
|
|
</el-form-item>
|
|
|
+
|
|
|
+ <!-- WebHook 特定配置 -->
|
|
|
+ <template v-if="nodeType === NodeTypeWebHook">
|
|
|
+ <el-form-item label="请求地址" required>
|
|
|
+ <el-input v-model="formData.webhookUrl" placeholder="请输入WebHook URL" :disabled="readonly"></el-input>
|
|
|
+ </el-form-item>
|
|
|
+ <el-form-item label="请求方法">
|
|
|
+ <el-select v-model="formData.webhookMethod" placeholder="请选择请求方法" :disabled="readonly">
|
|
|
+ <el-option v-for="item in httpMethodOptions" :key="item.value" :label="item.label" :value="item.value" />
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+ <!-- 请求头 - 所有方法都显示 -->
|
|
|
+ <el-form-item label="请求头">
|
|
|
+ <WebHookParams
|
|
|
+ ref="headersRef"
|
|
|
+ v-model="formData.webhookHeaders"
|
|
|
+ title="请求头参数"
|
|
|
+ @setParams="setWebHookHeaders" />
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <!-- 请求参数 - 所有方法都显示 -->
|
|
|
+ <el-form-item label="请求参数">
|
|
|
+ <WebHookParams
|
|
|
+ ref="paramsRef"
|
|
|
+ v-model="formData.webhookParams"
|
|
|
+ title="URL参数"
|
|
|
+ @setParams="setWebHookParams" />
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <!-- 请求体类型 - 仅 POST/PUT 显示 -->
|
|
|
+ <el-form-item label="请求体类型" v-show="formData.webhookMethod === 'POST' || formData.webhookMethod === 'PUT'">
|
|
|
+ <el-select v-model="formData.webhookBodyType" :disabled="readonly">
|
|
|
+ <el-option label="JSON" value="json"></el-option>
|
|
|
+ </el-select>
|
|
|
+ </el-form-item>
|
|
|
+
|
|
|
+ <!-- 请求体 - 仅 POST/PUT 显示 -->
|
|
|
+ <el-form-item label="请求体" v-show="formData.webhookMethod === 'POST' || formData.webhookMethod === 'PUT'">
|
|
|
+ <WebHookParams
|
|
|
+ ref="bodyRef"
|
|
|
+ v-model="formData.webhookBody"
|
|
|
+ title="请求体参数"
|
|
|
+ @setParams="setWebHookBody" />
|
|
|
+ </el-form-item>
|
|
|
+ </template>
|
|
|
+
|
|
|
<el-form-item>
|
|
|
<el-button type="primary" @click="onSubmit" v-if="!readonly">保存</el-button>
|
|
|
</el-form-item>
|
|
@@ -100,7 +146,7 @@
|
|
|
</div>
|
|
|
</template>
|
|
|
<script setup lang="ts">
|
|
|
-import { NodeConditionData } from '/@/components/gFlow/propertySetting/model'
|
|
|
+import { NodeConditionData, WebHookParamData } from '/@/components/gFlow/propertySetting/model'
|
|
|
|
|
|
interface PostInfo {
|
|
|
postId: number
|
|
@@ -114,6 +160,7 @@ import selectUser from '/@/components/selectUser/index.vue'
|
|
|
import LogicFlow from '@logicflow/core'
|
|
|
import { computed, getCurrentInstance, onMounted, reactive, ref, toRefs } from 'vue'
|
|
|
import Branch from '/@/components/gFlow/propertySetting/branch.vue'
|
|
|
+import WebHookParams from '/@/components/gFlow/propertySetting/webhookParams.vue'
|
|
|
import {
|
|
|
FlowCheckRuleAll,
|
|
|
FlowCheckRuleDept,
|
|
@@ -130,11 +177,15 @@ import {
|
|
|
NodeTypeCondition,
|
|
|
NodeTypePush,
|
|
|
NodeTypeStart,
|
|
|
+ NodeTypeWebHook,
|
|
|
} from '/@/components/gFlow/consts'
|
|
|
import systemApi from '/@/api/system'
|
|
|
|
|
|
|
|
|
const branchRef = ref()
|
|
|
+const paramsRef = ref()
|
|
|
+const headersRef = ref()
|
|
|
+const bodyRef = ref()
|
|
|
const { proxy } = <any>getCurrentInstance()
|
|
|
const props = defineProps({
|
|
|
nodeData: {
|
|
@@ -229,6 +280,13 @@ const state = reactive({
|
|
|
{ label: '互斥网关-所有分支中只能有其中一条审核', value: NodeTypePush },
|
|
|
{ label: '条件网关-符合条件的某条分或多条支进行审核', value: NodeTypeCondition },
|
|
|
],
|
|
|
+ // WebHook HTTP 方法选项
|
|
|
+ httpMethodOptions: [
|
|
|
+ { label: 'GET', value: 'GET' },
|
|
|
+ { label: 'POST', value: 'POST' },
|
|
|
+ { label: 'PUT', value: 'PUT' },
|
|
|
+ { label: 'DELETE', value: 'DELETE' },
|
|
|
+ ],
|
|
|
formData: {
|
|
|
text: '',
|
|
|
actionRule: undefined,
|
|
@@ -241,15 +299,28 @@ const state = reactive({
|
|
|
rollback: undefined,
|
|
|
nodeExt: [] as Array<NodeConditionData[]>,
|
|
|
deptProv: 1,
|
|
|
+ // WebHook 相关配置
|
|
|
+ webhookUrl: '',
|
|
|
+ webhookMethod: 'POST',
|
|
|
+ webhookParams: [] as WebHookParamData[],
|
|
|
+ webhookHeaders: [] as WebHookParamData[],
|
|
|
+ webhookBodyType: 'json',
|
|
|
+ webhookBody: [] as WebHookParamData[],
|
|
|
},
|
|
|
})
|
|
|
-const { formData, deptData, roleList, postList, actionRuleOption, approveRuleOption, conditionRuleOption } = toRefs(state)
|
|
|
+const { formData, deptData, roleList, postList, actionRuleOption, approveRuleOption, conditionRuleOption, httpMethodOptions } = toRefs(state)
|
|
|
onMounted(() => {
|
|
|
const { properties, text } = props.nodeData
|
|
|
if (properties) {
|
|
|
state.formData = Object.assign({}, state.formData, properties)
|
|
|
//设置条件
|
|
|
branchRef.value.initNodeData(state.formData.nodeExt)
|
|
|
+ //设置WebHook参数
|
|
|
+ if (nodeType.value === NodeTypeWebHook) {
|
|
|
+ paramsRef.value?.initParams(state.formData.webhookParams || [])
|
|
|
+ headersRef.value?.initParams(state.formData.webhookHeaders || [])
|
|
|
+ bodyRef.value?.initParams(state.formData.webhookBody || [])
|
|
|
+ }
|
|
|
}
|
|
|
if (text && text.value) {
|
|
|
state.formData.text = text.value
|
|
@@ -284,6 +355,12 @@ const getSelector = () => {
|
|
|
}
|
|
|
const onSubmit = () => {
|
|
|
branchRef.value.setNodeExt()
|
|
|
+
|
|
|
+ // 处理 WebHook 参数
|
|
|
+ if (nodeType.value === NodeTypeWebHook) {
|
|
|
+ // 这里参数已经通过 v-model 和事件自动更新到 formData 中
|
|
|
+ }
|
|
|
+
|
|
|
const { id } = props.nodeData
|
|
|
props.lf.setProperties(id, {
|
|
|
...state.formData,
|
|
@@ -294,5 +371,18 @@ const onSubmit = () => {
|
|
|
const setNodeExt = (data: Array<NodeConditionData[]>) => {
|
|
|
state.formData.nodeExt = data
|
|
|
}
|
|
|
+
|
|
|
+// WebHook 参数处理方法
|
|
|
+const setWebHookParams = (data: WebHookParamData[]) => {
|
|
|
+ state.formData.webhookParams = data
|
|
|
+}
|
|
|
+
|
|
|
+const setWebHookHeaders = (data: WebHookParamData[]) => {
|
|
|
+ state.formData.webhookHeaders = data
|
|
|
+}
|
|
|
+
|
|
|
+const setWebHookBody = (data: WebHookParamData[]) => {
|
|
|
+ state.formData.webhookBody = data
|
|
|
+}
|
|
|
</script>
|
|
|
<style scoped></style>
|