MemberManagement.tsx 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. import React, { useState, useEffect } from 'react';
  2. import { Button, Spin, Input, message } from 'antd';
  3. import MemberList from '../components/member/MemberList';
  4. import MemberModal from '../components/member/MemberModal';
  5. import { useMemberManagement } from '../hooks/useMemberManagement';
  6. import { Member } from '../types/member';
  7. const { Search } = Input;
  8. const MemberManagement: React.FC = () => {
  9. const {
  10. members,
  11. loading,
  12. addMember,
  13. editMember,
  14. deleteMember,
  15. fetchMembers
  16. } = useMemberManagement();
  17. const [isModalVisible, setIsModalVisible] = useState(false);
  18. const [editingMember, setEditingMember] = useState<Member | null>(null);
  19. const [searchTerm, setSearchTerm] = useState('');
  20. useEffect(() => {
  21. fetchMembers();
  22. }, [fetchMembers]);
  23. useEffect(() => {
  24. console.log('Members:', members);
  25. }, [members]);
  26. const showModal = () => {
  27. setEditingMember(null);
  28. setIsModalVisible(true);
  29. };
  30. const handleEdit = (member: Member) => {
  31. console.log('Editing member:', member);
  32. setEditingMember(member);
  33. setIsModalVisible(true);
  34. };
  35. const handleOk = async (member: Member) => {
  36. try {
  37. if (editingMember) {
  38. await editMember({ ...editingMember, ...member });
  39. } else {
  40. await addMember(member);
  41. }
  42. setIsModalVisible(false);
  43. message.success(editingMember ? '会友信息更新成功' : '会友添加成功');
  44. fetchMembers(); // 重新获取会友列表
  45. } catch (error) {
  46. message.error('操作失败,请重试');
  47. }
  48. };
  49. const handleCancel = () => {
  50. setIsModalVisible(false);
  51. setEditingMember(null);
  52. };
  53. const handleSearch = (value: string) => {
  54. setSearchTerm(value);
  55. };
  56. const handleDelete = async (memberId: string) => {
  57. try {
  58. await deleteMember(memberId);
  59. message.success('会友删除成功');
  60. fetchMembers(); // 重新获取会友列表
  61. } catch (error) {
  62. message.error('删除失败,请重试');
  63. }
  64. };
  65. const filteredMembers = members.filter(member =>
  66. member.name.toLowerCase().includes(searchTerm.toLowerCase()) ||
  67. member.phone.includes(searchTerm) ||
  68. member.idNumber.includes(searchTerm)
  69. );
  70. return (
  71. <div>
  72. <h1>会友管理</h1>
  73. <div style={{ marginBottom: 16, display: 'flex', justifyContent: 'space-between' }}>
  74. <Button type="primary" onClick={showModal}>
  75. 添加会友
  76. </Button>
  77. <Search
  78. placeholder="搜索姓名、手机号或身份证号"
  79. onSearch={handleSearch}
  80. style={{ width: 300 }}
  81. />
  82. </div>
  83. {loading ? (
  84. <Spin size="large" />
  85. ) : (
  86. <MemberList
  87. members={filteredMembers}
  88. onEdit={handleEdit}
  89. onDelete={handleDelete}
  90. />
  91. )}
  92. <MemberModal
  93. visible={isModalVisible}
  94. onOk={handleOk}
  95. onCancel={handleCancel}
  96. initialValues={editingMember}
  97. />
  98. </div>
  99. );
  100. }
  101. export default MemberManagement;