默认快递公司
{{ defaultCompany || "-" }}
@@ -119,16 +218,18 @@ onMounted(fetchCompanies);
- 维护仓管寄回时可选的快递公司。停用后不会出现在寄回下拉列表中。
+ 维护仓管寄回时可选的快递公司。公司码优先从快递100官方码表检索,停用后不会出现在寄回下拉列表中。
-
新增快递公司
+
+ 同步快递100公司码表
+
-
+
@@ -150,8 +251,28 @@ onMounted(fetchCompanies);
-
-
+
+
+
+
+
{{ item.company_name }}
+
+ {{ item.company_code }}{{ item.company_type ? ` / ${item.company_type}` : "" }}
+
+
+
+
+
+ 支持按名称或编码检索快递100官方码表,选中后会自动回填公司码。
+
@@ -172,7 +293,7 @@ onMounted(fetchCompanies);
设为默认快递公司
-
+
diff --git a/admin-web/src/pages/orders/index.vue b/admin-web/src/pages/orders/index.vue
index ee18bf3..394204a 100644
--- a/admin-web/src/pages/orders/index.vue
+++ b/admin-web/src/pages/orders/index.vue
@@ -1,7 +1,16 @@
@@ -254,7 +314,7 @@ onShow(fetchDetail);
当前寄送商品,请确保与订单信息一致
- {{ submitted ? detail.logistics_info.tracking_status_text : "待提交" }}
+ {{ submitted ? logisticsStatusText : "待提交" }}
寄送状态,提交运单后我们会继续同步节点
@@ -288,6 +348,17 @@ onShow(fetchDetail);
+ 正在识别快递公司...
+
+
+ {{ candidate.company_name }}
+
+
{{ submitted ? "如物流信息存在异常,请联系平台客服协助处理。" : "提交后将进入待签收跟踪状态,请确认信息无误后再提交。" }}
@@ -295,7 +366,7 @@ onShow(fetchDetail);
寄送轨迹
- {{ detail.logistics_info.latest_desc }}
+ {{ logisticsLatestDesc }}
;
};
return_address: null | {
consignee: string;
@@ -246,6 +288,17 @@ export interface AdminWarehouseWorkbenchContext {
express_company: string;
tracking_no: string;
tracking_status: string;
+ tracking_status_text: string;
+ provider_status_text: string;
+ sync_status_text: string;
+ sync_error: string;
+ latest_desc: string;
+ latest_time: string;
+ nodes: Array<{
+ node_time: string;
+ node_desc: string;
+ node_location: string;
+ }>;
};
transfer_flow: null | {
id?: number;
@@ -491,6 +544,23 @@ export const adminApi = {
getExpressCompanies(params: { enabled_only?: 0 | 1 } = { enabled_only: 1 }) {
return request<{ list: AdminExpressCompanyItem[]; default_company: string }>("/api/admin/express-companies", { params });
},
+ getExpressCompanyCatalog(params: { keyword?: string; limit?: number } = {}) {
+ return request<{ list: AdminExpressCompanyCatalogItem[]; total: number; synced_at: string }>("/api/admin/express-company/catalog", {
+ params,
+ });
+ },
+ syncExpressCompanyCatalog() {
+ return request<{ total: number; inserted: number; updated: number; backfilled: number; synced_at: string }>(
+ "/api/admin/express-company/catalog/sync",
+ { method: "POST" },
+ );
+ },
+ recognizeExpressCompany(data: { tracking_no: string; company_name?: string; company_code?: string }) {
+ return request("/api/admin/express-company/recognize", {
+ method: "POST",
+ data,
+ });
+ },
createManualOrder(data: AdminManualOrderCreatePayload) {
return request("/api/admin/manual-order/create", {
method: "POST",
diff --git a/work-app/src/pages/order/detail.vue b/work-app/src/pages/order/detail.vue
index cfb9cde..2d33618 100644
--- a/work-app/src/pages/order/detail.vue
+++ b/work-app/src/pages/order/detail.vue
@@ -188,6 +188,10 @@ onShow(() => {
寄送到中心
{{ detail.logistics_info ? `${detail.logistics_info.express_company || "-"} / ${detail.logistics_info.tracking_no || "-"}` : "-" }}
+
+ 寄送状态
+ {{ detail.logistics_info.provider_status_text || detail.logistics_info.sync_status_text || detail.logistics_info.tracking_status_text || "-" }}
+
寄回地址
{{ displayAddress(detail.return_address) }}
@@ -196,6 +200,24 @@ onShow(() => {
回寄运单
{{ detail.return_logistics ? `${detail.return_logistics.express_company || "-"} / ${detail.return_logistics.tracking_no || "-"}` : "-" }}
+
+ 回寄状态
+ {{ detail.return_logistics.provider_status_text || detail.return_logistics.sync_status_text || detail.return_logistics.tracking_status_text || "-" }}
+
+
+
+ 寄送轨迹
+
+ {{ item.node_desc }}
+ {{ item.node_time }}{{ item.node_location ? ` / ${item.node_location}` : "" }}
+
+
+
+ 回寄轨迹
+
+ {{ item.node_desc }}
+ {{ item.node_time }}{{ item.node_location ? ` / ${item.node_location}` : "" }}
+
@@ -445,6 +467,31 @@ onShow(() => {
font-weight: 800;
}
+.logistics-timeline {
+ margin-top: 22rpx;
+ padding-top: 20rpx;
+ border-top: 1px solid var(--work-border);
+}
+
+.logistics-timeline__item {
+ padding: 16rpx 0 16rpx 22rpx;
+ border-left: 4rpx solid var(--work-primary);
+}
+
+.logistics-timeline__title {
+ color: var(--work-text);
+ font-size: 24rpx;
+ font-weight: 800;
+ line-height: 1.45;
+}
+
+.logistics-timeline__meta {
+ margin-top: 6rpx;
+ color: var(--work-text-soft);
+ font-size: 22rpx;
+ line-height: 1.5;
+}
+
.attachment-play {
position: absolute;
left: 50%;
diff --git a/work-app/src/pages/return-shipping/index.vue b/work-app/src/pages/return-shipping/index.vue
index f20e11c..5acc14d 100644
--- a/work-app/src/pages/return-shipping/index.vue
+++ b/work-app/src/pages/return-shipping/index.vue
@@ -1,7 +1,13 @@
@@ -281,6 +341,17 @@ onLoad((options) => {
+ 正在识别快递公司...
+
+
+ {{ candidate.company_name }}
+
+
@@ -382,6 +453,40 @@ onLoad((options) => {
margin-top: 14rpx;
}
+.recognition-tip {
+ margin-top: 14rpx;
+ color: var(--work-text-soft);
+ font-size: 22rpx;
+ line-height: 1.45;
+}
+
+.recognition-chip-list {
+ margin-top: 14rpx;
+}
+
+.chip-list {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 12rpx;
+}
+
+.choice-chip {
+ display: inline-flex;
+ align-items: center;
+ min-height: 44rpx;
+ padding: 0 18rpx;
+ border-radius: var(--work-radius-pill);
+ background: var(--work-card-muted);
+ color: var(--work-text);
+ font-size: 22rpx;
+ line-height: 44rpx;
+ border: 1px solid transparent;
+}
+
+.choice-chip:active {
+ opacity: 0.88;
+}
+
.scan-input {
flex: 1;
min-width: 0;