diff --git a/src/api/monitor/online.js b/src/api/monitor/online.js
new file mode 100644
index 0000000..9206517
--- /dev/null
+++ b/src/api/monitor/online.js
@@ -0,0 +1,18 @@
+import request from '@/utils/request'
+
+// 查询在线用户列表
+export function list(query) {
+ return request({
+ url: '/monitor/online/list',
+ method: 'get',
+ params: query
+ })
+}
+
+// 强退用户
+export function forceLogout(username, deviceSn) {
+ return request({
+ url: '/monitor/online/' + username + '/' + deviceSn,
+ method: 'delete'
+ })
+}
diff --git a/src/utils/request.js b/src/utils/request.js
index 8b3f092..028845a 100644
--- a/src/utils/request.js
+++ b/src/utils/request.js
@@ -104,7 +104,7 @@ service.interceptors.response.use(
) {
return res.data;
}
- if (code === 401) {
+ if (code === 401 || code === 4011) {
if (!isRelogin.show) {
isRelogin.show = true;
ElMessageBox.confirm(
@@ -129,6 +129,31 @@ service.interceptors.response.use(
});
}
return Promise.reject("无效的会话,或者会话已过期,请重新登录。");
+ } else if (code === 4012) {
+ if (!isRelogin.show) {
+ isRelogin.show = true;
+ ElMessageBox.confirm(
+ "您以被挤下线",
+ "系统提示",
+ {
+ confirmButtonText: "重新登录",
+ cancelButtonText: "取消",
+ type: "warning",
+ }
+ )
+ .then(() => {
+ isRelogin.show = false;
+ useUserStore()
+ .logOut()
+ .then(() => {
+ location.href = "/index";
+ });
+ })
+ .catch(() => {
+ isRelogin.show = false;
+ });
+ }
+ return Promise.reject("无效的会话,或者会话已过期,请重新登录。");
} else if (code === 500) {
ElMessage({ message: msg, type: "error" });
return Promise.reject(new Error(msg));
diff --git a/src/views/monitor/online/index.vue b/src/views/monitor/online/index.vue
new file mode 100644
index 0000000..b136d72
--- /dev/null
+++ b/src/views/monitor/online/index.vue
@@ -0,0 +1,89 @@
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
+
+
+
+
+ {{ (pageNum - 1) * pageSize + scope.$index + 1 }}
+
+
+
+
+
+
+
+
+
+
+ {{ parseTime(scope.row.loginTime) }}
+
+
+
+
+ 强退
+
+
+
+
+
+
+
+
+