This commit is contained in:
aaron 2025-03-23 09:49:11 +08:00
parent 1a313b2632
commit 3b65790ff5

View File

@ -261,21 +261,38 @@
<a-form-item <a-form-item
v-if="formState.delivery_type === 'PICKUP'" v-if="formState.delivery_type === 'PICKUP'"
label="自提时间" label="自提时间"
name="pickup_time"
required required
> >
<a-date-picker <div class="time-range-wrapper">
v-model:value="pickupDateTime" <a-form-item
type="date" name="pickup_time_from"
show-time noStyle
format="YYYY-MM-DD HH:mm" >
placeholder="请选择自提日期和时间" <a-time-picker
style="width: 100%" v-model:value="pickupTimeFrom"
@change="updatePickupTime" format="HH:mm"
:disabled-date="disabledDate" placeholder="开始时间"
:show-time="{ format: 'HH:mm', minuteStep: 10 }" style="width: 100%"
/> @change="updatePickupTimeFrom"
<div class="form-item-help">请选择自提的日期和时间</div> :minute-step="10"
/>
</a-form-item>
<span class="time-separator"></span>
<a-form-item
name="pickup_time_to"
noStyle
>
<a-time-picker
v-model:value="pickupTimeTo"
format="HH:mm"
placeholder="结束时间"
style="width: 100%"
@change="updatePickupTimeTo"
:minute-step="10"
/>
</a-form-item>
</div>
<div class="form-item-help">请选择自提的时间范围</div>
</a-form-item> </a-form-item>
<a-form-item label="配送时间类型" name="delivery_time_type" required> <a-form-item label="配送时间类型" name="delivery_time_type" required>
@ -475,21 +492,38 @@
<a-form-item <a-form-item
v-if="editFormState.delivery_type === 'PICKUP'" v-if="editFormState.delivery_type === 'PICKUP'"
label="自提时间" label="自提时间"
name="pickup_time"
required required
> >
<a-date-picker <div class="time-range-wrapper">
v-model:value="editPickupDateTime" <a-form-item
type="date" name="pickup_time_from"
show-time noStyle
format="YYYY-MM-DD HH:mm" >
placeholder="请选择自提日期和时间" <a-time-picker
style="width: 100%" v-model:value="editPickupTimeFrom"
@change="updateEditPickupTime" format="HH:mm"
:disabled-date="disabledDate" placeholder="开始时间"
:show-time="{ format: 'HH:mm', minuteStep: 10 }" style="width: 100%"
/> @change="updateEditPickupTimeFrom"
<div class="form-item-help">请选择自提的日期和时间</div> :minute-step="10"
/>
</a-form-item>
<span class="time-separator"></span>
<a-form-item
name="pickup_time_to"
noStyle
>
<a-time-picker
v-model:value="editPickupTimeTo"
format="HH:mm"
placeholder="结束时间"
style="width: 100%"
@change="updateEditPickupTimeTo"
:minute-step="10"
/>
</a-form-item>
</div>
<div class="form-item-help">请选择自提的时间范围</div>
</a-form-item> </a-form-item>
<a-form-item label="配送时间类型" name="delivery_time_type" required> <a-form-item label="配送时间类型" name="delivery_time_type" required>
@ -588,7 +622,8 @@ export default defineComponent({
qty: 0, qty: 0,
delivery_type: 'DELIVERY', delivery_type: 'DELIVERY',
pickup_place: '', pickup_place: '',
pickup_time: '', pickup_time_from: '',
pickup_time_to: '',
delivery_time_type: 'IMMEDIATE', delivery_time_type: 'IMMEDIATE',
delivery_date: null delivery_date: null
}) })
@ -745,52 +780,79 @@ export default defineComponent({
qty: 0, qty: 0,
delivery_type: 'DELIVERY', delivery_type: 'DELIVERY',
pickup_place: '', pickup_place: '',
pickup_time: '', pickup_time_from: '',
pickup_time_to: '',
delivery_time_type: 'IMMEDIATE', delivery_time_type: 'IMMEDIATE',
delivery_date: null delivery_date: null
}) })
// //
const pickupDateTime = ref(null); const pickupDateTime = ref(null);
const pickupTimeFrom = ref(null);
const pickupTimeTo = ref(null);
// //
const editPickupDateTime = ref(null); const editPickupDateTime = ref(null);
const editPickupTimeFrom = ref(null);
const editPickupTimeTo = ref(null);
// //
const updatePickupTime = () => { const updatePickupTimeFrom = () => {
if (pickupDateTime.value) { if (pickupTimeFrom.value) {
formState.value.pickup_time = dayjs(pickupDateTime.value).format('YYYY-MM-DD HH:mm'); formState.value.pickup_time_from = dayjs(pickupTimeFrom.value).format('HH:mm');
} else { } else {
formState.value.pickup_time = ''; formState.value.pickup_time_from = '';
} }
}; };
// //
const updateEditPickupTime = () => { const updatePickupTimeTo = () => {
if (editPickupDateTime.value) { if (pickupTimeTo.value) {
editFormState.value.pickup_time = dayjs(editPickupDateTime.value).format('YYYY-MM-DD HH:mm'); formState.value.pickup_time_to = dayjs(pickupTimeTo.value).format('HH:mm');
} else { } else {
editFormState.value.pickup_time = ''; formState.value.pickup_time_to = '';
}
};
//
const updateEditPickupTimeFrom = () => {
if (editPickupTimeFrom.value) {
editFormState.value.pickup_time_from = dayjs(editPickupTimeFrom.value).format('HH:mm');
} else {
editFormState.value.pickup_time_from = '';
}
};
//
const updateEditPickupTimeTo = () => {
if (editPickupTimeTo.value) {
editFormState.value.pickup_time_to = dayjs(editPickupTimeTo.value).format('HH:mm');
} else {
editFormState.value.pickup_time_to = '';
} }
}; };
// delivery_type // delivery_type
watch(() => formState.value.delivery_type, (newType) => { watch(() => formState.value.delivery_type, (newType) => {
if (newType !== 'PICKUP') { if (newType !== 'PICKUP') {
pickupDateTime.value = null; pickupTimeFrom.value = null;
formState.value.pickup_time = ''; pickupTimeTo.value = null;
formState.value.pickup_time_from = '';
formState.value.pickup_time_to = '';
} }
}); });
// delivery_type // delivery_type
watch(() => editFormState.value.delivery_type, (newType) => { watch(() => editFormState.value.delivery_type, (newType) => {
if (newType !== 'PICKUP') { if (newType !== 'PICKUP') {
editPickupDateTime.value = null; editPickupTimeFrom.value = null;
editFormState.value.pickup_time = ''; editPickupTimeTo.value = null;
editFormState.value.pickup_time_from = '';
editFormState.value.pickup_time_to = '';
} }
}); });
// pickup_time // pickup_time_frompickup_time_to
const handleEdit = (record) => { const handleEdit = (record) => {
currentEditId.value = record.id currentEditId.value = record.id
editFormState.value = { editFormState.value = {
@ -807,21 +869,40 @@ export default defineComponent({
qty: record.qty || 0, qty: record.qty || 0,
delivery_type: record.delivery_type || 'DELIVERY', delivery_type: record.delivery_type || 'DELIVERY',
pickup_place: record.pickup_place || '', pickup_place: record.pickup_place || '',
pickup_time: record.pickup_time || '', pickup_time_from: record.pickup_time_from || '',
pickup_time_to: record.pickup_time_to || '',
delivery_time_type: record.delivery_time_type || 'IMMEDIATE', delivery_time_type: record.delivery_time_type || 'IMMEDIATE',
delivery_date: record.delivery_date || null delivery_date: record.delivery_date || null
} }
// pickup_time // pickup_time_from
if (record.pickup_time) { if (record.pickup_time_from) {
try { try {
editPickupDateTime.value = dayjs(record.pickup_time); //
const [hours, minutes] = record.pickup_time_from.split(':').map(num => parseInt(num, 10));
const today = dayjs();
editPickupTimeFrom.value = today.hour(hours).minute(minutes);
} catch (e) { } catch (e) {
console.error('解析自提时间失败:', e); console.error('解析自提开始时间失败:', e);
editPickupDateTime.value = null; editPickupTimeFrom.value = null;
} }
} else { } else {
editPickupDateTime.value = null; editPickupTimeFrom.value = null;
}
// pickup_time_to
if (record.pickup_time_to) {
try {
//
const [hours, minutes] = record.pickup_time_to.split(':').map(num => parseInt(num, 10));
const today = dayjs();
editPickupTimeTo.value = today.hour(hours).minute(minutes);
} catch (e) {
console.error('解析自提结束时间失败:', e);
editPickupTimeTo.value = null;
}
} else {
editPickupTimeTo.value = null;
} }
editModalVisible.value = true editModalVisible.value = true
@ -903,11 +984,13 @@ export default defineComponent({
qty: 0, qty: 0,
delivery_type: 'DELIVERY', delivery_type: 'DELIVERY',
pickup_place: '', pickup_place: '',
pickup_time: '', pickup_time_from: '',
pickup_time_to: '',
delivery_time_type: 'IMMEDIATE', delivery_time_type: 'IMMEDIATE',
delivery_date: null delivery_date: null
} }
editPickupDateTime.value = null; editPickupTimeFrom.value = null;
editPickupTimeTo.value = null;
editModalVisible.value = false editModalVisible.value = false
} }
@ -943,13 +1026,24 @@ export default defineComponent({
return Promise.resolve(); return Promise.resolve();
} }
}], }],
pickup_time: [{ pickup_time_from: [{
required: true, required: true,
message: '请输入自提时间', message: '请选择自提开始时间',
trigger: 'change', trigger: 'change',
validator: (rule, value) => { validator: (rule, value) => {
if (formState.value.delivery_type === 'PICKUP' && (!value || value.trim() === '')) { if (formState.value.delivery_type === 'PICKUP' && (!value || value.trim() === '')) {
return Promise.reject('请输入自提时间'); return Promise.reject('请选择自提开始时间');
}
return Promise.resolve();
}
}],
pickup_time_to: [{
required: true,
message: '请选择自提结束时间',
trigger: 'change',
validator: (rule, value) => {
if (formState.value.delivery_type === 'PICKUP' && (!value || value.trim() === '')) {
return Promise.reject('请选择自提结束时间');
} }
return Promise.resolve(); return Promise.resolve();
} }
@ -1050,11 +1144,13 @@ export default defineComponent({
qty: 0, qty: 0,
delivery_type: 'DELIVERY', delivery_type: 'DELIVERY',
pickup_place: '', pickup_place: '',
pickup_time: '', pickup_time_from: '',
pickup_time_to: '',
delivery_time_type: 'IMMEDIATE', delivery_time_type: 'IMMEDIATE',
delivery_date: null delivery_date: null
} }
pickupDateTime.value = null; pickupTimeFrom.value = null;
pickupTimeTo.value = null;
addModalVisible.value = false addModalVisible.value = false
} }
@ -1141,10 +1237,14 @@ export default defineComponent({
getStatusColor, getStatusColor,
handleToggleStatus, handleToggleStatus,
disabledDate, disabledDate,
pickupDateTime, pickupTimeFrom,
updatePickupTime, pickupTimeTo,
editPickupDateTime, updatePickupTimeFrom,
updateEditPickupTime, updatePickupTimeTo,
editPickupTimeFrom,
editPickupTimeTo,
updateEditPickupTimeFrom,
updateEditPickupTimeTo,
} }
} }
}) })
@ -1332,10 +1432,11 @@ export default defineComponent({
.time-range-wrapper { .time-range-wrapper {
display: flex; display: flex;
align-items: center; align-items: center;
gap: 8px;
} }
.time-separator { .time-separator {
margin: 0 8px; margin: 0;
color: rgba(0, 0, 0, 0.45); color: rgba(0, 0, 0, 0.45);
} }
</style> </style>