feat(web): 车辆管理查看/列表字段与展示;提车应收款查看总额;财务需求说明等
- 车辆管理-查看:运营公司/车辆来源/租赁公司、车辆与保险状态、出库/证照枚举对齐列表;移除多余概览项与租赁标签旁按钮 - 车辆管理:运营公司/来源/租赁公司列溢出与表格布局;筛选扩展 - 提车应收款-查看:应收/实收总额含氢费预充值,气泡明细与编辑页一致 - 新增数据分析-业务部汇总台账;工作台/提车应收款需求说明等调整 Made-with: Cursor
This commit is contained in:
56
web端/工作台.jsx
56
web端/工作台.jsx
@@ -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',
|
||||
|
||||
Reference in New Issue
Block a user