fix(web): 调拨接收信息改为直接选择停车场并同步查看页

- 接收信息去掉「接收区域」及停车地址分支,仅保留接收时间与停车场下拉
- 运维(接收)编辑、第三方/司机运输接收信息、查看页与需求说明文案对齐

Made-with: Cursor
This commit is contained in:
王冕
2026-04-02 18:10:33 +08:00
parent 2018e34473
commit 2681b12050
4 changed files with 54 additions and 271 deletions

View File

@@ -98,18 +98,10 @@ const Component = function () {
var receiveTime = receiveTimeState[0];
var setReceiveTime = receiveTimeState[1];
var receiveAreaTypeState = useState(undefined);
var receiveAreaType = receiveAreaTypeState[0];
var setReceiveAreaType = receiveAreaTypeState[1];
var receiveParkingState = useState(undefined);
var receiveParking = receiveParkingState[0];
var setReceiveParking = receiveParkingState[1];
var receiveAddressState = useState('');
var receiveAddress = receiveAddressState[0];
var setReceiveAddress = receiveAddressState[1];
var parkingOptions = useMemo(function () {
return [
{ value: 'p1', label: '西湖景区停车场' },
@@ -150,9 +142,7 @@ const Component = function () {
'',
'3.接收信息:',
'3.1.接收时间日期选择器精确至分钟格式YYYY-MM-DD HH:mm',
'3.2.接收区域:选择器,选项为:停车场、其他',
'3.3.停车场:必填项,选择器,选择已有停车场,接收区域为停车场时显示;',
'3.4.停车地址:必填项,输入框,支持自定义输入,接收区域为其他时显示;',
'3.2.停车场:必填项,选择器,直接选择已有停车场',
'',
'4.调拨车辆清单;',
'#以表格方式展示,反写新增调拨时的整个清单:',
@@ -197,13 +187,7 @@ const Component = function () {
function runValidate() {
var e = {};
if (!receiveTime) e.receiveTime = '请选择接收时间';
if (!receiveAreaType) e.receiveAreaType = '请选择接收区域';
if (receiveAreaType === '停车场') {
if (!receiveParking) e.receiveParking = '请选择停车场';
}
if (receiveAreaType === '其他') {
if (!String(receiveAddress || '').trim()) e.receiveAddress = '请输入停车地址';
}
for (var i = 0; i < (vehicles || []).length; i++) {
var r = vehicles[i] || {};
if (!String(r.arriveMileageKm || '').trim()) e['row_' + i + '_arrMile'] = '请输入到达时里程';
@@ -229,7 +213,7 @@ const Component = function () {
message.success('已提交(原型)');
}
});
}, [receiveTime, receiveAreaType, receiveParking, receiveAddress, vehicles]);
}, [receiveTime, receiveParking, vehicles]);
var handleSave = useCallback(function () {
message.success('已保存至列表页(原型:不校验必填项)');
@@ -459,7 +443,7 @@ const Component = function () {
{ title: '接收信息', style: { marginBottom: 16 } },
React.createElement(
'div',
{ style: { display: 'grid', gridTemplateColumns: '1fr 1fr 1fr', gap: '16px 24px', alignItems: 'start' } },
{ style: { display: 'grid', gridTemplateColumns: '1fr 1fr', gap: '16px 24px', alignItems: 'start' } },
React.createElement(
'div',
{ style: formItemStyle },
@@ -474,29 +458,8 @@ const Component = function () {
status: errors.receiveTime ? 'error' : undefined
}),
errors.receiveTime ? React.createElement('div', { style: { marginTop: 4, color: '#ff4d4f', fontSize: 12 } }, errors.receiveTime) : null
)
,
React.createElement(
'div',
{ style: formItemStyle },
React.createElement('div', { style: labelStyle }, reqStar, '接收区域'),
React.createElement(Select, {
placeholder: '请选择接收区域',
style: controlStyle,
value: receiveAreaType,
onChange: function (v) {
setReceiveAreaType(v);
setReceiveParking(undefined);
setReceiveAddress('');
},
allowClear: true,
options: [{ value: '停车场', label: '停车场' }, { value: '其他', label: '其他' }],
status: errors.receiveAreaType ? 'error' : undefined
}),
errors.receiveAreaType ? React.createElement('div', { style: { marginTop: 4, color: '#ff4d4f', fontSize: 12 } }, errors.receiveAreaType) : null
),
receiveAreaType === '停车场'
? React.createElement(
React.createElement(
'div',
{ style: formItemStyle },
React.createElement('div', { style: labelStyle }, reqStar, '停车场'),
@@ -513,26 +476,6 @@ const Component = function () {
}),
errors.receiveParking ? React.createElement('div', { style: { marginTop: 4, color: '#ff4d4f', fontSize: 12 } }, errors.receiveParking) : null
)
: receiveAreaType === '其他'
? React.createElement(
'div',
{ style: formItemStyle },
React.createElement('div', { style: labelStyle }, reqStar, '停车地址'),
React.createElement(Input, {
placeholder: '请输入停车地址',
style: controlStyle,
value: receiveAddress,
onChange: function (e) { setReceiveAddress(e.target.value); },
status: errors.receiveAddress ? 'error' : undefined
}),
errors.receiveAddress ? React.createElement('div', { style: { marginTop: 4, color: '#ff4d4f', fontSize: 12 } }, errors.receiveAddress) : null
)
: React.createElement(
'div',
{ style: formItemStyle },
React.createElement('div', { style: labelStyle }, '停车场/停车地址'),
React.createElement(Input, { placeholder: '请先选择接收区域', style: controlStyle, disabled: true })
)
)
),

View File

@@ -73,18 +73,10 @@ const Component = function () {
var receiveTime = receiveTimeState[0];
var setReceiveTime = receiveTimeState[1];
var receiveAreaTypeState = useState(undefined);
var receiveAreaType = receiveAreaTypeState[0];
var setReceiveAreaType = receiveAreaTypeState[1];
var receiveParkingState = useState(undefined);
var receiveParking = receiveParkingState[0];
var setReceiveParking = receiveParkingState[1];
var receiveAddressState = useState('');
var receiveAddress = receiveAddressState[0];
var setReceiveAddress = receiveAddressState[1];
var vehiclesState = useState(function () {
return buildVehicleRows(getMockSnapshot());
});
@@ -130,9 +122,7 @@ const Component = function () {
'',
'3.接收信息:',
'3.1.接收时间日期选择器精确至天格式YYYY-MM-DD',
'3.2.接收区域:选择器,选项为:停车场、其他',
'3.3.停车场:必填项,选择器,选择已有停车场,接收区域为停车场时显示;',
'3.4.停车地址:必填项,输入框,支持自定义输入,接收区域为其他时显示;',
'3.2.停车场:必填项,选择器,直接选择已有停车场',
'',
'4.调拨车辆清单;',
'#以表格方式展示,反写新增调拨时的整个清单:',
@@ -141,7 +131,7 @@ const Component = function () {
'4.3.车牌号:反写调拨信息提交时的车牌号;显示该车辆对应停车场;',
'',
'5.底部按钮为提交、保存、取消;',
'5.1.提交:点击提交校验必填项;提交后,调拨车辆清单中车辆停车区域会更新至接收区域对应停车场/停车地址',
'5.1.提交:点击提交校验必填项;提交后,调拨车辆清单中车辆停车区域会更新至所选停车场',
'5.2.保存:不校验必填项,只保存已填数据并保存在列表页;'
].join('\n');
@@ -166,13 +156,7 @@ const Component = function () {
function runValidate() {
var e = {};
if (!receiveTime) e.receiveTime = '请选择接收时间';
if (!receiveAreaType) e.receiveAreaType = '请选择接收区域';
if (receiveAreaType === '停车场') {
if (!receiveParking) e.receiveParking = '请选择停车场';
}
if (receiveAreaType === '其他') {
if (!String(receiveAddress || '').trim()) e.receiveAddress = '请输入停车地址';
}
setErrors(e);
return { ok: Object.keys(e).length === 0, err: e };
}
@@ -192,7 +176,7 @@ const Component = function () {
message.success('已提交(原型)');
}
});
}, [receiveTime, receiveAreaType, receiveParking, receiveAddress]);
}, [receiveTime, receiveParking]);
var handleSave = useCallback(function () {
message.success('已保存至列表页(原型:不校验必填项)');
@@ -399,7 +383,7 @@ const Component = function () {
{ title: '接收信息', style: { marginBottom: 16 } },
React.createElement(
'div',
{ style: { display: 'grid', gridTemplateColumns: '1fr 1fr 1fr', gap: '16px 24px', alignItems: 'start' } },
{ style: { display: 'grid', gridTemplateColumns: '1fr 1fr', gap: '16px 24px', alignItems: 'start' } },
React.createElement(
'div',
{ style: formItemStyle },
@@ -415,29 +399,8 @@ const Component = function () {
status: errors.receiveTime ? 'error' : undefined
}),
errors.receiveTime ? React.createElement('div', { style: { marginTop: 4, color: '#ff4d4f', fontSize: 12 } }, errors.receiveTime) : null
)
,
React.createElement(
'div',
{ style: formItemStyle },
React.createElement('div', { style: labelStyle }, reqStar, '接收区域'),
React.createElement(Select, {
placeholder: '请选择接收区域',
style: controlStyle,
value: receiveAreaType,
onChange: function (v) {
setReceiveAreaType(v);
setReceiveParking(undefined);
setReceiveAddress('');
},
allowClear: true,
options: [{ value: '停车场', label: '停车场' }, { value: '其他', label: '其他' }],
status: errors.receiveAreaType ? 'error' : undefined
}),
errors.receiveAreaType ? React.createElement('div', { style: { marginTop: 4, color: '#ff4d4f', fontSize: 12 } }, errors.receiveAreaType) : null
),
receiveAreaType === '停车场'
? React.createElement(
React.createElement(
'div',
{ style: formItemStyle },
React.createElement('div', { style: labelStyle }, reqStar, '停车场'),
@@ -454,26 +417,6 @@ const Component = function () {
}),
errors.receiveParking ? React.createElement('div', { style: { marginTop: 4, color: '#ff4d4f', fontSize: 12 } }, errors.receiveParking) : null
)
: receiveAreaType === '其他'
? React.createElement(
'div',
{ style: formItemStyle },
React.createElement('div', { style: labelStyle }, reqStar, '停车地址'),
React.createElement(Input, {
placeholder: '请输入停车地址',
style: controlStyle,
value: receiveAddress,
onChange: function (e) { setReceiveAddress(e.target.value); },
status: errors.receiveAddress ? 'error' : undefined
}),
errors.receiveAddress ? React.createElement('div', { style: { marginTop: 4, color: '#ff4d4f', fontSize: 12 } }, errors.receiveAddress) : null
)
: React.createElement(
'div',
{ style: formItemStyle },
React.createElement('div', { style: labelStyle }, '停车场/停车地址'),
React.createElement(Input, { placeholder: '请先选择接收区域', style: controlStyle, disabled: true })
)
)
),

View File

@@ -14,15 +14,9 @@ const Component = function () {
var DatePicker = antd.DatePicker;
var Input = antd.Input;
var Modal = antd.Modal;
var Select = antd.Select;
var Table = antd.Table;
var message = antd.message;
function filterOption(input, option) {
var label = (option && (option.label || option.children)) || '';
return String(label).toLowerCase().indexOf(String(input || '').toLowerCase()) >= 0;
}
function parseDateTime(s) {
var str = String(s || '').trim();
if (!str) return null;
@@ -46,9 +40,7 @@ const Component = function () {
transportPhone: '13800138000',
receivePersonName: '王芳',
receiveTimeStr: '2026-04-01 15:20',
receiveAreaType: '停车场',
receiveParkingName: '西湖景区停车场',
receiveAddress: '',
transferVehicles: [
{
id: 1,
@@ -90,15 +82,6 @@ const Component = function () {
var snapshot = useMemo(function () { return getMockSnapshot(); }, []);
var parkingOptions = useMemo(function () {
return [
{ value: '西湖景区停车场', label: '西湖景区停车场' },
{ value: '宁波江北停车场', label: '宁波江北停车场' },
{ value: '张江园区停车场', label: '张江园区停车场' },
{ value: '天河智慧停车场', label: '天河智慧停车场' }
];
}, []);
var requirementModalState = useState(false);
var requirementModalOpen = requirementModalState[0];
var setRequirementModalOpen = requirementModalState[1];
@@ -109,7 +92,7 @@ const Component = function () {
'参照「调拨管理-接收信息-司机运输」页面结构生成查看页:',
'1.调拨情况(只读)',
'2.调拨信息(只读)',
'3.接收信息(只读)',
'3.接收信息(只读):接收时间、停车场(直接展示所选停车场名称)',
'4.调拨车辆清单(只读,包含到达时里程/氢量/电量)',
'5.底部按钮仅保留「返回」。'
].join('\n');
@@ -247,7 +230,7 @@ const Component = function () {
{ title: '接收信息', style: { marginBottom: 16 } },
React.createElement(
'div',
{ style: { display: 'grid', gridTemplateColumns: '1fr 1fr 1fr', gap: '16px 24px', alignItems: 'start' } },
{ style: { display: 'grid', gridTemplateColumns: '1fr 1fr', gap: '16px 24px', alignItems: 'start' } },
React.createElement(
'div',
{ style: formItemStyle },
@@ -263,45 +246,15 @@ const Component = function () {
})
),
React.createElement(
'div',
{ style: formItemStyle },
React.createElement('div', { style: labelStyle }, '接收区域'),
React.createElement(Select, {
placeholder: '-',
style: controlStyle,
value: snapshot.receiveAreaType,
disabled: true,
options: [{ value: '停车场', label: '停车场' }, { value: '其他', label: '其他' }]
})
),
snapshot.receiveAreaType === '停车场'
? React.createElement(
'div',
{ style: formItemStyle },
React.createElement('div', { style: labelStyle }, '停车场'),
React.createElement(Select, {
placeholder: '-',
style: controlStyle,
value: snapshot.receiveParkingName,
disabled: true,
showSearch: true,
options: parkingOptions,
filterOption: filterOption
React.createElement(Input, {
value: snapshot.receiveParkingName || '',
readOnly: true,
style: readOnlyStyle
})
)
: snapshot.receiveAreaType === '其他'
? React.createElement(
'div',
{ style: formItemStyle },
React.createElement('div', { style: labelStyle }, '停车地址'),
React.createElement(Input, { style: controlStyle, value: snapshot.receiveAddress || '-', readOnly: true, style: readOnlyStyle })
)
: React.createElement(
'div',
{ style: formItemStyle },
React.createElement('div', { style: labelStyle }, '停车场/停车地址'),
React.createElement(Input, { placeholder: '-', style: controlStyle, disabled: true })
)
)
),

View File

@@ -54,9 +54,7 @@ const Component = function () {
receivePersonName: '王芳',
receiveInfo: {
receiveTime: '2026-04-02',
receiveAreaType: '停车场',
receiveParking: 'p3',
receiveAddress: ''
receiveParking: 'p3'
},
transferVehicles: [
{ id: 1, brand: '小鹏', model: 'P7', plateNo: '浙A11111', departParking: '西湖景区停车场' },
@@ -93,18 +91,10 @@ const Component = function () {
var receiveTime = receiveTimeState[0];
var setReceiveTime = receiveTimeState[1];
var receiveAreaTypeState = useState(snapshot.receiveInfo && snapshot.receiveInfo.receiveAreaType ? snapshot.receiveInfo.receiveAreaType : undefined);
var receiveAreaType = receiveAreaTypeState[0];
var setReceiveAreaType = receiveAreaTypeState[1];
var receiveParkingState = useState(snapshot.receiveInfo && snapshot.receiveInfo.receiveParking ? snapshot.receiveInfo.receiveParking : undefined);
var receiveParking = receiveParkingState[0];
var setReceiveParking = receiveParkingState[1];
var receiveAddressState = useState(snapshot.receiveInfo && snapshot.receiveInfo.receiveAddress ? snapshot.receiveInfo.receiveAddress : '');
var receiveAddress = receiveAddressState[0];
var setReceiveAddress = receiveAddressState[1];
var vehiclesState = useState(function () {
return buildVehicleRows(snapshot);
});
@@ -142,7 +132,7 @@ const Component = function () {
'',
'1.调拨情况:调拨日期、出发区域、接收区域、调拨原因为只读反写;',
'2.调拨信息:调拨方式、运输负责人、运输方联系方式、运输费用、运输合同附件、接收人员为只读反写;',
'3.接收信息:接收时间、接收区域、停车场/停车地址可编辑;',
'3.接收信息:接收时间、停车场(直接选择)可编辑;',
'4.底部按钮:提交、保存、取消。保存不校验必填项,提交校验必填项。'
].join('\n');
@@ -167,13 +157,7 @@ const Component = function () {
function runValidate() {
var e = {};
if (!receiveTime) e.receiveTime = '请选择接收时间';
if (!receiveAreaType) e.receiveAreaType = '请选择接收区域';
if (receiveAreaType === '停车场') {
if (!receiveParking) e.receiveParking = '请选择停车场';
}
if (receiveAreaType === '其他') {
if (!String(receiveAddress || '').trim()) e.receiveAddress = '请输入停车地址';
}
setErrors(e);
return { ok: Object.keys(e).length === 0, err: e };
}
@@ -193,7 +177,7 @@ const Component = function () {
message.success('已提交(原型)');
}
});
}, [receiveTime, receiveAreaType, receiveParking, receiveAddress]);
}, [receiveTime, receiveParking]);
var handleSave = useCallback(function () {
var nowStr = '';
@@ -418,7 +402,7 @@ const Component = function () {
{ title: '接收信息', style: { marginBottom: 16 } },
React.createElement(
'div',
{ style: { display: 'grid', gridTemplateColumns: '1fr 1fr 1fr', gap: '16px 24px', alignItems: 'start' } },
{ style: { display: 'grid', gridTemplateColumns: '1fr 1fr', gap: '16px 24px', alignItems: 'start' } },
React.createElement(
'div',
{ style: formItemStyle },
@@ -436,26 +420,6 @@ const Component = function () {
errors.receiveTime ? React.createElement('div', { style: { marginTop: 4, color: '#ff4d4f', fontSize: 12 } }, errors.receiveTime) : null
),
React.createElement(
'div',
{ style: formItemStyle },
React.createElement('div', { style: labelStyle }, reqStar, '接收区域'),
React.createElement(Select, {
placeholder: '请选择接收区域',
style: controlStyle,
value: receiveAreaType,
onChange: function (v) {
setReceiveAreaType(v);
setReceiveParking(undefined);
setReceiveAddress('');
},
allowClear: true,
options: [{ value: '停车场', label: '停车场' }, { value: '其他', label: '其他' }],
status: errors.receiveAreaType ? 'error' : undefined
}),
errors.receiveAreaType ? React.createElement('div', { style: { marginTop: 4, color: '#ff4d4f', fontSize: 12 } }, errors.receiveAreaType) : null
),
receiveAreaType === '停车场'
? React.createElement(
'div',
{ style: formItemStyle },
React.createElement('div', { style: labelStyle }, reqStar, '停车场'),
@@ -472,26 +436,6 @@ const Component = function () {
}),
errors.receiveParking ? React.createElement('div', { style: { marginTop: 4, color: '#ff4d4f', fontSize: 12 } }, errors.receiveParking) : null
)
: receiveAreaType === '其他'
? React.createElement(
'div',
{ style: formItemStyle },
React.createElement('div', { style: labelStyle }, reqStar, '停车地址'),
React.createElement(Input, {
placeholder: '请输入停车地址',
style: controlStyle,
value: receiveAddress,
onChange: function (e) { setReceiveAddress(e.target.value); },
status: errors.receiveAddress ? 'error' : undefined
}),
errors.receiveAddress ? React.createElement('div', { style: { marginTop: 4, color: '#ff4d4f', fontSize: 12 } }, errors.receiveAddress) : null
)
: React.createElement(
'div',
{ style: formItemStyle },
React.createElement('div', { style: labelStyle }, '停车场/停车地址'),
React.createElement(Input, { placeholder: '请先选择接收区域', style: controlStyle, disabled: true })
)
)
),