【功能新增】新增修改表单数据触发器

This commit is contained in:
jason 2025-02-07 22:50:53 +08:00
parent 5e801a8e63
commit e32fc81df6
2 changed files with 135 additions and 9 deletions

View File

@ -716,7 +716,8 @@ export type RouterSetting = {
*/ */
export type TriggerSetting = { export type TriggerSetting = {
type: TriggerTypeEnum type: TriggerTypeEnum
httpRequestSetting: HttpRequestTriggerSetting httpRequestSetting?: HttpRequestTriggerSetting
normalFormSetting?: NormalFormTriggerSetting
} }
/** /**
@ -726,7 +727,11 @@ export enum TriggerTypeEnum {
/** /**
* HTTP * HTTP
*/ */
HTTP_REQUEST = 1 HTTP_REQUEST = 1,
/**
*
*/
UPDATE_NORMAL_FORM = 2
} }
/** /**
@ -743,6 +748,15 @@ export type HttpRequestTriggerSetting = {
response?: Record<string, string>[] response?: Record<string, string>[]
} }
/**
*
*/
export type NormalFormTriggerSetting = {
// 更新表单字段
updateFormFields?: Record<string, any>
}
export const TRIGGER_TYPES: DictDataVO[] = [ export const TRIGGER_TYPES: DictDataVO[] = [
{ label: 'HTTP 请求', value: TriggerTypeEnum.HTTP_REQUEST } { label: 'HTTP 请求', value: TriggerTypeEnum.HTTP_REQUEST },
{ label: '修改表单数据', value: TriggerTypeEnum.UPDATE_NORMAL_FORM }
] ]

View File

@ -83,7 +83,7 @@
> >
<el-select class="w-160px!" v-model="item.key" placeholder="请选择表单字段"> <el-select class="w-160px!" v-model="item.key" placeholder="请选择表单字段">
<el-option <el-option
v-for="(field, fIdx) in formFieldOptions" v-for="(field, fIdx) in formFields"
:key="fIdx" :key="fIdx"
:label="field.title" :label="field.title"
:value="field.field" :value="field.field"
@ -121,6 +121,64 @@
</el-button> </el-button>
</el-form-item> </el-form-item>
</div> </div>
<div
v-if="
configForm.type === TriggerTypeEnum.UPDATE_NORMAL_FORM && configForm.normalFormSetting
"
>
<el-divider content-position="left">修改表单设置</el-divider>
<div
class="flex items-center"
v-for="key in Object.keys(configForm.normalFormSetting.updateFormFields!)"
:key="key"
>
<div class="mr-2 flex items-center">
<el-form-item>
<el-select
class="w-160px!"
:model-value="key"
@update:model-value="(newKey) => updateFormFieldKey(key, newKey)"
placeholder="请选择表单字段"
:disabled="key !== ''"
>
<el-option
v-for="(field, fIdx) in optionalUpdateFormFields"
:key="fIdx"
:label="field.title"
:value="field.field"
:disabled="field.disabled"
/>
</el-select>
</el-form-item>
</div>
<div class="mx-2"><el-form-item>的值设置为</el-form-item></div>
<div class="mr-2">
<el-form-item
:prop="`normalFormSetting.updateFormFields.${key}`"
:rules="{
required: true,
message: '值不能为空',
trigger: 'blur'
}"
>
<el-input
class="w-160px"
v-model="configForm.normalFormSetting.updateFormFields![key]"
placeholder="请输入"
:disabled="!key"
/>
</el-form-item>
</div>
<div class="mr-1 pt-1 cursor-pointer">
<el-form-item>
<Icon icon="ep:delete" :size="18" @click="deleteFormFieldSetting(key)" />
</el-form-item>
</div>
</div>
<el-button type="primary" text @click="addFormFieldSetting()">
<Icon icon="ep:plus" class="mr-5px" />添加修改字段
</el-button>
</div>
</el-form> </el-form>
</div> </div>
<template #footer> <template #footer>
@ -146,6 +204,7 @@ const props = defineProps({
required: true required: true
} }
}) })
const message = useMessage() //
// //
const { settingVisible, closeDrawer, openDrawer } = useDrawer() const { settingVisible, closeDrawer, openDrawer } = useDrawer()
// //
@ -167,10 +226,28 @@ const configForm = ref<TriggerSetting>({
header: [], header: [],
body: [], body: [],
response: [] response: []
} },
normalFormSetting: { updateFormFields: {} }
}) })
// //
const formFieldOptions = useFormFields() const formFields = useFormFields()
//
const optionalUpdateFormFields = computed(() => {
const usedFields = Object.keys(configForm.value.normalFormSetting?.updateFormFields || {})
return formFields.map((field) => ({
title: field.title,
field: field.field,
disabled: usedFields.includes(field.field)
}))
})
const updateFormFieldKey = (oldKey: string, newKey: string) => {
if (!configForm.value.normalFormSetting?.updateFormFields) return
const value = configForm.value.normalFormSetting.updateFormFields[oldKey]
delete configForm.value.normalFormSetting.updateFormFields[oldKey]
configForm.value.normalFormSetting.updateFormFields[newKey] = value
}
/** 添加 HTTP 请求返回值设置项*/ /** 添加 HTTP 请求返回值设置项*/
const addHttpResponseSetting = (responseSetting: Record<string, string>[]) => { const addHttpResponseSetting = (responseSetting: Record<string, string>[]) => {
@ -185,6 +262,19 @@ const deleteHttpResponseSetting = (responseSetting: Record<string, string>[], in
responseSetting.splice(index, 1) responseSetting.splice(index, 1)
} }
/** 添加修改表单设置项 */
const addFormFieldSetting = () => {
if (configForm.value.normalFormSetting!.updateFormFields === undefined) {
configForm.value.normalFormSetting!.updateFormFields = {}
}
configForm.value.normalFormSetting!.updateFormFields[''] = undefined
}
/** 删除修改表单设置项 */
const deleteFormFieldSetting = (key: string) => {
if (!configForm.value.normalFormSetting?.updateFormFields) return
delete configForm.value.normalFormSetting.updateFormFields[key]
}
/** 保存配置 */ /** 保存配置 */
const saveConfig = async () => { const saveConfig = async () => {
if (!formRef) return false if (!formRef) return false
@ -194,15 +284,29 @@ const saveConfig = async () => {
if (!showText) return false if (!showText) return false
currentNode.value.name = nodeName.value! currentNode.value.name = nodeName.value!
currentNode.value.showText = showText currentNode.value.showText = showText
if (configForm.value.type === TriggerTypeEnum.HTTP_REQUEST) {
configForm.value.normalFormSetting = undefined
}
if (configForm.value.type === TriggerTypeEnum.UPDATE_NORMAL_FORM) {
configForm.value.httpRequestSetting = undefined
}
currentNode.value.triggerSetting = configForm.value currentNode.value.triggerSetting = configForm.value
settingVisible.value = false settingVisible.value = false
return true return true
} }
/** 获取节点展示内容 */ /** 获取节点展示内容 */
const getShowText = (): string => { const getShowText = (): string => {
let showText = '' let showText = ''
if (configForm.value.type === TriggerTypeEnum.HTTP_REQUEST) { if (configForm.value.type === TriggerTypeEnum.HTTP_REQUEST) {
showText = `${configForm.value.httpRequestSetting.url}` showText = `${configForm.value.httpRequestSetting?.url}`
} else if (configForm.value.type === TriggerTypeEnum.UPDATE_NORMAL_FORM) {
const updatefields = Object.keys(configForm.value.normalFormSetting?.updateFormFields || {})
if (updatefields.length === 0) {
message.warning('请设置修改表单字段')
} else {
showText = '修改表单数据'
}
} }
return showText return showText
} }
@ -211,8 +315,16 @@ const getShowText = (): string => {
const showTriggerNodeConfig = (node: SimpleFlowNode) => { const showTriggerNodeConfig = (node: SimpleFlowNode) => {
nodeName.value = node.name nodeName.value = node.name
if (node.triggerSetting) { if (node.triggerSetting) {
configForm.value.type = node.triggerSetting.type configForm.value = {
configForm.value.httpRequestSetting = node.triggerSetting.httpRequestSetting type: node.triggerSetting.type,
httpRequestSetting: node.triggerSetting.httpRequestSetting || {
url: '',
header: [],
body: [],
response: []
},
normalFormSetting: node.triggerSetting.normalFormSetting || { updateFormFields: {} }
}
} }
} }