@fmdevui/fm-dev 1.0.21 → 1.0.23

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 (49) hide show
  1. package/es/core/index.d.ts +1 -0
  2. package/es/core/types/emitt/index.d.ts +6 -0
  3. package/es/index.d.ts +1 -0
  4. package/es/index.mjs +2 -0
  5. package/es/packages/core/index.mjs +1 -0
  6. package/es/packages/core/layout/component/aside.vue2.mjs +7 -5
  7. package/es/packages/core/layout/main/defaults.vue2.mjs +6 -9
  8. package/es/packages/core/layout/navBars/topBar/onlineuser.vue.mjs +1 -1
  9. package/es/packages/core/layout/navBars/topBar/onlineuser.vue2.mjs +6 -12
  10. package/es/packages/core/layout/navBars/topBar/sendMessage.vue2.mjs +5 -10
  11. package/es/packages/core/layout/navBars/topBar/user.vue2.mjs +1 -2
  12. package/es/packages/core/layout/navMenu/vertical.vue2.mjs +1 -1
  13. package/es/packages/core/utils/comm/sysInfo.mjs +2 -2
  14. package/{lib/sysInfo.css → es/version.css} +4 -3
  15. package/index.css +98 -0
  16. package/index.js +14668 -109
  17. package/index.min.css +9 -0
  18. package/index.min.js +72 -26
  19. package/index.min.mjs +72 -26
  20. package/index.mjs +14662 -109
  21. package/lib/core/index.d.ts +1 -0
  22. package/lib/core/types/emitt/index.d.ts +6 -0
  23. package/lib/index.d.ts +1 -0
  24. package/lib/index.js +8 -0
  25. package/{es → lib}/make-installer.css +4 -4
  26. package/lib/packages/core/index.js +5 -0
  27. package/lib/packages/core/layout/component/aside.vue2.js +6 -4
  28. package/lib/packages/core/layout/main/defaults.vue2.js +5 -8
  29. package/lib/packages/core/layout/navBars/topBar/onlineuser.vue.js +1 -1
  30. package/lib/packages/core/layout/navBars/topBar/onlineuser.vue2.js +8 -14
  31. package/lib/packages/core/layout/navBars/topBar/sendMessage.vue2.js +4 -9
  32. package/lib/packages/core/layout/navBars/topBar/user.vue2.js +1 -2
  33. package/lib/packages/core/layout/navMenu/vertical.vue2.js +1 -1
  34. package/lib/packages/core/utils/comm/sysInfo.js +2 -2
  35. package/package.json +1 -1
  36. package/es/core/ui/components/editor/index.vue.d.ts +0 -52
  37. package/es/core/utils/comm/idleTimeout.d.ts +0 -45
  38. package/es/core/utils/comm/signalR.d.ts +0 -3
  39. package/es/packages/core/utils/comm/idleTimeout.mjs +0 -124
  40. package/es/packages/core/utils/comm/signalR.mjs +0 -45
  41. package/es/sysInfo.d.ts +0 -2
  42. package/es/sysInfo.mjs +0 -53
  43. package/lib/core/ui/components/editor/index.vue.d.ts +0 -52
  44. package/lib/core/utils/comm/idleTimeout.d.ts +0 -45
  45. package/lib/core/utils/comm/signalR.d.ts +0 -3
  46. package/lib/packages/core/utils/comm/idleTimeout.js +0 -128
  47. package/lib/packages/core/utils/comm/signalR.js +0 -66
  48. package/lib/sysInfo.d.ts +0 -2
  49. package/lib/sysInfo.js +0 -56
@@ -9,4 +9,5 @@ export * from './utils';
9
9
  export * from './auth';
10
10
  export * from './hook/dateTimeShortCust';
11
11
  export * from './hook/useVxeTableOptionsHook';
12
+ export * from './layout';
12
13
  export * from './types';
@@ -26,6 +26,12 @@ export type MittType<T = any> = {
26
26
  onTagsViewRefreshRouterView?: T;
27
27
  onCurrentContextmenuClick?: T;
28
28
  submitRefreshFk?: T;
29
+ updateIdleTimeoutchange?: T;
30
+ onPublicNotice?: T;
31
+ singarClientsSendMessage?: T;
32
+ signalRbeginOnlineUserList?: T;
33
+ signalRReceiveOnlineUserList?: T;
34
+ signalForceOffline?: T;
29
35
  };
30
36
  export type LayoutMobileResize = {
31
37
  layout: string;
package/lib/index.d.ts CHANGED
@@ -5,6 +5,7 @@ import { default as setIntroduction } from './core/utils/comm/setIconfont';
5
5
  import { App } from 'vue';
6
6
  export { other, emitter, setIntroduction };
7
7
  export * from './core';
8
+ export * from './core/utils/comm/sysInfo';
8
9
  export { version } from './version';
9
10
  export declare const install: (app: App) => void;
10
11
  export default installer;
package/lib/index.js CHANGED
@@ -7,6 +7,7 @@ var index = require('./packages/core/utils/other/index.js');
7
7
  var index$1 = require('./packages/core/utils/emit/index.js');
8
8
  var setIconfont = require('./packages/core/utils/comm/setIconfont.js');
9
9
  require('./packages/core/index.js');
10
+ var sysInfo = require('./packages/core/utils/comm/sysInfo.js');
10
11
  var version = require('./version.js');
11
12
  var index$2 = require('./packages/core/ui/components/index.js');
12
13
  var index$3 = require('./packages/core/ui/components/svgIcon/index.js');
@@ -39,6 +40,7 @@ var index$f = require('./packages/core/utils/const/index.js');
39
40
  var index$g = require('./packages/core/auth/index.js');
40
41
  var dateTimeShortCust = require('./packages/core/hook/dateTimeShortCust.js');
41
42
  var useVxeTableOptionsHook = require('./packages/core/hook/useVxeTableOptionsHook.js');
43
+ var index$h = require('./packages/core/layout/index.js');
42
44
 
43
45
  const install = defaults.default.install;
44
46
 
@@ -46,6 +48,8 @@ exports.default = defaults.default;
46
48
  exports.other = index.default;
47
49
  exports.emitter = index$1.default;
48
50
  exports.setIntroduction = setIconfont.default;
51
+ exports.loadSysInfo = sysInfo.loadSysInfo;
52
+ exports.updateFavicon = sysInfo.updateFavicon;
49
53
  exports.version = version.version;
50
54
  exports.FmDragImg = index$2.FmDragImg;
51
55
  exports.FmNoticeBar = index$2.FmNoticeBar;
@@ -143,4 +147,8 @@ exports.hAuthAll = index$g.hAuthAll;
143
147
  exports.hAuths = index$g.hAuths;
144
148
  exports.useDateTimeShortCust = dateTimeShortCust.useDateTimeShortCust;
145
149
  exports.useVxeTable = useVxeTableOptionsHook.useVxeTable;
150
+ exports.FmCloseFull = index$h.FmCloseFull;
151
+ exports.FmLayout = index$h.FmLayout;
152
+ exports.FmLockScreen = index$h.FmLockScreen;
153
+ exports.FmSetting = index$h.FmSetting;
146
154
  exports.install = install;
@@ -1,10 +1,10 @@
1
+ .layout-navbars-container[data-v-f2e6c18a]{display:flex;flex-direction:column;height:100%;width:100%}
1
2
  [data-v-11ae0e31] .el-scrollbar{height:calc(100% - 50px)}
2
3
  [data-v-194b61e4] .el-input-group__append{background:var(--el-color-white);padding:0 15px}[data-v-194b61e4] .el-input__wrapper.is-focus{box-shadow:0 0 0 1px var(--el-input-border-color,var(--el-border-color)) inset!important}[data-v-194b61e4] .el-input__inner{border-right-color:var(--el-border-color-extra-light);&:hover{border-color:var(--el-border-color-extra-light)}}
3
- .layout-navbars-container[data-v-f2e6c18a]{display:flex;flex-direction:column;height:100%;width:100%}
4
- [data-v-f1b73dc9] #color-box{.el-dialog__body{padding:0!important}}
5
4
  [data-v-04609759] .el-dialog__body{min-height:700px!important}
6
- .editor-container{overflow-y:hidden;.w-e-bar-item{.w-e-select-list{height:150px;z-index:10!important}}.w-e-toolbar{flex-wrap:wrap;z-index:4!important}.w-e-menu{z-index:auto!important;.w-e-droplist{z-index:2!important}}}
5
+ [data-v-f1b73dc9] #color-box{.el-dialog__body{padding:0!important}}
7
6
  [data-v-23b3f8c6] .el-breadcrumb__separator{color:var(--next-bg-topBarColor);opacity:.7}[data-v-23b3f8c6] .el-breadcrumb__inner a{color:var(--next-bg-topBarColor);font-weight:unset!important;&:hover{color:var(--el-color-primary)!important}}
8
- [data-v-2056b616] .el-drawer__body{display:flex;flex-direction:column;height:100%;padding:5px}.full-table{&[data-v-2056b616]{flex:1}[data-v-2056b616] .el-card__body{display:flex;flex-direction:column;height:100%}}
7
+ .editor-container{overflow-y:hidden;.w-e-bar-item{.w-e-select-list{height:150px;z-index:10!important}}.w-e-toolbar{flex-wrap:wrap;z-index:4!important}.w-e-menu{z-index:auto!important;.w-e-droplist{z-index:2!important}}}
8
+ [data-v-51e01af9] .el-drawer__body{display:flex;flex-direction:column;height:100%;padding:5px}.full-table{&[data-v-51e01af9]{flex:1}[data-v-51e01af9] .el-card__body{display:flex;flex-direction:column;height:100%}}
9
9
  :host,:root{--w-e-textarea-bg-color:#fff;--w-e-textarea-color:#333;--w-e-textarea-border-color:#ccc;--w-e-textarea-slight-border-color:#e8e8e8;--w-e-textarea-slight-color:#d4d4d4;--w-e-textarea-slight-bg-color:#f5f2f0;--w-e-textarea-selected-border-color:#b4d5ff;--w-e-textarea-handler-bg-color:#4290f7;--w-e-toolbar-color:#595959;--w-e-toolbar-bg-color:#fff;--w-e-toolbar-active-color:#333;--w-e-toolbar-active-bg-color:#f1f1f1;--w-e-toolbar-disabled-color:#999;--w-e-toolbar-border-color:#e8e8e8;--w-e-modal-button-bg-color:#fafafa;--w-e-modal-button-border-color:#d9d9d9}.w-e-text-container *,.w-e-toolbar *{box-sizing:border-box;margin:0;outline:none;padding:0}.w-e-text-container blockquote,.w-e-text-container li,.w-e-text-container p,.w-e-text-container td,.w-e-text-container th,.w-e-toolbar *{line-height:1.5}.w-e-text-container{background-color:var(--w-e-textarea-bg-color);color:var(--w-e-textarea-color);height:100%;position:relative}.w-e-text-container .w-e-scroll{-webkit-overflow-scrolling:touch;height:100%}.w-e-text-container [data-slate-editor]{word-wrap:break-word;border-top:1px solid transparent;min-height:100%;outline:0;padding:0 10px;white-space:pre-wrap}.w-e-text-container [data-slate-editor] p{margin:15px 0}.w-e-text-container [data-slate-editor] h1,.w-e-text-container [data-slate-editor] h2,.w-e-text-container [data-slate-editor] h3,.w-e-text-container [data-slate-editor] h4,.w-e-text-container [data-slate-editor] h5{margin:20px 0}.w-e-text-container [data-slate-editor] img{cursor:default;display:inline!important;max-width:100%;min-height:20px;min-width:20px}.w-e-text-container [data-slate-editor] span{text-indent:0}.w-e-text-container [data-slate-editor] [data-selected=true]{box-shadow:0 0 0 2px var(--w-e-textarea-selected-border-color)}.w-e-text-placeholder{font-style:italic;left:10px;top:17px;width:90%}.w-e-max-length-info,.w-e-text-placeholder{color:var(--w-e-textarea-slight-color);pointer-events:none;position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none}.w-e-max-length-info{bottom:.5em;right:1em}.w-e-bar{background-color:var(--w-e-toolbar-bg-color);color:var(--w-e-toolbar-color);font-size:14px;padding:0 5px}.w-e-bar svg{fill:var(--w-e-toolbar-color);height:14px;width:14px}.w-e-bar-show{display:flex}.w-e-bar-hidden{display:none}.w-e-hover-bar{border:1px solid var(--w-e-toolbar-border-color);border-radius:3px;box-shadow:0 2px 5px #0000001f;position:absolute}.w-e-toolbar{flex-wrap:wrap;position:relative}.w-e-bar-divider{background-color:var(--w-e-toolbar-border-color);display:inline-flex;height:40px;margin:0 5px;width:1px}.w-e-bar-item{display:flex;height:40px;padding:4px;position:relative;text-align:center}.w-e-bar-item,.w-e-bar-item button{align-items:center;justify-content:center}.w-e-bar-item button{background:transparent;border:none;color:var(--w-e-toolbar-color);cursor:pointer;display:inline-flex;height:32px;overflow:hidden;padding:0 8px;white-space:nowrap}.w-e-bar-item button:hover{background-color:var(--w-e-toolbar-active-bg-color);color:var(--w-e-toolbar-active-color)}.w-e-bar-item button .title{margin-left:5px}.w-e-bar-item .active{background-color:var(--w-e-toolbar-active-bg-color);color:var(--w-e-toolbar-active-color)}.w-e-bar-item .disabled{color:var(--w-e-toolbar-disabled-color);cursor:not-allowed}.w-e-bar-item .disabled svg{fill:var(--w-e-toolbar-disabled-color)}.w-e-bar-item .disabled:hover{background-color:var(--w-e-toolbar-bg-color);color:var(--w-e-toolbar-disabled-color)}.w-e-bar-item .disabled:hover svg{fill:var(--w-e-toolbar-disabled-color)}.w-e-menu-tooltip-v5:before{background-color:var(--w-e-toolbar-active-color);border-radius:5px;color:var(--w-e-toolbar-bg-color);content:attr(data-tooltip);font-size:.75em;padding:5px 10px;text-align:center;top:40px;white-space:pre;z-index:1}.w-e-menu-tooltip-v5:after,.w-e-menu-tooltip-v5:before{opacity:0;position:absolute;transition:opacity .6s;visibility:hidden}.w-e-menu-tooltip-v5:after{border:5px solid transparent;border-bottom:5px solid var(--w-e-toolbar-active-color);content:"";top:30px}.w-e-menu-tooltip-v5:hover:after,.w-e-menu-tooltip-v5:hover:before{opacity:1;visibility:visible}.w-e-menu-tooltip-v5.tooltip-right:before{left:100%;top:10px}.w-e-menu-tooltip-v5.tooltip-right:after{border-bottom-color:transparent;border-left-color:transparent;border-right-color:var(--w-e-toolbar-active-color);border-top-color:transparent;left:100%;margin-left:-10px;top:16px}.w-e-bar-item-group .w-e-bar-item-menus-container{background-color:var(--w-e-toolbar-bg-color);border:1px solid var(--w-e-toolbar-border-color);border-radius:3px;box-shadow:0 2px 10px #0000001f;display:none;left:0;margin-top:40px;position:absolute;top:0;z-index:1}.w-e-bar-item-group:hover .w-e-bar-item-menus-container{display:block}.w-e-select-list{background-color:var(--w-e-toolbar-bg-color);border:1px solid var(--w-e-toolbar-border-color);border-radius:3px;box-shadow:0 2px 10px #0000001f;left:0;margin-top:40px;max-height:350px;min-width:100px;overflow-y:auto;position:absolute;top:0;z-index:1}.w-e-select-list ul{line-height:1;list-style:none}.w-e-select-list ul .selected{background-color:var(--w-e-toolbar-active-bg-color)}.w-e-select-list ul li{cursor:pointer;padding:7px 0 7px 25px;position:relative;text-align:left;white-space:nowrap}.w-e-select-list ul li:hover{background-color:var(--w-e-toolbar-active-bg-color)}.w-e-select-list ul li svg{left:0;margin-left:5px;margin-top:-7px;position:absolute;top:50%}.w-e-bar-bottom .w-e-select-list{bottom:0;margin-bottom:40px;margin-top:0;top:inherit}.w-e-drop-panel{background-color:var(--w-e-toolbar-bg-color);border:1px solid var(--w-e-toolbar-border-color);border-radius:3px;box-shadow:0 2px 10px #0000001f;margin-top:40px;min-width:200px;padding:10px;position:absolute;top:0;z-index:1}.w-e-bar-bottom .w-e-drop-panel{bottom:0;margin-bottom:40px;margin-top:0;top:inherit}.w-e-modal{background-color:var(--w-e-toolbar-bg-color);border:1px solid var(--w-e-toolbar-border-color);border-radius:3px;box-shadow:0 2px 10px #0000001f;color:var(--w-e-toolbar-color);font-size:14px;min-height:40px;min-width:100px;padding:20px 15px 0;position:absolute;text-align:left;z-index:1}.w-e-modal .btn-close{cursor:pointer;line-height:1;padding:5px;position:absolute;right:8px;top:7px}.w-e-modal .btn-close svg{fill:var(--w-e-toolbar-color);height:10px;width:10px}.w-e-modal .babel-container{display:block;margin-bottom:15px}.w-e-modal .babel-container span{display:block;margin-bottom:10px}.w-e-modal .button-container{margin-bottom:15px}.w-e-modal button{background-color:var(--w-e-modal-button-bg-color);cursor:pointer;font-weight:400;height:32px;padding:4.5px 15px;text-align:center;touch-action:manipulation;transition:all .3s cubic-bezier(.645,.045,.355,1);-webkit-user-select:none;-moz-user-select:none;user-select:none;white-space:nowrap}.w-e-modal button,.w-e-modal input[type=number],.w-e-modal input[type=text],.w-e-modal textarea{border:1px solid var(--w-e-modal-button-border-color);border-radius:4px;color:var(--w-e-toolbar-color)}.w-e-modal input[type=number],.w-e-modal input[type=text],.w-e-modal textarea{background-color:var(--w-e-toolbar-bg-color);font-feature-settings:"tnum";font-variant:tabular-nums;padding:4.5px 11px;transition:all .3s;width:100%}.w-e-modal textarea{min-height:60px}body .w-e-modal,body .w-e-modal *{box-sizing:border-box}.w-e-progress-bar{background-color:var(--w-e-textarea-handler-bg-color);height:1px;position:absolute;transition:width .3s;width:0}.w-e-full-screen-container{bottom:0!important;display:flex!important;flex-direction:column!important;height:100%!important;left:0!important;margin:0!important;padding:0!important;position:fixed;right:0!important;top:0!important;width:100%!important}.w-e-full-screen-container [data-w-e-textarea=true]{flex:1!important}.w-e-text-container [data-slate-editor] code{background-color:var(--w-e-textarea-slight-bg-color);border-radius:3px;font-family:monospace;padding:3px}.w-e-panel-content-color{list-style:none;text-align:left;width:230px}.w-e-panel-content-color li{border:1px solid var(--w-e-toolbar-bg-color);border-radius:3px 3px;cursor:pointer;display:inline-block;padding:2px}.w-e-panel-content-color li:hover{border-color:var(--w-e-toolbar-color)}.w-e-panel-content-color li .color-block{border:1px solid var(--w-e-toolbar-border-color);border-radius:3px 3px;height:17px;width:17px}.w-e-panel-content-color .active{border-color:var(--w-e-toolbar-color)}.w-e-panel-content-color .clear{line-height:1.5;margin-bottom:5px;width:100%}.w-e-panel-content-color .clear svg{height:16px;margin-bottom:-4px;width:16px}.w-e-text-container [data-slate-editor] blockquote{background-color:var(--w-e-textarea-slight-bg-color);border-left:8px solid var(--w-e-textarea-selected-border-color);display:block;font-size:100%;line-height:1.5;margin:10px 0;padding:10px}.w-e-panel-content-emotion{font-size:20px;list-style:none;text-align:left;width:300px}.w-e-panel-content-emotion li{border-radius:3px 3px;cursor:pointer;display:inline-block;padding:0 5px}.w-e-panel-content-emotion li:hover{background-color:var(--w-e-textarea-slight-bg-color)}.w-e-textarea-divider{border-radius:3px;margin:20px auto;padding:20px}.w-e-textarea-divider hr{background-color:var(--w-e-textarea-border-color);border:0;display:block;height:1px}.w-e-text-container [data-slate-editor] pre>code{background-color:var(--w-e-textarea-slight-bg-color);border:1px solid var(--w-e-textarea-slight-border-color);border-radius:4px 4px;display:block;font-size:14px;padding:10px;text-indent:0}.w-e-text-container [data-slate-editor] .w-e-image-container{display:inline-block;margin:0 3px}.w-e-text-container [data-slate-editor] .w-e-image-container:hover{box-shadow:0 0 0 2px var(--w-e-textarea-selected-border-color)}.w-e-text-container [data-slate-editor] .w-e-selected-image-container{overflow:hidden;position:relative}.w-e-text-container [data-slate-editor] .w-e-selected-image-container .w-e-image-dragger{background-color:var(--w-e-textarea-handler-bg-color);height:7px;position:absolute;width:7px}.w-e-text-container [data-slate-editor] .w-e-selected-image-container .left-top{cursor:nwse-resize;left:0;top:0}.w-e-text-container [data-slate-editor] .w-e-selected-image-container .right-top{cursor:nesw-resize;right:0;top:0}.w-e-text-container [data-slate-editor] .w-e-selected-image-container .left-bottom{bottom:0;cursor:nesw-resize;left:0}.w-e-text-container [data-slate-editor] .w-e-selected-image-container .right-bottom{bottom:0;cursor:nwse-resize;right:0}.w-e-text-container [contenteditable=false] .w-e-image-container:hover,.w-e-text-container [data-slate-editor] .w-e-selected-image-container:hover{box-shadow:none}.w-e-text-container [data-slate-editor] .table-container{border:1px dashed var(--w-e-textarea-border-color);border-radius:5px;margin-top:10px;overflow-x:auto;padding:10px;width:100%}.w-e-text-container [data-slate-editor] table{border-collapse:collapse}.w-e-text-container [data-slate-editor] table td,.w-e-text-container [data-slate-editor] table th{border:1px solid var(--w-e-textarea-border-color);line-height:1.5;min-width:30px;padding:3px 5px;text-align:left}.w-e-text-container [data-slate-editor] table th{background-color:var(--w-e-textarea-slight-bg-color);font-weight:700;text-align:center}.w-e-panel-content-table{background-color:var(--w-e-toolbar-bg-color)}.w-e-panel-content-table table{border-collapse:collapse}.w-e-panel-content-table td{border:1px solid var(--w-e-toolbar-border-color);cursor:pointer;height:15px;padding:3px 5px;width:20px}.w-e-panel-content-table td.active{background-color:var(--w-e-toolbar-active-bg-color)}.w-e-textarea-video-container{background-image:linear-gradient(45deg,#eee 25%,transparent 0,transparent 75%,#eee 0,#eee),linear-gradient(45deg,#eee 25%,#fff 0,#fff 75%,#eee 0,#eee);background-position:0 0,10px 10px;background-size:20px 20px;border:1px dashed var(--w-e-textarea-border-color);border-radius:5px;margin:10px auto 0;padding:10px 0;text-align:center}.w-e-text-container [data-slate-editor] pre>code{word-wrap:normal;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;-webkit-hyphens:none;hyphens:none;line-height:1.5;margin:.5em 0;overflow:auto;padding:1em;-moz-tab-size:4;-o-tab-size:4;tab-size:4;text-align:left;text-shadow:0 1px #fff;white-space:pre;word-break:normal;word-spacing:normal}.w-e-text-container [data-slate-editor] pre>code .token.cdata,.w-e-text-container [data-slate-editor] pre>code .token.comment,.w-e-text-container [data-slate-editor] pre>code .token.doctype,.w-e-text-container [data-slate-editor] pre>code .token.prolog{color:#708090}.w-e-text-container [data-slate-editor] pre>code .token.punctuation{color:#999}.w-e-text-container [data-slate-editor] pre>code .token.namespace{opacity:.7}.w-e-text-container [data-slate-editor] pre>code .token.boolean,.w-e-text-container [data-slate-editor] pre>code .token.constant,.w-e-text-container [data-slate-editor] pre>code .token.deleted,.w-e-text-container [data-slate-editor] pre>code .token.number,.w-e-text-container [data-slate-editor] pre>code .token.property,.w-e-text-container [data-slate-editor] pre>code .token.symbol,.w-e-text-container [data-slate-editor] pre>code .token.tag{color:#905}.w-e-text-container [data-slate-editor] pre>code .token.attr-name,.w-e-text-container [data-slate-editor] pre>code .token.builtin,.w-e-text-container [data-slate-editor] pre>code .token.char,.w-e-text-container [data-slate-editor] pre>code .token.inserted,.w-e-text-container [data-slate-editor] pre>code .token.selector,.w-e-text-container [data-slate-editor] pre>code .token.string{color:#690}.w-e-text-container [data-slate-editor] pre>code .language-css .token.string,.w-e-text-container [data-slate-editor] pre>code .style .token.string,.w-e-text-container [data-slate-editor] pre>code .token.entity,.w-e-text-container [data-slate-editor] pre>code .token.operator,.w-e-text-container [data-slate-editor] pre>code .token.url{color:#9a6e3a}.w-e-text-container [data-slate-editor] pre>code .token.atrule,.w-e-text-container [data-slate-editor] pre>code .token.attr-value,.w-e-text-container [data-slate-editor] pre>code .token.keyword{color:#07a}.w-e-text-container [data-slate-editor] pre>code .token.class-name,.w-e-text-container [data-slate-editor] pre>code .token.function{color:#dd4a68}.w-e-text-container [data-slate-editor] pre>code .token.important,.w-e-text-container [data-slate-editor] pre>code .token.regex,.w-e-text-container [data-slate-editor] pre>code .token.variable{color:#e90}.w-e-text-container [data-slate-editor] pre>code .token.bold,.w-e-text-container [data-slate-editor] pre>code .token.important{font-weight:700}.w-e-text-container [data-slate-editor] pre>code .token.italic{font-style:italic}.w-e-text-container [data-slate-editor] pre>code .token.entity{cursor:help}
10
10
  .drag_verify[data-v-9e8c9ed2]{background-color:#e8e8e8;overflow:hidden;position:relative;text-align:center}.drag_verify .dv_handler[data-v-9e8c9ed2]{cursor:move;left:0;position:absolute;top:0}.drag_verify .dv_handler i[data-v-9e8c9ed2]{color:#666;font-size:16px;padding-left:0}.drag_verify .dv_handler .el-icon-circle-check[data-v-9e8c9ed2]{color:#6c6;margin-top:9px}.drag_verify .dv_progress_bar[data-v-9e8c9ed2]{height:34px;position:absolute;width:0}.drag_verify .dv_text[data-v-9e8c9ed2]{background:-webkit-gradient(linear,left top,right top,color-stop(0,var(--textColor)),color-stop(.4,var(--textColor)),color-stop(.5,#fff),color-stop(.6,var(--textColor)),color-stop(1,var(--textColor)));-webkit-background-clip:text;color:transparent;position:absolute;top:0;-moz-user-select:none;-webkit-user-select:none;user-select:none;-o-user-select:none;-ms-user-select:none;-webkit-text-fill-color:transparent;-webkit-text-size-adjust:none;animation:slidetounlock 3s infinite}.drag_verify .dv_text[data-v-9e8c9ed2] *{-webkit-text-fill-color:var(--textColor)}.goFirst[data-v-9e8c9ed2]{left:0!important;transition:left .5s}.goOrigin[data-v-9e8c9ed2]{transition:transform .5s}.goKeep[data-v-9e8c9ed2]{transition:left .2s}.goFirst2[data-v-9e8c9ed2]{transition:width .5s;width:0!important}.drag-verify-container[data-v-9e8c9ed2]{border-radius:50%;line-height:0;position:relative}.move-bar[data-v-9e8c9ed2]{position:absolute;z-index:100}.clip-bar[data-v-9e8c9ed2]{background:hsla(0,0%,100%,.8);position:absolute}.refresh[data-v-9e8c9ed2]{cursor:pointer;font-size:20px;position:absolute;right:5px;top:5px;z-index:200}.tips[data-v-9e8c9ed2]{bottom:25px;font-size:12px;height:20px;line-height:20px;position:absolute;text-align:center;width:100%;z-index:200}.tips.success[data-v-9e8c9ed2]{background:hsla(0,0%,100%,.6);color:green}.tips.danger[data-v-9e8c9ed2]{background:rgba(0,0,0,.6);color:#ff0}.check-img[data-v-9e8c9ed2]{border-radius:50%;width:100%}
@@ -11,6 +11,7 @@ require('./utils/index.js');
11
11
  var index$e = require('./auth/index.js');
12
12
  var dateTimeShortCust = require('./hook/dateTimeShortCust.js');
13
13
  var useVxeTableOptionsHook = require('./hook/useVxeTableOptionsHook.js');
14
+ var index$f = require('./layout/index.js');
14
15
  require('./types/index.js');
15
16
  var index$1 = require('./ui/components/svgIcon/index.js');
16
17
  var index$4 = require('./api/base/index.js');
@@ -58,6 +59,10 @@ exports.hAuthAll = index$e.hAuthAll;
58
59
  exports.hAuths = index$e.hAuths;
59
60
  exports.useDateTimeShortCust = dateTimeShortCust.useDateTimeShortCust;
60
61
  exports.useVxeTable = useVxeTableOptionsHook.useVxeTable;
62
+ exports.FmCloseFull = index$f.FmCloseFull;
63
+ exports.FmLayout = index$f.FmLayout;
64
+ exports.FmLockScreen = index$f.FmLockScreen;
65
+ exports.FmSetting = index$f.FmSetting;
61
66
  exports.elSvg = index$1.elSvg;
62
67
  exports.useBaseApi = index$4.useBaseApi;
63
68
  exports.feature = index$5.feature;
@@ -6,16 +6,18 @@ var vue = require('vue');
6
6
  var pinia = require('pinia');
7
7
  require('../../stores/index.js');
8
8
  var index = require('../../utils/emit/index.js');
9
+ require('../logo/index.vue.js');
10
+ require('../navMenu/vertical.vue.js');
9
11
  var routesList = require('../../stores/routesList.js');
10
12
  var themeConfig = require('../../stores/themeConfig.js');
11
13
  var tagsViewRoutes = require('../../stores/tagsViewRoutes.js');
14
+ var index_vue_vue_type_script_setup_true_name_layoutLogo_lang = require('../logo/index.vue2.js');
15
+ var vertical_vue_vue_type_script_setup_true_name_navMenuVertical_lang = require('../navMenu/vertical.vue2.js');
12
16
 
13
17
  const _hoisted_1 = { class: "h100" };
14
18
  var _sfc_main = /* @__PURE__ */ vue.defineComponent({
15
19
  __name: "aside",
16
20
  setup(__props) {
17
- const Logo = vue.defineAsyncComponent(() => Promise.resolve().then(function () { return require('../logo/index.vue.js'); }));
18
- const Vertical = vue.defineAsyncComponent(() => Promise.resolve().then(function () { return require('../navMenu/vertical.vue.js'); }));
19
21
  const layoutAsideScrollbarRef = vue.ref();
20
22
  const stores = routesList.useRoutesList();
21
23
  const storesThemeConfig = themeConfig.useThemeConfig();
@@ -136,7 +138,7 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
136
138
  class: vue.normalizeClass(["layout-aside", setCollapseStyle.value])
137
139
  }, {
138
140
  default: vue.withCtx(() => [
139
- setShowLogo.value ? (vue.openBlock(), vue.createBlock(vue.unref(Logo), { key: 0 })) : vue.createCommentVNode("v-if", true),
141
+ setShowLogo.value ? (vue.openBlock(), vue.createBlock(index_vue_vue_type_script_setup_true_name_layoutLogo_lang.default, { key: 0 })) : vue.createCommentVNode("v-if", true),
140
142
  vue.createVNode(
141
143
  _component_el_scrollbar,
142
144
  {
@@ -148,7 +150,7 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
148
150
  },
149
151
  {
150
152
  default: vue.withCtx(() => [
151
- vue.createVNode(vue.unref(Vertical), {
153
+ vue.createVNode(vertical_vue_vue_type_script_setup_true_name_navMenuVertical_lang.default, {
152
154
  menuList: state.menuList
153
155
  }, null, 8, ["menuList"])
154
156
  ]),
@@ -10,19 +10,16 @@ var index = require('../../ui/loading/index.js');
10
10
  require('../component/aside.vue.js');
11
11
  require('../component/header.vue.js');
12
12
  require('../component/main.vue.js');
13
+ var themeConfig = require('../../stores/themeConfig.js');
13
14
  var aside_vue_vue_type_script_setup_true_name_layoutAside_lang = require('../component/aside.vue2.js');
14
15
  var header_vue_vue_type_script_setup_true_name_layoutHeader_lang = require('../component/header.vue2.js');
15
16
  var main_vue_vue_type_script_setup_true_name_layoutMain_lang = require('../component/main.vue2.js');
16
- var themeConfig = require('../../stores/themeConfig.js');
17
17
 
18
18
  var _sfc_main = /* @__PURE__ */ vue.defineComponent({
19
19
  __name: "defaults",
20
20
  setup(__props) {
21
- const LayoutAside = aside_vue_vue_type_script_setup_true_name_layoutAside_lang.default;
22
- const LayoutHeader = header_vue_vue_type_script_setup_true_name_layoutHeader_lang.default;
23
- const LayoutMain = main_vue_vue_type_script_setup_true_name_layoutMain_lang.default;
24
21
  const layoutScrollbarRef = vue.ref("");
25
- const layoutMainRef = vue.ref();
22
+ const layoutMainRef = vue.ref("");
26
23
  const route = vueRouter.useRoute();
27
24
  const storesThemeConfig = themeConfig.useThemeConfig();
28
25
  const { themeConfig: themeConfig$1 } = pinia.storeToRefs(storesThemeConfig);
@@ -65,7 +62,7 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
65
62
  const _component_el_container = vue.resolveComponent("el-container");
66
63
  return vue.openBlock(), vue.createBlock(_component_el_container, { class: "layout-container" }, {
67
64
  default: vue.withCtx(() => [
68
- vue.createVNode(vue.unref(LayoutAside)),
65
+ vue.createVNode(aside_vue_vue_type_script_setup_true_name_layoutAside_lang.default),
69
66
  vue.createVNode(_component_el_container, { class: "layout-container-view h100" }, {
70
67
  default: vue.withCtx(() => [
71
68
  vue.createVNode(
@@ -77,9 +74,9 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
77
74
  },
78
75
  {
79
76
  default: vue.withCtx(() => [
80
- vue.createVNode(vue.unref(LayoutHeader)),
77
+ vue.createVNode(header_vue_vue_type_script_setup_true_name_layoutHeader_lang.default),
81
78
  vue.createVNode(
82
- vue.unref(LayoutMain),
79
+ main_vue_vue_type_script_setup_true_name_layoutMain_lang.default,
83
80
  {
84
81
  ref_key: "layoutMainRef",
85
82
  ref: layoutMainRef
@@ -6,6 +6,6 @@ var onlineuser_vue_vue_type_script_setup_true_lang = require('./onlineuser.vue2.
6
6
  require('./onlineuser.vue3.js');
7
7
  var _pluginVue_exportHelper = require('../../../../../_virtual/_plugin-vue_export-helper.js');
8
8
 
9
- var onlineusercom = /* @__PURE__ */ _pluginVue_exportHelper.default(onlineuser_vue_vue_type_script_setup_true_lang.default, [["__scopeId", "data-v-2056b616"]]);
9
+ var onlineusercom = /* @__PURE__ */ _pluginVue_exportHelper.default(onlineuser_vue_vue_type_script_setup_true_lang.default, [["__scopeId", "data-v-51e01af9"]]);
10
10
 
11
11
  exports.default = onlineusercom;
@@ -10,13 +10,12 @@ var pinia = require('pinia');
10
10
  require('../../../utils/index.js');
11
11
  var vueI18n = require('vue-i18n');
12
12
  var lodashEs = require('lodash-es');
13
- var signalR = require('../../../utils/comm/signalR.js');
13
+ var index$1 = require('../../../utils/emit/index.js');
14
14
  require('./sendMessage.vue.js');
15
15
  require('../../../api/index.js');
16
16
  var themeConfig = require('../../../stores/themeConfig.js');
17
17
  var index = require('../../../utils/storage/index.js');
18
- var index$1 = require('../../../api/sys/index.js');
19
- var request = require('../../../api/utils/request.js');
18
+ var index$2 = require('../../../api/sys/index.js');
20
19
  var sendMessage_vue_vue_type_script_setup_true_name_sendMessage_lang = require('./sendMessage.vue2.js');
21
20
 
22
21
  const _hoisted_1 = { class: "sys-onlineUser-container" };
@@ -78,8 +77,10 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
78
77
  );
79
78
  vue.onMounted(async () => {
80
79
  state.localPageParam = index.Local.get(localPageParamKey) || state.localPageParam;
81
- signalR.signalR.off("OnlineUserList");
82
- signalR.signalR.on("OnlineUserList", async (data) => {
80
+ index$1.default.emit("signalRbeginOnlineUserList", "sysOnlineUser");
81
+ index$1.default.off("signalRReceiveOnlineUserList", () => {
82
+ });
83
+ index$1.default.on("signalRReceiveOnlineUserList", async (data) => {
83
84
  state.onlineUserList = data.userList;
84
85
  state.lastUserState = {
85
86
  online: data.online,
@@ -87,12 +88,6 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
87
88
  };
88
89
  if (themeConfig$1.value.onlineNotice) notificationThrottle();
89
90
  });
90
- signalR.signalR.off("ForceOffline");
91
- signalR.signalR.on("ForceOffline", async (data) => {
92
- await signalR.signalR.stop();
93
- await index$1.useSysApi().Logout();
94
- request.clearAccessTokens();
95
- });
96
91
  });
97
92
  const notificationThrottle = lodashEs.throttle(
98
93
  function() {
@@ -115,7 +110,7 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
115
110
  };
116
111
  const handleQueryApi = async (page, sort) => {
117
112
  const params = Object.assign(state.queryParams, { page: page.currentPage, pageSize: page.pageSize, field: sort.field, order: sort.order, descStr: "desc" });
118
- return index$1.useSysApi().getOnlineUserList(params);
113
+ return index$2.useSysApi().getOnlineUserList(params);
119
114
  };
120
115
  const handleQuery = async (reset = false) => {
121
116
  options.loading = true;
@@ -148,8 +143,7 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
148
143
  cancelButtonText: t("message.list.cancelButtonText"),
149
144
  type: "warning"
150
145
  }).then(async () => {
151
- await signalR.signalR.send("ForceOffline", { connectionId: row.connectionId }).catch(function(err) {
152
- });
146
+ await index$1.default.emit("signalForceOffline", { connectionId: row.connectionId });
153
147
  }).catch(() => {
154
148
  });
155
149
  };
@@ -5,10 +5,8 @@ Object.defineProperty(exports, '__esModule', { value: true });
5
5
  var vue = require('vue');
6
6
  require('../../../stores/index.js');
7
7
  var pinia = require('pinia');
8
- require('../../../ui/components/editor/index.vue.js');
9
- var signalR = require('../../../utils/comm/signalR.js');
8
+ var index = require('../../../utils/emit/index.js');
10
9
  var userInfo = require('../../../stores/userInfo.js');
11
- var index_vue_vue_type_script_setup_true_name_wngEditor_lang = require('../../../ui/components/editor/index.vue2.js');
12
10
 
13
11
  const _hoisted_1 = { class: "sendMessage-container" };
14
12
  const _hoisted_2 = { style: { "color": "#fff" } };
@@ -39,7 +37,7 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
39
37
  const submit = () => {
40
38
  ruleFormRef.value.validate(async (valid) => {
41
39
  if (!valid) return;
42
- await signalR.signalR.send("ClientsSendMessage", state.ruleForm);
40
+ index.default.emit("singarClientsSendMessage", state.ruleForm);
43
41
  });
44
42
  };
45
43
  __expose({ openDialog });
@@ -56,7 +54,7 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
56
54
  return vue.openBlock(), vue.createElementBlock("div", _hoisted_1, [
57
55
  vue.createVNode(_component_el_dialog, {
58
56
  modelValue: state.isShowDialog,
59
- "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => state.isShowDialog = $event),
57
+ "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => state.isShowDialog = $event),
60
58
  draggable: "",
61
59
  "close-on-click-modal": false,
62
60
  width: "900px"
@@ -184,10 +182,7 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
184
182
  rules: [{ required: true, message: _ctx.$t("message.list.contentRequired"), trigger: "blur" }]
185
183
  }, {
186
184
  default: vue.withCtx(() => [
187
- vue.createVNode(index_vue_vue_type_script_setup_true_name_wngEditor_lang.default, {
188
- "get-html": state.ruleForm.message,
189
- "onUpdate:getHtml": _cache[2] || (_cache[2] = ($event) => state.ruleForm.message = $event)
190
- }, null, 8, ["get-html"])
185
+ vue.createCommentVNode(' <Editor v-model:get-html="state.ruleForm.message" /> ')
191
186
  ]),
192
187
  _: 1
193
188
  /* STABLE */
@@ -14,7 +14,6 @@ var index$1 = require('../../../utils/emit/index.js');
14
14
  require('../../../utils/index.js');
15
15
  require('../../../api/index.js');
16
16
  var Push = require('push.js');
17
- var signalR = require('../../../utils/comm/signalR.js');
18
17
  var svg = require('@element-plus/icons-vue');
19
18
  var index = require('../../../locales/index.js');
20
19
  var FlagIcon = require('vue3-flag-icons');
@@ -190,7 +189,7 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
190
189
  });
191
190
  var res = await index$4.useSysApi().getNoticeUnReadList();
192
191
  state.noticeList = res.data.result ?? [];
193
- signalR.signalR.on("PublicNotice", receiveNotice);
192
+ index$1.default.emit("onPublicNotice", receiveNotice);
194
193
  var res1 = await index$4.useSysApi().getUpgradeLastUnRead();
195
194
  if (res1.data.result != null) {
196
195
  upgradeInfoRef.value?.openDialog(res1.data.result);
@@ -8,8 +8,8 @@ var pinia = require('pinia');
8
8
  require('../../stores/index.js');
9
9
  var index = require('../../utils/other/index.js');
10
10
  require('./subItem.vue.js');
11
- var themeConfig = require('../../stores/themeConfig.js');
12
11
  var subItem_vue_vue_type_script_setup_true_name_navMenuSubItem_lang = require('./subItem.vue2.js');
12
+ var themeConfig = require('../../stores/themeConfig.js');
13
13
 
14
14
  const _hoisted_1 = ["onClick"];
15
15
  var _sfc_main = /* @__PURE__ */ vue.defineComponent({
@@ -5,7 +5,7 @@ var pinia = require('pinia');
5
5
  require('../../stores/index.js');
6
6
  var index$2 = require('../const/index.js');
7
7
  require('../../api/index.js');
8
- var idleTimeout = require('./idleTimeout.js');
8
+ var index$3 = require('../emit/index.js');
9
9
  var themeConfig = require('../../stores/themeConfig.js');
10
10
  var index = require('../../api/sys/index.js');
11
11
 
@@ -43,7 +43,7 @@ async function loadSysInfo(tenantid) {
43
43
  themeConfig$1.value.onlineNotice = data.onlineNotice;
44
44
  window.__env__.VITE_SM_PUBLIC_KEY = data.publicKey;
45
45
  updateFavicon(data.logo);
46
- idleTimeout.updateIdleTimeout(themeConfig$1.value.idleTimeout ?? 0);
46
+ index$3.default.emit("updateIdleTimeoutchange", themeConfig$1.value.idleTimeout ?? 0);
47
47
  index$1.Local.remove(index$2.PUB.themeConfig);
48
48
  index$1.Local.set(index$2.PUB.themeConfig, storesThemeConfig.themeConfig);
49
49
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fmdevui/fm-dev",
3
- "version": "1.0.21",
3
+ "version": "1.0.23",
4
4
  "description": "Page level components developed based on Element Plus.",
5
5
  "author": "fmdevui",
6
6
  "keywords": [
@@ -1,52 +0,0 @@
1
- import { DefineComponent, ExtractPropTypes, ComponentOptionsMixin, PublicProps, ComponentProvideOptions } from 'vue';
2
- declare const _default: DefineComponent<ExtractPropTypes<{
3
- disable: {
4
- type: BooleanConstructor;
5
- default: () => boolean;
6
- };
7
- placeholder: {
8
- type: StringConstructor;
9
- default: () => string;
10
- };
11
- mode: {
12
- type: StringConstructor;
13
- default: () => string;
14
- };
15
- height: {
16
- type: StringConstructor;
17
- default: () => string;
18
- };
19
- getHtml: StringConstructor;
20
- getText: StringConstructor;
21
- }>, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
22
- "update:getHtml": (...args: any[]) => void;
23
- "update:getText": (...args: any[]) => void;
24
- }, string, PublicProps, Readonly< ExtractPropTypes<{
25
- disable: {
26
- type: BooleanConstructor;
27
- default: () => boolean;
28
- };
29
- placeholder: {
30
- type: StringConstructor;
31
- default: () => string;
32
- };
33
- mode: {
34
- type: StringConstructor;
35
- default: () => string;
36
- };
37
- height: {
38
- type: StringConstructor;
39
- default: () => string;
40
- };
41
- getHtml: StringConstructor;
42
- getText: StringConstructor;
43
- }>> & Readonly<{
44
- "onUpdate:getHtml"?: ((...args: any[]) => any) | undefined;
45
- "onUpdate:getText"?: ((...args: any[]) => any) | undefined;
46
- }>, {
47
- placeholder: string;
48
- mode: string;
49
- height: string;
50
- disable: boolean;
51
- }, {}, {}, {}, string, ComponentProvideOptions, true, {}, HTMLDivElement>;
52
- export default _default;
@@ -1,45 +0,0 @@
1
- type IdleTimeoutConfig = {
2
- /** 空闲超时时间(秒),默认30分钟 */
3
- timeout?: number;
4
- /** 用于设置最后活动时间的监听事件列表 */
5
- events?: string[];
6
- /** 登出回调函数,在超时发生时执行 */
7
- onTimeout?: () => void;
8
- /** 监听事件防抖间隔(毫秒),默认 200,设为0表示不启用防抖 */
9
- debounceInterval?: number;
10
- };
11
- declare class IdleTimeoutManager {
12
- private timerId;
13
- private readonly config;
14
- private readonly debouncedReset;
15
- /** 检查闲置超时时间间隔 */
16
- private readonly checkTimeoutInterval;
17
- constructor(config?: IdleTimeoutConfig);
18
- private init;
19
- private handleVisibilityChange;
20
- /** 设置最后活动时间 */
21
- setLastActivityTime(): void;
22
- /**
23
- * 更新空闲超时时间
24
- * @param timeout - 新的超时时间(毫秒)
25
- */
26
- updateIdleTimeout(timeout: number): void;
27
- /** 检查是否超时 */
28
- checkTimeout(): void;
29
- /** 销毁实例 */
30
- destroy(): void;
31
- /** 超时时执行 */
32
- private timeOutExec;
33
- }
34
- /** 初始化函数(在应用启动时调用) */
35
- export declare function initIdleTimeout(config?: IdleTimeoutConfig): IdleTimeoutManager;
36
- /** 销毁函数(在需要时调用) */
37
- export declare function destroyIdleTimeout(): void;
38
- /** 更新空闲超时时间(毫秒) */
39
- export declare function updateIdleTimeout(timeout: number): void;
40
- declare global {
41
- interface Window {
42
- __IDLE_TIMEOUT__?: IdleTimeoutManager;
43
- }
44
- }
45
- export {};
@@ -1,3 +0,0 @@
1
- import * as SignalR from '@microsoft/signalr';
2
- declare const connection: SignalR.HubConnection;
3
- export { connection as signalR };
@@ -1,124 +0,0 @@
1
- import { debounce } from 'lodash-es';
2
- import { Local, Session } from '../storage/index.mjs';
3
- import { ElMessageBox } from 'element-plus';
4
- import { PUB } from '../const/index.mjs';
5
- import { useI18n } from 'vue-i18n';
6
-
7
- let signalR;
8
- async function loadSignalR() {
9
- if (!signalR) {
10
- const module = await import('./signalR.mjs');
11
- signalR = module.signalR;
12
- }
13
- return signalR;
14
- }
15
- class IdleTimeoutManager {
16
- timerId = null;
17
- config;
18
- debouncedReset;
19
- /** 检查闲置超时时间间隔 */
20
- checkTimeoutInterval = 2 * 1e3;
21
- constructor(config = {}) {
22
- this.config = {
23
- timeout: 30 * 60,
24
- events: ["mousewheel", "keydown", "click"],
25
- onTimeout: this.timeOutExec.bind(this),
26
- debounceInterval: 200,
27
- ...config
28
- };
29
- this.debouncedReset = this.config.debounceInterval > 0 ? debounce(this.setLastActivityTime.bind(this), this.config.debounceInterval) : this.setLastActivityTime.bind(this);
30
- this.init();
31
- }
32
- init() {
33
- this.config.events.forEach((event) => {
34
- window.addEventListener(event, this.debouncedReset);
35
- });
36
- document.addEventListener("visibilitychange", this.handleVisibilityChange);
37
- this.setLastActivityTime();
38
- this.updateIdleTimeout(this.config.timeout);
39
- }
40
- handleVisibilityChange = () => {
41
- if (document.visibilityState === "visible") {
42
- this.setLastActivityTime();
43
- }
44
- };
45
- /** 设置最后活动时间 */
46
- setLastActivityTime() {
47
- Local.set("lastActivityTime", (/* @__PURE__ */ new Date()).getTime());
48
- }
49
- /**
50
- * 更新空闲超时时间
51
- * @param timeout - 新的超时时间(毫秒)
52
- */
53
- updateIdleTimeout(timeout) {
54
- this.config.timeout = timeout;
55
- if (this.config.timeout > 0 && this.timerId == null) {
56
- this.timerId = window.setInterval(this.checkTimeout.bind(this), this.checkTimeoutInterval);
57
- } else if (this.config.timeout == 0 && this.timerId != null) {
58
- window.clearInterval(this.timerId);
59
- this.timerId = null;
60
- }
61
- }
62
- /** 检查是否超时 */
63
- checkTimeout() {
64
- const currentTime = (/* @__PURE__ */ new Date()).getTime();
65
- const lastActivityTime = Number(Local.get("lastActivityTime"));
66
- if (lastActivityTime == 0) return;
67
- const accessToken = Local.get(PUB.accessTokenKey);
68
- if (!accessToken || accessToken == "invalid_token") return;
69
- const timeout = this.config.timeout * 1e3;
70
- if (currentTime - lastActivityTime > timeout) {
71
- this.destroy();
72
- this.config.onTimeout();
73
- }
74
- }
75
- /** 销毁实例 */
76
- destroy() {
77
- this.config.events.forEach((event) => {
78
- window.removeEventListener(event, this.debouncedReset);
79
- });
80
- document.removeEventListener("visibilitychange", this.handleVisibilityChange);
81
- if (this.timerId !== null) {
82
- window.clearInterval(this.timerId);
83
- this.timerId = null;
84
- }
85
- }
86
- /** 超时时执行 */
87
- timeOutExec() {
88
- const appEl = document.getElementById("app");
89
- appEl?.remove();
90
- loadSignalR().then((signalR2) => {
91
- signalR2.stop();
92
- });
93
- Local.remove(PUB.accessTokenKey);
94
- Local.remove(PUB.refreshAccessTokenKey);
95
- Session.clear();
96
- const { t } = useI18n();
97
- ElMessageBox.alert(t("message.list.idleTimeoutMessage"), t("message.list.sysMessage"), {
98
- type: "warning",
99
- draggable: true,
100
- callback: () => {
101
- window.location.reload();
102
- }
103
- });
104
- }
105
- }
106
- function initIdleTimeout(config) {
107
- if (!window.__IDLE_TIMEOUT__) {
108
- window.__IDLE_TIMEOUT__ = new IdleTimeoutManager(config);
109
- }
110
- return window.__IDLE_TIMEOUT__;
111
- }
112
- function destroyIdleTimeout() {
113
- if (window.__IDLE_TIMEOUT__) {
114
- window.__IDLE_TIMEOUT__.destroy();
115
- window.__IDLE_TIMEOUT__ = void 0;
116
- }
117
- }
118
- function updateIdleTimeout(timeout) {
119
- if (window.__IDLE_TIMEOUT__) {
120
- window.__IDLE_TIMEOUT__.updateIdleTimeout(timeout);
121
- }
122
- }
123
-
124
- export { destroyIdleTimeout, initIdleTimeout, updateIdleTimeout };