fstarter 2.10.48 → 2.10.51
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/.babelrc +6 -6
- package/.editorconfig +9 -9
- package/index.html +22 -22
- package/index.js +222 -222
- package/package.json +1 -1
- package/src/App.vue +38 -38
- package/src/i18n/en-US.js +35 -35
- package/src/i18n/zh-CN.js +35 -35
- package/src/main.js +95 -87
- package/src/plugins/assets/ak.js +948 -948
- package/src/plugins/assets/callNative.js +490 -488
- package/src/plugins/assets/compressImg.js +75 -75
- package/src/plugins/assets/config.js +106 -106
- package/src/plugins/assets/fileServer.js +469 -469
- package/src/plugins/assets/http.js +343 -343
- package/src/plugins/assets/ua.js +27 -27
- package/src/plugins/components/BSButton.vue +61 -61
- package/src/plugins/components/BSCascader.vue +465 -465
- package/src/plugins/components/BSCell.vue +48 -48
- package/src/plugins/components/BSDatePicker.vue +167 -167
- package/src/plugins/components/BSImage.vue +42 -42
- package/src/plugins/components/BSInput.vue +140 -140
- package/src/plugins/components/BSList.vue +81 -81
- package/src/plugins/components/BSPicCode.vue +96 -96
- package/src/plugins/components/BSPopup.vue +43 -43
- package/src/plugins/components/BSRadio.vue +97 -97
- package/src/plugins/components/BSSearch.vue +109 -109
- package/src/plugins/components/BSSelect.vue +144 -144
- package/src/plugins/components/BSSign.vue +454 -454
- package/src/plugins/components/BSStepper.vue +115 -115
- package/src/plugins/components/BSUpload.vue +92 -92
- package/src/plugins/components/BSUpload2.vue +398 -398
- package/src/plugins/components/BSVerCode.vue +128 -129
- package/src/plugins/components/BSViewer.vue +92 -92
- package/src/plugins/components/base.js +496 -496
- package/src/plugins/components/base2.js +489 -489
- package/src/plugins/lib/weixin.js +20 -20
- package/src/plugins/platform/index.js +7 -7
- package/src/plugins/platform/isp_phone.js +310 -306
- package/src/plugins/route/index.js +140 -140
- package/src/plugins/selector/index.js +342 -342
- package/src/plugins/service/index.js +81 -81
- package/src/plugins/services/callCamera.js +53 -53
- package/src/plugins/services/exit.js +36 -36
- package/src/plugins/services/face.js +69 -69
- package/src/plugins/services/faceH5.js +49 -0
- package/src/plugins/services/faceInApp.js +31 -31
- package/src/plugins/services/faceTx.js +61 -61
- package/src/plugins/services/getFaceResult.js +104 -104
- package/src/plugins/services/getH5FaceResult.js +62 -0
- package/src/plugins/services/getMenus.js +40 -40
- package/src/plugins/services/getSystemData.js +128 -128
- package/src/plugins/services/getToken.js +79 -79
- package/src/plugins/services/getTxFaceResult.js +83 -83
- package/src/plugins/services/getUserInfo.js +47 -47
- package/src/plugins/services/goSetPage.js +40 -40
- package/src/plugins/services/hideFhoneTitle.js +36 -36
- package/src/plugins/services/index.js +45 -41
- package/src/plugins/services/init.js +35 -35
- package/src/plugins/services/jumpView.js +40 -40
- package/src/plugins/services/logout.js +43 -43
- package/src/plugins/services/share.js +113 -113
- package/src/plugins/services/statusBarHeight.js +39 -39
- package/src/plugins/session/index.js +32 -32
- package/src/services/getAuthInfo.js +22 -22
- package/src/services/index.js +9 -9
- package/src/services/sendVerCode.js +23 -23
- package/src/views/auth.vue +367 -367
- package/src/views/auth2.vue +90 -90
- package/src/views/auth3.vue +157 -157
- package/src/views/auth4.vue +8979 -8979
- package/src/views/auth5.vue +50 -50
- package/src/views/authh5.vue +369 -0
- package/src/views/components/BankSelect.vue +55 -55
- package/src/views/foot.vue +140 -140
- package/src/views/page.vue +222 -219
- package/src/views/shellFunc.vue +41 -41
- package/themes/basic.css +1 -1
- package/webpack.config.js +144 -144
- package/fstarter.iml +0 -9
|
@@ -1,488 +1,490 @@
|
|
|
1
|
-
import { ua } from './ua'
|
|
2
|
-
import ak from './ak.js'
|
|
3
|
-
|
|
4
|
-
import Vue from 'vue'
|
|
5
|
-
export const SHELL = {
|
|
6
|
-
GET_PHONE_INFO: {
|
|
7
|
-
functionName: 'getSystemData',
|
|
8
|
-
dataObject: {
|
|
9
|
-
jsFunction: 'SHELL_CB.phoneInfo',
|
|
10
|
-
jsData: {}
|
|
11
|
-
}
|
|
12
|
-
},
|
|
13
|
-
TOAST: {
|
|
14
|
-
functionName: 'toast',
|
|
15
|
-
dataObject: {
|
|
16
|
-
content: '',
|
|
17
|
-
delay: 10
|
|
18
|
-
}
|
|
19
|
-
},
|
|
20
|
-
SHARE: {
|
|
21
|
-
functionName: 'share',
|
|
22
|
-
dataObject: {
|
|
23
|
-
shareChannel: []
|
|
24
|
-
}
|
|
25
|
-
},
|
|
26
|
-
LIVE: {
|
|
27
|
-
'functionName': 'getOCRimg',
|
|
28
|
-
'dataObject': {
|
|
29
|
-
'jsFunction': 'SHELL_CB.live',
|
|
30
|
-
'jsData': {},
|
|
31
|
-
'expired': '-1',
|
|
32
|
-
'maxSizeKB': '0'
|
|
33
|
-
}
|
|
34
|
-
},
|
|
35
|
-
GET_IDCARD_PIC: {
|
|
36
|
-
'functionName': 'getIDauth',
|
|
37
|
-
'dataObject': {
|
|
38
|
-
'jsFunction': 'SHELL_CB.getIDPic',
|
|
39
|
-
'count': 1,
|
|
40
|
-
'sizeType': 0,
|
|
41
|
-
'expired': '-1',
|
|
42
|
-
'actions': '',
|
|
43
|
-
'jsData': {},
|
|
44
|
-
'sourceType': ['相机', '相册'],
|
|
45
|
-
'maxSizeKB': '0'
|
|
46
|
-
}
|
|
47
|
-
},
|
|
48
|
-
CALL_CAMERA: {
|
|
49
|
-
'functionName': 'verifyIdentity',
|
|
50
|
-
'dataObject': {
|
|
51
|
-
'jsFunction': 'SHELL_CB.getPic',
|
|
52
|
-
'count': 1,
|
|
53
|
-
'sizeType': 0,
|
|
54
|
-
'actions': '',
|
|
55
|
-
'jsData': {},
|
|
56
|
-
'sourceType': ['相机', '相册'],
|
|
57
|
-
'expired': '-1',
|
|
58
|
-
'maxSizeKB': '0',
|
|
59
|
-
'cancelCrop': true
|
|
60
|
-
}
|
|
61
|
-
},
|
|
62
|
-
CALL_CAMERA_OTHER: {
|
|
63
|
-
'functionName': 'verifyIdentity',
|
|
64
|
-
'dataObject': {
|
|
65
|
-
'jsFunction': 'SHELL_CB.getPic',
|
|
66
|
-
'count': 9,
|
|
67
|
-
'sizeType': 0,
|
|
68
|
-
'actions': '',
|
|
69
|
-
'cropType': 1,
|
|
70
|
-
'jsData': {},
|
|
71
|
-
'sourceType': ['相机', '相册'],
|
|
72
|
-
'expired': '-1',
|
|
73
|
-
'maxSizeKB': '0',
|
|
74
|
-
'cancelCrop': true
|
|
75
|
-
}
|
|
76
|
-
},
|
|
77
|
-
QRCODE: {
|
|
78
|
-
'functionName': 'get2Dinfo',
|
|
79
|
-
'dataObject': {
|
|
80
|
-
'jsFunction': 'SHELL_CB.getQrcode',
|
|
81
|
-
'jsData': {}
|
|
82
|
-
}
|
|
83
|
-
},
|
|
84
|
-
GET_TOKEN: {
|
|
85
|
-
'functionName': 'getToken',
|
|
86
|
-
'dataObject': {
|
|
87
|
-
'jsFunction': 'SHELL_CB.getToken',
|
|
88
|
-
'isNull': 'true',
|
|
89
|
-
'jsData': {}
|
|
90
|
-
}
|
|
91
|
-
},
|
|
92
|
-
JUMP_TO_LOGIN: {
|
|
93
|
-
'functionName': 'jumpValue',
|
|
94
|
-
'dataObject': {
|
|
95
|
-
'naviInit': {
|
|
96
|
-
'dataObject': {
|
|
97
|
-
'setFunction': {
|
|
98
|
-
'jsData': { 'callBackKey': 'login' },
|
|
99
|
-
'jsFunction': 'SHELL_CB.toLogin' }
|
|
100
|
-
}
|
|
101
|
-
},
|
|
102
|
-
'pageCode': 'CUSTOMER_LOGIN',
|
|
103
|
-
'url': '',
|
|
104
|
-
'businessData': {}
|
|
105
|
-
}
|
|
106
|
-
},
|
|
107
|
-
JUMP_VIEW: {
|
|
108
|
-
'functionName': 'jumpValue',
|
|
109
|
-
'dataObject': {
|
|
110
|
-
'url': '',
|
|
111
|
-
'pageCode': 'COMMON_PRIMARY_PAGE'
|
|
112
|
-
}
|
|
113
|
-
},
|
|
114
|
-
POPVIEW: {
|
|
115
|
-
'functionName': 'popView',
|
|
116
|
-
'dataObject': {}
|
|
117
|
-
},
|
|
118
|
-
HIDE_FHONE_TITLE: {
|
|
119
|
-
'functionName': 'naviInit',
|
|
120
|
-
'dataObject': {
|
|
121
|
-
'setVisible': { 'visibility': false }
|
|
122
|
-
}
|
|
123
|
-
},
|
|
124
|
-
CALL_PHONE: {
|
|
125
|
-
'functionName': 'call',
|
|
126
|
-
'dataObject': {
|
|
127
|
-
'phone': ''
|
|
128
|
-
}
|
|
129
|
-
},
|
|
130
|
-
SEND_MESSAGE: {
|
|
131
|
-
'functionName': 'sendSms',
|
|
132
|
-
'dataObject': {
|
|
133
|
-
'phone': '',
|
|
134
|
-
'content': ''
|
|
135
|
-
}
|
|
136
|
-
},
|
|
137
|
-
GET_MAIL_LIST: {
|
|
138
|
-
'functionName': 'getContact',
|
|
139
|
-
'dataObject': {
|
|
140
|
-
'jsFunction': 'SHELL_CB.getContract'
|
|
141
|
-
}
|
|
142
|
-
},
|
|
143
|
-
// 查看PDF 老版本
|
|
144
|
-
GET_PDF_READ: {
|
|
145
|
-
'functionName': 'pdfRead',
|
|
146
|
-
'dataObject': {
|
|
147
|
-
'pdfName': '',
|
|
148
|
-
// 'pdfBaseUrl': `${FilePathPkg.fileBasePath}`,
|
|
149
|
-
'pdfBaseUrl': '',
|
|
150
|
-
'pdfUrl': '',
|
|
151
|
-
'time': '10',
|
|
152
|
-
'pdfCanShare': '', // 是否显示分享按钮,1是显示,空或者其他不显示
|
|
153
|
-
'shareTitle': 'test.pdf', // 自定义文件名 (需要添加.pdf后缀) 不传或者为空壳默认文件名为”文件.pdf”
|
|
154
|
-
'jsFunction': 'SHELL_CB.pdfRead'
|
|
155
|
-
}
|
|
156
|
-
},
|
|
157
|
-
// 查看PDF 新版本
|
|
158
|
-
GET_PDF_READ_FIT: {
|
|
159
|
-
'functionName': 'pdfReadFit',
|
|
160
|
-
'dataObject': {
|
|
161
|
-
'pdfName': '',
|
|
162
|
-
// 'pdfBaseUrl': `${FilePathPkg.fileBasePath}`,
|
|
163
|
-
'pdfBaseUrl': '',
|
|
164
|
-
'pdfUrl': '',
|
|
165
|
-
'time': '0', // 倒计时时间 传0不显示倒计时
|
|
166
|
-
'pdfCanShare': '', // 是否显示分享按钮,1是显示,空或者其他不显示
|
|
167
|
-
'shareTitle': 'test.pdf', // 自定义文件名 (需要添加.pdf后缀) 不传或者为空壳默认文件名为”文件.pdf”
|
|
168
|
-
'jsFunction': 'SHELL_CB.pdfRead'
|
|
169
|
-
}
|
|
170
|
-
},
|
|
171
|
-
// 设置头部title
|
|
172
|
-
SET_TITLE: {
|
|
173
|
-
'functionName': 'naviInit',
|
|
174
|
-
'dataObject': {
|
|
175
|
-
'setTitle': {'title': ''}
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
// 分享渠道
|
|
181
|
-
export const SHARE_CHANNEL = {
|
|
182
|
-
WEIXIN_FRIEND: 'wx_friend',
|
|
183
|
-
WEIXIN_SPACE: 'wx_space',
|
|
184
|
-
QQ_FRIEND: 'qq_friend',
|
|
185
|
-
QQ_SPACE: 'qq_space',
|
|
186
|
-
WB: 'wb',
|
|
187
|
-
MESSAGE: 'message',
|
|
188
|
-
COPYURL: 'copy_url'
|
|
189
|
-
}
|
|
190
|
-
// 分享类型
|
|
191
|
-
export const SHARE_TYPE = {
|
|
192
|
-
TEXT: '1',
|
|
193
|
-
IMAGE: '2',
|
|
194
|
-
SCREEN_IMAGE: '3',
|
|
195
|
-
TEXT_IMAGE: '4',
|
|
196
|
-
SCREEN_TEXT_IMAGE: '5',
|
|
197
|
-
TEXT_IMAGE_LINK: '6',
|
|
198
|
-
SCREEN_TEXT_IMAGE_LINK: '7'
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
// 入参所需字段
|
|
202
|
-
export const PARAM_FIELD = {
|
|
203
|
-
TEXT: 'text',
|
|
204
|
-
TITLE: 'title',
|
|
205
|
-
IMAGE: 'image',
|
|
206
|
-
DESCRIPTION: 'description',
|
|
207
|
-
URL: 'url',
|
|
208
|
-
BTNTITLE: 'btnTitle',
|
|
209
|
-
SHARE_TYPE: 'share_type'
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
/**
|
|
216
|
-
* 外部调用API
|
|
217
|
-
*/
|
|
218
|
-
|
|
219
|
-
// 获取手机信息
|
|
220
|
-
export function getPhoneInfo(vnode) {
|
|
221
|
-
callShell(SHELL.GET_PHONE_INFO, null, null, vnode)
|
|
222
|
-
}
|
|
223
|
-
// 获取token
|
|
224
|
-
export function getToken(vnode) {
|
|
225
|
-
callShell(SHELL.GET_TOKEN, null, null, vnode)
|
|
226
|
-
}
|
|
227
|
-
// 跳转登陆页面
|
|
228
|
-
export function jumpToLogin(cbparam) {
|
|
229
|
-
callShell(SHELL.JUMP_TO_LOGIN, null, cbparam)
|
|
230
|
-
}
|
|
231
|
-
// 页面后退
|
|
232
|
-
export function popView() {
|
|
233
|
-
callShell(SHELL.POPVIEW, null)
|
|
234
|
-
}
|
|
235
|
-
// 分享页面
|
|
236
|
-
export function share(params) {
|
|
237
|
-
const btns = [{ channel: SHARE_CHANNEL.WEIXIN_SPACE, type: SHARE_TYPE.TEXT_IMAGE_LINK, param: { [PARAM_FIELD.BTNTITLE]: '微信朋友圈', [PARAM_FIELD.TEXT]: params.text, [PARAM_FIELD.TITLE]: params.title, [PARAM_FIELD.IMAGE]: params.imgurl, [PARAM_FIELD.DESCRIPTION]: '11111111111', [PARAM_FIELD.URL]: params.url }},
|
|
238
|
-
{ channel: SHARE_CHANNEL.COPYURL, param: { [PARAM_FIELD.TEXT]: params.text, [PARAM_FIELD.BTNTITLE]: '复制链接' }}
|
|
239
|
-
]
|
|
240
|
-
btns.push({ channel: SHARE_CHANNEL.WEIXIN_FRIEND, type: SHARE_TYPE.TEXT_IMAGE_LINK, param: { [PARAM_FIELD.BTNTITLE]: '微信好友', [PARAM_FIELD.TEXT]: params.text, [PARAM_FIELD.TITLE]: params.title, [PARAM_FIELD.IMAGE]: params.imgurl, [PARAM_FIELD.DESCRIPTION]: params.description, [PARAM_FIELD.URL]: params.url }})
|
|
241
|
-
//
|
|
242
|
-
getShareBtns(btns)
|
|
243
|
-
// shareSingleBtn(btnm)
|
|
244
|
-
}
|
|
245
|
-
// 唤出多个分享按钮
|
|
246
|
-
export function getShareBtns(shareSetting) {
|
|
247
|
-
if (Array.isArray(shareSetting)) {
|
|
248
|
-
const ret = []
|
|
249
|
-
shareSetting.map(({ channel, type, param }) => {
|
|
250
|
-
const btn = shareSingleBtn(channel, type, param)
|
|
251
|
-
if (typeof btn === 'string') {
|
|
252
|
-
alert(btn)
|
|
253
|
-
} else {
|
|
254
|
-
ret.push(btn)
|
|
255
|
-
}
|
|
256
|
-
})
|
|
257
|
-
const fnModel = SHELL.SHARE
|
|
258
|
-
if (fnModel) {
|
|
259
|
-
const fnParamModel = JSON.parse(JSON.stringify(fnModel))
|
|
260
|
-
fnParamModel.dataObject.shareChannel = ret
|
|
261
|
-
const requestJson = JSON.stringify(fnParamModel)
|
|
262
|
-
if (ua.iPad || ua.iPhone) {
|
|
263
|
-
if (window.navigator.userAgent.indexOf('app_ios_wk') != -1) {
|
|
264
|
-
window.webkit.messageHandlers.JSonString.postMessage(requestJson)
|
|
265
|
-
} else {
|
|
266
|
-
JSonString(requestJson)
|
|
267
|
-
}
|
|
268
|
-
} else {
|
|
269
|
-
window.jsObj.jsCallAndroid(requestJson)
|
|
270
|
-
}
|
|
271
|
-
}
|
|
272
|
-
} else {
|
|
273
|
-
alert('传入多分享按钮的数据应为数组,请核实')
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
// 提示信息
|
|
277
|
-
export function toast(content, delay = 10) {
|
|
278
|
-
callShell(SHELL.TOAST, { content, delay })
|
|
279
|
-
}
|
|
280
|
-
// 隐藏原生标题
|
|
281
|
-
export function hidePhoneTitle() {
|
|
282
|
-
callShell(SHELL.HIDE_FHONE_TITLE)
|
|
283
|
-
}
|
|
284
|
-
// 人脸识别
|
|
285
|
-
export function live(param, vnode) {
|
|
286
|
-
callShell(SHELL.LIVE, param, null, vnode)
|
|
287
|
-
}
|
|
288
|
-
|
|
289
|
-
// 扫描身份证信息
|
|
290
|
-
export function getIDCard(param, vnode) {
|
|
291
|
-
callShell(SHELL.GET_IDCARD_PIC, param, null, vnode)
|
|
292
|
-
}
|
|
293
|
-
// 扫描二维码
|
|
294
|
-
export function getQrcode() {
|
|
295
|
-
callShell(SHELL.QRCODE)
|
|
296
|
-
}
|
|
297
|
-
// 获取图片信息
|
|
298
|
-
export function getPicture(param, vnode) {
|
|
299
|
-
callShell(SHELL.CALL_CAMERA, param, null, vnode)
|
|
300
|
-
}
|
|
301
|
-
// 呼叫
|
|
302
|
-
export function callphone(phoneNo) {
|
|
303
|
-
callShell(SHELL.CALL_PHONE, { phone: phoneNo })
|
|
304
|
-
}
|
|
305
|
-
// 短信
|
|
306
|
-
export function sendMessage(phone, content) {
|
|
307
|
-
callShell(SHELL.SEND_MESSAGE, { phone, content })
|
|
308
|
-
}
|
|
309
|
-
// 通讯录
|
|
310
|
-
export function seeMailList() {
|
|
311
|
-
callShell(SHELL.GET_MAIL_LIST)
|
|
312
|
-
}
|
|
313
|
-
// 设置页面头部
|
|
314
|
-
export function setTitle(params) {
|
|
315
|
-
callShell(SHELL.SET_TITLE, params)
|
|
316
|
-
}
|
|
317
|
-
|
|
318
|
-
// 单个分享按钮
|
|
319
|
-
function shareSingleBtn(channel, type, param) {
|
|
320
|
-
const des = _getDescription(channel)
|
|
321
|
-
const btnName = des && des[0]
|
|
322
|
-
// const btnImage = des && des[1]
|
|
323
|
-
return Object.assign({}, { type: channel, shareType: type, btnTitle: btnName }, param)
|
|
324
|
-
}
|
|
325
|
-
|
|
326
|
-
// 分享渠道说明
|
|
327
|
-
function _getDescription(channel) {
|
|
328
|
-
switch (channel) {
|
|
329
|
-
case SHARE_CHANNEL.WEIXIN_FRIEND: return ['微信好友', '../weibo_logo.png']
|
|
330
|
-
case SHARE_CHANNEL.WEIXIN_SPACE: return ['朋友圈', '../weibo_logo.png']
|
|
331
|
-
case SHARE_CHANNEL.QQ_FRIEND: return ['QQ好友', '../weibo_logo.png']
|
|
332
|
-
case SHARE_CHANNEL.QQ_SPACE: return ['QQ空间', '../weibo_logo.png']
|
|
333
|
-
case SHARE_CHANNEL.WB: return ['微博', '../weibo_logo.png']
|
|
334
|
-
case SHARE_CHANNEL.MESSAGE: return ['短信', '../weibo_logo.png']
|
|
335
|
-
case SHARE_CHANNEL.COPYURL: return ['复制链接', '../weibo_logo.png']
|
|
336
|
-
}
|
|
337
|
-
}
|
|
338
|
-
export const EBType = {}
|
|
339
|
-
EBType.PhoneInfo = 'getPhoneInfo'
|
|
340
|
-
EBType.Login = 'login'
|
|
341
|
-
EBType.PdfInfo = 'getpdfInfo'
|
|
342
|
-
EBType.IDCard = 'getIDcard'
|
|
343
|
-
EBType.getPIC = 'getPic'
|
|
344
|
-
EBType.getQRCode = 'getQrcode'
|
|
345
|
-
EBType.Live = 'live'
|
|
346
|
-
EBType.getContract = 'getContract'
|
|
347
|
-
EBType.getToken = 'getToken'
|
|
348
|
-
EBType.statusBarHeight = 'statusBarHeight'
|
|
349
|
-
|
|
350
|
-
/**
|
|
351
|
-
* 事件类型对照
|
|
352
|
-
*/
|
|
353
|
-
export const EventTypeMapping = {
|
|
354
|
-
[EBType.PdfInfo]: '查看pdf',
|
|
355
|
-
[EBType.IDCard]: '身份证OCR',
|
|
356
|
-
[EBType.getPIC]: '获取图像',
|
|
357
|
-
[EBType.getQRCode]: '获取二维码',
|
|
358
|
-
[EBType.Live]: '活体识别',
|
|
359
|
-
[EBType.getToken]: '获取TOKEN',
|
|
360
|
-
[EBType.getContract]: '调用通讯录'
|
|
361
|
-
}
|
|
362
|
-
|
|
363
|
-
/**
|
|
364
|
-
* 壳返回回调
|
|
365
|
-
*/
|
|
366
|
-
export const SHELL_CB = {
|
|
367
|
-
phoneInfo: function(data) {
|
|
368
|
-
handleBackData(data, EBType.PhoneInfo, (retData) => {
|
|
369
|
-
window.phoneInfoRequired = false
|
|
370
|
-
return retData
|
|
371
|
-
})
|
|
372
|
-
},
|
|
373
|
-
|
|
374
|
-
getToken: function(data) {
|
|
375
|
-
handleBackData(data, EBType.getToken, (retData) => {
|
|
376
|
-
if (ak.utils.isEmpty(retData.token)) {
|
|
377
|
-
jumpToLogin()
|
|
378
|
-
} else {
|
|
379
|
-
!!retData.token && ak.utils.setSessionStorage('jtl', retData.token)
|
|
380
|
-
// Vue.$root.eventHub.$emit('userInfo', retData)
|
|
381
|
-
window.tokenRequired = false
|
|
382
|
-
return retData
|
|
383
|
-
}
|
|
384
|
-
})
|
|
385
|
-
},
|
|
386
|
-
toLogin: function(data) {
|
|
387
|
-
handleBackData(data, EBType.Login, (retData) => {
|
|
388
|
-
ak.utils.removeSessionStorage('jtl')
|
|
389
|
-
if (!retData.token) {
|
|
390
|
-
// 如果是取消登录,并没有拿到token,则需要一直停留在登录页。但是现在为了演示过掉,先注释调下面一行。正常应该是放开的
|
|
391
|
-
jumpToLogin()
|
|
392
|
-
} else {
|
|
393
|
-
if (!retData.team) {
|
|
394
|
-
getToken()
|
|
395
|
-
} else {
|
|
396
|
-
// Vue.$root.eventHub.$emit('userInfo', retData)
|
|
397
|
-
window.tokenRequired = false
|
|
398
|
-
}
|
|
399
|
-
}
|
|
400
|
-
})
|
|
401
|
-
},
|
|
402
|
-
live: function(data) {
|
|
403
|
-
handleBackData(data, EBType.Live, (retData) => {
|
|
404
|
-
const fileName = retData.fileId + '.' + retData.ext // 文件名 + 扩展名
|
|
405
|
-
const actions = retData.actions ? JSON.parse(retData.actions) : null
|
|
406
|
-
return { fileName, actions }
|
|
407
|
-
})
|
|
408
|
-
},
|
|
409
|
-
getIDPic: function(data) {
|
|
410
|
-
handleBackData(data, EBType.IDCard, (retData) => {
|
|
411
|
-
const fileName = retData.fileId + '.' + retData.ext // 文件名 + 扩展名
|
|
412
|
-
const actions = retData.actions ? JSON.parse(retData.actions) : null
|
|
413
|
-
return { fileName, actions }
|
|
414
|
-
})
|
|
415
|
-
},
|
|
416
|
-
getQrcode: function(data) {
|
|
417
|
-
handleBackData(data, EBType.getQRCode, (retData) => {
|
|
418
|
-
const qrCode = retData.CodeString
|
|
419
|
-
return { qrCode }
|
|
420
|
-
})
|
|
421
|
-
},
|
|
422
|
-
getPic: function(data) {
|
|
423
|
-
handleBackData(data, EBType.getPIC, (retData) => {
|
|
424
|
-
const fileName = retData.fileId + '.' + retData.ext // 文件名 + 扩展名
|
|
425
|
-
const actions = retData.actions ? JSON.parse(retData.actions) : null
|
|
426
|
-
return { fileName, actions }
|
|
427
|
-
})
|
|
428
|
-
},
|
|
429
|
-
pdfRead: function(data) {
|
|
430
|
-
handleBackData(data, EBType.PdfInfo, (retData) => {
|
|
431
|
-
return { flag: retData.readFinish === '1' }
|
|
432
|
-
})
|
|
433
|
-
},
|
|
434
|
-
getContract: function(data) {
|
|
435
|
-
handleBackData(data, EBType.getContract, (retData) => {
|
|
436
|
-
return { name: retData.name, phone: retData.phone }
|
|
437
|
-
})
|
|
438
|
-
}
|
|
439
|
-
}
|
|
440
|
-
|
|
441
|
-
// 处理调壳返回的结果
|
|
442
|
-
export function handleBackData(src, eventType, reformateData) {
|
|
443
|
-
const info = eventType ? (EventTypeMapping[eventType] || eventType || '') : ''
|
|
444
|
-
if (src && ( src.nativeData || src.height)) {
|
|
445
|
-
const data = src.nativeData || src.height
|
|
446
|
-
console.log((`壳${info}类型调用成功!返回原始数据:` + JSON.stringify(data)))
|
|
447
|
-
const ret = reformateData(data)
|
|
448
|
-
if (ret && window.shellCaller) { // 如果注册了回调caller,则返回结果给它。注意,此方法默认中途没有其他调用壳的操作!!!
|
|
449
|
-
window.shellCaller.$emit(eventType, ret)
|
|
450
|
-
} else if (ret) {
|
|
451
|
-
Vue.$root.eventHub.$emit(eventType, ret) // 全局发送事件。任意监听
|
|
452
|
-
}
|
|
453
|
-
} else {
|
|
454
|
-
console.log(`壳${info}类型调用,返回结果异常!为空或没有nativeData节点`)
|
|
455
|
-
}
|
|
456
|
-
}
|
|
457
|
-
|
|
458
|
-
window.SHELL_CB = SHELL_CB
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
// 唤起壳功能
|
|
462
|
-
function callShell(fnModel, param, cbparam, vnode = null) {
|
|
463
|
-
if (fnModel) {
|
|
464
|
-
const jsonObj = JSON.parse(JSON.stringify(fnModel))
|
|
465
|
-
if (!ak.utils.isEmpty(param))
|
|
466
|
-
jsonObj.dataObject = Object.assign({}, jsonObj.dataObject, param)
|
|
467
|
-
|
|
468
|
-
if (!ak.utils.isEmpty(cbparam))
|
|
469
|
-
jsonObj.dataObject.jsData = { cbparam }
|
|
470
|
-
|
|
471
|
-
if (ak.utils.isEmpty(jsonObj.dataObject.actions)) {
|
|
472
|
-
jsonObj.dataObject.actions = ''
|
|
473
|
-
}
|
|
474
|
-
const requestJson = JSON.stringify(jsonObj)
|
|
475
|
-
console.log('壳调用json:' + requestJson, ua)
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
JSonString(requestJson)
|
|
482
|
-
}
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
}
|
|
486
|
-
|
|
487
|
-
}
|
|
488
|
-
|
|
1
|
+
import { ua } from './ua'
|
|
2
|
+
import ak from './ak.js'
|
|
3
|
+
|
|
4
|
+
import Vue from 'vue'
|
|
5
|
+
export const SHELL = {
|
|
6
|
+
GET_PHONE_INFO: {
|
|
7
|
+
functionName: 'getSystemData',
|
|
8
|
+
dataObject: {
|
|
9
|
+
jsFunction: 'SHELL_CB.phoneInfo',
|
|
10
|
+
jsData: {}
|
|
11
|
+
}
|
|
12
|
+
},
|
|
13
|
+
TOAST: {
|
|
14
|
+
functionName: 'toast',
|
|
15
|
+
dataObject: {
|
|
16
|
+
content: '',
|
|
17
|
+
delay: 10
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
SHARE: {
|
|
21
|
+
functionName: 'share',
|
|
22
|
+
dataObject: {
|
|
23
|
+
shareChannel: []
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
LIVE: {
|
|
27
|
+
'functionName': 'getOCRimg',
|
|
28
|
+
'dataObject': {
|
|
29
|
+
'jsFunction': 'SHELL_CB.live',
|
|
30
|
+
'jsData': {},
|
|
31
|
+
'expired': '-1',
|
|
32
|
+
'maxSizeKB': '0'
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
GET_IDCARD_PIC: {
|
|
36
|
+
'functionName': 'getIDauth',
|
|
37
|
+
'dataObject': {
|
|
38
|
+
'jsFunction': 'SHELL_CB.getIDPic',
|
|
39
|
+
'count': 1,
|
|
40
|
+
'sizeType': 0,
|
|
41
|
+
'expired': '-1',
|
|
42
|
+
'actions': '',
|
|
43
|
+
'jsData': {},
|
|
44
|
+
'sourceType': ['相机', '相册'],
|
|
45
|
+
'maxSizeKB': '0'
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
CALL_CAMERA: {
|
|
49
|
+
'functionName': 'verifyIdentity',
|
|
50
|
+
'dataObject': {
|
|
51
|
+
'jsFunction': 'SHELL_CB.getPic',
|
|
52
|
+
'count': 1,
|
|
53
|
+
'sizeType': 0,
|
|
54
|
+
'actions': '',
|
|
55
|
+
'jsData': {},
|
|
56
|
+
'sourceType': ['相机', '相册'],
|
|
57
|
+
'expired': '-1',
|
|
58
|
+
'maxSizeKB': '0',
|
|
59
|
+
'cancelCrop': true
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
CALL_CAMERA_OTHER: {
|
|
63
|
+
'functionName': 'verifyIdentity',
|
|
64
|
+
'dataObject': {
|
|
65
|
+
'jsFunction': 'SHELL_CB.getPic',
|
|
66
|
+
'count': 9,
|
|
67
|
+
'sizeType': 0,
|
|
68
|
+
'actions': '',
|
|
69
|
+
'cropType': 1,
|
|
70
|
+
'jsData': {},
|
|
71
|
+
'sourceType': ['相机', '相册'],
|
|
72
|
+
'expired': '-1',
|
|
73
|
+
'maxSizeKB': '0',
|
|
74
|
+
'cancelCrop': true
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
QRCODE: {
|
|
78
|
+
'functionName': 'get2Dinfo',
|
|
79
|
+
'dataObject': {
|
|
80
|
+
'jsFunction': 'SHELL_CB.getQrcode',
|
|
81
|
+
'jsData': {}
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
GET_TOKEN: {
|
|
85
|
+
'functionName': 'getToken',
|
|
86
|
+
'dataObject': {
|
|
87
|
+
'jsFunction': 'SHELL_CB.getToken',
|
|
88
|
+
'isNull': 'true',
|
|
89
|
+
'jsData': {}
|
|
90
|
+
}
|
|
91
|
+
},
|
|
92
|
+
JUMP_TO_LOGIN: {
|
|
93
|
+
'functionName': 'jumpValue',
|
|
94
|
+
'dataObject': {
|
|
95
|
+
'naviInit': {
|
|
96
|
+
'dataObject': {
|
|
97
|
+
'setFunction': {
|
|
98
|
+
'jsData': { 'callBackKey': 'login' },
|
|
99
|
+
'jsFunction': 'SHELL_CB.toLogin' }
|
|
100
|
+
}
|
|
101
|
+
},
|
|
102
|
+
'pageCode': 'CUSTOMER_LOGIN',
|
|
103
|
+
'url': '',
|
|
104
|
+
'businessData': {}
|
|
105
|
+
}
|
|
106
|
+
},
|
|
107
|
+
JUMP_VIEW: {
|
|
108
|
+
'functionName': 'jumpValue',
|
|
109
|
+
'dataObject': {
|
|
110
|
+
'url': '',
|
|
111
|
+
'pageCode': 'COMMON_PRIMARY_PAGE'
|
|
112
|
+
}
|
|
113
|
+
},
|
|
114
|
+
POPVIEW: {
|
|
115
|
+
'functionName': 'popView',
|
|
116
|
+
'dataObject': {}
|
|
117
|
+
},
|
|
118
|
+
HIDE_FHONE_TITLE: {
|
|
119
|
+
'functionName': 'naviInit',
|
|
120
|
+
'dataObject': {
|
|
121
|
+
'setVisible': { 'visibility': false }
|
|
122
|
+
}
|
|
123
|
+
},
|
|
124
|
+
CALL_PHONE: {
|
|
125
|
+
'functionName': 'call',
|
|
126
|
+
'dataObject': {
|
|
127
|
+
'phone': ''
|
|
128
|
+
}
|
|
129
|
+
},
|
|
130
|
+
SEND_MESSAGE: {
|
|
131
|
+
'functionName': 'sendSms',
|
|
132
|
+
'dataObject': {
|
|
133
|
+
'phone': '',
|
|
134
|
+
'content': ''
|
|
135
|
+
}
|
|
136
|
+
},
|
|
137
|
+
GET_MAIL_LIST: {
|
|
138
|
+
'functionName': 'getContact',
|
|
139
|
+
'dataObject': {
|
|
140
|
+
'jsFunction': 'SHELL_CB.getContract'
|
|
141
|
+
}
|
|
142
|
+
},
|
|
143
|
+
// 查看PDF 老版本
|
|
144
|
+
GET_PDF_READ: {
|
|
145
|
+
'functionName': 'pdfRead',
|
|
146
|
+
'dataObject': {
|
|
147
|
+
'pdfName': '',
|
|
148
|
+
// 'pdfBaseUrl': `${FilePathPkg.fileBasePath}`,
|
|
149
|
+
'pdfBaseUrl': '',
|
|
150
|
+
'pdfUrl': '',
|
|
151
|
+
'time': '10',
|
|
152
|
+
'pdfCanShare': '', // 是否显示分享按钮,1是显示,空或者其他不显示
|
|
153
|
+
'shareTitle': 'test.pdf', // 自定义文件名 (需要添加.pdf后缀) 不传或者为空壳默认文件名为”文件.pdf”
|
|
154
|
+
'jsFunction': 'SHELL_CB.pdfRead'
|
|
155
|
+
}
|
|
156
|
+
},
|
|
157
|
+
// 查看PDF 新版本
|
|
158
|
+
GET_PDF_READ_FIT: {
|
|
159
|
+
'functionName': 'pdfReadFit',
|
|
160
|
+
'dataObject': {
|
|
161
|
+
'pdfName': '',
|
|
162
|
+
// 'pdfBaseUrl': `${FilePathPkg.fileBasePath}`,
|
|
163
|
+
'pdfBaseUrl': '',
|
|
164
|
+
'pdfUrl': '',
|
|
165
|
+
'time': '0', // 倒计时时间 传0不显示倒计时
|
|
166
|
+
'pdfCanShare': '', // 是否显示分享按钮,1是显示,空或者其他不显示
|
|
167
|
+
'shareTitle': 'test.pdf', // 自定义文件名 (需要添加.pdf后缀) 不传或者为空壳默认文件名为”文件.pdf”
|
|
168
|
+
'jsFunction': 'SHELL_CB.pdfRead'
|
|
169
|
+
}
|
|
170
|
+
},
|
|
171
|
+
// 设置头部title
|
|
172
|
+
SET_TITLE: {
|
|
173
|
+
'functionName': 'naviInit',
|
|
174
|
+
'dataObject': {
|
|
175
|
+
'setTitle': {'title': ''}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
// 分享渠道
|
|
181
|
+
export const SHARE_CHANNEL = {
|
|
182
|
+
WEIXIN_FRIEND: 'wx_friend',
|
|
183
|
+
WEIXIN_SPACE: 'wx_space',
|
|
184
|
+
QQ_FRIEND: 'qq_friend',
|
|
185
|
+
QQ_SPACE: 'qq_space',
|
|
186
|
+
WB: 'wb',
|
|
187
|
+
MESSAGE: 'message',
|
|
188
|
+
COPYURL: 'copy_url'
|
|
189
|
+
}
|
|
190
|
+
// 分享类型
|
|
191
|
+
export const SHARE_TYPE = {
|
|
192
|
+
TEXT: '1',
|
|
193
|
+
IMAGE: '2',
|
|
194
|
+
SCREEN_IMAGE: '3',
|
|
195
|
+
TEXT_IMAGE: '4',
|
|
196
|
+
SCREEN_TEXT_IMAGE: '5',
|
|
197
|
+
TEXT_IMAGE_LINK: '6',
|
|
198
|
+
SCREEN_TEXT_IMAGE_LINK: '7'
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
// 入参所需字段
|
|
202
|
+
export const PARAM_FIELD = {
|
|
203
|
+
TEXT: 'text',
|
|
204
|
+
TITLE: 'title',
|
|
205
|
+
IMAGE: 'image',
|
|
206
|
+
DESCRIPTION: 'description',
|
|
207
|
+
URL: 'url',
|
|
208
|
+
BTNTITLE: 'btnTitle',
|
|
209
|
+
SHARE_TYPE: 'share_type'
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
|
|
214
|
+
|
|
215
|
+
/**
|
|
216
|
+
* 外部调用API
|
|
217
|
+
*/
|
|
218
|
+
|
|
219
|
+
// 获取手机信息
|
|
220
|
+
export function getPhoneInfo(vnode) {
|
|
221
|
+
callShell(SHELL.GET_PHONE_INFO, null, null, vnode)
|
|
222
|
+
}
|
|
223
|
+
// 获取token
|
|
224
|
+
export function getToken(vnode) {
|
|
225
|
+
callShell(SHELL.GET_TOKEN, null, null, vnode)
|
|
226
|
+
}
|
|
227
|
+
// 跳转登陆页面
|
|
228
|
+
export function jumpToLogin(cbparam) {
|
|
229
|
+
callShell(SHELL.JUMP_TO_LOGIN, null, cbparam)
|
|
230
|
+
}
|
|
231
|
+
// 页面后退
|
|
232
|
+
export function popView() {
|
|
233
|
+
callShell(SHELL.POPVIEW, null)
|
|
234
|
+
}
|
|
235
|
+
// 分享页面
|
|
236
|
+
export function share(params) {
|
|
237
|
+
const btns = [{ channel: SHARE_CHANNEL.WEIXIN_SPACE, type: SHARE_TYPE.TEXT_IMAGE_LINK, param: { [PARAM_FIELD.BTNTITLE]: '微信朋友圈', [PARAM_FIELD.TEXT]: params.text, [PARAM_FIELD.TITLE]: params.title, [PARAM_FIELD.IMAGE]: params.imgurl, [PARAM_FIELD.DESCRIPTION]: '11111111111', [PARAM_FIELD.URL]: params.url }},
|
|
238
|
+
{ channel: SHARE_CHANNEL.COPYURL, param: { [PARAM_FIELD.TEXT]: params.text, [PARAM_FIELD.BTNTITLE]: '复制链接' }}
|
|
239
|
+
]
|
|
240
|
+
btns.push({ channel: SHARE_CHANNEL.WEIXIN_FRIEND, type: SHARE_TYPE.TEXT_IMAGE_LINK, param: { [PARAM_FIELD.BTNTITLE]: '微信好友', [PARAM_FIELD.TEXT]: params.text, [PARAM_FIELD.TITLE]: params.title, [PARAM_FIELD.IMAGE]: params.imgurl, [PARAM_FIELD.DESCRIPTION]: params.description, [PARAM_FIELD.URL]: params.url }})
|
|
241
|
+
//
|
|
242
|
+
getShareBtns(btns)
|
|
243
|
+
// shareSingleBtn(btnm)
|
|
244
|
+
}
|
|
245
|
+
// 唤出多个分享按钮
|
|
246
|
+
export function getShareBtns(shareSetting) {
|
|
247
|
+
if (Array.isArray(shareSetting)) {
|
|
248
|
+
const ret = []
|
|
249
|
+
shareSetting.map(({ channel, type, param }) => {
|
|
250
|
+
const btn = shareSingleBtn(channel, type, param)
|
|
251
|
+
if (typeof btn === 'string') {
|
|
252
|
+
alert(btn)
|
|
253
|
+
} else {
|
|
254
|
+
ret.push(btn)
|
|
255
|
+
}
|
|
256
|
+
})
|
|
257
|
+
const fnModel = SHELL.SHARE
|
|
258
|
+
if (fnModel) {
|
|
259
|
+
const fnParamModel = JSON.parse(JSON.stringify(fnModel))
|
|
260
|
+
fnParamModel.dataObject.shareChannel = ret
|
|
261
|
+
const requestJson = JSON.stringify(fnParamModel)
|
|
262
|
+
if (ua.iPad || ua.iPhone) {
|
|
263
|
+
if (window.navigator.userAgent.indexOf('app_ios_wk') != -1) {
|
|
264
|
+
window.webkit.messageHandlers.JSonString.postMessage(requestJson)
|
|
265
|
+
} else {
|
|
266
|
+
JSonString(requestJson)
|
|
267
|
+
}
|
|
268
|
+
} else {
|
|
269
|
+
window.jsObj.jsCallAndroid(requestJson)
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
} else {
|
|
273
|
+
alert('传入多分享按钮的数据应为数组,请核实')
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
// 提示信息
|
|
277
|
+
export function toast(content, delay = 10) {
|
|
278
|
+
callShell(SHELL.TOAST, { content, delay })
|
|
279
|
+
}
|
|
280
|
+
// 隐藏原生标题
|
|
281
|
+
export function hidePhoneTitle() {
|
|
282
|
+
callShell(SHELL.HIDE_FHONE_TITLE)
|
|
283
|
+
}
|
|
284
|
+
// 人脸识别
|
|
285
|
+
export function live(param, vnode) {
|
|
286
|
+
callShell(SHELL.LIVE, param, null, vnode)
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
// 扫描身份证信息
|
|
290
|
+
export function getIDCard(param, vnode) {
|
|
291
|
+
callShell(SHELL.GET_IDCARD_PIC, param, null, vnode)
|
|
292
|
+
}
|
|
293
|
+
// 扫描二维码
|
|
294
|
+
export function getQrcode() {
|
|
295
|
+
callShell(SHELL.QRCODE)
|
|
296
|
+
}
|
|
297
|
+
// 获取图片信息
|
|
298
|
+
export function getPicture(param, vnode) {
|
|
299
|
+
callShell(SHELL.CALL_CAMERA, param, null, vnode)
|
|
300
|
+
}
|
|
301
|
+
// 呼叫
|
|
302
|
+
export function callphone(phoneNo) {
|
|
303
|
+
callShell(SHELL.CALL_PHONE, { phone: phoneNo })
|
|
304
|
+
}
|
|
305
|
+
// 短信
|
|
306
|
+
export function sendMessage(phone, content) {
|
|
307
|
+
callShell(SHELL.SEND_MESSAGE, { phone, content })
|
|
308
|
+
}
|
|
309
|
+
// 通讯录
|
|
310
|
+
export function seeMailList() {
|
|
311
|
+
callShell(SHELL.GET_MAIL_LIST)
|
|
312
|
+
}
|
|
313
|
+
// 设置页面头部
|
|
314
|
+
export function setTitle(params) {
|
|
315
|
+
callShell(SHELL.SET_TITLE, params)
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
// 单个分享按钮
|
|
319
|
+
function shareSingleBtn(channel, type, param) {
|
|
320
|
+
const des = _getDescription(channel)
|
|
321
|
+
const btnName = des && des[0]
|
|
322
|
+
// const btnImage = des && des[1]
|
|
323
|
+
return Object.assign({}, { type: channel, shareType: type, btnTitle: btnName }, param)
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
// 分享渠道说明
|
|
327
|
+
function _getDescription(channel) {
|
|
328
|
+
switch (channel) {
|
|
329
|
+
case SHARE_CHANNEL.WEIXIN_FRIEND: return ['微信好友', '../weibo_logo.png']
|
|
330
|
+
case SHARE_CHANNEL.WEIXIN_SPACE: return ['朋友圈', '../weibo_logo.png']
|
|
331
|
+
case SHARE_CHANNEL.QQ_FRIEND: return ['QQ好友', '../weibo_logo.png']
|
|
332
|
+
case SHARE_CHANNEL.QQ_SPACE: return ['QQ空间', '../weibo_logo.png']
|
|
333
|
+
case SHARE_CHANNEL.WB: return ['微博', '../weibo_logo.png']
|
|
334
|
+
case SHARE_CHANNEL.MESSAGE: return ['短信', '../weibo_logo.png']
|
|
335
|
+
case SHARE_CHANNEL.COPYURL: return ['复制链接', '../weibo_logo.png']
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
export const EBType = {}
|
|
339
|
+
EBType.PhoneInfo = 'getPhoneInfo'
|
|
340
|
+
EBType.Login = 'login'
|
|
341
|
+
EBType.PdfInfo = 'getpdfInfo'
|
|
342
|
+
EBType.IDCard = 'getIDcard'
|
|
343
|
+
EBType.getPIC = 'getPic'
|
|
344
|
+
EBType.getQRCode = 'getQrcode'
|
|
345
|
+
EBType.Live = 'live'
|
|
346
|
+
EBType.getContract = 'getContract'
|
|
347
|
+
EBType.getToken = 'getToken'
|
|
348
|
+
EBType.statusBarHeight = 'statusBarHeight'
|
|
349
|
+
|
|
350
|
+
/**
|
|
351
|
+
* 事件类型对照
|
|
352
|
+
*/
|
|
353
|
+
export const EventTypeMapping = {
|
|
354
|
+
[EBType.PdfInfo]: '查看pdf',
|
|
355
|
+
[EBType.IDCard]: '身份证OCR',
|
|
356
|
+
[EBType.getPIC]: '获取图像',
|
|
357
|
+
[EBType.getQRCode]: '获取二维码',
|
|
358
|
+
[EBType.Live]: '活体识别',
|
|
359
|
+
[EBType.getToken]: '获取TOKEN',
|
|
360
|
+
[EBType.getContract]: '调用通讯录'
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
/**
|
|
364
|
+
* 壳返回回调
|
|
365
|
+
*/
|
|
366
|
+
export const SHELL_CB = {
|
|
367
|
+
phoneInfo: function(data) {
|
|
368
|
+
handleBackData(data, EBType.PhoneInfo, (retData) => {
|
|
369
|
+
window.phoneInfoRequired = false
|
|
370
|
+
return retData
|
|
371
|
+
})
|
|
372
|
+
},
|
|
373
|
+
|
|
374
|
+
getToken: function(data) {
|
|
375
|
+
handleBackData(data, EBType.getToken, (retData) => {
|
|
376
|
+
if (ak.utils.isEmpty(retData.token)) {
|
|
377
|
+
jumpToLogin()
|
|
378
|
+
} else {
|
|
379
|
+
!!retData.token && ak.utils.setSessionStorage('jtl', retData.token)
|
|
380
|
+
// Vue.$root.eventHub.$emit('userInfo', retData)
|
|
381
|
+
window.tokenRequired = false
|
|
382
|
+
return retData
|
|
383
|
+
}
|
|
384
|
+
})
|
|
385
|
+
},
|
|
386
|
+
toLogin: function(data) {
|
|
387
|
+
handleBackData(data, EBType.Login, (retData) => {
|
|
388
|
+
ak.utils.removeSessionStorage('jtl')
|
|
389
|
+
if (!retData.token) {
|
|
390
|
+
// 如果是取消登录,并没有拿到token,则需要一直停留在登录页。但是现在为了演示过掉,先注释调下面一行。正常应该是放开的
|
|
391
|
+
jumpToLogin()
|
|
392
|
+
} else {
|
|
393
|
+
if (!retData.team) {
|
|
394
|
+
getToken()
|
|
395
|
+
} else {
|
|
396
|
+
// Vue.$root.eventHub.$emit('userInfo', retData)
|
|
397
|
+
window.tokenRequired = false
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
})
|
|
401
|
+
},
|
|
402
|
+
live: function(data) {
|
|
403
|
+
handleBackData(data, EBType.Live, (retData) => {
|
|
404
|
+
const fileName = retData.fileId + '.' + retData.ext // 文件名 + 扩展名
|
|
405
|
+
const actions = retData.actions ? JSON.parse(retData.actions) : null
|
|
406
|
+
return { fileName, actions }
|
|
407
|
+
})
|
|
408
|
+
},
|
|
409
|
+
getIDPic: function(data) {
|
|
410
|
+
handleBackData(data, EBType.IDCard, (retData) => {
|
|
411
|
+
const fileName = retData.fileId + '.' + retData.ext // 文件名 + 扩展名
|
|
412
|
+
const actions = retData.actions ? JSON.parse(retData.actions) : null
|
|
413
|
+
return { fileName, actions }
|
|
414
|
+
})
|
|
415
|
+
},
|
|
416
|
+
getQrcode: function(data) {
|
|
417
|
+
handleBackData(data, EBType.getQRCode, (retData) => {
|
|
418
|
+
const qrCode = retData.CodeString
|
|
419
|
+
return { qrCode }
|
|
420
|
+
})
|
|
421
|
+
},
|
|
422
|
+
getPic: function(data) {
|
|
423
|
+
handleBackData(data, EBType.getPIC, (retData) => {
|
|
424
|
+
const fileName = retData.fileId + '.' + retData.ext // 文件名 + 扩展名
|
|
425
|
+
const actions = retData.actions ? JSON.parse(retData.actions) : null
|
|
426
|
+
return { fileName, actions }
|
|
427
|
+
})
|
|
428
|
+
},
|
|
429
|
+
pdfRead: function(data) {
|
|
430
|
+
handleBackData(data, EBType.PdfInfo, (retData) => {
|
|
431
|
+
return { flag: retData.readFinish === '1' }
|
|
432
|
+
})
|
|
433
|
+
},
|
|
434
|
+
getContract: function(data) {
|
|
435
|
+
handleBackData(data, EBType.getContract, (retData) => {
|
|
436
|
+
return { name: retData.name, phone: retData.phone }
|
|
437
|
+
})
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
// 处理调壳返回的结果
|
|
442
|
+
export function handleBackData(src, eventType, reformateData) {
|
|
443
|
+
const info = eventType ? (EventTypeMapping[eventType] || eventType || '') : ''
|
|
444
|
+
if (src && ( src.nativeData || src.height)) {
|
|
445
|
+
const data = src.nativeData || src.height
|
|
446
|
+
console.log((`壳${info}类型调用成功!返回原始数据:` + JSON.stringify(data)))
|
|
447
|
+
const ret = reformateData(data)
|
|
448
|
+
if (ret && window.shellCaller) { // 如果注册了回调caller,则返回结果给它。注意,此方法默认中途没有其他调用壳的操作!!!
|
|
449
|
+
window.shellCaller.$emit(eventType, ret)
|
|
450
|
+
} else if (ret) {
|
|
451
|
+
Vue.$root.eventHub.$emit(eventType, ret) // 全局发送事件。任意监听
|
|
452
|
+
}
|
|
453
|
+
} else {
|
|
454
|
+
console.log(`壳${info}类型调用,返回结果异常!为空或没有nativeData节点`)
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
window.SHELL_CB = SHELL_CB
|
|
459
|
+
|
|
460
|
+
|
|
461
|
+
// 唤起壳功能
|
|
462
|
+
function callShell(fnModel, param, cbparam, vnode = null) {
|
|
463
|
+
if (fnModel) {
|
|
464
|
+
const jsonObj = JSON.parse(JSON.stringify(fnModel))
|
|
465
|
+
if (!ak.utils.isEmpty(param))
|
|
466
|
+
jsonObj.dataObject = Object.assign({}, jsonObj.dataObject, param)
|
|
467
|
+
|
|
468
|
+
if (!ak.utils.isEmpty(cbparam))
|
|
469
|
+
jsonObj.dataObject.jsData = { cbparam }
|
|
470
|
+
|
|
471
|
+
if (ak.utils.isEmpty(jsonObj.dataObject.actions)) {
|
|
472
|
+
jsonObj.dataObject.actions = ''
|
|
473
|
+
}
|
|
474
|
+
const requestJson = JSON.stringify(jsonObj)
|
|
475
|
+
console.log('壳调用json:' + requestJson, ua)
|
|
476
|
+
if (vnode != null) {
|
|
477
|
+
window.shellCaller = vnode
|
|
478
|
+
}
|
|
479
|
+
if (ua.iPad || ua.iPhone) {
|
|
480
|
+
if (window.navigator.userAgent.indexOf('app_ios_wk') != -1) {
|
|
481
|
+
window.webkit.messageHandlers.JSonString.postMessage(requestJson)
|
|
482
|
+
} else {
|
|
483
|
+
JSonString(requestJson)
|
|
484
|
+
}
|
|
485
|
+
} else {
|
|
486
|
+
window.jsObj.jsCallAndroid(requestJson)
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
|