From 4a6d17ab44a231b3e40b0eb2b2aeffa4b971341d Mon Sep 17 00:00:00 2001 From: fxy060608 Date: Tue, 28 Dec 2021 15:46:14 +0800 Subject: [PATCH] fix(mp-alipay): getPhoneNumber (#3116) --- packages/uni-mp-alipay/__tests__/vOn.spec.ts | 9 ++++++++- packages/uni-mp-alipay/dist/uni.compiler.js | 7 +++++-- packages/uni-mp-alipay/dist/uni.mp.esm.js | 8 ++++---- .../src/compiler/transforms/transformOpenType.ts | 11 ++++++----- .../uni-mp-alipay/src/runtime/parseAppOptions.ts | 12 ++++++------ 5 files changed, 29 insertions(+), 18 deletions(-) diff --git a/packages/uni-mp-alipay/__tests__/vOn.spec.ts b/packages/uni-mp-alipay/__tests__/vOn.spec.ts index 322d91482..1f0f5d02f 100644 --- a/packages/uni-mp-alipay/__tests__/vOn.spec.ts +++ b/packages/uni-mp-alipay/__tests__/vOn.spec.ts @@ -6,7 +6,14 @@ describe('mp-alipay: transform v-on', () => { ``, ``, `(_ctx, _cache) => { - return { a: _o($event => _ctx.$onAliGetAuthorize('getPhoneNumber', $event)), b: _o($event => _ctx.$onAliAuthError('getPhoneNumber', $event)) } + return { a: _o($event => _ctx.$onAliGetAuthorize(_ctx.getPhoneNumber, $event)), b: _o($event => _ctx.$onAliAuthError(_ctx.getPhoneNumber, $event)) } +}` + ) + assert( + ``, + ``, + `(_ctx, _cache) => { + return { a: _o($event => _ctx.$onAliGetAuthorize($event => { _ctx.getPhoneNumber($event); }, $event)), b: _o($event => _ctx.$onAliAuthError($event => { _ctx.getPhoneNumber($event); }, $event)) } }` ) }) diff --git a/packages/uni-mp-alipay/dist/uni.compiler.js b/packages/uni-mp-alipay/dist/uni.compiler.js index 4ce9ebd54..8d76bee7b 100644 --- a/packages/uni-mp-alipay/dist/uni.compiler.js +++ b/packages/uni-mp-alipay/dist/uni.compiler.js @@ -120,8 +120,11 @@ function transformOpenType(node) { return; } props.splice(getPhoneNumberPropIndex, 1); - props.push(uniCliShared.createOnDirectiveNode('getAuthorize', `$onAliGetAuthorize('${getPhoneNumberMethodName}',$event)`)); - props.push(uniCliShared.createOnDirectiveNode('error', `$onAliAuthError('${getPhoneNumberMethodName}',$event)`)); + const method = compilerCore.isSimpleIdentifier(getPhoneNumberMethodName) + ? getPhoneNumberMethodName + : `$event => { ${getPhoneNumberMethodName} }`; + props.push(uniCliShared.createOnDirectiveNode('getAuthorize', `$onAliGetAuthorize(${method},$event)`)); + props.push(uniCliShared.createOnDirectiveNode('error', `$onAliAuthError(${method},$event)`)); } const projectConfigFilename = 'mini.project.json'; diff --git a/packages/uni-mp-alipay/dist/uni.mp.esm.js b/packages/uni-mp-alipay/dist/uni.mp.esm.js index 436a55b41..db7991a03 100644 --- a/packages/uni-mp-alipay/dist/uni.mp.esm.js +++ b/packages/uni-mp-alipay/dist/uni.mp.esm.js @@ -628,8 +628,8 @@ function initCreatePluginApp(parseAppOptions) { function onAliAuthError(method, $event) { $event.type = 'getphonenumber'; $event.detail.errMsg = - 'getPhoneNumber:fail Error: ' + - $event.detail.errorMessage(this)[method]($event); + 'getPhoneNumber:fail Error: ' + $event.detail.errorMessage; + method($event); } function onAliGetAuthorize(method, $event) { my.getPhoneNumber({ @@ -639,12 +639,12 @@ function onAliGetAuthorize(method, $event) { $event.detail.errMsg = 'getPhoneNumber:ok'; $event.detail.encryptedData = response.response; $event.detail.sign = response.sign; - this[method]($event); + method($event); }, fail: (res) => { $event.type = 'getphonenumber'; $event.detail.errMsg = 'getPhoneNumber:fail Error: ' + JSON.stringify(res); - this[method]($event); + method($event); }, }); } diff --git a/packages/uni-mp-alipay/src/compiler/transforms/transformOpenType.ts b/packages/uni-mp-alipay/src/compiler/transforms/transformOpenType.ts index 44b31ad78..1fa4affe6 100644 --- a/packages/uni-mp-alipay/src/compiler/transforms/transformOpenType.ts +++ b/packages/uni-mp-alipay/src/compiler/transforms/transformOpenType.ts @@ -1,5 +1,6 @@ import { findProp, + isSimpleIdentifier, NodeTypes, RootNode, TemplateChildNode, @@ -49,16 +50,16 @@ export function transformOpenType(node: RootNode | TemplateChildNode) { return } props.splice(getPhoneNumberPropIndex, 1) + const method = isSimpleIdentifier(getPhoneNumberMethodName) + ? getPhoneNumberMethodName + : `$event => { ${getPhoneNumberMethodName} }` props.push( createOnDirectiveNode( 'getAuthorize', - `$onAliGetAuthorize('${getPhoneNumberMethodName}',$event)` + `$onAliGetAuthorize(${method},$event)` ) ) props.push( - createOnDirectiveNode( - 'error', - `$onAliAuthError('${getPhoneNumberMethodName}',$event)` - ) + createOnDirectiveNode('error', `$onAliAuthError(${method},$event)`) ) } diff --git a/packages/uni-mp-alipay/src/runtime/parseAppOptions.ts b/packages/uni-mp-alipay/src/runtime/parseAppOptions.ts index b1f873a5b..ae4123df9 100644 --- a/packages/uni-mp-alipay/src/runtime/parseAppOptions.ts +++ b/packages/uni-mp-alipay/src/runtime/parseAppOptions.ts @@ -4,18 +4,18 @@ import { MiniProgramAppOptions } from '@dcloudio/uni-mp-core' function onAliAuthError( this: ComponentPublicInstance, - method: string, + method: ($event: unknown) => void, $event: any ) { $event.type = 'getphonenumber' $event.detail.errMsg = - 'getPhoneNumber:fail Error: ' + - $event.detail.errorMessage(this as any)[method]($event) + 'getPhoneNumber:fail Error: ' + $event.detail.errorMessage + method($event) } function onAliGetAuthorize( this: ComponentPublicInstance, - method: string, + method: ($event: unknown) => void, $event: any ) { my.getPhoneNumber({ @@ -25,12 +25,12 @@ function onAliGetAuthorize( $event.detail.errMsg = 'getPhoneNumber:ok' $event.detail.encryptedData = response.response $event.detail.sign = response.sign - ;(this as any)[method]($event) + method($event) }, fail: (res) => { $event.type = 'getphonenumber' $event.detail.errMsg = 'getPhoneNumber:fail Error: ' + JSON.stringify(res) - ;(this as any)[method]($event) + method($event) }, }) } -- GitLab