import { apiClient } from '@/shared/api/client' import type { ApiResponse } from '@/shared/types/types' import type { PaymentOrder, PaymentPayWay } from '@/features/orders/api/orders' export interface MohongCategory { id: number name: string code: string sort_order: number status: string product_count: number created_at: string updated_at: string } export interface MohongProduct { id: number category_id?: number | null category_name?: string title: string cover_url: string image_urls: string[] description: string price_cent: number price: string original_price_cent: number original_price?: string unit: string stock: number sort_order: number status: string qrcode_image_url?: string created_at: string updated_at: string } export interface MohongOrderItem { product_id: number title: string cover_url: string unit: string quantity: number unit_price_cent: number unit_price: string amount_cent: number amount: string } export interface MohongOrder { id: number order_no: string user_id: number product_id: number quantity: number unit_price_cent: number unit_price: string amount_cent: number amount: string status: string product_title: string product_cover_url: string product_unit: string items?: MohongOrderItem[] qrcode_url_snapshot: string copy_text: string buyer_nickname?: string buyer_phone?: string admin_remark?: string cancel_reason?: string paid_at?: string | null completed_at?: string | null cancelled_at?: string | null created_at: string updated_at: string } export interface MohongCheckoutItem { product_id: number quantity: number } export interface MohongConfig { default_qrcode_url: string order_copy_template: string } export interface Paginated { items: T[] total: number page: number page_size: number } export async function fetchMohongCategories() { const { data } = await apiClient.get>('/crash/categories') return data.data || [] } export async function fetchMohongProducts(params?: { keyword?: string category_id?: number page?: number page_size?: number }) { const { data } = await apiClient.get>>('/crash/products', { params, }) return data.data } export async function fetchMohongProduct(id: number | string) { const { data } = await apiClient.get>(`/crash/products/${id}`) return data.data } /** 单商品或购物车多商品结账 */ export async function createMohongOrder( productIdOrItems: number | MohongCheckoutItem[], quantity = 1 ) { const payload = Array.isArray(productIdOrItems) ? { items: productIdOrItems } : { product_id: productIdOrItems, quantity } const { data } = await apiClient.post>('/crash/orders', payload) return data.data } export async function fetchMyMohongOrders(params?: { status?: string page?: number page_size?: number }) { const { data } = await apiClient.get>>('/crash/orders', { params, }) return data.data } export async function fetchMyMohongOrder(id: number | string) { const { data } = await apiClient.get>(`/crash/orders/${id}`) return data.data } export async function cancelMyMohongOrder(id: number | string, reason?: string) { const { data } = await apiClient.post>(`/crash/orders/${id}/cancel`, { reason: reason || '', }) return data.data } export async function startMohongPayment( orderId: number, payWay: PaymentPayWay | string, jsPayFlag?: string ) { const { data } = await apiClient.post>( `/crash/orders/${orderId}/start-payment`, { pay_way: payWay || 'ZFBZF', jspay_flag: jsPayFlag || '', } ) return data.data } export async function queryMohongPayment(orderId: number) { const { data } = await apiClient.get>( `/crash/orders/${orderId}/query-payment` ) return data.data } // Admin APIs export async function fetchAdminMohongCategories() { const { data } = await apiClient.get>('/admin/crash/categories') return data.data || [] } export async function createAdminMohongCategory(payload: { name: string code?: string sort_order?: number status?: string }) { const { data } = await apiClient.post>( '/admin/crash/categories', payload ) return data.data } export async function updateAdminMohongCategory( id: number, payload: Partial<{ name: string; code: string; sort_order: number; status: string }> ) { const { data } = await apiClient.put>( `/admin/crash/categories/${id}`, payload ) return data.data } export async function deleteAdminMohongCategory(id: number) { const { data } = await apiClient.delete>( `/admin/crash/categories/${id}` ) return data.data } export async function fetchAdminMohongProducts(params?: { keyword?: string status?: string category_id?: number page?: number page_size?: number }) { const { data } = await apiClient.get>>( '/admin/crash/products', { params } ) return data.data } export async function fetchAdminMohongProduct(id: number | string) { const { data } = await apiClient.get>(`/admin/crash/products/${id}`) return data.data } export async function createAdminMohongProduct(payload: Partial & { title: string; price_cent: number }) { const { data } = await apiClient.post>('/admin/crash/products', payload) return data.data } export async function updateAdminMohongProduct(id: number, payload: Record) { const { data } = await apiClient.put>( `/admin/crash/products/${id}`, payload ) return data.data } export async function deleteAdminMohongProduct(id: number) { const { data } = await apiClient.delete>( `/admin/crash/products/${id}` ) return data.data } export async function fetchAdminMohongOrders(params?: { status?: string keyword?: string page?: number page_size?: number }) { const { data } = await apiClient.get>>('/admin/crash/orders', { params, }) return data.data } export async function fetchAdminMohongOrder(id: number | string) { const { data } = await apiClient.get>(`/admin/crash/orders/${id}`) return data.data } export async function completeAdminMohongOrder(id: number, remark?: string) { const { data } = await apiClient.post>( `/admin/crash/orders/${id}/complete`, { remark: remark || '' } ) return data.data } export async function cancelAdminMohongOrder(id: number, reason?: string) { const { data } = await apiClient.post>( `/admin/crash/orders/${id}/cancel`, { reason: reason || '' } ) return data.data } export async function fetchAdminMohongConfig() { const { data } = await apiClient.get>('/admin/crash/config') return data.data } export async function updateAdminMohongConfig(payload: Partial) { const { data } = await apiClient.put>('/admin/crash/config', payload) return data.data } export function mohongOrderStatusLabel(status: string) { const map: Record = { pending_payment: '待支付', paid: '已支付', completed: '已完成', cancelled: '已取消', refunded: '已退款', } return map[status] || status } export function mohongProductStatusLabel(status: string) { const map: Record = { draft: '草稿', on_sale: '上架中', off_sale: '已下架', } return map[status] || status }