store.ts 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. import { reactive } from 'vue'
  2. import * as api from '@/service/user'
  3. import { getOrderInfo, getDiscountInfo } from '@/service/order'
  4. export const state = reactive({
  5. ready: false,
  6. bgWhite: false,
  7. userInfo: null as ApiUser.Info.Response | null,
  8. // 拉新优惠券信息
  9. coupon: {} as any,
  10. currentOrder: null as any,
  11. rebuyDiscount: 0, // 二次购买折扣
  12. })
  13. export async function getUserInfo(reportError?: boolean) {
  14. const { results } = await api.getUserInfo(reportError)
  15. state.userInfo = results
  16. return results
  17. }
  18. export async function updateUserInfo(data: ApiUser.Update.Request) {
  19. await api.updateUserInfo(data)
  20. Object.assign(state.userInfo as ApiUser.Info.Response, data)
  21. }
  22. export async function logout() {
  23. await api.logout()
  24. state.userInfo = null
  25. }
  26. export function bootstrap() {
  27. api.getInviteCoupon().then(({ results }) => (state.coupon = results))
  28. getDiscountInfo('3').then(
  29. ({ results }) => (state.rebuyDiscount = +results.amount)
  30. )
  31. return getUserInfo(false)
  32. }
  33. export async function getCurrentOrder(id: string | number) {
  34. if (!state.currentOrder || +state.currentOrder.id !== +id) {
  35. state.currentOrder = (await getOrderInfo(+id)).results
  36. }
  37. }