cloudcc-ccdk 0.5.2 → 0.5.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.
- package/README.md +12 -1
- package/lib/ccdk.js +680 -97
- package/lib/ccdk.min.js +1 -1
- package/package.json +4 -2
package/README.md
CHANGED
|
@@ -1,9 +1,20 @@
|
|
|
1
|
+
#### 发布版本:0.5.3
|
|
2
|
+
#### 更新日期:2023/03/10
|
|
3
|
+
#### 更新内容:
|
|
4
|
+
* 迭代
|
|
5
|
+
* 添加获取静态资源cdn的访问地址方法
|
|
6
|
+
* 添加cclog功能
|
|
7
|
+
|
|
8
|
+
|
|
1
9
|
#### 发布版本:0.5.2
|
|
2
10
|
#### 更新日期:2023/03/10
|
|
3
11
|
#### 更新内容:
|
|
12
|
+
* 迭代
|
|
13
|
+
* 添加获取静态资源cdn的访问地址方法
|
|
14
|
+
* 添加cclog功能
|
|
4
15
|
* 修复
|
|
5
16
|
* ccPage的close()方法不传默认关闭当前的而不是最后一个
|
|
6
|
-
|
|
17
|
+
|
|
7
18
|
#### 发布版本:0.5.1
|
|
8
19
|
#### 更新日期:2023/01/27
|
|
9
20
|
#### 更新内容:
|
package/lib/ccdk.js
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import CryptoJS from 'crypto-js';
|
|
2
1
|
import Vue from 'vue';
|
|
3
|
-
import
|
|
4
|
-
import
|
|
2
|
+
import CryptoJS from 'crypto-js';
|
|
3
|
+
import axios, { AxiosError } from 'axios';
|
|
4
|
+
import cloneDeep from 'lodash/cloneDeep';
|
|
5
|
+
import * as Sentry from '@sentry/vue';
|
|
5
6
|
import Cookies from 'js-cookie';
|
|
7
|
+
import { Message, MessageBox, Notification } from 'element-ui';
|
|
6
8
|
|
|
7
9
|
/**
|
|
8
10
|
* 加密
|
|
@@ -216,94 +218,604 @@ function getGw() {
|
|
|
216
218
|
*/
|
|
217
219
|
function getSvc() {
|
|
218
220
|
return window.Glod;
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* 获取静态资源的访问地址
|
|
224
|
+
* @returns 静态资源访问地址
|
|
225
|
+
*/
|
|
226
|
+
function getCDNUrl() {
|
|
227
|
+
return window.Glod.CDN_URL;
|
|
219
228
|
}
|
|
220
229
|
|
|
221
230
|
var CCConfig = /*#__PURE__*/Object.freeze({
|
|
222
231
|
__proto__: null,
|
|
223
232
|
getBaseUrl: getBaseUrl,
|
|
224
233
|
getGw: getGw,
|
|
225
|
-
getSvc: getSvc
|
|
234
|
+
getSvc: getSvc,
|
|
235
|
+
getCDNUrl: getCDNUrl
|
|
226
236
|
});
|
|
227
237
|
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
238
|
+
// 日志采集
|
|
239
|
+
/**
|
|
240
|
+
* 接口未捕获异常上报
|
|
241
|
+
* @param {object} memeryMsg
|
|
242
|
+
*/
|
|
243
|
+
function reportException(response) {
|
|
244
|
+
Sentry.withScope(function (scope) {
|
|
245
|
+
scope.setFingerprint(["接口未捕获异常response"]);
|
|
246
|
+
Sentry.captureException(response);
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
const keyCode = "646576636f6e736f6c652d7376633132";
|
|
251
|
+
// const keyCode = "6c6b6a3233346a6b6c6173646877636b"
|
|
252
|
+
|
|
253
|
+
function en(word, keyStr = keyCode) {
|
|
254
|
+
let enc = CryptoJS.AES.encrypt(word, CryptoJS.enc.Hex.parse(keyStr), {
|
|
255
|
+
mode: CryptoJS.mode.ECB,
|
|
256
|
+
padding: CryptoJS.pad.Pkcs7
|
|
257
|
+
});
|
|
258
|
+
return enc.ciphertext.toString()
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
function de(word, keyStr = keyCode) {
|
|
262
|
+
let dec = CryptoJS.AES.decrypt(CryptoJS.format.Hex.parse(word), CryptoJS.enc.Hex.parse(keyStr), {
|
|
263
|
+
mode: CryptoJS.mode.ECB,
|
|
264
|
+
padding: CryptoJS.pad.Pkcs7
|
|
265
|
+
});
|
|
266
|
+
return CryptoJS.enc.Utf8.stringify(dec)
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
/**
|
|
270
|
+
* 获得一级域名
|
|
271
|
+
* 比如:xx.com、xx.cn、xx.com.cn、xx.net.cn、xx.org.cn
|
|
272
|
+
*/
|
|
273
|
+
function getDomain() {
|
|
274
|
+
// 倒数第二位域名
|
|
275
|
+
let lastTow = document.domain.split('.').slice(-2, -1)[0];
|
|
276
|
+
// 如果倒数第二位是这些关键字,那么需要取倒数三位域名
|
|
277
|
+
if (lastTow == 'com' || lastTow == 'org' || lastTow == 'net') {
|
|
278
|
+
return "." + document.domain.split('.').slice(-3).join('.')
|
|
279
|
+
} else {
|
|
280
|
+
return "." + document.domain.split('.').slice(-2).join('.')
|
|
281
|
+
}
|
|
282
|
+
}
|
|
234
283
|
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
284
|
+
function getUuid() {
|
|
285
|
+
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
|
|
286
|
+
var r = (Math.random() * 16) | 0,
|
|
287
|
+
v = c == 'x' ? r : (r & 0x3) | 0x8;
|
|
288
|
+
return v.toString(16);
|
|
289
|
+
});
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
function getBinding() {
|
|
293
|
+
let binding = window.$CCDK.CCToken.getToken();
|
|
294
|
+
if (!binding) {
|
|
295
|
+
window.open(window.Glod.LOGIN_URL, '_self');
|
|
296
|
+
// this.reLogin();
|
|
297
|
+
} else {
|
|
298
|
+
// 刷新有效期,而且有的老功能,依赖这个binding了
|
|
299
|
+
Cookies.set('binding', binding, { expires: 1 / 12 });
|
|
300
|
+
Cookies.set('JSESSIONID', binding, { expires: 1 / 12 });
|
|
301
|
+
}
|
|
302
|
+
return binding
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
var CCUtils = /*#__PURE__*/Object.freeze({
|
|
306
|
+
__proto__: null,
|
|
307
|
+
getDomain: getDomain,
|
|
308
|
+
getUuid: getUuid,
|
|
309
|
+
getBinding: getBinding
|
|
310
|
+
});
|
|
311
|
+
|
|
312
|
+
const toStr = Object.prototype.toString;
|
|
313
|
+
|
|
314
|
+
const TypeEnum = {
|
|
315
|
+
'FUNCTION': '[object Function]',
|
|
316
|
+
'ARRAY': '[object Array]',
|
|
317
|
+
};
|
|
318
|
+
// 是否是一个函数
|
|
319
|
+
const isFn = (value) => toStr.call(value) === TypeEnum.FUNCTION;
|
|
320
|
+
|
|
321
|
+
// 是否是生产环境
|
|
322
|
+
const isProduction = () => process.env.NODE_ENV == 'production';
|
|
323
|
+
|
|
324
|
+
// 延时
|
|
325
|
+
const delay = (waitTime = 1000) => new Promise(resolve => setTimeout(resolve, waitTime));
|
|
326
|
+
|
|
327
|
+
// 是否是超时请求
|
|
328
|
+
const isTimeout = (error = {
|
|
329
|
+
code: '',
|
|
330
|
+
message: ''
|
|
331
|
+
}) => {
|
|
332
|
+
return error.code === AxiosError.ECONNABORTED && error.message.includes('timeout')
|
|
333
|
+
};
|
|
334
|
+
|
|
335
|
+
// 格式换请求体
|
|
336
|
+
const formateData = data => {
|
|
337
|
+
return {
|
|
338
|
+
head: {
|
|
339
|
+
appType: "lightning-main",
|
|
340
|
+
appVersion: "1.1.1",
|
|
341
|
+
accessToken: getBinding(),
|
|
342
|
+
source: "lightning-main"
|
|
239
343
|
},
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
344
|
+
body: {
|
|
345
|
+
...data
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
};
|
|
349
|
+
|
|
350
|
+
const LRUCache = function (capacity) {
|
|
351
|
+
this.capacity = capacity;
|
|
352
|
+
this.cache = new Map();
|
|
353
|
+
};
|
|
354
|
+
|
|
355
|
+
LRUCache.prototype.get = function (key) {
|
|
356
|
+
var cacheTemp = this.cache,
|
|
357
|
+
curTemp = cacheTemp.get(key);
|
|
358
|
+
if (curTemp || curTemp === 0) {
|
|
359
|
+
cacheTemp.delete(key);
|
|
360
|
+
cacheTemp.set(key, curTemp);
|
|
361
|
+
return curTemp
|
|
362
|
+
}
|
|
363
|
+
return null
|
|
364
|
+
};
|
|
365
|
+
|
|
366
|
+
LRUCache.prototype.put = function (key, value) {
|
|
367
|
+
var cacheTemp = this.cache;
|
|
368
|
+
if (cacheTemp.get(key)) {
|
|
369
|
+
cacheTemp.delete(key);
|
|
370
|
+
} else if (cacheTemp.size >= this.capacity) {
|
|
371
|
+
cacheTemp.delete(cacheTemp.keys().next().value);
|
|
372
|
+
}
|
|
373
|
+
cacheTemp.set(key, value);
|
|
374
|
+
};
|
|
375
|
+
|
|
376
|
+
class CCAxios {
|
|
377
|
+
constructor(opt) {
|
|
378
|
+
this.options = opt;
|
|
379
|
+
this.axiosInstance = axios.create(opt);
|
|
380
|
+
this.setupInterceptors();
|
|
381
|
+
this.cachePool = new LRUCache(20);
|
|
382
|
+
// FIXME:区分构造函数参数和接口级别的参数
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
//获取拦截器
|
|
386
|
+
getTransform() {
|
|
387
|
+
const { transform } = this.options;
|
|
388
|
+
return transform;
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
//准备拦截器
|
|
392
|
+
setupInterceptors() {
|
|
393
|
+
const transform = this.getTransform();
|
|
394
|
+
if (!transform) {
|
|
395
|
+
return;
|
|
396
|
+
}
|
|
397
|
+
const {
|
|
398
|
+
requestInterceptors,
|
|
399
|
+
requestInterceptorsCatch,
|
|
400
|
+
responseInterceptors,
|
|
401
|
+
responseInterceptorsCatch,
|
|
402
|
+
} = transform;
|
|
403
|
+
// 请求拦截器
|
|
404
|
+
this.axiosInstance.interceptors.request.use(requestInterceptors, undefined);
|
|
405
|
+
// 请求拦截器错误处理
|
|
406
|
+
requestInterceptorsCatch
|
|
407
|
+
&& isFn(requestInterceptorsCatch)
|
|
408
|
+
&& this.axiosInstance.interceptors.request.use(undefined, requestInterceptorsCatch);
|
|
409
|
+
|
|
410
|
+
// 响应拦截器
|
|
411
|
+
this.axiosInstance.interceptors.response.use(responseInterceptors, undefined);
|
|
412
|
+
// 响应拦截器错误处理
|
|
413
|
+
responseInterceptorsCatch
|
|
414
|
+
&& isFn(responseInterceptorsCatch)
|
|
415
|
+
&& this.axiosInstance.interceptors.response.use(undefined, (error) => {
|
|
416
|
+
return responseInterceptorsCatch(this.axiosInstance, error)
|
|
417
|
+
});
|
|
418
|
+
}
|
|
419
|
+
get(config, options = {}) {
|
|
420
|
+
return this.request({ ...config, method: 'GET', }, options)
|
|
421
|
+
}
|
|
422
|
+
post(config, options = {}) {
|
|
423
|
+
const { envType } = options;
|
|
424
|
+
// 公有云专用接口,在私有云不请求
|
|
425
|
+
if ("public" == envType && "private" == window.Glod["ENV_TYPE"]) {
|
|
426
|
+
return new Promise(() => { })
|
|
427
|
+
}
|
|
428
|
+
// 私有云专用接口,在公有云不请求
|
|
429
|
+
if ("private" == envType && "private" != window.Glod["ENV_TYPE"]) {
|
|
430
|
+
return new Promise(() => { })
|
|
431
|
+
}
|
|
432
|
+
return this.request({ ...config, method: 'POST', }, options)
|
|
433
|
+
}
|
|
434
|
+
postFormat(config, options = {}) {
|
|
435
|
+
return this.request({ ...config, method: 'POST', data: formateData(config.data) }, options)
|
|
436
|
+
}
|
|
437
|
+
postParams(config, options = {}){
|
|
438
|
+
return this.request({ ...config, method: 'POST', params: config.data }, options)
|
|
439
|
+
}
|
|
440
|
+
// FIXME:如果初始化时配置了重试那么所有get接口都重试了
|
|
441
|
+
// options是接口级定义的参数
|
|
442
|
+
request(config, options) {
|
|
443
|
+
const transform = this.getTransform();
|
|
444
|
+
const conf = config,
|
|
445
|
+
{ requestOptions } = this.options;
|
|
446
|
+
requestOptions.cache = false;
|
|
447
|
+
requestOptions.cacheKey = '';
|
|
448
|
+
requestOptions.retryRequest = {
|
|
449
|
+
isOpenRetry:false,
|
|
450
|
+
count: 5,
|
|
451
|
+
waitTime: 1000
|
|
452
|
+
};
|
|
453
|
+
|
|
454
|
+
const opt = Object.assign({}, requestOptions, options);
|
|
455
|
+
conf.requestOptions = opt;
|
|
456
|
+
|
|
457
|
+
const retPromise = new Promise((resolve, reject) => {
|
|
458
|
+
this.axiosInstance(conf)
|
|
459
|
+
.then(res => {
|
|
460
|
+
const { transformResponseHook } = transform;
|
|
461
|
+
if (transformResponseHook && isFn(transformResponseHook)) {
|
|
462
|
+
try {
|
|
463
|
+
const ret = transformResponseHook(res, opt, this.cachePool);
|
|
464
|
+
resolve(ret);
|
|
465
|
+
} catch (err) {
|
|
466
|
+
reject(err || new Error('request error!'));
|
|
467
|
+
}
|
|
468
|
+
return;
|
|
469
|
+
}
|
|
470
|
+
resolve(res);
|
|
471
|
+
})
|
|
472
|
+
.catch(err => {
|
|
473
|
+
reject(err);
|
|
474
|
+
});
|
|
475
|
+
});
|
|
476
|
+
retPromise.cache = (callback) => {
|
|
477
|
+
const { cache, cacheKey } = opt;
|
|
478
|
+
const cacheData = (cache && this.cachePool.get([cacheKey])) ?? null;
|
|
479
|
+
console.log('cacheData', cacheData);
|
|
480
|
+
callback(cacheData);
|
|
481
|
+
return retPromise
|
|
482
|
+
};
|
|
483
|
+
return retPromise
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
// import i18n from '@/utils/i18n'
|
|
488
|
+
|
|
489
|
+
// const getBaseOptions = () => ({
|
|
490
|
+
// confirmButtonText: i18n.t('确定'),
|
|
491
|
+
// center: true
|
|
492
|
+
// })
|
|
493
|
+
|
|
494
|
+
// const createModalOptions = (options) => ({
|
|
495
|
+
// ...getBaseOptions(),
|
|
496
|
+
// ...options,
|
|
497
|
+
// title: options.title || i18n.t('提示'),
|
|
498
|
+
// message: options.message || '消息'
|
|
499
|
+
// })
|
|
500
|
+
|
|
501
|
+
const createErrorModal = (response, options) => {
|
|
502
|
+
const { message } = options;
|
|
503
|
+
let temp;
|
|
504
|
+
if (response.name === 'AxiosError') {
|
|
505
|
+
temp = response.response;
|
|
506
|
+
temp.data.returnInfo = response.returnInfo || message || temp.error || '';
|
|
507
|
+
temp.data.returnCode = response.code || temp.status;
|
|
508
|
+
temp.data.requestId = response.config.headers.requestId;
|
|
509
|
+
} else {
|
|
510
|
+
temp = response;
|
|
511
|
+
temp.data.requestId = response.config.headers.requestId;
|
|
512
|
+
}
|
|
513
|
+
Vue.prototype.$ErrorDialog({
|
|
514
|
+
response: temp
|
|
515
|
+
});
|
|
516
|
+
};
|
|
517
|
+
|
|
518
|
+
// MessageBox(createModalOptions(options))
|
|
519
|
+
|
|
520
|
+
|
|
521
|
+
const createMessage = Message;
|
|
522
|
+
|
|
523
|
+
// 需要上报的errorType
|
|
524
|
+
const needReportErrorType = ['901', '999'];
|
|
525
|
+
|
|
526
|
+
function checkStatus(error, status, msg, errorMessageMode = 'modal') {
|
|
527
|
+
// const errorMsg = errorMsgMap[status] || {
|
|
528
|
+
// label: "message.error.object.contactadministrators"
|
|
529
|
+
// }
|
|
530
|
+
// let errMessage = '',
|
|
531
|
+
// label = '';
|
|
532
|
+
|
|
533
|
+
// label = errorMsg.label;
|
|
534
|
+
// [400, 401].includes(status) && msg && (label = msg)
|
|
535
|
+
let errMessage = "message.error.object.contactadministrators"; //系统异常,请联系系统管理员获取帮助。
|
|
536
|
+
|
|
537
|
+
if (status === 401) {
|
|
538
|
+
//重新登录相关逻辑
|
|
539
|
+
window.open(window.Glod.LOGIN_URL, '_self');
|
|
540
|
+
}
|
|
541
|
+
|
|
542
|
+
{
|
|
543
|
+
if (errorMessageMode === 'modal') {
|
|
544
|
+
createErrorModal(error, { message: errMessage });
|
|
545
|
+
} else if (errorMessageMode === 'message') {
|
|
546
|
+
createMessage.error(errMessage);
|
|
547
|
+
}
|
|
548
|
+
}
|
|
549
|
+
}
|
|
550
|
+
|
|
551
|
+
/**
|
|
552
|
+
* 接口请求重试
|
|
553
|
+
* @param {object} AxiosInstance实例
|
|
554
|
+
* @param {error} AxiosError对象
|
|
555
|
+
*/
|
|
556
|
+
const retry = async (instance, error) => {
|
|
557
|
+
const { config } = error,
|
|
558
|
+
{ waitTime, count = 5} = config.requestOptions || {};
|
|
559
|
+
config.__retryCount = config.__retryCount || 0;
|
|
560
|
+
if(count <= config.__retryCount ) {
|
|
561
|
+
return Promise.reject(error)
|
|
562
|
+
}
|
|
563
|
+
|
|
564
|
+
config.__retryCount++;
|
|
565
|
+
|
|
566
|
+
await delay(waitTime);
|
|
567
|
+
//请求返回后config的header不正确造成重试请求失败,删除返回headers采用默认headers
|
|
568
|
+
delete config.headers;
|
|
569
|
+
return instance(config)
|
|
570
|
+
};
|
|
571
|
+
|
|
572
|
+
//需要加密的接口
|
|
573
|
+
const encryptList = [
|
|
574
|
+
'sysconfig/auth/pc/1.0/post/unifiedLogin',
|
|
575
|
+
'sysconfig/auth/pc/1.0/get/getUserInfo'
|
|
576
|
+
];
|
|
577
|
+
// 需要上报的errorType
|
|
578
|
+
// const needReportErrorType = ['901', '999']
|
|
579
|
+
|
|
580
|
+
const transform = {
|
|
581
|
+
// 请求拦截器
|
|
582
|
+
async requestInterceptors(config) {
|
|
583
|
+
// 设置日志请求头信息
|
|
584
|
+
config.headers.requestId = getUuid();
|
|
585
|
+
config.headers.requestIdProducer = "browser";
|
|
586
|
+
if (!getBinding()) {
|
|
587
|
+
return Promise.reject()
|
|
588
|
+
}
|
|
589
|
+
// 如果url中不包含网关地址,那么需要设置默认的baseURL
|
|
590
|
+
if (!config.url.startsWith("https://") && !config.url.startsWith("https://") && !config.url.startsWith('/test-api')) {
|
|
591
|
+
config.baseURL = window.Glod['ccex-apitsf'] + '/api';
|
|
592
|
+
}
|
|
593
|
+
// 将请求加密
|
|
594
|
+
encryptList.forEach((item) => {
|
|
595
|
+
if (config.url.indexOf(item) != -1) { config.data = en(JSON.stringify(config.data)); }
|
|
596
|
+
});
|
|
597
|
+
config.headers.accessToken = window.$CCDK.CCToken.getToken();
|
|
598
|
+
return config
|
|
599
|
+
},
|
|
600
|
+
// 请求拦截器异常处理
|
|
601
|
+
requestInterceptorsCatch(error) {
|
|
602
|
+
return Promise.reject(error)
|
|
603
|
+
},
|
|
604
|
+
// 响应拦截器
|
|
605
|
+
responseInterceptors(response) {
|
|
606
|
+
const { data, config } = response,
|
|
607
|
+
{ errorType, result } = data;
|
|
608
|
+
//失败
|
|
609
|
+
if (!result) {
|
|
610
|
+
if (needReportErrorType.includes(errorType) && isProduction()) {
|
|
611
|
+
const { serviceName, errorLevel, errorType } = config.requestOptions;
|
|
612
|
+
// 上报日志
|
|
613
|
+
reportException(response);
|
|
614
|
+
window.$CCDK.CCLog.reportLog(window.Glod['ccex-log'] + "/ccerrorlog", {}, {
|
|
615
|
+
serviceName,
|
|
616
|
+
errorType,
|
|
617
|
+
errorLevel,
|
|
618
|
+
errorMessage: response.data.returnInfo,
|
|
619
|
+
printStackTraceInfo: JSON.stringify(response),
|
|
620
|
+
}, response);
|
|
621
|
+
}
|
|
622
|
+
return response
|
|
623
|
+
// switch (errorType) {
|
|
624
|
+
// case '901':
|
|
625
|
+
// normalSystemErrorHandler(response)
|
|
626
|
+
// break;
|
|
627
|
+
// case '999':
|
|
628
|
+
// unsureSystemErrorHandler(response)
|
|
629
|
+
// break;
|
|
630
|
+
// case '501':
|
|
631
|
+
// default:
|
|
632
|
+
// businessLogicError(response)
|
|
633
|
+
// }
|
|
634
|
+
// return Promise.reject(response)
|
|
635
|
+
}
|
|
636
|
+
// 成功
|
|
637
|
+
// 生产环境上报日志
|
|
638
|
+
const { serviceName } = config.requestOptions;
|
|
639
|
+
isProduction() && window.$CCDK.CCLog.reportLog(window.Glod['ccex-log'] + "/systeminfolog", {}, { serviceName }, response);
|
|
640
|
+
// 返回数据 外面处理
|
|
641
|
+
return response
|
|
642
|
+
},
|
|
643
|
+
// 响应拦截器异常处理,处理的错误类型包括: 服务器直接跑出异常、超时、网络错误
|
|
644
|
+
async responseInterceptorsCatch(axiosInstance, error) {
|
|
645
|
+
const { response, config } = error || {},
|
|
646
|
+
err = error?.toString?.() ?? "",
|
|
647
|
+
msg = response?.data?.error ?? "",
|
|
648
|
+
mode = config?.requestOptions?.errorMessageMode;
|
|
649
|
+
let errorMessageMode = ['message', 'modal'].includes(mode) && mode || 'modal',
|
|
650
|
+
errMessage = '';
|
|
651
|
+
|
|
652
|
+
// 是否是取消的请求
|
|
653
|
+
if (axios.isCancel(error)) {
|
|
654
|
+
return Promise.reject(error)
|
|
655
|
+
}
|
|
656
|
+
if (isProduction()) {
|
|
657
|
+
const { serviceName, errorLevel, errorType } = config.requestOptions;
|
|
658
|
+
// 上报日志
|
|
659
|
+
reportException(response);
|
|
660
|
+
window.$CCDK.CCLog.reportLog(window.Glod['ccex-log'] + "/ccerrorlog", {}, {
|
|
661
|
+
serviceName,
|
|
662
|
+
errorType,
|
|
663
|
+
errorLevel,
|
|
664
|
+
errorMessage: response.data.returnInfo,
|
|
665
|
+
printStackTraceInfo: JSON.stringify(response),
|
|
666
|
+
}, response);
|
|
667
|
+
}
|
|
668
|
+
try {
|
|
669
|
+
// 处理超时
|
|
670
|
+
if (isTimeout(error)) {
|
|
671
|
+
errMessage = 'c2487';
|
|
672
|
+
}
|
|
673
|
+
// 处理网络错误
|
|
674
|
+
if (err?.includes('Network Error')) {
|
|
675
|
+
errMessage = 'c929';
|
|
676
|
+
}
|
|
677
|
+
|
|
678
|
+
if (errMessage) {
|
|
679
|
+
if (errorMessageMode === 'modal') {
|
|
680
|
+
createErrorModal({
|
|
681
|
+
...error,
|
|
682
|
+
response: {
|
|
683
|
+
data: {
|
|
684
|
+
returnInfo: error.message,
|
|
685
|
+
returnCode: error.code,
|
|
686
|
+
requestId: error.config.headers.requestId
|
|
687
|
+
},
|
|
688
|
+
config: error.config
|
|
689
|
+
}
|
|
690
|
+
}, { message: errMessage });
|
|
691
|
+
} else if (errorMessageMode === 'message') {
|
|
692
|
+
createMessage.error(errMessage);
|
|
252
693
|
}
|
|
253
|
-
},
|
|
254
|
-
error => {
|
|
255
694
|
return Promise.reject(error)
|
|
695
|
+
}
|
|
696
|
+
} catch (error) {
|
|
697
|
+
throw new Error(error);
|
|
256
698
|
}
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
return service({
|
|
260
|
-
url: url,
|
|
261
|
-
method: 'get',
|
|
262
|
-
params: data,
|
|
263
|
-
responseType: responseType
|
|
264
|
-
})
|
|
265
|
-
}
|
|
699
|
+
// 根据status处理其他类型错误
|
|
700
|
+
checkStatus(error, error?.response?.status, msg, errorMessageMode);
|
|
266
701
|
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
method: 'post',
|
|
271
|
-
data: data,
|
|
272
|
-
responseType: responseType
|
|
273
|
-
})
|
|
274
|
-
}
|
|
702
|
+
// 接口重试操作
|
|
703
|
+
const { isOpenRetry } = config.requestOptions.retryRequest;
|
|
704
|
+
isOpenRetry && config.method?.toUpperCase() === "GET" && retry(axiosInstance, error);
|
|
275
705
|
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
}
|
|
282
|
-
}
|
|
706
|
+
return Promise.reject(error);
|
|
707
|
+
},
|
|
708
|
+
// 响应数据处理,包含解密和数据返回结构设置
|
|
709
|
+
transformResponseHook(response, options, cachePool) {
|
|
710
|
+
const { data, config } = response;
|
|
711
|
+
const { url } = config,
|
|
712
|
+
{ errorType, result } = data;
|
|
713
|
+
// 失败
|
|
714
|
+
// 501异常处理
|
|
715
|
+
const businessLogicError = (response) => {
|
|
716
|
+
const { errorMessageMode, silent } = response.config.requestOptions;
|
|
717
|
+
// 接口如果设置了出现异常不提醒,则不提醒
|
|
718
|
+
if (silent) return;
|
|
719
|
+
// 根据errorMessageMode来判断显示错误弹窗的ui
|
|
720
|
+
if (errorMessageMode === 'modal') {
|
|
721
|
+
createErrorModal(response, { message: '业务出错' });
|
|
722
|
+
} else if (errorMessageMode === 'message') {
|
|
723
|
+
createMessage.error(response?.data?.returnInfo || '业务出错');
|
|
724
|
+
}
|
|
725
|
+
};
|
|
726
|
+
if (!result) {
|
|
727
|
+
switch (errorType) {
|
|
728
|
+
case '901':
|
|
729
|
+
createErrorModal(response, { message: '系统错误' });
|
|
730
|
+
break;
|
|
731
|
+
case '999':
|
|
732
|
+
break;
|
|
733
|
+
case '501':
|
|
734
|
+
default:
|
|
735
|
+
businessLogicError(response);
|
|
736
|
+
break;
|
|
737
|
+
}
|
|
738
|
+
return Promise.reject(response)
|
|
739
|
+
}
|
|
740
|
+
// 成功
|
|
741
|
+
const { isReturnNativeResponse, cache, cacheKey } = options;
|
|
742
|
+
// 直接返回
|
|
743
|
+
if (isReturnNativeResponse) {
|
|
744
|
+
cache && cacheKey && (cachePool.put(cacheKey, response));
|
|
745
|
+
return response
|
|
746
|
+
}
|
|
747
|
+
if (encryptList.includes(url)) {
|
|
748
|
+
return JSON.parse(de(data))
|
|
749
|
+
}
|
|
750
|
+
cache && cacheKey && (cachePool.put(cacheKey, data));
|
|
751
|
+
return data
|
|
752
|
+
}
|
|
753
|
+
};
|
|
283
754
|
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
755
|
+
|
|
756
|
+
function createAxios(opt) {
|
|
757
|
+
return new CCAxios(Object.assign({}, {
|
|
758
|
+
timeout: 60 * 1000,
|
|
759
|
+
headers: {
|
|
760
|
+
'Content-Type': 'application/json;charset=UTF-8',
|
|
761
|
+
},
|
|
762
|
+
transform: cloneDeep(transform),
|
|
763
|
+
requestOptions: {
|
|
764
|
+
envType: '',
|
|
765
|
+
serviceName: 'lightning-main',
|
|
766
|
+
errorLevel: '2',
|
|
767
|
+
errorType: 'front-error',
|
|
768
|
+
errorMessageMode: 'modal',
|
|
769
|
+
//是否静默错误提示
|
|
770
|
+
silent: false,
|
|
771
|
+
// 接口是否需要缓存
|
|
772
|
+
cache: false,
|
|
773
|
+
// 接口重试相关
|
|
774
|
+
retryRequest: {
|
|
775
|
+
isOpenRetry: false,
|
|
776
|
+
count: 5,
|
|
777
|
+
waitTime: 100,
|
|
778
|
+
},
|
|
779
|
+
// 是否返回原生响应头 比如:需要获取响应头时使用该属性
|
|
780
|
+
isReturnNativeResponse: false,
|
|
781
|
+
}
|
|
782
|
+
}, opt || {}))
|
|
290
783
|
}
|
|
291
784
|
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
785
|
+
// const axios1 = createAxios({
|
|
786
|
+
|
|
787
|
+
// })
|
|
788
|
+
|
|
789
|
+
// const testRequest = () => {
|
|
790
|
+
// axios1.get({
|
|
791
|
+
// url: "/test-api/error/timeout",
|
|
792
|
+
// }, {
|
|
793
|
+
// isReturnNativeResponse: false,
|
|
794
|
+
// cache: true,
|
|
795
|
+
// cacheKey: 'timeout'
|
|
796
|
+
// // errorMessageMode: 'message'
|
|
797
|
+
// // silent: true
|
|
798
|
+
// // retryRequest:{
|
|
799
|
+
// // isOpenRetry:true
|
|
800
|
+
// // }
|
|
801
|
+
// })
|
|
802
|
+
// .cache((cacheData) => {
|
|
803
|
+
// console.log('cache callback cacheData:', cacheData)
|
|
804
|
+
// })
|
|
805
|
+
// .then(res => console.log('resolve res:', res))
|
|
806
|
+
// .catch(err => console.log('catcher: ',err))
|
|
807
|
+
// }
|
|
808
|
+
|
|
809
|
+
|
|
810
|
+
|
|
811
|
+
// testRequest()
|
|
812
|
+
// setTimeout(() => {
|
|
813
|
+
// testRequest()
|
|
814
|
+
// }, 5000)
|
|
299
815
|
|
|
300
816
|
var CCHttp = /*#__PURE__*/Object.freeze({
|
|
301
817
|
__proto__: null,
|
|
302
|
-
|
|
303
|
-
post: post,
|
|
304
|
-
put: put,
|
|
305
|
-
patch: patch,
|
|
306
|
-
postParams: postParams
|
|
818
|
+
createAxios: createAxios
|
|
307
819
|
});
|
|
308
820
|
|
|
309
821
|
/**
|
|
@@ -372,6 +884,103 @@ var CCLoad = /*#__PURE__*/Object.freeze({
|
|
|
372
884
|
createLoadJsComponent: createLoadJsComponent
|
|
373
885
|
});
|
|
374
886
|
|
|
887
|
+
/**
|
|
888
|
+
* 获取用户信息
|
|
889
|
+
* @returns 用户信息
|
|
890
|
+
*/
|
|
891
|
+
function getUserInfo$1() {
|
|
892
|
+
let userInfo = window.$CCDK.CCUser.getUserInfo();
|
|
893
|
+
return {
|
|
894
|
+
// 用户名,使用登录账号
|
|
895
|
+
"userName": userInfo.loginName,
|
|
896
|
+
// 用户id
|
|
897
|
+
"userId": userInfo.userId,
|
|
898
|
+
// 组织id
|
|
899
|
+
"orgId": userInfo.orgId,
|
|
900
|
+
// 组织名称
|
|
901
|
+
"orgName": userInfo.orgName,
|
|
902
|
+
}
|
|
903
|
+
}
|
|
904
|
+
/**
|
|
905
|
+
* 获取错误日志信息
|
|
906
|
+
* @param {string} serviceName 上报日志的服务名
|
|
907
|
+
* @param {string} errorType 错误类型,front-error,back-error
|
|
908
|
+
* @param {string} errorLevel 日志级别
|
|
909
|
+
* @param {string} errorMessage 日志描述信息
|
|
910
|
+
* @param {string} printStackTraceInfo 错误栈信息
|
|
911
|
+
* @returns 错误日志信息
|
|
912
|
+
*/
|
|
913
|
+
function getLogInfo(serviceName = "未知应用", errorType, errorLevel, errorMessage, printStackTraceInfo, cccode = "hidden") {
|
|
914
|
+
return {
|
|
915
|
+
// 服务名称
|
|
916
|
+
"serviceName": serviceName,
|
|
917
|
+
// 错误类型
|
|
918
|
+
"errorType": errorType,
|
|
919
|
+
// 日志级别
|
|
920
|
+
"errorLevel": errorLevel,
|
|
921
|
+
// 错误描述
|
|
922
|
+
"errorMessage": errorMessage,
|
|
923
|
+
// 错误栈
|
|
924
|
+
"printStackTraceInfo": printStackTraceInfo,
|
|
925
|
+
// 日志显示级别默认2
|
|
926
|
+
"displayLevel": "2",
|
|
927
|
+
// 日志标识码,没有这个标识码,不能上传
|
|
928
|
+
"cccode": cccode,
|
|
929
|
+
// 发生时间
|
|
930
|
+
"operateTime": (new Date()).valueOf(),
|
|
931
|
+
}
|
|
932
|
+
}
|
|
933
|
+
/**
|
|
934
|
+
* 获取网络异常请求体
|
|
935
|
+
* @param {object} response 网络请求响应体
|
|
936
|
+
* @returns 请求体信息
|
|
937
|
+
*/
|
|
938
|
+
function getRequestInfo(response) {
|
|
939
|
+
if (window.performance) {
|
|
940
|
+
// 通过性能接口精确测量接口用时
|
|
941
|
+
let per = performance.getEntriesByName(response.request.responseURL, "resource");
|
|
942
|
+
if (per.length > 0) {
|
|
943
|
+
response.spendTime = (per[0].fetchStart > 0) ? (per[0].responseEnd - per[0].fetchStart) : "0";
|
|
944
|
+
}
|
|
945
|
+
}
|
|
946
|
+
return {
|
|
947
|
+
// 接口用时
|
|
948
|
+
"spendTime": response.spendTime || "-1",
|
|
949
|
+
// 请求地址url
|
|
950
|
+
"requestUrl": response.request.responseURL,
|
|
951
|
+
// 请求id
|
|
952
|
+
"requestId": response.config.headers.requestId,
|
|
953
|
+
// 请求id类型
|
|
954
|
+
"requestIdProducer": response.config.headers.requestIdProducer,
|
|
955
|
+
// 请求体
|
|
956
|
+
"requestParameter": response.config.data,
|
|
957
|
+
// 接口状态
|
|
958
|
+
"requestResult": response.data.result ? "成功" : "失败",
|
|
959
|
+
// 描述信息
|
|
960
|
+
"infoMessage": response.data.returnInfo,
|
|
961
|
+
}
|
|
962
|
+
}
|
|
963
|
+
/**
|
|
964
|
+
* 上报日志
|
|
965
|
+
* @param {string} url 请求地址
|
|
966
|
+
* @param {object} userInfo 用户信息
|
|
967
|
+
* @param {object} logInfo 日志信息
|
|
968
|
+
* @param {object} response 响应信息
|
|
969
|
+
*/
|
|
970
|
+
function reportLog(url, userInfo, logInfo, response) {
|
|
971
|
+
axios.post(url,
|
|
972
|
+
{
|
|
973
|
+
...Object.assign(getUserInfo$1(), userInfo),
|
|
974
|
+
...Object.assign(getLogInfo(), logInfo),
|
|
975
|
+
...getRequestInfo(response)
|
|
976
|
+
});
|
|
977
|
+
}
|
|
978
|
+
|
|
979
|
+
var CCLog = /*#__PURE__*/Object.freeze({
|
|
980
|
+
__proto__: null,
|
|
981
|
+
reportLog: reportLog
|
|
982
|
+
});
|
|
983
|
+
|
|
375
984
|
/**
|
|
376
985
|
* 添加一个一级菜单
|
|
377
986
|
* @param {object} options 菜单配置
|
|
@@ -825,26 +1434,6 @@ var CCSide = /*#__PURE__*/Object.freeze({
|
|
|
825
1434
|
close: close
|
|
826
1435
|
});
|
|
827
1436
|
|
|
828
|
-
/**
|
|
829
|
-
* 获得一级域名
|
|
830
|
-
* 比如:xx.com、xx.cn、xx.com.cn、xx.net.cn、xx.org.cn
|
|
831
|
-
*/
|
|
832
|
-
function getDomain() {
|
|
833
|
-
// 倒数第二位域名
|
|
834
|
-
let lastTow = document.domain.split('.').slice(-2, -1)[0];
|
|
835
|
-
// 如果倒数第二位是这些关键字,那么需要取倒数三位域名
|
|
836
|
-
if (lastTow == 'com' || lastTow == 'org' || lastTow == 'net') {
|
|
837
|
-
return "." + document.domain.split('.').slice(-3).join('.')
|
|
838
|
-
} else {
|
|
839
|
-
return "." + document.domain.split('.').slice(-2).join('.')
|
|
840
|
-
}
|
|
841
|
-
}
|
|
842
|
-
|
|
843
|
-
var CCUtils = /*#__PURE__*/Object.freeze({
|
|
844
|
-
__proto__: null,
|
|
845
|
-
getDomain: getDomain
|
|
846
|
-
});
|
|
847
|
-
|
|
848
1437
|
// cookie存储标识
|
|
849
1438
|
const TOKEN = "cc_token";
|
|
850
1439
|
/**
|
|
@@ -931,13 +1520,7 @@ var CCUser = /*#__PURE__*/Object.freeze({
|
|
|
931
1520
|
getUserInfo: getUserInfo
|
|
932
1521
|
});
|
|
933
1522
|
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
// 获取ccdk版本
|
|
937
|
-
function getVersion() {
|
|
938
|
-
return "V0.4.7"
|
|
939
|
-
}
|
|
940
|
-
let CCDK = { getVersion, CCApplication, CCUser, CCCrypto: Crypto, CCToken, CCConfig, CCLoad, CCMenu, CCUtils, CCHttp, CCObject, CCPage, CCSide, CCBus, CCCall, CCMessage };
|
|
1523
|
+
let CCDK = { CCApplication, CCUser, CCCrypto: Crypto, CCToken, CCConfig, CCLoad, CCLog, CCMenu, CCUtils, CCHttp, CCObject, CCPage, CCSide, CCBus, CCCall, CCMessage };
|
|
941
1524
|
Vue.prototype.$CCDK = CCDK;
|
|
942
1525
|
window.$CCDK = CCDK;
|
|
943
1526
|
|
package/lib/ccdk.min.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import CryptoJS from"crypto-js";import Vue from"vue";import axios from"axios";import{Message,MessageBox,Notification}from"element-ui";import Cookies from"js-cookie";function getAesString(data,key,iv){key=CryptoJS.enc.Utf8.parse(key);iv=CryptoJS.enc.Utf8.parse(iv);let encrypted=CryptoJS.AES.encrypt(data,key,{iv:iv,padding:CryptoJS.pad.Pkcs7});return encrypted.toString()}function getDAesString(encrypted,key,iv){key=CryptoJS.enc.Utf8.parse(key);iv=CryptoJS.enc.Utf8.parse(iv);let decrypted=CryptoJS.AES.decrypt(encrypted,key,{iv:iv,padding:CryptoJS.pad.Pkcs7});return decrypted.toString(CryptoJS.enc.Utf8)}function encrypt(data,key="AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",iv=1){data=JSON.stringify(data);var encrypted=getAesString(data,key,iv);return encrypted}function decrypt(data,key="AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",iv=1){try{var decryptedStr=getDAesString(data,key,iv);if(!decryptedStr)return null;return JSON.parse(decryptedStr)}catch(error){console.trace("解密密码错误",error);return null}}var Crypto=Object.freeze({__proto__:null,encrypt:encrypt,decrypt:decrypt});const APPLICATION_DETAIL="applicaton_current";function getApplicaton(){let detail=localStorage.getItem(Crypto.encrypt(APPLICATION_DETAIL));if(detail){return JSON.parse(detail)}return""}function setApplication(detail=""){if(detail){localStorage.setItem(Crypto.encrypt(APPLICATION_DETAIL),JSON.stringify(detail))}}var CCApplication=Object.freeze({__proto__:null,getApplicaton:getApplicaton,setApplication:setApplication});window.ccBus=new Vue;function $emit(event,...args){window.ccBus.$emit(event,...args)}function $on(event,callback){window.ccBus.$on(event,callback)}function $off(event){window.ccBus.$off(event)}var CCBus=Object.freeze({__proto__:null,$emit:$emit,$on:$on,$off:$off});let ccCall=new Map;let currentCall;function init$1(id,callClient){if(id&&callClient){ccCall.set(id,callClient);currentCall=callClient;return currentCall}}function call(id,options){let call;if(id){call=ccCall.get(id)}else{call=currentCall}if(call){call.call(options)}return call}function openCallPanel(id,options){let call;if(id){call=ccCall.get(id)}else{call=currentCall}if(call){call.openCallPanel(options)}return call}var CCCall=Object.freeze({__proto__:null,init:init$1,call:call,openCallPanel:openCallPanel});function getBaseUrl(){return window.gw.BASE_URL}function getGw(){return window.gw}function getSvc(){return window.Glod}var CCConfig=Object.freeze({__proto__:null,getBaseUrl:getBaseUrl,getGw:getGw,getSvc:getSvc});const service=axios.create({timeout:6e4,headers:{"Content-Type":"application/json; charset=utf-8"}});service.interceptors.request.use(config=>{config.headers["accessToken"]=window.$CCDK.CCToken.getToken();return config},error=>{Promise.reject(error)});service.interceptors.response.use(response=>{const code=response.data.code||200;if(code!==200){return Promise.reject(null==response.data.msg?"未知异常":response.data.msg)}else{return response.data}},error=>{return Promise.reject(error)});function get(url,data={},responseType=""){return service({url:url,method:"get",params:data,responseType:responseType})}function post(url,data={},responseType=""){return service({url:url,method:"post",data:data,responseType:responseType})}function put(url,data={}){return service({url:url,method:"put",data:data})}function postParams(url,data={}){return service({url:url,method:"post",params:data})}function patch(url,data={}){return service({url:url,method:"patch",data:data})}var CCHttp=Object.freeze({__proto__:null,get:get,post:post,put:put,patch:patch,postParams:postParams});function loadJs(src,scriptOption){return new Promise((resolve,reject)=>{let scriptTemp=document.createElement("script");if(scriptOption){Object.assign(scriptTemp,scriptOption)}scriptTemp.type="text/javascript";scriptTemp.src=src;document.body.appendChild(scriptTemp);scriptTemp.onload=()=>{resolve()};scriptTemp.onerror=()=>{reject()}})}function createLoadJsComponent(){Vue.component("cc-load-script",{render:function(createElement){var self=this;return createElement("script",{attrs:{type:"text/javascript",src:this.src},on:{load:function(event){self.$emit("load",event)},error:function(event){self.$emit("error",event)},readystatechange:function(event){if(this.readyState=="complete"){self.$emit("load",event)}}}})},props:{src:{type:String,required:true}}})}var CCLoad=Object.freeze({__proto__:null,loadJs:loadJs,createLoadJsComponent:createLoadJsComponent});function addMenu1(options){window.$CCDK.CCBus.$emit("addMenu1",options)}function addMenu2(options){window.$CCDK.CCBus.$emit("addMenu2",options)}function deleteMenu1(options){window.$CCDK.CCBus.$emit("deleteMenu1",options)}function deleteMenu2(options){window.$CCDK.CCBus.$emit("deleteMenu2",options)}function refreshMenu1(options){window.$CCDK.CCBus.$emit("refreshMenu1",options)}function refreshMenu2(options){window.$CCDK.CCBus.$emit("refreshMenu2",options)}function replaceMenu1(options){window.$CCDK.CCBus.$emit("replaceMenu1",options)}function replaceMenu2(options){window.$CCDK.CCBus.$emit("replaceMenu2",options)}function reOpenMenu1(options){window.$CCDK.CCBus.$emit("reOpenMenu1",options)}function reOpenMenu2(options){window.$CCDK.CCBus.$emit("reOpenMenu2",options)}var CCMenu=Object.freeze({__proto__:null,addMenu1:addMenu1,addMenu2:addMenu2,deleteMenu1:deleteMenu1,deleteMenu2:deleteMenu2,refreshMenu1:refreshMenu1,refreshMenu2:refreshMenu2,replaceMenu1:replaceMenu1,replaceMenu2:replaceMenu2,reOpenMenu1:reOpenMenu1,reOpenMenu2:reOpenMenu2});function showMessage(text,type="info",duration=3e3,showClose=false,center=false){Message({message:text,type:type,duration:duration,showClose:showClose,center:center})}function showConfirm(text,title,options={},confirm=()=>{},reject=()=>{}){MessageBox.confirm(text,title,options).then(()=>{confirm()}).catch(()=>{reject()})}function showNotification(options={}){Notification(options)}var CCMessage=Object.freeze({__proto__:null,showMessage:showMessage,showConfirm:showConfirm,showNotification:showNotification});const OBJECT_DETAIL="cc_object_detail";const OBJECT="cc_object";const OBJECT_LIST="cc_object_list";function getObject(){let detail=localStorage.getItem(Crypto.encrypt(OBJECT));if(detail){return JSON.parse(detail)}return""}function setObject(detail=""){if(detail){localStorage.setItem(Crypto.encrypt(OBJECT),JSON.stringify(detail))}}function getObjectDetail(apiname){let detail=localStorage.getItem(Crypto.encrypt(OBJECT_DETAIL));if(detail){if(apiname){let detailObj=JSON.parse(detail).detail;let targetField=undefined;if(Array.isArray(detailObj)){targetField=detailObj.find(item=>item.apiname===apiname)}return targetField}else{return JSON.parse(detail)}}return""}function setObjectDetail(detail=""){if(detail){if(Array.isArray(detail.detail)){let data=[];detail.detail.forEach(item=>{if(item&&Array.isArray(item.data)){item.data.forEach(itemData=>{if(itemData.left&&!Array.isArray(itemData.left)){data.push(itemData.left)}if(itemData.right&&!Array.isArray(itemData.right)){data.push(itemData.right)}})}});if(data.length>0){detail.detail=data}}localStorage.setItem(Crypto.encrypt(OBJECT_DETAIL),JSON.stringify(detail))}}function setObjectList(detail={}){if(detail.ids){localStorage.setItem(Crypto.encrypt(OBJECT_LIST),JSON.stringify(detail))}}function getObjectList(){let detail=localStorage.getItem(Crypto.encrypt(OBJECT_LIST));if(detail){return JSON.parse(detail)}return{ids:[]}}var CCObject=Object.freeze({__proto__:null,getObjectList:getObjectList,setObjectList:setObjectList,getObject:getObject,setObject:setObject,getObjectDetail:getObjectDetail,setObjectDetail:setObjectDetail});let pageList=new Map;function openListPage(obj,options={}){let pageId=options.pageId||Math.random().toString(16).slice(2);window.$CCDK.CCBus.$emit("openListPage",pageId,obj,options);return pageId}function openDetailPage(obj,id,options={}){let pageId=options.pageId||Math.random().toString(16).slice(2);window.$CCDK.CCBus.$emit("openDetailPage",pageId,obj,id,options);return pageId}function openCreatePage(obj,options={}){let pageId=options.pageId||Math.random().toString(16).slice(2);window.$CCDK.CCBus.$emit("openCreatePage",pageId,obj,options);return pageId}function openEditPage(obj,id,options={}){let pageId=options.pageId||Math.random().toString(16).slice(2);window.$CCDK.CCBus.$emit("openEditPage",pageId,obj,id,options);return pageId}function openCustomPage(obj,options={}){let pageId=options.pageId||Math.random().toString(16).slice(2);window.$CCDK.CCBus.$emit("openCustomPage",pageId,obj,options);return pageId}function reOpenPage(pageId,options){let page;if(pageId){page=pageList.get(pageId)}if(page){page.reOpenPage();if(options.refresh){page.refresh()}}}function addPage(id,page){if(id&&page){pageList.set(id,page)}}function deletePage(pageId){if(pageId){pageList.delete(pageId)}}function updatePage(id,page){if(id&&page){pageList.set(id,page)}}function searchPage(pageId){return pageList.get(pageId)}function close$1(pageId=""){let page;if(pageId==="all"){page=[...pageList.values()];page.forEach(item=>{if(item){item.close()}})}else if(pageId){page=pageList.get(pageId)}else{let currentMenuTree=JSON.parse(localStorage.getItem("current_page"));if(currentMenuTree){if(currentMenuTree.level2Id){page=pageList.get(currentMenuTree.level2Id)}else{page=pageList.get(currentMenuTree.id)}}}if(page){page.close()}}function refresh(){window.$CCDK.CCBus.$emit("refresh")}function getCurrentPage(){let currentMenuTree=localStorage.getItem("current_page");if(currentMenuTree){return JSON.parse(currentMenuTree)}return""}var CCPage=Object.freeze({__proto__:null,openListPage:openListPage,openDetailPage:openDetailPage,openCreatePage:openCreatePage,openEditPage:openEditPage,openCustomPage:openCustomPage,reOpenPage:reOpenPage,addPage:addPage,deletePage:deletePage,updatePage:updatePage,searchPage:searchPage,close:close$1,refresh:refresh,getCurrentPage:getCurrentPage});function init(options){window.$CCDK.CCBus.$emit("initSide",options)}function open(){window.$CCDK.CCBus.$emit("openSide")}function close(){window.$CCDK.CCBus.$emit("closeSide")}var CCSide=Object.freeze({__proto__:null,init:init,open:open,close:close});function getDomain(){let lastTow=document.domain.split(".").slice(-2,-1)[0];if(lastTow=="com"||lastTow=="org"||lastTow=="net"){return"."+document.domain.split(".").slice(-3).join(".")}else{return"."+document.domain.split(".").slice(-2).join(".")}}var CCUtils=Object.freeze({__proto__:null,getDomain:getDomain});const TOKEN="cc_token";function getUrlQuery(name){var reg=new RegExp(name+"=([^&]*)(&|$)");var r=window.location.href.match(reg);let res=null;if(r!=null)res=r[1].trim();return res}function getToken(urlName="binding"){let token=getUrlQuery(urlName)||Cookies.get(Crypto.encrypt(TOKEN))||Cookies.get(urlName);if(token){setToken(token)}return token}function setToken(token,domain=getDomain()){Cookies.set(Crypto.encrypt(TOKEN),token,{domain:domain,expires:1/12});Cookies.set(Crypto.encrypt(TOKEN),token,{expires:1/12})}function clearToken(domain=getDomain()){Cookies.remove(Crypto.encrypt(TOKEN),{domain:domain});Cookies.remove(Crypto.encrypt(TOKEN))}var CCToken=Object.freeze({__proto__:null,setToken:setToken,getToken:getToken,clearToken:clearToken,getUrlQuery:getUrlQuery});const USER_INFO="cc_user_info";function setUserInfo(userInfo,domain=getDomain()){Cookies.set(Crypto.encrypt(USER_INFO),Crypto.encrypt(userInfo),{domain:domain,expires:1/12});Cookies.set(Crypto.encrypt(USER_INFO),Crypto.encrypt(userInfo),{expires:1/12})}function getUserInfo(){let encryptUserInfo=Cookies.get(Crypto.encrypt(USER_INFO));if(encryptUserInfo){return Crypto.decrypt(encryptUserInfo)}else{return""}}var CCUser=Object.freeze({__proto__:null,setUserInfo:setUserInfo,getUserInfo:getUserInfo});function getVersion(){return"V0.4.7"}let CCDK={getVersion:getVersion,CCApplication:CCApplication,CCUser:CCUser,CCCrypto:Crypto,CCToken:CCToken,CCConfig:CCConfig,CCLoad:CCLoad,CCMenu:CCMenu,CCUtils:CCUtils,CCHttp:CCHttp,CCObject:CCObject,CCPage:CCPage,CCSide:CCSide,CCBus:CCBus,CCCall:CCCall,CCMessage:CCMessage};Vue.prototype.$CCDK=CCDK;window.$CCDK=CCDK;export{CCDK as default};
|
|
1
|
+
import Vue from"vue";import CryptoJS from"crypto-js";import axios,{AxiosError}from"axios";import cloneDeep from"lodash/cloneDeep";import*as Sentry from"@sentry/vue";import Cookies from"js-cookie";import{Message,MessageBox,Notification}from"element-ui";function getAesString(data,key,iv){key=CryptoJS.enc.Utf8.parse(key);iv=CryptoJS.enc.Utf8.parse(iv);let encrypted=CryptoJS.AES.encrypt(data,key,{iv:iv,padding:CryptoJS.pad.Pkcs7});return encrypted.toString()}function getDAesString(encrypted,key,iv){key=CryptoJS.enc.Utf8.parse(key);iv=CryptoJS.enc.Utf8.parse(iv);let decrypted=CryptoJS.AES.decrypt(encrypted,key,{iv:iv,padding:CryptoJS.pad.Pkcs7});return decrypted.toString(CryptoJS.enc.Utf8)}function encrypt(data,key="AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",iv=1){data=JSON.stringify(data);var encrypted=getAesString(data,key,iv);return encrypted}function decrypt(data,key="AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",iv=1){try{var decryptedStr=getDAesString(data,key,iv);if(!decryptedStr)return null;return JSON.parse(decryptedStr)}catch(error){console.trace("解密密码错误",error);return null}}var Crypto=Object.freeze({__proto__:null,encrypt:encrypt,decrypt:decrypt});const APPLICATION_DETAIL="applicaton_current";function getApplicaton(){let detail=localStorage.getItem(Crypto.encrypt(APPLICATION_DETAIL));if(detail){return JSON.parse(detail)}return""}function setApplication(detail=""){if(detail){localStorage.setItem(Crypto.encrypt(APPLICATION_DETAIL),JSON.stringify(detail))}}var CCApplication=Object.freeze({__proto__:null,getApplicaton:getApplicaton,setApplication:setApplication});window.ccBus=new Vue;function $emit(event,...args){window.ccBus.$emit(event,...args)}function $on(event,callback){window.ccBus.$on(event,callback)}function $off(event){window.ccBus.$off(event)}var CCBus=Object.freeze({__proto__:null,$emit:$emit,$on:$on,$off:$off});let ccCall=new Map;let currentCall;function init$1(id,callClient){if(id&&callClient){ccCall.set(id,callClient);currentCall=callClient;return currentCall}}function call(id,options){let call;if(id){call=ccCall.get(id)}else{call=currentCall}if(call){call.call(options)}return call}function openCallPanel(id,options){let call;if(id){call=ccCall.get(id)}else{call=currentCall}if(call){call.openCallPanel(options)}return call}var CCCall=Object.freeze({__proto__:null,init:init$1,call:call,openCallPanel:openCallPanel});function getBaseUrl(){return window.gw.BASE_URL}function getGw(){return window.gw}function getSvc(){return window.Glod}function getCDNUrl(){return window.Glod.CDN_URL}var CCConfig=Object.freeze({__proto__:null,getBaseUrl:getBaseUrl,getGw:getGw,getSvc:getSvc,getCDNUrl:getCDNUrl});function reportException(response){Sentry.withScope(function(scope){scope.setFingerprint(["接口未捕获异常response"]);Sentry.captureException(response)})}const keyCode="646576636f6e736f6c652d7376633132";function en(word,keyStr=keyCode){let enc=CryptoJS.AES.encrypt(word,CryptoJS.enc.Hex.parse(keyStr),{mode:CryptoJS.mode.ECB,padding:CryptoJS.pad.Pkcs7});return enc.ciphertext.toString()}function de(word,keyStr=keyCode){let dec=CryptoJS.AES.decrypt(CryptoJS.format.Hex.parse(word),CryptoJS.enc.Hex.parse(keyStr),{mode:CryptoJS.mode.ECB,padding:CryptoJS.pad.Pkcs7});return CryptoJS.enc.Utf8.stringify(dec)}function getDomain(){let lastTow=document.domain.split(".").slice(-2,-1)[0];if(lastTow=="com"||lastTow=="org"||lastTow=="net"){return"."+document.domain.split(".").slice(-3).join(".")}else{return"."+document.domain.split(".").slice(-2).join(".")}}function getUuid(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(c){var r=Math.random()*16|0,v=c=="x"?r:r&3|8;return v.toString(16)})}function getBinding(){let binding=window.$CCDK.CCToken.getToken();if(!binding){window.open(window.Glod.LOGIN_URL,"_self")}else{Cookies.set("binding",binding,{expires:1/12});Cookies.set("JSESSIONID",binding,{expires:1/12})}return binding}var CCUtils=Object.freeze({__proto__:null,getDomain:getDomain,getUuid:getUuid,getBinding:getBinding});const toStr=Object.prototype.toString;const TypeEnum={FUNCTION:"[object Function]",ARRAY:"[object Array]"};const isFn=value=>toStr.call(value)===TypeEnum.FUNCTION;const isProduction=()=>process.env.NODE_ENV=="production";const delay=(waitTime=1e3)=>new Promise(resolve=>setTimeout(resolve,waitTime));const isTimeout=(error={code:"",message:""})=>{return error.code===AxiosError.ECONNABORTED&&error.message.includes("timeout")};const formateData=data=>{return{head:{appType:"lightning-main",appVersion:"1.1.1",accessToken:getBinding(),source:"lightning-main"},body:{...data}}};const LRUCache=function(capacity){this.capacity=capacity;this.cache=new Map};LRUCache.prototype.get=function(key){var cacheTemp=this.cache,curTemp=cacheTemp.get(key);if(curTemp||curTemp===0){cacheTemp.delete(key);cacheTemp.set(key,curTemp);return curTemp}return null};LRUCache.prototype.put=function(key,value){var cacheTemp=this.cache;if(cacheTemp.get(key)){cacheTemp.delete(key)}else if(cacheTemp.size>=this.capacity){cacheTemp.delete(cacheTemp.keys().next().value)}cacheTemp.set(key,value)};class CCAxios{constructor(opt){this.options=opt;this.axiosInstance=axios.create(opt);this.setupInterceptors();this.cachePool=new LRUCache(20)}getTransform(){const{transform}=this.options;return transform}setupInterceptors(){const transform=this.getTransform();if(!transform){return}const{requestInterceptors,requestInterceptorsCatch,responseInterceptors,responseInterceptorsCatch}=transform;this.axiosInstance.interceptors.request.use(requestInterceptors,undefined);requestInterceptorsCatch&&isFn(requestInterceptorsCatch)&&this.axiosInstance.interceptors.request.use(undefined,requestInterceptorsCatch);this.axiosInstance.interceptors.response.use(responseInterceptors,undefined);responseInterceptorsCatch&&isFn(responseInterceptorsCatch)&&this.axiosInstance.interceptors.response.use(undefined,error=>{return responseInterceptorsCatch(this.axiosInstance,error)})}get(config,options={}){return this.request({...config,method:"GET"},options)}post(config,options={}){const{envType}=options;if("public"==envType&&"private"==window.Glod["ENV_TYPE"]){return new Promise(()=>{})}if("private"==envType&&"private"!=window.Glod["ENV_TYPE"]){return new Promise(()=>{})}return this.request({...config,method:"POST"},options)}postFormat(config,options={}){return this.request({...config,method:"POST",data:formateData(config.data)},options)}postParams(config,options={}){return this.request({...config,method:"POST",params:config.data},options)}request(config,options){const transform=this.getTransform();const conf=config,{requestOptions}=this.options;requestOptions.cache=false;requestOptions.cacheKey="";requestOptions.retryRequest={isOpenRetry:false,count:5,waitTime:1e3};const opt=Object.assign({},requestOptions,options);conf.requestOptions=opt;const retPromise=new Promise((resolve,reject)=>{this.axiosInstance(conf).then(res=>{const{transformResponseHook}=transform;if(transformResponseHook&&isFn(transformResponseHook)){try{const ret=transformResponseHook(res,opt,this.cachePool);resolve(ret)}catch(err){reject(err||new Error("request error!"))}return}resolve(res)}).catch(err=>{reject(err)})});retPromise.cache=callback=>{const{cache,cacheKey}=opt;const cacheData=(cache&&this.cachePool.get([cacheKey]))??null;console.log("cacheData",cacheData);callback(cacheData);return retPromise};return retPromise}}const createErrorModal=(response,options)=>{const{message}=options;let temp;if(response.name==="AxiosError"){temp=response.response;temp.data.returnInfo=response.returnInfo||message||temp.error||"";temp.data.returnCode=response.code||temp.status;temp.data.requestId=response.config.headers.requestId}else{temp=response;temp.data.requestId=response.config.headers.requestId}Vue.prototype.$ErrorDialog({response:temp})};const createMessage=Message;const needReportErrorType=["901","999"];function checkStatus(error,status,msg,errorMessageMode="modal"){let errMessage="message.error.object.contactadministrators";if(status===401){window.open(window.Glod.LOGIN_URL,"_self")}{if(errorMessageMode==="modal"){createErrorModal(error,{message:errMessage})}else if(errorMessageMode==="message"){createMessage.error(errMessage)}}}const retry=async(instance,error)=>{const{config}=error,{waitTime,count=5}=config.requestOptions||{};config.__retryCount=config.__retryCount||0;if(count<=config.__retryCount){return Promise.reject(error)}config.__retryCount++;await delay(waitTime);delete config.headers;return instance(config)};const encryptList=["sysconfig/auth/pc/1.0/post/unifiedLogin","sysconfig/auth/pc/1.0/get/getUserInfo"];const transform={async requestInterceptors(config){config.headers.requestId=getUuid();config.headers.requestIdProducer="browser";if(!getBinding()){return Promise.reject()}if(!config.url.startsWith("https://")&&!config.url.startsWith("https://")&&!config.url.startsWith("/test-api")){config.baseURL=window.Glod["ccex-apitsf"]+"/api"}encryptList.forEach(item=>{if(config.url.indexOf(item)!=-1){config.data=en(JSON.stringify(config.data))}});config.headers.accessToken=window.$CCDK.CCToken.getToken();return config},requestInterceptorsCatch(error){return Promise.reject(error)},responseInterceptors(response){const{data,config}=response,{errorType,result}=data;if(!result){if(needReportErrorType.includes(errorType)&&isProduction()){const{serviceName,errorLevel,errorType}=config.requestOptions;reportException(response);window.$CCDK.CCLog.reportLog(window.Glod["ccex-log"]+"/ccerrorlog",{},{serviceName:serviceName,errorType:errorType,errorLevel:errorLevel,errorMessage:response.data.returnInfo,printStackTraceInfo:JSON.stringify(response)},response)}return response}const{serviceName}=config.requestOptions;isProduction()&&window.$CCDK.CCLog.reportLog(window.Glod["ccex-log"]+"/systeminfolog",{},{serviceName:serviceName},response);return response},async responseInterceptorsCatch(axiosInstance,error){const{response,config}=error||{},err=error?.toString?.()??"",msg=response?.data?.error??"",mode=config?.requestOptions?.errorMessageMode;let errorMessageMode=["message","modal"].includes(mode)&&mode||"modal",errMessage="";if(axios.isCancel(error)){return Promise.reject(error)}if(isProduction()){const{serviceName,errorLevel,errorType}=config.requestOptions;reportException(response);window.$CCDK.CCLog.reportLog(window.Glod["ccex-log"]+"/ccerrorlog",{},{serviceName:serviceName,errorType:errorType,errorLevel:errorLevel,errorMessage:response.data.returnInfo,printStackTraceInfo:JSON.stringify(response)},response)}try{if(isTimeout(error)){errMessage="c2487"}if(err?.includes("Network Error")){errMessage="c929"}if(errMessage){if(errorMessageMode==="modal"){createErrorModal({...error,response:{data:{returnInfo:error.message,returnCode:error.code,requestId:error.config.headers.requestId},config:error.config}},{message:errMessage})}else if(errorMessageMode==="message"){createMessage.error(errMessage)}return Promise.reject(error)}}catch(error){throw new Error(error)}checkStatus(error,error?.response?.status,msg,errorMessageMode);const{isOpenRetry}=config.requestOptions.retryRequest;isOpenRetry&&config.method?.toUpperCase()==="GET"&&retry(axiosInstance,error);return Promise.reject(error)},transformResponseHook(response,options,cachePool){const{data,config}=response;const{url}=config,{errorType,result}=data;const businessLogicError=response=>{const{errorMessageMode,silent}=response.config.requestOptions;if(silent)return;if(errorMessageMode==="modal"){createErrorModal(response,{message:"业务出错"})}else if(errorMessageMode==="message"){createMessage.error(response?.data?.returnInfo||"业务出错")}};if(!result){switch(errorType){case"901":createErrorModal(response,{message:"系统错误"});break;case"999":break;case"501":default:businessLogicError(response);break}return Promise.reject(response)}const{isReturnNativeResponse,cache,cacheKey}=options;if(isReturnNativeResponse){cache&&cacheKey&&cachePool.put(cacheKey,response);return response}if(encryptList.includes(url)){return JSON.parse(de(data))}cache&&cacheKey&&cachePool.put(cacheKey,data);return data}};function createAxios(opt){return new CCAxios(Object.assign({},{timeout:60*1e3,headers:{"Content-Type":"application/json;charset=UTF-8"},transform:cloneDeep(transform),requestOptions:{envType:"",serviceName:"lightning-main",errorLevel:"2",errorType:"front-error",errorMessageMode:"modal",silent:false,cache:false,retryRequest:{isOpenRetry:false,count:5,waitTime:100},isReturnNativeResponse:false}},opt||{}))}var CCHttp=Object.freeze({__proto__:null,createAxios:createAxios});function loadJs(src,scriptOption){return new Promise((resolve,reject)=>{let scriptTemp=document.createElement("script");if(scriptOption){Object.assign(scriptTemp,scriptOption)}scriptTemp.type="text/javascript";scriptTemp.src=src;document.body.appendChild(scriptTemp);scriptTemp.onload=()=>{resolve()};scriptTemp.onerror=()=>{reject()}})}function createLoadJsComponent(){Vue.component("cc-load-script",{render:function(createElement){var self=this;return createElement("script",{attrs:{type:"text/javascript",src:this.src},on:{load:function(event){self.$emit("load",event)},error:function(event){self.$emit("error",event)},readystatechange:function(event){if(this.readyState=="complete"){self.$emit("load",event)}}}})},props:{src:{type:String,required:true}}})}var CCLoad=Object.freeze({__proto__:null,loadJs:loadJs,createLoadJsComponent:createLoadJsComponent});function getUserInfo$1(){let userInfo=window.$CCDK.CCUser.getUserInfo();return{userName:userInfo.loginName,userId:userInfo.userId,orgId:userInfo.orgId,orgName:userInfo.orgName}}function getLogInfo(serviceName="未知应用",errorType,errorLevel,errorMessage,printStackTraceInfo,cccode="hidden"){return{serviceName:serviceName,errorType:errorType,errorLevel:errorLevel,errorMessage:errorMessage,printStackTraceInfo:printStackTraceInfo,displayLevel:"2",cccode:cccode,operateTime:(new Date).valueOf()}}function getRequestInfo(response){if(window.performance){let per=performance.getEntriesByName(response.request.responseURL,"resource");if(per.length>0){response.spendTime=per[0].fetchStart>0?per[0].responseEnd-per[0].fetchStart:"0"}}return{spendTime:response.spendTime||"-1",requestUrl:response.request.responseURL,requestId:response.config.headers.requestId,requestIdProducer:response.config.headers.requestIdProducer,requestParameter:response.config.data,requestResult:response.data.result?"成功":"失败",infoMessage:response.data.returnInfo}}function reportLog(url,userInfo,logInfo,response){axios.post(url,{...Object.assign(getUserInfo$1(),userInfo),...Object.assign(getLogInfo(),logInfo),...getRequestInfo(response)})}var CCLog=Object.freeze({__proto__:null,reportLog:reportLog});function addMenu1(options){window.$CCDK.CCBus.$emit("addMenu1",options)}function addMenu2(options){window.$CCDK.CCBus.$emit("addMenu2",options)}function deleteMenu1(options){window.$CCDK.CCBus.$emit("deleteMenu1",options)}function deleteMenu2(options){window.$CCDK.CCBus.$emit("deleteMenu2",options)}function refreshMenu1(options){window.$CCDK.CCBus.$emit("refreshMenu1",options)}function refreshMenu2(options){window.$CCDK.CCBus.$emit("refreshMenu2",options)}function replaceMenu1(options){window.$CCDK.CCBus.$emit("replaceMenu1",options)}function replaceMenu2(options){window.$CCDK.CCBus.$emit("replaceMenu2",options)}function reOpenMenu1(options){window.$CCDK.CCBus.$emit("reOpenMenu1",options)}function reOpenMenu2(options){window.$CCDK.CCBus.$emit("reOpenMenu2",options)}var CCMenu=Object.freeze({__proto__:null,addMenu1:addMenu1,addMenu2:addMenu2,deleteMenu1:deleteMenu1,deleteMenu2:deleteMenu2,refreshMenu1:refreshMenu1,refreshMenu2:refreshMenu2,replaceMenu1:replaceMenu1,replaceMenu2:replaceMenu2,reOpenMenu1:reOpenMenu1,reOpenMenu2:reOpenMenu2});function showMessage(text,type="info",duration=3e3,showClose=false,center=false){Message({message:text,type:type,duration:duration,showClose:showClose,center:center})}function showConfirm(text,title,options={},confirm=()=>{},reject=()=>{}){MessageBox.confirm(text,title,options).then(()=>{confirm()}).catch(()=>{reject()})}function showNotification(options={}){Notification(options)}var CCMessage=Object.freeze({__proto__:null,showMessage:showMessage,showConfirm:showConfirm,showNotification:showNotification});const OBJECT_DETAIL="cc_object_detail";const OBJECT="cc_object";const OBJECT_LIST="cc_object_list";function getObject(){let detail=localStorage.getItem(Crypto.encrypt(OBJECT));if(detail){return JSON.parse(detail)}return""}function setObject(detail=""){if(detail){localStorage.setItem(Crypto.encrypt(OBJECT),JSON.stringify(detail))}}function getObjectDetail(apiname){let detail=localStorage.getItem(Crypto.encrypt(OBJECT_DETAIL));if(detail){if(apiname){let detailObj=JSON.parse(detail).detail;let targetField=undefined;if(Array.isArray(detailObj)){targetField=detailObj.find(item=>item.apiname===apiname)}return targetField}else{return JSON.parse(detail)}}return""}function setObjectDetail(detail=""){if(detail){if(Array.isArray(detail.detail)){let data=[];detail.detail.forEach(item=>{if(item&&Array.isArray(item.data)){item.data.forEach(itemData=>{if(itemData.left&&!Array.isArray(itemData.left)){data.push(itemData.left)}if(itemData.right&&!Array.isArray(itemData.right)){data.push(itemData.right)}})}});if(data.length>0){detail.detail=data}}localStorage.setItem(Crypto.encrypt(OBJECT_DETAIL),JSON.stringify(detail))}}function setObjectList(detail={}){if(detail.ids){localStorage.setItem(Crypto.encrypt(OBJECT_LIST),JSON.stringify(detail))}}function getObjectList(){let detail=localStorage.getItem(Crypto.encrypt(OBJECT_LIST));if(detail){return JSON.parse(detail)}return{ids:[]}}var CCObject=Object.freeze({__proto__:null,getObjectList:getObjectList,setObjectList:setObjectList,getObject:getObject,setObject:setObject,getObjectDetail:getObjectDetail,setObjectDetail:setObjectDetail});let pageList=new Map;function openListPage(obj,options={}){let pageId=options.pageId||Math.random().toString(16).slice(2);window.$CCDK.CCBus.$emit("openListPage",pageId,obj,options);return pageId}function openDetailPage(obj,id,options={}){let pageId=options.pageId||Math.random().toString(16).slice(2);window.$CCDK.CCBus.$emit("openDetailPage",pageId,obj,id,options);return pageId}function openCreatePage(obj,options={}){let pageId=options.pageId||Math.random().toString(16).slice(2);window.$CCDK.CCBus.$emit("openCreatePage",pageId,obj,options);return pageId}function openEditPage(obj,id,options={}){let pageId=options.pageId||Math.random().toString(16).slice(2);window.$CCDK.CCBus.$emit("openEditPage",pageId,obj,id,options);return pageId}function openCustomPage(obj,options={}){let pageId=options.pageId||Math.random().toString(16).slice(2);window.$CCDK.CCBus.$emit("openCustomPage",pageId,obj,options);return pageId}function reOpenPage(pageId,options){let page;if(pageId){page=pageList.get(pageId)}if(page){page.reOpenPage();if(options.refresh){page.refresh()}}}function addPage(id,page){if(id&&page){pageList.set(id,page)}}function deletePage(pageId){if(pageId){pageList.delete(pageId)}}function updatePage(id,page){if(id&&page){pageList.set(id,page)}}function searchPage(pageId){return pageList.get(pageId)}function close$1(pageId=""){let page;if(pageId==="all"){page=[...pageList.values()];page.forEach(item=>{if(item){item.close()}})}else if(pageId){page=pageList.get(pageId)}else{let currentMenuTree=JSON.parse(localStorage.getItem("current_page"));if(currentMenuTree){if(currentMenuTree.level2Id){page=pageList.get(currentMenuTree.level2Id)}else{page=pageList.get(currentMenuTree.id)}}}if(page){page.close()}}function refresh(){window.$CCDK.CCBus.$emit("refresh")}function getCurrentPage(){let currentMenuTree=localStorage.getItem("current_page");if(currentMenuTree){return JSON.parse(currentMenuTree)}return""}var CCPage=Object.freeze({__proto__:null,openListPage:openListPage,openDetailPage:openDetailPage,openCreatePage:openCreatePage,openEditPage:openEditPage,openCustomPage:openCustomPage,reOpenPage:reOpenPage,addPage:addPage,deletePage:deletePage,updatePage:updatePage,searchPage:searchPage,close:close$1,refresh:refresh,getCurrentPage:getCurrentPage});function init(options){window.$CCDK.CCBus.$emit("initSide",options)}function open(){window.$CCDK.CCBus.$emit("openSide")}function close(){window.$CCDK.CCBus.$emit("closeSide")}var CCSide=Object.freeze({__proto__:null,init:init,open:open,close:close});const TOKEN="cc_token";function getUrlQuery(name){var reg=new RegExp(name+"=([^&]*)(&|$)");var r=window.location.href.match(reg);let res=null;if(r!=null)res=r[1].trim();return res}function getToken(urlName="binding"){let token=getUrlQuery(urlName)||Cookies.get(Crypto.encrypt(TOKEN))||Cookies.get(urlName);if(token){setToken(token)}return token}function setToken(token,domain=getDomain()){Cookies.set(Crypto.encrypt(TOKEN),token,{domain:domain,expires:1/12});Cookies.set(Crypto.encrypt(TOKEN),token,{expires:1/12})}function clearToken(domain=getDomain()){Cookies.remove(Crypto.encrypt(TOKEN),{domain:domain});Cookies.remove(Crypto.encrypt(TOKEN))}var CCToken=Object.freeze({__proto__:null,setToken:setToken,getToken:getToken,clearToken:clearToken,getUrlQuery:getUrlQuery});const USER_INFO="cc_user_info";function setUserInfo(userInfo,domain=getDomain()){Cookies.set(Crypto.encrypt(USER_INFO),Crypto.encrypt(userInfo),{domain:domain,expires:1/12});Cookies.set(Crypto.encrypt(USER_INFO),Crypto.encrypt(userInfo),{expires:1/12})}function getUserInfo(){let encryptUserInfo=Cookies.get(Crypto.encrypt(USER_INFO));if(encryptUserInfo){return Crypto.decrypt(encryptUserInfo)}else{return""}}var CCUser=Object.freeze({__proto__:null,setUserInfo:setUserInfo,getUserInfo:getUserInfo});let CCDK={CCApplication:CCApplication,CCUser:CCUser,CCCrypto:Crypto,CCToken:CCToken,CCConfig:CCConfig,CCLoad:CCLoad,CCLog:CCLog,CCMenu:CCMenu,CCUtils:CCUtils,CCHttp:CCHttp,CCObject:CCObject,CCPage:CCPage,CCSide:CCSide,CCBus:CCBus,CCCall:CCCall,CCMessage:CCMessage};Vue.prototype.$CCDK=CCDK;window.$CCDK=CCDK;export{CCDK as default};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cloudcc-ccdk",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.4",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "lib/ccdk-min.js",
|
|
6
6
|
"scripts": {
|
|
@@ -26,6 +26,8 @@
|
|
|
26
26
|
"axios": "1.1.3",
|
|
27
27
|
"element-ui": "2.15.12",
|
|
28
28
|
"crypto-js": "4.1.1",
|
|
29
|
-
"js-cookie": "3.0.1"
|
|
29
|
+
"js-cookie": "3.0.1",
|
|
30
|
+
"lodash": "^4.17.20",
|
|
31
|
+
"@sentry/vue": "^6.19.7"
|
|
30
32
|
}
|
|
31
33
|
}
|