1 Commits

Author SHA1 Message Date
李瑞
49f53d60ed 处理列表请求 2026-02-06 22:37:35 +08:00
4 changed files with 39 additions and 97 deletions

View File

@@ -4,39 +4,10 @@
box-sizing: border-box;
border-radius: 20px;
border: 0.5px solid rgba(0, 0, 0, 0.08);
background: linear-gradient(180deg, #BFFFEF 0%, #F2FFFC 100%), var(--Backgrounds-Primary, #FFF);
display: flex;
align-items: center;
justify-content: space-between;
position: relative;
background:
linear-gradient(180deg, #bfffef 0%, #f2fffc 100%),
var(--Backgrounds-Primary, #fff);
.lines {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
border-radius: 20px;
z-index: 1;
background-position-y: 85%;
pointer-events: none;
}
// .gradient {
// inset: 0;
// position: absolute;
// top: 0;
// left: 0;
// width: 100%;
// height: 100%;
// z-index: -2;
// border-radius: 20px;
// background:
// linear-gradient(180deg, #bfffef 0%, #f2fffc 100%),
// var(--Backgrounds-Primary, #fff);
// pointer-events: none;
// }
}
.higher {
@@ -47,6 +18,8 @@
.lower {
height: 80px;
@include commonCardStyle();
}
.desc {
@@ -57,7 +30,7 @@
gap: 7px;
.title {
color: #2a4d44;
color: #2A4D44;
font-family: "Noto Sans SC";
font-size: 16px;
font-style: normal;
@@ -65,7 +38,7 @@
line-height: 24px;
.colorTip {
color: #00e5ad;
color: #00E5AD;
font-family: "Noto Sans SC";
font-size: 16px;
font-style: normal;
@@ -74,7 +47,7 @@
}
.strongTip {
color: #00e5ad;
color: #00E5AD;
font-family: "Noto Sans SC";
font-size: 16px;
font-style: normal;
@@ -95,10 +68,8 @@
align-items: center;
justify-content: flex-start;
gap: 4px;
color: #5ca693;
font-feature-settings:
"liga" off,
"clig" off;
color: #5CA693;
font-feature-settings: 'liga' off, 'clig' off;
font-family: "PingFang SC";
font-size: 12px;
font-style: normal;
@@ -123,9 +94,7 @@
border-radius: 50%;
border: 1px solid #efefef;
overflow: hidden;
box-shadow:
0 0 1px 0 rgba(0, 0, 0, 0.2),
0 8px 20px 0 rgba(0, 0, 0, 0.12);
box-shadow: 0 0 1px 0 rgba(0, 0, 0, 0.20), 0 8px 20px 0 rgba(0, 0, 0, 0.12);
.avatarUrl {
width: calc(90px * $multiple);
@@ -143,14 +112,8 @@
flex-shrink: 0;
aspect-ratio: 1/1;
border-radius: calc(20px * $multiple);
border: 4px solid #fff;
background:
linear-gradient(
0deg,
rgba(89, 255, 214, 0.2) 0%,
rgba(89, 255, 214, 0.2) 100%
),
#fff;
border: 4px solid #FFF;
background: linear-gradient(0deg, rgba(89, 255, 214, 0.20) 0%, rgba(89, 255, 214, 0.20) 100%), #FFF;
box-shadow: 0 4px 36px 0 rgba(0, 0, 0, 0.12);
display: flex;
align-items: center;
@@ -172,4 +135,4 @@
align-items: center;
justify-content: flex-start;
@include commonAvatarStyle(0.5);
}
}

View File

@@ -2,13 +2,8 @@ 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,
useLastTestResult,
} from "@/store/userStore";
import { useUserInfo, useUserActions, useLastTestResult } from "@/store/userStore";
// import { getCurrentFullPath } from "@/utils";
import { OSS_BASE_URL } from "@/config/api";
import { StageType } from "@/services/evaluateService";
import { waitForAuthInit } from "@/utils/authInit";
import DocCopy from "@/static/ntrp/ntrp_doc_copy.svg";
@@ -31,6 +26,8 @@ function NTRPTestEntryCard(props: {
// 使用全局状态中的测试结果,避免重复调用接口
const lastTestResult = useLastTestResult();
console.log(userInfo);
// 从全局状态中获取测试结果,如果不存在则调用接口(使用请求锁避免重复调用)
useEffect(() => {
const init = async () => {
@@ -124,7 +121,7 @@ function NTRPTestEntryCard(props: {
if (!testFlag && !userInfo.phone) {
Taro.navigateTo({
url: `/login_pages/index/index?redirect=${encodeURIComponent(
`/other_pages/ntrp-evaluate/index?stage=${StageType.INTRO}`,
`/other_pages/ntrp-evaluate/index?stage=${StageType.INTRO}`
)}`,
});
return false;
@@ -135,7 +132,7 @@ function NTRPTestEntryCard(props: {
}`,
});
},
[setCallback, testFlag, type, evaluateCallback, userInfo.phone],
[setCallback, testFlag, type, evaluateCallback, userInfo.phone]
);
// 如果最近一个月有测试记录,则不展示
@@ -145,12 +142,6 @@ function NTRPTestEntryCard(props: {
return type === EvaluateScene.list ? (
<View className={styles.higher} onClick={handleTest}>
<View
className={styles.lines}
style={{
backgroundImage: `url(${OSS_BASE_URL}/images/215f1ce1-be52-4a92-8250-5a4a69e7f2b3.png)`,
}}
/>
<View className={styles.desc}>
<View>
<View className={styles.title}>
@@ -185,12 +176,6 @@ function NTRPTestEntryCard(props: {
</View>
) : (
<View className={styles.lower} onClick={handleTest}>
<View
className={styles.lines}
style={{
backgroundImage: `url(${OSS_BASE_URL}/images/215f1ce1-be52-4a92-8250-5a4a69e7f2b3.png)`,
}}
/>
<View className={styles.desc}>
<View className={styles.title}>
<Text></Text>

View File

@@ -63,6 +63,7 @@ const ListPageContent: React.FC<ListPageContentProps> = ({
area,
cityQrCode,
districts,
fetchMatches,
gamesNum, // 新增:获取球局数量
} = store;
@@ -77,6 +78,7 @@ const ListPageContent: React.FC<ListPageContentProps> = ({
pageOption,
isShowNoData,
} = listPageState || {};
console.log('===matches', matches)
const scrollContextRef = useRef(null);
const scrollViewRef = useRef(null);
@@ -92,6 +94,8 @@ const ListPageContent: React.FC<ListPageContentProps> = ({
// 记录上一次加载数据时的城市,用于检测城市变化
const lastLoadedAreaRef = useRef<[string, string] | null>(null);
const prevIsActiveRef = useRef(isActive);
// 首次加载标记:避免切回 tab 时使用 isRefresh 导致智能排序顺序抖动
const hasLoadedOnceRef = useRef(false);
// 处理距离筛选显示/隐藏
const handleDistanceFilterVisibleChange = useCallback(
@@ -230,9 +234,16 @@ const ListPageContent: React.FC<ListPageContentProps> = ({
// 只有当页面激活时才加载位置和列表数据
if (isActive) {
getLocation().catch((error) => {
console.error('获取位置信息失败:', error);
});
const firstLoad = !hasLoadedOnceRef.current;
getLocation(firstLoad)
.then(() => {
if (firstLoad) {
hasLoadedOnceRef.current = true;
}
})
.catch((error) => {
console.error('获取位置信息失败:', error);
});
}
}, [isActive]);
@@ -359,7 +370,7 @@ const ListPageContent: React.FC<ListPageContentProps> = ({
};
}, []);
const getLocation = async () => {
const getLocation = async (useRefresh = true) => {
const location = await getCurrentLocationInfo();
updateState({ location });
if (location && location.latitude && location.longitude) {
@@ -370,7 +381,7 @@ const ListPageContent: React.FC<ListPageContentProps> = ({
}
}
// 先调用列表接口
await getMatchesData();
await fetchMatches({}, useRefresh);
// 列表接口完成后,再调用数量接口
await fetchGetGamesCount();
// 初始数据加载完成后,记录当前城市

View File

@@ -1,4 +1,4 @@
import React, { useState, useCallback, forwardRef, useImperativeHandle } from 'react'
import React, { useState, useCallback, forwardRef, useImperativeHandle, useEffect } from 'react'
import Taro from '@tarojs/taro'
import { View, Text, Image, ScrollView } from '@tarojs/components'
import images from '@/config/images'
@@ -70,7 +70,6 @@ const StadiumDetail = forwardRef<StadiumDetailRef, StadiumDetailProps>(({
onAnyInput
}, ref) => {
const [openPicker, setOpenPicker] = useState(false);
const [scrollTop, setScrollTop] = useState(0);
const { getDictionaryValue } = useDictionaryActions()
const court_type = getDictionaryValue('court_type') || []
const court_surface = getDictionaryValue('court_surface') || []
@@ -171,27 +170,14 @@ const StadiumDetail = forwardRef<StadiumDetailRef, StadiumDetailProps>(({
const changeTextarea = (value) => {
if (value) {
// 先滚动到底部
setScrollTop(scrollTop ? scrollTop + 1 : 9999);
// 使用 setTimeout 确保滚动后再更新 openPicker
}
}
const changePicker = (value) => {
setOpenPicker(value);
setOpenPicker(value)
}
console.log(stadium,'stadiumstadium');
return (
<View className='stadium-detail'>
<ScrollView
className='stadium-detail-scroll'
refresherBackground="#FAFAFA"
scrollY={!openPicker}
scrollTop={scrollTop}
>
<ScrollView className='stadium-detail-scroll' refresherBackground="#FAFAFA" scrollY={!openPicker}>
{/* 已选球场 */}
<View
className={`stadium-item`}
@@ -234,12 +220,9 @@ const StadiumDetail = forwardRef<StadiumDetailRef, StadiumDetailProps>(({
<View className='textarea-tag-container'>
<TextareaTag
value={formData[item.prop]}
onChange={(value) => {
changeTextarea(true)
updateFormData(item.prop, value)
}}
// onBlur={() => changeTextarea(false)}
onFocus={() => changeTextarea(true)}
onChange={(value) => updateFormData(item.prop, value)}
onBlur={() => changePicker(false)}
onFocus={() => changePicker(true)}
placeholder='有其他场地信息可备注'
options={(item.options || []).map((o) => ({ label: o, value: o }))}
/>