feat: 工作编排

This commit is contained in:
wangdan-fit2cloud 2024-06-11 17:56:05 +08:00
parent c60fc829ae
commit e8ff2f7a6e
4 changed files with 80 additions and 17 deletions

View File

@ -954,5 +954,26 @@ export const iconMap: any = {
)
])
}
},
'app-magnify': {
iconReader: () => {
return h('i', [
h(
'svg',
{
style: { height: '100%', width: '100%' },
viewBox: '0 0 1024 1024',
version: '1.1',
xmlns: 'http://www.w3.org/2000/svg'
},
[
h('path', {
d: 'M366.165333 593.749333a21.333333 21.333333 0 0 1 30.208 0l30.165334 30.165334a21.333333 21.333333 0 0 1 0 30.208l-170.752 170.666666H377.173333a21.333333 21.333333 0 0 1 21.333334 21.333334v42.666666a21.333333 21.333333 0 0 1-21.333334 21.333334H156.458667a42.538667 42.538667 0 0 1-42.666667-42.666667v-220.16a21.333333 21.333333 0 0 1 21.333333-21.333333h42.666667a21.333333 21.333333 0 0 1 21.333333 21.333333v113.493333l167.04-167.04z m500.992-480a42.538667 42.538667 0 0 1 42.666667 42.666667v220.16a21.333333 21.333333 0 0 1-21.333333 21.333333h-42.666667a21.333333 21.333333 0 0 1-21.333333-21.333333v-113.493333l-167.04 167.04a21.333333 21.333333 0 0 1-30.165334 0l-30.165333-30.165334a21.333333 21.333333 0 0 1 0-30.165333l170.709333-170.666667h-121.344a21.333333 21.333333 0 0 1-21.333333-21.333333v-42.666667a21.333333 21.333333 0 0 1 21.333333-21.333333h220.672z',
fill: 'currentColor'
})
]
)
])
}
}
}

View File

@ -2,7 +2,7 @@
<NodeContainer :nodeModel="nodeModel">
<el-form
@submit.prevent
:model="chat_data"
:model="form_data"
label-position="top"
require-asterisk-position="right"
class="mb-24"
@ -19,7 +19,7 @@
}"
>
<el-input
v-model="chat_data.name"
v-model="form_data.name"
maxlength="64"
placeholder="请输入应用名称"
show-word-limit
@ -27,7 +27,7 @@
</el-form-item>
<el-form-item label="应用描述">
<el-input
v-model="chat_data.desc"
v-model="form_data.desc"
placeholder="请输入应用描述"
:rows="3"
type="textarea"
@ -38,7 +38,7 @@
<el-form-item label="开场白">
<MdEditor
style="height: 150px"
v-model="chat_data.prologue"
v-model="form_data.prologue"
:preview="false"
:toolbars="[]"
:footers="[]"
@ -61,7 +61,7 @@ const form = {
prologue:
'您好,我是 MaxKB 小助手,您可以向我提出 MaxKB 使用问题。\n- MaxKB 主要功能有什么?\n- MaxKB 支持哪些大语言模型?\n- MaxKB 支持哪些文档类型?'
}
const chat_data = computed({
const form_data = computed({
get: () => {
if (props.nodeModel.properties.node_data) {
return props.nodeModel.properties.node_data

View File

@ -4,12 +4,12 @@
<el-card shadow="never" class="card-never" style="--el-card-padding: 12px">
<el-form
@submit.prevent
:model="chat_data"
:model="form_data"
label-position="top"
require-asterisk-position="right"
class="mb-24"
label-width="auto"
ref="aiChatNodeFormRef"
ref="questionNodeFormRef"
>
<el-form-item
label="AI 模型"
@ -21,7 +21,7 @@
}"
>
<el-select
v-model="chat_data.model_id"
v-model="form_data.model_id"
placeholder="请选择 AI 模型"
class="w-full"
popper-class="select-model"
@ -46,7 +46,7 @@
></span>
<span>{{ item.name }}</span>
</div>
<el-icon class="check-icon" v-if="item.id === chat_data.model_id"
<el-icon class="check-icon" v-if="item.id === form_data.model_id"
><Check
/></el-icon>
</el-option>
@ -67,7 +67,7 @@
<span>{{ item.name }}</span>
<span class="danger">不可用</span>
</div>
<el-icon class="check-icon" v-if="item.id === chat_data.model_id"
<el-icon class="check-icon" v-if="item.id === form_data.model_id"
><Check
/></el-icon>
</el-option>
@ -83,7 +83,7 @@
</el-select>
</el-form-item>
<el-form-item label="角色设定">
<el-input v-model="chat_data.system" placeholder="角色设定" />
<el-input v-model="form_data.system" placeholder="角色设定" />
</el-form-item>
<el-form-item label="提示词" prop="prompt">
<template #label>
@ -102,7 +102,7 @@
</div>
</template>
<el-input
v-model="chat_data.prompt"
v-model="form_data.prompt"
:rows="6"
type="textarea"
maxlength="2048"
@ -111,7 +111,7 @@
</el-form-item>
<el-form-item label="历史聊天记录">
<el-input-number
v-model="chat_data.dialogue_number"
v-model="form_data.dialogue_number"
:min="0"
controls-position="right"
class="w-full"
@ -158,7 +158,7 @@ const form = {
dialogue_number: 1
}
const chat_data = computed({
const form_data = computed({
get: () => {
if (props.nodeModel.properties.node_data) {
return props.nodeModel.properties.node_data
@ -173,7 +173,7 @@ const chat_data = computed({
})
const props = defineProps<{ nodeModel: any }>()
const aiChatNodeFormRef = ref<FormInstance>()
const questionNodeFormRef = ref<FormInstance>()
const createModelRef = ref<InstanceType<typeof CreateModelDialog>>()
const selectProviderRef = ref<InstanceType<typeof SelectProviderDialog>>()
@ -181,7 +181,7 @@ const modelOptions = ref<any>(null)
const providerOptions = ref<Array<Provider>>([])
const validate = () => {
aiChatNodeFormRef.value?.validate()
questionNodeFormRef.value?.validate()
}
function getModel() {

View File

@ -1,18 +1,60 @@
<template>
<NodeContainer :nodeModel="nodeModel">
<el-card shadow="never" class="card-never" style="--el-card-padding: 12px">
<el-form
@submit.prevent
:model="form_data"
label-position="top"
require-asterisk-position="right"
label-width="auto"
ref="replyNodeFormRef"
>
<el-form-item label="回复内容">
<MdEditor
class=""
style="height: 150px"
v-model="form_data.content"
:preview="false"
:toolbars="[]"
:footers="footers"
>
<template #defFooters>
<el-button text>
<AppIcon iconName="app-magnify" style="font-size: 16px"></AppIcon>
</el-button>
</template>
</MdEditor>
</el-form-item>
</el-form>
</el-card>
</NodeContainer>
</template>
<script setup lang="ts">
import { set } from 'lodash'
import NodeContainer from '@/workflow/common/NodeContainer.vue'
import { MdEditor } from 'md-editor-v3'
import type { FormInstance } from 'element-plus'
import { ref, computed, onMounted } from 'vue'
const props = defineProps<{ nodeModel: any }>()
const form = {
content: ''
}
const footers: any = [null, '=', 0]
const form_data = computed({
get: () => {
if (props.nodeModel.properties.node_data) {
return props.nodeModel.properties.node_data
} else {
set(props.nodeModel.properties, 'node_data', form)
}
return props.nodeModel.properties.node_data
},
set: (value) => {
set(props.nodeModel.properties, 'node_data', value)
}
})
// onMounted(() => {
// set(props.nodeModel, 'validate', validate)
// })