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 @@
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.parseLiveStateResolutionChangeMessage=exports.getVideoErrorRetryAction=exports.VideoErrorRetryAction=void 0;var parseLiveStateResolutionChangeMessage=function(r){var e=r.match(/resolution:(\d+)x(\d+)/);return e?{width:Number(e[1]),height:Number(e[2])}:null};exports.parseLiveStateResolutionChangeMessage=parseLiveStateResolutionChangeMessage;var VIDEO_REPORT_ONLY_ERROR_PATTERNS=[/bufferSeekOverhole/i,/bufferStalledError/i,/bufferNudgeOnStall/i],VIDEO_RETRYABLE_ERROR_PATTERNS=[/MEDIA_ERR_NETWORK/i,/networkError/i,/fragLoadError/i,/manifestLoadError/i,/fragParsingError/i,/fragLoopLoadingError/i],VIDEO_RESTART_ERROR_PATTERNS=[/MEDIA_ERR_DECODE/i,/MEDIA_ERR_SRC_NOT_SUPPORTED/i],VIDEO_NON_RETRYABLE_ERROR_PATTERNS=[],VideoErrorRetryAction={NONE:"none",PLAY:"play",REPORT_ONLY:"report_only",RESTART:"restart"};exports.VideoErrorRetryAction=VideoErrorRetryAction;var getVideoErrorRetryAction=function(r,e){var o="".concat(e||""," ").concat((null==r?void 0:r.errMsg)||""," ").concat((null==r?void 0:r.message)||""," ").concat((null==r?void 0:r.msg)||"");return VIDEO_NON_RETRYABLE_ERROR_PATTERNS.some(function(r){return r.test(o)})?VideoErrorRetryAction.NONE:VIDEO_REPORT_ONLY_ERROR_PATTERNS.some(function(r){return r.test(o)})?VideoErrorRetryAction.REPORT_ONLY:VIDEO_RESTART_ERROR_PATTERNS.some(function(r){return r.test(o)})?VideoErrorRetryAction.RESTART:(VIDEO_RETRYABLE_ERROR_PATTERNS.some(function(r){return r.test(o)}),VideoErrorRetryAction.PLAY)};exports.getVideoErrorRetryAction=getVideoErrorRetryAction;
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
{"component":true,"usingComponents":{"volc-loading":"../../../pubComponents/loading/loading"}}
@@ -0,0 +1,66 @@
<view class="volc-live-player-container">
<video
class="volc-live-player"
wx:if="{{engine === 'video'}}"
id="innerLiveVideo"
src="{{src}}"
is-live="{{true}}"
autoplay="{{true}}"
controls="{{false}}"
show-center-play-btn="{{false}}"
show-play-btn="{{false}}"
enable-progress-gesture="{{false}}"
show-fullscreen-btn="{{false}}"
show-background-playback-button="{{false}}"
object-fit="{{objectFit}}"
picture-in-picture-mode="{{pictureInPictureMode}}"
bindplay="handlePlay"
bindpause="handlePause"
binderror="handleError"
bindfullscreenchange="handleFullscreenChange"
bindwaiting="handleWaiting"
bindloadedmetadata="handleLoadedMetaData"
bindenterpictureinpicture="handleEnterPictureInPicture"
bindleavepictureinpicture="handleLeavePictureInPicture"
bindprogress="handleProgress"
bindtimeupdate="handleTimeUpdate"
bindended="handleEnded"
>
<slot />
<view wx:if="{{showControls}}" class="volc-live-player-tap-layer" bindtap="_handleTapLayerTap"></view>
<view
wx:if="{{showControls && controlsVisible}}"
class="volc-live-player-controls {{isFullscreen ? 'is-fullscreen' : ''}}"
catchtap="_handleControlsTap"
>
<view class="volc-live-player-top">
<view class="volc-live-player-top-right-slot">
<slot name="topRight" />
</view>
</view>
<view class="volc-live-player-controls-bottom-shadow"></view>
<view class="volc-live-player-controls-top-shadow"></view>
<view wx:if="{{showPlayControl}}" class="volc-live-player-play" bindtap="_togglePlay">
<image
class="volc-live-player-play-icon"
src="{{isPlaying ? '../../../assets/mobilePause.svg' : '../../../assets/mobilePlay.svg'}}"
mode="aspectFit"
/>
</view>
<view
wx:if="{{showFullscreenControl}}"
class="volc-live-player-fullscreen"
bindtap="_toggleFullscreen"
>
<image
class="volc-live-player-fullscreen-icon"
src="{{isFullscreen ? '../assets/mobileExitFullscreen.svg' : '../assets/mobileFullscreen.svg'}}"
/>
</view>
</view>
<volc-loading wx:if="{{isLoading}}" zIndex="{{15}}" theme="dark" type="player" />
</video>
</view>
@@ -0,0 +1 @@
.volc-live-player-container{position:relative;width:100%;height:100%}.volc-live-player{width:100%;height:100%}.volc-live-player-tap-layer{position:absolute;top:0;left:0;width:100%;height:100%;z-index:5}.volc-live-player-controls{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10}.volc-live-player-top{position:absolute;width:100%;height:100rpx;left:0;top:0;z-index:11}.volc-live-player-top-right-slot{position:absolute;top:24rpx;right:24rpx}.volc-live-player-controls-bottom-shadow{position:absolute;left:0;bottom:0;width:100%;height:100rpx;background:linear-gradient(to top,rgba(0,0,0,.25),rgba(0,0,0,0))}.volc-live-player-controls-top-shadow{position:absolute;top:0;left:0;width:100%;height:100rpx;background:linear-gradient(to bottom,rgba(0,0,0,.25),rgba(0,0,0,0))}.volc-live-player-play{position:absolute;left:24rpx;bottom:24rpx;width:56rpx;height:56rpx;display:flex;align-items:center;justify-content:center}.volc-live-player-play-icon{width:32px;height:32px}.volc-live-player-fullscreen{position:absolute;right:24rpx;bottom:24rpx;width:56rpx;height:56rpx;display:flex;align-items:center;justify-content:center}.volc-live-player-fullscreen-icon{width:32px;height:32px}