提交 4e22bbe8 编写于 作者: M mahaifeng

[provider]新增 uni.getProviderSync、uni.getProviderObjectById 同步获取服务供应商信息 #5843

上级 82549387
<template> <template>
<!-- #ifdef APP --> <!-- #ifdef APP -->
<scroll-view class="page-scroll-view"> <scroll-view class="page-scroll-view">
<!-- #endif --> <!-- #endif -->
<view class="page"> <view class="page">
<page-head :title="title"></page-head> <page-head :title="title"></page-head>
<view class="service-item" v-for="(item, index) in serviceList" :key="index"> <view class="service-item" v-for="(item, index) in serviceList" :key="index">
<text class="service-name">{{item.name}}:</text> <text class="service-name">{{item.name}}:</text>
<view class="provider-list"> <view class="provider-list">
<!-- #ifdef APP-IOS --> <!-- #ifdef APP-IOS -->
<text class="provider-item" v-for="(item2, index2) in item.provider" :key="index2"> <text class="provider-item" v-for="(item2, index2) in item.provider" :key="index2">
{{item2}} {{item2}}
{{item.providerObjMap.length > 0 ? ':' + JSON.stringify(item.providerObjMap[index2]) : '' }} {{item.providerObjMap.length > 0 ? ':' + JSON.stringify(item.providerObjMap[index2]) : '' }}
</text> </text>
<!-- #endif --> <!-- #endif -->
<!-- #ifdef APP-ANDROID --> <!-- #ifdef APP-ANDROID -->
<text class="provider-item" v-for="(item2, index2) in item.provider" :key="index2"> <text class="provider-item" v-for="(item2, index2) in item.provider" :key="index2">
{{item2}} {{item2}}
{{item.providerObj.length > 0 ? ':' + JSON.stringify(item.providerObj[index2]) : '' }} {{item.providerObj.length > 0 ? ':' + JSON.stringify(item.providerObj[index2]) : '' }}
</text> </text>
<!-- #endif --> <!-- #endif -->
</view> </view>
</view> </view>
<button class="btn-get-provider" type="primary" @click="getProviderIds">getProviderIds</button> <button class="btn-get-provider" type="primary" @click="getProviderSync">getProviderSync</button>
<button class="btn-get-provider" type="primary" @click="getProviderObject">getProviderObject</button> <button class="btn-get-provider" type="primary" @click="getProvider">getProvider</button>
</view> <button class="btn-get-provider" type="primary"
<!-- #ifdef APP --> @click="getProviderObjectById">getProviderObjectById</button>
</scroll-view> </view>
<!-- #endif --> <!-- #ifdef APP -->
</scroll-view>
<!-- #endif -->
</template> </template>
<script> <script>
type ProviderItem = { type ProviderItem = {
service : string, service : string,
name : string, name : string,
provider : string[], provider : string[],
providerObj : UniProvider[], providerObj : UniProvider[],
providerObjMap : Object[], providerObjMap : Object[],
} }
export default { export default {
data() { data() {
return { return {
title: 'provider', title: 'provider',
flag: false, flag: false,
serviceList: [ serviceList: [
{ service: "oauth", name: "登陆", provider: [], providerObj: [], providerObjMap: [] }, { service: "payment", name: "支付", provider: [], providerObj: [], providerObjMap: [] },
{ service: "share", name: "分享", provider: [], providerObj: [], providerObjMap: [] }, { service: "location", name: "定位", provider: [], providerObj: [], providerObjMap: [] }
{ service: "payment", name: "支付", provider: [], providerObj: [], providerObjMap: [] }, ] as ProviderItem[],
{ service: "push", name: "推送", provider: [], providerObj: [], providerObjMap: [] }, providerObjList: [] as UniProvider[]
{ service: "location", name: "定位", provider: [], providerObj: [], providerObjMap: [] } }
] as ProviderItem[], },
providerObjList: [] as UniProvider[] methods: {
} getProviderSync() {
}, this.serviceList.forEach((item : ProviderItem) => {
methods: { let provider = uni.getProviderSync({
getProviderIds() { service: item.service
this.serviceList.forEach((item : ProviderItem) => { } as GetProviderOptions)
let providerIds = uni.getProviderIds({
service: item.service this.updateProvider(item.service, provider.providerIds);
}) })
this.updateProvider(item.service, providerIds); },
}) getProvider() {
}, this.serviceList.forEach((item : ProviderItem) => {
updateProvider(service : string, provider ?: string[] | null) { uni.getProvider({
const item : ProviderItem | null = this.serviceList.find((item : ProviderItem) : boolean => { service: item.service,
return item.service == service success: (e) => {
}); this.updateProvider(item.service, e.providerIds);
if (item != null && provider != null) { },
item.provider = provider fail: (e) => {
} console.log("获取provider失败:", e);
}, }
getProviderObject() { } as GetProviderOptions)
this.flag = true })
this.getProviderIds() },
let objList = [] updateProvider(service : string, provider ?: string[] | null) {
this.serviceList.forEach((value) => { const item : ProviderItem | null = this.serviceList.find((item : ProviderItem) : boolean => {
value.provider.forEach((provider) => { item.providerObj = []
let obj = uni.getProviderObject({ return item.service == service
service: value.service, });
provider: provider if (item != null && provider != null) {
}) item.provider = provider
if (obj != null) { }
console.log(obj)
console.log(JSON.stringify(obj)) },
value.providerObj.push(obj) getProviderObjectById() {
// #ifdef APP-ANDROID this.flag = true
if (obj instanceof UniPaymentWxpayProvider) {//判断微信是否安装 this.getProvider()
var isWeChatInstalled = (obj as UniPaymentWxpayProvider).isWeChatInstalled let objList = []
console.log(isWeChatInstalled) this.serviceList.forEach((value) => {
} value.provider.forEach((provider) => {
// #endif let obj = uni.getProviderObjectById({
service: value.service,
// #ifdef APP-IOS provider: provider
const providerObjMap = this.getProviderObjectMap(obj) })
console.log(providerObjMap) if (obj != null) {
value.providerObjMap.push(providerObjMap) console.log(obj)
// #endif console.log(JSON.stringify(obj))
} value.providerObj.push(obj)
}) // #ifdef APP-ANDROID
}) if (obj instanceof UniPaymentWxpayProvider) {//判断微信是否安装
}, var isWeChatInstalled = (obj as UniPaymentWxpayProvider).isWeChatInstalled
// #ifdef APP-IOS console.log(isWeChatInstalled)
getProviderObjectMap(provider : UniProvider) { }
// #endif
const map = new Map()
if (this.hasProperty(provider, 'id') && provider.id != null) { // #ifdef APP-IOS
map.set('id', provider.id) const providerObjMap = this.getProviderObjectMap(obj)
} console.log(providerObjMap)
value.providerObjMap.push(providerObjMap)
if (this.hasProperty(provider, 'description') && provider.description != null) { // #endif
map.set('description', provider.description) }
} })
})
if (this.hasProperty(provider, 'isAppExist') && provider.isAppExist != null) { },
map.set('isAppExist', provider.isAppExist) // #ifdef APP-IOS
} getProviderObjectMap(provider : UniProvider) {
if (this.hasProperty(provider, 'isWeChatInstalled') && provider.isWeChatInstalled != null) { const map = new Map()
map.set('isWeChatInstalled', provider.isWeChatInstalled) if (this.hasProperty(provider, 'id') && provider.id != null) {
} map.set('id', provider.id)
}
if (this.hasMethod(provider, 'uniqueMethodForProvider')) {
map.set('func-uniqueMethodForProvider', provider.uniqueMethodForProvider()) if (this.hasProperty(provider, 'description') && provider.description != null) {
} map.set('description', provider.description)
return Object.fromEntries(map) }
},
hasMethod(provider : UniProvider, methodName : string) { if (this.hasProperty(provider, 'isAppExist') && provider.isAppExist != null) {
return typeof provider[methodName] === 'function'; map.set('isAppExist', provider.isAppExist)
}, }
hasProperty(provider : UniProvider, propName : string) {
return propName in provider if (this.hasProperty(provider, 'isWeChatInstalled') && provider.isWeChatInstalled != null) {
} map.set('isWeChatInstalled', provider.isWeChatInstalled)
// #endif }
}
} if (this.hasMethod(provider, 'uniqueMethodForProvider')) {
map.set('func-uniqueMethodForProvider', provider.uniqueMethodForProvider())
}
return Object.fromEntries(map)
},
hasMethod(provider : UniProvider, methodName : string) {
return typeof provider[methodName] === 'function';
},
hasProperty(provider : UniProvider, propName : string) {
return propName in provider
}
// #endif
}
}
</script> </script>
<style> <style>
.page { .page {
padding: 15px; padding: 15px;
} }
.service-item { .service-item {
margin-top: 10px; margin-top: 10px;
} }
.service-name { .service-name {
font-weight: bold; font-weight: bold;
} }
.provider-list { .provider-list {
margin-left: 32px; margin-left: 32px;
} }
.provider-item { .provider-item {
line-height: 1.5; line-height: 1.5;
} }
.btn-get-provider { .btn-get-provider {
margin-top: 30px; margin-top: 30px;
} }
</style> </style>
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册