feat: 电子药箱小程序 - 4Tab药品管理
- 电子药箱: 药品库存管理 + 手动录入 + 今日用药打卡 - 药品百科: 搜索 + 分类筛选 + 20种药品静态数据 - 惠教中心: 4条药品使用指南课程 - 我的: 家庭成员信息管理 - 自定义TabBar + navigation-bar组件 - SVG药品分类插图
This commit is contained in:
@@ -0,0 +1,216 @@
|
||||
import { request } from "../../utils/request";
|
||||
import { appId } from "../../env";
|
||||
import {
|
||||
join,
|
||||
leave,
|
||||
addCustomEventListener,
|
||||
removeCustomEventListener,
|
||||
} from "../../utils/server-sent-events";
|
||||
interface LiveroomData {
|
||||
isPlayback: boolean;
|
||||
pluginVisible: boolean;
|
||||
roomInfo: any;
|
||||
pullUrlInfo: any;
|
||||
vodInfo: any;
|
||||
watchNum: number;
|
||||
productNum: number;
|
||||
chatEnhancementApproved: boolean;
|
||||
}
|
||||
interface LiveroomProperties {
|
||||
joinedGroupId: string;
|
||||
}
|
||||
interface LiveroomComponent
|
||||
extends WechatMiniprogram.Component.TrivialInstance {
|
||||
data: LiveroomData;
|
||||
properties: LiveroomProperties;
|
||||
_listener?: (data: any) => void;
|
||||
onLiveMessage: (data: any) => void;
|
||||
init: () => Promise<void>;
|
||||
cleanup: () => void;
|
||||
handleError: (error?: unknown) => void;
|
||||
setChatEnhancementApproval: (approved: boolean) => void;
|
||||
}
|
||||
|
||||
const statusId = "roomId-1";
|
||||
// components/liveroom/liveroom.ts
|
||||
Component({
|
||||
/**
|
||||
* 组件的属性列表
|
||||
*/
|
||||
properties: {
|
||||
joinedGroupId: {
|
||||
type: String,
|
||||
value: "",
|
||||
observer: function (
|
||||
this: LiveroomComponent,
|
||||
newVal: string,
|
||||
oldVal: string,
|
||||
) {
|
||||
if (newVal && newVal !== oldVal) {
|
||||
this.init();
|
||||
}
|
||||
},
|
||||
},
|
||||
},
|
||||
lifetimes: {
|
||||
attached(this: LiveroomComponent) {},
|
||||
detached(this: LiveroomComponent) {
|
||||
this.cleanup();
|
||||
},
|
||||
},
|
||||
pageLifetimes: {
|
||||
show(this: LiveroomComponent) {
|
||||
this._listener = this.onLiveMessage.bind(this);
|
||||
addCustomEventListener("pushMsg", this._listener);
|
||||
join(statusId);
|
||||
},
|
||||
hide() {
|
||||
// @ts-ignore
|
||||
removeCustomEventListener("pushMsg", this._listener);
|
||||
leave(statusId);
|
||||
},
|
||||
},
|
||||
|
||||
/**
|
||||
* 组件的初始数据
|
||||
*/
|
||||
data: {
|
||||
isPlayback: false,
|
||||
pluginVisible: true,
|
||||
roomInfo: null,
|
||||
watchNum: 0,
|
||||
productNum: 0,
|
||||
durationInterval: null,
|
||||
},
|
||||
|
||||
/**
|
||||
* 组件的方法列表
|
||||
*/
|
||||
methods: {
|
||||
onLiveMessage(data: any) {
|
||||
console.log("收到通知:", data);
|
||||
const that = this as any;
|
||||
if (data.type == "watchNum") {
|
||||
that.setData({ watchNum: data.count });
|
||||
}
|
||||
|
||||
if (data.type == "productNum") {
|
||||
that.setData({ productNum: data.count });
|
||||
}
|
||||
},
|
||||
|
||||
updateIsPlayback(this: any, bool: boolean) {
|
||||
this.isPlayback = bool;
|
||||
},
|
||||
controlstoggle(this: LiveroomComponent, e: WechatMiniprogram.CustomEvent) {
|
||||
const { state } = e.detail;
|
||||
if (state && this.data.roomInfo) {
|
||||
this.setData({
|
||||
roomInfo: {
|
||||
...this.data.roomInfo,
|
||||
state,
|
||||
},
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
async init(this: LiveroomComponent) {
|
||||
const app = getApp<IAppOption>();
|
||||
if (!app.globalData.isLogin) return;
|
||||
const roomId = this.properties.joinedGroupId;
|
||||
const params = {
|
||||
roomId: roomId,
|
||||
appId: appId,
|
||||
openId: wx.getStorageSync("openId"),
|
||||
};
|
||||
|
||||
try {
|
||||
const data = await request({
|
||||
options: {
|
||||
url: `/app/video-live/details`,
|
||||
data: params,
|
||||
method: "GET",
|
||||
},
|
||||
});
|
||||
const bool = this.compareTime(data.data.onlineDatetime);
|
||||
console.log(bool, "12313");
|
||||
this.setData({
|
||||
roomInfo: data.data,
|
||||
pullUrlInfo: data.data,
|
||||
vodInfo: data.data,
|
||||
bool,
|
||||
});
|
||||
} catch (error) {
|
||||
this.handleError(error);
|
||||
}
|
||||
},
|
||||
|
||||
handleError(this: LiveroomComponent) {
|
||||
wx.showToast({
|
||||
title: "获取直播信息失败",
|
||||
icon: "none",
|
||||
duration: 2000,
|
||||
});
|
||||
},
|
||||
|
||||
cleanup(this: LiveroomComponent) {
|
||||
this.setData({
|
||||
isPlayback: false,
|
||||
pluginVisible: true,
|
||||
roomInfo: null,
|
||||
watchNum: 0,
|
||||
productNum: 0,
|
||||
chatEnhancementApproved: false,
|
||||
});
|
||||
},
|
||||
|
||||
compareTime(targetTimeStr: string) {
|
||||
const targetTime = new Date(targetTimeStr);
|
||||
const currentTime = new Date();
|
||||
return targetTime > currentTime;
|
||||
},
|
||||
|
||||
startDurationTimer(this: LiveroomComponent) {
|
||||
this.durationInterval = setInterval(() => {
|
||||
const now = new Date().getTime();
|
||||
const startTime = new Date(this.data.roomInfo.onlineDatetime).getTime();
|
||||
if (now < startTime) {
|
||||
const remainingTime = Math.floor((startTime - now) / 1000);
|
||||
const days = Math.floor(remainingTime / (24 * 3600));
|
||||
const hours = Math.floor((remainingTime % (24 * 3600)) / 3600);
|
||||
const minutes = Math.floor((remainingTime % 3600) / 60);
|
||||
const seconds = remainingTime % 60;
|
||||
this.setData({
|
||||
isLiveStarted: false,
|
||||
countdown:
|
||||
days > 0
|
||||
? `${days}天${hours.toString().padStart(2, "0")}:${minutes
|
||||
.toString()
|
||||
.padStart(2, "0")}:${seconds.toString().padStart(2, "0")}`
|
||||
: `${hours.toString().padStart(2, "0")}:${minutes
|
||||
.toString()
|
||||
.padStart(2, "0")}:${seconds.toString().padStart(2, "0")}`,
|
||||
});
|
||||
} else {
|
||||
const duration = Math.floor((now - startTime) / 1000);
|
||||
const hours = Math.floor(duration / 3600);
|
||||
const minutes = Math.floor((duration % 3600) / 60);
|
||||
const seconds = duration % 60;
|
||||
this.setData({
|
||||
isLiveStarted: true,
|
||||
duration: `${hours.toString().padStart(2, "0")}:${minutes
|
||||
.toString()
|
||||
.padStart(2, "0")}:${seconds.toString().padStart(2, "0")}`,
|
||||
});
|
||||
}
|
||||
}, 1000);
|
||||
},
|
||||
|
||||
stopDurationTimer(this: LiveroomComponent) {
|
||||
if (this.durationInterval) {
|
||||
clearInterval(this.durationInterval);
|
||||
this.durationInterval = null;
|
||||
}
|
||||
},
|
||||
},
|
||||
});
|
||||
Reference in New Issue
Block a user