From bef2ea7169f3dbe65c086f30bad496c27f3474db Mon Sep 17 00:00:00 2001 From: iven Date: Tue, 5 May 2026 00:22:49 +0800 Subject: [PATCH] =?UTF-8?q?feat(miniprogram):=20=E9=80=82=E8=80=81?= =?UTF-8?q?=E5=8C=96=E4=BF=AE=E5=A4=8D=20=E2=80=94=20Phase=202e?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit M6: 创建 utils/date.ts 统一日期工具函数(formatDate/formatDateTime/toRelativeDate 等) M8: 28 个 SCSS 文件 font-size 20px → 22px 全量适老化 M7: request.ts 增加 403 权限不足/5xx 服务器错误/网络超时异常统一拦截 --- .../src/components/WeekCalendar/index.scss | 2 +- .../src/pages/ai-report/detail/index.scss | 4 +- .../src/pages/ai-report/list/index.scss | 2 +- .../src/pages/appointment/create/index.scss | 2 +- .../src/pages/appointment/detail/index.scss | 2 +- .../src/pages/appointment/index.scss | 4 +- .../src/pages/consultation/detail/index.scss | 2 +- .../src/pages/device-sync/index.scss | 2 +- .../doctor/consultation/detail/index.scss | 2 +- .../src/pages/doctor/dialysis/index.scss | 2 +- .../src/pages/doctor/prescription/index.scss | 2 +- apps/miniprogram/src/pages/events/index.scss | 2 +- apps/miniprogram/src/pages/login/index.scss | 2 +- apps/miniprogram/src/pages/mall/index.scss | 2 +- .../pkg-health/daily-monitoring/index.scss | 2 +- .../src/pages/pkg-mall/detail/index.scss | 4 +- .../src/pages/pkg-mall/exchange/index.scss | 2 +- .../src/pages/pkg-mall/orders/index.scss | 2 +- .../src/pages/pkg-profile/consents/index.scss | 2 +- .../pages/pkg-profile/diagnoses/index.scss | 2 +- .../dialysis-prescriptions/detail/index.scss | 2 +- .../dialysis-prescriptions/index.scss | 2 +- .../dialysis-records/detail/index.scss | 2 +- .../pkg-profile/dialysis-records/index.scss | 2 +- .../src/pages/pkg-profile/family/index.scss | 4 +- .../pages/pkg-profile/followups/index.scss | 2 +- .../src/pages/pkg-profile/reports/index.scss | 2 +- apps/miniprogram/src/pages/profile/index.scss | 4 +- apps/miniprogram/src/services/request.ts | 23 +++++- apps/miniprogram/src/utils/date.ts | 74 +++++++++++++++++++ 30 files changed, 129 insertions(+), 34 deletions(-) create mode 100644 apps/miniprogram/src/utils/date.ts diff --git a/apps/miniprogram/src/components/WeekCalendar/index.scss b/apps/miniprogram/src/components/WeekCalendar/index.scss index 5eeeff0..80f2b95 100644 --- a/apps/miniprogram/src/components/WeekCalendar/index.scss +++ b/apps/miniprogram/src/components/WeekCalendar/index.scss @@ -39,7 +39,7 @@ } .cell-weekday { - font-size: 20px; + font-size: 22px; color: $tx3; display: block; } diff --git a/apps/miniprogram/src/pages/ai-report/detail/index.scss b/apps/miniprogram/src/pages/ai-report/detail/index.scss index b39fb22..a441ece 100644 --- a/apps/miniprogram/src/pages/ai-report/detail/index.scss +++ b/apps/miniprogram/src/pages/ai-report/detail/index.scss @@ -13,7 +13,7 @@ display: inline-block; padding: 4px 12px; border-radius: 8px; - font-size: 20px; + font-size: 22px; font-weight: 500; background: $bg; color: $color; @@ -109,7 +109,7 @@ display: inline-block; padding: 4px 16px; border-radius: 8px; - font-size: 20px; + font-size: 22px; font-weight: 500; background: #f0e6ff; color: #7c3aed; diff --git a/apps/miniprogram/src/pages/ai-report/list/index.scss b/apps/miniprogram/src/pages/ai-report/list/index.scss index f26c20a..a87aad0 100644 --- a/apps/miniprogram/src/pages/ai-report/list/index.scss +++ b/apps/miniprogram/src/pages/ai-report/list/index.scss @@ -18,7 +18,7 @@ display: inline-block; padding: 4px 12px; border-radius: 8px; - font-size: 20px; + font-size: 22px; font-weight: 500; background: $bg; color: $color; diff --git a/apps/miniprogram/src/pages/appointment/create/index.scss b/apps/miniprogram/src/pages/appointment/create/index.scss index b0d94ac..508647d 100644 --- a/apps/miniprogram/src/pages/appointment/create/index.scss +++ b/apps/miniprogram/src/pages/appointment/create/index.scss @@ -185,7 +185,7 @@ } .confirm-dept-text { - font-size: 20px; + font-size: 22px; font-weight: 500; color: $pri; } diff --git a/apps/miniprogram/src/pages/appointment/detail/index.scss b/apps/miniprogram/src/pages/appointment/detail/index.scss index da8725d..fe34099 100644 --- a/apps/miniprogram/src/pages/appointment/detail/index.scss +++ b/apps/miniprogram/src/pages/appointment/detail/index.scss @@ -130,7 +130,7 @@ .info-icon-serif { font-family: 'Georgia', 'Times New Roman', serif; - font-size: 20px; + font-size: 22px; color: $pri; background: $pri-l; width: 36px; diff --git a/apps/miniprogram/src/pages/appointment/index.scss b/apps/miniprogram/src/pages/appointment/index.scss index c2d4c1a..95469b9 100644 --- a/apps/miniprogram/src/pages/appointment/index.scss +++ b/apps/miniprogram/src/pages/appointment/index.scss @@ -93,7 +93,7 @@ } .dept-tag-text { - font-size: 20px; + font-size: 22px; font-weight: 500; color: $pri; } @@ -124,7 +124,7 @@ } .status-tag-text { - font-size: 20px; + font-size: 22px; font-weight: 500; } diff --git a/apps/miniprogram/src/pages/consultation/detail/index.scss b/apps/miniprogram/src/pages/consultation/detail/index.scss index e0ecc2c..2372321 100644 --- a/apps/miniprogram/src/pages/consultation/detail/index.scss +++ b/apps/miniprogram/src/pages/consultation/detail/index.scss @@ -94,7 +94,7 @@ } .msg-time { - font-size: 20px; + font-size: 22px; color: $tx3; display: block; margin-top: 8px; diff --git a/apps/miniprogram/src/pages/device-sync/index.scss b/apps/miniprogram/src/pages/device-sync/index.scss index c9f7f91..b6130cb 100644 --- a/apps/miniprogram/src/pages/device-sync/index.scss +++ b/apps/miniprogram/src/pages/device-sync/index.scss @@ -18,7 +18,7 @@ display: inline-block; padding: 4px 12px; border-radius: 8px; - font-size: 20px; + font-size: 22px; font-weight: 500; background: $bg; color: $color; diff --git a/apps/miniprogram/src/pages/doctor/consultation/detail/index.scss b/apps/miniprogram/src/pages/doctor/consultation/detail/index.scss index 2295b2d..73d1d5e 100644 --- a/apps/miniprogram/src/pages/doctor/consultation/detail/index.scss +++ b/apps/miniprogram/src/pages/doctor/consultation/detail/index.scss @@ -76,7 +76,7 @@ .msg-time { @include serif-number; - font-size: 20px; + font-size: 22px; color: $tx3; display: block; margin-top: 8px; diff --git a/apps/miniprogram/src/pages/doctor/dialysis/index.scss b/apps/miniprogram/src/pages/doctor/dialysis/index.scss index 41c592c..39bf38c 100644 --- a/apps/miniprogram/src/pages/doctor/dialysis/index.scss +++ b/apps/miniprogram/src/pages/doctor/dialysis/index.scss @@ -109,7 +109,7 @@ display: inline-block; padding: 4px 12px; border-radius: 8px; - font-size: 20px; + font-size: 22px; background: $bd-l; color: $tx3; diff --git a/apps/miniprogram/src/pages/doctor/prescription/index.scss b/apps/miniprogram/src/pages/doctor/prescription/index.scss index f2c2e89..e07d808 100644 --- a/apps/miniprogram/src/pages/doctor/prescription/index.scss +++ b/apps/miniprogram/src/pages/doctor/prescription/index.scss @@ -95,7 +95,7 @@ display: inline-block; padding: 4px 12px; border-radius: 8px; - font-size: 20px; + font-size: 22px; background: $bd-l; color: $tx3; diff --git a/apps/miniprogram/src/pages/events/index.scss b/apps/miniprogram/src/pages/events/index.scss index 18217f5..a0a244f 100644 --- a/apps/miniprogram/src/pages/events/index.scss +++ b/apps/miniprogram/src/pages/events/index.scss @@ -18,7 +18,7 @@ display: inline-block; padding: 4px 12px; border-radius: 8px; - font-size: 20px; + font-size: 22px; font-weight: 500; background: $bg; color: $color; diff --git a/apps/miniprogram/src/pages/login/index.scss b/apps/miniprogram/src/pages/login/index.scss index 17944e4..f4fdd07 100644 --- a/apps/miniprogram/src/pages/login/index.scss +++ b/apps/miniprogram/src/pages/login/index.scss @@ -120,7 +120,7 @@ } .agreement-check-mark { - font-size: 20px; + font-size: 22px; color: #fff; font-weight: bold; line-height: 1; diff --git a/apps/miniprogram/src/pages/mall/index.scss b/apps/miniprogram/src/pages/mall/index.scss index ee60af2..a56da8c 100644 --- a/apps/miniprogram/src/pages/mall/index.scss +++ b/apps/miniprogram/src/pages/mall/index.scss @@ -193,7 +193,7 @@ } .product-stock { - font-size: 20px; + font-size: 22px; padding: 2px 10px; border-radius: $r-sm; diff --git a/apps/miniprogram/src/pages/pkg-health/daily-monitoring/index.scss b/apps/miniprogram/src/pages/pkg-health/daily-monitoring/index.scss index 33a99ce..df3ea09 100644 --- a/apps/miniprogram/src/pages/pkg-health/daily-monitoring/index.scss +++ b/apps/miniprogram/src/pages/pkg-health/daily-monitoring/index.scss @@ -67,7 +67,7 @@ .dm-card-badge { @include tag($acc-l, $acc); - font-size: 20px; + font-size: 22px; margin-left: auto; } diff --git a/apps/miniprogram/src/pages/pkg-mall/detail/index.scss b/apps/miniprogram/src/pages/pkg-mall/detail/index.scss index 4ca115e..8e9be0a 100644 --- a/apps/miniprogram/src/pages/pkg-mall/detail/index.scss +++ b/apps/miniprogram/src/pages/pkg-mall/detail/index.scss @@ -18,7 +18,7 @@ display: inline-block; padding: 4px 12px; border-radius: 8px; - font-size: 20px; + font-size: 22px; font-weight: 500; background: $bg; color: $color; @@ -244,6 +244,6 @@ .tx-remaining { @include serif-number; - font-size: 20px; + font-size: 22px; color: $tx3; } diff --git a/apps/miniprogram/src/pages/pkg-mall/exchange/index.scss b/apps/miniprogram/src/pages/pkg-mall/exchange/index.scss index b4de2d6..1d588da 100644 --- a/apps/miniprogram/src/pages/pkg-mall/exchange/index.scss +++ b/apps/miniprogram/src/pages/pkg-mall/exchange/index.scss @@ -18,7 +18,7 @@ display: inline-block; padding: 4px 12px; border-radius: 8px; - font-size: 20px; + font-size: 22px; font-weight: 500; background: $bg; color: $color; diff --git a/apps/miniprogram/src/pages/pkg-mall/orders/index.scss b/apps/miniprogram/src/pages/pkg-mall/orders/index.scss index 41d3099..3dd79fe 100644 --- a/apps/miniprogram/src/pages/pkg-mall/orders/index.scss +++ b/apps/miniprogram/src/pages/pkg-mall/orders/index.scss @@ -18,7 +18,7 @@ display: inline-block; padding: 4px 12px; border-radius: 8px; - font-size: 20px; + font-size: 22px; font-weight: 500; background: $bg; color: $color; diff --git a/apps/miniprogram/src/pages/pkg-profile/consents/index.scss b/apps/miniprogram/src/pages/pkg-profile/consents/index.scss index da5f049..d44ef59 100644 --- a/apps/miniprogram/src/pages/pkg-profile/consents/index.scss +++ b/apps/miniprogram/src/pages/pkg-profile/consents/index.scss @@ -13,7 +13,7 @@ display: inline-block; padding: 4px 12px; border-radius: 8px; - font-size: 20px; + font-size: 22px; font-weight: 500; background: $bg; color: $color; diff --git a/apps/miniprogram/src/pages/pkg-profile/diagnoses/index.scss b/apps/miniprogram/src/pages/pkg-profile/diagnoses/index.scss index dcdb817..b3b925c 100644 --- a/apps/miniprogram/src/pages/pkg-profile/diagnoses/index.scss +++ b/apps/miniprogram/src/pages/pkg-profile/diagnoses/index.scss @@ -4,7 +4,7 @@ display: inline-block; padding: 4px 12px; border-radius: 8px; - font-size: 20px; + font-size: 22px; font-weight: 500; background: $bg; color: $color; diff --git a/apps/miniprogram/src/pages/pkg-profile/dialysis-prescriptions/detail/index.scss b/apps/miniprogram/src/pages/pkg-profile/dialysis-prescriptions/detail/index.scss index cd83ed1..63bc23d 100644 --- a/apps/miniprogram/src/pages/pkg-profile/dialysis-prescriptions/detail/index.scss +++ b/apps/miniprogram/src/pages/pkg-profile/dialysis-prescriptions/detail/index.scss @@ -40,7 +40,7 @@ display: inline-block; padding: 4px 12px; border-radius: 8px; - font-size: 20px; + font-size: 22px; font-weight: 500; background: $bd-l; color: $tx3; diff --git a/apps/miniprogram/src/pages/pkg-profile/dialysis-prescriptions/index.scss b/apps/miniprogram/src/pages/pkg-profile/dialysis-prescriptions/index.scss index 5ccbb97..d5fb96a 100644 --- a/apps/miniprogram/src/pages/pkg-profile/dialysis-prescriptions/index.scss +++ b/apps/miniprogram/src/pages/pkg-profile/dialysis-prescriptions/index.scss @@ -13,7 +13,7 @@ display: inline-block; padding: 4px 12px; border-radius: 8px; - font-size: 20px; + font-size: 22px; font-weight: 500; background: $bg; color: $color; diff --git a/apps/miniprogram/src/pages/pkg-profile/dialysis-records/detail/index.scss b/apps/miniprogram/src/pages/pkg-profile/dialysis-records/detail/index.scss index 5584ab4..6c057dd 100644 --- a/apps/miniprogram/src/pages/pkg-profile/dialysis-records/detail/index.scss +++ b/apps/miniprogram/src/pages/pkg-profile/dialysis-records/detail/index.scss @@ -40,7 +40,7 @@ display: inline-block; padding: 4px 12px; border-radius: 8px; - font-size: 20px; + font-size: 22px; font-weight: 500; background: $bd-l; color: $tx3; diff --git a/apps/miniprogram/src/pages/pkg-profile/dialysis-records/index.scss b/apps/miniprogram/src/pages/pkg-profile/dialysis-records/index.scss index bbcaf9d..8c8609a 100644 --- a/apps/miniprogram/src/pages/pkg-profile/dialysis-records/index.scss +++ b/apps/miniprogram/src/pages/pkg-profile/dialysis-records/index.scss @@ -13,7 +13,7 @@ display: inline-block; padding: 4px 12px; border-radius: 8px; - font-size: 20px; + font-size: 22px; font-weight: 500; background: $bg; color: $color; diff --git a/apps/miniprogram/src/pages/pkg-profile/family/index.scss b/apps/miniprogram/src/pages/pkg-profile/family/index.scss index dc091f4..a0017be 100644 --- a/apps/miniprogram/src/pages/pkg-profile/family/index.scss +++ b/apps/miniprogram/src/pages/pkg-profile/family/index.scss @@ -18,7 +18,7 @@ display: inline-block; padding: 4px 12px; border-radius: 8px; - font-size: 20px; + font-size: 22px; font-weight: 500; background: $bg; color: $color; @@ -117,7 +117,7 @@ .family-relation-tag { @include tag($pri-l, $pri-d); - font-size: 20px; + font-size: 22px; padding: 2px 12px; } diff --git a/apps/miniprogram/src/pages/pkg-profile/followups/index.scss b/apps/miniprogram/src/pages/pkg-profile/followups/index.scss index c054f78..c5d469e 100644 --- a/apps/miniprogram/src/pages/pkg-profile/followups/index.scss +++ b/apps/miniprogram/src/pages/pkg-profile/followups/index.scss @@ -4,7 +4,7 @@ display: inline-block; padding: 4px 12px; border-radius: 8px; - font-size: 20px; + font-size: 22px; font-weight: 500; background: $bg; color: $color; diff --git a/apps/miniprogram/src/pages/pkg-profile/reports/index.scss b/apps/miniprogram/src/pages/pkg-profile/reports/index.scss index 62fc4a5..de6880d 100644 --- a/apps/miniprogram/src/pages/pkg-profile/reports/index.scss +++ b/apps/miniprogram/src/pages/pkg-profile/reports/index.scss @@ -18,7 +18,7 @@ display: inline-block; padding: 4px 12px; border-radius: 8px; - font-size: 20px; + font-size: 22px; font-weight: 500; background: $bg; color: $color; diff --git a/apps/miniprogram/src/pages/profile/index.scss b/apps/miniprogram/src/pages/profile/index.scss index 7046fee..f1c58cf 100644 --- a/apps/miniprogram/src/pages/profile/index.scss +++ b/apps/miniprogram/src/pages/profile/index.scss @@ -39,7 +39,7 @@ } .profile-name { - font-size: 20px; + font-size: 22px; font-weight: 700; color: $tx; display: block; @@ -121,7 +121,7 @@ } .menu-icon-text { - font-size: 20px; + font-size: 22px; } .menu-label { diff --git a/apps/miniprogram/src/services/request.ts b/apps/miniprogram/src/services/request.ts index 93b2a16..9d9653b 100644 --- a/apps/miniprogram/src/services/request.ts +++ b/apps/miniprogram/src/services/request.ts @@ -60,7 +60,18 @@ async function doRefresh(): Promise { async function request(method: string, path: string, data?: unknown): Promise { const headers = await getHeaders(); const url = `${BASE_URL}${path}`; - const res = await Taro.request({ url, method: method as any, data, header: headers, timeout: 15000 }); + let res: Taro.request.SuccessCallbackResult; + try { + res = await Taro.request({ url, method: method as any, data, header: headers, timeout: 15000 }); + } catch (err: any) { + const msg = err?.errMsg || ''; + if (msg.includes('timeout')) { + Taro.showToast({ title: '网络超时,请重试', icon: 'none' }); + throw new Error('网络超时'); + } + Taro.showToast({ title: '网络异常,请检查连接', icon: 'none' }); + throw new Error('网络异常'); + } if (res.statusCode === 401) { const refreshed = await tryRefreshToken(); @@ -73,6 +84,16 @@ async function request(method: string, path: string, data?: unknown): Promise throw new Error('登录已过期'); } + if (res.statusCode === 403) { + Taro.showToast({ title: '权限不足', icon: 'none' }); + throw new Error('权限不足'); + } + + if (res.statusCode >= 500) { + Taro.showToast({ title: '服务器繁忙,请稍后重试', icon: 'none' }); + throw new Error('服务器错误'); + } + const body = res.data as ApiResponse; if (!body.success) throw new Error(body.message || '请求失败'); return body.data as T; diff --git a/apps/miniprogram/src/utils/date.ts b/apps/miniprogram/src/utils/date.ts new file mode 100644 index 0000000..4b04daa --- /dev/null +++ b/apps/miniprogram/src/utils/date.ts @@ -0,0 +1,74 @@ +/** + * 统一日期工具函数 — 替代分散在各页面的内联日期格式化 + */ + +/** 格式化为 YYYY-MM-DD */ +export function formatDate(iso: string | null | undefined): string { + if (!iso) return '-'; + const d = new Date(iso); + if (isNaN(d.getTime())) return '-'; + const y = d.getFullYear(); + const m = String(d.getMonth() + 1).padStart(2, '0'); + const day = String(d.getDate()).padStart(2, '0'); + return `${y}-${m}-${day}`; +} + +/** 格式化为 YYYY-MM-DD HH:mm */ +export function formatDateTime(iso: string | null | undefined): string { + if (!iso) return '-'; + const d = new Date(iso); + if (isNaN(d.getTime())) return '-'; + const date = formatDate(iso); + const h = String(d.getHours()).padStart(2, '0'); + const min = String(d.getMinutes()).padStart(2, '0'); + return `${date} ${h}:${min}`; +} + +/** 格式化为 YYYY-MM-DD HH:mm:ss */ +export function formatDateTimeFull(iso: string | null | undefined): string { + if (!iso) return '-'; + const d = new Date(iso); + if (isNaN(d.getTime())) return '-'; + const base = formatDateTime(iso); + const s = String(d.getSeconds()).padStart(2, '0'); + return `${base}:${s}`; +} + +/** 获取今天的 YYYY-MM-DD */ +export function today(): string { + const d = new Date(); + const y = d.getFullYear(); + const m = String(d.getMonth() + 1).padStart(2, '0'); + const day = String(d.getDate()).padStart(2, '0'); + return `${y}-${m}-${day}`; +} + +/** 相对时间:今天/昨天/前天/更早 */ +export function toRelativeDate(iso: string | null | undefined): string { + if (!iso) return '-'; + const d = new Date(iso); + if (isNaN(d.getTime())) return '-'; + + const now = new Date(); + const todayStart = new Date(now.getFullYear(), now.getMonth(), now.getDate()); + const targetStart = new Date(d.getFullYear(), d.getMonth(), d.getDate()); + const diffDays = Math.round((todayStart.getTime() - targetStart.getTime()) / 86400000); + + if (diffDays === 0) return '今天'; + if (diffDays === 1) return '昨天'; + if (diffDays === 2) return '前天'; + return formatDate(iso); +} + +/** 格式化为中文月日 + 星期 */ +export function formatMonthDayWeek(iso: string | null | undefined): string { + if (!iso) return ''; + const d = new Date(iso); + if (isNaN(d.getTime())) return ''; + + const weekdays = ['日', '一', '二', '三', '四', '五', '六']; + const m = d.getMonth() + 1; + const day = d.getDate(); + const w = weekdays[d.getDay()]; + return `${m}月${day}日 周${w}`; +}