user-behavior-monitor 7.0.0 → 9.0.0
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.
|
@@ -87,6 +87,17 @@ module.exports =
|
|
|
87
87
|
/************************************************************************/
|
|
88
88
|
/******/ ({
|
|
89
89
|
|
|
90
|
+
/***/ "226c":
|
|
91
|
+
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
92
|
+
|
|
93
|
+
"use strict";
|
|
94
|
+
/* harmony import */ var _node_modules_vue_style_loader_index_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_UserBehaviorMonitor_vue_vue_type_style_index_0_id_33a717b7_prod_lang_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("cd86");
|
|
95
|
+
/* harmony import */ var _node_modules_vue_style_loader_index_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_UserBehaviorMonitor_vue_vue_type_style_index_0_id_33a717b7_prod_lang_css__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_vue_style_loader_index_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_UserBehaviorMonitor_vue_vue_type_style_index_0_id_33a717b7_prod_lang_css__WEBPACK_IMPORTED_MODULE_0__);
|
|
96
|
+
/* unused harmony reexport * */
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
/***/ }),
|
|
100
|
+
|
|
90
101
|
/***/ "2350":
|
|
91
102
|
/***/ (function(module, exports) {
|
|
92
103
|
|
|
@@ -168,22 +179,6 @@ function toComment(sourceMap) {
|
|
|
168
179
|
}
|
|
169
180
|
|
|
170
181
|
|
|
171
|
-
/***/ }),
|
|
172
|
-
|
|
173
|
-
/***/ "3a69":
|
|
174
|
-
/***/ (function(module, exports, __webpack_require__) {
|
|
175
|
-
|
|
176
|
-
// style-loader: Adds some css to the DOM by adding a <style> tag
|
|
177
|
-
|
|
178
|
-
// load the styles
|
|
179
|
-
var content = __webpack_require__("57b8");
|
|
180
|
-
if(content.__esModule) content = content.default;
|
|
181
|
-
if(typeof content === 'string') content = [[module.i, content, '']];
|
|
182
|
-
if(content.locals) module.exports = content.locals;
|
|
183
|
-
// add the styles to the DOM
|
|
184
|
-
var add = __webpack_require__("499e").default
|
|
185
|
-
var update = add("3621c939", content, true, {"sourceMap":false,"shadowMode":false});
|
|
186
|
-
|
|
187
182
|
/***/ }),
|
|
188
183
|
|
|
189
184
|
/***/ "499e":
|
|
@@ -452,7 +447,7 @@ function applyToTag (styleElement, obj) {
|
|
|
452
447
|
|
|
453
448
|
/***/ }),
|
|
454
449
|
|
|
455
|
-
/***/ "
|
|
450
|
+
/***/ "9e1a":
|
|
456
451
|
/***/ (function(module, exports, __webpack_require__) {
|
|
457
452
|
|
|
458
453
|
exports = module.exports = __webpack_require__("2350")(false);
|
|
@@ -465,6 +460,22 @@ exports.push([module.i, ".behavior-warning-dialog.el-dialog.el-dialog--center{te
|
|
|
465
460
|
// exports
|
|
466
461
|
|
|
467
462
|
|
|
463
|
+
/***/ }),
|
|
464
|
+
|
|
465
|
+
/***/ "cd86":
|
|
466
|
+
/***/ (function(module, exports, __webpack_require__) {
|
|
467
|
+
|
|
468
|
+
// style-loader: Adds some css to the DOM by adding a <style> tag
|
|
469
|
+
|
|
470
|
+
// load the styles
|
|
471
|
+
var content = __webpack_require__("9e1a");
|
|
472
|
+
if(content.__esModule) content = content.default;
|
|
473
|
+
if(typeof content === 'string') content = [[module.i, content, '']];
|
|
474
|
+
if(content.locals) module.exports = content.locals;
|
|
475
|
+
// add the styles to the DOM
|
|
476
|
+
var add = __webpack_require__("499e").default
|
|
477
|
+
var update = add("71e6a9d8", content, true, {"sourceMap":false,"shadowMode":false});
|
|
478
|
+
|
|
468
479
|
/***/ }),
|
|
469
480
|
|
|
470
481
|
/***/ "fb15":
|
|
@@ -492,12 +503,12 @@ if (typeof window !== 'undefined') {
|
|
|
492
503
|
// Indicate to webpack that this file can be concatenated
|
|
493
504
|
/* harmony default export */ var setPublicPath = (null);
|
|
494
505
|
|
|
495
|
-
// CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"14550f6a-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/UserBehaviorMonitor.vue?vue&type=template&id=
|
|
496
|
-
var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:"behaviorMonitor",staticClass:"user-behavior-monitor"},[_c('el-dialog',{attrs:{"title":"提示","visible":_vm.showWarning,"show-close":false,"modal":true,"width":"30%","center":"","custom-class":"behavior-warning-dialog"},on:{"update:visible":function($event){_vm.showWarning=$event}}},[_c('span',[_vm._v(_vm._s(_vm.warningMessage))])])],1)}
|
|
506
|
+
// CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"14550f6a-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/UserBehaviorMonitor.vue?vue&type=template&id=33a717b7
|
|
507
|
+
var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:"behaviorMonitor",staticClass:"user-behavior-monitor"},[_c('el-dialog',{attrs:{"title":"提示","visible":_vm.showWarning,"show-close":false,"modal":true,"width":"30%","center":"","custom-class":"behavior-warning-dialog"},on:{"update:visible":function($event){_vm.showWarning=$event}}},[_c('span',[_vm._v(_vm._s(_vm.warningMessage))])]),_c('el-dialog',{attrs:{"title":"提示","visible":_vm.showtips,"show-close":false,"modal":true,"width":"30%","center":"","custom-class":"behavior-warning-dialog"},on:{"update:visible":function($event){_vm.showtips=$event}}},[_c('span',[_vm._v("该账号已在其他设备登录!请刷新页面后重新登录")])])],1)}
|
|
497
508
|
var staticRenderFns = []
|
|
498
509
|
|
|
499
510
|
|
|
500
|
-
// CONCATENATED MODULE: ./src/components/UserBehaviorMonitor.vue?vue&type=template&id=
|
|
511
|
+
// CONCATENATED MODULE: ./src/components/UserBehaviorMonitor.vue?vue&type=template&id=33a717b7
|
|
501
512
|
|
|
502
513
|
// CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/UserBehaviorMonitor.vue?vue&type=script&lang=js
|
|
503
514
|
//
|
|
@@ -517,6 +528,22 @@ var staticRenderFns = []
|
|
|
517
528
|
//
|
|
518
529
|
//
|
|
519
530
|
//
|
|
531
|
+
//
|
|
532
|
+
//
|
|
533
|
+
//
|
|
534
|
+
//
|
|
535
|
+
//
|
|
536
|
+
//
|
|
537
|
+
//
|
|
538
|
+
//
|
|
539
|
+
//
|
|
540
|
+
//
|
|
541
|
+
//
|
|
542
|
+
//
|
|
543
|
+
//
|
|
544
|
+
//
|
|
545
|
+
//
|
|
546
|
+
//
|
|
520
547
|
|
|
521
548
|
/* harmony default export */ var UserBehaviorMonitorvue_type_script_lang_js = ({
|
|
522
549
|
name: 'UserBehaviorMonitor',
|
|
@@ -539,6 +566,7 @@ var staticRenderFns = []
|
|
|
539
566
|
},
|
|
540
567
|
data() {
|
|
541
568
|
return {
|
|
569
|
+
showtips:false,
|
|
542
570
|
mouseMoveThrottled: false,
|
|
543
571
|
socket: null,
|
|
544
572
|
countdownTimer: null,
|
|
@@ -706,7 +734,7 @@ var staticRenderFns = []
|
|
|
706
734
|
|
|
707
735
|
// 设置连接成功回调
|
|
708
736
|
this.socket.onopen = () => {
|
|
709
|
-
console.log('WebSocket连接已建立');
|
|
737
|
+
// console.log('WebSocket连接已建立');
|
|
710
738
|
this.sendUserBehavior();
|
|
711
739
|
this.$emit('websocket-open');
|
|
712
740
|
// 连接成功时重置重连尝试次数
|
|
@@ -717,11 +745,11 @@ var staticRenderFns = []
|
|
|
717
745
|
this.socket.onmessage = (event) => {
|
|
718
746
|
try {
|
|
719
747
|
const data = JSON.parse(event.data);
|
|
720
|
-
console.log('收到用户活动状态消息:', data);
|
|
748
|
+
// console.log('收到用户活动状态消息:', data);
|
|
721
749
|
this.handleActivityStatus(data);
|
|
722
750
|
this.$emit('websocket-message', data);
|
|
723
751
|
} catch (e) {
|
|
724
|
-
console.error('解析WebSocket消息失败:', e);
|
|
752
|
+
// console.error('解析WebSocket消息失败:', e);
|
|
725
753
|
}
|
|
726
754
|
};
|
|
727
755
|
|
|
@@ -826,6 +854,10 @@ var staticRenderFns = []
|
|
|
826
854
|
|
|
827
855
|
// 处理活动状态信息
|
|
828
856
|
handleActivityStatus(data) {
|
|
857
|
+
if(data.type === 'OTHER_DEVICE_LOGIN_FORCE_LOGOUT'||data.type === 'FORCE_LOGOUT'){
|
|
858
|
+
this.showtips=true
|
|
859
|
+
return
|
|
860
|
+
}
|
|
829
861
|
if (data.type === 'ACTIVITY_STATUS' && data.data) {
|
|
830
862
|
const activityData = data.data;
|
|
831
863
|
|
|
@@ -878,7 +910,7 @@ var staticRenderFns = []
|
|
|
878
910
|
"type": "HEARTBEAT",
|
|
879
911
|
"message": "心跳",
|
|
880
912
|
};
|
|
881
|
-
console.log('用户行为监测:', JSON.stringify(message));
|
|
913
|
+
// console.log('用户行为监测:', JSON.stringify(message));
|
|
882
914
|
this.socket.send(JSON.stringify(message));
|
|
883
915
|
}
|
|
884
916
|
},
|
|
@@ -1172,8 +1204,8 @@ var staticRenderFns = []
|
|
|
1172
1204
|
|
|
1173
1205
|
// CONCATENATED MODULE: ./src/components/UserBehaviorMonitor.vue?vue&type=script&lang=js
|
|
1174
1206
|
/* harmony default export */ var components_UserBehaviorMonitorvue_type_script_lang_js = (UserBehaviorMonitorvue_type_script_lang_js);
|
|
1175
|
-
// EXTERNAL MODULE: ./src/components/UserBehaviorMonitor.vue?vue&type=style&index=0&id=
|
|
1176
|
-
var
|
|
1207
|
+
// EXTERNAL MODULE: ./src/components/UserBehaviorMonitor.vue?vue&type=style&index=0&id=33a717b7&prod&lang=css
|
|
1208
|
+
var UserBehaviorMonitorvue_type_style_index_0_id_33a717b7_prod_lang_css = __webpack_require__("226c");
|
|
1177
1209
|
|
|
1178
1210
|
// CONCATENATED MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js
|
|
1179
1211
|
/* globals __VUE_SSR_CONTEXT__ */
|
|
@@ -1319,17 +1351,6 @@ if (typeof window !== 'undefined' && window.Vue) {
|
|
|
1319
1351
|
|
|
1320
1352
|
|
|
1321
1353
|
|
|
1322
|
-
/***/ }),
|
|
1323
|
-
|
|
1324
|
-
/***/ "fc5f":
|
|
1325
|
-
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
1326
|
-
|
|
1327
|
-
"use strict";
|
|
1328
|
-
/* harmony import */ var _node_modules_vue_style_loader_index_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_UserBehaviorMonitor_vue_vue_type_style_index_0_id_59578a74_prod_lang_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("3a69");
|
|
1329
|
-
/* harmony import */ var _node_modules_vue_style_loader_index_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_UserBehaviorMonitor_vue_vue_type_style_index_0_id_59578a74_prod_lang_css__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_vue_style_loader_index_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_UserBehaviorMonitor_vue_vue_type_style_index_0_id_59578a74_prod_lang_css__WEBPACK_IMPORTED_MODULE_0__);
|
|
1330
|
-
/* unused harmony reexport * */
|
|
1331
|
-
|
|
1332
|
-
|
|
1333
1354
|
/***/ })
|
|
1334
1355
|
|
|
1335
1356
|
/******/ });
|
|
@@ -96,6 +96,17 @@ return /******/ (function(modules) { // webpackBootstrap
|
|
|
96
96
|
/************************************************************************/
|
|
97
97
|
/******/ ({
|
|
98
98
|
|
|
99
|
+
/***/ "226c":
|
|
100
|
+
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
101
|
+
|
|
102
|
+
"use strict";
|
|
103
|
+
/* harmony import */ var _node_modules_vue_style_loader_index_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_UserBehaviorMonitor_vue_vue_type_style_index_0_id_33a717b7_prod_lang_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("cd86");
|
|
104
|
+
/* harmony import */ var _node_modules_vue_style_loader_index_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_UserBehaviorMonitor_vue_vue_type_style_index_0_id_33a717b7_prod_lang_css__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_vue_style_loader_index_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_UserBehaviorMonitor_vue_vue_type_style_index_0_id_33a717b7_prod_lang_css__WEBPACK_IMPORTED_MODULE_0__);
|
|
105
|
+
/* unused harmony reexport * */
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
/***/ }),
|
|
109
|
+
|
|
99
110
|
/***/ "2350":
|
|
100
111
|
/***/ (function(module, exports) {
|
|
101
112
|
|
|
@@ -177,22 +188,6 @@ function toComment(sourceMap) {
|
|
|
177
188
|
}
|
|
178
189
|
|
|
179
190
|
|
|
180
|
-
/***/ }),
|
|
181
|
-
|
|
182
|
-
/***/ "3a69":
|
|
183
|
-
/***/ (function(module, exports, __webpack_require__) {
|
|
184
|
-
|
|
185
|
-
// style-loader: Adds some css to the DOM by adding a <style> tag
|
|
186
|
-
|
|
187
|
-
// load the styles
|
|
188
|
-
var content = __webpack_require__("57b8");
|
|
189
|
-
if(content.__esModule) content = content.default;
|
|
190
|
-
if(typeof content === 'string') content = [[module.i, content, '']];
|
|
191
|
-
if(content.locals) module.exports = content.locals;
|
|
192
|
-
// add the styles to the DOM
|
|
193
|
-
var add = __webpack_require__("499e").default
|
|
194
|
-
var update = add("3621c939", content, true, {"sourceMap":false,"shadowMode":false});
|
|
195
|
-
|
|
196
191
|
/***/ }),
|
|
197
192
|
|
|
198
193
|
/***/ "499e":
|
|
@@ -461,7 +456,7 @@ function applyToTag (styleElement, obj) {
|
|
|
461
456
|
|
|
462
457
|
/***/ }),
|
|
463
458
|
|
|
464
|
-
/***/ "
|
|
459
|
+
/***/ "9e1a":
|
|
465
460
|
/***/ (function(module, exports, __webpack_require__) {
|
|
466
461
|
|
|
467
462
|
exports = module.exports = __webpack_require__("2350")(false);
|
|
@@ -474,6 +469,22 @@ exports.push([module.i, ".behavior-warning-dialog.el-dialog.el-dialog--center{te
|
|
|
474
469
|
// exports
|
|
475
470
|
|
|
476
471
|
|
|
472
|
+
/***/ }),
|
|
473
|
+
|
|
474
|
+
/***/ "cd86":
|
|
475
|
+
/***/ (function(module, exports, __webpack_require__) {
|
|
476
|
+
|
|
477
|
+
// style-loader: Adds some css to the DOM by adding a <style> tag
|
|
478
|
+
|
|
479
|
+
// load the styles
|
|
480
|
+
var content = __webpack_require__("9e1a");
|
|
481
|
+
if(content.__esModule) content = content.default;
|
|
482
|
+
if(typeof content === 'string') content = [[module.i, content, '']];
|
|
483
|
+
if(content.locals) module.exports = content.locals;
|
|
484
|
+
// add the styles to the DOM
|
|
485
|
+
var add = __webpack_require__("499e").default
|
|
486
|
+
var update = add("71e6a9d8", content, true, {"sourceMap":false,"shadowMode":false});
|
|
487
|
+
|
|
477
488
|
/***/ }),
|
|
478
489
|
|
|
479
490
|
/***/ "fb15":
|
|
@@ -501,12 +512,12 @@ if (typeof window !== 'undefined') {
|
|
|
501
512
|
// Indicate to webpack that this file can be concatenated
|
|
502
513
|
/* harmony default export */ var setPublicPath = (null);
|
|
503
514
|
|
|
504
|
-
// CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"14550f6a-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/UserBehaviorMonitor.vue?vue&type=template&id=
|
|
505
|
-
var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:"behaviorMonitor",staticClass:"user-behavior-monitor"},[_c('el-dialog',{attrs:{"title":"提示","visible":_vm.showWarning,"show-close":false,"modal":true,"width":"30%","center":"","custom-class":"behavior-warning-dialog"},on:{"update:visible":function($event){_vm.showWarning=$event}}},[_c('span',[_vm._v(_vm._s(_vm.warningMessage))])])],1)}
|
|
515
|
+
// CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"14550f6a-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/UserBehaviorMonitor.vue?vue&type=template&id=33a717b7
|
|
516
|
+
var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:"behaviorMonitor",staticClass:"user-behavior-monitor"},[_c('el-dialog',{attrs:{"title":"提示","visible":_vm.showWarning,"show-close":false,"modal":true,"width":"30%","center":"","custom-class":"behavior-warning-dialog"},on:{"update:visible":function($event){_vm.showWarning=$event}}},[_c('span',[_vm._v(_vm._s(_vm.warningMessage))])]),_c('el-dialog',{attrs:{"title":"提示","visible":_vm.showtips,"show-close":false,"modal":true,"width":"30%","center":"","custom-class":"behavior-warning-dialog"},on:{"update:visible":function($event){_vm.showtips=$event}}},[_c('span',[_vm._v("该账号已在其他设备登录!请刷新页面后重新登录")])])],1)}
|
|
506
517
|
var staticRenderFns = []
|
|
507
518
|
|
|
508
519
|
|
|
509
|
-
// CONCATENATED MODULE: ./src/components/UserBehaviorMonitor.vue?vue&type=template&id=
|
|
520
|
+
// CONCATENATED MODULE: ./src/components/UserBehaviorMonitor.vue?vue&type=template&id=33a717b7
|
|
510
521
|
|
|
511
522
|
// CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/UserBehaviorMonitor.vue?vue&type=script&lang=js
|
|
512
523
|
//
|
|
@@ -526,6 +537,22 @@ var staticRenderFns = []
|
|
|
526
537
|
//
|
|
527
538
|
//
|
|
528
539
|
//
|
|
540
|
+
//
|
|
541
|
+
//
|
|
542
|
+
//
|
|
543
|
+
//
|
|
544
|
+
//
|
|
545
|
+
//
|
|
546
|
+
//
|
|
547
|
+
//
|
|
548
|
+
//
|
|
549
|
+
//
|
|
550
|
+
//
|
|
551
|
+
//
|
|
552
|
+
//
|
|
553
|
+
//
|
|
554
|
+
//
|
|
555
|
+
//
|
|
529
556
|
|
|
530
557
|
/* harmony default export */ var UserBehaviorMonitorvue_type_script_lang_js = ({
|
|
531
558
|
name: 'UserBehaviorMonitor',
|
|
@@ -548,6 +575,7 @@ var staticRenderFns = []
|
|
|
548
575
|
},
|
|
549
576
|
data() {
|
|
550
577
|
return {
|
|
578
|
+
showtips:false,
|
|
551
579
|
mouseMoveThrottled: false,
|
|
552
580
|
socket: null,
|
|
553
581
|
countdownTimer: null,
|
|
@@ -715,7 +743,7 @@ var staticRenderFns = []
|
|
|
715
743
|
|
|
716
744
|
// 设置连接成功回调
|
|
717
745
|
this.socket.onopen = () => {
|
|
718
|
-
console.log('WebSocket连接已建立');
|
|
746
|
+
// console.log('WebSocket连接已建立');
|
|
719
747
|
this.sendUserBehavior();
|
|
720
748
|
this.$emit('websocket-open');
|
|
721
749
|
// 连接成功时重置重连尝试次数
|
|
@@ -726,11 +754,11 @@ var staticRenderFns = []
|
|
|
726
754
|
this.socket.onmessage = (event) => {
|
|
727
755
|
try {
|
|
728
756
|
const data = JSON.parse(event.data);
|
|
729
|
-
console.log('收到用户活动状态消息:', data);
|
|
757
|
+
// console.log('收到用户活动状态消息:', data);
|
|
730
758
|
this.handleActivityStatus(data);
|
|
731
759
|
this.$emit('websocket-message', data);
|
|
732
760
|
} catch (e) {
|
|
733
|
-
console.error('解析WebSocket消息失败:', e);
|
|
761
|
+
// console.error('解析WebSocket消息失败:', e);
|
|
734
762
|
}
|
|
735
763
|
};
|
|
736
764
|
|
|
@@ -835,6 +863,10 @@ var staticRenderFns = []
|
|
|
835
863
|
|
|
836
864
|
// 处理活动状态信息
|
|
837
865
|
handleActivityStatus(data) {
|
|
866
|
+
if(data.type === 'OTHER_DEVICE_LOGIN_FORCE_LOGOUT'||data.type === 'FORCE_LOGOUT'){
|
|
867
|
+
this.showtips=true
|
|
868
|
+
return
|
|
869
|
+
}
|
|
838
870
|
if (data.type === 'ACTIVITY_STATUS' && data.data) {
|
|
839
871
|
const activityData = data.data;
|
|
840
872
|
|
|
@@ -887,7 +919,7 @@ var staticRenderFns = []
|
|
|
887
919
|
"type": "HEARTBEAT",
|
|
888
920
|
"message": "心跳",
|
|
889
921
|
};
|
|
890
|
-
console.log('用户行为监测:', JSON.stringify(message));
|
|
922
|
+
// console.log('用户行为监测:', JSON.stringify(message));
|
|
891
923
|
this.socket.send(JSON.stringify(message));
|
|
892
924
|
}
|
|
893
925
|
},
|
|
@@ -1181,8 +1213,8 @@ var staticRenderFns = []
|
|
|
1181
1213
|
|
|
1182
1214
|
// CONCATENATED MODULE: ./src/components/UserBehaviorMonitor.vue?vue&type=script&lang=js
|
|
1183
1215
|
/* harmony default export */ var components_UserBehaviorMonitorvue_type_script_lang_js = (UserBehaviorMonitorvue_type_script_lang_js);
|
|
1184
|
-
// EXTERNAL MODULE: ./src/components/UserBehaviorMonitor.vue?vue&type=style&index=0&id=
|
|
1185
|
-
var
|
|
1216
|
+
// EXTERNAL MODULE: ./src/components/UserBehaviorMonitor.vue?vue&type=style&index=0&id=33a717b7&prod&lang=css
|
|
1217
|
+
var UserBehaviorMonitorvue_type_style_index_0_id_33a717b7_prod_lang_css = __webpack_require__("226c");
|
|
1186
1218
|
|
|
1187
1219
|
// CONCATENATED MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js
|
|
1188
1220
|
/* globals __VUE_SSR_CONTEXT__ */
|
|
@@ -1328,17 +1360,6 @@ if (typeof window !== 'undefined' && window.Vue) {
|
|
|
1328
1360
|
|
|
1329
1361
|
|
|
1330
1362
|
|
|
1331
|
-
/***/ }),
|
|
1332
|
-
|
|
1333
|
-
/***/ "fc5f":
|
|
1334
|
-
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
|
1335
|
-
|
|
1336
|
-
"use strict";
|
|
1337
|
-
/* harmony import */ var _node_modules_vue_style_loader_index_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_UserBehaviorMonitor_vue_vue_type_style_index_0_id_59578a74_prod_lang_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("3a69");
|
|
1338
|
-
/* harmony import */ var _node_modules_vue_style_loader_index_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_UserBehaviorMonitor_vue_vue_type_style_index_0_id_59578a74_prod_lang_css__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_vue_style_loader_index_js_ref_6_oneOf_1_0_node_modules_css_loader_index_js_ref_6_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_6_oneOf_1_2_node_modules_cache_loader_dist_cjs_js_ref_0_0_node_modules_vue_loader_lib_index_js_vue_loader_options_UserBehaviorMonitor_vue_vue_type_style_index_0_id_59578a74_prod_lang_css__WEBPACK_IMPORTED_MODULE_0__);
|
|
1339
|
-
/* unused harmony reexport * */
|
|
1340
|
-
|
|
1341
|
-
|
|
1342
1363
|
/***/ })
|
|
1343
1364
|
|
|
1344
1365
|
/******/ });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(e,t){"object"===typeof exports&&"object"===typeof module?module.exports=t():"function"===typeof define&&define.amd?define([],t):"object"===typeof exports?exports["user-behavior-monitor"]=t():e["user-behavior-monitor"]=t()})("undefined"!==typeof self?self:this,(function(){return function(e){var t={};function n(i){if(t[i])return t[i].exports;var o=t[i]={i:i,l:!1,exports:{}};return e[i].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(i,o,function(t){return e[t]}.bind(null,o));return i},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s="fb15")}({2350:function(e,t){function n(e,t){var n=e[1]||"",o=e[3];if(!o)return n;if(t&&"function"===typeof btoa){var s=i(o),r=o.sources.map((function(e){return"/*# sourceURL="+o.sourceRoot+e+" */"}));return[n].concat(r).concat([s]).join("\n")}return[n].join("\n")}function i(e){var t=btoa(unescape(encodeURIComponent(JSON.stringify(e)))),n="sourceMappingURL=data:application/json;charset=utf-8;base64,"+t;return"/*# "+n+" */"}e.exports=function(e){var t=[];return t.toString=function(){return this.map((function(t){var i=n(t,e);return t[2]?"@media "+t[2]+"{"+i+"}":i})).join("")},t.i=function(e,n){"string"===typeof e&&(e=[[null,e,""]]);for(var i={},o=0;o<this.length;o++){var s=this[o][0];"number"===typeof s&&(i[s]=!0)}for(o=0;o<e.length;o++){var r=e[o];"number"===typeof r[0]&&i[r[0]]||(n&&!r[2]?r[2]=n:n&&(r[2]="("+r[2]+") and ("+n+")"),t.push(r))}},t}},"3a69":function(e,t,n){var i=n("57b8");i.__esModule&&(i=i.default),"string"===typeof i&&(i=[[e.i,i,""]]),i.locals&&(e.exports=i.locals);var o=n("499e").default;o("3621c939",i,!0,{sourceMap:!1,shadowMode:!1})},"499e":function(e,t,n){"use strict";function i(e,t){for(var n=[],i={},o=0;o<t.length;o++){var s=t[o],r=s[0],a=s[1],c=s[2],u=s[3],l={id:e+":"+o,css:a,media:c,sourceMap:u};i[r]?i[r].parts.push(l):n.push(i[r]={id:r,parts:[l]})}return n}n.r(t),n.d(t,"default",(function(){return v}));var o="undefined"!==typeof document;if("undefined"!==typeof DEBUG&&DEBUG&&!o)throw new Error("vue-style-loader cannot be used in a non-browser environment. Use { target: 'node' } in your Webpack config to indicate a server-rendering environment.");var s={},r=o&&(document.head||document.getElementsByTagName("head")[0]),a=null,c=0,u=!1,l=function(){},h=null,d="data-vue-ssr-id",m="undefined"!==typeof navigator&&/msie [6-9]\b/.test(navigator.userAgent.toLowerCase());function v(e,t,n,o){u=n,h=o||{};var r=i(e,t);return f(r),function(t){for(var n=[],o=0;o<r.length;o++){var a=r[o],c=s[a.id];c.refs--,n.push(c)}t?(r=i(e,t),f(r)):r=[];for(o=0;o<n.length;o++){c=n[o];if(0===c.refs){for(var u=0;u<c.parts.length;u++)c.parts[u]();delete s[c.id]}}}}function f(e){for(var t=0;t<e.length;t++){var n=e[t],i=s[n.id];if(i){i.refs++;for(var o=0;o<i.parts.length;o++)i.parts[o](n.parts[o]);for(;o<n.parts.length;o++)i.parts.push(g(n.parts[o]));i.parts.length>n.parts.length&&(i.parts.length=n.parts.length)}else{var r=[];for(o=0;o<n.parts.length;o++)r.push(g(n.parts[o]));s[n.id]={id:n.id,refs:1,parts:r}}}}function p(){var e=document.createElement("style");return e.type="text/css",r.appendChild(e),e}function g(e){var t,n,i=document.querySelector("style["+d+'~="'+e.id+'"]');if(i){if(u)return l;i.parentNode.removeChild(i)}if(m){var o=c++;i=a||(a=p()),t=w.bind(null,i,o,!1),n=w.bind(null,i,o,!0)}else i=p(),t=T.bind(null,i),n=function(){i.parentNode.removeChild(i)};return t(e),function(i){if(i){if(i.css===e.css&&i.media===e.media&&i.sourceMap===e.sourceMap)return;t(e=i)}else n()}}var y=function(){var e=[];return function(t,n){return e[t]=n,e.filter(Boolean).join("\n")}}();function w(e,t,n,i){var o=n?"":i.css;if(e.styleSheet)e.styleSheet.cssText=y(t,o);else{var s=document.createTextNode(o),r=e.childNodes;r[t]&&e.removeChild(r[t]),r.length?e.insertBefore(s,r[t]):e.appendChild(s)}}function T(e,t){var n=t.css,i=t.media,o=t.sourceMap;if(i&&e.setAttribute("media",i),h.ssrId&&e.setAttribute(d,t.id),o&&(n+="\n/*# sourceURL="+o.sources[0]+" */",n+="\n/*# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(o))))+" */"),e.styleSheet)e.styleSheet.cssText=n;else{while(e.firstChild)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(n))}}},"57b8":function(e,t,n){t=e.exports=n("2350")(!1),t.push([e.i,".behavior-warning-dialog.el-dialog.el-dialog--center{text-align:left}",""])},fb15:function(e,t,n){"use strict";var i;(n.r(t),n.d(t,"UserBehaviorMonitor",(function(){return l})),"undefined"!==typeof window)&&((i=window.document.currentScript)&&(i=i.src.match(/(.+\/)[^/]+\.js(\?.*)?$/))&&(n.p=i[1]));var o=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{ref:"behaviorMonitor",staticClass:"user-behavior-monitor"},[n("el-dialog",{attrs:{title:"提示",visible:e.showWarning,"show-close":!1,modal:!0,width:"30%",center:"","custom-class":"behavior-warning-dialog"},on:{"update:visible":function(t){e.showWarning=t}}},[n("span",[e._v(e._s(e.warningMessage))])])],1)},s=[],r={name:"UserBehaviorMonitor",props:{timeoutMinutes:{type:Number,default:10},warningMinutes:{type:Number,default:1}},data(){return{mouseMoveThrottled:!1,socket:null,countdownTimer:null,warningTimer:null,showWarning:!1,warningMessage:`您已${this.timeoutMinutes}分钟未操作,将在1分钟后自动退出`,lastActivityTime:null,isMonitoring:!1,currentTimeoutMinutes:10,currentWarningMinutes:1,reconnectAttempts:0,maxReconnectAttempts:3,reconnectDelay:3e3,isLocalDevelopment:this.checkIfLocalDevelopment(),tokenCheckTimer:null}},mounted(){this.isLoginRoute()||this.initMonitor()},beforeDestroy(){this.destroyMonitor()},watch:{$route(e,t){const n=t.path.includes("/login")||t.href&&t.href.includes("/login"),i=this.isLoginRoute();!n||i||this.isMonitoring?!n&&i&&this.isMonitoring&&this.destroyMonitor():this.initMonitor()}},methods:{isLoginRoute(){return!!(this.$route&&this.$route.path&&this.$route.path.includes("/login"))||"undefined"!==typeof window&&(window.location.pathname.includes("/login")||window.location.href.includes("/login"))},checkIfLocalDevelopment(){if("undefined"!==typeof window){const e=window.location.hostname;return"localhost"===e||"127.0.0.1"===e||"0.0.0.0"===e||/^192\.168\./.test(e)||/^10\./.test(e)||/^172\.(1[6-9]|2[0-9]|3[01])\./.test(e)}return!1},updateTimeoutSettings(e,t){void 0!==e&&(this.currentTimeoutMinutes=e,localStorage.setItem("userBehavior_timeoutMinutes",e.toString())),void 0!==t&&(this.currentWarningMinutes=t,localStorage.setItem("userBehavior_warningMinutes",t.toString())),this.warningMessage=`您已${this.currentTimeoutMinutes}分钟未操作,将在1分钟后自动退出`,this.resetTimer()},initMonitor(){this.isLoginRoute()?this.destroyMonitor():this.isMonitoring||(this.isMonitoring=!0,this.lastActivityTime=Date.now(),this.reconnectAttempts=0,this.initWebSocket(),this.bindEventListeners(),this.startTokenCheckPolling())},destroyMonitor(){this.isMonitoring=!1,this.countdownTimer&&clearInterval(this.countdownTimer),this.warningTimer&&clearTimeout(this.warningTimer),this.tokenCheckTimer&&clearInterval(this.tokenCheckTimer),this.socket&&(this.socket.close(),this.socket=null),this.unbindEventListeners()},initWebSocket(){try{const t=`wss://${location.host}/xy-api/auth-server/ws/user-activity`;let n="";try{const e=localStorage.getItem("api_header");e&&(n=JSON.parse(e).Authorization||"")}catch(e){n=localStorage.getItem("token")||""}this.socket=new WebSocket(`${t}?token=${encodeURIComponent(n)}`),this.socket.onopen=()=>{console.log("WebSocket连接已建立"),this.sendUserBehavior(),this.$emit("websocket-open"),this.reconnectAttempts=0},this.socket.onmessage=t=>{try{const e=JSON.parse(t.data);console.log("收到用户活动状态消息:",e),this.handleActivityStatus(e),this.$emit("websocket-message",e)}catch(e){console.error("解析WebSocket消息失败:",e)}},this.socket.onclose=e=>{this.$emit("websocket-close"),this.shouldAttemptReconnect()?this.attemptReconnect():!this.isLoginRoute()&&this.isMonitoring&&(this.isLocalDevelopment||this.handleReconnectFailure())},this.socket.onerror=e=>{this.$emit("websocket-error",e),this.shouldAttemptReconnect()?this.attemptReconnect():!this.isLoginRoute()&&this.isMonitoring&&(this.isLocalDevelopment||this.handleReconnectFailure())}}catch(t){this.$emit("websocket-error",t),this.shouldAttemptReconnect()?this.attemptReconnect():!this.isLoginRoute()&&this.isMonitoring&&(this.isLocalDevelopment||this.handleReconnectFailure())}},shouldAttemptReconnect(){return this.isMonitoring&&!this.isLoginRoute()&&this.reconnectAttempts<this.maxReconnectAttempts},attemptReconnect(){this.isLoginRoute()||(this.reconnectAttempts++,console.log(`尝试第${this.reconnectAttempts}次重连...`),this.isLocalDevelopment&&this.reconnectAttempts>=this.maxReconnectAttempts?this.$emit("websocket-reconnect-failed"):!this.isLocalDevelopment&&this.reconnectAttempts>=this.maxReconnectAttempts?this.handleReconnectFailure():setTimeout(()=>{this.initWebSocket()},this.reconnectDelay))},handleReconnectFailure(){localStorage.clear(),sessionStorage.clear(),location.reload(),this.$emit("logout")},handleActivityStatus(e){if("ACTIVITY_STATUS"===e.type&&e.data){const t=e.data;this.currentTimeoutMinutes=t.timeoutMinutes||10,this.currentWarningMinutes=t.reminderMinutes||1,this.warningMessage=`您已${this.currentTimeoutMinutes}分钟未操作,将在${this.currentWarningMinutes}分钟后自动退出`,t.needReminder&&this.showWarningWarning(t.remainingMillis)}},handleInactiveStatus(){localStorage.clear(),sessionStorage.clear(),location.reload(),this.$emit("logout")},sendUserBehavior(e){if(this.socket&&this.socket.readyState===WebSocket.OPEN){const e={type:"HEARTBEAT",message:"心跳"};console.log("用户行为监测:",JSON.stringify(e)),this.socket.send(JSON.stringify(e))}},bindEventListeners(){document.addEventListener("click",this.handleUserActivity,!0),document.addEventListener("dblclick",this.handleUserActivity,!0),document.addEventListener("mousedown",this.handleUserActivity,!0),document.addEventListener("mouseup",this.handleUserActivity,!0),document.addEventListener("mousemove",this.handleMouseMove,!0),document.addEventListener("mouseover",this.handleUserActivity,!0),document.addEventListener("mouseout",this.handleUserActivity,!0),document.addEventListener("keydown",this.handleUserActivity,!0),document.addEventListener("keyup",this.handleUserActivity,!0),document.addEventListener("input",this.handleUserActivity,!0),document.addEventListener("change",this.handleUserActivity,!0),document.addEventListener("focus",this.handleUserActivity,!0),document.addEventListener("blur",this.handleUserActivity,!0),document.addEventListener("scroll",this.debounce(this.handleUserActivity,300),!0),window.addEventListener("resize",this.handleUserActivity,!0),window.addEventListener("beforeunload",this.handleBeforeUnload)},unbindEventListeners(){document.removeEventListener("click",this.handleUserActivity,!0),document.removeEventListener("dblclick",this.handleUserActivity,!0),document.removeEventListener("mousedown",this.handleUserActivity,!0),document.removeEventListener("mouseup",this.handleUserActivity,!0),document.removeEventListener("mousemove",this.handleMouseMove,!0),document.removeEventListener("mouseover",this.handleUserActivity,!0),document.removeEventListener("mouseout",this.handleUserActivity,!0),document.removeEventListener("keydown",this.handleUserActivity,!0),document.removeEventListener("keyup",this.handleUserActivity,!0),document.removeEventListener("input",this.handleUserActivity,!0),document.removeEventListener("change",this.handleUserActivity,!0),document.removeEventListener("focus",this.handleUserActivity,!0),document.removeEventListener("blur",this.handleUserActivity,!0),document.removeEventListener("scroll",this.debounce(this.handleUserActivity,300),!0),window.removeEventListener("resize",this.handleUserActivity,!0),window.removeEventListener("beforeunload",this.handleBeforeUnload)},handleUserActivity(e){if(this.isAutomaticEvent(e))return;this.resetTimer();const t={eventType:e.type,target:e.target.tagName,timestamp:Date.now(),url:window.location.href};"click"===e.type?(t.clientX=e.clientX,t.clientY=e.clientY):"keydown"===e.type&&(t.key=e.key,t.ctrlKey=e.ctrlKey,t.altKey=e.altKey,t.shiftKey=e.shiftKey),this.sendUserBehavior(t)},handleMouseMove(e){this.mouseMoveThrottled||(this.handleUserActivity(e),this.mouseMoveThrottled=!0,setTimeout(()=>{this.mouseMoveThrottled=!1},500))},isAutomaticEvent(e){return"scroll"===e.type&&!this.isUserScrolling},debounce(e,t){let n;return function(...i){const o=()=>{clearTimeout(n),e.apply(this,i)};clearTimeout(n),n=setTimeout(o,t)}},resetTimer(){this.lastActivityTime=Date.now(),this.showWarning=!1,this.reconnectAttempts=0,this.warningTimer&&(clearTimeout(this.warningTimer),this.warningTimer=null),this.$emit("user-active")},startCountdown(){this.countdownTimer&&clearInterval(this.countdownTimer),this.countdownTimer=setInterval(()=>{const e=Date.now(),t=(e-this.lastActivityTime)/5e4;t>=this.currentTimeoutMinutes-this.currentWarningMinutes&&!this.warningTimer&&this.showWarningWarning(),t>=this.currentTimeoutMinutes&&this.handleTimeout()},1e3)},showWarningWarning(e){let t=e||5e4;console.log("Setting showWarning to true"),this.showWarning=!0,this.$emit("timeout-warning"),this.warningTimer&&clearTimeout(this.warningTimer),this.warningTimer=setTimeout(()=>{this.handleTimeout()},t)},handleTimeout(){this.showWarning=!1,this.$emit("timeout"),this.logout()},logout(){if(localStorage.clear(),sessionStorage.clear(),location.reload(),this.socket&&this.socket.readyState===WebSocket.OPEN){const e={type:"logout",timestamp:Date.now()};this.socket.send(JSON.stringify(e))}this.$emit("logout"),this.countdownTimer&&clearInterval(this.countdownTimer),this.warningTimer&&clearTimeout(this.warningTimer)},handleBeforeUnload(e){if(this.socket&&this.socket.readyState===WebSocket.OPEN){const e={type:"page_unload",timestamp:Date.now()};this.socket.send(JSON.stringify(e))}},reset(){this.isLoginRoute()?this.destroyMonitor():this.resetTimer()},reconnect(){this.isLoginRoute()?this.destroyMonitor():(this.reconnectAttempts=0,this.socket&&this.socket.close(),this.initWebSocket())},startTokenCheckPolling(){this.tokenCheckTimer&&clearInterval(this.tokenCheckTimer),this.tokenCheckTimer=setInterval(()=>{this.checkToken()},1e3)},checkToken(){if(this.isLoginRoute())return;const e=localStorage.getItem("api_header");e||(console.log("Token不存在,即将刷新页面"),this.handleTokenMissing())},handleTokenMissing(){localStorage.clear(),sessionStorage.clear(),location.reload(),this.$emit("logout")}}},a=r;n("fc5f");function c(e,t,n,i,o,s,r,a){var c,u="function"===typeof e?e.options:e;if(t&&(u.render=t,u.staticRenderFns=n,u._compiled=!0),i&&(u.functional=!0),s&&(u._scopeId="data-v-"+s),r?(c=function(e){e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,e||"undefined"===typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),o&&o.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(r)},u._ssrRegister=c):o&&(c=a?function(){o.call(this,(u.functional?this.parent:this).$root.$options.shadowRoot)}:o),c)if(u.functional){u._injectStyles=c;var l=u.render;u.render=function(e,t){return c.call(t),l(e,t)}}else{var h=u.beforeCreate;u.beforeCreate=h?[].concat(h,c):[c]}return{exports:e,options:u}}var u=c(a,o,s,!1,null,null,null),l=u.exports;l.install=function(e){e.component(l.name,l)};var h=l;"undefined"!==typeof window&&window.Vue&&l.install(window.Vue);t["default"]=h},fc5f:function(e,t,n){"use strict";n("3a69")}})}));
|
|
1
|
+
(function(e,t){"object"===typeof exports&&"object"===typeof module?module.exports=t():"function"===typeof define&&define.amd?define([],t):"object"===typeof exports?exports["user-behavior-monitor"]=t():e["user-behavior-monitor"]=t()})("undefined"!==typeof self?self:this,(function(){return function(e){var t={};function n(i){if(t[i])return t[i].exports;var o=t[i]={i:i,l:!1,exports:{}};return e[i].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,i){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},n.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(i,o,function(t){return e[t]}.bind(null,o));return i},n.n=function(e){var t=e&&e.__esModule?function(){return e["default"]}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s="fb15")}({"226c":function(e,t,n){"use strict";n("cd86")},2350:function(e,t){function n(e,t){var n=e[1]||"",o=e[3];if(!o)return n;if(t&&"function"===typeof btoa){var s=i(o),r=o.sources.map((function(e){return"/*# sourceURL="+o.sourceRoot+e+" */"}));return[n].concat(r).concat([s]).join("\n")}return[n].join("\n")}function i(e){var t=btoa(unescape(encodeURIComponent(JSON.stringify(e)))),n="sourceMappingURL=data:application/json;charset=utf-8;base64,"+t;return"/*# "+n+" */"}e.exports=function(e){var t=[];return t.toString=function(){return this.map((function(t){var i=n(t,e);return t[2]?"@media "+t[2]+"{"+i+"}":i})).join("")},t.i=function(e,n){"string"===typeof e&&(e=[[null,e,""]]);for(var i={},o=0;o<this.length;o++){var s=this[o][0];"number"===typeof s&&(i[s]=!0)}for(o=0;o<e.length;o++){var r=e[o];"number"===typeof r[0]&&i[r[0]]||(n&&!r[2]?r[2]=n:n&&(r[2]="("+r[2]+") and ("+n+")"),t.push(r))}},t}},"499e":function(e,t,n){"use strict";function i(e,t){for(var n=[],i={},o=0;o<t.length;o++){var s=t[o],r=s[0],a=s[1],c=s[2],u=s[3],h={id:e+":"+o,css:a,media:c,sourceMap:u};i[r]?i[r].parts.push(h):n.push(i[r]={id:r,parts:[h]})}return n}n.r(t),n.d(t,"default",(function(){return v}));var o="undefined"!==typeof document;if("undefined"!==typeof DEBUG&&DEBUG&&!o)throw new Error("vue-style-loader cannot be used in a non-browser environment. Use { target: 'node' } in your Webpack config to indicate a server-rendering environment.");var s={},r=o&&(document.head||document.getElementsByTagName("head")[0]),a=null,c=0,u=!1,h=function(){},l=null,d="data-vue-ssr-id",m="undefined"!==typeof navigator&&/msie [6-9]\b/.test(navigator.userAgent.toLowerCase());function v(e,t,n,o){u=n,l=o||{};var r=i(e,t);return p(r),function(t){for(var n=[],o=0;o<r.length;o++){var a=r[o],c=s[a.id];c.refs--,n.push(c)}t?(r=i(e,t),p(r)):r=[];for(o=0;o<n.length;o++){c=n[o];if(0===c.refs){for(var u=0;u<c.parts.length;u++)c.parts[u]();delete s[c.id]}}}}function p(e){for(var t=0;t<e.length;t++){var n=e[t],i=s[n.id];if(i){i.refs++;for(var o=0;o<i.parts.length;o++)i.parts[o](n.parts[o]);for(;o<n.parts.length;o++)i.parts.push(g(n.parts[o]));i.parts.length>n.parts.length&&(i.parts.length=n.parts.length)}else{var r=[];for(o=0;o<n.parts.length;o++)r.push(g(n.parts[o]));s[n.id]={id:n.id,refs:1,parts:r}}}}function f(){var e=document.createElement("style");return e.type="text/css",r.appendChild(e),e}function g(e){var t,n,i=document.querySelector("style["+d+'~="'+e.id+'"]');if(i){if(u)return h;i.parentNode.removeChild(i)}if(m){var o=c++;i=a||(a=f()),t=w.bind(null,i,o,!1),n=w.bind(null,i,o,!0)}else i=f(),t=T.bind(null,i),n=function(){i.parentNode.removeChild(i)};return t(e),function(i){if(i){if(i.css===e.css&&i.media===e.media&&i.sourceMap===e.sourceMap)return;t(e=i)}else n()}}var y=function(){var e=[];return function(t,n){return e[t]=n,e.filter(Boolean).join("\n")}}();function w(e,t,n,i){var o=n?"":i.css;if(e.styleSheet)e.styleSheet.cssText=y(t,o);else{var s=document.createTextNode(o),r=e.childNodes;r[t]&&e.removeChild(r[t]),r.length?e.insertBefore(s,r[t]):e.appendChild(s)}}function T(e,t){var n=t.css,i=t.media,o=t.sourceMap;if(i&&e.setAttribute("media",i),l.ssrId&&e.setAttribute(d,t.id),o&&(n+="\n/*# sourceURL="+o.sources[0]+" */",n+="\n/*# sourceMappingURL=data:application/json;base64,"+btoa(unescape(encodeURIComponent(JSON.stringify(o))))+" */"),e.styleSheet)e.styleSheet.cssText=n;else{while(e.firstChild)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(n))}}},"9e1a":function(e,t,n){t=e.exports=n("2350")(!1),t.push([e.i,".behavior-warning-dialog.el-dialog.el-dialog--center{text-align:left}",""])},cd86:function(e,t,n){var i=n("9e1a");i.__esModule&&(i=i.default),"string"===typeof i&&(i=[[e.i,i,""]]),i.locals&&(e.exports=i.locals);var o=n("499e").default;o("71e6a9d8",i,!0,{sourceMap:!1,shadowMode:!1})},fb15:function(e,t,n){"use strict";var i;(n.r(t),n.d(t,"UserBehaviorMonitor",(function(){return h})),"undefined"!==typeof window)&&((i=window.document.currentScript)&&(i=i.src.match(/(.+\/)[^/]+\.js(\?.*)?$/))&&(n.p=i[1]));var o=function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{ref:"behaviorMonitor",staticClass:"user-behavior-monitor"},[n("el-dialog",{attrs:{title:"提示",visible:e.showWarning,"show-close":!1,modal:!0,width:"30%",center:"","custom-class":"behavior-warning-dialog"},on:{"update:visible":function(t){e.showWarning=t}}},[n("span",[e._v(e._s(e.warningMessage))])]),n("el-dialog",{attrs:{title:"提示",visible:e.showtips,"show-close":!1,modal:!0,width:"30%",center:"","custom-class":"behavior-warning-dialog"},on:{"update:visible":function(t){e.showtips=t}}},[n("span",[e._v("该账号已在其他设备登录!请刷新页面后重新登录")])])],1)},s=[],r={name:"UserBehaviorMonitor",props:{timeoutMinutes:{type:Number,default:10},warningMinutes:{type:Number,default:1}},data(){return{showtips:!1,mouseMoveThrottled:!1,socket:null,countdownTimer:null,warningTimer:null,showWarning:!1,warningMessage:`您已${this.timeoutMinutes}分钟未操作,将在1分钟后自动退出`,lastActivityTime:null,isMonitoring:!1,currentTimeoutMinutes:10,currentWarningMinutes:1,reconnectAttempts:0,maxReconnectAttempts:3,reconnectDelay:3e3,isLocalDevelopment:this.checkIfLocalDevelopment(),tokenCheckTimer:null}},mounted(){this.isLoginRoute()||this.initMonitor()},beforeDestroy(){this.destroyMonitor()},watch:{$route(e,t){const n=t.path.includes("/login")||t.href&&t.href.includes("/login"),i=this.isLoginRoute();!n||i||this.isMonitoring?!n&&i&&this.isMonitoring&&this.destroyMonitor():this.initMonitor()}},methods:{isLoginRoute(){return!!(this.$route&&this.$route.path&&this.$route.path.includes("/login"))||"undefined"!==typeof window&&(window.location.pathname.includes("/login")||window.location.href.includes("/login"))},checkIfLocalDevelopment(){if("undefined"!==typeof window){const e=window.location.hostname;return"localhost"===e||"127.0.0.1"===e||"0.0.0.0"===e||/^192\.168\./.test(e)||/^10\./.test(e)||/^172\.(1[6-9]|2[0-9]|3[01])\./.test(e)}return!1},updateTimeoutSettings(e,t){void 0!==e&&(this.currentTimeoutMinutes=e,localStorage.setItem("userBehavior_timeoutMinutes",e.toString())),void 0!==t&&(this.currentWarningMinutes=t,localStorage.setItem("userBehavior_warningMinutes",t.toString())),this.warningMessage=`您已${this.currentTimeoutMinutes}分钟未操作,将在1分钟后自动退出`,this.resetTimer()},initMonitor(){this.isLoginRoute()?this.destroyMonitor():this.isMonitoring||(this.isMonitoring=!0,this.lastActivityTime=Date.now(),this.reconnectAttempts=0,this.initWebSocket(),this.bindEventListeners(),this.startTokenCheckPolling())},destroyMonitor(){this.isMonitoring=!1,this.countdownTimer&&clearInterval(this.countdownTimer),this.warningTimer&&clearTimeout(this.warningTimer),this.tokenCheckTimer&&clearInterval(this.tokenCheckTimer),this.socket&&(this.socket.close(),this.socket=null),this.unbindEventListeners()},initWebSocket(){try{const t=`wss://${location.host}/xy-api/auth-server/ws/user-activity`;let n="";try{const e=localStorage.getItem("api_header");e&&(n=JSON.parse(e).Authorization||"")}catch(e){n=localStorage.getItem("token")||""}this.socket=new WebSocket(`${t}?token=${encodeURIComponent(n)}`),this.socket.onopen=()=>{this.sendUserBehavior(),this.$emit("websocket-open"),this.reconnectAttempts=0},this.socket.onmessage=t=>{try{const e=JSON.parse(t.data);this.handleActivityStatus(e),this.$emit("websocket-message",e)}catch(e){}},this.socket.onclose=e=>{this.$emit("websocket-close"),this.shouldAttemptReconnect()?this.attemptReconnect():!this.isLoginRoute()&&this.isMonitoring&&(this.isLocalDevelopment||this.handleReconnectFailure())},this.socket.onerror=e=>{this.$emit("websocket-error",e),this.shouldAttemptReconnect()?this.attemptReconnect():!this.isLoginRoute()&&this.isMonitoring&&(this.isLocalDevelopment||this.handleReconnectFailure())}}catch(t){this.$emit("websocket-error",t),this.shouldAttemptReconnect()?this.attemptReconnect():!this.isLoginRoute()&&this.isMonitoring&&(this.isLocalDevelopment||this.handleReconnectFailure())}},shouldAttemptReconnect(){return this.isMonitoring&&!this.isLoginRoute()&&this.reconnectAttempts<this.maxReconnectAttempts},attemptReconnect(){this.isLoginRoute()||(this.reconnectAttempts++,console.log(`尝试第${this.reconnectAttempts}次重连...`),this.isLocalDevelopment&&this.reconnectAttempts>=this.maxReconnectAttempts?this.$emit("websocket-reconnect-failed"):!this.isLocalDevelopment&&this.reconnectAttempts>=this.maxReconnectAttempts?this.handleReconnectFailure():setTimeout(()=>{this.initWebSocket()},this.reconnectDelay))},handleReconnectFailure(){localStorage.clear(),sessionStorage.clear(),location.reload(),this.$emit("logout")},handleActivityStatus(e){if("OTHER_DEVICE_LOGIN_FORCE_LOGOUT"!==e.type&&"FORCE_LOGOUT"!==e.type){if("ACTIVITY_STATUS"===e.type&&e.data){const t=e.data;this.currentTimeoutMinutes=t.timeoutMinutes||10,this.currentWarningMinutes=t.reminderMinutes||1,this.warningMessage=`您已${this.currentTimeoutMinutes}分钟未操作,将在${this.currentWarningMinutes}分钟后自动退出`,t.needReminder&&this.showWarningWarning(t.remainingMillis)}}else this.showtips=!0},handleInactiveStatus(){localStorage.clear(),sessionStorage.clear(),location.reload(),this.$emit("logout")},sendUserBehavior(e){if(this.socket&&this.socket.readyState===WebSocket.OPEN){const e={type:"HEARTBEAT",message:"心跳"};this.socket.send(JSON.stringify(e))}},bindEventListeners(){document.addEventListener("click",this.handleUserActivity,!0),document.addEventListener("dblclick",this.handleUserActivity,!0),document.addEventListener("mousedown",this.handleUserActivity,!0),document.addEventListener("mouseup",this.handleUserActivity,!0),document.addEventListener("mousemove",this.handleMouseMove,!0),document.addEventListener("mouseover",this.handleUserActivity,!0),document.addEventListener("mouseout",this.handleUserActivity,!0),document.addEventListener("keydown",this.handleUserActivity,!0),document.addEventListener("keyup",this.handleUserActivity,!0),document.addEventListener("input",this.handleUserActivity,!0),document.addEventListener("change",this.handleUserActivity,!0),document.addEventListener("focus",this.handleUserActivity,!0),document.addEventListener("blur",this.handleUserActivity,!0),document.addEventListener("scroll",this.debounce(this.handleUserActivity,300),!0),window.addEventListener("resize",this.handleUserActivity,!0),window.addEventListener("beforeunload",this.handleBeforeUnload)},unbindEventListeners(){document.removeEventListener("click",this.handleUserActivity,!0),document.removeEventListener("dblclick",this.handleUserActivity,!0),document.removeEventListener("mousedown",this.handleUserActivity,!0),document.removeEventListener("mouseup",this.handleUserActivity,!0),document.removeEventListener("mousemove",this.handleMouseMove,!0),document.removeEventListener("mouseover",this.handleUserActivity,!0),document.removeEventListener("mouseout",this.handleUserActivity,!0),document.removeEventListener("keydown",this.handleUserActivity,!0),document.removeEventListener("keyup",this.handleUserActivity,!0),document.removeEventListener("input",this.handleUserActivity,!0),document.removeEventListener("change",this.handleUserActivity,!0),document.removeEventListener("focus",this.handleUserActivity,!0),document.removeEventListener("blur",this.handleUserActivity,!0),document.removeEventListener("scroll",this.debounce(this.handleUserActivity,300),!0),window.removeEventListener("resize",this.handleUserActivity,!0),window.removeEventListener("beforeunload",this.handleBeforeUnload)},handleUserActivity(e){if(this.isAutomaticEvent(e))return;this.resetTimer();const t={eventType:e.type,target:e.target.tagName,timestamp:Date.now(),url:window.location.href};"click"===e.type?(t.clientX=e.clientX,t.clientY=e.clientY):"keydown"===e.type&&(t.key=e.key,t.ctrlKey=e.ctrlKey,t.altKey=e.altKey,t.shiftKey=e.shiftKey),this.sendUserBehavior(t)},handleMouseMove(e){this.mouseMoveThrottled||(this.handleUserActivity(e),this.mouseMoveThrottled=!0,setTimeout(()=>{this.mouseMoveThrottled=!1},500))},isAutomaticEvent(e){return"scroll"===e.type&&!this.isUserScrolling},debounce(e,t){let n;return function(...i){const o=()=>{clearTimeout(n),e.apply(this,i)};clearTimeout(n),n=setTimeout(o,t)}},resetTimer(){this.lastActivityTime=Date.now(),this.showWarning=!1,this.reconnectAttempts=0,this.warningTimer&&(clearTimeout(this.warningTimer),this.warningTimer=null),this.$emit("user-active")},startCountdown(){this.countdownTimer&&clearInterval(this.countdownTimer),this.countdownTimer=setInterval(()=>{const e=Date.now(),t=(e-this.lastActivityTime)/5e4;t>=this.currentTimeoutMinutes-this.currentWarningMinutes&&!this.warningTimer&&this.showWarningWarning(),t>=this.currentTimeoutMinutes&&this.handleTimeout()},1e3)},showWarningWarning(e){let t=e||5e4;console.log("Setting showWarning to true"),this.showWarning=!0,this.$emit("timeout-warning"),this.warningTimer&&clearTimeout(this.warningTimer),this.warningTimer=setTimeout(()=>{this.handleTimeout()},t)},handleTimeout(){this.showWarning=!1,this.$emit("timeout"),this.logout()},logout(){if(localStorage.clear(),sessionStorage.clear(),location.reload(),this.socket&&this.socket.readyState===WebSocket.OPEN){const e={type:"logout",timestamp:Date.now()};this.socket.send(JSON.stringify(e))}this.$emit("logout"),this.countdownTimer&&clearInterval(this.countdownTimer),this.warningTimer&&clearTimeout(this.warningTimer)},handleBeforeUnload(e){if(this.socket&&this.socket.readyState===WebSocket.OPEN){const e={type:"page_unload",timestamp:Date.now()};this.socket.send(JSON.stringify(e))}},reset(){this.isLoginRoute()?this.destroyMonitor():this.resetTimer()},reconnect(){this.isLoginRoute()?this.destroyMonitor():(this.reconnectAttempts=0,this.socket&&this.socket.close(),this.initWebSocket())},startTokenCheckPolling(){this.tokenCheckTimer&&clearInterval(this.tokenCheckTimer),this.tokenCheckTimer=setInterval(()=>{this.checkToken()},1e3)},checkToken(){if(this.isLoginRoute())return;const e=localStorage.getItem("api_header");e||(console.log("Token不存在,即将刷新页面"),this.handleTokenMissing())},handleTokenMissing(){localStorage.clear(),sessionStorage.clear(),location.reload(),this.$emit("logout")}}},a=r;n("226c");function c(e,t,n,i,o,s,r,a){var c,u="function"===typeof e?e.options:e;if(t&&(u.render=t,u.staticRenderFns=n,u._compiled=!0),i&&(u.functional=!0),s&&(u._scopeId="data-v-"+s),r?(c=function(e){e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,e||"undefined"===typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),o&&o.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(r)},u._ssrRegister=c):o&&(c=a?function(){o.call(this,(u.functional?this.parent:this).$root.$options.shadowRoot)}:o),c)if(u.functional){u._injectStyles=c;var h=u.render;u.render=function(e,t){return c.call(t),h(e,t)}}else{var l=u.beforeCreate;u.beforeCreate=l?[].concat(l,c):[c]}return{exports:e,options:u}}var u=c(a,o,s,!1,null,null,null),h=u.exports;h.install=function(e){e.component(h.name,h)};var l=h;"undefined"!==typeof window&&window.Vue&&h.install(window.Vue);t["default"]=l}})}));
|
package/package.json
CHANGED
|
@@ -12,6 +12,22 @@
|
|
|
12
12
|
>
|
|
13
13
|
<span>{{ warningMessage }}</span>
|
|
14
14
|
</el-dialog>
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
<el-dialog
|
|
19
|
+
title="提示"
|
|
20
|
+
:visible.sync="showtips"
|
|
21
|
+
:show-close="false"
|
|
22
|
+
:modal="true"
|
|
23
|
+
width="30%"
|
|
24
|
+
center
|
|
25
|
+
custom-class="behavior-warning-dialog"
|
|
26
|
+
>
|
|
27
|
+
<span>该账号已在其他设备登录!请刷新页面后重新登录</span>
|
|
28
|
+
</el-dialog>
|
|
29
|
+
|
|
30
|
+
|
|
15
31
|
</div>
|
|
16
32
|
</template>
|
|
17
33
|
|
|
@@ -37,6 +53,7 @@ export default {
|
|
|
37
53
|
},
|
|
38
54
|
data() {
|
|
39
55
|
return {
|
|
56
|
+
showtips:false,
|
|
40
57
|
mouseMoveThrottled: false,
|
|
41
58
|
socket: null,
|
|
42
59
|
countdownTimer: null,
|
|
@@ -204,7 +221,7 @@ export default {
|
|
|
204
221
|
|
|
205
222
|
// 设置连接成功回调
|
|
206
223
|
this.socket.onopen = () => {
|
|
207
|
-
console.log('WebSocket连接已建立');
|
|
224
|
+
// console.log('WebSocket连接已建立');
|
|
208
225
|
this.sendUserBehavior();
|
|
209
226
|
this.$emit('websocket-open');
|
|
210
227
|
// 连接成功时重置重连尝试次数
|
|
@@ -215,11 +232,11 @@ export default {
|
|
|
215
232
|
this.socket.onmessage = (event) => {
|
|
216
233
|
try {
|
|
217
234
|
const data = JSON.parse(event.data);
|
|
218
|
-
console.log('收到用户活动状态消息:', data);
|
|
235
|
+
// console.log('收到用户活动状态消息:', data);
|
|
219
236
|
this.handleActivityStatus(data);
|
|
220
237
|
this.$emit('websocket-message', data);
|
|
221
238
|
} catch (e) {
|
|
222
|
-
console.error('解析WebSocket消息失败:', e);
|
|
239
|
+
// console.error('解析WebSocket消息失败:', e);
|
|
223
240
|
}
|
|
224
241
|
};
|
|
225
242
|
|
|
@@ -324,6 +341,10 @@ export default {
|
|
|
324
341
|
|
|
325
342
|
// 处理活动状态信息
|
|
326
343
|
handleActivityStatus(data) {
|
|
344
|
+
if(data.type === 'OTHER_DEVICE_LOGIN_FORCE_LOGOUT'||data.type === 'FORCE_LOGOUT'){
|
|
345
|
+
this.showtips=true
|
|
346
|
+
return
|
|
347
|
+
}
|
|
327
348
|
if (data.type === 'ACTIVITY_STATUS' && data.data) {
|
|
328
349
|
const activityData = data.data;
|
|
329
350
|
|
|
@@ -376,7 +397,7 @@ export default {
|
|
|
376
397
|
"type": "HEARTBEAT",
|
|
377
398
|
"message": "心跳",
|
|
378
399
|
};
|
|
379
|
-
console.log('用户行为监测:', JSON.stringify(message));
|
|
400
|
+
// console.log('用户行为监测:', JSON.stringify(message));
|
|
380
401
|
this.socket.send(JSON.stringify(message));
|
|
381
402
|
}
|
|
382
403
|
},
|