feat: 商家端代码

This commit is contained in:
FlowerWater
2025-12-19 12:04:22 +08:00
parent 3c21b074c4
commit 9591234e70
22 changed files with 4776 additions and 210 deletions

View File

@@ -0,0 +1,273 @@
/**
* 商户端 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)
})
}