From 7ad5ddb89878f78fab4db3a3740d5db79740a74f Mon Sep 17 00:00:00 2001 From: iven Date: Thu, 21 May 2026 16:30:50 +0800 Subject: [PATCH] =?UTF-8?q?fix(mp):=20Phase=203=20=E5=93=81=E8=B4=A8?= =?UTF-8?q?=E6=89=93=E7=A3=A8=20=E2=80=94=20Loading=E4=BC=98=E5=8C=96+Erro?= =?UTF-8?q?rBoundary=E9=87=8D=E8=AF=95=E4=B8=8A=E9=99=90+=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E5=AE=89=E5=85=A8+=E8=BE=93=E5=85=A5=E9=99=90?= =?UTF-8?q?=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Loading 组件区分列表底部状态(无spinner)vs 加载中状态 - ErrorBoundary 添加 MAX_RETRIES=3 限制,超出提示重启 - login 页 IS_SIMULATOR 改为 === 'develop' 精确匹配 - login 密码输入 type 改为 safe-password 防截屏 - appointment/create 备注输入添加 maxlength=200 - GuestHome "查看全部" 导航到文章列表页 --- .../src/components/ErrorBoundary/index.tsx | 27 ++++++++++++------- .../src/components/Loading/index.scss | 9 +++++++ .../src/components/Loading/index.tsx | 5 ++-- .../src/pages/appointment/create/index.tsx | 1 + apps/miniprogram/src/pages/index/index.tsx | 2 +- apps/miniprogram/src/pages/login/index.tsx | 4 +-- 6 files changed, 34 insertions(+), 14 deletions(-) diff --git a/apps/miniprogram/src/components/ErrorBoundary/index.tsx b/apps/miniprogram/src/components/ErrorBoundary/index.tsx index 5eb5262..81bc751 100644 --- a/apps/miniprogram/src/components/ErrorBoundary/index.tsx +++ b/apps/miniprogram/src/components/ErrorBoundary/index.tsx @@ -8,20 +8,24 @@ interface Props { interface State { hasError: boolean; + retryCount: number; } +const MAX_RETRIES = 3; + export default class ErrorBoundary extends Component { constructor(props: Props) { super(props); - this.state = { hasError: false }; + this.state = { hasError: false, retryCount: 0 }; } - static getDerivedStateFromError(): State { + static getDerivedStateFromError(): Partial { return { hasError: true }; } componentDidCatch(error: Error, info: React.ErrorInfo) { console.error('[ErrorBoundary]', error, info.componentStack); + this.setState((prev) => ({ retryCount: prev.retryCount + 1 })); } handleRetry = () => { @@ -30,19 +34,24 @@ export default class ErrorBoundary extends Component { render() { if (this.state.hasError) { + const exceeded = this.state.retryCount >= MAX_RETRIES; return ( ! 页面出了点问题 - 请返回重试 - - 重新加载 - + + {exceeded ? '请重启小程序' : '请返回重试'} + + {!exceeded && ( + + 重新加载 + + )} ); } diff --git a/apps/miniprogram/src/components/Loading/index.scss b/apps/miniprogram/src/components/Loading/index.scss index a930605..62f7316 100644 --- a/apps/miniprogram/src/components/Loading/index.scss +++ b/apps/miniprogram/src/components/Loading/index.scss @@ -28,3 +28,12 @@ font-size: var(--tk-font-body-sm); color: var(--tk-text-secondary); } + +.loading-state--end { + padding: 24px 0; + + .loading-state-text { + color: var(--tk-text-tertiary); + font-size: var(--tk-caption); + } +} diff --git a/apps/miniprogram/src/components/Loading/index.tsx b/apps/miniprogram/src/components/Loading/index.tsx index d84d71f..95f1dc7 100644 --- a/apps/miniprogram/src/components/Loading/index.tsx +++ b/apps/miniprogram/src/components/Loading/index.tsx @@ -7,9 +7,10 @@ interface LoadingProps { } export default React.memo(function Loading({ text = '加载中...' }: LoadingProps) { + const isListEnd = text !== '加载中...' && !text.includes('加载'); return ( - - + + {!isListEnd && } {text} ); diff --git a/apps/miniprogram/src/pages/appointment/create/index.tsx b/apps/miniprogram/src/pages/appointment/create/index.tsx index b5c1824..ad8ed48 100644 --- a/apps/miniprogram/src/pages/appointment/create/index.tsx +++ b/apps/miniprogram/src/pages/appointment/create/index.tsx @@ -272,6 +272,7 @@ export default function AppointmentCreate() { className='form-input' placeholder='请简要描述症状' value={reason} + maxlength={200} onInput={(e) => setReason(e.detail.value)} /> diff --git a/apps/miniprogram/src/pages/index/index.tsx b/apps/miniprogram/src/pages/index/index.tsx index 8dbd68b..24b4f95 100644 --- a/apps/miniprogram/src/pages/index/index.tsx +++ b/apps/miniprogram/src/pages/index/index.tsx @@ -130,7 +130,7 @@ function GuestHome({ modeClass }: { modeClass: string }) { 健康资讯 Taro.switchTab({ url: '/pages/health/index' })} + onClick={() => safeNavigateTo('/pages/article/index')} > 查看全部 › diff --git a/apps/miniprogram/src/pages/login/index.tsx b/apps/miniprogram/src/pages/login/index.tsx index 322c583..f43ec59 100644 --- a/apps/miniprogram/src/pages/login/index.tsx +++ b/apps/miniprogram/src/pages/login/index.tsx @@ -6,7 +6,7 @@ import { useAuthStore } from '../../stores/auth'; import './index.scss'; const IS_DEV = process.env.NODE_ENV !== 'production'; -const IS_SIMULATOR = typeof __wxConfig !== 'undefined' && (__wxConfig as any).envVersion !== 'release'; +const IS_SIMULATOR = typeof __wxConfig !== 'undefined' && (__wxConfig as any).envVersion === 'develop'; export default function Login() { const [username, setUsername] = useState(''); @@ -158,7 +158,7 @@ export default function Login() {