feat: 电子药箱小程序 - 4Tab药品管理

- 电子药箱: 药品库存管理 + 手动录入 + 今日用药打卡
- 药品百科: 搜索 + 分类筛选 + 20种药品静态数据
- 惠教中心: 4条药品使用指南课程
- 我的: 家庭成员信息管理
- 自定义TabBar + navigation-bar组件
- SVG药品分类插图
This commit is contained in:
陈誉午
2026-07-29 11:20:52 +08:00
commit 994b267f5c
683 changed files with 43849 additions and 0 deletions
@@ -0,0 +1,16 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect x="1.56" y="2.94" width="5.07" height="3.54" rx=".63" transform="rotate(-15 1.56 2.94)" fill="#FFE28A"/>
<rect x="5.95" y=".88" width="5" height="4.29" rx=".63" transform="rotate(7.8 5.95 .88)" fill="#73C9FF"/>
<rect x="9.92" y="1.63" width="5" height="3.75" rx=".63" transform="rotate(24.24 9.92 1.63)" fill="#FF9B5D"/>
<path d="M1.25 6c0-.83.67-1.5 1.5-1.5h10.5c.83 0 1.5.67 1.5 1.5v5.37A3.75 3.75 0 0 1 11 15.12H5a3.75 3.75 0 0 1-3.75-3.75V6Z" fill="url(#bag)"/>
<path d="M5.56 7.5c.55.47 1.44.78 2.44.78 1 0 1.89-.31 2.44-.78" stroke="white" stroke-width="1.13" stroke-linecap="round"/>
<defs>
<radialGradient id="bag" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(1.63 4.63) rotate(44.5) scale(15 19.2)">
<stop stop-color="#FD6D97"/>
<stop offset=".27" stop-color="#FD5A3B"/>
<stop offset=".52" stop-color="#FF5D39"/>
<stop offset=".86" stop-color="#FA3551"/>
<stop offset="1" stop-color="#FF7B94"/>
</radialGradient>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

@@ -0,0 +1,19 @@
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<circle cx="16" cy="16" r="14" fill="url(#outer)"/>
<circle cx="16" cy="16" r="12" stroke="#F7C340" stroke-width="3"/>
<path d="M16 5.8c1.79 0 3.54.47 5.09 1.36a10.2 10.2 0 0 1 3.73 3.73L16 16V5.8Z" fill="#FF9393"/>
<path d="M24.82 10.89a10.2 10.2 0 0 1 0 10.22L16 16l8.82-5.11Z" fill="#FF6163"/>
<path d="M24.82 21.11a10.2 10.2 0 0 1-8.82 5.1V16l8.82 5.11Z" fill="#FF9393"/>
<path d="M16 26.2a10.2 10.2 0 0 1-8.82-5.09L16 16v10.2Z" fill="#FF6163"/>
<path d="M7.18 21.11a10.2 10.2 0 0 1 0-10.22L16 16l-8.82 5.11Z" fill="#FF9393"/>
<path d="M7.18 10.89A10.2 10.2 0 0 1 16 5.8V16l-8.82-5.11Z" fill="#FF6163"/>
<circle cx="16" cy="16" r="2.3" fill="#FFD08A" stroke="#E69714" stroke-width=".6"/>
<path d="M16.36 8.04c.53-1.05 1.57-1.97 1.57-3.14a1.93 1.93 0 0 0-3.86 0c0 1.17 1.04 2.09 1.57 3.14l.19.37c.07.15.27.15.34 0l.19-.37Z" fill="#FFF1C9"/>
<defs>
<linearGradient id="outer" x1="23" y1="29" x2="6" y2="4" gradientUnits="userSpaceOnUse">
<stop stop-color="#FD693A"/>
<stop offset=".62" stop-color="#FF6F3C"/>
<stop offset="1" stop-color="#FFB800"/>
</linearGradient>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

@@ -0,0 +1,12 @@
<svg width="28" height="30" viewBox="0 0 28 30" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M0 14.7C0 7 6.27.7 14 .7s14 6.3 14 14v.8c0 7.7-6.27 14-14 14S0 23.2 0 15.5v-.8Z" fill="#DB2647"/>
<path d="M0 14.7v.95s8.47 2.2 14 2.2 14-2.2 14-2.2v-.95C28 7 21.73.7 14 .7S0 7 0 14.7Z" fill="url(#top)"/>
<circle cx="14" cy="15" r="5.9" fill="#FFE28D" stroke="#FFF1CB" stroke-width=".5"/>
<circle cx="14" cy="15" r="4.65" fill="#FFD76F" stroke="#FFAA00" stroke-width="1"/>
<defs>
<linearGradient id="top" x1="26.5" y1="11.9" x2="9.6" y2="27.6" gradientUnits="userSpaceOnUse">
<stop stop-color="#FF2F6D"/>
<stop offset="1" stop-color="#FF5B5B"/>
</linearGradient>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 715 B

File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
{"component":true,"usingComponents":{}}
@@ -0,0 +1,36 @@
<view wx:if="{{shouldRenderNotification}}" class="notification-wrap {{isLandscape ? 'notification-wrap-landscape' : ''}} {{!entryVisible ? 'notification-wrap-floating' : ''}} {{entryVisible ? 'notification-wrap-has-entry' : ''}}">
<view wx:if="{{announcementVisible && (!announcement.isCustom || isNotificationOpen)}}" class="announcement-card notification-lane-announcement {{announcement.isCustom ? 'announcement-card-custom' : ''}} {{announcementExiting ? 'announcement-slide-out' : 'announcement-slide-in'}}" bindtap="handleAnnouncementTap">
<image class="announcement-icon announcement-icon-{{announcement.type}}" src="{{announcement.iconSrc}}" mode="aspectFit"></image>
<view class="announcement-content">{{announcement.content}}</view>
<view wx:if="{{announcement.actionText}}" class="announcement-action">{{announcement.actionText}}</view>
<view wx:if="{{announcement.isCustom && !announcementExiting}}" class="announcement-custom-flash"></view>
</view>
<view wx:if="{{isNotificationOpen && entryVisible}}" class="entry-message notification-slide-left">
<view wx:if="{{entry.levelMeta}}" class="entry-level-badge" style="background-color: {{entry.levelMeta.Color}}">
<image wx:if="{{entry.levelMeta.LevelIcon}}" class="entry-level-icon" src="{{entry.levelMeta.LevelIcon}}" mode="aspectFit"></image>
<text class="entry-level-name">{{entry.levelMeta.LevelName}}</text>
</view>
<text class="entry-nickname">{{entry.nickname}}</text>
<text class="entry-main">来了</text>
</view>
<view wx:if="{{isNotificationOpen && giftVisible}}" class="gift-list notification-lane-gift">
<view wx:for="{{gifts}}" wx:key="id" class="gift-bean {{item.isHighlight ? 'gift-bean-highlight' : ''}}">
<view class="gift-left">
<view class="gift-info">
<text class="gift-nickname">{{item.nickname}}</text>
<text class="gift-text">送出{{item.giftName}}</text>
</view>
<image wx:if="{{item.giftImage}}" class="gift-image" src="{{item.giftImage}}" mode="aspectFit"></image>
</view>
<view class="gift-right">
<text class="gift-count-x">×</text>
<text class="gift-count">{{item.giftCount}}</text>
</view>
</view>
</view>
<view wx:if="{{isNotificationOpen && dynamicEmojiVisible}}" class="dynamic-emoji-card notification-lane-dynamic-emoji dynamic-emoji-slide-in">
<view class="dynamic-emoji-title" style="color: {{dynamicEmoji.textColor}}">{{dynamicEmoji.text}}</view>
<image wx:if="{{dynamicEmoji.src}}" class="dynamic-emoji-image" src="{{dynamicEmoji.src}}" mode="aspectFit"></image>
<text wx:else class="dynamic-emoji-text">{{dynamicEmoji.token}}</text>
</view>
</view>
File diff suppressed because one or more lines are too long