diff --git a/apps/miniprogram/src/pages/pkg-doctor-core/action-inbox/index.scss b/apps/miniprogram/src/pages/pkg-doctor-core/action-inbox/index.scss
index bd82bbd..04abf4e 100644
--- a/apps/miniprogram/src/pages/pkg-doctor-core/action-inbox/index.scss
+++ b/apps/miniprogram/src/pages/pkg-doctor-core/action-inbox/index.scss
@@ -1,10 +1,8 @@
-@import '../../../styles/variables.scss';
-@import '../../../styles/mixins.scss';
+@import '../../styles/variables.scss';
+@import '../../styles/mixins.scss';
-.action-inbox-page {
- min-height: 100vh;
- background: $bg;
-}
+// PageShell 已接管:min-height, background
+// ContentCard 已接管:inbox-card 背景/圆角/阴影/触摸反馈
.inbox-list {
height: calc(100vh - 50px);
@@ -12,11 +10,7 @@
}
.inbox-card {
- background: $card;
- border-radius: $r-sm;
- padding: 14px 16px;
margin-bottom: 10px;
- box-shadow: $shadow-sm;
.inbox-card-header {
display: flex;
diff --git a/apps/miniprogram/src/pages/pkg-doctor-core/action-inbox/index.tsx b/apps/miniprogram/src/pages/pkg-doctor-core/action-inbox/index.tsx
index d52927b..049f165 100644
--- a/apps/miniprogram/src/pages/pkg-doctor-core/action-inbox/index.tsx
+++ b/apps/miniprogram/src/pages/pkg-doctor-core/action-inbox/index.tsx
@@ -13,6 +13,8 @@ import Loading from '@/components/Loading';
import ErrorState from '@/components/ErrorState';
import EmptyState from '@/components/EmptyState';
import SegmentTabs from '@/components/SegmentTabs';
+import PageShell from '@/components/ui/PageShell';
+import ContentCard from '@/components/ui/ContentCard';
import { useElderClass } from '../../../hooks/useElderClass';
import './index.scss';
@@ -119,7 +121,7 @@ export default function ActionInboxPage() {
};
return (
-
+
{error ? (
@@ -129,10 +131,11 @@ export default function ActionInboxPage() {
) : (
{items.map((item) => (
- handleItemClick(item)}
+ activeFeedback="opacity"
+ onPress={() => handleItemClick(item)}
>
-
+
))}
{loading && }
{!loading && items.length >= total && total > 0 && (
@@ -208,6 +211,6 @@ export default function ActionInboxPage() {
)}
)}
-
+
);
}
diff --git a/apps/miniprogram/src/pages/pkg-doctor-core/index.scss b/apps/miniprogram/src/pages/pkg-doctor-core/index.scss
index de5ace2..3a15391 100644
--- a/apps/miniprogram/src/pages/pkg-doctor-core/index.scss
+++ b/apps/miniprogram/src/pages/pkg-doctor-core/index.scss
@@ -1,11 +1,9 @@
@import '../../styles/variables.scss';
@import '../../styles/mixins.scss';
+// PageShell 已接管:min-height, background, padding
+
.doctor-home {
- min-height: 100vh;
- background: $bg;
- padding: 32px;
- padding-bottom: calc(160px + env(safe-area-inset-bottom));
&__header {
margin-bottom: 40px;
diff --git a/apps/miniprogram/src/pages/pkg-doctor-core/index.tsx b/apps/miniprogram/src/pages/pkg-doctor-core/index.tsx
index d20d6ff..0ace41b 100644
--- a/apps/miniprogram/src/pages/pkg-doctor-core/index.tsx
+++ b/apps/miniprogram/src/pages/pkg-doctor-core/index.tsx
@@ -1,11 +1,12 @@
import { useState, useMemo, useCallback } from 'react';
-import { View, Text, Input, ScrollView } from '@tarojs/components';
+import { View, Text, Input } from '@tarojs/components';
import Taro from '@tarojs/taro';
import { useAuthStore } from '@/stores/auth';
import { useElderClass } from '../../hooks/useElderClass';
import { usePageData } from '@/hooks/usePageData';
import { getDashboard, type DoctorDashboard } from '@/services/doctor/dashboard';
import Loading from '@/components/Loading';
+import PageShell from '@/components/ui/PageShell';
import './index.scss';
interface CardConfig {
@@ -107,7 +108,7 @@ export default function DoctorHome() {
if (loading) return ;
return (
-
+
医护工作台
@@ -192,6 +193,6 @@ export default function DoctorHome() {
退出登录
-
+
);
}
diff --git a/apps/miniprogram/src/pages/pkg-health/alerts/index.scss b/apps/miniprogram/src/pages/pkg-health/alerts/index.scss
index 2c25cbe..0945578 100644
--- a/apps/miniprogram/src/pages/pkg-health/alerts/index.scss
+++ b/apps/miniprogram/src/pages/pkg-health/alerts/index.scss
@@ -1,11 +1,8 @@
@import '../../../styles/variables.scss';
@import '../../../styles/mixins.scss';
-.alerts-page {
- min-height: 100vh;
- background: $bg;
- padding-bottom: env(safe-area-inset-bottom);
-}
+// PageShell 已接管:min-height, background, safe-bottom
+// ContentCard 已接管:alert-card 背景/圆角/阴影
.alerts-tabs {
display: flex;
@@ -39,11 +36,7 @@
}
.alert-card {
- background: $card;
- border-radius: $r;
- padding: 24px;
margin-bottom: 16px;
- box-shadow: $shadow-sm;
}
.alert-header {
diff --git a/apps/miniprogram/src/pages/pkg-health/alerts/index.tsx b/apps/miniprogram/src/pages/pkg-health/alerts/index.tsx
index fc91648..5a06dcd 100644
--- a/apps/miniprogram/src/pages/pkg-health/alerts/index.tsx
+++ b/apps/miniprogram/src/pages/pkg-health/alerts/index.tsx
@@ -8,6 +8,8 @@ import Loading from '@/components/Loading';
import ErrorState from '@/components/ErrorState';
import EmptyState from '@/components/EmptyState';
import SegmentTabs from '@/components/SegmentTabs';
+import PageShell from '@/components/ui/PageShell';
+import ContentCard from '@/components/ui/ContentCard';
import { useElderClass } from '../../../hooks/useElderClass';
import './index.scss';
@@ -79,23 +81,23 @@ export default function PatientAlerts() {
if (!currentPatient) {
return (
-
+
Taro.navigateTo({ url: '/pages/pkg-profile/family-add/index' })} />
-
+
);
}
if (error) {
return (
-
+
fetchAlerts(1, status, true)} />
-
+
);
}
return (
-
+
{alerts.length === 0 && !loading ? (
@@ -105,7 +107,7 @@ export default function PatientAlerts() {
{alerts.map((item) => {
const sev = SEVERITY_MAP[item.severity] || SEVERITY_MAP.warning;
return (
-
+
{sev.label}
@@ -115,7 +117,7 @@ export default function PatientAlerts() {
{item.title}
-
+
);
})}
{loading && }
@@ -124,6 +126,6 @@ export default function PatientAlerts() {
)}
)}
-
+
);
}
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 e982f54..4f2a458 100644
--- a/apps/miniprogram/src/pages/pkg-health/daily-monitoring/index.scss
+++ b/apps/miniprogram/src/pages/pkg-health/daily-monitoring/index.scss
@@ -1,11 +1,8 @@
@import '../../../styles/variables.scss';
@import '../../../styles/mixins.scss';
-.dm-page {
- min-height: 100vh;
- background: $bg;
- padding: 0 0 60px;
-}
+// PageShell 已接管:min-height, background
+// ContentCard 已接管:dm-card/dm-group 背景/圆角/阴影
/* ── hero ── */
.dm-hero {
@@ -44,10 +41,6 @@
/* ── card (standalone, used for date picker) ── */
.dm-card {
- background: $card;
- border-radius: $r;
- box-shadow: $shadow-md;
- padding: 28px;
margin: 0 24px 20px;
}
@@ -98,9 +91,6 @@
/* ── collapsible group ── */
.dm-group {
- background: $card;
- border-radius: $r;
- box-shadow: $shadow-md;
margin: 0 24px 20px;
overflow: hidden;
}
diff --git a/apps/miniprogram/src/pages/pkg-health/daily-monitoring/index.tsx b/apps/miniprogram/src/pages/pkg-health/daily-monitoring/index.tsx
index 869716a..17c74de 100644
--- a/apps/miniprogram/src/pages/pkg-health/daily-monitoring/index.tsx
+++ b/apps/miniprogram/src/pages/pkg-health/daily-monitoring/index.tsx
@@ -10,6 +10,8 @@ import { clearRequestCache } from '@/services/request';
import { trackEvent } from '@/services/analytics';
import { useSafeTimeout } from '@/hooks/useSafeTimeout';
import { useElderClass } from '@/hooks/useElderClass';
+import PageShell from '@/components/ui/PageShell';
+import ContentCard from '@/components/ui/ContentCard';
import {
BP_RANGE, WEIGHT_RANGE, SUGAR_RANGE, VOLUME_RANGE,
checkAbnormal, formatDate, FIELD_LABELS,
@@ -218,7 +220,7 @@ export default function DailyMonitoring() {
const bloodSugarAbnormal = checkAbnormal(bloodSugar, 'bloodSugar');
return (
-
+
{/* 页面标题 */}
@@ -229,7 +231,7 @@ export default function DailyMonitoring() {
{/* 日期选择 (standalone card) */}
-
+
记录日期
{isToday && (
@@ -247,10 +249,10 @@ export default function DailyMonitoring() {
V
-
+
{/* ── Group 1: 晨间体征 (default open) ── */}
-
+
toggleSection('morning')}>
晨间体征
▸
@@ -295,10 +297,10 @@ export default function DailyMonitoring() {
mmHg
-
+
{/* ── Group 2: 晚间体征 (default open) ── */}
-
+
toggleSection('evening')}>
晚间体征
▸
@@ -343,10 +345,10 @@ export default function DailyMonitoring() {
mmHg
-
+
{/* ── Group 3: 其他指标 (default collapsed) ── */}
-
+
toggleSection('other')}>
其他指标
▸
@@ -428,7 +430,7 @@ export default function DailyMonitoring() {
/>
-
+
{/* 提交 */}
清空表单
-
+
);
}
diff --git a/apps/miniprogram/src/pages/pkg-health/device-sync/index.scss b/apps/miniprogram/src/pages/pkg-health/device-sync/index.scss
index 35f8251..db05bda 100644
--- a/apps/miniprogram/src/pages/pkg-health/device-sync/index.scss
+++ b/apps/miniprogram/src/pages/pkg-health/device-sync/index.scss
@@ -1,11 +1,8 @@
@import '../../../styles/variables.scss';
@import '../../../styles/mixins.scss';
-.device-sync-page {
- min-height: 100vh;
- background: $bg;
- padding-bottom: env(safe-area-inset-bottom);
-}
+// PageShell 已接管:min-height, background, safe-bottom
+// ContentCard 已接管:sync-status-card/sync-result-card 背景/圆角/阴影
.sync-header {
background: $pri;
@@ -130,11 +127,7 @@
.sync-status-card {
display: flex;
align-items: center;
- background: $card;
- border-radius: $r-sm;
- padding: 24px;
margin-bottom: 16px;
- box-shadow: $shadow-sm;
}
.sync-status-dot {
@@ -225,9 +218,6 @@
display: flex;
flex-direction: column;
align-items: center;
- background: $card;
- border-radius: $r;
- padding: 48px 24px;
margin-bottom: 24px;
box-shadow: $shadow-sm;
}
diff --git a/apps/miniprogram/src/pages/pkg-health/device-sync/index.tsx b/apps/miniprogram/src/pages/pkg-health/device-sync/index.tsx
index 9f72bae..e5664ce 100644
--- a/apps/miniprogram/src/pages/pkg-health/device-sync/index.tsx
+++ b/apps/miniprogram/src/pages/pkg-health/device-sync/index.tsx
@@ -12,6 +12,8 @@ import { uploadReadings } from '@/services/device-sync';
import { useAuthStore } from '@/stores/auth';
import type { BLEDevice, NormalizedReading } from '@/services/ble/types';
import { useElderClass } from '@/hooks/useElderClass';
+import PageShell from '@/components/ui/PageShell';
+import ContentCard from '@/components/ui/ContentCard';
import './index.scss';
/** liveReadings 最大保留条数,防止内存无限增长 */
@@ -232,10 +234,10 @@ export default function DeviceSync() {
const renderConnected = () => (
-
+
已连接: {selectedDevice?.name}
-
+
{liveReadings.length > 0 && (
@@ -276,11 +278,11 @@ export default function DeviceSync() {
const renderDone = () => (
-
+
V
同步完成
成功上传 {syncCount} 条数据
-
+
{
handleDisconnect();
if (returnTo === 'input') {
@@ -293,7 +295,7 @@ export default function DeviceSync() {
);
return (
-
+
设备同步
@@ -317,6 +319,6 @@ export default function DeviceSync() {
{(pageState === 'idle' || pageState === 'error') && renderIdle()}
{pageState === 'connected' && renderConnected()}
{pageState === 'done' && renderDone()}
-
+
);
}
diff --git a/apps/miniprogram/src/pages/pkg-health/input/index.scss b/apps/miniprogram/src/pages/pkg-health/input/index.scss
index 90869b2..a83cfef 100644
--- a/apps/miniprogram/src/pages/pkg-health/input/index.scss
+++ b/apps/miniprogram/src/pages/pkg-health/input/index.scss
@@ -1,11 +1,8 @@
@import '../../../styles/variables.scss';
@import '../../../styles/mixins.scss';
-.input-page {
- min-height: 100vh;
- background: $bg;
- padding: 0 0 60px;
-}
+// PageShell 已接管:min-height, background
+// ContentCard 已接管:input-card 背景/圆角/阴影
/* ── hero ── */
.input-hero {
@@ -47,10 +44,6 @@
display: flex;
align-items: center;
justify-content: space-between;
- background: $card;
- border-radius: $r;
- box-shadow: $shadow-sm;
- padding: 24px 28px;
margin: 0 24px 20px;
border: 1px dashed $pri;
@@ -72,10 +65,6 @@
/* ── card ── */
.input-card {
- background: $card;
- border-radius: $r;
- box-shadow: $shadow-md;
- padding: 28px;
margin: 0 24px 20px;
}
diff --git a/apps/miniprogram/src/pages/pkg-health/input/index.tsx b/apps/miniprogram/src/pages/pkg-health/input/index.tsx
index 57121c7..8345783 100644
--- a/apps/miniprogram/src/pages/pkg-health/input/index.tsx
+++ b/apps/miniprogram/src/pages/pkg-health/input/index.tsx
@@ -12,6 +12,8 @@ import { useSafeTimeout } from '@/hooks/useSafeTimeout';
import { trackEvent } from '@/services/analytics';
import { useElderClass } from '../../../hooks/useElderClass';
import Loading from '../../../components/Loading';
+import PageShell from '@/components/ui/PageShell';
+import ContentCard from '@/components/ui/ContentCard';
import './index.scss';
const INDICATORS = [
@@ -176,7 +178,7 @@ export default function HealthInput() {
const indicatorInitial = INDICATORS[indicatorIdx].label.charAt(0);
return (
-
+
{loadingThresholds && }
{!loadingThresholds && (
@@ -197,7 +199,7 @@ export default function HealthInput() {
{/* 指标类型选择 */}
-
+
{indicatorInitial}
@@ -215,11 +217,11 @@ export default function HealthInput() {
V
-
+
{/* 数值输入 */}
{BP_INDICATORS.includes(INDICATORS[indicatorIdx].value) ? (
-
+
血压数值
@@ -249,9 +251,9 @@ export default function HealthInput() {
mmHg
-
+
) : (
-
+
检测数值
{INDICATORS[indicatorIdx].label.match(/\((.+)\)/)?.[1] || ''}
-
+
)}
{/* 备注 */}
-
+
备注
setNote(e.detail.value)}
/>
-
+
{/* 提交 */}
>
)}
-
+
);
}
diff --git a/apps/miniprogram/src/pages/pkg-health/trend/index.scss b/apps/miniprogram/src/pages/pkg-health/trend/index.scss
index 7a06a18..036f33a 100644
--- a/apps/miniprogram/src/pages/pkg-health/trend/index.scss
+++ b/apps/miniprogram/src/pages/pkg-health/trend/index.scss
@@ -1,9 +1,10 @@
@import '../../../styles/variables.scss';
@import '../../../styles/mixins.scss';
-.trend-page {
- min-height: 100vh;
- background: $bg;
+// PageShell 已接管:min-height, background
+// ContentCard 已接管:trend-chart-card 背景/圆角/阴影
+
+.trend-page-shell {
padding-bottom: 60px;
}
@@ -48,10 +49,6 @@
/* ── chart card ── */
.trend-chart-card {
margin: 0 24px 20px;
- background: $card;
- border-radius: $r;
- box-shadow: $shadow-md;
- padding: 24px;
min-height: 300px;
overflow: hidden;
}
@@ -59,9 +56,6 @@
/* ── reference card ── */
.trend-ref-card {
margin: 0 24px 20px;
- background: $acc-l;
- border-radius: $r;
- padding: 20px 24px;
display: flex;
align-items: center;
gap: 16px;
diff --git a/apps/miniprogram/src/pages/pkg-health/trend/index.tsx b/apps/miniprogram/src/pages/pkg-health/trend/index.tsx
index dca1ef6..116f35b 100644
--- a/apps/miniprogram/src/pages/pkg-health/trend/index.tsx
+++ b/apps/miniprogram/src/pages/pkg-health/trend/index.tsx
@@ -8,6 +8,8 @@ import Loading from '@/components/Loading';
import ErrorState from '@/components/ErrorState';
import EmptyState from '@/components/EmptyState';
import SegmentTabs from '@/components/SegmentTabs';
+import PageShell from '@/components/ui/PageShell';
+import ContentCard from '@/components/ui/ContentCard';
import { useElderClass } from '../../../hooks/useElderClass';
import './index.scss';
@@ -67,7 +69,7 @@ export default function Trend() {
};
return (
-
+
{/* 页面标题 */}
@@ -81,36 +83,36 @@ export default function Trend() {
{/* ECharts 折线图 */}
{loading ? (
-
+
-
+
) : error ? (
-
+
-
+
) : points.length === 0 ? (
-
+
-
+
) : (
-
+
-
+
)}
{/* 参考区间 */}
{!loading && points.length > 0 && meta.refMin !== undefined && meta.refMax !== undefined && (
-
+
参考区间
{meta.refMin} ~ {meta.refMax} {meta.unit}
-
+
)}
{/* 数据列表 */}
@@ -135,6 +137,6 @@ export default function Trend() {
})}
)}
-
+
);
}