2026-05-27 08:06:12 +08:00
|
|
|
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[]
|
|
|
|
|
}
|
|
|
|
|
|
2026-06-11 10:53:02 +08:00
|
|
|
export const buildSteadyChecksquareCreatePayload = (
|
2026-05-27 08:06:12 +08:00
|
|
|
lineId: string,
|
|
|
|
|
indicators: SteadyDataView.SteadyIndicatorNode[],
|
2026-06-11 10:53:02 +08:00
|
|
|
formState: ChecksquareFormState
|
|
|
|
|
): SteadyDataView.SteadyChecksquareCreateParams => {
|
|
|
|
|
return {
|
2026-05-27 08:06:12 +08:00
|
|
|
lineId,
|
|
|
|
|
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, indicators, timeRange } = params
|
|
|
|
|
|
|
|
|
|
if (!lineIds.length) return '请选择监测点'
|
|
|
|
|
if (lineIds.length > 1) return '数据校验一次只能选择一个监测点'
|
|
|
|
|
if (!indicators.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 ''
|
|
|
|
|
}
|