feat(pickup): 线下提号支持扩展字段店铺管理CRUD及时间筛选

- 线下提号创建表单扩展:增加「操作人」、「第三方单号」、「下单金额」、「押金金额」字段,重构弹窗布局为紧凑双列/三列金额卡片排布,消除过度垂直滚动并默认预填操作人
- 店铺管理 CRUD:新增 pickup_shops 配置表与配套 API,支持在提号页面直接管理店铺(增删改查、启用/禁用、筛选),下拉选项自动优先加载活跃配置店铺并兼顾历史店铺
- 列表时间范围筛选:增加精确到秒的「日期+时间」时间范围选择器,支持快捷时段与后端时间范围过滤
- 生产环境数据核查:只读提取线上全部 61 项历史提号店铺名称与单量分布,完整整理沉淀至实施文档供后续映射规则参考
- 验证方式:执行并通过全套端到端代码门禁(scripts/check.sh:SQL约束、go vet、go build、MySQL真实测试库单元测试及覆盖率、vue大小检查、prettier、eslint、vue-tsc及vite构建)
This commit is contained in:
yml2213
2026-10-09 12:46:15 +08:00
parent 6b74e07e70
commit 9d9adfbd5e
16 changed files with 1571 additions and 75 deletions
@@ -19,12 +19,16 @@ export interface AdminPickup {
owner_id: number
owner_phone: string
admin_id: number
operator: string
platform: string
third_party_order_no: string
shop_name: string
account_source: PickupAccountSource
source_channel: string
settlement_mode: PickupSettlementMode
listing_price_cent: number
order_amount_cent: number
deposit_amount_cent: number
owner_price_cent: number
website_profit_cent: number
profit_amount_cent: number
@@ -108,8 +112,12 @@ export interface AvailableListing {
export interface AdminPickupCreateRequest {
listing_id: number
operator?: string
platform?: string
third_party_order_no?: string
shop_name?: string
order_amount_cent?: number
deposit_amount_cent?: number
profit_amount_cent?: number
remark?: string
}
@@ -147,6 +155,43 @@ export interface AdminPickupListQuery {
shop_name?: string
account_source?: PickupAccountSource | ''
offline_settlement_status?: PickupOfflineSettlementStatus | ''
operator?: string
third_party_order_no?: string
start_time?: string
end_time?: string
}
export interface PickupShop {
id: number
name: string
platform: string
status: 'active' | 'disabled'
sort_order: number
remark: string
created_at: string
updated_at: string
}
export interface PickupShopCreateRequest {
name: string
platform?: string
status?: 'active' | 'disabled'
sort_order?: number
remark?: string
}
export interface PickupShopUpdateRequest {
name: string
platform?: string
status: 'active' | 'disabled'
sort_order?: number
remark?: string
}
export interface PickupShopQuery {
keyword?: string
platform?: string
status?: string
}
function cleanParams(query: object) {
@@ -270,3 +315,27 @@ export async function cancelAdminPickup(id: number, reason: string) {
)
return data.data
}
export async function fetchPickupShops(query: PickupShopQuery = {}) {
const { data } = await apiClient.get<ApiResponse<PickupShop[]>>('/admin/pickups/shops', {
params: cleanParams(query),
})
return Array.isArray(data.data) ? data.data : []
}
export async function createPickupShop(req: PickupShopCreateRequest) {
const { data } = await apiClient.post<ApiResponse<PickupShop>>('/admin/pickups/shops', req)
return data.data
}
export async function updatePickupShop(id: number, req: PickupShopUpdateRequest) {
const { data } = await apiClient.put<ApiResponse<PickupShop>>(`/admin/pickups/shops/${id}`, req)
return data.data
}
export async function deletePickupShop(id: number) {
const { data } = await apiClient.delete<ApiResponse<{ deleted: boolean }>>(
`/admin/pickups/shops/${id}`
)
return data.data
}