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

View File

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