import React, { useState, useEffect, useCallback, memo } from "react"; import { View, Image, Text } from "@tarojs/components"; import { requireLoginWithPhone } from "@/utils/helper"; import Taro from "@tarojs/taro"; import { useUserInfo, useUserActions } from "@/store/userStore"; // import { getCurrentFullPath } from "@/utils"; import evaluateService, { StageType } from "@/services/evaluateService"; import { waitForAuthInit } from "@/utils/authInit"; import DocCopy from "@/static/ntrp/ntrp_doc_copy.svg"; import ArrowRight from "@/static/ntrp/ntrp_arrow_right_color.svg"; import { EvaluateScene, useEvaluate, EvaluateCallback, } from "@/store/evaluateStore"; import styles from "./index.module.scss"; function NTRPTestEntryCard(props: { type: EvaluateScene; evaluateCallback?: EvaluateCallback; callback?: (flag) => void; }) { const [testFlag, setTestFlag] = useState(false); const [hasTestInLastMonth, setHasTestInLastMonth] = useState(false); const { type, evaluateCallback, callback } = props; const userInfo = useUserInfo(); const { setCallback } = useEvaluate(); const { fetchUserInfo } = useUserActions(); console.log(userInfo); useEffect(() => { const init = async () => { // 先等待静默登录完成 await waitForAuthInit(); // 然后再获取用户信息 if (!userInfo.id) { await fetchUserInfo(); } // 获取测试结果 const res = await evaluateService.getLastResult(); if (res.code === 0) { setTestFlag(res.data.has_test_record); setHasTestInLastMonth(res.data.has_test_in_last_month); callback?.(res.data.has_test_in_last_month); } }; init(); }, [userInfo]); const handleTest = useCallback( function () { // 没有绑定手机号,线条转登陆 // if (!requireLoginWithPhone()) { // return; // } switch (type) { case EvaluateScene.list: setCallback({ type, next: () => { Taro.redirectTo({ url: "/main_pages/index" }); }, onCancel: () => { Taro.navigateBack(); }, }); break; case EvaluateScene.share: setCallback({ type, next: () => { Taro.redirectTo({ url: "/main_pages/index" }); }, onCancel: () => { Taro.redirectTo({ url: "/main_pages/index" }); }, }); break; case EvaluateScene.detail: case EvaluateScene.publish: setCallback(evaluateCallback as EvaluateCallback); break; case EvaluateScene.user: setCallback({ type, next: () => { Taro.redirectTo({ url: "/main_pages/index" }); }, onCancel: () => { // Taro.redirectTo({ url: "/user_pages/myself/index" }); Taro.navigateBack(); }, }); break; case EvaluateScene.userEdit: setCallback({ type, next: () => { Taro.redirectTo({ url: "/main_pages/index" }); }, onCancel: () => { // Taro.redirectTo({ url: "/user_pages/edit/index" }); Taro.navigateBack(); }, }); break; default: setCallback({ type, next: () => { Taro.redirectTo({ url: "/main_pages/index" }); }, onCancel: () => { Taro.redirectTo({ url: "/main_pages/index" }); }, }); } if (!testFlag && !userInfo.phone) { Taro.navigateTo({ url: `/login_pages/index/index?redirect=${encodeURIComponent( `/other_pages/ntrp-evaluate/index?stage=${StageType.INTRO}` )}`, }); return false; } Taro.navigateTo({ url: `/other_pages/ntrp-evaluate/index?stage=${ testFlag ? StageType.INTRO : StageType.TEST }`, }); }, [setCallback, testFlag, type, evaluateCallback, userInfo.phone] ); // 如果最近一个月有测试记录,则不展示 if (hasTestInLastMonth && type === EvaluateScene.list) { return null; } return type === EvaluateScene.list ? ( 快速测一测✏️ 你的 ( NTRP ) 水平? 快速测试 {/* avatar side */} ) : ( 不知道自己的 ( NTRP ) 水平? 快速测试 {/* avatar side */} ); } export default memo(NTRPTestEntryCard); // export default NTRPTestEntryCard;