From 130235fdc117ad7ee05584f4c4a946e3843bbaf1 Mon Sep 17 00:00:00 2001 From: ljw <84855512@qq.com> Date: Thu, 31 Oct 2024 22:27:30 +0800 Subject: [PATCH] add user_token --- src/api/user_token.js | 16 +++++++ src/global.js | 1 + src/router/index.js | 6 +++ src/utils/i18n/en.json | 3 ++ src/utils/i18n/ko.json | 3 ++ src/utils/i18n/ru.json | 3 ++ src/utils/i18n/zh_CN.json | 12 ++--- src/views/login/log.js | 10 ++++ src/views/login/log.vue | 9 ++-- src/views/user/token.js | 62 +++++++++++++++++++++++++ src/views/user/token.vue | 96 +++++++++++++++++++++++++++++++++++++++ 11 files changed, 211 insertions(+), 10 deletions(-) create mode 100644 src/api/user_token.js create mode 100644 src/views/user/token.js create mode 100644 src/views/user/token.vue diff --git a/src/api/user_token.js b/src/api/user_token.js new file mode 100644 index 0000000..302a479 --- /dev/null +++ b/src/api/user_token.js @@ -0,0 +1,16 @@ +import request from '@/utils/request' + +export function list (params) { + return request({ + url: '/user_token/list', + params, + }) +} + +export function remove (data) { + return request({ + url: '/user_token/delete', + method: 'post', + data, + }) +} diff --git a/src/global.js b/src/global.js index f9a70e5..c564033 100644 --- a/src/global.js +++ b/src/global.js @@ -1,6 +1,7 @@ import { ref, reactive, watch } from 'vue' import { list as fetchUsers } from '@/api/user' +// todo 缓存所有用户信息 export function loadAllUsers () { const allUsers = ref([]) const getAllUsers = async () => { diff --git a/src/router/index.js b/src/router/index.js index e7945fa..c74697e 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -142,6 +142,12 @@ export const asyncRoutes = [ meta: { title: 'OauthManage', icon: 'Link' /*keepAlive: true*/ }, component: () => import('@/views/oauth/index.vue'), }, + { + path: '/userToken', + name: 'UserToken', + meta: { title: 'UserToken', icon: 'Ticket' /*keepAlive: true*/ }, + component: () => import('@/views/user/token.vue'), + }, { path: '/loginLog', name: 'LoginLog', diff --git a/src/utils/i18n/en.json b/src/utils/i18n/en.json index 3a032f3..b609803 100644 --- a/src/utils/i18n/en.json +++ b/src/utils/i18n/en.json @@ -447,5 +447,8 @@ }, "ToLogin": { "One": "To Login" + }, + "UserToken": { + "One": "User Token" } } diff --git a/src/utils/i18n/ko.json b/src/utils/i18n/ko.json index ffa3609..042fd12 100644 --- a/src/utils/i18n/ko.json +++ b/src/utils/i18n/ko.json @@ -433,5 +433,8 @@ }, "ToLogin": { "One": "로그인하려면 클릭하십시오" + }, + "UserToken": { + "One": "사용자 토큰" } } diff --git a/src/utils/i18n/ru.json b/src/utils/i18n/ru.json index 1a54074..57da1cb 100644 --- a/src/utils/i18n/ru.json +++ b/src/utils/i18n/ru.json @@ -447,6 +447,9 @@ }, "ToLogin": { "One": "Войти" + }, + "UserToken": { + "One": "Токен пользователя" } } diff --git a/src/utils/i18n/zh_CN.json b/src/utils/i18n/zh_CN.json index 88e77c7..6c159f9 100644 --- a/src/utils/i18n/zh_CN.json +++ b/src/utils/i18n/zh_CN.json @@ -431,16 +431,13 @@ "or login in with": { "One": "或使用以下登陆" }, - "Optional, default is" : - { + "Optional, default is": { "One": "可选, 默认值是" }, - "Check your IdP docs, without": - { + "Check your IdP docs, without": { "One": "检查IdP的文档, 不包含" }, - "For OIDC login without a password, enter any 4-20 letters": - { + "For OIDC login without a password, enter any 4-20 letters": { "One": "如果通过 OIDC 登录且未设置密码,请输入任意 4-20 个字符" }, "OldPassword": { @@ -457,5 +454,8 @@ }, "ToLogin": { "One": "去登录" + }, + "UserToken": { + "One": "用户Token" } } diff --git a/src/views/login/log.js b/src/views/login/log.js index 56edc7d..bf76fbc 100644 --- a/src/views/login/log.js +++ b/src/views/login/log.js @@ -1,5 +1,6 @@ import { reactive } from 'vue' import { list, remove } from '@/api/login_log' +import { list as fetchPeers } from '@/api/peer' import { ElMessage, ElMessageBox } from 'element-plus' import { useRoute } from 'vue-router' import { T } from '@/utils/i18n' @@ -23,6 +24,15 @@ export function useRepositories () { const res = await list(listQuery).catch(_ => false) listRes.loading = false if (res) { + const uuids = res.data.list.filter(item => item.uuid).map(item => item.uuid) + const peers = await fetchPeers({ uuids }).catch(_ => false) + if (peers?.data?.list) { + res.data.list.forEach(item => { + if (item.uuid) { + item.peer = peers.data.list.find(peer => peer.uuid === item.uuid) + } + }) + } listRes.list = res.data.list listRes.total = res.data.total } diff --git a/src/views/login/log.vue b/src/views/login/log.vue index 8bec4a5..6c6dd47 100644 --- a/src/views/login/log.vue +++ b/src/views/login/log.vue @@ -14,7 +14,6 @@ 筛选 - 添加 @@ -22,18 +21,19 @@ - + + - - + + @@ -56,6 +56,7 @@ import { onActivated, onMounted, watch } from 'vue' import { loadAllUsers } from '@/global' import { useRepositories } from '@/views/login/log.js' + import { T } from '@/utils/i18n' const { allUsers, getAllUsers } = loadAllUsers() getAllUsers() diff --git a/src/views/user/token.js b/src/views/user/token.js new file mode 100644 index 0000000..3213dc2 --- /dev/null +++ b/src/views/user/token.js @@ -0,0 +1,62 @@ +import { reactive } from 'vue' +import { list, remove } from '@/api/user_token' +import { ElMessage, ElMessageBox } from 'element-plus' +import { useRoute } from 'vue-router' +import { T } from '@/utils/i18n' + +export function useRepositories () { + const route = useRoute() + const user_id = route.query?.user_id + + const listRes = reactive({ + list: [], total: 0, loading: false, + }) + const listQuery = reactive({ + page: 1, + page_size: 10, + is_my: 0, + user_id: user_id ? parseInt(user_id) : null, + }) + + const getList = async () => { + listRes.loading = true + const res = await list(listQuery).catch(_ => false) + listRes.loading = false + if (res) { + listRes.list = res.data.list + listRes.total = res.data.total + } + } + const handlerQuery = () => { + if (listQuery.page === 1) { + getList() + } else { + listQuery.page = 1 + } + } + + const del = async (row) => { + const cf = await ElMessageBox.confirm(T('Confirm?', {param: T('Logout')}), { + confirmButtonText: T('Confirm'), + cancelButtonText: T('Cancel'), + type: 'warning', + }).catch(_ => false) + if (!cf) { + return false + } + + const res = await remove({ id: row.id }).catch(_ => false) + if (res) { + ElMessage.success(T('OperationSuccess')) + getList() + } + } + + return { + listRes, + listQuery, + getList, + handlerQuery, + del, + } +} diff --git a/src/views/user/token.vue b/src/views/user/token.vue new file mode 100644 index 0000000..f9729b2 --- /dev/null +++ b/src/views/user/token.vue @@ -0,0 +1,96 @@ + + + + +