added TimeChargeandDischargePower, StartTimeChargeandDischargeDayandTime, Stop TimeChargeandDischargeDayandTime to frontend

This commit is contained in:
Yinyin Liu 2025-12-10 15:33:26 +01:00
parent 77e25aab51
commit dd953256dd
2 changed files with 57 additions and 64 deletions

View File

@ -336,9 +336,9 @@ export interface JSONRecordData {
ControlPermission:boolean; ControlPermission:boolean;
//For SodistoerHome-Sinexcel: TimeChargeDischarge mode //For SodistoerHome-Sinexcel: TimeChargeDischarge mode
TimeChargeDischargePower?: number; TimeChargeandDischargePower?: number;
TimeChargeDischargeTime?: string; StartTimeChargeandDischargeDayandTime?: Date | null;
TimeChargeDischargeDate?: string; StopTimeChargeandDischargeDayandTime?: Date | null;
}; };
DcDc: { DcDc: {
@ -650,9 +650,9 @@ export type ConfigurationValues = {
controlPermission:boolean; controlPermission:boolean;
// For sodistoreHome-Sinexcel: TimeChargeDischarge mode // For sodistoreHome-Sinexcel: TimeChargeDischarge mode
timeChargeDischargePower?: number; timeChargeandDischargePower?: number;
timeChargeDischargeTime?: Date | string; startTimeChargeandDischargeDayandTime?: Date | null;
timeChargeDischargeDate?: Date | string; stopTimeChargeandDischargeDayandTime?: Date | null;
}; };
// //
// export interface Pv { // export interface Pv {

View File

@ -27,7 +27,7 @@ import { ProductIdContext } from '../../../contexts/ProductIdContextProvider';
import { I_Installation } from 'src/interfaces/InstallationTypes'; import { I_Installation } from 'src/interfaces/InstallationTypes';
import { LocalizationProvider } from '@mui/x-date-pickers'; import { LocalizationProvider } from '@mui/x-date-pickers';
import { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs'; import { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';
import { DatePicker, TimePicker } from '@mui/x-date-pickers'; import {DateTimePicker } from '@mui/x-date-pickers';
import dayjs from 'dayjs'; import dayjs from 'dayjs';
import Switch from '@mui/material/Switch'; import Switch from '@mui/material/Switch';
import FormControlLabel from '@mui/material/FormControlLabel'; import FormControlLabel from '@mui/material/FormControlLabel';
@ -91,31 +91,18 @@ function SodistoreHomeConfiguration(props: SodistoreHomeConfigurationProps) {
batteriesCount: props.values.Config.BatteriesCount, batteriesCount: props.values.Config.BatteriesCount,
clusterNumber: props.values.Config.ClusterNumber??1, clusterNumber: props.values.Config.ClusterNumber??1,
PvNumber: props.values.Config.PvNumber??0, PvNumber: props.values.Config.PvNumber??0,
timeChargeDischargePower: props.values.Config?.TimeChargeDischargePower ?? 0, // default 0 W timeChargeandDischargePower: props.values.Config?.TimeChargeandDischargePower ?? 0, // default 0 W
timeChargeDischargeTime: props.values.Config?.TimeChargeDischargeTime ? dayjs(props.values.Config.TimeChargeDischargeTime).toDate() : dayjs().hour(8).minute(0).second(0).toDate(), // default 08:00 startTimeChargeandDischargeDayandTime:
timeChargeDischargeDate: props.values.Config?.TimeChargeDischargeDate ? dayjs(props.values.Config.TimeChargeDischargeDate).toDate() : dayjs().add(1, 'day').toDate(), // default = tomorrow props.values.Config?.StartTimeChargeandDischargeDayandTime
? dayjs(props.values.Config.StartTimeChargeandDischargeDayandTime).toDate()
: null,
stopTimeChargeandDischargeDayandTime:
props.values.Config?.StopTimeChargeandDischargeDayandTime
? dayjs(props.values.Config.StopTimeChargeandDischargeDayandTime).toDate()
: null,
// controlPermission: props.values.Config.ControlPermission??false, // controlPermission: props.values.Config.ControlPermission??false,
controlPermission: String(props.values.Config.ControlPermission).toLowerCase() === "true", controlPermission: String(props.values.Config.ControlPermission).toLowerCase() === "true",
// ...(device === 4
// ? {
// clusterNumber: props.values.Config.ClusterNumber??1,
// PvNumber: props.values.Config.PvNumber??0,
// timeChargeDischargePower:
// props.values.Config?.TimeChargeDischargePower ?? 0, // default 0 W
// timeChargeDischargeTime: props.values.Config?.TimeChargeDischargeTime
// ? dayjs(props.values.Config.TimeChargeDischargeTime).toDate()
// : dayjs().hour(8).minute(0).second(0).toDate(), // default 08:00
// timeChargeDischargeDate: props.values.Config?.TimeChargeDischargeDate
// ? dayjs(props.values.Config.TimeChargeDischargeDate).toDate()
// : dayjs().add(1, 'day').toDate(), // default = tomorrow
// }
// : {}),
// ...(device === 3
// ? {
// controlPermission: props.values.Config.ControlPermission??true,
// }
// : {}),
}); });
const handleOperatingPriorityChange = (event) => { const handleOperatingPriorityChange = (event) => {
@ -137,17 +124,10 @@ function SodistoreHomeConfiguration(props: SodistoreHomeConfigurationProps) {
batteriesCount:formValues.batteriesCount, batteriesCount:formValues.batteriesCount,
clusterNumber:formValues.clusterNumber, clusterNumber:formValues.clusterNumber,
PvNumber:formValues.PvNumber, PvNumber:formValues.PvNumber,
timeChargeDischargePower: formValues.timeChargeDischargePower, timeChargeandDischargePower: formValues.timeChargeandDischargePower,
timeChargeDischargeTime: formValues.timeChargeDischargeTime, startTimeChargeandDischargeDayandTime: formValues.startTimeChargeandDischargeDayandTime,
timeChargeDischargeDate: formValues.timeChargeDischargeDate, stopTimeChargeandDischargeDayandTime: formValues.stopTimeChargeandDischargeDayandTime,
controlPermission:formValues.controlPermission controlPermission:formValues.controlPermission
// ...(device === 4 &&
// OperatingPriorityOptions[formValues.operatingPriority] ===
// 'TimeChargeDischarge' && {
// timeChargeDischargePower: formValues.timeChargeDischargePower,
// timeChargeDischargeTime: formValues.timeChargeDischargeTime,
// timeChargeDischargeDate: formValues.timeChargeDischargeDate
// })
}; };
setLoading(true); setLoading(true);
@ -469,17 +449,17 @@ function SodistoreHomeConfiguration(props: SodistoreHomeConfigurationProps) {
</div> </div>
</> </>
{/* --- Extra fields for device=4 + TimeChargeDischarge --- */} {/* --- Sinexcel + TimeChargeDischarge --- */}
{device === 4 && {device === 4 &&
OperatingPriorityOptions[formValues.operatingPriority] === OperatingPriorityOptions[formValues.operatingPriority] ===
'TimeChargeDischarge' && ( 'TimeChargeDischarge' && (
<> <>
{/* Power input */} {/* Power input*/}
<div style={{ marginBottom: '5px' }}> <div style={{ marginBottom: '5px' }}>
<TextField <TextField
label="Power (W)" label="Power (W)"
name="timeChargeDischargePower" name="timeChargeandDischargePower"
value={formValues.timeChargeDischargePower} value={formValues.timeChargeandDischargePower}
onChange={(e) => onChange={(e) =>
handleTimeChargeDischargeChange(e.target.name, e.target.value) handleTimeChargeDischargeChange(e.target.name, e.target.value)
} }
@ -488,25 +468,31 @@ function SodistoreHomeConfiguration(props: SodistoreHomeConfigurationProps) {
/> />
</div> </div>
{/* Time picker */} {/* Start DateTime */}
<div style={{ marginBottom: '5px' }}> <div style={{ marginBottom: '5px' }}>
<LocalizationProvider dateAdapter={AdapterDayjs}> <LocalizationProvider dateAdapter={AdapterDayjs}>
<TimePicker <DateTimePicker
ampm={false} ampm={false}
label="Time" label="Start Time (Charge & Discharge)"
value={dayjs(formValues.timeChargeDischargeTime)} value={
onChange={(newTime) => formValues.startTimeChargeandDischargeDayandTime
handleTimeChargeDischargeChange( ? dayjs(formValues.startTimeChargeandDischargeDayandTime)
'timeChargeDischargeTime', : null
newTime?.toDate() }
) onChange={(newValue) =>
setFormValues((prev) => ({
...prev,
startTimeChargeandDischargeDayandTime: newValue
? newValue.toDate()
: null,
}))
} }
renderInput={(params) => ( renderInput={(params) => (
<TextField <TextField
{...params} {...params}
sx={{ sx={{
marginTop: 2, marginTop: 2,
width: '100%' width: '100%',
}} }}
/> />
)} )}
@ -514,24 +500,31 @@ function SodistoreHomeConfiguration(props: SodistoreHomeConfigurationProps) {
</LocalizationProvider> </LocalizationProvider>
</div> </div>
{/* Date picker */} {/* Stop DateTime */}
<div style={{ marginBottom: '5px' }}> <div style={{ marginBottom: '5px' }}>
<LocalizationProvider dateAdapter={AdapterDayjs}> <LocalizationProvider dateAdapter={AdapterDayjs}>
<DatePicker <DateTimePicker
label="Date" ampm={false}
value={dayjs(formValues.timeChargeDischargeDate)} label="Stop Time (Charge & Discharge)"
onChange={(newDate) => value={
handleTimeChargeDischargeChange( formValues.stopTimeChargeandDischargeDayandTime
'timeChargeDischargeDate', ? dayjs(formValues.stopTimeChargeandDischargeDayandTime)
newDate?.toDate() : null
) }
onChange={(newValue) =>
setFormValues((prev) => ({
...prev,
stopTimeChargeandDischargeDayandTime: newValue
? newValue.toDate()
: null,
}))
} }
renderInput={(params) => ( renderInput={(params) => (
<TextField <TextField
{...params} {...params}
sx={{ sx={{
marginTop: 2, marginTop: 2,
width: '100%' width: '100%',
}} }}
/> />
)} )}