提交 5617c587 编写于 作者: fxy060608's avatar fxy060608

feat(mp-alipay): getPhoneNumber

上级 0677225f
...@@ -1829,6 +1829,33 @@ function parseApp (vm) { ...@@ -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, { return parseBaseApp(vm, {
mocks, mocks,
initRefs initRefs
......
...@@ -415,7 +415,8 @@ const todos = [ ...@@ -415,7 +415,8 @@ const todos = [
'stopBeaconDiscovery', 'stopBeaconDiscovery',
'hideShareMenu', 'hideShareMenu',
'onWindowResize', 'onWindowResize',
'offWindowResize' 'offWindowResize',
'vibrate'
]; ];
// 存在兼容性的 API 列表 // 存在兼容性的 API 列表
......
...@@ -428,7 +428,8 @@ const todos = [ ...@@ -428,7 +428,8 @@ const todos = [
'checkIsSoterEnrolledInDevice', 'checkIsSoterEnrolledInDevice',
'reportMonitor', 'reportMonitor',
'getLogManager', 'getLogManager',
'reportAnalytics' 'reportAnalytics',
'vibrate'
]; ];
const canIUses = [ const canIUses = [
'scanCode', 'scanCode',
......
...@@ -451,7 +451,8 @@ const todos = [ ...@@ -451,7 +451,8 @@ const todos = [
'onWindowResize', 'onWindowResize',
'offWindowResize', 'offWindowResize',
'compressImage', 'compressImage',
'createOffscreenCanvas' 'createOffscreenCanvas',
'vibrate'
]; ];
// 存在兼容性的 API 列表 // 存在兼容性的 API 列表
......
...@@ -387,7 +387,9 @@ var previewImage = { ...@@ -387,7 +387,9 @@ var previewImage = {
const protocols = { const protocols = {
previewImage previewImage
}; };
const todos = []; const todos = [
'vibrate'
];
const canIUses = []; const canIUses = [];
const CALLBACKS = ['success', 'fail', 'cancel', 'complete']; const CALLBACKS = ['success', 'fail', 'cancel', 'complete'];
......
...@@ -104,6 +104,13 @@ describe('mp:compiler-mp-alipay', () => { ...@@ -104,6 +104,13 @@ describe('mp:compiler-mp-alipay', () => {
) )
}) })
it('generate getPhoneNumber', () => {
assertCodegen(
'<button open-type="getPhoneNumber" @getphonenumber="getPhoneNumber">获取手机号</button>',
`<button open-type="getAuthorize" scope="phoneNumber" data-event-opts="{{[['getAuthorize',[['$onAliGetAuthorize',['getPhoneNumber','$event']]]],['error',[['$onAliAuthError',['getPhoneNumber','$event']]]]]}}" onGetAuthorize="__e" onError="__e">获取手机号</button>`
)
})
it('generate events with v-on directive', () => { it('generate events with v-on directive', () => {
assertCodegen( assertCodegen(
`<uni-list-item title="标题文字" note="描述信息" show-extra-icon="true" :extra-icon="{color: '#4cd964',size: '22',type: 'spinner'}"></uni-list-item>`, `<uni-list-item title="标题文字" note="描述信息" show-extra-icon="true" :extra-icon="{color: '#4cd964',size: '22',type: 'spinner'}"></uni-list-item>`,
......
const compiler = require('../lib') const compiler = require('../lib')
const res = compiler.compile( const res = compiler.compile(
` `
<view @/> <button open-type="getPhoneNumber" @getphonenumber="getPhoneNumber">获取手机号</button>
`, { `, {
resourcePath: '/User/fxy/Documents/test.wxml', resourcePath: '/User/fxy/Documents/test.wxml',
mp: { mp: {
......
...@@ -18,6 +18,8 @@ const generateTemplate = require('./template/generate') ...@@ -18,6 +18,8 @@ const generateTemplate = require('./template/generate')
const compilerModule = require('./module') const compilerModule = require('./module')
const compilerAlipayModule = require('./module-alipay')
const generateCodeFrame = require('./codeframe') const generateCodeFrame = require('./codeframe')
module.exports = { module.exports = {
...@@ -28,6 +30,10 @@ module.exports = { ...@@ -28,6 +30,10 @@ module.exports = {
(options.modules || (options.modules = [])).push(compilerModule) (options.modules || (options.modules = [])).push(compilerModule)
if (options.mp.platform === 'mp-alipay') {
options.modules.push(compilerAlipayModule)
}
const res = compile(source, Object.assign(options, { const res = compile(source, Object.assign(options, {
optimize: false optimize: false
})) }))
......
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)'
}
}
}
...@@ -25,6 +25,33 @@ export default function parseApp (vm) { ...@@ -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, { return parseBaseApp(vm, {
mocks, mocks,
initRefs initRefs
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册