From 5cb121819322e6c441ddd0cba2880db272c81609 Mon Sep 17 00:00:00 2001 From: zpc Date: Sat, 3 May 2025 15:37:20 +0800 Subject: [PATCH] =?UTF-8?q?=E5=85=BC=E5=AE=B9h5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/platform/BasePlatform.js | 84 +++++++++++--------- common/platform/H5Platform.js | 36 +++++++-- common/platform/MiniProgramPlatform.js | 40 ++++++++-- pages/other/choose_address.vue | 20 ++--- pages/sangdai/sangdai.vue | 101 ++----------------------- 5 files changed, 132 insertions(+), 149 deletions(-) diff --git a/common/platform/BasePlatform.js b/common/platform/BasePlatform.js index 71456ad..5886c54 100644 --- a/common/platform/BasePlatform.js +++ b/common/platform/BasePlatform.js @@ -3,44 +3,58 @@ * 定义所有端必须实现的方法 */ class BasePlatform { - constructor() { - if (new.target === BasePlatform) { - throw new Error('BasePlatform 是抽象类,不能直接实例化'); - } - this.code = ''; // 平台代码(WEB/MP/APP) - this.env = ''; // 运行环境标识 - } - - getPayData(url,data) { - throw new Error('子类必须实现 getPayData 方法'); + constructor() { + if (new.target === BasePlatform) { + throw new Error('BasePlatform 是抽象类,不能直接实例化'); + } + this.code = ''; // 平台代码(WEB/MP/APP) + this.env = ''; // 运行环境标识 } - /** - * 支付方法(子类必须实现) - * @param {number} amount - 支付金额(分) - * @param {string} orderId - 订单号 - */ - pay({ data }) { - throw new Error('子类必须实现 pay 方法'); - } + getPayData(url, data) { + throw new Error('子类必须实现 getPayData 方法'); + } + /** + * + */ + chooseAddress() { + return new Promise((resolve, reject) => { + throw new Error('子类必须实现 chooseAddress 方法'); + }); + } + /** + * 支付方法(子类必须实现) + * @param {number} amount - 支付金额(分) + * @param {string} orderId - 订单号 + */ + pay({ + data + }) { + throw new Error('子类必须实现 pay 方法'); + } - /** - * 分享方法(子类必须实现) - * @param {object} params - 分享参数 { title, desc, image, url } - */ - share({ title, desc, link, image }) { - throw new Error('子类必须实现 share 方法'); - } + /** + * 分享方法(子类必须实现) + * @param {object} params - 分享参数 { title, desc, image, url } + */ + share({ + title, + desc, + link, + image + }) { + throw new Error('子类必须实现 share 方法'); + } - /** - * 通用方法(所有端共用) - */ - getPlatformInfo() { - return { - code: this.code, - env: this.env, - ua: navigator?.userAgent || '' - }; - } + /** + * 通用方法(所有端共用) + */ + getPlatformInfo() { + return { + code: this.code, + env: this.env, + ua: navigator?.userAgent || '' + }; + } } export default BasePlatform; \ No newline at end of file diff --git a/common/platform/H5Platform.js b/common/platform/H5Platform.js index b448d8a..317ead6 100644 --- a/common/platform/H5Platform.js +++ b/common/platform/H5Platform.js @@ -7,15 +7,15 @@ class H5Platform extends BasePlatform { this.env = 'h5'; } getPayData(url, data) { - - data['quitUrl']=escape(window.location.href); - data['returnUrl']=escape(window.location.href); - console.log('处理数据',data); + + data['quitUrl'] = escape(window.location.href); + data['returnUrl'] = escape(window.location.href); + console.log('处理数据', data); return data; } pay({ data }) { console.log('支付1111'); - + return new Promise((resolve) => { console.log(data); // 创建一个临时div元素 @@ -44,5 +44,31 @@ class H5Platform extends BasePlatform { // 降级方案 alert(`请手动分享:${url}`); } + + /** + * 选择地址 + * @returns + */ + chooseAddress() { + return new Promise((resolve, reject) => { + uni.navigateTo({ + url: '/pages/other/choose_address', + events: { + // 为指定事件添加一个监听器,获取被打开页面传送到当前页面的数据 + acceptDataFromOpenedPage: function (data) { + console.log(data) + }, + someEvent: function (data) { + console.log(data) + } + + }, + success: function (res) { + // 通过eventChannel向被打开页面传送数据 + res.eventChannel.emit('acceptDataFromOpenerPage', { data: 'data from starter page' }) + } + }) + }); + } } export default H5Platform; \ No newline at end of file diff --git a/common/platform/MiniProgramPlatform.js b/common/platform/MiniProgramPlatform.js index 1fbb102..792fe06 100644 --- a/common/platform/MiniProgramPlatform.js +++ b/common/platform/MiniProgramPlatform.js @@ -11,7 +11,9 @@ class MiniProgramPlatform extends BasePlatform { getPayData(url, data) { return data; } - pay({ data }) { + pay({ + data + }) { return new Promise((resolve, reject) => { let provider = "weixin"; uni.requestPayment({ @@ -26,19 +28,20 @@ class MiniProgramPlatform extends BasePlatform { complete: res => { console.log('complete (res)', res) if (res.errMsg == 'requestPayment:fail cancel') { - this.toast({ + uni.showToast({ title: '取消支付', icon: 'none', duration: 500, success: () => { /* 取消订单 */ + resolve('cancel') } }) - resolve('cancel') + } if (res.errMsg == 'requestPayment:ok') { - this.toast({ + uni.showToast({ title: '支付成功', icon: 'success', duration: 500, @@ -52,13 +55,38 @@ class MiniProgramPlatform extends BasePlatform { }) } - share({ title, desc, image, url }) { + share({ + title, + desc, + image, + url + }) { wx.showShareMenu({ withShareTicket: true, menus: ['shareAppMessage', 'shareTimeline'] }); // 监听用户点击分享按钮 - wx.onShareAppMessage(() => ({ title, imageUrl: image })); + wx.onShareAppMessage(() => ({ + title, + imageUrl: image + })); + } + /** + * 选择地址 + * @returns + */ + chooseAddress() { + return new Promise((resolve, reject) => { + uni.chooseAddress({ + success: res => { + res.detailed_address = res.provinceName + res.cityName + res.countyName + res.detailInfo; + resolve(res) + }, + fail: err => { + reject(err) + } + }); + }); } } export default MiniProgramPlatform; \ No newline at end of file diff --git a/pages/other/choose_address.vue b/pages/other/choose_address.vue index 4e24f9f..4787438 100644 --- a/pages/other/choose_address.vue +++ b/pages/other/choose_address.vue @@ -17,17 +17,17 @@ onLoad() { this.load(); // 在test.vue页面,向起始页通过事件传递数据 - // const eventChannel = this.getOpenerEventChannel(); - // eventChannel.emit('acceptDataFromOpenedPage', { - // data: 'data from test page' - // }); - // eventChannel.emit('someEvent', { - // data: 'data from test page for someEvent' - // }); + const eventChannel = this.getOpenerEventChannel(); + eventChannel.emit('acceptDataFromOpenedPage', { + data: 'data from test page' + }); + eventChannel.emit('someEvent', { + data: 'data from test page for someEvent' + }); // // 监听acceptDataFromOpenerPage事件,获取上一页面通过eventChannel传送到当前页面的数据 - // eventChannel.on('acceptDataFromOpenerPage', function(data) { - // console.log(data) - // }) + eventChannel.on('acceptDataFromOpenerPage', function(data) { + console.log(data) + }) }, methods: { async load() { diff --git a/pages/sangdai/sangdai.vue b/pages/sangdai/sangdai.vue index 6aa9b7e..16d9a27 100644 --- a/pages/sangdai/sangdai.vue +++ b/pages/sangdai/sangdai.vue @@ -244,14 +244,11 @@ {{ addData.userName }} - {{ addData.telNumber }} - {{ addData.provinceName }}-{{ addData.cityName }}-{{ - addData.countyName - }}-{{ addData.detailInfo }} + {{ addData.detailed_address }} @@ -400,7 +397,6 @@ export default { // } ], subTabCur: 0, - addData: '', listData: [], total: 0, handelList: [], @@ -546,87 +542,12 @@ export default { chooseAdd() { this.canReload = false - - var that = this; - // #ifdef H5 - this.req({ - url: 'getAccessTokenOffiaccountSign', - data: { - // recovery_info: JSON.stringify(data) - url: location.href.split('#')[0] - }, - success: res => { - console.log(res); - if (res.status == 1) { - var _data = res.data; - wx.config({ - debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 - appId: _data.appId, - timestamp: _data.timestamp, - nonceStr: _data.noncestr, - signature: _data.signature, - jsApiList: [ - 'checkJsApi', - 'openAddress', - - ] - }); - wx.ready(function () { - wx.checkJsApi({ - jsApiList: [ - 'openAddress', - ], - success: function (res) { - // alert(res); - // console.log(res); - wx.openAddress({ - success: function (res) { - console.log(res); - that.addData = res; - // var userName = res.userName; // 收货人姓名 - // var postalCode = res.postalCode; // 邮编 - // var provinceName = res - // .provinceName; // 国标收货地址第一级地址(省) - // var cityName = res.cityName; // 国标收货地址第二级地址(市) - // var countryName = res - // .countryName; // 国标收货地址第三级地址(国家) - // var detailInfo = res.detailInfo; // 详细收货地址信息 - // var nationalCode = res.nationalCode; // 收货地址国家码 - // var telNumber = res.telNumber; // 收货人手机号码 - } - }); - } - }); - - - }); - wx.error(function (res) { - // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。 - console.log("出现错误", res); - }); - } - } - }) - // #endif - - // #ifdef MP-WEIXIN - uni.chooseAddress({ - success: res => { - console.log(res) - this.addData = res - }, - fail: error => { - console.log(error) - }, - complete: res => { - // console.log(123); - setTimeout(() => { - this.canReload = true - }, 500) - } - }) - // #endif - + this.$platform.chooseAddress().then(res => { + console.log(res); + + this.addData = res + this.canReload = true; + }); }, submitLock() { @@ -693,13 +614,7 @@ export default { type: this.subTab[this.subTabCur].id, name: this.addData.userName, mobile: this.addData.telNumber, - address: this.addData.provinceName + - this.addData.cityName + - this.addData.countyName + - this.addData.detailInfo, - // name: '张三', - // mobile: '13355852333', - // address: '收货地址收货地址', + address: this.addData.detailed_address, message: this.remark // ad_id: uni.getStorageSync('_ad_id') },