@kbapp/js-bridge 0.4.8-alpha.0 → 1.0.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LOGIN.MD +79 -0
- package/README.MD +1045 -182
- package/dist/core/index.d.ts +68 -16
- package/dist/index.d.ts +8 -5
- package/dist/index.es.js +516 -0
- package/dist/index.umd.js +1 -0
- package/dist/lib/app-version-support.d.ts +41 -0
- package/dist/lib/bridge-code.d.ts +14 -0
- package/dist/lib/check-for-new-version.d.ts +7 -5
- package/dist/lib/close-webview.d.ts +6 -2
- package/dist/lib/define-permission-usage.d.ts +8 -2
- package/dist/lib/generate-kb-sign.d.ts +13 -2
- package/dist/lib/{get-device-info.d.ts → get-app-base-info.d.ts} +14 -7
- package/dist/lib/open-post-editor.d.ts +47 -4
- package/dist/lib/report-da-event.d.ts +33 -0
- package/dist/lib/run-action.d.ts +9 -5
- package/dist/lib/save-image-to-local.d.ts +8 -4
- package/dist/lib/save-video-to-local.d.ts +7 -3
- package/dist/lib/scan-qr-code.d.ts +23 -0
- package/dist/lib/screen-orientation.d.ts +13 -0
- package/dist/lib/set-webview-title.d.ts +7 -3
- package/dist/lib/share-image.d.ts +21 -0
- package/dist/lib/share-model.d.ts +170 -45
- package/dist/lib/subscribe-notify.d.ts +25 -0
- package/dist/lib/trigger-login.d.ts +18 -10
- package/dist/utils/filter-undefined-properties.d.ts +6 -0
- package/dist/utils/promise-cache.d.ts +5 -0
- package/dist/utils/wrap-async.d.ts +17 -0
- package/examples/index.html +236 -0
- package/package.json +17 -4
- package/vite.config.ts +32 -0
- package/dist/core/index.js +0 -84
- package/dist/core/lib/ds-bridge.d.ts +0 -7
- package/dist/core/lib/ds-bridge.js +0 -126
- package/dist/core/lib/flutter-ds-bridge.js +0 -172
- package/dist/core/lib/js-bridge.d.ts +0 -22
- package/dist/core/lib/js-bridge.js +0 -188
- package/dist/index.js +0 -33
- package/dist/lib/can-i-use.d.ts +0 -13
- package/dist/lib/can-i-use.js +0 -102
- package/dist/lib/check-for-new-version.js +0 -26
- package/dist/lib/close-webview.js +0 -24
- package/dist/lib/define-permission-usage.js +0 -40
- package/dist/lib/generate-kb-sign.js +0 -75
- package/dist/lib/get-device-info.js +0 -36
- package/dist/lib/js-bridge-code.d.ts +0 -10
- package/dist/lib/js-bridge-code.js +0 -14
- package/dist/lib/open-post-editor.js +0 -116
- package/dist/lib/report-getui.d.ts +0 -14
- package/dist/lib/report-getui.js +0 -17
- package/dist/lib/run-action.js +0 -29
- package/dist/lib/save-image-to-local.js +0 -28
- package/dist/lib/save-video-to-local.js +0 -28
- package/dist/lib/set-webview-title.js +0 -27
- package/dist/lib/share-model.js +0 -80
- package/dist/lib/share-poster.d.ts +0 -16
- package/dist/lib/share-poster.js +0 -26
- package/dist/lib/trigger-login.js +0 -195
- package/dist/util/promise-cache.d.ts +0 -5
- package/dist/util/promise-cache.js +0 -24
|
@@ -1,69 +1,194 @@
|
|
|
1
1
|
/**
|
|
2
2
|
*
|
|
3
|
-
* @description
|
|
3
|
+
* @description app分享model
|
|
4
|
+
*/
|
|
5
|
+
export declare class AppShareModel {
|
|
6
|
+
/**
|
|
7
|
+
* 标题
|
|
8
|
+
*/
|
|
9
|
+
title: string;
|
|
10
|
+
/**
|
|
11
|
+
* 文字内容
|
|
12
|
+
*/
|
|
13
|
+
content?: string;
|
|
14
|
+
/**
|
|
15
|
+
* 图片
|
|
16
|
+
*/
|
|
17
|
+
imageUrl: string;
|
|
18
|
+
/**
|
|
19
|
+
* 分享链接
|
|
20
|
+
*/
|
|
21
|
+
url: string;
|
|
22
|
+
/**
|
|
23
|
+
* 分享功能是否开启. 默认为 true.
|
|
24
|
+
* 当分享功能关闭时, 其他分享相关字段均无效.
|
|
25
|
+
*/
|
|
26
|
+
enabled?: boolean;
|
|
27
|
+
/**
|
|
28
|
+
* 海报分享标题.
|
|
29
|
+
* 客户端: 海报分享必须. 若不存在则取 {@link #title}, 若也不存在, 则海报分享功能关闭.
|
|
30
|
+
* H5: 非必填. 通过桥接给到客户端时, 建议可以只填充 {@link #title}.
|
|
31
|
+
* 后端: 非必填.
|
|
32
|
+
*/
|
|
33
|
+
posterTitle?: string;
|
|
34
|
+
/**
|
|
35
|
+
* 海报分享内容.
|
|
36
|
+
* 客户端: 非必须. 若不存在则取 {@link #content}, 若也不存在, 则海报只有标题内容.
|
|
37
|
+
* H5: 非必填. 通过桥接给到客户端时, 建议可以只填充 {@link #content}.
|
|
38
|
+
* 后端: 非必填.
|
|
39
|
+
*/
|
|
40
|
+
posterContent?: string;
|
|
41
|
+
/**
|
|
42
|
+
* 海报分享封面图.
|
|
43
|
+
* 客户端: 海报分享非必须. 若不存在则取 {@link #imageUrl}, 若也不存在, 则海报无封面.
|
|
44
|
+
* H5: 非必填. 通过桥接给到客户端时, 建议可以只填充 {@link #imageUrl}.
|
|
45
|
+
* 后端: 非必填.
|
|
46
|
+
*/
|
|
47
|
+
posterUrl?: string;
|
|
48
|
+
/**
|
|
49
|
+
* 海报分享的展示时间.
|
|
50
|
+
* 客户端: 海报分享非必须. 若不存在则海报不展示时间.
|
|
51
|
+
* H5: 非必填. 通过桥接给到客户端时, 建议忽略该字段.
|
|
52
|
+
* 后端: 非必填.
|
|
53
|
+
*/
|
|
54
|
+
posterTime?: string;
|
|
55
|
+
/** 海报分享展示时间格式. */
|
|
56
|
+
posterTimeFormat?: string;
|
|
57
|
+
/**
|
|
58
|
+
* 海报分享功能是否开启. 默认为 false.
|
|
59
|
+
* 当海报分享功能关闭时, 其他海报分享相关字段均无效.
|
|
60
|
+
*/
|
|
61
|
+
posterEnabled?: boolean;
|
|
62
|
+
/**
|
|
63
|
+
* 分享小程序设置: 小程序原始ID.
|
|
64
|
+
* 获取方法: 登录小程序管理后台-设置-基本设置-帐号信息.
|
|
65
|
+
*
|
|
66
|
+
* 当此字段非空时, 客户端会显示 '分享至小程序' 功能. 详见微信小程序分享文档:
|
|
67
|
+
* https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/share.html
|
|
68
|
+
*/
|
|
69
|
+
wxMiniUserName?: string;
|
|
70
|
+
/**
|
|
71
|
+
* 分享小程序设置: 小程序页面路径.
|
|
72
|
+
*/
|
|
73
|
+
wxMiniPath?: string;
|
|
74
|
+
/**
|
|
75
|
+
* 分享小程序设置: 额外信息.
|
|
76
|
+
* 通常开发者希望分享出去的小程序被二次打开时可以获取到更多信息, 例如群的标识.
|
|
77
|
+
*/
|
|
78
|
+
wxMiniShareTicket?: boolean;
|
|
79
|
+
/**
|
|
80
|
+
* 分享小程序设置: 小程序的类型.
|
|
81
|
+
* 0为正式版, 1为测试版, 2为体验版.
|
|
82
|
+
*/
|
|
83
|
+
wxMiniType?: number;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
4
86
|
*
|
|
5
|
-
*
|
|
87
|
+
* @description 定义app点击转发时候的分享卡片内容
|
|
88
|
+
* @example **示例代码**
|
|
6
89
|
```js
|
|
7
|
-
import {
|
|
90
|
+
import { defineAppShareModel } from '@kbapp/js-bridge';
|
|
8
91
|
|
|
9
|
-
|
|
92
|
+
// 方式1
|
|
93
|
+
defineAppShareModel({
|
|
10
94
|
title: '分享标题',
|
|
11
95
|
content: '分享内容',
|
|
12
96
|
imageUrl: 'https://static.kaiba315.com.cn/kaiba-logo.png', // 分享图片
|
|
13
97
|
url: 'http://www.kaiba315.com.cn/' // 分享网页地址
|
|
98
|
+
success() {
|
|
99
|
+
console.log('设置成功')
|
|
100
|
+
},
|
|
101
|
+
fail() {
|
|
102
|
+
console.log('设置失败')
|
|
103
|
+
}
|
|
104
|
+
})
|
|
105
|
+
|
|
106
|
+
// 方式2
|
|
107
|
+
defineAppShareModel({
|
|
108
|
+
onShareApp() {
|
|
109
|
+
// 点击页面右上角的时候触发该回调, 定义转发内容
|
|
110
|
+
return {
|
|
111
|
+
title: '分享标题',
|
|
112
|
+
content: '分享内容',
|
|
113
|
+
imageUrl: 'https://static.kaiba315.com.cn/kaiba-logo.png', // 分享图片
|
|
114
|
+
url: 'http://www.kaiba315.com.cn/' // 分享网页地址
|
|
115
|
+
}
|
|
116
|
+
},
|
|
117
|
+
success() {
|
|
118
|
+
console.log('设置成功')
|
|
119
|
+
},
|
|
120
|
+
fail() {
|
|
121
|
+
console.log('设置失败')
|
|
122
|
+
}
|
|
14
123
|
})
|
|
15
124
|
```
|
|
16
125
|
*/
|
|
17
|
-
export declare
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
/** 天目打点 */
|
|
29
|
-
tmuTrack?: any;
|
|
30
|
-
}): void;
|
|
126
|
+
export declare const defineAppShareModel: (...args: [params: AppShareModel & {
|
|
127
|
+
success?: ((res: void) => void) | undefined;
|
|
128
|
+
fail?: (error: import('./bridge-code').BridgeCode) => void;
|
|
129
|
+
complete?: () => void;
|
|
130
|
+
}] | [params: {
|
|
131
|
+
onShareApp: () => AppShareModel;
|
|
132
|
+
} & {
|
|
133
|
+
success?: ((res: void) => void) | undefined;
|
|
134
|
+
fail?: (error: import('./bridge-code').BridgeCode) => void;
|
|
135
|
+
complete?: () => void;
|
|
136
|
+
}]) => Promise<void>;
|
|
31
137
|
/**
|
|
32
138
|
*
|
|
33
|
-
* @description
|
|
139
|
+
* @description 主动唤起 分享面板
|
|
140
|
+
* 桥接type: 58
|
|
141
|
+
* @example **示例代码**
|
|
142
|
+
```js
|
|
143
|
+
import { openAppSharePanel } from '@kbapp/market-partner-sdk';
|
|
144
|
+
|
|
145
|
+
openAppSharePanel({
|
|
146
|
+
title: '开吧分享',
|
|
147
|
+
content: '开吧,开汽车上新生活!',
|
|
148
|
+
url: 'http://www.kaiba315.com.cn/',
|
|
149
|
+
imageUrl: 'https://static.kaiba315.com.cn/kaiba-logo.png',
|
|
150
|
+
success() {
|
|
151
|
+
console.log('打开分享面板成功')
|
|
152
|
+
},
|
|
153
|
+
fail() {
|
|
154
|
+
console.log('打开分享面板失败')
|
|
155
|
+
}
|
|
156
|
+
})
|
|
157
|
+
```
|
|
34
158
|
*
|
|
35
159
|
*/
|
|
36
|
-
export declare
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
}): void;
|
|
160
|
+
export declare const openAppSharePanel: (params: AppShareModel & {
|
|
161
|
+
success?: ((res: void) => void) | undefined;
|
|
162
|
+
fail?: (error: import('./bridge-code').BridgeCode) => void;
|
|
163
|
+
complete?: () => void;
|
|
164
|
+
}) => Promise<void>;
|
|
42
165
|
/**
|
|
43
166
|
*
|
|
44
|
-
* @description
|
|
45
|
-
*
|
|
46
|
-
*
|
|
47
|
-
* **示例代码**
|
|
167
|
+
* @description 监听 分享面板打开时触发 (主动和被动)
|
|
168
|
+
* @example **示例代码**
|
|
48
169
|
```js
|
|
49
|
-
import {
|
|
170
|
+
import { onAppSharePanelShow } from '@kbapp/market-partner-sdk';
|
|
50
171
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
content: '开吧,开汽车上新生活!',
|
|
54
|
-
url: 'http://www.kaiba315.com.cn/',
|
|
55
|
-
imageUrl: 'https://static.kaiba315.com.cn/kaiba-logo.png'
|
|
172
|
+
const stopHandle = onAppSharePanelShow(() => {
|
|
173
|
+
console.log('分享面板打开')
|
|
56
174
|
})
|
|
175
|
+
|
|
176
|
+
// stopHandle() 停止监听
|
|
57
177
|
```
|
|
178
|
+
*/
|
|
179
|
+
export declare function onAppSharePanelShow(callback: EventListenerOrEventListenerObject): () => void;
|
|
180
|
+
/**
|
|
58
181
|
*
|
|
182
|
+
* @description 定义页面是否显示右上角分享菜单, 定义分享面板显示的相关状态
|
|
183
|
+
* 桥接type: 68
|
|
59
184
|
*/
|
|
60
|
-
export declare
|
|
61
|
-
/**
|
|
62
|
-
|
|
63
|
-
/**
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
})
|
|
185
|
+
export declare const defineAppSharePanelState: (params: {
|
|
186
|
+
/** 是否显示 显示右上角 ...菜单 */
|
|
187
|
+
showMenu: boolean;
|
|
188
|
+
/** 显示分享面板布局, 0:正常显示. 1:只显示复制链接,浏览器打开相关. 2:只显示分享微信、QQ等. 默认 0 */
|
|
189
|
+
panelStyle: 0 | 1 | 2;
|
|
190
|
+
} & {
|
|
191
|
+
success?: ((res: void) => void) | undefined;
|
|
192
|
+
fail?: (error: import('./bridge-code').BridgeCode) => void;
|
|
193
|
+
complete?: () => void;
|
|
194
|
+
}) => Promise<void>;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
*
|
|
3
|
+
* @description 获取APP订阅通知状态
|
|
4
|
+
* 桥接type: 72
|
|
5
|
+
* @returns {Promise<{ enabled: 0 | 1 }>} 1:开启;0:关闭
|
|
6
|
+
*/
|
|
7
|
+
export declare const getAppSubscribeNotifyStatus: (params?: {
|
|
8
|
+
success?: ((res: {
|
|
9
|
+
enabled: 0 | 1;
|
|
10
|
+
}) => void) | undefined;
|
|
11
|
+
fail?: (error: import('./bridge-code').BridgeCode) => void;
|
|
12
|
+
complete?: () => void;
|
|
13
|
+
} | undefined) => Promise<{
|
|
14
|
+
enabled: 0 | 1;
|
|
15
|
+
}>;
|
|
16
|
+
/**
|
|
17
|
+
*
|
|
18
|
+
* @description 前往/打开 app订阅管理页面
|
|
19
|
+
* 桥接type: 73
|
|
20
|
+
*/
|
|
21
|
+
export declare const openAppSubscribeNotifySettings: (params?: {
|
|
22
|
+
success?: ((res: void) => void) | undefined;
|
|
23
|
+
fail?: (error: import('./bridge-code').BridgeCode) => void;
|
|
24
|
+
complete?: () => void;
|
|
25
|
+
} | undefined) => Promise<void>;
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { BridgeCode } from './bridge-code';
|
|
2
|
+
|
|
1
3
|
/**
|
|
2
4
|
*
|
|
3
5
|
* @description 登录信息
|
|
@@ -25,21 +27,27 @@ export declare class AppBridgedUserInfo {
|
|
|
25
27
|
/**
|
|
26
28
|
*
|
|
27
29
|
* @description 获取用户登录信息.如果未登录返回null
|
|
30
|
+
* 桥接type: 31
|
|
28
31
|
*/
|
|
29
|
-
export declare
|
|
32
|
+
export declare const getAppLoginInfo: (params?: {
|
|
33
|
+
success?: ((res: AppBridgedUserInfo | null) => void) | undefined;
|
|
34
|
+
fail?: (error: BridgeCode) => void;
|
|
35
|
+
complete?: () => void;
|
|
36
|
+
} | undefined) => Promise<AppBridgedUserInfo | null>;
|
|
30
37
|
/**
|
|
31
38
|
*
|
|
32
|
-
* @description
|
|
33
|
-
* 如果已登录,将直接返回登录信息, 请通过 `watchAppLoginSuccess` 监听登录成功事件
|
|
39
|
+
* @description 触发登录, 该函数仅触发登录, 不会返回任何结果, 可以通过 getAppLoginInfo 获取登录结果 或者 watchAppLoginSuccess 监听到登录
|
|
34
40
|
*/
|
|
35
|
-
export declare
|
|
41
|
+
export declare const triggerAppLogin: (params?: {
|
|
42
|
+
success?: ((res: void) => void) | undefined;
|
|
43
|
+
fail?: (error: BridgeCode) => void;
|
|
44
|
+
complete?: () => void;
|
|
45
|
+
} | undefined) => Promise<void>;
|
|
36
46
|
/**
|
|
37
47
|
*
|
|
38
|
-
* @description 注册监听app
|
|
39
|
-
*
|
|
40
|
-
* @
|
|
41
|
-
*
|
|
42
|
-
* **示例代码**
|
|
48
|
+
* @description 注册监听app是否登录成功, 监听时候立刻执行检测一次
|
|
49
|
+
* 如果已登录, 立刻触发一次回调
|
|
50
|
+
* @example **示例代码**
|
|
43
51
|
```js
|
|
44
52
|
import { watchAppLoginSuccess } from '@kbapp/js-bridge';
|
|
45
53
|
|
|
@@ -50,4 +58,4 @@ const handle = watchAppLoginSuccess(() => {
|
|
|
50
58
|
// handle() 停止监听
|
|
51
59
|
```
|
|
52
60
|
*/
|
|
53
|
-
export declare const
|
|
61
|
+
export declare const onAppLoginSuccess: (callback: (loginInfo: AppBridgedUserInfo) => void) => () => void;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { BridgeCode } from '../lib/bridge-code';
|
|
2
|
+
|
|
3
|
+
type CallbackOptions<R> = {
|
|
4
|
+
/** 成功回调 */
|
|
5
|
+
success?: (res: R) => void;
|
|
6
|
+
/** 失败回调 */
|
|
7
|
+
fail?: (error: BridgeCode) => void;
|
|
8
|
+
/** 同时触发 */
|
|
9
|
+
complete?: () => void;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
*
|
|
13
|
+
* 将普通的async异步函数包装成小程序风格:
|
|
14
|
+
* 限制被包装函数 F 必须且只能接收一个参数
|
|
15
|
+
*/
|
|
16
|
+
export declare function wrapAsync<P, R>(fn: (params: P) => R | Promise<R>): (...args: P extends undefined ? [params?: CallbackOptions<Awaited<R>>] : {} extends P ? [params?: P & CallbackOptions<Awaited<R>>] : [params: P & CallbackOptions<Awaited<R>>]) => Promise<Awaited<R>>;
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
|
+
<title>测试demo</title>
|
|
7
|
+
<link
|
|
8
|
+
href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css"
|
|
9
|
+
rel="stylesheet"
|
|
10
|
+
integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD"
|
|
11
|
+
crossorigin="anonymous"
|
|
12
|
+
/>
|
|
13
|
+
</head>
|
|
14
|
+
<body>
|
|
15
|
+
<div id="app">
|
|
16
|
+
<div class="card m-2" v-for="(item, index) in list" :key="index">
|
|
17
|
+
<h5 class="card-header">
|
|
18
|
+
<div class="d-flex justify-content-between align-items-center">
|
|
19
|
+
<span>{{item.title}}</span>
|
|
20
|
+
|
|
21
|
+
<template v-if="item.done.status.loading">
|
|
22
|
+
<button type="button" class="btn btn-primary" disabled>
|
|
23
|
+
<span class="spinner-grow spinner-grow-sm" role="status" aria-hidden="true"></span>
|
|
24
|
+
</button>
|
|
25
|
+
</template>
|
|
26
|
+
<template v-else>
|
|
27
|
+
<button type="button" class="btn btn-primary" @click="() => {item.done()}">{{item.buttonText}}</button>
|
|
28
|
+
</template>
|
|
29
|
+
</div>
|
|
30
|
+
</h5>
|
|
31
|
+
|
|
32
|
+
<div class="card-body">
|
|
33
|
+
<template v-if="item.subtitle">
|
|
34
|
+
<div class="card-title fw-bold">{{item.subtitle}}</div>
|
|
35
|
+
</template>
|
|
36
|
+
|
|
37
|
+
<template v-if="item.desc">
|
|
38
|
+
<div class="card-text">{{item.desc}}</div>
|
|
39
|
+
</template>
|
|
40
|
+
|
|
41
|
+
<template v-if="item.form && item.form.schema">
|
|
42
|
+
<div class="card mt-3">
|
|
43
|
+
<div class="card-header">执行参数</div>
|
|
44
|
+
<div class="card-body">
|
|
45
|
+
<div v-for="(key, index) in item.form.schema" :key="index">
|
|
46
|
+
<label :for="`exampleFormControlInput${index}`" class="form-label">{{ key.key }} {{ key.label }}</label>
|
|
47
|
+
|
|
48
|
+
<template v-if="key.type === 'number'">
|
|
49
|
+
<input
|
|
50
|
+
type="number"
|
|
51
|
+
class="form-control"
|
|
52
|
+
:id="`exampleFormControlInput${index}`"
|
|
53
|
+
:placeholder="key.label"
|
|
54
|
+
v-model="item.form.data[key.key]"
|
|
55
|
+
/>
|
|
56
|
+
</template>
|
|
57
|
+
<template v-else>
|
|
58
|
+
<input
|
|
59
|
+
type="text"
|
|
60
|
+
class="form-control"
|
|
61
|
+
:id="`exampleFormControlInput${index}`"
|
|
62
|
+
:placeholder="key.label"
|
|
63
|
+
v-model="item.form.data[key.key]"
|
|
64
|
+
/>
|
|
65
|
+
</template>
|
|
66
|
+
</div>
|
|
67
|
+
</div>
|
|
68
|
+
</div>
|
|
69
|
+
</template>
|
|
70
|
+
|
|
71
|
+
<template v-if="item.done.status.data">
|
|
72
|
+
<div class="alert alert-success mt-2" role="alert">{{item.done.status.data}}</div>
|
|
73
|
+
</template>
|
|
74
|
+
|
|
75
|
+
<template v-if="item.done.status.error">
|
|
76
|
+
<div class="alert alert-danger mt-2" role="alert">{{item.done.status.error}}</div>
|
|
77
|
+
</template>
|
|
78
|
+
</div>
|
|
79
|
+
</div>
|
|
80
|
+
</div>
|
|
81
|
+
</body>
|
|
82
|
+
<script type="module">
|
|
83
|
+
import { createApp, ref, reactive } from 'https://unpkg.com/vue@3/dist/vue.esm-browser.js'
|
|
84
|
+
import { runAction, defineAppShareModel, openAppSharePanel, reportDAEvent, getAppBaseInfo, shareImage, scanQRCode } from '../dist/index.es.js'
|
|
85
|
+
|
|
86
|
+
// import '../dist/index.umd.js'
|
|
87
|
+
// const { runAction, defineAppShareModel, openAppSharePanel, reportDAEvent, getAppBaseInfo, shareImage, scanQRCode } = window.kbBridge
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* 装饰器,用于处理done函数的调用
|
|
91
|
+
* @param {Function} callback - 实际执行的函数
|
|
92
|
+
* @returns {Function} - 装饰后的函数
|
|
93
|
+
*/
|
|
94
|
+
const decorateDone = (callback) => {
|
|
95
|
+
/** 状态 */
|
|
96
|
+
const status = reactive({
|
|
97
|
+
/** 请求中 */
|
|
98
|
+
loading: false,
|
|
99
|
+
|
|
100
|
+
/** 请求完成 */
|
|
101
|
+
data: null,
|
|
102
|
+
|
|
103
|
+
/** 异常值 */
|
|
104
|
+
error: null,
|
|
105
|
+
})
|
|
106
|
+
|
|
107
|
+
async function done() {
|
|
108
|
+
status.data = null
|
|
109
|
+
status.error = null
|
|
110
|
+
status.loading = true
|
|
111
|
+
|
|
112
|
+
try {
|
|
113
|
+
const data = await Promise.resolve(callback.call(this))
|
|
114
|
+
status.data = data
|
|
115
|
+
} catch (error) {
|
|
116
|
+
status.error = error
|
|
117
|
+
throw error
|
|
118
|
+
} finally {
|
|
119
|
+
status.loading = false
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
done['status'] = status
|
|
124
|
+
|
|
125
|
+
return done
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
const list = reactive([
|
|
129
|
+
{
|
|
130
|
+
title: 'runAction',
|
|
131
|
+
subtitle: '通用跳转',
|
|
132
|
+
buttonText: '执行',
|
|
133
|
+
desc: `执行结果: 跳转到百度页面`,
|
|
134
|
+
done: decorateDone(async () => {
|
|
135
|
+
await runAction({
|
|
136
|
+
action: 'pageWeb',
|
|
137
|
+
actionParams: {
|
|
138
|
+
url: 'https://www.baidu.com',
|
|
139
|
+
},
|
|
140
|
+
})
|
|
141
|
+
return '执行成功'
|
|
142
|
+
}),
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
title: 'defineAppShareModel',
|
|
146
|
+
subtitle: '定义分享model',
|
|
147
|
+
buttonText: '执行',
|
|
148
|
+
desc: `执行结果: 设置点击页面右上角分享卡片内容`,
|
|
149
|
+
done: decorateDone(async () => {
|
|
150
|
+
await defineAppShareModel({
|
|
151
|
+
title: '分享标题',
|
|
152
|
+
content: '分享内容',
|
|
153
|
+
imageUrl: 'https://static.kaiba315.com.cn/kaiba-logo.png',
|
|
154
|
+
url: 'http://www.kaiba315.com.cn/',
|
|
155
|
+
})
|
|
156
|
+
|
|
157
|
+
return '设置成功'
|
|
158
|
+
}),
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
title: 'openAppSharePanel',
|
|
162
|
+
subtitle: '打开分享面板',
|
|
163
|
+
buttonText: '执行',
|
|
164
|
+
desc: `执行结果: 打开分享面板`,
|
|
165
|
+
done: decorateDone(async () => {
|
|
166
|
+
await openAppSharePanel({
|
|
167
|
+
title: '开吧分享',
|
|
168
|
+
content: '开吧,开汽车上新生活!',
|
|
169
|
+
url: 'http://www.kaiba315.com.cn/',
|
|
170
|
+
imageUrl: 'https://static.kaiba315.com.cn/kaiba-logo.png',
|
|
171
|
+
})
|
|
172
|
+
|
|
173
|
+
return '执行成功'
|
|
174
|
+
}),
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
title: 'reportDAEvent',
|
|
178
|
+
subtitle: '上报数据埋点到个推',
|
|
179
|
+
buttonText: '执行',
|
|
180
|
+
desc: `执行结果:上报数据埋点到个推`,
|
|
181
|
+
done: decorateDone(async () => {
|
|
182
|
+
await reportDAEvent({
|
|
183
|
+
eventName: 'text_event_name',
|
|
184
|
+
eventParams: {
|
|
185
|
+
test_param: 'test_value',
|
|
186
|
+
},
|
|
187
|
+
})
|
|
188
|
+
|
|
189
|
+
return '执行成功'
|
|
190
|
+
}),
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
title: 'getAppBaseInfo',
|
|
194
|
+
subtitle: '获取开吧 App 基础信息',
|
|
195
|
+
buttonText: '执行',
|
|
196
|
+
desc: `执行结果: 返回开吧 App 基础信息`,
|
|
197
|
+
done: decorateDone(async () => {
|
|
198
|
+
return getAppBaseInfo()
|
|
199
|
+
}),
|
|
200
|
+
},
|
|
201
|
+
{
|
|
202
|
+
title: 'shareImage',
|
|
203
|
+
subtitle: '分享图片',
|
|
204
|
+
buttonText: '执行',
|
|
205
|
+
desc: `执行结果 分享图片`,
|
|
206
|
+
done: decorateDone(async () => {
|
|
207
|
+
await shareImage({
|
|
208
|
+
imageUrl: 'https://static.kaiba315.com.cn/kaiba-logo.png',
|
|
209
|
+
})
|
|
210
|
+
|
|
211
|
+
return '分享成功'
|
|
212
|
+
}),
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
title: 'scanQRCode',
|
|
216
|
+
subtitle: '扫码',
|
|
217
|
+
buttonText: '执行',
|
|
218
|
+
desc: `执行结果 分享图片`,
|
|
219
|
+
done: decorateDone(async () => {
|
|
220
|
+
return scanQRCode({
|
|
221
|
+
imageUrl: 'https://static.kaiba315.com.cn/kaiba-logo.png',
|
|
222
|
+
})
|
|
223
|
+
}),
|
|
224
|
+
|
|
225
|
+
}
|
|
226
|
+
])
|
|
227
|
+
|
|
228
|
+
createApp({
|
|
229
|
+
setup() {
|
|
230
|
+
return {
|
|
231
|
+
list,
|
|
232
|
+
}
|
|
233
|
+
},
|
|
234
|
+
}).mount('#app')
|
|
235
|
+
</script>
|
|
236
|
+
</html>
|
package/package.json
CHANGED
|
@@ -3,8 +3,21 @@
|
|
|
3
3
|
"publishConfig": {
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
|
-
"version": "0.
|
|
6
|
+
"version": "1.0.0-alpha.0",
|
|
7
7
|
"description": "开吧客户端桥接",
|
|
8
|
-
"
|
|
9
|
-
"
|
|
10
|
-
|
|
8
|
+
"author": "along",
|
|
9
|
+
"type": "module",
|
|
10
|
+
"main": "./dist/index.umd.js",
|
|
11
|
+
"module": "./dist/index.es.js",
|
|
12
|
+
"types": "./dist/index.d.ts",
|
|
13
|
+
"scripts": {
|
|
14
|
+
"dev": "vite build && vite",
|
|
15
|
+
"build": "vite build",
|
|
16
|
+
"publish": "npm run build && npm publish"
|
|
17
|
+
},
|
|
18
|
+
"devDependencies": {
|
|
19
|
+
"typescript": "^5.0.0",
|
|
20
|
+
"vite": "^5.0.0",
|
|
21
|
+
"vite-plugin-dts": "^3.0.0"
|
|
22
|
+
}
|
|
23
|
+
}
|
package/vite.config.ts
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { defineConfig } from 'vite'
|
|
2
|
+
import { resolve } from 'path'
|
|
3
|
+
import dts from 'vite-plugin-dts'
|
|
4
|
+
|
|
5
|
+
export default defineConfig({
|
|
6
|
+
build: {
|
|
7
|
+
lib: {
|
|
8
|
+
// 库的入口文件
|
|
9
|
+
entry: resolve(__dirname, 'src/index.ts'),
|
|
10
|
+
// UMD 格式下全局变量的名字(例如:window.kbBridge)
|
|
11
|
+
name: 'kbBridge',
|
|
12
|
+
// 打包输出的文件名
|
|
13
|
+
fileName: (format) => `index.${format}.js`,
|
|
14
|
+
// 依然打包两种格式,确保兼容性
|
|
15
|
+
formats: ['es', 'umd'],
|
|
16
|
+
},
|
|
17
|
+
rollupOptions: {
|
|
18
|
+
// 如果有外部依赖,在这里声明
|
|
19
|
+
external: [],
|
|
20
|
+
output: {
|
|
21
|
+
globals: {},
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
outDir: 'dist',
|
|
25
|
+
},
|
|
26
|
+
plugins: [dts({ insertTypesEntry: true })],
|
|
27
|
+
// 这里的配置是为了让 npx vite 启动时默认打开测试页
|
|
28
|
+
server: {
|
|
29
|
+
open: '/examples/index.html',
|
|
30
|
+
host: '0.0.0.0'
|
|
31
|
+
},
|
|
32
|
+
})
|