Update App.jsx via upload script - 2026-07-29 10:54:11

This commit is contained in:
mike 2026-07-29 10:54:35 +08:00
parent 3d602f53f7
commit 3e36a8b0b1
1 changed files with 164 additions and 2 deletions

166
App.jsx
View File

@ -60,6 +60,7 @@ const LEGACY_PRODUCT_TAXONOMY = [
subs: [ subs: [
{ id: 'lead_acid', label: '铅酸电池 / Lead-acid Battery', short: '铅酸电池' }, { id: 'lead_acid', label: '铅酸电池 / Lead-acid Battery', short: '铅酸电池' },
{ id: 'lifepo4', label: '磷酸铁锂电池 / LiFePO4 Battery', short: '磷酸铁锂电池' }, { id: 'lifepo4', label: '磷酸铁锂电池 / LiFePO4 Battery', short: '磷酸铁锂电池' },
{ id: 'ups_lithium_system', label: 'UPS配套锂电池系统 / UPS-matched Lithium Battery System', short: 'UPS配套锂电池系统' },
], ],
}, },
]; ];
@ -328,6 +329,28 @@ const TRANSLATION_DICTIONARY = {
'输出功率因数': { en: 'Output Power Factor', fr: 'Facteur de puissance de sortie', ru: 'Выходной коэффициент мощности', es: 'Factor de potencia de salida', ar: 'معامل قدرة الخرج' }, '输出功率因数': { en: 'Output Power Factor', fr: 'Facteur de puissance de sortie', ru: 'Выходной коэффициент мощности', es: 'Factor de potencia de salida', ar: 'معامل قدرة الخرج' },
'可并联台数': { en: 'Parallel Units', fr: 'Unités en parallèle', ru: 'Количество параллельных блоков', es: 'Unidades en paralelo', ar: 'عدد الوحدات المتوازية' }, '可并联台数': { en: 'Parallel Units', fr: 'Unités en parallèle', ru: 'Количество параллельных блоков', es: 'Unidades en paralelo', ar: 'عدد الوحدات المتوازية' },
'过载保护': { en: 'Overload Protection', fr: 'Protection contre les surcharges', ru: 'Защита от перегрузки', es: 'Protección contra sobrecarga', ar: 'حماية من الحمل الزائد' }, '过载保护': { en: 'Overload Protection', fr: 'Protection contre les surcharges', ru: 'Защита от перегрузки', es: 'Protección contra sobrecarga', ar: 'حماية من الحمل الزائد' },
'UPS配套锂电池系统': { en: 'UPS-matched Lithium Battery System', fr: 'Système de batterie lithium pour UPS', ru: 'Литиевая батарейная система для ИБП', es: 'Sistema de batería de litio para SAI', ar: 'نظام بطارية ليثيوم متوافق مع UPS' },
'模块类型': { en: 'Module Type', fr: 'Type de module', ru: 'Тип модуля', es: 'Tipo de módulo', ar: 'نوع الوحدة' },
'额定容量': { en: 'Rated Capacity', fr: 'Capacité nominale', ru: 'Номинальная ёмкость', es: 'Capacidad nominal', ar: 'السعة الاسمية' },
'电芯类型': { en: 'Cell Type', fr: 'Type de cellule', ru: 'Тип элемента', es: 'Tipo de celda', ar: 'نوع الخلية' },
'额定电压': { en: 'Rated Voltage', fr: 'Tension nominale', ru: 'Номинальное напряжение', es: 'Voltaje nominal', ar: 'الجهد الاسمي' },
'放电倍率': { en: 'Discharge Rate', fr: 'Taux de décharge', ru: 'Скорость разряда', es: 'Tasa de descarga', ar: 'معدل التفريغ' },
'充电倍率': { en: 'Charge Rate', fr: 'Taux de charge', ru: 'Скорость заряда', es: 'Tasa de carga', ar: 'معدل الشحن' },
'模块最大能量(kWh)': { en: 'Module Max Energy (kWh)', fr: 'Énergie max du module (kWh)', ru: 'Макс. энергия модуля (кВт·ч)', es: 'Energía máxima del módulo (kWh)', ar: 'أقصى طاقة للوحدة (كيلوواط ساعة)' },
'模块输出功率(kW)': { en: 'Module Output Power (kW)', fr: 'Puissance de sortie du module (kW)', ru: 'Выходная мощность модуля (кВт)', es: 'Potencia de salida del módulo (kW)', ar: 'طاقة خرج الوحدة (كيلوواط)' },
'模块尺寸(mm)': { en: 'Module Dimensions (mm)', fr: 'Dimensions du module (mm)', ru: 'Габариты модуля (мм)', es: 'Dimensiones del módulo (mm)', ar: 'أبعاد الوحدة (مم)' },
'模块重量(kg)': { en: 'Module Weight (kg)', fr: 'Poids du module (kg)', ru: 'Вес модуля (кг)', es: 'Peso del módulo (kg)', ar: 'وزن الوحدة (كجم)' },
'电池最大能量(kWh)': { en: 'Battery Max Energy (kWh)', fr: 'Énergie max de la batterie (kWh)', ru: 'Макс. энергия батареи (кВт·ч)', es: 'Energía máxima de la batería (kWh)', ar: 'أقصى طاقة للبطارية (كيلوواط ساعة)' },
'额定输出电压(V)': { en: 'Rated Output Voltage (V)', fr: 'Tension de sortie nominale (V)', ru: 'Номинальное выходное напряжение (В)', es: 'Voltaje de salida nominal (V)', ar: 'جهد الخرج الاسمي (فولت)' },
'循环寿命': { en: 'Cycle Life', fr: 'Durée de vie (cycles)', ru: 'Циклический ресурс', es: 'Vida útil (ciclos)', ar: 'عمر الدورة' },
'通信接口': { en: 'Communication Interface', fr: 'Interface de communication', ru: 'Интерфейс связи', es: 'Interfaz de comunicación', ar: 'واجهة الاتصال' },
'保护功能': { en: 'Protection Functions', fr: 'Fonctions de protection', ru: 'Функции защиты', es: 'Funciones de protección', ar: 'وظائف الحماية' },
'运行温度': { en: 'Operating Temperature', fr: 'Température de fonctionnement', ru: 'Рабочая температура', es: 'Temperatura de funcionamiento', ar: 'درجة حرارة التشغيل' },
'颜色': { en: 'Color', fr: 'Couleur', ru: 'Цвет', es: 'Color', ar: 'اللون' },
'系统柜尺寸(mm)': { en: 'Cabinet Dimensions (mm)', fr: "Dimensions de l'armoire (mm)", ru: 'Габариты шкафа (мм)', es: 'Dimensiones del gabinete (mm)', ar: 'أبعاد الخزانة (مم)' },
'系统柜重量(kg)': { en: 'Cabinet Weight (kg)', fr: "Poids de l'armoire (kg)", ru: 'Вес шкафа (кг)', es: 'Peso del gabinete (kg)', ar: 'وزن الخزانة (كجم)' },
'海拔(m)': { en: 'Altitude (m)', fr: 'Altitude (m)', ru: 'Высота над уровнем моря (м)', es: 'Altitud (m)', ar: 'الارتفاع (م)' },
'自放电率': { en: 'Self-discharge Rate', fr: "Taux d'autodécharge", ru: 'Скорость саморазряда', es: 'Tasa de autodescarga', ar: 'معدل التفريغ الذاتي' },
'在线式高频UPS': { en: 'Online High-Frequency UPS', fr: 'Onduleur en ligne haute fréquence', ru: 'Онлайн высокочастотный ИБП', es: 'SAI en línea de alta frecuencia', ar: 'يو بي إس عالي التردد أونلاين' }, '在线式高频UPS': { en: 'Online High-Frequency UPS', fr: 'Onduleur en ligne haute fréquence', ru: 'Онлайн высокочастотный ИБП', es: 'SAI en línea de alta frecuencia', ar: 'يو بي إس عالي التردد أونلاين' },
'电压': { en: 'Voltage', fr: 'Tension', ru: 'Напряжение', es: 'Voltaje', ar: 'الجهد' }, '电压': { en: 'Voltage', fr: 'Tension', ru: 'Напряжение', es: 'Voltaje', ar: 'الجهد' },
'视载功率': { en: 'Rated Power (VA)', fr: 'Puissance nominale (VA)', ru: 'Номинальная мощность (ВА)', es: 'Potencia nominal (VA)', ar: 'الطاقة الاسمية (فولت أمبير)' }, '视载功率': { en: 'Rated Power (VA)', fr: 'Puissance nominale (VA)', ru: 'Номинальная мощность (ВА)', es: 'Potencia nominal (VA)', ar: 'الطاقة الاسمية (فولت أمبير)' },
@ -407,7 +430,30 @@ async function resolveExportTranslations(terms, lang) {
function productExportRows(p, categories) { function productExportRows(p, categories) {
const cat = (categories || []).find(c => c.id === p.category); const cat = (categories || []).find(c => c.id === p.category);
const rows = []; const rows = [];
if (isUpsCategory(cat) && (p.type === '离线式UPS' || p.type === '在线互动式UPS')) { if (isBatteryCategory(cat) && p.type === 'UPS配套锂电池系统') {
if (p.moduleType) rows.push({ labelKey: '模块类型', value: p.moduleType });
if (p.moduleCapacity) rows.push({ labelKey: '额定容量', value: p.moduleCapacity });
if (p.cellType) rows.push({ labelKey: '电芯类型', value: p.cellType });
if (p.moduleVoltage) rows.push({ labelKey: '额定电压', value: p.moduleVoltage });
if (p.dischargeRate) rows.push({ labelKey: '放电倍率', value: p.dischargeRate });
if (p.chargeRate) rows.push({ labelKey: '充电倍率', value: p.chargeRate });
if (p.moduleMaxEnergy) rows.push({ labelKey: '模块最大能量(kWh)', value: p.moduleMaxEnergy });
if (p.moduleOutputPower) rows.push({ labelKey: '模块输出功率(kW)', value: p.moduleOutputPower });
if (p.moduleDimensions) rows.push({ labelKey: '模块尺寸(mm)', value: p.moduleDimensions });
if (p.moduleWeight) rows.push({ labelKey: '模块重量(kg)', value: p.moduleWeight });
if (p.cabinetMaxEnergy) rows.push({ labelKey: '电池最大能量(kWh)', value: p.cabinetMaxEnergy });
if (p.cabinetRatedVoltage) rows.push({ labelKey: '额定输出电压(V)', value: p.cabinetRatedVoltage });
if (p.cycleLife) rows.push({ labelKey: '循环寿命', value: p.cycleLife });
if (p.commInterface) rows.push({ labelKey: '通信接口', value: p.commInterface });
if (p.protectionFunctions) rows.push({ labelKey: '保护功能', value: p.protectionFunctions });
if (p.operatingTemp) rows.push({ labelKey: '运行温度', value: p.operatingTemp });
if (p.humidity) rows.push({ labelKey: '湿度', value: p.humidity });
if (p.color) rows.push({ labelKey: '颜色', value: p.color });
if (p.cabinetDimensions) rows.push({ labelKey: '系统柜尺寸(mm)', value: p.cabinetDimensions });
if (p.cabinetWeight) rows.push({ labelKey: '系统柜重量(kg)', value: p.cabinetWeight });
if (p.altitude) rows.push({ labelKey: '海拔(m)', value: p.altitude });
if (p.selfDischargeRate) rows.push({ labelKey: '自放电率', value: p.selfDischargeRate });
} else if (isUpsCategory(cat) && (p.type === '离线式UPS' || p.type === '在线互动式UPS')) {
if (p.powerOrCapacity) rows.push({ labelKey: '容量', value: p.powerOrCapacity }); if (p.powerOrCapacity) rows.push({ labelKey: '容量', value: p.powerOrCapacity });
if (p.inputVoltage) rows.push({ labelKey: '输入电压', value: p.inputVoltage }); if (p.inputVoltage) rows.push({ labelKey: '输入电压', value: p.inputVoltage });
if (p.inputVoltageRange) rows.push({ labelKey: '输入电压范围', value: p.inputVoltageRange }); if (p.inputVoltageRange) rows.push({ labelKey: '输入电压范围', value: p.inputVoltageRange });
@ -610,6 +656,29 @@ const blankProduct = () => ({
outputPowerFactor: '', // "0.9" "1" outputPowerFactor: '', // "0.9" "1"
parallelUnits: '', // "Not supported" parallelUnits: '', // "Not supported"
overload: '', // "105%-125% 6-25s; >150% 200ms" overload: '', // "105%-125% 6-25s; >150% 200ms"
// UPS
moduleType: '', // ""
moduleCapacity: '', // (Ah) "100"
cellType: '', // "LFP"
moduleVoltage: '', // (V) "51.2"
dischargeRate: '', // (C) "2"
chargeRate: '', // (C) "1"
moduleMaxEnergy: '', // (kWh) "5.12"
moduleOutputPower: '', // (kW) "10.24"
moduleDimensions: '', // (mm) "440*440*131"
moduleWeight: '', // (kg) "43±2"
// UPS
cabinetMaxEnergy: '', // (kWh) "40.96"
cabinetRatedVoltage: '', // (V) "409.6/±204.8/460.8/512/±256/563.2/614.4/±307.2"
cycleLife: '', // 寿 "5000@50%DOD"
commInterface: '', // "LAN/CAN/RS485/"
protectionFunctions: '', // ""
operatingTemp: '', // "0~40(20~25)"
color: '', // "RAL9004"
cabinetDimensions: '', // (mm) "600×850×2000"
cabinetWeight: '', // (kg) "544±108"
altitude: '', // (m) "4000>2000使"
selfDischargeRate: '', // "<5%030/30"
batterySpec: '', // "12V4.5AH*1"UPS/线/线UPS batterySpec: '', // "12V4.5AH*1"UPS/线/线UPS
dimensions: '', // (mm)UPS/线/线UPS dimensions: '', // (mm)UPS/线/线UPS
netWeight: '', // (kg)UPS/线/线UPS netWeight: '', // (kg)UPS/线/线UPS
@ -621,6 +690,9 @@ const blankProduct = () => ({
function isUpsCategory(cat) { function isUpsCategory(cat) {
return !!cat && (cat.id === 'ups' || cat.name === 'UPS不间断电源'); return !!cat && (cat.id === 'ups' || cat.name === 'UPS不间断电源');
} }
function isBatteryCategory(cat) {
return !!cat && (cat.id === 'battery' || cat.name === '储能电池');
}
function spaceToAsterisk(v) { return (v || '').replace(/ /g, '*'); } function spaceToAsterisk(v) { return (v || '').replace(/ /g, '*'); }
function computeMaxPowerKW(ratedPower, ratedPowerUnit, powerFactor) { function computeMaxPowerKW(ratedPower, ratedPowerUnit, powerFactor) {
const rp = parseFloat(ratedPower); const rp = parseFloat(ratedPower);
@ -632,6 +704,32 @@ function computeMaxPowerKW(ratedPower, ratedPowerUnit, powerFactor) {
} }
function powerInfoItems(p, categories) { function powerInfoItems(p, categories) {
const cat = (categories || []).find(c => c.id === p.category); const cat = (categories || []).find(c => c.id === p.category);
if (isBatteryCategory(cat) && p.type === 'UPS配套锂电池系统') {
const items = [];
if (p.moduleType) items.push({ key: 'moduletype', label: '模块类型', value: p.moduleType });
if (p.moduleCapacity) items.push({ key: 'modulecap', label: '额定容量', value: p.moduleCapacity });
if (p.cellType) items.push({ key: 'celltype', label: '电芯类型', value: p.cellType });
if (p.moduleVoltage) items.push({ key: 'modulevoltage', label: '额定电压', value: p.moduleVoltage });
if (p.dischargeRate) items.push({ key: 'dischargerate', label: '放电倍率', value: p.dischargeRate });
if (p.chargeRate) items.push({ key: 'chargerate', label: '充电倍率', value: p.chargeRate });
if (p.moduleMaxEnergy) items.push({ key: 'modulemaxenergy', label: '模块最大能量(kWh)', value: p.moduleMaxEnergy });
if (p.moduleOutputPower) items.push({ key: 'moduleoutputpower', label: '模块输出功率(kW)', value: p.moduleOutputPower });
if (p.moduleDimensions) items.push({ key: 'moduledim', label: '模块尺寸(mm)', value: p.moduleDimensions });
if (p.moduleWeight) items.push({ key: 'moduleweight', label: '模块重量(kg)', value: p.moduleWeight });
if (p.cabinetMaxEnergy) items.push({ key: 'cabinetmaxenergy', label: '电池最大能量(kWh)', value: p.cabinetMaxEnergy });
if (p.cabinetRatedVoltage) items.push({ key: 'cabinetvoltage', label: '额定输出电压(V)', value: p.cabinetRatedVoltage });
if (p.cycleLife) items.push({ key: 'cyclelife', label: '循环寿命', value: p.cycleLife });
if (p.commInterface) items.push({ key: 'comminterface', label: '通信接口', value: p.commInterface });
if (p.protectionFunctions) items.push({ key: 'protectionfunc', label: '保护功能', value: p.protectionFunctions });
if (p.operatingTemp) items.push({ key: 'operatingtemp', label: '运行温度', value: p.operatingTemp });
if (p.humidity) items.push({ key: 'humidity', label: '湿度', value: p.humidity });
if (p.color) items.push({ key: 'color', label: '颜色', value: p.color });
if (p.cabinetDimensions) items.push({ key: 'cabinetdim', label: '系统柜尺寸(mm)', value: p.cabinetDimensions });
if (p.cabinetWeight) items.push({ key: 'cabinetweight', label: '系统柜重量(kg)', value: p.cabinetWeight });
if (p.altitude) items.push({ key: 'altitude', label: '海拔(m)', value: p.altitude });
if (p.selfDischargeRate) items.push({ key: 'selfdischarge', label: '自放电率', value: p.selfDischargeRate });
return items;
}
if (isUpsCategory(cat) && (p.type === '离线式UPS' || p.type === '在线互动式UPS')) { if (isUpsCategory(cat) && (p.type === '离线式UPS' || p.type === '在线互动式UPS')) {
const items = []; const items = [];
if (p.powerOrCapacity) items.push({ key: 'capacity', label: '容量', value: p.powerOrCapacity }); if (p.powerOrCapacity) items.push({ key: 'capacity', label: '容量', value: p.powerOrCapacity });
@ -2117,6 +2215,15 @@ function MainApp({ username, onLogout }) {
efficiencyBatteryMode: p.efficiencyBatteryMode || '', chargingVoltage: p.chargingVoltage || '', efficiencyBatteryMode: p.efficiencyBatteryMode || '', chargingVoltage: p.chargingVoltage || '',
optionalSnmp: p.optionalSnmp || '', optionalSnmp: p.optionalSnmp || '',
outputPowerFactor: p.outputPowerFactor || '', parallelUnits: p.parallelUnits || '', overload: p.overload || '', outputPowerFactor: p.outputPowerFactor || '', parallelUnits: p.parallelUnits || '', overload: p.overload || '',
moduleType: p.moduleType || '', moduleCapacity: p.moduleCapacity || '', cellType: p.cellType || '',
moduleVoltage: p.moduleVoltage || '', dischargeRate: p.dischargeRate || '', chargeRate: p.chargeRate || '',
moduleMaxEnergy: p.moduleMaxEnergy || '', moduleOutputPower: p.moduleOutputPower || '',
moduleDimensions: p.moduleDimensions || '', moduleWeight: p.moduleWeight || '',
cabinetMaxEnergy: p.cabinetMaxEnergy || '', cabinetRatedVoltage: p.cabinetRatedVoltage || '',
cycleLife: p.cycleLife || '', commInterface: p.commInterface || '', protectionFunctions: p.protectionFunctions || '',
operatingTemp: p.operatingTemp || '', color: p.color || '',
cabinetDimensions: p.cabinetDimensions || '', cabinetWeight: p.cabinetWeight || '',
altitude: p.altitude || '', selfDischargeRate: p.selfDischargeRate || '',
batterySpec: p.batterySpec || '', dimensions: p.dimensions || '', netWeight: p.netWeight || '', notes: p.notes || '', batterySpec: p.batterySpec || '', dimensions: p.dimensions || '', netWeight: p.netWeight || '', notes: p.notes || '',
})); }));
setAiImportDrafts(drafts); setAiImportDrafts(drafts);
@ -2173,6 +2280,15 @@ function MainApp({ username, onLogout }) {
efficiencyBatteryMode: d.efficiencyBatteryMode || '', chargingVoltage: d.chargingVoltage || '', efficiencyBatteryMode: d.efficiencyBatteryMode || '', chargingVoltage: d.chargingVoltage || '',
optionalSnmp: d.optionalSnmp || '', optionalSnmp: d.optionalSnmp || '',
outputPowerFactor: d.outputPowerFactor || '', parallelUnits: d.parallelUnits || '', overload: d.overload || '', outputPowerFactor: d.outputPowerFactor || '', parallelUnits: d.parallelUnits || '', overload: d.overload || '',
moduleType: d.moduleType || '', moduleCapacity: d.moduleCapacity || '', cellType: d.cellType || '',
moduleVoltage: d.moduleVoltage || '', dischargeRate: d.dischargeRate || '', chargeRate: d.chargeRate || '',
moduleMaxEnergy: d.moduleMaxEnergy || '', moduleOutputPower: d.moduleOutputPower || '',
moduleDimensions: d.moduleDimensions || '', moduleWeight: d.moduleWeight || '',
cabinetMaxEnergy: d.cabinetMaxEnergy || '', cabinetRatedVoltage: d.cabinetRatedVoltage || '',
cycleLife: d.cycleLife || '', commInterface: d.commInterface || '', protectionFunctions: d.protectionFunctions || '',
operatingTemp: d.operatingTemp || '', color: d.color || '',
cabinetDimensions: d.cabinetDimensions || '', cabinetWeight: d.cabinetWeight || '',
altitude: d.altitude || '', selfDischargeRate: d.selfDischargeRate || '',
batterySpec: d.batterySpec || '', dimensions: d.dimensions || '', netWeight: d.netWeight || '', notes: d.notes || '', batterySpec: d.batterySpec || '', dimensions: d.dimensions || '', netWeight: d.netWeight || '', notes: d.notes || '',
}; };
} }
@ -3761,6 +3877,7 @@ function ProductForm({ draft, setDraft, onSave, onCancel, categories, onManage,
const isRackUps = isUps && draft.type === '机架式UPS'; const isRackUps = isUps && draft.type === '机架式UPS';
const isOnlineHighFreq = isUps && draft.type === '在线式高频UPS'; const isOnlineHighFreq = isUps && draft.type === '在线式高频UPS';
const isRackLikeUps = isRackUps || isOnlineHighFreq; const isRackLikeUps = isRackUps || isOnlineHighFreq;
const isBatterySystem = isBatteryCategory(cat) && draft.type === 'UPS配套锂电池系统';
const maxKW = computeMaxPowerKW(draft.ratedPower, draft.ratedPowerUnit, draft.powerFactor); const maxKW = computeMaxPowerKW(draft.ratedPower, draft.ratedPowerUnit, draft.powerFactor);
const extraNames = draft.extraNames || []; const extraNames = draft.extraNames || [];
const [imageUploading, setImageUploading] = useState(false); const [imageUploading, setImageUploading] = useState(false);
@ -3907,7 +4024,52 @@ function ProductForm({ draft, setDraft, onSave, onCancel, categories, onManage,
</div> </div>
)} )}
{isUps && isRackLikeUps ? ( {isBatterySystem ? (
<>
<div className="grid-2">
<div className="field"><span className="field-label">模块类型</span><input className="input" value={draft.moduleType} onChange={e => set({ moduleType: e.target.value })} placeholder="如:长延时型" /></div>
<div className="field"><span className="field-label">电芯类型</span><input className="input" value={draft.cellType} onChange={e => set({ cellType: e.target.value })} placeholder="如磷酸铁锂电池LFP" /></div>
</div>
<div className="grid-2">
<div className="field"><span className="field-label">额定容量Ah</span><input className="input" value={draft.moduleCapacity} onChange={e => set({ moduleCapacity: e.target.value })} placeholder="如100" /></div>
<div className="field"><span className="field-label">额定电压V</span><input className="input" value={draft.moduleVoltage} onChange={e => set({ moduleVoltage: e.target.value })} placeholder="如51.2" /></div>
</div>
<div className="grid-2">
<div className="field"><span className="field-label">放电倍率C</span><input className="input" value={draft.dischargeRate} onChange={e => set({ dischargeRate: e.target.value })} placeholder="如2" /></div>
<div className="field"><span className="field-label">充电倍率C</span><input className="input" value={draft.chargeRate} onChange={e => set({ chargeRate: e.target.value })} placeholder="如1" /></div>
</div>
<div className="grid-2">
<div className="field"><span className="field-label">模块最大能量kWh</span><input className="input" value={draft.moduleMaxEnergy} onChange={e => set({ moduleMaxEnergy: e.target.value })} placeholder="如5.12" /></div>
<div className="field"><span className="field-label">模块输出功率kW</span><input className="input" value={draft.moduleOutputPower} onChange={e => set({ moduleOutputPower: e.target.value })} placeholder="如10.24" /></div>
</div>
<div className="grid-2">
<div className="field"><span className="field-label">模块尺寸mm</span><input className="input" value={draft.moduleDimensions} onChange={e => set({ moduleDimensions: spaceToAsterisk(e.target.value) })} placeholder="如440*440*131" /></div>
<div className="field"><span className="field-label">模块重量kg</span><input className="input" value={draft.moduleWeight} onChange={e => set({ moduleWeight: e.target.value })} placeholder="如43±2" /></div>
</div>
<div className="grid-2">
<div className="field"><span className="field-label">电池最大能量kWh</span><input className="input" value={draft.cabinetMaxEnergy} onChange={e => set({ cabinetMaxEnergy: e.target.value })} placeholder="如40.96" /></div>
<div className="field"><span className="field-label">额定输出电压V</span><input className="input" value={draft.cabinetRatedVoltage} onChange={e => set({ cabinetRatedVoltage: e.target.value })} placeholder="如409.6/±204.8/460.8/512" /></div>
</div>
<div className="grid-2">
<div className="field"><span className="field-label">循环寿命</span><input className="input" value={draft.cycleLife} onChange={e => set({ cycleLife: e.target.value })} placeholder="如5000次@50%DOD" /></div>
<div className="field"><span className="field-label">通信接口</span><input className="input" value={draft.commInterface} onChange={e => set({ commInterface: e.target.value })} placeholder="如LAN/CAN/RS485/干接点" /></div>
</div>
<div className="field"><span className="field-label">保护功能</span><input className="input" value={draft.protectionFunctions} onChange={e => set({ protectionFunctions: e.target.value })} placeholder="如:过充、过放、过温、过流、短路等" /></div>
<div className="grid-2">
<div className="field"><span className="field-label">运行温度</span><input className="input" value={draft.operatingTemp} onChange={e => set({ operatingTemp: e.target.value })} placeholder="如0~40℃推荐20~25℃运行" /></div>
<div className="field"><span className="field-label">湿度</span><input className="input" value={draft.humidity} onChange={e => set({ humidity: e.target.value })} placeholder="如5%~95%(无凝露)" /></div>
</div>
<div className="grid-2">
<div className="field"><span className="field-label">颜色</span><input className="input" value={draft.color} onChange={e => set({ color: e.target.value })} placeholder="如RAL9004" /></div>
<div className="field"><span className="field-label">海拔m</span><input className="input" value={draft.altitude} onChange={e => set({ altitude: e.target.value })} placeholder="如≤4000>2000降额使用" /></div>
</div>
<div className="grid-2">
<div className="field"><span className="field-label">系统柜尺寸mm</span><input className="input" value={draft.cabinetDimensions} onChange={e => set({ cabinetDimensions: spaceToAsterisk(e.target.value) })} placeholder="如600×850×2000" /></div>
<div className="field"><span className="field-label">系统柜重量kg</span><input className="input" value={draft.cabinetWeight} onChange={e => set({ cabinetWeight: e.target.value })} placeholder="如544±108模组配置" /></div>
</div>
<div className="field"><span className="field-label">自放电率</span><input className="input" value={draft.selfDischargeRate} onChange={e => set({ selfDischargeRate: e.target.value })} placeholder="如:<5%环境温度030℃/30天" /></div>
</>
) : isUps && isRackLikeUps ? (
<> <>
<div className="grid-2"> <div className="grid-2">
<div className="field"><span className="field-label">相数</span><input className="input" value={draft.phase} onChange={e => set({ phase: e.target.value })} placeholder="如1-phase input/1-phase output" /></div> <div className="field"><span className="field-label">相数</span><input className="input" value={draft.phase} onChange={e => set({ phase: e.target.value })} placeholder="如1-phase input/1-phase output" /></div>