Files
ONE-OS/web端/运维管理/车辆业务/故障管理.jsx
王冕 d432d51eed feat(web): 同步 web 端目录更新至 Gitea
包含加氢站站点信息、运维交车/故障、台账与数据分析等页面新增与改动。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-04 19:57:30 +08:00

504 lines
28 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 作为组件变量名
// ONEOS-web - 运维管理 - 车辆业务 - 故障管理(列表与表单)
const Component = function () {
var useState = React.useState;
var useEffect = React.useEffect;
var antd = window.antd;
var Table = antd.Table;
var Button = antd.Button;
var Space = antd.Space;
var Input = antd.Input;
var Select = antd.Select;
var DatePicker = antd.DatePicker;
var Form = antd.Form;
var Row = antd.Row;
var Col = antd.Col;
var Divider = antd.Divider;
var Breadcrumb = antd.Breadcrumb;
var Layout = antd.Layout;
var message = antd.message;
var Tag = antd.Tag;
var Card = antd.Card;
var Modal = antd.Modal;
var Tabs = antd.Tabs;
var Tooltip = antd.Tooltip;
var RangePicker = DatePicker.RangePicker;
var _filterFormInst = Form.useForm();
var filterForm = _filterFormInst[0];
var _specOpen = useState(false);
var specModalOpen = _specOpen[0];
var setSpecModalOpen = _specOpen[1];
var _listTab = useState('pending');
var listTab = _listTab[0];
var setListTab = _listTab[1];
var _tableRows = useState(null);
var tableRowsOverride = _tableRows[0];
var setTableRowsOverride = _tableRows[1];
var faultLevelOptions = [
{ label: 'L1-特急', value: '特急' },
{ label: 'L2-紧急', value: '紧急' },
{ label: 'L3-一般', value: '一般' },
{ label: 'L4-提示', value: '提示' }
];
var lastOperatorOptions = [
{ label: '王婷婷', value: '王婷婷' },
{ label: '刘若楠', value: '刘若楠' },
{ label: '陈嘉豪', value: '陈嘉豪' },
{ label: '赵海峰', value: '赵海峰' }
];
// 故障类型枚举
var faultTypeOptions = [
{ label: '底盘故障', value: '底盘故障' },
{ label: '三电故障', value: '三电故障' },
{ label: '整车系统', value: '整车系统' },
{ label: '燃料电池系统故障', value: '燃料电池系统故障' },
{ label: '供氢系统故障', value: '供氢系统故障' },
{ label: '空调系统故障', value: '空调系统故障' },
{ label: '冷机故障', value: '冷机故障' },
{ label: '其他故障', value: '其他故障' }
];
// 解决情况枚举
var resolveStatusOptions = [
{ label: '未解决', value: '未解决' },
{ label: '临时排故', value: '临时排故' },
{ label: '已解决', value: '已解决' }
];
var SearchIcon = function() { return React.createElement('svg', { viewBox: '0 0 1024 1024', width: 14, height: 14, fill: 'currentColor' }, React.createElement('path', { d: 'M909.6 854.5L649.9 594.8C690.2 542.7 712 479 712 412c0-80.2-31.3-155.4-87.9-212.1-56.6-56.7-132-87.9-212.1-87.9s-155.5 31.3-212.1 87.9C143.2 256.5 112 331.8 112 412c0 80.1 31.3 155.5 87.9 212.1C256.5 680.8 331.8 712 412 712c67 0 130.6-21.8 182.7-62l259.7 259.6a8.2 8.2 0 0011.6 0l43.6-43.5a8.2 8.2 0 000-11.6zM570.4 570.4C528 612.7 471.8 636 412 636s-116-23.3-158.4-65.6C211.3 528 188 471.8 188 412s23.3-116.1 65.6-158.4C296 211.3 352.2 188 412 188s116.1 23.2 158.4 65.6S636 352.2 636 412s-23.3 116.1-65.6 158.4z' })); };
var FileTextIcon = function() { return React.createElement('svg', { viewBox: '0 0 1024 1024', width: 16, height: 16, fill: 'currentColor' }, React.createElement('path', { d: 'M854.6 288.7L639.4 73.4c-6-6-14.2-9.4-22.7-9.4H192c-17.7 0-32 14.3-32 32v832c0 17.7 14.3 32 32 32h640c17.7 0 32-14.3 32-32V311.3c0-8.5-3.4-16.7-9.4-22.7zM790.2 326H602V137.8L790.2 326zm1.8 562H232V136h302v216c0 22.1 17.9 40 40 40h216v494zM504 618H320c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h184c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8zM702 458H320c-4.4 0-8 3.6-8 8v48c0 4.4 3.6 8 8 8h382c4.4 0 8-3.6 8-8v-48c0-4.4-3.6-8-8-8z' })); };
var ResetIcon = function() { return React.createElement('svg', { viewBox: '0 0 1024 1024', width: 14, height: 14, fill: 'currentColor' }, React.createElement('path', { d: 'M793 242H366v-74c0-6.7-7.7-10.4-12.9-6.3l-142 112a8 8 0 000 12.6l142 112c5.2 4.1 12.9.4 12.9-6.3v-74h415v470H175c-4.4 0-8 3.6-8 8v60c0 4.4 3.6 8 8 8h618c35.3 0 64-28.7 64-64V306c0-35.3-28.7-64-64-64z' })); };
var PlusIcon = function() { return React.createElement('svg', { viewBox: '0 0 1024 1024', width: 14, height: 14, fill: 'currentColor' }, React.createElement('path', { d: 'M482 152h60q8 0 8 8v704q0 8-8 8h-60q-8 0-8-8V160q0-8 8-8z' }), React.createElement('path', { d: 'M192 474h672q8 0 8 8v60q0 8-8 8H192q-8 0-8-8v-60q0-8 8-8z' })); };
var DownloadIcon = function() { return React.createElement('svg', { viewBox: '0 0 1024 1024', width: 16, height: 16, fill: 'currentColor' }, React.createElement('path', { d: 'M505.7 661a8 8 0 0012.6 0l112-141.7c4.1-5.2.4-12.9-6.3-12.9h-74.1V168c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v338.3H400c-6.7 0-10.4 7.7-6.3 12.9l112 141.8zM878 626h-60c-4.4 0-8 3.6-8 8v154H214V634c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v198c0 17.7 14.3 32 32 32h684c17.7 0 32-14.3 32-32V634c0-4.4-3.6-8-8-8z' })); };
var ListIcon = function() { return React.createElement('svg', { viewBox: '0 0 48 48', width: 14, height: 14, fill: 'none', stroke: 'currentColor', strokeWidth: 4, strokeLinecap: 'butt', strokeLinejoin: 'miter' }, React.createElement('path', { d: 'M17 12H42' }), React.createElement('path', { d: 'M17 24H42' }), React.createElement('path', { d: 'M17 36H42' }), React.createElement('path', { d: 'M8 12H9' }), React.createElement('path', { d: 'M8 24H9' }), React.createElement('path', { d: 'M8 36H9' })); };
var UploadIcon = function() { return React.createElement('svg', { viewBox: '0 0 1024 1024', width: 14, height: 14, fill: 'currentColor' }, React.createElement('path', { d: 'M512 256l-256 256h160v256h192V512h160L512 256zM256 832v64h512v-64H256z' })); };
var levelLabelMap = { 特急: 'L1-特急', 紧急: 'L2-紧急', 一般: 'L3-一般', 提示: 'L4-提示' };
var renderFaultLevel = function (text) {
var color = 'default';
if (text === '特急') color = 'red';
else if (text === '紧急') color = 'orange';
else if (text === '一般') color = 'blue';
else if (text === '提示') color = 'green';
var label = levelLabelMap[text] || text;
return React.createElement(Tag, { color: color }, label);
};
var renderResolveStatus = function (text) {
var dot = '#86909c';
if (text === '已解决') dot = '#00b42a';
else if (text === '临时排故') dot = '#ff7d00';
else if (text === '未解决') dot = '#f53f3f';
return React.createElement(Space, { size: 6 },
React.createElement('span', { style: { display: 'inline-block', width: 6, height: 6, borderRadius: '50%', backgroundColor: dot } }),
React.createElement('span', null, text)
);
};
var columns = [
{ title: '故障编码', dataIndex: 'code', key: 'code', width: 132, fixed: 'left' },
{ title: '解决情况', dataIndex: 'status', key: 'status', width: 120, render: renderResolveStatus },
{ title: '车牌号码', dataIndex: 'plate', key: 'plate', width: 112 },
{ title: '车辆品牌', dataIndex: 'brand', key: 'brand', width: 100, ellipsis: true },
{ title: '车辆型号', dataIndex: 'model', key: 'model', width: 100, ellipsis: true },
{ title: '运营公司', dataIndex: 'company', key: 'company', width: 140, ellipsis: true },
{ title: '故障等级', dataIndex: 'level', key: 'level', width: 108, render: renderFaultLevel },
{ title: '故障类型', dataIndex: 'type', key: 'type', width: 128, ellipsis: true },
{
title: '故障描述',
dataIndex: 'desc',
key: 'desc',
width: 200,
ellipsis: { showTitle: false },
render: function (text) {
return React.createElement(Tooltip, { placement: 'topLeft', title: text },
React.createElement('span', { style: { cursor: 'default' } }, text)
);
}
},
{ title: '故障上报时间', dataIndex: 'reportTime', key: 'reportTime', width: 176, ellipsis: true, className: 'fault-col-report-time' },
{ title: '最后操作时间', dataIndex: 'lastOperationTime', key: 'lastOperationTime', width: 176, ellipsis: true },
{ title: '最后操作人', dataIndex: 'lastOperator', key: 'lastOperator', width: 104, ellipsis: true },
{
title: '操作',
key: 'action',
fixed: 'right',
width: listTab === 'history' ? 72 : 104,
render: function (_, record) {
if (listTab === 'history') {
return React.createElement(Button, { type: 'link', size: 'small', style: { padding: '0 4px' }, onClick: function () { handleView(record); } }, '查看');
}
return React.createElement(Space, { size: 0, split: React.createElement('span', { style: { color: '#e5e6eb' } }, '|') },
React.createElement(Button, { type: 'link', size: 'small', style: { padding: '0 4px' }, onClick: function () { handleView(record); } }, '查看'),
React.createElement(Button, { type: 'link', size: 'small', style: { padding: '0 4px' }, onClick: function () { handleEdit(record); } }, '编辑')
);
}
}
];
var ALL_DATA = [
{ key: '1', code: 'F-2024-001', plate: '沪A12345', brand: '一汽解放', model: 'J6P', company: '上海羚牛', type: '底盘故障', level: '紧急', source: '客户报告', status: '未解决', reportTime: '2024-05-10 08:30:00', lastOperator: '王婷婷', lastOperationTime: '2024-05-10 09:00:00', desc: '车辆重载下制动踏板偏软,制动距离明显变长' },
{ key: '2', code: 'F-2024-002', plate: '浙B88888', brand: '东风商用车', model: '天龙', company: '浙江羚牛', type: '三电故障', level: '特急', source: '司机操作问题', status: '临时排故', reportTime: '2024-05-11 14:15:00', lastOperator: '刘若楠', lastOperationTime: '2024-05-11 16:20:00', desc: '高压系统绝缘报警频繁触发,车辆进入限扭模式' },
{ key: '3', code: 'F-2024-003', plate: '苏C66666', brand: '福田欧曼', model: 'EST', company: '苏州冷链速运有限公司', type: '整车系统', level: '一般', source: '定期保养', status: '已解决', reportTime: '2024-05-12 10:00:00', lastOperator: '陈嘉豪', lastOperationTime: '2024-05-12 11:30:00', desc: '后桥轮胎偏磨,建议更换并做四轮定位' },
{ key: '4', code: 'F-2024-004', plate: '沪D99999', brand: '陕汽重卡', model: '德龙', company: '上海城配物流有限公司', type: '空调系统故障', level: '提示', source: '客户报告', status: '已解决', reportTime: '2024-05-13 09:45:00', lastOperator: '赵海峰', lastOperationTime: '2024-05-13 10:10:00', desc: '空调制冷效果差,出风口温度偏高' }
];
var parseReportTime = function (str) {
if (!str) return null;
var p = str.replace(/-/g, '/');
var t = new Date(p);
return isNaN(t.getTime()) ? null : t;
};
var applyListFilter = function () {
var v = filterForm.getFieldsValue();
var rows = ALL_DATA.filter(function (r) {
if (listTab === 'pending') return r.status !== '已解决';
return r.status === '已解决';
});
if (v.filterPlate && String(v.filterPlate).trim()) {
var q = String(v.filterPlate).trim();
rows = rows.filter(function (r) { return (r.plate || '').indexOf(q) !== -1; });
}
if (v.filterLevels && v.filterLevels.length) {
rows = rows.filter(function (r) { return v.filterLevels.indexOf(r.level) !== -1; });
}
if (v.filterTypes && v.filterTypes.length) {
rows = rows.filter(function (r) { return v.filterTypes.indexOf(r.type) !== -1; });
}
if (v.filterLastOperator) {
rows = rows.filter(function (r) { return r.lastOperator === v.filterLastOperator; });
}
if (v.filterDateRange && v.filterDateRange.length === 2 && v.filterDateRange[0] && v.filterDateRange[1]) {
var start = v.filterDateRange[0];
var end = v.filterDateRange[1];
var startMs = start.valueOf ? start.valueOf() : new Date(start).getTime();
var endMs = end.valueOf ? end.valueOf() : new Date(end).getTime();
var startDay = new Date(startMs);
startDay.setHours(0, 0, 0, 0);
startMs = startDay.getTime();
var endDay = new Date(endMs);
endDay.setHours(23, 59, 59, 999);
endMs = endDay.getTime();
rows = rows.filter(function (r) {
var rt = parseReportTime(r.reportTime);
if (!rt) return false;
var m = rt.getTime();
return m >= startMs && m <= endMs;
});
}
setTableRowsOverride(rows);
};
useEffect(function () {
applyListFilter();
}, [listTab]);
var displayData = tableRowsOverride !== null && tableRowsOverride !== undefined
? tableRowsOverride
: ALL_DATA.filter(function (r) {
if (listTab === 'pending') return r.status !== '已解决';
return r.status === '已解决';
});
var handleCreate = function () {
message.info('跳转到新增故障页面');
};
var handleEdit = function (record) {
message.info('跳转到编辑故障页面');
};
var handleView = function (record) {
message.info('跳转到查看故障页面');
};
var formItemLayout = {
labelAlign: 'left',
colon: false,
labelCol: { flex: '0 0 100px' },
wrapperCol: { flex: '1 1 0' }
};
var specSection = function (title, children) {
return React.createElement('div', { style: { marginBottom: 16 } },
React.createElement('div', { style: { fontWeight: 600, color: '#1d2129', marginBottom: 8, fontSize: 14 } }, title),
children
);
};
var specLine = function (text) {
return React.createElement('div', { style: { fontSize: 13, color: '#4e5969', lineHeight: 1.75, paddingLeft: 0 } }, text);
};
var renderSpecModal = function () {
return React.createElement(Modal, {
title: '故障列表页 — 需求说明',
open: specModalOpen,
onCancel: function () { setSpecModalOpen(false); },
footer: React.createElement(Button, { type: 'primary', onClick: function () { setSpecModalOpen(false); } }, '知道了'),
width: 720,
centered: true,
destroyOnClose: true
},
React.createElement('div', { style: { maxHeight: '70vh', overflowY: 'auto', paddingRight: 4 } },
specSection('2. 故障列表页', React.createElement(React.Fragment, null,
specLine('用于展示待处理与历史记录,支持多条件检索、查看、编辑、删除、导入导出。')
)),
specSection('2.1 顶部筛选区(支持单条件或多条件组合)', React.createElement(React.Fragment, null,
specLine('2.1.1 车牌号:输入框,支持模糊搜索;'),
specLine('2.1.2 故障等级多选下拉选项L1-特急、L2-紧急、L3-一般、L4-提示;'),
specLine('2.1.3 上报时间:日期范围选择(开始~结束);'),
specLine('2.1.4 故障类型:多选下拉,选项为故障类型枚举;'),
specLine('2.1.5 最后操作人:下拉选择器;'),
specLine('2.1.6 查询按钮:执行筛选;'),
specLine('2.1.7 重置按钮:清空筛选条件。')
)),
specSection('2.2 列表工具栏', React.createElement(React.Fragment, null,
specLine('2.2.1 新建:进入故障表单页;'),
specLine('2.2.2 导出:导出当前筛选结果;'),
specLine('2.2.3 导入:批量导入故障数据;'),
specLine('2.2.4 展示设置:字段展示配置(当前版本可预留)。')
)),
specSection('2.3 Tab分区', React.createElement(React.Fragment, null,
specLine('2.3.1 待处理;'),
specLine('2.3.2 历史记录。')
)),
specSection('2.4 列表字段展示(当前版本)', React.createElement(React.Fragment, null,
specLine('故障编码、解决情况、车牌号码、车辆品牌、车辆型号、运营公司、故障等级、故障类型、故障描述(省略展示,悬停显示完整)、故障上报时间、最后操作时间、最后操作人、操作(待处理:查看/编辑;历史记录:仅查看)。'),
specLine('说明:车辆识别代码不在列表展示,仅在表单车辆信息中展示。')
)),
specSection('2.5 状态与操作规则', React.createElement(React.Fragment, null,
specLine('2.5.1 解决情况状态值:临时排故、已解决、未解决;'),
specLine('2.5.2 操作列:待处理 Tab 为查看、编辑(无删除);历史记录 Tab 仅查看;'),
specLine('2.5.3 分页每页10条固定分页。')
))
)
);
};
return React.createElement(Layout, { className: 'arco-theme-overrides', style: { minHeight: '100vh', background: '#f2f3f5', fontFamily: 'Inter, Helvetica, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif' } },
React.createElement('style', null, `
.arco-theme-overrides .ant-btn { border-radius: 4px; }
.arco-theme-overrides .ant-btn-primary { background-color: #165dff; border-color: #165dff; }
.arco-theme-overrides .ant-btn-primary:hover { background-color: #4080ff; border-color: #4080ff; }
.arco-theme-overrides .ant-btn-link { color: #165dff; }
.arco-theme-overrides .ant-btn-link:hover { background-color: transparent; color: #4080ff; }
.arco-theme-overrides .ant-table-thead > tr > th {
background-color: #f2f3f5;
color: #909399;
font-weight: 400;
font-size: 14px;
height: 40px;
padding: 9px 16px;
line-height: 22px;
box-sizing: border-box;
border-bottom: 1px solid #e5e6eb;
border-top: none;
vertical-align: middle;
}
.arco-theme-overrides .ant-table-thead > tr > th .ant-table-column-title {
font-size: 14px;
color: #909399;
line-height: 22px;
min-height: 22px;
white-space: nowrap;
}
.arco-theme-overrides .ant-table-thead > tr > th::before { display: none !important; }
.arco-theme-overrides .ant-table-tbody > tr > td { border-bottom: 1px solid #e5e6eb; padding: 13px 16px; color: #4e5969; vertical-align: middle; line-height: 22px; }
.arco-theme-overrides .ant-table-tbody > tr { height: 52px; }
.arco-theme-overrides .customer-table-scroll-wrap { width: 100%; min-width: 0; max-width: 100%; }
.arco-theme-overrides .ant-table-wrapper { border: none; }
.arco-theme-overrides .ant-table { border: none; }
.arco-theme-overrides .ant-table-container { border: none; }
.arco-theme-overrides .ant-table-pagination.ant-pagination { margin: 16px 0 0 0; }
.arco-theme-overrides .ant-card { border: none; border-radius: 4px; }
.arco-theme-overrides .customer-page-card.ant-card { border: 1px solid #e5e6eb !important; border-radius: 4px; box-shadow: 0 1px 2px rgba(0,0,0,0.06); background: #fff; }
.arco-theme-overrides .customer-page-card .ant-card-body { padding: 20px 24px 24px; }
.arco-theme-overrides .ant-input, .arco-theme-overrides .ant-select-selector, .arco-theme-overrides .ant-picker, .arco-theme-overrides .ant-input-affix-wrapper { border-radius: 2px; border: 1px solid #e5e6eb; background-color: #fff; transition: all 0.1s cubic-bezier(0, 0, 1, 1); }
.arco-theme-overrides .ant-input:hover, .arco-theme-overrides .ant-select:not(.ant-select-disabled):hover .ant-select-selector, .arco-theme-overrides .ant-picker:hover, .arco-theme-overrides .ant-input-affix-wrapper:hover { background-color: #fff; border-color: #165dff; }
.arco-theme-overrides .ant-input:focus, .arco-theme-overrides .ant-input-focused, .arco-theme-overrides .ant-select-focused .ant-select-selector, .arco-theme-overrides .ant-picker-focused, .arco-theme-overrides .ant-input-affix-wrapper-focused { background-color: #fff; border: 1px solid #165dff !important; box-shadow: 0 0 0 2px rgba(22, 93, 255, 0.2) !important; outline: 0; }
.arco-theme-overrides .ant-breadcrumb { color: #86909c; font-size: 14px; white-space: nowrap; flex-shrink: 0; }
.arco-theme-overrides .customer-page-header-row { display: flex; align-items: center; flex-wrap: nowrap; gap: 0; margin-bottom: 20px; }
.arco-theme-overrides .ant-breadcrumb a { color: #4e5969; }
.arco-theme-overrides .ant-breadcrumb a:hover { color: #165dff; background-color: transparent; }
.arco-theme-overrides .ant-form-item-label { padding: 0 16px 0 0 !important; line-height: 32px; height: 32px; display: flex; align-items: center; }
.arco-theme-overrides .ant-form-item-control { display: flex; align-items: center; line-height: 32px; min-height: 32px; }
.arco-theme-overrides .ant-form-item-control-input { min-height: 32px; width: 100%; display: flex; align-items: center; }
.arco-theme-overrides .ant-form-item-control-input-content { display: flex; align-items: center; width: 100%; height: 100%; }
.arco-theme-overrides .ant-select { width: 100%; height: 32px; }
.arco-theme-overrides .ant-select-selector { height: 32px !important; min-height: 32px !important; display: flex; align-items: center; width: 100%; padding: 0 12px; }
.arco-theme-overrides .ant-input { height: 32px; padding: 4px 12px; }
.arco-theme-overrides .ant-input-affix-wrapper { height: 32px; padding: 0 12px; display: flex; align-items: center; }
.arco-theme-overrides .ant-input-affix-wrapper > input.ant-input,
.arco-theme-overrides .ant-input-affix-wrapper > input.ant-input:focus,
.arco-theme-overrides .ant-input-affix-wrapper > input.ant-input:hover { height: 100%; padding: 0; border: none !important; box-shadow: none !important; outline: none !important; background-color: transparent !important; }
.arco-theme-overrides .ant-picker { height: 32px !important; min-height: 32px !important; display: flex; align-items: center; padding: 4px 12px; width: 100%; }
.arco-theme-overrides .ant-form-item-label > label { color: #4e5969; white-space: nowrap; }
.arco-theme-overrides .ant-form-item-label > label::after { display: none !important; content: "" !important; margin: 0 !important; }
.arco-theme-overrides .ant-select-multiple .ant-select-selector { height: auto !important; min-height: 32px !important; align-items: center; padding-top: 2px; padding-bottom: 2px; }
.arco-theme-overrides .fault-col-report-time { white-space: nowrap; }
`),
React.createElement('div', { style: { padding: '16px 20px 24px', display: 'flex', flexDirection: 'column', flex: 1 } },
React.createElement(Card, { className: 'customer-page-card', bordered: false },
React.createElement('div', { className: 'customer-page-header-row', style: { marginBottom: 16, justifyContent: 'space-between', width: '100%' } },
React.createElement(Breadcrumb, {
separator: React.createElement('span', { style: { color: '#c9cdd4' } }, '/'),
items: [
{ title: React.createElement(ListIcon, { style: { display: 'inline-flex', alignItems: 'center', fontSize: 14, transform: 'translate(-2px, 1px)' } }) },
{ title: '运维管理' },
{ title: '车辆业务' },
{ title: React.createElement('span', { style: { color: '#1d2129', fontWeight: 700, fontSize: 16, lineHeight: '22px' } }, '故障管理') }
]
}),
React.createElement(Button, {
type: 'link',
icon: React.createElement(FileTextIcon, null),
style: { display: 'flex', alignItems: 'center', gap: 4, padding: '0 4px', color: '#165dff', fontWeight: 500 },
onClick: function () { setSpecModalOpen(true); }
}, '查看需求说明')
),
React.createElement('div', { style: { fontSize: 18, fontWeight: 600, color: '#1d2129', lineHeight: '26px', marginBottom: 20 } }, '故障管理'),
// 搜索表单区域
React.createElement('div', { style: { marginBottom: 0 } },
React.createElement(Row, { style: { flexWrap: 'nowrap', alignItems: 'stretch' } },
React.createElement(Col, { flex: 1, style: { minWidth: 0, paddingRight: 40 } },
React.createElement(Form, Object.assign({ layout: 'horizontal', form: filterForm }, formItemLayout),
React.createElement(Row, { gutter: 24, style: { rowGap: 0 } },
React.createElement(Col, { span: 8 },
React.createElement(Form.Item, { name: 'filterPlate', label: '车牌号', style: { marginBottom: 16 } },
React.createElement(Input, { placeholder: '支持模糊搜索', allowClear: true })
)
),
React.createElement(Col, { span: 8 },
React.createElement(Form.Item, { name: 'filterLevels', label: '故障等级', style: { marginBottom: 16 } },
React.createElement(Select, {
mode: 'multiple',
allowClear: true,
placeholder: '多选L1~L4',
options: faultLevelOptions,
maxTagCount: 'responsive'
})
)
),
React.createElement(Col, { span: 8 },
React.createElement(Form.Item, { name: 'filterDateRange', label: '上报时间', style: { marginBottom: 16 } },
React.createElement(RangePicker, { style: { width: '100%' }, showTime: false, placeholder: ['开始', '结束'] })
)
),
React.createElement(Col, { span: 8 },
React.createElement(Form.Item, { name: 'filterTypes', label: '故障类型', style: { marginBottom: 16 } },
React.createElement(Select, {
mode: 'multiple',
allowClear: true,
placeholder: '多选故障类型',
options: faultTypeOptions,
maxTagCount: 'responsive'
})
)
),
React.createElement(Col, { span: 8 },
React.createElement(Form.Item, { name: 'filterLastOperator', label: '最后操作人', style: { marginBottom: 16 } },
React.createElement(Select, {
allowClear: true,
placeholder: '请选择',
options: lastOperatorOptions
})
)
)
)
)
),
React.createElement(Divider, {
type: 'vertical',
style: {
alignSelf: 'stretch',
height: 'auto',
minHeight: 100,
borderLeftColor: 'rgb(229, 230, 235)',
borderLeftStyle: 'dashed',
marginLeft: 20,
marginRight: 20
}
}),
React.createElement(Col, { flex: 'none', style: { textAlign: 'right', display: 'flex', flexDirection: 'column', alignItems: 'flex-end', minWidth: 100, maxWidth: 168 } },
React.createElement(Space, { direction: 'vertical', size: 12, style: { width: '100%', alignItems: 'flex-end' } },
React.createElement(Button, { type: 'primary', icon: React.createElement(SearchIcon, null), style: { display: 'flex', alignItems: 'center', gap: 6, justifyContent: 'center', width: 86 }, onClick: function () { applyListFilter(); message.success('已按条件筛选'); } }, '查询'),
React.createElement(Button, {
icon: React.createElement(ResetIcon, null),
style: { display: 'flex', alignItems: 'center', gap: 6, justifyContent: 'center', width: 86 },
onClick: function () {
filterForm.resetFields();
applyListFilter();
message.info('已清空筛选条件');
}
}, '重置')
)
)
)
),
React.createElement(Divider, { style: { margin: '16px 0 20px', borderColor: '#e5e6eb' } }),
// 工具栏 + 表格
React.createElement('div', { style: { display: 'flex', flexDirection: 'column', flex: 1, minWidth: 0 } },
React.createElement(Row, { justify: 'space-between', align: 'middle', style: { marginBottom: 16 } },
React.createElement(Col, null,
React.createElement(Space, { size: 12 },
React.createElement(Button, { type: 'primary', icon: React.createElement(PlusIcon, null), style: { display: 'flex', alignItems: 'center', gap: 6 }, onClick: handleCreate }, '新建'),
React.createElement(Button, {
style: { padding: '4px 10px', height: 32, display: 'flex', alignItems: 'center', gap: 6, color: '#4e5969' },
onClick: function () { message.info('已导出当前筛选结果'); }
}, React.createElement(DownloadIcon, null), React.createElement('span', null, '导出')),
React.createElement(Button, { icon: React.createElement(UploadIcon, null), style: { display: 'flex', alignItems: 'center', gap: 6 }, onClick: function () { message.info('批量导入故障数据'); } }, '导入'),
React.createElement(Button, { style: { color: '#4e5969' }, onClick: function () { message.info('字段展示配置(当前版本预留)'); } }, '展示设置')
)
),
React.createElement(Col, null)
),
React.createElement(Tabs, {
activeKey: listTab,
onChange: function (k) {
setListTab(k);
},
style: { marginBottom: 12 },
items: [
{ key: 'pending', label: '待处理' },
{ key: 'history', label: '历史记录' }
]
}),
React.createElement('div', { className: 'customer-table-scroll-wrap', style: { flex: 1, minHeight: 0, minWidth: 0 } },
React.createElement(Table, {
columns: columns,
dataSource: displayData,
pagination: {
pageSize: 10,
showSizeChanger: false,
showTotal: function (total) { return '共 ' + total + ' 条'; }
},
scroll: { x: 2100 }
})
)
)
)
),
renderSpecModal()
);
};
if (typeof module !== 'undefined' && module.exports) module.exports = Component;