运维/交车:交车单页、交车明细样例、备车/查看页重命名及需求说明更新

Made-with: Cursor
This commit is contained in:
王冕
2026-03-16 14:08:27 +08:00
parent fc86688beb
commit e842a778a4
13 changed files with 909 additions and 162 deletions

View File

@@ -44,6 +44,8 @@ const Component = function () {
var _detailTab = useState('型号参数');
var _filterExpanded = useState(false);
var _requirementModalVisible = useState(false);
var _inspectImportModalVisible = useState(false);
var _inspectImportResult = useState(null);
// 省-市 地区数据(示例)
var regionOptions = [
@@ -127,6 +129,67 @@ const Component = function () {
message.info('批量导入:请上传文件(原型演示)');
}, []);
var openInspectImportModal = useCallback(function () {
_inspectImportModalVisible[1](true);
_inspectImportResult[1](null);
}, []);
var closeInspectImportModal = useCallback(function () {
_inspectImportModalVisible[1](false);
_inspectImportResult[1](null);
}, []);
var downloadInspectTemplate = useCallback(function () {
var csv = '\uFEFF\u8F66\u724C\u53F7,\u7B49\u8BC4\u65F6\u95F4\n';
var blob = new Blob([csv], { type: 'text/csv;charset=utf-8' });
var url = URL.createObjectURL(blob);
var a = document.createElement('a');
a.href = url;
a.download = '\u5BFC\u5165\u6A21\u677F_\u7B49\u8BC4\u65F6\u95F4.csv';
a.click();
URL.revokeObjectURL(url);
message.success('模板已下载');
}, []);
var handleInspectImportUpload = useCallback(function (file) {
var reader = new FileReader();
reader.onload = function (e) {
var text = e.target && e.target.result ? String(e.target.result) : '';
var lines = text.split(/\r?\n/).filter(function (line) { return line.trim(); });
var failedList = [];
if (lines.length > 0) {
var header = lines[0];
for (var i = 1; i < Math.min(lines.length, 6); i++) {
var parts = lines[i].split(',');
var plateNo = (parts[0] || '').trim();
var inspectTime = (parts[1] || '').trim();
failedList.push({ plateNo: plateNo || '-', inspectTime: inspectTime || '-', reason: '\u8F66\u724C\u53F7\u4E0D\u5B58\u5728\u6216\u683C\u5F0F\u9519\u8BEF' });
}
}
if (failedList.length === 0) failedList.push({ plateNo: '-', inspectTime: '-', reason: '\u6587\u4EF6\u683C\u5F0F\u9519\u8BEF' });
_inspectImportResult[1]({ hasFailed: true, failedList: failedList });
};
reader.readAsText(file, 'UTF-8');
return false;
}, []);
var downloadInspectFailedCsv = useCallback(function () {
var result = _inspectImportResult[0];
if (!result || !result.failedList || result.failedList.length === 0) return;
var escape = function (v) {
var s = v == null ? '' : String(v);
if (s.indexOf(',') !== -1 || s.indexOf('"') !== -1 || s.indexOf('\n') !== -1) return '"' + s.replace(/"/g, '""') + '"';
return s;
};
var header = '\u8F66\u724C\u53F7,\u7B49\u8BC4\u65F6\u95F4,\u5931\u8D25\u539F\u56E0';
var rows = result.failedList.map(function (r) { return escape(r.plateNo) + ',' + escape(r.inspectTime) + ',' + escape(r.reason); });
var csv = '\uFEFF' + header + '\n' + rows.join('\n');
var blob = new Blob([csv], { type: 'text/csv;charset=utf-8' });
var url = URL.createObjectURL(blob);
var a = document.createElement('a');
a.href = url;
a.download = '\u7B49\u8BC4\u65F6\u95F4\u5BFC\u5165\u5931\u8D25\u8BB0\u5F55.csv';
a.click();
URL.revokeObjectURL(url);
message.success('失败记录已下载');
}, [_inspectImportResult[0]]);
var goDetail = useCallback(function (record) {
_detailRecord[1](record);
}, []);
@@ -505,7 +568,8 @@ const Component = function () {
}),
React.createElement(Space, null,
React.createElement(Button, { onClick: handleExport }, '导出'),
React.createElement(Button, { onClick: handleBatchImport }, '批量导入')
React.createElement(Button, { onClick: handleBatchImport }, '批量导入'),
React.createElement(Button, { onClick: openInspectImportModal }, '批量导入等评时间')
)
),
@@ -585,7 +649,28 @@ const Component = function () {
onCancel: function () { _requirementModalVisible[1](false); },
width: 720,
footer: React.createElement(Button, { onClick: function () { _requirementModalVisible[1](false); } }, '关闭')
}, React.createElement('div', { style: { maxHeight: 560, overflow: 'auto', whiteSpace: 'pre-wrap', fontSize: 13, lineHeight: 1.6, color: 'rgba(0,0,0,0.85)' } }, requirementText))
}, React.createElement('div', { style: { maxHeight: 560, overflow: 'auto', whiteSpace: 'pre-wrap', fontSize: 13, lineHeight: 1.6, color: 'rgba(0,0,0,0.85)' } }, requirementText)),
React.createElement(Modal, {
title: '批量导入等评时间',
open: _inspectImportModalVisible[0],
onCancel: closeInspectImportModal,
width: 520,
footer: React.createElement(Button, { onClick: closeInspectImportModal }, '关闭')
}, React.createElement('div', null,
React.createElement('div', { style: { marginBottom: 16 } },
React.createElement(Upload.Dragger, {
accept: '.csv',
showUploadList: false,
beforeUpload: function (file) { handleInspectImportUpload(file); return false; }
}, React.createElement('p', { style: { margin: 0, padding: '16px 0' } }, '点击或拖拽 CSV 文件到此区域批量上传')),
React.createElement(Button, { type: 'link', onClick: downloadInspectTemplate, style: { marginTop: 8, padding: 0 } }, '下载导入模板')
),
_inspectImportResult[0] && _inspectImportResult[0].hasFailed ? React.createElement('div', { style: { marginTop: 16, padding: 12, background: '#fff2f0', border: '1px solid #ffccc7', borderRadius: 4 } },
React.createElement('span', { style: { color: 'rgba(0,0,0,0.85)' } }, '上传失败,'),
React.createElement('a', { href: '#', onClick: function (e) { e.preventDefault(); downloadInspectFailedCsv(); }, style: { color: '#1890ff' } }, '查看失败记录')
) : null
))
)
);
};