/** * This file is part of the NocoBase (R) project. * Copyright (c) 2020-2024 NocoBase Co., Ltd. * Authors: NocoBase Team. * * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License. * For more information, please refer to: https://www.nocobase.com/agreement. */ import { ObjectField, Field, connect, useForm, observer } from '@formily/react'; import React from 'react'; import { SQLEditor } from './SQLEditor'; import { Radio, Button, Space } from 'antd'; import { useT } from '../../locale'; import { BuildOutlined, ConsoleSqlOutlined, RightOutlined, DownOutlined } from '@ant-design/icons'; import { QueryBuilder } from './QueryBuilder'; import { useAPIClient } from '@nocobase/client'; import { configStore } from './config-store'; import { ResultPanel } from './ResultPanel'; import { ChartBlockModel } from './ChartBlockModel'; import { ChartResource } from '../resources/ChartResource'; import { SQLResource, useFlowSettingsContext } from '@nocobase/flow-engine'; const QueryMode: React.FC = connect(({ value = 'builder', onChange, onClick }) => { const t = useT(); return ( { const value = e.target.value; onChange(value); }} > onClick?.()}> {t('Query builder')} onClick?.()}> {t('SQL')} ); }); // 核心修改:将顶部“模式切换 + Result/Run”合并到本组件的一行头部 export const QueryPanel: React.FC = observer(() => { const t = useT(); const form = useForm(); const api = useAPIClient(); const ctx = useFlowSettingsContext(); const mode = form?.values?.query?.mode || 'builder'; const [showResult, setShowResult] = React.useState(false); const [running, setRunning] = React.useState(false); const handleRun = async () => { try { setRunning(true); const query = form.values?.query; // builder 模式需要先提交表单做校验;sql 模式不需要 if (query?.mode === 'builder') { await form.submit(); } ctx.model.checkResource(query); // 保证 resource 正确 if (query?.mode === 'sql') { (ctx.model.resource as SQLResource).setDebug(true); // 开启 debug 模式,sql 查询不要走 runById } await ctx.model.runQueryAndUpdateResult(query); setShowResult(true); } catch (error: any) { console.error(error); } finally { setRunning(false); } }; return ( <>
{/* 左边:模式切换,点击时收起数据结果预览 */} setShowResult(false) }]} /> {/* 右边: 运行查询、结果 */}
{/* 下面保持不变 */} {showResult ? (
) : mode === 'builder' ? ( ) : ( )}
); });