对接快递100

This commit is contained in:
2025-11-20 22:28:31 +08:00
parent ff0eeeee30
commit 364cb1b58e
3 changed files with 260 additions and 190 deletions

View File

@@ -1,6 +1,6 @@
VITE_APP_NAME=后台管理(开发环境) VITE_APP_NAME=后台管理(开发环境)
#VITE_API_URL=http://127.0.0.1:9200/api VITE_API_URL=http://127.0.0.1:9200/api
#VITE_SERVER_API_URL=http://127.0.0.1:8000/api #VITE_SERVER_API_URL=http://127.0.0.1:8000/api
VITE_API_URL=https://cms-api.websoft.top/api #VITE_API_URL=https://cms-api.websoft.top/api

View File

@@ -20,7 +20,7 @@
<a-form-item label="配送方式" name="deliveryType"> <a-form-item label="配送方式" name="deliveryType">
<a-radio-group v-model:value="form.deliveryType"> <a-radio-group v-model:value="form.deliveryType">
<a-radio :value="0"> <a-radio :value="0">
<span style="color: #1890ff;">快递配送</span> <span style="color: #1890ff">快递配送</span>
</a-radio> </a-radio>
<a-radio :value="1">无需发货</a-radio> <a-radio :value="1">无需发货</a-radio>
<a-radio :value="2">商家送货</a-radio> <a-radio :value="2">商家送货</a-radio>
@@ -31,7 +31,7 @@
<a-form-item label="发货类型" name="deliveryMethod"> <a-form-item label="发货类型" name="deliveryMethod">
<a-radio-group v-model:value="form.deliveryMethod"> <a-radio-group v-model:value="form.deliveryMethod">
<a-radio value="manual"> <a-radio value="manual">
<span style="color: #1890ff;">手动填写</span> <span style="color: #1890ff">手动填写</span>
</a-radio> </a-radio>
<a-radio value="print">电子面单打印</a-radio> <a-radio value="print">电子面单打印</a-radio>
</a-radio-group> </a-radio-group>
@@ -69,27 +69,50 @@
</a-row> </a-row>
</a-form-item> </a-form-item>
<!-- 快递单号 --> <template v-if="form.deliveryType === 0">
<a-form-item <a-form-item label="发货人" name="sendName">
label="快递单号"
name="trackingNumber"
v-if="form.deliveryType === 0"
>
<a-input <a-input
v-model:value="form.trackingNumber" v-model:value="form.sendName"
placeholder="请输入快递单号" placeholder="请输入发货人"
:maxlength="50" :maxlength="50"
/> />
</a-form-item> </a-form-item>
<a-form-item label="发货人联系方式" name="sendPhone">
<!-- 分单发货 --> <a-input
<a-form-item label="分单发货" v-if="form.deliveryType === 0"> v-model:value="form.sendPhone"
<a-switch placeholder="请输入发货人联系方式"
v-model:checked="form.partialDelivery" :maxlength="50"
checked-children="支持"
un-checked-children="不支持"
/> />
</a-form-item> </a-form-item>
<a-form-item label="发货地址" name="sendAddress">
<a-input
v-model:value="form.sendAddress"
placeholder="请输入发货地址"
/>
</a-form-item>
</template>
<!-- 快递单号 -->
<!-- <a-form-item-->
<!-- label="快递单号"-->
<!-- name="trackingNumber"-->
<!-- v-if="form.deliveryType === 0"-->
<!-- >-->
<!-- <a-input-->
<!-- v-model:value="form.trackingNumber"-->
<!-- placeholder="请输入快递单号"-->
<!-- :maxlength="50"-->
<!-- />-->
<!-- </a-form-item>-->
<!-- &lt;!&ndash; 分单发货 &ndash;&gt;-->
<!-- <a-form-item label="分单发货" v-if="form.deliveryType === 0">-->
<!-- <a-switch-->
<!-- v-model:checked="form.partialDelivery"-->
<!-- checked-children="支持"-->
<!-- un-checked-children="不支持"-->
<!-- />-->
<!-- </a-form-item>-->
<!-- 发货备注 --> <!-- 发货备注 -->
<a-form-item label="发货备注" name="deliveryNote"> <a-form-item label="发货备注" name="deliveryNote">
@@ -154,17 +177,16 @@ const form = reactive({
trackingNumber: '', trackingNumber: '',
partialDelivery: false, partialDelivery: false,
deliveryNote: '', deliveryNote: '',
sendName: '',
sendPhone: '',
sendAddress: '',
deliveryTime: dayjs() as Dayjs deliveryTime: dayjs() as Dayjs
}); });
// 表单验证规则 // 表单验证规则
const rules = { const rules = {
deliveryType: [ deliveryType: [{ required: true, message: '请选择配送方式' }],
{ required: true, message: '请选择配送方式' } deliveryMethod: [{ required: true, message: '请选择发货类型' }],
],
deliveryMethod: [
{ required: true, message: '请选择发货类型' }
],
expressId: [ expressId: [
{ {
required: true, required: true,
@@ -177,21 +199,23 @@ const rules = {
} }
} }
], ],
trackingNumber: [ // trackingNumber: [
{ // {
required: true, // required: true,
message: '请输入快递单号', // message: '请输入快递单号',
validator: (_: any, value: any) => { // validator: (_: any, value: any) => {
if (form.deliveryType === 0 && !value) { // if (form.deliveryType === 0 && !value) {
return Promise.reject('请输入快递单号'); // return Promise.reject('请输入快递单号');
} // }
return Promise.resolve(); // return Promise.resolve();
} // }
} // }
], // ],
deliveryTime: [ deliveryTime: [{ required: true, message: '请选择发货时间' }],
{ required: true, message: '请选择发货时间' } sendName: [{ required: true, message: '请输入发货人' }],
] sendPhone: [{ required: true, message: '请输入发货人联系方式' }],
sendAddress: [{ required: true, message: '请输入发货地址' }],
}; };
const formRef = ref(); const formRef = ref();
@@ -219,7 +243,7 @@ const filterExpressOption = (input: string, option: any) => {
// 快递公司选择变化 // 快递公司选择变化
const onExpressChange = (value: number) => { const onExpressChange = (value: number) => {
const express = expressList.value.find(item => item.expressId === value); const express = expressList.value.find((item) => item.expressId === value);
if (express) { if (express) {
form.expressName = express.expressName || ''; form.expressName = express.expressName || '';
} }
@@ -246,21 +270,27 @@ const handleSubmit = async () => {
await validate(); await validate();
loading.value = true; loading.value = true;
const deliveryTime = toDateString(form.deliveryTime.toDate(), 'yyyy-MM-dd HH:mm:ss'); const deliveryTime = toDateString(
form.deliveryTime.toDate(),
'yyyy-MM-dd HH:mm:ss'
);
const updateData = { const updateData = {
...props.data, ...props.data,
deliveryStatus: 20, // 已发货 deliveryStatus: 20, // 已发货
deliveryType: form.deliveryType, deliveryType: form.deliveryType,
deliveryTime: deliveryTime, deliveryTime: deliveryTime,
deliveryNote: form.deliveryNote deliveryNote: form.deliveryNote,
}; };
// 如果是快递配送,添加快递信息 // 如果是快递配送,添加快递信息
if (form.deliveryType === 0) { if (form.deliveryType === 0) {
updateData.expressId = form.expressId; updateData.expressId = form.expressId;
updateData.expressName = form.expressName; updateData.sendName = form.sendName;
updateData.trackingNumber = form.trackingNumber; updateData.sendPhone = form.sendPhone;
updateData.sendAddress = form.sendAddress;
// updateData.expressName = form.expressName;
// updateData.trackingNumber = form.trackingNumber;
} }
// 分单发货 // 分单发货
@@ -274,6 +304,7 @@ const handleSubmit = async () => {
emit('done'); emit('done');
updateVisible(false); updateVisible(false);
} catch (error: any) { } catch (error: any) {
console.log(error)
message.error(error.message || '发货失败'); message.error(error.message || '发货失败');
} finally { } finally {
loading.value = false; loading.value = false;

View File

@@ -386,6 +386,43 @@
</a-descriptions> </a-descriptions>
</a-spin> </a-spin>
</a-card> </a-card>
<a-card v-if="form.shopOrderDelivery" title="发货信息" style="margin-bottom: 20px" :bordered="false">
<a-spin :spinning="loading">
<a-descriptions :column="2">
<a-descriptions-item
label="发货人"
:labelStyle="{ width: '90px', color: '#808080' }"
>
{{ form.shopOrderDelivery.sendName || '未填写' }}
</a-descriptions-item>
<a-descriptions-item
label="联系电话"
:labelStyle="{ width: '90px', color: '#808080' }"
>
{{ form.shopOrderDelivery.sendPhone || '未填写' }}
</a-descriptions-item>
<a-descriptions-item
label="发货地址"
:labelStyle="{ width: '90px', color: '#808080' }"
:span="2"
>
{{ form.shopOrderDelivery.sendAddress || '未填写' }}
</a-descriptions-item>
<a-descriptions-item
label="快递公司"
:labelStyle="{ width: '90px', color: '#808080' }"
>
{{ form.shopOrderDelivery.expressName || '未填写' }}
</a-descriptions-item>
<a-descriptions-item
label="物流单号"
:labelStyle="{ width: '90px', color: '#808080' }"
>
{{ form.shopOrderDelivery.expressNo || '未填写' }}
</a-descriptions-item>
</a-descriptions>
</a-spin>
</a-card>
<a-card title="商品信息" style="margin-bottom: 20px" :bordered="false"> <a-card title="商品信息" style="margin-bottom: 20px" :bordered="false">
<a-spin :spinning="loading"> <a-spin :spinning="loading">
@@ -640,6 +677,8 @@ const form = reactive<ShopOrder>({
selfTakeCode: undefined, selfTakeCode: undefined,
// 是否已收到赠品 // 是否已收到赠品
hasTakeGift: undefined, hasTakeGift: undefined,
// 发货信息
shopOrderDelivery: undefined
}); });
// 请求状态 // 请求状态