eoss-ui 0.7.28 → 0.7.30

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 (67) hide show
  1. package/lib/button-group.js +35 -10
  2. package/lib/button.js +35 -10
  3. package/lib/calogin.js +35 -10
  4. package/lib/checkbox-group.js +35 -10
  5. package/lib/data-table-form.js +35 -10
  6. package/lib/data-table.js +35 -10
  7. package/lib/date-picker.js +35 -10
  8. package/lib/dialog.js +35 -10
  9. package/lib/eoss-ui.common.js +580 -325
  10. package/lib/flow-group.js +35 -10
  11. package/lib/flow-list.js +35 -10
  12. package/lib/flow.js +198 -128
  13. package/lib/form.js +35 -10
  14. package/lib/handle-user.js +35 -10
  15. package/lib/handler.js +35 -10
  16. package/lib/icon.js +35 -10
  17. package/lib/index.js +1 -1
  18. package/lib/input-number.js +35 -10
  19. package/lib/input.js +35 -10
  20. package/lib/login.js +41 -16
  21. package/lib/main.js +367 -156
  22. package/lib/menu.js +0 -1
  23. package/lib/nav.js +35 -10
  24. package/lib/page.js +35 -10
  25. package/lib/pagination.js +35 -10
  26. package/lib/player.js +35 -10
  27. package/lib/qr-code.js +35 -10
  28. package/lib/radio-group.js +35 -10
  29. package/lib/retrial-auth.js +35 -10
  30. package/lib/select-ganged.js +35 -10
  31. package/lib/select.js +35 -10
  32. package/lib/selector-panel.js +35 -10
  33. package/lib/selector.js +35 -10
  34. package/lib/sizer.js +35 -10
  35. package/lib/steps.js +35 -10
  36. package/lib/switch.js +35 -10
  37. package/lib/table-form.js +35 -10
  38. package/lib/tabs.js +35 -10
  39. package/lib/tips.js +35 -10
  40. package/lib/tree-group.js +35 -10
  41. package/lib/tree.js +35 -10
  42. package/lib/upload.js +35 -10
  43. package/lib/utils/util.js +31 -6
  44. package/lib/wujie.js +35 -10
  45. package/lib/wxlogin.js +35 -10
  46. package/package.json +1 -1
  47. package/packages/.DS_Store +0 -0
  48. package/packages/date-picker/.DS_Store +0 -0
  49. package/packages/flow/.DS_Store +0 -0
  50. package/packages/flow/src/.DS_Store +0 -0
  51. package/packages/flow/src/component/taskUnionExamine.vue +8 -8
  52. package/packages/flow/src/main.vue +6 -4
  53. package/packages/flow/src/processForm.vue +6 -4
  54. package/packages/flow-list/.DS_Store +0 -0
  55. package/packages/login/.DS_Store +0 -0
  56. package/packages/login/src/main.vue +4 -4
  57. package/packages/main/.DS_Store +0 -0
  58. package/packages/main/src/.DS_Store +0 -0
  59. package/packages/main/src/default/index.vue +2 -2
  60. package/packages/main/src/main.vue +165 -69
  61. package/packages/main/src/simplicity/index.vue +49 -6
  62. package/packages/main/src/simplicity/sub-menu.vue +3 -1
  63. package/packages/menu/.DS_Store +0 -0
  64. package/packages/menu/src/main.vue +0 -1
  65. package/src/.DS_Store +0 -0
  66. package/src/index.js +1 -1
  67. package/src/utils/util.js +31 -6
@@ -952,7 +952,7 @@ export default {
952
952
  document.title = results[i];
953
953
  }
954
954
  if (i === 'loginPage' && results[i]) {
955
- util.setStorage('loginPage', results[i]);
955
+ util.setStorage({ key: 'loginPage', value: results[i] });
956
956
  }
957
957
  if (i === 'sysLogoIco' && results[i]) {
958
958
  localStorage.setItem('sysLogoIco', results[i]);
@@ -986,7 +986,7 @@ export default {
986
986
  } catch (error) {}
987
987
  }
988
988
  if (results[i].loginPage) {
989
- util.setStorage('loginPage', results[i].loginPage);
989
+ util.setStorage({ key: 'loginPage', value: results[i].loginPage });
990
990
  }
991
991
  if (results[i].portalPage || results[i].portalpage) {
992
992
  this.doorIndex = results[i].portalPage || results[i].portalpage;
@@ -25,24 +25,33 @@
25
25
  <!-- 公用弹窗 -->
26
26
  <es-dialog
27
27
  v-for="(item, index) in dialogs"
28
- :visible.sync="visibles[index]"
29
- :key="item.id || item.name || index"
30
- size="md"
31
- v-bind="
32
- exclAttribute({
33
- data: item,
34
- attrs: ['visible', 'url']
35
- })
36
- "
28
+ :visible.sync="item.visible"
29
+ :key="item.appCode || item.id || item.name || index"
30
+ :title="item.name"
31
+ :width="item.width"
32
+ :height="item.height"
33
+ :size="item.size"
37
34
  @close="handleClosed(item, index)"
38
35
  >
39
- <iframe
40
- v-if="visibles[index]"
41
- width="100%"
42
- height="100%"
43
- frameborder="0"
44
- :src="item.url"
45
- ></iframe>
36
+ <template v-if="item.visible">
37
+ <es-wujie
38
+ v-if="item.openModel === 'wujie' && !isIE"
39
+ :host="host"
40
+ :show="true"
41
+ :name="item.appCode"
42
+ :url="item.url"
43
+ :props="item"
44
+ ></es-wujie>
45
+ <iframe
46
+ v-else
47
+ width="100%"
48
+ height="100%"
49
+ frameborder="0"
50
+ :id="item.appCode || item.id"
51
+ :src="item.url"
52
+ @load="(event) => handleIframeLoad(event.target, item)"
53
+ ></iframe>
54
+ </template>
46
55
  </es-dialog>
47
56
  <!-- 公用弹窗 end -->
48
57
  </div>
@@ -53,6 +62,7 @@ import Simplicity from './simplicity/index.vue';
53
62
  import MainDefault from './default/index.vue';
54
63
  import util from 'eoss-ui/src/utils/util';
55
64
  import WujieVue from 'wujie-vue2';
65
+ import { size } from 'lodash';
56
66
  export default {
57
67
  name: 'EsMain',
58
68
  inheritAttrs: false,
@@ -102,7 +112,8 @@ export default {
102
112
  visibles: [],
103
113
  isLogin: false,
104
114
  layoutType: this.type,
105
- layout: this.scene
115
+ layout: this.scene,
116
+ isIE: /MSIE|Trident/.test(navigator.userAgent)
106
117
  };
107
118
  },
108
119
  created() {
@@ -142,6 +153,8 @@ export default {
142
153
  if (bus) {
143
154
  bus.$on('reLogin', this.handleReLogin);
144
155
  bus.$on('refresh', this.$refs.main.handleRefresh);
156
+ bus.$on('windowOpen', this.winOpen);
157
+ bus.$on('windowClose', this.winClose);
145
158
  bus.$on('jumpMenu', this.$refs.main.jumpMenu);
146
159
  bus.$on('emit', (method, args) => {
147
160
  // 主应用发送事件
@@ -149,65 +162,21 @@ export default {
149
162
  });
150
163
  }
151
164
  util.win.reLogin = this.handleReLogin;
152
- util.win.windowOpen = this.openPage;
165
+ util.win.windowOpen = this.winOpen;
166
+ util.win.windowClose = this.winClose;
153
167
  util.win.refresh = this.$refs.main.handleRefresh;
154
168
  util.win.jumpMenu = this.$refs.main.jumpMenu;
155
169
  WujieVue.bus.$on('reLogin', this.handleReLogin);
156
170
  WujieVue.bus.$on('refresh', this.$refs.main.handleRefresh);
157
171
  WujieVue.bus.$on('jumpMenu', this.$refs.main.jumpMenu);
172
+ WujieVue.bus.$on('windowOpen', this.$refs.main.winOpen);
173
+ WujieVue.bus.$on('windowClose', this.$refs.main.winClose);
158
174
  WujieVue.bus.$on('emit', (method, args) => {
159
175
  // 主应用发送事件
160
176
  WujieVue.bus.$emit(method, args);
161
177
  });
162
178
 
163
- window.addEventListener('message', (e) => {
164
- const { method, args } = e.data;
165
- switch (method) {
166
- case 'reLogin':
167
- this.handleReLogin(args);
168
- break;
169
- case 'refresh':
170
- this.$refs.main.handleRefresh(args);
171
- break;
172
- case 'jumpMenu':
173
- Array.isArray(args)
174
- ? this.$refs.main.jumpMenu(...args)
175
- : this.$refs.main.jumpMenu(args);
176
- break;
177
- case 'emit':
178
- const { origin, ...data } = args;
179
- let iframes = document.getElementsByTagName('iframe');
180
- iframes = iframes.filter((item) => {
181
- return origin
182
- ? item.src.indexOf(origin) > -1
183
- : item.src.indexOf(e.origin) == -1;
184
- });
185
- for (let i = 0; i < iframes.length; i++) {
186
- iframes[i] &&
187
- iframes[i].contentWindow.postMessage(
188
- data,
189
- origin ? origin : '*'
190
- );
191
- }
192
- break;
193
- case 'openDialog':
194
- this.dialogs.push(args);
195
- let index = this.visibles.length;
196
- this.visibles.push(false);
197
- this.$nextTick(() => {
198
- this.$set(this.visibles, index, true);
199
- });
200
- break;
201
- case 'closeDialog':
202
- for (let i = 0; i < this.dialogs.length; i++) {
203
- let item = this.dialogs[i];
204
- if (item.url == args.url) {
205
- this.$set(this.visibles, i, false);
206
- }
207
- }
208
- break;
209
- }
210
- });
179
+ window.addEventListener('message', this.handleMessage);
211
180
  });
212
181
  } else {
213
182
  const loginPage =
@@ -373,11 +342,16 @@ export default {
373
342
  }
374
343
  },
375
344
  /**
376
- * @desc:打开页面
345
+ * @desc:打开dialog页面
377
346
  * @author huangbo
378
347
  * @date 2024年9月7日
379
348
  **/
380
- openPage(url, name, width, height) {
349
+ winOpen({ url, name, width, height, appCode, id, size }) {
350
+ if (!appCode && !id) {
351
+ console.error('参数错误,缺少appCode或者id');
352
+ return;
353
+ }
354
+ const openModel = util.getStorage('openModel');
381
355
  let src = url;
382
356
  if (!util.startWith(url, ['http', '/'], true)) {
383
357
  let pathname = window.location.pathname;
@@ -388,6 +362,25 @@ export default {
388
362
  }
389
363
  src = pathname + url.replace('./', '/');
390
364
  }
365
+ if (openModel && openModel == 'dialog') {
366
+ let dialog = {
367
+ id,
368
+ url: src,
369
+ name,
370
+ width,
371
+ height,
372
+ appCode,
373
+ visible: false,
374
+ size
375
+ };
376
+ let n = this.dialogs.push(dialog);
377
+ this.$nextTick(() => {
378
+ this.$set(dialog, 'index', n - 1);
379
+ this.$set(dialog, 'visible', true);
380
+ });
381
+ return dialog;
382
+ }
383
+
391
384
  if (name) {
392
385
  let w = 0;
393
386
  let h = 0;
@@ -407,6 +400,109 @@ export default {
407
400
  return util.win.open(src);
408
401
  }
409
402
  },
403
+
404
+ /**
405
+ * @desc:关闭dialog页面
406
+ * @author huangbo
407
+ * @date 2024年9月7日
408
+ **/
409
+ winClose({ url, appCode, id }) {
410
+ if (!appCode && !id) {
411
+ console.error('参数错误,缺少appCode或者id');
412
+ return;
413
+ }
414
+ let dialog = this.dialogs.find(
415
+ (item) => item.url == url || item.appCode == appCode || item.id == id
416
+ );
417
+ if (dialog) {
418
+ this.$set(dialog, 'visible', false);
419
+ this.dialogs.splice(dialog.index, 1);
420
+ }
421
+ },
422
+
423
+ /**
424
+ * @desc:postMessage消息处理
425
+ * @author huangbo
426
+ * @date 2024年9月7日
427
+ **/
428
+ handleMessage(e) {
429
+ const { method, args } = e.data;
430
+ const { index, refresh, jumpMenu } = args;
431
+ switch (method) {
432
+ case 'reLogin':
433
+ this.handleReLogin(args);
434
+ break;
435
+ case 'refresh':
436
+ this.$refs.main.handleRefresh(args);
437
+ break;
438
+ case 'jumpMenu':
439
+ Array.isArray(args)
440
+ ? this.$refs.main.jumpMenu(...args)
441
+ : this.$refs.main.jumpMenu(args);
442
+ break;
443
+ case 'emit':
444
+ const { origin, appCode, id, ...data } = args;
445
+ let iframe = document.getElementById(appCode || id);
446
+ iframe.contentWindow.postMessage(data, origin ? origin : '*');
447
+ break;
448
+ case 'openDialog': //打开弹窗
449
+ if (!args.appCode && !args.id) {
450
+ console.error('参数错误,缺少appCode或者id');
451
+ return;
452
+ }
453
+ args.index = this.dialogs.length;
454
+ args.visible = false;
455
+ this.dialogs.push(args);
456
+ this.$nextTick(() => {
457
+ this.$set(args, 'visible', true);
458
+ });
459
+ break;
460
+ case 'closeDialog': //关闭弹窗
461
+ this.$set(this.dialogs[index], 'visible', false);
462
+ this.dialogs.splice(index, 1);
463
+ refresh && this.$refs.main.handleRefresh(refresh);
464
+ jumpMenu &&
465
+ (Array.isArray(jumpMenu)
466
+ ? this.$refs.main.jumpMenu(...jumpMenu)
467
+ : this.$refs.main.jumpMenu(jumpMenu));
468
+ break;
469
+ case 'windowOpen': //打开弹窗
470
+ if (!args.appCode && !args.id) {
471
+ console.error('参数错误,缺少appCode或者id');
472
+ return;
473
+ }
474
+ args.index = this.dialogs.length;
475
+ args.visible = false;
476
+ this.dialogs.push(args);
477
+ this.$nextTick(() => {
478
+ this.$set(args, 'visible', true);
479
+ });
480
+ break;
481
+ case 'windowClose': //关闭弹窗
482
+ this.$set(this.dialogs[index], 'visible', false);
483
+ this.dialogs.splice(index, 1);
484
+ refresh && this.$refs.main.handleRefresh(refresh);
485
+ jumpMenu &&
486
+ (Array.isArray(jumpMenu)
487
+ ? this.$refs.main.jumpMenu(...jumpMenu)
488
+ : this.$refs.main.jumpMenu(jumpMenu));
489
+ break;
490
+ }
491
+ },
492
+
493
+ /**
494
+ * @desc:dialog页面加载完成后通讯
495
+ * @author huangbo
496
+ * @date 2024年9月7日
497
+ **/
498
+ handleIframeLoad(iframe, data) {
499
+ iframe = iframe
500
+ ? iframe
501
+ : document.getElementById(data.appCode || data.id);
502
+ const origin = new URL(iframe.src).origin;
503
+ iframe.contentWindow.postMessage(data, origin);
504
+ },
505
+
410
506
  /**
411
507
  * @desc:排除属性
412
508
  * @author huangbo
@@ -422,7 +518,6 @@ export default {
422
518
  **/
423
519
  handleClosed(res, index) {
424
520
  this.dialogs.splice(index, 1);
425
- this.visibles.splice(index, 1);
426
521
  },
427
522
  /**
428
523
  * @desc:主应用向子应用发送事件
@@ -449,6 +544,7 @@ export default {
449
544
  }
450
545
  },
451
546
  beforeDestroy() {
547
+ window.removeEventListener('message', this.handleMessage);
452
548
  WujieVue.bus.$off('reLogin');
453
549
  WujieVue.bus.$off('refresh');
454
550
  WujieVue.bus.$off('jumpMenu');
@@ -228,6 +228,7 @@
228
228
  closable
229
229
  hide-bar
230
230
  opacity
231
+ @tab-click="handleTabClick"
231
232
  @tab-remove="handleRemove"
232
233
  @tab-contextmenu="handleContextmenu"
233
234
  >
@@ -244,7 +245,8 @@
244
245
 
245
246
  <!-- 菜单 -->
246
247
  <sub-menu
247
- :collapse="collapse"
248
+ v-if="subMenus"
249
+ :collapse="isCollapse"
248
250
  :mode="mode"
249
251
  :visible.sync="showMenu"
250
252
  :closed.sync="fold"
@@ -650,6 +652,8 @@ export default {
650
652
  subActive: '',
651
653
  //折叠菜单
652
654
  fold: false,
655
+ //菜单样式是否折叠形式
656
+ isCollapse: this.collapse,
653
657
  //人工智能配置
654
658
  aiConfig: null,
655
659
  //im配置
@@ -940,7 +944,7 @@ export default {
940
944
  document.title = results[i];
941
945
  }
942
946
  if (i === 'loginPage' && results[i]) {
943
- util.setStorage('loginPage', results[i]);
947
+ util.setStorage({ key: 'loginPage', value: results[i] });
944
948
  }
945
949
  if (i === 'sysLogoIco' && results[i]) {
946
950
  localStorage.setItem('sysLogoIco', results[i]);
@@ -979,15 +983,22 @@ export default {
979
983
  if (results[i].userInfoContents) {
980
984
  this.userInfoContents = JSON.parse(results[i].userInfoContents);
981
985
  }
986
+ //水印配置
982
987
  if (results[i].webPageWatermark) {
983
988
  try {
984
989
  util.win.webPageWatermark = results[i].webPageWatermark;
985
990
  util.watermark(results[i].webPageWatermark);
986
991
  } catch (error) {}
987
992
  }
993
+ //登录页页面地址
988
994
  if (results[i].loginPage) {
989
- util.setStorage('loginPage', results[i].loginPage);
995
+ util.setStorage({ key: 'loginPage', value: results[i].loginPage });
990
996
  }
997
+ //登录页页面地址
998
+ if (results[i].openModel) {
999
+ util.setStorage({ key: 'openModel', value: results[i].openModel });
1000
+ }
1001
+ //ai配置
991
1002
  if (results[i].aiConfig) {
992
1003
  if (typeof results[i].aiConfig == 'string') {
993
1004
  try {
@@ -999,6 +1010,7 @@ export default {
999
1010
  this.aiConfig = results[i].aiConfig;
1000
1011
  }
1001
1012
  }
1013
+ //im配置
1002
1014
  if (results[i].imConfig) {
1003
1015
  if (typeof results[i].imConfig == 'string') {
1004
1016
  try {
@@ -1039,6 +1051,12 @@ export default {
1039
1051
  if (results[i].showHandlerTitleType) {
1040
1052
  this.showTitleType = results[i].showHandlerTitleType;
1041
1053
  }
1054
+ //菜单样式是否折叠形式
1055
+ if (results[i].menuCollapse !== undefined) {
1056
+ this.isCollapse =
1057
+ results[i].menuCollapse !== false &&
1058
+ results[i].menuCollapse !== 'false';
1059
+ }
1042
1060
  }
1043
1061
  if (i === 'userModel' && results[i]) {
1044
1062
  if (results[i].userHeadUrl) {
@@ -1050,6 +1068,9 @@ export default {
1050
1068
  results[i].userHeadUrl = this.userHead;
1051
1069
  }
1052
1070
  this.userModel = results[i];
1071
+ if (results[i].openModel) {
1072
+ util.setStorage({ key: 'openModel', value: results[i].openModel });
1073
+ }
1053
1074
  }
1054
1075
  if (i === 'notifyList' && results[i]) {
1055
1076
  this.notifyList = results[i];
@@ -1781,8 +1802,11 @@ export default {
1781
1802
  * @author huangbo
1782
1803
  * @date 2024年9月7日
1783
1804
  **/
1784
- handleRefresh() {
1785
- let i = util.indexOfObj(this.tabs, this.activeName, 'id');
1805
+ handleRefresh(arg) {
1806
+ let i =
1807
+ arg && arg != true
1808
+ ? util.indexOfObj(this.tabs, arg, 'appCode,code,id,url')
1809
+ : util.indexOfObj(this.tabs, this.activeName, 'id');
1786
1810
  let tab = this.tabs[i];
1787
1811
  if (tab.method === 'iframe') {
1788
1812
  tab.url = util.handlerUrl(tab.url);
@@ -1859,7 +1883,12 @@ export default {
1859
1883
  this.showTabsHandler = false;
1860
1884
  window.removeEventListener('click', this.closeTabsEvents);
1861
1885
  },
1862
- //关闭页签事件面板
1886
+
1887
+ /**
1888
+ * @desc:关闭页签事件面板
1889
+ * @author huangbo
1890
+ * @date 2024年9月7日
1891
+ **/
1863
1892
  closeTabsEvents(e) {
1864
1893
  if (
1865
1894
  e.target.parentNode != this.$refs.tabsHandler.$el &&
@@ -1869,6 +1898,17 @@ export default {
1869
1898
  }
1870
1899
  window.removeEventListener('click', this.closeTabsEvents);
1871
1900
  },
1901
+
1902
+ /**
1903
+ * @desc:tabs页签点击事件
1904
+ * @author huangbo
1905
+ * @date 2024年9月7日
1906
+ **/
1907
+ handleTabClick() {
1908
+ this.active = '';
1909
+ this.subMenus = null;
1910
+ this.showMenu = false;
1911
+ },
1872
1912
  /**
1873
1913
  * @desc:handler工具栏点击事件
1874
1914
  * @author huangbo
@@ -1928,6 +1968,9 @@ export default {
1928
1968
  this.activeName = this.homePage.id;
1929
1969
  this.showMsg = false;
1930
1970
  this.showSet = false;
1971
+ this.active = '';
1972
+ this.subMenus = null;
1973
+ this.showMenu = false;
1931
1974
  break;
1932
1975
  case 'search':
1933
1976
  this.showSearch = true;
@@ -122,7 +122,6 @@ export default {
122
122
  mode: String,
123
123
  collapse: Boolean,
124
124
  title: String,
125
- active: String,
126
125
  closed: Boolean,
127
126
  color: {
128
127
  type: [String, Array],
@@ -193,6 +192,9 @@ export default {
193
192
  } else {
194
193
  this.width = this.size;
195
194
  }
195
+ },
196
+ visible(val) {
197
+ val === false && (this.actives = []);
196
198
  }
197
199
  },
198
200
  created() {},
Binary file
@@ -303,7 +303,6 @@ export default {
303
303
  })
304
304
  );
305
305
  }
306
- console.log(item.tips, item.text);
307
306
  title.push(
308
307
  h(
309
308
  'div',
package/src/.DS_Store CHANGED
Binary file
package/src/index.js CHANGED
@@ -125,7 +125,7 @@ if (typeof window !== 'undefined' && window.Vue) {
125
125
  }
126
126
 
127
127
  export default {
128
- version: '0.7.28',
128
+ version: '0.7.30',
129
129
  install,
130
130
  Button,
131
131
  ButtonGroup,
package/src/utils/util.js CHANGED
@@ -16,6 +16,7 @@ import WebSocket from './webSocket';
16
16
  import { UAParser } from 'ua-parser-js';
17
17
 
18
18
  const win = window.__WUJIE_RAW_WINDOW__ ? window.__WUJIE_RAW_WINDOW__ : window;
19
+ const isIE = /MSIE|Trident/.test(navigator.userAgent);
19
20
  const parser = new UAParser();
20
21
  const $hueStep = 2;
21
22
  const $saturationStep1 = 0.16;
@@ -557,11 +558,20 @@ const browser = function () {
557
558
  * @date 2022年5月7日
558
559
  **/
559
560
  const busEmit = function (that, { method, args }) {
560
- const bus = win.$wujie ? win.$wujie.bus : that ? that.bus || that.$root.Bus || that.$root.$bus : null;
561
- if (bus) {
562
- Array.isArray(args) ? bus.$emit(method, ...args) : bus.$emit(method, args);
561
+ if (isIE) {
562
+ const bus = that ? that.bus || that.$root.Bus || that.$root.$bus : null;
563
+ if (bus) {
564
+ Array.isArray(args) ? bus.$emit(method, ...args) : bus.$emit(method, args);
565
+ } else {
566
+ win.parent.postMessage({ method, query: args, args }, '*');
567
+ }
563
568
  } else {
564
- win.parent.postMessage({ method, query: args }, '*');
569
+ const bus = win.$wujie ? win.$wujie.bus : that ? that.bus || that.$root.Bus || that.$root.$bus : null;
570
+ if (bus) {
571
+ Array.isArray(args) ? bus.$emit(method, ...args) : bus.$emit(method, args);
572
+ } else {
573
+ win.parent.postMessage({ method, query: args, args }, '*');
574
+ }
565
575
  }
566
576
  };
567
577
 
@@ -3564,7 +3574,6 @@ const removeStorage = function (key) {
3564
3574
  * @param {boolean} [isSession] 是否是会话cookie
3565
3575
  **/
3566
3576
  const setCookie = function (name, value, isSession = true, time) {
3567
- const isIE = /MSIE|Trident/.test(navigator.userAgent);
3568
3577
  try {
3569
3578
  const cookieParts = [
3570
3579
  `${encodeURIComponent(name)}=${encodeURIComponent(value)}`,
@@ -3637,6 +3646,20 @@ const removeCookie = function (key) {
3637
3646
  }
3638
3647
  };
3639
3648
 
3649
+ const winTopOpen = function (config) {
3650
+ if (isIE) {
3651
+ if (win.top !== win.self) {
3652
+ try {
3653
+ win.top.windowOpen(config);
3654
+ } catch (error) {
3655
+ win.postMessage({ method: 'windowOpen', query: config }, '*');
3656
+ }
3657
+ }
3658
+ } else {
3659
+ busEmit('windowOpen', config);
3660
+ }
3661
+ };
3662
+
3640
3663
  export default {
3641
3664
  ajax,
3642
3665
  ajaxStream,
@@ -3690,6 +3713,7 @@ export default {
3690
3713
  isEmpty,
3691
3714
  isExist,
3692
3715
  isFunction,
3716
+ isIE,
3693
3717
  isLogged,
3694
3718
  isLogined,
3695
3719
  isObject,
@@ -3729,5 +3753,6 @@ export default {
3729
3753
  urlJoinParams,
3730
3754
  uuid,
3731
3755
  watermark,
3732
- win
3756
+ win,
3757
+ winTopOpen
3733
3758
  };