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
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
{"component":true,"usingComponents":{"Dialog":"../../pubComponents/dialog/dialog","mp-icon":"weui-miniprogram/icon/icon","custom-button":"../../pubComponents/button/button"}}
@@ -0,0 +1,94 @@
<Dialog
visible="{{visible}}"
maskClosable="{{true}}"
zIndex="{{20000}}"
containerClass="coupon-dialog-container {{useDarkTheme ? 'coupon-dialog-container-dark' : ''}}"
containerStyle="width: 560rpx; background: transparent; overflow: visible; border-radius: 0;"
bind:close="closeCouponDrawer"
>
<view class="coupon-card">
<view class="coupon-tab">卡券</view>
<view class="coupon-contain">
<view class="coupon-contain-top">
<view class="coupon-main-title">{{title}}</view>
<view wx:if="{{desc}}" class="coupon-sub-title">{{desc}}</view>
<view wx:if="{{imageUrl}}" class="coupon-image-wrap">
<image class="coupon-image" src="{{imageUrl}}" mode="aspectFill" />
</view>
</view>
<view wx:if="{{showText}}" class="coupon-contain-middle">
<view class="coupon-pickup-condition">满足以下条件即可领取</view>
<view wx:if="{{isHasLimit}}" class="coupon-pickup-condition-desc">
<view class="coupon-pickup-condition-desc-text">观看本场直播</view>
<view class="can-pickup-coupon">
<text wx:if="{{canPickUp}}">已满足</text>
<text wx:else>未满足</text>
</view>
</view>
<view wx:if="{{IsViewerLevelLimit}}" class="coupon-pickup-condition-desc">
<view class="coupon-pickup-condition-desc-text">达到可领取卡券的观众等级</view>
<view class="can-pickup-coupon">
<text wx:if="{{isLevelEligible}}">已满足</text>
<text wx:else>未满足</text>
</view>
</view>
</view>
<view wx:if="{{!isPopup && (isNeedCountDown || isNeedCutOff)}}" class="coupon-countdown-wrap">
<view wx:if="{{isNeedCountDown && countdownArr.length}}" class="coupon-countdown">
<view class="countdown-box">{{countdownArr[0]}}</view>
<view class="countdown-sep">:</view>
<view class="countdown-box">{{countdownArr[1]}}</view>
<view class="countdown-sep">:</view>
<view class="countdown-box">{{countdownArr[2]}}</view>
<text class="countdown-text">后截止</text>
</view>
<view wx:if="{{isNeedCutOff}}" class="coupon-cutoff">
<text>截止至</text> {{cutOffText}}
</view>
</view>
<view class="coupon-contain-bottom">
<view wx:if="{{isPopup && (isNeedCountDown || isNeedCutOff)}}" class="coupon-countdown-wrap">
<view wx:if="{{isNeedCountDown && countdownArr.length}}" class="coupon-countdown">
<view class="countdown-box">{{countdownArr[0]}}</view>
<view class="countdown-sep">:</view>
<view class="countdown-box">{{countdownArr[1]}}</view>
<view class="countdown-sep">:</view>
<view class="countdown-box">{{countdownArr[2]}}</view>
<text class="countdown-text">后截止</text>
</view>
<view wx:if="{{isNeedCutOff}}" class="coupon-cutoff">
<text>截止至</text> {{cutOffText}}
</view>
</view>
<view wx:if="{{countText || timeText}}" class="coupon-meta">
<text wx:if="{{countText}}">{{countText}} </text>
<text wx:if="{{timeText}}">{{timeText}}</text>
</view>
<!-- 按钮 -->
<custom-button
class="coupon-btn-host"
custom-class="coupon-btn"
type="primary"
size="44"
disabled="{{btnDisabled}}"
bind:click="onPickup"
>
{{btnText}}
</custom-button>
<view class="coupon-tip">{{tipText}}</view>
</view>
</view>
<view class="coupon-close" bindtap="closeCouponDrawer">
<image src="../../assets/icon_close_btn.svg" class="coupon-close-icon" />
</view>
</view>
</Dialog>
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
{"component":true,"usingComponents":{"Drawer":"../../../pubComponents/drawer/drawer","mp-icon":"weui-miniprogram/icon/icon","custom-button":"../../../pubComponents/button/button"}}
@@ -0,0 +1,53 @@
<view wx:if="{{showEntry && hasValidCoupons}}" class="coupon-entry-container {{mode === 'landscape' ? 'landscape' : ''}}" catchtap="openListDrawer">
<view class="coupon-entry-wrap {{entryTheme === 'dark' || (mode === 'landscape' && useDarkTheme) ? 'dark' : ''}}">
<image class="coupon-entry-icon" src="../../../assets/coupon.svg" mode="aspectFit" />
<view class="coupon-entry-text">卡券</view>
</view>
</view>
<Drawer id="coupon-list-drawer" class="coupon-list-drawer {{mode === 'landscape' ? 'landscape' : ''}}" needCancel="{{false}}" themeColor="{{drawerTheme}}" bind:myCancel="closeListDrawer">
<view class="coupon-list-container {{mode === 'landscape' ? 'landscape' : ''}}">
<view class="coupon-list-header">
<view class="coupon-list-title">卡券</view>
<view class="coupon-list-sub">
<text>共 {{couponList.length}} 个卡券</text>
<text class="view-products-btn" bindtap="onViewProducts">查看商品</text>
</view>
<view class="coupon-close-btn" bindtap="onViewProducts">
<image src="../../../assets/common_close.png" class="close-icon" />
</view>
</view>
<scroll-view scroll-y class="coupon-list-scroll">
<block wx:if="{{couponList.length > 0}}">
<view class="coupon-list-item {{item._display.isReceived ? 'received' : ''}}" wx:for="{{couponList}}" wx:key="Id" data-id="{{item.Id}}" bindtap="onCouponItemClick">
<image class="coupon-list-bg" src="../../../assets/Subtract.png" />
<view class="item-left">
<image class="item-img" src="{{item._display.imageUrl}}" mode="aspectFill" />
</view>
<view class="item-center">
<view class="item-title">{{item._display.title}}</view>
<view class="item-desc">{{item._display.desc}}</view>
<view class="item-meta">
<text wx:if="{{item._display.countText}}">{{item._display.countText}}</text>
</view>
<view class="item-meta-time">
<text wx:if="{{item._display.timeText}}" class="item-time">
{{item._display.timeText}}
</text>
</view>
</view>
<view class="item-right">
<view wx:if="{{item._display.isReceived}}" class="received-btn">已领取</view>
<view wx:else class="action-btn {{item._display.btnDisabled ? 'disabled' : ''}}" data-id="{{item.Id}}" catchtap="onPickupFromList">
{{item._display.btnText}}
</view>
</view>
</view>
<view class="scroll-bottom-spacer"></view>
</block>
<view wx:else class="coupon-list-empty">
<image src="../../../assets/no_content.svg" class="empty-icon" />
<view class="empty-text">暂无卡券</view>
</view>
</scroll-view>
</view>
</Drawer>
File diff suppressed because one or more lines are too long