diff --git a/pages.config.ts b/pages.config.ts index 9dbee5e..17c16b9 100644 --- a/pages.config.ts +++ b/pages.config.ts @@ -28,9 +28,15 @@ export default defineUniPages({ pages: [ { path: 'dashboard/index', style: { navigationBarTitleText: '商家工作台' } }, { path: 'order/list', style: { navigationBarTitleText: '订单管理' } }, + { path: 'order/detail', style: { navigationBarTitleText: '订单详情' } }, { path: 'goods/list', style: { navigationBarTitleText: '商品管理' } }, + { path: 'goods/edit', style: { navigationBarTitleText: '编辑商品' } }, { path: 'finance/index', style: { navigationBarTitleText: '财务中心' } }, + { path: 'finance/settlement', style: { navigationBarTitleText: '结算记录' } }, + { path: 'finance/withdraw', style: { navigationBarTitleText: '申请提现' } }, { path: 'me/index', style: { navigationBarTitleText: '商家中心' } }, + { path: 'me/shop', style: { navigationBarTitleText: '店铺设置' } }, + { path: 'me/account', style: { navigationBarTitleText: '账号安全' } }, ], }, { diff --git a/src/pagesMerchant/api/index.ts b/src/pagesMerchant/api/index.ts new file mode 100644 index 0000000..5d1e481 --- /dev/null +++ b/src/pagesMerchant/api/index.ts @@ -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 { + 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 { + return new Promise((resolve) => { + setTimeout(() => { + const order = mockMerchantOrders.find(item => item.id === id) + resolve(order || null) + }, 300) + }) +} + +/** 确认订单 */ +export function confirmOrder(id: string): Promise { + 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 { + 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 { + 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 { + 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 { + 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 { + return new Promise((resolve) => { + setTimeout(() => { + resolve(true) + }, 300) + }) +} + +// ==================== 财务 API ==================== + +/** 获取财务概览 */ +export function getFinanceOverview(): Promise { + 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 { + return new Promise((resolve) => { + setTimeout(() => { + resolve(mockShopInfo) + }, 300) + }) +} + +/** 更新店铺信息 */ +export function updateShopInfo(data: Partial): Promise { + return new Promise((resolve) => { + setTimeout(() => { + Object.assign(mockShopInfo, data) + resolve(true) + }, 500) + }) +} diff --git a/src/pagesMerchant/dashboard/index.vue b/src/pagesMerchant/dashboard/index.vue index 2cb737a..9867f38 100644 --- a/src/pagesMerchant/dashboard/index.vue +++ b/src/pagesMerchant/dashboard/index.vue @@ -1,5 +1,6 @@