JewelryMall/miniprogram/store/order.ts
2026-02-14 19:29:15 +08:00

60 lines
1.3 KiB
TypeScript

import { defineStore } from 'pinia'
import { ref } from 'vue'
import type { Order } from '../types'
import { getOrderList, getOrderDetail as fetchOrderDetail } from '../api/order'
export const useOrderStore = defineStore('order', () => {
const orders = ref<Order[]>([])
const currentOrder = ref<Order | null>(null)
function setOrders(list: Order[]) {
orders.value = list
}
function setCurrentOrder(order: Order | null) {
currentOrder.value = order
}
function updateOrderStatus(orderId: number, status: Order['status']) {
const order = orders.value.find((o) => o.id === orderId)
if (order) {
order.status = status
}
if (currentOrder.value?.id === orderId) {
currentOrder.value.status = status
}
}
/** 从后端拉取订单列表 */
async function fetchOrders() {
try {
const list = await getOrderList()
orders.value = list
} catch {
// 静默处理
}
}
/** 从后端拉取订单详情 */
async function fetchOrder(id: number) {
try {
const data = await fetchOrderDetail(id)
currentOrder.value = data
return data
} catch {
// 静默处理
return null
}
}
return {
orders,
currentOrder,
setOrders,
setCurrentOrder,
updateOrderStatus,
fetchOrders,
fetchOrder,
}
})