feat(shop): 优化发货弹窗文案及修复小程序配送方式判断

- deliveryModal.vue 中发货门店、发货人标签及提示文案,根据快递配送与商家送货动态显示
- 快递配送场景下新增寄件人信息同步至快递面单的小字说明和验证文案动态调整
- 修正小程序订单详情页 deliveryType 判断,新增 DELIVERY_TYPE_MAP 支持快递及商家送货标识
- 订单详情页收货信息卡片图标和配送门店名称根据实际配送方式动态显示
- 订单信息区新增配送方式字段,清晰展示快递配送、自提及商家送货三种状态
This commit is contained in:
2026-07-17 12:05:22 +08:00
parent 3edbb13a8d
commit bd814d00b0
2 changed files with 58 additions and 10 deletions

View File

@@ -72,3 +72,24 @@
- **真正的 `storeId=0` bug 根因**`xinlong-shop-taro/src/pages/store/orders/index.tsx:465``openShipModal``listShopStoreUser()` **没传 storeId**(默认 0即用户最初报的 `?storeId=0`
- **已修xinlong-shop-taro**`openShipModal` 内先 `getMyClerk()``storeId``listShopStoreUser({storeId})` 拉本门店店员;并默认选中 `userId === 当前登录人 userId` 的店员(`setSelectedClerkId(match.id)`)。`tsc --noEmit --types webpack-env` 该文件零新增报错(仅 162/208/212 三个项目既有错误,均在我未改动区域)。
- **教训**:跨项目时先用 glob/find 在多个候选项目里确认"哪个项目有该功能源码",再动手;不要凭域名/习惯默认锁定一个项目。本次因 `guilixu-taro``xinlong-shop-taro` 命名相近、且前者恰有 `getMyClerk` 等同名 API 而误判。
## 发货弹窗文案优化deliveryModal.vue
- 用户反馈"快递配送时发货人/联系人选门店是否不合理",分析结论:业务逻辑正确(发货人=寄件方=门店),问题在文案未区分"寄件方"与"承运方"。
- 改动 `src/views/shop/shopOrder/components/deliveryModal.vue`
- 「发货门店」标签动态化快递配送→「发货门店」商家送货→「配送门店」placeholder 同步动态)。
- 「发货人」标签动态化:快递配送→「寄件人」,商家送货→「发货人」(联系方式标签同理)。
- 提示文案动态化:快递配送说明"寄件人即为发货门店",商家送货说明"回填配送店员信息"。
- 快递配送时在寄件人字段下方加小字说明"寄件人信息将同步至快递面单"。
- 验证规则的 reject 文案同步动态化。
- 不涉及数据结构/接口变更,纯前端文案优化。
## 修复小程序订单详情页配送方式判断逻辑guilixu-taro
- 文件:`src/pages/order/detail.tsx`
- 问题:原代码 `isExpress = order.deliveryType === 0 || undefined`,无法区分 deliveryType=2商家送货
- 修复:
1. 新增 `DELIVERY_TYPE_MAP``0=快递配送, 1=自提, 2=商家送货`
2. 修正 `isExpress` 判断:`deliveryType === 0 || 2 || undefined` → 快递/商家送货都显示收货人信息
3. 收货信息卡片:商家送货显示🛵图标+配送门店名,快递配送显示📦图标
4. 订单信息区新增「配送方式」字段展示(使用 DELIVERY_TYPE_MAP
- deliveryType 值范围来自管理后台 deliveryModal.vue0=快递配送, 1=无需发货(自提), 2=商家送货

View File

@@ -88,10 +88,13 @@
<template v-if="form.deliveryType !== 1">
<!-- 发货门店快递配送=发货仓库商家送货=配送门店 -->
<a-form-item label="发货门店" name="sendStoreId">
<a-form-item
:label="form.deliveryType === 0 ? '发货门店' : '配送门店'"
name="sendStoreId"
>
<a-select
v-model:value="form.sendStoreId"
placeholder="请选择门店"
:placeholder="form.deliveryType === 0 ? '请选择发货门店' : '请选择配送门店'"
@change="onStoreChange"
>
<a-select-option
@@ -127,20 +130,36 @@
</a-form-item>
<div style="color: #999; font-size: 12px; margin: 4px 0 12px">
选择门店后将自动回填下方发货人信息可手动修改
{{
form.deliveryType === 0
? '选择发货门店后,将自动回填寄件人信息(快递配送时,寄件人即为发货门店)'
: '选择配送门店后,将自动回填配送店员信息'
}}可手动修改
</div>
<a-form-item label="发货人" name="sendName">
<a-form-item
:label="form.deliveryType === 0 ? '寄件人' : '发货人'"
name="sendName"
>
<a-input
v-model:value="form.sendName"
placeholder="请输入发货人"
:placeholder="form.deliveryType === 0 ? '请输入寄件人' : '请输入发货人'"
:maxlength="50"
/>
<div
v-if="form.deliveryType === 0"
style="color: #999; font-size: 12px; margin-top: 4px"
>
快递配送场景下寄件人信息将同步至快递面单
</div>
</a-form-item>
<a-form-item label="发货人联系方式" name="sendPhone">
<a-form-item
:label="form.deliveryType === 0 ? '寄件人联系方式' : '发货人联系方式'"
name="sendPhone"
>
<a-input
v-model:value="form.sendPhone"
placeholder="请输入发货人联系方式"
:placeholder="form.deliveryType === 0 ? '请输入寄件人联系方式' : '请输入发货人联系方式'"
:maxlength="50"
/>
</a-form-item>
@@ -274,7 +293,9 @@
{
validator: (_: any, value: any) => {
if (form.deliveryType !== 1 && !value) {
return Promise.reject('请输入发货人');
return Promise.reject(
form.deliveryType === 0 ? '请输入寄件人' : '请输入发货人'
);
}
return Promise.resolve();
}
@@ -284,7 +305,11 @@
{
validator: (_: any, value: any) => {
if (form.deliveryType !== 1 && !value) {
return Promise.reject('请输入发货人联系方式');
return Promise.reject(
form.deliveryType === 0
? '请输入寄件人联系方式'
: '请输入发货人联系方式'
);
}
return Promise.resolve();
}
@@ -304,7 +329,9 @@
{
validator: (_: any, value: any) => {
if (form.deliveryType !== 1 && !value) {
return Promise.reject('请选择发货门店');
return Promise.reject(
form.deliveryType === 0 ? '请选择发货门店' : '请选择配送门店'
);
}
return Promise.resolve();
}