车辆租赁合同:列表页需求同步、审批/合同状态重定义、需求说明弹窗更新(2026年3月3日版本)

Made-with: Cursor
This commit is contained in:
王冕
2026-03-03 04:08:27 +08:00
parent b2f96de4c4
commit 3be6b02e9a
11 changed files with 2250 additions and 746 deletions

File diff suppressed because one or more lines are too long

View File

@@ -61,6 +61,8 @@ const Component = function() {
var _deleteModalRecord = useState(null);
var _withdrawModalVisible = useState(false);
var _withdrawModalRecord = useState(null);
var _terminateModalVisible = useState(false);
var _terminateModalRecord = useState(null);
var _requirementModalVisible = useState(false);
// 模拟选项(与新增租赁合同保持一致)
@@ -91,22 +93,24 @@ const Component = function() {
{ value: '上海羚牛', label: '上海羚牛' },
{ value: '广东羚牛', label: '广东羚牛' }
];
// 审批状态:待审批、审批中、审批通过、审批驳回、未提交(无已结束,已结束归属合同状态)
var approvalStatusOptions = [
{ value: '全部', label: '全部' },
{ value: '待审批', label: '待审批' },
{ value: '审批中', label: '审批中' },
{ value: '审批通过', label: '审批通过' },
{ value: '审批驳回', label: '审批驳回' },
{ value: '未提交', label: '未提交' },
{ value: '已结束', label: '已结束' }
{ value: '未提交', label: '未提交' }
];
// 合同状态:草稿、变更、合同进行中、到期合同、已提交审批、已结束
var contractStatusOptions = [
{ value: '全部', label: '全部' },
{ value: '草稿', label: '草稿' },
{ value: '变更', label: '变更' },
{ value: '合同进行中', label: '合同进行中' },
{ value: '到期合同', label: '到期合同' },
{ value: '已提交审批', label: '已提交审批' }
{ value: '已提交审批', label: '已提交审批' },
{ value: '已结束', label: '已结束' }
];
var contractTypeOptions = [
{ value: '全部', label: '全部' },
@@ -127,8 +131,7 @@ const Component = function() {
];
// 模拟列表数据:按审批状态 × 合同状态组合生成样例
// 审批状态:待审批、审批中、审批通过、审批驳回、未提交、已结束
// 合同状态:草稿、变更、合同进行中、到期合同、已提交审批
// 合同状态:草稿、变更、合同进行中、到期合同、已提交审批、已结束
var rawList = [
// 1. 未提交 + 草稿(仅保存未提交)
{
@@ -335,7 +338,7 @@ const Component = function() {
updateTime: '2025-02-23 09:00',
remark: '驳回原因:费用条款需调整'
},
// 9. 已结束 + 到期合同(审批已通过但合同结束日期已过)
// 9. 审批通过 + 到期合同(审批已通过但合同结束日期已过)
{
id: '9',
contractCode: 'HT-ZL-2024-009',
@@ -345,7 +348,7 @@ const Component = function() {
{ vehicleType: '18吨双飞翼货车-重型厢式货车', brand: '品牌B', model: '型号B1', plateNo: '苏F90009', actualDelivery: '2024-03-01 09:00' },
{ vehicleType: '4.5吨冷链车-轻型厢式货车', brand: '品牌A', model: '型号A1', plateNo: '苏F90010', actualDelivery: '2024-03-02 10:00' }
],
approvalStatus: '已结束',
approvalStatus: '审批通过',
contractStatus: '到期合同',
customerName: '杭州某某租赁有限公司',
signingCompany: '嘉兴羚牛',
@@ -361,7 +364,7 @@ const Component = function() {
updateTime: '2024-12-20 16:00',
remark: '已到期可续签'
},
// 10. 已结束 + 到期合同(合同日期已过
// 10. 审批通过 + 已结束(操作列终止合同并完成审核
{
id: '10',
contractCode: 'HT-ZL-2024-010',
@@ -370,8 +373,8 @@ const Component = function() {
vehicles: [
{ vehicleType: '公务用车/小客车-小型普通客车', brand: '品牌C', model: '型号C1', plateNo: '苏L00100', actualDelivery: '2024-06-01 11:00' }
],
approvalStatus: '已结束',
contractStatus: '到期合同',
approvalStatus: '审批通过',
contractStatus: '已结束',
customerName: '嘉兴某某物流有限公司',
signingCompany: '嘉兴羚牛',
businessDept: '业务1部',
@@ -613,12 +616,12 @@ const Component = function() {
var approval = record.approvalStatus;
var items = [];
if (status === '草稿') {
items.push({ key: 'edit', label: '编辑合同', onClick: function() { message.info('编辑合同(原型)'); } });
items.push({ key: 'edit', label: '编辑', onClick: function() { message.info('编辑(原型)'); } });
items.push({ key: 'del', label: '删除合同', danger: true, onClick: function() { _deleteModalRecord[1](record); _deleteModalVisible[1](true); } });
}
if (status === '合同进行中') {
items.push({ key: 'addVehicle', label: '新增车辆', onClick: function() { message.info('新增车辆(原型)'); } });
items.push({ key: 'renew', label: '合同续签', onClick: function() { message.info('合同续签(原型)'); } });
items.push({ key: 'renew', label: '续签合同', onClick: function() { message.info('续签合同(原型)'); } });
items.push({ key: 'authorized', label: '添加被授权人', onClick: function() { _authorizedModalRecord[1](record); _authorizedList[1]([{ name: '', phone: '', idCard: '' }]); _authorizedModalVisible[1](true); } });
items.push({ key: 'extraFee', label: '附加费用', onClick: function() {
_extraFeeModalRecord[1](record);
@@ -636,15 +639,17 @@ const Component = function() {
}));
_extraFeeModalVisible[1](true);
} });
items.push({ key: 'toTripartite', label: '变更为三方合同', onClick: function() { message.info('变更为三方合同(原型)'); } });
items.push({ key: 'terminate', label: '终止合同', danger: true, onClick: function() { _terminateModalRecord[1](record); _terminateModalVisible[1](true); } });
}
if (status === '到期合同') {
items.push({ key: 'renew2', label: '合同续签', onClick: function() { message.info('合同续签(原型)'); } });
items.push({ key: 'renew2', label: '续签合同', onClick: function() { message.info('续签合同(原型)'); } });
}
if (status === '已提交审批' && approval !== '审批驳回') {
items.push({ key: 'withdraw', label: '撤回合同', onClick: function() { _withdrawModalRecord[1](record); _withdrawModalVisible[1](true); } });
}
if (approval === '审批驳回') {
items.push({ key: 'editReject', label: '编辑合同', onClick: function() { message.info('编辑合同(原型)'); } });
items.push({ key: 'editReject', label: '编辑', onClick: function() { message.info('编辑(原型)'); } });
}
if (type === '试用合同') {
items.push({ key: 'toFormal', label: '转正式合同', onClick: function() { message.info('转正式合同(原型)'); } });
@@ -667,7 +672,7 @@ const Component = function() {
return React.createElement(
Space,
{ size: 4, wrap: true },
React.createElement(Button, { type: 'link', size: 'small', onClick: function() { message.info('查看合同(原型'); } }, '查看合同'),
React.createElement(Button, { type: 'link', size: 'small', onClick: function() { message.info('查看(跳转车辆租赁合同-查看'); } }, '查看'),
moreDropdown
);
}
@@ -891,7 +896,7 @@ const Component = function() {
React.createElement('div', { style: { marginBottom: 16, display: 'flex', justifyContent: 'space-between', alignItems: 'center', flexWrap: 'wrap', gap: 8 } },
React.createElement(Button, { onClick: function() { message.info('租赁费用模板(原型)'); } }, '租赁费用模板'),
React.createElement('div', { style: { display: 'flex', gap: 8 } },
React.createElement(Button, { type: 'primary', onClick: function() { message.info('请在原型菜单列表中点击:业务管理-车辆租赁合同-新建合同 查看具体原型'); } }, '新'),
React.createElement(Button, { type: 'primary', onClick: function() { message.info('请在原型菜单列表中点击:业务管理-车辆租赁合同-新建合同 查看具体原型'); } }, '新'),
React.createElement(Button, { onClick: function() { message.info('根据筛选条件,导出相应记录'); } }, '导出')
)
),
@@ -934,6 +939,18 @@ const Component = function() {
okText: '确定',
cancelText: '取消'
}),
React.createElement(Modal, {
title: '是否确认终止合同',
open: _terminateModalVisible[0],
onCancel: function() { _terminateModalVisible[1](false); _terminateModalRecord[1](null); },
onOk: function() {
message.success('已提交审核(原型),审核通过后合同状态变更为已结束');
_terminateModalVisible[1](false);
_terminateModalRecord[1](null);
},
okText: '提交审核',
cancelText: '取消'
}),
React.createElement(Modal, {
title: '添加被授权人',
open: _authorizedModalVisible[0],
@@ -993,7 +1010,8 @@ const Component = function() {
footer: React.createElement(Button, { onClick: function() { _requirementModalVisible[1](false); } }, '关闭'),
bodyStyle: { maxHeight: '70vh', overflow: 'auto' }
}, React.createElement('div', { style: { padding: '8px 0' } },
React.createElement('div', { style: reqTitleStyle }, '租赁合同管理'),
React.createElement('div', { style: reqTitleStyle }, '车辆租赁合同2026年3月3日版本'),
React.createElement('div', { style: { fontSize: 14, marginBottom: 12, color: 'rgba(0,0,0,0.85)' } }, '一个「数字化资产ONEOS运管平台」中的「车辆租赁合同」模块'),
React.createElement('div', { style: reqSectionStyle }, '1.面包屑:'),
React.createElement('div', { style: reqSubStyle }, '1.1.业务管理-车辆租赁合同'),
React.createElement('div', { style: reqSectionStyle }, '2.筛选:'),
@@ -1002,15 +1020,15 @@ const Component = function() {
React.createElement('div', { style: reqItemStyle }, '2.1.2.项目名称:选择器,支持从输入框内输入内容进行模糊搜索,下拉显示匹配选项;'),
React.createElement('div', { style: reqItemStyle }, '2.1.3.客户名称:选择器,支持从输入框内输入内容进行模糊搜索,下拉显示匹配选项;'),
React.createElement('div', { style: reqItemStyle }, '2.1.4.签约公司:选择器,显示租赁合同所有签约公司;'),
React.createElement('div', { style: reqItemStyle }, '2.1.5.审批状态:选择器,支持全选或多选,选项为:全部、待审批、审批中、审批通过、审批驳回、未提交、已结束,默认显示全部;'),
React.createElement('div', { style: reqItemStyle }, '2.1.6.合同状态:选择器,支持全选或多选,选项为:全部、草稿、变更、合同进行中、到期合同、已提交审批;'),
React.createElement('div', { style: reqItemStyle }, '2.1.5.审批状态:选择器,支持全选或多选,选项为:全部、待审批、审批中、审批通过、审批驳回、未提交,默认显示全部;'),
React.createElement('div', { style: reqItemStyle }, '2.1.6.合同状态:选择器,支持全选或多选,选项为:全部、草稿、变更、合同进行中、到期合同、已提交审批、已结束'),
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: 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.车辆数:显示车辆数,点击车辆数,显示气泡卡片,卡片中列表显示:车辆类型、品牌、型号、车牌号、实际交车日期;'),
@@ -1019,19 +1037,19 @@ const Component = function() {
React.createElement('div', { style: reqSubItemStyle }, '3.1.3.3.型号:显示租赁合同中对应车辆型号;'),
React.createElement('div', { style: reqSubItemStyle }, '3.1.3.4.车牌号:显示租赁合同中对应车牌号,无则显示为-,有则显示具体车牌号;'),
React.createElement('div', { style: reqSubItemStyle }, '3.1.3.5.实际交车日期显示租赁合同中对应车辆对应实际交车日期精确至分钟格式为YYYY-MM-DD HH:MM;'),
React.createElement('div', { style: reqItemStyle }, '3.1.4.审批状态:显示租赁合同实际审批状态,状态分为:待审批、审批中、审批通过、审批驳回、未提交、已结束'),
React.createElement('div', { style: reqItemStyle }, '3.1.4.审批状态:显示租赁合同实际审批状态,状态分为:待审批、审批中、审批通过、审批驳回、未提交;'),
React.createElement('div', { style: reqSubItemStyle }, '3.1.4.1.待审批:发起人已提交,但还没有任何流程节点完成审批;'),
React.createElement('div', { style: reqSubItemStyle }, '3.1.4.2.审批中发起人已提交已有1个以上节点完成审批但未完成最终节点审批'),
React.createElement('div', { style: reqSubItemStyle }, '3.1.4.3.审批通过:发起人已提交,最终节点完成审批;'),
React.createElement('div', { style: reqSubItemStyle }, '3.1.4.4.审批驳回:发起人已提交,任意流程节点驳回,该状态下操作列支持编辑和重新提交;'),
React.createElement('div', { style: reqSubItemStyle }, '3.1.4.5.未提交:发起人仅保存,但未提交审批;'),
React.createElement('div', { style: reqSubItemStyle }, '3.1.4.6.已结束:发起人已提交,最终节点完成审批,但当前日期超过合同结束日期'),
React.createElement('div', { style: reqItemStyle }, '3.1.5.合同状态:显示租赁合同状态,状态分为:草稿、变更、合同进行中、到期合同、已提交审批;'),
React.createElement('div', { style: reqItemStyle }, '3.1.5.合同状态:显示租赁合同状态,状态分为:草稿、变更、合同进行中、到期合同、已提交审批、已结束'),
React.createElement('div', { style: reqSubItemStyle }, '3.1.5.1.草稿:发起人仅保存,但未提交审批;'),
React.createElement('div', { style: reqSubItemStyle }, '3.1.5.2.变更:发起人提交后,合同已通过审批的基础上,进行了「变更内容」操作,且已提交审批,但未完成最终节点审批;'),
React.createElement('div', { style: reqSubItemStyle }, '3.1.5.3.合同进行中:发起人提交后,合同完成最终节点审批;'),
React.createElement('div', { style: reqSubItemStyle }, '3.1.5.4.到期合同:发起人已提交,最终节点完成审批,但当前日期超过合同结束日期;'),
React.createElement('div', { style: reqSubItemStyle }, '3.1.5.5.已提交审批:发起人初次提交,但未完成最终节点审批;'),
React.createElement('div', { style: reqSubItemStyle }, '3.1.5.6.已结束:当前日期超过合同结束日期或在操作列终止合同并完成审核;'),
React.createElement('div', { style: reqItemStyle }, '3.1.6.客户名称:显示租赁合同创建时所选客户名称,客户名称来自「客户管理」-「客户名称」;'),
React.createElement('div', { style: reqItemStyle }, '3.1.7.签约公司:显示租赁合同创建时所选签约公司,签约公司来自组织机构表;'),
React.createElement('div', { style: reqItemStyle }, '3.1.8.业务部门:显示租赁合同创建时所选业务部门,业务部门来自部门表(业务组);'),
@@ -1045,19 +1063,21 @@ const Component = function() {
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: 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.合同续签:当「合同状态」为「合同进行中」、「合同到期」时显示,点击跳转新增租赁合同页面,同时反写所有旧合同内信息,支持修改。此外,合同续签操作产生的合同,合同编码一栏中编码后方显示:续签自旧合同编码xxxx同时查看新合同时下方变更记录中显示续签自哪个合同'),
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: { fontSize: 13, marginLeft: 64, marginTop: 2, marginBottom: 2, lineHeight: 1.6, color: 'rgba(0,0,0,0.65)' } }, '3.1.19.8.1.服务项目:代处理费用、罚款、违章处理违约金、未参加安全培训、车辆出险、年检年审违约、停车费、设备损坏金(包含易损件)、清洗费、上门收车人工费、上门收车送车行驶费、上门收车基础服务费、保险上浮、保养费用、补办驾驶证、补办牌照、补办营运证、补办加氢证、借用备用钥匙、补配钥匙、租金、氢气费-客、退还车氢量差、能源费补缴、能源费退款、送车上门人工费、送车上门送车行驶费、送车上门基础服务费、保证金、氢气预付费、维修费用、ETC-客、ETC卡缺损费、ETC设备缺损费、电费-客、未结算保养费、未结算维修费、车损费、工具损坏或丢失费、证件费、广告损坏费、送车服务费、接车服务费、补办行驶证、超赔险、轮胎磨损费、无忧包、轮胎保、养护保、尾板;'),
React.createElement('div', { style: { fontSize: 13, marginLeft: 64, marginTop: 2, marginBottom: 2, lineHeight: 1.6, color: 'rgba(0,0,0,0.65)' } }, '3.1.19.8.2.费用输入框后缀为元支持2位小数输入'),
React.createElement('div', { style: { fontSize: 13, marginLeft: 64, marginTop: 2, marginBottom: 2, lineHeight: 1.6, color: 'rgba(0,0,0,0.65)' } }, '3.1.19.8.3.生效时间:日期选择器,精确至日;'),
React.createElement('div', { style: reqSubItemStyle }, '3.1.19.9.转正式合同:当「合同类型」为「试用合同」时显示,点击跳转新增租赁合同页面,同时反写所有旧合同内信息,支持修改。此外,合同续签操作产生的合同,合同编码一栏中编码后方显示:续签自旧合同编码xxxx同时查看新合同时下方变更记录中显示续签自哪个合同')
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.终止合同:当「合同状态」为「合同进行中」时显示,点击后进行二次确认,提示语:是否确认终止合同,确认按钮为提交审核,会重新发起合同审核流程,审核通过后,合同状态变更为:已结束;')
))
)
);