fstarter 2.10.53 → 2.10.54

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.
Files changed (80) hide show
  1. package/.babelrc +6 -6
  2. package/.editorconfig +9 -9
  3. package/fstarter.iml +9 -0
  4. package/index.html +22 -22
  5. package/index.js +222 -222
  6. package/package.json +104 -104
  7. package/src/App.vue +38 -38
  8. package/src/i18n/en-US.js +35 -35
  9. package/src/i18n/zh-CN.js +35 -35
  10. package/src/main.js +95 -95
  11. package/src/plugins/assets/ak.js +948 -948
  12. package/src/plugins/assets/callNative.js +490 -490
  13. package/src/plugins/assets/compressImg.js +75 -75
  14. package/src/plugins/assets/config.js +106 -106
  15. package/src/plugins/assets/fileServer.js +469 -469
  16. package/src/plugins/assets/http.js +344 -343
  17. package/src/plugins/assets/ua.js +27 -27
  18. package/src/plugins/components/BSButton.vue +61 -61
  19. package/src/plugins/components/BSCascader.vue +465 -465
  20. package/src/plugins/components/BSCell.vue +48 -48
  21. package/src/plugins/components/BSDatePicker.vue +167 -167
  22. package/src/plugins/components/BSImage.vue +42 -42
  23. package/src/plugins/components/BSInput.vue +140 -140
  24. package/src/plugins/components/BSList.vue +81 -81
  25. package/src/plugins/components/BSPicCode.vue +96 -96
  26. package/src/plugins/components/BSPopup.vue +43 -43
  27. package/src/plugins/components/BSRadio.vue +97 -97
  28. package/src/plugins/components/BSSearch.vue +109 -109
  29. package/src/plugins/components/BSSelect.vue +144 -144
  30. package/src/plugins/components/BSSign.vue +454 -454
  31. package/src/plugins/components/BSStepper.vue +115 -115
  32. package/src/plugins/components/BSUpload.vue +92 -92
  33. package/src/plugins/components/BSUpload2.vue +398 -398
  34. package/src/plugins/components/BSVerCode.vue +128 -128
  35. package/src/plugins/components/BSViewer.vue +92 -92
  36. package/src/plugins/components/base.js +496 -496
  37. package/src/plugins/components/base2.js +489 -489
  38. package/src/plugins/lib/weixin.js +20 -20
  39. package/src/plugins/platform/index.js +7 -7
  40. package/src/plugins/platform/isp_phone.js +310 -310
  41. package/src/plugins/route/index.js +140 -140
  42. package/src/plugins/selector/index.js +342 -342
  43. package/src/plugins/service/index.js +81 -81
  44. package/src/plugins/services/callCamera.js +53 -53
  45. package/src/plugins/services/exit.js +36 -36
  46. package/src/plugins/services/face.js +69 -69
  47. package/src/plugins/services/faceH5.js +54 -54
  48. package/src/plugins/services/faceInApp.js +31 -31
  49. package/src/plugins/services/faceTx.js +61 -61
  50. package/src/plugins/services/getFaceResult.js +104 -104
  51. package/src/plugins/services/getH5FaceResult.js +62 -62
  52. package/src/plugins/services/getMenus.js +40 -40
  53. package/src/plugins/services/getSystemData.js +128 -128
  54. package/src/plugins/services/getToken.js +79 -79
  55. package/src/plugins/services/getTxFaceResult.js +83 -83
  56. package/src/plugins/services/getUserInfo.js +47 -47
  57. package/src/plugins/services/goSetPage.js +40 -40
  58. package/src/plugins/services/hideFhoneTitle.js +36 -36
  59. package/src/plugins/services/index.js +45 -45
  60. package/src/plugins/services/init.js +35 -35
  61. package/src/plugins/services/jumpView.js +40 -40
  62. package/src/plugins/services/logout.js +43 -43
  63. package/src/plugins/services/share.js +113 -113
  64. package/src/plugins/services/statusBarHeight.js +39 -39
  65. package/src/plugins/session/index.js +32 -32
  66. package/src/services/getAuthInfo.js +22 -22
  67. package/src/services/index.js +9 -9
  68. package/src/services/sendVerCode.js +23 -23
  69. package/src/views/auth.vue +367 -367
  70. package/src/views/auth2.vue +90 -90
  71. package/src/views/auth3.vue +157 -157
  72. package/src/views/auth4.vue +8979 -8979
  73. package/src/views/auth5.vue +50 -50
  74. package/src/views/authh5.vue +369 -369
  75. package/src/views/components/BankSelect.vue +55 -55
  76. package/src/views/foot.vue +140 -140
  77. package/src/views/page.vue +222 -222
  78. package/src/views/shellFunc.vue +41 -41
  79. package/themes/basic.css +1 -1
  80. package/webpack.config.js +144 -144
@@ -1,948 +1,948 @@
1
- import selector from '../selector'
2
-
3
- var ak = ak || {};
4
-
5
- ak.utils = {
6
-
7
- selector(express){
8
-
9
- return selector.select(null,express)
10
- },
11
- parserToDate(dateText, format) {
12
- if (!dateText) { //空值
13
- return new Date();
14
- }
15
- //定义默认值,默认值根据当前时间生成
16
- var defaultVal = new Date();
17
- var year = defaultVal.getFullYear();
18
- var month = defaultVal.getMonth() + 1;
19
- var day = defaultVal.getDate();
20
- var hours = defaultVal.getHours();
21
- var minutes = defaultVal.getMinutes();
22
- var seconds = defaultVal.getSeconds();
23
- var milliseconds = defaultVal.getMilliseconds();
24
- //定义正则
25
- var o = [{
26
- reg: "y+"
27
- }, //年份
28
- {
29
- reg: "M+"
30
- }, //月份
31
- {
32
- reg: "d+"
33
- }, //日
34
- {
35
- reg: "H+"
36
- }, //小时
37
- {
38
- reg: "m+"
39
- }, //分
40
- {
41
- reg: "s+"
42
- }, //秒
43
- {
44
- reg: "S"
45
- } //毫秒
46
- ];
47
- //获取到年月日,时分秒,毫秒几个值在字符串中的先后位置
48
- var index = 1;
49
- for (var j = 0; j < format.length; j++) {
50
- var onechar = format[j];
51
- for (var i = 0; i < o.length; i++) {
52
- var onepart = o[i]
53
- var onepartReg = onepart.reg;
54
- if (onepartReg[0] == onechar) {
55
- if (!onepart.index) {
56
- onepart.index = index; //获取到年月日,时分秒,毫秒几个值在字符串中的先后位置
57
- index++;
58
- }
59
- break;
60
- }
61
- }
62
-
63
- }
64
- //生成匹配的正则表达式
65
- for (var i = 0; i < o.length; i++) {
66
- var onepart = o[i]
67
- var onepartReg = onepart.reg;
68
- var re = new RegExp("(" + onepartReg + ")");
69
- var res = re.exec(format);
70
- if (res) {
71
- var formatPart = res[0]; //匹配到的格式化字符
72
- var replaceVal = "([0-9]{" + formatPart.length + "})"; //不能使用/d匹配,会和日期的d冲突
73
- format = format.replace(formatPart, replaceVal);
74
- }
75
- }
76
- //保存获取到的各个部分和位置
77
- var dataInfo = {};
78
- var re = new RegExp(format);
79
- var res = re.exec(dateText);
80
- //去掉第一个匹配,记录匹配到的数据
81
- if (res) {
82
- for (var i = 1; i < res.length; i++) {
83
- dataInfo[i] = res[i]; //记录年月日,时分秒,毫秒几个值在字符串中的位置和对应的值
84
- }
85
- } else {
86
- alert(dateText + "格式不匹配" + oldformat);
87
- }
88
- if (o[0].index) //年份存在
89
- {
90
- var index = o[0].index;
91
- year = dataInfo[index];
92
- }
93
- if (o[1].index) //月份存在
94
- {
95
- var index = o[1].index;
96
- month = dataInfo[index];
97
- }
98
- if (o[2].index) //日存在
99
- {
100
- var index = o[2].index;
101
- day = dataInfo[index];
102
- }
103
- if (o[3].index) //小时存在
104
- {
105
- var index = o[3].index;
106
- hours = dataInfo[index];
107
- }
108
- if (o[4].index) //分存在
109
- {
110
- var index = o[4].index;
111
- minutes = dataInfo[index];
112
- }
113
- if (o[5].index) //秒存在
114
- {
115
- var index = o[5].index;
116
- seconds = dataInfo[index];
117
- }
118
- if (o[6].index) //毫秒存在
119
- {
120
- var index = o[6].index;
121
- milliseconds = dataInfo[index];
122
- }
123
- //月份是从0开始的
124
- return new Date(year, month - 1, day, hours, minutes, seconds, milliseconds);
125
- },
126
- dateFormat(fmt, date) {
127
- let ret;
128
- const opt = {
129
- "y+": date.getFullYear().toString(), // 年
130
- "M+": (date.getMonth() + 1).toString(), // 月
131
- "d+": date.getDate().toString(), // 日
132
- "H+": date.getHours().toString(), // 时
133
- "m+": date.getMinutes().toString(), // 分
134
- "s+": date.getSeconds().toString() // 秒
135
- // 有其他格式化字符需求可以继续添加,必须转化成字符串
136
- };
137
- for (let k in opt) {
138
- ret = new RegExp("(" + k + ")").exec(fmt);
139
- if (ret) {
140
- fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0")))
141
- };
142
- };
143
- return fmt;
144
- },
145
- getUrlKey(name,url){
146
- return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(url) || [, ""])[1].replace(/\+/g, '%20')) || null
147
-
148
- },
149
- convert2ThumbnailUrl(url){
150
-
151
- var index = url.lastIndexOf(".");
152
- if(index > 0){
153
- var url2 = url.substring(0,index);
154
- var ext = url.substring(index);
155
-
156
- return url2 + "_40x40" + "." + ext;
157
- }else
158
- return url;
159
-
160
- },
161
- randomNum(minNum,maxNum){
162
- switch(arguments.length){
163
- case 1:
164
- return parseInt(Math.random()*minNum+1,10);
165
- break;
166
- case 2:
167
- return parseInt(Math.random()*(maxNum-minNum+1)+minNum,10);
168
- break;
169
- default:
170
- return 0;
171
- break;
172
- }
173
- },
174
- guid() {
175
- return (((((1+Math.random())*0x10000)|0).toString(16).substring(1))+((((1+Math.random())*0x10000)|0).toString(16).substring(1))+"-"+((((1+Math.random())*0x10000)|0).toString(16).substring(1))+"-"+((((1+Math.random())*0x10000)|0).toString(16).substring(1))+"-"+((((1+Math.random())*0x10000)|0).toString(16).substring(1))+"-"+((((1+Math.random())*0x10000)|0).toString(16).substring(1))+((((1+Math.random())*0x10000)|0).toString(16).substring(1))+((((1+Math.random())*0x10000)|0).toString(16).substring(1)));
176
- },
177
- guid2() {
178
- return (((((1+Math.random())*0x10000)|0).toString(16).substring(1))+((((1+Math.random())*0x10000)|0).toString(16).substring(1))+""+((((1+Math.random())*0x10000)|0).toString(16).substring(1))+""+((((1+Math.random())*0x10000)|0).toString(16).substring(1))+""+((((1+Math.random())*0x10000)|0).toString(16).substring(1))+""+((((1+Math.random())*0x10000)|0).toString(16).substring(1))+((((1+Math.random())*0x10000)|0).toString(16).substring(1))+((((1+Math.random())*0x10000)|0).toString(16).substring(1)));
179
- },
180
- /**
181
- * 是否为JSON字符串
182
- * @param {String}
183
- * @return {Boolean}
184
- */
185
-
186
- isJSON(str) {
187
- if (typeof str == 'string') {
188
- try {
189
- var obj = JSON.parse(str);
190
- if (str.indexOf('{') > -1) {
191
- return true;
192
- } else {
193
- return false;
194
- }
195
- } catch (e) {
196
- return false;
197
- }
198
- }
199
- return false;
200
- },
201
- /**
202
- * 去除字符串首尾两端空格
203
- * @param {String} str
204
- * @return {String}
205
- */
206
- trim(str) {
207
- if (str) {
208
- return str.replace(/(^\s*)|(\s*$)/g, '');
209
- } else {
210
- return '';
211
- }
212
- },
213
- /**
214
- * 脱敏
215
- * @param {String} value 脱敏的对象
216
- * @return {String}
217
- */
218
- desensitization: function(value) {
219
- if (value) {
220
- var valueNew = '';
221
- const length = value.length;
222
- valueNew = value
223
- .split('')
224
- .map((number, index) => {
225
- // 脱敏:从倒数第五位开始向前四位脱敏
226
- const indexMin = length - 8;
227
- const indexMax = length - 5;
228
-
229
- if (index >= indexMin && index <= indexMax) {
230
- return '*';
231
- } else {
232
- return number;
233
- }
234
- })
235
- .join('');
236
- return valueNew;
237
- } else {
238
- return '';
239
- }
240
- },
241
-
242
- /**
243
- * 判断是否Array对象
244
- * @param {Object} value 判断的对象
245
- * @return {Boolean}
246
- */
247
- isArray: function(value) {
248
- return toString.call(value) === '[object Array]';
249
- },
250
-
251
- /**
252
- * 判断是否日期对象
253
- * @param {Object} value 判断的对象
254
- * @return {Boolean}
255
- */
256
- isDate: function(value) {
257
- return toString.call(value) === '[object Date]';
258
- },
259
-
260
- /**
261
- * 判断是否Object对象
262
- * @param {Object} value 判断的对象
263
- * @return {Boolean}
264
- */
265
- isObject: function(value) {
266
- return toString.call(value) === '[object Object]';
267
- },
268
-
269
- /**
270
- * 判断是否为空
271
- * @param {Object} value 判断的对象
272
- * @return {Boolean}
273
- */
274
- isEmpty: function(value) {
275
- return value === null || value === undefined || value === '' || (this.isArray(value) && value.length === 0) || (typeof obj === 'object' && Object.keys(obj).length === 0);
276
- },
277
-
278
- /**
279
- * 判断是否移动电话
280
- * @param {Number} value 判断的值
281
- * @return {Boolean}
282
- */
283
- isMobilePhone: function(value) {
284
- value = Number.parseInt(value);
285
- // 1)是否非数字
286
- if (Number.isNaN(value)) {
287
- return false;
288
- }
289
-
290
- // 2)时候移动电话
291
- return /^1[3|4|5|7|8|9|6][0-9]\d{4,8}$/.test(value);
292
- },
293
-
294
- /**
295
- * 判断是否为邮箱
296
- * @param {String} value 判断的值
297
- * @return {Boolean}
298
- */
299
- isEmail: function(value) {
300
- return /^[a-zA-Z\-_0-9]+@[a-zA-Z0-9]+(\.[a-zA-Z0-9]+)+$/.test(value);
301
- },
302
-
303
- /**
304
- *设置SessionStorage的值
305
- * @param key:要存的键
306
- * @param value :要存的值
307
- */
308
- setSessionStorage: function(key, value) {
309
- if (this.isObject(value) || this.isArray(value)) {
310
- value = this.toJsonStr(value);
311
- }
312
- sessionStorage[key] = value;
313
- },
314
-
315
- /**
316
- *获取SessionStorage的值
317
- * @param key:存的键
318
- */
319
- getSessionStorage: function(key) {
320
- var rs = sessionStorage[key];
321
- try {
322
- if (rs != undefined) {
323
- var obj = this.toJson(rs);
324
- rs = obj;
325
- }
326
- } catch (error) {}
327
- return rs;
328
- },
329
-
330
- /**
331
- * 清除SessionStorage的值
332
- * @param key:存的键
333
- */
334
- removeSessionStorage: function(key) {
335
- return sessionStorage.removeItem(key);
336
- },
337
-
338
- /**
339
- *设置LocalStorage的值
340
- * @param key:要存的键
341
- * @param value :要存的值
342
- */
343
- setLocalStorage: function(key, value) {
344
- if (this.isObject(value) || this.isArray(value)) {
345
- value = this.toJsonStr(value);
346
- }
347
- localStorage[key] = value;
348
- },
349
-
350
- /**
351
- *获取LocalStorage的值
352
- * @param key:存的键
353
- */
354
- getLocalStorage: function(key) {
355
- var rs = localStorage[key];
356
- try {
357
- if (rs != undefined) {
358
- var obj = this.toJson(rs);
359
- rs = obj;
360
- }
361
- } catch (error) {}
362
- return rs;
363
- },
364
-
365
- /**
366
- * 对传入的时间值进行格式化。后台传入前台的时间有两种个是:Sql时间和.Net时间
367
- * @param {String|Date} sValue 传入的时间字符串
368
- * @param {dateFormat | bool} dateFormat 日期格式,日期格式:eg:'Y-m-d H:i:s'
369
- * @return {String} 2014-03-01 这种格式
370
- * @example
371
- * 1) Sql时间格式:2015-02-24T00:00:00
372
- * 2) .Net时间格式:/Date(1410744626000)/
373
- */
374
- getDateTimeStr: function(sValue, dateFormat) {
375
- if (dateFormat == undefined) {
376
- dateFormat = 'Y-m-d'; // 默认显示年月日
377
- }
378
-
379
- var dt;
380
- // 1.先解析传入的时间对象,
381
- if (sValue) {
382
- if (toString.call(sValue) !== '[object Date]') {
383
- // 不为Date格式,就转换为DateTime类型
384
- sValue = sValue + '';
385
- if (sValue.indexOf('T') > 0) {
386
- // 1)格式:2015-02-24T00:00:00
387
- var timestr = sValue.replace('T', ' ').replace(/-/g, '/'); //=> 2015/02/24 00:00:00
388
- dt = new Date(timestr);
389
- } else if (sValue.indexOf('Date') >= 0) {
390
- // 2).Net格式:/Date(1410744626000)/
391
- //Convert date type that .NET can bind to DateTime
392
- //var date = new Date(parseInt(sValue.substr(6)));
393
- var timestr = sValue.toString().replace(/\/Date\((\d+)\)\//gi, '$1'); //
394
- dt = new Date(Math.abs(timestr));
395
- } else {
396
- dt = new Date(sValue);
397
- }
398
- } else {
399
- dt = sValue;
400
- }
401
- }
402
-
403
- // 2.转换
404
- // 1)转换成对象 'Y-m-d H:i:s'
405
- var obj = {}; //返回的对象,包含了 year(年)、month(月)、day(日)
406
- obj.Y = dt.getFullYear(); //年
407
- obj.m = dt.getMonth() + 1; //月
408
- obj.d = dt.getDate(); //日期
409
- obj.H = dt.getHours();
410
- obj.i = dt.getMinutes();
411
- obj.s = dt.getSeconds();
412
- //2.2单位的月、日都转换成双位
413
- if (obj.m < 10) {
414
- obj.m = '0' + obj.m;
415
- }
416
- if (obj.d < 10) {
417
- obj.d = '0' + obj.d;
418
- }
419
- if (obj.H < 10) {
420
- obj.H = '0' + obj.H;
421
- }
422
- if (obj.i < 10) {
423
- obj.i = '0' + obj.i;
424
- }
425
- if (obj.s < 10) {
426
- obj.s = '0' + obj.s;
427
- }
428
- // 3.解析
429
- var rs = dateFormat
430
- .replace('Y', obj.Y)
431
- .replace('m', obj.m)
432
- .replace('d', obj.d)
433
- .replace('H', obj.H)
434
- .replace('i', obj.i)
435
- .replace('s', obj.s);
436
-
437
- return rs;
438
- },
439
-
440
- /**
441
- * 把总秒数转换为时分秒
442
- */
443
- getSFM: function(seconds, dateFormat) {
444
- if (dateFormat == undefined) {
445
- dateFormat = 'H:i:s'; // 默认格式
446
- }
447
- var obj = {};
448
- obj.H = Number.parseInt(seconds / 3600);
449
- obj.i = Number.parseInt((seconds - obj.H * 3600) / 60);
450
- obj.s = Number.parseInt(seconds - obj.H * 3600 - obj.i * 60);
451
- if (obj.H < 10) {
452
- obj.H = '0' + obj.H;
453
- }
454
- if (obj.i < 10) {
455
- obj.i = '0' + obj.i;
456
- }
457
- if (obj.s < 10) {
458
- obj.s = '0' + obj.s;
459
- }
460
-
461
- // 3.解析
462
- var rs = dateFormat
463
- .replace('H', obj.H)
464
- .replace('i', obj.i)
465
- .replace('s', obj.s);
466
- return rs;
467
- },
468
-
469
- /**
470
- * 是否同一天
471
- */
472
- isSameDay: function(dt1, dt2) {
473
- if (dt1.getFullYear() == dt2.getFullYear() && dt1.getMonth() == dt2.getMonth() && dt1.getDate() == dt2.getDate()) {
474
- return true;
475
- }
476
- return false;
477
- },
478
-
479
- /**
480
- * 对象转换为json字符串
481
- * @param {jsonObj} jsonObj Json对象
482
- * @return {jsonStr} Json字符串
483
- */
484
- toJsonStr: function(jsonObj) {
485
- return JSON.stringify(jsonObj);
486
- },
487
-
488
- /**
489
- * 讲json字符串转换为json对象
490
- * @param {String} jsonStr Json对象字符串
491
- * @return {jsonObj} Json对象
492
- */
493
- toJson: function(jsonStr) {
494
- return JSON.parse(jsonStr);
495
- },
496
-
497
- cloneBySerialize: function(obj){
498
- let b = JSON.parse(JSON.stringify(obj))
499
- return b
500
- },
501
-
502
- /**
503
- * 是否含有特殊字符
504
- * @param {String} value 传入的值
505
- * @return {Boolean} true 含有特殊符号;false 不含有特殊符号
506
- */
507
- isHaveSpecialChar: function(value) {
508
- var oldLength = value.length;
509
- var newLength = value.replace(/[`~!@#$%^&*_+=\\{}:"<>?\[\];',.\/~!@#¥%……&*——+『』:“”《》?【】;‘’,。? \[\]()()]/g, '').length;
510
- if (newLength < oldLength) {
511
- return true;
512
- }
513
- return false;
514
- },
515
-
516
- /**
517
- * 合并数组内成员的某个对象
518
- * @param {Array} arr 需要合并的数组
519
- * @param {String} fieldName 数组成员内的指定字段
520
- * @param {String} split 分隔符,默认为','
521
- * @example
522
- * var arr = [{name:'tom',age:13},{name:'jack',age:13}] => (arr, 'name') => tom,jack
523
- */
524
- joinArray: function(arr, fieldName, split) {
525
- split = split == undefined ? ',' : split;
526
- var rs = arr
527
- .map((item) => {
528
- return item[fieldName];
529
- })
530
- .join(split);
531
- return rs;
532
- }
533
- };
534
-
535
- /**
536
- * http交互模块
537
- * 包含:ajax
538
- */
539
- ak.http = {
540
- /**
541
- * 将`name` - `value`对转换为支持嵌套结构的对象数组
542
- *
543
- * var objects = toQueryObjects('hobbies', ['reading', 'cooking', 'swimming']);
544
- *
545
- * // objects then equals:
546
- * [
547
- * { name: 'hobbies', value: 'reading' },
548
- * { name: 'hobbies', value: 'cooking' },
549
- * { name: 'hobbies', value: 'swimming' },
550
- * ];
551
- *
552
- * var objects = toQueryObjects('dateOfBirth', {
553
- * day: 3,
554
- * month: 8,
555
- * year: 1987,
556
- * extra: {
557
- * hour: 4
558
- * minute: 30
559
- * }
560
- * }, true); // Recursive
561
- *
562
- * // objects then equals:
563
- * [
564
- * { name: 'dateOfBirth[day]', value: 3 },
565
- * { name: 'dateOfBirth[month]', value: 8 },
566
- * { name: 'dateOfBirth[year]', value: 1987 },
567
- * { name: 'dateOfBirth[extra][hour]', value: 4 },
568
- * { name: 'dateOfBirth[extra][minute]', value: 30 },
569
- * ];
570
- *
571
- * @param {String} name
572
- * @param {object | Array} value
573
- * @param {boolean} [recursive=false] 是否递归
574
- * @return {array}
575
- */
576
- toQueryObjects: function(name, value, recursive) {
577
- var objects = [],
578
- i,
579
- ln;
580
-
581
- if (ak.utils.isArray(value)) {
582
- for (i = 0, ln = value.length; i < ln; i++) {
583
- if (recursive) {
584
- objects = objects.concat(toQueryObjects(name + '[' + i + ']', value[i], true));
585
- } else {
586
- objects.push({
587
- name: name,
588
- value: value[i]
589
- });
590
- }
591
- }
592
- } else if (ak.utils.isObject(value)) {
593
- for (i in value) {
594
- if (value.hasOwnProperty(i)) {
595
- if (recursive) {
596
- objects = objects.concat(toQueryObjects(name + '[' + i + ']', value[i], true));
597
- } else {
598
- objects.push({
599
- name: name,
600
- value: value[i]
601
- });
602
- }
603
- }
604
- }
605
- } else {
606
- objects.push({
607
- name: name,
608
- value: value
609
- });
610
- }
611
-
612
- return objects;
613
- },
614
-
615
- /**
616
- * 把对象转换为查询字符串
617
- * e.g.:
618
- * toQueryString({foo: 1, bar: 2}); // returns "foo=1&bar=2"
619
- * toQueryString({foo: null, bar: 2}); // returns "foo=&bar=2"
620
- * toQueryString({date: new Date(2011, 0, 1)}); // returns "date=%222011-01-01T00%3A00%3A00%22"
621
- * @param {Object} object 需要转换的对象
622
- * @param {Boolean} [recursive=false] 是否递归
623
- * @return {String} queryString
624
- */
625
- toQueryString: function(object, recursive) {
626
- var paramObjects = [],
627
- params = [],
628
- i,
629
- j,
630
- ln,
631
- paramObject,
632
- value;
633
-
634
- for (i in object) {
635
- if (object.hasOwnProperty(i)) {
636
- paramObjects = paramObjects.concat(this.toQueryObjects(i, object[i], recursive));
637
- }
638
- }
639
-
640
- for (j = 0, ln = paramObjects.length; j < ln; j++) {
641
- paramObject = paramObjects[j];
642
- value = paramObject.value;
643
-
644
- if (ak.utils.isEmpty(value)) {
645
- value = '';
646
- } else if (ak.utils.isDate(value)) {
647
- value =
648
- value.getFullYear() +
649
- '-' +
650
- Ext.String.leftPad(value.getMonth() + 1, 2, '0') +
651
- '-' +
652
- Ext.String.leftPad(value.getDate(), 2, '0') +
653
- 'T' +
654
- Ext.String.leftPad(value.getHours(), 2, '0') +
655
- ':' +
656
- Ext.String.leftPad(value.getMinutes(), 2, '0') +
657
- ':' +
658
- Ext.String.leftPad(value.getSeconds(), 2, '0');
659
- }
660
-
661
- params.push(encodeURIComponent(paramObject.name) + '=' + encodeURIComponent(String(value)));
662
- }
663
-
664
- return params.join('&');
665
- },
666
- /**
667
- * @private
668
- */
669
- getCookieVal: function(offset) {
670
- var endstr = document.cookie.indexOf(';', offset);
671
- if (endstr == -1) {
672
- endstr = document.cookie.length;
673
- }
674
- return unescape(document.cookie.substring(offset, endstr));
675
- },
676
-
677
- /**
678
- * 获取指定key的cookie
679
- * @param {String} key cookie的key
680
- */
681
- getCookie2: function(name) {
682
- let cookieValue = ""
683
- let search = name + "="
684
- if (document.cookie.length > 0)
685
- {
686
- let offset = document.cookie.indexOf (search)
687
- if (offset != -1)
688
- {
689
- offset += search.length
690
- let end = document.cookie.indexOf (";", offset)
691
- if (end == -1)
692
- end = document.cookie.length
693
- cookieValue = unescape (document.cookie.substring (offset, end))
694
- }
695
- }
696
- return cookieValue
697
- },
698
- getCookie: function(key) {
699
- var arg = key + '=',
700
- alen = arg.length,
701
- clen = document.cookie.length,
702
- i = 0,
703
- j = 0;
704
-
705
- while (i < clen) {
706
- j = i + alen;
707
- if (document.cookie.substring(i, j) == arg) {
708
- return this.getCookieVal(j);
709
- }
710
- i = document.cookie.indexOf(' ', i) + 1;
711
- if (i === 0) {
712
- break;
713
- }
714
- }
715
- return null;
716
- },
717
-
718
- /**
719
- * 设置cookie
720
- * @param {String} key cookie的key
721
- * @param {String} value cookie的value
722
- */
723
- setCookie: function(key, value) {
724
- var argv = arguments,
725
- argc = arguments.length,
726
- expires = argc > 2 ? argv[2] : null,
727
- path = argc > 3 ? argv[3] : '/',
728
- domain = argc > 4 ? argv[4] : null,
729
- secure = argc > 5 ? argv[5] : false;
730
-
731
- document.cookie =
732
- key +
733
- '=' +
734
- escape(value) +
735
- (expires === null ? '' : '; expires=' + expires.toGMTString()) +
736
- (path === null ? '' : '; path=' + path) +
737
- (domain === null ? '' : '; domain=' + domain) +
738
- (secure === true ? '; secure' : '');
739
- },
740
- getRootPath(url){
741
-
742
- let rootPath_rtn = ''
743
- let currentUrl = url ? url : window.location.href
744
- let index = currentUrl.indexOf('#')
745
-
746
- if(index >= 0 ){
747
- let rootPath = currentUrl.substr(0,index)
748
- if(!rootPath.endWith('/'))
749
- rootPath_rtn = rootPath + '/'
750
- else
751
- rootPath_rtn = rootPath
752
- }else{
753
- if(!currentUrl.endWith('/'))
754
- rootPath_rtn = currentUrl + '/'
755
- else
756
- rootPath_rtn = currentUrl
757
- }
758
-
759
- if(rootPath_rtn.indexOf('?') > 0 && rootPath_rtn.endWith('/')){
760
- rootPath_rtn = rootPath_rtn.substr(0,rootPath_rtn.length - 1)
761
- }
762
-
763
- return rootPath_rtn
764
- },
765
- getRouteUrl(url){
766
-
767
- let currentUrl = url ? url : window.location.href
768
- let index = currentUrl.indexOf('#')
769
- if(index >= 0 ){
770
- return currentUrl.substr(index+1)
771
- }else{
772
- return ''
773
- }
774
-
775
- },
776
- getRoot(url){
777
- let rootUrl = this.getRootPath(url)
778
- let index = rootUrl.indexOf('?')
779
- if(index >= 0)
780
- return rootUrl.substr(0,index)
781
- else
782
- return rootUrl
783
- },
784
- getUrlParameters(url){
785
- let rootUrl = this.getRootPath(url)
786
- let index = rootUrl.indexOf('?')
787
- if(index >= 0)
788
- return rootUrl.substr(index+1)
789
- else
790
- return ''
791
- },
792
- concatParams(url,param){
793
-
794
- let rootUrl = this.getRootPath(url)
795
- let routeUrl = this.getRouteUrl(url)
796
-
797
- if(rootUrl.includes('?')){
798
- return rootUrl + '&' + param + (ak.utils.isEmpty(routeUrl) ? '': ('#' + routeUrl))
799
- }else{
800
- return rootUrl + '?' + param + (ak.utils.isEmpty(routeUrl) ? '': ('#' + routeUrl))
801
- }
802
-
803
- },
804
- deleteParams(url,ref){
805
-
806
- let rootUrl = this.getRootPath(url)
807
- let routeUrl = this.getRouteUrl(url)
808
- let newParams = ''
809
-
810
- if(rootUrl.includes('?')){
811
-
812
- let params = this.getUrlParameters(url)
813
- let para = params.split('&')
814
- for (let i = 0; i < para.length; i++) {
815
- let paired = para[i].split('=')
816
- if (paired[0] == ref) {
817
- continue
818
- }else{
819
- if(paired.length > 1){
820
- newParams += paired[0] + '=' + paired[1] + "&"
821
- }else{
822
- newParams += paired[0]
823
- }
824
- }
825
- }
826
-
827
- if(ak.utils.isEmpty(newParams)){
828
- return this.getRoot(rootUrl) + (ak.utils.isEmpty(routeUrl) ? '': ('#' + routeUrl))
829
- }
830
- else{
831
- let remed = newParams.substr(0,newParams.length-1)
832
- return this.getRoot(rootUrl) + '?' + remed + (ak.utils.isEmpty(routeUrl) ? '': ('#' + routeUrl))
833
- }
834
-
835
-
836
- }else{
837
- return url
838
- }
839
-
840
- },
841
- getQueryString(name) {
842
- var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)")
843
- var r = window.location.search.substr(1).match(reg)
844
- if(r!=null)return unescape(r[2]); return null
845
- }
846
-
847
- };
848
-
849
- /**
850
- * 消息模块
851
- * 包含:确认框、信息提示框
852
- */
853
- ak.msg = {
854
- /**
855
- * 提示框
856
- * msg {string} :信息内容
857
- */
858
- alert: function(msg,callback, classStr="") {
859
-
860
- this.vue.prototype.$dialog.alert({
861
- title: '消息',
862
- message: msg,
863
- className: classStr,
864
- closeOnPopstate: true
865
- }).then(() => {
866
- if(callback) callback()
867
- });
868
- },
869
-
870
- /**
871
- * 确认框
872
- * msg {string} :信息内容
873
- * callback {function} :点击'确定'时的回调函数。
874
- */
875
- confirm: function(msg, callback,callback2) {
876
-
877
- this.vue.prototype.$dialog.confirm({
878
- title: '消息',
879
- message: msg,
880
- closeOnPopstate: true
881
- })
882
- .then(() => {
883
- if(callback) callback()
884
- })
885
- .catch(() => {
886
- if(callback2) callback2()
887
- });
888
-
889
- },
890
-
891
- toast: function(msg) {
892
-
893
- this.vue.prototype.$toast(msg)
894
-
895
- }
896
- };
897
-
898
-
899
- /**
900
- * 原型:字符串格式化
901
- * @param args 格式化参数值
902
- */
903
- String.prototype.format = function(args) {
904
- var result = this;
905
- if (arguments.length < 1) {
906
- return result;
907
- }
908
-
909
- var data = arguments; // 如果模板参数是数组
910
- if (arguments.length == 1 && typeof (args) == "object") {
911
- // 如果模板参数是对象
912
- data = args;
913
- }
914
-
915
- for ( var key in data) {
916
- var value = data[key];
917
- if (undefined != value) {
918
- result = result.replace(new RegExp("\\{" + key + "\\}", "gm"), value);
919
- }
920
- }
921
- return result;
922
- }
923
-
924
-
925
- String.prototype.endWith=function(str){
926
- if(str==null||str==""||this.length==0||str.length>this.length)
927
- return false;
928
- if(this.substring(this.length-str.length)==str)
929
- return true;
930
- else
931
- return false;
932
- return true;
933
- }
934
-
935
- String.prototype.startWith=function(str){
936
- if(str==null||str==""||this.length==0||str.length>this.length)
937
- return false;
938
- if(this.substr(0,str.length)==str)
939
- return true;
940
- else
941
- return false;
942
- return true;
943
- }
944
-
945
-
946
-
947
-
948
- export default ak;
1
+ import selector from '../selector'
2
+
3
+ var ak = ak || {};
4
+
5
+ ak.utils = {
6
+
7
+ selector(express){
8
+
9
+ return selector.select(null,express)
10
+ },
11
+ parserToDate(dateText, format) {
12
+ if (!dateText) { //空值
13
+ return new Date();
14
+ }
15
+ //定义默认值,默认值根据当前时间生成
16
+ var defaultVal = new Date();
17
+ var year = defaultVal.getFullYear();
18
+ var month = defaultVal.getMonth() + 1;
19
+ var day = defaultVal.getDate();
20
+ var hours = defaultVal.getHours();
21
+ var minutes = defaultVal.getMinutes();
22
+ var seconds = defaultVal.getSeconds();
23
+ var milliseconds = defaultVal.getMilliseconds();
24
+ //定义正则
25
+ var o = [{
26
+ reg: "y+"
27
+ }, //年份
28
+ {
29
+ reg: "M+"
30
+ }, //月份
31
+ {
32
+ reg: "d+"
33
+ }, //日
34
+ {
35
+ reg: "H+"
36
+ }, //小时
37
+ {
38
+ reg: "m+"
39
+ }, //分
40
+ {
41
+ reg: "s+"
42
+ }, //秒
43
+ {
44
+ reg: "S"
45
+ } //毫秒
46
+ ];
47
+ //获取到年月日,时分秒,毫秒几个值在字符串中的先后位置
48
+ var index = 1;
49
+ for (var j = 0; j < format.length; j++) {
50
+ var onechar = format[j];
51
+ for (var i = 0; i < o.length; i++) {
52
+ var onepart = o[i]
53
+ var onepartReg = onepart.reg;
54
+ if (onepartReg[0] == onechar) {
55
+ if (!onepart.index) {
56
+ onepart.index = index; //获取到年月日,时分秒,毫秒几个值在字符串中的先后位置
57
+ index++;
58
+ }
59
+ break;
60
+ }
61
+ }
62
+
63
+ }
64
+ //生成匹配的正则表达式
65
+ for (var i = 0; i < o.length; i++) {
66
+ var onepart = o[i]
67
+ var onepartReg = onepart.reg;
68
+ var re = new RegExp("(" + onepartReg + ")");
69
+ var res = re.exec(format);
70
+ if (res) {
71
+ var formatPart = res[0]; //匹配到的格式化字符
72
+ var replaceVal = "([0-9]{" + formatPart.length + "})"; //不能使用/d匹配,会和日期的d冲突
73
+ format = format.replace(formatPart, replaceVal);
74
+ }
75
+ }
76
+ //保存获取到的各个部分和位置
77
+ var dataInfo = {};
78
+ var re = new RegExp(format);
79
+ var res = re.exec(dateText);
80
+ //去掉第一个匹配,记录匹配到的数据
81
+ if (res) {
82
+ for (var i = 1; i < res.length; i++) {
83
+ dataInfo[i] = res[i]; //记录年月日,时分秒,毫秒几个值在字符串中的位置和对应的值
84
+ }
85
+ } else {
86
+ alert(dateText + "格式不匹配" + oldformat);
87
+ }
88
+ if (o[0].index) //年份存在
89
+ {
90
+ var index = o[0].index;
91
+ year = dataInfo[index];
92
+ }
93
+ if (o[1].index) //月份存在
94
+ {
95
+ var index = o[1].index;
96
+ month = dataInfo[index];
97
+ }
98
+ if (o[2].index) //日存在
99
+ {
100
+ var index = o[2].index;
101
+ day = dataInfo[index];
102
+ }
103
+ if (o[3].index) //小时存在
104
+ {
105
+ var index = o[3].index;
106
+ hours = dataInfo[index];
107
+ }
108
+ if (o[4].index) //分存在
109
+ {
110
+ var index = o[4].index;
111
+ minutes = dataInfo[index];
112
+ }
113
+ if (o[5].index) //秒存在
114
+ {
115
+ var index = o[5].index;
116
+ seconds = dataInfo[index];
117
+ }
118
+ if (o[6].index) //毫秒存在
119
+ {
120
+ var index = o[6].index;
121
+ milliseconds = dataInfo[index];
122
+ }
123
+ //月份是从0开始的
124
+ return new Date(year, month - 1, day, hours, minutes, seconds, milliseconds);
125
+ },
126
+ dateFormat(fmt, date) {
127
+ let ret;
128
+ const opt = {
129
+ "y+": date.getFullYear().toString(), // 年
130
+ "M+": (date.getMonth() + 1).toString(), // 月
131
+ "d+": date.getDate().toString(), // 日
132
+ "H+": date.getHours().toString(), // 时
133
+ "m+": date.getMinutes().toString(), // 分
134
+ "s+": date.getSeconds().toString() // 秒
135
+ // 有其他格式化字符需求可以继续添加,必须转化成字符串
136
+ };
137
+ for (let k in opt) {
138
+ ret = new RegExp("(" + k + ")").exec(fmt);
139
+ if (ret) {
140
+ fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0")))
141
+ };
142
+ };
143
+ return fmt;
144
+ },
145
+ getUrlKey(name,url){
146
+ return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(url) || [, ""])[1].replace(/\+/g, '%20')) || null
147
+
148
+ },
149
+ convert2ThumbnailUrl(url){
150
+
151
+ var index = url.lastIndexOf(".");
152
+ if(index > 0){
153
+ var url2 = url.substring(0,index);
154
+ var ext = url.substring(index);
155
+
156
+ return url2 + "_40x40" + "." + ext;
157
+ }else
158
+ return url;
159
+
160
+ },
161
+ randomNum(minNum,maxNum){
162
+ switch(arguments.length){
163
+ case 1:
164
+ return parseInt(Math.random()*minNum+1,10);
165
+ break;
166
+ case 2:
167
+ return parseInt(Math.random()*(maxNum-minNum+1)+minNum,10);
168
+ break;
169
+ default:
170
+ return 0;
171
+ break;
172
+ }
173
+ },
174
+ guid() {
175
+ return (((((1+Math.random())*0x10000)|0).toString(16).substring(1))+((((1+Math.random())*0x10000)|0).toString(16).substring(1))+"-"+((((1+Math.random())*0x10000)|0).toString(16).substring(1))+"-"+((((1+Math.random())*0x10000)|0).toString(16).substring(1))+"-"+((((1+Math.random())*0x10000)|0).toString(16).substring(1))+"-"+((((1+Math.random())*0x10000)|0).toString(16).substring(1))+((((1+Math.random())*0x10000)|0).toString(16).substring(1))+((((1+Math.random())*0x10000)|0).toString(16).substring(1)));
176
+ },
177
+ guid2() {
178
+ return (((((1+Math.random())*0x10000)|0).toString(16).substring(1))+((((1+Math.random())*0x10000)|0).toString(16).substring(1))+""+((((1+Math.random())*0x10000)|0).toString(16).substring(1))+""+((((1+Math.random())*0x10000)|0).toString(16).substring(1))+""+((((1+Math.random())*0x10000)|0).toString(16).substring(1))+""+((((1+Math.random())*0x10000)|0).toString(16).substring(1))+((((1+Math.random())*0x10000)|0).toString(16).substring(1))+((((1+Math.random())*0x10000)|0).toString(16).substring(1)));
179
+ },
180
+ /**
181
+ * 是否为JSON字符串
182
+ * @param {String}
183
+ * @return {Boolean}
184
+ */
185
+
186
+ isJSON(str) {
187
+ if (typeof str == 'string') {
188
+ try {
189
+ var obj = JSON.parse(str);
190
+ if (str.indexOf('{') > -1) {
191
+ return true;
192
+ } else {
193
+ return false;
194
+ }
195
+ } catch (e) {
196
+ return false;
197
+ }
198
+ }
199
+ return false;
200
+ },
201
+ /**
202
+ * 去除字符串首尾两端空格
203
+ * @param {String} str
204
+ * @return {String}
205
+ */
206
+ trim(str) {
207
+ if (str) {
208
+ return str.replace(/(^\s*)|(\s*$)/g, '');
209
+ } else {
210
+ return '';
211
+ }
212
+ },
213
+ /**
214
+ * 脱敏
215
+ * @param {String} value 脱敏的对象
216
+ * @return {String}
217
+ */
218
+ desensitization: function(value) {
219
+ if (value) {
220
+ var valueNew = '';
221
+ const length = value.length;
222
+ valueNew = value
223
+ .split('')
224
+ .map((number, index) => {
225
+ // 脱敏:从倒数第五位开始向前四位脱敏
226
+ const indexMin = length - 8;
227
+ const indexMax = length - 5;
228
+
229
+ if (index >= indexMin && index <= indexMax) {
230
+ return '*';
231
+ } else {
232
+ return number;
233
+ }
234
+ })
235
+ .join('');
236
+ return valueNew;
237
+ } else {
238
+ return '';
239
+ }
240
+ },
241
+
242
+ /**
243
+ * 判断是否Array对象
244
+ * @param {Object} value 判断的对象
245
+ * @return {Boolean}
246
+ */
247
+ isArray: function(value) {
248
+ return toString.call(value) === '[object Array]';
249
+ },
250
+
251
+ /**
252
+ * 判断是否日期对象
253
+ * @param {Object} value 判断的对象
254
+ * @return {Boolean}
255
+ */
256
+ isDate: function(value) {
257
+ return toString.call(value) === '[object Date]';
258
+ },
259
+
260
+ /**
261
+ * 判断是否Object对象
262
+ * @param {Object} value 判断的对象
263
+ * @return {Boolean}
264
+ */
265
+ isObject: function(value) {
266
+ return toString.call(value) === '[object Object]';
267
+ },
268
+
269
+ /**
270
+ * 判断是否为空
271
+ * @param {Object} value 判断的对象
272
+ * @return {Boolean}
273
+ */
274
+ isEmpty: function(value) {
275
+ return value === null || value === undefined || value === '' || (this.isArray(value) && value.length === 0) || (typeof obj === 'object' && Object.keys(obj).length === 0);
276
+ },
277
+
278
+ /**
279
+ * 判断是否移动电话
280
+ * @param {Number} value 判断的值
281
+ * @return {Boolean}
282
+ */
283
+ isMobilePhone: function(value) {
284
+ value = Number.parseInt(value);
285
+ // 1)是否非数字
286
+ if (Number.isNaN(value)) {
287
+ return false;
288
+ }
289
+
290
+ // 2)时候移动电话
291
+ return /^1[3|4|5|7|8|9|6][0-9]\d{4,8}$/.test(value);
292
+ },
293
+
294
+ /**
295
+ * 判断是否为邮箱
296
+ * @param {String} value 判断的值
297
+ * @return {Boolean}
298
+ */
299
+ isEmail: function(value) {
300
+ return /^[a-zA-Z\-_0-9]+@[a-zA-Z0-9]+(\.[a-zA-Z0-9]+)+$/.test(value);
301
+ },
302
+
303
+ /**
304
+ *设置SessionStorage的值
305
+ * @param key:要存的键
306
+ * @param value :要存的值
307
+ */
308
+ setSessionStorage: function(key, value) {
309
+ if (this.isObject(value) || this.isArray(value)) {
310
+ value = this.toJsonStr(value);
311
+ }
312
+ sessionStorage[key] = value;
313
+ },
314
+
315
+ /**
316
+ *获取SessionStorage的值
317
+ * @param key:存的键
318
+ */
319
+ getSessionStorage: function(key) {
320
+ var rs = sessionStorage[key];
321
+ try {
322
+ if (rs != undefined) {
323
+ var obj = this.toJson(rs);
324
+ rs = obj;
325
+ }
326
+ } catch (error) {}
327
+ return rs;
328
+ },
329
+
330
+ /**
331
+ * 清除SessionStorage的值
332
+ * @param key:存的键
333
+ */
334
+ removeSessionStorage: function(key) {
335
+ return sessionStorage.removeItem(key);
336
+ },
337
+
338
+ /**
339
+ *设置LocalStorage的值
340
+ * @param key:要存的键
341
+ * @param value :要存的值
342
+ */
343
+ setLocalStorage: function(key, value) {
344
+ if (this.isObject(value) || this.isArray(value)) {
345
+ value = this.toJsonStr(value);
346
+ }
347
+ localStorage[key] = value;
348
+ },
349
+
350
+ /**
351
+ *获取LocalStorage的值
352
+ * @param key:存的键
353
+ */
354
+ getLocalStorage: function(key) {
355
+ var rs = localStorage[key];
356
+ try {
357
+ if (rs != undefined) {
358
+ var obj = this.toJson(rs);
359
+ rs = obj;
360
+ }
361
+ } catch (error) {}
362
+ return rs;
363
+ },
364
+
365
+ /**
366
+ * 对传入的时间值进行格式化。后台传入前台的时间有两种个是:Sql时间和.Net时间
367
+ * @param {String|Date} sValue 传入的时间字符串
368
+ * @param {dateFormat | bool} dateFormat 日期格式,日期格式:eg:'Y-m-d H:i:s'
369
+ * @return {String} 2014-03-01 这种格式
370
+ * @example
371
+ * 1) Sql时间格式:2015-02-24T00:00:00
372
+ * 2) .Net时间格式:/Date(1410744626000)/
373
+ */
374
+ getDateTimeStr: function(sValue, dateFormat) {
375
+ if (dateFormat == undefined) {
376
+ dateFormat = 'Y-m-d'; // 默认显示年月日
377
+ }
378
+
379
+ var dt;
380
+ // 1.先解析传入的时间对象,
381
+ if (sValue) {
382
+ if (toString.call(sValue) !== '[object Date]') {
383
+ // 不为Date格式,就转换为DateTime类型
384
+ sValue = sValue + '';
385
+ if (sValue.indexOf('T') > 0) {
386
+ // 1)格式:2015-02-24T00:00:00
387
+ var timestr = sValue.replace('T', ' ').replace(/-/g, '/'); //=> 2015/02/24 00:00:00
388
+ dt = new Date(timestr);
389
+ } else if (sValue.indexOf('Date') >= 0) {
390
+ // 2).Net格式:/Date(1410744626000)/
391
+ //Convert date type that .NET can bind to DateTime
392
+ //var date = new Date(parseInt(sValue.substr(6)));
393
+ var timestr = sValue.toString().replace(/\/Date\((\d+)\)\//gi, '$1'); //
394
+ dt = new Date(Math.abs(timestr));
395
+ } else {
396
+ dt = new Date(sValue);
397
+ }
398
+ } else {
399
+ dt = sValue;
400
+ }
401
+ }
402
+
403
+ // 2.转换
404
+ // 1)转换成对象 'Y-m-d H:i:s'
405
+ var obj = {}; //返回的对象,包含了 year(年)、month(月)、day(日)
406
+ obj.Y = dt.getFullYear(); //年
407
+ obj.m = dt.getMonth() + 1; //月
408
+ obj.d = dt.getDate(); //日期
409
+ obj.H = dt.getHours();
410
+ obj.i = dt.getMinutes();
411
+ obj.s = dt.getSeconds();
412
+ //2.2单位的月、日都转换成双位
413
+ if (obj.m < 10) {
414
+ obj.m = '0' + obj.m;
415
+ }
416
+ if (obj.d < 10) {
417
+ obj.d = '0' + obj.d;
418
+ }
419
+ if (obj.H < 10) {
420
+ obj.H = '0' + obj.H;
421
+ }
422
+ if (obj.i < 10) {
423
+ obj.i = '0' + obj.i;
424
+ }
425
+ if (obj.s < 10) {
426
+ obj.s = '0' + obj.s;
427
+ }
428
+ // 3.解析
429
+ var rs = dateFormat
430
+ .replace('Y', obj.Y)
431
+ .replace('m', obj.m)
432
+ .replace('d', obj.d)
433
+ .replace('H', obj.H)
434
+ .replace('i', obj.i)
435
+ .replace('s', obj.s);
436
+
437
+ return rs;
438
+ },
439
+
440
+ /**
441
+ * 把总秒数转换为时分秒
442
+ */
443
+ getSFM: function(seconds, dateFormat) {
444
+ if (dateFormat == undefined) {
445
+ dateFormat = 'H:i:s'; // 默认格式
446
+ }
447
+ var obj = {};
448
+ obj.H = Number.parseInt(seconds / 3600);
449
+ obj.i = Number.parseInt((seconds - obj.H * 3600) / 60);
450
+ obj.s = Number.parseInt(seconds - obj.H * 3600 - obj.i * 60);
451
+ if (obj.H < 10) {
452
+ obj.H = '0' + obj.H;
453
+ }
454
+ if (obj.i < 10) {
455
+ obj.i = '0' + obj.i;
456
+ }
457
+ if (obj.s < 10) {
458
+ obj.s = '0' + obj.s;
459
+ }
460
+
461
+ // 3.解析
462
+ var rs = dateFormat
463
+ .replace('H', obj.H)
464
+ .replace('i', obj.i)
465
+ .replace('s', obj.s);
466
+ return rs;
467
+ },
468
+
469
+ /**
470
+ * 是否同一天
471
+ */
472
+ isSameDay: function(dt1, dt2) {
473
+ if (dt1.getFullYear() == dt2.getFullYear() && dt1.getMonth() == dt2.getMonth() && dt1.getDate() == dt2.getDate()) {
474
+ return true;
475
+ }
476
+ return false;
477
+ },
478
+
479
+ /**
480
+ * 对象转换为json字符串
481
+ * @param {jsonObj} jsonObj Json对象
482
+ * @return {jsonStr} Json字符串
483
+ */
484
+ toJsonStr: function(jsonObj) {
485
+ return JSON.stringify(jsonObj);
486
+ },
487
+
488
+ /**
489
+ * 讲json字符串转换为json对象
490
+ * @param {String} jsonStr Json对象字符串
491
+ * @return {jsonObj} Json对象
492
+ */
493
+ toJson: function(jsonStr) {
494
+ return JSON.parse(jsonStr);
495
+ },
496
+
497
+ cloneBySerialize: function(obj){
498
+ let b = JSON.parse(JSON.stringify(obj))
499
+ return b
500
+ },
501
+
502
+ /**
503
+ * 是否含有特殊字符
504
+ * @param {String} value 传入的值
505
+ * @return {Boolean} true 含有特殊符号;false 不含有特殊符号
506
+ */
507
+ isHaveSpecialChar: function(value) {
508
+ var oldLength = value.length;
509
+ var newLength = value.replace(/[`~!@#$%^&*_+=\\{}:"<>?\[\];',.\/~!@#¥%……&*——+『』:“”《》?【】;‘’,。? \[\]()()]/g, '').length;
510
+ if (newLength < oldLength) {
511
+ return true;
512
+ }
513
+ return false;
514
+ },
515
+
516
+ /**
517
+ * 合并数组内成员的某个对象
518
+ * @param {Array} arr 需要合并的数组
519
+ * @param {String} fieldName 数组成员内的指定字段
520
+ * @param {String} split 分隔符,默认为','
521
+ * @example
522
+ * var arr = [{name:'tom',age:13},{name:'jack',age:13}] => (arr, 'name') => tom,jack
523
+ */
524
+ joinArray: function(arr, fieldName, split) {
525
+ split = split == undefined ? ',' : split;
526
+ var rs = arr
527
+ .map((item) => {
528
+ return item[fieldName];
529
+ })
530
+ .join(split);
531
+ return rs;
532
+ }
533
+ };
534
+
535
+ /**
536
+ * http交互模块
537
+ * 包含:ajax
538
+ */
539
+ ak.http = {
540
+ /**
541
+ * 将`name` - `value`对转换为支持嵌套结构的对象数组
542
+ *
543
+ * var objects = toQueryObjects('hobbies', ['reading', 'cooking', 'swimming']);
544
+ *
545
+ * // objects then equals:
546
+ * [
547
+ * { name: 'hobbies', value: 'reading' },
548
+ * { name: 'hobbies', value: 'cooking' },
549
+ * { name: 'hobbies', value: 'swimming' },
550
+ * ];
551
+ *
552
+ * var objects = toQueryObjects('dateOfBirth', {
553
+ * day: 3,
554
+ * month: 8,
555
+ * year: 1987,
556
+ * extra: {
557
+ * hour: 4
558
+ * minute: 30
559
+ * }
560
+ * }, true); // Recursive
561
+ *
562
+ * // objects then equals:
563
+ * [
564
+ * { name: 'dateOfBirth[day]', value: 3 },
565
+ * { name: 'dateOfBirth[month]', value: 8 },
566
+ * { name: 'dateOfBirth[year]', value: 1987 },
567
+ * { name: 'dateOfBirth[extra][hour]', value: 4 },
568
+ * { name: 'dateOfBirth[extra][minute]', value: 30 },
569
+ * ];
570
+ *
571
+ * @param {String} name
572
+ * @param {object | Array} value
573
+ * @param {boolean} [recursive=false] 是否递归
574
+ * @return {array}
575
+ */
576
+ toQueryObjects: function(name, value, recursive) {
577
+ var objects = [],
578
+ i,
579
+ ln;
580
+
581
+ if (ak.utils.isArray(value)) {
582
+ for (i = 0, ln = value.length; i < ln; i++) {
583
+ if (recursive) {
584
+ objects = objects.concat(toQueryObjects(name + '[' + i + ']', value[i], true));
585
+ } else {
586
+ objects.push({
587
+ name: name,
588
+ value: value[i]
589
+ });
590
+ }
591
+ }
592
+ } else if (ak.utils.isObject(value)) {
593
+ for (i in value) {
594
+ if (value.hasOwnProperty(i)) {
595
+ if (recursive) {
596
+ objects = objects.concat(toQueryObjects(name + '[' + i + ']', value[i], true));
597
+ } else {
598
+ objects.push({
599
+ name: name,
600
+ value: value[i]
601
+ });
602
+ }
603
+ }
604
+ }
605
+ } else {
606
+ objects.push({
607
+ name: name,
608
+ value: value
609
+ });
610
+ }
611
+
612
+ return objects;
613
+ },
614
+
615
+ /**
616
+ * 把对象转换为查询字符串
617
+ * e.g.:
618
+ * toQueryString({foo: 1, bar: 2}); // returns "foo=1&bar=2"
619
+ * toQueryString({foo: null, bar: 2}); // returns "foo=&bar=2"
620
+ * toQueryString({date: new Date(2011, 0, 1)}); // returns "date=%222011-01-01T00%3A00%3A00%22"
621
+ * @param {Object} object 需要转换的对象
622
+ * @param {Boolean} [recursive=false] 是否递归
623
+ * @return {String} queryString
624
+ */
625
+ toQueryString: function(object, recursive) {
626
+ var paramObjects = [],
627
+ params = [],
628
+ i,
629
+ j,
630
+ ln,
631
+ paramObject,
632
+ value;
633
+
634
+ for (i in object) {
635
+ if (object.hasOwnProperty(i)) {
636
+ paramObjects = paramObjects.concat(this.toQueryObjects(i, object[i], recursive));
637
+ }
638
+ }
639
+
640
+ for (j = 0, ln = paramObjects.length; j < ln; j++) {
641
+ paramObject = paramObjects[j];
642
+ value = paramObject.value;
643
+
644
+ if (ak.utils.isEmpty(value)) {
645
+ value = '';
646
+ } else if (ak.utils.isDate(value)) {
647
+ value =
648
+ value.getFullYear() +
649
+ '-' +
650
+ Ext.String.leftPad(value.getMonth() + 1, 2, '0') +
651
+ '-' +
652
+ Ext.String.leftPad(value.getDate(), 2, '0') +
653
+ 'T' +
654
+ Ext.String.leftPad(value.getHours(), 2, '0') +
655
+ ':' +
656
+ Ext.String.leftPad(value.getMinutes(), 2, '0') +
657
+ ':' +
658
+ Ext.String.leftPad(value.getSeconds(), 2, '0');
659
+ }
660
+
661
+ params.push(encodeURIComponent(paramObject.name) + '=' + encodeURIComponent(String(value)));
662
+ }
663
+
664
+ return params.join('&');
665
+ },
666
+ /**
667
+ * @private
668
+ */
669
+ getCookieVal: function(offset) {
670
+ var endstr = document.cookie.indexOf(';', offset);
671
+ if (endstr == -1) {
672
+ endstr = document.cookie.length;
673
+ }
674
+ return unescape(document.cookie.substring(offset, endstr));
675
+ },
676
+
677
+ /**
678
+ * 获取指定key的cookie
679
+ * @param {String} key cookie的key
680
+ */
681
+ getCookie2: function(name) {
682
+ let cookieValue = ""
683
+ let search = name + "="
684
+ if (document.cookie.length > 0)
685
+ {
686
+ let offset = document.cookie.indexOf (search)
687
+ if (offset != -1)
688
+ {
689
+ offset += search.length
690
+ let end = document.cookie.indexOf (";", offset)
691
+ if (end == -1)
692
+ end = document.cookie.length
693
+ cookieValue = unescape (document.cookie.substring (offset, end))
694
+ }
695
+ }
696
+ return cookieValue
697
+ },
698
+ getCookie: function(key) {
699
+ var arg = key + '=',
700
+ alen = arg.length,
701
+ clen = document.cookie.length,
702
+ i = 0,
703
+ j = 0;
704
+
705
+ while (i < clen) {
706
+ j = i + alen;
707
+ if (document.cookie.substring(i, j) == arg) {
708
+ return this.getCookieVal(j);
709
+ }
710
+ i = document.cookie.indexOf(' ', i) + 1;
711
+ if (i === 0) {
712
+ break;
713
+ }
714
+ }
715
+ return null;
716
+ },
717
+
718
+ /**
719
+ * 设置cookie
720
+ * @param {String} key cookie的key
721
+ * @param {String} value cookie的value
722
+ */
723
+ setCookie: function(key, value) {
724
+ var argv = arguments,
725
+ argc = arguments.length,
726
+ expires = argc > 2 ? argv[2] : null,
727
+ path = argc > 3 ? argv[3] : '/',
728
+ domain = argc > 4 ? argv[4] : null,
729
+ secure = argc > 5 ? argv[5] : false;
730
+
731
+ document.cookie =
732
+ key +
733
+ '=' +
734
+ escape(value) +
735
+ (expires === null ? '' : '; expires=' + expires.toGMTString()) +
736
+ (path === null ? '' : '; path=' + path) +
737
+ (domain === null ? '' : '; domain=' + domain) +
738
+ (secure === true ? '; secure' : '');
739
+ },
740
+ getRootPath(url){
741
+
742
+ let rootPath_rtn = ''
743
+ let currentUrl = url ? url : window.location.href
744
+ let index = currentUrl.indexOf('#')
745
+
746
+ if(index >= 0 ){
747
+ let rootPath = currentUrl.substr(0,index)
748
+ if(!rootPath.endWith('/'))
749
+ rootPath_rtn = rootPath + '/'
750
+ else
751
+ rootPath_rtn = rootPath
752
+ }else{
753
+ if(!currentUrl.endWith('/'))
754
+ rootPath_rtn = currentUrl + '/'
755
+ else
756
+ rootPath_rtn = currentUrl
757
+ }
758
+
759
+ if(rootPath_rtn.indexOf('?') > 0 && rootPath_rtn.endWith('/')){
760
+ rootPath_rtn = rootPath_rtn.substr(0,rootPath_rtn.length - 1)
761
+ }
762
+
763
+ return rootPath_rtn
764
+ },
765
+ getRouteUrl(url){
766
+
767
+ let currentUrl = url ? url : window.location.href
768
+ let index = currentUrl.indexOf('#')
769
+ if(index >= 0 ){
770
+ return currentUrl.substr(index+1)
771
+ }else{
772
+ return ''
773
+ }
774
+
775
+ },
776
+ getRoot(url){
777
+ let rootUrl = this.getRootPath(url)
778
+ let index = rootUrl.indexOf('?')
779
+ if(index >= 0)
780
+ return rootUrl.substr(0,index)
781
+ else
782
+ return rootUrl
783
+ },
784
+ getUrlParameters(url){
785
+ let rootUrl = this.getRootPath(url)
786
+ let index = rootUrl.indexOf('?')
787
+ if(index >= 0)
788
+ return rootUrl.substr(index+1)
789
+ else
790
+ return ''
791
+ },
792
+ concatParams(url,param){
793
+
794
+ let rootUrl = this.getRootPath(url)
795
+ let routeUrl = this.getRouteUrl(url)
796
+
797
+ if(rootUrl.includes('?')){
798
+ return rootUrl + '&' + param + (ak.utils.isEmpty(routeUrl) ? '': ('#' + routeUrl))
799
+ }else{
800
+ return rootUrl + '?' + param + (ak.utils.isEmpty(routeUrl) ? '': ('#' + routeUrl))
801
+ }
802
+
803
+ },
804
+ deleteParams(url,ref){
805
+
806
+ let rootUrl = this.getRootPath(url)
807
+ let routeUrl = this.getRouteUrl(url)
808
+ let newParams = ''
809
+
810
+ if(rootUrl.includes('?')){
811
+
812
+ let params = this.getUrlParameters(url)
813
+ let para = params.split('&')
814
+ for (let i = 0; i < para.length; i++) {
815
+ let paired = para[i].split('=')
816
+ if (paired[0] == ref) {
817
+ continue
818
+ }else{
819
+ if(paired.length > 1){
820
+ newParams += paired[0] + '=' + paired[1] + "&"
821
+ }else{
822
+ newParams += paired[0]
823
+ }
824
+ }
825
+ }
826
+
827
+ if(ak.utils.isEmpty(newParams)){
828
+ return this.getRoot(rootUrl) + (ak.utils.isEmpty(routeUrl) ? '': ('#' + routeUrl))
829
+ }
830
+ else{
831
+ let remed = newParams.substr(0,newParams.length-1)
832
+ return this.getRoot(rootUrl) + '?' + remed + (ak.utils.isEmpty(routeUrl) ? '': ('#' + routeUrl))
833
+ }
834
+
835
+
836
+ }else{
837
+ return url
838
+ }
839
+
840
+ },
841
+ getQueryString(name) {
842
+ var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)")
843
+ var r = window.location.search.substr(1).match(reg)
844
+ if(r!=null)return unescape(r[2]); return null
845
+ }
846
+
847
+ };
848
+
849
+ /**
850
+ * 消息模块
851
+ * 包含:确认框、信息提示框
852
+ */
853
+ ak.msg = {
854
+ /**
855
+ * 提示框
856
+ * msg {string} :信息内容
857
+ */
858
+ alert: function(msg,callback, classStr="") {
859
+
860
+ this.vue.prototype.$dialog.alert({
861
+ title: '消息',
862
+ message: msg,
863
+ className: classStr,
864
+ closeOnPopstate: true
865
+ }).then(() => {
866
+ if(callback) callback()
867
+ });
868
+ },
869
+
870
+ /**
871
+ * 确认框
872
+ * msg {string} :信息内容
873
+ * callback {function} :点击'确定'时的回调函数。
874
+ */
875
+ confirm: function(msg, callback,callback2) {
876
+
877
+ this.vue.prototype.$dialog.confirm({
878
+ title: '消息',
879
+ message: msg,
880
+ closeOnPopstate: true
881
+ })
882
+ .then(() => {
883
+ if(callback) callback()
884
+ })
885
+ .catch(() => {
886
+ if(callback2) callback2()
887
+ });
888
+
889
+ },
890
+
891
+ toast: function(msg) {
892
+
893
+ this.vue.prototype.$toast(msg)
894
+
895
+ }
896
+ };
897
+
898
+
899
+ /**
900
+ * 原型:字符串格式化
901
+ * @param args 格式化参数值
902
+ */
903
+ String.prototype.format = function(args) {
904
+ var result = this;
905
+ if (arguments.length < 1) {
906
+ return result;
907
+ }
908
+
909
+ var data = arguments; // 如果模板参数是数组
910
+ if (arguments.length == 1 && typeof (args) == "object") {
911
+ // 如果模板参数是对象
912
+ data = args;
913
+ }
914
+
915
+ for ( var key in data) {
916
+ var value = data[key];
917
+ if (undefined != value) {
918
+ result = result.replace(new RegExp("\\{" + key + "\\}", "gm"), value);
919
+ }
920
+ }
921
+ return result;
922
+ }
923
+
924
+
925
+ String.prototype.endWith=function(str){
926
+ if(str==null||str==""||this.length==0||str.length>this.length)
927
+ return false;
928
+ if(this.substring(this.length-str.length)==str)
929
+ return true;
930
+ else
931
+ return false;
932
+ return true;
933
+ }
934
+
935
+ String.prototype.startWith=function(str){
936
+ if(str==null||str==""||this.length==0||str.length>this.length)
937
+ return false;
938
+ if(this.substr(0,str.length)==str)
939
+ return true;
940
+ else
941
+ return false;
942
+ return true;
943
+ }
944
+
945
+
946
+
947
+
948
+ export default ak;