diff --git a/package.json b/package.json index b569ad9e9918b85f2705bc5c1a32cb3f3a837a86..076c29b370eeee8effda063cd8d7ce0714b7e55b 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "node": ">=10.0.0" }, "devDependencies": { - "@dcloudio/types": "^2.5.17", + "@dcloudio/types": "^2.5.18", "@dcloudio/uni-api": "3.0.0-alpha-3040220220310001", "@dcloudio/uni-app": "3.0.0-alpha-3040220220310001", "@jest/types": "^27.0.2", diff --git a/packages/uni-api/src/protocols/plugin/share.ts b/packages/uni-api/src/protocols/plugin/share.ts index de64df275e6caeca23e9b31f6775d6367ee67e0b..a51904f1c7db1499fafa28bc9646005af6c3d592 100644 --- a/packages/uni-api/src/protocols/plugin/share.ts +++ b/packages/uni-api/src/protocols/plugin/share.ts @@ -10,7 +10,12 @@ const SCENE: Parameters[0]['scene'][] = [ export const SahreOptions: ApiOptions = { formatArgs: { scene(value, params) { - if (params.provider === 'weixin' && (!value || !SCENE.includes(value))) { + const { provider, openCustomerServiceChat } = params + if ( + provider === 'weixin' && + !openCustomerServiceChat && + (!value || !SCENE.includes(value)) + ) { return `分享到微信时,scene必须为以下其中一个:${SCENE.join('、')}` } }, @@ -39,6 +44,16 @@ export const SahreOptions: ApiOptions = { return '分享小程序时,miniProgram必填' } }, + corpid(value, params) { + if (params.openCustomerServiceChat && !value) { + return `使用打开客服功能时 corpid 必填` + } + }, + customerUrl(value, params) { + if (params.openCustomerServiceChat && !value) { + return `使用打开客服功能时 customerUrl 必填` + } + }, }, } export const ShareProtocols: ApiProtocol = { diff --git a/packages/uni-app-plus/src/service/api/plugin/oauth.ts b/packages/uni-app-plus/src/service/api/plugin/oauth.ts index fbc84bfe402813cfa3b48708e9f1043738503115..fde04421cdcff954cba89ec47ba3a7aee3eb4f4e 100644 --- a/packages/uni-app-plus/src/service/api/plugin/oauth.ts +++ b/packages/uni-app-plus/src/service/api/plugin/oauth.ts @@ -49,17 +49,17 @@ export const login = defineAsyncApi( (params, { resolve, reject }) => { const provider = params.provider || 'weixin' const errorCallback = warpPlusErrorCallback(reject) - const authOptions = - provider === 'apple' - ? { scope: 'email' } - : params.univerifyStyle - ? { - univerifyStyle: univerifyButtonsClickHandling( - params.univerifyStyle, - errorCallback - ), - } - : {} + const isAppleLogin = provider === 'apple' + const authOptions = isAppleLogin + ? { scope: 'email' } + : params.univerifyStyle + ? { + univerifyStyle: univerifyButtonsClickHandling( + params.univerifyStyle, + errorCallback + ), + } + : {} getService(provider) .then((service) => { @@ -76,9 +76,11 @@ export const login = defineAsyncApi( service.login( (res) => { const authResult = res.target.authResult + const appleInfo = res.target.appleInfo resolve({ code: authResult.code, authResult: authResult, + appleInfo, }) }, errorCallback, @@ -87,7 +89,7 @@ export const login = defineAsyncApi( } // 先注销再登录 // apple登录logout之后无法重新触发获取email,fullname;一键登录无logout - if (provider === 'apple' || provider === 'univerify') { + if (isAppleLogin || provider === 'univerify') { login() } else { service.logout(login, login) @@ -261,19 +263,19 @@ class UniverifyManager implements UniApp.UniverifyManager { eventName: string = 'api.univerifyButtonsClick' close() { - closeAuthView() + return closeAuthView() } login(options: UniApp.UniverifyLoginOptions) { - login(this._getOptions(options)) + return login(this._getOptions(options)) } getCheckBoxState(options: UniApp.GetCheckBoxStateOptions) { - getCheckBoxState(options) + return getCheckBoxState(options) } preLogin(options?: UniApp.CallBackOptions) { - preLogin(this._getOptions(options)) + return preLogin(this._getOptions(options)) } onButtonsClick(callback: UniApp.CallbackFunction) { diff --git a/packages/uni-app-plus/src/service/api/plugin/share.ts b/packages/uni-app-plus/src/service/api/plugin/share.ts index 665b6f6816819a7dac26650bdc5b2d2862ec13d9..0a6483635fbd2b9e09ca3042c66d5a395e998454 100644 --- a/packages/uni-app-plus/src/service/api/plugin/share.ts +++ b/packages/uni-app-plus/src/service/api/plugin/share.ts @@ -40,7 +40,7 @@ const TYPES = { }, } -const parseParams = (args: UniApp.ShareOptions): T | string => { +const parseParams = (args: UniApp.ShareOptions) => { args.type = args.type || 0 let { @@ -53,6 +53,9 @@ const parseParams = (args: UniApp.ShareOptions): T | string => { mediaUrl: media, scene, miniProgram, + openCustomerServiceChat, + corpid, + customerUrl: url, } = args if (typeof imageUrl === 'string' && imageUrl) { @@ -74,55 +77,66 @@ const parseParams = (args: UniApp.ShareOptions): T | string => { extra: { scene, }, + openCustomerServiceChat, + corpid, + url, } if (provider === 'weixin' && (type === 1 || type === 2)) { delete sendMsg.thumbs } - return sendMsg as unknown as T + return sendMsg } return '分享参数 type 不正确' } +type ParseParams = ReturnType const sendShareMsg = function ( service: PlusShareShareService, - params: Data, + params: Exclude, resolve: (args?: any) => void, reject: (errMsg: string, errRes?: any) => void, method = 'share' ) { const errorCallback = warpPlusErrorCallback(reject) - - service.send( - params, - () => { - resolve() - }, - errorCallback - ) + const serviceMethod = params.openCustomerServiceChat + ? 'openCustomerServiceChat' + : 'send' + try { + // @ts-expect-error openCustomerServiceChat + service[serviceMethod]( + params, + () => { + resolve() + }, + errorCallback + ) + } catch (error) { + errorCallback({ + message: `${params.provider} ${serviceMethod} 方法调用失败`, + }) + } } export const share = defineAsyncApi( API_SHREA, (params, { resolve, reject }) => { - const res = parseParams(params) + const parsedParams = parseParams(params) const errorCallback = warpPlusErrorCallback(reject) - if (typeof res === 'string') { - return reject(res) - } else { - params = res + if (typeof parsedParams === 'string') { + return reject(parsedParams) } plus.share.getServices((services) => { - const service = services.find(({ id }) => id === params.provider) + const service = services.find(({ id }) => id === parsedParams.provider) if (!service) { reject('service not found') } else { if (service.authenticated) { - sendShareMsg(service, params, resolve, reject) + sendShareMsg(service, parsedParams, resolve, reject) } else { service.authorize( - () => sendShareMsg(service, params, resolve, reject), + () => sendShareMsg(service, parsedParams, resolve, reject), errorCallback ) } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 58d0218fd0b844b0480ea7c06dbff9276272e1e7..71ff4fe31bba8ae6f1f7af1453791e0a9a2741ed 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,7 +4,7 @@ importers: .: specifiers: - '@dcloudio/types': ^2.5.17 + '@dcloudio/types': ^2.5.18 '@dcloudio/uni-api': 3.0.0-alpha-3040220220310001 '@dcloudio/uni-app': 3.0.0-alpha-3040220220310001 '@jest/types': ^27.0.2 @@ -51,7 +51,7 @@ importers: vue-router: ^4.0.13 yorkie: ^2.0.0 devDependencies: - '@dcloudio/types': 2.5.17 + '@dcloudio/types': 2.5.18 '@dcloudio/uni-api': link:packages/uni-api '@dcloudio/uni-app': link:packages/uni-app '@jest/types': 27.4.2 @@ -2480,8 +2480,8 @@ packages: lodash.once: 4.1.1 dev: true - /@dcloudio/types/2.5.17: - resolution: {integrity: sha512-PMxXWdFOAmDQUo7BNx19O4htfaztdOT7RuD5jTVm8/jFcUd/hkNJJXLcSLePqXZwyTjjirstLBhC3FU709Y+8Q==} + /@dcloudio/types/2.5.18: + resolution: {integrity: sha512-1EMwZsi5j9KHI5wdLwZJmUyo5b8HnG60CRqsqW5kcd3cgSrKtgL3EKCYUjmJw+3gd9G/4NeEkSx5pT5l+4rNXg==} dev: true /@dcloudio/uni-cli-i18n/2.0.0-alpha-33020211130001: