feat(web): 车辆租赁合同合同审批类型、法务上传盖章合同;新增数据分析页面;交车任务查看调整
- 租赁合同列表:合同审批类型筛选与列、需求说明;审批通过且未上传盖章件时法务可更多上传 - 新增/续签/转正式/查看等页同步合同审批类型及需求说明 - 新增数据分析:业务部业绩明细、物流业务月度统计、租赁客户氢费台账、租赁车辆收入明细 - 查看交车任务页面更新 Made-with: Cursor
This commit is contained in:
@@ -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.上传盖章合同:当「审批状态」为「审批通过」且法务审核环节尚未上传盖章合同附件时,在「更多」中显示,仅法务部员工可见并可操作;点击后弹出上传窗口,可浏览本地文件上传,支持多文件;上传完成后关闭该入口(列表不再展示「上传盖章合同」);')
|
||||
))
|
||||
)
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user