274 lines
7.0 KiB
TypeScript
274 lines
7.0 KiB
TypeScript
/**
|
|
* 商户端 API 接口
|
|
*/
|
|
import type {
|
|
MerchantOrder,
|
|
MerchantGoods,
|
|
MerchantStats,
|
|
FinanceOverview,
|
|
Transaction,
|
|
Settlement,
|
|
WithdrawRecord,
|
|
ShopInfo,
|
|
GoodsFormData,
|
|
} from '@/typings/merchant'
|
|
import { OrderStatus, GoodsStatus } from '@/typings/merchant'
|
|
import {
|
|
mockMerchantStats,
|
|
mockMerchantOrders,
|
|
mockMerchantGoods,
|
|
mockFinanceOverview,
|
|
mockTransactions,
|
|
mockSettlements,
|
|
mockWithdrawRecords,
|
|
mockShopInfo,
|
|
} from '../mock'
|
|
|
|
// ==================== 统计 API ====================
|
|
|
|
/** 获取商户统计数据 */
|
|
export function getMerchantStats(): Promise<MerchantStats> {
|
|
return new Promise((resolve) => {
|
|
setTimeout(() => {
|
|
resolve(mockMerchantStats)
|
|
}, 300)
|
|
})
|
|
}
|
|
|
|
// ==================== 订单 API ====================
|
|
|
|
/** 订单查询参数 */
|
|
interface OrderQueryParams {
|
|
status?: OrderStatus | 'all'
|
|
keyword?: string
|
|
page?: number
|
|
pageSize?: number
|
|
}
|
|
|
|
/** 获取订单列表 */
|
|
export function getMerchantOrders(params: OrderQueryParams = {}): Promise<{ list: MerchantOrder[]; total: number }> {
|
|
return new Promise((resolve) => {
|
|
setTimeout(() => {
|
|
let list = [...mockMerchantOrders]
|
|
|
|
// 状态筛选
|
|
if (params.status && params.status !== 'all') {
|
|
list = list.filter(item => item.status === params.status)
|
|
}
|
|
|
|
// 关键词搜索
|
|
if (params.keyword) {
|
|
const keyword = params.keyword.toLowerCase()
|
|
list = list.filter(item =>
|
|
item.orderNo.toLowerCase().includes(keyword) ||
|
|
item.customerName.toLowerCase().includes(keyword)
|
|
)
|
|
}
|
|
|
|
resolve({ list, total: list.length })
|
|
}, 300)
|
|
})
|
|
}
|
|
|
|
/** 获取订单详情 */
|
|
export function getMerchantOrderDetail(id: string): Promise<MerchantOrder | null> {
|
|
return new Promise((resolve) => {
|
|
setTimeout(() => {
|
|
const order = mockMerchantOrders.find(item => item.id === id)
|
|
resolve(order || null)
|
|
}, 300)
|
|
})
|
|
}
|
|
|
|
/** 确认订单 */
|
|
export function confirmOrder(id: string): Promise<boolean> {
|
|
return new Promise((resolve) => {
|
|
setTimeout(() => {
|
|
const order = mockMerchantOrders.find(item => item.id === id)
|
|
if (order) {
|
|
order.status = OrderStatus.SHIPPING
|
|
}
|
|
resolve(true)
|
|
}, 500)
|
|
})
|
|
}
|
|
|
|
/** 发货 */
|
|
export function shipOrder(id: string, data: { company: string; trackingNo: string }): Promise<boolean> {
|
|
return new Promise((resolve) => {
|
|
setTimeout(() => {
|
|
const order = mockMerchantOrders.find(item => item.id === id)
|
|
if (order) {
|
|
order.status = OrderStatus.SHIPPED
|
|
order.shipTime = new Date().toISOString()
|
|
order.logistics = {
|
|
company: data.company,
|
|
trackingNo: data.trackingNo,
|
|
status: '已发货',
|
|
traces: [{ time: new Date().toISOString(), content: '商家已发货' }],
|
|
}
|
|
}
|
|
resolve(true)
|
|
}, 500)
|
|
})
|
|
}
|
|
|
|
/** 添加商家备注 */
|
|
export function addMerchantRemark(id: string, remark: string): Promise<boolean> {
|
|
return new Promise((resolve) => {
|
|
setTimeout(() => {
|
|
const order = mockMerchantOrders.find(item => item.id === id)
|
|
if (order) {
|
|
order.merchantRemark = remark
|
|
}
|
|
resolve(true)
|
|
}, 300)
|
|
})
|
|
}
|
|
|
|
// ==================== 商品 API ====================
|
|
|
|
/** 商品查询参数 */
|
|
interface GoodsQueryParams {
|
|
status?: GoodsStatus | 'all' | 'lowStock'
|
|
keyword?: string
|
|
page?: number
|
|
pageSize?: number
|
|
}
|
|
|
|
/** 获取商品列表 */
|
|
export function getMerchantGoodsList(params: GoodsQueryParams = {}): Promise<{ list: MerchantGoods[]; total: number }> {
|
|
return new Promise((resolve) => {
|
|
setTimeout(() => {
|
|
let list = [...mockMerchantGoods]
|
|
|
|
// 状态筛选
|
|
if (params.status) {
|
|
if (params.status === 'lowStock') {
|
|
list = list.filter(item => item.stock <= 10)
|
|
} else if (params.status !== 'all') {
|
|
list = list.filter(item => item.status === params.status)
|
|
}
|
|
}
|
|
|
|
// 关键词搜索
|
|
if (params.keyword) {
|
|
const keyword = params.keyword.toLowerCase()
|
|
list = list.filter(item => item.name.toLowerCase().includes(keyword))
|
|
}
|
|
|
|
resolve({ list, total: list.length })
|
|
}, 300)
|
|
})
|
|
}
|
|
|
|
/** 获取商品详情 */
|
|
export function getMerchantGoodsDetail(id: string): Promise<MerchantGoods | null> {
|
|
return new Promise((resolve) => {
|
|
setTimeout(() => {
|
|
const goods = mockMerchantGoods.find(item => item.id === id)
|
|
resolve(goods || null)
|
|
}, 300)
|
|
})
|
|
}
|
|
|
|
/** 保存商品 */
|
|
export function saveMerchantGoods(data: GoodsFormData): Promise<{ id: string }> {
|
|
return new Promise((resolve) => {
|
|
setTimeout(() => {
|
|
const id = data.id || `goods_${Date.now()}`
|
|
resolve({ id })
|
|
}, 500)
|
|
})
|
|
}
|
|
|
|
/** 更新商品状态 */
|
|
export function updateGoodsStatus(id: string, status: GoodsStatus): Promise<boolean> {
|
|
return new Promise((resolve) => {
|
|
setTimeout(() => {
|
|
const goods = mockMerchantGoods.find(item => item.id === id)
|
|
if (goods) {
|
|
goods.status = status
|
|
}
|
|
resolve(true)
|
|
}, 300)
|
|
})
|
|
}
|
|
|
|
/** 删除商品 */
|
|
export function deleteMerchantGoods(id: string): Promise<boolean> {
|
|
return new Promise((resolve) => {
|
|
setTimeout(() => {
|
|
resolve(true)
|
|
}, 300)
|
|
})
|
|
}
|
|
|
|
// ==================== 财务 API ====================
|
|
|
|
/** 获取财务概览 */
|
|
export function getFinanceOverview(): Promise<FinanceOverview> {
|
|
return new Promise((resolve) => {
|
|
setTimeout(() => {
|
|
resolve(mockFinanceOverview)
|
|
}, 300)
|
|
})
|
|
}
|
|
|
|
/** 获取交易记录 */
|
|
export function getTransactions(page = 1, pageSize = 20): Promise<{ list: Transaction[]; total: number }> {
|
|
return new Promise((resolve) => {
|
|
setTimeout(() => {
|
|
resolve({ list: mockTransactions, total: mockTransactions.length })
|
|
}, 300)
|
|
})
|
|
}
|
|
|
|
/** 获取结算记录 */
|
|
export function getSettlements(page = 1, pageSize = 20): Promise<{ list: Settlement[]; total: number }> {
|
|
return new Promise((resolve) => {
|
|
setTimeout(() => {
|
|
resolve({ list: mockSettlements, total: mockSettlements.length })
|
|
}, 300)
|
|
})
|
|
}
|
|
|
|
/** 获取提现记录 */
|
|
export function getWithdrawRecords(page = 1, pageSize = 20): Promise<{ list: WithdrawRecord[]; total: number }> {
|
|
return new Promise((resolve) => {
|
|
setTimeout(() => {
|
|
resolve({ list: mockWithdrawRecords, total: mockWithdrawRecords.length })
|
|
}, 300)
|
|
})
|
|
}
|
|
|
|
/** 申请提现 */
|
|
export function applyWithdraw(data: { amount: number; bankAccount: string }): Promise<{ id: string }> {
|
|
return new Promise((resolve) => {
|
|
setTimeout(() => {
|
|
resolve({ id: `withdraw_${Date.now()}` })
|
|
}, 500)
|
|
})
|
|
}
|
|
|
|
// ==================== 店铺 API ====================
|
|
|
|
/** 获取店铺信息 */
|
|
export function getShopInfo(): Promise<ShopInfo> {
|
|
return new Promise((resolve) => {
|
|
setTimeout(() => {
|
|
resolve(mockShopInfo)
|
|
}, 300)
|
|
})
|
|
}
|
|
|
|
/** 更新店铺信息 */
|
|
export function updateShopInfo(data: Partial<ShopInfo>): Promise<boolean> {
|
|
return new Promise((resolve) => {
|
|
setTimeout(() => {
|
|
Object.assign(mockShopInfo, data)
|
|
resolve(true)
|
|
}, 500)
|
|
})
|
|
}
|