"use client" import { getUserList, userEditById } from "@/components/label/api/user" import { User } from "@/components/label/api/user/typing" import useAuth from "@/components/label/hooks/useAuth" import { useAllUserStore } from "@/components/label/store/auth" import { ActionIcon, Badge, Button, Group, Paper, Stack, Text, TextInput, } from "@mantine/core" import { modals } from "@mantine/modals" import { notifications } from "@mantine/notifications" import { IconEdit, IconPlus, IconRefresh, IconSearch, IconUpload } from "@tabler/icons-react" import { DataTable, DataTableColumn } from "mantine-datatable" import { useCallback, useEffect, useMemo, useState } from "react" import CreateUserModal from "./components/CreateUserModal" import EditUserModal from "./components/EditUserModal" import ImportModal from "./components/ImportModal" export default function TeamEmployeePage() { const { isShow } = useAuth() const setFlag = useAllUserStore((s) => s.setFlag) const [name, setName] = useState("") const [appliedName, setAppliedName] = useState("") const [records, setRecords] = useState([]) const [loading, setLoading] = useState(false) const [totalItems, setTotalItems] = useState(0) const [page, setPage] = useState(1) const [pageSize, setPageSize] = useState(20) const [createOpened, setCreateOpened] = useState(false) const [editOpened, setEditOpened] = useState(false) const [importOpened, setImportOpened] = useState(false) const [selectedUser, setSelectedUser] = useState(null) const load = useCallback(async () => { try { setLoading(true) const params: User.ListRequest = { page_number: page, page_size: pageSize, } if (appliedName.trim()) params.name = appliedName.trim() const res = await getUserList(params) setRecords(res?.user_list ?? []) setTotalItems(res?.total_items ?? 0) } catch (e) { setRecords([]) setTotalItems(0) notifications.show({ color: "red", title: "加载失败", message: e instanceof Error ? e.message : "请求失败", }) } finally { setLoading(false) } }, [appliedName, page, pageSize]) useEffect(() => { queueMicrotask(load) }, [load]) const columns = useMemo(() => { const cols: DataTableColumn[] = [ { accessor: "uid", title: "UID", width: 120, textAlign: "center" }, { accessor: "name", title: "姓名", width: 120, textAlign: "center" }, { accessor: "work_status", title: "状态", width: 100, textAlign: "center", render: (record) => record.work_status === 1 ? ( 在职 ) : ( 离职 ), }, { accessor: "group_name", title: "组织", width: 180, textAlign: "center", }, { accessor: "base_city", title: "所在地", width: 180, textAlign: "center", }, { accessor: "operation", title: "操作", width: 220, textAlign: "center", render: (record) => ( {isShow("edit") ? ( ) : null} {isShow("edit") ? ( { setSelectedUser(record) setEditOpened(true) }}> ) : null} ), }, ] return cols }, [isShow]) return ( setName(e.currentTarget.value)} /> {isShow("add") ? ( ) : null} {isShow("add") ? ( ) : null} withTableBorder withRowBorders fetching={loading} records={records} columns={columns} noRecordsText="暂无数据" totalRecords={totalItems} recordsPerPage={pageSize} page={page} onPageChange={setPage} onRecordsPerPageChange={(v) => { setPageSize(v) setPage(1) }} recordsPerPageOptions={[10, 20, 50, 100]} scrollAreaProps={{ type: "auto" }} style={{ width: "100%" }} /> { setCreateOpened(false) if (refresh) { setFlag(true) load() } }} /> { setImportOpened(false) if (refresh) { setFlag(true) load() } }} /> { setEditOpened(false) setSelectedUser(null) if (refresh) { setFlag(true) load() } }} /> ) }