fix(miniprogram): 多角色找茬模式发现并修复 16 个问题
P0 Bug: - 健康 AI 建议幽灵路径 pkg-appointment → appointment/create - 血糖 indicator_type 始终 blood_sugar,不区分空腹/餐后 - 商城订单页 switchTab 跳转非 TabBar 页面 P1 设计系统: - Profile/Index 页 emoji 图标替换为衬线首字 - Profile 硬编码颜色替换为 SCSS 变量 class - alerts/action-inbox 两个页面全面接入设计系统 - ai-report/detail 删除重复 mixin 定义 - ErrorBoundary 添加重试按钮移除 emoji - 新增 $r-xs: 8px 圆角变量 P1 导航/交互: - Profile 补充 4 个缺失菜单(透析/知情同意/用药/活动) - Settings 隐私政策改为跳转实际页面 - 全局启用 enablePullDownRefresh - 首页/健康页添加下拉刷新 - 咨询/消息列表添加分页加载更多 - 医生端患者列表改为上拉加载 - 首页/健康页间距统一为 24px
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
import { useState } from 'react';
|
||||
import { useState, useRef } from 'react';
|
||||
import { View, Text } from '@tarojs/components';
|
||||
import Taro, { useDidShow, usePullDownRefresh } from '@tarojs/taro';
|
||||
import Taro, { useDidShow, usePullDownRefresh, useReachBottom } from '@tarojs/taro';
|
||||
import { listConsultations, ConsultationSession } from '@/services/consultation';
|
||||
import Loading from '../../components/Loading';
|
||||
import './index.scss';
|
||||
@@ -33,32 +33,51 @@ export default function Consultation() {
|
||||
const [sessions, setSessions] = useState<ConsultationSession[]>([]);
|
||||
const [loading, setLoading] = useState(true);
|
||||
const [error, setError] = useState('');
|
||||
const [page, setPage] = useState(1);
|
||||
const [total, setTotal] = useState(0);
|
||||
const loadingRef = useRef(false);
|
||||
|
||||
const loadSessions = async () => {
|
||||
setLoading(true);
|
||||
const loadSessions = async (pageNum: number, isRefresh = false) => {
|
||||
if (loadingRef.current) return;
|
||||
loadingRef.current = true;
|
||||
if (isRefresh) setLoading(true);
|
||||
setError('');
|
||||
try {
|
||||
const resp = await listConsultations({ page: 1, page_size: 20 });
|
||||
setSessions(resp.data || []);
|
||||
const resp = await listConsultations({ page: pageNum, page_size: 20 });
|
||||
const list = resp.data || [];
|
||||
if (isRefresh) {
|
||||
setSessions(list);
|
||||
} else {
|
||||
setSessions((prev) => [...prev, ...list]);
|
||||
}
|
||||
setTotal(resp.total || 0);
|
||||
setPage(pageNum);
|
||||
} catch (e: unknown) {
|
||||
const msg = e instanceof Error ? e.message : '加载失败';
|
||||
setError(msg);
|
||||
} finally {
|
||||
setLoading(false);
|
||||
loadingRef.current = false;
|
||||
}
|
||||
};
|
||||
|
||||
useDidShow(() => {
|
||||
Taro.setNavigationBarTitle({ title: '在线咨询' });
|
||||
loadSessions();
|
||||
loadSessions(1, true);
|
||||
});
|
||||
|
||||
usePullDownRefresh(() => {
|
||||
loadSessions().finally(() => {
|
||||
loadSessions(1, true).finally(() => {
|
||||
Taro.stopPullDownRefresh();
|
||||
});
|
||||
});
|
||||
|
||||
useReachBottom(() => {
|
||||
if (!loading && sessions.length < total) {
|
||||
loadSessions(page + 1);
|
||||
}
|
||||
});
|
||||
|
||||
const handleTapSession = (session: ConsultationSession) => {
|
||||
Taro.navigateTo({ url: `/pages/consultation/detail/index?id=${session.id}` });
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user