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";Component({properties:{sdkInstance:{type:Object,value:null},data:{type:Object,value:null},status:{type:Number,value:null},IsUseDarkTheme:{type:Boolean,value:null}},data:{},lifetimes:{detached:function(){}},observers:{sdkInstance:function(e){}},methods:{}});
@@ -0,0 +1 @@
{"component":true,"usingComponents":{"mp-icon":"weui-miniprogram/icon/icon"}}
@@ -0,0 +1,84 @@
<wxs module="m1">
function getConditionTypeTipMap(Num) {
return {
// BarragePwd:[], // 弹幕
Quiz: ['提交全部答题', '至少提交' + Num + '道答题'],
Questionnaire: ['提交全部问卷', '至少提交' + Num + '个问卷'],
CheckIn: ['提交全部签到', '至少提交' + Num + '个签到'],
Vote: ['提交全部投票', '至少提交' + Num + '个投票'],
RightQuiz: ['答对全部答题', '至少答对' + Num + '道答题'],
}
};
function getValidStr(arr) {
if (!arr.length) return '';
for (var i = 0; i < arr.length; i++) {
if (arr[i] && arr[i].length > 0) {
return arr[i];
}
}
return '';
};
function getBySplit(text = '') { // locale
if (!text) {
return '';
}
// 根据管道符分隔
var idx = 0; // lanType[locale] ?? LANG[locale];
// 全角和半角的管道符
var textList = text.split('/\||/');
return getValidStr([textList[idx], textList[idx - 1], textList[0], text]);
};
var getTip = function (item) {
var tip = '';
if (item.key === 'BarragePwd') {
tip = '发布弹幕口令:' + getBySplit(item.value);
} else if (item.key === 'Order') {
tip = getBySplit(item.value.OrderName || '');
} else {
var tipIdx = item.value === 'all' ? 0 : 1;
var ConditionTypeTipMap = getConditionTypeTipMap(item.value);
tip = ConditionTypeTipMap[item.key][tipIdx];
}
return tip;
}
var getShowNumberStr = function (data, status) {
if (!data || !data.formatDataList || !data.formatDataList.length) return '';
if (status === 1) {
return data.formatDataList.length + '/' + data.formatDataList.length;
}
if (data.UndoAwardCondition) {
return data.formatDataList.filter(function (item) { return item.completed; }).length + '/' + data.formatDataList.length;
}
return data.formatDataList.length;
}
var getComplete = function (item, status) {
return item.completed || (status === 1);
}
module.exports.getTip = getTip;
module.exports.getShowNumberStr = getShowNumberStr;
module.exports.getComplete = getComplete;
</wxs>
<view class="lottery-detail-condition-box{{ IsUseDarkTheme ? ' lottery-detail-condition-box-dark' : ''}}{{data.AwardThemeUrl === 'lotteryBox' ? ' lottery-detail-condition-box-box' : ''}}{{ data.AwardThemeUrl === 'slotMachine' ? ' lottery-detail-condition-box-machine' : ''}}">
<view class="lottery-conditional-item-title">
做任务参与抽奖
<view class="lottery-conditional-item-title-num">{{m1.getShowNumberStr(data, status)}}</view>
</view>
<view wx:for="{{data.formatDataList}}" wx:for-index="index" wx:for-item="item" wx:key="{{item.key}}">
<view wx:if="{{data.attendFailFlag || data.attendedFlag}}" class="lottery-detail-text lottery-condition-unAttend {{item.completed ? 'completed' : ''}}">
<view>
<mp-icon wx:if="{{m1.getComplete(item, status)}}" icon="done" color="#00aa2a" size="{{14}}" class="done" />
<view wx:else class="circle"></view>
<view>{{m1.getTip(item)}}</view>
</view>
<view class="lottery-detail-text-status">
{{item.key === 'BarragePwd' ? '自动发送' : m1.getComplete(item, status) ? '已完成' : '待完成'}}
</view>
</view>
<view wx:else class="lottery-detail-text">
<view>
<view class="circle"></view>
<view>{{m1.getTip(item)}}</view>
</view>
</view>
</view>
</view>
@@ -0,0 +1 @@
.lottery-detail-condition-box{background:#f0fcff;box-shadow:0rpx 4rpx 24rpx 0rpx rgba(0,102,255,.02);margin-top:24rpx;border-radius:16rpx;padding:24rpx}.lottery-detail-condition-box .lottery-conditional-item-title{font-weight:500;color:#0c0d0e;font-size:calc(32rpx + .5 * (1rem - 16px));margin-bottom:24rpx}.lottery-detail-condition-box .lottery-conditional-item-title-num{display:inline-block;margin-left:16rpx}.lottery-detail-condition-box .lottery-detail-text{font-weight:400;font-size:calc(28rpx + .5 * (1rem - 16px));line-height:calc(44rpx + .5 * (1rem - 16px));color:#0c0d0e;display:flex;align-items:center;word-break:break-all;justify-content:space-between;margin-bottom:16rpx}.lottery-detail-condition-box .lottery-detail-text .circle{width:12rpx;height:12rpx;border-radius:50%;margin-right:16rpx;flex-shrink:0;margin-right:22rpx;margin-left:6rpx;background:linear-gradient(159.44deg,#00c2ff 13.64%,rgba(0,194,255,0) 96.59%)}.done{margin-right:12rpx}.lottery-detail-condition-box .lottery-detail-text>view:first-child{display:flex;align-items:center}.lottery-detail-condition-box .lottery-detail-text-status{flex-shrink:0;margin-left:32rpx}.lottery-detail-condition-box .lottery-detail-text:not(:last-child){margin-bottom:16rpx}.lottery-detail-condition-box .lottery-condition-un-Attend image{stroke-width:0;color:#dbdfe9;width:16rpx;height:16rpx;vertical-align:-2rpx;margin-right:12rpx;flex-shrink:0}.lottery-detail-condition-box .lottery-condition-unAttend>view{color:#737a87}.lottery-detail-condition-box .lottery-condition-unAttend.completed>view{color:#0c0d0e}.lottery-detail-condition-box .lottery-condition-unAttend.completed image{color:#00aa2a}.lottery-detail-condition-box .lottery-condition-unAttend.completed>view:last-child{color:#1664ff}.lottery-detail-condition-box.lottery-detail-condition-box-dark{background:#2a2a35;box-shadow:0rpx 4rpx 24rpx 0rpx rgba(0,102,255,.02);box-shadow:none}.lottery-detail-condition-box.lottery-detail-condition-box-dark .lottery-conditional-item-title{color:#fff}.lottery-detail-condition-box.lottery-detail-condition-box-dark .lottery-detail-text{color:#fff}.lottery-detail-condition-box.lottery-detail-condition-box-dark .lottery-detail-text .circle{background:linear-gradient(159.44deg,#00c2ff 13.64%,rgba(0,194,255,0) 96.59%)}.lottery-detail-condition-box.lottery-detail-condition-box-dark .lottery-condition-unAttend>view{color:#c7ccd6}.lottery-detail-condition-box.lottery-detail-condition-box-dark .lottery-condition-unAttend.completed>view{color:#fff}.lottery-detail-condition-box.lottery-detail-condition-box-dark .lottery-condition-unAttend.completed svg{color:#00aa2a}.lottery-detail-condition-box.lottery-detail-condition-box-dark .lottery-condition-unAttend.completed>view:last-child{color:#387bff}.lottery-detail-condition-box.lottery-detail-condition-box-box{background:linear-gradient(112deg,rgba(6,38,103,.6) 0,rgba(97,7,93,.6) 45.31%,rgba(84,0,8,.6) 100%);backdrop-filter:blur(8rpx);box-shadow:none}.lottery-detail-condition-box.lottery-detail-condition-box-box .lottery-conditional-item-title{color:#fff}.lottery-detail-condition-box.lottery-detail-condition-box-box .lottery-detail-text{color:#fff}.lottery-detail-condition-box.lottery-detail-condition-box-box .lottery-detail-text .circle{background:linear-gradient(159.44deg,#bb52ff 13.64%,rgba(187,82,255,0) 96.59%)}.lottery-detail-condition-box.lottery-detail-condition-box-box .lottery-condition-unAttend>view{color:#c7ccd6}.lottery-detail-condition-box.lottery-detail-condition-box-box .lottery-condition-unAttend.completed>view{color:#fff}.lottery-detail-condition-box.lottery-detail-condition-box-box .lottery-condition-unAttend.completed svg{color:#00aa2a}.lottery-detail-condition-box.lottery-detail-condition-box-box .lottery-condition-unAttend.completed>view:last-child{color:#ff6dc8}.lottery-detail-condition-box.lottery-detail-condition-box-machine{background:linear-gradient(112deg,#fffcf9 0,#fffcfa 100%);box-shadow:0rpx 4rpx 24rpx 0rpx rgba(255,107,0,.02)}.lottery-detail-condition-box.lottery-detail-condition-box-machine .lottery-conditional-item-title{color:#0c0d0e}.lottery-detail-condition-box.lottery-detail-condition-box-machine .lottery-detail-text{color:#0c0d0e}.lottery-detail-condition-box.lottery-detail-condition-box-machine .lottery-detail-text .circle{background:linear-gradient(159.44deg,#ff7751 13.64%,rgba(255,119,81,0) 96.59%)}.lottery-detail-condition-box.lottery-detail-condition-box-machine .lottery-condition-unAttend>view{color:#737a87}.lottery-detail-condition-box.lottery-detail-condition-box-machine .lottery-condition-unAttend.completed>view{color:#0c0d0e}.lottery-detail-condition-box.lottery-detail-condition-box-machine .lottery-condition-unAttend.completed svg{color:#00aa2a}.lottery-detail-condition-box.lottery-detail-condition-box-machine .lottery-condition-unAttend.completed>view:last-child{color:#ff4d00}.unAttend{margin-top:0;border-radius:0 0 16rpx 16rpx}