refactor: 使用VxeTable重构OAuth账号绑定列表(替代antdv的Table)

This commit is contained in:
dap 2024-11-08 20:52:23 +08:00
parent a3652b7971
commit f11523953f
2 changed files with 92 additions and 68 deletions

View File

@ -1,3 +1,9 @@
# 1.1.1
**REFACTOR**
- 使用VxeTable重构OAuth账号绑定列表(替代antdv的Table)
# 1.1.0
**FEATURES**

View File

@ -1,9 +1,7 @@
<script setup lang="tsx">
import type { ColumnsType } from 'ant-design-vue/es/table';
import { computed, ref, unref } from 'vue';
import type { SocialInfo } from '#/api/system/social/model';
import { computed, onMounted, ref, unref } from 'vue';
import { useVbenVxeGrid, type VxeGridProps } from '@vben/plugins/vxe-table';
import {
Alert,
@ -13,7 +11,6 @@ import {
ListItem,
message,
Modal,
Table,
} from 'ant-design-vue';
import { authUnbinding } from '#/api';
@ -21,47 +18,6 @@ import { socialList } from '#/api/system/social';
import { accountBindList, type BindItem } from '../../oauth-common';
const columns: ColumnsType = [
{
align: 'center',
dataIndex: 'source',
title: '绑定平台',
},
{
align: 'center',
customRender: ({ value }) => {
return <Avatar src={value} />;
},
dataIndex: 'avatar',
title: '头像',
},
{
align: 'center',
dataIndex: 'userName',
title: '账号',
},
{
align: 'center',
dataIndex: 'action',
title: '操作',
},
];
/**
* 解绑账号
*/
function handleUnbind(record: Record<string, any>) {
Modal.confirm({
content: `确定解绑[${record.source}]平台的[${record.userName}]账号吗?`,
async onOk() {
await authUnbinding(record.id);
await reload();
},
title: '提示',
type: 'warning',
});
}
/**
* 没有传递action事件则不支持绑定 弹出默认提示
*/
@ -85,35 +41,97 @@ const bindList = computed<BindItem[]>(() => {
return list;
});
const tableData = ref<SocialInfo[]>([]);
const gridOptions: VxeGridProps = {
checkboxConfig: {
//
highlight: true,
//
reserve: true,
},
columns: [
{
field: 'source',
title: '绑定平台',
},
{
slots: {
default: ({ row }) => {
return <Avatar src={row.avatar} />;
},
},
field: 'avatar',
title: '头像',
},
{
align: 'center',
field: 'userName',
title: '账号',
},
{
align: 'center',
slots: {
default: 'action',
},
title: '操作',
},
],
height: 'auto',
keepSource: true,
pagerConfig: {
enabled: false,
},
proxyConfig: {
ajax: {
query: async () => {
const resp = await socialList();
/**
* 平台转小写
* 已经绑定的平台
*/
boundPlatformsList.value = resp.map((item) =>
item.source.toLowerCase(),
);
return {
rows: resp,
};
},
},
},
rowConfig: {
isHover: true,
isCurrent: false,
keyField: 'id',
},
id: 'profile-bind-table',
};
async function reload() {
const resp = await socialList();
/**
* 平台转小写
* 已经绑定的平台
*/
boundPlatformsList.value = resp.map((item) => item.source.toLowerCase());
tableData.value = resp;
const [BasicTable, tableApi] = useVbenVxeGrid({
gridOptions,
});
/**
* 解绑账号
*/
function handleUnbind(record: Record<string, any>) {
Modal.confirm({
content: `确定解绑[${record.source}]平台的[${record.userName}]账号吗?`,
async onOk() {
await authUnbinding(record.id);
await tableApi.reload();
},
title: '提示',
type: 'warning',
});
}
onMounted(reload);
</script>
<template>
<div class="flex flex-col gap-[16px]">
<Table
:columns="columns"
:data-source="tableData"
:pagination="false"
size="middle"
>
<template #bodyCell="{ column, record }">
<template v-if="column.dataIndex === 'action'">
<a-button type="link" @click="handleUnbind(record)">解绑</a-button>
</template>
<BasicTable>
<template #action="{ row }">
<a-button type="link" @click="handleUnbind(row)">解绑</a-button>
</template>
</Table>
</BasicTable>
<div class="pb-3">
<List
:data-source="bindList"