import React, { useState, useEffect } from 'react'; import { Layout, Menu, Button, Table, Space, Form, Input, Select, TreeSelect, message, Modal, Card, Spin, Row, Col, Breadcrumb, Avatar, Dropdown, ConfigProvider, theme, Typography, Switch, Badge, Image, Upload, Divider, Descriptions, Popconfirm, Tag, Statistic, DatePicker, Radio, Progress, Tabs, List, Alert, Collapse, Empty, Drawer, Tree } from 'antd'; import 'dayjs/locale/zh-cn'; import { organizationAPI, } from './api.ts'; import type { Organization } from '../share/types.ts'; const { Title } = Typography; // 系统管理页面 - 机构管理 export const OrganizationPage = () => { const [organizations, setOrganizations] = useState([]); const [treeData, setTreeData] = useState([]); const [loading, setLoading] = useState(false); const [modalVisible, setModalVisible] = useState(false); const [currentOrg, setCurrentOrg] = useState(null); const [form] = Form.useForm(); // 加载机构数据 useEffect(() => { loadOrganizations(); }, []); const loadOrganizations = async () => { setLoading(true); try { const res = await organizationAPI.getOrganizations(); setTreeData(res.data); // 将树形数据转换为扁平列表 const flattenOrganizations = flattenTree(res.data); setOrganizations(flattenOrganizations); } catch (err) { message.error('加载机构数据失败'); console.error(err); } finally { setLoading(false); } }; // 树形数据扁平化 // 转换Organization为TreeSelect需要的格式 const convertToTreeData = (orgs: Organization[]): Array<{value: string; title: string; children?: any}> => { return orgs.map(org => ({ value: String(org.id), title: org.name, children: org.children ? convertToTreeData(org.children) : undefined, ...org })); }; const flattenTree = (tree: Organization[]): Organization[] => { return tree.reduce((acc, node) => { acc.push({ id: node.id, name: node.name, code: node.code, parentId: node.parentId, description: node.description }); if (node.children) { acc.push(...flattenTree(node.children)); } return acc; }, [] as Organization[]); }; // 打开创建机构弹窗 const handleCreate = () => { setCurrentOrg(null); setModalVisible(true); form.resetFields(); }; // 打开编辑机构弹窗 const handleEdit = (record: Organization) => { setCurrentOrg(record); setModalVisible(true); form.setFieldsValue(record); }; // 删除机构 const handleDelete = async (id: number) => { Modal.confirm({ title: '确认删除', content: '确定要删除该机构吗?', onOk: async () => { try { await organizationAPI.deleteOrganization(id); message.success('删除成功'); loadOrganizations(); } catch (err) { message.error('删除失败'); } } }); }; // 提交表单 const handleSubmit = async () => { try { const values = await form.validateFields(); if (currentOrg?.id) { // 更新机构 await organizationAPI.updateOrganization(currentOrg.id, values); message.success('更新成功'); } else { // 创建机构 await organizationAPI.createOrganization(values); message.success('创建成功'); } setModalVisible(false); loadOrganizations(); } catch (err) { console.error(err); } }; const columns = [ { title: '机构名称', dataIndex: 'name', key: 'name', }, { title: '机构编码', dataIndex: 'code', key: 'code', }, { title: '描述', dataIndex: 'description', key: 'description', }, { title: '操作', key: 'action', render: (_: any, record: any) => ( ), }, ]; return (
机构管理
{ const org = organizations.find(o => o.id === value); if (org) handleEdit(org); }} /> {/* 新增/编辑弹窗 */} setModalVisible(false)} confirmLoading={loading} >
); };