60 lines
1.3 KiB
TypeScript
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,
|
|
}
|
|
})
|