useWheelStore.ts 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  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: { count_down: 0 },
  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, ...initialState }));
  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 (data?.activate?.can === 0) {
  48. set((state) => ({
  49. ...state,
  50. status: 2,
  51. currentWheel: source,
  52. receiveTarget: {},
  53. }));
  54. return data;
  55. }
  56. if (source.can === 1 && data.not_receive === null) {
  57. set((state) => ({
  58. ...state,
  59. status: 1,
  60. currentWheel: source,
  61. receiveTarget: {},
  62. }));
  63. return data;
  64. }
  65. set((state) => ({ ...state, status: 3, currentWheel: source }));
  66. return data;
  67. });
  68. },
  69. reset: () => set(initialState),
  70. };
  71. });
  72. export default useWheelStore;