From 954c4ac296b371bfc95bd01646cca8c879c9564e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E5=BF=A0=E6=9E=97?= <170083662@qq.com> Date: Tue, 28 Oct 2025 10:20:39 +0800 Subject: [PATCH] =?UTF-8?q?fix(violation):=E4=BC=98=E5=8C=96=E5=88=97?= =?UTF-8?q?=E8=A1=A8=E5=8A=A0=E8=BD=BD=E9=80=BB=E8=BE=91=E5=92=8C=E9=98=B2?= =?UTF-8?q?=E9=87=8D=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修改 needRefresh 默认值为 false,避免初始加载重复 - 添加 isLoadingRef 状态防止并发请求 - 在 reload 方法中加入并发请求检查- 确保数据替换而非追加 - 调整 useDidShow 和 useEffect 逻辑以优化刷新机制 - 分页变化时才触发重新加载- 使用唯一 ID作为列表项 key 提升渲染性能 - 缩短提交成功后的返回延迟时间 - 地图标记增加标签显示违规编码信息 --- src/hjm/location.tsx | 17 +++++++-- src/hjm/violation/add.tsx | 4 +-- src/hjm/violation/list.tsx | 70 ++++++++++++++++++++++++++------------ 3 files changed, 65 insertions(+), 26 deletions(-) diff --git a/src/hjm/location.tsx b/src/hjm/location.tsx index 80394d8..e9e4562 100644 --- a/src/hjm/location.tsx +++ b/src/hjm/location.tsx @@ -339,12 +339,25 @@ const Location = () => { markers={ latitude && longitude && !isNaN(latitude) && !isNaN(longitude) && - isFinite(latitude) && isFinite(longitude) + isFinite(latitude) && isFinite(longitude) && item ? [{ id: 1, latitude: latitude, longitude: longitude, - iconPath: '' + iconPath: '', + label: { + content: item.code || '', + color: '#ffffff', + fontSize: 14, + bgColor: '#1989fa', + borderRadius: 5, + padding: 5, + textAlign: 'center', + anchorX: 0, + anchorY: 0, + borderWidth: 1, + borderColor: '#1989fa' + } }] : [] } diff --git a/src/hjm/violation/add.tsx b/src/hjm/violation/add.tsx index 3de518f..99ae5ee 100644 --- a/src/hjm/violation/add.tsx +++ b/src/hjm/violation/add.tsx @@ -149,8 +149,8 @@ function Add() { } setTimeout(() => { - Taro.navigateBack() - }, 2000) + return Taro.navigateBack() + }, 1000) } catch (error) { Taro.showToast({ title: isEditMode ? '更新失败' : '提交失败', diff --git a/src/hjm/violation/list.tsx b/src/hjm/violation/list.tsx index 3e246d0..80df647 100644 --- a/src/hjm/violation/list.tsx +++ b/src/hjm/violation/list.tsx @@ -27,7 +27,8 @@ const List: React.FC = () => { const [page, setPage] = useState(1) const [limit, setLimit] = useState(10) const [total, setTotal] = useState(0) - const [needRefresh, setNeedRefresh] = useState(true) + const [needRefresh, setNeedRefresh] = useState(false) // 修改默认值为false,避免初始加载时的重复 + const [isLoadingRef, setIsLoadingRef] = useState(false) // 防止并发加载 console.log(refreshing) // 获取状态显示 @@ -45,8 +46,15 @@ const List: React.FC = () => { } const reload = async (showLoading = true) => { + // 防止并发请求,如果正在加载则直接返回 + if (isLoadingRef) { + console.log('正在加载中,跳过本次请求') + return + } + setLimit(10) try { + setIsLoadingRef(true) // 设置加载标记 if (showLoading) setLoading(true) setRefreshing(true) @@ -69,8 +77,12 @@ const List: React.FC = () => { if(params.id){ where.code = params.id; } - const res = await pageHjmViolation(where) + console.log('开始请求数据, where:', where) + const res = await pageHjmViolation(where) + console.log('请求成功,获取到', res?.list?.length, '条数据') + + // 确保数据被替换而不是追加 setList(res?.list || []) setTotal(res?.count || 0) } catch (error) { @@ -82,6 +94,7 @@ const List: React.FC = () => { } finally { setLoading(false) setRefreshing(false) + setIsLoadingRef(false) // 清除加载标记 } } @@ -101,28 +114,41 @@ const List: React.FC = () => { // 页面显示时触发,包括从其他页面返回 useDidShow(() => { + console.log('useDidShow 触发, needRefresh:', needRefresh) if (needRefresh) { - reload(false); - setNeedRefresh(false); + console.log('执行 reload 由于 needRefresh=true') + reload(false) + setNeedRefresh(false) } - }); + }) + // + // useEffect(() => { + // // 监听刷新事件 + // const handleRefresh = () => { + // console.log('接收到 violationListRefresh 事件') + // // 只设置标记,不直接调用reload,由useDidShow处理 + // setNeedRefresh(true) + // } + // + // Taro.eventCenter.on('violationListRefresh', handleRefresh) + // + // // 初始加载数据 - 只在组件首次挂载时执行 + // console.log('组件初始化,执行初始 reload') + // reload().then() + // + // // 清理事件监听器 + // return () => { + // Taro.eventCenter.off('violationListRefresh', handleRefresh) + // } + // }, []) // 移除page和limit依赖,避免不必要的重新加载 + // 单独处理分页变化 useEffect(() => { - // 监听刷新事件 - const handleRefresh = () => { - setNeedRefresh(true); - }; - - Taro.eventCenter.on('violationListRefresh', handleRefresh); - - // 初始加载数据 - reload().then(); - - // 清理事件监听器 - return () => { - Taro.eventCenter.off('violationListRefresh', handleRefresh); - }; - }, [page, limit]); + if (page > 1 || limit !== 10) { // 只有当分页参数真正改变时才重新加载 + console.log('分页参数变化,执行 reload, page:', page, 'limit:', limit) + reload().then() + } + }, [page, limit]) const onPageChange = (current: number) => { setPage(current) @@ -192,12 +218,12 @@ const List: React.FC = () => { ) : (
- {list.map((item, index) => { + {list.map((item) => { const statusDisplay = getStatusDisplay(item.status) return (