useWheelStore.ts 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. import { Activate, Activity, getWheelApi, NotReceive, WheelsType } from "@/api/cashWheel";
  2. import { getToken } from "@/utils/Cookies";
  3. import { create } from "zustand";
  4. /**
  5. * 轮盘store
  6. */
  7. interface CurrentWheel extends Activate, Activity {}
  8. interface State {
  9. status: 1 | 2 | 3; // status: 1可旋转 2可领取 3 不展示
  10. currentWheel: Partial<CurrentWheel>;
  11. totalCount: number;
  12. receiveTarget: Partial<NotReceive>;
  13. }
  14. interface Action {
  15. setWheel: () => Promise<WheelsType | undefined>;
  16. }
  17. const initialState: State = {
  18. status: 3,
  19. currentWheel: {},
  20. totalCount: 100,
  21. receiveTarget: {},
  22. };
  23. /**
  24. * @description 系统配置
  25. */
  26. export const useWheelStore = create<State & Action>()((set, get) => {
  27. return {
  28. ...initialState,
  29. setWheel: () => {
  30. if (!getToken()) return Promise.resolve(undefined);
  31. return getWheelApi().then((res) => {
  32. const { data } = res;
  33. if (Array.isArray(data)) {
  34. set((state) => ({ ...state, status: 3 }));
  35. return undefined;
  36. }
  37. let source = { ...(data.activities?.[0] || {}), ...data.activate };
  38. if (data.not_receive) {
  39. set((state) => ({
  40. ...state,
  41. status: 2,
  42. currentWheel: source,
  43. receiveTarget: data.not_receive[0],
  44. }));
  45. return data;
  46. }
  47. if (source.can === 1 && data.not_receive === null) {
  48. set((state) => ({ ...state, status: 1, currentWheel: source }));
  49. return data;
  50. }
  51. set((state) => ({ ...state, status: 3, currentWheel: source }));
  52. return data;
  53. });
  54. },
  55. reset: () => set(initialState),
  56. };
  57. });
  58. export default useWheelStore;