运维/交车:交车单页、交车明细样例、备车/查看页重命名及需求说明更新
Made-with: Cursor
This commit is contained in:
@@ -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
|
||||
))
|
||||
)
|
||||
);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user