- 新增 syncFeishuUsers API 用于同步飞书用户数据 - 用户列表页面添加“同步飞书用户”按钮及加载状态 - useUser hook 中实现同步飞书用户逻辑,支持按钮触发同步 - 分页处理逻辑调整,保证切换页码和页面大小均触发查询 - usePermission hook 中替换旧接口 getPermissionTree 为分页查询的 getPermissionList - 权限列表分页数据更新,更准确处理总数、当前页和页面大小
This commit is contained in:
@@ -51,3 +51,12 @@ export const getFeishuUserInfo = () => {
|
||||
message: string;
|
||||
}>("get", "/api/v1/auth/feishu/user/info");
|
||||
};
|
||||
|
||||
/** 同步飞书用户 */
|
||||
export const syncFeishuUsers = () => {
|
||||
return http.request<{
|
||||
code: number;
|
||||
data: Record<string, any>;
|
||||
message: string;
|
||||
}>("post", "/api/v1/feishu/sync/users");
|
||||
};
|
||||
|
||||
@@ -4,7 +4,7 @@ import { addDialog } from "@/components/ReDialog";
|
||||
import type { PaginationProps } from "@pureadmin/table";
|
||||
import type { FormItemProps } from "./types";
|
||||
import editForm from "../form/index.vue";
|
||||
import { getPermissionTree } from "@/api/system";
|
||||
import { getPermissionList } from "@/api/system";
|
||||
import { type Ref, h, ref, computed, reactive, onMounted } from "vue";
|
||||
import { getKeyList, deviceDetection } from "@pureadmin/utils";
|
||||
import { ElMessageBox } from "element-plus";
|
||||
@@ -161,11 +161,13 @@ export function usePermission(tableRef: Ref) {
|
||||
}
|
||||
|
||||
function handleSizeChange(val: number) {
|
||||
console.log(`${val} items per page`);
|
||||
pagination.pageSize = val;
|
||||
onSearch();
|
||||
}
|
||||
|
||||
function handleCurrentChange(val: number) {
|
||||
console.log(`current page: ${val}`);
|
||||
pagination.currentPage = val;
|
||||
onSearch();
|
||||
}
|
||||
|
||||
function handleSelectionChange(val) {
|
||||
@@ -190,10 +192,16 @@ export function usePermission(tableRef: Ref) {
|
||||
async function onSearch() {
|
||||
loading.value = true;
|
||||
try {
|
||||
const { code, data } = await getPermissionTree();
|
||||
const { code, data } = await getPermissionList({
|
||||
pageNum: pagination.currentPage,
|
||||
pageSize: pagination.pageSize,
|
||||
keyword: form.permissionName || form.permissionCode || undefined
|
||||
});
|
||||
if (code === 200) {
|
||||
dataList.value = data || [];
|
||||
pagination.total = data?.length || 0;
|
||||
dataList.value = data?.records || [];
|
||||
pagination.total = data?.total || 0;
|
||||
pagination.pageSize = data?.size || 10;
|
||||
pagination.currentPage = data?.current || 1;
|
||||
}
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
|
||||
@@ -11,7 +11,7 @@ import More from "~icons/ep/more-filled";
|
||||
import Delete from "~icons/ep/delete";
|
||||
import EditPen from "~icons/ep/edit-pen";
|
||||
import Refresh from "~icons/ep/refresh";
|
||||
import AddFill from "~icons/ri/add-circle-line";
|
||||
import Sync from "~icons/ri/refresh-line";
|
||||
|
||||
defineOptions({
|
||||
name: "SystemUser"
|
||||
@@ -41,7 +41,9 @@ const {
|
||||
handleSizeChange,
|
||||
onSelectionCancel,
|
||||
handleCurrentChange,
|
||||
handleSelectionChange
|
||||
handleSelectionChange,
|
||||
syncLoading,
|
||||
handleSyncFeishuUsers
|
||||
} = useUser(tableRef);
|
||||
</script>
|
||||
|
||||
@@ -103,10 +105,11 @@ const {
|
||||
<template #buttons>
|
||||
<el-button
|
||||
type="primary"
|
||||
:icon="useRenderIcon(AddFill)"
|
||||
@click="openDialog()"
|
||||
:icon="useRenderIcon(Sync)"
|
||||
:loading="syncLoading"
|
||||
@click="handleSyncFeishuUsers"
|
||||
>
|
||||
新增用户
|
||||
同步飞书用户
|
||||
</el-button>
|
||||
</template>
|
||||
<template v-slot="{ size, dynamicColumns }">
|
||||
|
||||
@@ -17,6 +17,7 @@ import {
|
||||
deviceDetection
|
||||
} from "@pureadmin/utils";
|
||||
import { getUserRoleIds, getUserList, getAllRoleList } from "@/api/system";
|
||||
import { syncFeishuUsers } from "@/api/feishu";
|
||||
import {
|
||||
ElForm,
|
||||
ElInput,
|
||||
@@ -213,11 +214,13 @@ export function useUser(tableRef: Ref) {
|
||||
}
|
||||
|
||||
function handleSizeChange(val: number) {
|
||||
console.log(`${val} items per page`);
|
||||
pagination.pageSize = val;
|
||||
onSearch();
|
||||
}
|
||||
|
||||
function handleCurrentChange(val: number) {
|
||||
console.log(`current page: ${val}`);
|
||||
pagination.currentPage = val;
|
||||
onSearch();
|
||||
}
|
||||
|
||||
/** 当CheckBox选择项发生变化时会触发该事件 */
|
||||
@@ -453,6 +456,25 @@ export function useUser(tableRef: Ref) {
|
||||
});
|
||||
}
|
||||
|
||||
/** 同步飞书用户 */
|
||||
const syncLoading = ref(false);
|
||||
async function handleSyncFeishuUsers() {
|
||||
syncLoading.value = true;
|
||||
try {
|
||||
const { code, message: msg } = await syncFeishuUsers();
|
||||
if (code === 200) {
|
||||
message("同步飞书用户成功", { type: "success" });
|
||||
onSearch();
|
||||
} else {
|
||||
message(msg || "同步失败", { type: "error" });
|
||||
}
|
||||
} catch {
|
||||
message("同步飞书用户失败", { type: "error" });
|
||||
} finally {
|
||||
syncLoading.value = false;
|
||||
}
|
||||
}
|
||||
|
||||
onMounted(async () => {
|
||||
onSearch();
|
||||
// 角色列表
|
||||
@@ -480,6 +502,8 @@ export function useUser(tableRef: Ref) {
|
||||
handleSizeChange,
|
||||
onSelectionCancel,
|
||||
handleCurrentChange,
|
||||
handleSelectionChange
|
||||
handleSelectionChange,
|
||||
syncLoading,
|
||||
handleSyncFeishuUsers
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user