Desoma logo

Pinia Stores 使用示例

1. Checkout Store (订单状态管理)

当前订单状态

{
  "sessionId": null,
  "orderItems": [],
  "shippingData": null,
  "isSubmitted": false,
  "currentStep": "shipping"
}

代码示例:

import { useCheckoutStore } from '~/stores/checkout'

const checkoutStore = useCheckoutStore()

// 初始化会话
checkoutStore.initializeSession('session-123')

// 设置订单项
checkoutStore.setOrderItems([
  { id: '1', name: 'Product 1', price: 29.99, quantity: 1 }
])

// 更新配送信息
checkoutStore.updateShippingData({
  firstName: 'John',
  lastName: 'Doe',
  email: 'john@example.com',
  address: '123 Main St',
  city: 'New York',
  country: 'US'
})

// 提交订单
checkoutStore.markAsSubmitted()

// 重置
checkoutStore.resetCheckout()

2. Cart Store (购物车管理)

购物车状态

商品数量: 0

总金额: $0.00

是否为空: 是

加载中: 否

代码示例:

import { useCartStore } from '~/stores/cart'
import { storeToRefs } from 'pinia'

const cartStore = useCartStore()
const { items, itemCount, totalAmount, loading } = storeToRefs(cartStore)

// 获取购物车
await cartStore.fetchCart()

// 添加商品
await cartStore.addToCart({
  product_code: 'PROD-001',
  sku_code: 'SKU-001',
  quantity: 1,
  price: 29.99
})

// 更新数量
await cartStore.updateQuantity({
  cart_id: 1,
  item_id: 123,
  quantity: 2
})

// 移除商品
await cartStore.removeItem(123)

// 清空购物车
await cartStore.clearCart()

3. 响应式更新示例

实时监听状态变化

订单是否有效: 否

订单总额: $0.00

当前步骤: shipping

代码示例:

import { useCheckoutStore } from '~/stores/checkout'
import { storeToRefs } from 'pinia'
import { watch } from 'vue'

const checkoutStore = useCheckoutStore()
const { isCheckoutValid, orderTotal, currentStep } = storeToRefs(checkoutStore)

// 监听状态变化
watch(orderTotal, (newTotal) => {
  logger.warn('订单总额变化:', newTotal)
})

watch(currentStep, (newStep) => {
  logger.warn('当前步骤:', newStep)
})