From 9f566241435f36eb303fb8776555a53886062b36 Mon Sep 17 00:00:00 2001 From: Cxx0822 <1556464090@qq.com> Date: Mon, 24 Aug 2026 14:49:46 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E4=B8=AA=E4=BA=BA?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- env/.env | 2 +- favicon.ico | Bin 14575 -> 12052 bytes package.json | 10 +-- src/components/Profile/ProfilePopup.vue | 65 ++++++++++++++++ src/pages/index/index.vue | 25 +++--- src/pages/me/me.vue | 57 ++++++++++++-- src/pages/record/record.vue | 60 ++++----------- src/static/images/app.png | Bin 0 -> 6141 bytes src/static/logo.svg | 34 +-------- src/store/profile.ts | 18 +++++ src/utils/profile.ts | 25 ++++++ src/utils/record.ts | 97 ++++++++++++++++++------ 12 files changed, 267 insertions(+), 126 deletions(-) create mode 100644 src/components/Profile/ProfilePopup.vue create mode 100644 src/static/images/app.png create mode 100644 src/store/profile.ts create mode 100644 src/utils/profile.ts diff --git a/env/.env b/env/.env index 3d5d4c3..ad154ff 100644 --- a/env/.env +++ b/env/.env @@ -1,4 +1,4 @@ -VITE_APP_TITLE = 'unibest' +VITE_APP_TITLE = '健康记' VITE_APP_PORT = 9000 VITE_UNI_APPID = '__UNI__D1E5001' diff --git a/favicon.ico b/favicon.ico index 47c577c972aeee4d27bd1171c95e54961c51167e..9295cbd255e3c76eef329599945dd7ec9ab31abb 100644 GIT binary patch literal 12052 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 bE^IdLOCiQ;``-s$JD{QROu6Q%P5A!-=B&K= literal 14575 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 K$XCglhy5Q-x+2H` diff --git a/package.json b/package.json index b4242da..545a82f 100644 --- a/package.json +++ b/package.json @@ -19,11 +19,11 @@ "description": "unibest - 最好的 uniapp 开发模板", "generate-time": "用户创建项目时生成", "author": { - "name": "feige996", - "zhName": "菲鸽", - "email": "1020103647@qq.com", - "github": "https://github.com/feige996", - "gitee": "https://gitee.com/feige996" + "name": "Cxx0822", + "zhName": "Cxx", + "email": "", + "github": "", + "gitee": "" }, "license": "MIT", "homepage": "https://unibest.tech", diff --git a/src/components/Profile/ProfilePopup.vue b/src/components/Profile/ProfilePopup.vue new file mode 100644 index 0000000..fac1c5a --- /dev/null +++ b/src/components/Profile/ProfilePopup.vue @@ -0,0 +1,65 @@ + + + diff --git a/src/pages/index/index.vue b/src/pages/index/index.vue index 6cc2f6e..54b9475 100644 --- a/src/pages/index/index.vue +++ b/src/pages/index/index.vue @@ -10,11 +10,8 @@ {{ today }} - - - 🩺 - - + + @@ -53,12 +50,13 @@ {{ plan.icon }} {{ plan.label }} - - - + + + 已完成 + + + 未完成 + @@ -79,8 +77,9 @@ diff --git a/src/pages/record/record.vue b/src/pages/record/record.vue index c58e71b..fac415d 100644 --- a/src/pages/record/record.vue +++ b/src/pages/record/record.vue @@ -18,10 +18,7 @@ - - 📭 - 暂无记录 - + @@ -54,8 +51,8 @@ {{ item.time }} - - {{ getRecordStatus(item) }} + + {{ getRecordStatus(item).label }} @@ -80,36 +77,6 @@ - - - - - - - 🤖 - AI 健康分析 - - {{ aiSummary.dateRange }} - - - - - {{ aiSummary.text }} - - - - - - {{ tag }} - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/src/store/profile.ts b/src/store/profile.ts new file mode 100644 index 0000000..7c15bb7 --- /dev/null +++ b/src/store/profile.ts @@ -0,0 +1,18 @@ +import { defineStore } from 'pinia' +import type { IProfile } from '@/utils/profile' + +export const useProfileStore = defineStore('profile', { + state: () => ({ + showProfilePopup: false, + profileForm: { + gender: '', + height: 0, + name: '', + weight: 0, + } as IProfile, + isRefresh: false, + }), + actions: { + + }, +}) diff --git a/src/utils/profile.ts b/src/utils/profile.ts new file mode 100644 index 0000000..9572c74 --- /dev/null +++ b/src/utils/profile.ts @@ -0,0 +1,25 @@ +export interface IProfile { + name: string + gender: 'male' | 'female' | '' + height: number | null + weight: number | null +} + +const PROFILE_KEY = 'user_profile' + +function getEmptyProfile(): IProfile { + return { + gender: '', + height: null, + name: '', + weight: null, + } +} + +export function getProfile(): IProfile { + return wx.getStorageSync(PROFILE_KEY) || getEmptyProfile() +} + +export function saveProfile(data: IProfile) { + wx.setStorageSync(PROFILE_KEY, data) +} diff --git a/src/utils/record.ts b/src/utils/record.ts index 41248da..6141370 100644 --- a/src/utils/record.ts +++ b/src/utils/record.ts @@ -1,4 +1,23 @@ -import type { IHealthRecord, IRecordMeta } from '@/types/record' +import { getProfile } from '@/utils/profile' + +export interface IHealthRecord { + id: string + type: string + time: string + date?: string + [key: string]: any +} + +export interface IRecordMeta { + icon: string + label: string + color: string +} + +export interface IRecordStats { + label: string + type: 'default' | 'primary' | 'success' | 'warning' | 'danger' | 'volcano' | 'lightblue' | 'cyan' | 'pink' | 'purple' +} const MONTH_KEEP = 12 @@ -161,48 +180,78 @@ export function getRecordValue(record: IHealthRecord): string { } } -export function getRecordStatus(record: IHealthRecord): string { +export function getRecordStatus(record: IHealthRecord): IRecordStats { + const profile = getProfile() + switch (record.type) { case 'bloodPressure': - if (record.systolic >= 140 || record.diastolic >= 90) - return '偏高' - if (record.systolic < 90 || record.diastolic < 60) - return '偏低' - return '正常' - - case 'bloodSugar': - if (record.period.includes('空腹')) { - return record.value >= 6.1 ? '偏高' : '正常' + if (record.systolic >= 140 || record.diastolic >= 90) { + return { label: '偏高', type: 'danger' } } - // 餐后 - return record.value >= 7.8 ? '偏高' : '正常' + if (record.systolic < 90 || record.diastolic < 60) { + return { label: '偏低', type: 'danger' } + } + return { label: '正常', type: 'primary' } + + case 'weight': { + if (!profile.height) { + return { label: '身高未知', type: 'default' } + } + const bmi = (record.value * 10000) / (profile.height * profile.height) + if (bmi < 18.5) + return { label: '偏瘦', type: 'warning' } + if (bmi < 24) + return { label: '正常', type: 'primary' } + if (bmi < 28) + return { label: '偏重', type: 'danger' } + return { label: '肥胖', type: 'danger' } + } + + case 'bloodSugar': { + const period = record.period || '' + let limit = 11.1 + if (period.includes('空腹') || period.includes('睡前')) + limit = 6.1 + else if (period.includes('餐后1h')) + limit = 11.1 + else if (period.includes('餐后2h')) + limit = 7.8 + + if (record.value < 3.9) + return { label: '偏低', type: 'danger' } + if (record.value >= limit) + return { label: '偏高', type: 'danger' } + return { label: '正常', type: 'primary' } + } case 'heartRate': if (record.value < 60) - return '偏慢' + return { label: '偏慢', type: 'warning' } if (record.value <= 100) - return '正常' - return '偏快' + return { label: '正常', type: 'primary' } + return { label: '偏快', type: 'warning' } case 'temperature': if (record.value < 36.1) - return '偏低' + return { label: '偏低', type: 'warning' } if (record.value <= 37.2) - return '正常' - return '偏高' + return { label: '正常', type: 'primary' } + return { label: '偏高', type: 'danger' } case 'sport': - return record.duration >= 30 ? '达标' : '偏少' + return record.duration >= 30 + ? { label: '达标', type: 'success' } + : { label: '偏少', type: 'warning' } case 'sleep': if (record.duration >= 7) - return '充足' + return { label: '充足', type: 'success' } if (record.duration >= 6) - return '良好' - return '不足' + return { label: '良好', type: 'primary' } + return { label: '不足', type: 'warning' } default: - return '未知' + return { label: '未知', type: 'default' } } }