This commit is contained in:
YunaiV 2025-07-22 13:29:19 +08:00
commit 8ef499d717
8 changed files with 133 additions and 58 deletions

View File

@ -26,8 +26,7 @@
<script setup lang="ts"> <script setup lang="ts">
import SimpleProcessModel from './SimpleProcessModel.vue' import SimpleProcessModel from './SimpleProcessModel.vue'
import { SimpleFlowNode, NodeType, NodeId, NODE_DEFAULT_TEXT } from './consts' import { SimpleFlowNode, NodeType, NodeId, NODE_DEFAULT_TEXT } from './consts'
import { getModel } from '@/api/bpm/model' import { getForm } from '@/api/bpm/form'
import { getForm, FormVO } from '@/api/bpm/form'
import { handleTree } from '@/utils/tree' import { handleTree } from '@/utils/tree'
import * as RoleApi from '@/api/system/role' import * as RoleApi from '@/api/system/role'
import * as DeptApi from '@/api/system/dept' import * as DeptApi from '@/api/system/dept'
@ -43,18 +42,22 @@ defineOptions({
const emits = defineEmits(['success']) // const emits = defineEmits(['success']) //
const props = defineProps({ const props = defineProps({
modelId: {
type: String,
required: false
},
modelKey: {
type: String,
required: false
},
modelName: { modelName: {
type: String, type: String,
required: false required: false
}, },
// ID
modelFormId: {
type: Number,
required: false,
default: undefined,
},
//
modelFormType: {
type: Number,
required: false,
default: BpmModelFormType.NORMAL,
},
// //
startUserIds: { startUserIds: {
type: Array, type: Array,
@ -70,7 +73,31 @@ const props = defineProps({
const processData = inject('processData') as Ref const processData = inject('processData') as Ref
const loading = ref(false) const loading = ref(false)
const formFields = ref<string[]>([]) const formFields = ref<string[]>([])
const formType = ref(20) const formType = ref(props.modelFormType);
// modelFormType
watch(
() => props.modelFormType,
(newVal) => {
formType.value = newVal;
},
);
// modelFormId
watch(
() => props.modelFormId,
async (newVal) => {
if (newVal) {
const form = await getForm(newVal);
formFields.value = form?.fields;
} else {
// modelFormId
formFields.value = [];
}
},
{ immediate: true },
);
const roleOptions = ref<RoleApi.RoleVO[]>([]) // const roleOptions = ref<RoleApi.RoleVO[]>([]) //
const postOptions = ref<PostApi.PostVO[]>([]) // const postOptions = ref<PostApi.PostVO[]>([]) //
const userOptions = ref<UserApi.UserVO[]>([]) // const userOptions = ref<UserApi.UserVO[]>([]) //
@ -90,6 +117,8 @@ provide('startUserIds', props.startUserIds)
provide('startDeptIds', props.startDeptIds) provide('startDeptIds', props.startDeptIds)
provide('tasks', []) provide('tasks', [])
provide('processInstance', {}) provide('processInstance', {})
const message = useMessage() // const message = useMessage() //
const processNodeTree = ref<SimpleFlowNode | undefined>() const processNodeTree = ref<SimpleFlowNode | undefined>()
provide('processNodeTree', processNodeTree) provide('processNodeTree', processNodeTree)
@ -169,17 +198,17 @@ const validateNode = (node: SimpleFlowNode | undefined, errorNodes: SimpleFlowNo
onMounted(async () => { onMounted(async () => {
try { try {
loading.value = true loading.value = true
// // //
if (props.modelId) { // if (props.modelId) {
const bpmnModel = await getModel(props.modelId) // const bpmnModel = await getModel(props.modelId)
if (bpmnModel) { // if (bpmnModel) {
formType.value = bpmnModel.formType // formType.value = bpmnModel.formType
if (formType.value === BpmModelFormType.NORMAL && bpmnModel.formId) { // if (formType.value === BpmModelFormType.NORMAL && bpmnModel.formId) {
const bpmnForm = (await getForm(bpmnModel.formId)) as unknown as FormVO // const bpmnForm = (await getForm(bpmnModel.formId)) as unknown as FormVO
formFields.value = bpmnForm?.fields // formFields.value = bpmnForm?.fields
} // }
} // }
} // }
// //
roleOptions.value = await RoleApi.getSimpleRoleList() roleOptions.value = await RoleApi.getSimpleRoleList()
// //

View File

@ -1,6 +1,6 @@
<template> <template>
<el-form-item label-position="top" label="请求头"> <el-form-item label-position="top" label="请求头">
<div class="flex pt-2" v-for="(item, index) in props.header" :key="index"> <div class="flex pb-4" v-for="(item, index) in props.header" :key="index">
<div class="mr-2"> <div class="mr-2">
<el-form-item <el-form-item
:prop="`${bind}.header.${index}.key`" :prop="`${bind}.header.${index}.key`"
@ -10,18 +10,20 @@
trigger: 'blur' trigger: 'blur'
}" }"
> >
<el-input class="w-160px" v-model="item.key" /> <el-input v-model="item.key" style="width: 160px" />
</el-form-item> </el-form-item>
</div> </div>
<div class="mr-2"> <div class="mr-2">
<el-select class="w-100px!" v-model="item.type"> <el-form-item>
<el-option <el-select v-model="item.type" style="width: 160px" @change="handleTypeChange(item)">
v-for="types in BPM_HTTP_REQUEST_PARAM_TYPES" <el-option
:key="types.value" v-for="types in BPM_HTTP_REQUEST_PARAM_TYPES"
:label="types.label" :key="types.value"
:value="types.value" :label="types.label"
/> :value="types.value"
</el-select> />
</el-select>
</el-form-item>
</div> </div>
<div class="mr-2"> <div class="mr-2">
<el-form-item <el-form-item
@ -34,8 +36,8 @@
> >
<el-input <el-input
v-if="item.type === BpmHttpRequestParamTypeEnum.FIXED_VALUE" v-if="item.type === BpmHttpRequestParamTypeEnum.FIXED_VALUE"
class="w-160px"
v-model="item.value" v-model="item.value"
style="width: 200px"
/> />
</el-form-item> </el-form-item>
<el-form-item <el-form-item
@ -48,8 +50,8 @@
> >
<el-select <el-select
v-if="item.type === BpmHttpRequestParamTypeEnum.FROM_FORM" v-if="item.type === BpmHttpRequestParamTypeEnum.FROM_FORM"
class="w-160px!"
v-model="item.value" v-model="item.value"
style="width: 200px"
> >
<el-option <el-option
v-for="(field, fIdx) in formFieldOptions" v-for="(field, fIdx) in formFieldOptions"
@ -70,7 +72,7 @@
</el-button> </el-button>
</el-form-item> </el-form-item>
<el-form-item label-position="top" label="请求体"> <el-form-item label-position="top" label="请求体">
<div class="flex pt-2" v-for="(item, index) in props.body" :key="index"> <div class="flex pb-4" v-for="(item, index) in props.body" :key="index">
<div class="mr-2"> <div class="mr-2">
<el-form-item <el-form-item
:prop="`${bind}.body.${index}.key`" :prop="`${bind}.body.${index}.key`"
@ -80,18 +82,20 @@
trigger: 'blur' trigger: 'blur'
}" }"
> >
<el-input class="w-160px" v-model="item.key" /> <el-input v-model="item.key" style="width: 160px" />
</el-form-item> </el-form-item>
</div> </div>
<div class="mr-2"> <div class="mr-2">
<el-select class="w-100px!" v-model="item.type"> <el-form-item>
<el-option <el-select v-model="item.type" style="width: 160px" @change="handleTypeChange(item)">
v-for="types in BPM_HTTP_REQUEST_PARAM_TYPES" <el-option
:key="types.value" v-for="types in BPM_HTTP_REQUEST_PARAM_TYPES"
:label="types.label" :key="types.value"
:value="types.value" :label="types.label"
/> :value="types.value"
</el-select> />
</el-select>
</el-form-item>
</div> </div>
<div class="mr-2"> <div class="mr-2">
<el-form-item <el-form-item
@ -104,8 +108,8 @@
> >
<el-input <el-input
v-if="item.type === BpmHttpRequestParamTypeEnum.FIXED_VALUE" v-if="item.type === BpmHttpRequestParamTypeEnum.FIXED_VALUE"
class="w-160px"
v-model="item.value" v-model="item.value"
style="width: 200px"
/> />
</el-form-item> </el-form-item>
<el-form-item <el-form-item
@ -118,8 +122,8 @@
> >
<el-select <el-select
v-if="item.type === BpmHttpRequestParamTypeEnum.FROM_FORM" v-if="item.type === BpmHttpRequestParamTypeEnum.FROM_FORM"
class="w-160px!"
v-model="item.value" v-model="item.value"
style="width: 200px"
> >
<el-option <el-option
v-for="(field, fIdx) in formFieldOptions" v-for="(field, fIdx) in formFieldOptions"
@ -170,6 +174,13 @@ const props = defineProps({
// //
const formFieldOptions = useFormFieldsAndStartUser() const formFieldOptions = useFormFieldsAndStartUser()
/** 监听类型变化,清空值 */
const handleTypeChange = (item: HttpRequestParam) => {
//
item.value = ''
}
/** 添加请求配置项 */ /** 添加请求配置项 */
const addHttpRequestParam = (arr: HttpRequestParam[]) => { const addHttpRequestParam = (arr: HttpRequestParam[]) => {
arr.push({ arr.push({

View File

@ -33,7 +33,7 @@
/> />
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<div class="flex pt-2" v-for="(item, index) in setting.response" :key="index"> <div class="flex pt-4" v-for="(item, index) in setting.response" :key="index">
<div class="mr-2"> <div class="mr-2">
<el-form-item <el-form-item
:prop="`${formItemPrefix}.response.${index}.key`" :prop="`${formItemPrefix}.response.${index}.key`"
@ -74,10 +74,12 @@
/> />
</div> </div>
</div> </div>
</el-form-item>
<div class="pt-1">
<el-button type="primary" text @click="addHttpResponseSetting(setting.response!)"> <el-button type="primary" text @click="addHttpResponseSetting(setting.response!)">
<Icon icon="ep:plus" class="mr-5px" />添加一行 <Icon icon="ep:plus" class="mr-5px" />添加一行
</el-button> </el-button>
</el-form-item> </div>
</div> </div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">

View File

@ -232,6 +232,34 @@ import { ProcessVariableEnum } from '@/components/SimpleProcessDesignerV2/src/co
import HttpRequestSetting from '@/components/SimpleProcessDesignerV2/src/nodes-config/components/HttpRequestSetting.vue' import HttpRequestSetting from '@/components/SimpleProcessDesignerV2/src/nodes-config/components/HttpRequestSetting.vue'
const modelData = defineModel<any>() const modelData = defineModel<any>()
const formFields = ref<string[]>([])
const props = defineProps({
// ID
modelFormId: {
type: Number,
required: false,
default: undefined,
}
})
// modelFormId
watch(
() => props.modelFormId,
async (newVal) => {
if (newVal) {
const form = await FormApi.getForm(newVal);
formFields.value = form?.fields;
} else {
// modelFormId
formFields.value = [];
}
},
{ immediate: true },
);
// 使
provide('formFields', formFields)
/** 自定义 ID 流程编码 */ /** 自定义 ID 流程编码 */
const timeOptions = ref([ const timeOptions = ref([

View File

@ -14,9 +14,9 @@
<template v-else> <template v-else>
<SimpleModelDesign <SimpleModelDesign
v-if="showDesigner" v-if="showDesigner"
:model-id="modelData.id"
:model-key="modelData.key"
:model-name="modelData.name" :model-name="modelData.name"
:model-form-id="modelData.formId"
:model-form-type="modelData.formType"
:start-user-ids="modelData.startUserIds" :start-user-ids="modelData.startUserIds"
:start-dept-ids="modelData.startDeptIds" :start-dept-ids="modelData.startDeptIds"
@success="handleDesignSuccess" @success="handleDesignSuccess"

View File

@ -77,7 +77,10 @@
<!-- 第四步更多设置 --> <!-- 第四步更多设置 -->
<div v-show="currentStep === 3" class="mx-auto w-700px"> <div v-show="currentStep === 3" class="mx-auto w-700px">
<ExtraSettings v-model="formData" ref="extraSettingsRef" /> <ExtraSettings
ref="extraSettingsRef"
v-model="formData"
:model-form-id="formData.formId"/>
</div> </div>
</div> </div>
</div> </div>

View File

@ -209,15 +209,18 @@ onActivated(() => {
<style lang="scss" scoped> <style lang="scss" scoped>
:deep() { :deep() {
.el-table--fit .el-table__inner-wrapper:before { .el-table--fit .el-table__inner-wrapper::before {
height: 0; height: 0;
} }
.el-card { .el-card {
border-radius: 8px; border-radius: 8px;
} }
.el-form--inline .el-form-item { .el-form--inline .el-form-item {
margin-right: 10px; margin-right: 10px;
} }
.el-divider--horizontal { .el-divider--horizontal {
margin-top: 6px; margin-top: 6px;
} }

View File

@ -1,12 +1,11 @@
<template> <template>
<ContentWrap :bodyStyle="{ padding: '20px 16px' }"> <ContentWrap :bodyStyle="{ padding: '20px 16px' }">
<SimpleProcessDesigner <SimpleProcessDesigner
:model-id="modelId" :model-form-id="modelFormId"
:model-key="modelKey" :model-form-type="modelFormType"
:model-name="modelName"
@success="handleSuccess"
:start-user-ids="startUserIds" :start-user-ids="startUserIds"
:start-dept-ids="startDeptIds" :start-dept-ids="startDeptIds"
@success="handleSuccess"
ref="designerRef" ref="designerRef"
/> />
</ContentWrap> </ContentWrap>
@ -19,9 +18,9 @@ defineOptions({
}) })
defineProps<{ defineProps<{
modelId?: string
modelKey?: string
modelName?: string modelName?: string
modelFormId?: number
modelFormType?: number
startUserIds?: number[] startUserIds?: number[]
startDeptIds?: number[] startDeptIds?: number[]
}>() }>()