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,131 @@
<!-- volc-mini-sdk/components/player.wxml -->
<view
class="volc-video-container {{isPortrait ? 'room-portrait' : 'room-landscape'}}"
id="volc-video-container"
>
<view class="volc-video-status {{statusBannerCentered ? 'volc-video-status-centered' : ''}}" wx:if="{{showStatusBanner}}">
{{statusBannerText}}
</view>
<view wx:if="{{!isPortrait && (showPeopleCount || showStatusTag)}}" class="volc-video-left-top-row">
<people-counter
wx:if="{{showPeopleCount}}"
mode="landscape"
sdkInstance="{{sdkInstance}}"
/>
<view class="volc-video-status-tag" wx:if="{{showStatusTag}}">
<view class="volc-video-status-tag-icon">
<view class="volc-video-status-tag-icon-bar volc-video-status-tag-icon-bar-1"></view>
<view class="volc-video-status-tag-icon-bar volc-video-status-tag-icon-bar-2"></view>
<view class="volc-video-status-tag-icon-bar volc-video-status-tag-icon-bar-3"></view>
</view>
<view>{{statusTagText}}</view>
</view>
</view>
<image
wx:if="{{videoType == 'poster'}}"
mode="cover"
src="{{CoverImageUrl}}"
class="video-item"
/>
<view wx:if="{{!isPortrait && !isFullscreen && videoType == 'poster'}}" class="player-top-actions">
<slot name="topRight"></slot>
</view>
<volc-loading wx:if="{{isLoading}}" zIndex="{{3}}" theme="dark" type="player" />
<view wx:if="{{playErrorVisible}}" class="play-error-mask">
<view class="play-error-content">
<view class="play-error-text">{{playErrorText}}</view>
<button
wx:if="{{videoType === 'live'}}"
class="weui-btn weui-btn_default play-error-retry-btn"
bindtap="handleRetryPull"
>
重试
</button>
</view>
</view>
<view wx:if="{{videoType == 'live' || videoType == 'vod'}}" style="{{videoStyle}}" class="videoContainer">
<video wx:if="{{videoType == 'vod' && shouldRenderVodPlayer}}" id="volcVodPlayer" src="{{vodSrc}}" class="video-item"
initial-time="{{vodInitialTime}}"
show-fullscreen-btn="{{!isPortrait || !isVideoPortrait}}"
enable-play-gesture="{{videoAttrs['enable-play-gesture']}}"
enable-progress-gesture="{{videoAttrs['enable-progress-gesture']}}"
loop="{{trailerLoop}}"
show-center-play-btn="{{videoAttrs['show-center-play-btn']}}"
show-play-btn="{{videoAttrs['show-play-btn']}}"
show-progress="{{videoAttrs['show-progress']}}"
controls="{{videoAttrs['controls']}}"
show-background-playback-button="{{false}}"
object-fit="{{videoAttrs['object-fit']}}"
autoplay="{{videoAttrs['autoplay'] && vodAutoplay}}"
picture-in-picture-mode="{{videoAttrs['picture-in-picture-mode']}}"
bindplay="handelPlay"
bindpause="handelPause"
bindended="bindVodEnded"
binderror="videoErrorCallback"
bindtimeupdate="handleVodTimeUpdate"
bindfullscreenchange="bindFullscreenChange"
bindwaiting="handleWaiting"
bindprogress="handleProgress"
bindloadedmetadata="handleLoadedMetaData"
bindcontrolstoggle="handleControlDisplay"
bindenterpictureinpicture="handleEnterPictureInPicture"
bindleavepictureinpicture="handleLeavePictureInPicture"
bindseekcomplete="handleSeekComplete"
>
<image
wx:if="{{isShowReplayBtn && CoverImageUrl}}"
mode="aspectFill"
src="{{CoverImageUrl}}"
class="video-item vod-poster-layer"
/>
<view wx:if="{{isShowReplayBtn}}" class="replay-mask">
<view bindtap="handleClickReplay" class="replay-btn">
<image src="./assets/replay.svg" class="replay-icon" />
<view class="replay-text">重播</view>
</view>
</view>
<!-- 由于全屏播放时,抽屉展示不出来,使用 cover-view 会导致元素放大,无法正常使用,暂时在全屏时引擎,后续统一优化交互 -->
<view wx:if="{{!isPortrait && !isFullscreen && videoControlsVisible}}" class="player-top-actions">
<slot name="topRight"></slot>
</view>
</video>
<volc-live-player wx:if="{{videoType == 'live' && shouldRenderLivePlayer}}" id="volcLivePlayer" class="video-item"
engine="{{liveEngine}}"
src="{{liveSrc}}"
object-fit="{{livePlayerAttrs['object-fit']}}"
picture-in-picture-mode="{{livePlayerAttrs['picture-in-picture-mode']}}"
min-cache="{{livePlayerAttrs['min-cache']}}"
max-cache="{{livePlayerAttrs['max-cache']}}"
success-code="{{liveSuccessCode}}"
show-controls="{{!isPortrait}}"
show-play-control="{{(!isPortrait || !isVideoPortrait) && !(isDesktopPlatform && liveEngine !== 'video')}}"
show-fullscreen-control="{{!isPortrait || !isVideoPortrait}}"
bindplay="handelPlay"
bindpause="handelPause"
bindfirstframe="liveFirstFrame"
bindwaiting="liveWaiting"
bindwaitingend="liveWaitingEnd"
bindloadedmetadata="liveLoadedMetaData"
bindretry="liveRetry"
bindtimeupdate="liveTimeUpdate"
bindended="liveEnded"
binderror="liveErrorCallback"
bindstatechange="liveStateChange"
bindfullscreenchange="bindFullscreenChange"
bindnetstatus="liveNetStatus"
bindenterpictureinpicture="handleEnterPictureInPicture"
bindleavepictureinpicture="handleLeavePictureInPicture"
>
<!-- 由于全屏播放时,抽屉展示不出来,使用 cover-view 会导致元素放大,无法正常使用,暂时在全屏时引擎,后续统一优化交互 -->
<view wx:if="{{!isPortrait && !isFullscreen}}" slot="topRight" class="player-live-top-actions">
<slot name="topRight"></slot>
</view>
</volc-live-player>
</view>
<Drawer id='volc-backRate-drawer'>
<dialog-content bindvalueChange="valueChange" type="backRate" list="{{backRateList}}" selected="{{playRate}}" />
</Drawer>
<Drawer id='volc-clarity-drawer'>
<dialog-content bindvalueChange="valueChange" type="clarity" list="{{videoType === 'live' ? liveAllowedSize : vodAllowedSize}}" selected="{{videoType === 'live' ? liveSelectedSize : vodSelectedSize }}" />
</Drawer>
</view>