From e6c82d629fb3e82e30605406a537a366b004b764 Mon Sep 17 00:00:00 2001 From: meo <958484406@qq.com> Date: Sat, 25 Aug 2018 18:40:10 +0800 Subject: [PATCH] =?UTF-8?q?[=E9=A6=96=E9=A1=B5=E9=99=90=E6=97=B6=E6=8A=A2?= =?UTF-8?q?=E8=B4=AD=E5=88=97=E8=A1=A8=EF=BC=8C=E9=A6=96=E9=A1=B5=E4=BC=98?= =?UTF-8?q?=E6=83=A0=E5=88=B8=E5=88=97=E8=A1=A8][=E4=BF=AE=E6=94=B9]:?= =?UTF-8?q?=E9=99=90=E6=97=B6=E6=8A=A2=E8=B4=AD=E9=A1=B5=E9=9D=A2=E7=9A=84?= =?UTF-8?q?=E6=B8=B2=E6=9F=93=EF=BC=8C=E5=92=8C=E9=A6=96=E9=A1=B5=E5=88=97?= =?UTF-8?q?=E8=A1=A8=E6=8C=89=E9=92=AE=E6=A0=B7=E5=BC=8F=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/img/guoqi.jpg | Bin 0 -> 28991 bytes assets/img/guoqi.png | Bin 0 -> 35095 bytes components/coupons/index.js | 18 +- components/coupons/index.wxml | 26 +- components/coupons/index.wxss | 200 +- dist/tab/index.wxss | 2 +- pages/addPark/addPark.wxss | 2 +- pages/coupon/detail/index.js | 168 +- pages/coupon/detail/index.wxml | 4 +- pages/coupon/detail/index.wxss | 249 +-- pages/couponorder/detail/index.js | 6 +- pages/couponorder/detail/index.wxml | 3 +- pages/couponorder/index/index.js | 7 +- pages/couponorder/index/index.wxml | 30 +- pages/index/coupons/index.js | 74 +- pages/index/coupons/index.wxml | 6 +- pages/index/index.js | 51 +- pages/index/index.json | 12 +- pages/index/index.wxml | 4 +- pages/index/rushToBuy/index.js | 138 +- pages/index/rushToBuy/index.wxml | 9 +- pages/index/rushToBuy/index.wxss | 12 +- pages/user/index.js | 46 +- typings/wx.d.ts | 2705 +++++++++++++++++++++++++++ 24 files changed, 3276 insertions(+), 496 deletions(-) create mode 100644 assets/img/guoqi.jpg create mode 100644 assets/img/guoqi.png create mode 100644 typings/wx.d.ts diff --git a/assets/img/guoqi.jpg b/assets/img/guoqi.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ddbfc91ef4f43af4156fae62415fbe6a98c63f91 GIT binary patch literal 28991 zcmbTd2RK|^*DyScl7@&N5iJN2Vf4;OAqi2UCVHZUVMecGhBS$qAVi%cglMB1eMFle z2%?S>M(=%;!GGkw@8^Bq?|Po^`u~6L;heKq-TSPw&f0sgb2M-?4!WT3>u3)G-Me=U zbOQ80i0a0{0MmY>RkeCuW0if%ralg-D2r zLqN(`iHx?mw(Bjsr;d01-R%tgbqsC%VKxf3 zd{9+hWnV>K7grZM&&RyJF3xZdMPC)ZKg<<@^W$a+AMYO&PnZhdjbo|254H7pZz0_6 zcxA+-L~X<+BzR?I#U!LV3g6$I^6~Kz^N|umxH~{36ciMWc}Pl%0vMtmesIsnzM^ms{(m^!w)3!YcXai1 zM8J8EIX-@Z@bXmQ12p}s3ofqzV*4M*>faExwg2y^E-uFd@Q1C3r@r0)==&cTdl>q; z+ClW~JP=;)Hg*6y|1q(v;w^W($DRmxLj=P4pHb9%itt2uJVm(j-ZGHoy=vkJw?+7P z2>-#?)>ga+_walSx3Rl-TZIqcAm-?3t0*V0AtfWLA$vn!T2?|rUH+zmw3NJpq`H)} z#BDiQS;>EBZzF8HT?Z98{IZ#!EJcZ3V?pDrsp{&!uZ z|0}=0X>I?zE;9d>76K>(Ili&~cBB7k0<7ow^j~HRT>Q)M?cjj5y8~u@v!mB2F&raCVFdj6@wG*t9-v?qWjY5?@Fb`Xe$mKsb)MSm7VO-%)+rlq2xr#S(p zr=0W{3Cbmv$uOWb%&|G0xk&03+llCUfpG&H59!-i zR@V(>)Y+K<0aVm9)O07Q>8QZ8$3sO8W~R9;agO%JgU0|97P{bfp9;Hf>Pwyf#=koL z#66l-;MwO}Yen_lHb+CCGhl!LGng3!1s!Jno0|V$PZ{($=c#^yztZb5e&kY944V1- z=tVX9=h_SOzrg>0FFAsL{-qhSJGGeFov-u{89yrh3YvMySfJ2Huax>5_<2+;Q$1Ry z4@mv3l}rDSYhKMGm(eR|flSp0&ZW01XT-a5p?>@1((Ct#*IVV8XzYLH){1??< z4F3Z4)qeEJWz3?w!YlaUSS@h0wTUp5VFoR{PGK0FU8gh*TBH`M<68np{*+&)R{5=n zrPll@m`kl$$5khP3{n`O`n!T_ek%TVz#nGd$YUavpIm=er4i6E#otmCM!+e@EWQuW z7QSU`3g!hAqCRJBpg@)CL7niBCLrkELz=1}w*eZiAa&s1NA)3^fYIMxX3I3Br)g6$96dxpIxUDh&fd1arYP#~?j4^yi@d$KXl+}h<`5ec^^nDY+Ct6k z`>El&=O4~`P~*h;`{)e^*fgvyE>bzY<#MM!_kpz{m|a`}xRs1sK?~q)Ywi1|&j+pO zosA7TCIP2dE7q+5)}WX{6I)k!_oNpUJFkcbwV3s>5d@DGa9R80o)iw2|9*0dif{~J z1Ry7yt*y+1`VGK_7uXsZgFsZlhIQ>vFDzNx$51N`;v$Nf6v9UNzAtxhE$%qw4qRWsogd3*LPYw*=zXHYH3G-!eP9CaDZ z1x^r%F@xqU%WF1XMH&HG=M&=cAP^V$>&eE`>~GIeL%yGyq!FM2m;yLzkIo9vUts-y zLY)6A+ieC`s-m~D#^#kh0pwyrnfUxIku8dSaIjDXGC2mlE50(xJJLbv( zP6USY^GDfVbd`0Lyq+M?nNt~b0eTm&tJ%k@g}y!)u9h04-grWj*LZ^F%2|?$Lm+v~G#)MC6I>5QJiqi>bE=?&Eq)wFM)e0q%izaUh%Pd4*Dx)3Z1 z3ja(C=e>1I(Q!=SujUziPO|NHVcd#_Uz$2)~>>14coy#y-MvujaO6DOK0C)%hxPLPKUAc^?uIK?Oj1DmW zMFd*K#)(Ja-KFBZYGbV8T{k0C}NScJ=hJPGB|T zpMM64tKd|D(ogV5M(;lz3yONm=v@=E0vlk=4vNk_=?R(zrxYj`edkPjv|dtvEAg*R43ytI>nx7mf*ssE#XujkgBm5Vw!XRDwvr=-15v z`183Zzf#FJo<4W{U>$392e|t|b5z~nbo#rDZxwnL!9c@Dt`qc{;A~z+wH2U|3ot5r z-2z68H5ad9V36lNXbxNhzyLaM%0DgJQ~+t_0D#B!zqkQScaJGm>yAkQ%LI4;X4dic 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

hCKY%~W}XXSinD5Uo0-vQd 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 literal 0 HcmV?d00001 diff --git a/assets/img/guoqi.png b/assets/img/guoqi.png new file mode 100644 index 0000000000000000000000000000000000000000..c4f0fa9d8ade4e71203ba7ec6b113223bc0fa2e9 GIT binary patch literal 35095 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�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 IbxsLQ04o+h0{{R3 literal 0 HcmV?d00001 diff --git a/components/coupons/index.js b/components/coupons/index.js index 5e06e63..fa71a9a 100644 --- a/components/coupons/index.js +++ b/components/coupons/index.js @@ -4,24 +4,18 @@ Component({ * 组件的属性列表 */ properties: { + paramAtoB: String, data: { value: {}, - type: Object, - }, + type: Object + } }, /** * 组件的初始数据 */ - data: { - - }, + data: {}, methods: { - navigateTo(e){ - let { id } = e.currentTarget.dataset.date; - wx.navigateTo({ - url: `../../pages/coupon/detail/index?id=${id}`, - }) - } + } -}) +}); diff --git a/components/coupons/index.wxml b/components/coupons/index.wxml index 493b960..9c5e2e9 100644 --- a/components/coupons/index.wxml +++ b/components/coupons/index.wxml @@ -1,4 +1,5 @@ + @@ -6,21 +7,24 @@ {{data.title}} {{data.subTitle}} + + 满¥{{data.usePriceStr}}可用 + + + 仅限本店使用 + + + + ¥{{data.salePrice/100}} ¥{{data.price/100}} - - - - - 购买 + 领取 + 购买 - \ No newline at end of file + + + \ No newline at end of file diff --git a/components/coupons/index.wxss b/components/coupons/index.wxss index 1701bb8..216eb6b 100644 --- a/components/coupons/index.wxss +++ b/components/coupons/index.wxss @@ -1,101 +1,161 @@ @import "../../app.wxss"; .coupons { - flex-direction: row; - display: flex; - padding: 30rpx; - position: relative; - height: 184rpx; -} -.coupons-border{ - height: 1rpx; - /* width: 100%; */ - left: 30rpx; - right: 30rpx; - background: #F5F5F5; - position: absolute; - bottom: 0; + flex-direction: row; + display: flex; + padding: 30rpx; + position: relative; + height: 184rpx; +} +.coupons-border { + height: 1rpx; + /* width: 100%; */ + left: 30rpx; + right: 30rpx; + background: #f5f5f5; + position: absolute; + bottom: 0; } .coupons-img { - width: 248rpx; - height: 184rpx; - overflow: hidden; - border-radius: 10rpx; + width: 248rpx; + height: 184rpx; + overflow: hidden; + border-radius: 10rpx; } .coupons-img image { - width: 100%; - height: 100%; + width: 100%; + height: 100%; } .coupons-info { - padding-left: 20rpx; - /* padding-top: 10rpx; */ + padding-left: 20rpx; } .coupons-info-name { - font-size: 30rpx; - color: #000000; - letter-spacing: 0; - line-height: 42rpx; - font-weight: bold; + font-size: 30rpx; + color: #000000; + letter-spacing: 0; + line-height: 42rpx; + font-weight: bold; + margin-top: 10rpx; } -.coupons-info-price{ - padding:10rpx 0 15rpx; - height: 50rpx; +.coupons-info-price { + padding: 10rpx 0 15rpx; + height: 88rpx; } .coupons-info-price-p { - font-size: 36rpx; - color: #FF3434; - letter-spacing: 0.96rpx; - line-height: 50rpx; + display: block; + text-align: center; + font-size: 36rpx; + color: #ff3434; + line-height: 50rpx; } .coupons-info-price-o { - display: inline-block; - padding-left: 20rpx; - font-size: 20rpx; - color: #B4B4B4; - letter-spacing: 0.96rpx; - text-decoration: line-through; - line-height: 24rpx; + display: block; + text-align: center; + font-size: 26rpx; + color: #b4b4b4; + letter-spacing: 0.96rpx; + text-decoration: line-through; + line-height: 24rpx; } .coupons-info-distance { - font-size: 22rpx; - color: #C0C0C0; - letter-spacing: 0; - padding-bottom: 10rpx; - line-height: 30rpx; + font-size: 22rpx; + color: #c0c0c0; + letter-spacing: 0; + padding-bottom: 10rpx; + line-height: 30rpx; } .coupons-info-address { - font-size: 22rpx; - color: #585858; - letter-spacing: 0; - line-height: 30rpx; + font-size: 22rpx; + color: #585858; + letter-spacing: 0; + line-height: 30rpx; } .coupons-btn { - position: absolute; - bottom: 30rpx; - right: 30rpx; + position: absolute; + top: 40rpx; + right: 30rpx; } .coupons-btn-gm { - background: #00C0FF !important; - border-radius: 10rpx !important; - margin: 0 !important; - padding: 0 !important; - font-family: PingFangSC-Semibold; - font-size: 28rpx; - color: #FFFFFF !important; - letter-spacing: 0; - height: 50rpx !important; - width: 114rpx !important; - line-height: 50rpx !important; -} -.subtitle{ - font-size: 26rpx; - color: #666; - font-weight:100; -} \ No newline at end of file + background: #00c0ff !important; + border-radius: 10rpx !important; + margin: 0 !important; + padding: 0 !important; + font-family: PingFangSC-Semibold; + font-size: 28rpx; + color: #ffffff !important; + letter-spacing: 0; + height: 50rpx !important; + width: 114rpx !important; + line-height: 50rpx !important; +} +.subtitle { + font-size: 26rpx; + color: #666; + font-weight: 100; +} +.coupons-info-manjian { + color: #999; + font-size: 26rpx; + line-height: 34rpx; + font-weight: 100; +} + +/**上拉加载更多**/ +.userinfo { + display: flex; + flex-direction: column; + align-items: center; +} + +.userinfo-avatar { + width: 128rpx; + height: 128rpx; + margin: 20rpx; + border-radius: 50%; +} + +.userinfo-nickname { + color: #aaa; +} + +.usermotto { + margin-top: 200px; +} + +/**/ + +scroll-view { + width: 100%; +} + +.item { + width: 90%; + height: 300rpx; + margin: 20rpx auto; + background: brown; + overflow: hidden; +} + +.item .img { + width: 430rpx; + margin-right: 20rpx; + float: left; +} + +.title { + font-size: 30rpx; + display: block; + margin: 30rpx auto; +} + +.description { + font-size: 26rpx; + line-height: 15rpx; +} diff --git a/dist/tab/index.wxss b/dist/tab/index.wxss index a4e8e83..9fc8784 100644 --- a/dist/tab/index.wxss +++ b/dist/tab/index.wxss @@ -33,7 +33,7 @@ } .i-tabs-tab-title-current { - color: #00C0FF + color: #00C0FF; } .i-tabs-tab-scroll { diff --git a/pages/addPark/addPark.wxss b/pages/addPark/addPark.wxss index d5776bc..b1879a0 100644 --- a/pages/addPark/addPark.wxss +++ b/pages/addPark/addPark.wxss @@ -142,7 +142,7 @@ line-height: 80rpx; } .addpark-back{ - font-size: 25rpx; + font-size: 30rpx; color: #5aadfb; float: right; margin: 25rpx 25rpx; diff --git a/pages/coupon/detail/index.js b/pages/coupon/detail/index.js index 270a16f..bb42b5d 100644 --- a/pages/coupon/detail/index.js +++ b/pages/coupon/detail/index.js @@ -1,15 +1,17 @@ -var config = require('../../../config/config.js'); -var app = getApp() -const Http = require("../../../utils/HttpBasics") +var config = require("../../../config/config.js"); +var app = getApp(); +const Http = require("../../../utils/HttpBasics"); +const util = require("../../../utils/util"); Page({ data: { data: {}, couponId: null, - orderId: '' + orderId: "", + day: "", + hour: "", + minute: "" }, onLoad(options) { - console.log("00000000000000----------"); - console.log(options); let that = this; wx.showLoading({ title: "加载中..." @@ -25,6 +27,32 @@ Page({ } }).then(res => { console.log(res); + //当前时间与优惠券下架时间做计算 + var startTime = util.fmtDate(res.data.sendEndDate); + console.log(startTime); + var s1 = new Date(startTime.replace(/-/g, "/")); + var s2 = new Date(); + var runTime = parseInt((s1.getTime() - s2.getTime()) / 1000); + var year = Math.floor(runTime / 86400 / 365); + var runTime = runTime % (86400 * 365); + var month = Math.floor(runTime / 86400 / 30); + var runTime = runTime % (86400 * 30); + var day = Math.floor(runTime / 86400); + var runTime = runTime % 86400; + var hour = Math.floor(runTime / 3600); + var runTime = runTime % 3600; + var minute = Math.floor(runTime / 60); + var runTime = runTime % 60; + var second = runTime; + console.log(year, month, day, hour, minute, second); + that.setData({ + year: year, + month: month, + day: day, + hour: hour, + minute: minute + }); + console.log(that.data.day); wx.hideLoading(); that.setData({ data: res.data, @@ -39,119 +67,121 @@ Page({ payOrderUpdate: (orderId, payOrderId, status, reason) => { // 支付成功 Http.post({ - url: config.api.payOrderUpdate, - data: { - payOrderId: payOrderId, - orderId: orderId, - status: status, - reason: reason - } - }) + url: config.api.payOrderUpdate, + data: { + payOrderId: payOrderId, + orderId: orderId, + status: status, + reason: reason + } + }) .then(res => { console.log("payOrderUpdate then", res); wx.showToast({ - title: '购买成功', + title: "购买成功", duration: 2500 - }) - }).catch(err => { - console.log("payOrderUpdate catch", err); + }); }) + .catch(err => { + console.log("payOrderUpdate catch", err); + }); }, - payment: (res) => { + payment: res => { var that = this; - var payOrderId = '' + res.data.out_trade_no; + var payOrderId = "" + res.data.out_trade_no; wx.requestPayment({ timeStamp: res.timeStamp, nonceStr: res.nonceStr, package: res.package, - signType: 'MD5', + signType: "MD5", paySign: res.paySign, - 'success': (res) => { - that.payOrderUpdate(that.data.orderId, payOrderId, 1) // 支付成功 + success: res => { + that.payOrderUpdate(that.data.orderId, payOrderId, 1); // 支付成功 console.log(res); - console.log('支付成功'); + console.log("支付成功"); wx.showToast({ - title: '购买成功', + title: "购买成功", duration: 2500 - }) + }); wx.navigateBack({ delta: 2 - }) + }); }, - 'fail': (res) => { - that.payOrderUpdate(that.data.orderId, payOrderId, 2) // 支付失败 - console.log(res) - console.log('支付失败'); + fail: res => { + that.payOrderUpdate(that.data.orderId, payOrderId, 2); // 支付失败 + console.log(res); + console.log("支付失败"); return; }, - 'complete': (res) => { + complete: res => { console.log(res); - console.log('支付完成'); + console.log("支付完成"); var url = this.data.url; - console.log('get url', url) - if (res.errMsg == 'requestPayment:ok') { + console.log("get url", url); + if (res.errMsg == "requestPayment:ok") { wx.showModal({ - title: '提示', - content: '支付成功' + title: "提示", + content: "支付成功" }); if (url) { setTimeout(function() { wx.redirectTo({ - url: '/pages' + url + url: "/pages" + url }); - }, 2000) + }, 2000); } else { setTimeout(() => { - wx.navigateBack() - }, 2000) + wx.navigateBack(); + }, 2000); } } else { wx.showModal({ - title: '错误提示', + title: "错误提示", content: res.errMsg }); } return; } - }) + }); }, orderFunc() { var that = this; wx.showLoading({ - title: '加载中...', - }) + title: "加载中..." + }); Http.post({ - url: config.api.checkPhoneStatus, - data: {} - }) + url: config.api.checkPhoneStatus, + data: {} + }) .then(res => { return Http.post({ url: config.api.orderSave, data: { couponId: that.data.couponId } - }) - }).catch(err => { - console.log(err) + }); + }) + .catch(err => { + console.log(err); if (err.code == 11005) { // 用户手机未授权 wx.redirectTo({ - url: '../../getphoneInfo/index?couponId=' + that.data.couponId, - }) + url: "../../getphoneInfo/index?couponId=" + that.data.couponId + }); } if (err.code == 11006) { // 用户手机已加密 wx.redirectTo({ - url: '../../phoneinput/phoneinput?couponId=' + that.data.couponId, - }) + url: "../../phoneinput/phoneinput?couponId=" + that.data.couponId + }); } }) .then(res => { if (res != "undefined") { - const orderId = '' + res.data.id; + const orderId = "" + res.data.id; that.setData({ orderId: orderId - }) + }); if (res.data.payment > 0) { // 支付金额不为0 Http.post({ @@ -160,25 +190,27 @@ Page({ orderId: orderId } }).then(res => { - console.log(res) - var payOrderId = '' + res.data.out_trade_no; + console.log(res); + var payOrderId = "" + res.data.out_trade_no; wx.hideLoading(); //payment(res); - that.payOrderUpdate(that.data.orderId, payOrderId, 1) // 支付成功 - }) + that.payOrderUpdate(that.data.orderId, payOrderId, 1); // 支付成功 + }); } else { // 免费券 - that.payOrderUpdate(orderId, "0", 1) // 支付成功 + that + .payOrderUpdate(orderId, "0", 1) // 支付成功 .then(res => { wx.showToast({ title: "支付成功", duration: 3000 - }) - }) + }); + }); } } - }).catch(err => { - console.log(err) }) - }, -}) \ No newline at end of file + .catch(err => { + console.log(err); + }); + } +}); diff --git a/pages/coupon/detail/index.wxml b/pages/coupon/detail/index.wxml index 703d42c..5222995 100644 --- a/pages/coupon/detail/index.wxml +++ b/pages/coupon/detail/index.wxml @@ -6,7 +6,7 @@ {{data.title}}限购{{data.useLimitQuantity}}件 - 剩余时间:2天12小时25分钟 + 剩余时间:{{day}}天{{hour}}小时{{minute}}分钟 剩余件数:{{data.remainInventory}}件 @@ -47,6 +47,6 @@ - + \ No newline at end of file diff --git a/pages/coupon/detail/index.wxss b/pages/coupon/detail/index.wxss index 286898a..f3bb1e9 100644 --- a/pages/coupon/detail/index.wxss +++ b/pages/coupon/detail/index.wxss @@ -1,211 +1,214 @@ @import "../../../app.wxss"; + .coupons { - width: 100%; - height: 100vh; - background: #f6f6f6; - position: relative; - display: flex; - flex-direction: column; - overflow: hidden; -} -.coupons-body{ + width: 100%; + background: #f6f6f6; + position: relative; + overflow: hidden; + padding-bottom: 120rpx; +} + +.coupons-body { flex: 1; - overflow: auto; + /* overflow: auto; */ } + .banner { - width: 100%; - height: 465rpx; + width: 100%; + height: 465rpx; } .banner image { - width: 100%; - height: 100%; + width: 100%; + height: 100%; } .coupons_info { - width: 92%; - height: 186rpx; - display: flex; - justify-content: space-between; - padding: 0 4%; - background: #fff; + width: 92%; + height: 186rpx; + display: flex; + justify-content: space-between; + padding: 0 4%; + background: #fff; } .coupons_info view { - display: flex; - flex-direction: column; + display: flex; + flex-direction: column; } .coupons_info view:nth-child(1) text { - font-size: 30rpx; - margin-top: 3%; + font-size: 30rpx; + margin-top: 3%; } .coupons_info view:nth-child(1) text:nth-child(1) text { - color: #ff3434; - font-size: 24rpx; - border: 1px solid #ff3434; - border-radius: 6rpx; - margin-left: 2%; - padding: 0 5rpx; + color: #ff3434; + font-size: 24rpx; + border: 1px solid #ff3434; + border-radius: 6rpx; + margin-left: 2%; + padding: 0 5rpx; } .coupons_info view:nth-child(1) text:nth-child(2), .coupons_info view:nth-child(1) text:nth-child(3) { - color: #b8b8b8; - font-size: 24rpx; - margin-top: 4%; + color: #b8b8b8; + font-size: 24rpx; + margin-top: 4%; } .coupons_info view:nth-child(1) text:nth-child(2) text, .coupons_info view:nth-child(1) text:nth-child(3) text { - color: #ff3434; - font-size: 24rpx; + color: #ff3434; + font-size: 24rpx; } .coupons_info view:nth-child(2) text:nth-child(1) { - font-size: 36rpx; - color: #ff3434; - margin-top: 40rpx; - font-weight: bold; + font-size: 36rpx; + color: #ff3434; + margin-top: 40rpx; + font-weight: bold; } .coupons_info view:nth-child(2) text:nth-child(2) { - font-size: 24rpx; - color: #b4b4b4; - text-decoration: line-through; - padding-left: 10rpx; - padding-top: 4rpx; + font-size: 24rpx; + color: #b4b4b4; + text-decoration: line-through; + padding-left: 10rpx; + padding-top: 4rpx; } .posi { - width: 92%; - display: flex; - flex-direction: column; - padding: 0 4%; - background: #fff; - margin-top: 2%; + width: 92%; + display: flex; + flex-direction: column; + padding: 0 4%; + background: #fff; + margin-top: 2%; } .posi>view:nth-child(2) { - width: 100%; - height: 87rpx; - display: flex; - justify-content: space-between; - border-top: 1px solid #f6f6f6; - line-height: 87rpx; + width: 100%; + height: 87rpx; + display: flex; + justify-content: space-between; + border-top: 1px solid #f6f6f6; + line-height: 87rpx; } .posi>view:nth-child(2) text:nth-child(1) { - font-size: 30rpx; - color: #a9a9a9; + font-size: 30rpx; + color: #a9a9a9; } .posi>view:nth-child(2) text:nth-child(2) { - font-size: 30rpx; - color: #a9a9a9; + font-size: 30rpx; + color: #a9a9a9; } .posi_logo { - width: 100%; - height: 156rpx; - display: flex; - margin-top: 30rpx; + width: 100%; + height: 156rpx; + display: flex; + margin-top: 30rpx; } .posi_logo view:nth-child(1) { - width: 126rpx; - height: 126rpx; - border-radius: 50%; - overflow: hidden; - flex: 2; + width: 126rpx; + height: 126rpx; + border-radius: 50%; + overflow: hidden; + flex: 2; } .posi_logo view:nth-child(1) image { - width: 100%; - height: 100%; + width: 100%; + height: 100%; } .posi_logo view:nth-child(2) { - display: flex; - flex-direction: column; - flex: 8; - padding-top: 20rpx; - padding-left: 30rpx; + display: flex; + flex-direction: column; + flex: 8; + padding-top: 20rpx; + padding-left: 30rpx; } .posi_logo view:nth-child(2) text:nth-child(1) { - font-size: 30rpx; + font-size: 30rpx; } .posi_logo view:nth-child(2) text:nth-child(2) { - font-size: 24rpx; - color: #b8b8b8; - padding-top: 10rpx; + font-size: 24rpx; + color: #b8b8b8; + padding-top: 10rpx; } .notes { - margin-top: 2%; + margin-top: 2%; } .notes view:nth-child(1) { - width: 92%; - height: 87rpx; - padding: 0 4%; - line-height: 87rpx; - background: #fff; - border-bottom: 1rpx solid #f5f5f5; - border-top: 1rpx solid #f5f5f5; + width: 92%; + height: 87rpx; + padding: 0 4%; + line-height: 87rpx; + background: #fff; + border-bottom: 1rpx solid #f5f5f5; + border-top: 1rpx solid #f5f5f5; } .notes view:nth-child(1) text { - font-size: 30rpx; - font-weight: bold; + font-size: 30rpx; + font-weight: bold; } .notes view:nth-child(2) { - width: 92%; - height: 400rpx; - padding: 0 4%; - background: #fff; - border-bottom: 1rpx solid #f5f5f5; - display: flex; - flex-direction: column; - padding-top: 2%; + width: 92%; + height: 400rpx; + padding: 0 4%; + background: #fff; + border-bottom: 1rpx solid #f5f5f5; + display: flex; + flex-direction: column; + padding-top: 2%; } .notes view:nth-child(2)>text { - font-size: 28rpx; - color: #A9A9A9; - line-height: 56rpx; + font-size: 28rpx; + color: #a9a9a9; + line-height: 56rpx; } .spot { - width: 12rpx; - height: 12rpx; - display: inline-block; - background: #A9A9A9; - margin-right: 16rpx; - position: relative; - bottom: 4rpx; - border-radius: 50%; + width: 12rpx; + height: 12rpx; + display: inline-block; + background: #a9a9a9; + margin-right: 16rpx; + position: relative; + bottom: 4rpx; + border-radius: 50%; } .buy-view { - width: 100%; - padding: 10rpx; - /* position: fixed; */ - /* bottom: 0; */ - background: #fff; - box-sizing: border-box; + background: #fff; + position: fixed; + padding-top: 10rpx; + height:98rpx; + bottom: 0rpx; + left: 0; + right: 0; } .buy { - /* width: 100%; */ - height: 88rpx; - background: #00C0FF; - color: #fff; - font-size: 36rpx; - line-height: 88rpx; - border-radius: 0; -} \ No newline at end of file + background: #00c0ff; + height: 88rpx; + width: 98%; + margin: 0 auto; + color: #fff; + font-size: 36rpx; + line-height: 88rpx; + border-radius: 6rpx; +} diff --git a/pages/couponorder/detail/index.js b/pages/couponorder/detail/index.js index 045d674..a22ea5f 100644 --- a/pages/couponorder/detail/index.js +++ b/pages/couponorder/detail/index.js @@ -30,7 +30,7 @@ Page({ }).then(res => { console.log(res); that.setData({ - data: res.data.data + data: res.data }); that.setData({ expiredTime: util.fmtDate(that.data.data.expiredTime), @@ -44,9 +44,9 @@ Page({ phone: function() { let that = this; console.log(that.data); - if (that.data.data.merchantLinkPhone) { + if (that.data.merchantLinkPhone) { wx.makePhoneCall({ - phoneNumber: that.data.data.merchantLinkPhone //仅为示例,并非真实的电话号码 + phoneNumber: that.data.merchantLinkPhone //仅为示例,并非真实的电话号码 }); } } diff --git a/pages/couponorder/detail/index.wxml b/pages/couponorder/detail/index.wxml index a9e842c..7ea2bac 100644 --- a/pages/couponorder/detail/index.wxml +++ b/pages/couponorder/detail/index.wxml @@ -1,4 +1,3 @@ - @@ -23,7 +22,7 @@ - + diff --git a/pages/couponorder/index/index.js b/pages/couponorder/index/index.js index 5454db9..9f4fa0d 100644 --- a/pages/couponorder/index/index.js +++ b/pages/couponorder/index/index.js @@ -2,7 +2,6 @@ const format = require("../../../utils/util.js"); const config = require("../../../config/config.js"); const app = getApp(); const Http = require("../../../utils/HttpBasics"); -//1535126400000 Page({ data: { tabs: [ @@ -24,11 +23,11 @@ Page({ } ], list: [], - current: "", - current_scroll: "1" + current: "0", + current_scroll: "0" }, onLoad() { - this.getList(1, 1); + this.getList(0, 0); }, //点击跳转到券详情页面 diff --git a/pages/couponorder/index/index.wxml b/pages/couponorder/index/index.wxml index 6279fd5..b8c726b 100644 --- a/pages/couponorder/index/index.wxml +++ b/pages/couponorder/index/index.wxml @@ -4,29 +4,29 @@ + 没有优惠券哦 - - - - - - - {{item.title}} + + + - - 有效期至: - {{item.expiredTime}} + + + {{item.title}} + + + 有效期至: + {{item.expiredTime}} + + 立即使用 + 查看 - 立即使用 - 查看 - \ No newline at end of file diff --git a/pages/index/coupons/index.js b/pages/index/coupons/index.js index c3312ba..9aeb8e3 100644 --- a/pages/index/coupons/index.js +++ b/pages/index/coupons/index.js @@ -1,14 +1,13 @@ // pages/index/sw/index.js -let config = require('../../../config/config.js') -let Http = require('../../../utils/HttpBasics') -let app = getApp() +let config = require("../../../config/config.js"); +let Http = require("../../../utils/HttpBasics"); +let app = getApp(); +// 请求数据 Component({ /** * 组件的属性列表 */ - properties: { - - }, + properties: {}, /** * 组件的初始数据 @@ -16,34 +15,45 @@ Component({ data: { tabs: [], list: [], - current: '1', - current_scroll: '1', + current: "0", + current_scroll: "0", + pageNum: 1, // 设置加载的第几次,默认是第一次 + pageSize: 10, //返回数据的个数 + searchLoading: false, //"上拉加载"的变量,默认false,隐藏 + searchLoadingComplete: false //“没有数据”的变量,默认false,隐藏 }, - /** * 组件的方法列表 */ methods: { - handleChange({ - detail - }) { + handleChange({ detail }) { this.setData({ current: detail.key }); }, - - handleChangeScroll({ - detail - }) { + handleChangeScroll({ detail }) { this.setData({ current_scroll: detail.key }); }, + //滚动到底部触发事件 + searchScrollLower() { + // let that = this; + console.log("00000000"); + // if(that.data.searchLoading && !that.data.searchLoadingComplete){ + // that.setData({ + // searchPageNum: that.data.searchPageNum+1, + // isFromSearch: false + // }); + // that.fetchSearchList(); + // } + } }, + ready() { - var that = this - app.couponListCallback = token =>{ - Http.setToken(token) + var that = this; + app.couponListCallback = token => { + Http.setToken(token); // business获取 Http.get({ url: config.api.businessList, @@ -52,29 +62,29 @@ Component({ pageSize: 10, type: 1 } - }) - .then(res => { - console.log(res) - that.setData({ - tabs: res.data.list - }) - }) + }).then(res => { + console.log(res); + that.setData({ + tabs: res.data.list + }); + }); + // 券list获取 Http.get({ url: config.api.couponList, data: { pageNum: 1, - pageSize: 10 + pageSize: 20 } }).then(res => { console.log(res); that.setData({ list: res.data.list - }) - }) - } + }); + }); + }; if (app.globalData.token && app.globalData.token != null) { - app.couponListCallback(app.globalData.token) + app.couponListCallback(app.globalData.token); } } -}) \ No newline at end of file +}); diff --git a/pages/index/coupons/index.wxml b/pages/index/coupons/index.wxml index 10f8049..beb1c0a 100644 --- a/pages/index/coupons/index.wxml +++ b/pages/index/coupons/index.wxml @@ -2,7 +2,7 @@ - - - + + + \ No newline at end of file diff --git a/pages/index/index.js b/pages/index/index.js index 29f9fe7..a981cac 100644 --- a/pages/index/index.js +++ b/pages/index/index.js @@ -1,29 +1,27 @@ -const Http = require("../../utils/HttpBasics") +const Http = require("../../utils/HttpBasics"); //获取应用实例 -const app = getApp() +const app = getApp(); Page({ data: { market: app.globalData.market, imgUrls: [ - 'http://img02.tooopen.com/images/20150928/tooopen_sy_143912755726.jpg', - 'http://img06.tooopen.com/images/20160818/tooopen_sy_175866434296.jpg', - 'http://img06.tooopen.com/images/20160818/tooopen_sy_175833047715.jpg' + "http://img02.tooopen.com/images/20150928/tooopen_sy_143912755726.jpg", + "http://img06.tooopen.com/images/20160818/tooopen_sy_175866434296.jpg", + "http://img06.tooopen.com/images/20160818/tooopen_sy_175833047715.jpg" ], swiperCurrent: 0, scrollTop: 0 }, - swiperChange: function (e) { + swiperChange: function(e) { this.setData({ swiperCurrent: e.detail.current - }) + }); }, /** - * 生命周期函数--监听页面初次渲染完成 - */ - onReady: function () { - - }, - onLoad: function (options) { + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function() {}, + onLoad: function(options) { var that = this; if (app.globalData.token && app.globalData.token != null) { console.log("index ++ " + app.globalData.token); @@ -32,29 +30,30 @@ Page({ // 所以此处加入 callback 以防止这种情况 app.tokenCallback = token => { console.log("index + " + token); - } + }; } wx.showLoading({ - title: '加载中', - }) + title: "加载中" + }); var scene = decodeURIComponent(options.scene); var that = this; - setTimeout(function () { - wx.hideLoading() - }, 2200) + setTimeout(function() { + wx.hideLoading(); + }, 2200); }, + // 用户点击右上角分享 - onShareAppMessage: function () { + onShareAppMessage: function() { return { - title: '富茂链客', - desc: '分享个小程序,希望你喜欢', - success: function (res) { + title: "富茂链客", + desc: "分享个小程序,希望你喜欢", + success: function(res) { wx.showToast({ title: "分享成功", duration: 1000, icon: "success" - }) + }); } - } + }; } -}) +}); diff --git a/pages/index/index.json b/pages/index/index.json index d879c4e..ee618b4 100644 --- a/pages/index/index.json +++ b/pages/index/index.json @@ -1,13 +1,13 @@ { "usingComponents": { - "c-banner":"../../components/banner/index", - "c-rushToBuy":"./rushToBuy/index", - "c-coupons":"./coupons/index" - }, - "enablePullDownRefresh":false, + "c-banner": "../../components/banner/index", + "c-rushToBuy": "./rushToBuy/index", + "c-coupons": "./coupons/index" + }, + "enablePullDownRefresh": false, "navigationBarBackgroundColor": "#ffffff", "navigationBarTextStyle": "black", "navigationBarTitleText": "首页", "backgroundColor": "#eeeeee", "backgroundTextStyle": "light" -} \ No newline at end of file +} diff --git a/pages/index/index.wxml b/pages/index/index.wxml index 3e9ab84..4580098 100644 --- a/pages/index/index.wxml +++ b/pages/index/index.wxml @@ -1,9 +1,9 @@ - + diff --git a/pages/index/rushToBuy/index.js b/pages/index/rushToBuy/index.js index 62f492b..0875c64 100644 --- a/pages/index/rushToBuy/index.js +++ b/pages/index/rushToBuy/index.js @@ -1,75 +1,73 @@ // pages/index/sw/index.js -let config = require('../../../config/config.js') -let Http = require('../../../utils/HttpBasics') -const app = getApp() +let config = require("../../../config/config.js"); +let Http = require("../../../utils/HttpBasics"); +const app = getApp(); Component({ - /** - * 组件的属性列表 - */ - properties: { + /** + * 组件的属性列表 + */ + properties: {}, - }, + /** + * 组件的初始数据 + */ + data: { + list: [ + // { + // img: "http://img02.tooopen.com/images/20150928/tooopen_sy_143912755726.jpg", + // name: "海鲜焗饭", + // time: "2天12小时25分钟", + // oPrice: "59.00", + // pPrice: "1.00", + // }, + // { + // img: "http://img06.tooopen.com/images/20160818/tooopen_sy_175866434296.jpg", + // name: "海鲜焗饭", + // time: "2天12小时25分钟", + // oPrice: "59.00", + // pPrice: "1.00", + // }, + // { + // img: "http://img02.tooopen.com/images/20150928/tooopen_sy_143912755726.jpg", + // name: "海鲜焗饭", + // time: "2天12小时25分钟", + // oPrice: "59.00", + // pPrice: "1.00", + // }, + // { + // img: "http://img06.tooopen.com/images/20160818/tooopen_sy_175866434296.jpg", + // name: "海鲜焗饭", + // time: "2天12小时25分钟", + // oPrice: "59.00", + // pPrice: "1.00", + // }, + ] + }, - /** - * 组件的初始数据 - */ - data: { - list: [ - // { - // img: "http://img02.tooopen.com/images/20150928/tooopen_sy_143912755726.jpg", - // name: "海鲜焗饭", - // time: "2天12小时25分钟", - // oPrice: "59.00", - // pPrice: "1.00", - // }, - // { - // img: "http://img06.tooopen.com/images/20160818/tooopen_sy_175866434296.jpg", - // name: "海鲜焗饭", - // time: "2天12小时25分钟", - // oPrice: "59.00", - // pPrice: "1.00", - // }, - // { - // img: "http://img02.tooopen.com/images/20150928/tooopen_sy_143912755726.jpg", - // name: "海鲜焗饭", - // time: "2天12小时25分钟", - // oPrice: "59.00", - // pPrice: "1.00", - // }, - // { - // img: "http://img06.tooopen.com/images/20160818/tooopen_sy_175866434296.jpg", - // name: "海鲜焗饭", - // time: "2天12小时25分钟", - // oPrice: "59.00", - // pPrice: "1.00", - // }, - ] - }, - - /** - * 组件的方法列表 - */ - methods: { - }, - ready() { - app.couponChannelListCallback = token => { - console.log("couponChannelList init"); - Http.setToken(token); - Http.get({ - url: config.api.couponChannelList, - data: { - pageNum: 1, - pageSize: 10 - } - }).then(res => { - this.setData({ - list: res.data.list - }) - }) - } - if (app.globalData.token && app.globalData.token != null) { - console.log("couponChannelList init 1"); - app.couponChannelListCallback(app.globalData.token) + /** + * 组件的方法列表 + */ + methods: {}, + ready() { + app.couponChannelListCallback = token => { + console.log("couponChannelList init"); + Http.setToken(token); + Http.get({ + url: config.api.couponChannelList, + data: { + pageNum: 1, + pageSize: 10 } - } -}) \ No newline at end of file + }).then(res => { + console.log(res); + this.setData({ + list: res.data.list + }); + }); + }; + if (app.globalData.token && app.globalData.token != null) { + console.log("couponChannelList init 1"); + app.couponChannelListCallback(app.globalData.token); + } + } +}); diff --git a/pages/index/rushToBuy/index.wxml b/pages/index/rushToBuy/index.wxml index cb30d3c..e193931 100644 --- a/pages/index/rushToBuy/index.wxml +++ b/pages/index/rushToBuy/index.wxml @@ -3,13 +3,12 @@ - + - {{item.name}} - {{item.time}} + {{item.subTitle}} - ¥{{item.pPrice}} - ¥{{item.oPrice}} + ¥{{item.salePriceStr}} + ¥{{item.salePriceStr}} diff --git a/pages/index/rushToBuy/index.wxss b/pages/index/rushToBuy/index.wxss index 373cf35..1a01bd6 100644 --- a/pages/index/rushToBuy/index.wxss +++ b/pages/index/rushToBuy/index.wxss @@ -4,12 +4,11 @@ } .index-rushToBuy-title { - font-size: 36rpx; + font-size: 32rpx; color: #000000; letter-spacing: 0.75rpx; padding-top: 20rpx; padding-left: 30rpx; - padding-bottom: 30rpx } .index-scroll-view { @@ -41,7 +40,7 @@ } .index-scroll-view .commodity-info { - padding: 20rpx; + padding:5rpx 20rpx; overflow: hidden; } @@ -58,14 +57,9 @@ line-height: 42rpx; } -.index-scroll-view .commodity-info-price { - padding-top: 11rpx; -} - .index-scroll-view .commodity-info-price-p { - font-size: 36rpx; + font-size: 30rpx; color: #FF3434; - letter-spacing: 0.96rpx; } .index-scroll-view .commodity-info-price-o { display: inline-block; diff --git a/pages/user/index.js b/pages/user/index.js index f195a88..d978115 100644 --- a/pages/user/index.js +++ b/pages/user/index.js @@ -1,72 +1,56 @@ Page({ - /** * 页面的初始数据 */ data: { - user:{ - avatar:'http://img02.tooopen.com/images/20150928/tooopen_sy_143912755726.jpg' + user: { + avatar: + "http://img02.tooopen.com/images/20150928/tooopen_sy_143912755726.jpg" } }, - navigateTo(){ + navigateTo() { console.log("object"); wx.navigateTo({ - url: `../login/index`, - }) + url: `../login/index` + }); }, /** * 生命周期函数--监听页面加载 */ - onLoad: function (options) { - - }, + onLoad: function(options) {}, /** * 生命周期函数--监听页面初次渲染完成 */ - onReady: function () { - - }, + onReady: function() {}, /** * 生命周期函数--监听页面显示 */ - onShow: function () { - - }, + onShow: function() {}, /** * 生命周期函数--监听页面隐藏 */ - onHide: function () { - - }, + onHide: function() {}, /** * 生命周期函数--监听页面卸载 */ - onUnload: function () { - - }, + onUnload: function() {}, /** * 页面相关事件处理函数--监听用户下拉动作 */ - onPullDownRefresh: function () { - - }, + onPullDownRefresh: function() {}, /** * 页面上拉触底事件的处理函数 */ - onReachBottom: function () { - - }, + onReachBottom: function() {}, /** * 用户点击右上角分享 */ - onShareAppMessage: function () { - - } -}) \ No newline at end of file + onShareAppMessage: function() {} +}); diff --git a/typings/wx.d.ts b/typings/wx.d.ts new file mode 100644 index 0000000..a2ffc2b --- /dev/null +++ b/typings/wx.d.ts @@ -0,0 +1,2705 @@ +// generate time:2017-08-23 21:12:06 +// Type definitions for wx app +// Definitions by: hellopao + +/************************************************ +* * +* 微信小程序 API * +* * +************************************************/ + +interface IAnimation { + /** + * 透明度,参数范围 0~1 + */ + opacity(value: number): IAnimation; + /** + * 颜色值 + */ + backgroundColor(color: string): IAnimation; + /** + * 长度值,如果传入 Number 则默认使用 px,可传入其他自定义单位的长度值 + */ + width(length: number): IAnimation; + /** + * 长度值,如果传入 Number 则默认使用 px,可传入其他自定义单位的长度值 + */ + height(length: number): IAnimation; + /** + * 长度值,如果传入 Number 则默认使用 px,可传入其他自定义单位的长度值 + */ + top(length: number): IAnimation; + /** + * 长度值,如果传入 Number 则默认使用 px,可传入其他自定义单位的长度值 + */ + left(length: number): IAnimation; + /** + * 长度值,如果传入 Number 则默认使用 px,可传入其他自定义单位的长度值 + */ + bottom(length: number): IAnimation; + /** + * 长度值,如果传入 Number 则默认使用 px,可传入其他自定义单位的长度值 + */ + right(length: number): IAnimation; + /** + * deg的范围-180~180,从原点顺时针旋转一个deg角度 + */ + rotate(deg: number): IAnimation; + /** + * deg的范围-180~180,在X轴旋转一个deg角度 + */ + rotateX(deg: number): IAnimation; + /** + * deg的范围-180~180,在Y轴旋转一个deg角度 + */ + rotateY(deg: number): IAnimation; + /** + * deg的范围-180~180,在Z轴旋转一个deg角度 + */ + rotateZ(deg: number): IAnimation; + /** + * 同transform-function rotate3d + */ + rotate3d(x: number, y: number, z: number, deg: number): IAnimation; + /** + * 一个参数时,表示在X轴、Y轴同时缩放sx倍数;两个参数时表示在X轴缩放sx倍数,在Y轴缩放sy倍数 + */ + scale(sx: number, sy?: number): IAnimation; + /** + * 在X轴缩放sx倍数 + */ + scaleX(sx: number): IAnimation; + /** + * 在Y轴缩放sy倍数 + */ + scaleY(sy: number): IAnimation; + /** + * 在Z轴缩放sy倍数 + */ + scaleZ(sz: number): IAnimation; + /** + * 在X轴缩放sx倍数,在Y轴缩放sy倍数,在Z轴缩放sz倍数 + */ + scale3d(sx: number, sy: number, sz: number): IAnimation; + /** + * 一个参数时,表示在X轴偏移tx,单位px;两个参数时,表示在X轴偏移tx,在Y轴偏移ty,单位px。 + */ + translate(tx: number, ty?: number): IAnimation; + /** + * 在X轴偏移tx,单位px + */ + translateX(tx: number): IAnimation; + /** + * 在Y轴偏移tx,单位px + */ + translateY(tx: number): IAnimation; + /** + * 在Z轴偏移tx,单位px + */ + translateZ(tx: number): IAnimation; + /** + * 在X轴偏移tx,在Y轴偏移ty,在Z轴偏移tz,单位px + */ + translate3d(tx: number, ty: number, tz: number): IAnimation; + /** + * 参数范围-180~180;一个参数时,Y轴坐标不变,X轴坐标延顺时针倾斜ax度;两个参数时,分别在X轴倾斜ax度,在Y轴倾斜ay度 + */ + skew(ax: number, ay?: number): IAnimation; + /** + * 参数范围-180~180;Y轴坐标不变,X轴坐标延顺时针倾斜ax度 + */ + skewX(ax: number): IAnimation; + /** + * 参数范围-180~180;X轴坐标不变,Y轴坐标延顺时针倾斜ay度 + */ + skewY(ay: number): IAnimation; + /** + * 同transform-function matrix + */ + matrix(a, b, c, d, tx, ty): IAnimation; + /** + * 同transform-function matrix3d + */ + matrix3d(): IAnimation; +} + +interface ICanvasContext { + /** + * 设置填充色, 如果没有设置 fillStyle,默认颜色为 black。 + */ + setFillStyle(color: string): void; + /** + * 设置边框颜色, 如果没有设置 fillStyle,默认颜色为 black。 + */ + setStrokeStyle(color: string): void; + /** + * 设置阴影 + */ + setShadow(offsetX: number, offsetY: number, blur: number, color: string): void; + /** + * 创建一个线性的渐变颜色。需要使用 addColorStop() 来指定渐变点,至少要两个。 + */ + createLinearGradient(x0: number, y0: number, x1: number, y1: number): void; + /** + * 创建一个圆形的渐变颜色。 起点在圆心,终点在圆环。 需要使用 addColorStop() 来指定渐变点,至少要两个。 + */ + createCircularGradient(x: number, y: number, r: number): void; + /** + * 创建一个颜色的渐变点。小于最小 stop 的部分会按最小 stop 的 color 来渲染,大于最大 stop 的部分会按最大 stop 的 color 来渲染。需要使用 addColorStop() 来指定渐变点,至少要两个。 + */ + addColorStop(stop: number, color: string): void; + /** + * 设置线条端点的样式 + */ + setLineCap(lineCap: 'butt' | 'round' | 'square'): void; + /** + * 设置两线相交处的样式 + */ + setLineJoin(lineJoin: 'bevel' | 'round' | 'miter'): void; + /** + * 设置线条宽度 + */ + setLineWidth(lineWidth: number): void; + /** + * 设置最大倾斜 + */ + setMiterLimit(miterLimit: number): void; + /** + * 添加一个矩形路径到当前路径。 + */ + rect(x: number, y: number, width: number, height: number): void; + /** + * 填充一个矩形。用 setFillStyle() 设置矩形的填充色,如果没设置默认是黑色。 + */ + fillRect(x: number, y: number, width: number, height: number): void; + /** + * 一个矩形(非填充)。用 setFillStroke() 设置矩形线条的颜色,如果没设置默认是黑色。 + */ + strokeRect(x: number, y: number, width: number, height: number): void; + /** + * 在给定的矩形区域内,清除画布上的像素 + */ + clearRect(x: number, y: number, width: number, height: number): void; + /** + * 对当前路径进行填充 + */ + fill(): void; + /** + * 对当前路径进行描边 + */ + stroke(): void; + /** + * 开始一个路径 + */ + beginPath(): void; + /** + * 关闭一个路径 + */ + closePath(): void; + /** + * 把路径移动到画布中的指定点,但不创建线条。 + */ + moveTo(x: number, y: number): void; + /** + * 添加一个新点,然后在画布中创建从该点到最后指定点的线条。 + */ + lineTo(x: number, y: number): void; + /** + * 添加一个弧形路径到当前路径,顺时针绘制。 + */ + arc(x: number, y: number, radius: number, startAngle: number, sweepAngle: number): void; + /** + * 创建二次方贝塞尔曲线 + */ + quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): void; + /** + * 创建三次方贝塞尔曲线 + */ + bezierCurveTo(cpx1: number, cpy1: number, cpx2: number, cpy2: number, x: number, y: number): void; + /** + * 对横纵坐标进行缩放 + */ + scale(scaleWidth: number/**横坐标缩放的倍数1 = 100%,0.5 = 50%,2 = 200%,依次类 */, scaleHeight: number/** 纵坐标轴缩放的倍数1 = 100%,0.5 = 50%,2 = 200%,依次类 */): void; + /** + * 对坐标轴进行顺时针旋转 + */ + rotate(deg: number/**degrees * Math.PI/180;degrees范围为0~360;旋转角度,以弧度计 */): void; + /** + * 对坐标原点进行缩放 + */ + translate(x: number/**水平坐标平移量 */, y: number/**竖直坐标平移量 */): void; + /** + * 在画布上绘制被填充的文本 + */ + fillText(text: string, x: number, y: number): void; + /** + * 设置字体大小 + */ + setFontSize(fontSize: number): void; + /** + * 在画布上绘制图像 + */ + drawImage(imageResource: string, x: number, y: number, width: number, height: number): void; + /** + * 设置全局画笔透明度。 + */ + setGlobalAlpha(alpha: number): void; + /** + * 保存当前坐标轴的缩放、旋转、平移信息 + */ + save(): void; + /** + * 恢复之前保存过的坐标轴的缩放、旋转、平移信息 + */ + restore(): void; + /** + * 进行绘图 + */ + draw(): void; +} + +interface IAudioContext { + /** + * 播放 + */ + play: () => void; + /** + * 暂停 + */ + pause: () => void; + /** + * 跳转到指定位置,单位 s + */ + seek: (position: number) => void; +} + +interface IVideoContext { + /** + * 播放 + */ + play: () => void; + /** + * 暂停 + */ + pause: () => void; + /** + * 跳转到指定位置,单位 s + */ + seek: (position: number) => void; + /** + * 发送弹幕,danmu 包含两个属性 text, color。 + */ + sendDanmu: (danmu: {text: string; color: string;}) => void; +} + +interface IMapContext { + /** + * 获取当前地图中心的经纬度,返回的是 gcj02 坐标系,可以用于 wx.openLocation + */ + getCenterLocation: (obj: { + /** + * 接口调用成功的回调函数 ,res = { longitude: "经度", latitude: "纬度"} + */ + success?: (res: {longitude: string; latitude: string}) => void; + /** + * 接口调用失败的回调函数 + */ + fail?: () => void; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: () => void; + }) => void; + /** + * 将地图中心移动到当前定位点,需要配合map组件的show-location使用 + */ + moveToLocation: () => void; +} + +interface Application { + setData: (obj: any) => void; +} + +interface AppConstructor { + new (): Application; + (opts: { + /** + * 生命周期函数--监听小程序初始化 + */ + onLaunch?: () => void; + /** + * 生命周期函数--监听小程序显示 + */ + onShow?: () => void; + /** + * 生命周期函数--监听小程序隐藏 + */ + onHide?: () => void; + + [key: string]: any; + }): Application; +} + +declare var App: AppConstructor; +declare function getApp(): Application; + +declare function getCurrentPages(): Page[]; + +interface Page { + setData: (obj: any) => void; +} + +interface PageConstructor { + new (): Page; + (opts: { + /** + * 页面的初始数据 + */ + data?: any; + /** + * 页面的初始数据 + */ + onLoad?: () => void; + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady?: () => void; + /** + * 生命周期函数--监听页面显示 + */ + onShow?: () => void; + /** + * 生命周期函数--监听页面隐藏 + */ + onHide?: () => void; + /** + * 生命周期函数--监听页面卸载 + */ + onUnload?: () => void; + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefreash?: () => void; + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom?: () => void; + /** + * 用户点击右上角分享 + */ + onShareAppMessage?: () => { + /** + * 分享标题, 默认值当前小程序名称 + */ + title: string; + /** + * 分享描述, 默认值当前小程序名称 + */ + desc: string; + /** + * 分享路径 默认值当前页面 path ,必须是以 / 开头的完整路径 + */ + path: string; + }; + + [key: string]: any; + }): Page; +} + +declare var Page: PageConstructor; + +declare var wx: { + // # 网络 # + + request(obj: { + /** + * 开发者服务器接口地址 + */ + url: string; + /** + * 请求的参数 + */ + data?: any | string; + /** + * 设置请求的 header , header 中不能设置 Referer + */ + header?: any; + /** + * 默认为 GET,有效值:OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT + */ + method?: string; + /** + * 默认为 json。如果设置了 dataType 为 json,则会尝试对响应的数据做一次 JSON.parse + */ + dataType?: string; + /** + * 收到开发者服务成功返回的回调函数,res = {data: '开发者服务器返回的内容'} + */ + success?: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + /** + * 将本地资源上传到开发者服务器。如页面通过 wx.chooseImage 等接口获取到一个本地资源的临时文件路径后,可通过此接口将本地资源上传到指定服务器。客户端发起一个 HTTPS POST 请求,其中 content-type 为 multipart/form-data 。 + */ + uploadFile(obj: { + /** + * 开发者服务器 url + */ + url: string; + /** + * 要上传文件资源的路径 + */ + filePath: string; + /** + * 文件对应的 key , 开发者在服务器端通过这个 key 可以获取到文件二进制内容 + */ + name: string; + /** + * HTTP 请求 Header , header 中不能设置 Referer + */ + header?: any; + /** + * HTTP 请求中其他额外的 form data + */ + formData?: any; + /** + * 接口调用成功的回调函数 + */ + success?: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + /** + * 下载文件资源到本地。客户端直接发起一个 HTTP GET 请求,返回文件的本地临时路径。 + */ + downloadFile(obj: { + /** + * 下载资源的 url + */ + url: string; + /** + * HTTP 请求 Header + */ + header?: any; + /** + * 下载成功后以 tempFilePath 的形式传给页面,res = {tempFilePath: '文件的临时路径'} + */ + success?: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + /** + * 创建一个 WebSocket 连接;一个微信小程序同时只能有一个 WebSocket 连接,如果当前已存在一个 WebSocket 连接,会自动关闭该连接,并重新创建一个 WebSocket 连接。 + */ + connectSocket(obj: { + /** + * 开发者服务器接口地址,必须是 wss 协议,且域名必须是后台配置的合法域名 + */ + url: string; + /** + * 请求的数据 + */ + data?: any; + /** + * HTTP Header , header 中不能设置 Referer + */ + header?: any; + /** + * 默认是GET,有效值: OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT + */ + method?: string; + /** + * 子协议数组 + */ + protocols?: string[]; + /** + * 接口调用成功的回调函数 + */ + success?: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + /** + * 监听WebSocket连接打开事件。 + */ + onSocketOpen(callback: Function): void; + + /** + * 监听WebSocket错误。 + */ + onSocketError(callback: Function): void; + + /** + * 通过 WebSocket 连接发送数据,需要先 wx.connectSocket,并在 wx.onSocketOpen 回调之后才能发送。 + */ + sendSocketMessage(obj: { + /** + * 需要发送的内容 + */ + data: undefined; + /** + * 接口调用成功的回调函数 + */ + success?: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + /** + * 监听WebSocket接受到服务器的消息事件。 + */ + onSocketMessage(callback: Function): void; + + /** + * 关闭WebSocket连接。 + */ + closeSocket(obj: { + /** + * 一个数字值表示关闭连接的状态号,表示连接被关闭的原因。如果这个参数没有被指定,默认的取值是1000 (表示正常连接关闭) + */ + code?: number; + /** + * 一个可读的字符串,表示连接被关闭的原因。这个字符串必须是不长于123字节的UTF-8 文本(不是字符) + */ + reason?: string; + /** + * 接口调用成功的回调函数 + */ + success?: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + /** + * 监听WebSocket关闭。 + */ + onSocketClose(callback: Function): void; + + // # 媒体 # + + /** + * 从本地相册选择图片或使用相机拍照。 + */ + chooseImage(obj: { + /** + * 最多可以选择的图片张数,默认9 + */ + count?: number; + /** + * original 原图,compressed 压缩图,默认二者都有 + */ + sizeType?: string[]; + /** + * album 从相册选图,camera 使用相机,默认二者都有 + */ + sourceType?: string[]; + /** + * 成功则返回图片的本地文件路径列表 tempFilePaths + */ + success: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + /** + * 预览图片。 + */ + previewImage(obj: { + /** + * 当前显示图片的链接,不填则默认为 urls 的第一张 + */ + current?: string; + /** + * 需要预览的图片链接列表 + */ + urls: string[]; + /** + * 接口调用成功的回调函数 + */ + success?: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + /** + * 获取图片信息 + */ + getImageInfo(obj: { + /** + * 图片的路径,可以是相对路径,临时文件路径,存储文件路径,网络图片路径 + */ + src: string; + /** + * 接口调用成功的回调函数 + */ + success?: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + saveImageToPhotosAlbum(obj: { + /** + * 图片文件路径,可以是临时文件路径也可以是永久文件路径,不支持网络图片路径 + */ + filePath: string; + /** + * 接口调用成功的回调函数 + */ + success?: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + /** + * 开始录音。当主动调用wx.stopRecord,或者录音超过1分钟时自动结束录音,返回录音文件的临时文件路径。当用户离开小程序时,此接口无法调用。 + */ + startRecord(obj: { + /** + * 录音成功后调用,返回录音文件的临时文件路径,res = {tempFilePath: '录音文件的临时路径'} + */ + success?: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + /** + * ​ 主动调用停止录音。 + */ + stopRecord(): void; + + /** + * 开始播放语音,同时只允许一个语音文件正在播放,如果前一个语音文件还没播放完,将中断前一个语音播放。 + */ + playVoice(obj: { + /** + * 需要播放的语音文件的文件路径 + */ + filePath: string; + /** + * 接口调用成功的回调函数 + */ + success?: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + /** + * 暂停正在播放的语音。再次调用wx.playVoice播放同一个文件时,会从暂停处开始播放。如果想从头开始播放,需要先调用 wx.stopVoice。 + */ + pauseVoice(): void; + + /** + * 结束播放语音。 + */ + stopVoice(): void; + + /** + * 获取后台音乐播放状态。 + */ + getBackgroundAudioPlayerState(obj: { + /** + * 接口调用成功的回调函数 + */ + success?: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + /** + * 使用后台播放器播放音乐,对于微信客户端来说,只能同时有一个后台音乐在播放。当用户离开小程序后,音乐将暂停播放;当用户点击“显示在聊天顶部”时,音乐不会暂停播放;当用户在其他小程序占用了音乐播放器,原有小程序内的音乐将停止播放。 + */ + playBackgroundAudio(obj: { + /** + * 音乐链接,目前支持的格式有 m4a, aac, mp3, wav + */ + dataUrl: string; + /** + * 音乐标题 + */ + title?: string; + /** + * 封面URL + */ + coverImgUrl?: string; + /** + * 接口调用成功的回调函数 + */ + success?: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + /** + * 暂停播放音乐。 + */ + pauseBackgroundAudio(): void; + + /** + * 控制音乐播放进度。 + */ + seekBackgroundAudio(obj: { + /** + * 音乐位置,单位:秒 + */ + position: number; + /** + * 接口调用成功的回调函数 + */ + success?: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + /** + * 停止播放音乐。 + */ + stopBackgroundAudio(): void; + + /** + * 监听音乐播放。 + */ + onBackgroundAudioPlay(callback: Function): void; + + /** + * 监听音乐暂停。 + */ + onBackgroundAudioPause(callback: Function): void; + + /** + * 监听音乐停止。 + */ + onBackgroundAudioStop(callback: Function): void; + + getBackgroundAudioManager(): void; + + /** + * 创建并返回 audio 上下文 audioContext 对象 + */ + createAudioContext(audioId: string): IAudioContext; + + /** + * 拍摄视频或从手机相册中选视频,返回视频的临时文件路径。 + */ + chooseVideo(obj: { + /** + * album 从相册选视频,camera 使用相机拍摄,默认为:['album', 'camera'] + */ + sourceType?: string[]; + /** + * 拍摄视频最长拍摄时间,单位秒。最长支持 60 秒 + */ + maxDuration?: number; + /** + * 默认调起的为前置还是后置摄像头。front: 前置,back: 后置,默认 back + */ + camera?: string; + /** + * 接口调用成功,返回视频文件的临时文件路径,详见返回参数说明 + */ + success?: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + saveVideoToPhotosAlbum(obj: { + /** + * 视频文件路径,可以是临时文件路径也可以是永久文件路径 + */ + filePath: string; + /** + * 接口调用成功的回调函数 + */ + success?: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + /** + * 创建并返回 video 上下文 videoContext 对象 + */ + createVideoContext(videoId: string): IVideoContext; + + // # 文件 # + + /** + * 保存文件到本地。 + */ + saveFile(obj: { + /** + * 需要保存的文件的临时路径 + */ + tempFilePath: string; + /** + * 返回文件的保存路径,res = {savedFilePath: '文件的保存路径'} + */ + success?: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + /** + * 获取本地已保存的文件列表 + */ + getSavedFileList(obj: { + /** + * 接口调用成功的回调函数,返回结果见success返回参数说明 + */ + success?: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + /** + * 获取本地文件的文件信息。此接口只能用于获取已保存到本地的文件,若需要获取临时文件信息,请使用 wx.getFileInfo 接口。 + */ + getSavedFileInfo(obj: { + /** + * 文件路径 + */ + filePath: string; + /** + * 接口调用成功的回调函数,返回结果见success返回参数说明 + */ + success?: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + /** + * 删除本地存储的文件 + */ + removeSavedFile(obj: { + /** + * 需要删除的文件路径 + */ + filePath: string; + /** + * 接口调用成功的回调函数 + */ + success?: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + /** + * 新开页面打开文档,支持格式:doc, xls, ppt, pdf, docx, xlsx, pptx + */ + openDocument(obj: { + /** + * 文件路径,可通过 downFile 获得 + */ + filePath: string; + /** + * 文件类型,指定文件类型打开文件,有效值 doc, xls, ppt, pdf, docx, xlsx, pptx + */ + fileType?: string; + /** + * 接口调用成功的回调函数 + */ + success?: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + getFileInfo(obj: { + /** + * 本地文件路径 + */ + filePath: string; + /** + * 计算文件摘要的算法,默认值 md5,有效值:md5,sha1 + */ + digestAlgorithm?: string; + /** + * 接口调用成功的回调函数 + */ + success?: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + // # 数据缓存 # + + /** + * 将数据存储在本地缓存中指定的 key 中,会覆盖掉原来该 key 对应的内容,这是一个异步接口。 + */ + setStorage(obj: { + /** + * 本地缓存中的指定的 key + */ + key: string; + /** + * 需要存储的内容 + */ + data: any; + /** + * 接口调用成功的回调函数 + */ + success?: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + /** + * 将 data 存储在本地缓存中指定的 key 中,会覆盖掉原来该 key 对应的内容,这是一个同步接口。 + */ + setStorageSync(key: string, data: any, ): void; + + /** + * 从本地缓存中异步获取指定 key 对应的内容。 + */ + getStorage(obj: { + /** + * 本地缓存中的指定的 key + */ + key: string; + /** + * 接口调用的回调函数,res = {data: key对应的内容} + */ + success: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + /** + * 从本地缓存中同步获取指定 key 对应的内容。 + */ + getStorageSync(key: string): void; + + /** + * 异步获取当前storage的相关信息 + */ + getStorageInfo(obj: { + /** + * 接口调用的回调函数,详见返回参数说明 + */ + success: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + /** + * 同步获取当前storage的相关信息 + */ + getStorageInfoSync(): void; + + /** + * 从本地缓存中异步移除指定 key 。 + */ + removeStorage(obj: { + /** + * 本地缓存中的指定的 key + */ + key: string; + /** + * 接口调用的回调函数 + */ + success: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + /** + * 从本地缓存中同步移除指定 key 。 + */ + removeStorageSync(key: string): void; + + /** + * 清理本地数据缓存。 + */ + clearStorage(): void; + + /** + * 同步清理本地数据缓存 + */ + clearStorageSync(): void; + + // # 位置 # + + /** + * 获取当前的地理位置、速度。当用户离开小程序后,此接口无法调用;当用户点击“显示在聊天顶部”时,此接口可继续调用。 + */ + getLocation(obj: { + /** + * 默认为 wgs84 返回 gps 坐标,gcj02 返回可用于wx.openLocation的坐标 + */ + type?: string; + /** + * 接口调用成功的回调函数,返回内容详见返回参数说明。 + */ + success: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + /** + * 打开地图选择位置 + */ + chooseLocation(obj: { + /** + * 接口调用成功的回调函数,返回内容详见返回参数说明。 + */ + success: Function; + /** + * 用户取消时调用 + */ + cancel?: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + /** + * ​ 使用微信内置地图查看位置 + */ + openLocation(obj: { + /** + * 纬度,范围为-90~90,负数表示南纬 + */ + latitude: number; + /** + * 经度,范围为-180~180,负数表示西经 + */ + longitude: number; + /** + * 缩放比例,范围5~18,默认为18 + */ + scale?: number; + /** + * 位置名 + */ + name?: string; + /** + * 地址的详细说明 + */ + address?: string; + /** + * 接口调用成功的回调函数 + */ + success?: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + /** + * 创建并返回 map 上下文 mapContext 对象 + */ + createMapContext(mapId: string): IMapContext; + + // # 设备 # + + /** + * 获取系统信息。 + */ + getSystemInfo(obj: { + /** + * 接口调用成功的回调 + */ + success: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + /** + * 获取系统信息同步接口 + */ + getSystemInfoSync(): void; + + /** + * 获取网络类型。 + */ + getNetworkType(obj: { + /** + * 接口调用成功,返回网络类型 networkType + */ + success: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + onNetworkStatusChange(callback: Function): void; + + setScreenBrightness(obj: { + /** + * 屏幕亮度值,范围 0~1,0 最暗,1 最亮 + */ + value: number; + /** + * 接口调用成功 + */ + success?: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + getScreenBrightness(obj: { + /** + * 接口调用成功 + */ + success?: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + vibrateLong(obj: { + /** + * 接口调用成功的回调函数 + */ + success?: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + vibrateShort(obj: { + /** + * 接口调用成功的回调函数 + */ + success?: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + /** + * 监听加速度数据,频率:5次/秒,接口调用后会自动开始监听,可使用 wx.stopAccelerometer 停止监听。 + */ + onAccelerometerChange(callback: Function): void; + + startAccelerometer(obj: { + /** + * 接口调用成功的回调函数 + */ + success?: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + stopAccelerometer(obj: { + /** + * 接口调用成功的回调函数 + */ + success?: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + /** + * 监听罗盘数据,频率:5次/秒,接口调用后会自动开始监听,可使用wx.stopCompass停止监听。 + */ + onCompassChange(callback: Function): void; + + startCompass(obj: { + /** + * 接口调用成功的回调函数 + */ + success?: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + stopCompass(obj: { + /** + * 接口调用成功的回调函数 + */ + success?: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + makePhoneCall(obj: { + /** + * 需要拨打的电话号码 + */ + phoneNumber: string; + /** + * 接口调用成功的回调 + */ + success?: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + /** + * 调起客户端扫码界面,扫码成功后返回对应的结果 + */ + scanCode(obj: { + /** + * 是否只能从相机扫码,不允许从相册选择图片 + */ + onlyFromCamera?: boolean; + /** + * 接口调用成功的回调函数,返回内容详见返回参数说明。 + */ + success?: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + setClipboardData(obj: { + /** + * 需要设置的内容 + */ + data: string; + /** + * 接口调用成功的回调函数 + */ + success?: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + getClipboardData(obj: { + /** + * 接口调用成功的回调函数 + */ + success?: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + openBluetoothAdapter(obj: { + /** + * 成功则返回成功初始化信息 + */ + success: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + closeBluetoothAdapter(obj: { + /** + * 成功则返回成功关闭模块信息 + */ + success: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + getBluetoothAdapterState(obj: { + /** + * 成功则返回本机蓝牙适配器状态 + */ + success: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + onBluetoothAdapterStateChange(callback: Function): void; + + startBluetoothDevicesDiscovery(obj: { + /** + * 蓝牙设备主 service 的 uuid 列表 + */ + services?: Array; + /** + * 是否允许重复上报同一设备, 如果允许重复上报,则onDeviceFound 方法会多次上报同一设备,但是 RSSI 值会有不同 + */ + allowDuplicatesKey?: boolean; + /** + * 上报设备的间隔,默认为0,意思是找到新设备立即上报,否则根据传入的间隔上报 + */ + interval?: number; + /** + * 成功则返回本机蓝牙适配器状态 + */ + success: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + stopBluetoothDevicesDiscovery(obj: { + /** + * 成功则返回本机蓝牙适配器状态 + */ + success: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + getBluetoothDevices(obj: { + /** + * 成功则返回本机蓝牙适配器状态 + */ + success: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + onBluetoothDeviceFound(callback: Function): void; + + getConnectedBluetoothDevices(obj: { + /** + * 蓝牙设备主 service 的 uuid 列表 + */ + services: Array; + /** + * 成功则返回本机蓝牙适配器状态 + */ + success: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + createBLEConnection(obj: { + /** + * 蓝牙设备 id,参考 getDevices 接口 + */ + deviceId: string; + /** + * 成功则返回本机蓝牙适配器状态 + */ + success: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + closeBLEConnection(obj: { + /** + * 蓝牙设备 id,参考 getDevices 接口 + */ + deviceId: string; + /** + * 成功则返回本机蓝牙适配器状态 + */ + success: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + getBLEDeviceServices(obj: { + /** + * 蓝牙设备 id,参考 getDevices 接口 + */ + deviceId: string; + /** + * 成功则返回本机蓝牙适配器状态 + */ + success: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + getBLEDeviceCharacteristics(obj: { + /** + * 蓝牙设备 id,参考 device 对象 + */ + deviceId: string; + /** + * 蓝牙服务 uuid + */ + serviceId: string; + /** + * 成功则返回本机蓝牙适配器状态 + */ + success: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + readBLECharacteristicValue(obj: { + /** + * 蓝牙设备 id,参考 device 对象 + */ + deviceId: string; + /** + * 蓝牙特征值对应服务的 uuid + */ + serviceId: string; + /** + * 蓝牙特征值的 uuid + */ + characteristicId: string; + /** + * 成功则返回本机蓝牙适配器状态 + */ + success: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + writeBLECharacteristicValue(obj: { + /** + * 蓝牙设备 id,参考 device 对象 + */ + deviceId: string; + /** + * 蓝牙特征值对应服务的 uuid + */ + serviceId: string; + /** + * 蓝牙特征值的 uuid + */ + characteristicId: string; + /** + * 蓝牙设备特征值对应的二进制值(注意:vConsole 无法打印出 ArrayBuffer 类型数据) + */ + value: undefined; + /** + * 成功则返回本机蓝牙适配器状态 + */ + success: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + notifyBLECharacteristicValueChange(obj: { + /** + * 蓝牙设备 id,参考 device 对象 + */ + deviceId: string; + /** + * 蓝牙特征值对应服务的 uuid + */ + serviceId: string; + /** + * 蓝牙特征值的 uuid + */ + characteristicId: string; + /** + * true: 启用 notify; false: 停用 notify + */ + state: boolean; + /** + * 成功则返回本机蓝牙适配器状态 + */ + success: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + onBLEConnectionStateChange(callback: Function): void; + + onBLECharacteristicValueChange(callback: Function): void; + + startBeaconDiscovery(obj: { + /** + * iBeacon设备广播的 uuids + */ + uuids: string[]; + /** + * 接口调用成功的回调函数 + */ + success?: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + stopBeaconDiscovery(obj: { + /** + * 接口调用成功的回调函数 + */ + success?: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + getBeacons(obj: { + /** + * 接口调用成功的回调函数 + */ + success?: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + onBeaconUpdate(callback: Function): void; + + onBeaconServiceChange(callback: Function): void; + + onUserCaptureScreen(callback: Function): void; + + addPhoneContact(obj: { + /** + * 头像本地文件路径 + */ + photoFilePath?: string; + /** + * 昵称 + */ + nickName?: string; + /** + * 姓氏 + */ + lastName?: string; + /** + * 中间名 + */ + middleName?: string; + /** + * 名字 + */ + firstName: string; + /** + * 备注 + */ + remark?: string; + /** + * 手机号 + */ + mobilePhoneNumber?: string; + /** + * 微信号 + */ + weChatNumber?: string; + /** + * 联系地址国家 + */ + addressCountry?: string; + /** + * 联系地址省份 + */ + addressState?: string; + /** + * 联系地址城市 + */ + addressCity?: string; + /** + * 联系地址街道 + */ + addressStreet?: string; + /** + * 联系地址邮政编码 + */ + addressPostalCode?: string; + /** + * 公司 + */ + organization?: string; + /** + * 职位 + */ + title?: string; + /** + * 工作传真 + */ + workFaxNumber?: string; + /** + * 工作电话 + */ + workPhoneNumber?: string; + /** + * 公司电话 + */ + hostNumber?: string; + /** + * 电子邮件 + */ + email?: string; + /** + * 网站 + */ + url?: string; + /** + * 工作地址国家 + */ + workAddressCountry?: string; + /** + * 工作地址省份 + */ + workAddressState?: string; + /** + * 工作地址城市 + */ + workAddressCity?: string; + /** + * 工作地址街道 + */ + workAddressStreet?: string; + /** + * 工作地址邮政编码 + */ + workAddressPostalCode?: string; + /** + * 住宅传真 + */ + homeFaxNumber?: string; + /** + * 住宅电话 + */ + homePhoneNumber?: string; + /** + * 住宅地址国家 + */ + homeAddressCountry?: string; + /** + * 住宅地址省份 + */ + homeAddressState?: string; + /** + * 住宅地址城市 + */ + homeAddressCity?: string; + /** + * 住宅地址街道 + */ + homeAddressStreet?: string; + /** + * 住宅地址邮政编码 + */ + homeAddressPostalCode?: string; + /** + * 接口调用成功 + */ + success?: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + // # 界面 # + + /** + * 显示消息提示框 + */ + showToast(obj: { + /** + * 提示的内容 + */ + title: string; + /** + * 图标,有效值 "success", "loading" + */ + icon?: string; + /** + * 自定义图标的本地路径,image 的优先级高于 icon + */ + image?: string; + /** + * 提示的延迟时间,单位毫秒,默认:1500 + */ + duration?: number; + /** + * 是否显示透明蒙层,防止触摸穿透,默认:false + */ + mask?: boolean; + /** + * 接口调用成功的回调函数 + */ + success?: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + showLoading(obj: { + /** + * 提示的内容 + */ + title: string; + /** + * 是否显示透明蒙层,防止触摸穿透,默认:false + */ + mask?: boolean; + /** + * 接口调用成功的回调函数 + */ + success?: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + /** + * 隐藏消息提示框 + */ + hideToast(): void; + + hideLoading(): void; + + /** + * ​显示模态弹窗 + */ + showModal(obj: { + /** + * 提示的标题 + */ + title: string; + /** + * 提示的内容 + */ + content: string; + /** + * 是否显示取消按钮,默认为 true + */ + showCancel?: boolean; + /** + * 取消按钮的文字,默认为"取消",最多 4 个字符 + */ + cancelText?: string; + /** + * 取消按钮的文字颜色,默认为"#000000" + */ + cancelColor?: undefined; + /** + * 确定按钮的文字,默认为"确定",最多 4 个字符 + */ + confirmText?: string; + /** + * 确定按钮的文字颜色,默认为"#3CC51F" + */ + confirmColor?: undefined; + /** + * 接口调用成功的回调函数 + */ + success?: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + /** + * ​显示操作菜单 + */ + showActionSheet(obj: { + /** + * 按钮的文字数组,数组长度最大为6个 + */ + itemList: undefined; + /** + * 按钮的文字颜色,默认为"#000000" + */ + itemColor?: undefined; + /** + * 接口调用成功的回调函数,详见返回参数说明 + */ + success?: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + setTopBarText(obj: { + /** + * 置顶栏文字内容 + */ + text: string; + /** + * 接口调用成功的回调函数 + */ + success?: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + /** + * 动态设置当前页面的标题。 + */ + setNavigationBarTitle(obj: { + /** + * 页面标题 + */ + title: string; + /** + * 接口调用成功的回调函数 + */ + success?: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + /** + * 在当前页面显示导航条加载动画。 + */ + showNavigationBarLoading(): void; + + /** + * 隐藏导航条加载动画。 + */ + hideNavigationBarLoading(): void; + + /** + * 保留当前页面,跳转到应用内的某个页面,使用wx.navigateBack可以返回到原页面。 + */ + navigateTo(obj: { + /** + * 需要跳转的应用内非 tabBar 的页面的路径 , 路径后可以带参数。参数与路径之间使用?分隔,参数键与参数值用=相连,不同参数用&分隔;如 'path?key=value&key2=value2' + */ + url: string; + /** + * 接口调用成功的回调函数 + */ + success?: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + /** + * 关闭当前页面,跳转到应用内的某个页面。 + */ + redirectTo(obj: { + /** + * 需要跳转的应用内非 tabBar 的页面的路径,路径后可以带参数。参数与路径之间使用?分隔,参数键与参数值用=相连,不同参数用&分隔;如 'path?key=value&key2=value2' + */ + url: string; + /** + * 接口调用成功的回调函数 + */ + success?: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + reLaunch(obj: { + /** + * 需要跳转的应用内页面路径 , 路径后可以带参数。参数与路径之间使用?分隔,参数键与参数值用=相连,不同参数用&分隔;如 'path?key=value&key2=value2',如果跳转的页面路径是 tabBar 页面则不能带参数 + */ + url: string; + /** + * 接口调用成功的回调函数 + */ + success?: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + /** + * 跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面 + */ + switchTab(obj: { + /** + * 需要跳转的 tabBar 页面的路径(需在 app.json 的 tabBar 字段定义的页面),路径后不能带参数 + */ + url: string; + /** + * 接口调用成功的回调函数 + */ + success?: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + /** + * 关闭当前页面,返回上一页面或多级页面。可通过 getCurrentPages()) 获取当前的页面栈,决定需要返回几层。 + */ + navigateBack(obj: { + /** + * 返回的页面数,如果 delta 大于现有页面数,则返回到首页。 + */ + delta?: number; + }): void; + + /** + * 创建一个动画实例animation。调用实例的方法来描述动画。最后通过动画实例的export方法导出动画数据传递给组件的animation属性。 + */ + createAnimation(obj: { + /** + * 400 + */ + duration?: number; + /** + * "linear" + */ + timingFunction?: string; + /** + * 0 + */ + delay?: number; + /** + * "50% 50% 0" + */ + transformOrigin?: string; + }): IAnimation; + + pageScrollTo(obj: { + /** + * 滚动到页面的目标位置(单位px) + */ + scrollTop: number; + }): void; + + /** + * 创建 canvas 绘图上下文(指定 canvasId).Tip: 需要指定 canvasId,该绘图上下文只作用于对应的 + */ + createCanvasContext(canvasId: string): ICanvasContext; + + /** + * 把当前画布的内容导出生成图片,并返回文件路径 + */ + canvasToTempFilePath(canvasId: string): void; + + startPullDownRefresh(obj: { + /** + * 接口调用成功的回调函数 + */ + success?: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + /** + * 停止当前页面下拉刷新。 + */ + stopPullDownRefresh(): void; + + // # WXML节点信息 # + + // # 第三方平台 # + + getExtConfig(obj: { + /** + * 返回第三方平台自定义的数据 + */ + success?: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + getExtConfigSync(): void; + + // # 开放接口 # + + /** + * 调用接口获取登录凭证(code)进而换取用户登录态信息,包括用户的唯一标识(openid) 及本次登录的 会话密钥(session_key)。用户数据的加解密通讯需要依赖会话密钥完成。 + */ + login(obj: { + /** + * 接口调用成功的回调函数 + */ + success?: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + /** + * 通过上述接口获得的用户登录态拥有一定的时效性。用户越久未使用小程序,用户登录态越有可能失效。反之如果用户一直在使用小程序,则用户登录态一直保持有效。具体时效逻辑由微信维护,对开发者透明。开发者只需要调用wx.checkSession接口检测当前用户登录态是否有效。登录态过期后开发者可以再调用wx.login获取新的用户登录态。 + */ + checkSession(obj: { + /** + * 接口调用成功的回调函数,登录态未过期 + */ + success?: Function; + /** + * 接口调用失败的回调函数,登录态已过期 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + authorize(obj: { + /** + * 需要获取权限的scope,详见 scope 列表 + */ + scope: string; + /** + * 接口调用成功的回调函数 + */ + success?: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + /** + * 获取用户信息,withCredentials 为 true 时需要先调用 wx.login 接口。 + */ + getUserInfo(obj: { + /** + * 是否带上登录态信息 + */ + withCredentials?: boolean; + /** + * 指定返回用户信息的语言,zh_CN 简体中文,zh_TW 繁体中文,en 英文 + */ + lang?: string; + /** + * 接口调用成功的回调函数 + */ + success?: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + /** + * 发起微信支付。 + */ + requestPayment(obj: { + /** + * 时间戳从1970年1月1日00:00:00至今的秒数,即当前的时间 + */ + timeStamp: string; + /** + * 随机字符串,长度为32个字符以下。 + */ + nonceStr: string; + /** + * 统一下单接口返回的 prepay_id 参数值,提交格式如:prepay_id=* + */ + package: string; + /** + * 签名算法,暂支持 MD5 + */ + signType: string; + /** + * 签名,具体签名方案参见小程序支付接口文档; + */ + paySign: string; + /** + * 接口调用成功的回调函数 + */ + success?: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + chooseAddress(obj: { + /** + * 返回用户选择的收货地址信息 + */ + success?: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + addCard(obj: { + /** + * 需要添加的卡券列表,列表内对象说明请参见请求对象说明 + */ + cardList: undefined; + /** + * 接口调用成功的回调函数 + */ + success?: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + openCard(obj: { + /** + * 需要打开的卡券列表,列表内参数详见openCard 请求对象说明 + */ + cardList: undefined; + /** + * 接口调用成功的回调函数 + */ + success?: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + openSetting(obj: { + /** + * 接口调用成功的回调函数,返回内容详见返回参数说明。 + */ + success?: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + getSetting(obj: { + /** + * 接口调用成功的回调函数,返回内容详见返回参数说明。 + */ + success?: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + getWeRunData(obj: { + /** + * 接口调用成功的回调函数 + */ + success?: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + navigateToMiniProgram(obj: { + /** + * 要打开的小程序 appId + */ + appId: string; + /** + * 打开的页面路径,如果为空则打开首页 + */ + path?: string; + /** + * 需要传递给目标小程序的数据,目标小程序可在 App.onLaunch(),App.onShow() 中获取到这份数据。详情 + */ + extraData?: any; + /** + * 要打开的小程序版本,有效值 develop(开发版),trial(体验版),release(正式版) ,仅在当前小程序为开发版或体验版时此参数有效;如果当前小程序是体验版或正式版,则打开的小程序必定是正式版。默认值 release + */ + envVersion?: string; + /** + * 接口调用成功的回调函数 + */ + success?: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + chooseInvoiceTitle(obj: { + /** + * 接口调用成功的回调函数 + */ + success?: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + checkIsSupportSoterAuthentication(obj: { + /** + * 接口调用成功的回调函数 + */ + success?: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + + // # 数据 # + + /** + * 自定义分析数据上报接口。使用前,需要在小程序管理后台自定义分析中新建事件,配置好事件名与字段。 + */ + reportAnalytics(eventName: string, data: string, ): void; + + // # 拓展接口 # + + arrayBufferToBase64(arrayBuffer: string): void; + + base64ToArrayBuffer(base64: string): void; + + // # 调试接口 # + + setEnableDebug(obj: { + /** + * 是否打开调试 + */ + enableDebug: boolean; + /** + * 接口调用成功的回调函数 + */ + success?: Function; + /** + * 接口调用失败的回调函数 + */ + fail?: Function; + /** + * 接口调用结束的回调函数(调用成功、失败都会执行) + */ + complete?: Function; + }): void; + +} \ No newline at end of file