// pages/orders/order-detail.ts import { api_executeOrder, api_executePayment, api_queryByParamName, api_userPaymentOrderUnpaid, api_getUserReceiveAddressPage, api_shopInstruments, api_userReceiveAddressRemove } from "../../api/login"; // 获取应用实例 const app = getApp() Page({ /** * 页面的初始数据 */ data: { popupShow: false, isAddressInfoTip: false, addressPopupShow: false, addressDelPopupShow: false, addressEditId: "", addressList: [] as any[], addressInfo: {} as any, selectedId: "", serviceShow: true, status: 'ing', statusList: { ing: { logo: './images/ing.png', title: '待付款', content: '为了确保您的订单顺利进行,请尽快完成支付' }, }, goodsInfo: {} as any, instrumentsInfo: {} as any, memberInfo: {} as any, instrumentsList: [] as any[], paymentType: null as any, // 支付类型 paymentChannel: null as any, }, /** * 生命周期函数--监听页面加载 */ onLoad(options: any) { this.queryPayType() if (options.orderInfo) { const goods = JSON.parse(decodeURIComponent(options.orderInfo)); const instrumentsInfo = JSON.parse(decodeURIComponent(options.instrumentsInfo)); const memberInfo = JSON.parse(decodeURIComponent(options.memberInfo)); console.log(goods, 'goods', instrumentsInfo, memberInfo) this.setData({ goodsInfo: goods, instrumentsInfo, memberInfo, status: goods.status }); } }, async onShow() { try { const instrumentsData = await api_shopInstruments({ appId: app.globalData.appId }) this.setData({ instrumentsList: instrumentsData?.data?.data || [] }) } catch { } this.setData({ serviceShow: true }) }, onHide() { this.setData({ serviceShow: false }) }, onCloseAddress() { this.setData({ addressPopupShow: false }) }, onSelectInstrumentsGoods(e: any) { const { dataset } = e.currentTarget let item = this.data.instrumentsList[dataset.index] if (item?.id === this.data.instrumentsInfo?.id) { item = {} } this.setData({ instrumentsInfo: item || {} }) }, onSelectAddress(e: any) { const { dataset } = e.currentTarget const item = dataset.item; this.setData({ addressInfo: { id: item.id, name: item.name, phoneNumber: item.phoneNumber, addressDes: item.provinceName + item.cityName + (item.regionName || "") + item.detailAddress }, addressPopupShow: false }) }, handleAddAddress() { this.setData({ addressEditId: "", popupShow: true }) }, onDel(e: any) { const { dataset } = e.currentTarget this.setData({ selectedId: dataset.id }) this.setData({ addressDelPopupShow: true }) }, onDialogClose() { this.setData({ addressDelPopupShow: false }) }, onEdit(e: any) { const { dataset } = e.currentTarget this.setData({ addressEditId: dataset.id, popupShow: true }) }, async onDialogOk() { try { const { data } = await api_userReceiveAddressRemove(this.data.selectedId) if (data.code === 200) { this.setData({ addressDelPopupShow: false }) const resData = await api_getUserReceiveAddressPage() const pageRows = resData?.data?.data?.rows || [] this.setData({ addressList: pageRows }) // 当删的是当前选中的 if (this.data.selectedId === this.data.addressInfo.id) { let item: any if (this.data.addressList.length) { item = this.data.addressList[0] } this.setData({ addressInfo: item ? { id: item.id, name: item.name, phoneNumber: item.phoneNumber, addressDes: item.provinceName + item.cityName + (item.regionName || "") + item.detailAddress } : {} }) } } } catch (e: any) { } }, async onAddressInfo() { this.setData({ isAddressInfoTip: false }) if (this.data.goodsInfo.orderNo) { return } try { const resData = await api_getUserReceiveAddressPage() const pageRows = resData?.data?.data?.rows || [] // 当有收货地址的时候跳转到收货地址选择列表页面,当没有收货地址的时候到添加收货地址 if (pageRows.length) { this.setData({ addressPopupShow: true, addressList: pageRows }) } else { this.setData({ addressEditId: "", popupShow: true }) } } catch (e) { console.log(e, 'e') } }, async onAddAddress(e: any) { if (this.data.addressPopupShow) { try { const resData = await api_getUserReceiveAddressPage() const pageRows = resData?.data?.data?.rows || [] this.setData({ addressList: pageRows }) if (this.data.addressEditId === this.data.addressInfo.id) { // 编辑 完了刷新数据 const item = this.data.addressList.find(((item: any) => { return item.id === this.data.addressInfo.id })) this.setData({ addressInfo: item ? { id: item.id, name: item.name, phoneNumber: item.phoneNumber, addressDes: item.provinceName + item.cityName + (item.regionName || "") + item.detailAddress } : {} }) } } catch (e) { console.log(e, 'e') } return } const { addressInfo } = e.detail this.setData({ addressInfo }) }, // 获取后台配置的支付方式 async queryPayType() { try { // wxlite_payment_service_provider const { data } = await api_queryByParamName({ paramName: app.globalData.appId }); if (data.code == 200) { const paramValue = data.data.paramValue ? JSON.parse(data.data.paramValue) : {} this.setData({ paymentType: paramValue.vendor, paymentChannel: paramValue.channel }); } } catch (error) { console.log(error, "error"); } }, onPayError(message?: string) { wx.hideLoading() wx.showToast({ title: message || '支付取消', icon: 'none' }) }, // 购买 async onSubmit() { // 有乐器必须填收货信息 if (this.data.instrumentsInfo.id && !this.data.addressInfo.id) { wx.showToast({ title: "请填写收货信息", icon: 'none' }) this.setData({ isAddressInfoTip: true }) return } console.log(this.data.addressInfo) wx.showLoading({ mask: true, title: "订单提交中...", }); // 清除上一个页面的弹窗 有弹窗的时候数据返回回去数据才会刷新 const pages = getCurrentPages(); const prevPage = pages[pages.length - 2]; prevPage.setData({ popupShow: false, memberInfo: {} }); try { const { salePrice, shopId, name, id, orderNo } = this.data.goodsInfo if (orderNo) { const { data } = await api_userPaymentOrderUnpaid({ orderNo: orderNo, paymentType: 'WECHAT_MINI' }) if (data.code === 200) { const { paymentConfig, paymentType, orderNo } = data.data.paymentConfig this.onExecutePay(paymentConfig, paymentType, orderNo) } else { this.onPayError() } } else { const goodsInfos = [{ "goodsId": id, "goodsNum": 1, "goodsType": "ACTIVATION_CODE", "paymentCashAmount": salePrice, "paymentCouponAmount": 0 }] // 乐器 if (this.data.instrumentsInfo.id) { goodsInfos.push({ "goodsId": this.data.instrumentsInfo.id, "goodsNum": 1, "goodsType": "INSTRUMENTS", "paymentCashAmount": this.data.instrumentsInfo.salePrice, "paymentCouponAmount": 0 }) } const { data } = await api_executeOrder({ "orderType": "WECHAT_MINI", "paymentType": this.data.paymentType, "paymentCashAmount": salePrice + (this.data.instrumentsInfo.salePrice || 0), "paymentCouponAmount": 0, "shopId": shopId, "openId": app.globalData.userInfo?.liteOpenid, goodsInfos, "orderName": name + (this.data.instrumentsInfo.name ? `+${this.data.instrumentsInfo.name}` : ""), "orderDesc": name + (this.data.instrumentsInfo.name ? `+${this.data.instrumentsInfo.name}` : ""), "receiveAddress": this.data.addressInfo.id || "", "userBeneficiaryId": this.data.memberInfo.id }) if (data.code === 200) { const { paymentConfig, paymentType, orderNo } = data.data this.onExecutePay(paymentConfig, paymentType, orderNo) } else if (data.code === 5435) { this.onPayError(data.message) setTimeout(() => { wx.navigateBack() }, 1000) }else { this.onPayError(data.message) } } } catch { wx.hideLoading() } }, async onExecutePay(paymentConfig: any, paymentType: string, orderNo: string) { wx.login({ success: async (wxres: any) => { const res = await api_executePayment({ merOrderNo: paymentConfig.merOrderNo, paymentChannel: this.data.paymentChannel || 'wx_lite', // 'wx_pub', // paymentType, userId: app.globalData.userInfo?.id, code: wxres.code, wxMiniAppId: app.globalData.appId // code: '011yjYkl289aye4q2zml24UEWT3yjYkn', // wxPubAppId: 'wxbde13f59d40cb4f2' }) wx.hideLoading() if (res.data.code === 200) { this.onPay(paymentType, res.data.data.reqParams, orderNo) } else if (res.data.code === 5435) { this.onPayError(res.data.message) setTimeout(() => { wx.navigateBack() }, 1000) }else { this.onPayError(res.data.message) } }, fail: () => { this.onPayError() } }) }, onPay(paymentType: string, paymentConfig: any, orderNo: string) { const isYeePay = paymentType.indexOf('yeepay') !== -1 const prePayInfo = isYeePay ? JSON.parse(paymentConfig.prePayTn) : paymentConfig?.expend ? JSON.parse(paymentConfig?.expend?.pay_info) : paymentConfig const that = this wx.requestPayment({ timeStamp: prePayInfo.timeStamp, nonceStr: prePayInfo.nonceStr, package: prePayInfo.package ? prePayInfo.package : prePayInfo.packageValue, paySign: prePayInfo.paySign, signType: prePayInfo.signType ? prePayInfo.signType : 'MD5', success() { wx.showToast({ title: '支付成功', icon: 'success' }); wx.redirectTo({ url: '/pages/orders/order-result?orderNo=' + orderNo }) }, fail(ressonInfo) { console.log('支付失败', ressonInfo) that.onPayError() const goodsInfo = that.data.goodsInfo goodsInfo.orderNo = orderNo that.setData({ goodsInfo }) wx.redirectTo({ url: '/pages/orders/order-result?orderNo=' + orderNo }) } }) }, /** * 用户点击右上角分享 */ onShareAppMessage() { return { title: ' 器乐数字ai助手', path: '/pages/index/index', imageUrl: 'https://oss.dayaedu.com/ktyq/1739929620914.png' } } })