diff --git a/packages/uni-mp-alipay/dist/index.js b/packages/uni-mp-alipay/dist/index.js index 5d7773bb09386d0d776c180c5f6ff35cfa6c7e61..7848bc284ba011d83cc15fd3a1f6bfb43fcbd7ff 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 85983e19ff288d3ecd20746dd3df63486df7dce6..dfc0744230a6b1b57484a0ae7a9895b135b6e956 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 83392cd3ba2a534a6484e5921f58130a91823ee8..c652f30d648a53f4b9793a00bc3c54bf4fba8898 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 7ae7d25891af30ec040608f130896e340c9a3f05..3b05a63eaa50026e142bfdf71a29a99960cbf9f8 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 8b524684e850bc2d34cf433168e8e20fb286af66..edf83377285768c3fecbc71fb0773ae133b185e8 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 269743aea3a09bc2a7cd9d8cc445d87eecbc7134..feb5ad4010b9210016a5a2deabb9b9577994e21d 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 7ead891078114e8cafa93cfb04a25e33fc90f5fb..196d2d80d38f916533a573f6ccd75541cb46aaf9 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 084a219726b34d494ef21c575b60330f2d483172..258685bc80f77c6dfd58206661edd56a7c9a88f3 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 0000000000000000000000000000000000000000..91cfdfab5af18761af19cf426ea872bf9d9cc614 --- /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 eae3496ea81e73ef9b695f814673be77147392b8..2b4d13f90b4e332d06c4ed6d473276129fcc4ac4 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