parent
c21f0d7d77
commit
8c6cf5bc43
@ -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'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
@ -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>
|
||||||
|
59
src/views/system/user/profile/onlineDevice.vue
Normal file
59
src/views/system/user/profile/onlineDevice.vue
Normal 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>
|
Loading…
x
Reference in New Issue
Block a user