mirror of
https://gitee.com/myxzgzs/boyue-ui-admin-vue3
synced 2025-08-08 16:32:43 +08:00
Merge branch 'dev' of https://gitee.com/yudaocode/yudao-ui-admin-vue3
This commit is contained in:
commit
8ef499d717
@ -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()
|
||||||
// 获得岗位列表
|
// 获得岗位列表
|
||||||
|
@ -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({
|
||||||
|
@ -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">
|
||||||
|
@ -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([
|
||||||
|
@ -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"
|
||||||
|
@ -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>
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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[]
|
||||||
}>()
|
}>()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user