From 797b20979d59cf3b82bf34a181b8a93820ccadbb Mon Sep 17 00:00:00 2001 From: jacy <18049821889@163.com> Date: Tue, 25 Aug 2026 14:29:48 +0800 Subject: [PATCH] =?UTF-8?q?feat(mini-user):=20v3.5.10=20=E5=90=8C=E5=9F=8E?= =?UTF-8?q?=E9=85=8D=E9=80=81=E6=8F=90=E7=A4=BA=E5=8F=AF=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E5=B9=B6=E6=94=AF=E6=8C=81=E6=8D=A2=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 承运商 HTML 按收货市下发;textarea 回车在 C 端转成换行。含门店去掉分享按钮与小程序企微客服。 Co-authored-by: Cursor --- .../src/pages/FulfillmentProvidersPage.tsx | 50 +++++++- .../src/components/ContactCsButton.tsx | 55 +++++++- .../src/components/DeliveryHintHtml.tsx | 22 ++++ apps/mini-user/src/lib/local-delivery.ts | 57 +++++++++ apps/mini-user/src/lib/product-fulfillment.ts | 5 + apps/mini-user/src/lib/wecom-cs.ts | 85 ++++++++++++ .../src/pages/customer-service/index.tsx | 30 +++-- .../src/pages/order-confirm/index.tsx | 21 +++ .../src/pages/order-detail/index.tsx | 27 ++++ .../src/pages/product-detail/index.tsx | 19 +++ .../src/pages/store-detail/index.tsx | 2 - apps/mini-user/src/styles/product-detail.css | 8 ++ docs/杜康好客-v3-PRD.md | 1 + docs/杜康好客-v3-现状对照.md | 2 + docs/杜康好客-v3.5.10-开发文档.md | 121 ++++++++++++++++++ docs/杜康好客-v3编码手册.md | 2 + docs/杜康好客-知识库.md | 9 +- packages/shared-types/src/config.ts | 17 ++- .../shared-types/src/fulfillment-provider.ts | 84 ++++++++++++ packages/shared-types/src/wechat.ts | 4 + ...igrate-fulfillment-delivery-hint-v3510.sql | 3 + server/dukang-api/prisma/schema.prisma | 2 + .../system-config/system-config.registry.ts | 31 +++++ .../common/client-config.controller.ts | 2 + .../fulfillment-provider.service.ts | 89 +++++++++++++ .../modules/fulfillment/fulfillment.module.ts | 2 + .../local-deliveries.controller.ts | 12 ++ .../admin-fulfillment-providers.controller.ts | 14 +- .../src/modules/ops/dto/admin-mutate.dto.ts | 10 ++ 29 files changed, 758 insertions(+), 28 deletions(-) create mode 100644 apps/mini-user/src/components/DeliveryHintHtml.tsx create mode 100644 apps/mini-user/src/lib/local-delivery.ts create mode 100644 apps/mini-user/src/lib/wecom-cs.ts create mode 100644 docs/杜康好客-v3.5.10-开发文档.md create mode 100644 server/dukang-api/prisma/migrate-fulfillment-delivery-hint-v3510.sql create mode 100644 server/dukang-api/src/modules/fulfillment/local-deliveries.controller.ts diff --git a/apps/admin-web/src/pages/FulfillmentProvidersPage.tsx b/apps/admin-web/src/pages/FulfillmentProvidersPage.tsx index 136a9b7..6856f53 100644 --- a/apps/admin-web/src/pages/FulfillmentProvidersPage.tsx +++ b/apps/admin-web/src/pages/FulfillmentProvidersPage.tsx @@ -7,6 +7,7 @@ import { Input, InputNumber, Modal, + Popconfirm, Select, Space, Table, @@ -68,7 +69,10 @@ export default function FulfillmentProvidersPage() { setLoading(true); try { const res = await request('/admin/fulfillment-providers'); - setRows(res); + setRows(Array.isArray(res) ? res : []); + } catch (e) { + setRows([]); + message.error(e instanceof Error ? e.message : '加载承运商失败'); } finally { setLoading(false); } @@ -94,6 +98,7 @@ export default function FulfillmentProvidersPage() { extraBottleFee: DEFAULT_XFX_LOGISTICS_PRICING.extraBottleFee, boxBottles: DEFAULT_XFX_LOGISTICS_PRICING.boxBottles, boxFee: DEFAULT_XFX_LOGISTICS_PRICING.boxFee, + deliveryHintHtml: '', }); setOpen(true); } @@ -122,6 +127,7 @@ export default function FulfillmentProvidersPage() { extraBottleFee: pricing?.extraBottleFee ?? DEFAULT_XFX_LOGISTICS_PRICING.extraBottleFee, boxBottles: pricing?.boxBottles ?? DEFAULT_XFX_LOGISTICS_PRICING.boxBottles, boxFee: pricing?.boxFee ?? DEFAULT_XFX_LOGISTICS_PRICING.boxFee, + deliveryHintHtml: row.deliveryHintHtml || '', }); setOpen(true); } @@ -144,6 +150,7 @@ export default function FulfillmentProvidersPage() { boxBottles: v.boxBottles != null ? Number(v.boxBottles) : undefined, boxFee: v.boxFee != null ? Number(v.boxFee) : undefined, }, + deliveryHintHtml: v.deliveryHintHtml?.trim() || null, }; if (isXfxProviderCode(String(v.code)) && v.type === FulfillmentProviderType.API) { @@ -176,6 +183,16 @@ export default function FulfillmentProvidersPage() { void load(); } + async function remove(row: FulfillmentProviderDto) { + try { + await request(`/admin/fulfillment-providers/${row.id}`, { method: 'DELETE' }); + message.success('已删除'); + void load(); + } catch (e) { + message.error(e instanceof Error ? e.message : '删除失败'); + } + } + const baseColumns: ColumnsType = [ { title: '编码', dataIndex: 'code', width: 100 }, { @@ -230,11 +247,23 @@ export default function FulfillmentProvidersPage() { { title: '更新时间', dataIndex: 'updatedAt', width: 170, render: fmtTime }, { title: '操作', - width: 80, + width: 140, render: (_, row) => ( - + + + void remove(row)} + > + + + ), }, ]; @@ -288,6 +317,17 @@ export default function FulfillmentProvidersPage() {