import React, { useState, useEffect } from 'react'; import { Button, Table, Space, Form, Input, Select, message, Modal, Card, Row, Col, Typography, Tag, DatePicker } from 'antd'; import { useQuery, } from '@tanstack/react-query'; import dayjs from 'dayjs'; import 'dayjs/locale/zh-cn'; import type { ZichanInfo, ZichanTransLog } from '../share/monitorTypes.ts'; import { AssetTransferType, AssetTransferTypeNameMap, AssetTransferTypeColorMap, } from '../share/monitorTypes.ts'; import { ZichanAPI, ZichanTransferAPI } from './api/index.ts'; import { getEnumOptions } from './utils.ts'; const { Title } = Typography; // 资产流转管理页面 export const ZichanTransferPage = () => { const [form] = Form.useForm(); const [formMode, setFormMode] = useState<'create' | 'edit'>('create'); const [editingId, setEditingId] = useState(null); const [modalVisible, setModalVisible] = useState(false); const [isLoading, setIsLoading] = useState(false); const [zichanOptions, setZichanOptions] = useState<{ label: string, value: number }[]>([]); const [searchParams, setSearchParams] = useState({ page: 1, limit: 10, asset_id: undefined as number | undefined, asset_transfer: undefined as AssetTransferType | undefined }); // 资产流转类型选项 const transferTypeOptions = getEnumOptions(AssetTransferType, AssetTransferTypeNameMap); // 获取资产列表用于下拉选择 useEffect(() => { const fetchZichanList = async () => { try { const result = await ZichanAPI.getZichanList({ limit: 100 }); const options = result.data.map((item: ZichanInfo) => ({ label: `${item.asset_name} (ID:${item.id})`, value: item.id })); setZichanOptions(options); } catch (error) { console.error('获取资产列表失败', error); } }; fetchZichanList(); }, []); // 查询资产流转记录列表 const { data: transferResult = { data: [], pagination: { total: 0, current: 1, pageSize: 10 } }, isLoading: isFetching, refetch } = useQuery({ queryKey: ['zichan-transfer', searchParams], queryFn: () => ZichanTransferAPI.getTransferList(searchParams), }); // 提取数据和分页信息 const transferList = transferResult.data || []; const pagination = transferResult.pagination || { total: 0, current: 1, pageSize: 10 }; // 处理表单提交 const handleSubmit = async (values: Partial) => { try { setIsLoading(true); // 创建一个新的对象以避免修改原始值 const submitData = { ...values }; // 处理流转时间格式 if (submitData.transfer_time && dayjs.isDayjs(submitData.transfer_time)) { // 使用字符串格式,确保后端可以正确处理 submitData.transfer_time = (submitData.transfer_time as any).format('YYYY-MM-DD HH:mm:ss'); } if (formMode === 'create') { await ZichanTransferAPI.createTransfer(submitData); message.success('资产流转记录创建成功'); } else { if (editingId) { await ZichanTransferAPI.updateTransfer(editingId, submitData); message.success('资产流转记录更新成功'); } } setModalVisible(false); refetch(); } catch (error: any) { message.error(error.response?.data?.error || '操作失败'); } finally { setIsLoading(false); } }; // 处理编辑 const handleEdit = async (id: number) => { try { setIsLoading(true); const data = await ZichanTransferAPI.getTransfer(id); // 处理日期格式 if (data.transfer_time) { // 使用dayjs解析时间,确保传入字符串 data.transfer_time = dayjs(String(data.transfer_time)); } form.setFieldsValue(data); setEditingId(id); setFormMode('edit'); setModalVisible(true); } catch (error: any) { message.error(error.response?.data?.error || '获取资产流转记录详情失败'); } finally { setIsLoading(false); } }; // 处理删除 const handleDelete = async (id: number) => { try { await ZichanTransferAPI.deleteTransfer(id); message.success('资产流转记录删除成功'); refetch(); } catch (error: any) { message.error(error.response?.data?.error || '删除资产流转记录失败'); } }; // 处理搜索 const handleSearch = (values: any) => { setSearchParams({ ...searchParams, page: 1, // 重置为第一页 asset_id: values.asset_id, asset_transfer: values.asset_transfer }); }; // 处理页码变化 const handlePageChange = (page: number, pageSize?: number) => { setSearchParams({ ...searchParams, page, limit: pageSize || 10 }); }; // 处理新增 const handleAdd = () => { form.resetFields(); form.setFieldsValue({ transfer_time: dayjs() // 默认设置为当前时间 }); setFormMode('create'); setEditingId(null); setModalVisible(true); }; // 表格列定义 const columns = [ { title: 'ID', dataIndex: 'id', key: 'id', width: 80 }, { title: '资产', dataIndex: 'asset_id', key: 'asset_id', render: (asset_id: number, record: ZichanTransLog) => { return record.asset_info ? record.asset_info.asset_name : `资产ID: ${asset_id}`; } }, { title: '流转类型', dataIndex: 'asset_transfer', key: 'asset_transfer', render: (type: AssetTransferType) => { return {AssetTransferTypeNameMap[type] || '未知类型'} ; } }, { title: '人员', dataIndex: 'person', key: 'person' }, { title: '部门', dataIndex: 'department', key: 'department' }, { title: '联系电话', dataIndex: 'phone', key: 'phone' }, { title: '流转事由', dataIndex: 'transfer_reason', key: 'transfer_reason', ellipsis: true }, { title: '流转时间', dataIndex: 'transfer_time', key: 'transfer_time', render: (date: string) => date ? dayjs(date).format('YYYY-MM-DD HH:mm:ss') : '-' }, { title: '操作', key: 'action', width: 200, render: (_: any, record: ZichanTransLog) => ( ) } ]; return (
资产流转管理
`共 ${total} 条记录` }} /> setModalVisible(false)} footer={null} width={720} >
); };