|
@@ -1,9 +1,12 @@
|
|
|
/* eslint-disable @next/next/no-img-element */
|
|
|
"use client";
|
|
|
+import { claimActivityReward } from "@/api/activity";
|
|
|
import { useRouter } from "@/i18n/routing";
|
|
|
import { useSignStore } from "@/stores/useSignStore";
|
|
|
-import { Mask } from "antd-mobile";
|
|
|
-import { FC, forwardRef, memo, useImperativeHandle, useRef, useState } from "react";
|
|
|
+import { formatAmount } from "@/utils";
|
|
|
+import { Mask, Toast } from "antd-mobile";
|
|
|
+import BigNumber from "bignumber.js";
|
|
|
+import { FC, forwardRef, memo, useImperativeHandle, useMemo, useRef, useState } from "react";
|
|
|
import styles from "./style.module.scss";
|
|
|
|
|
|
export interface SignInModalProps {
|
|
@@ -175,9 +178,11 @@ export const PayBoxList: FC<PayProps> = ({ type = "modal" }) => {
|
|
|
|
|
|
const SignInModal = forwardRef(function SignInModal(props, ref) {
|
|
|
const [visible, setVisible] = useState(false);
|
|
|
+ const [amount, setAmount] = useState({});
|
|
|
|
|
|
const signData = useSignStore((state) => state.signData);
|
|
|
const activity_id = useSignStore((state) => state.activity_id);
|
|
|
+ const getSignData = useSignStore((state) => state.getSignData);
|
|
|
|
|
|
const totalData = signData.list;
|
|
|
const isSignNum = totalData?.reduce((pre, cur) => (cur.is_suss ? pre + 1 : pre), 0);
|
|
@@ -191,6 +196,50 @@ const SignInModal = forwardRef(function SignInModal(props, ref) {
|
|
|
onOpen: () => setVisible(true),
|
|
|
};
|
|
|
});
|
|
|
+ const curData = useMemo(() => {
|
|
|
+ if (!signData || !signData.list || signData.cur_num == undefined) return null;
|
|
|
+ return signData.list[signData.cur_num];
|
|
|
+ }, [signData]);
|
|
|
+
|
|
|
+ const doClaim = async () => {
|
|
|
+ if (!curData || !signData.is_op) return null;
|
|
|
+ try {
|
|
|
+ const res = await claimActivityReward({
|
|
|
+ activity_id: Number(activity_id),
|
|
|
+ id: curData.id as number,
|
|
|
+ });
|
|
|
+ getSignData({ activity_id: Number(activity_id) });
|
|
|
+ if (res.code === 200 && res?.data?.code === 1) {
|
|
|
+ const amountObj: any = {};
|
|
|
+ if (res?.data?.reward) {
|
|
|
+ res?.data?.reward.forEach((item: any) => {
|
|
|
+ amountObj[`coin_${item.coin_type}`] = formatAmount(item.amount);
|
|
|
+ });
|
|
|
+ //extra_reward
|
|
|
+ }
|
|
|
+ if (res?.data?.extra_reward) {
|
|
|
+ res?.data?.extra_reward.forEach((item: any) => {
|
|
|
+ amountObj[`coin_${item.coin_type}`] = formatAmount(
|
|
|
+ new BigNumber(amountObj[`coin_${item.coin_type}`] || 0)
|
|
|
+ .plus(item.amount)
|
|
|
+ .toString()
|
|
|
+ );
|
|
|
+ });
|
|
|
+ }
|
|
|
+ setAmount(amountObj);
|
|
|
+ setVisible(true);
|
|
|
+ } else {
|
|
|
+ throw new Error("Erro de parâmetro");
|
|
|
+ }
|
|
|
+ } catch (error: any) {
|
|
|
+ if (error) {
|
|
|
+ Toast.show({
|
|
|
+ content: error.message || error.toString(),
|
|
|
+ maskClickable: false,
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+ };
|
|
|
|
|
|
return (
|
|
|
<>
|
|
@@ -245,14 +294,18 @@ const SignInModal = forwardRef(function SignInModal(props, ref) {
|
|
|
{/* 签到body */}
|
|
|
<div className="absolute left-0 top-0 w-[100%]">
|
|
|
<div className="relative mt-[0.51rem] w-[100%]">
|
|
|
- <BoxListCom ref={boxRef} />
|
|
|
+ <div className="max-h-[3rem] overflow-auto">
|
|
|
+ <BoxListCom ref={boxRef} />
|
|
|
+ </div>
|
|
|
+
|
|
|
<div
|
|
|
className="mt-[0.25rem] flex h-[0.62rem] justify-center"
|
|
|
- onClick={() => {
|
|
|
- router.push(
|
|
|
- `/signin?activity_id=${activity_id}`
|
|
|
- );
|
|
|
- }}
|
|
|
+ onClick={doClaim}
|
|
|
+ // onClick={() => {
|
|
|
+ // router.push(
|
|
|
+ // `/signin?activity_id=${activity_id}`
|
|
|
+ // );
|
|
|
+ // }}
|
|
|
>
|
|
|
<img
|
|
|
src={
|