index.vue 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. <template>
  2. <ContentWrap>
  3. <!-- 列表 -->
  4. <XTable @register="registerTable">
  5. <template #actionbtns_default="{ row }">
  6. <!-- 操作:详情 -->
  7. <XTextButton preIcon="ep:view" :title="t('action.detail')" @click="handleDetail(row)" />
  8. <!-- 操作:登出 -->
  9. <XTextButton
  10. preIcon="ep:delete"
  11. :title="t('action.logout')"
  12. v-hasPermi="['system:oauth2-token:delete']"
  13. @click="handleForceLogout(row.id)"
  14. />
  15. </template>
  16. </XTable>
  17. </ContentWrap>
  18. <XModal v-model="dialogVisible" :title="dialogTitle">
  19. <!-- 对话框(详情) -->
  20. <Descriptions :schema="allSchemas.detailSchema" :data="detailData" />
  21. <!-- 操作按钮 -->
  22. <template #footer>
  23. <XButton :title="t('dialog.close')" @click="dialogVisible = false" />
  24. </template>
  25. </XModal>
  26. </template>
  27. <script setup lang="ts" name="Token">
  28. import { ref } from 'vue'
  29. import { useI18n } from '@/hooks/web/useI18n'
  30. import { useMessage } from '@/hooks/web/useMessage'
  31. import { useXTable } from '@/hooks/web/useXTable'
  32. import { allSchemas } from './token.data'
  33. import * as TokenApi from '@/api/system/oauth2/token'
  34. const { t } = useI18n() // 国际化
  35. const message = useMessage() // 消息弹窗
  36. // 列表相关的变量
  37. const [registerTable, { reload }] = useXTable({
  38. allSchemas: allSchemas,
  39. topActionSlots: false,
  40. getListApi: TokenApi.getAccessTokenPageApi
  41. })
  42. // ========== 详情相关 ==========
  43. const detailData = ref() // 详情 Ref
  44. const dialogVisible = ref(false) // 是否显示弹出层
  45. const dialogTitle = ref(t('action.detail')) // 弹出层标题
  46. // 详情
  47. const handleDetail = async (row: TokenApi.OAuth2TokenVO) => {
  48. // 设置数据
  49. detailData.value = row
  50. dialogVisible.value = true
  51. }
  52. // 强退操作
  53. const handleForceLogout = (rowId: number) => {
  54. message
  55. .confirm('是否要强制退出用户')
  56. .then(async () => {
  57. await TokenApi.deleteAccessTokenApi(rowId)
  58. message.success(t('common.success'))
  59. })
  60. .finally(async () => {
  61. // 刷新列表
  62. await reload()
  63. })
  64. }
  65. </script>