| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331 | // index.tsimport { api_shopProduct, api_shopInstruments, api_getUserBeneficiaryPage } from "../../api/login";import { debounce } from '../../utils/util'// 获取应用实例const app = getApp<IAppOption>()// pages/orders/orders.tsPage({  /**   * 页面的初始数据   */  data: {    maxTop: 0,    top: 0,  // 初始的上偏移    startY: 0, // 触摸起始点 Y 坐标    windowHeight: 0, // 屏幕高度    elementHeight: 180, // 元素高度    goodsImgList: [      "https://oss.dayaedu.com/ktyq/1739518565519.png",      "https://oss.dayaedu.com/ktyq/1739518602666.png",      "https://oss.dayaedu.com/ktyq/1739518623253.png",      "https://oss.dayaedu.com/ktyq/1739518638007.png"    ],    serviceShow: true,    popupShow: false,    list: [] as any,    instrumentsList: [] as any[],    isOverSaled: false, // 是否所有商品都没有库存    selected: {} as any,    selectedInstruments: {} as any,    memberInfo: {} as any, // 会员信息    isShowMemberInfoTip: false, // 会员信息提示    isFromPreviewImage: false,    isShowOperation: false, // 是否显示操作按钮  },  /**   * 生命周期函数--监听页面加载   */  onLoad() {    // this.onInit()  },  /**   * 获取基础信息   */  async onInit() {    try {      // const [{ data }, { data: instrumentsData }] = await Promise.all([api_shopProduct({ appId: app.globalData.appId }), api_shopInstruments({ appId: app.globalData.appId })])      const [{ data }] = await Promise.all([api_shopProduct({ appId: app.globalData.appId })])      // 商品      const list = data.data || []      let selected: any = {}      let isOverSaled = true // 是否销售完      list.forEach((item: any) => {        item.typeName = this.formatPeriod(item.num, item.period);        if (item.stockNum > 0) {          isOverSaled = false          if (!selected.id) {            selected = item          }        }      });      if (isOverSaled) {        // 没有可购买商品则默认选中第一个商品        selected = list[0]      }      // 乐器      // const instrumentsList = instrumentsData.data      const instrumentsList = []      this.setData({        list,        isOverSaled,        selected,        instrumentsList,        selectedInstruments: {}      })    } catch (e) {      console.log(e, 'e')    }  },  // 格式化类型  formatPeriod(num: number, type: string) {    const template: any = {      DAY: "天卡",      MONTH: "月卡",      YEAR: "年卡"    }    if (type === "YEAR" && num >= 99) {      return '永久卡'    }    return num + template[type]  },  // 选择  onSelectGoods(e: any) {    const { dataset } = e.currentTarget    const item = this.data.list.find((item: any) => item.id === dataset.id)    // 判断是否有库存    if (item.stockNum <= 0) {      return    }    this.setData({      selected: item || {}    })  },  onSelectInstrumentsGoods(e: any) {    const { dataset } = e.currentTarget    let item = this.data.instrumentsList[dataset.index]    if (item?.id === this.data.selectedInstruments?.id) {      item = {}    }    this.setData({      selectedInstruments: item || {}    })  },  isLogin() {    // 判断是否登录    if (!app.globalData.isLogin) {      wx.navigateTo({        url: '../login/login',      })      return false    }    return true  },  /** 我的订单 */  onOrder() {    // 判断是否登录    if (!this.isLogin()) {      return    }    wx.navigateTo({      url: '../orders/orders',    })  },  onBuyShop() {    // 判断是否登录    if (!this.isLogin()) {      return    }    this.setData({      popupShow: true    })  },  onClose() {    this.setData({      popupShow: false    })  },  async onMemberInfo() {    this.setData({      isShowMemberInfoTip: false    })    try {      const resData = await api_getUserBeneficiaryPage()      const pageRows = resData?.data?.data?.rows || []      // 当有权益人的时候跳转到权益人选择列表页面,当没有权益人的时候到添加权益人页面      if (pageRows.length) {        wx.navigateTo({          url: `/pages/member/memberList?id=${this.data.memberInfo.id}`        });      } else {        // 当redirectUrl等于index的时候证明是首次添加,需要给上一个页面        wx.navigateTo({          url: `/pages/member/addMember?redirectUrl=index`        });      }    } catch (e) {      console.log(e, 'e')    }  },  onSubmit() {    // 判断是否登录    const that = this    debounce(function () {      if (!that.isLogin()) {        return      }      if (!that.data.memberInfo.id) {        wx.showToast({          title: "请填写会员资料",          icon: 'none'        })        that.setData({          isShowMemberInfoTip: true        })        return      }      let info = JSON.stringify({        ...that.data.selected      });      let instrumentsInfo = JSON.stringify({        ...that.data.selectedInstruments      })      let memberInfo = JSON.stringify({        ...that.data.memberInfo      })      info = encodeURIComponent(info);      instrumentsInfo = encodeURIComponent(instrumentsInfo);      memberInfo = encodeURIComponent(memberInfo);      wx.navigateTo({        url: `../orders/order-detail?orderInfo=${info}&instrumentsInfo=${instrumentsInfo}&memberInfo=${memberInfo}`,        success: () => {        }      })    }, 300)()  },  onPreivewGoodsImg(e: { currentTarget: { dataset: any } }) {    wx.previewImage({      current: e.currentTarget.dataset.src,      urls: this.data.goodsImgList,      success: () => {        this.setData({          isFromPreviewImage: true        })      }    })  },  onPreivewGoods(e: { currentTarget: { dataset: any } }) {    wx.previewImage({      current: e.currentTarget.dataset.src,      urls: [e.currentTarget.dataset.src],      success: () => {        this.setData({          isFromPreviewImage: true        })      }    })  },  /**   * 生命周期函数--监听页面显示   */  onShow() {    this.initPosInfo()    if (!this.data.isFromPreviewImage && !this.data.popupShow) {      this.onInit()      this.setData({        memberInfo: {}      })    } else {      this.setData({        isFromPreviewImage: false      })    }    this.setData({      serviceShow: true    })  },  onHide() {    this.setData({      serviceShow: false    })  },  // 初始化位置信息  initPosInfo() {    // 获取屏幕宽高    const systemInfo = wx.getWindowInfo();    const isAndroid = systemInfo.platform === 'android'    // const isDevtools = systemInfo.platform === 'devtools'    const barHeight = !isAndroid ? 44 : 48;    const globalTop = app.globalData.sectionBoxTop    this.setData({      maxTop: barHeight + systemInfo.safeArea.top,      windowHeight: systemInfo.windowHeight,      top: globalTop    });  },  onTouchStart(e: any) {    // 记录触摸起始点的 Y 坐标    this.setData({      startY: e.touches[0].clientY    });  },  onTouchMove(e: any) {    // 计算上下方向的偏移量    const deltaY = e.touches[0].clientY - this.data.startY;    // 更新元素的垂直位置    app.globalData.sectionBoxTop = this.data.top + deltaY    this.setData({      top: this.data.top + deltaY,      startY: e.touches[0].clientY    });  },  onTouchEnd() {    const { top, windowHeight, elementHeight } = this.data;    // 计算与顶部和底部边界的距离    const distanceTop = top;    const moveHeight = top + elementHeight    // 判断元素与顶部和底部的距离,选择最近的边界    if (distanceTop < this.data.maxTop) {      this.setData({ top: this.data.maxTop }, () => {        app.globalData.sectionBoxTop = this.data.maxTop      }); // 吸附到顶部    } else if (moveHeight >= windowHeight) {      this.setData({ top: windowHeight - elementHeight }, () => {        app.globalData.sectionBoxTop = windowHeight - elementHeight      })    } else {      this.setData({ top }, () => {        app.globalData.sectionBoxTop = top      })    }  },  onScroll(e: { detail: any }) {    // console.log(e, 'any')    const scrollTop = e.detail.scrollTop || 0    if (scrollTop > 40) {      this.setData({        isShowOperation: true      })    } else {      this.setData({        isShowOperation: false      })    }  },  onShareAppMessage() {    return {      title: '音乐数字AI器乐工具',      path: '/pages/index/index',      imageUrl: 'https://oss.dayaedu.com/ktyq/1733311074676.png'    }  },  onShareTimeline() {    return {      title: '音乐数字AI器乐工具',      path: '/pages/index/index',      imageUrl: 'https://oss.dayaedu.com/ktyq/1733311074676.png'    }  }})
 |