import React, { useEffect, useState } from 'react'; import { Table, Button, Modal, Form, Input, Space, message, Switch, DatePicker, Card, Row, Col } from 'antd'; import { PlusOutlined, EditOutlined, DeleteOutlined, SearchOutlined, ReloadOutlined } from '@ant-design/icons'; import type { TenantDTO, TenantQuery } from './types'; import { getTenants, createTenant, updateTenant, deleteTenant } from './service'; import dayjs from 'dayjs'; const TenantPage: React.FC = () => { const [tenants, setTenants] = useState([]); const [modalVisible, setModalVisible] = useState(false); const [editingTenant, setEditingTenant] = useState(null); const [loading, setLoading] = useState(false); const [form] = Form.useForm(); const [searchForm] = Form.useForm(); const fetchTenants = async (params?: TenantQuery) => { try { setLoading(true); const data = await getTenants(params); setTenants(data || []); } catch (error) { console.error('获取租户列表失败:', error); message.error('获取租户列表失败'); } finally { setLoading(false); } }; useEffect(() => { fetchTenants(); }, []); const handleSearch = async () => { const values = await searchForm.validateFields(); fetchTenants(values); }; const handleReset = () => { searchForm.resetFields(); fetchTenants(); }; const handleAdd = () => { setEditingTenant(null); form.resetFields(); form.setFieldsValue({ enabled: true }); setModalVisible(true); }; const handleEdit = (record: TenantDTO) => { setEditingTenant(record); form.setFieldsValue({ ...record, expireTime: record.expireTime ? dayjs(record.expireTime) : undefined }); setModalVisible(true); }; const handleDelete = async (id: number) => { Modal.confirm({ title: '确认删除', content: '确定要删除这个租户吗?删除后不可恢复!', onOk: async () => { try { await deleteTenant(id); message.success('删除成功'); fetchTenants(); } catch (error) { message.error('删除失败'); } }, }); }; const handleSubmit = async () => { try { const values = await form.validateFields(); if (editingTenant) { await updateTenant(editingTenant.id, { ...values, expireTime: values.expireTime?.format('YYYY-MM-DD HH:mm:ss'), version: editingTenant.version }); message.success('更新成功'); } else { await createTenant({ ...values, expireTime: values.expireTime?.format('YYYY-MM-DD HH:mm:ss') }); message.success('创建成功'); } setModalVisible(false); fetchTenants(); } catch (error) { message.error('操作失败'); } }; const columns = [ { title: '租户名称', dataIndex: 'name', key: 'name', width: '15%', }, { title: '租户编码', dataIndex: 'code', key: 'code', width: '10%', }, { title: '联系人', dataIndex: 'contactName', key: 'contactName', width: '10%', }, { title: '联系电话', dataIndex: 'contactPhone', key: 'contactPhone', width: '12%', }, { title: '邮箱', dataIndex: 'email', key: 'email', width: '15%', }, { title: '状态', dataIndex: 'enabled', key: 'enabled', width: '8%', render: (enabled: boolean) => ( ), }, { title: '操作', key: 'action', render: (_: any, record: TenantDTO) => ( ), }, ]; return (
setModalVisible(false)} width={600} destroyOnClose >
); }; export default TenantPage;