import React, { useState, useEffect, useRef } from 'react'; import { SemanticNodeType } from '../../enum'; import moment from 'moment'; import { message, Row, Col, Button } from 'antd'; import { queryStruct, downloadCosFile } from '@/pages/SemanticModel/service'; import TrendChart from '@/pages/SemanticModel/Metric/components/MetricTrend'; import MDatePicker from '@/components/MDatePicker'; import { useModel } from 'umi'; import { DateRangeType, DateSettingType } from '@/components/MDatePicker/type'; import { ISemantic } from '../../data'; type Props = { nodeData: any; [key: string]: any; }; const MetricTrendSection: React.FC = ({ nodeData }) => { const dateFieldMap = { [DateRangeType.DAY]: 'sys_imp_date', [DateRangeType.WEEK]: 'sys_imp_week', [DateRangeType.MONTH]: 'sys_imp_month', }; const indicatorFields = useRef<{ name: string; column: string }[]>([]); const [metricTrendData, setMetricTrendData] = useState([]); const [metricTrendLoading, setMetricTrendLoading] = useState(false); const [metricColumnConfig, setMetricColumnConfig] = useState(); const [authMessage, setAuthMessage] = useState(''); const [downloadLoding, setDownloadLoding] = useState(false); const [periodDate, setPeriodDate] = useState<{ startDate: string; endDate: string; dateField: string; }>({ startDate: moment().subtract('7', 'days').format('YYYY-MM-DD'), endDate: moment().format('YYYY-MM-DD'), dateField: dateFieldMap[DateRangeType.DAY], }); const getMetricTrendData = async (download = false) => { if (download) { setDownloadLoding(true); } else { setMetricTrendLoading(true); } const { modelId, bizName, name } = nodeData; indicatorFields.current = [{ name, column: bizName }]; const res = await queryStruct({ modelId, bizName, dateField: periodDate.dateField, startDate: periodDate.startDate, endDate: periodDate.endDate, download, }); if (download) { setDownloadLoding(false); return; } const { code, data, msg } = res; setMetricTrendLoading(false); if (code === 200) { const { resultList, columns, queryAuthorization } = data; setMetricTrendData(resultList); const message = queryAuthorization?.message; if (message) { setAuthMessage(message); } const targetConfig = columns.find((item: ISemantic.IMetricTrendColumn) => { return item.nameEn === bizName; }); if (targetConfig) { setMetricColumnConfig(targetConfig); } } else { if (code === 401 || code === 400) { setAuthMessage(msg); } else { message.error(msg); } setMetricTrendData([]); setMetricColumnConfig(undefined); } }; useEffect(() => { if (nodeData.id && nodeData?.nodeType === SemanticNodeType.METRIC) { getMetricTrendData(); } }, [nodeData, periodDate]); return ( <>
{ const [startDate, endDate] = value; const { dateSettingType, dynamicParams, staticParams } = config; let dateField = dateFieldMap[DateRangeType.DAY]; if (DateSettingType.DYNAMIC === dateSettingType) { dateField = dateFieldMap[dynamicParams.dateRangeType]; } if (DateSettingType.STATIC === dateSettingType) { dateField = dateFieldMap[staticParams.dateRangeType]; } setPeriodDate({ startDate, endDate, dateField }); }} disabledAdvanceSetting={true} />
{authMessage &&
{authMessage}
} ); }; export default MetricTrendSection;