diff --git a/app/event/lanternfestival/page.jsx b/app/event/lanternfestival/page.jsx new file mode 100644 index 0000000..af58a20 --- /dev/null +++ b/app/event/lanternfestival/page.jsx @@ -0,0 +1,247 @@ +"use client"; + +import React, { useState, useEffect, useCallback } from "react"; +import { useRouter, useSearchParams } from "next/navigation"; +import webviewBaseRequest from "@/utils/webviewBaseRequest"; +import { Toast } from "antd-mobile"; +import { InfiniteScroll } from "antd-mobile"; +import { setCookie } from "cookies-next"; +import copy from "@/utils/copy"; + +export default function LanternFestival() { + const router = useRouter(); + const searchParams = useSearchParams(); + + const getBase = useCallback( + (webviewBase) => { + let searchParamsObj = null; + let currentBaseCode = searchParams.get("base"); + if (currentBaseCode) { + let currentBase = JSON.parse(currentBaseCode); + searchParamsObj = { ...currentBase }; + } + return searchParamsObj || webviewBase; + }, + [searchParams] + ); + + const [data, setData] = useState([]); + const [more, setMore] = useState(true); + const [offset, setOffset] = useState(0); + const [isFetching, setIsFetching] = useState(true); + const [isLoading, setIsLoading] = useState(false); + + const getData = async () => { + if (isLoading) return; + setIsLoading(true); + const webviewBase = webviewBaseRequest(); + let base = getBase(webviewBase); + try { + const response = await fetch(`/api/activity/zone_discount`, { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ + ...base, + offset: offset, + limit: 10, + }), + }); + const _data = await response.json(); + if (_data.ret === -1) { + Toast.show({ + content: _data.msg, + }); + return; + } + setOffset(_data.data.offset); + if (_data.data.more === 0) setMore(false); + setData((prev) => [...prev, ..._data.data.list]); + } catch (error) { + console.error(error); + } finally { + setIsFetching(false); + setIsLoading(false); + } + }; + + useEffect(() => { + setTimeout(() => { + getData(); + }, 500); + }, []); + + const InfiniteScrollContent = ({ hasMore }) => { + return ( + <> + {hasMore ? ( + <> + 加载中... + > + ) : ( + --- 我是有底线的 --- + )} + > + ); + }; + + const Card = ({ item }) => { + return ( +
{item?.name}
++ 空间原价{" "} + + ¥{item?.original_price / 100} + +
++ ¥ + {item?.price / 100} +
++ 活动已结束 +
+活动已结束
+