239 lines
7.1 KiB
JavaScript
239 lines
7.1 KiB
JavaScript
|
|
import { defineStore } from 'pinia'
|
|||
|
|
import { ref } from 'vue'
|
|||
|
|
import { getOrders, getOrderById, createOrder, updateOrderStatus, cancelOrder, shipOrder, completeOrder } from '@/api/orders'
|
|||
|
|
|
|||
|
|
export const useOrderStore = defineStore('orders', () => {
|
|||
|
|
// 状态
|
|||
|
|
const orders = ref([])
|
|||
|
|
const currentOrder = ref(null)
|
|||
|
|
const loading = ref(false)
|
|||
|
|
const pagination = ref({
|
|||
|
|
page: 0,
|
|||
|
|
size: 10,
|
|||
|
|
total: 0,
|
|||
|
|
totalPages: 0
|
|||
|
|
})
|
|||
|
|
|
|||
|
|
// 获取订单列表
|
|||
|
|
const fetchOrders = async (params = {}) => {
|
|||
|
|
try {
|
|||
|
|
loading.value = true
|
|||
|
|
console.log('OrderStore: 开始获取订单,参数:', params)
|
|||
|
|
|
|||
|
|
const response = await getOrders(params)
|
|||
|
|
console.log('OrderStore: API原始响应:', response)
|
|||
|
|
|
|||
|
|
if (response.success) {
|
|||
|
|
orders.value = response.data.content || response.data
|
|||
|
|
pagination.value = {
|
|||
|
|
page: response.data.number || 0,
|
|||
|
|
size: response.data.size || 10,
|
|||
|
|
total: response.data.totalElements || response.data.length,
|
|||
|
|
totalPages: response.data.totalPages || 1
|
|||
|
|
}
|
|||
|
|
console.log('OrderStore: 处理后的订单数据:', orders.value)
|
|||
|
|
console.log('OrderStore: 分页信息:', pagination.value)
|
|||
|
|
} else {
|
|||
|
|
console.error('OrderStore: API返回失败:', response.message)
|
|||
|
|
}
|
|||
|
|
return response
|
|||
|
|
} catch (error) {
|
|||
|
|
console.error('OrderStore: 获取订单异常:', error)
|
|||
|
|
return { success: false, message: '获取订单列表失败' }
|
|||
|
|
} finally {
|
|||
|
|
loading.value = false
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 获取订单详情
|
|||
|
|
const fetchOrderById = async (id) => {
|
|||
|
|
try {
|
|||
|
|
loading.value = true
|
|||
|
|
const response = await getOrderById(id)
|
|||
|
|
|
|||
|
|
console.log('OrderStore: 获取订单详情响应:', response)
|
|||
|
|
|
|||
|
|
// axios会将响应包装在response.data中
|
|||
|
|
const responseData = response?.data || response || {}
|
|||
|
|
console.log('OrderStore: 解析后的响应数据:', responseData)
|
|||
|
|
|
|||
|
|
if (responseData.success && responseData.data) {
|
|||
|
|
currentOrder.value = responseData.data
|
|||
|
|
console.log('OrderStore: 设置后的订单详情:', currentOrder.value)
|
|||
|
|
return { success: true, data: responseData.data }
|
|||
|
|
} else if (responseData.success === false) {
|
|||
|
|
console.error('OrderStore: API返回失败:', responseData.message)
|
|||
|
|
return { success: false, message: responseData.message || '获取订单详情失败' }
|
|||
|
|
} else {
|
|||
|
|
// 如果没有success字段,尝试直接使用data
|
|||
|
|
if (responseData.id || responseData.orderNumber) {
|
|||
|
|
currentOrder.value = responseData
|
|||
|
|
return { success: true, data: responseData }
|
|||
|
|
} else {
|
|||
|
|
console.error('OrderStore: API返回数据格式错误:', responseData)
|
|||
|
|
return { success: false, message: 'API返回数据格式错误' }
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
} catch (error) {
|
|||
|
|
console.error('OrderStore: 获取订单详情异常:', error)
|
|||
|
|
return { success: false, message: error.response?.data?.message || error.message || '获取订单详情失败' }
|
|||
|
|
} finally {
|
|||
|
|
loading.value = false
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 创建订单
|
|||
|
|
const createNewOrder = async (orderData) => {
|
|||
|
|
try {
|
|||
|
|
loading.value = true
|
|||
|
|
const response = await createOrder(orderData)
|
|||
|
|
|
|||
|
|
if (response.success) {
|
|||
|
|
// 刷新订单列表
|
|||
|
|
await fetchOrders()
|
|||
|
|
}
|
|||
|
|
return response
|
|||
|
|
} catch (error) {
|
|||
|
|
console.error('Create order error:', error)
|
|||
|
|
return { success: false, message: '创建订单失败' }
|
|||
|
|
} finally {
|
|||
|
|
loading.value = false
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 更新订单状态
|
|||
|
|
const updateOrder = async (id, status, notes) => {
|
|||
|
|
try {
|
|||
|
|
loading.value = true
|
|||
|
|
const response = await updateOrderStatus(id, status, notes)
|
|||
|
|
|
|||
|
|
if (response.success) {
|
|||
|
|
// 更新本地订单状态
|
|||
|
|
const order = orders.value.find(o => o.id === id)
|
|||
|
|
if (order) {
|
|||
|
|
order.status = status
|
|||
|
|
order.updatedAt = new Date().toISOString()
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 更新当前订单
|
|||
|
|
if (currentOrder.value && currentOrder.value.id === id) {
|
|||
|
|
currentOrder.value.status = status
|
|||
|
|
currentOrder.value.updatedAt = new Date().toISOString()
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return response
|
|||
|
|
} catch (error) {
|
|||
|
|
console.error('Update order error:', error)
|
|||
|
|
return { success: false, message: '更新订单状态失败' }
|
|||
|
|
} finally {
|
|||
|
|
loading.value = false
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 取消订单
|
|||
|
|
const cancelOrderById = async (id, reason) => {
|
|||
|
|
try {
|
|||
|
|
loading.value = true
|
|||
|
|
const response = await cancelOrder(id, reason)
|
|||
|
|
|
|||
|
|
if (response.success) {
|
|||
|
|
// 更新本地订单状态
|
|||
|
|
const order = orders.value.find(o => o.id === id)
|
|||
|
|
if (order) {
|
|||
|
|
order.status = 'CANCELLED'
|
|||
|
|
order.cancelledAt = new Date().toISOString()
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 更新当前订单
|
|||
|
|
if (currentOrder.value && currentOrder.value.id === id) {
|
|||
|
|
currentOrder.value.status = 'CANCELLED'
|
|||
|
|
currentOrder.value.cancelledAt = new Date().toISOString()
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return response
|
|||
|
|
} catch (error) {
|
|||
|
|
console.error('Cancel order error:', error)
|
|||
|
|
return { success: false, message: '取消订单失败' }
|
|||
|
|
} finally {
|
|||
|
|
loading.value = false
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 发货
|
|||
|
|
const shipOrderById = async (id, trackingNumber) => {
|
|||
|
|
try {
|
|||
|
|
loading.value = true
|
|||
|
|
const response = await shipOrder(id, trackingNumber)
|
|||
|
|
|
|||
|
|
if (response.success) {
|
|||
|
|
// 更新本地订单状态
|
|||
|
|
const order = orders.value.find(o => o.id === id)
|
|||
|
|
if (order) {
|
|||
|
|
order.status = 'SHIPPED'
|
|||
|
|
order.shippedAt = new Date().toISOString()
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 更新当前订单
|
|||
|
|
if (currentOrder.value && currentOrder.value.id === id) {
|
|||
|
|
currentOrder.value.status = 'SHIPPED'
|
|||
|
|
currentOrder.value.shippedAt = new Date().toISOString()
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return response
|
|||
|
|
} catch (error) {
|
|||
|
|
console.error('Ship order error:', error)
|
|||
|
|
return { success: false, message: '发货失败' }
|
|||
|
|
} finally {
|
|||
|
|
loading.value = false
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 完成订单
|
|||
|
|
const completeOrderById = async (id) => {
|
|||
|
|
try {
|
|||
|
|
loading.value = true
|
|||
|
|
const response = await completeOrder(id)
|
|||
|
|
|
|||
|
|
if (response.success) {
|
|||
|
|
// 更新本地订单状态
|
|||
|
|
const order = orders.value.find(o => o.id === id)
|
|||
|
|
if (order) {
|
|||
|
|
order.status = 'COMPLETED'
|
|||
|
|
order.deliveredAt = new Date().toISOString()
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 更新当前订单
|
|||
|
|
if (currentOrder.value && currentOrder.value.id === id) {
|
|||
|
|
currentOrder.value.status = 'COMPLETED'
|
|||
|
|
currentOrder.value.deliveredAt = new Date().toISOString()
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
return response
|
|||
|
|
} catch (error) {
|
|||
|
|
console.error('Complete order error:', error)
|
|||
|
|
return { success: false, message: '完成订单失败' }
|
|||
|
|
} finally {
|
|||
|
|
loading.value = false
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return {
|
|||
|
|
// 状态
|
|||
|
|
orders,
|
|||
|
|
currentOrder,
|
|||
|
|
loading,
|
|||
|
|
pagination,
|
|||
|
|
// 方法
|
|||
|
|
fetchOrders,
|
|||
|
|
fetchOrderById,
|
|||
|
|
createNewOrder,
|
|||
|
|
updateOrder,
|
|||
|
|
cancelOrderById,
|
|||
|
|
shipOrderById,
|
|||
|
|
completeOrderById
|
|||
|
|
}
|
|||
|
|
})
|
|||
|
|
|
|||
|
|
|
|||
|
|
|