fstarter 2.10.56 → 2.11.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/.babelrc +6 -6
- package/.editorconfig +9 -9
- package/index.html +22 -22
- package/index.js +222 -222
- package/package.json +104 -104
- 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 -95
- package/src/plugins/assets/ak.js +948 -948
- package/src/plugins/assets/callNative.js +490 -490
- 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 +344 -344
- 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 +397 -397
- package/src/plugins/components/BSVerCode.vue +128 -128
- 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 -310
- package/src/plugins/plugins/README.md +560 -0
- package/src/plugins/plugins/browserUtils.js +925 -0
- package/src/plugins/plugins/components/imageCropper.vue +299 -0
- package/src/plugins/plugins/components/images/bz.png +0 -0
- package/src/plugins/plugins/components/images/correct.png +0 -0
- package/src/plugins/plugins/components/images/error.png +0 -0
- package/src/plugins/plugins/components/images/mohu.png +0 -0
- package/src/plugins/plugins/components/images/qs.png +0 -0
- package/src/plugins/plugins/components/images/zd.png +0 -0
- package/src/plugins/plugins/components/pdfPreview.vue +688 -0
- package/src/plugins/plugins/demo.vue +832 -0
- package/src/plugins/plugins/native-js-sdk.js +360 -0
- package/src/plugins/plugins/nativeUtils.js +1444 -0
- 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 +37 -36
- package/src/plugins/services/face.js +69 -69
- package/src/plugins/services/faceH5.js +54 -54
- 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 -62
- package/src/plugins/services/getMenus.js +40 -40
- package/src/plugins/services/getSystemData.js +144 -128
- package/src/plugins/services/getToken.js +93 -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 -45
- package/src/plugins/services/init.js +35 -35
- package/src/plugins/services/jumpView.js +42 -40
- package/src/plugins/services/logout.js +44 -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 -369
- package/src/views/components/BankSelect.vue +55 -55
- package/src/views/foot.vue +140 -140
- package/src/views/page.vue +222 -222
- 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,490 +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
|
-
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
|
-
|
|
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
|
+
|