From 5617c587a959849aa296d39d59870b5c05060b5e Mon Sep 17 00:00:00 2001 From: fxy060608 Date: Wed, 28 Aug 2019 19:22:05 +0800 Subject: [PATCH] feat(mp-alipay): getPhoneNumber --- packages/uni-mp-alipay/dist/index.js | 29 ++++++- packages/uni-mp-baidu/dist/index.js | 3 +- packages/uni-mp-qq/dist/index.js | 3 +- packages/uni-mp-toutiao/dist/index.js | 3 +- packages/uni-mp-weixin/dist/index.js | 4 +- .../__tests__/compiler-mp-alipay.spec.js | 83 ++++++++++--------- .../uni-template-compiler/__tests__/demo.js | 3 +- packages/uni-template-compiler/lib/index.js | 6 ++ .../lib/module-alipay.js | 26 ++++++ .../mp-alipay/runtime/wrapper/app-parser.js | 29 ++++++- 10 files changed, 143 insertions(+), 46 deletions(-) create mode 100644 packages/uni-template-compiler/lib/module-alipay.js diff --git a/packages/uni-mp-alipay/dist/index.js b/packages/uni-mp-alipay/dist/index.js index 5d7773bb..7848bc28 100644 --- a/packages/uni-mp-alipay/dist/index.js +++ b/packages/uni-mp-alipay/dist/index.js @@ -1811,7 +1811,7 @@ const handleLink$1 = (function () { } })(); -function parseApp (vm) { +function parseApp (vm) { Object.defineProperty(Vue.prototype, '$slots', { get () { return this.$scope && this.$scope.props.$slots @@ -1829,6 +1829,33 @@ function parseApp (vm) { } }); + Vue.prototype.$onAliGetAuthorize = function onAliGetAuthorize (method, $event) { + my.getPhoneNumber({ + success: (res) => { + $event.type = 'getphonenumber'; + const response = JSON.parse(res.response).response; + if (response.code === '10000') { // success + $event.detail.errMsg = 'getPhoneNumber:ok'; + $event.detail.encryptedData = res.response; + } else { + $event.detail.errMsg = 'getPhoneNumber:fail Error: ' + res.response; + } + this[method]($event); + }, + fail: (res) => { + $event.type = 'getphonenumber'; + $event.detail.errMsg = 'getPhoneNumber:fail'; + this[method]($event); + } + }); + }; + + Vue.prototype.$onAliAuthError = function $onAliAuthError (method, $event) { + $event.type = 'getphonenumber'; + $event.detail.errMsg = 'getPhoneNumber:fail Error: ' + $event.detail.errorMessage; + this[method]($event); + }; + return parseBaseApp(vm, { mocks, initRefs diff --git a/packages/uni-mp-baidu/dist/index.js b/packages/uni-mp-baidu/dist/index.js index 85983e19..dfc07442 100644 --- a/packages/uni-mp-baidu/dist/index.js +++ b/packages/uni-mp-baidu/dist/index.js @@ -415,7 +415,8 @@ const todos = [ 'stopBeaconDiscovery', 'hideShareMenu', 'onWindowResize', - 'offWindowResize' + 'offWindowResize', + 'vibrate' ]; // 存在兼容性的 API 列表 diff --git a/packages/uni-mp-qq/dist/index.js b/packages/uni-mp-qq/dist/index.js index 83392cd3..c652f30d 100644 --- a/packages/uni-mp-qq/dist/index.js +++ b/packages/uni-mp-qq/dist/index.js @@ -428,7 +428,8 @@ const todos = [ 'checkIsSoterEnrolledInDevice', 'reportMonitor', 'getLogManager', - 'reportAnalytics' + 'reportAnalytics', + 'vibrate' ]; const canIUses = [ 'scanCode', diff --git a/packages/uni-mp-toutiao/dist/index.js b/packages/uni-mp-toutiao/dist/index.js index 7ae7d258..3b05a63e 100644 --- a/packages/uni-mp-toutiao/dist/index.js +++ b/packages/uni-mp-toutiao/dist/index.js @@ -451,7 +451,8 @@ const todos = [ 'onWindowResize', 'offWindowResize', 'compressImage', - 'createOffscreenCanvas' + 'createOffscreenCanvas', + 'vibrate' ]; // 存在兼容性的 API 列表 diff --git a/packages/uni-mp-weixin/dist/index.js b/packages/uni-mp-weixin/dist/index.js index 8b524684..edf83377 100644 --- a/packages/uni-mp-weixin/dist/index.js +++ b/packages/uni-mp-weixin/dist/index.js @@ -387,7 +387,9 @@ var previewImage = { const protocols = { previewImage }; -const todos = []; +const todos = [ + 'vibrate' +]; const canIUses = []; const CALLBACKS = ['success', 'fail', 'cancel', 'complete']; diff --git a/packages/uni-template-compiler/__tests__/compiler-mp-alipay.spec.js b/packages/uni-template-compiler/__tests__/compiler-mp-alipay.spec.js index 269743ae..feb5ad40 100644 --- a/packages/uni-template-compiler/__tests__/compiler-mp-alipay.spec.js +++ b/packages/uni-template-compiler/__tests__/compiler-mp-alipay.spec.js @@ -27,24 +27,24 @@ describe('mp:compiler-mp-alipay', () => { 'helloworldbye', `helloworldbye` ) - }) - it('generate ref', () => { - assertCodegen( - 'text', - `text` - ) - assertCodegen( - 'text123213', - `text123213` - ) - assertCodegen( - '', - `` - ) - assertCodegen( - '', - `` - ) + }) + it('generate ref', () => { + assertCodegen( + 'text', + `text` + ) + assertCodegen( + 'text123213', + `text123213` + ) + assertCodegen( + '', + `` + ) + assertCodegen( + '', + `` + ) }) it('generate default slot', () => { assertCodegen( @@ -104,6 +104,13 @@ describe('mp:compiler-mp-alipay', () => { ) }) + it('generate getPhoneNumber', () => { + assertCodegen( + '', + `` + ) + }) + it('generate events with v-on directive', () => { assertCodegen( ``, @@ -119,26 +126,26 @@ describe('mp:compiler-mp-alipay', () => { assertCodegen( `
`, `
` - ) - - assertCodegen( - ``, - `` - ) - - assertCodegen( - ``, - `` - ) - - assertCodegen( - ``, - `` - ) - - assertCodegen( - ``, - `` + ) + + assertCodegen( + ``, + `` + ) + + assertCodegen( + ``, + `` + ) + + assertCodegen( + ``, + `` + ) + + assertCodegen( + ``, + `` ) }) }) diff --git a/packages/uni-template-compiler/__tests__/demo.js b/packages/uni-template-compiler/__tests__/demo.js index 7ead8910..196d2d80 100644 --- a/packages/uni-template-compiler/__tests__/demo.js +++ b/packages/uni-template-compiler/__tests__/demo.js @@ -1,8 +1,7 @@ const compiler = require('../lib') - const res = compiler.compile( ` - + `, { resourcePath: '/User/fxy/Documents/test.wxml', mp: { diff --git a/packages/uni-template-compiler/lib/index.js b/packages/uni-template-compiler/lib/index.js index 084a2197..258685bc 100644 --- a/packages/uni-template-compiler/lib/index.js +++ b/packages/uni-template-compiler/lib/index.js @@ -18,6 +18,8 @@ const generateTemplate = require('./template/generate') const compilerModule = require('./module') +const compilerAlipayModule = require('./module-alipay') + const generateCodeFrame = require('./codeframe') module.exports = { @@ -28,6 +30,10 @@ module.exports = { (options.modules || (options.modules = [])).push(compilerModule) + if (options.mp.platform === 'mp-alipay') { + options.modules.push(compilerAlipayModule) + } + const res = compile(source, Object.assign(options, { optimize: false })) diff --git a/packages/uni-template-compiler/lib/module-alipay.js b/packages/uni-template-compiler/lib/module-alipay.js new file mode 100644 index 00000000..91cfdfab --- /dev/null +++ b/packages/uni-template-compiler/lib/module-alipay.js @@ -0,0 +1,26 @@ +module.exports = { + postTransformNode (el) { + const attrsMap = el.attrsMap + if (attrsMap['open-type'] !== 'getPhoneNumber') { + return + } + const getPhoneNumberValue = attrsMap['@getphonenumber'] || attrsMap['v-on:getphonenumber'] + if (!getPhoneNumberValue) { + return + } + + el.attrs.find(attr => attr.name === 'open-type').value = '"getAuthorize"' + el.attrs.push({ + name: 'scope', + value: '"phoneNumber"' + }) + + delete el.events['getphonenumber'] + el.events['getAuthorize'] = { + value: '$onAliGetAuthorize(\'' + getPhoneNumberValue + '\',$event)' + } + el.events['error'] = { + value: '$onAliAuthError(\'' + getPhoneNumberValue + '\',$event)' + } + } +} diff --git a/src/platforms/mp-alipay/runtime/wrapper/app-parser.js b/src/platforms/mp-alipay/runtime/wrapper/app-parser.js index eae3496e..2b4d13f9 100644 --- a/src/platforms/mp-alipay/runtime/wrapper/app-parser.js +++ b/src/platforms/mp-alipay/runtime/wrapper/app-parser.js @@ -7,7 +7,7 @@ import { initRefs } from './util' -export default function parseApp (vm) { +export default function parseApp (vm) { Object.defineProperty(Vue.prototype, '$slots', { get () { return this.$scope && this.$scope.props.$slots @@ -25,6 +25,33 @@ export default function parseApp (vm) { } }) + Vue.prototype.$onAliGetAuthorize = function onAliGetAuthorize (method, $event) { + my.getPhoneNumber({ + success: (res) => { + $event.type = 'getphonenumber' + const response = JSON.parse(res.response).response + if (response.code === '10000') { // success + $event.detail.errMsg = 'getPhoneNumber:ok' + $event.detail.encryptedData = res.response + } else { + $event.detail.errMsg = 'getPhoneNumber:fail Error: ' + res.response + } + this[method]($event) + }, + fail: (res) => { + $event.type = 'getphonenumber' + $event.detail.errMsg = 'getPhoneNumber:fail' + this[method]($event) + } + }) + } + + Vue.prototype.$onAliAuthError = function $onAliAuthError (method, $event) { + $event.type = 'getphonenumber' + $event.detail.errMsg = 'getPhoneNumber:fail Error: ' + $event.detail.errorMessage + this[method]($event) + } + return parseBaseApp(vm, { mocks, initRefs -- GitLab