| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286 |
- import I18nBehavior from "../../i18n/behavior";
- import { getPatients, getPatientPhone } from "../home/request";
- import { toCertificationPage } from "../home/router";
- import { getOrderList, getRecordCountMethod } from "../home/request";
- const i18n = {
- consultChat: { title: "记录" },
- offlineTreatment: { title: "线下" },
- healthTeach: { title: "分享文章" },
- health: { title: "档案" },
- home: {
- __showRecord__: false,
- tea: "茶",
- tonic: "菜谱",
- },
- orderText: {
- mineOrder: "我的服务",
- payStatusList:['待确认','已确认','已完成','全部'],
- },
- };
- Page({
- behaviors: [I18nBehavior],
- data: {
- i18n,
- patients: [] as (App.Patient.Model & { isDefault: "Y" | "N" })[],
- patient: null as App.Patient.Model | null,
- patientDescription: "",
- userInfo: null,
- tabbarValue: "/pages/mine/mine",
- phone: "",
- loaded: false,
- mineOrderList: [
- {
- url: "../../assets/icon/obligation@3x.png",
- // name: i18n.orderText.paying,
- count: 0,
- type: 1,
- tab: "pending",
- },
- {
- url: "../../assets/icon/delivery@3x.png",
- // name: i18n.orderText.paid,
- count: 0,
- type: 2,
- tab: "paid",
- },
- {
- url: "../../assets/icon/deal@3x.png",
- // name: i18n.orderText.paySuccess,
- count: 0,
- type: 3,
- tab: "completed",
- },
- // {
- // url: "../../assets/icon/delivery@3x.png",
- // name: "交易关闭",
- // count: 0,
- // type: 4,
- // tab: "closed",
- // },
- {
- url: "../../assets/icon/all@3x.png",
- name: "全部",
- count: 0,
- type: 5,
- tab: "all",
- },
- ],
- },
- // 读取缓存,若存在则直接渲染并返回已读到的数据
- hydrateFromCache() {
- const cachedPatient = (wx.getStorageSync("patient") ||
- null) as App.Patient.Model | null;
- const cachedPhone = (wx.getStorageSync("patientPhone") || "") as string;
- if (cachedPatient || cachedPhone) {
- this.setData({
- patient: cachedPatient || null,
- phone: cachedPhone || "",
- loaded: true,
- });
- }
- return { cachedPatient, cachedPhone } as {
- cachedPatient: App.Patient.Model | null;
- cachedPhone: string;
- };
- },
- // 写入缓存
- syncCache(patient: App.Patient.Model | null, phone: string) {
- try {
- wx.setStorageSync("patient", patient || null);
- wx.setStorageSync("patientPhone", phone || "");
- wx.setStorageSync("patientName", patient?.name);
- } catch {}
- },
- // 轻量对比(避免 JSON 深比较):患者用 patientId 或 name,对比手机号字符串
- isDifferent(
- cachedPatient: App.Patient.Model | null,
- newPatient: App.Patient.Model | null,
- cachedPhone: string,
- newPhone: string
- ) {
- const cachedId = cachedPatient?.patientId || "";
- const newId = newPatient?.patientId || "";
- const cachedName = cachedPatient?.name || "";
- const newName = newPatient?.name || "";
- return (
- cachedId !== newId ||
- cachedName !== newName ||
- (cachedPhone || "") !== (newPhone || "")
- );
- },
- // 获取各状态调理记录数量
- async getRecordCount() {
- try {
- const res = await getRecordCountMethod();
- if (res && res.data) {
- this.setData({
- "mineOrderList[0].count": res.data.pendingPayment,
- // "mineOrderList[1].count": res.data.pendingReceiptGoods,//已付款
- // "mineOrderList[2].count": res.data.successTrade,//交易成功
- // "mineOrderList[3].count": res.data.closeTrade,//交易关闭
- // "mineOrderList[3].count": res.data.total,//全部
- });
- }
- } catch (error: any) {
- wx.showToast({
- title: error.message,
- icon: "none",
- duration: 2000,
- });
- }
- },
- async load(retry = false) {
- if (retry) {
- await wx
- .showModal({
- title: "提示",
- content: "数据加载失败,是否重试?",
- showCancel: true,
- })
- .then((res) => {
- if (res.confirm) {
- this.load();
- }
- });
- return;
- }
- this.getRecordCount();
- try {
- // 1) 先读缓存渲染,避免初始闪烁
- const { cachedPatient, cachedPhone } = this.hydrateFromCache();
- // 2) 并行请求接口,完成后轻量对比,有变更再更新与回写缓存
- wx.showLoading({ title: "加载中" });
- const [{ patient }, phoneRes] = await Promise.all([
- getPatients(),
- getPatientPhone(),
- ]);
- const latestPhone = phoneRes?.phone || "";
- if (
- this.isDifferent(
- cachedPatient,
- patient || null,
- cachedPhone || "",
- latestPhone
- ) ||
- !this.data.loaded
- ) {
- this.setData({
- patient: patient || null,
- phone: latestPhone,
- loaded: true,
- });
- this.syncCache(patient || null, latestPhone);
- }
- } catch (error) {
- wx.showToast({
- title: "加载失败",
- icon: "none",
- duration: 2000,
- });
- } finally {
- wx.hideLoading();
- if (!this.data.loaded) {
- this.setData({ loaded: true });
- }
- }
- },
- // 点击头像/名称区域
- onHeadTap() {
- if (!this.data.patient?.patientId) {
- wx.navigateTo({
- url: '/module/user/pages/user-certification/user-certification?hide=true',
- });
- }
- },
- // 健康档案
- toHealthPage() {
- if (!this.data.patient?.patientId) {
- wx.showToast({
- title: "请先登录",
- icon: "none",
- });
- toCertificationPage();
- } else {
- wx.navigateTo({ url: `/module/health/pages/home/home` });
- }
- },
- // 药膳
- toDietTonicPage() {
- wx.navigateTo({
- url: `/module/article/pages/diet-list/diet-list?classify=tonic`,
- });
- },
- // 茶饮
- toDietTeaPage() {
- wx.navigateTo({
- url: `/module/article/pages/diet-list/diet-list?classify=tea`,
- });
- },
- // 订单列表
- toOrderListPage(e: any) {
- const tab = e.currentTarget.dataset.tab;
- wx.navigateTo({
- url: `/module/article/pages/order-list/order-list?tab=${tab}`,
- });
- },
- // 获取全部订单列表
- async getOrderList() {
- const patientId = wx.getStorageSync("patientId");
- await getOrderList(patientId, "");
- },
- onShow() {
- // 如果需要每次显示页面时刷新数据,可以在这里调用 load
- this.load();
- // 从支付成功页点「返回订单列表」时,自动打开订单列表,返回时回到本页
- const fromSuccess = wx.getStorageSync("fromSuccessToOrderList");
- if (fromSuccess) {
- wx.removeStorageSync("fromSuccessToOrderList");
- wx.navigateTo({
- url: "/module/article/pages/order-list/order-list?tab=all",
- });
- }
- },
- // 足迹
- toFootPrintPage() {
- wx.navigateTo({
- url: "/module/article/pages/foot-print/foot-print",
- });
- },
- // 宣教通知
- toHealthEducationPage() {
-
- wx.navigateTo({
- url: '/module/article/pages/education-list/education-list'
- });
- },
- onAddressTap() {
- // 跳转到收货地址页面
- wx.navigateTo({
- url: "/module/article/pages/manage-address/manage-address",
- });
- },
- onConsultationTap() {
- // 跳转到咨询记录页面
- // wx.showToast({
- // title: "敬请期待",
- // icon: "none",
- // });
- wx.navigateTo({
- url: '/module/chats/pages/consultation-record/consultation-record'
- });
- },
- onTreatmentTap() {
- // 跳转到线下非药物治疗页面
- wx.navigateTo({
- url: "/module/care/pages/offlineTreatment/offlineTreatment",
- });
- },
- });
|