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