feat: 电子药箱小程序 - 4Tab药品管理
- 电子药箱: 药品库存管理 + 手动录入 + 今日用药打卡 - 药品百科: 搜索 + 分类筛选 + 20种药品静态数据 - 惠教中心: 4条药品使用指南课程 - 我的: 家庭成员信息管理 - 自定义TabBar + navigation-bar组件 - SVG药品分类插图
This commit is contained in:
+1
File diff suppressed because one or more lines are too long
+1
@@ -0,0 +1 @@
|
||||
"use strict";var _assets=require("./assets"),_constant=require("../../../../utils/constant"),_luckymoneyService=require("../../../../services/luckymoney-service"),_luckymoney=require("../../../../utils/luckymoney"),_luckymoneyStore=require("../../../../store/luckymoney-store"),velX=1.8,velRatio=Math.tan(60*Math.PI/180),config={maxScale:2,baseWidth:50,baseHeight:50,velX:velX,velY:velX*velRatio},area=14400;function getRandom(t,e){if(t>e){var n=[e,t];t=n[0],e=n[1]}var i=Math.random()*(e-t)+t;return Number(i.toFixed(2))}Component({properties:{rainingRedPacketID:{type:String,value:"",observer:"onRainingIdChange"},sdkInstance:{type:Object,value:null},duration:{type:Number,value:_constant.RedPacketRainDuration}},data:{start:!1,visible:!1,trailerCount:5,rainCount:30,hongBaoCount:0,hongBaoActive:!1},observers:{sdkInstance:function(t){t&&(this.sdkInstance=t,this.sdkInstanceId=(null==t?void 0:t.uuid)||t,this.store=t.store,this.luckymoneyStore=(0,_luckymoneyStore.getLuckymoneyStore)(this.sdkInstanceId))}},lifetimes:{detached:function(){this.clearTimers()}},methods:{getSdkInstanceId:function(){var t,e,n;return(null===(t=this.properties)||void 0===t||null===(e=t.sdkInstance)||void 0===e?void 0:e.uuid)||(null===(n=this.properties)||void 0===n?void 0:n.sdkInstance)},isLogin:function(){var t,e,n;return 2===((null===(t=this.properties)||void 0===t||null===(e=t.sdkInstance)||void 0===e||null===(n=e.store)||void 0===n?void 0:n.get("mainInfo"))||{}).mode},clearTimers:function(){var t;if(clearInterval(this.trailerTimer),clearInterval(this.rainTimer),this.requestID&&null!==(t=this.canvasNode)&&void 0!==t&&t.cancelAnimationFrame)try{this.canvasNode.cancelAnimationFrame(this.requestID)}catch(t){}},onRainingIdChange:function(t){t&&this.restart()},restart:function(){var t=this;this.clearTimers(),this.setData({start:!0,visible:!1,trailerCount:5,hongBaoCount:0,rainCount:this.data.duration}),this.trailerTimer=setInterval(function(){var e=t.data.trailerCount-1;t.setData({trailerCount:e}),e<=0&&(clearInterval(t.trailerTimer),t.startRain())},1e3)},startRain:function(){var t=this;this.setData({start:!1,visible:!0}),setTimeout(function(){t.initCanvas()},100),this.rainTimer=setInterval(function(){var e=t.data.rainCount-1;t.setData({rainCount:e}),e<=0&&t.stopRain()},1e3)},stopRain:function(){var t,e=null===(t=this.data)||void 0===t?void 0:t.hongBaoCount;this.clearTimers(),this.setData({visible:!1}),this.onRainEnd(e),this.triggerEvent("end",{count:e})},onRainEnd:function(t){var e=this.data.rainingRedPacketID;if(e){var n,i,a,o,s=null===(n=this.properties)||void 0===n||null===(i=n.sdkInstance)||void 0===i?void 0:i.uuid;null===(a=(0,_luckymoneyService.getLuckymoneyService)(s))||void 0===a||null===(o=a.stopRain)||void 0===o||o.call(a,e,t)}},onHongBaoClick:function(){var t,e=this,n=this.data.rainingRedPacketID,i=this.getSdkInstanceId(),a=this.luckymoneyStore||(0,_luckymoneyStore.getLuckymoneyStore)(i),o=(null==a||null===(t=a.state)||void 0===t?void 0:t.userStatusMap)||{},s=(null==o?void 0:o[n])||_luckymoney.LuckyMoneyResult.UNATTENDED,r=s!==_luckymoney.LuckyMoneyResult.UNATTENDED&&s!==_luckymoney.LuckyMoneyResult.ERROR;this.isLogin()&&r?(this.setData({hongBaoCount:this.data.hongBaoCount+1,hongBaoActive:!0}),setTimeout(function(){e.setData({hongBaoActive:!1})},100)):wx.showToast({title:"您未在红包雨开启前完成参与条件,无法参与本轮抢红包",icon:"none"})},initCanvas:function(){var t=this;this.createSelectorQuery().select("#rain-canvas").fields({node:!0,size:!0}).exec(function(e){if(e[0]&&e[0].node){var n=e[0].node,i=n.getContext("2d"),a=wx.getSystemInfoSync().pixelRatio;n.width=e[0].width*a,n.height=e[0].height*a,i.scale(a,a),t.canvasNode=n;var o=n.createImage();o.src=_assets.base64Url,o.onload=function(){t.execAnimation(n,i,o,e[0].width,e[0].height)}}})},execAnimation:function(t,e,n,i,a){var o=this,s=[],r=i*a/area;!function c(){var u,l,d,v,h,m,g;s.length<r&&s.push((u=getRandom(1,config.maxScale),l=config.baseWidth*u,d=config.baseHeight*u,v=config.velX*u,h=config.velY*u,m=getRandom(a/velRatio,i+a/velRatio),g=-1*getRandom(0,a),{step:function(){g+=h,((m-=v)<0-l||g>a+d)&&(m=getRandom(a/velRatio,i+a/velRatio),g=-1*getRandom(0,a))},draw:function(){e.drawImage(n,m,g,l,d)}})),e.clearRect(0,0,i,a),s.forEach(function(t){t.step(),t.draw()}),o.requestID=t.requestAnimationFrame(c)}()}}});
|
||||
+1
@@ -0,0 +1 @@
|
||||
{"component":true}
|
||||
+33
@@ -0,0 +1,33 @@
|
||||
<view class="rainner-root">
|
||||
<!-- Trailer -->
|
||||
<view wx:if="{{start}}" class="trailerMask">
|
||||
<view class="trailer">
|
||||
<view class="count">{{trailerCount}}</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- Rain -->
|
||||
<view wx:if="{{visible}}" class="rain">
|
||||
<view class="countdown">
|
||||
<view class="text-container">
|
||||
<text class="text">剩余时间</text>
|
||||
</view>
|
||||
<view class="count">{{rainCount}}</view>
|
||||
</view>
|
||||
|
||||
<view class="hongBaoWrap">
|
||||
<view class="hongBao {{hongBaoCount === 0 ? 'toda' : ''}} {{hongBaoActive ? 'active' : ''}}">
|
||||
<view class="content">
|
||||
<view class="title">拼手速抢红包</view>
|
||||
<view class="count">{{hongBaoCount > 0 ? '+' + hongBaoCount : ''}}</view>
|
||||
</view>
|
||||
<view class="btn" catchtap="onHongBaoClick">
|
||||
抢
|
||||
<view class="border"></view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<canvas type="2d" id="rain-canvas" class="rain-canvas"></canvas>
|
||||
</view>
|
||||
</view>
|
||||
+1
@@ -0,0 +1 @@
|
||||
@keyframes keyframesHeartBeat{0%{transform:scale(1)}50%{transform:scale(1.05)}100%{transform:scale(1.05)}}@keyframes keyframesTada{0%,10%,20%{transform:rotate3d(0,0,1,-3deg)}30%,50%,70%,90%{transform:rotate3d(0,0,1,3deg)}40%,60%,80%{transform:rotate3d(0,0,1,-3deg)}to{transform:scale3d(1,1,1)}}.rain,.trailerMask{position:fixed;z-index:11010;top:0;left:0;width:100%;height:100%;background-color:rgba(0,0,0,.5)}.countdown{position:absolute;z-index:1;text-align:center;font-size:calc(28rpx + .5 * (1rem - 16px));display:flex;width:100%;margin-top:100rpx;flex-direction:column;align-items:center;font-weight:600;line-height:calc(48rpx + .5 * (1rem - 16px));padding-bottom:20rpx}.countdown .text{color:#fff0b8;margin:0 20rpx}.countdown .count{color:#ffd48c;margin-top:16rpx;font-size:calc(72rpx + .5 * (1rem - 16px));font-weight:700}.hongBaoWrap{position:absolute;z-index:2;top:50%;left:50%;transform:translate3d(-50%,-50%,100px)}.hongBao{position:relative;background:url(https://p1-live.byteimg.com/tos-cn-i-gjr78lqtd0/5e9353a6aa3949ab81c1df809ce35031~tplv-gjr78lqtd0-image.image);background-repeat:no-repeat;background-size:contain;border-radius:16rpx;width:292rpx;height:430rpx;text-align:center;overflow:hidden}.hongBao.toda{animation-duration:1s;animation-fill-mode:both;animation-iteration-count:infinite;animation-name:keyframesTada}.hongBao.active{animation-duration:.1s;animation-fill-mode:both;animation-name:keyframesHeartBeat}.hongBao .content{position:absolute;z-index:2;left:0;text-align:center;width:100%;padding-top:40rpx}.hongBao .content .title{color:#fff0cd;font-size:calc(28rpx + .5 * (1rem - 16px));line-height:calc(48rpx + .5 * (1rem - 16px));font-weight:800}.hongBao .content .count{margin-top:8rpx;color:#ffd977;font-family:'DIN Alternate';font-weight:700;font-size:calc(48rpx + .5 * (1rem - 16px));line-height:calc(56rpx + .5 * (1rem - 16px));animation-duration:.5s;animation-fill-mode:both}.hongBao .btn{user-select:none;cursor:pointer;display:block;width:112rpx;height:calc(112rpx + .5 * (1rem - 16px));font-size:calc(48rpx + .5 * (1rem - 16px));line-height:calc(112rpx + .5 * (1rem - 16px));color:#d1632c;font-weight:800;border-radius:50%;position:absolute;z-index:1;bottom:120rpx;left:50%;transform:translateX(-50%);background-color:#ffe69f}.hongBao .btn .border{position:absolute;z-index:1;top:4rpx;left:4rpx;width:104rpx;height:104rpx;border:2rpx solid #ffb800;box-sizing:border-box;border-radius:50%}.trailer{width:600rpx;height:925rpx;position:absolute;z-index:1;left:50%;top:50%;transform:translate(-50%,-50%);text-align:center;background-image:url(https://p3-live.byteimg.com/tos-cn-i-gjr78lqtd0/rain-trailer-2x~tplv-gjr78lqtd0-png.png);background-repeat:no-repeat;background-size:contain}.trailer .count{display:inline-block;font-size:calc(100rpx + .5 * (1rem - 16px));font-weight:700;margin-top:500rpx;color:#ff7300;animation-duration:1s;animation-fill-mode:both}.rain-canvas{width:100%;height:100%;background-color:transparent;pointer-events:none}
|
||||
Reference in New Issue
Block a user