fix: extract modules
This commit is contained in:
@@ -13,7 +13,6 @@ import RenderOutput from '../render/RenderOutput';
|
|||||||
import MyIcon from '@/components/Icon';
|
import MyIcon from '@/components/Icon';
|
||||||
import ExtractFieldModal from '../modules/ExtractFieldModal';
|
import ExtractFieldModal from '../modules/ExtractFieldModal';
|
||||||
import { ContextExtractEnum } from '@/constants/flow/flowField';
|
import { ContextExtractEnum } from '@/constants/flow/flowField';
|
||||||
import SourceHandle from '../render/SourceHandle';
|
|
||||||
import { FlowOutputItemTypeEnum, FlowValueTypeEnum } from '@/constants/flow';
|
import { FlowOutputItemTypeEnum, FlowValueTypeEnum } from '@/constants/flow';
|
||||||
|
|
||||||
const NodeExtract = ({
|
const NodeExtract = ({
|
||||||
@@ -150,6 +149,7 @@ const NodeExtract = ({
|
|||||||
: outputs.concat({
|
: outputs.concat({
|
||||||
key: data.key,
|
key: data.key,
|
||||||
label: `提取结果-${data.desc}`,
|
label: `提取结果-${data.desc}`,
|
||||||
|
description: '无法提取时不会返回',
|
||||||
valueType: FlowValueTypeEnum.string,
|
valueType: FlowValueTypeEnum.string,
|
||||||
type: FlowOutputItemTypeEnum.source,
|
type: FlowOutputItemTypeEnum.source,
|
||||||
targets: []
|
targets: []
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
import React, { useState } from 'react';
|
import React, { useMemo, useState } from 'react';
|
||||||
import {
|
import {
|
||||||
Box,
|
Box,
|
||||||
Button,
|
Button,
|
||||||
@@ -16,6 +16,7 @@ import { customAlphabet } from 'nanoid';
|
|||||||
const nanoid = customAlphabet('abcdefghijklmnopqrstuvwxyz1234567890', 6);
|
const nanoid = customAlphabet('abcdefghijklmnopqrstuvwxyz1234567890', 6);
|
||||||
import MyModal from '@/components/MyModal';
|
import MyModal from '@/components/MyModal';
|
||||||
import Avatar from '@/components/Avatar';
|
import Avatar from '@/components/Avatar';
|
||||||
|
import MyTooltip from '@/components/MyTooltip';
|
||||||
|
|
||||||
const ExtractFieldModal = ({
|
const ExtractFieldModal = ({
|
||||||
defaultField = {
|
defaultField = {
|
||||||
@@ -33,6 +34,7 @@ const ExtractFieldModal = ({
|
|||||||
const { register, handleSubmit } = useForm<ContextExtractAgentItemType>({
|
const { register, handleSubmit } = useForm<ContextExtractAgentItemType>({
|
||||||
defaultValues: defaultField
|
defaultValues: defaultField
|
||||||
});
|
});
|
||||||
|
const isEdit = useMemo(() => !!defaultField.key, [defaultField]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<MyModal isOpen={true} onClose={onClose}>
|
<MyModal isOpen={true} onClose={onClose}>
|
||||||
@@ -42,23 +44,29 @@ const ExtractFieldModal = ({
|
|||||||
</ModalHeader>
|
</ModalHeader>
|
||||||
<ModalBody>
|
<ModalBody>
|
||||||
<Flex alignItems={'center'}>
|
<Flex alignItems={'center'}>
|
||||||
<Box w={'70px'}>必填</Box>
|
<Box flex={'0 0 70px'}>必填</Box>
|
||||||
<Switch {...register('required')} />
|
<Switch {...register('required')} />
|
||||||
</Flex>
|
</Flex>
|
||||||
<Flex mt={5} alignItems={'center'}>
|
<Flex mt={5} alignItems={'center'}>
|
||||||
<Box w={'80px'}>字段描述</Box>
|
<Box flex={'0 0 70px'}>字段描述</Box>
|
||||||
<Input
|
<Input
|
||||||
placeholder="姓名/年龄/sql语句……"
|
placeholder="姓名/年龄/sql语句……"
|
||||||
{...register('desc', { required: '字段描述不能为空' })}
|
{...register('desc', { required: '字段描述不能为空' })}
|
||||||
/>
|
/>
|
||||||
</Flex>
|
</Flex>
|
||||||
<Flex mt={5} alignItems={'center'}>
|
<Flex mt={5} alignItems={'center'}>
|
||||||
<Box w={'80px'}>字段 key</Box>
|
<Box flex={'0 0 70px'}>字段 key</Box>
|
||||||
<Input
|
<MyTooltip label={isEdit ? '不支持修改 key' : ''} shouldWrapChildren={false}>
|
||||||
placeholder="name/age/sql"
|
<Input
|
||||||
{...register('key', { required: '字段 key 不能为空' })}
|
isDisabled={isEdit}
|
||||||
/>
|
placeholder="name/age/sql"
|
||||||
|
{...register('key', { required: '字段 key 不能为空' })}
|
||||||
|
/>
|
||||||
|
</MyTooltip>
|
||||||
</Flex>
|
</Flex>
|
||||||
|
<Box mt={1} pl={'70px'} color={'myGray.600'} fontSize={'sm'}>
|
||||||
|
注意: key 字段创建后无法修改
|
||||||
|
</Box>
|
||||||
</ModalBody>
|
</ModalBody>
|
||||||
|
|
||||||
<ModalFooter>
|
<ModalFooter>
|
||||||
|
|||||||
@@ -6,20 +6,24 @@ import Tag from '@/components/Tag';
|
|||||||
import Avatar from '@/components/Avatar';
|
import Avatar from '@/components/Avatar';
|
||||||
import ToolMenu from './ToolMenu';
|
import ToolMenu from './ToolMenu';
|
||||||
import { ChatItemType } from '@/types/chat';
|
import { ChatItemType } from '@/types/chat';
|
||||||
|
import { useRouter } from 'next/router';
|
||||||
|
|
||||||
const ChatHeader = ({
|
const ChatHeader = ({
|
||||||
history,
|
history,
|
||||||
appName,
|
appName,
|
||||||
appAvatar,
|
appAvatar,
|
||||||
chatModels,
|
chatModels,
|
||||||
|
appId,
|
||||||
onOpenSlider
|
onOpenSlider
|
||||||
}: {
|
}: {
|
||||||
history: ChatItemType[];
|
history: ChatItemType[];
|
||||||
appName: string;
|
appName: string;
|
||||||
appAvatar: string;
|
appAvatar: string;
|
||||||
chatModels?: string[];
|
chatModels?: string[];
|
||||||
|
appId?: string;
|
||||||
onOpenSlider: () => void;
|
onOpenSlider: () => void;
|
||||||
}) => {
|
}) => {
|
||||||
|
const router = useRouter();
|
||||||
const theme = useTheme();
|
const theme = useTheme();
|
||||||
const { isPc } = useGlobalStore();
|
const { isPc } = useGlobalStore();
|
||||||
const title = useMemo(
|
const title = useMemo(
|
||||||
@@ -58,7 +62,13 @@ const ChatHeader = ({
|
|||||||
<MyIcon name={'menu'} w={'20px'} h={'20px'} color={'myGray.900'} onClick={onOpenSlider} />
|
<MyIcon name={'menu'} w={'20px'} h={'20px'} color={'myGray.900'} onClick={onOpenSlider} />
|
||||||
<Flex px={3} alignItems={'center'} flex={'1 0 0'} w={0} justifyContent={'center'}>
|
<Flex px={3} alignItems={'center'} flex={'1 0 0'} w={0} justifyContent={'center'}>
|
||||||
<Avatar src={appAvatar} w={'16px'} />
|
<Avatar src={appAvatar} w={'16px'} />
|
||||||
<Box ml={1} className="textEllipsis">
|
<Box
|
||||||
|
ml={1}
|
||||||
|
className="textEllipsis"
|
||||||
|
onClick={() => {
|
||||||
|
appId && router.push(`/app/detail?appId=${appId}`);
|
||||||
|
}}
|
||||||
|
>
|
||||||
{appName}
|
{appName}
|
||||||
</Box>
|
</Box>
|
||||||
</Flex>
|
</Flex>
|
||||||
|
|||||||
@@ -345,6 +345,7 @@ const Chat = ({ appId, chatId }: { appId: string; chatId: string }) => {
|
|||||||
<ChatHeader
|
<ChatHeader
|
||||||
appAvatar={chatData.app.avatar}
|
appAvatar={chatData.app.avatar}
|
||||||
appName={chatData.app.name}
|
appName={chatData.app.name}
|
||||||
|
appId={appId}
|
||||||
history={chatData.history}
|
history={chatData.history}
|
||||||
chatModels={chatData.app.chatModels}
|
chatModels={chatData.app.chatModels}
|
||||||
onOpenSlider={onOpenSlider}
|
onOpenSlider={onOpenSlider}
|
||||||
|
|||||||
@@ -73,10 +73,6 @@ export const appModule2FlowNode = ({
|
|||||||
const template =
|
const template =
|
||||||
ModuleTemplatesFlat.find((template) => template.flowType === item.flowType) || EmptyModule;
|
ModuleTemplatesFlat.find((template) => template.flowType === item.flowType) || EmptyModule;
|
||||||
|
|
||||||
const mergeOutputs = item.outputs.concat(
|
|
||||||
template.outputs.filter((output) => !item.outputs.find((item) => item.key === output.key))
|
|
||||||
);
|
|
||||||
|
|
||||||
// replace item data
|
// replace item data
|
||||||
const moduleItem: FlowModuleItemType = {
|
const moduleItem: FlowModuleItemType = {
|
||||||
...item,
|
...item,
|
||||||
@@ -90,7 +86,7 @@ export const appModule2FlowNode = ({
|
|||||||
};
|
};
|
||||||
}),
|
}),
|
||||||
// 合并 template 和数据库,文案以 template 为准
|
// 合并 template 和数据库,文案以 template 为准
|
||||||
outputs: mergeOutputs.map((output) => {
|
outputs: item.outputs.map((output) => {
|
||||||
// unChange outputs
|
// unChange outputs
|
||||||
const templateOutput = template.outputs.find((item) => item.key === output.key);
|
const templateOutput = template.outputs.find((item) => item.key === output.key);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user