Files
ONE-OS/web端/运维管理/车辆管理-查看.jsx
王冕 fc86688beb feat(web): 运维管理-备车/型号参数与需求说明更新
- 备车管理、新增备车、查看备车、备车-编辑:布局与字段调整,新增取消按钮
- 基本数据维护:型号参数列表/新增/查看/编辑页
- 车辆业务:备车-编辑页,示例图片、提交/保存/取消按钮
- 需求说明目录与文档整理

Made-with: Cursor
2026-03-13 00:23:02 +08:00

290 lines
17 KiB
JavaScript
Raw Permalink 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 Tabs = antd.Tabs;
var Table = antd.Table;
var Tag = antd.Tag;
var Button = antd.Button;
var Tooltip = antd.Tooltip;
// 顶部概览 mock 数据(与图片一致)
var overview = {
plateNo: '浙F06900F',
plateTag: '租赁',
vin: 'LA9HE60A0NBAF4031',
vehicleNo: '22FHD0007',
owner: '浙江羚牛氢能科技有限公司',
contractNo: 'LNZLHTSH2023071301',
outStatus: '租赁交车',
licenseStatus: '正常',
location: '浙江省嘉兴市平湖市XXXXXXXXXXX街道XXXXXXXXXXX号XXXXXXXx',
bodyColor: '白色',
purchaseDate: '2026-09-09',
warehouseStatus: '已交付车-租赁服务',
customerName: '上海迅杰物流有限公司',
prepStatus: '正常',
scrapStatus: '无',
gpsLastTime: '2026-09-09 10:50',
resourceCategory: 'XXXXXXXXXX',
manufactureYear: '2025',
parkingPlace: '-',
bizDept: '业务三部',
lastPrepTime: '2026-09-09',
assetRating: 'XXXXXXXXXX',
ratingTime: '2027-09-09',
forceScrapDate: '2026-09-09',
nextInspectionTime: '2026-09-09',
bizManager: '金可鹏',
maintainStatus: '正常',
preemptStatus: '无',
transferStatus: '无'
};
// 型号参数 tab 数据
var modelParams = {
brand: '苏龙',
model: '海格牌KLQ5180XYKFCEV',
vehicleType: '18吨双飞翼货车',
fuelType: '氢',
cabinColor: '绿牌',
wholeSize: '5995mm x 2145mm x 3130mm'
};
var tireInfo = { tireCount: '8', tireSpec: '15/80R22.5' };
var electricSystem = {
batteryType: '磷酸铁锂',
batteryVendor: 'xxxxxxxxxxxxx企业名称',
capacity: '100000 kWh',
range: '200 KM'
};
var hydrogenSystem = {
vendor: '某某供氢系统科技有限公司',
cylinderCapacity: 'xxx L',
gaugeMode: 'MPa',
range: '1000 KM'
};
var otherSystem = {
coldMachineVendor: 'xxxxxxxx企业',
stackVendor: 'XXXXXXXX企业'
};
var maintenanceList = [
{ key: '1', item: '变速器油', kmCycle: '60000', monthCycle: '24', laborCost: '0', materialCost: '571', total: '571', lastKm: '' },
{ key: '2', item: '变速器油', kmCycle: '60000', monthCycle: '24', laborCost: '0', materialCost: '571', total: '571', lastKm: '' },
{ key: '3', item: '变速器油', kmCycle: '60000', monthCycle: '24', laborCost: '0', materialCost: '571', total: '571', lastKm: '5000' },
{ key: '4', item: '变速器油', kmCycle: '60000', monthCycle: '24', laborCost: '0', materialCost: '571', total: '571', lastKm: '5000' },
{ key: '5', item: '变速器油', kmCycle: '60000', monthCycle: '24', laborCost: '0', materialCost: '571', total: '571', lastKm: '5000' }
];
var activeTab = useState('model');
var styles = {
page: { padding: '16px 24px 40px', backgroundColor: '#f5f5f5', minHeight: '100vh', fontSize: 14 },
breadcrumb: { marginBottom: 16, color: '#666' },
breadcrumbSep: { margin: '0 8px', color: '#999' },
card: { backgroundColor: '#fff', borderRadius: 8, marginBottom: 16, boxShadow: '0 1px 2px rgba(0,0,0,0.05)', overflow: 'hidden' },
cardBody: { padding: '20px 24px' },
overviewHeader: { display: 'flex', alignItems: 'center', gap: 12, marginBottom: 20, flexWrap: 'wrap' },
plateNo: { fontSize: 18, fontWeight: 600, color: '#333' },
overviewGrid: { display: 'grid', gridTemplateColumns: 'repeat(3, 1fr)', gap: '12px 24px' },
overviewItem: { display: 'flex', gap: 8, minWidth: 0 },
overviewLabel: { color: '#666', flex: '0 0 110px' },
overviewValue: { color: '#333', flex: 1 },
cardTitleBar: { display: 'flex', alignItems: 'center', marginBottom: 16, fontSize: 15, fontWeight: 500 },
cardTitleBarLine: { width: 4, height: 16, backgroundColor: '#1890ff', marginRight: 8, borderRadius: 2 },
infoGrid: { display: 'grid', gridTemplateColumns: 'repeat(2, 1fr)', gap: '12px 24px', marginBottom: 20 },
infoItem: { display: 'flex', gap: 8 },
infoLabel: { color: '#666', flex: '0 0 100px' },
infoValue: { color: '#333' }
};
function InfoRow(props) {
var val = props.value || '-';
var valueNode = props.ellipsisWithTooltip
? React.createElement(Tooltip, { title: val },
React.createElement('span', {
style: Object.assign({}, styles.overviewValue, { overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap', display: 'block' })
}, val)
)
: React.createElement('span', { style: styles.overviewValue }, val);
return React.createElement('div', { style: styles.overviewItem },
React.createElement('span', { style: styles.overviewLabel }, props.label + ''),
valueNode
);
}
function CardTitleWithBar(props) {
return React.createElement('div', { style: styles.cardTitleBar },
React.createElement('span', { style: styles.cardTitleBarLine }),
props.title
);
}
var tabItems = [
{
key: 'model',
label: '型号参数',
children: React.createElement('div', { style: { padding: '0 4px' } },
React.createElement(Card, { size: 'small', style: { marginBottom: 16 } },
React.createElement(CardTitleWithBar, { title: '型号参数' }),
React.createElement('div', { style: styles.infoGrid },
React.createElement('div', { style: styles.infoItem }, React.createElement('span', { style: styles.infoLabel }, '品牌:'), React.createElement('span', { style: styles.infoValue }, modelParams.brand)),
React.createElement('div', { style: styles.infoItem }, React.createElement('span', { style: styles.infoLabel }, '型号:'), React.createElement('span', { style: styles.infoValue }, modelParams.model)),
React.createElement('div', { style: styles.infoItem }, React.createElement('span', { style: styles.infoLabel }, '车辆类型:'), React.createElement('span', { style: styles.infoValue }, modelParams.vehicleType)),
React.createElement('div', { style: styles.infoItem }, React.createElement('span', { style: styles.infoLabel }, '燃料种类:'), React.createElement('span', { style: styles.infoValue }, modelParams.fuelType)),
React.createElement('div', { style: styles.infoItem }, React.createElement('span', { style: styles.infoLabel }, '车厢颜色:'), React.createElement('span', { style: styles.infoValue }, modelParams.cabinColor)),
React.createElement('div', { style: styles.infoItem }, React.createElement('span', { style: styles.infoLabel }, '整车尺寸:'), React.createElement('span', { style: styles.infoValue }, modelParams.wholeSize))
)
),
React.createElement(Card, { size: 'small', style: { marginBottom: 16 } },
React.createElement(CardTitleWithBar, { title: '轮胎情况' }),
React.createElement('div', { style: styles.infoGrid },
React.createElement('div', { style: styles.infoItem }, React.createElement('span', { style: styles.infoLabel }, '轮胎数量:'), React.createElement('span', { style: styles.infoValue }, tireInfo.tireCount)),
React.createElement('div', { style: styles.infoItem }, React.createElement('span', { style: styles.infoLabel }, '轮胎规格:'), React.createElement('span', { style: styles.infoValue }, tireInfo.tireSpec))
)
),
React.createElement(Card, { size: 'small', style: { marginBottom: 16 } },
React.createElement(CardTitleWithBar, { title: '电气系统' }),
React.createElement('div', { style: styles.infoGrid },
React.createElement('div', { style: styles.infoItem }, React.createElement('span', { style: styles.infoLabel }, '电池类型:'), React.createElement('span', { style: styles.infoValue }, electricSystem.batteryType)),
React.createElement('div', { style: styles.infoItem }, React.createElement('span', { style: styles.infoLabel }, '电池厂家:'), React.createElement('span', { style: styles.infoValue }, electricSystem.batteryVendor)),
React.createElement('div', { style: styles.infoItem }, React.createElement('span', { style: styles.infoLabel }, '储电量:'), React.createElement('span', { style: styles.infoValue }, electricSystem.capacity)),
React.createElement('div', { style: styles.infoItem }, React.createElement('span', { style: styles.infoLabel }, '续航里程:'), React.createElement('span', { style: styles.infoValue }, electricSystem.range))
)
),
React.createElement(Card, { size: 'small', style: { marginBottom: 16 } },
React.createElement(CardTitleWithBar, { title: '供氢系统' }),
React.createElement('div', { style: styles.infoGrid },
React.createElement('div', { style: styles.infoItem }, React.createElement('span', { style: styles.infoLabel }, '供氢系统厂家:'), React.createElement('span', { style: styles.infoValue }, hydrogenSystem.vendor)),
React.createElement('div', { style: styles.infoItem }, React.createElement('span', { style: styles.infoLabel }, '氢瓶容量:'), React.createElement('span', { style: styles.infoValue }, hydrogenSystem.cylinderCapacity)),
React.createElement('div', { style: styles.infoItem }, React.createElement('span', { style: styles.infoLabel }, '仪表盘模式:'), React.createElement('span', { style: styles.infoValue }, hydrogenSystem.gaugeMode)),
React.createElement('div', { style: styles.infoItem }, React.createElement('span', { style: styles.infoLabel }, '续航里程:'), React.createElement('span', { style: styles.infoValue }, hydrogenSystem.range))
)
),
React.createElement(Card, { size: 'small', style: { marginBottom: 16 } },
React.createElement(CardTitleWithBar, { title: '其他系统' }),
React.createElement('div', { style: styles.infoGrid },
React.createElement('div', { style: styles.infoItem }, React.createElement('span', { style: styles.infoLabel }, '冷机生产企业:'), React.createElement('span', { style: styles.infoValue }, otherSystem.coldMachineVendor)),
React.createElement('div', { style: styles.infoItem }, React.createElement('span', { style: styles.infoLabel }, '电堆生产企业:'), React.createElement('span', { style: styles.infoValue }, otherSystem.stackVendor))
)
),
React.createElement(Card, { size: 'small' },
React.createElement(CardTitleWithBar, { title: '保养参数' }),
React.createElement(Table, {
dataSource: maintenanceList,
columns: [
{ title: '序号', dataIndex: 'key', key: 'key', width: 60, render: function (_, __, i) { return i + 1; } },
{ title: '养护项目', dataIndex: 'item', key: 'item', width: 120 },
{ title: '保养公里周期(km)', dataIndex: 'kmCycle', key: 'kmCycle', width: 140 },
{ title: '保养时间周期(月)', dataIndex: 'monthCycle', key: 'monthCycle', width: 140 },
{ title: '工时费(元)', dataIndex: 'laborCost', key: 'laborCost', width: 100 },
{ title: '材料费(元)', dataIndex: 'materialCost', key: 'materialCost', width: 100 },
{ title: '合计', dataIndex: 'total', key: 'total', width: 80 },
{ title: '上次保养公里数(KM)', dataIndex: 'lastKm', key: 'lastKm', render: function (v) { return v || '—'; } }
],
pagination: false,
size: 'small',
bordered: true
})
)
)
},
{ key: 'equip', label: '后装设备', children: React.createElement('div', { style: { padding: 24, color: '#999' } }, '暂无数据') },
{ key: 'license', label: '证照信息', children: React.createElement('div', { style: { padding: 24, color: '#999' } }, '暂无数据') },
{ key: 'lease', label: '租赁记录', children: React.createElement('div', { style: { padding: 24, color: '#999' } }, '暂无数据') },
{ key: 'insurance', label: '保险记录', children: React.createElement('div', { style: { padding: 24, color: '#999' } }, '暂无数据') },
{ key: 'repair', label: '维修记录', children: React.createElement('div', { style: { padding: 24, color: '#999' } }, '暂无数据') },
{ key: 'maintain', label: '保养记录', children: React.createElement('div', { style: { padding: 24, color: '#999' } }, '暂无数据') },
{ key: 'accident', label: '事故记录', children: React.createElement('div', { style: { padding: 24, color: '#999' } }, '暂无数据') },
{ key: 'fault', label: '故障记录', children: React.createElement('div', { style: { padding: 24, color: '#999' } }, '暂无数据') },
{ key: 'violation', label: '违章记录', children: React.createElement('div', { style: { padding: 24, color: '#999' } }, '暂无数据') },
{ key: 'change', label: '异动记录', children: React.createElement('div', { style: { padding: 24, color: '#999' } }, '暂无数据') },
{ key: 'transfer', label: '调拨记录', children: React.createElement('div', { style: { padding: 24, color: '#999' } }, '暂无数据') },
{ key: 'prep', label: '整备记录', children: React.createElement('div', { style: { padding: 24, color: '#999' } }, '暂无数据') },
{ key: 'inspect', label: '抽检记录', children: React.createElement('div', { style: { padding: 24, color: '#999' } }, '暂无数据') }
];
var breadcrumbNodes = [
React.createElement('span', { key: '1' }, '车辆管理'),
React.createElement('span', { key: '2', style: styles.breadcrumbSep }, ' / '),
React.createElement('span', { key: '3' }, '车辆数据'),
React.createElement('span', { key: '4', style: styles.breadcrumbSep }, ' / '),
React.createElement('span', { key: '5', style: { color: '#1890ff' } }, '详情')
];
return React.createElement('div', { style: styles.page },
React.createElement('div', { style: styles.breadcrumb }, breadcrumbNodes),
React.createElement('div', { style: styles.card },
React.createElement('div', { style: styles.cardBody },
React.createElement('div', { style: styles.overviewHeader },
React.createElement('span', { style: styles.plateNo }, overview.plateNo),
React.createElement(Tag, { color: 'blue' }, overview.plateTag),
React.createElement(Button, { type: 'link', size: 'small', style: { padding: 0 } }, '1')
),
React.createElement('div', { style: styles.overviewGrid },
React.createElement(InfoRow, { label: '车架号', value: overview.vin }),
React.createElement(InfoRow, { label: '车辆编号', value: overview.vehicleNo }),
React.createElement(InfoRow, { label: '登记所有权', value: overview.owner }),
React.createElement(InfoRow, { label: '合同编号', value: overview.contractNo }),
React.createElement(InfoRow, { label: '出库状态', value: overview.outStatus }),
React.createElement(InfoRow, { label: '证照状态', value: overview.licenseStatus }),
React.createElement(InfoRow, { label: '车辆当前位置', value: overview.location, ellipsisWithTooltip: true }),
React.createElement(InfoRow, { label: '车身颜色', value: overview.bodyColor }),
React.createElement(InfoRow, { label: '采购入库日期', value: overview.purchaseDate }),
React.createElement(InfoRow, { label: '库位状态', value: overview.warehouseStatus }),
React.createElement(InfoRow, { label: '客户名称', value: overview.customerName }),
React.createElement(InfoRow, { label: '整备状态', value: overview.prepStatus }),
React.createElement(InfoRow, { label: '报废状态', value: overview.scrapStatus }),
React.createElement(InfoRow, { label: 'GPS最后上传', value: overview.gpsLastTime }),
React.createElement(InfoRow, { label: '资源分类', value: overview.resourceCategory }),
React.createElement(InfoRow, { label: '出厂年份', value: overview.manufactureYear }),
React.createElement(InfoRow, { label: '停车位置', value: overview.parkingPlace }),
React.createElement(InfoRow, { label: '业务部门', value: overview.bizDept }),
React.createElement(InfoRow, { label: '上次整备时间', value: overview.lastPrepTime }),
React.createElement(InfoRow, { label: '资产评级', value: overview.assetRating }),
React.createElement(InfoRow, { label: '等评时间', value: overview.ratingTime }),
React.createElement(InfoRow, { label: '强制报废期', value: overview.forceScrapDate }),
React.createElement(InfoRow, { label: '下次年检时间', value: overview.nextInspectionTime }),
React.createElement(InfoRow, { label: '业务负责人', value: overview.bizManager }),
React.createElement(InfoRow, { label: '维修状态', value: overview.maintainStatus }),
React.createElement(InfoRow, { label: '预占状态', value: overview.preemptStatus }),
React.createElement(InfoRow, { label: '过户状态', value: overview.transferStatus })
)
)
),
React.createElement('div', { style: Object.assign({}, styles.card, { marginBottom: 0 }) },
React.createElement('div', { style: styles.cardBody },
React.createElement(Tabs, {
activeKey: activeTab[0],
onChange: function (key) { activeTab[1](key); },
items: tabItems,
type: 'line'
})
)
)
);
};
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));
}
}
}