feat(web): 车辆租赁合同合同审批类型、法务上传盖章合同;新增数据分析页面;交车任务查看调整

- 租赁合同列表:合同审批类型筛选与列、需求说明;审批通过且未上传盖章件时法务可更多上传
- 新增/续签/转正式/查看等页同步合同审批类型及需求说明
- 新增数据分析:业务部业绩明细、物流业务月度统计、租赁客户氢费台账、租赁车辆收入明细
- 查看交车任务页面更新

Made-with: Cursor
This commit is contained in:
王冕
2026-03-25 15:50:31 +08:00
parent 826a774495
commit e1ac94bacf
13 changed files with 3654 additions and 96 deletions

View File

@@ -17,6 +17,7 @@ const Component = function() {
var Popover = antd.Popover;
var Dropdown = antd.Dropdown;
var Modal = antd.Modal;
var Upload = antd.Upload;
var message = antd.message;
var App = antd.App;
@@ -33,6 +34,7 @@ const Component = function() {
var _businessDept = useState([]);
var _businessOwner = useState([]);
var _contractType = useState(['全部']);
var _contractApprovalType = useState(['全部']);
var _creator = useState([]);
var _endDateRange = useState(null);
@@ -46,6 +48,7 @@ const Component = function() {
businessDept: [],
businessOwner: [],
contractType: ['全部'],
contractApprovalType: ['全部'],
creator: [],
endDateRange: null
});
@@ -65,6 +68,14 @@ const Component = function() {
var _terminateModalVisible = useState(false);
var _terminateModalRecord = useState(null);
var _requirementModalVisible = useState(false);
var _stampModalVisible = useState(false);
var _stampModalRecord = useState(null);
var _stampFileList = useState([]);
// 上传盖章合同完成后,按合同 id 记录已上传(原型:与列表 legalStampedContractUploaded 合并判断)
var _stampedUploadedOverride = useState({});
// 联调时:当前登录用户所属部门为法务部时为 true原型默认 true 便于演示「上传盖章合同」)
var isLegalDeptUser = true;
// 模拟选项(与新增租赁合同保持一致)
var contractCodeOptions = [
@@ -118,6 +129,11 @@ const Component = function() {
{ value: '正式合同', label: '正式合同' },
{ value: '试用合同', label: '试用合同' }
];
var contractApprovalTypeOptions = [
{ value: '全部', label: '全部' },
{ value: '标准合同审批', label: '标准合同审批' },
{ value: '非标准合同审批', label: '非标准合同审批' }
];
var deptOptions = [
{ value: '业务1部', label: '业务1部' },
{ value: '业务2部', label: '业务2部' },
@@ -151,6 +167,7 @@ const Component = function() {
businessDept: '业务1部',
businessOwner: '张经理',
contractType: '正式合同',
contractApprovalType: '标准合同审批',
contractEndDate: '2026-02-16',
contactName: '张三',
contactPhone: '13800138001',
@@ -158,7 +175,8 @@ const Component = function() {
createTime: '2025-01-05 10:00',
updater: '-',
updateTime: '-',
remark: '草稿待完善'
remark: '草稿待完善',
legalStampedContractUploaded: undefined
},
// 2. 未提交 + 草稿(试用合同)
{
@@ -176,6 +194,7 @@ const Component = function() {
businessDept: '业务2部',
businessOwner: '李专员',
contractType: '试用合同',
contractApprovalType: '非标准合同审批',
contractEndDate: '2025-08-01',
contactName: '李四',
contactPhone: '13800138002',
@@ -183,7 +202,8 @@ const Component = function() {
createTime: '2025-02-10 09:00',
updater: '-',
updateTime: '-',
remark: '试用期 3 个月'
remark: '试用期 3 个月',
legalStampedContractUploaded: undefined
},
// 3. 待审批 + 已提交审批(初次提交,尚未有任何节点审批)
{
@@ -201,6 +221,7 @@ const Component = function() {
businessDept: '业务3部',
businessOwner: '王专员',
contractType: '正式合同',
contractApprovalType: '标准合同审批',
contractEndDate: '2026-06-30',
contactName: '王五',
contactPhone: '13800138003',
@@ -208,7 +229,8 @@ const Component = function() {
createTime: '2025-02-12 11:00',
updater: '-',
updateTime: '-',
remark: '-'
remark: '-',
legalStampedContractUploaded: undefined
},
// 4. 审批中 + 已提交审批(已有节点审批,未走完)
{
@@ -227,6 +249,7 @@ const Component = function() {
businessDept: '业务1部',
businessOwner: '张经理',
contractType: '正式合同',
contractApprovalType: '非标准合同审批',
contractEndDate: '2026-03-01',
contactName: '赵六',
contactPhone: '13900139001',
@@ -234,7 +257,8 @@ const Component = function() {
createTime: '2025-02-14 09:00',
updater: '李专员',
updateTime: '2025-02-15 16:00',
remark: '-'
remark: '-',
legalStampedContractUploaded: undefined
},
// 5. 审批中 + 变更(已通过审批后做了变更并重新提交)
{
@@ -252,6 +276,7 @@ const Component = function() {
businessDept: '业务2部',
businessOwner: '李专员',
contractType: '正式合同',
contractApprovalType: '标准合同审批',
contractEndDate: '2026-05-31',
contactName: '孙七',
contactPhone: '13900139002',
@@ -259,7 +284,8 @@ const Component = function() {
createTime: '2025-02-18 10:00',
updater: '李专员',
updateTime: '2025-02-22 14:00',
remark: '变更车辆数量'
remark: '变更车辆数量',
legalStampedContractUploaded: undefined
},
// 6. 审批通过 + 合同进行中(正式合同)
{
@@ -279,6 +305,7 @@ const Component = function() {
businessDept: '业务3部',
businessOwner: '王专员',
contractType: '正式合同',
contractApprovalType: '标准合同审批',
contractEndDate: '2026-12-31',
contactName: '周八',
contactPhone: '13900139003',
@@ -286,7 +313,8 @@ const Component = function() {
createTime: '2025-01-15 09:00',
updater: '王专员',
updateTime: '2025-01-25 11:00',
remark: '-'
remark: '-',
legalStampedContractUploaded: false
},
// 7. 审批通过 + 合同进行中(试用合同,可转正式)
{
@@ -304,6 +332,7 @@ const Component = function() {
businessDept: '业务1部',
businessOwner: '张经理',
contractType: '试用合同',
contractApprovalType: '非标准合同审批',
contractEndDate: '2025-05-31',
contactName: '吴九',
contactPhone: '13900139004',
@@ -311,7 +340,8 @@ const Component = function() {
createTime: '2025-01-28 10:00',
updater: '-',
updateTime: '-',
remark: '试用 3 个月'
remark: '试用 3 个月',
legalStampedContractUploaded: false
},
// 8. 审批驳回 + 已提交审批(可编辑和重新提交)
{
@@ -330,6 +360,7 @@ const Component = function() {
businessDept: '业务2部',
businessOwner: '李专员',
contractType: '正式合同',
contractApprovalType: '标准合同审批',
contractEndDate: '2026-08-15',
contactName: '郑十',
contactPhone: '13900139005',
@@ -337,7 +368,8 @@ const Component = function() {
createTime: '2025-02-20 14:00',
updater: '李专员',
updateTime: '2025-02-23 09:00',
remark: '驳回原因:费用条款需调整'
remark: '驳回原因:费用条款需调整',
legalStampedContractUploaded: undefined
},
// 9. 审批通过 + 到期合同(审批已通过但合同结束日期已过)
{
@@ -356,6 +388,7 @@ const Component = function() {
businessDept: '业务3部',
businessOwner: '王专员',
contractType: '正式合同',
contractApprovalType: '标准合同审批',
contractEndDate: '2024-12-31',
contactName: '王五',
contactPhone: '13800138003',
@@ -363,7 +396,8 @@ const Component = function() {
createTime: '2024-02-20 10:00',
updater: '王专员',
updateTime: '2024-12-20 16:00',
remark: '已到期可续签'
remark: '已到期可续签',
legalStampedContractUploaded: false
},
// 10. 审批通过 + 已结束(操作列终止合同并完成审核)
{
@@ -381,6 +415,7 @@ const Component = function() {
businessDept: '业务1部',
businessOwner: '张经理',
contractType: '正式合同',
contractApprovalType: '非标准合同审批',
contractEndDate: '2025-01-15',
contactName: '张三',
contactPhone: '13800138001',
@@ -388,7 +423,8 @@ const Component = function() {
createTime: '2024-05-20 09:00',
updater: '张经理',
updateTime: '2025-01-10 14:00',
remark: '-'
remark: '-',
legalStampedContractUploaded: true
}
];
@@ -428,6 +464,10 @@ const Component = function() {
if (type && type.length > 0 && type.indexOf('全部') === -1) {
list = list.filter(function(r) { return type.indexOf(r.contractType) !== -1; });
}
var capType = f.contractApprovalType;
if (capType && capType.length > 0 && capType.indexOf('全部') === -1) {
list = list.filter(function(r) { return capType.indexOf(r.contractApprovalType) !== -1; });
}
if (f.creator && f.creator.length > 0) {
list = list.filter(function(r) { return f.creator.indexOf(r.creator) !== -1; });
}
@@ -463,6 +503,7 @@ const Component = function() {
businessDept: _businessDept[0] ? _businessDept[0].slice() : [],
businessOwner: _businessOwner[0] ? _businessOwner[0].slice() : [],
contractType: _contractType[0] ? _contractType[0].slice() : ['全部'],
contractApprovalType: _contractApprovalType[0] ? _contractApprovalType[0].slice() : ['全部'],
creator: _creator[0] ? _creator[0].slice() : [],
endDateRange: _endDateRange[0]
});
@@ -478,6 +519,7 @@ const Component = function() {
_businessDept[1]([]);
_businessOwner[1]([]);
_contractType[1](['全部']);
_contractApprovalType[1](['全部']);
_creator[1]([]);
_endDateRange[1](null);
_appliedFilter[1]({
@@ -490,6 +532,7 @@ const Component = function() {
businessDept: [],
businessOwner: [],
contractType: ['全部'],
contractApprovalType: ['全部'],
creator: [],
endDateRange: null
});
@@ -544,6 +587,22 @@ const Component = function() {
}
_contractType[1](v);
}, []);
var handleContractApprovalTypeChange = useCallback(function(v) {
if (!v || v.length === 0) { _contractApprovalType[1](['全部']); return; }
if (v.indexOf('全部') !== -1 && v.length > 1) {
var prevA = _contractApprovalType[0] || [];
var hadAllOnlyA = prevA.length === 1 && prevA.indexOf('全部') !== -1;
if (hadAllOnlyA) {
var nextA = [];
for (var ia = 0; ia < v.length; ia++) { if (v[ia] !== '全部') nextA.push(v[ia]); }
_contractApprovalType[1](nextA);
} else {
_contractApprovalType[1](['全部']);
}
return;
}
_contractApprovalType[1](v);
}, []);
var addAuthorizedRow = useCallback(function() {
_authorizedList[1](function(prev) { return prev.concat([{ name: '', phone: '', idCard: '' }]); });
@@ -649,6 +708,21 @@ const Component = function() {
if (type === '试用合同') {
items.push({ key: 'toFormal', label: '转正式合同', onClick: function() { message.info('转正式合同(原型)'); } });
}
// 审批通过且法务审核环节尚未上传盖章合同附件时,法务部员工可在「更多」中上传(上传完成后入口关闭)
if (approval === '审批通过' && isLegalDeptUser) {
var needStampUpload = (record.legalStampedContractUploaded === false) && !(_stampedUploadedOverride[0][record.id] === true);
if (needStampUpload) {
items.push({
key: 'uploadStamped',
label: '上传盖章合同',
onClick: function() {
_stampModalRecord[1](record);
_stampFileList[1]([]);
_stampModalVisible[1](true);
}
});
}
}
return items;
}
@@ -751,6 +825,7 @@ const Component = function() {
{ title: '业务部门', dataIndex: 'businessDept', key: 'businessDept', width: 100 },
{ title: '业务负责人', dataIndex: 'businessOwner', key: 'businessOwner', width: 100 },
{ title: '合同类型', dataIndex: 'contractType', key: 'contractType', width: 100 },
{ title: '合同审批类型', dataIndex: 'contractApprovalType', key: 'contractApprovalType', width: 130 },
{ title: '合同结束日期', dataIndex: 'contractEndDate', key: 'contractEndDate', width: 120 },
{ title: '客户联系人', dataIndex: 'contactName', key: 'contactName', width: 100 },
{ title: '联系电话', dataIndex: 'contactPhone', key: 'contactPhone', width: 120 },
@@ -865,6 +940,16 @@ const Component = function() {
onChange: handleContractTypeChange,
options: contractTypeOptions
})),
React.createElement('div', { key: 'contractApprovalType', style: filterItemStyle },
React.createElement('div', { style: filterLabelStyle }, '合同审批类型'),
React.createElement(Select, {
mode: 'multiple',
placeholder: '请选择',
style: filterControlStyle,
value: _contractApprovalType[0],
onChange: handleContractApprovalTypeChange,
options: contractApprovalTypeOptions
})),
React.createElement('div', { key: 'creator', style: filterItemStyle },
React.createElement('div', { style: filterLabelStyle }, '创建人'),
React.createElement(Select, {
@@ -885,7 +970,7 @@ const Component = function() {
}))
];
var filterCount = _filterExpanded[0] ? 11 : 3;
var filterCount = _filterExpanded[0] ? 12 : 3;
var filterNodes = [];
for (var i = 0; i < filterCount && i < filterItems.length; i++) {
filterNodes.push(filterItems[i]);
@@ -1034,6 +1119,61 @@ const Component = function() {
scroll: { x: 920 }
})
)),
React.createElement(Modal, {
title: '上传盖章合同',
open: _stampModalVisible[0],
onCancel: function() {
_stampModalVisible[1](false);
_stampModalRecord[1](null);
_stampFileList[1]([]);
},
width: 560,
footer: [
React.createElement(Button, { key: 'cancel', onClick: function() {
_stampModalVisible[1](false);
_stampModalRecord[1](null);
_stampFileList[1]([]);
} }, '取消'),
React.createElement(Button, { key: 'ok', type: 'primary', onClick: function() {
var rec = _stampModalRecord[0];
var list = _stampFileList[0] || [];
if (!list.length) {
message.warning('请先选择要上传的文件');
return;
}
var pending = list.some(function(f) { return f.status === 'uploading'; });
if (pending) {
message.warning('请等待文件上传完成');
return;
}
_stampedUploadedOverride[1](function(prev) {
var n = Object.assign({}, prev);
if (rec) n[rec.id] = true;
return n;
});
message.success('盖章合同已上传(原型)');
_stampModalVisible[1](false);
_stampModalRecord[1](null);
_stampFileList[1]([]);
} }, '确认上传')
]
}, React.createElement('div', { style: { padding: '8px 0' } },
React.createElement('div', { style: { marginBottom: 12, fontSize: 14, color: 'rgba(0,0,0,0.65)' } },
'合同编码:',
React.createElement('span', { style: { color: 'rgba(0,0,0,0.85)', fontWeight: 500 } }, _stampModalRecord[0] ? _stampModalRecord[0].contractCode : '-')
),
React.createElement(Upload.Dragger, {
multiple: true,
fileList: _stampFileList[0],
onChange: function(info) { _stampFileList[1](info.fileList); },
customRequest: function(opts) {
setTimeout(function() {
if (opts.onSuccess) opts.onSuccess('ok');
}, 200);
},
accept: '.pdf,.doc,.docx,image/*'
}, React.createElement('p', { style: { margin: 0, padding: '20px 0' } }, '点击或拖拽文件到此区域上传,支持多文件'))
)),
React.createElement(Modal, {
title: '需求说明',
open: _requirementModalVisible[0],
@@ -1047,7 +1187,7 @@ const Component = function() {
React.createElement('div', { style: reqSectionStyle }, '1.面包屑:'),
React.createElement('div', { style: reqSubStyle }, '1.1.业务管理-车辆租赁合同'),
React.createElement('div', { style: reqSectionStyle }, '2.筛选:'),
React.createElement('div', { style: reqSubStyle }, '2.1.支持通过合同编码、项目名称、客户名称、签约公司、审批状态、合同状态、业务部门、业务负责人、合同类型、创建人、合同结束日期等条件进行筛选,右侧为重置、查询、展开/收起筛选条件以3列显示默认显示一行点击展开/收起对筛选栏卡片进行展开/收起所有筛选条件),点击查询后,筛选条件与列表内容联动。点击重置会回到默认筛选条件并在列表展示结果:'),
React.createElement('div', { style: reqSubStyle }, '2.1.支持通过合同编码、项目名称、客户名称、签约公司、审批状态、合同状态、业务部门、业务负责人、合同类型、合同审批类型、创建人、合同结束日期等条件进行筛选,右侧为重置、查询、展开/收起筛选条件以3列显示默认显示一行点击展开/收起对筛选栏卡片进行展开/收起所有筛选条件),点击查询后,筛选条件与列表内容联动。点击重置会回到默认筛选条件并在列表展示结果:'),
React.createElement('div', { style: reqItemStyle }, '2.1.1.合同编码:选择器,支持从输入框内输入内容进行模糊搜索,下拉显示匹配选项;'),
React.createElement('div', { style: reqItemStyle }, '2.1.2.项目名称:选择器,支持从输入框内输入内容进行模糊搜索,下拉显示匹配选项;'),
React.createElement('div', { style: reqItemStyle }, '2.1.3.客户名称:选择器,支持从输入框内输入内容进行模糊搜索,下拉显示匹配选项;'),
@@ -1057,10 +1197,11 @@ const Component = function() {
React.createElement('div', { style: reqItemStyle }, '2.1.7.业务部门:选择器,支持全选或多选,拉取部门下所有业务相关部门;'),
React.createElement('div', { style: reqItemStyle }, '2.1.8.业务负责人:选择器,支持全选或多选,拉取所有业务相关部门下所有用户姓名;'),
React.createElement('div', { style: reqItemStyle }, '2.1.9.合同类型:选择器,支持全选或多选,选项为:全部、正式合同、试用合同;'),
React.createElement('div', { style: reqItemStyle }, '2.1.10.创建人:选择器,支持全选或多选,拉取所有业务相关部门下所有用户姓名'),
React.createElement('div', { style: reqItemStyle }, '2.1.11.合同结束日期:日期选择器,支持单输入框内双日历选择开始-结束时间'),
React.createElement('div', { style: reqItemStyle }, '2.1.10.合同审批类型:选择器,支持全选或多选,选项为:全部、标准合同审批、非标准合同审批'),
React.createElement('div', { style: reqItemStyle }, '2.1.11.创建人:选择器,支持全选或多选,拉取所有业务相关部门下所有用户姓名'),
React.createElement('div', { style: reqItemStyle }, '2.1.12.合同结束日期:日期选择器,支持单输入框内双日历选择开始-结束时间;'),
React.createElement('div', { style: reqSectionStyle }, '3.列表:'),
React.createElement('div', { style: reqSubStyle }, '3.1.列表展示所有租赁合同信息,字段依次为:合同编码、项目名称、租赁车辆数、已交车辆数、审批状态、合同状态、客户名称、签约公司、业务部门、业务负责人、合同类型、合同结束日期、客户联系人、联系电话、创建人、创建时间、更新人、最后更新时间、备注、操作;列表右上角为新增、导出;'),
React.createElement('div', { style: reqSubStyle }, '3.1.列表展示所有租赁合同信息,字段依次为:合同编码、项目名称、租赁车辆数、已交车辆数、审批状态、合同状态、客户名称、签约公司、业务部门、业务负责人、合同类型、合同审批类型、合同结束日期、客户联系人、联系电话、创建人、创建时间、更新人、最后更新时间、备注、操作;列表右上角为新增、导出;'),
React.createElement('div', { style: reqItemStyle }, '3.1.1.合同编码:显示租赁合同对应合同编码;'),
React.createElement('div', { style: reqItemStyle }, '3.1.2.项目名称:显示租赁合同对应项目名称;'),
React.createElement('div', { style: reqItemStyle }, '3.1.3.租赁车辆数:显示租赁车辆数,点击显示气泡卡片,卡片中列表显示:车辆类型、品牌、型号、车牌号、实际交车日期;'),
@@ -1089,29 +1230,31 @@ const Component = function() {
React.createElement('div', { style: reqItemStyle }, '3.1.8.业务部门:显示租赁合同创建时所选业务部门,业务部门来自部门表(业务组);'),
React.createElement('div', { style: reqItemStyle }, '3.1.9.业务负责人:显示租赁合同创建时所选业务负责人,与业务部门联动,查询该业务组下人员;'),
React.createElement('div', { style: reqItemStyle }, '3.1.10.合同类型:显示租赁合同类型,类型包括:正式合同、试用合同,于创建租赁合同时选取;'),
React.createElement('div', { style: reqItemStyle }, '3.1.11.合同结束日期:显示租赁合同结束日期精确至日格式为YYYY-MM-DD'),
React.createElement('div', { style: reqItemStyle }, '3.1.12.客户联系人:显示租赁合同客户联系人姓名,客户联系人姓名来自「客户管理」-「联系人」'),
React.createElement('div', { style: reqItemStyle }, '3.1.13.联系电话:显示租赁合同客户联系电话,客户联系电话来自「客户管理」-「联系人手机」;'),
React.createElement('div', { style: reqItemStyle }, '3.1.14.创建人:显示租赁合同创建人姓名,取自操作用户姓名'),
React.createElement('div', { style: reqItemStyle }, '3.1.15.创建时间:显示租赁合同创建时间精确至分钟格式为YYYY-MM-DD HH:MM;'),
React.createElement('div', { style: reqItemStyle }, '3.1.16.更新人:显示租赁合同最后一次更新人姓名,取自操作用户姓名,如无则显示:-'),
React.createElement('div', { style: reqItemStyle }, '3.1.17.最后更新时间:显示租赁合同最后一次更新时间精确至分钟格式为YYYY-MM-DD HH:MM,如无则显示:-;'),
React.createElement('div', { style: reqItemStyle }, '3.1.18.备注:显示租赁合同创建时输入的备注信息,如无则显示:-'),
React.createElement('div', { style: reqItemStyle }, '3.1.19.操作:操作分为:查看、编辑、新增车辆、续签合同、删除合同、撤回合同、添加被授权人、附加费用、变更为三方合同、转正式合同、终止合同'),
React.createElement('div', { style: reqSubItemStyle }, '3.1.19.1.查看:跳转车辆租赁合同-查看'),
React.createElement('div', { style: reqSubItemStyle }, '3.1.19.2.编辑:当「合同状态」为「草稿」时显示,点击跳转编辑租赁合同页面,编辑租赁合同页面可输入项参考「新增租赁合同」页面,并支持对保存时已填内容进行修改'),
React.createElement('div', { style: reqSubItemStyle }, '3.1.19.3.新增车辆:当「合同状态」为「合同进行中」时显示,仅能在租赁订单信息卡片下新订单中进行车辆新增;新增车辆提交后触发重新审核流程,审核通过后生效(不影响原有合同正常业务)'),
React.createElement('div', { style: reqSubItemStyle }, '3.1.19.4.续签合同:当「合同状态」为「合同进行中」、「合同到期」时显示,点击跳转车辆租赁合同-续签合同页,提交时重新触发租赁合同审核流程'),
React.createElement('div', { style: reqSubItemStyle }, '3.1.19.5.删除合同:当「合同状态」为「草稿」时显示,点击删除合同时进行二次确认,提示语:是否确认删除该合同草稿'),
React.createElement('div', { style: reqSubItemStyle }, '3.1.19.6.撤回合同:当「合同状态」为「已提交审核」时显示,点击撤回合同时进行二次确认,提示语:是否确认撤回该合同;'),
React.createElement('div', { style: reqSubItemStyle }, '3.1.19.7.添加被授权人:当「合同状态」为「合同进行中」时显示,点击弹出卡片,卡片中可编辑被授权人、被授权人联系电话、被授权人身份证,同时支持添加一行、删除已有行等操作;添加被授权人触发重新审核流程,审核通过后生效'),
React.createElement('div', { style: reqSubItemStyle }, '3.1.19.8.附加费用:当「合同状态」为「合同进行中」时显示,点击弹出卡片,卡片中显示该租赁合同内:车辆类型、品牌、型号、车牌号,同时可对服务项目、费用、生效时间进行编辑,触发租赁合同审核流程,审核通过后生效;'),
React.createElement('div', { style: reqSubItemStyle }, '3.1.19.8.1.服务项目:代处理费用、罚款、违章处理违约金、未参加安全培训、车辆出险、年检年审违约、停车费、设备损坏金(包含易损件)、清洗费、上门收车人工费、上门收车送车行驶费、上门收车基础服务费、保险上浮、保养费用、补办驾驶证、补办牌照、补办营运证、补办加氢证、借用备用钥匙、补配钥匙、租金、氢气费-客、退还车氢量差、能源费补缴、能源费退款、送车上门人工费、送车上门送车行驶费、送车上门基础服务费、保证金、氢气预付费、维修费用、ETC-客、ETC卡缺损费、ETC设备缺损费、电费-客、未结算保养费、未结算维修费、车损费、工具损坏或丢失费、证件费、广告损坏费、送车服务费、接车服务费、补办行驶证、超赔险、轮胎磨损费、无忧包、轮胎保、养护保、尾板'),
React.createElement('div', { style: reqSubItemStyle }, '3.1.19.8.2.费用输入框后缀为元支持2位小数输入'),
React.createElement('div', { style: reqSubItemStyle }, '3.1.19.8.3.生效时间:日期选择器,精确至日'),
React.createElement('div', { style: reqSubItemStyle }, '3.1.19.9.变更为三方合同:当「合同状态」为「合同进行中」时显示,点击跳转车辆租赁合同-变更为三方合同页面,提交时重新触发租赁合同审核流程;'),
React.createElement('div', { style: reqSubItemStyle }, '3.1.19.10.转正式合同:当「合同类型」为「试用合同」时显示,点击跳转车辆租赁合同-转正式合同页面,提交时重新触发租赁合同审核流程;'),
React.createElement('div', { style: reqSubItemStyle }, '3.1.19.11.终止合同:当「合同状态」为「合同进行中」时显示,点击后进行二次确认,提示语:是否确认终止合同,确认按钮为提交审核,会重新发起合同审核流程,审核通过后,合同状态变更为:已结束')
React.createElement('div', { style: reqItemStyle }, '3.1.11.合同审批类型:显示租赁合同创建时所选合同审批类型,包括:标准合同审批、非标准合同审批'),
React.createElement('div', { style: reqItemStyle }, '3.1.12.合同结束日期:显示租赁合同结束日期精确至日格式为YYYY-MM-DD'),
React.createElement('div', { style: reqItemStyle }, '3.1.13.客户联系人:显示租赁合同客户联系人姓名,客户联系人姓名来自「客户管理」-「联系人」;'),
React.createElement('div', { style: reqItemStyle }, '3.1.14.联系电话:显示租赁合同客户联系电话,客户联系电话来自「客户管理」-「联系人手机」'),
React.createElement('div', { style: reqItemStyle }, '3.1.15.创建:显示租赁合同创建人姓名,取自操作用户姓名;'),
React.createElement('div', { style: reqItemStyle }, '3.1.16.创建时间:显示租赁合同创建时间精确至分钟格式为YYYY-MM-DD HH:MM;'),
React.createElement('div', { style: reqItemStyle }, '3.1.17.更新人:显示租赁合同最后一次更新人姓名,取自操作用户姓名,如无则显示:-'),
React.createElement('div', { style: reqItemStyle }, '3.1.18.最后更新时间:显示租赁合同最后一次更新时间精确至分钟格式为YYYY-MM-DD HH:MM,如无则显示:-;'),
React.createElement('div', { style: reqItemStyle }, '3.1.19.备注:显示租赁合同创建时输入的备注信息,如无则显示:-'),
React.createElement('div', { style: reqItemStyle }, '3.1.20.操作:操作分为:查看、编辑、新增车辆、续签合同、删除合同、撤回合同、添加被授权人、附加费用、变更为三方合同、转正式合同、终止合同、上传盖章合同'),
React.createElement('div', { style: reqSubItemStyle }, '3.1.20.1.查看:跳转车辆租赁合同-查看'),
React.createElement('div', { style: reqSubItemStyle }, '3.1.20.2.编辑:当「合同状态」为「草稿」时显示,点击跳转编辑租赁合同页面,编辑租赁合同页面可输入项参考「新增租赁合同」页面,并支持对保存时已填内容进行修改'),
React.createElement('div', { style: reqSubItemStyle }, '3.1.20.3.新增车辆:当「合同状态」为「合同进行中」时显示,仅能在租赁订单信息卡片下新订单中进行车辆新增;新增车辆提交后触发重新审核流程,审核通过后生效(不影响原有合同正常业务)'),
React.createElement('div', { style: reqSubItemStyle }, '3.1.20.4.续签合同:当「合同状态」为「合同进行中」、「合同到期」时显示,点击跳转车辆租赁合同-续签合同页,提交时重新触发租赁合同审核流程'),
React.createElement('div', { style: reqSubItemStyle }, '3.1.20.5.删除合同:当「合同状态」为「草稿」时显示,点击删除合同时进行二次确认,提示语:是否确认删除该合同草稿'),
React.createElement('div', { style: reqSubItemStyle }, '3.1.20.6.撤回合同:当「合同状态」为「已提交审核」时显示,点击撤回合同时进行二次确认,提示语:是否确认撤回该合同'),
React.createElement('div', { style: reqSubItemStyle }, '3.1.20.7.添加被授权人:当「合同状态」为「合同进行中」时显示,点击弹出卡片,卡片中可编辑被授权人、被授权人联系电话、被授权人身份证,同时支持添加一行、删除已有行等操作;添加被授权人触发重新审核流程,审核通过后生效;'),
React.createElement('div', { style: reqSubItemStyle }, '3.1.20.8.附加费用:当「合同状态」为「合同进行中」时显示,点击弹出卡片,卡片中显示该租赁合同内:车辆类型、品牌、型号、车牌号,同时可对服务项目、费用、生效时间进行编辑,触发租赁合同审核流程,审核通过后生效'),
React.createElement('div', { style: reqSubItemStyle }, '3.1.20.8.1.服务项目:代处理费用、罚款、违章处理违约金、未参加安全培训、车辆出险、年检年审违约、停车费、设备损坏金(包含易损件)、清洗费、上门收车人工费、上门收车送车行驶费、上门收车基础服务费、保险上浮、保养费用、补办驾驶证、补办牌照、补办营运证、补办加氢证、借用备用钥匙、补配钥匙、租金、氢气费-客、退还车氢量差、能源费补缴、能源费退款、送车上门人工费、送车上门送车行驶费、送车上门基础服务费、保证金、氢气预付费、维修费用、ETC-客、ETC卡缺损费、ETC设备缺损费、电费-客、未结算保养费、未结算维修费、车损费、工具损坏或丢失费、证件费、广告损坏费、送车服务费、接车服务费、补办行驶证、超赔险、轮胎磨损费、无忧包、轮胎保、养护保、尾板'),
React.createElement('div', { style: reqSubItemStyle }, '3.1.20.8.2.费用输入框后缀为元支持2位小数输入'),
React.createElement('div', { style: reqSubItemStyle }, '3.1.20.8.3.生效时间:日期选择器,精确至日'),
React.createElement('div', { style: reqSubItemStyle }, '3.1.20.9.变更为三方合同:当「合同状态」为「合同进行中」时显示,点击跳转车辆租赁合同-变更为三方合同页面,提交时重新触发租赁合同审核流程;'),
React.createElement('div', { style: reqSubItemStyle }, '3.1.20.10.转正式合同:当「合同类型」为「试用合同」时显示,点击后跳转车辆租赁合同-转正式合同页面,提交时重新触发租赁合同审核流程'),
React.createElement('div', { style: reqSubItemStyle }, '3.1.20.11.终止合同:当「合同状态」为「合同进行中」时显示,点击后进行二次确认,提示语:是否确认终止合同,确认按钮为提交审核,会重新发起合同审核流程,审核通过后,合同状态变更为:已结束;'),
React.createElement('div', { style: reqSubItemStyle }, '3.1.20.12.上传盖章合同:当「审批状态」为「审批通过」且法务审核环节尚未上传盖章合同附件时,在「更多」中显示,仅法务部员工可见并可操作;点击后弹出上传窗口,可浏览本地文件上传,支持多文件;上传完成后关闭该入口(列表不再展示「上传盖章合同」);')
))
)
);