diff --git a/yudao-ui-admin-vue3/src/api/system/oauth2/client.ts b/yudao-ui-admin-vue3/src/api/system/oauth2/client.ts index 11b696f5c..f384ee9dc 100644 --- a/yudao-ui-admin-vue3/src/api/system/oauth2/client.ts +++ b/yudao-ui-admin-vue3/src/api/system/oauth2/client.ts @@ -1,5 +1,24 @@ import request from '@/config/axios' -import { OAuth2ClientVo } from './client.types' +export interface OAuth2ClientVO { + id: number + clientId: string + secret: string + name: string + logo: string + description: string + status: number + accessTokenValiditySeconds: number + refreshTokenValiditySeconds: number + redirectUris: string[] + autoApprove: boolean + authorizedGrantTypes: string[] + scopes: string[] + authorities: string[] + resourceIds: string[] + additionalInformation: string + isAdditionalInformationJson: boolean + createTime: string +} // 查询 OAuth2列表 export const getOAuth2ClientPageApi = (params) => { @@ -12,12 +31,12 @@ export const getOAuth2ClientApi = (id: number) => { } // 新增 OAuth2 -export const createOAuth2ClientApi = (data: OAuth2ClientVo) => { +export const createOAuth2ClientApi = (data: OAuth2ClientVO) => { return request.post({ url: '/system/oauth2-client/create', data }) } // 修改 OAuth2 -export const updateOAuth2ClientApi = (data: OAuth2ClientVo) => { +export const updateOAuth2ClientApi = (data: OAuth2ClientVO) => { return request.put({ url: '/system/oauth2-client/update', data }) } diff --git a/yudao-ui-admin-vue3/src/api/system/oauth2/client.types.ts b/yudao-ui-admin-vue3/src/api/system/oauth2/client.types.ts deleted file mode 100644 index 895e04762..000000000 --- a/yudao-ui-admin-vue3/src/api/system/oauth2/client.types.ts +++ /dev/null @@ -1,20 +0,0 @@ -export type OAuth2ClientVo = { - id: number - clientId: string - secret: string - name: string - logo: string - description: string - status: number - accessTokenValiditySeconds: number - refreshTokenValiditySeconds: number - redirectUris: string[] - autoApprove: boolean - authorizedGrantTypes: string[] - scopes: string[] - authorities: string[] - resourceIds: string[] - additionalInformation: string - isAdditionalInformationJson: boolean - createTime: string -} diff --git a/yudao-ui-admin-vue3/src/api/system/oauth2/token.ts b/yudao-ui-admin-vue3/src/api/system/oauth2/token.ts index d14ed2799..2a984f2e2 100644 --- a/yudao-ui-admin-vue3/src/api/system/oauth2/token.ts +++ b/yudao-ui-admin-vue3/src/api/system/oauth2/token.ts @@ -1,7 +1,24 @@ import request from '@/config/axios' +export interface OAuth2TokenVO { + id: number + accessToken: string + refreshToken: string + userId: number + userType: number + clientId: string + createTime: string + expiresTime: string +} + +export interface OAuth2TokenPageReqVO extends BasePage { + code?: string + name?: string + status?: number +} + // 查询 token列表 -export const getAccessTokenPageApi = (params) => { +export const getAccessTokenPageApi = (params: OAuth2TokenPageReqVO) => { return request.get({ url: '/system/oauth2-token/page', params }) } diff --git a/yudao-ui-admin-vue3/src/api/system/oauth2/token.types.ts b/yudao-ui-admin-vue3/src/api/system/oauth2/token.types.ts deleted file mode 100644 index f12e9943d..000000000 --- a/yudao-ui-admin-vue3/src/api/system/oauth2/token.types.ts +++ /dev/null @@ -1,10 +0,0 @@ -export type OAuth2TokenVo = { - id: number - accessToken: string - refreshToken: string - userId: number - userType: number - clientId: string - createTime: string - expiresTime: string -} diff --git a/yudao-ui-admin-vue3/src/hooks/web/useVxeGrid.ts b/yudao-ui-admin-vue3/src/hooks/web/useVxeGrid.ts index b7941f16e..bf8f2ce7a 100644 --- a/yudao-ui-admin-vue3/src/hooks/web/useVxeGrid.ts +++ b/yudao-ui-admin-vue3/src/hooks/web/useVxeGrid.ts @@ -45,13 +45,13 @@ export const useVxeGrid = <T = any>(config?: UseVxeGridConfig<T>) => { isHover: true // 当鼠标移到行时,是否要高亮当前行 }, toolbarConfig: { - custom: true, slots: { buttons: 'toolbar_buttons' } }, printConfig: { columns: config?.allSchemas.printSchema }, formConfig: { + enabled: true, titleWidth: 100, titleAlign: 'right', items: config?.allSchemas.searchSchema @@ -120,6 +120,7 @@ export const useVxeGrid = <T = any>(config?: UseVxeGridConfig<T>) => { }) }) } + return { gridOptions, delList diff --git a/yudao-ui-admin-vue3/src/views/system/oauth2/client/client.data.ts b/yudao-ui-admin-vue3/src/views/system/oauth2/client/client.data.ts index 6dbe8a7e5..d0226e376 100644 --- a/yudao-ui-admin-vue3/src/views/system/oauth2/client/client.data.ts +++ b/yudao-ui-admin-vue3/src/views/system/oauth2/client/client.data.ts @@ -1,10 +1,9 @@ import { reactive } from 'vue' import { useI18n } from '@/hooks/web/useI18n' import { required } from '@/utils/formRules' -import { CrudSchema, useCrudSchemas } from '@/hooks/web/useCrudSchemas' import { DICT_TYPE } from '@/utils/dict' -const { t } = useI18n() -// 国际化 +import { VxeCrudSchema, useVxeCrudSchemas } from '@/hooks/web/useVxeCrudSchemas' +const { t } = useI18n() // 国际化 // 表单校验 export const rules = reactive({ @@ -20,122 +19,92 @@ export const rules = reactive({ }) // CrudSchema -const crudSchemas = reactive<CrudSchema[]>([ - { - label: '客户端编号', - field: 'clientId', - form: { - show: false +const crudSchemas = reactive<VxeCrudSchema>({ + primaryKey: 'clientId', + primaryType: 'seq', + action: true, + columns: [ + { + title: '客户端密钥', + field: 'secret' }, - detail: { - show: false - } - }, - { - label: '客户端密钥', - field: 'secret' - }, - { - label: '应用名', - field: 'name', - search: { - show: true - } - }, - { - label: '应用图标', - field: 'logo' - }, - { - label: t('common.status'), - field: 'status', - dictType: DICT_TYPE.COMMON_STATUS, - search: { - show: true - } - }, - { - label: '访问令牌的有效期', - field: 'accessTokenValiditySeconds' - }, - { - label: '刷新令牌的有效期', - field: 'refreshTokenValiditySeconds' - }, - { - label: '授权类型', - field: 'authorizedGrantTypes', - dictType: DICT_TYPE.SYSTEM_OAUTH2_GRANT_TYPE - }, - { - label: '授权范围', - field: 'scopes', - table: { - show: false - } - }, - { - label: '自动授权范围', - field: 'autoApproveScopes', - table: { - show: false - } - }, - { - label: '可重定向的 URI 地址', - field: 'redirectUris', - table: { - show: false - } - }, - { - label: '权限', - field: 'authorities', - table: { - show: false - } - }, - { - label: '资源', - field: 'resourceIds', - table: { - show: false - } - }, - { - label: '附加信息', - field: 'additionalInformation', - table: { - show: false + { + title: '应用名', + field: 'name', + isSearch: true }, - form: { - component: 'Input', - componentProps: { - type: 'textarea', - rows: 4 - }, - colProps: { - span: 24 + { + title: '应用图标', + field: 'logo' + }, + { + title: t('common.status'), + field: 'status', + dictType: DICT_TYPE.COMMON_STATUS, + isSearch: true + }, + { + title: '访问令牌的有效期', + field: 'accessTokenValiditySeconds' + }, + { + title: '刷新令牌的有效期', + field: 'refreshTokenValiditySeconds' + }, + { + title: '授权类型', + field: 'authorizedGrantTypes', + dictType: DICT_TYPE.SYSTEM_OAUTH2_GRANT_TYPE, + form: { + component: 'Select' } - } - }, - { - label: t('common.createTime'), - field: 'createTime', - form: { - show: false - } - }, - { - label: t('table.action'), - field: 'action', - width: '240px', - form: { - show: false }, - detail: { - show: false + { + title: '授权范围', + field: 'scopes', + isTable: false + }, + { + title: '自动授权范围', + field: 'autoApproveScopes', + isTable: false + }, + { + title: '可重定向的 URI 地址', + field: 'redirectUris', + isTable: false + }, + { + title: '权限', + field: 'authorities', + isTable: false + }, + { + title: '资源', + field: 'resourceIds', + isTable: false + }, + { + title: '附加信息', + field: 'additionalInformation', + isTable: false, + form: { + component: 'Input', + componentProps: { + type: 'textarea', + rows: 4 + }, + colProps: { + span: 24 + } + } + }, + { + title: t('common.createTime'), + field: 'createTime', + formatter: 'formatDate', + isForm: false } - } -]) -export const { allSchemas } = useCrudSchemas(crudSchemas) + ] +}) +export const { allSchemas } = useVxeCrudSchemas(crudSchemas) diff --git a/yudao-ui-admin-vue3/src/views/system/oauth2/client/index.vue b/yudao-ui-admin-vue3/src/views/system/oauth2/client/index.vue index bd1ba5a2c..90871f731 100644 --- a/yudao-ui-admin-vue3/src/views/system/oauth2/client/index.vue +++ b/yudao-ui-admin-vue3/src/views/system/oauth2/client/index.vue @@ -1,29 +1,112 @@ +<template> + <ContentWrap> + <!-- 列表 --> + <vxe-grid ref="xGrid" v-bind="gridOptions" class="xtable-scrollbar"> + <!-- 操作:新增 --> + <template #toolbar_buttons> + <XButton + type="primary" + preIcon="ep:zoom-in" + :title="t('action.add')" + v-hasPermi="['system:oauth2-client:create']" + @click="handleCreate()" + /> + </template> + <template #authorizedGrantTypes="{ row }"> + <el-tag + :disable-transitions="true" + :key="index" + v-for="(authorizedGrantType, index) in row.authorizedGrantTypes" + :index="index" + > + {{ authorizedGrantType }} + </el-tag> + </template> + <template #actionbtns_default="{ row }"> + <!-- 操作:修改 --> + <XTextButton + preIcon="ep:edit" + :title="t('action.edit')" + v-hasPermi="['system:oauth2-client:update']" + @click="handleUpdate(row.id)" + /> + <!-- 操作:详情 --> + <XTextButton + preIcon="ep:view" + :title="t('action.detail')" + v-hasPermi="['system:oauth2-client:update']" + @click="handleDetail(row.id)" + /> + <!-- 操作:删除 --> + <XTextButton + preIcon="ep:delete" + :title="t('action.del')" + v-hasPermi="['system:oauth2-client:delete']" + @click="handleDelete(row.id)" + /> + </template> + </vxe-grid> + </ContentWrap> + <!-- 弹窗 --> + <XModal id="postModel" v-model="dialogVisible" :title="dialogTitle"> + <template #default> + <!-- 表单:添加/修改 --> + <Form + ref="formRef" + v-if="['create', 'update'].includes(actionType)" + :schema="allSchemas.formSchema" + :rules="rules" + /> + <!-- 表单:详情 --> + <Descriptions + v-if="actionType === 'detail'" + :schema="allSchemas.detailSchema" + :data="detailRef" + /> + </template> + <template #footer> + <!-- 按钮:保存 --> + <XButton + v-if="['create', 'update'].includes(actionType)" + type="primary" + :title="t('action.save')" + :loading="actionLoading" + @click="submitForm" + /> + <!-- 按钮:关闭 --> + <XButton :loading="actionLoading" :title="t('dialog.close')" @click="dialogVisible = false" /> + </template> + </XModal> +</template> <script setup lang="ts"> +// 全局相关的 import import { ref, unref } from 'vue' -import dayjs from 'dayjs' -import { ElMessage, ElImage, ElTag } from 'element-plus' -import { DICT_TYPE } from '@/utils/dict' -import { useTable } from '@/hooks/web/useTable' +import { ElTag } from 'element-plus' import { useI18n } from '@/hooks/web/useI18n' +import { useMessage } from '@/hooks/web/useMessage' +import { useVxeGrid } from '@/hooks/web/useVxeGrid' +import { VxeGridInstance } from 'vxe-table' import { FormExpose } from '@/components/Form' -import type { OAuth2ClientVo } from '@/api/system/oauth2/client.types' -import { rules, allSchemas } from './client.data' +// 业务相关的 import import * as ClientApi from '@/api/system/oauth2/client' +import { rules, allSchemas } from './client.data' + const { t } = useI18n() // 国际化 +const message = useMessage() // 消息弹窗 -// ========== 列表相关 ========== -const { register, tableObject, methods } = useTable<OAuth2ClientVo>({ - getListApi: ClientApi.getOAuth2ClientPageApi, - delListApi: ClientApi.deleteOAuth2ClientApi +// 列表相关的变量 +const xGrid = ref<VxeGridInstance>() // 列表 Grid Ref +const { gridOptions } = useVxeGrid<ClientApi.OAuth2ClientVO>({ + allSchemas: allSchemas, + getListApi: ClientApi.getOAuth2ClientPageApi }) -const { getList, setSearchParams, delList } = methods - -// ========== CRUD 相关 ========== -const actionLoading = ref(false) // 遮罩层 -const actionType = ref('') // 操作按钮的类型 +// 弹窗相关的变量 const dialogVisible = ref(false) // 是否显示弹出层 const dialogTitle = ref('edit') // 弹出层标题 +const actionType = ref('') // 操作按钮的类型 +const actionLoading = ref(false) // 按钮 Loading const formRef = ref<FormExpose>() // 表单 Ref +const detailRef = ref() // 详情 Ref // 设置标题 const setDialogTile = (type: string) => { @@ -40,14 +123,35 @@ const handleCreate = () => { } // 修改操作 -const handleUpdate = async (row: OAuth2ClientVo) => { +const handleUpdate = async (rowId: number) => { setDialogTile('update') // 设置数据 - const res = await ClientApi.getOAuth2ClientApi(row.id) + const res = await ClientApi.getOAuth2ClientApi(rowId) unref(formRef)?.setValues(res) } -// 提交按钮 +// 详情操作 +const handleDetail = async (rowId: number) => { + setDialogTile('detail') + const res = await ClientApi.getOAuth2ClientApi(rowId) + detailRef.value = res +} + +// 删除操作 +const handleDelete = async (rowId: number) => { + message + .delConfirm() + .then(async () => { + await ClientApi.deleteOAuth2ClientApi(rowId) + message.success(t('common.delSuccess')) + }) + .finally(() => { + // 刷新列表 + xGrid.value?.commitProxy('query') + }) +} + +// 提交新增/修改的表单 const submitForm = async () => { const elForm = unref(formRef)?.getElFormRef() if (!elForm) return @@ -56,143 +160,21 @@ const submitForm = async () => { actionLoading.value = true // 提交请求 try { - const data = unref(formRef)?.formModel as OAuth2ClientVo + const data = unref(formRef)?.formModel as ClientApi.OAuth2ClientVO if (actionType.value === 'create') { await ClientApi.createOAuth2ClientApi(data) - ElMessage.success(t('common.createSuccess')) + message.success(t('common.createSuccess')) } else { await ClientApi.updateOAuth2ClientApi(data) - ElMessage.success(t('common.updateSuccess')) + message.success(t('common.updateSuccess')) } - // 操作成功,重新加载列表 dialogVisible.value = false - await getList() } finally { actionLoading.value = false + // 刷新列表 + xGrid.value?.commitProxy('query') } } }) } - -// ========== 详情相关 ========== -const detailRef = ref() // 详情 Ref - -// 详情操作 -const handleDetail = async (row: OAuth2ClientVo) => { - // 设置数据 - detailRef.value = row - setDialogTile('detail') -} - -// ========== 初始化 ========== -getList() </script> - -<template> - <!-- 搜索工作区 --> - <ContentWrap> - <Search :schema="allSchemas.searchSchema" @search="setSearchParams" @reset="setSearchParams" /> - </ContentWrap> - <ContentWrap> - <!-- 操作工具栏 --> - <div class="mb-10px"> - <el-button type="primary" v-hasPermi="['system:oauth2-client:create']" @click="handleCreate"> - <Icon icon="ep:zoom-in" class="mr-5px" /> {{ t('action.add') }} - </el-button> - </div> - <!-- 列表 --> - <Table - :columns="allSchemas.tableColumns" - :selection="false" - :data="tableObject.tableList" - :loading="tableObject.loading" - :pagination="{ - total: tableObject.total - }" - v-model:pageSize="tableObject.pageSize" - v-model:currentPage="tableObject.currentPage" - @register="register" - > - <template #logo="{ row }"> - <el-image :src="row.logo" :preview-src-list="[row.logo]" /> - </template> - <template #status="{ row }"> - <DictTag :type="DICT_TYPE.COMMON_STATUS" :value="row.status" /> - </template> - <template #authorizedGrantTypes="{ row }"> - <el-tag - :disable-transitions="true" - :key="index" - v-for="(authorizedGrantType, index) in row.authorizedGrantTypes" - :index="index" - > - {{ authorizedGrantType }} - </el-tag> - </template> - <template #createTime="{ row }"> - <span>{{ dayjs(row.createTime).format('YYYY-MM-DD HH:mm:ss') }}</span> - </template> - <template #action="{ row }"> - <el-button - link - type="primary" - v-hasPermi="['system:oauth2-client:update']" - @click="handleUpdate(row)" - > - <Icon icon="ep:edit" class="mr-1px" /> {{ t('action.edit') }} - </el-button> - <el-button - link - type="primary" - v-hasPermi="['system:oauth2-client:update']" - @click="handleDetail(row)" - > - <Icon icon="ep:view" class="mr-1px" /> {{ t('action.detail') }} - </el-button> - <el-button - link - type="primary" - v-hasPermi="['system:oauth2-client:delete']" - @click="delList(row.id, false)" - > - <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.del') }} - </el-button> - </template> - </Table> - </ContentWrap> - - <Dialog v-model="dialogVisible" :title="dialogTitle" width="60%" maxHeight="420px"> - <!-- 对话框(添加 / 修改) --> - <Form - v-if="['create', 'update'].includes(actionType)" - :schema="allSchemas.formSchema" - :rules="rules" - ref="formRef" - /> - <!-- 对话框(详情) --> - <Descriptions - v-if="actionType === 'detail'" - :schema="allSchemas.detailSchema" - :data="detailRef" - > - <template #status="{ row }"> - <DictTag :type="DICT_TYPE.COMMON_STATUS" :value="row.status" /> - </template> - <template #createTime="{ row }"> - <span>{{ dayjs(row.createTime).format('YYYY-MM-DD HH:mm:ss') }}</span> - </template> - </Descriptions> - <!-- 操作按钮 --> - <template #footer> - <el-button - v-if="['create', 'update'].includes(actionType)" - type="primary" - :loading="actionLoading" - @click="submitForm" - > - {{ t('action.save') }} - </el-button> - <el-button @click="dialogVisible = false">{{ t('dialog.close') }}</el-button> - </template> - </Dialog> -</template> diff --git a/yudao-ui-admin-vue3/src/views/system/oauth2/token/index.vue b/yudao-ui-admin-vue3/src/views/system/oauth2/token/index.vue index 2023f20dc..877bdc730 100644 --- a/yudao-ui-admin-vue3/src/views/system/oauth2/token/index.vue +++ b/yudao-ui-admin-vue3/src/views/system/oauth2/token/index.vue @@ -1,92 +1,69 @@ -<script setup lang="ts"> -import dayjs from 'dayjs' -import { useTable } from '@/hooks/web/useTable' -import { allSchemas } from './token.data' -import { DICT_TYPE } from '@/utils/dict' -import { useI18n } from '@/hooks/web/useI18n' -import type { OAuth2TokenVo } from '@/api/system/oauth2/token.types' -import * as TokenApi from '@/api/system/oauth2/token' -import { ref } from 'vue' -const { t } = useI18n() // 国际化 -// ========== 列表相关 ========== -const { register, tableObject, methods } = useTable<OAuth2TokenVo>({ - getListApi: TokenApi.getAccessTokenPageApi, - delListApi: TokenApi.deleteAccessTokenApi -}) -// ========== 详情相关 ========== -const detailRef = ref() // 详情 Ref -const dialogVisible = ref(false) // 是否显示弹出层 -const dialogTitle = ref(t('action.detail')) // 弹出层标题 -const { getList, setSearchParams, delList } = methods -// 详情 -const handleDetail = (row: OAuth2TokenVo) => { - // 设置数据 - detailRef.value = row - dialogVisible.value = true -} -// 强退操作 -const handleForceLogout = (row: OAuth2TokenVo) => { - delList(row.id, false) -} -getList() -</script> <template> <ContentWrap> - <Search :schema="allSchemas.searchSchema" @search="setSearchParams" @reset="setSearchParams" /> - </ContentWrap> - <ContentWrap> - <Table - :columns="allSchemas.tableColumns" - :selection="false" - :data="tableObject.tableList" - :loading="tableObject.loading" - :pagination="{ - total: tableObject.total - }" - v-model:pageSize="tableObject.pageSize" - v-model:currentPage="tableObject.currentPage" - @register="register" - > - <template #userType="{ row }"> - <DictTag :type="DICT_TYPE.USER_TYPE" :value="row.userType" /> - </template> - <template #createTime="{ row }"> - <span>{{ dayjs(row.createTime).format('YYYY-MM-DD HH:mm:ss') }}</span> - </template> - <template #expiresTime="{ row }"> - <span>{{ dayjs(row.expiresTime).format('YYYY-MM-DD HH:mm:ss') }}</span> - </template> - <template #action="{ row }"> - <el-button link type="primary" @click="handleDetail(row)"> - <Icon icon="ep:view" class="mr-1px" /> {{ t('action.detail') }} - </el-button> - <el-button - link - type="primary" + <!-- 列表 --> + <vxe-grid ref="xGrid" v-bind="gridOptions" class="xtable-scrollbar"> + <template #actionbtns_default="{ row }"> + <!-- 操作:详情 --> + <XTextButton preIcon="ep:view" :title="t('action.detail')" @click="handleDetail(row)" /> + <!-- 操作:删除 --> + <XTextButton + preIcon="ep:delete" + :title="t('action.logout')" v-hasPermi="['system:oauth2-token:delete']" - @click="handleForceLogout(row)" - > - <Icon icon="ep:delete" class="mr-1px" /> {{ t('action.logout') }} - </el-button> + @click="handleForceLogout(row.id)" + /> </template> - </Table> + </vxe-grid> </ContentWrap> <Dialog v-model="dialogVisible" :title="dialogTitle"> <!-- 对话框(详情) --> - <Descriptions :schema="allSchemas.detailSchema" :data="detailRef"> - <template #userType="{ row }"> - <DictTag :type="DICT_TYPE.USER_TYPE" :value="row.userType" /> - </template> - <template #createTime="{ row }"> - <span>{{ dayjs(row.createTime).format('YYYY-MM-DD HH:mm:ss') }}</span> - </template> - <template #expiresTime="{ row }"> - <span>{{ dayjs(row.createTime).format('YYYY-MM-DD HH:mm:ss') }}</span> - </template> - </Descriptions> + <Descriptions :schema="allSchemas.detailSchema" :data="detailRef" /> <!-- 操作按钮 --> <template #footer> <el-button @click="dialogVisible = false">{{ t('dialog.close') }}</el-button> </template> </Dialog> </template> + +<script setup lang="ts"> +import { ref } from 'vue' +import { useI18n } from '@/hooks/web/useI18n' +import { useMessage } from '@/hooks/web/useMessage' +import { useVxeGrid } from '@/hooks/web/useVxeGrid' +import { VxeGridInstance } from 'vxe-table' + +import { allSchemas } from './token.data' +import * as TokenApi from '@/api/system/oauth2/token' + +const { t } = useI18n() // 国际化 +const message = useMessage() // 消息弹窗 +// 列表相关的变量 +const xGrid = ref<VxeGridInstance>() // 列表 Grid Ref +const { gridOptions } = useVxeGrid<TokenApi.OAuth2TokenVO>({ + allSchemas: allSchemas, + getListApi: TokenApi.getAccessTokenPageApi +}) +// ========== 详情相关 ========== +const detailRef = ref() // 详情 Ref +const dialogVisible = ref(false) // 是否显示弹出层 +const dialogTitle = ref(t('action.detail')) // 弹出层标题 +// 详情 +const handleDetail = async (row: TokenApi.OAuth2TokenVO) => { + // 设置数据 + detailRef.value = row + dialogVisible.value = true +} +// 强退操作 +const handleForceLogout = (rowId: number) => { + message + .delConfirm() + .then(async () => { + await TokenApi.deleteAccessTokenApi(rowId) + message.success(t('common.delSuccess')) + }) + .finally(() => { + // 刷新列表 + xGrid.value?.commitProxy('query') + }) +} +</script> diff --git a/yudao-ui-admin-vue3/src/views/system/oauth2/token/token.data.ts b/yudao-ui-admin-vue3/src/views/system/oauth2/token/token.data.ts index 50721d0c2..a88526f44 100644 --- a/yudao-ui-admin-vue3/src/views/system/oauth2/token/token.data.ts +++ b/yudao-ui-admin-vue3/src/views/system/oauth2/token/token.data.ts @@ -1,68 +1,45 @@ import { reactive } from 'vue' import { useI18n } from '@/hooks/web/useI18n' -import { CrudSchema, useCrudSchemas } from '@/hooks/web/useCrudSchemas' import { DICT_TYPE } from '@/utils/dict' +import { VxeCrudSchema, useVxeCrudSchemas } from '@/hooks/web/useVxeCrudSchemas' const { t } = useI18n() // 国际化 // CrudSchema -const crudSchemas = reactive<CrudSchema[]>([ - { - label: t('common.index'), - field: 'id', - type: 'index', - form: { - show: false +const crudSchemas = reactive<VxeCrudSchema>({ + primaryKey: 'id', + primaryType: 'seq', + action: true, + columns: [ + { + title: '用户编号', + field: 'userId', + isSearch: true }, - detail: { - show: false - } - }, - { - label: '用户编号', - field: 'userId', - search: { - show: true - } - }, - { - label: '访问令牌', - field: 'accessToken' - }, - { - label: '刷新令牌', - field: 'refreshToken' - }, - { - label: '用户类型', - field: 'userType', - dictType: DICT_TYPE.USER_TYPE, - search: { - show: true - } - }, - { - label: t('common.createTime'), - field: 'createTime', - form: { - show: false - } - }, - { - label: '过期时间', - field: 'expiresTime', - form: { - show: false - } - }, - { - label: t('table.action'), - field: 'action', - width: '200px', - form: { - show: false + { + title: '访问令牌', + field: 'accessToken' }, - detail: { - show: false + { + title: '刷新令牌', + field: 'refreshToken' + }, + { + title: '用户类型', + field: 'userType', + dictType: DICT_TYPE.USER_TYPE, + isSearch: true + }, + { + title: t('common.createTime'), + field: 'createTime', + formatter: 'formatDate', + isForm: false + }, + { + title: '过期时间', + field: 'expiresTime', + formatter: 'formatDate', + isForm: false } - } -]) -export const { allSchemas } = useCrudSchemas(crudSchemas) + ] +}) +export const { allSchemas } = useVxeCrudSchemas(crudSchemas)