import type { SteadyDataView } from '@/api/steady/steadyDataView/interface' import { buildTimePeriodRange, type TimePeriodUnit } from '@/views/components/TimePeriodSearch/timePeriod' export interface ChecksquareFormState { timeRange: string[] timeUnit: TimePeriodUnit timeBaseDate: Date } export const defaultChecksquareFormState = (): ChecksquareFormState => { const baseDate = new Date() return { timeRange: buildTimePeriodRange('day', baseDate), timeUnit: 'day', timeBaseDate: baseDate } } const padTimeValue = (value: number) => `${value}`.padStart(2, '0') export const formatChecksquareTime = (date: Date) => { return `${date.getFullYear()}-${padTimeValue(date.getMonth() + 1)}-${padTimeValue(date.getDate())} ${padTimeValue( date.getHours() )}:${padTimeValue(date.getMinutes())}:${padTimeValue(date.getSeconds())}` } export const collectChecksquareIndicatorCodes = (indicators: SteadyDataView.SteadyIndicatorNode[]) => { return Array.from(new Set(indicators.map(item => item.indicatorCode).filter(Boolean))) as string[] } export const calculateChecksquareExpectedItemCount = (params: { lineCount: number selectedIndicatorCount: number totalIndicatorCount: number }) => { const { lineCount, selectedIndicatorCount, totalIndicatorCount } = params const indicatorCount = selectedIndicatorCount > 0 ? selectedIndicatorCount : totalIndicatorCount return lineCount * indicatorCount } export const buildSteadyChecksquareCreatePayload = ( lineIds: string[], indicators: SteadyDataView.SteadyIndicatorNode[], formState: ChecksquareFormState ): SteadyDataView.SteadyChecksquareCreateParams => { return { lineIds, indicatorCodes: collectChecksquareIndicatorCodes(indicators), timeStart: (formState.timeRange[0] || '').replace(/\.[^.]+$/, ''), timeEnd: (formState.timeRange[1] || '').replace(/\.[^.]+$/, '') } } export const validateChecksquareSelection = (params: { lineIds: string[] indicators: SteadyDataView.SteadyIndicatorNode[] timeRange: string[] }) => { const { lineIds, timeRange } = params if (!lineIds.length) return '请选择监测点' if (!timeRange[0]) return '请选择开始时间' if (!timeRange[1]) return '请选择结束时间' if (Date.parse(timeRange[0].replace(' ', 'T')) > Date.parse(timeRange[1].replace(' ', 'T'))) { return '开始时间不能大于结束时间' } return '' }