diff --git a/backend/internal/modules/order/dto.go b/backend/internal/modules/order/dto.go index fd56a88..f946bca 100644 --- a/backend/internal/modules/order/dto.go +++ b/backend/internal/modules/order/dto.go @@ -130,6 +130,7 @@ type AdminOrderQuery struct { Keyword string Status string HandoffStatus string + HandoffMode string SettlementStatus string } diff --git a/backend/internal/modules/order/handler_parse.go b/backend/internal/modules/order/handler_parse.go index 5fe77e1..ca0e737 100644 --- a/backend/internal/modules/order/handler_parse.go +++ b/backend/internal/modules/order/handler_parse.go @@ -60,6 +60,7 @@ func parseAdminOrderQuery(c *gin.Context) AdminOrderQuery { Keyword: strings.TrimSpace(c.Query("keyword")), Status: strings.TrimSpace(c.Query("status")), HandoffStatus: strings.TrimSpace(c.Query("handoff_status")), + HandoffMode: strings.TrimSpace(c.Query("handoff_mode")), SettlementStatus: strings.TrimSpace(c.Query("settlement_status")), } } diff --git a/backend/internal/modules/order/queries.go b/backend/internal/modules/order/queries.go index 5aa85ce..724381e 100644 --- a/backend/internal/modules/order/queries.go +++ b/backend/internal/modules/order/queries.go @@ -84,6 +84,12 @@ func applyAdminOrderFilters(db *gorm.DB, query AdminOrderQuery) *gorm.DB { if query.HandoffStatus != "" { db = db.Where("o.handoff_status = ?", query.HandoffStatus) } + switch query.HandoffMode { + case handoffModePlatform: + db = db.Where("(o.handoff_mode = ? OR o.settlement_mode = ?)", handoffModePlatform, settlementModePlatformManaged) + case handoffModeOwner, "normal": + db = db.Where("COALESCE(NULLIF(o.handoff_mode, ''), ?) <> ? AND COALESCE(NULLIF(o.settlement_mode, ''), ?) <> ?", handoffModeOwner, handoffModePlatform, settlementModeOwnerWallet, settlementModePlatformManaged) + } if query.SettlementStatus != "" { db = db.Where("o.settlement_status = ?", query.SettlementStatus) } diff --git a/frontend/src/features/admin/views/AdminOrdersView.vue b/frontend/src/features/admin/views/AdminOrdersView.vue index 73a211a..9ca86a3 100644 --- a/frontend/src/features/admin/views/AdminOrdersView.vue +++ b/frontend/src/features/admin/views/AdminOrdersView.vue @@ -18,6 +18,7 @@ const filters = reactive({ keyword: '', status: '', handoff_status: '', + handoff_mode: '', settlement_status: '', }) const loading = ref(false) @@ -54,6 +55,11 @@ const handoffStatusOptions = [ { label: '客服标记异常', value: 'admin_abnormal' }, ] as const +const handoffModeOptions = [ + { label: '正常订单', value: 'owner' }, + { label: '平台代管', value: 'platform' }, +] as const + const settlementStatusOptions = [ { label: '未结算', value: 'unsettled' }, { label: '待结算', value: 'pending' }, @@ -75,6 +81,7 @@ async function loadOrders() { keyword: filters.keyword?.trim(), status: filters.status, handoff_status: filters.handoff_status, + handoff_mode: filters.handoff_mode, settlement_status: filters.settlement_status, }) orders.value = result.items @@ -97,6 +104,7 @@ function resetFilters() { filters.keyword = '' filters.status = '' filters.handoff_status = '' + filters.handoff_mode = '' filters.settlement_status = '' void queryOrders() } @@ -113,6 +121,10 @@ function money(value: unknown) { function userText(value: string | number | undefined) { return value || '-' } + +function isPlatformManaged(row: Order) { + return row.handoff_mode === 'platform' || row.settlement_mode === 'platform_managed' +} @@ -349,6 +378,11 @@ function userText(value: string | number | undefined) { gap: 2px; } +.stacked-cell .platform-managed-owner { + color: #d97706; + font-weight: 700; +} + .money-cell { align-items: flex-end; } diff --git a/frontend/src/features/orders/api/orders.ts b/frontend/src/features/orders/api/orders.ts index 2dfa674..475ad5f 100644 --- a/frontend/src/features/orders/api/orders.ts +++ b/frontend/src/features/orders/api/orders.ts @@ -172,6 +172,7 @@ export interface AdminOrderQuery { keyword?: string status?: string handoff_status?: string + handoff_mode?: string settlement_status?: string }