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
+73
View File
@@ -0,0 +1,73 @@
// components/login/login.ts
import { BASE_URL, appId } from "../../env";
import { LoginRes } from "./login.d";
import { wxGetUserInfo, wxLogin, wxRequest } from "../../utils/wx-api";
interface LoginComponent {
data: {
mbuId: number;
userName: string;
};
setData: (data: Partial<{ mbuId: number; userName: string }>) => void;
triggerEvent: (name: string, detail?: any) => void;
handleLogin: () => Promise<void>;
}
const app = getApp<IAppOption>();
Component({
data: {
mbuId: wx.getStorageSync("mbuId"),
userName: wx.getStorageSync("userName"),
},
methods: {
async handleLogin(this: LoginComponent) {
try {
wx.showLoading({ title: "登录中" });
const loginRes = await wxLogin();
const infoRes = await wxGetUserInfo();
if (!loginRes.code) throw new Error(loginRes.errMsg);
const loginResult = await wxRequest<LoginRes>({
url: `${BASE_URL}/auth/app-login?appId=${appId}&code=${loginRes.code}`,
method: "POST",
data: {
...infoRes.userInfo,
},
});
if (
loginResult?.statusCode !== 200 ||
(loginResult.data.code && loginResult.data.code !== 200)
) {
throw new Error(loginResult?.msg || "登录失败");
}
const { mpUserId, id, openId, unionId, nickName } = loginResult.data;
wx.setStorageSync("openId", openId);
wx.setStorageSync("userId", mpUserId);
wx.setStorageSync("mbuId", id);
wx.setStorageSync("unionId", unionId);
wx.setStorageSync("userName", nickName);
wx.setStorageSync("avatarUrl", infoRes.userInfo.avatarUrl);
this.setData({ mbuId: id, userName: nickName });
app.globalData.isLogin = true;
this.triggerEvent("loginSuccess", {
userName: nickName,
avatarUrl: infoRes.userInfo.avatarUrl,
});
console.log("登录成功");
} catch (err: any) {
console.log("登录失败:", err);
app.globalData.isLogin = false;
wx.showToast({
title: `登录失败:${err.message || err.errMsg}`,
icon: "none",
});
} finally {
wx.hideLoading();
}
},
},
});