crh-jssdk 1.0.2 → 1.0.4

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.
@@ -0,0 +1,459 @@
1
+ "use strict";
2
+ /**
3
+ * @description 金圆统一基础模块 - Bridge版本
4
+ * 基于WebViewJavascriptBridge实现基础功能
5
+ * 金圆统一券商,通过 ua 中包含 qsid/401 来判断
6
+ */
7
+ var __assign = (this && this.__assign) || function () {
8
+ __assign = Object.assign || function(t) {
9
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
10
+ s = arguments[i];
11
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
12
+ t[p] = s[p];
13
+ }
14
+ return t;
15
+ };
16
+ return __assign.apply(this, arguments);
17
+ };
18
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
19
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
20
+ return new (P || (P = Promise))(function (resolve, reject) {
21
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
22
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
23
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
24
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
25
+ });
26
+ };
27
+ var __generator = (this && this.__generator) || function (thisArg, body) {
28
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
29
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
30
+ function verb(n) { return function (v) { return step([n, v]); }; }
31
+ function step(op) {
32
+ if (f) throw new TypeError("Generator is already executing.");
33
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
34
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
35
+ if (y = 0, t) op = [op[0] & 2, t.value];
36
+ switch (op[0]) {
37
+ case 0: case 1: t = op; break;
38
+ case 4: _.label++; return { value: op[1], done: false };
39
+ case 5: _.label++; y = op[1]; op = [0]; continue;
40
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
41
+ default:
42
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
43
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
44
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
45
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
46
+ if (t[2]) _.ops.pop();
47
+ _.trys.pop(); continue;
48
+ }
49
+ op = body.call(thisArg, _);
50
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
51
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
52
+ }
53
+ };
54
+ Object.defineProperty(exports, "__esModule", { value: true });
55
+ var utils_1 = require("../utils");
56
+ exports.default = {
57
+ /**
58
+ * 检查是否在App环境中
59
+ * 通过 ua 中是否包含 qsid/401 来判断是否是金圆统一券商
60
+ */
61
+ isApp: function () {
62
+ var ua = navigator.userAgent;
63
+ console.log("金圆统一 UA:", ua);
64
+ return ua.includes("qsid/401");
65
+ },
66
+ /**
67
+ * 获取webview类型
68
+ */
69
+ webviewType: function () {
70
+ var ua = navigator.userAgent;
71
+ return {
72
+ isJY: ua.includes("qsid/401"), // 金圆统一
73
+ isIOS: utils_1.ios,
74
+ isAndroid: /Android/i.test(ua),
75
+ ua: ua,
76
+ };
77
+ },
78
+ /**
79
+ * 返回到App
80
+ * @param params 返回参数
81
+ */
82
+ goBack: function () {
83
+ return __awaiter(this, arguments, void 0, function (params) {
84
+ var backParams, error_1;
85
+ if (params === void 0) { params = {}; }
86
+ return __generator(this, function (_a) {
87
+ switch (_a.label) {
88
+ case 0:
89
+ _a.trys.push([0, 2, , 3]);
90
+ backParams = __assign({ type: "webpage" }, params);
91
+ console.log("金圆统一调用goBack,参数:", backParams);
92
+ return [4 /*yield*/, utils_1.jyBridge.bridgeCallHandler("Promise", "goback", backParams)];
93
+ case 1:
94
+ _a.sent();
95
+ console.log("金圆统一返回App成功");
96
+ return [3 /*break*/, 3];
97
+ case 2:
98
+ error_1 = _a.sent();
99
+ console.error("金圆统一返回App失败:", error_1);
100
+ throw error_1;
101
+ case 3: return [2 /*return*/];
102
+ }
103
+ });
104
+ });
105
+ },
106
+ /**
107
+ * 关闭当前页面
108
+ */
109
+ closeSJKH: function () {
110
+ return __awaiter(this, void 0, void 0, function () {
111
+ var error_2;
112
+ return __generator(this, function (_a) {
113
+ switch (_a.label) {
114
+ case 0:
115
+ _a.trys.push([0, 2, , 3]);
116
+ return [4 /*yield*/, this.goBack({ type: "component" })];
117
+ case 1:
118
+ _a.sent();
119
+ return [3 /*break*/, 3];
120
+ case 2:
121
+ error_2 = _a.sent();
122
+ console.error("金圆统一关闭页面失败:", error_2);
123
+ return [3 /*break*/, 3];
124
+ case 3: return [2 /*return*/];
125
+ }
126
+ });
127
+ });
128
+ },
129
+ /**
130
+ * 通过url打开新的webview打开外部链接
131
+ * iOS: client://hxsecurity.frame.router/browser?url=xxx
132
+ * Android: client://hxsecurity.frame.router/quote_browser?url=xxx
133
+ */
134
+ goWebview: function (url) {
135
+ var timestamp = new Date().getTime();
136
+ var safeUrl = typeof url === "string" ? url : "".concat(url || "");
137
+ var pinurl = safeUrl.indexOf("?") > -1
138
+ ? "".concat(safeUrl, "&timestamp=").concat(timestamp)
139
+ : "".concat(safeUrl, "?timestamp=").concat(timestamp);
140
+ console.log("金圆统一 pinurl", pinurl);
141
+ // 金圆统一区分 iOS/Android
142
+ if (utils_1.ios) {
143
+ // iOS: 使用 browser
144
+ location.href = "client://hxsecurity.frame.router/browser?url=".concat(encodeURIComponent(pinurl), "&rp_flag_push_to_stack_directly=true&rp_flag_back_to_last_tab=true&rp_flag_finish_when_back_to_last_tab=true&hideNavBar=1&isHiddenNavigationBar=1&physicKey=1");
145
+ }
146
+ else {
147
+ // Android: 使用 quote_browser
148
+ location.href = "client://hxsecurity.frame.router/quote_browser?url=".concat(encodeURIComponent(pinurl), "&rp_flag_recreate=true&rp_flag_push_to_stack_directly=true&rp_flag_finish_when_back_to_last_tab=true&hideNavBar=1&isHiddenNavigationBar=1&physicKey=1");
149
+ }
150
+ },
151
+ /**
152
+ * 跳转到客户端页面(通过JSBridge)
153
+ * @param url 完整跳转链接,与中台路由格式一样
154
+ * @param needTitle 是否显示原生标题栏
155
+ */
156
+ goWebview2: function (params) {
157
+ return __awaiter(this, void 0, void 0, function () {
158
+ var url, _a, needTitle, pageId, gotoUrl, error_3;
159
+ return __generator(this, function (_b) {
160
+ switch (_b.label) {
161
+ case 0:
162
+ url = params.url, _a = params.needTitle, needTitle = _a === void 0 ? false : _a;
163
+ _b.label = 1;
164
+ case 1:
165
+ _b.trys.push([1, 3, , 4]);
166
+ pageId = needTitle ? "2804" : "5002";
167
+ gotoUrl = "client.html?action=ymtz^webid=".concat(pageId, "^url=").concat(encodeURIComponent(url), "^isHiddenNavigationBar=").concat(needTitle ? 0 : 1);
168
+ console.log("金圆统一调用gotoNextPage,参数:", gotoUrl);
169
+ return [4 /*yield*/, utils_1.jyBridge.bridgeCallHandler("Promise", "gotoNextPage", {
170
+ url: gotoUrl,
171
+ })];
172
+ case 2: return [2 /*return*/, _b.sent()];
173
+ case 3:
174
+ error_3 = _b.sent();
175
+ console.error("金圆统一跳转客户端页面失败:", error_3);
176
+ // 降级方案:使用 goWebview
177
+ this.goWebview(url);
178
+ return [2 /*return*/, { success: false }];
179
+ case 4: return [2 /*return*/];
180
+ }
181
+ });
182
+ });
183
+ },
184
+ /**
185
+ * 设置原生状态栏颜色
186
+ * 对外统一接口:color(背景色)
187
+ * 内部转换为金圆统一原生接口所需参数
188
+ * @param {object} params
189
+ * @param {string} params.color 状态栏背景颜色,如#ff0000
190
+ */
191
+ setStatusBar: function (params) {
192
+ return __awaiter(this, void 0, void 0, function () {
193
+ var bridgeParams;
194
+ return __generator(this, function (_a) {
195
+ console.log("金圆统一设置状态栏参数:", params);
196
+ try {
197
+ bridgeParams = {};
198
+ if (utils_1.ios) {
199
+ // iOS 只传背景色,会自动设置字体颜色
200
+ if (params.color) {
201
+ bridgeParams.statusColor = params.color;
202
+ }
203
+ }
204
+ else {
205
+ // Android 只传文字颜色模式,固定为 "0"
206
+ bridgeParams.statusColorMode = "0";
207
+ }
208
+ console.log("金圆统一调用 modifyStatusColor,参数:", bridgeParams);
209
+ utils_1.jyBridge.bridgeCallHandler("", "modifyStatusColor", bridgeParams);
210
+ console.log("金圆统一设置状态栏颜色成功");
211
+ return [2 /*return*/, { success: true }];
212
+ }
213
+ catch (error) {
214
+ console.error("金圆统一设置状态栏颜色失败:", error);
215
+ throw error;
216
+ }
217
+ return [2 /*return*/];
218
+ });
219
+ });
220
+ },
221
+ /**
222
+ * 分享功能
223
+ * @param params 分享参数
224
+ */
225
+ share: function (params) {
226
+ return __awaiter(this, void 0, void 0, function () {
227
+ var shareParams, result, error_4;
228
+ return __generator(this, function (_a) {
229
+ switch (_a.label) {
230
+ case 0:
231
+ _a.trys.push([0, 2, , 3]);
232
+ shareParams = __assign({ type: "1", bmpRes: "3" }, params);
233
+ console.log("金圆统一调用分享,参数:", shareParams);
234
+ return [4 /*yield*/, utils_1.jyBridge.bridgeCallHandler("Promise", "hexinShare", shareParams)];
235
+ case 1:
236
+ result = _a.sent();
237
+ console.log("金圆统一分享调用成功:", result);
238
+ return [2 /*return*/, result];
239
+ case 2:
240
+ error_4 = _a.sent();
241
+ console.error("金圆统一分享失败:", error_4);
242
+ throw error_4;
243
+ case 3: return [2 /*return*/];
244
+ }
245
+ });
246
+ });
247
+ },
248
+ /**
249
+ * 保存图片到相册
250
+ * @param imageData 图片的base64格式字符串
251
+ */
252
+ saveImageToAlbum: function (imageData) {
253
+ return __awaiter(this, void 0, void 0, function () {
254
+ var params, result, error_5;
255
+ return __generator(this, function (_a) {
256
+ switch (_a.label) {
257
+ case 0:
258
+ _a.trys.push([0, 2, , 3]);
259
+ params = { imageData: imageData };
260
+ console.log("金圆统一保存图片到相册");
261
+ return [4 /*yield*/, utils_1.jyBridge.bridgeCallHandler("Promise", "saveImageToAlbum", params)];
262
+ case 1:
263
+ result = _a.sent();
264
+ console.log("金圆统一保存图片成功:", result);
265
+ return [2 /*return*/, result];
266
+ case 2:
267
+ error_5 = _a.sent();
268
+ console.error("金圆统一保存图片失败:", error_5);
269
+ throw error_5;
270
+ case 3: return [2 /*return*/];
271
+ }
272
+ });
273
+ });
274
+ },
275
+ /**
276
+ * 拦截Android物理返回键事件,并回调给前端 --- 仅安卓
277
+ */
278
+ interceptBack: function (callback) {
279
+ try {
280
+ // 金圆统一实现
281
+ utils_1.jyBridge.registerHandler("interceptBack", function (data) {
282
+ callback && callback(data);
283
+ });
284
+ }
285
+ catch (error) {
286
+ console.error("金圆统一拦截返回键失败:", error);
287
+ }
288
+ },
289
+ /**
290
+ * 注册APP物理返回键拦截监听器
291
+ * @param callback 回调函数,当用户点击物理返回键时触发
292
+ */
293
+ registerPhysicalReturnListener: function (callback) {
294
+ try {
295
+ console.log("金圆统一注册物理返回键拦截监听器");
296
+ utils_1.jyBridge.registerHandler("clientPhysicalReturn", function (data) {
297
+ console.log("金圆统一收到物理返回键事件:", data);
298
+ if (typeof callback === "function") {
299
+ callback();
300
+ }
301
+ });
302
+ console.log("金圆统一物理返回键拦截监听器注册成功");
303
+ }
304
+ catch (error) {
305
+ console.error("金圆统一注册物理返回键拦截监听器失败:", error);
306
+ }
307
+ },
308
+ /**
309
+ * 跳转个股详情页
310
+ */
311
+ goStockDetail: function (params) {
312
+ var stockcode = params.stockcode, stockmarket = params.stockmarket;
313
+ try {
314
+ console.error("金圆统一跳转个股详情数据:", stockcode, stockmarket);
315
+ utils_1.jyBridge.bridgeCallHandler("Promise", "HXJumpToStockFenshi", {
316
+ stockcode: stockcode,
317
+ stockmarket: stockmarket,
318
+ });
319
+ }
320
+ catch (error) {
321
+ console.error("金圆统一跳转个股详情失败:", error);
322
+ }
323
+ },
324
+ /**
325
+ * 获取客户端版本号
326
+ * 通过解析ua获取版本信息
327
+ */
328
+ getVersion: function () {
329
+ var ua = navigator.userAgent.toLowerCase();
330
+ // 金圆统一版本号格式: qsid/401/版本号 或类似的格式
331
+ var regex = "";
332
+ regex = /qsid[\/_]?401[\/_]?([\d.]+)/;
333
+ var match = ua.match(regex);
334
+ console.log(match, "===金圆统一版本match===");
335
+ if (match) {
336
+ var version = match[1];
337
+ return version;
338
+ }
339
+ else {
340
+ console.warn("金圆统一version没有找到匹配项");
341
+ return "0.0.0";
342
+ }
343
+ },
344
+ /**
345
+ * 关注公众号
346
+ * @param appid 公众号的appid,默认为wxf45c81345f5ea70e
347
+ */
348
+ followOfficialAccount: function () {
349
+ return __awaiter(this, arguments, void 0, function (appid) {
350
+ var params, result, error_6;
351
+ if (appid === void 0) { appid = "wxf45c81345f5ea70e"; }
352
+ return __generator(this, function (_a) {
353
+ switch (_a.label) {
354
+ case 0:
355
+ _a.trys.push([0, 2, , 3]);
356
+ params = {
357
+ jumptype: "1",
358
+ downloadurl: "weixin://dl/officialaccounts?appid=".concat(appid),
359
+ };
360
+ console.log("金圆统一调用关注公众号,参数:", params);
361
+ return [4 /*yield*/, utils_1.jyBridge.bridgeCallHandler("", "startApplication", params)];
362
+ case 1:
363
+ result = _a.sent();
364
+ console.log("金圆统一关注公众号调用成功:", result);
365
+ return [2 /*return*/, result];
366
+ case 2:
367
+ error_6 = _a.sent();
368
+ console.error("金圆统一关注公众号失败:", error_6);
369
+ throw error_6;
370
+ case 3: return [2 /*return*/];
371
+ }
372
+ });
373
+ });
374
+ },
375
+ /**
376
+ * 在app内打开pdf文件
377
+ */
378
+ openPDFFile: function (url, title) {
379
+ return __awaiter(this, void 0, void 0, function () {
380
+ var typeList, type, params;
381
+ return __generator(this, function (_a) {
382
+ console.log("金圆统一 HXDownloadFile title", title);
383
+ typeList = url.split(".");
384
+ type = "PDF";
385
+ params = {
386
+ url: url,
387
+ filetype: type,
388
+ title: title,
389
+ pdfFileName: title,
390
+ };
391
+ console.log("金圆统一 HXDownloadFile", params);
392
+ utils_1.jyBridge
393
+ .bridgeCallHandler("Promise", "HXDownloadFile", params)
394
+ .then(function () {
395
+ console.log("金圆统一 HXDownloadFile success");
396
+ })
397
+ .catch(function (err) {
398
+ console.error("金圆统一 HXDownloadFile error", err);
399
+ });
400
+ return [2 /*return*/];
401
+ });
402
+ });
403
+ },
404
+ /**
405
+ * 在app内打开浏览器
406
+ * @param url 浏览器地址
407
+ */
408
+ doOpenBrowser: function (url) {
409
+ return __awaiter(this, void 0, void 0, function () {
410
+ return __generator(this, function (_a) {
411
+ console.log("金圆统一要调用doOpenBrowser了", url);
412
+ return [2 /*return*/, new Promise(function (resolve, reject) {
413
+ utils_1.jyBridge
414
+ .bridgeCallHandler("Promise", "doOpenBrowser", { url: url })
415
+ .then(function () {
416
+ console.log("金圆统一 doOpenBrowser---resolve");
417
+ resolve(void 0);
418
+ })
419
+ .catch(function (err) {
420
+ console.log(err, "金圆统一 doOpenBrowser---reject");
421
+ reject(err);
422
+ });
423
+ })];
424
+ });
425
+ });
426
+ },
427
+ /**
428
+ * 跳转财人汇SDK页面(金圆定制)
429
+ * @param params 跳转参数
430
+ */
431
+ doOpenCRHSDK: function (params) {
432
+ return __awaiter(this, void 0, void 0, function () {
433
+ var result, error_7;
434
+ return __generator(this, function (_a) {
435
+ switch (_a.label) {
436
+ case 0:
437
+ _a.trys.push([0, 2, , 3]);
438
+ console.log("金圆统一调用doOpenCRHSDK,参数:", params);
439
+ return [4 /*yield*/, utils_1.jyBridge.bridgeCallHandler("Promise", "doOpenCRHSDK", params)];
440
+ case 1:
441
+ result = _a.sent();
442
+ console.log("金圆统一doOpenCRHSDK调用成功:", result);
443
+ return [2 /*return*/, result];
444
+ case 2:
445
+ error_7 = _a.sent();
446
+ console.error("金圆统一doOpenCRHSDK失败:", error_7);
447
+ throw error_7;
448
+ case 3: return [2 /*return*/];
449
+ }
450
+ });
451
+ });
452
+ },
453
+ /**
454
+ * 获取Bridge实例(供其他模块使用)
455
+ */
456
+ getBridge: function () {
457
+ return utils_1.jyBridge;
458
+ },
459
+ };
@@ -84,65 +84,65 @@ var user_1 = __importDefault(require("./user")); // 用户
84
84
  var BUSINESS = /** @class */ (function () {
85
85
  function BUSINESS(sdkType) {
86
86
  this.isApp = false; //是否是app
87
- this.sdkType = sdkType; // 1 财人汇 2 财信 3 新意 4联储
87
+ this.sdkType = sdkType; // 1 财人汇 2 财信 3 新意 4 联储 5 金圆
88
88
  this.bridge = utils_1.globalBridge; // 初始化Bridge实例
89
89
  }
90
90
  BUSINESS.prototype.initSdk = function () {
91
91
  return __awaiter(this, void 0, void 0, function () {
92
- var Obj, _a, _b, _c, _d, _e, _f, error_1, _g, _h, _j, _k;
93
- var _l, _m;
94
- return __generator(this, function (_o) {
95
- switch (_o.label) {
92
+ var Obj, _a, _b, _c, _d, _e, _f, error_1, _g, _h, _j, _k, _l, _m, _o, _p;
93
+ var _q, _r;
94
+ return __generator(this, function (_s) {
95
+ switch (_s.label) {
96
96
  case 0:
97
97
  console.log("start initSdk");
98
98
  Obj = __assign(__assign(__assign({}, base_1.default), profession_1.default), user_1.default);
99
99
  if (!(+this.sdkType === 1)) return [3 /*break*/, 1];
100
100
  this.sdkObj = Obj;
101
- return [3 /*break*/, 15];
101
+ return [3 /*break*/, 19];
102
102
  case 1:
103
103
  if (!(+this.sdkType === 2)) return [3 /*break*/, 5];
104
104
  _a = this;
105
105
  _b = [__assign({}, Obj)];
106
106
  return [4 /*yield*/, Promise.resolve().then(function () { return __importStar(require("./base/crh-app-sdk-cxzq")); })];
107
107
  case 2:
108
- _c = [__assign.apply(void 0, _b.concat([(_o.sent()).default]))];
108
+ _c = [__assign.apply(void 0, _b.concat([(_s.sent()).default]))];
109
109
  return [4 /*yield*/, Promise.resolve().then(function () { return __importStar(require("./user/crh-app-sdk-cxzq")); })];
110
110
  case 3:
111
- _d = [__assign.apply(void 0, _c.concat([(_o.sent()).default]))];
111
+ _d = [__assign.apply(void 0, _c.concat([(_s.sent()).default]))];
112
112
  return [4 /*yield*/, Promise.resolve().then(function () { return __importStar(require("./profession/crh-app-sdk-cxzq")); })];
113
113
  case 4:
114
- _a.sdkObj = __assign.apply(void 0, _d.concat([(_o.sent()).default]));
114
+ _a.sdkObj = __assign.apply(void 0, _d.concat([(_s.sent()).default]));
115
115
  console.log(this.sdkObj, "sdkObj---jssdk");
116
116
  this.isApp = this.sdkObj.isApp();
117
117
  this.webviewType = this.sdkObj.webviewType();
118
- return [3 /*break*/, 15];
118
+ return [3 /*break*/, 19];
119
119
  case 5:
120
120
  if (!(+this.sdkType === 3)) return [3 /*break*/, 7];
121
121
  _e = this;
122
122
  _f = [{}];
123
123
  return [4 /*yield*/, Promise.resolve().then(function () { return __importStar(require("./user/crh-app-sdk-cy")); })];
124
124
  case 6:
125
- _e.sdkObj = __assign.apply(void 0, _f.concat([(_o.sent()).default]));
125
+ _e.sdkObj = __assign.apply(void 0, _f.concat([(_s.sent()).default]));
126
126
  console.log(this.sdkObj, "sdkObj---jssdk");
127
127
  this.isApp = this.sdkObj.isApp();
128
128
  this.webviewType = this.sdkObj.webviewType();
129
- return [3 /*break*/, 15];
129
+ return [3 /*break*/, 19];
130
130
  case 7:
131
131
  if (!(+this.sdkType === 4)) return [3 /*break*/, 15];
132
132
  console.log("初始化联储证券SDK...");
133
133
  if (!(typeof window !== "undefined" &&
134
134
  window.ClientTHS &&
135
135
  typeof window.ClientTHS.init === "function")) return [3 /*break*/, 11];
136
- _o.label = 8;
136
+ _s.label = 8;
137
137
  case 8:
138
- _o.trys.push([8, 10, , 11]);
139
- return [4 /*yield*/, ((_m = (_l = window.ClientTHS).init) === null || _m === void 0 ? void 0 : _m.call(_l))];
138
+ _s.trys.push([8, 10, , 11]);
139
+ return [4 /*yield*/, ((_r = (_q = window.ClientTHS).init) === null || _r === void 0 ? void 0 : _r.call(_q))];
140
140
  case 9:
141
- _o.sent();
141
+ _s.sent();
142
142
  console.log("ClientTHS初始化完成");
143
143
  return [3 /*break*/, 11];
144
144
  case 10:
145
- error_1 = _o.sent();
145
+ error_1 = _s.sent();
146
146
  console.error("ClientTHS初始化失败:", error_1);
147
147
  return [3 /*break*/, 11];
148
148
  case 11:
@@ -151,19 +151,39 @@ var BUSINESS = /** @class */ (function () {
151
151
  _h = [__assign({}, Obj)];
152
152
  return [4 /*yield*/, Promise.resolve().then(function () { return __importStar(require("./base/crh-app-sdk-lczq")); })];
153
153
  case 12:
154
- _j = [__assign.apply(void 0, _h.concat([(_o.sent()).default]))];
154
+ _j = [__assign.apply(void 0, _h.concat([(_s.sent()).default]))];
155
155
  return [4 /*yield*/, Promise.resolve().then(function () { return __importStar(require("./user/crh-app-sdk-lczq")); })];
156
156
  case 13:
157
- _k = [__assign.apply(void 0, _j.concat([(_o.sent()).default]))];
157
+ _k = [__assign.apply(void 0, _j.concat([(_s.sent()).default]))];
158
158
  return [4 /*yield*/, Promise.resolve().then(function () { return __importStar(require("./profession/crh-app-sdk-lczq")); })];
159
159
  case 14:
160
160
  // 联储证券使用Bridge版本
161
- _g.sdkObj = __assign.apply(void 0, _k.concat([(_o.sent()).default]));
161
+ _g.sdkObj = __assign.apply(void 0, _k.concat([(_s.sent()).default]));
162
162
  console.log("sdkObj---jssdk(Bridge版本)", this.sdkObj);
163
163
  this.isApp = this.sdkObj.isApp();
164
164
  this.webviewType = this.sdkObj.webviewType();
165
- _o.label = 15;
165
+ return [3 /*break*/, 19];
166
166
  case 15:
167
+ if (!(+this.sdkType === 5)) return [3 /*break*/, 19];
168
+ console.log("初始化金圆统一SDK...");
169
+ // 金圆统一使用Bridge版本
170
+ _l = this;
171
+ _m = [__assign({}, Obj)];
172
+ return [4 /*yield*/, Promise.resolve().then(function () { return __importStar(require("./base/crh-app-sdk-jy")); })];
173
+ case 16:
174
+ _o = [__assign.apply(void 0, _m.concat([(_s.sent()).default]))];
175
+ return [4 /*yield*/, Promise.resolve().then(function () { return __importStar(require("./user/crh-app-sdk-jy")); })];
176
+ case 17:
177
+ _p = [__assign.apply(void 0, _o.concat([(_s.sent()).default]))];
178
+ return [4 /*yield*/, Promise.resolve().then(function () { return __importStar(require("./profession/crh-app-sdk-jy")); })];
179
+ case 18:
180
+ // 金圆统一使用Bridge版本
181
+ _l.sdkObj = __assign.apply(void 0, _p.concat([(_s.sent()).default]));
182
+ console.log("sdkObj---jssdk(金圆统一)", this.sdkObj);
183
+ this.isApp = this.sdkObj.isApp();
184
+ this.webviewType = this.sdkObj.webviewType();
185
+ _s.label = 19;
186
+ case 19:
167
187
  // 设置Bridge实例到sdkObj中,供各模块使用
168
188
  if (this.sdkObj) {
169
189
  this.sdkObj.bridge = this.bridge;
@@ -342,11 +362,11 @@ var BUSINESS = /** @class */ (function () {
342
362
  }
343
363
  return this.sdkObj.doOpenBrowser(url);
344
364
  };
345
- //获取Bridge实例(仅限联储证券lczq使用)
365
+ //获取Bridge实例(仅限联储证券lczq和金圆统一jy使用)
346
366
  BUSINESS.prototype.getBridge = function () {
347
- // 只允许 sdkType === 4 (联储证券) 使用 getBridge 方法
348
- if (+this.sdkType !== 4) {
349
- console.warn("getBridge method is only available for lczq (sdkType: 4)");
367
+ // 只允许 sdkType === 4 (联储证券) 和 sdkType === 5 (金圆统一) 使用 getBridge 方法
368
+ if (+this.sdkType !== 4 && +this.sdkType !== 5) {
369
+ console.warn("getBridge method is only available for lczq (sdkType: 4) or jy (sdkType: 5)");
350
370
  return null;
351
371
  }
352
372
  if (!this.sdkObj.getBridge) {
@@ -0,0 +1,204 @@
1
+ "use strict";
2
+ /**
3
+ * @description 金圆统一业务模块 - Bridge版本
4
+ * 基于WebViewJavascriptBridge实现业务功能
5
+ */
6
+ var __assign = (this && this.__assign) || function () {
7
+ __assign = Object.assign || function(t) {
8
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
9
+ s = arguments[i];
10
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
11
+ t[p] = s[p];
12
+ }
13
+ return t;
14
+ };
15
+ return __assign.apply(this, arguments);
16
+ };
17
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
18
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
19
+ return new (P || (P = Promise))(function (resolve, reject) {
20
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
21
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
22
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
23
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
24
+ });
25
+ };
26
+ var __generator = (this && this.__generator) || function (thisArg, body) {
27
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
28
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
29
+ function verb(n) { return function (v) { return step([n, v]); }; }
30
+ function step(op) {
31
+ if (f) throw new TypeError("Generator is already executing.");
32
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
33
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
34
+ if (y = 0, t) op = [op[0] & 2, t.value];
35
+ switch (op[0]) {
36
+ case 0: case 1: t = op; break;
37
+ case 4: _.label++; return { value: op[1], done: false };
38
+ case 5: _.label++; y = op[1]; op = [0]; continue;
39
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
40
+ default:
41
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
42
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
43
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
44
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
45
+ if (t[2]) _.ops.pop();
46
+ _.trys.pop(); continue;
47
+ }
48
+ op = body.call(thisArg, _);
49
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
50
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
51
+ }
52
+ };
53
+ var __importDefault = (this && this.__importDefault) || function (mod) {
54
+ return (mod && mod.__esModule) ? mod : { "default": mod };
55
+ };
56
+ Object.defineProperty(exports, "__esModule", { value: true });
57
+ var utils_1 = require("../utils");
58
+ var crh_app_sdk_jy_1 = __importDefault(require("../base/crh-app-sdk-jy"));
59
+ exports.default = {
60
+ /**
61
+ * 获取客户端用户和设备信息
62
+ * @param type 调用类型:'fetch'仅获取信息,'login'未登录时拉起登录
63
+ */
64
+ getDeviceInfo: function () {
65
+ return __awaiter(this, arguments, void 0, function (type) {
66
+ var params, response, deviceInfo_1, mobileInfo, error_1;
67
+ if (type === void 0) { type = "fetch"; }
68
+ return __generator(this, function (_a) {
69
+ switch (_a.label) {
70
+ case 0:
71
+ console.log("金圆统一 getDeviceInfo----");
72
+ _a.label = 1;
73
+ case 1:
74
+ _a.trys.push([1, 3, , 4]);
75
+ params = {
76
+ info_type: "wt",
77
+ call_type: type,
78
+ info_complete_check: "0",
79
+ key_type: "lccommon",
80
+ needEncryptTraceInfo: true,
81
+ };
82
+ console.log("金圆统一调用getDeviceInfo,参数:", params);
83
+ return [4 /*yield*/, utils_1.jyBridge.bridgeCallHandler("Promise", "getUserInfoByRsa", params)];
84
+ case 2:
85
+ response = _a.sent();
86
+ console.log("金圆统一 getDeviceInfo 返回:", response);
87
+ deviceInfo_1 = {};
88
+ if (response && response.mobile_hardware) {
89
+ mobileInfo = response.mobile_hardware
90
+ .replace("HDInfo=", "")
91
+ .split(",");
92
+ mobileInfo.forEach(function (item) {
93
+ var index = item.indexOf(":");
94
+ if (index > 0) {
95
+ deviceInfo_1[item.substring(0, index)] = item.substring(index + 1);
96
+ }
97
+ });
98
+ }
99
+ return [2 /*return*/, __assign(__assign({}, response), { deviceInfo: deviceInfo_1, isLogin: (response === null || response === void 0 ? void 0 : response.login_status) === "1", token: (response === null || response === void 0 ? void 0 : response.param) || "", fundAccount: "", mobile: deviceInfo_1.RMRN || "" })];
100
+ case 3:
101
+ error_1 = _a.sent();
102
+ console.error("金圆统一获取设备信息失败:", error_1);
103
+ return [2 /*return*/, {
104
+ error: (error_1 === null || error_1 === void 0 ? void 0 : error_1.message) || "未知错误",
105
+ }];
106
+ case 4: return [2 /*return*/];
107
+ }
108
+ });
109
+ });
110
+ },
111
+ /**
112
+ * 银证转账
113
+ * @param version 支持半屏转账的版本号
114
+ * @param callbackName 回调函数
115
+ */
116
+ goBankTransfer: function () {
117
+ return __awaiter(this, arguments, void 0, function (version, callbackName) {
118
+ if (version === void 0) { version = "7.2.0"; }
119
+ return __generator(this, function (_a) {
120
+ try {
121
+ // 金圆统一使用 client:// 协议跳转到银证转账页面
122
+ // 银证转账页面路由: jiaoyi_dyh_yzzz
123
+ console.log("金圆统一调用银证转账");
124
+ location.href = "client://hxsecurity.frame.router/jiaoyi_dyh_yzzz";
125
+ return [2 /*return*/, { success: true }];
126
+ }
127
+ catch (error) {
128
+ console.error("金圆统一银证转账失败:", error);
129
+ return [2 /*return*/, { success: false, error: error }];
130
+ }
131
+ return [2 /*return*/];
132
+ });
133
+ });
134
+ },
135
+ /**
136
+ * app各种方法:交易密码登录框、银证转账充值等
137
+ * @param url action路径
138
+ * @param callback 回调函数
139
+ */
140
+ businessAlertView: function (url, callback) {
141
+ console.log("金圆统一 businessAlertView:", url, callback);
142
+ // 金圆统一使用 Bridge 通信,这种方式可能需要特殊处理
143
+ // 这里暂时不支持,如果需要可以扩展
144
+ return Promise.resolve({
145
+ error_no: "-1",
146
+ error_info: "金圆统一暂不支持该方法",
147
+ });
148
+ },
149
+ /**
150
+ * 产品收藏
151
+ * @param params 收藏参数
152
+ */
153
+ setCollect: function (params) {
154
+ return __awaiter(this, void 0, void 0, function () {
155
+ return __generator(this, function (_a) {
156
+ console.log("金圆统一 setCollect", params);
157
+ // 金圆统一暂不支持产品收藏功能
158
+ return [2 /*return*/, Promise.resolve({
159
+ error_no: "-1",
160
+ error_info: "金圆统一暂不支持产品收藏功能",
161
+ })];
162
+ });
163
+ });
164
+ },
165
+ /**
166
+ * 查询产品收藏
167
+ * @param params 查询参数
168
+ */
169
+ queryCollect: function (params) {
170
+ return __awaiter(this, void 0, void 0, function () {
171
+ return __generator(this, function (_a) {
172
+ console.log("金圆统一 queryCollect", params);
173
+ // 金圆统一暂不支持产品收藏功能
174
+ return [2 /*return*/, Promise.resolve({
175
+ error_no: "-1",
176
+ error_info: "金圆统一暂不支持产品收藏功能",
177
+ })];
178
+ });
179
+ });
180
+ },
181
+ /**
182
+ * 设置原生状态栏颜色
183
+ * @param params 状态栏参数
184
+ */
185
+ setStatusBar: function (params) {
186
+ return __awaiter(this, void 0, void 0, function () {
187
+ return __generator(this, function (_a) {
188
+ console.log("金圆统一 profession setStatusBar", params);
189
+ return [2 /*return*/, crh_app_sdk_jy_1.default.setStatusBar(params)];
190
+ });
191
+ });
192
+ },
193
+ /**
194
+ * 跳转财人汇SDK页面(金圆定制)
195
+ * @param params 跳转参数
196
+ */
197
+ doOpenCRHSDK: function (params) {
198
+ return __awaiter(this, void 0, void 0, function () {
199
+ return __generator(this, function (_a) {
200
+ return [2 /*return*/, crh_app_sdk_jy_1.default.doOpenCRHSDK(params)];
201
+ });
202
+ });
203
+ },
204
+ };
@@ -0,0 +1,227 @@
1
+ "use strict";
2
+ /**
3
+ * @description 金圆统一用户模块 - Bridge版本
4
+ * 基于WebViewJavascriptBridge实现与金圆统一App的通信
5
+ * 文档参考: 金圆统一-财人汇网页js交互说明
6
+ */
7
+ var __assign = (this && this.__assign) || function () {
8
+ __assign = Object.assign || function(t) {
9
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
10
+ s = arguments[i];
11
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
12
+ t[p] = s[p];
13
+ }
14
+ return t;
15
+ };
16
+ return __assign.apply(this, arguments);
17
+ };
18
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
19
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
20
+ return new (P || (P = Promise))(function (resolve, reject) {
21
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
22
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
23
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
24
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
25
+ });
26
+ };
27
+ var __generator = (this && this.__generator) || function (thisArg, body) {
28
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
29
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
30
+ function verb(n) { return function (v) { return step([n, v]); }; }
31
+ function step(op) {
32
+ if (f) throw new TypeError("Generator is already executing.");
33
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
34
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
35
+ if (y = 0, t) op = [op[0] & 2, t.value];
36
+ switch (op[0]) {
37
+ case 0: case 1: t = op; break;
38
+ case 4: _.label++; return { value: op[1], done: false };
39
+ case 5: _.label++; y = op[1]; op = [0]; continue;
40
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
41
+ default:
42
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
43
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
44
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
45
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
46
+ if (t[2]) _.ops.pop();
47
+ _.trys.pop(); continue;
48
+ }
49
+ op = body.call(thisArg, _);
50
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
51
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
52
+ }
53
+ };
54
+ Object.defineProperty(exports, "__esModule", { value: true });
55
+ var utils_1 = require("../utils");
56
+ // 金圆统一 AppId
57
+ var APPID = "b5bae4daa01aa0c2";
58
+ exports.default = {
59
+ /**
60
+ * 获取用户登录信息(静默获取,不会弹窗)
61
+ * @param callType 调用类型:'fetch'仅获取信息,'login'未登录时拉起登录
62
+ * @returns 用户信息,包含加密的param字段(需后端解密)
63
+ */
64
+ getUser: function () {
65
+ return __awaiter(this, arguments, void 0, function (callType) {
66
+ var params, response, encryptedParam, error_1;
67
+ if (callType === void 0) { callType = "fetch"; }
68
+ return __generator(this, function (_a) {
69
+ switch (_a.label) {
70
+ case 0:
71
+ _a.trys.push([0, 2, , 3]);
72
+ params = {
73
+ info_type: "wt", // wt返回交易信息
74
+ call_type: callType,
75
+ info_complete_check: "0",
76
+ key_type: "lccommon",
77
+ needEncryptTraceInfo: true,
78
+ };
79
+ console.log("金圆统一调用getUserInfoByRsa,参数:", params);
80
+ return [4 /*yield*/, utils_1.jyBridge.bridgeCallHandler("Promise", "getUserInfoByRsa", params)];
81
+ case 1:
82
+ response = _a.sent();
83
+ console.log("金圆统一 getUserInfoByRsa 返回:", response);
84
+ // 处理各种可能的响应情况
85
+ if (!response) {
86
+ console.log("金圆统一获取用户信息失败: 无响应");
87
+ return [2 /*return*/, {
88
+ login_status: "0",
89
+ isLogin: false,
90
+ token: "",
91
+ fundAccount: "",
92
+ mobile: "",
93
+ error: "无响应",
94
+ }];
95
+ }
96
+ encryptedParam = response.param || "";
97
+ if (response.login_status === "0") {
98
+ console.log("金圆统一用户未登录:", response);
99
+ return [2 /*return*/, {
100
+ login_status: "0",
101
+ isLogin: false,
102
+ token: encryptedParam,
103
+ param: encryptedParam,
104
+ fundAccount: "",
105
+ mobile: "",
106
+ }];
107
+ }
108
+ else if (response.login_status === "1") {
109
+ console.log("金圆统一用户已登录:", response);
110
+ return [2 /*return*/, __assign(__assign({}, response), { isLogin: true, token: encryptedParam, param: encryptedParam, fundAccount: "", mobile: "" })];
111
+ }
112
+ else {
113
+ console.log("金圆统一用户登录状态未知:", response);
114
+ return [2 /*return*/, __assign(__assign({}, response), { isLogin: false, token: encryptedParam, param: encryptedParam, mobile: "" })];
115
+ }
116
+ return [3 /*break*/, 3];
117
+ case 2:
118
+ error_1 = _a.sent();
119
+ console.error("金圆统一获取用户信息失败:", error_1);
120
+ return [2 /*return*/, {
121
+ login_status: "0",
122
+ isLogin: false,
123
+ token: "",
124
+ fundAccount: "",
125
+ mobile: "",
126
+ error: (error_1 === null || error_1 === void 0 ? void 0 : error_1.message) || "未知错误",
127
+ }];
128
+ case 3: return [2 /*return*/];
129
+ }
130
+ });
131
+ });
132
+ },
133
+ /**
134
+ * 获取交易登录Token(未登录时会弹出登录框)
135
+ * 返回加密的param字段,传入 tradeFlowLogin 接口进行登录
136
+ * @param appidOrOptions 应用ID字符串,或包含appId和accountType的对象
137
+ * @returns 加密的token字符串(param),用于传给后端解密登录
138
+ */
139
+ getTradeLoginToken: function (appidOrOptions) {
140
+ return __awaiter(this, void 0, void 0, function () {
141
+ var appId, params, response, error_2;
142
+ return __generator(this, function (_a) {
143
+ switch (_a.label) {
144
+ case 0:
145
+ _a.trys.push([0, 2, , 3]);
146
+ appId = APPID;
147
+ if (typeof appidOrOptions === "string") {
148
+ appId = appidOrOptions;
149
+ }
150
+ else if (appidOrOptions && typeof appidOrOptions === "object") {
151
+ appId = appidOrOptions.appId || APPID;
152
+ }
153
+ params = {
154
+ info_type: "wt",
155
+ call_type: "login", // 使用login会拉起登录
156
+ info_complete_check: "0",
157
+ key_type: "lccommon",
158
+ needEncryptTraceInfo: true,
159
+ appId: appId,
160
+ };
161
+ console.log("金圆统一获取交易登录Token,参数:", params);
162
+ return [4 /*yield*/, utils_1.jyBridge.bridgeCallHandler("Promise", "getUserInfoByRsa", params)];
163
+ case 1:
164
+ response = _a.sent();
165
+ console.log("金圆统一 getUserInfoByRsa 登录响应:", response);
166
+ // 返回加密的param作为token
167
+ if (response && response.login_status === "1" && response.param) {
168
+ console.log("金圆统一获取交易Token成功,返回加密param");
169
+ return [2 /*return*/, response.param];
170
+ }
171
+ else {
172
+ console.log("金圆统一获取交易Token失败,响应:", response);
173
+ return [2 /*return*/, ""];
174
+ }
175
+ return [3 /*break*/, 3];
176
+ case 2:
177
+ error_2 = _a.sent();
178
+ console.error("金圆统一获取交易登录Token失败:", error_2);
179
+ return [2 /*return*/, ""];
180
+ case 3: return [2 /*return*/];
181
+ }
182
+ });
183
+ });
184
+ },
185
+ /**
186
+ * 获取手机号Token
187
+ * @returns 加密的token字符串
188
+ */
189
+ getPhoneToken: function () {
190
+ return __awaiter(this, void 0, void 0, function () {
191
+ var params, response, error_3;
192
+ return __generator(this, function (_a) {
193
+ switch (_a.label) {
194
+ case 0:
195
+ _a.trys.push([0, 2, , 3]);
196
+ params = {
197
+ info_type: "hq", // 获取信息,只需要手机号
198
+ call_type: "fetch",
199
+ info_complete_check: "0",
200
+ key_type: "lccommon",
201
+ needEncryptTraceInfo: true,
202
+ appId: APPID,
203
+ tokenRetry: true,
204
+ };
205
+ console.log("金圆统一获取手机号Token,参数:", params);
206
+ return [4 /*yield*/, utils_1.jyBridge.bridgeCallHandler("Promise", "getUserInfoByRsa", params)];
207
+ case 1:
208
+ response = _a.sent();
209
+ if (response && response.param) {
210
+ console.log("金圆统一获取手机号Token成功");
211
+ return [2 /*return*/, "".concat(response.param, ",").concat(APPID)];
212
+ }
213
+ else {
214
+ console.log("金圆统一获取手机号Token失败");
215
+ return [2 /*return*/, ""];
216
+ }
217
+ return [3 /*break*/, 3];
218
+ case 2:
219
+ error_3 = _a.sent();
220
+ console.error("金圆统一获取手机号Token失败:", error_3);
221
+ return [2 /*return*/, ""];
222
+ case 3: return [2 /*return*/];
223
+ }
224
+ });
225
+ });
226
+ },
227
+ };
@@ -1,10 +1,233 @@
1
1
  "use strict";
2
2
  /**
3
3
  * @description Bridge通信基础类
4
- * 基于WebViewJavascriptBridge实现与App的通信
4
+ * 支持两种模式:
5
+ * 1. WebViewJavascriptBridge - 通用模式(其他券商)
6
+ * 2. ClientTHS - 同花顺ClientTHS SDK模式(金圆统一)
5
7
  */
6
8
  Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.globalBridge = exports.Bridge = void 0;
9
+ exports.JYClientTHS = exports.jyBridge = exports.globalBridge = exports.Bridge = exports.JYBridge = void 0;
10
+ /**
11
+ * ClientTHS全局桥接对象
12
+ * 实现同花顺客户端提供的ClientTHS SDK方式
13
+ * 文档参考: client-demo/sdk/ClientTemplate.js
14
+ */
15
+ var JYClientTHS = {
16
+ /**
17
+ * 初始化Bridge连接
18
+ * 与ClientTemplate.js保持一致
19
+ */
20
+ init: function () {
21
+ try {
22
+ this.connectWebViewJavascriptBridge(function (bridge) {
23
+ bridge.init(function () { });
24
+ });
25
+ }
26
+ catch (e) {
27
+ console.log('JYClientTHS init error:', e);
28
+ }
29
+ },
30
+ /**
31
+ * 连接WebViewJavascriptBridge
32
+ * 实现逻辑与ClientTemplate.js保持一致
33
+ */
34
+ connectWebViewJavascriptBridge: function (callback) {
35
+ // 如果Bridge已存在,直接使用
36
+ if (window.WebViewJavascriptBridge) {
37
+ callback(window.WebViewJavascriptBridge);
38
+ return;
39
+ }
40
+ // iOS设备:监听BridgeReady事件或通过iframe触发
41
+ // 与ClientTemplate.js保持一致的实现
42
+ if (!/Android/.test(navigator.userAgent)) {
43
+ // 监听BridgeReady事件
44
+ document.addEventListener('WebViewJavascriptBridgeReady', function () {
45
+ callback(window.WebViewJavascriptBridge);
46
+ }, false);
47
+ // 如果已存在WVJBCallbacks,加入回调队列
48
+ if (window.WVJBCallbacks) {
49
+ window.WVJBCallbacks.push(callback);
50
+ }
51
+ else {
52
+ // 创建回调队列并通过iframe触发Bridge加载
53
+ window.WVJBCallbacks = [callback];
54
+ var iframe_1 = document.createElement('iframe');
55
+ iframe_1.style.display = 'none';
56
+ iframe_1.src = 'wvjbscheme://__BRIDGE_LOADED__';
57
+ document.documentElement.appendChild(iframe_1);
58
+ setTimeout(function () {
59
+ document.documentElement.removeChild(iframe_1);
60
+ }, 0);
61
+ }
62
+ }
63
+ },
64
+ /**
65
+ * 调用App方法
66
+ * 与ClientTemplate.js保持一致
67
+ */
68
+ bridgeCallHandler: function (name, params, callback) {
69
+ if (name === void 0) { name = ''; }
70
+ if (params === void 0) { params = {}; }
71
+ try {
72
+ this.connectWebViewJavascriptBridge(function (bridge) {
73
+ bridge.callHandler(name, params, function (response) {
74
+ console.log('bridgeCallHandler:', response);
75
+ if (callback && response) {
76
+ callback(response);
77
+ }
78
+ });
79
+ });
80
+ }
81
+ catch (e) {
82
+ console.log('bridgeCallHandler error:', e);
83
+ }
84
+ },
85
+ /**
86
+ * 注册方法给App调用
87
+ * 与ClientTemplate.js保持一致
88
+ */
89
+ registerHandler: function (name, callback) {
90
+ if (name === void 0) { name = ''; }
91
+ try {
92
+ this.connectWebViewJavascriptBridge(function (bridge) {
93
+ bridge.registerHandler(name, function (data, responseCallback) {
94
+ console.log('registerHandler:', data);
95
+ if (callback) {
96
+ callback(data);
97
+ }
98
+ if (responseCallback) {
99
+ responseCallback('JavaScript Says Right back aka!');
100
+ }
101
+ });
102
+ });
103
+ }
104
+ catch (e) {
105
+ console.log('registerHandler error:', e);
106
+ }
107
+ }
108
+ };
109
+ exports.JYClientTHS = JYClientTHS;
110
+ /**
111
+ * 金圆统一专用Bridge类
112
+ * 使用ClientTHS方式进行桥接通信
113
+ * sdkType: 5
114
+ */
115
+ var JYBridge = /** @class */ (function () {
116
+ function JYBridge() {
117
+ this.bridge = null;
118
+ this.initPromise = null;
119
+ this.initPromise = this.init();
120
+ }
121
+ /**
122
+ * 初始化Bridge连接
123
+ * 使用ClientTHS初始化方式
124
+ */
125
+ JYBridge.prototype.init = function () {
126
+ var _this = this;
127
+ return new Promise(function (resolve) {
128
+ // 使用ClientTHS初始化(与ClientTemplate.js一致)
129
+ JYClientTHS.init();
130
+ // 等待WebViewJavascriptBridgeReady事件
131
+ var checkBridge = function () {
132
+ if (window.WebViewJavascriptBridge) {
133
+ _this.bridge = window.WebViewJavascriptBridge;
134
+ console.log('JYBridge 初始化完成');
135
+ resolve();
136
+ }
137
+ else {
138
+ setTimeout(checkBridge, 100);
139
+ }
140
+ };
141
+ checkBridge();
142
+ });
143
+ };
144
+ /**
145
+ * 调用App方法(Promise版本)
146
+ * @param type 预留类型参数
147
+ * @param name 方法名
148
+ * @param params 参数
149
+ */
150
+ JYBridge.prototype.bridgeCallHandler = function (type, name, params) {
151
+ if (type === void 0) { type = ''; }
152
+ if (name === void 0) { name = ''; }
153
+ if (params === void 0) { params = {}; }
154
+ if (type === 'Promise') {
155
+ return new Promise(function (resolve, reject) {
156
+ try {
157
+ JYClientTHS.bridgeCallHandler(name, params, function (response) {
158
+ // 只要有响应就 resolve,即使是空对象或只有 login_status
159
+ // getUserInfoByRsa 未登录时返回 { login_status: "0" }
160
+ if (response !== undefined && response !== null) {
161
+ resolve(response);
162
+ }
163
+ else {
164
+ reject(new Error("\u8C03\u7528".concat(name, "\u65B9\u6CD5\u5931\u8D25\u4E86!")));
165
+ }
166
+ });
167
+ }
168
+ catch (e) {
169
+ reject(e);
170
+ }
171
+ });
172
+ }
173
+ // 非Promise版本
174
+ try {
175
+ JYClientTHS.bridgeCallHandler(name, params);
176
+ }
177
+ catch (e) {
178
+ console.error('bridgeCallHandler error:', e);
179
+ }
180
+ return Promise.resolve();
181
+ };
182
+ /**
183
+ * 注册方法给App调用
184
+ */
185
+ JYBridge.prototype.registerHandler = function (name, callback) {
186
+ if (name === void 0) { name = ''; }
187
+ if (callback === void 0) { callback = function () { }; }
188
+ try {
189
+ JYClientTHS.registerHandler(name, callback);
190
+ }
191
+ catch (e) {
192
+ console.error('registerHandler error:', e);
193
+ }
194
+ };
195
+ /**
196
+ * 检查Bridge是否已初始化
197
+ */
198
+ JYBridge.prototype.isReady = function () {
199
+ return !!this.bridge;
200
+ };
201
+ /**
202
+ * 等待Bridge准备就绪
203
+ */
204
+ JYBridge.prototype.waitForReady = function (timeout) {
205
+ if (timeout === void 0) { timeout = 5000; }
206
+ if (this.bridge) {
207
+ return Promise.resolve();
208
+ }
209
+ if (this.initPromise) {
210
+ return Promise.race([
211
+ this.initPromise,
212
+ new Promise(function (_, reject) {
213
+ setTimeout(function () { return reject(new Error('JYBridge初始化超时')); }, timeout);
214
+ })
215
+ ]);
216
+ }
217
+ this.initPromise = this.init();
218
+ return Promise.race([
219
+ this.initPromise,
220
+ new Promise(function (_, reject) {
221
+ setTimeout(function () { return reject(new Error('JYBridge初始化超时')); }, timeout);
222
+ })
223
+ ]);
224
+ };
225
+ return JYBridge;
226
+ }());
227
+ exports.JYBridge = JYBridge;
228
+ /**
229
+ * 原有的Bridge类(保持不变,用于其他券商)
230
+ */
8
231
  var Bridge = /** @class */ (function () {
9
232
  function Bridge() {
10
233
  this.bridge = null;
@@ -87,6 +310,7 @@ var Bridge = /** @class */ (function () {
87
310
  };
88
311
  /**
89
312
  * 调用App方法(Promise版本)
313
+ * @param type 预留类型参数
90
314
  * @param name 方法名
91
315
  * @param params 参数
92
316
  * @returns Promise
@@ -102,7 +326,7 @@ var Bridge = /** @class */ (function () {
102
326
  // 如果Bridge已初始化,直接使用;否则等待初始化完成
103
327
  var useBridge_1 = function (bridge) {
104
328
  if (!bridge || typeof bridge.callHandler !== 'function') {
105
- reject(new Error("Bridge\u672A\u6B63\u786E\u521D\u59CB\u5316\u6216callHandler\u65B9\u6CD5\u4E0D\u5B58\u5728"));
329
+ reject(new Error('Bridge未正确初始化或callHandler方法不存在'));
106
330
  return;
107
331
  }
108
332
  bridge.callHandler(name, params, function (response) {
@@ -278,7 +502,11 @@ var Bridge = /** @class */ (function () {
278
502
  exports.Bridge = Bridge;
279
503
  // 全局Bridge实例
280
504
  exports.globalBridge = new Bridge();
505
+ // 金圆统一专用Bridge实例
506
+ exports.jyBridge = new JYBridge();
281
507
  // 导出给window对象,方便调试
282
508
  if (typeof window !== 'undefined') {
283
509
  window.JsBridge = exports.globalBridge;
510
+ window.JYBridge = exports.jyBridge;
511
+ window.ClientTHS = JYClientTHS;
284
512
  }
@@ -36,7 +36,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
36
36
  }
37
37
  };
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.globalBridge = exports.Bridge = exports.getContractTime = exports.parsOpStation = exports.ios = exports.empty = exports.common = void 0;
39
+ exports.JYClientTHS = exports.jyBridge = exports.JYBridge = exports.globalBridge = exports.Bridge = exports.getContractTime = exports.parsOpStation = exports.ios = exports.empty = exports.common = void 0;
40
40
  exports.checkIsHarmonyOS = checkIsHarmonyOS;
41
41
  exports.harmonyCallJsHandler = harmonyCallJsHandler;
42
42
  //调用sdk通用方法
@@ -167,3 +167,6 @@ exports.getContractTime = getContractTime;
167
167
  var bridge_1 = require("./bridge");
168
168
  Object.defineProperty(exports, "Bridge", { enumerable: true, get: function () { return bridge_1.Bridge; } });
169
169
  Object.defineProperty(exports, "globalBridge", { enumerable: true, get: function () { return bridge_1.globalBridge; } });
170
+ Object.defineProperty(exports, "JYBridge", { enumerable: true, get: function () { return bridge_1.JYBridge; } });
171
+ Object.defineProperty(exports, "jyBridge", { enumerable: true, get: function () { return bridge_1.jyBridge; } });
172
+ Object.defineProperty(exports, "JYClientTHS", { enumerable: true, get: function () { return bridge_1.JYClientTHS; } });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "crh-jssdk",
3
- "version": "1.0.2",
3
+ "version": "1.0.4",
4
4
  "description": "crh-jssdk",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {