feat(web): 车辆管理查看/列表字段与展示;提车应收款查看总额;财务需求说明等

- 车辆管理-查看:运营公司/车辆来源/租赁公司、车辆与保险状态、出库/证照枚举对齐列表;移除多余概览项与租赁标签旁按钮
- 车辆管理:运营公司/来源/租赁公司列溢出与表格布局;筛选扩展
- 提车应收款-查看:应收/实收总额含氢费预充值,气泡明细与编辑页一致
- 新增数据分析-业务部汇总台账;工作台/提车应收款需求说明等调整

Made-with: Cursor
This commit is contained in:
王冕
2026-03-30 13:50:44 +08:00
parent 2cb451cc93
commit 623fb62fde
6 changed files with 724 additions and 110 deletions

View File

@@ -115,7 +115,7 @@ const Component = function () {
var todoMoreStatus = todoMoreStatusState[0];
var setTodoMoreStatus = todoMoreStatusState[1];
var todoBoardFilterState = useState('pending');
var todoBoardFilterState = useState('all');
var todoBoardFilter = todoBoardFilterState[0];
var setTodoBoardFilter = todoBoardFilterState[1];
@@ -282,34 +282,35 @@ const Component = function () {
setOverdueReturnModalOpen(true);
}, []);
// 待办任务表(原型:任务类型、任务名称、状态、生成时间、操作)
// 待办任务表(原型:任务类型、任务名称、状态、任务时间、操作)
var dashboardTodoRows = useMemo(function () {
return [
{ id: '1', taskType: '交车', taskName: '交车任务 · 粤A12345 待确认交车单', genDate: '2026-02-27', path: 'web端/运维管理/车辆业务/交车管理.jsx', status: 'pending' },
{ id: '2', taskType: '调拨', taskName: '调拨任务 · 调拨单 DB-2026-009 待接收', genDate: '2026-02-26', path: 'web端/运维管理/车辆业务/调拨管理.jsx', status: 'overdue' },
{ id: '3', taskType: '异动', taskName: '异动任务 · 异动单待结束登记', genDate: '2026-02-26', path: 'web端/运维管理/车辆业务/异动管理-结束异动.jsx', status: 'pending' },
{ id: '4', taskType: '年审', taskName: '年审任务 · 粤B11111 年审材料待上传', genDate: '2026-02-25', path: 'web端/运维管理/车辆业务/异动管理.jsx', status: 'overdue' },
{ id: '5', taskType: '保险', taskName: '商业险到期 · 粤C22334 续保跟进', genDate: '2026-02-24', path: 'web端/车辆管理.jsx', status: 'pending' },
{ id: '6', taskType: '租赁账单', taskName: '租赁账单生成 · 项目「华南物流」2月账单', genDate: '2026-02-24', path: 'web端/业务管理/租赁账单.jsx', status: 'pending' },
{ id: '7', taskType: '审批中心', taskName: '提车应收款 · TK-2026-018 待提交', genDate: '2026-02-23', path: 'web端/财务管理/提车应收款.jsx', status: 'done' },
{ id: '8', taskType: '审批中心', taskName: '租赁合同审核 · HT-2025-088 法务附件', genDate: '2026-02-22', path: 'web端/车辆租赁合同/车辆租赁合同.jsx', status: 'done' }
{ id: '1', taskType: '交车', taskName: '顺通运输租赁苏龙18T交车数5', genDate: '2026-03-26 20:08', path: 'web端/运维管理/车辆业务/交车管理.jsx', status: 'pending' },
{ id: '2', taskType: '异动', taskName: '异动任务-魏山异动车数9', genDate: '2026-03-27 12:26', path: 'web端/运维管理/车辆业务/异动管理-结束异动.jsx', status: 'overdue' },
{ id: '3', taskType: '年审', taskName: '年审任务沪A62261F', genDate: '2026-03-27 16:32', path: 'web端/运维管理/车辆业务/异动管理.jsx', status: 'pending' },
{ id: '4', taskType: '租赁账单', taskName: '御盛合-租赁苏龙18T账单编号xxxxxxx', genDate: '2026-03-28 00:00', path: 'web端/业务管理/租赁账单.jsx', status: 'pending' },
{ id: '5', taskType: '还车应结款', taskName: '云通-租赁帕力安18T粤AGP3649', genDate: '2026-03-28 11:53', path: 'web端/财务管理/提车应收款.jsx', status: 'pending' }
];
}, []);
var todoSummary = useMemo(function () {
var p = 0, o = 0, d = 0;
var p = 0, o = 0;
dashboardTodoRows.forEach(function (r) {
if (r.status === 'pending') p++;
else if (r.status === 'overdue') o++;
else if (r.status === 'done') d++;
});
return { pending: p, overdue: o, done: d };
return { pending: p, overdue: o };
}, [dashboardTodoRows]);
var dashboardTodoBoardRows = useMemo(function () {
return dashboardTodoRows.filter(function (r) {
var rows = dashboardTodoRows.filter(function (r) {
if (todoBoardFilter === 'all') return true;
return r.status === todoBoardFilter;
});
rows.sort(function (a, b) {
return String(b.genDate || '').localeCompare(String(a.genDate || ''));
});
return rows;
}, [dashboardTodoRows, todoBoardFilter]);
var dashboardTodoBoardPreviewRows = useMemo(function () {
@@ -319,7 +320,7 @@ const Component = function () {
// 全部待办弹窗:任务类型下拉展示业务全量类型(与示意数据并集,联调可改为接口枚举)
var todoMoreTaskTypeFilterOptions = useMemo(function () {
var catalog = [
'交车', '调拨', '异动', '年审', '保险', '租赁账单', '审批中心',
'交车', '调拨', '异动', '年审', '保险', '租赁账单', '审批中心', '还车应结款',
'还车', '备车', '提车应收', '替换车', '违章', '事故', '充电', 'ETC', '能源账户', '氢费', '电费'
];
var seen = {};
@@ -1039,11 +1040,12 @@ const Component = function () {
render: renderTodoStatusCell
},
{
title: '生成时间',
title: '任务时间',
dataIndex: 'genDate',
key: 'genDate',
width: 120,
width: 160,
showSorterTooltip: false,
defaultSortOrder: 'descend',
sorter: function (a, b) {
return String(a.genDate || '').localeCompare(String(b.genDate || ''));
}
@@ -1084,11 +1086,12 @@ const Component = function () {
render: renderTodoStatusCell
},
{
title: '生成时间',
title: '任务时间',
dataIndex: 'genDate',
key: 'genDate',
width: 120,
width: 160,
showSorterTooltip: false,
defaultSortOrder: 'descend',
sorter: function (a, b) {
return String(a.genDate || '').localeCompare(String(b.genDate || ''));
}
@@ -1119,13 +1122,17 @@ const Component = function () {
}, [pushUrgeNotice]);
var todoMoreFilteredRows = useMemo(function () {
return dashboardTodoRows.filter(function (r) {
var rows = dashboardTodoRows.filter(function (r) {
if (todoMoreTaskType && r.taskType !== todoMoreTaskType) return false;
if (todoMoreStatus && r.status !== todoMoreStatus) return false;
if (todoMoreDateStart && r.genDate < todoMoreDateStart) return false;
if (todoMoreDateEnd && r.genDate > todoMoreDateEnd) return false;
return true;
});
rows.sort(function (a, b) {
return String(b.genDate || '').localeCompare(String(a.genDate || ''));
});
return rows;
}, [dashboardTodoRows, todoMoreTaskType, todoMoreStatus, todoMoreDateStart, todoMoreDateEnd]);
var openTodoMoreModal = useCallback(function () {
@@ -1474,6 +1481,9 @@ const Component = function () {
'.workbench-todo-table .ant-table-column-sorter{color:#98a1b0!important}' +
'.workbench-todo-table .ant-table-column-sorter-up.active,.workbench-todo-table .ant-table-column-sorter-down.active{color:#707d8f!important}' +
'.workbench-todo-table.ant-table-small .ant-table-thead>tr>th{padding:10px 12px!important}' +
'.workbench-todo-table .ant-table-thead>tr>th.ant-table-column-sort{background:#f7f8fa!important}' +
'.workbench-todo-table .ant-table-tbody>tr>td.ant-table-column-sort{background:#fff!important}' +
'.workbench-todo-table .ant-table-tbody>tr.ant-table-row:hover>td.ant-table-column-sort{background:#fafafa!important}' +
'.workbench-one-screen .workbench-quick-card.ant-card{display:flex;flex-direction:column;min-height:0;height:100%}' +
'.workbench-one-screen .workbench-quick-card .ant-card-body{padding:0;flex:1;min-height:0;display:flex;flex-direction:column}' +
'.workbench-quick-scroll{flex:1;min-height:0;overflow:auto;-webkit-overflow-scrolling:touch}' +
@@ -1585,9 +1595,9 @@ const Component = function () {
title: React.createElement(Space, { size: 8, wrap: true, align: 'center' },
React.createElement('span', { className: 'workbench-dash-pair-head-title' }, '待办任务'),
React.createElement(Badge, { count: todoSummary.pending + todoSummary.overdue, style: { backgroundColor: accentBlue } }),
renderTodoStatChip('all', '全部', dashboardTodoRows.length, 'rgba(0,0,0,0.04)', '#595959'),
renderTodoStatChip('pending', '待处理', todoSummary.pending, 'rgba(22,119,255,0.06)', accentBlue),
renderTodoStatChip('overdue', '已超时', todoSummary.overdue, 'rgba(245,34,45,0.06)', '#f5222d'),
renderTodoStatChip('done', '已完成', todoSummary.done, 'rgba(82,196,26,0.08)', '#52c41a')
renderTodoStatChip('overdue', '已超时', todoSummary.overdue, 'rgba(245,34,45,0.06)', '#f5222d')
),
bordered: false,
style: Object.assign({}, cardStyle, { flex: 1, width: '100%', minHeight: 0, display: 'flex', flexDirection: 'column' }),
@@ -1731,7 +1741,7 @@ const Component = function () {
value: todoMoreStatus,
onChange: setTodoMoreStatus
}),
React.createElement(Text, { type: 'secondary', style: { fontSize: 12 } }, '生成时间'),
React.createElement(Text, { type: 'secondary', style: { fontSize: 12 } }, '任务时间'),
React.createElement(DatePicker.RangePicker, {
style: { width: 140 },
format: 'YYYY-MM-DD',