Update App.jsx via upload script - 2026-07-27 11:57:07

This commit is contained in:
mike 2026-07-27 11:57:33 +08:00
parent cc525ce1e9
commit 4fc706296a
1 changed files with 59 additions and 2 deletions

61
App.jsx
View File

@ -305,6 +305,15 @@ const TRANSLATION_DICTIONARY = {
'电池电压': { en: 'Battery Voltage', fr: 'Tension de batterie', ru: 'Напряжение батареи', es: 'Voltaje de batería', ar: 'جهد البطارية' },
'电池型号和数量': { en: 'Battery Model & Qty', fr: 'Modèle et quantité de batterie', ru: 'Модель и кол-во батарей', es: 'Modelo y cantidad de batería', ar: 'طراز وعدد البطاريات' },
'充电电流': { en: 'Charge Current', fr: 'Courant de charge', ru: 'Ток зарядки', es: 'Corriente de carga', ar: 'تيار الشحن' },
'频率范围(电池模式)': { en: 'Frequency Range (Battery Mode)', fr: 'Plage de fréquence (mode batterie)', ru: 'Диапазон частот (режим батареи)', es: 'Rango de frecuencia (modo batería)', ar: 'نطاق التردد (وضع البطارية)' },
'充电时间': { en: 'Charge Time', fr: 'Temps de charge', ru: 'Время зарядки', es: 'Tiempo de carga', ar: 'وقت الشحن' },
'LCD显示': { en: 'LCD Display', fr: 'Affichage LCD', ru: 'ЖК-дисплей', es: 'Pantalla LCD', ar: 'شاشة LCD' },
'LED显示': { en: 'LED Display', fr: 'Affichage LED', ru: 'Светодиодный индикатор', es: 'Indicador LED', ar: 'مؤشر LED' },
'全面保护': { en: 'Full Protection', fr: 'Protection complète', ru: 'Полная защита', es: 'Protección completa', ar: 'حماية شاملة' },
'警告提示': { en: 'Alarm', fr: 'Alarme', ru: 'Сигнализация', es: 'Alarma', ar: 'إنذار' },
'控制管理': { en: 'Interface', fr: 'Interface', ru: 'Интерфейс', es: 'Interfaz', ar: 'الواجهة' },
'湿度': { en: 'Humidity', fr: 'Humidité', ru: 'Влажность', es: 'Humedad', ar: 'الرطوبة' },
'噪音': { en: 'Noise Level', fr: 'Niveau sonore', ru: 'Уровень шума', es: 'Nivel de ruido', ar: 'مستوى الضوضاء' },
'电压': { en: 'Voltage', fr: 'Tension', ru: 'Напряжение', es: 'Voltaje', ar: 'الجهد' },
'视载功率': { en: 'Rated Power (VA)', fr: 'Puissance nominale (VA)', ru: 'Номинальная мощность (ВА)', es: 'Potencia nominal (VA)', ar: 'الطاقة الاسمية (فولت أمبير)' },
'功率因数': { en: 'Power Factor', fr: 'Facteur de puissance', ru: 'Коэффициент мощности', es: 'Factor de potencia', ar: 'معامل القدرة' },
@ -395,6 +404,15 @@ function productExportRows(p, categories) {
if (p.batteryVoltage) rows.push({ labelKey: '电池电压', value: p.batteryVoltage });
if (p.batterySpec) rows.push({ labelKey: '电池型号和数量', value: p.batterySpec });
if (p.chargeCurrent) rows.push({ labelKey: '充电电流', value: p.chargeCurrent });
if (p.frequencyRangeBatteryMode) rows.push({ labelKey: '频率范围(电池模式)', value: p.frequencyRangeBatteryMode });
if (p.chargeTime) rows.push({ labelKey: '充电时间', value: p.chargeTime });
if (p.lcdDisplay) rows.push({ labelKey: 'LCD显示', value: p.lcdDisplay });
if (p.ledDisplay) rows.push({ labelKey: 'LED显示', value: p.ledDisplay });
if (p.fullProtection) rows.push({ labelKey: '全面保护', value: p.fullProtection });
if (p.alarmInfo) rows.push({ labelKey: '警告提示', value: p.alarmInfo });
if (p.interfacePort) rows.push({ labelKey: '控制管理', value: p.interfacePort });
if (p.humidity) rows.push({ labelKey: '湿度', value: p.humidity });
if (p.noiseLevel) rows.push({ labelKey: '噪音', value: p.noiseLevel });
if (p.dimensions) rows.push({ labelKey: '尺寸(mm)', value: p.dimensions });
if (p.netWeight) rows.push({ labelKey: '净重(kg)', value: p.netWeight });
} else if (isUpsCategory(cat) && p.type !== '迷你UPS') {
@ -464,6 +482,15 @@ const blankProduct = () => ({
waveform: '', // () "Simulated Sine Wave" / "Sine Wave"
batteryVoltage: '', // "12V" / "24V"
chargeCurrent: '', // "1A"
frequencyRangeBatteryMode: '', // () "50/60Hz±1Hz"
chargeTime: '', // "890%"
lcdDisplay: '', // LCD "AC mode, Battery mode, Load level, Battery level, Input voltage, Output voltage, Overload and low battery"
ledDisplay: '', // LED "AC mode: Green / Battery mode: Yellow / Fault: Red"
fullProtection: '', // "Discharge, Short circuit and overload protection"
alarmInfo: '', // ///
interfacePort: '', // / "USB/RS232 port(optional), support windows xp/vista, 7/8/11 and MAC"
humidity: '', // 湿 "0-90% RH@0-40(Non-condensing)"
noiseLevel: '', // "Less than 40dB(1m spacing)"
batterySpec: '', // "12V4.5AH*1"UPS/线/线UPS
dimensions: '', // (mm)UPS/线/线UPS
netWeight: '', // (kg)UPS/线/线UPS
@ -499,6 +526,15 @@ function powerInfoItems(p, categories) {
if (p.batteryVoltage) items.push({ key: 'batteryvoltage', label: '电池电压', value: p.batteryVoltage });
if (p.batterySpec) items.push({ key: 'batteryspec', label: '电池型号和数量', value: p.batterySpec });
if (p.chargeCurrent) items.push({ key: 'chargecurrent', label: '充电电流', value: p.chargeCurrent });
if (p.frequencyRangeBatteryMode) items.push({ key: 'freqrange', label: '频率范围(电池模式)', value: p.frequencyRangeBatteryMode });
if (p.chargeTime) items.push({ key: 'chargetime', label: '充电时间', value: p.chargeTime });
if (p.lcdDisplay) items.push({ key: 'lcddisplay', label: 'LCD显示', value: p.lcdDisplay });
if (p.ledDisplay) items.push({ key: 'leddisplay', label: 'LED显示', value: p.ledDisplay });
if (p.fullProtection) items.push({ key: 'fullprotection', label: '全面保护', value: p.fullProtection });
if (p.alarmInfo) items.push({ key: 'alarminfo', label: '警告提示', value: p.alarmInfo });
if (p.interfacePort) items.push({ key: 'interfaceport', label: '控制管理', value: p.interfacePort });
if (p.humidity) items.push({ key: 'humidity', label: '湿度', value: p.humidity });
if (p.noiseLevel) items.push({ key: 'noiselevel', label: '噪音', value: p.noiseLevel });
if (p.dimensions) items.push({ key: 'dim', label: '尺寸(mm)', value: p.dimensions });
if (p.netWeight) items.push({ key: 'weight', label: '净重(kg)', value: p.netWeight });
return items;
@ -1903,6 +1939,10 @@ function MainApp({ username, onLogout }) {
outputVoltage: p.outputVoltage || '', outputVoltageRange: p.outputVoltageRange || '',
transferTime: p.transferTime || '', waveform: p.waveform || '',
batteryVoltage: p.batteryVoltage || '', chargeCurrent: p.chargeCurrent || '',
frequencyRangeBatteryMode: p.frequencyRangeBatteryMode || '', chargeTime: p.chargeTime || '',
lcdDisplay: p.lcdDisplay || '', ledDisplay: p.ledDisplay || '', fullProtection: p.fullProtection || '',
alarmInfo: p.alarmInfo || '', interfacePort: p.interfacePort || '',
humidity: p.humidity || '', noiseLevel: p.noiseLevel || '',
batterySpec: p.batterySpec || '', dimensions: p.dimensions || '', netWeight: p.netWeight || '', notes: p.notes || '',
}));
setAiImportDrafts(drafts);
@ -1949,6 +1989,10 @@ function MainApp({ username, onLogout }) {
outputVoltage: d.outputVoltage || '', outputVoltageRange: d.outputVoltageRange || '',
transferTime: d.transferTime || '', waveform: d.waveform || '',
batteryVoltage: d.batteryVoltage || '', chargeCurrent: d.chargeCurrent || '',
frequencyRangeBatteryMode: d.frequencyRangeBatteryMode || '', chargeTime: d.chargeTime || '',
lcdDisplay: d.lcdDisplay || '', ledDisplay: d.ledDisplay || '', fullProtection: d.fullProtection || '',
alarmInfo: d.alarmInfo || '', interfacePort: d.interfacePort || '',
humidity: d.humidity || '', noiseLevel: d.noiseLevel || '',
batterySpec: d.batterySpec || '', dimensions: d.dimensions || '', netWeight: d.netWeight || '', notes: d.notes || '',
};
}
@ -3686,15 +3730,28 @@ function ProductForm({ draft, setDraft, onSave, onCancel, categories, onManage,
<div className="field"><span className="field-label">转换时间</span><input className="input" value={draft.transferTime} onChange={e => set({ transferTime: e.target.value })} placeholder="如Typical 2-8ms, 13ms max" /></div>
<div className="field"><span className="field-label">波形电池模式</span><input className="input" value={draft.waveform} onChange={e => set({ waveform: e.target.value })} placeholder="如Simulated Sine Wave" /></div>
</div>
<div className="field"><span className="field-label">频率范围电池模式</span><input className="input" value={draft.frequencyRangeBatteryMode} onChange={e => set({ frequencyRangeBatteryMode: e.target.value })} placeholder="如50/60Hz±1Hz" /></div>
<div className="grid-2">
<div className="field"><span className="field-label">电池电压</span><input className="input" value={draft.batteryVoltage} onChange={e => set({ batteryVoltage: e.target.value })} placeholder="如12V / 24V" /></div>
<div className="field"><span className="field-label">充电电流</span><input className="input" value={draft.chargeCurrent} onChange={e => set({ chargeCurrent: e.target.value })} placeholder="如1A" /></div>
</div>
<div className="grid-2">
<div className="field"><span className="field-label">电池型号和数量</span><input className="input" value={draft.batterySpec} onChange={e => set({ batterySpec: spaceToAsterisk(e.target.value) })} placeholder="如12V4.5AH*1" /></div>
<div className="field"><span className="field-label">尺寸mm</span><input className="input" value={draft.dimensions} onChange={e => set({ dimensions: spaceToAsterisk(e.target.value) })} placeholder="如315*100*143" /></div>
<div className="field"><span className="field-label">充电时间</span><input className="input" value={draft.chargeTime} onChange={e => set({ chargeTime: e.target.value })} placeholder="如8小时恢复到90%容量" /></div>
</div>
<div className="grid-2">
<div className="field"><span className="field-label">尺寸mm</span><input className="input" value={draft.dimensions} onChange={e => set({ dimensions: spaceToAsterisk(e.target.value) })} placeholder="如315*100*143" /></div>
<div className="field"><span className="field-label">净重kg</span><input className="input" value={draft.netWeight} onChange={e => set({ netWeight: e.target.value })} placeholder="如4" /></div>
</div>
<div className="field"><span className="field-label">LCD显示LCD屏能显示哪些信息</span><input className="input" value={draft.lcdDisplay} onChange={e => set({ lcdDisplay: e.target.value })} placeholder="如AC mode, Battery mode, Load level, Input/Output voltage" /></div>
<div className="field"><span className="field-label">LED显示各指示灯含义</span><textarea className="textarea" style={{ fontFamily: 'inherit', fontSize: 13 }} rows={3} value={draft.ledDisplay} onChange={e => set({ ledDisplay: e.target.value })} placeholder={'如:\nAC modeGreen lighting\nBattery modeYellow lighting\nFaultRed lighting'} /></div>
<div className="field"><span className="field-label">全面保护</span><input className="input" value={draft.fullProtection} onChange={e => set({ fullProtection: e.target.value })} placeholder="如Discharge, Short circuit and overload protection" /></div>
<div className="field"><span className="field-label">警告提示各种蜂鸣报警的规律</span><textarea className="textarea" style={{ fontFamily: 'inherit', fontSize: 13 }} rows={4} value={draft.alarmInfo} onChange={e => set({ alarmInfo: e.target.value })} placeholder={'如:\nBattery modeSounding every 10 seconds\nLow batterySounding every second\nOverloadSounding every 0.5 seconds\nFaultContinuously sounding'} /></div>
<div className="field"><span className="field-label">控制管理 / 接口</span><input className="input" value={draft.interfacePort} onChange={e => set({ interfacePort: e.target.value })} placeholder="如USB/RS232 port(optional), support windows xp/vista, 7/8/11 and MAC" /></div>
<div className="grid-2">
<div className="field"><span className="field-label">湿度</span><input className="input" value={draft.humidity} onChange={e => set({ humidity: e.target.value })} placeholder="如0-90% RH@0-40℃(Non-condensing)" /></div>
<div className="field"><span className="field-label">噪音</span><input className="input" value={draft.noiseLevel} onChange={e => set({ noiseLevel: e.target.value })} placeholder="如Less than 40dB(1m spacing)" /></div>
</div>
<div className="field"><span className="field-label">净重kg</span><input className="input" value={draft.netWeight} onChange={e => set({ netWeight: e.target.value })} placeholder="如4" /></div>
</>
) : isUps && !isMiniUps ? (
<div className="grid-2">