import React, { useState, useRef, useEffect } from 'react'; import { Button, Tag, Space } from 'antd'; import ProTable from '@ant-design/pro-table'; import ProCard from '@ant-design/pro-card'; import SqlEditor from '@/components/SqlEditor'; import styles from './style.less'; import FormLabelRequire from './FormLabelRequire'; import { ISemantic } from '../data'; type Props = { typeParams: ISemantic.IFieldTypeParams; fieldList: ISemantic.IFieldTypeParamsItem[]; onFieldChange: (fields: ISemantic.IFieldTypeParamsItem[]) => void; onSqlChange: (sql: string) => void; }; const MetricFieldFormTable: React.FC = ({ typeParams, fieldList, onFieldChange, onSqlChange, }) => { const [tableData, setTableData] = useState([]); const [defineTypeParams, setDefineTypeParams] = useState( typeParams || { expr: '', metrics: [], }, ); useEffect(() => { if (!Array.isArray(fieldList)) { setTableData([]); return; } setTableData(fieldList); }, [fieldList]); useEffect(() => { setDefineTypeParams({ ...typeParams }); }, [typeParams]); const [exprString, setExprString] = useState(typeParams?.expr || ''); const [selectedKeys, setSelectedKeys] = useState(() => { return defineTypeParams.fields.map((item: any) => { return item.fieldName; }); }); const columns = [ { dataIndex: 'fieldName', title: '字段名称', }, { dataIndex: 'dataType', title: '字段类型', }, ]; const rowSelection = { selectedRowKeys: selectedKeys, onChange: (_selectedRowKeys: any[]) => { setSelectedKeys([..._selectedRowKeys]); onFieldChange( _selectedRowKeys.map((fieldName) => { return { fieldName }; }), ); }, }; return ( <> } rowKey="fieldName" columns={columns} dataSource={tableData} search={false} toolbar={{ search: { placeholder: '请输入字段名称', onSearch: (value: string) => { if (!value) { setTableData(fieldList); return; } setTableData( fieldList.reduce((data: ISemantic.IFieldTypeParamsItem[], item) => { if (item.fieldName.includes(value)) { data.push(item); } return data; }, []), ); }, }, }} pagination={{ defaultPageSize: 10 }} size="small" options={false} tableAlertRender={false} scroll={{ y: 500 }} rowSelection={rowSelection} /> } // tooltip="度量表达式由上面选择的度量组成,如选择了度量A和B,则可将表达式写成A+B" >

由于字段上是不带聚合函数的,因此通过字段x和y创建指标时,表达式需要写 聚合函数 如: sum(x) + sum(y)

{ const expr = sql; setExprString(expr); onSqlChange?.(expr); }} height={'150px'} />
); }; export default MetricFieldFormTable;