fix: 修复多个bug

This commit is contained in:
shaohuzhang1 2024-06-27 20:16:40 +08:00
parent 31936c8615
commit 09fc65f4e3
12 changed files with 99 additions and 23 deletions

View File

@ -4,6 +4,4 @@
<RouterView />
</template>
<style scoped>
</style>
<style scoped></style>

View File

@ -150,8 +150,14 @@ const clickShowDebug = () => {
}
})
.catch((res: any) => {
const keys = Object.keys(res)
MsgError(res[keys[0]]?.[0]?.message)
const node = res.node
const err_message = res.errMessage
if (typeof err_message == 'string') {
MsgError(res.node.properties?.stepName + '节点 ' + err_message)
} else {
const keys = Object.keys(err_message)
MsgError(node.properties?.stepName + '节点 ' + err_message[keys[0]]?.[0]?.message)
}
})
}
function clickoutsideDebug() {

View File

@ -4,6 +4,7 @@
:options="options"
@visible-change="visibleChange"
v-bind="$attrs"
v-model="data"
separator=" > "
>
<template #default="{ node, data }">
@ -17,12 +18,22 @@
</template>
<script setup lang="ts">
import { ref, onMounted } from 'vue'
import { ref, onMounted, computed } from 'vue'
import { iconComponent } from '../icons/utils'
const props = defineProps<{
nodeModel: any
modelValue: Array<any>
}>()
const emit = defineEmits(['update:modelValue'])
const data = computed({
set: (value) => {
emit('update:modelValue', value)
},
get: () => {
return props.modelValue
}
})
const options = ref<Array<any>>([])
function visibleChange(bool: boolean) {
@ -63,6 +74,26 @@ function getIncomingNode(id: string) {
options.value.unshift(firstElement)
}
}
const validate = () => {
getIncomingNode(props.nodeModel.id)
if (!data.value) {
return Promise.reject('引用变量必填')
}
if (data.value.length < 2) {
return Promise.reject('引用变量错误')
}
const node_id = data.value[0]
const node_field = data.value[1]
const nodeParent = options.value.find((item: any) => item.value === node_id)
if (!nodeParent) {
return Promise.reject('不存在的引用变量')
}
if (!nodeParent.children.some((item: any) => item.value === node_field)) {
return Promise.reject('不存在的引用变量')
}
return Promise.resolve('')
}
defineExpose({ validate })
onMounted(() => {
getIncomingNode(props.nodeModel.id)
})

View File

@ -1,10 +1,5 @@
<template>
<div
@mousedown="mousedown"
@mouseup="() => props.nodeModel.graphModel.toFront(props.nodeModel.id)"
class="workflow-node-container p-16"
style="overflow: visible"
>
<div @mousedown="mousedown" class="workflow-node-container p-16" style="overflow: visible">
<div
class="step-container p-16"
:class="props.nodeModel.isSelected ? 'isSelected' : ''"
@ -117,6 +112,9 @@ function editName(val: string) {
}
const mousedown = () => {
props.nodeModel.graphModel.toFront(props.nodeModel.id)
props.nodeModel.graphModel.clearSelectElements()
props.nodeModel.isSelected = true
props.nodeModel.isHovered = true
}
const showicon = ref<number | null>(null)
const copyNode = () => {

View File

@ -43,6 +43,12 @@ class AppNode extends HtmlResize.view {
props.model.properties.stepName = props.model.properties.stepName + (filterNodes.length - 1)
}
}
if (props.model.properties?.fields?.length > 0) {
props.model.properties.fields.map((item: any) => {
item['globeLabel'] = `{{${props.model.properties.stepName}.${item.value}}}`
item['globeValue'] = `{{context['${props.model.id}'].${item.value}}}`
})
}
}
getAnchorShape(anchorData: any) {

View File

@ -112,7 +112,13 @@ export const menuNodes = [
text: '指定回复内容,引用变量会转换为字符串进行输出',
label: '指定回复',
properties: {
stepName: '指定回复'
stepName: '指定回复',
fields: [
{
label: '内容',
value: 'answer'
}
]
}
}
]

View File

@ -196,7 +196,9 @@ const modelOptions = ref<any>(null)
const providerOptions = ref<Array<Provider>>([])
const validate = () => {
return aiChatNodeFormRef.value?.validate()
return aiChatNodeFormRef.value?.validate().catch((err) => {
return Promise.reject({ node: props.nodeModel, errMessage: err })
})
}
function getModel() {

View File

@ -80,7 +80,9 @@ const form_data = computed({
const baseNodeFormRef = ref<FormInstance>()
const validate = () => {
return baseNodeFormRef.value?.validate()
return baseNodeFormRef.value?.validate().catch((err) => {
return Promise.reject({ node: props.nodeModel, errMessage: err })
})
}
onMounted(() => {

View File

@ -49,6 +49,7 @@
}"
>
<NodeCascader
ref="nodeCascaderRef"
:nodeModel="nodeModel"
class="w-full"
placeholder="请选择变量"
@ -184,9 +185,15 @@ const form_data = computed({
})
const ConditionNodeFormRef = ref<FormInstance>()
const nodeCascaderRef = ref()
const validate = () => {
return ConditionNodeFormRef.value?.validate()
const v_list = [
ConditionNodeFormRef.value?.validate(),
...nodeCascaderRef.value.map((item: any) => item.validate())
]
return Promise.all(v_list).catch((err) => {
return Promise.reject({ node: props.nodeModel, errMessage: err })
})
}
function addBranch() {

View File

@ -195,7 +195,9 @@ const modelOptions = ref<any>(null)
const providerOptions = ref<Array<Provider>>([])
const validate = () => {
return questionNodeFormRef.value?.validate()
return questionNodeFormRef.value?.validate().catch((err) => {
return Promise.reject({ node: props.nodeModel, errMessage: err })
})
}
function getModel() {

View File

@ -39,6 +39,7 @@
</MdEditor>
<NodeCascader
v-else
ref="nodeCascaderRef"
:nodeModel="nodeModel"
class="w-full"
placeholder="请选择检索问题输入"
@ -98,9 +99,20 @@ function submitDialog() {
set(props.nodeModel.properties.node_data, 'content', cloneContent.value)
dialogVisible.value = false
}
// onMounted(() => {
// set(props.nodeModel, 'validate', validate)
// })
const replyNodeFormRef = ref()
const nodeCascaderRef = ref()
const validate = () => {
return Promise.all([
nodeCascaderRef.value ? nodeCascaderRef.value.validate() : Promise.resolve(''),
replyNodeFormRef.value?.validate()
]).catch((err: any) => {
return Promise.reject({ node: props.nodeModel, errMessage: err })
})
}
onMounted(() => {
set(props.nodeModel, 'validate', validate)
})
</script>
<style lang="scss" scoped>
.reply-node-editor {

View File

@ -85,6 +85,7 @@
</el-form-item>
<el-form-item label="检索问题输入">
<NodeCascader
ref="nodeCascaderRef"
:nodeModel="nodeModel"
class="w-full"
placeholder="请选择检索问题输入"
@ -121,7 +122,7 @@ const {
} = app.config.globalProperties.$route as any
const props = defineProps<{ nodeModel: any }>()
const nodeCascaderRef = ref()
const form = {
dataset_id_list: [],
dataset_setting: {
@ -192,7 +193,12 @@ function refresh() {
}
const validate = () => {
return DatasetNodeFormRef.value?.validate()
return Promise.all([
nodeCascaderRef.value.validate(),
DatasetNodeFormRef.value?.validate()
]).catch((err) => {
return Promise.reject({ node: props.nodeModel, errMessage: err })
})
}
onMounted(() => {