Files
AIGC/frontend/src/stores/orders.js
blandarebiter 90b5118e45 perf(backend+frontend): 列表API响应体积优化 3.1MB→145KB (↓95.4%)
- 后端: JPQL构造器投影排除LONGTEXT大字段(uploadedImages/videoReferenceImages)
- 后端: DTO层过滤非分镜图类型的base64内联resultUrl
- 前端: 列表缩略图从video改为img loading=lazy,消除172并发请求
- 前端: download函数增加resultUrl懒加载(详情接口兜底)
- 文档: 新增性能优化报告 docs/performance-optimization-report.md
2026-04-10 18:46:37 +08:00

239 lines
7.1 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
}
})