import React, { useState } from 'react'; import { format } from 'sql-formatter'; import { CopyToClipboard } from 'react-copy-to-clipboard'; import { Prism as SyntaxHighlighter } from 'react-syntax-highlighter'; import { solarizedlight } from 'react-syntax-highlighter/dist/esm/styles/prism'; import { message } from 'antd'; import { PREFIX_CLS } from '../../common/constants'; import { CheckCircleFilled, UpOutlined } from '@ant-design/icons'; import { SqlInfoType } from '../../common/type'; type Props = { llmReq?: any; integrateSystem?: string; sqlInfo: SqlInfoType; sqlTimeCost?: number; }; const SqlItem: React.FC = ({ llmReq, integrateSystem, sqlInfo, sqlTimeCost }) => { const [sqlType, setSqlType] = useState(''); const tipPrefixCls = `${PREFIX_CLS}-item`; const prefixCls = `${PREFIX_CLS}-sql-item`; const handleCopy = (_: string, result: any) => { result ? message.success('复制SQL成功', 1) : message.error('复制SQL失败', 1); }; const onCollapse = () => { setSqlType(''); }; if (!llmReq && !sqlInfo.s2SQL && !sqlInfo.correctS2SQL && !sqlInfo.querySQL) { return null; } const { schema, linking, priorExts } = llmReq || {}; return (
SQL生成 {sqlTimeCost && ( (耗时: {sqlTimeCost}ms) )} : {sqlType && ( )}
{llmReq && (
{ setSqlType(sqlType === 'schemaMap' ? '' : 'schemaMap'); }} > Schema映射
)} {sqlInfo.s2SQL && (
{ setSqlType(sqlType === 's2SQL' ? '' : 's2SQL'); }} > 解析S2SQL
)} {sqlInfo.correctS2SQL && (
{ setSqlType(sqlType === 'correctS2SQL' ? '' : 'correctS2SQL'); }} > 修正S2SQL
)} {sqlInfo.querySQL && (
{ setSqlType(sqlType === 'querySQL' ? '' : 'querySQL'); }} > 执行SQL
)}
{sqlType === 'schemaMap' && (
{schema?.fieldNameList?.length > 0 && (
名称:
{schema.fieldNameList.join('、')}
)} {linking?.length > 0 && (
取值:
{linking .map((item: any) => { return `${item.fieldName}: ${item.fieldValue}`; }) .join('、')}
)} {priorExts && (
附加:
{priorExts}
)}
)} {sqlType && sqlInfo[sqlType] && ( <> {format(sqlInfo[sqlType])} handleCopy(text, result)} > )}
); }; export default SqlItem;