Update App.jsx via upload script - 2026-07-28 20:30:09
This commit is contained in:
parent
4cb82025f9
commit
d0b9aa32cb
146
App.jsx
146
App.jsx
|
|
@ -314,6 +314,15 @@ const TRANSLATION_DICTIONARY = {
|
|||
'控制管理': { 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: 'Phase', fr: 'Phase', ru: 'Фаза', es: 'Fase', ar: 'الطور' },
|
||||
'输入功率因数': { en: 'Input Power Factor', fr: "Facteur de puissance d'entrée", ru: 'Входной коэффициент мощности', es: 'Factor de potencia de entrada', ar: 'معامل قدرة الدخل' },
|
||||
'转换时间(市电到电池)': { en: 'Transfer Time (AC to Battery)', fr: 'Temps de transfert (secteur vers batterie)', ru: 'Время переключения (сеть на батарею)', es: 'Tiempo de transferencia (red a batería)', ar: 'وقت التحويل (من الشبكة إلى البطارية)' },
|
||||
'峰值电流比': { en: 'Current Crest Ratio', fr: 'Facteur de crête de courant', ru: 'Пик-фактор тока', es: 'Relación de cresta de corriente', ar: 'نسبة ذروة التيار' },
|
||||
'谐波失真': { en: 'Harmonic Distortion', fr: 'Distorsion harmonique', ru: 'Гармонические искажения', es: 'Distorsión armónica', ar: 'التشويه التوافقي' },
|
||||
'效率(市电模式)': { en: 'Efficiency (AC Mode)', fr: 'Rendement (mode secteur)', ru: 'КПД (сетевой режим)', es: 'Eficiencia (modo red)', ar: 'الكفاءة (وضع الشبكة)' },
|
||||
'效率(电池模式)': { en: 'Efficiency (Battery Mode)', fr: 'Rendement (mode batterie)', ru: 'КПД (режим батареи)', es: 'Eficiencia (modo batería)', ar: 'الكفاءة (وضع البطارية)' },
|
||||
'充电电压': { en: 'Charging Voltage', fr: 'Tension de charge', ru: 'Напряжение зарядки', es: 'Voltaje de carga', ar: 'جهد الشحن' },
|
||||
'可选SNMP': { en: 'Optional SNMP', fr: 'SNMP en option', ru: 'SNMP (опционально)', es: 'SNMP opcional', ar: 'SNMP اختياري' },
|
||||
'电压': { 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: 'معامل القدرة' },
|
||||
|
|
@ -415,6 +424,35 @@ function productExportRows(p, categories) {
|
|||
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') {
|
||||
if (p.phase) rows.push({ labelKey: '相数', value: p.phase });
|
||||
if (p.powerOrCapacity) rows.push({ labelKey: '容量', value: p.powerOrCapacity });
|
||||
if (p.inputVoltage) rows.push({ labelKey: '输入电压', value: p.inputVoltage });
|
||||
if (p.inputVoltageRange) rows.push({ labelKey: '输入电压范围', value: p.inputVoltageRange });
|
||||
if (p.inputFrequency) rows.push({ labelKey: '输入频率', value: p.inputFrequency });
|
||||
if (p.inputPowerFactor) rows.push({ labelKey: '输入功率因数', value: p.inputPowerFactor });
|
||||
if (p.outputVoltage) rows.push({ labelKey: '输出电压', value: p.outputVoltage });
|
||||
if (p.outputVoltageRange) rows.push({ labelKey: '输出电压范围', value: p.outputVoltageRange });
|
||||
if (p.frequencyRangeBatteryMode) rows.push({ labelKey: '频率范围(电池模式)', value: p.frequencyRangeBatteryMode });
|
||||
if (p.currentCrestRatio) rows.push({ labelKey: '峰值电流比', value: p.currentCrestRatio });
|
||||
if (p.harmonicDistortion) rows.push({ labelKey: '谐波失真', value: p.harmonicDistortion });
|
||||
if (p.transferTimeAcToBattery) rows.push({ labelKey: '转换时间(市电到电池)', value: p.transferTimeAcToBattery });
|
||||
if (p.transferTime) rows.push({ labelKey: '转换时间', value: p.transferTime });
|
||||
if (p.waveform) rows.push({ labelKey: '波形', value: p.waveform });
|
||||
if (p.efficiencyAcMode) rows.push({ labelKey: '效率(市电模式)', value: p.efficiencyAcMode });
|
||||
if (p.efficiencyBatteryMode) rows.push({ labelKey: '效率(电池模式)', value: p.efficiencyBatteryMode });
|
||||
if (p.batterySpec) rows.push({ labelKey: '电池型号和数量', value: p.batterySpec });
|
||||
if (p.chargeCurrent) rows.push({ labelKey: '充电电流', value: p.chargeCurrent });
|
||||
if (p.chargeTime) rows.push({ labelKey: '充电时间', value: p.chargeTime });
|
||||
if (p.chargingVoltage) rows.push({ labelKey: '充电电压', value: p.chargingVoltage });
|
||||
if (p.lcdDisplay) rows.push({ labelKey: 'LCD显示', value: p.lcdDisplay });
|
||||
if (p.alarmInfo) rows.push({ labelKey: '警告提示', value: p.alarmInfo });
|
||||
if (p.dimensions) rows.push({ labelKey: '尺寸(mm)', value: p.dimensions });
|
||||
if (p.netWeight) rows.push({ labelKey: '净重(kg)', value: p.netWeight });
|
||||
if (p.humidity) rows.push({ labelKey: '湿度', value: p.humidity });
|
||||
if (p.noiseLevel) rows.push({ labelKey: '噪音', value: p.noiseLevel });
|
||||
if (p.interfacePort) rows.push({ labelKey: '控制管理', value: p.interfacePort });
|
||||
if (p.optionalSnmp) rows.push({ labelKey: '可选SNMP', value: p.optionalSnmp });
|
||||
} else if (isUpsCategory(cat) && p.type !== '迷你UPS') {
|
||||
const maxKW = computeMaxPowerKW(p.ratedPower, p.ratedPowerUnit, p.powerFactor);
|
||||
if (p.ratedPower) rows.push({ labelKey: '视载功率', value: `${p.ratedPower} ${p.ratedPowerUnit || 'VA'}` });
|
||||
|
|
@ -522,6 +560,16 @@ const blankProduct = () => ({
|
|||
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)"
|
||||
// 机架式UPS(真双变换在线式)专属字段
|
||||
phase: '', // 相数,如 "1-phase input/1-phase output"
|
||||
inputPowerFactor: '', // 输入功率因数,如 "≥0.99@100% load"
|
||||
transferTimeAcToBattery: '', // 转换时间(市电到电池),如 "0ms"
|
||||
currentCrestRatio: '', // 峰值电流比,如 "3:1"
|
||||
harmonicDistortion: '', // 谐波失真,如 "≤3% THD (Linear Load), ≤5% THD (Non-linear Load)"
|
||||
efficiencyAcMode: '', // 效率(市电模式),如 "88%"
|
||||
efficiencyBatteryMode: '', // 效率(电池模式),如 "83%"
|
||||
chargingVoltage: '', // 充电电压,如 "27.4VDC±1%"
|
||||
optionalSnmp: '', // 可选SNMP,如 "Power management from SNMP manager and web browser"
|
||||
batterySpec: '', // 电池型号和数量,如 "12V4.5AH*1"(迷你UPS/离线式/在线互动式UPS共用)
|
||||
dimensions: '', // 尺寸(mm)(迷你UPS/离线式/在线互动式UPS共用)
|
||||
netWeight: '', // 净重(kg)(迷你UPS/离线式/在线互动式UPS共用)
|
||||
|
|
@ -570,6 +618,38 @@ function powerInfoItems(p, categories) {
|
|||
if (p.netWeight) items.push({ key: 'weight', label: '净重(kg)', value: p.netWeight });
|
||||
return items;
|
||||
}
|
||||
if (isUpsCategory(cat) && p.type === '机架式UPS') {
|
||||
const items = [];
|
||||
if (p.phase) items.push({ key: 'phase', label: '相数', value: p.phase });
|
||||
if (p.powerOrCapacity) items.push({ key: 'capacity', label: '容量', value: p.powerOrCapacity });
|
||||
if (p.inputVoltage) items.push({ key: 'inputvoltage', label: '输入电压', value: p.inputVoltage });
|
||||
if (p.inputVoltageRange) items.push({ key: 'inputvoltagerange', label: '输入电压范围', value: p.inputVoltageRange });
|
||||
if (p.inputFrequency) items.push({ key: 'inputfreq', label: '输入频率', value: p.inputFrequency });
|
||||
if (p.inputPowerFactor) items.push({ key: 'inputpf', label: '输入功率因数', value: p.inputPowerFactor });
|
||||
if (p.outputVoltage) items.push({ key: 'outputvoltage', label: '输出电压', value: p.outputVoltage });
|
||||
if (p.outputVoltageRange) items.push({ key: 'outputvoltagerange', label: '输出电压范围', value: p.outputVoltageRange });
|
||||
if (p.frequencyRangeBatteryMode) items.push({ key: 'freqrange', label: '频率范围(电池模式)', value: p.frequencyRangeBatteryMode });
|
||||
if (p.currentCrestRatio) items.push({ key: 'crestratio', label: '峰值电流比', value: p.currentCrestRatio });
|
||||
if (p.harmonicDistortion) items.push({ key: 'thd', label: '谐波失真', value: p.harmonicDistortion });
|
||||
if (p.transferTimeAcToBattery) items.push({ key: 'transferacbat', label: '转换时间(市电到电池)', value: p.transferTimeAcToBattery });
|
||||
if (p.transferTime) items.push({ key: 'transfertime', label: '转换时间', value: p.transferTime });
|
||||
if (p.waveform) items.push({ key: 'waveform', label: '波形', value: p.waveform });
|
||||
if (p.efficiencyAcMode) items.push({ key: 'effac', label: '效率(市电模式)', value: p.efficiencyAcMode });
|
||||
if (p.efficiencyBatteryMode) items.push({ key: 'effbat', label: '效率(电池模式)', value: p.efficiencyBatteryMode });
|
||||
if (p.batterySpec) items.push({ key: 'batteryspec', label: '电池型号和数量', value: p.batterySpec });
|
||||
if (p.chargeCurrent) items.push({ key: 'chargecurrent', label: '充电电流', value: p.chargeCurrent });
|
||||
if (p.chargeTime) items.push({ key: 'chargetime', label: '充电时间', value: p.chargeTime });
|
||||
if (p.chargingVoltage) items.push({ key: 'chargingvoltage', label: '充电电压', value: p.chargingVoltage });
|
||||
if (p.lcdDisplay) items.push({ key: 'lcddisplay', label: 'LCD显示', value: p.lcdDisplay });
|
||||
if (p.alarmInfo) items.push({ key: 'alarminfo', label: '警告提示', value: p.alarmInfo });
|
||||
if (p.dimensions) items.push({ key: 'dim', label: '尺寸(mm)', value: p.dimensions });
|
||||
if (p.netWeight) items.push({ key: 'weight', label: '净重(kg)', value: p.netWeight });
|
||||
if (p.humidity) items.push({ key: 'humidity', label: '湿度', value: p.humidity });
|
||||
if (p.noiseLevel) items.push({ key: 'noiselevel', label: '噪音', value: p.noiseLevel });
|
||||
if (p.interfacePort) items.push({ key: 'interfaceport', label: '控制管理', value: p.interfacePort });
|
||||
if (p.optionalSnmp) items.push({ key: 'snmp', label: '可选SNMP', value: p.optionalSnmp });
|
||||
return items;
|
||||
}
|
||||
if (isUpsCategory(cat) && p.type !== '迷你UPS') {
|
||||
const maxKW = computeMaxPowerKW(p.ratedPower, p.ratedPowerUnit, p.powerFactor);
|
||||
return [
|
||||
|
|
@ -1987,6 +2067,11 @@ function MainApp({ username, onLogout }) {
|
|||
lcdDisplay: p.lcdDisplay || '', ledDisplay: p.ledDisplay || '', fullProtection: p.fullProtection || '',
|
||||
alarmInfo: p.alarmInfo || '', interfacePort: p.interfacePort || '',
|
||||
humidity: p.humidity || '', noiseLevel: p.noiseLevel || '',
|
||||
phase: p.phase || '', inputPowerFactor: p.inputPowerFactor || '',
|
||||
transferTimeAcToBattery: p.transferTimeAcToBattery || '', currentCrestRatio: p.currentCrestRatio || '',
|
||||
harmonicDistortion: p.harmonicDistortion || '', efficiencyAcMode: p.efficiencyAcMode || '',
|
||||
efficiencyBatteryMode: p.efficiencyBatteryMode || '', chargingVoltage: p.chargingVoltage || '',
|
||||
optionalSnmp: p.optionalSnmp || '',
|
||||
batterySpec: p.batterySpec || '', dimensions: p.dimensions || '', netWeight: p.netWeight || '', notes: p.notes || '',
|
||||
}));
|
||||
setAiImportDrafts(drafts);
|
||||
|
|
@ -2037,6 +2122,11 @@ function MainApp({ username, onLogout }) {
|
|||
lcdDisplay: d.lcdDisplay || '', ledDisplay: d.ledDisplay || '', fullProtection: d.fullProtection || '',
|
||||
alarmInfo: d.alarmInfo || '', interfacePort: d.interfacePort || '',
|
||||
humidity: d.humidity || '', noiseLevel: d.noiseLevel || '',
|
||||
phase: d.phase || '', inputPowerFactor: d.inputPowerFactor || '',
|
||||
transferTimeAcToBattery: d.transferTimeAcToBattery || '', currentCrestRatio: d.currentCrestRatio || '',
|
||||
harmonicDistortion: d.harmonicDistortion || '', efficiencyAcMode: d.efficiencyAcMode || '',
|
||||
efficiencyBatteryMode: d.efficiencyBatteryMode || '', chargingVoltage: d.chargingVoltage || '',
|
||||
optionalSnmp: d.optionalSnmp || '',
|
||||
batterySpec: d.batterySpec || '', dimensions: d.dimensions || '', netWeight: d.netWeight || '', notes: d.notes || '',
|
||||
};
|
||||
}
|
||||
|
|
@ -3622,6 +3712,7 @@ function ProductForm({ draft, setDraft, onSave, onCancel, categories, onManage,
|
|||
const isUps = isUpsCategory(cat);
|
||||
const isMiniUps = isUps && draft.type === '迷你UPS';
|
||||
const isOfflineOrLI = isUps && (draft.type === '离线式UPS' || draft.type === '在线互动式UPS');
|
||||
const isRackUps = isUps && draft.type === '机架式UPS';
|
||||
const maxKW = computeMaxPowerKW(draft.ratedPower, draft.ratedPowerUnit, draft.powerFactor);
|
||||
const extraNames = draft.extraNames || [];
|
||||
const [imageUploading, setImageUploading] = useState(false);
|
||||
|
|
@ -3768,7 +3859,60 @@ function ProductForm({ draft, setDraft, onSave, onCancel, categories, onManage,
|
|||
</div>
|
||||
)}
|
||||
|
||||
{isUps && isOfflineOrLI ? (
|
||||
{isUps && isRackUps ? (
|
||||
<>
|
||||
<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.powerOrCapacity} onChange={e => set({ powerOrCapacity: e.target.value })} placeholder="如:1000VA/800W" /></div>
|
||||
</div>
|
||||
<div className="grid-2">
|
||||
<div className="field"><span className="field-label">输入电压(标称电压)</span><input className="input" value={draft.inputVoltage} onChange={e => set({ inputVoltage: e.target.value })} placeholder="如:100/110/115/120/127VAC or 200/208/220/230/240VAC" /></div>
|
||||
<div className="field"><span className="field-label">输入电压范围</span><input className="input" value={draft.inputVoltageRange} onChange={e => set({ inputVoltageRange: e.target.value })} placeholder="如:85-140VAC or 160-280VAC at100%load" /></div>
|
||||
</div>
|
||||
<div className="grid-2">
|
||||
<div className="field"><span className="field-label">输入频率范围</span><input className="input" value={draft.inputFrequency} onChange={e => set({ inputFrequency: e.target.value })} placeholder="如:40Hz~70Hz" /></div>
|
||||
<div className="field"><span className="field-label">输入功率因数</span><input className="input" value={draft.inputPowerFactor} onChange={e => set({ inputPowerFactor: e.target.value })} placeholder="如:≥0.99@100% load" /></div>
|
||||
</div>
|
||||
<div className="grid-2">
|
||||
<div className="field"><span className="field-label">输出电压</span><input className="input" value={draft.outputVoltage} onChange={e => set({ outputVoltage: e.target.value })} placeholder="如:100/110/115/120/127VAC or 200/208/220/230/240VAC" /></div>
|
||||
<div className="field"><span className="field-label">输出电压范围(电压调整率)</span><input className="input" value={draft.outputVoltageRange} onChange={e => set({ outputVoltageRange: e.target.value })} placeholder="如:±1%" /></div>
|
||||
</div>
|
||||
<div className="grid-2">
|
||||
<div className="field"><span className="field-label">频率范围(电池模式)</span><input className="input" value={draft.frequencyRangeBatteryMode} onChange={e => set({ frequencyRangeBatteryMode: e.target.value })} placeholder="如:50Hz±0.25Hz or 60Hz±0.3Hz" /></div>
|
||||
<div className="field"><span className="field-label">峰值电流比</span><input className="input" value={draft.currentCrestRatio} onChange={e => set({ currentCrestRatio: e.target.value })} placeholder="如:3:1" /></div>
|
||||
</div>
|
||||
<div className="field"><span className="field-label">谐波失真</span><input className="input" value={draft.harmonicDistortion} onChange={e => set({ harmonicDistortion: e.target.value })} placeholder="如:≤3% THD (Linear Load), ≤5% THD (Non-linear Load)" /></div>
|
||||
<div className="grid-2">
|
||||
<div className="field"><span className="field-label">转换时间(市电到电池)</span><input className="input" value={draft.transferTimeAcToBattery} onChange={e => set({ transferTimeAcToBattery: e.target.value })} placeholder="如:0ms" /></div>
|
||||
<div className="field"><span className="field-label">转换时间(逆变到旁路)</span><input className="input" value={draft.transferTime} onChange={e => set({ transferTime: e.target.value })} placeholder="如:4ms (Typical)" /></div>
|
||||
</div>
|
||||
<div className="grid-2">
|
||||
<div className="field"><span className="field-label">波形(电池模式)</span><input className="input" value={draft.waveform} onChange={e => set({ waveform: e.target.value })} placeholder="如:pure sine wave" /></div>
|
||||
<div className="field"><span className="field-label">效率(市电模式)</span><input className="input" value={draft.efficiencyAcMode} onChange={e => set({ efficiencyAcMode: e.target.value })} placeholder="如:88%" /></div>
|
||||
</div>
|
||||
<div className="grid-2">
|
||||
<div className="field"><span className="field-label">效率(电池模式)</span><input className="input" value={draft.efficiencyBatteryMode} onChange={e => set({ efficiencyBatteryMode: e.target.value })} placeholder="如:83%" /></div>
|
||||
<div className="field"><span className="field-label">充电电流</span><input className="input" value={draft.chargeCurrent} onChange={e => set({ chargeCurrent: e.target.value })} placeholder="如:1.0A" /></div>
|
||||
</div>
|
||||
<div className="grid-2">
|
||||
<div className="field"><span className="field-label">充电电压</span><input className="input" value={draft.chargingVoltage} onChange={e => set({ chargingVoltage: e.target.value })} placeholder="如:27.4VDC±1%" /></div>
|
||||
<div className="field"><span className="field-label">充电时间</span><input className="input" value={draft.chargeTime} onChange={e => set({ chargeTime: e.target.value })} placeholder="如:4 hours recover to 90% capacity" /></div>
|
||||
</div>
|
||||
<div className="field"><span className="field-label">电池型号和数量</span><input className="input" value={draft.batterySpec} onChange={e => set({ batterySpec: spaceToAsterisk(e.target.value) })} placeholder="如:12V/9AH x2" /></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="如:310*438*88[2U]" /></div>
|
||||
<div className="field"><span className="field-label">净重(kg)</span><input className="input" value={draft.netWeight} onChange={e => set({ netWeight: e.target.value })} placeholder="如:12" /></div>
|
||||
</div>
|
||||
<div className="field"><span className="field-label">LCD显示(能显示哪些信息)</span><input className="input" value={draft.lcdDisplay} onChange={e => set({ lcdDisplay: e.target.value })} placeholder="如:UPS status, Load level, Battery level, Input/Output voltage" /></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 mode:Sounding every 4 seconds\nLow battery:Sounding every second\nOverload:Sounding twice every second\nFault:Continuously sounding'} /></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="如:20-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 50dB@1m" /></div>
|
||||
</div>
|
||||
<div className="field"><span className="field-label">控制管理 / 接口</span><input className="input" value={draft.interfacePort} onChange={e => set({ interfacePort: e.target.value })} placeholder="如:Smart RS-232/USB, supports Windows 2000/2003/XP/Vista/2008, 7/8, Linux, Unix, MAC" /></div>
|
||||
<div className="field"><span className="field-label">可选SNMP</span><input className="input" value={draft.optionalSnmp} onChange={e => set({ optionalSnmp: e.target.value })} placeholder="如:Power management from SNMP manager and web browser" /></div>
|
||||
</>
|
||||
) : isUps && isOfflineOrLI ? (
|
||||
<>
|
||||
<div className="grid-2">
|
||||
<div className="field"><span className="field-label">容量</span><input className="input" value={draft.powerOrCapacity} onChange={e => set({ powerOrCapacity: e.target.value })} placeholder="如:400VA/240W" /></div>
|
||||
|
|
|
|||
Loading…
Reference in New Issue