diff --git a/pets-fe/app.wxss b/pets-fe/app.wxss index 8ed0c48..519d25d 100644 --- a/pets-fe/app.wxss +++ b/pets-fe/app.wxss @@ -180,6 +180,16 @@ page{scrollbar-width:none;-ms-overflow-style:none} .tone-3{background:var(--blue-soft);color:var(--blue-ink)} .tone-4{background:var(--purple-soft);color:var(--purple-ink)} +/* 记录入口宫格。首页(4 列 8 个)和记录页(3 列 9 个)原本是同一个东西的两个副本, + 高度/圆角/阴影/字号全不一样,这里合成一套。 */ +.quick-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--sp-2)} +.quick-grid.cols-3{grid-template-columns:repeat(3,1fr)} +.quick{ + border-radius:var(--r-md);min-height:128rpx; + display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--sp-1); + font-weight:var(--fw-b);font-size:var(--fs-sm); +} + /* 空态。原本有 6 套长得差不多的写法散在各页 */ .empty{padding:56rpx var(--sp-1);text-align:center;color:var(--muted);font-size:var(--fs-sm)} .empty.lg{padding:96rpx 0} @@ -288,6 +298,8 @@ page{scrollbar-width:none;-ms-overflow-style:none} /* 统计格 */ .stats-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--sp-3);margin:var(--sp-4) 0} .stat{background:#fff;border:1rpx solid var(--line);border-radius:var(--r-md);padding:var(--sp-4) var(--sp-2);text-align:center} +.stat-b{display:block;font-size:var(--fs-xl);margin-bottom:6rpx;font-weight:var(--fw-b)} +.stat-s{font-size:var(--fs-cap);color:var(--muted)} /* 文章卡 */ .article-card{ diff --git a/pets-fe/components/fab/fab.json b/pets-fe/components/fab/fab.json index a89ef4d..a88211e 100644 --- a/pets-fe/components/fab/fab.json +++ b/pets-fe/components/fab/fab.json @@ -1,4 +1,6 @@ { "component": true, - "usingComponents": {} + "usingComponents": { + "pt-icon": "/components/pt-icon/index" + } } diff --git a/pets-fe/components/fab/fab.wxml b/pets-fe/components/fab/fab.wxml index 7e54a8b..d273590 100644 --- a/pets-fe/components/fab/fab.wxml +++ b/pets-fe/components/fab/fab.wxml @@ -1 +1 @@ -AI + diff --git a/pets-fe/components/fab/fab.wxss b/pets-fe/components/fab/fab.wxss index 87ab330..638868d 100644 --- a/pets-fe/components/fab/fab.wxss +++ b/pets-fe/components/fab/fab.wxss @@ -1,10 +1,10 @@ .fab{ position:fixed;right:36rpx;bottom:calc(190rpx + env(safe-area-inset-bottom)); - width:116rpx;height:116rpx;border-radius:44rpx; - background:linear-gradient(135deg,#78A6E8,#9FC0F5); - color:#fff;font-weight:900;font-size:40rpx; + width:108rpx;height:108rpx;border-radius:var(--r-md); + background:var(--cta); + color:#fff; display:flex;align-items:center;justify-content:center; - box-shadow:0 28rpx 60rpx rgba(120,166,232,.32); + box-shadow:var(--sd-2); z-index:60; } .fab:active{transform:scale(.96)} diff --git a/pets-fe/components/nav-bar/nav-bar.json b/pets-fe/components/nav-bar/nav-bar.json index a89ef4d..a88211e 100644 --- a/pets-fe/components/nav-bar/nav-bar.json +++ b/pets-fe/components/nav-bar/nav-bar.json @@ -1,4 +1,6 @@ { "component": true, - "usingComponents": {} + "usingComponents": { + "pt-icon": "/components/pt-icon/index" + } } diff --git a/pets-fe/components/nav-bar/nav-bar.wxml b/pets-fe/components/nav-bar/nav-bar.wxml index 813387d..230b1ca 100644 --- a/pets-fe/components/nav-bar/nav-bar.wxml +++ b/pets-fe/components/nav-bar/nav-bar.wxml @@ -1,6 +1,6 @@ - + {{title}} diff --git a/pets-fe/components/nav-bar/nav-bar.wxss b/pets-fe/components/nav-bar/nav-bar.wxss index b1320d4..7ca13bc 100644 --- a/pets-fe/components/nav-bar/nav-bar.wxss +++ b/pets-fe/components/nav-bar/nav-bar.wxss @@ -9,11 +9,11 @@ position:relative;display:flex;align-items:center;justify-content:center; } .nav-title{ - font-size:32rpx;font-weight:900;color:var(--text); + font-size:var(--fs-lg);font-weight:var(--fw-b);color:var(--text); max-width:60%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap; } .nav-back{ position:absolute;left:20rpx;top:50%;transform:translateY(-50%); width:64rpx;height:64rpx;display:flex;align-items:center;justify-content:center; - font-size:52rpx;line-height:1;color:var(--text); + color:var(--text); } diff --git a/pets-fe/components/pet-switch/pet-switch.json b/pets-fe/components/pet-switch/pet-switch.json index a89ef4d..a88211e 100644 --- a/pets-fe/components/pet-switch/pet-switch.json +++ b/pets-fe/components/pet-switch/pet-switch.json @@ -1,4 +1,6 @@ { "component": true, - "usingComponents": {} + "usingComponents": { + "pt-icon": "/components/pt-icon/index" + } } diff --git a/pets-fe/components/pet-switch/pet-switch.wxml b/pets-fe/components/pet-switch/pet-switch.wxml index feea1fb..6889817 100644 --- a/pets-fe/components/pet-switch/pet-switch.wxml +++ b/pets-fe/components/pet-switch/pet-switch.wxml @@ -5,6 +5,6 @@ {{item.emoji}}{{item.name}} - 添加 + 添加 diff --git a/pets-fe/pages/article/article.json b/pets-fe/pages/article/article.json index 6c6953c..e8b68a8 100644 --- a/pets-fe/pages/article/article.json +++ b/pets-fe/pages/article/article.json @@ -1,6 +1,7 @@ { "usingComponents": { - "nav-bar": "/components/nav-bar/nav-bar" + "nav-bar": "/components/nav-bar/nav-bar", + "pt-icon": "/components/pt-icon/index" }, "navigationStyle": "custom", "navigationBarTitleText": "新手知识" diff --git a/pets-fe/pages/article/article.wxml b/pets-fe/pages/article/article.wxml index ba0386c..c1a7ec1 100644 --- a/pets-fe/pages/article/article.wxml +++ b/pets-fe/pages/article/article.wxml @@ -2,19 +2,19 @@ - 加载中… - {{error}} + 加载中… + {{error}} - {{article.icon}} + {{article.title}} {{article.description}} {{article.content}} - 这篇文章还没有正文。 + 这篇文章还没有正文。 diff --git a/pets-fe/pages/article/article.wxss b/pets-fe/pages/article/article.wxss index 8453d68..ff5f6af 100644 --- a/pets-fe/pages/article/article.wxss +++ b/pets-fe/pages/article/article.wxss @@ -1,13 +1,15 @@ -.hint{padding:60rpx 0;text-align:center;color:var(--muted);font-size:28rpx} - -.art-head{padding:12rpx 0 28rpx} -.art-icon{font-size:72rpx;line-height:1;margin-bottom:16rpx} -.art-title{font-size:44rpx;font-weight:800;line-height:1.35;letter-spacing:-.5rpx} -.art-desc{margin-top:14rpx;color:var(--muted);font-size:27rpx;line-height:1.6} +.art-head{padding:var(--sp-2) 0 var(--sp-4)} +.art-icon{ + width:96rpx;height:96rpx;border-radius:var(--r-md);margin-bottom:var(--sp-3); + display:flex;align-items:center;justify-content:center; + background:var(--primary-soft);color:var(--primary-ink); +} +.art-title{font-size:var(--fs-2xl);font-weight:var(--fw-b);line-height:1.35;letter-spacing:-.5rpx} +.art-desc{margin-top:var(--sp-2);color:var(--muted);font-size:var(--fs-md);line-height:1.6} .art-content{ - font-size:29rpx;line-height:1.85;color:#3D352E; + font-size:var(--fs-md);line-height:1.85;color:var(--text-2); white-space:pre-line; /* 正文用真实换行排版 */ } -.art-foot{margin-top:28rpx;text-align:center;color:var(--muted);font-size:23rpx} +.art-foot{margin-top:var(--sp-4);text-align:center;color:var(--muted);font-size:var(--fs-cap)} diff --git a/pets-fe/pages/community/community.js b/pets-fe/pages/community/community.js index 537345f..65bc7b9 100644 --- a/pets-fe/pages/community/community.js +++ b/pets-fe/pages/community/community.js @@ -67,8 +67,9 @@ Page({ toastErr(e); }); }, + // 来自 seg-tabs 的 change 事件 switchFeedTab(e) { - this.setData({ feedIdx: e.currentTarget.dataset.index }); + this.setData({ feedIdx: Number(e.detail.index) }); this.loadPosts(); }, likePost(e) { diff --git a/pets-fe/pages/community/community.json b/pets-fe/pages/community/community.json index 24ea6ea..7f17b0c 100644 --- a/pets-fe/pages/community/community.json +++ b/pets-fe/pages/community/community.json @@ -2,6 +2,8 @@ "usingComponents": { "nav-bar": "/components/nav-bar/nav-bar", "bottom-sheet": "/components/bottom-sheet/bottom-sheet", - "fab": "/components/fab/fab" + "fab": "/components/fab/fab", + "pt-icon": "/components/pt-icon/index", + "seg-tabs": "/components/seg-tabs/index" } } diff --git a/pets-fe/pages/community/community.wxml b/pets-fe/pages/community/community.wxml index 06c4830..33d219a 100644 --- a/pets-fe/pages/community/community.wxml +++ b/pets-fe/pages/community/community.wxml @@ -5,18 +5,10 @@ module.exports.isUrl = function (s) { return s && s.indexOf('http') === 0; } - - 宠友圈 - 和宠友交流、晒宠、求助与经验分享。 - - - - {{item}} - + - + @@ -35,17 +27,17 @@ module.exports.isUrl = function (s) { return s && s.indexOf('http') === 0; } - {{item.liked ? '♥' : '♡'}} {{item.like_count}} - 💬 {{item.comment_count}} - + {{item.like_count}} + {{item.comment_count}} + - + {{loadErr}} 点击重试 - + {{feedTabs[feedIdx] === '关注' ? '还没有关注的人,去「推荐」里关注几个宠友吧 🐾' : '还没有帖子,来发第一条吧 🐾'}} diff --git a/pets-fe/pages/community/community.wxss b/pets-fe/pages/community/community.wxss index 936feb7..69d0834 100644 --- a/pets-fe/pages/community/community.wxss +++ b/pets-fe/pages/community/community.wxss @@ -1,50 +1,44 @@ -.feed-tabs{white-space:nowrap;padding:0 0 24rpx} -.feed-tab{ - display:inline-block;border:1rpx solid var(--line);background:#fff;border-radius:999rpx; - height:68rpx;line-height:68rpx;padding:0 26rpx;color:var(--muted);font-size:26rpx;font-weight:900; - box-shadow:0 12rpx 32rpx rgba(70,48,25,.05);margin-right:16rpx; -} -.feed-tab.active{color:var(--primary-dark);background:#FFF4E4;border-color:#FFD39A} +.compose-card{margin-bottom:var(--sp-4)} -.compose-card{margin-bottom:28rpx} - -.post-card{background:#fff;border-radius:48rpx;box-shadow:var(--shadow);padding:30rpx;margin-bottom:28rpx} -.post-head{display:flex;align-items:center;gap:20rpx;margin-bottom:22rpx} +.post-card{background:#fff;border-radius:var(--r-lg);box-shadow:var(--sd-1);padding:var(--sp-4);margin-bottom:var(--sp-4)} +.post-head{display:flex;align-items:center;gap:var(--sp-3);margin-bottom:var(--sp-3)} .post-avatar{ - width:84rpx;height:84rpx;border-radius:32rpx;background:#FFF0D8; - display:flex;align-items:center;justify-content:center;font-size:44rpx;flex:none; + width:80rpx;height:80rpx;border-radius:var(--r-sm);background:var(--primary-soft); + display:flex;align-items:center;justify-content:center;font-size:40rpx;flex:none; } -.post-user{flex:1} -.pu-b{font-size:28rpx;display:block;font-weight:700} -.ai-tag{display:inline-block;margin-left:10rpx;padding:0 10rpx;border-radius:8rpx;background:#EAF0FF;color:#3B6BE5;font-size:20rpx;font-weight:700;vertical-align:1rpx} -.pu-s{font-size:24rpx;color:var(--muted)} -.post-content{font-size:28rpx;line-height:1.62;color:#443D37;margin-bottom:24rpx} +.post-user{flex:1;min-width:0} +.pu-b{font-size:var(--fs-md);display:block;font-weight:var(--fw-b)} +.ai-tag{ + display:inline-block;margin-left:var(--sp-1);padding:0 var(--sp-1);border-radius:var(--r-xs); + background:var(--blue-soft);color:var(--blue-ink);font-size:var(--fs-cap);font-weight:var(--fw-b);vertical-align:1rpx; +} +.pu-s{font-size:var(--fs-sm);color:var(--muted)} +.post-content{font-size:var(--fs-md);line-height:1.62;color:var(--text-2);margin-bottom:var(--sp-3)} -.photo-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12rpx;margin-bottom:24rpx} +.photo-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--sp-1);margin-bottom:var(--sp-3)} .photo-tile{ - aspect-ratio:1;border-radius:32rpx;background:linear-gradient(135deg,#FFE6BA,#FFF8ED); - display:flex;align-items:center;justify-content:center;font-size:60rpx; + aspect-ratio:1;border-radius:var(--r-sm);background:var(--primary-soft); + display:flex;align-items:center;justify-content:center;font-size:56rpx; } -.post-actions{display:flex;justify-content:space-around;border-top:1rpx solid var(--line);padding-top:20rpx} -.pa-btn{color:var(--muted);font-weight:900;font-size:26rpx} -.pa-btn.liked{color:var(--red)} - -.empty-hint{text-align:center;color:var(--muted);font-size:26rpx;padding:80rpx 0} - -/* 页面不自身滚动,改由 page-scroll 承载滚动(隐藏滚动条)*/ - -/* 帖子分享按钮:用微信原生 open-type=share,需抹掉 button 默认外观 */ -.pa-share{ - background:transparent;border:none;padding:0;margin:0;line-height:inherit; - font-size:26rpx;font-weight:900;color:var(--muted); +.post-actions{display:flex;justify-content:space-around;border-top:1rpx solid var(--line);padding-top:var(--sp-3)} +.pa-btn{ + display:flex;align-items:center;gap:var(--sp-1); + color:var(--muted);font-weight:var(--fw-b);font-size:var(--fs-sm); } +.pa-btn.liked{color:var(--red-ink)} +/* 分享用微信原生 open-type=share,得抹掉 button 默认外观 */ +.pa-share{background:transparent;border:none;padding:0;margin:0;line-height:inherit;height:auto} .pa-share::after{border:none} /* 关注按钮 */ .follow-btn{ - flex:none;font-size:22rpx;font-weight:700;padding:6rpx 18rpx;border-radius:999rpx; - color:var(--primary-dark);background:#FFF2DC;border:1rpx solid #FFD39A; + flex:none;font-size:var(--fs-cap);font-weight:var(--fw-b);padding:6rpx var(--sp-3);border-radius:var(--r-full); + color:var(--primary-dark);background:var(--primary-soft);border:1rpx solid var(--primary-line); } .follow-btn.on{color:var(--muted);background:#F4F1EC;border-color:var(--line)} -.retry-btn{margin-top:20rpx;display:inline-block;padding:12rpx 36rpx;border-radius:999rpx;background:#FFF2DC;color:var(--primary-dark);font-weight:700;font-size:26rpx} + +.retry-btn{ + margin-top:var(--sp-3);display:inline-block;padding:var(--sp-2) var(--sp-6);border-radius:var(--r-full); + background:var(--primary-soft);color:var(--primary-dark);font-weight:var(--fw-b);font-size:var(--fs-sm); +} diff --git a/pets-fe/pages/home/home.wxss b/pets-fe/pages/home/home.wxss index e925d76..5b5102b 100644 --- a/pets-fe/pages/home/home.wxss +++ b/pets-fe/pages/home/home.wxss @@ -37,13 +37,5 @@ .day.sel{border-color:var(--primary);background:var(--primary-soft);color:var(--primary-dark);box-shadow:0 0 0 2rpx rgba(245,169,71,.35)} .day.has-dot::after{content:"";display:block;width:8rpx;height:8rpx;border-radius:50%;background:var(--green);margin:6rpx auto 0} -/* 快速记录:靠颜色分类,不靠 emoji */ -.quick-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--sp-2)} -.quick{ - border-radius:var(--r-md);min-height:128rpx; - display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--sp-1); - font-weight:var(--fw-b);font-size:var(--fs-sm); -} - .ai-text{color:var(--text-2);font-size:var(--fs-md);line-height:1.6} .ai-cta{margin-top:var(--sp-4)} diff --git a/pets-fe/pages/learn/learn.json b/pets-fe/pages/learn/learn.json index 24ea6ea..fa34741 100644 --- a/pets-fe/pages/learn/learn.json +++ b/pets-fe/pages/learn/learn.json @@ -2,6 +2,7 @@ "usingComponents": { "nav-bar": "/components/nav-bar/nav-bar", "bottom-sheet": "/components/bottom-sheet/bottom-sheet", - "fab": "/components/fab/fab" + "fab": "/components/fab/fab", + "pt-icon": "/components/pt-icon/index" } } diff --git a/pets-fe/pages/learn/learn.wxml b/pets-fe/pages/learn/learn.wxml index bd4c476..a4e3dff 100644 --- a/pets-fe/pages/learn/learn.wxml +++ b/pets-fe/pages/learn/learn.wxml @@ -3,12 +3,12 @@ - 新手养宠知识 - 新手养宠知识,看完顺手生成你的计划。 + 看完顺手生成你的计划。 + 还没有文章 - {{item.icon}} + {{item.title}}{{item.desc}} diff --git a/pets-fe/pages/onboarding/onboarding.json b/pets-fe/pages/onboarding/onboarding.json index c55f727..c58f7d1 100644 --- a/pets-fe/pages/onboarding/onboarding.json +++ b/pets-fe/pages/onboarding/onboarding.json @@ -1,6 +1,7 @@ { "usingComponents": { - "nav-bar": "/components/nav-bar/nav-bar" + "nav-bar": "/components/nav-bar/nav-bar", + "pt-icon": "/components/pt-icon/index" }, "navigationBarTitleText": "肉垫计划" } diff --git a/pets-fe/pages/onboarding/onboarding.wxml b/pets-fe/pages/onboarding/onboarding.wxml index 35777f8..a95f79f 100644 --- a/pets-fe/pages/onboarding/onboarding.wxml +++ b/pets-fe/pages/onboarding/onboarding.wxml @@ -5,7 +5,7 @@ - + 肉垫计划 新手养宠的 AI 日历、健康记录和成长报告。先生成计划,再每天照着做。 @@ -24,10 +24,10 @@ 目前支持猫和狗,选一个开始。 - 🐱猫猫幼猫、成年猫、老年猫 + 猫猫幼猫、成年猫、老年猫 - 🐶狗狗幼犬、成年犬、老年犬 + 狗狗幼犬、成年犬、老年犬 @@ -78,7 +78,7 @@ 多选,我们会据此为你定制计划。 - {{item.on ? '✓' : ''}}{{item.label}} + {{item.label}} @@ -89,11 +89,11 @@ 正在生成专属养宠计划 正在根据它的信息生成专属计划… - 已识别:{{stage}} - 已生成:30 天新手计划 - 已安排:疫苗 / 驱虫提醒 - 已开启:体重、便便、饮食记录 - 已准备:首张成长报告卡片 + 已识别:{{stage}} + 已生成:30 天新手计划 + 已安排:疫苗 / 驱虫提醒 + 已开启:体重、便便、饮食记录 + 已准备:首张成长报告卡片 diff --git a/pets-fe/pages/onboarding/onboarding.wxss b/pets-fe/pages/onboarding/onboarding.wxss index 3655ad6..69f5419 100644 --- a/pets-fe/pages/onboarding/onboarding.wxss +++ b/pets-fe/pages/onboarding/onboarding.wxss @@ -1,53 +1,59 @@ .onboard-page{ - padding:0 40rpx 56rpx; + padding:0 var(--pad-x) 56rpx; min-height:100%; background: radial-gradient(circle at top right, rgba(245,169,71,.22), transparent 45%), var(--bg); } .step{animation:fade .24s ease} -.skip-link{text-align:center;margin-top:28rpx;color:var(--muted);font-size:28rpx;padding:12rpx} +.skip-link{text-align:center;margin-top:var(--sp-4);color:var(--muted);font-size:var(--fs-md);padding:var(--sp-2)} @keyframes fade{from{opacity:0;transform:translateY(16rpx)}to{opacity:1;transform:none}} -.hero{text-align:center;padding:60rpx 0 32rpx} +.hero{text-align:center;padding:60rpx 0 var(--sp-5)} .pet-logo{ - width:192rpx;height:192rpx;margin:0 auto 36rpx;border-radius:60rpx; + width:176rpx;height:176rpx;margin:0 auto var(--sp-5);border-radius:var(--r-lg); background:linear-gradient(135deg,#FFE0AB,#FDB35C); - display:flex;align-items:center;justify-content:center;font-size:96rpx; - box-shadow:0 32rpx 72rpx rgba(245,169,71,.26); + display:flex;align-items:center;justify-content:center;font-size:88rpx; + box-shadow:var(--sd-2); } -.hero-h1{font-size:64rpx;letter-spacing:-1.2rpx;font-weight:800} -.hero-sub{margin-top:20rpx;line-height:1.65;color:var(--muted);font-size:30rpx} +.hero-h1{font-size:var(--fs-2xl);letter-spacing:-1.2rpx;font-weight:var(--fw-b)} +.hero-sub{margin-top:var(--sp-3);line-height:1.65;color:var(--muted);font-size:var(--fs-md)} -.proof-row{display:grid;grid-template-columns:repeat(3,1fr);gap:16rpx;margin:40rpx 0} -.proof{background:#fff;border-radius:36rpx;padding:24rpx 16rpx;text-align:center;box-shadow:var(--shadow)} -.proof-b{display:block;font-size:32rpx;font-weight:800} -.proof-s{color:var(--muted);font-size:22rpx} +.proof-row{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--sp-3);margin:var(--sp-6) 0} +.proof{background:#fff;border-radius:var(--r-md);padding:var(--sp-4) var(--sp-3);text-align:center;box-shadow:var(--sd-1)} +.proof-b{display:block;font-size:var(--fs-lg);font-weight:var(--fw-b)} +.proof-s{color:var(--muted);font-size:var(--fs-cap)} -.step-title{font-size:48rpx;letter-spacing:-.8rpx;line-height:1.24;margin:16rpx 0;font-weight:800} -.step-sub{color:var(--muted);line-height:1.6;font-size:28rpx;margin-bottom:32rpx} +.step-title{font-size:var(--fs-2xl);letter-spacing:-.8rpx;line-height:1.24;margin:var(--sp-3) 0;font-weight:var(--fw-b)} +.step-sub{color:var(--muted);line-height:1.6;font-size:var(--fs-md);margin-bottom:var(--sp-5)} -.choice-grid{display:grid;grid-template-columns:1fr 1fr;gap:24rpx;margin-bottom:36rpx} +.choice-grid{display:grid;grid-template-columns:1fr 1fr;gap:var(--sp-4);margin-bottom:var(--sp-5)} .choice-card{ - background:#fff;border:4rpx solid transparent;border-radius:48rpx;min-height:264rpx; - padding:36rpx 28rpx;box-shadow:var(--shadow);transition:.18s ease; + background:#fff;border:4rpx solid transparent;border-radius:var(--r-lg);min-height:248rpx; + padding:var(--sp-5) var(--sp-4);box-shadow:var(--sd-1);transition:.18s ease; + display:flex;flex-direction:column;align-items:flex-start; } -.choice-card.selected{border-color:var(--primary);background:#FFF8EC} -.choice-card .animal{font-size:88rpx;margin-bottom:20rpx} -.choice-b{font-size:34rpx;font-weight:900} -.choice-s{display:block;color:var(--muted);font-size:24rpx;margin-top:12rpx} +.choice-card.selected{border-color:var(--primary);background:var(--primary-soft)} +.choice-card .animal{ + width:96rpx;height:96rpx;border-radius:var(--r-md);margin-bottom:var(--sp-3); + display:flex;align-items:center;justify-content:center; + background:var(--primary-soft);color:var(--primary-ink); +} +.choice-card.selected .animal{background:#fff} +.choice-b{font-size:var(--fs-lg);font-weight:var(--fw-b)} +.choice-s{display:block;color:var(--muted);font-size:var(--fs-sm);margin-top:var(--sp-2)} -.form-card{background:#fff;border-radius:48rpx;padding:32rpx;box-shadow:var(--shadow);margin-bottom:36rpx} +.form-card{background:#fff;border-radius:var(--r-lg);padding:var(--sp-5);box-shadow:var(--sd-1);margin-bottom:var(--sp-5)} -.stage-list{display:flex;flex-direction:column;gap:22rpx;margin-bottom:36rpx} -.stage-card{background:#fff;border-radius:40rpx;border:4rpx solid transparent;padding:30rpx;box-shadow:var(--shadow)} +.stage-list{display:flex;flex-direction:column;gap:var(--sp-3);margin-bottom:var(--sp-5)} +.stage-card{background:#fff;border-radius:var(--r-md);border:4rpx solid transparent;padding:var(--sp-4);box-shadow:var(--sd-1)} .stage-card.selected{border-color:var(--green);background:var(--green-soft)} -.stage-b{font-size:32rpx;font-weight:900} -.stage-p{color:var(--muted);font-size:24rpx;margin-top:10rpx} +.stage-b{font-size:var(--fs-lg);font-weight:var(--fw-b)} +.stage-p{color:var(--muted);font-size:var(--fs-sm);margin-top:var(--sp-1)} -.gen-card{margin-top:32rpx;background:#fff;border-radius:56rpx;padding:48rpx;box-shadow:var(--shadow2)} -.gen-line{display:flex;align-items:center;gap:20rpx;padding:20rpx 0;color:#5F554D;font-size:28rpx} +.gen-card{margin-top:var(--sp-5);background:#fff;border-radius:var(--r-lg);padding:var(--sp-6);box-shadow:var(--sd-2)} +.gen-line{display:flex;align-items:center;gap:var(--sp-3);padding:var(--sp-3) 0;color:var(--text-2);font-size:var(--fs-md)} .tick{ - width:48rpx;height:48rpx;border-radius:50%;background:var(--green);color:#fff; - display:flex;align-items:center;justify-content:center;font-size:28rpx;font-weight:900;flex:none; + width:44rpx;height:44rpx;border-radius:50%;background:var(--green);color:#fff; + display:flex;align-items:center;justify-content:center;flex:none; } diff --git a/pets-fe/pages/plan/plan.js b/pets-fe/pages/plan/plan.js index f92a611..111159b 100644 --- a/pets-fe/pages/plan/plan.js +++ b/pets-fe/pages/plan/plan.js @@ -31,6 +31,11 @@ Page({ data: { pet: {}, planView: 'timeline', + planTabs: [ + { key: 'timeline', label: '路线图' }, + { key: 'calendar', label: '日历' }, + { key: 'aiPlan', label: 'AI 计划' }, + ], plan: null, calCells: [], calLabel: '', @@ -117,8 +122,9 @@ Page({ }) .catch(() => {}); }, + // 来自 seg-tabs 的 change 事件,key 即 planView switchPlanView(e) { - const view = e.currentTarget.dataset.view; + const view = e.detail.key; this.setData({ planView: view }); if (view === 'calendar' && !this.data.calLoaded) this.loadCalendar(); }, diff --git a/pets-fe/pages/plan/plan.json b/pets-fe/pages/plan/plan.json index 075a8b2..58b7029 100644 --- a/pets-fe/pages/plan/plan.json +++ b/pets-fe/pages/plan/plan.json @@ -3,6 +3,8 @@ "nav-bar": "/components/nav-bar/nav-bar", "pet-switch": "/components/pet-switch/pet-switch", "bottom-sheet": "/components/bottom-sheet/bottom-sheet", - "fab": "/components/fab/fab" + "fab": "/components/fab/fab", + "pt-icon": "/components/pt-icon/index", + "seg-tabs": "/components/seg-tabs/index" } } diff --git a/pets-fe/pages/plan/plan.wxml b/pets-fe/pages/plan/plan.wxml index 001a365..edcc95f 100644 --- a/pets-fe/pages/plan/plan.wxml +++ b/pets-fe/pages/plan/plan.wxml @@ -2,18 +2,9 @@ - - 养宠计划 - 按宠物查看路线图、日历与 AI 计划。 - - - - 路线图 - 日历 - AI 计划 - + @@ -29,13 +20,13 @@ {{item.day_label}}{{item.dateLabel}} - {{item.done ? '✓' : ''}} + {{item.title}}{{item.description}} - 暂无计划 + 暂无计划 @@ -64,7 +55,7 @@ 提醒{{item.title}} - 这天没有安排 + 这天没有安排 diff --git a/pets-fe/pages/plan/plan.wxss b/pets-fe/pages/plan/plan.wxss index a865891..179cd70 100644 --- a/pets-fe/pages/plan/plan.wxss +++ b/pets-fe/pages/plan/plan.wxss @@ -1,58 +1,55 @@ -.inline-tabs{display:flex;padding:8rpx;gap:8rpx;border-radius:32rpx;background:#EFE8DE;margin-bottom:28rpx} -.it-btn{ - flex:1;height:68rpx;line-height:68rpx;text-align:center;border-radius:24rpx; - color:var(--muted);font-weight:900;font-size:26rpx; -} -.it-btn.active{background:#fff;color:var(--primary-dark);box-shadow:0 12rpx 28rpx rgba(0,0,0,.06)} - -.timeline{padding-left:36rpx;position:relative} +/* 竖线时间轴 */ +.timeline{padding-left:var(--sp-6);position:relative} .timeline::before{content:"";position:absolute;left:12rpx;top:12rpx;bottom:16rpx;width:4rpx;background:#E8DED0} -.time-block{position:relative;margin-bottom:28rpx} -.time-label{font-weight:900;color:var(--primary-dark);font-size:26rpx;margin-bottom:16rpx;position:relative} -.time-date{margin-left:12rpx;font-weight:600;color:var(--muted);font-size:22rpx} +.time-block{position:relative;margin-bottom:var(--sp-4)} +.time-label{font-weight:var(--fw-b);color:var(--primary-dark);font-size:var(--fs-sm);margin-bottom:var(--sp-3);position:relative} +.time-date{margin-left:var(--sp-2);font-weight:var(--fw);color:var(--muted);font-size:var(--fs-cap)} .time-label::before{ content:"";position:absolute;left:-34rpx;top:8rpx;width:24rpx;height:24rpx;border-radius:50%; - background:var(--primary);border:6rpx solid #fff;box-shadow:0 0 0 4rpx #F5D5A8; + background:var(--primary);border:6rpx solid #fff;box-shadow:0 0 0 4rpx var(--primary-line); +} +.plan-task{ + background:#fff;border-radius:var(--r-md);padding:var(--sp-4);box-shadow:var(--sd-1); + border:1rpx solid transparent;display:flex;gap:var(--sp-3);align-items:flex-start; } -.plan-task{background:#fff;border-radius:36rpx;padding:26rpx;box-shadow:var(--shadow);border:1rpx solid transparent;display:flex;gap:18rpx;align-items:flex-start} .plan-task.done{opacity:.55} .pk-check{ width:44rpx;height:44rpx;border-radius:50%;border:4rpx solid #DED1C4;flex:none;margin-top:2rpx; - display:flex;align-items:center;justify-content:center;color:#fff;font-size:24rpx;font-weight:900; + display:flex;align-items:center;justify-content:center;color:#fff; } .plan-task.done .pk-check{background:var(--green);border-color:var(--green)} .pk-body{flex:1} -.pk-b{font-size:28rpx;font-weight:700} -.pk-p{color:var(--muted);font-size:24rpx;line-height:1.45;margin-top:10rpx} -.ai-plan-tip{color:var(--muted);font-size:26rpx;line-height:1.6;margin-bottom:16rpx} +.pk-b{font-size:var(--fs-md);font-weight:var(--fw-b)} +.pk-p{color:var(--muted);font-size:var(--fs-sm);line-height:1.45;margin-top:var(--sp-1)} +.ai-plan-tip{color:var(--muted);font-size:var(--fs-sm);line-height:1.6;margin-bottom:var(--sp-3)} -.calendar{background:#fff;border-radius:44rpx;padding:28rpx;box-shadow:var(--shadow)} -.cal-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:20rpx;font-weight:900;font-size:30rpx} -.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:12rpx;text-align:center} -.cal-w{font-size:22rpx;color:var(--muted);padding:8rpx 0} +/* 日历 */ +.calendar{background:#fff;border-radius:var(--r-lg);padding:var(--sp-4);box-shadow:var(--sd-1)} +.cal-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--sp-3);font-weight:var(--fw-b);font-size:var(--fs-lg)} +.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:var(--sp-2);text-align:center} +.cal-w{font-size:var(--fs-cap);color:var(--muted);padding:var(--sp-1) 0} .cal-cell{ - height:76rpx;border-radius:24rpx;display:flex;align-items:center;justify-content:center; - font-weight:800;font-size:26rpx;background:#FBFAF8;position:relative; + height:76rpx;border-radius:var(--r-sm);display:flex;align-items:center;justify-content:center; + font-weight:var(--fw-b);font-size:var(--fs-sm);background:var(--surface-2);position:relative; } .cal-cell.blank{background:transparent} -.cal-cell.today{background:#FFF3DF;color:var(--primary-dark)} -.cal-cell.tasked::after{content:"";position:absolute;bottom:10rpx;width:10rpx;height:10rpx;border-radius:50%;background:var(--green)} +.cal-cell.today{background:var(--primary-soft);color:var(--primary-dark)} +.cal-cell.tasked::after{content:"";position:absolute;bottom:8rpx;width:8rpx;height:8rpx;border-radius:50%;background:var(--green)} .cal-cell.sel{background:var(--primary);color:#fff} .cal-cell.sel.tasked::after{background:#fff} -.day-detail{margin-top:24rpx;border-top:1rpx solid var(--line);padding-top:24rpx} -.dd-title{font-weight:900;font-size:28rpx;margin-bottom:16rpx} -.dd-item{display:flex;align-items:center;gap:16rpx;padding:14rpx 0} -.dd-tag{flex:none;font-size:20rpx;font-weight:700;padding:2rpx 12rpx;border-radius:999rpx} -.dd-tag.plan{background:#FFF2DC;color:var(--primary-dark)} -.dd-tag.task{background:#E6F4EA;color:#2E7D5B} -.dd-tag.rem{background:#EAF0FF;color:#3B6BE5} -.dd-b{font-size:27rpx;color:var(--text)} +/* 某天的安排 */ +.day-detail{margin-top:var(--sp-4);border-top:1rpx solid var(--line);padding-top:var(--sp-4)} +.dd-title{font-weight:var(--fw-b);font-size:var(--fs-md);margin-bottom:var(--sp-3)} +.dd-item{display:flex;align-items:center;gap:var(--sp-3);padding:var(--sp-2) 0} +.dd-tag{flex:none;font-size:var(--fs-cap);font-weight:var(--fw-b);padding:2rpx var(--sp-2);border-radius:var(--r-full)} +.dd-tag.plan{background:var(--primary-soft);color:var(--primary-ink)} +.dd-tag.task{background:var(--green-soft);color:var(--green-ink)} +.dd-tag.rem{background:var(--blue-soft);color:var(--blue-ink)} +.dd-b{font-size:var(--fs-md);color:var(--text)} .dd-b.done{text-decoration:line-through;color:var(--muted)} -.dd-empty{padding:20rpx 0;color:var(--muted);font-size:26rpx;text-align:center} -.extracted{display:grid;grid-template-columns:1fr 1fr;gap:16rpx;margin:24rpx 0} -.extract{background:#FBFAF8;border-radius:30rpx;padding:20rpx;font-size:24rpx} -.ex-b{display:block;font-size:26rpx;margin-bottom:6rpx;font-weight:700} - -/* 页面不自身滚动,改由 page-scroll 承载滚动(隐藏滚动条)*/ +/* AI 提取信息 */ +.extracted{display:grid;grid-template-columns:1fr 1fr;gap:var(--sp-3);margin:var(--sp-4) 0} +.extract{background:var(--surface-2);border-radius:var(--r-sm);padding:var(--sp-3);font-size:var(--fs-sm)} +.ex-b{display:block;font-size:var(--fs-sm);margin-bottom:6rpx;font-weight:var(--fw-b);color:var(--muted)} diff --git a/pets-fe/pages/profile/profile.json b/pets-fe/pages/profile/profile.json index 24ea6ea..fa34741 100644 --- a/pets-fe/pages/profile/profile.json +++ b/pets-fe/pages/profile/profile.json @@ -2,6 +2,7 @@ "usingComponents": { "nav-bar": "/components/nav-bar/nav-bar", "bottom-sheet": "/components/bottom-sheet/bottom-sheet", - "fab": "/components/fab/fab" + "fab": "/components/fab/fab", + "pt-icon": "/components/pt-icon/index" } } diff --git a/pets-fe/pages/profile/profile.wxml b/pets-fe/pages/profile/profile.wxml index cbdde59..881e725 100644 --- a/pets-fe/pages/profile/profile.wxml +++ b/pets-fe/pages/profile/profile.wxml @@ -6,27 +6,27 @@ {{pet.emoji}} - 📷 + {{pet.name}} {{pet.age}}|{{pet.weight}}|{{pet.stage}} {{pet.breed}}{{pet.breed && pet.color ? ' · ' : ''}}{{pet.color}} - + - 宠物档案(编辑)已完善 {{profilePct}}% › - 提醒设置 {{summary.reminders}} 条 › - 健康记录 {{summary.records}} 条 › - 多宠物管理 {{summary.pets}} 只 › + 宠物档案(编辑)已完善 {{profilePct}}% + 提醒设置{{summary.reminders}} 条 + 健康记录{{summary.records}} 条 + 多宠物管理{{summary.pets}} 只 - 会员权益 {{summary.pro_status === 'active' ? '已开通' : '未开通'}} › - 数据导出 文本 › - 意见反馈 去填写 › - 关于我们 v0.2 › + 会员权益{{summary.pro_status === 'active' ? '已开通' : '未开通'}} + 数据导出文本 + 意见反馈去填写 + 关于我们v0.2 diff --git a/pets-fe/pages/profile/profile.wxss b/pets-fe/pages/profile/profile.wxss index 4cf2b0a..8684038 100644 --- a/pets-fe/pages/profile/profile.wxss +++ b/pets-fe/pages/profile/profile.wxss @@ -1,16 +1,25 @@ -.profile-header{text-align:center;padding:24rpx 0 32rpx} -.ph-avatar{margin:0 auto 20rpx;width:152rpx;height:152rpx;font-size:76rpx;border-radius:56rpx;position:relative;overflow:visible} -.ph-avatar-img{width:100%;height:100%;border-radius:56rpx} -.ph-avatar-cam{position:absolute;right:-6rpx;bottom:-6rpx;width:52rpx;height:52rpx;line-height:52rpx;text-align:center;font-size:26rpx;background:#fff;border-radius:50%;box-shadow:var(--shadow)} -.ph-name{font-size:44rpx;font-weight:800} -.ph-meta{font-size:26rpx;margin-top:10rpx} +.profile-header{text-align:center;padding:var(--sp-4) 0 var(--sp-5)} +.ph-avatar{margin:0 auto var(--sp-3);width:152rpx;height:152rpx;font-size:76rpx;border-radius:var(--r-lg);position:relative;overflow:visible} +.ph-avatar-img{width:100%;height:100%;border-radius:var(--r-lg)} +.ph-avatar-cam{ + position:absolute;right:-6rpx;bottom:-6rpx;width:52rpx;height:52rpx; + display:flex;align-items:center;justify-content:center;color:var(--text-2); + background:#fff;border-radius:50%;box-shadow:var(--sd-1); +} +.ph-name{font-size:var(--fs-2xl);font-weight:var(--fw-b)} +.ph-meta{font-size:var(--fs-sm);margin-top:var(--sp-1)} -.profile-list{background:#fff;border-radius:48rpx;box-shadow:var(--shadow);overflow:hidden;margin-bottom:28rpx} +.profile-list{background:#fff;border-radius:var(--r-lg);box-shadow:var(--sd-1);overflow:hidden;margin-bottom:var(--sp-4)} .profile-row{ - display:flex;align-items:center;justify-content:space-between;min-height:104rpx;padding:0 32rpx; - border-bottom:1rpx solid var(--line);font-size:28rpx;font-weight:800; + display:flex;align-items:center;gap:var(--sp-3);min-height:104rpx;padding:0 var(--sp-4); + border-bottom:1rpx solid var(--line);font-size:var(--fs-md);font-weight:var(--fw-b); } .profile-row:last-child{border-bottom:0} -.pr-val{color:var(--muted);font-weight:700;font-size:26rpx} - -/* 页面不自身滚动,改由 page-scroll 承载滚动(隐藏滚动条)*/ +.pr-ic{ + width:56rpx;height:56rpx;border-radius:var(--r-xs);flex:none; + display:flex;align-items:center;justify-content:center; + background:var(--primary-soft);color:var(--primary-ink); +} +.pr-label{flex:1;min-width:0} +.pr-val{color:var(--muted);font-weight:var(--fw);font-size:var(--fs-sm)} +.pr-arrow{color:var(--muted2);display:flex;align-items:center;flex:none} diff --git a/pets-fe/pages/record/record.js b/pets-fe/pages/record/record.js index 45bae8b..6adc7a2 100644 --- a/pets-fe/pages/record/record.js +++ b/pets-fe/pages/record/record.js @@ -15,10 +15,34 @@ function fmtTime(iso) { if (d.toDateString() === y.toDateString()) return '昨天 ' + hm; return d.getMonth() + 1 + '月' + d.getDate() + '日'; } +// 记录类型 → 配色。和首页快速记录入口用同一套分组: +// 体重/疫苗=橙、便便/饮食=绿、异常/用药=蓝、消费/照片=紫 +const TYPE_TONE = { + weight: 'tone-1', vaccine: 'tone-1', deworm: 'tone-1', + poop: 'tone-2', food: 'tone-2', + symptom: 'tone-3', medicine: 'tone-3', + cost: 'tone-4', photo: 'tone-4', +}; + +// 记一笔的九个入口 +const RECORD_ITEMS = [ + { type: 'weight', icon: 'weight', label: '体重', tone: 'tone-1' }, + { type: 'food', icon: 'food', label: '饮食', tone: 'tone-2' }, + { type: 'poop', icon: 'poop', label: '便便', tone: 'tone-2' }, + { type: 'symptom', icon: 'symptom', label: '异常', tone: 'tone-3' }, + { type: 'medicine', icon: 'medicine', label: '用药', tone: 'tone-3' }, + { type: 'cost', icon: 'cost', label: '消费', tone: 'tone-4' }, + { type: 'vaccine', icon: 'vaccine', label: '疫苗', tone: 'tone-1' }, + { type: 'deworm', icon: 'deworm', label: '驱虫', tone: 'tone-1' }, + { type: 'photo', icon: 'photo', label: '照片', tone: 'tone-4' }, +]; + function mapRecord(r) { return { id: r.id, - icon: r.icon || '✍️', + // 图标按 type 取(9 值枚举,可靠);老数据 icon 字段里的 emoji 只作兜底 + type: r.type || r.icon || '', + tone: TYPE_TONE[r.type] || 'tone-1', title: r.title, desc: fmtTime(r.occurred_at) + (r.description ? '|' + r.description : ''), image: r.image_url || '', @@ -80,6 +104,7 @@ Page({ recHasMore: false, recFilters: REC_FILTERS, recFilterIdx: 0, + recordItems: RECORD_ITEMS, trendSvg: '', trendStats: null, trendDots: [], @@ -114,8 +139,9 @@ Page({ curFilter() { return this.data.recFilters[this.data.recFilterIdx].key; }, + // 来自 seg-tabs 的 change 事件 onFilterTap(e) { - const i = Number(e.currentTarget.dataset.index); + const i = Number(e.detail.index); if (i === this.data.recFilterIdx) return; this.setData({ recFilterIdx: i }, () => this.loadRecords()); }, diff --git a/pets-fe/pages/record/record.json b/pets-fe/pages/record/record.json index 075a8b2..58b7029 100644 --- a/pets-fe/pages/record/record.json +++ b/pets-fe/pages/record/record.json @@ -3,6 +3,8 @@ "nav-bar": "/components/nav-bar/nav-bar", "pet-switch": "/components/pet-switch/pet-switch", "bottom-sheet": "/components/bottom-sheet/bottom-sheet", - "fab": "/components/fab/fab" + "fab": "/components/fab/fab", + "pt-icon": "/components/pt-icon/index", + "seg-tabs": "/components/seg-tabs/index" } } diff --git a/pets-fe/pages/record/record.wxml b/pets-fe/pages/record/record.wxml index 554392c..68a12ec 100644 --- a/pets-fe/pages/record/record.wxml +++ b/pets-fe/pages/record/record.wxml @@ -2,23 +2,15 @@ - - 快速记录 - 先选择宠物,再记录体重、饮食、异常和消费。 - - - - ⚖️体重 - 🍽️饮食 - 💩便便 - 🤒异常 - 💊用药 - 💰消费 - 💉疫苗 - 🛡️驱虫 - 📷照片 + + 记一笔 + + + {{item.label}} + + @@ -40,32 +32,28 @@ {{selDot.value}}kg {{selDot.delta > 0 ? '+' : ''}}{{selDot.delta}}kg - 📝 {{selDot.note}} + {{selDot.note}} 这次没有填备注 点击圆点查看每次记录 - 先记录几次体重,这里会自动画出趋势曲线 + 先记录几次体重,这里会自动画出趋势曲线 健康时间轴摘要 - - {{item.label}} - + - {{item.icon}} + {{item.title}}{{item.desc}} - 这个分类下还没有记录 + 这个分类下还没有记录 长按任意一条可删除 查看更多(共 {{recTotal}} 条) diff --git a/pets-fe/pages/record/record.wxss b/pets-fe/pages/record/record.wxss index 6d2c273..33a0db1 100644 --- a/pets-fe/pages/record/record.wxss +++ b/pets-fe/pages/record/record.wxss @@ -1,13 +1,5 @@ -.record-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:24rpx;margin-bottom:28rpx} -.record-item{ - height:184rpx;background:#fff;border-radius:44rpx;box-shadow:var(--shadow); - display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16rpx; - font-weight:900;color:var(--text);font-size:28rpx; -} -.ri-ic{font-size:56rpx} - .mini-chart{ - height:256rpx;border-radius:36rpx;margin-top:24rpx;position:relative;overflow:hidden; + height:256rpx;border-radius:var(--r-md);margin-top:var(--sp-4);position:relative;overflow:hidden; background: linear-gradient(180deg,rgba(115,190,157,.16),rgba(115,190,157,0)), repeating-linear-gradient(0deg,#fff,#fff 60rpx,#EFE8DE 62rpx); @@ -15,41 +7,38 @@ .chart-line{position:absolute;left:36rpx;right:36rpx;top:44rpx;bottom:44rpx;width:auto;height:auto} .dot-layer{position:absolute;left:36rpx;right:36rpx;top:44rpx;bottom:44rpx} .dot{position:absolute;width:40rpx;height:40rpx;margin:-20rpx 0 0 -20rpx;border-radius:50%;} -.dot::after{content:'';position:absolute;left:50%;top:50%;width:18rpx;height:18rpx;margin:-9rpx 0 0 -9rpx;border-radius:50%;background:#fff;border:4rpx solid #73BE9D;box-sizing:border-box} -.dot.on::after{width:26rpx;height:26rpx;margin:-13rpx 0 0 -13rpx;background:#73BE9D;box-shadow:0 0 0 6rpx rgba(115,190,157,.25)} -.trend-stats{margin-top:16rpx;font-size:26rpx;color:var(--muted)} -.point-detail{margin-top:20rpx;padding:24rpx 28rpx;border-radius:32rpx;background:#F3FAF6;border:1rpx solid #DCEFE4} -.pd-main{display:flex;align-items:baseline;gap:20rpx} -.pd-date{font-size:26rpx;color:var(--muted)} -.pd-weight{font-size:40rpx;font-weight:800;color:#2E7D5B} -.pd-delta{font-size:26rpx;font-weight:700} -.pd-delta.up{color:var(--red)} -.pd-delta.down{color:#2E7D5B} -.pd-note{margin-top:12rpx;font-size:28rpx;color:#4A4A46;line-height:1.5} +.dot::after{content:'';position:absolute;left:50%;top:50%;width:18rpx;height:18rpx;margin:-9rpx 0 0 -9rpx;border-radius:50%;background:#fff;border:4rpx solid var(--green);box-sizing:border-box} +.dot.on::after{width:26rpx;height:26rpx;margin:-13rpx 0 0 -13rpx;background:var(--green);box-shadow:0 0 0 6rpx rgba(115,190,157,.25)} +.trend-stats{margin-top:var(--sp-3);font-size:var(--fs-sm);color:var(--muted)} + +.point-detail{ + margin-top:var(--sp-3);padding:var(--sp-4);border-radius:var(--r-md); + background:var(--green-soft);border:1rpx solid #DCEFE4; +} +.pd-main{display:flex;align-items:baseline;gap:var(--sp-3)} +.pd-date{font-size:var(--fs-sm);color:var(--muted)} +.pd-weight{font-size:var(--fs-xl);font-weight:var(--fw-b);color:var(--green-ink)} +.pd-delta{font-size:var(--fs-sm);font-weight:var(--fw-b)} +.pd-delta.up{color:var(--red-ink)} +.pd-delta.down{color:var(--green-ink)} +.pd-note{margin-top:var(--sp-2);font-size:var(--fs-md);color:var(--text-2);line-height:1.5} .pd-note.muted{color:var(--muted)} -.chart-hint{margin-top:12rpx;font-size:22rpx;color:var(--muted);text-align:center} -.chart-empty{margin-top:24rpx;padding:48rpx 24rpx;border-radius:36rpx;background:#FBFAF8;color:var(--muted);font-size:26rpx;text-align:center} +.chart-hint{margin-top:var(--sp-2);font-size:var(--fs-cap);color:var(--muted);text-align:center} -.health-timeline{display:flex;flex-direction:column;gap:20rpx} -.tl-empty{padding:36rpx 8rpx;text-align:center;color:var(--muted);font-size:26rpx} -.tl-more{margin-top:20rpx;padding:20rpx;text-align:center;color:var(--primary-dark);background:#FBFAF8;border-radius:28rpx;font-size:26rpx;font-weight:700} -.health-event{display:flex;gap:20rpx;background:#FBFAF8;border-radius:32rpx;padding:24rpx} +.health-timeline{display:flex;flex-direction:column;gap:var(--sp-2)} +.health-event{display:flex;gap:var(--sp-3);background:var(--surface-2);border-radius:var(--r-md);padding:var(--sp-4)} +/* 底色和文字色由 .tone-N 提供(记录类型决定),这里只管形状 */ .event-dot{ - width:68rpx;height:68rpx;border-radius:26rpx;flex:none; - display:flex;align-items:center;justify-content:center;background:#FFF0D7;font-size:34rpx; + width:64rpx;height:64rpx;border-radius:var(--r-sm);flex:none; + display:flex;align-items:center;justify-content:center; } -.he-b{font-size:28rpx;font-weight:700} -.he-p{color:var(--muted);font-size:24rpx;line-height:1.45;margin-top:6rpx} +.he-b{font-size:var(--fs-md);font-weight:var(--fw-b)} +.he-p{color:var(--muted);font-size:var(--fs-sm);line-height:1.45;margin-top:6rpx} .he-body{flex:1;min-width:0} -.he-img{margin-top:14rpx;width:220rpx;height:220rpx;border-radius:20rpx} +.he-img{margin-top:var(--sp-2);width:220rpx;height:220rpx;border-radius:var(--r-sm)} -/* 页面不自身滚动,改由 page-scroll 承载滚动(隐藏滚动条)*/ - -/* 时间轴类型筛选 */ -.rec-filter{white-space:nowrap;margin-bottom:20rpx} -.rf-chip{ - display:inline-block;padding:10rpx 26rpx;margin-right:14rpx;border-radius:999rpx; - background:#fff;border:1rpx solid var(--line);color:var(--muted);font-size:24rpx;font-weight:700; +.tl-tip{margin-top:var(--sp-3);text-align:center;color:var(--muted);font-size:var(--fs-cap)} +.tl-more{ + margin-top:var(--sp-3);padding:var(--sp-3);text-align:center;color:var(--primary-dark); + background:var(--surface-2);border-radius:var(--r-md);font-size:var(--fs-sm);font-weight:var(--fw-b); } -.rf-chip.on{background:#FFF2DC;color:var(--primary-dark);border-color:#FFD39A} -.tl-tip{margin-top:16rpx;text-align:center;color:var(--muted);font-size:22rpx} diff --git a/pets-fe/pages/report/report.json b/pets-fe/pages/report/report.json index 075a8b2..cfab932 100644 --- a/pets-fe/pages/report/report.json +++ b/pets-fe/pages/report/report.json @@ -3,6 +3,7 @@ "nav-bar": "/components/nav-bar/nav-bar", "pet-switch": "/components/pet-switch/pet-switch", "bottom-sheet": "/components/bottom-sheet/bottom-sheet", - "fab": "/components/fab/fab" + "fab": "/components/fab/fab", + "pt-icon": "/components/pt-icon/index" } } diff --git a/pets-fe/pages/report/report.wxml b/pets-fe/pages/report/report.wxml index 5e175f6..be7b06a 100644 --- a/pets-fe/pages/report/report.wxml +++ b/pets-fe/pages/report/report.wxml @@ -2,11 +2,6 @@ - - 成长报告 - 每只宠物的成长报告、账单与健康摘要。 - - @@ -50,7 +45,7 @@ Pro 会员 解锁 365 天计划、PDF 健康档案、月度报告、多宠物管理与年度账单。 - + diff --git a/pets-fe/pages/report/report.wxss b/pets-fe/pages/report/report.wxss index b99f71a..2106ca1 100644 --- a/pets-fe/pages/report/report.wxss +++ b/pets-fe/pages/report/report.wxss @@ -1,13 +1,10 @@ .report-card{background:linear-gradient(135deg,#FFFFFF,#F2FAF6)} -.rc-text{color:var(--muted);font-size:28rpx;line-height:1.6} -.stat-b{display:block;font-size:36rpx;margin-bottom:8rpx;font-weight:800} -.stat-s{font-size:22rpx;color:var(--muted)} +.rc-text{color:var(--text-2);font-size:var(--fs-md);line-height:1.6} -.bill-bars{display:flex;flex-direction:column;gap:20rpx;margin-top:24rpx} -.bill-row{display:grid;grid-template-columns:88rpx 1fr 108rpx;gap:16rpx;align-items:center;font-size:24rpx} +.bill-bars{display:flex;flex-direction:column;gap:var(--sp-3);margin-top:var(--sp-4)} +.bill-row{display:grid;grid-template-columns:88rpx 1fr 108rpx;gap:var(--sp-3);align-items:center;font-size:var(--fs-sm)} .bill-cat{color:var(--text)} -.bill-amt{font-weight:900;text-align:right} -.mini-bar{height:18rpx;border-radius:999rpx;background:#F0E7DD;overflow:hidden} -.mini-bar-fill{display:block;height:100%;border-radius:999rpx;background:linear-gradient(90deg,var(--blue),#A9C8F6)} - -/* 页面不自身滚动,改由 page-scroll 承载滚动(隐藏滚动条)*/ +.bill-amt{font-weight:var(--fw-b);text-align:right} +/* 账单条比全局 .bar 细一档,蓝色是「花费」的语义色 */ +.mini-bar{height:var(--sp-2);border-radius:var(--r-full);background:#F0E7DD;overflow:hidden} +.mini-bar-fill{display:block;height:100%;border-radius:var(--r-full);background:var(--blue)}