@haluo/util 2.0.32 → 2.0.33-beta.1
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/dist/index.d.ts +2 -0
- package/dist/index.js +2 -0
- package/dist/modules/app-call/configs.d.ts +9 -0
- package/dist/modules/app-call/configs.js +39 -0
- package/dist/modules/app-call/core.d.ts +53 -0
- package/dist/modules/app-call/core.js +166 -0
- package/dist/modules/app-call/extensions.d.ts +186 -0
- package/dist/modules/app-call/extensions.js +1226 -0
- package/dist/modules/app-call/index.d.ts +16 -0
- package/dist/modules/app-call/index.js +84 -0
- package/dist/modules/app-call/offline.d.ts +12 -0
- package/dist/modules/app-call/offline.js +211 -0
- package/dist/modules/app-call/partner-bridge.d.ts +5 -0
- package/dist/modules/app-call/partner-bridge.js +68 -0
- package/dist/modules/app-call/types.d.ts +53 -0
- package/dist/modules/app-call/types.js +4 -0
- package/dist/modules/open-app/index.d.ts +2 -7
- package/dist/modules/tools/index.d.ts +3 -3
- package/dist/modules/upload/aliOss.js +3 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/dist/types/modules/cookie/index.d.ts +0 -27
- package/dist/types/modules/date/index.d.ts +0 -52
- package/dist/types/modules/dom/index.d.ts +0 -28
- package/dist/types/modules/filter/index.d.ts +0 -24
- package/dist/types/modules/format/index.d.ts +0 -15
- package/dist/types/modules/match/index.d.ts +0 -12
- package/dist/types/modules/monitor/index.d.ts +0 -3
- package/dist/types/modules/monitor/lib/jsError.d.ts +0 -1
- package/dist/types/modules/monitor/lib/timing.d.ts +0 -1
- package/dist/types/modules/monitor/lib/xhr.d.ts +0 -1
- package/dist/types/modules/monitor/utils/onload.d.ts +0 -1
- package/dist/types/modules/monitor/utils/tracker.d.ts +0 -7
- package/dist/types/modules/number/index.d.ts +0 -41
- package/dist/types/modules/sentry/index.d.ts +0 -15
- package/dist/types/modules/tools/index.d.ts +0 -166
- package/dist/types/types/index.d.ts +0 -3
|
@@ -0,0 +1,1226 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 创建所有扩展方法
|
|
3
|
+
*/
|
|
4
|
+
export function createAllExtensions(appCall, config) {
|
|
5
|
+
const core = appCall.__core || appCall;
|
|
6
|
+
const iOSInterface = core.getIOSInterface?.() || '';
|
|
7
|
+
// 直接使用已初始化的全局变量,避免重复计算
|
|
8
|
+
const isIOS = window.isIOS || false;
|
|
9
|
+
const isAndroid = window.isAndroid || false;
|
|
10
|
+
const isHarmonyos = window.isHarmonyos || false;
|
|
11
|
+
const showTip = config.showTip || false;
|
|
12
|
+
const fileToHttps = config.fileToHttps || ((url) => url);
|
|
13
|
+
return {
|
|
14
|
+
// ========== action 相关 ==========
|
|
15
|
+
// 订单地址确认
|
|
16
|
+
selectDeliveryAddress(data) {
|
|
17
|
+
console.log('selectDeliveryAddress');
|
|
18
|
+
return appCall.call('selectDeliveryAddress', JSON.stringify(data));
|
|
19
|
+
},
|
|
20
|
+
// 支付成功
|
|
21
|
+
paySuccess(on) {
|
|
22
|
+
return appCall.call('success', !!on);
|
|
23
|
+
},
|
|
24
|
+
// 支付
|
|
25
|
+
pay(params = {}) {
|
|
26
|
+
params =
|
|
27
|
+
(params && {
|
|
28
|
+
method: params.method || 'wx',
|
|
29
|
+
orderId: params.orderId || '',
|
|
30
|
+
orderNumber: params.orderNumber || '',
|
|
31
|
+
hbNum: params.hbNum || '',
|
|
32
|
+
uid: JSON.parse(window.localStorage?.user || '{}').uid || ''
|
|
33
|
+
}) ||
|
|
34
|
+
{};
|
|
35
|
+
return appCall.call('pay', JSON.stringify(params), window.bridge.payCallback);
|
|
36
|
+
},
|
|
37
|
+
// 支付(新版本)
|
|
38
|
+
payNew(params = {}) {
|
|
39
|
+
params =
|
|
40
|
+
(params && {
|
|
41
|
+
orderNumber: params.orderNumber || '',
|
|
42
|
+
channelCode: params.channelCode || '',
|
|
43
|
+
wayCode: params.wayCode || ''
|
|
44
|
+
}) ||
|
|
45
|
+
{};
|
|
46
|
+
return appCall.call('payNew', JSON.stringify(params), window.bridge.payNewCallback);
|
|
47
|
+
},
|
|
48
|
+
// ========== 基础接口 ==========
|
|
49
|
+
// 弹出提示
|
|
50
|
+
alert(text) {
|
|
51
|
+
const textStr = typeof text === 'object' ? JSON.stringify(text) : String(text);
|
|
52
|
+
if (((isAndroid || isHarmonyos) && !window.NativeCall) ||
|
|
53
|
+
(isIOS && !iOSInterface)) {
|
|
54
|
+
console.log('AppCall.alert:', textStr);
|
|
55
|
+
}
|
|
56
|
+
return appCall.call('alert', textStr);
|
|
57
|
+
},
|
|
58
|
+
// 隐藏标题(废弃)
|
|
59
|
+
hideTitle(on) {
|
|
60
|
+
return appCall.call('hideTitle', !!on);
|
|
61
|
+
},
|
|
62
|
+
// 隐藏标题
|
|
63
|
+
setHeadState(type) {
|
|
64
|
+
return appCall.call('setHeadState', type);
|
|
65
|
+
},
|
|
66
|
+
// 打开webView
|
|
67
|
+
open(url, title = config.projectName) {
|
|
68
|
+
return appCall.call('open', url, title);
|
|
69
|
+
},
|
|
70
|
+
// 关闭webView
|
|
71
|
+
close() {
|
|
72
|
+
return appCall.call('close');
|
|
73
|
+
},
|
|
74
|
+
// 返回,负数后退,正数前进
|
|
75
|
+
back(step) {
|
|
76
|
+
return appCall.call('back', step);
|
|
77
|
+
},
|
|
78
|
+
// 打开appstore
|
|
79
|
+
openAppStoreUrl(params) {
|
|
80
|
+
return appCall.call('openAppStoreUrl', JSON.stringify(params));
|
|
81
|
+
},
|
|
82
|
+
// 打开三方app
|
|
83
|
+
openOtherAppUrlRouter(params) {
|
|
84
|
+
const env = config.env || {};
|
|
85
|
+
const isIOS = window.isIOS;
|
|
86
|
+
if (params.appUrlRouter?.includes('58moto')) {
|
|
87
|
+
params.appScheme = params.appScheme || (isIOS ? env.motoIOSScheme : env.motoAndroidScheme);
|
|
88
|
+
params.appStoreUrl = params.appStoreUrl || (isIOS ? env.APPLINKIOS : env.APPLINK);
|
|
89
|
+
params.appBundleId = params.appBundleId || env.bundleId;
|
|
90
|
+
}
|
|
91
|
+
else if (params.appUrlRouter?.includes('emotofine') || window.isEmotofine) {
|
|
92
|
+
params.appScheme = params.appScheme || (isIOS ? env.emotofineIOSScheme : env.emotofineAndroidScheme);
|
|
93
|
+
params.appStoreUrl = params.appStoreUrl || (isIOS ? env.EMOTOFINEAPPLINKIOS : env.EMOTOFINEAPPLINK);
|
|
94
|
+
params.appBundleId = params.appBundleId || env.emotofineBundleId;
|
|
95
|
+
}
|
|
96
|
+
else if (params.appUrlRouter?.includes('biaofine') || window.isBiaofine) {
|
|
97
|
+
params.appScheme = params.appScheme || (isIOS ? env.biaofineIOSScheme : env.biaofineAndroidScheme);
|
|
98
|
+
params.appStoreUrl = params.appStoreUrl || (isIOS ? env.BIAOFINEAPPLINKIOS : env.BIAOFINEAPPLINK);
|
|
99
|
+
params.appBundleId = params.appBundleId || env.biaofineBundleId;
|
|
100
|
+
}
|
|
101
|
+
else if (params.appUrlRouter?.includes('dronefine') || window.isdronefine) {
|
|
102
|
+
params.appScheme = params.appScheme || (isIOS ? env.dronefineIOSScheme : env.dronefineAndroidScheme);
|
|
103
|
+
params.appStoreUrl = params.appStoreUrl || (isIOS ? env.dronefineAPPLINKIOS : env.dronefineAPPLINK);
|
|
104
|
+
params.appBundleId = params.appBundleId || env.dronefineBundleId;
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
params.appScheme = params.appScheme || (isIOS ? config.iosScheme : config.androidScheme);
|
|
108
|
+
params.appStoreUrl = params.appStoreUrl || (isIOS ? config.appStoreUrl : config.androidStoreUrl);
|
|
109
|
+
params.appBundleId = params.appBundleId || config.bundleId;
|
|
110
|
+
}
|
|
111
|
+
console.log('openOtherAppUrlRouter', params);
|
|
112
|
+
return appCall.call('openOtherAppUrlRouter', JSON.stringify(params));
|
|
113
|
+
},
|
|
114
|
+
// 设置页面标题
|
|
115
|
+
setTitle(title = '') {
|
|
116
|
+
setTimeout(() => {
|
|
117
|
+
return appCall.call('setTitle', title);
|
|
118
|
+
}, 100);
|
|
119
|
+
},
|
|
120
|
+
// 打开在线客服
|
|
121
|
+
haloService(params = '') {
|
|
122
|
+
return appCall.call('haloService', params);
|
|
123
|
+
},
|
|
124
|
+
// 打开七鱼客服
|
|
125
|
+
qiyuService(params = {}) {
|
|
126
|
+
return appCall.call('qiyuService', JSON.stringify(params));
|
|
127
|
+
},
|
|
128
|
+
// 通知客户端投票成功
|
|
129
|
+
voteSuccess(params = {}) {
|
|
130
|
+
return appCall.call('voteSuccess', JSON.stringify(params));
|
|
131
|
+
},
|
|
132
|
+
// 打开款型图片页面
|
|
133
|
+
openMotorStylePhotosPage(carData) {
|
|
134
|
+
return appCall.call('openMotorStylePhotosPage', JSON.stringify(carData));
|
|
135
|
+
},
|
|
136
|
+
// 查看大图
|
|
137
|
+
seeImageViewer(imageData) {
|
|
138
|
+
return appCall.call('seeImageViewer', JSON.stringify(imageData));
|
|
139
|
+
},
|
|
140
|
+
// 保存图片
|
|
141
|
+
saveImg(imgUrl) {
|
|
142
|
+
return appCall.call('saveImg', imgUrl);
|
|
143
|
+
},
|
|
144
|
+
// 保存图片传base64
|
|
145
|
+
saveImgData(imgUrl, callback) {
|
|
146
|
+
Object.assign((window.bridge = window.bridge || {}), {
|
|
147
|
+
saveImgDataCallback(res) {
|
|
148
|
+
if (typeof callback === 'function') {
|
|
149
|
+
callback(res);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
});
|
|
153
|
+
return appCall.call('saveImgData', imgUrl, window.bridge.saveImgDataCallback);
|
|
154
|
+
},
|
|
155
|
+
// 修改分享
|
|
156
|
+
modifyShare(data, callback) {
|
|
157
|
+
Object.assign((window.bridge = window.bridge || {}), {
|
|
158
|
+
modifyShareDataCallback(res) {
|
|
159
|
+
if (typeof callback === 'function') {
|
|
160
|
+
callback(res);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
return appCall.call('modifyShare', JSON.stringify(data), window.bridge.modifyShareDataCallback);
|
|
165
|
+
},
|
|
166
|
+
// 初始化口碑信息(计划废弃)
|
|
167
|
+
carDetail(detail) {
|
|
168
|
+
const me = appCall;
|
|
169
|
+
let carDetail = JSON.stringify(detail);
|
|
170
|
+
carDetail = JSON.parse(carDetail);
|
|
171
|
+
setTimeout(function () {
|
|
172
|
+
return me.call('carDetail', JSON.stringify(carDetail));
|
|
173
|
+
}, 100);
|
|
174
|
+
},
|
|
175
|
+
// 发布动态,跳转原生圈子发布页面
|
|
176
|
+
newCircle(obj) {
|
|
177
|
+
if (!config.getCircleIdByName) {
|
|
178
|
+
console.warn('getCircleIdByName not provided in config');
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
config
|
|
182
|
+
.getCircleIdByName({
|
|
183
|
+
title: obj.name
|
|
184
|
+
})
|
|
185
|
+
.then((res) => {
|
|
186
|
+
obj.id = res.id;
|
|
187
|
+
obj.shortType = res.type;
|
|
188
|
+
obj.activityName = obj.activityName || config.projectName;
|
|
189
|
+
obj.activityImage =
|
|
190
|
+
obj.activityImage || config.defaultImage || `https://wap.${config.domain}/static/img/common/motuofan_small.png`;
|
|
191
|
+
obj.activityLink = obj.activityLink || location.href;
|
|
192
|
+
let params = JSON.stringify(obj);
|
|
193
|
+
params = JSON.parse(params);
|
|
194
|
+
console.log('话题信息:', params);
|
|
195
|
+
return appCall.call('newCircle', JSON.stringify(params), window.bridge.circleRelease);
|
|
196
|
+
})
|
|
197
|
+
.catch((err) => {
|
|
198
|
+
console.log(err);
|
|
199
|
+
});
|
|
200
|
+
},
|
|
201
|
+
// 发布手表体验(iwc_wap 特有)
|
|
202
|
+
publishWatchExperience(obj) {
|
|
203
|
+
let params = JSON.stringify(obj);
|
|
204
|
+
params = JSON.parse(params);
|
|
205
|
+
return appCall.call('newCircle', JSON.stringify(params), window.bridge.circleRelease);
|
|
206
|
+
},
|
|
207
|
+
// 打开app指定页面
|
|
208
|
+
navigate(action = {}) {
|
|
209
|
+
action = Object.assign({
|
|
210
|
+
relationType: action.type,
|
|
211
|
+
id: action.id,
|
|
212
|
+
name: action.name || action.subject || '',
|
|
213
|
+
content: action.name || action.content || '',
|
|
214
|
+
relatedType: action.relatedType || '',
|
|
215
|
+
relatedId: action.action || '',
|
|
216
|
+
link: action.link || '',
|
|
217
|
+
jumpUrl: fileToHttps(action.jumpUrl) || '',
|
|
218
|
+
urlParam: action.urlParam || {}
|
|
219
|
+
}, action);
|
|
220
|
+
console.log(action);
|
|
221
|
+
return appCall.call('navigate', JSON.stringify(action), window.bridge.navigateRelease);
|
|
222
|
+
},
|
|
223
|
+
// 根据能量活动跳转指定页面
|
|
224
|
+
navigateByEnergy(action) {
|
|
225
|
+
if (action && action.type) {
|
|
226
|
+
action.relationType = action.type;
|
|
227
|
+
return appCall.call('navigateByEnergy', JSON.stringify(action), window.bridge.messageRelease);
|
|
228
|
+
}
|
|
229
|
+
},
|
|
230
|
+
// 跳转指定页面或链接,返回当前页面需告知H5
|
|
231
|
+
messageInteraction(action = {}) {
|
|
232
|
+
action = Object.assign({
|
|
233
|
+
type: action.type,
|
|
234
|
+
orderType: action.orderType,
|
|
235
|
+
relationType: action.relationType,
|
|
236
|
+
id: action.id,
|
|
237
|
+
link: action.link || '',
|
|
238
|
+
orderNum: action.orderNum,
|
|
239
|
+
shopId: action.shopId
|
|
240
|
+
});
|
|
241
|
+
return appCall.call('messageInteraction', JSON.stringify(action), window.bridge.messageRelease);
|
|
242
|
+
},
|
|
243
|
+
// 获取预约价格
|
|
244
|
+
getReservePrice(action = {}) {
|
|
245
|
+
action = Object.assign({
|
|
246
|
+
shopId: action.shopId,
|
|
247
|
+
shopName: action.shopName,
|
|
248
|
+
address: action.address,
|
|
249
|
+
latitude: action.latitude,
|
|
250
|
+
longitude: action.longitude,
|
|
251
|
+
city: action.city,
|
|
252
|
+
province: action.province,
|
|
253
|
+
typeId: action.typeId,
|
|
254
|
+
shopLevel: action.shopLevel,
|
|
255
|
+
mobile: action.mobile,
|
|
256
|
+
trialRunFlag: action.trialRunFlag,
|
|
257
|
+
provinceName: action.provinceName,
|
|
258
|
+
cityName: action.cityName,
|
|
259
|
+
districtName: action.districtName,
|
|
260
|
+
brandDTOS: action.brandDTOS,
|
|
261
|
+
lon: action.lon,
|
|
262
|
+
lat: action.lat
|
|
263
|
+
});
|
|
264
|
+
return appCall.call('getReservePrice', JSON.stringify(action));
|
|
265
|
+
},
|
|
266
|
+
// 解密商家电话
|
|
267
|
+
decryptAgencyPhone(action = {}) {
|
|
268
|
+
action = Object.assign({
|
|
269
|
+
shopId: action.shopId
|
|
270
|
+
});
|
|
271
|
+
return appCall.call('decryptAgencyPhone', JSON.stringify(action));
|
|
272
|
+
},
|
|
273
|
+
// 预约试驾
|
|
274
|
+
bookTestDrive(action = {}) {
|
|
275
|
+
action = Object.assign({
|
|
276
|
+
shopId: action.shopId,
|
|
277
|
+
shopName: action.shopName,
|
|
278
|
+
address: action.address,
|
|
279
|
+
latitude: action.latitude,
|
|
280
|
+
longitude: action.longitude,
|
|
281
|
+
city: action.city,
|
|
282
|
+
province: action.province,
|
|
283
|
+
typeId: action.typeId,
|
|
284
|
+
shopLevel: action.shopLevel,
|
|
285
|
+
mobile: action.mobile,
|
|
286
|
+
trialRunFlag: action.trialRunFlag,
|
|
287
|
+
provinceName: action.provinceName,
|
|
288
|
+
cityName: action.cityName,
|
|
289
|
+
districtName: action.districtName,
|
|
290
|
+
brandDTOS: action.brandDTOS,
|
|
291
|
+
lon: action.lon,
|
|
292
|
+
lat: action.lat
|
|
293
|
+
});
|
|
294
|
+
return appCall.call('bookTestDrive', JSON.stringify(action));
|
|
295
|
+
},
|
|
296
|
+
// 获取有赞accesstoken
|
|
297
|
+
getYZAccessToken() {
|
|
298
|
+
return appCall.call('getYZAccessToken');
|
|
299
|
+
},
|
|
300
|
+
// 调用App弹出分享组件
|
|
301
|
+
openShareLayer(type) {
|
|
302
|
+
return appCall.call('openShareLayer', type);
|
|
303
|
+
},
|
|
304
|
+
// 调用App弹出分享组件(新版本)
|
|
305
|
+
openNewShareLayer(type) {
|
|
306
|
+
return appCall.call('openNewShareLayer', type);
|
|
307
|
+
},
|
|
308
|
+
// 打开app发布车辆口碑页面
|
|
309
|
+
openCarScore(params) {
|
|
310
|
+
params = {
|
|
311
|
+
id: params.id,
|
|
312
|
+
carId: params.carId
|
|
313
|
+
};
|
|
314
|
+
return appCall.call('openCarScore', JSON.stringify(params), window.bridge.openCarScoreRelease);
|
|
315
|
+
},
|
|
316
|
+
// 分享功能
|
|
317
|
+
share(params = {}) {
|
|
318
|
+
const image = document.querySelectorAll('img')[2];
|
|
319
|
+
const shareParams = {
|
|
320
|
+
show: params.show === undefined || params.show === true,
|
|
321
|
+
title: params.title || config.projectName,
|
|
322
|
+
desc: params.desc || config.defaultDesc || `${config.projectName},摩托发烧友的交流的平台。`,
|
|
323
|
+
image: params.image ||
|
|
324
|
+
(image && image.src.replace('halomoto', 'http')) ||
|
|
325
|
+
config.defaultImage ||
|
|
326
|
+
`https://wap.${config.domain}/static/img/common/motuofan_small.png`,
|
|
327
|
+
url: fileToHttps(params.url || window.location.href),
|
|
328
|
+
eventId: params.eventId || '',
|
|
329
|
+
extend: params.extend || {},
|
|
330
|
+
pageId: params.pageId || '',
|
|
331
|
+
realityType: params.reality_type || '',
|
|
332
|
+
reality_type: params.reality_type || '',
|
|
333
|
+
reality_id: params.reality_id || '',
|
|
334
|
+
realityId: params.reality_id || ''
|
|
335
|
+
};
|
|
336
|
+
setTimeout(function () {
|
|
337
|
+
const reset = shareParams.title !== config.projectName || shareParams.show === false;
|
|
338
|
+
if (reset) {
|
|
339
|
+
post();
|
|
340
|
+
}
|
|
341
|
+
}, 100);
|
|
342
|
+
function post() {
|
|
343
|
+
const callback = isIOS ? window.bridge.shareSuccess : function () { };
|
|
344
|
+
return appCall.call('share', JSON.stringify(shareParams), callback);
|
|
345
|
+
}
|
|
346
|
+
},
|
|
347
|
+
// 分享(指定类型)
|
|
348
|
+
goShare(params) {
|
|
349
|
+
return appCall.call('goShare', JSON.stringify(params));
|
|
350
|
+
},
|
|
351
|
+
// 分享传base64
|
|
352
|
+
goShareImageData(params) {
|
|
353
|
+
return appCall.call('goShareImageData', JSON.stringify(params));
|
|
354
|
+
},
|
|
355
|
+
// 仅分享文本
|
|
356
|
+
shareText(params) {
|
|
357
|
+
return appCall.call('shareText', JSON.stringify(params));
|
|
358
|
+
},
|
|
359
|
+
// 分享活动
|
|
360
|
+
shareActivity(id) {
|
|
361
|
+
id = parseInt(String(id));
|
|
362
|
+
setTimeout(function () {
|
|
363
|
+
post();
|
|
364
|
+
}, 100);
|
|
365
|
+
function post() {
|
|
366
|
+
return appCall.call('shareActivity', id);
|
|
367
|
+
}
|
|
368
|
+
},
|
|
369
|
+
// 调用客户端举报(emotofine_wap, dronefine_wap)
|
|
370
|
+
report(params) {
|
|
371
|
+
return appCall.call('report', JSON.stringify(params));
|
|
372
|
+
},
|
|
373
|
+
// 车辆认证
|
|
374
|
+
vehicleCertification(params) {
|
|
375
|
+
if (params) {
|
|
376
|
+
return appCall.call('vehicleCertification', JSON.stringify(params), window.bridge.vehicleCertificationRelease);
|
|
377
|
+
}
|
|
378
|
+
else {
|
|
379
|
+
return appCall.call('vehicleCertification', window.bridge.vehicleCertificationRelease);
|
|
380
|
+
}
|
|
381
|
+
},
|
|
382
|
+
/**
|
|
383
|
+
* ios 打开上传图片,解决ios黑版本的选择图片问题,现已没有此问题,暂时不用
|
|
384
|
+
* type = all img\all 弹出上传图片或预览, img直接上传
|
|
385
|
+
* num = 1个数 ,限制 1
|
|
386
|
+
*/
|
|
387
|
+
iosOpenInput(params) {
|
|
388
|
+
return appCall.call('iosOpenInput', window.bridge.iosOpenInputRelease);
|
|
389
|
+
},
|
|
390
|
+
// 打开上传图片
|
|
391
|
+
getOSPhotosWithCount(params) {
|
|
392
|
+
if (isIOS) {
|
|
393
|
+
return appCall.call('getOSPhotosWithCount', JSON.stringify(params), window.bridge.getOSPhotosWithCountRelease);
|
|
394
|
+
}
|
|
395
|
+
else {
|
|
396
|
+
return appCall.call('getOSPhotosWithCount', JSON.stringify(params));
|
|
397
|
+
}
|
|
398
|
+
},
|
|
399
|
+
// 调用相机
|
|
400
|
+
setOSPhotosSelectType(params) {
|
|
401
|
+
return appCall.call('setOSPhotosSelectType', JSON.stringify(params));
|
|
402
|
+
},
|
|
403
|
+
// 调用原生评论
|
|
404
|
+
goToComment(params) {
|
|
405
|
+
return appCall.call('toComment', JSON.stringify(params), window.bridge.updataCircleRelease);
|
|
406
|
+
},
|
|
407
|
+
// 发送各种详情接口
|
|
408
|
+
informationData(detail) {
|
|
409
|
+
const me = appCall;
|
|
410
|
+
setTimeout(function () {
|
|
411
|
+
return me.call('informationData', JSON.stringify(detail), window.bridge.updataCircleRelease);
|
|
412
|
+
}, 100);
|
|
413
|
+
},
|
|
414
|
+
// 设置加密
|
|
415
|
+
setEncryption(params) {
|
|
416
|
+
appCall.allParamsToString(params);
|
|
417
|
+
return new Promise((resolve, reject) => {
|
|
418
|
+
window.bridge.setEncryptionRelease = function (sign) {
|
|
419
|
+
return resolve(sign);
|
|
420
|
+
};
|
|
421
|
+
appCall.call('setEncryption', JSON.stringify(params), window.bridge.setEncryptionRelease);
|
|
422
|
+
});
|
|
423
|
+
},
|
|
424
|
+
// 地图定位
|
|
425
|
+
mapNavigation(params) {
|
|
426
|
+
return appCall.call('mapNavigation', JSON.stringify(params));
|
|
427
|
+
},
|
|
428
|
+
// 展示地图导航
|
|
429
|
+
showMapNavigation(params) {
|
|
430
|
+
return appCall.call('showMapNavigation', JSON.stringify(params));
|
|
431
|
+
},
|
|
432
|
+
// 导航右侧区域功能
|
|
433
|
+
navigationRightArea(params) {
|
|
434
|
+
return appCall.call('navigationRightArea', JSON.stringify(params));
|
|
435
|
+
},
|
|
436
|
+
// 上传视频操作
|
|
437
|
+
uploadVideo(params) {
|
|
438
|
+
return appCall.call('uploadVideo', JSON.stringify(params), window.bridge.uploadVideoRelease);
|
|
439
|
+
},
|
|
440
|
+
// 调用app的选择省市
|
|
441
|
+
getProvinces(params) {
|
|
442
|
+
return appCall.call('getProvinces', JSON.stringify(params), window.bridge.provincesRelease);
|
|
443
|
+
},
|
|
444
|
+
// 开启系统定位权限
|
|
445
|
+
setLocationPermission() {
|
|
446
|
+
return appCall.call('locationPermission', window.bridge.locationPermissionRelease);
|
|
447
|
+
},
|
|
448
|
+
// 通知app发送时长埋点
|
|
449
|
+
postDurationTack(params) {
|
|
450
|
+
const me = appCall;
|
|
451
|
+
setTimeout(() => {
|
|
452
|
+
return me.call('postDurationTack', JSON.stringify(params));
|
|
453
|
+
}, 100);
|
|
454
|
+
},
|
|
455
|
+
// 跳转私信详情页面
|
|
456
|
+
goPersonalLetter(params) {
|
|
457
|
+
return appCall.call('goPersonalLetter', JSON.stringify(params));
|
|
458
|
+
},
|
|
459
|
+
// 发送通知消息
|
|
460
|
+
notificationMessage(params) {
|
|
461
|
+
return appCall.call('notificationMessage', JSON.stringify(params));
|
|
462
|
+
},
|
|
463
|
+
// 发送消息,告知app已经是安全官
|
|
464
|
+
setSafetyStatus() {
|
|
465
|
+
return appCall.call('setSafetyStatus');
|
|
466
|
+
},
|
|
467
|
+
// 发送消息,让app刷新商城列表
|
|
468
|
+
setRefreshShopOrder() {
|
|
469
|
+
return appCall.call('refreshShopOrder');
|
|
470
|
+
},
|
|
471
|
+
// 调app激励抽奖
|
|
472
|
+
requestAdvideo(action = {}) {
|
|
473
|
+
return appCall.call('requestAdvideo', JSON.stringify(action), window.bridge.adVideoPlayedRelease);
|
|
474
|
+
},
|
|
475
|
+
// 打开外部商品链接
|
|
476
|
+
openMall(action = {}) {
|
|
477
|
+
return appCall.call('openMall', JSON.stringify(action));
|
|
478
|
+
},
|
|
479
|
+
// 一口价客服
|
|
480
|
+
priceCustomerService(params = {}) {
|
|
481
|
+
return appCall.call('priceCustomerService', JSON.stringify(params));
|
|
482
|
+
},
|
|
483
|
+
// 商家微信复制弹框
|
|
484
|
+
shopWechat(params = {}) {
|
|
485
|
+
return appCall.call('shopWechat', JSON.stringify(params));
|
|
486
|
+
},
|
|
487
|
+
// 获取活动广告留资信息
|
|
488
|
+
getQueryInfo(callback) {
|
|
489
|
+
function _callback(data) {
|
|
490
|
+
if (data) {
|
|
491
|
+
data = JSON.parse(data) || '';
|
|
492
|
+
}
|
|
493
|
+
if (typeof callback === 'function') {
|
|
494
|
+
callback(data);
|
|
495
|
+
}
|
|
496
|
+
}
|
|
497
|
+
window.bridge.getQueryInfoCallback = _callback;
|
|
498
|
+
return appCall.call('getQueryInfo', isIOS ? _callback : window.bridge.getQueryInfoCallback);
|
|
499
|
+
},
|
|
500
|
+
// 保存活动广告留资信息
|
|
501
|
+
saveQueryInfo(params) {
|
|
502
|
+
params.mobile = (params.mobile || '') + '';
|
|
503
|
+
return appCall.call('saveQueryInfo', JSON.stringify(params));
|
|
504
|
+
},
|
|
505
|
+
// 跳转到发布文章
|
|
506
|
+
jumpToReleaseStory(params = {}) {
|
|
507
|
+
return params.actId || params.type === 'article_detail'
|
|
508
|
+
? appCall.call('jumpToReleaseStory', JSON.stringify(params))
|
|
509
|
+
: appCall.call('jumpToReleaseStory');
|
|
510
|
+
},
|
|
511
|
+
// 跳转到发布文章(ugc 活动)
|
|
512
|
+
jumpToReleaseStoryUgc(params = {}) {
|
|
513
|
+
return appCall.call('jumpToReleaseStoryUgc', JSON.stringify(params), window.bridge.handleUGCRefreshPageEvent);
|
|
514
|
+
},
|
|
515
|
+
// 跳转到发布视频
|
|
516
|
+
jumpToReleaseVideo(params = {}) {
|
|
517
|
+
return appCall.call('jumpToReleaseVideo', JSON.stringify(params));
|
|
518
|
+
},
|
|
519
|
+
/**
|
|
520
|
+
* 改变电池栏颜色
|
|
521
|
+
* type(1、黑色;2、白色)
|
|
522
|
+
*/
|
|
523
|
+
changeStatusBarColor(params = {}) {
|
|
524
|
+
return appCall.call('changeStatusBarColor', JSON.stringify(params));
|
|
525
|
+
},
|
|
526
|
+
// 增长官返回页面
|
|
527
|
+
navigationGrowOfficer() {
|
|
528
|
+
return appCall.call('navigationGrowOfficer');
|
|
529
|
+
},
|
|
530
|
+
// 跳转到商城
|
|
531
|
+
navigationMall() {
|
|
532
|
+
return appCall.call('navigationMall');
|
|
533
|
+
},
|
|
534
|
+
// 跳转到能量兑换商城(emotofine_wap, dronefine_wap)
|
|
535
|
+
navigationEnergyMall() {
|
|
536
|
+
return appCall.call('energy-mall');
|
|
537
|
+
},
|
|
538
|
+
// 跳转到优惠券
|
|
539
|
+
navigationCoupon(params = {}) {
|
|
540
|
+
return appCall.call('navigationCoupon', JSON.stringify(params));
|
|
541
|
+
},
|
|
542
|
+
// 订单地址选择页面
|
|
543
|
+
navigationSelectAddress(callback) {
|
|
544
|
+
function _callback(data) {
|
|
545
|
+
if (data) {
|
|
546
|
+
data = JSON.parse(data) || '';
|
|
547
|
+
}
|
|
548
|
+
if (typeof callback === 'function') {
|
|
549
|
+
callback(data);
|
|
550
|
+
}
|
|
551
|
+
}
|
|
552
|
+
window.bridge.selectAddressRelease = _callback;
|
|
553
|
+
return appCall.call('navigationSelectAddress', window.bridge.selectAddressRelease);
|
|
554
|
+
},
|
|
555
|
+
// 直播活动页
|
|
556
|
+
liveSignResultCall(params = {}) {
|
|
557
|
+
return appCall.call('liveSignResultCall', JSON.stringify(params));
|
|
558
|
+
},
|
|
559
|
+
// 物流跟踪页
|
|
560
|
+
navigationDelivery(params = '') {
|
|
561
|
+
return appCall.call('navigationDelivery', params);
|
|
562
|
+
},
|
|
563
|
+
// 文章详情桥
|
|
564
|
+
articleHtmlAction(action = {}, callback) {
|
|
565
|
+
Object.assign((window.bridge = window.bridge || {}), {
|
|
566
|
+
articleHtmlActionCallback(res) {
|
|
567
|
+
if (typeof callback === 'function') {
|
|
568
|
+
callback(res);
|
|
569
|
+
}
|
|
570
|
+
}
|
|
571
|
+
});
|
|
572
|
+
appCall.alert(JSON.stringify(action));
|
|
573
|
+
return appCall.call('articleHtmlAction', JSON.stringify(action), window.bridge.articleHtmlActionCallback);
|
|
574
|
+
},
|
|
575
|
+
// 获取离线包版本号
|
|
576
|
+
getOfflinePackageVersion(action = {}, callback) {
|
|
577
|
+
Object.assign((window.bridge = window.bridge || {}), {
|
|
578
|
+
getOfflinePackageVersionCallback(res) {
|
|
579
|
+
if (typeof callback === 'function') {
|
|
580
|
+
callback(res);
|
|
581
|
+
}
|
|
582
|
+
}
|
|
583
|
+
});
|
|
584
|
+
return appCall.call('getOfflinePackageVersion', JSON.stringify(action), window.bridge.getOfflinePackageVersionCallback);
|
|
585
|
+
},
|
|
586
|
+
// 获取无人机题目
|
|
587
|
+
getDroneEmList(parmas, callback) {
|
|
588
|
+
let clientParse = (params, defaultValue = '{}') => {
|
|
589
|
+
return typeof params === 'object'
|
|
590
|
+
? params
|
|
591
|
+
: JSON.parse(params || defaultValue);
|
|
592
|
+
};
|
|
593
|
+
Object.assign(window.bridge || {}, {
|
|
594
|
+
getDroneEmListCallback(res = {}) {
|
|
595
|
+
callback && callback(clientParse(res, '[]'));
|
|
596
|
+
}
|
|
597
|
+
});
|
|
598
|
+
return appCall.call('getDroneEmList', JSON.stringify(parmas), window.bridge.getDroneEmListCallback);
|
|
599
|
+
},
|
|
600
|
+
// 跳转android,打开新的webview(refitting特有)
|
|
601
|
+
toRefitWebView(params) {
|
|
602
|
+
return appCall.call('toRefitWebView', JSON.stringify(params));
|
|
603
|
+
},
|
|
604
|
+
// 实人认证跳转
|
|
605
|
+
navigateRealPersonCertification(action = {}) {
|
|
606
|
+
let version = config.projectName === '摩托范' ? '3.54.00' : '1.0.0';
|
|
607
|
+
const isVersion = appCall.isAppVersionGreatThan?.(version);
|
|
608
|
+
return isVersion
|
|
609
|
+
? appCall.call('navigateRealPersonCertification', JSON.stringify(action))
|
|
610
|
+
: appCall.call('navigateRealPersonCertification');
|
|
611
|
+
},
|
|
612
|
+
// 巡查官举报二手车成功
|
|
613
|
+
secondHandReporterComplete() {
|
|
614
|
+
return appCall.call('secondHandReporterComplete');
|
|
615
|
+
},
|
|
616
|
+
// 浏览记录记录数量
|
|
617
|
+
viewHistoryCount(day) {
|
|
618
|
+
return appCall.call('viewHistoryCount', day, window.bridge.viewHistoryCountRelease);
|
|
619
|
+
},
|
|
620
|
+
// 搜索记录数量
|
|
621
|
+
searchHistoryCount() {
|
|
622
|
+
return appCall.call('searchHistoryCount', window.bridge.searchHistoryCountRelease);
|
|
623
|
+
},
|
|
624
|
+
// 摩宁定位导航
|
|
625
|
+
mnPositionNavigation(params = {}) {
|
|
626
|
+
return appCall.call('mnPositionNavigation', JSON.stringify(params));
|
|
627
|
+
},
|
|
628
|
+
// 摩宁选址
|
|
629
|
+
mnSiteSelection(params = {}) {
|
|
630
|
+
return appCall.call('mnSiteSelection', JSON.stringify(params), window.bridge.mnSiteSelection);
|
|
631
|
+
},
|
|
632
|
+
// 跳转小程序
|
|
633
|
+
jumpApplet(url = '') {
|
|
634
|
+
return appCall.call('jumpApplet', url);
|
|
635
|
+
},
|
|
636
|
+
// 摩宁地图展示定位
|
|
637
|
+
mnPositionSelection(params = {}) {
|
|
638
|
+
return appCall.call('mnPositionSelection', JSON.stringify(params), window.bridge.mnPositionSelection);
|
|
639
|
+
},
|
|
640
|
+
// 点评官调到摩友圈桥
|
|
641
|
+
commentOfficerTab(params = '') {
|
|
642
|
+
return appCall.call('commentOfficerTab', params);
|
|
643
|
+
},
|
|
644
|
+
// 跳转到骑行路线发布
|
|
645
|
+
jumpCyclingRoute(params = '') {
|
|
646
|
+
return appCall.call('jumpCyclingRoute', params);
|
|
647
|
+
},
|
|
648
|
+
// 跳转到打卡点发布
|
|
649
|
+
jumpPunchPoint(params = '') {
|
|
650
|
+
return appCall.call('jumpPunchPoint', params);
|
|
651
|
+
},
|
|
652
|
+
// 开启监听返回的桥
|
|
653
|
+
interactivePopEnable(params = 2) {
|
|
654
|
+
return appCall.call('interactivePopEnable', params, window.bridge.interactivePopEnableRelease);
|
|
655
|
+
},
|
|
656
|
+
// ios开启监听返回的桥
|
|
657
|
+
interactiveSideslip(params = 2) {
|
|
658
|
+
return appCall.call('interactiveSideslip', params);
|
|
659
|
+
},
|
|
660
|
+
// 取持久化存储
|
|
661
|
+
getStoreKey(params, callback) {
|
|
662
|
+
Object.assign((window.bridge = window.bridge || {}), {
|
|
663
|
+
getStoreKeyCallback(res) {
|
|
664
|
+
if (typeof callback === 'function') {
|
|
665
|
+
callback(res);
|
|
666
|
+
}
|
|
667
|
+
}
|
|
668
|
+
});
|
|
669
|
+
appCall.call('getStoreKey', params, window.bridge.getStoreKeyCallback);
|
|
670
|
+
},
|
|
671
|
+
// 持久化存储
|
|
672
|
+
setStoreKeyValue(params, callback) {
|
|
673
|
+
Object.assign((window.bridge = window.bridge || {}), {
|
|
674
|
+
setStoreKeyValueCallback(res) {
|
|
675
|
+
if (typeof callback === 'function') {
|
|
676
|
+
callback(res);
|
|
677
|
+
}
|
|
678
|
+
}
|
|
679
|
+
});
|
|
680
|
+
appCall.call('setStoreKeyValue', JSON.stringify(params), window.bridge.setStoreKeyValueCallback);
|
|
681
|
+
},
|
|
682
|
+
// 选择图片信息
|
|
683
|
+
selectImageToUpload(callback) {
|
|
684
|
+
Object.assign((window.bridge = window.bridge || {}), {
|
|
685
|
+
selectImageToUploadCallback(res) {
|
|
686
|
+
if (typeof callback === 'function') {
|
|
687
|
+
callback(res);
|
|
688
|
+
}
|
|
689
|
+
}
|
|
690
|
+
});
|
|
691
|
+
appCall.call('selectImageToUpload', window.bridge.selectImageToUploadCallback);
|
|
692
|
+
},
|
|
693
|
+
// 图片上传完返回信息
|
|
694
|
+
uploadImageFinish(params) {
|
|
695
|
+
appCall.call('uploadImageFinish', JSON.stringify(params));
|
|
696
|
+
},
|
|
697
|
+
// ========== 信息接口 ==========
|
|
698
|
+
// bridge请求
|
|
699
|
+
request(params) {
|
|
700
|
+
if (!params.url)
|
|
701
|
+
throw new Error('url不能为空');
|
|
702
|
+
params.method = params.method || 'get';
|
|
703
|
+
params.hash = params.hash || Date.now();
|
|
704
|
+
const requestCallback = `${params.hash}RequestCallback`;
|
|
705
|
+
Object.assign((window.bridge = window.bridge || {}), {
|
|
706
|
+
[requestCallback](res) {
|
|
707
|
+
console.log(requestCallback, res);
|
|
708
|
+
if (typeof res === 'string') {
|
|
709
|
+
try {
|
|
710
|
+
// 使用 replaceJsonValue 处理特殊字符
|
|
711
|
+
const processedRes = appCall.replaceJsonValue?.(res) || res;
|
|
712
|
+
res = JSON.parse(processedRes) || {};
|
|
713
|
+
if (!res.code && res.code !== 0) {
|
|
714
|
+
appCall.alert(res.msg || 'bridge请求失败');
|
|
715
|
+
}
|
|
716
|
+
}
|
|
717
|
+
catch (error) {
|
|
718
|
+
console.log(error.message);
|
|
719
|
+
appCall.alert(error.message || 'bridge请求异常');
|
|
720
|
+
}
|
|
721
|
+
}
|
|
722
|
+
if (typeof params.callback === 'function') {
|
|
723
|
+
params.callback(res);
|
|
724
|
+
}
|
|
725
|
+
}
|
|
726
|
+
});
|
|
727
|
+
return appCall.call('request', JSON.stringify({ ...params }), window.bridge[requestCallback]);
|
|
728
|
+
},
|
|
729
|
+
// 替换JSON值中的特殊字符
|
|
730
|
+
replaceJsonValue(str) {
|
|
731
|
+
const meta = {
|
|
732
|
+
'\b': '\\b',
|
|
733
|
+
'\t': '\\t',
|
|
734
|
+
'\n': '\\n',
|
|
735
|
+
'\f': '\\f',
|
|
736
|
+
'\r': '\\r'
|
|
737
|
+
};
|
|
738
|
+
return String(str).replace(/[\b\t\n\f\r]/g, function (s) {
|
|
739
|
+
return meta[s];
|
|
740
|
+
});
|
|
741
|
+
},
|
|
742
|
+
// 获取用户信息
|
|
743
|
+
getUserData(callback) {
|
|
744
|
+
window.bridge = window.bridge || {};
|
|
745
|
+
window.bridge.getUserDataCallback = function getUserDataCallback(data) {
|
|
746
|
+
if (showTip && window.Toast) {
|
|
747
|
+
window.Toast({
|
|
748
|
+
position: 'bottom',
|
|
749
|
+
message: 'setUserinfo:' + JSON.stringify(data)
|
|
750
|
+
});
|
|
751
|
+
}
|
|
752
|
+
const token = window.localStorage?.token || '';
|
|
753
|
+
if (config.setUserinfo) {
|
|
754
|
+
config.setUserinfo(data);
|
|
755
|
+
}
|
|
756
|
+
const newToken = window.localStorage?.token || '';
|
|
757
|
+
if (newToken && token !== newToken) {
|
|
758
|
+
return window.location.reload();
|
|
759
|
+
}
|
|
760
|
+
if (typeof callback === 'function') {
|
|
761
|
+
callback(data);
|
|
762
|
+
}
|
|
763
|
+
};
|
|
764
|
+
return appCall.call('getUserData', window.bridge.getUserDataCallback);
|
|
765
|
+
},
|
|
766
|
+
// 鸿蒙系统获取用户数据
|
|
767
|
+
getUserDataDriving(callback) {
|
|
768
|
+
if (window.isHarmonyos) {
|
|
769
|
+
window.bridge = window.bridge || {};
|
|
770
|
+
window.bridge.getUserDataCallback = function getUserDataCallback(data) {
|
|
771
|
+
if (config.setUserinfo) {
|
|
772
|
+
config.setUserinfo(data);
|
|
773
|
+
}
|
|
774
|
+
if (typeof callback === 'function') {
|
|
775
|
+
callback(data);
|
|
776
|
+
}
|
|
777
|
+
};
|
|
778
|
+
return appCall.call('getUserDataDriving', window.bridge.getUserDataCallback);
|
|
779
|
+
}
|
|
780
|
+
},
|
|
781
|
+
// 获取app信息
|
|
782
|
+
getDeviceData(callback) {
|
|
783
|
+
const _callback = (data) => {
|
|
784
|
+
// 直接使用已初始化的全局变量
|
|
785
|
+
if (data) {
|
|
786
|
+
if (window.isIOS) {
|
|
787
|
+
data = data.replace(/\n/g, '').replace(/\s*/g, '');
|
|
788
|
+
}
|
|
789
|
+
try {
|
|
790
|
+
data = JSON.parse(data || '{}');
|
|
791
|
+
if (config.env) {
|
|
792
|
+
const env = config.env;
|
|
793
|
+
if (data.bundleId === env.emotofineBundleId) {
|
|
794
|
+
;
|
|
795
|
+
window.isEmotofine = true;
|
|
796
|
+
}
|
|
797
|
+
if (data.bundleId === env.dronefineBundleId) {
|
|
798
|
+
;
|
|
799
|
+
window.isdronefine = true;
|
|
800
|
+
}
|
|
801
|
+
}
|
|
802
|
+
window.localStorage?.setItem('deviceData', JSON.stringify(data));
|
|
803
|
+
console.log('deviceData', data);
|
|
804
|
+
}
|
|
805
|
+
catch (e) {
|
|
806
|
+
console.error('parse deviceData error:', e);
|
|
807
|
+
}
|
|
808
|
+
}
|
|
809
|
+
if (typeof callback === 'function') {
|
|
810
|
+
callback(data);
|
|
811
|
+
}
|
|
812
|
+
};
|
|
813
|
+
return appCall.call('getDeviceData', _callback);
|
|
814
|
+
},
|
|
815
|
+
// 获取app定位信息
|
|
816
|
+
getLocation(params = {}) {
|
|
817
|
+
let version = config.projectName === '摩托范' ? '3.2.1' : '1.0.0';
|
|
818
|
+
params.needPermission = params.needPermission !== undefined ? params.needPermission : 1;
|
|
819
|
+
setTimeout(() => {
|
|
820
|
+
return appCall.isAppVersionGreatThan?.(version)
|
|
821
|
+
? appCall.call('getLocation', JSON.stringify(params), window.bridge.getLocationCallback)
|
|
822
|
+
: appCall.call('getLocation', window.bridge.getLocationCallback);
|
|
823
|
+
}, 300);
|
|
824
|
+
},
|
|
825
|
+
// 获取客户端平台(1=Android,2=iOS,3=WAP,31=鸿蒙)
|
|
826
|
+
getAppPlatform() {
|
|
827
|
+
if (!window.isClient) {
|
|
828
|
+
return 3;
|
|
829
|
+
}
|
|
830
|
+
if (appCall.platform) {
|
|
831
|
+
return appCall.platform;
|
|
832
|
+
}
|
|
833
|
+
// 直接使用已初始化的全局变量
|
|
834
|
+
;
|
|
835
|
+
appCall.platform = window.isAndroid
|
|
836
|
+
? 1
|
|
837
|
+
: window.isHarmonyos
|
|
838
|
+
? 31
|
|
839
|
+
: 2;
|
|
840
|
+
return appCall.platform;
|
|
841
|
+
},
|
|
842
|
+
// 获取客户端包名
|
|
843
|
+
getAppPackage() {
|
|
844
|
+
if (!window.isClient) {
|
|
845
|
+
return;
|
|
846
|
+
}
|
|
847
|
+
if (appCall.package) {
|
|
848
|
+
return appCall.package;
|
|
849
|
+
}
|
|
850
|
+
const ua = navigator.userAgent;
|
|
851
|
+
if (ua.indexOf('package=') === -1) {
|
|
852
|
+
return;
|
|
853
|
+
}
|
|
854
|
+
;
|
|
855
|
+
appCall.package = ua.replace(/.*package=([\w.|+|2%]+).*/g, '$1');
|
|
856
|
+
appCall.package = appCall.package === ua ? '未知' : appCall.package;
|
|
857
|
+
return appCall.package;
|
|
858
|
+
},
|
|
859
|
+
// 获取客户端版本号
|
|
860
|
+
getAppVersion() {
|
|
861
|
+
if (!window.isClient) {
|
|
862
|
+
return;
|
|
863
|
+
}
|
|
864
|
+
if (appCall.version) {
|
|
865
|
+
return appCall.version;
|
|
866
|
+
}
|
|
867
|
+
const ua = navigator.userAgent.toLowerCase();
|
|
868
|
+
appCall.version = ua.replace(/.*version=([\d.]+).*/g, '$1');
|
|
869
|
+
if (appCall.version.length > 13) {
|
|
870
|
+
;
|
|
871
|
+
appCall.version = config.env.VERSION || '';
|
|
872
|
+
}
|
|
873
|
+
return appCall.version;
|
|
874
|
+
},
|
|
875
|
+
// 判断当前版本号是否大于等于传入版本号
|
|
876
|
+
isAppVersionGreatThan(version) {
|
|
877
|
+
const ua = navigator.userAgent.toLowerCase();
|
|
878
|
+
let appVersion = ua.replace(/.*version=([\d.]+).*/g, '$1');
|
|
879
|
+
if (appVersion.length > 9) {
|
|
880
|
+
return false;
|
|
881
|
+
}
|
|
882
|
+
const versionParts = version.split('.').map(Number);
|
|
883
|
+
const appVersionParts = appVersion.split('.').map(Number);
|
|
884
|
+
for (let i = 0; i < Math.max(versionParts.length, appVersionParts.length); i++) {
|
|
885
|
+
const appPart = appVersionParts[i] || 0;
|
|
886
|
+
const verPart = versionParts[i] || 0;
|
|
887
|
+
if (appPart > verPart)
|
|
888
|
+
return true;
|
|
889
|
+
if (appPart < verPart)
|
|
890
|
+
return false;
|
|
891
|
+
}
|
|
892
|
+
return true;
|
|
893
|
+
},
|
|
894
|
+
// 设置导航栏顶部颜色
|
|
895
|
+
setStatusBarColor(color) {
|
|
896
|
+
return appCall.call('setStatusBarColor', color || '#FFFFFF');
|
|
897
|
+
},
|
|
898
|
+
// 商城,调用客服
|
|
899
|
+
haloMallCustomer() {
|
|
900
|
+
return appCall.call('haloMallCustomer');
|
|
901
|
+
},
|
|
902
|
+
// 商城客服
|
|
903
|
+
launchEmallMiniProgramWithUrl(data) {
|
|
904
|
+
return appCall.call('launchEmallMiniProgramWithUrl', JSON.stringify(data));
|
|
905
|
+
},
|
|
906
|
+
// 商城客服 老版本
|
|
907
|
+
launchEmallMiniProgram() {
|
|
908
|
+
return appCall.call('launchEmallMiniProgram');
|
|
909
|
+
},
|
|
910
|
+
// 改横屏切换
|
|
911
|
+
changeOrientation(params) {
|
|
912
|
+
return appCall.call('changeOrientation', params);
|
|
913
|
+
},
|
|
914
|
+
// 检测是否切换后台、是否黑屏;切出、切入APP进行通知
|
|
915
|
+
watchInOut(type) {
|
|
916
|
+
return window.bridge.watchInOutCallback
|
|
917
|
+
? appCall.call('watchInOut', type, window.bridge.watchInOutCallback)
|
|
918
|
+
: appCall.call('watchInOut', type);
|
|
919
|
+
},
|
|
920
|
+
// 是否有网络(0否 1是)
|
|
921
|
+
hasNetwork() {
|
|
922
|
+
return new Promise((resolve, reject) => {
|
|
923
|
+
Object.assign((window.bridge = window.bridge || {}), {
|
|
924
|
+
hasNetworkCallback(res) {
|
|
925
|
+
resolve(res);
|
|
926
|
+
}
|
|
927
|
+
});
|
|
928
|
+
appCall.call('hasNetwork', window.bridge.hasNetworkCallback);
|
|
929
|
+
});
|
|
930
|
+
},
|
|
931
|
+
// 埋点
|
|
932
|
+
sendEventMsg({ eId, eventContent }) {
|
|
933
|
+
return new Promise((resolve, reject) => {
|
|
934
|
+
Object.assign((window.bridge = window.bridge || {}), {
|
|
935
|
+
sendEventMsgCallback(res) {
|
|
936
|
+
resolve(res);
|
|
937
|
+
}
|
|
938
|
+
});
|
|
939
|
+
appCall.call('sendEventMsg', JSON.stringify({
|
|
940
|
+
eId,
|
|
941
|
+
eventContent
|
|
942
|
+
}), window.bridge.sendEventMsgCallback);
|
|
943
|
+
});
|
|
944
|
+
},
|
|
945
|
+
// 是否存在新题库
|
|
946
|
+
hasNewQuestions(callback) {
|
|
947
|
+
Object.assign((window.bridge = window.bridge || {}), {
|
|
948
|
+
hasNewQuestionsCallback(res) {
|
|
949
|
+
if (typeof callback === 'function') {
|
|
950
|
+
callback(res);
|
|
951
|
+
}
|
|
952
|
+
}
|
|
953
|
+
});
|
|
954
|
+
return appCall.call('hasNewQuestions', window.bridge.hasNewQuestionsCallback);
|
|
955
|
+
},
|
|
956
|
+
// 更新题库
|
|
957
|
+
updateQuestions(params, callback) {
|
|
958
|
+
Object.assign((window.bridge = window.bridge || {}), {
|
|
959
|
+
updateQuestionsCallback(res) {
|
|
960
|
+
if (typeof callback === 'function') {
|
|
961
|
+
callback(res);
|
|
962
|
+
}
|
|
963
|
+
}
|
|
964
|
+
});
|
|
965
|
+
return appCall.call('updateQuestions', JSON.stringify(params), window.bridge.updateQuestionsCallback);
|
|
966
|
+
},
|
|
967
|
+
// 跳转个人主页
|
|
968
|
+
goPersonPage(params) {
|
|
969
|
+
return appCall.call('goPersonPage', JSON.stringify(params));
|
|
970
|
+
},
|
|
971
|
+
// 评论详情
|
|
972
|
+
goCommentDetail(params) {
|
|
973
|
+
return appCall.call('goCommentDetail', JSON.stringify(params));
|
|
974
|
+
},
|
|
975
|
+
// 举报评论
|
|
976
|
+
reportComment(params) {
|
|
977
|
+
return appCall.call('reportComment', JSON.stringify(params));
|
|
978
|
+
},
|
|
979
|
+
// 获取驾考题库图片
|
|
980
|
+
getDrivingTestImage(params = { item: { _id: '' } }, callback) {
|
|
981
|
+
const requestCallback = `getDrivingTestImage${params.item._id}Callback`;
|
|
982
|
+
Object.assign((window.bridge = window.bridge || {}), {
|
|
983
|
+
[requestCallback](res) {
|
|
984
|
+
const base64Img = res.includes('base64') ? res : `data:image/jpg;base64,${res}`;
|
|
985
|
+
params.item.pic = base64Img;
|
|
986
|
+
if (typeof callback === 'function') {
|
|
987
|
+
callback(base64Img);
|
|
988
|
+
}
|
|
989
|
+
}
|
|
990
|
+
});
|
|
991
|
+
params.item = params.item || { _id: '' };
|
|
992
|
+
return appCall.call('getDrivingTestImage', params.item._id, window.bridge[requestCallback]);
|
|
993
|
+
},
|
|
994
|
+
// 驾校报名-我的反馈
|
|
995
|
+
drivetestFeedbackAction(params) {
|
|
996
|
+
return appCall.call('drivetest_feedback_action', JSON.stringify(params));
|
|
997
|
+
},
|
|
998
|
+
// 驾校报名-联系客服
|
|
999
|
+
drivetestContactService(params) {
|
|
1000
|
+
return appCall.call('drivetest_contact_service', JSON.stringify(params));
|
|
1001
|
+
},
|
|
1002
|
+
// 驾校报名-证照信息
|
|
1003
|
+
drivetestDealerCredentials(params) {
|
|
1004
|
+
return appCall.call('drivetest_dealer_credentials', JSON.stringify(params));
|
|
1005
|
+
},
|
|
1006
|
+
// 驾校报名-驾校微信打电话线索
|
|
1007
|
+
drivetestWechatAndCall(params) {
|
|
1008
|
+
return appCall.call('drivetest_wechat_and_call', JSON.stringify(params));
|
|
1009
|
+
},
|
|
1010
|
+
// 是否登录
|
|
1011
|
+
boolIsLogin(callback) {
|
|
1012
|
+
Object.assign((window.bridge = window.bridge || {}), {
|
|
1013
|
+
boolIsLoginCallback(res) {
|
|
1014
|
+
if (typeof callback === 'function') {
|
|
1015
|
+
callback(res);
|
|
1016
|
+
}
|
|
1017
|
+
}
|
|
1018
|
+
});
|
|
1019
|
+
return appCall.call('hasLogin', window.bridge.boolIsLoginCallback);
|
|
1020
|
+
},
|
|
1021
|
+
// 未登录跳转登录页
|
|
1022
|
+
loginSucessGoon(callback) {
|
|
1023
|
+
Object.assign((window.bridge = window.bridge || {}), {
|
|
1024
|
+
loginSucessGoonCallback(res) {
|
|
1025
|
+
if (typeof callback === 'function') {
|
|
1026
|
+
callback(res);
|
|
1027
|
+
}
|
|
1028
|
+
}
|
|
1029
|
+
});
|
|
1030
|
+
return appCall.call('loginSucessGoon', window.bridge.loginSucessGoonCallback);
|
|
1031
|
+
},
|
|
1032
|
+
// 驾校报名-获取用户缓存信息
|
|
1033
|
+
drivetestGetQueryInfo(callback) {
|
|
1034
|
+
Object.assign((window.bridge = window.bridge || {}), {
|
|
1035
|
+
getQueryInfoCallback(res) {
|
|
1036
|
+
if (typeof callback === 'function') {
|
|
1037
|
+
callback(res);
|
|
1038
|
+
}
|
|
1039
|
+
}
|
|
1040
|
+
});
|
|
1041
|
+
return appCall.call('getQueryInfo', window.bridge.getQueryInfoCallback);
|
|
1042
|
+
},
|
|
1043
|
+
// 一键绑定手机
|
|
1044
|
+
drivertestOneKeyBlindMobile(callback) {
|
|
1045
|
+
Object.assign((window.bridge = window.bridge || {}), {
|
|
1046
|
+
drivertestOneKeyBlindMobileCallback(res) {
|
|
1047
|
+
if (typeof callback === 'function') {
|
|
1048
|
+
callback(res);
|
|
1049
|
+
}
|
|
1050
|
+
}
|
|
1051
|
+
});
|
|
1052
|
+
return appCall.call('drivertest_OneKeyBlindMobile', window.bridge.drivertestOneKeyBlindMobileCallback);
|
|
1053
|
+
},
|
|
1054
|
+
// 价格协议默认
|
|
1055
|
+
priceProtocolDefault(callback) {
|
|
1056
|
+
Object.assign((window.bridge = window.bridge || {}), {
|
|
1057
|
+
priceProtocolDefaultCallback(res) {
|
|
1058
|
+
if (typeof callback === 'function') {
|
|
1059
|
+
callback(res);
|
|
1060
|
+
}
|
|
1061
|
+
}
|
|
1062
|
+
});
|
|
1063
|
+
return appCall.call('price_protocol_default', window.bridge.priceProtocolDefaultCallback);
|
|
1064
|
+
},
|
|
1065
|
+
// 获取车库位置
|
|
1066
|
+
getGarageLocation(callback) {
|
|
1067
|
+
Object.assign((window.bridge = window.bridge || {}), {
|
|
1068
|
+
getGarageLocationCallback(res) {
|
|
1069
|
+
if (typeof callback === 'function') {
|
|
1070
|
+
callback(res);
|
|
1071
|
+
}
|
|
1072
|
+
}
|
|
1073
|
+
});
|
|
1074
|
+
return appCall.call('getGarageLocation', window.bridge.getGarageLocationCallback);
|
|
1075
|
+
},
|
|
1076
|
+
// 驾校报名-获取广告和业务数据
|
|
1077
|
+
drivetestGetAdAndBuinessData(params, callback) {
|
|
1078
|
+
Object.assign((window.bridge = window.bridge || {}), {
|
|
1079
|
+
drivetestGetAdAndBuinessDataCallback(res) {
|
|
1080
|
+
if (typeof callback === 'function') {
|
|
1081
|
+
callback(res);
|
|
1082
|
+
}
|
|
1083
|
+
}
|
|
1084
|
+
});
|
|
1085
|
+
return appCall.call('drivetest_getAdAndBuinessData', JSON.stringify(params), window.bridge.drivetestGetAdAndBuinessDataCallback);
|
|
1086
|
+
},
|
|
1087
|
+
// 检查定位是否启用
|
|
1088
|
+
checkLocationEnable(callback) {
|
|
1089
|
+
Object.assign((window.bridge = window.bridge || {}), {
|
|
1090
|
+
checkLocationEnableCallback(res) {
|
|
1091
|
+
if (typeof callback === 'function') {
|
|
1092
|
+
callback(res);
|
|
1093
|
+
}
|
|
1094
|
+
}
|
|
1095
|
+
});
|
|
1096
|
+
return appCall.call('checkLocationEnable', window.bridge.checkLocationEnableCallback);
|
|
1097
|
+
},
|
|
1098
|
+
// 检查定位权限
|
|
1099
|
+
checkLocationPermission(callback) {
|
|
1100
|
+
Object.assign((window.bridge = window.bridge || {}), {
|
|
1101
|
+
checkLocationPermissionCallback(res) {
|
|
1102
|
+
if (typeof callback === 'function') {
|
|
1103
|
+
callback(res);
|
|
1104
|
+
}
|
|
1105
|
+
}
|
|
1106
|
+
});
|
|
1107
|
+
return appCall.call('checkLocationPermission', window.bridge.checkLocationPermissionCallback);
|
|
1108
|
+
},
|
|
1109
|
+
// 跳转到定位设置
|
|
1110
|
+
jumpToLocationSetting(callback) {
|
|
1111
|
+
Object.assign((window.bridge = window.bridge || {}), {
|
|
1112
|
+
jumpToLocationSettingCallback(res) {
|
|
1113
|
+
if (typeof callback === 'function') {
|
|
1114
|
+
callback(res);
|
|
1115
|
+
}
|
|
1116
|
+
}
|
|
1117
|
+
});
|
|
1118
|
+
return appCall.call('jumpToLocationSetting', window.bridge.jumpToLocationSettingCallback);
|
|
1119
|
+
},
|
|
1120
|
+
// 驾校报名-获取广告banner
|
|
1121
|
+
drivetestGetAdBanner(params, callback) {
|
|
1122
|
+
Object.assign((window.bridge = window.bridge || {}), {
|
|
1123
|
+
drivetest_getAdBannerCallback(res) {
|
|
1124
|
+
if (typeof callback === 'function') {
|
|
1125
|
+
callback(res);
|
|
1126
|
+
}
|
|
1127
|
+
}
|
|
1128
|
+
});
|
|
1129
|
+
return appCall.call('drivetest_getAdBanner', JSON.stringify(params), window.bridge.drivetest_getAdBannerCallback);
|
|
1130
|
+
},
|
|
1131
|
+
// 获取系统黑白模式
|
|
1132
|
+
getDayNightStyle(callback) {
|
|
1133
|
+
Object.assign((window.bridge = window.bridge || {}), {
|
|
1134
|
+
getDayNightStyleCallback(res) {
|
|
1135
|
+
if (typeof callback === 'function') {
|
|
1136
|
+
callback(res);
|
|
1137
|
+
}
|
|
1138
|
+
}
|
|
1139
|
+
});
|
|
1140
|
+
return appCall.call('getDayNightStyle', window.bridge.getDayNightStyleCallback);
|
|
1141
|
+
},
|
|
1142
|
+
// 答题返回回调
|
|
1143
|
+
onBackAction(callback) {
|
|
1144
|
+
Object.assign((window.bridge = window.bridge || {}), {
|
|
1145
|
+
onBackActionCallback(res) {
|
|
1146
|
+
if (typeof callback === 'function') {
|
|
1147
|
+
callback(res);
|
|
1148
|
+
}
|
|
1149
|
+
}
|
|
1150
|
+
});
|
|
1151
|
+
return appCall.call('onBackAction', window.bridge.onBackActionCallback);
|
|
1152
|
+
},
|
|
1153
|
+
// 获取状态栏高度
|
|
1154
|
+
getStatusBarHeight(params, callback) {
|
|
1155
|
+
Object.assign((window.bridge = window.bridge || {}), {
|
|
1156
|
+
onGetStatusBarHeightCallback(res) {
|
|
1157
|
+
if (typeof callback === 'function') {
|
|
1158
|
+
callback(res);
|
|
1159
|
+
}
|
|
1160
|
+
}
|
|
1161
|
+
});
|
|
1162
|
+
return appCall.call('getStatusBarHeight', params, window.bridge.onGetStatusBarHeightCallback);
|
|
1163
|
+
},
|
|
1164
|
+
// 加载本地网页
|
|
1165
|
+
loadLocalWeb(params = {}) {
|
|
1166
|
+
return appCall.call('loadLocalWeb', JSON.stringify(params));
|
|
1167
|
+
},
|
|
1168
|
+
// 获取考试VIP题目
|
|
1169
|
+
getExamVipQuestions(params, callback) {
|
|
1170
|
+
Object.assign((window.bridge = window.bridge || {}), {
|
|
1171
|
+
getExamVipQuestionsCallback(res) {
|
|
1172
|
+
if (typeof callback === 'function') {
|
|
1173
|
+
callback(res);
|
|
1174
|
+
}
|
|
1175
|
+
}
|
|
1176
|
+
});
|
|
1177
|
+
return appCall.call('getExamVipQuestions', params, window.bridge.getExamVipQuestionsCallback);
|
|
1178
|
+
},
|
|
1179
|
+
// 保存优惠券
|
|
1180
|
+
saveEmCoupon(params = {}) {
|
|
1181
|
+
return appCall.call('saveEmCoupon', JSON.stringify(params));
|
|
1182
|
+
},
|
|
1183
|
+
// 获取优惠券
|
|
1184
|
+
getEmCoupon(params, callback) {
|
|
1185
|
+
Object.assign((window.bridge = window.bridge || {}), {
|
|
1186
|
+
getEmCouponCallback(res) {
|
|
1187
|
+
if (typeof callback === 'function') {
|
|
1188
|
+
callback(res);
|
|
1189
|
+
}
|
|
1190
|
+
}
|
|
1191
|
+
});
|
|
1192
|
+
return appCall.call('getEmCoupon', JSON.stringify(params), window.bridge.getEmCouponCallback);
|
|
1193
|
+
},
|
|
1194
|
+
// 快乐星期四中奖弹框
|
|
1195
|
+
getUserWinInfo(params) {
|
|
1196
|
+
return appCall.call('getUserWinInfo', params);
|
|
1197
|
+
},
|
|
1198
|
+
// ========== 账号操作接口 ==========
|
|
1199
|
+
// 登录
|
|
1200
|
+
login(params = {}) {
|
|
1201
|
+
let version = config.projectName === '摩托范' ? '3.2.1' : '1.0.0';
|
|
1202
|
+
if (!window.isClient) {
|
|
1203
|
+
return (window.location.href = '/login');
|
|
1204
|
+
}
|
|
1205
|
+
// 直接使用已初始化的全局变量
|
|
1206
|
+
if (window.isAndroid || window.isHarmonyos) {
|
|
1207
|
+
return appCall.isAppVersionGreatThan(version)
|
|
1208
|
+
? appCall.call('login', JSON.stringify(params))
|
|
1209
|
+
: appCall.call('login');
|
|
1210
|
+
}
|
|
1211
|
+
setTimeout(() => {
|
|
1212
|
+
if (!window.localStorage?.token) {
|
|
1213
|
+
appCall.call('login', JSON.stringify(params), window.bridge.getUserDataCallback);
|
|
1214
|
+
}
|
|
1215
|
+
}, 300);
|
|
1216
|
+
},
|
|
1217
|
+
// 注册
|
|
1218
|
+
register(callback) {
|
|
1219
|
+
return appCall.call('register', window.bridge.getUserDataCallback);
|
|
1220
|
+
},
|
|
1221
|
+
// 注销账号
|
|
1222
|
+
closeAccount() {
|
|
1223
|
+
return appCall.call('closeAccount');
|
|
1224
|
+
}
|
|
1225
|
+
};
|
|
1226
|
+
}
|