!104 add 新增在线登录设备管理

* update 在线登录设备管理删除权限
* add 新增在线登录设备管理
This commit is contained in:
AprilWind 2024-04-19 05:02:14 +00:00 committed by 疯狂的狮子Li
parent c21f0d7d77
commit 8c6cf5bc43
3 changed files with 88 additions and 1 deletions

View File

@ -18,3 +18,19 @@ export function forceLogout(tokenId: string) {
method: 'delete' method: 'delete'
}); });
} }
// 获取当前用户登录在线设备
export function getOnline() {
return request({
url: '/monitor/online',
method: 'get'
});
}
// 删除当前在线设备
export function delOnline(tokenId: string) {
return request({
url: '/monitor/online/' + tokenId,
method: 'post'
});
}

View File

@ -58,6 +58,9 @@
<el-tab-pane label="第三方应用" name="thirdParty"> <el-tab-pane label="第三方应用" name="thirdParty">
<thirdParty :auths="state.auths" /> <thirdParty :auths="state.auths" />
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="在线设备" name="onlinDevice">
<onlinDevice :devices="state.devices" />
</el-tab-pane>
</el-tabs> </el-tabs>
</el-card> </el-card>
</el-col> </el-col>
@ -70,8 +73,10 @@ import UserAvatar from './userAvatar.vue';
import UserInfo from './userInfo.vue'; import UserInfo from './userInfo.vue';
import ResetPwd from './resetPwd.vue'; import ResetPwd from './resetPwd.vue';
import ThirdParty from './thirdParty.vue'; import ThirdParty from './thirdParty.vue';
import OnlinDevice from './onlineDevice.vue';
import { getAuthList } from '@/api/system/social/auth'; import { getAuthList } from '@/api/system/social/auth';
import { getUserProfile } from '@/api/system/user'; import { getUserProfile } from '@/api/system/user';
import { getOnline } from '@/api/monitor/online';
import { UserVO } from '@/api/system/user/types'; import { UserVO } from '@/api/system/user/types';
const activeTab = ref('userinfo'); const activeTab = ref('userinfo');
@ -80,12 +85,14 @@ interface State {
roleGroup: string; roleGroup: string;
postGroup: string; postGroup: string;
auths: any; auths: any;
devices: any;
} }
const state = ref<State>({ const state = ref<State>({
user: {}, user: {},
roleGroup: '', roleGroup: '',
postGroup: '', postGroup: '',
auths: [] auths: [],
devices: []
}); });
const userForm = ref({}); const userForm = ref({});
@ -102,9 +109,14 @@ const getAuths = async () => {
const res = await getAuthList(); const res = await getAuthList();
state.value.auths = res.data; state.value.auths = res.data;
}; };
const getOnlines = async () => {
const res = await getOnline();
state.value.devices = res.rows;
};
onMounted(() => { onMounted(() => {
getUser(); getUser();
getAuths(); getAuths();
getOnlines();
}); });
</script> </script>

View File

@ -0,0 +1,59 @@
<template>
<div>
<el-table :data="devices" style="width: 100%; height: 100%; font-size: 10px">
<el-table-column label="设备类型" align="center">
<template #default="scope">
<dict-tag :options="sys_device_type" :value="scope.row.deviceType" />
</template>
</el-table-column>
<el-table-column label="主机" align="center" prop="ipaddr" :show-overflow-tooltip="true" />
<el-table-column label="登录地点" align="center" prop="loginLocation" :show-overflow-tooltip="true" />
<el-table-column label="操作系统" align="center" prop="os" :show-overflow-tooltip="true" />
<el-table-column label="浏览器" align="center" prop="browser" :show-overflow-tooltip="true" />
<el-table-column label="登录时间" align="center" prop="loginTime" width="180">
<template #default="scope">
<span>{{ parseTime(scope.row.loginTime) }}</span>
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template #default="scope">
<el-tooltip content="删除" placement="top">
<el-button link type="primary" icon="Delete" @click="handldDelOnline(scope.row)">
</el-button>
</el-tooltip>
</template>
</el-table-column>
</el-table>
</div>
</template>
<script name="Online" lang="ts" setup>
import { delOnline } from '@/api/monitor/online';
import { propTypes } from '@/utils/propTypes';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
const { sys_device_type } = toRefs<any>(proxy?.useDict('sys_device_type'));
const props = defineProps({
devices: propTypes.any.isRequired
});
const devices = computed(() => props.devices);
/** 删除按钮操作 */
const handldDelOnline = (row: any) => {
ElMessageBox.confirm('删除设备后,在该设备登录需要重新进行验证')
.then(() => {
return delOnline(row.tokenId);
})
.then((res: any) => {
if (res.code === 200) {
proxy?.$modal.msgSuccess('删除成功');
proxy?.$tab.refreshPage();
} else {
proxy?.$modal.msgError(res.msg);
}
})
.catch(() => {});
};
</script>