import { useState, useEffect } from 'react'; import { Table, Button, Tag, notification, Card, Popconfirm, Form, Input, Select, Avatar, Drawer, DatePicker } from 'antd'; import { getUserDataAPI, getUserListAPI, delUserDataAPI, addUserDataAPI, editUserDataAPI } from '@/api/User'; import { getRoleListAPI } from '@/api/Role' import type { FilterForm, FilterUser, User } from '@/types/app/user'; import { Role } from '@/types/app/role'; import { useUserStore } from '@/stores' import { titleSty } from '@/styles/sty'; import Title from '@/components/Title'; import logo from '@/images/logo/logo.png'; import dayjs from 'dayjs'; export default () => { const [loading, setLoading] = useState(false); const [btnLoading, setBtnLoading] = useState(false) const [editLoading, setEditLoading] = useState(false) const [form] = Form.useForm(); const store = useUserStore() const [userList, setUserList] = useState([]); const [roleList, setRoleList] = useState([]); const [user, setUser] = useState({} as User) const [drawerVisible, setDrawerVisible] = useState(false); const { RangePicker } = DatePicker; const columns = [ { title: 'ID', dataIndex: 'id', key: 'id', align: 'center', width: 100, }, { title: '头像', dataIndex: 'avatar', key: 'avatar', align: 'center', width: 150, render: (url: string) => url ? : , }, { title: '名称', dataIndex: 'name', key: 'name', align: 'center', width: 200, sorter: (a: User, b: User) => a.name.length - b.name.length, showSorterTooltip: false }, { title: '介绍', dataIndex: 'info', key: 'info', align: 'center', render: (text: string) => text ? text : '暂无介绍', }, { title: '用户名', dataIndex: 'username', key: 'username', align: 'center', width: 200 }, { title: '邮箱', dataIndex: 'email', key: 'email', align: 'center', render: (text: string) => text ? text : '暂无邮箱', }, { title: '角色', dataIndex: 'role', key: 'role', align: 'center', render: (role: Role) => {role.name}, }, { title: '创建时间', dataIndex: 'createTime', key: 'createTime', align: 'center', width: 200, render: (text: string) => dayjs(+text).format('YYYY-MM-DD HH:mm:ss'), sorter: (a: User, b: User) => +a.createTime! - +b.createTime!, showSorterTooltip: false }, { title: '操作', key: 'action', fixed: 'right', align: 'center', render: (text: string, record: User) => (
delUserData(record.id!)}>
), }, ]; const getUserList = async () => { try { setLoading(true); const { data } = await getUserListAPI(); setUserList(data as User[]); setLoading(false); } catch (error) { setLoading(false); } }; const getRoleList = async () => { const { data } = await getRoleListAPI(); setRoleList(data); }; useEffect(() => { getUserList(); getRoleList() }, []); const delUserData = async (id: number) => { try { setLoading(true); await delUserDataAPI(id); await getUserList(); notification.success({ message: '🎉 删除用户成功' }); } catch (error) { setLoading(false); } }; const editUserData = async (id: number) => { try { setEditLoading(true); setDrawerVisible(true); const { data } = await getUserDataAPI(id) setUser(data); form.setFieldsValue(data); setEditLoading(false); } catch (error) { setEditLoading(false); } }; const reset = () => { setUser({} as User) form.resetFields() } const onSubmit = async () => { try { setBtnLoading(true) form.validateFields().then(async (values: User) => { if (user.id) { await editUserDataAPI({ ...user, ...values }); notification.success({ message: '🎉 编辑用户成功' }); } else { await addUserDataAPI({ ...values, password: "123456", createTime: new Date().getTime().toString() }); notification.success({ message: '🎉 创建用户成功' }); } await getUserList(); setDrawerVisible(false); reset() }) setBtnLoading(false) } catch (error) { setBtnLoading(false) } }; const onFilterSubmit = async (values: FilterForm) => { try { setLoading(true) const query: FilterUser = { key: values.name, roleId: values.role, startDate: values.createTime && values.createTime[0].valueOf() + '', endDate: values.createTime && values.createTime[1].valueOf() + '' } const { data } = await getUserListAPI({ query }); setUserList(data); setLoading(false) } catch (error) { setLoading(false) } } return (
<Button type="primary" size='large' onClick={() => setDrawerVisible(true)}>新增用户</Button>