Files
ONE-OS/web端/运维管理/基本数据维护/型号参数-编辑.jsx

353 lines
18 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// 【重要】必须使用 const Component 作为组件变量名
// 基本数据维护 - 型号参数-编辑(布局与型号参数-新增一致,全部可修改,预填当前记录)
const Component = function () {
var useState = React.useState;
var antd = window.antd;
var Breadcrumb = antd.Breadcrumb;
var Card = antd.Card;
var Input = antd.Input;
var Select = antd.Select;
var Button = antd.Button;
var Radio = antd.Radio;
var Table = antd.Table;
var message = antd.message;
// 初始数据(编辑时带入,与查看页一致;实际可从路由/接口获取)
var initialData = {
brand: '苏龙',
model: '海格牌KLQ5180XYKFCEV',
announcementModel: 'KLQ5180XYKFCEV',
vehicleType: '18吨双飞翼货车',
fuelType: '氢',
plateColor: '绿牌',
sizeLength: '5995',
sizeWidth: '2145',
sizeHeight: '3130',
tireCount: '8',
tireSpec: '15/80R22.5',
batteryType: '磷酸铁锂',
batteryVendor: '某某电池企业',
capacityKwh: '100000',
electricRange: '200',
cylinderCapacity: '140',
gaugeMode: 'MPa',
hydrogenRange: '1000',
hydrogenVendor: '某某供氢系统科技有限公司',
coldMachineVendor: '某某冷机企业',
stackVendor: '某某电堆企业',
maintenanceList: [
{ key: '1', item: '变速器油', kmCycle: '60000', monthCycle: '24', laborCost: '0', materialCost: '571', total: '571.00' },
{ key: '2', item: '机油', kmCycle: '50000', monthCycle: '12', laborCost: '100', materialCost: '300', total: '400.00' }
]
};
// 品牌选项(与型号参数-新增一致)
var brandOptions = [
{ value: '苏龙', label: '苏龙' },
{ value: '东风', label: '东风' },
{ value: '福田', label: '福田' },
{ value: '江淮', label: '江淮' },
{ value: '重汽', label: '重汽' },
{ value: '陕汽', label: '陕汽' }
];
// 车辆类型选项需包含初始值18吨双飞翼货车
var vehicleTypeOptions = [
{ value: '18吨双飞翼货车', label: '18吨双飞翼货车' },
{ value: '轻型厢式货车', label: '轻型厢式货车' },
{ value: '重型厢式货车', label: '重型厢式货车' },
{ value: '重型半挂牵引车', label: '重型半挂牵引车' },
{ value: '重型集装箱半挂车', label: '重型集装箱半挂车' },
{ value: '小型普通客车', label: '小型普通客车' },
{ value: '重型平板半挂车', label: '重型平板半挂车' },
{ value: '叉车', label: '叉车' },
{ value: '油车', label: '油车' },
{ value: '观光车', label: '观光车' }
];
var fuelTypeOptions = [
{ value: '氢', label: '氢' },
{ value: '电', label: '电' },
{ value: '油', label: '油' }
];
var gaugeModeOptions = [
{ value: 'MPa', label: 'MPa' },
{ value: 'bar', label: 'bar' }
];
// 基本情况
var brand = useState(initialData.brand);
var model = useState(initialData.model);
var announcementModel = useState(initialData.announcementModel || '');
var vehicleType = useState(initialData.vehicleType);
var fuelType = useState(initialData.fuelType);
var plateColor = useState(initialData.plateColor);
var sizeLength = useState(initialData.sizeLength);
var sizeWidth = useState(initialData.sizeWidth);
var sizeHeight = useState(initialData.sizeHeight);
// 轮胎情况
var tireCount = useState(initialData.tireCount);
var tireSpec = useState(initialData.tireSpec);
// 电气情况
var batteryType = useState(initialData.batteryType);
var batteryVendor = useState(initialData.batteryVendor);
var capacityKwh = useState(initialData.capacityKwh);
var electricRange = useState(initialData.electricRange);
// 供氢系统情况
var cylinderCapacity = useState(initialData.cylinderCapacity);
var gaugeMode = useState(initialData.gaugeMode);
var hydrogenRange = useState(initialData.hydrogenRange);
var hydrogenVendor = useState(initialData.hydrogenVendor);
// 其他系统情况
var coldMachineVendor = useState(initialData.coldMachineVendor);
var stackVendor = useState(initialData.stackVendor);
// 保养项列表
var maintenanceList = useState(initialData.maintenanceList.slice());
var formErrors = useState({});
function calcTotal(labor, material) {
var l = parseFloat(labor);
var m = parseFloat(material);
if (isNaN(l)) l = 0;
if (isNaN(m)) m = 0;
return (l + m).toFixed(2);
}
function updateMaintenance(index, field, value) {
maintenanceList[1](function (prev) {
var list = prev.slice();
var row = Object.assign({}, list[index] || {});
row[field] = value;
if (field === 'laborCost' || field === 'materialCost') {
row.total = calcTotal(row.laborCost, row.materialCost);
}
list[index] = row;
return list;
});
}
function addMaintenanceRow() {
maintenanceList[1](function (prev) {
var key = String((prev.length + 1) + Date.now());
return prev.concat([{ key: key, item: '', kmCycle: '', monthCycle: '', laborCost: '', materialCost: '', total: '' }]);
});
}
function removeMaintenanceRow(index) {
maintenanceList[1](function (prev) {
var list = prev.slice();
list.splice(index, 1);
if (list.length === 0) list = [{ key: '1', item: '', kmCycle: '', monthCycle: '', laborCost: '', materialCost: '', total: '' }];
return list;
});
}
function validate() {
var err = {};
if (brand[0] == null || brand[0] === '') err.brand = '请选择品牌';
if (!String(model[0] || '').trim()) err.model = '请输入型号名称';
if (!String(announcementModel[0] || '').trim()) err.announcementModel = '请输入公告型号';
if (vehicleType[0] == null || vehicleType[0] === '') err.vehicleType = '请选择车辆类型';
formErrors[1](err);
return Object.keys(err).length === 0;
}
function handleSave() {
if (!validate()) {
message.warning('请完善必填项');
return;
}
message.success('保存成功(原型)');
}
function handleCancel() {
if (window.history && window.history.back) window.history.back();
else message.info('取消');
}
var layoutStyle = { padding: '16px 24px 80px', backgroundColor: '#f5f5f5', minHeight: '100vh' };
var cardStyle = { marginBottom: 16 };
var formRowStyle = { display: 'flex', flexWrap: 'wrap', marginBottom: 16 };
var formColStyle = { flex: '0 0 33.33%', minWidth: 200, paddingRight: 16, marginBottom: 8, boxSizing: 'border-box' };
var formColFullStyle = { flex: '0 0 100%', marginBottom: 8 };
var labelStyle = { display: 'block', marginBottom: 6, color: 'rgba(0,0,0,0.85)' };
var labelRequiredStyle = { color: '#ff4d4f', marginRight: 4 };
var errMsgStyle = { color: '#ff4d4f', fontSize: 12, marginTop: 4 };
var inputStyle = { width: '100%' };
var footerStyle = { position: 'fixed', bottom: 0, left: 0, right: 0, padding: '12px 24px', backgroundColor: '#fff', borderTop: '1px solid #e8e8e8', display: 'flex', gap: 12, zIndex: 99 };
var cardTitleBarStyle = { display: 'flex', alignItems: 'center', justifyContent: 'flex-start', width: '100%', fontSize: 15, fontWeight: 500, lineHeight: 1.5 };
var cardTitleBarLineStyle = { width: 4, height: 16, backgroundColor: '#1890ff', borderRadius: 2, marginRight: 8, flexShrink: 0 };
function FormItem(props) {
var colStyle = props.fullWidth ? formColFullStyle : formColStyle;
return React.createElement('div', { style: colStyle },
React.createElement('label', { style: labelStyle },
props.required ? React.createElement('span', { style: labelRequiredStyle }, '*') : null,
props.label
),
props.children,
props.error ? React.createElement('div', { style: errMsgStyle }, props.error) : null
);
}
function CardTitleWithBar(title) {
return React.createElement('div', { style: cardTitleBarStyle },
React.createElement('span', { style: cardTitleBarLineStyle }),
React.createElement('span', null, title)
);
}
var maintenanceColumns = [
{ title: '养护项目', dataIndex: 'item', key: 'item', width: 160, render: function (v, record, i) { return React.createElement(Input, { placeholder: '请输入', value: v, onChange: function (e) { updateMaintenance(i, 'item', e.target.value); }, size: 'small' }); } },
{ title: '保养公里周期(KM)', dataIndex: 'kmCycle', key: 'kmCycle', width: 140, render: function (v, record, i) { return React.createElement(Input, { placeholder: '请输入', value: v, onChange: function (e) { updateMaintenance(i, 'kmCycle', e.target.value); }, size: 'small' }); } },
{ title: '保养时间周期(月)', dataIndex: 'monthCycle', key: 'monthCycle', width: 140, render: function (v, record, i) { return React.createElement(Input, { placeholder: '请输入', value: v, onChange: function (e) { updateMaintenance(i, 'monthCycle', e.target.value); }, size: 'small' }); } },
{ title: '工时费(元)', dataIndex: 'laborCost', key: 'laborCost', width: 120, render: function (v, record, i) { return React.createElement(Input, { placeholder: '请输入', value: v, onChange: function (e) { updateMaintenance(i, 'laborCost', e.target.value); }, size: 'small' }); } },
{ title: '材料费(元)', dataIndex: 'materialCost', key: 'materialCost', width: 120, render: function (v, record, i) { return React.createElement(Input, { placeholder: '请输入', value: v, onChange: function (e) { updateMaintenance(i, 'materialCost', e.target.value); }, size: 'small' }); } },
{ title: '合计', dataIndex: 'total', key: 'total', width: 100, render: function (v) { return v || '—'; } },
{
title: '操作',
key: 'action',
width: 80,
render: function (_, record, i) {
return React.createElement(Button, { type: 'link', danger: true, size: 'small', onClick: function () { removeMaintenanceRow(i); } }, '删除');
}
}
];
return React.createElement('div', { style: layoutStyle },
React.createElement('div', { style: { marginBottom: 16 } },
React.createElement(Breadcrumb, {
items: [
{ title: '基本数据维护' },
{ title: '型号参数' },
{ title: '编辑' }
]
})
),
React.createElement(Card, { title: CardTitleWithBar('型号参数'), size: 'small', style: cardStyle },
React.createElement('div', { style: formRowStyle },
React.createElement(FormItem, { label: '品牌', required: true, error: formErrors[0].brand },
React.createElement(Select, { placeholder: '请选择品牌', style: inputStyle, value: brand[0], onChange: function (v) { brand[1](v); }, allowClear: true, options: brandOptions, status: formErrors[0].brand ? 'error' : undefined })
),
React.createElement(FormItem, { label: '型号', required: true, error: formErrors[0].model },
React.createElement(Input, { placeholder: '请输入型号名称', value: model[0], onChange: function (e) { model[1](e.target.value); }, style: inputStyle, status: formErrors[0].model ? 'error' : undefined })
),
React.createElement(FormItem, { label: '公告型号', required: true, error: formErrors[0].announcementModel },
React.createElement(Input, { placeholder: '请输入公告型号', value: announcementModel[0], onChange: function (e) { announcementModel[1](e.target.value); }, style: inputStyle, status: formErrors[0].announcementModel ? 'error' : undefined })
),
React.createElement(FormItem, { label: '车辆类型', required: true, error: formErrors[0].vehicleType },
React.createElement(Select, { placeholder: '请选择车辆类型', style: inputStyle, value: vehicleType[0], onChange: function (v) { vehicleType[1](v); }, allowClear: true, options: vehicleTypeOptions, status: formErrors[0].vehicleType ? 'error' : undefined })
),
React.createElement(FormItem, { label: '燃料种类' },
React.createElement(Select, { placeholder: '请选择燃料种类', style: inputStyle, value: fuelType[0], onChange: function (v) { fuelType[1](v); }, allowClear: true, options: fuelTypeOptions })
),
React.createElement(FormItem, { label: '车牌颜色' },
React.createElement(Radio.Group, { value: plateColor[0], onChange: function (e) { plateColor[1](e.target.value); } },
React.createElement(Radio, { value: '绿牌' }, '绿牌'),
React.createElement(Radio, { value: '黄牌' }, '黄牌'),
React.createElement(Radio, { value: '黄绿牌' }, '黄绿牌')
)
),
React.createElement(FormItem, { label: '整车尺寸', fullWidth: true },
React.createElement('div', { style: { display: 'flex', alignItems: 'center', gap: 8 } },
React.createElement(Input, { placeholder: '长', value: sizeLength[0], onChange: function (e) { sizeLength[1](e.target.value); }, style: { flex: 1, minWidth: 0 } }),
React.createElement('span', { style: { flexShrink: 0 } }, '×'),
React.createElement(Input, { placeholder: '宽', value: sizeWidth[0], onChange: function (e) { sizeWidth[1](e.target.value); }, style: { flex: 1, minWidth: 0 } }),
React.createElement('span', { style: { flexShrink: 0 } }, '×'),
React.createElement(Input, { placeholder: '高', value: sizeHeight[0], onChange: function (e) { sizeHeight[1](e.target.value); }, style: { flex: 1, minWidth: 0 } })
)
)
)
),
React.createElement(Card, { title: CardTitleWithBar('轮胎情况'), size: 'small', style: cardStyle },
React.createElement('div', { style: formRowStyle },
React.createElement(FormItem, { label: '轮胎数量' },
React.createElement(Input, { placeholder: '请输入轮胎数量', value: tireCount[0], onChange: function (e) { tireCount[1](e.target.value); }, style: inputStyle, addonAfter: '条' })
),
React.createElement(FormItem, { label: '轮胎规格' },
React.createElement(Input, { placeholder: '请输入轮胎规格', value: tireSpec[0], onChange: function (e) { tireSpec[1](e.target.value); }, style: inputStyle })
)
)
),
React.createElement(Card, { title: CardTitleWithBar('电气情况'), size: 'small', style: cardStyle },
React.createElement('div', { style: formRowStyle },
React.createElement(FormItem, { label: '电池类型' },
React.createElement(Radio.Group, { value: batteryType[0], onChange: function (e) { batteryType[1](e.target.value); } },
React.createElement(Radio, { value: '磷酸铁锂' }, '磷酸铁锂'),
React.createElement(Radio, { value: '三元锂' }, '三元锂')
)
),
React.createElement(FormItem, { label: '电池厂家' },
React.createElement(Input, { placeholder: '请输入电池厂商名称', value: batteryVendor[0], onChange: function (e) { batteryVendor[1](e.target.value); }, style: inputStyle })
),
React.createElement(FormItem, { label: '储电量' },
React.createElement(Input, { placeholder: '请输入储电量', value: capacityKwh[0], onChange: function (e) { capacityKwh[1](e.target.value); }, style: inputStyle, addonAfter: 'kWh' })
),
React.createElement(FormItem, { label: '电续航里程' },
React.createElement(Input, { placeholder: '请输入电续航里程', value: electricRange[0], onChange: function (e) { electricRange[1](e.target.value); }, style: inputStyle, addonAfter: 'KM' })
)
)
),
React.createElement(Card, { title: CardTitleWithBar('供氢系统情况'), size: 'small', style: cardStyle },
React.createElement('div', { style: formRowStyle },
React.createElement(FormItem, { label: '氢瓶容量' },
React.createElement(Input, { placeholder: '请输入氢瓶容量', value: cylinderCapacity[0], onChange: function (e) { cylinderCapacity[1](e.target.value); }, style: inputStyle, addonAfter: 'L' })
),
React.createElement(FormItem, { label: '仪表盘显示模式' },
React.createElement(Select, { placeholder: '请选择仪表盘显示模式', style: inputStyle, value: gaugeMode[0], onChange: function (v) { gaugeMode[1](v); }, allowClear: true, options: gaugeModeOptions })
),
React.createElement(FormItem, { label: '氢续航里程' },
React.createElement(Input, { placeholder: '请输入氢续航里程', value: hydrogenRange[0], onChange: function (e) { hydrogenRange[1](e.target.value); }, style: inputStyle, addonAfter: 'KM' })
),
React.createElement(FormItem, { label: '供氢系统厂家' },
React.createElement(Input, { placeholder: '请输入供氢系统厂家', value: hydrogenVendor[0], onChange: function (e) { hydrogenVendor[1](e.target.value); }, style: inputStyle })
)
)
),
React.createElement(Card, { title: CardTitleWithBar('其他系统情况'), size: 'small', style: cardStyle },
React.createElement('div', { style: formRowStyle },
React.createElement(FormItem, { label: '冷机厂家' },
React.createElement(Input, { placeholder: '请输入冷机厂家名称', value: coldMachineVendor[0], onChange: function (e) { coldMachineVendor[1](e.target.value); }, style: inputStyle })
),
React.createElement(FormItem, { label: '电堆厂家' },
React.createElement(Input, { placeholder: '请输入电堆厂家名称', value: stackVendor[0], onChange: function (e) { stackVendor[1](e.target.value); }, style: inputStyle })
)
)
),
React.createElement(Card, { title: CardTitleWithBar('保养项情况'), size: 'small', style: cardStyle },
React.createElement(Table, {
columns: maintenanceColumns,
dataSource: maintenanceList[0],
rowKey: 'key',
pagination: false,
size: 'small',
bordered: true
}),
React.createElement(Button, { type: 'dashed', style: { width: '100%', marginTop: 8 }, onClick: addMaintenanceRow }, '+ 添加一项')
),
React.createElement('div', { style: footerStyle },
React.createElement(Button, { type: 'primary', onClick: handleSave }, '保存'),
React.createElement(Button, { onClick: handleCancel }, '取消')
)
);
};
if (typeof window !== 'undefined') {
window.Component = Component;
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', function () {
var rootEl = document.getElementById('root');
if (rootEl && window.ReactDOM && window.React) {
var root = ReactDOM.createRoot(rootEl);
root.render(React.createElement(Component));
}
});
} else {
var rootEl = document.getElementById('root');
if (rootEl && window.ReactDOM && window.React) {
var root = ReactDOM.createRoot(rootEl);
root.render(React.createElement(Component));
}
}
}