{"ast":null,"code":"var _jsxFileName = \"/Users/nili/Documents/trae_projects/client/src/pages/Users.js\",\n  _s = $RefreshSig$();\nimport React, { useState, useEffect } from 'react';\nimport { Table, Card, Button, Space, Tag, Input, Select, Modal, Form, message, Popconfirm, Row, Col } from 'antd';\nimport { PlusOutlined, EditOutlined, DeleteOutlined, LockOutlined } from '@ant-design/icons';\nimport { usersAPI } from '../services/api';\nimport { useAuth } from '../contexts/AuthContext';\nimport dayjs from 'dayjs';\nimport { jsxDEV as _jsxDEV, Fragment as _Fragment } from \"react/jsx-dev-runtime\";\nconst {\n  Option\n} = Select;\nconst Users = () => {\n  _s();\n  const [users, setUsers] = useState([]);\n  const [loading, setLoading] = useState(false);\n  const [pagination, setPagination] = useState({\n    current: 1,\n    pageSize: 20,\n    total: 0\n  });\n  const [filters, setFilters] = useState({});\n  const {\n    user: currentUser\n  } = useAuth();\n  useEffect(() => {\n    fetchUsers();\n  }, [pagination.current, pagination.pageSize, filters]);\n  const fetchUsers = async () => {\n    setLoading(true);\n    try {\n      const response = await usersAPI.getAll({\n        page: pagination.current,\n        limit: pagination.pageSize,\n        ...filters\n      });\n      setUsers(response.data.users);\n      setPagination(prev => {\n        var _response$data$pagina;\n        return {\n          ...prev,\n          total: ((_response$data$pagina = response.data.pagination) === null || _response$data$pagina === void 0 ? void 0 : _response$data$pagina.total) || 0\n        };\n      });\n    } catch (error) {\n      message.error('获取用户列表失败');\n    } finally {\n      setLoading(false);\n    }\n  };\n  const handleDelete = async id => {\n    try {\n      await usersAPI.delete(id);\n      message.success('用户删除成功');\n      fetchUsers();\n    } catch (error) {\n      var _error$response, _error$response$data;\n      message.error(((_error$response = error.response) === null || _error$response === void 0 ? void 0 : (_error$response$data = _error$response.data) === null || _error$response$data === void 0 ? void 0 : _error$response$data.message) || '删除失败');\n    }\n  };\n  const getRoleColor = role => {\n    const colors = {\n      admin: 'red',\n      investment_manager: 'blue',\n      analyst: 'purple',\n      user: 'default'\n    };\n    return colors[role] || 'default';\n  };\n  const getRoleText = role => {\n    const texts = {\n      admin: '超级管理员',\n      investment_manager: '投资经理',\n      analyst: '分析师',\n      user: '普通用户'\n    };\n    return texts[role] || role;\n  };\n  const columns = [{\n    title: '用户名',\n    dataIndex: 'username',\n    key: 'username'\n  }, {\n    title: '姓名',\n    dataIndex: 'full_name',\n    key: 'full_name'\n  }, {\n    title: '邮箱',\n    dataIndex: 'email',\n    key: 'email'\n  }, {\n    title: '电话',\n    dataIndex: 'phone',\n    key: 'phone'\n  }, {\n    title: '部门',\n    dataIndex: 'department',\n    key: 'department'\n  }, {\n    title: '角色',\n    dataIndex: 'role',\n    key: 'role',\n    render: role => /*#__PURE__*/_jsxDEV(Tag, {\n      color: getRoleColor(role),\n      children: getRoleText(role)\n    }, void 0, false, {\n      fileName: _jsxFileName,\n      lineNumber: 91,\n      columnNumber: 25\n    }, this)\n  }, {\n    title: '状态',\n    dataIndex: 'is_active',\n    key: 'is_active',\n    render: active => /*#__PURE__*/_jsxDEV(Tag, {\n      color: active ? 'green' : 'red',\n      children: active ? '启用' : '禁用'\n    }, void 0, false, {\n      fileName: _jsxFileName,\n      lineNumber: 97,\n      columnNumber: 27\n    }, this)\n  }, {\n    title: '创建时间',\n    dataIndex: 'created_at',\n    key: 'created_at',\n    render: date => dayjs(date).format('YYYY-MM-DD')\n  }, {\n    title: '操作',\n    key: 'actions',\n    render: (_, record) => /*#__PURE__*/_jsxDEV(Space, {\n      children: [/*#__PURE__*/_jsxDEV(Button, {\n        type: \"link\",\n        size: \"small\",\n        icon: /*#__PURE__*/_jsxDEV(EditOutlined, {}, void 0, false, {\n          fileName: _jsxFileName,\n          lineNumber: 110,\n          columnNumber: 50\n        }, this),\n        onClick: () => openEditModal(record),\n        children: \"\\u7F16\\u8F91\"\n      }, void 0, false, {\n        fileName: _jsxFileName,\n        lineNumber: 110,\n        columnNumber: 11\n      }, this), record.id !== (currentUser === null || currentUser === void 0 ? void 0 : currentUser.id) && /*#__PURE__*/_jsxDEV(Popconfirm, {\n        title: \"\\u786E\\u5B9A\\u8981\\u5220\\u9664\\u8FD9\\u4E2A\\u7528\\u6237\\u5417?\",\n        onConfirm: () => handleDelete(record.id),\n        children: /*#__PURE__*/_jsxDEV(Button, {\n          type: \"link\",\n          size: \"small\",\n          danger: true,\n          icon: /*#__PURE__*/_jsxDEV(DeleteOutlined, {}, void 0, false, {\n            fileName: _jsxFileName,\n            lineNumber: 115,\n            columnNumber: 61\n          }, this),\n          children: \"\\u5220\\u9664\"\n        }, void 0, false, {\n          fileName: _jsxFileName,\n          lineNumber: 115,\n          columnNumber: 15\n        }, this)\n      }, void 0, false, {\n        fileName: _jsxFileName,\n        lineNumber: 114,\n        columnNumber: 13\n      }, this)]\n    }, void 0, true, {\n      fileName: _jsxFileName,\n      lineNumber: 109,\n      columnNumber: 9\n    }, this)\n  }];\n  const [modalVisible, setModalVisible] = useState(false);\n  const [editingUser, setEditingUser] = useState(null);\n  const [form] = Form.useForm();\n  const openCreateModal = () => {\n    setEditingUser(null);\n    form.resetFields();\n    setModalVisible(true);\n  };\n  const openEditModal = user => {\n    setEditingUser(user);\n    form.setFieldsValue({\n      ...user,\n      fullName: user.full_name,\n      isActive: user.is_active === 1\n    });\n    setModalVisible(true);\n  };\n  const handleModalOk = async () => {\n    try {\n      const values = await form.validateFields();\n      if (editingUser) {\n        await usersAPI.update(editingUser.id, values);\n        message.success('用户更新成功');\n      } else {\n        await usersAPI.create(values);\n        message.success('用户创建成功');\n      }\n      setModalVisible(false);\n      fetchUsers();\n    } catch (error) {\n      var _error$response2, _error$response2$data;\n      message.error(((_error$response2 = error.response) === null || _error$response2 === void 0 ? void 0 : (_error$response2$data = _error$response2.data) === null || _error$response2$data === void 0 ? void 0 : _error$response2$data.message) || '操作失败');\n    }\n  };\n  return /*#__PURE__*/_jsxDEV(\"div\", {\n    children: [/*#__PURE__*/_jsxDEV(\"div\", {\n      className: \"page-header\",\n      children: /*#__PURE__*/_jsxDEV(\"h1\", {\n        children: \"\\u7528\\u6237\\u7BA1\\u7406\"\n      }, void 0, false, {\n        fileName: _jsxFileName,\n        lineNumber: 165,\n        columnNumber: 9\n      }, this)\n    }, void 0, false, {\n      fileName: _jsxFileName,\n      lineNumber: 164,\n      columnNumber: 7\n    }, this), /*#__PURE__*/_jsxDEV(Card, {\n      children: [/*#__PURE__*/_jsxDEV(\"div\", {\n        className: \"filter-bar\",\n        children: /*#__PURE__*/_jsxDEV(Row, {\n          gutter: 16,\n          children: [/*#__PURE__*/_jsxDEV(Col, {\n            span: 6,\n            children: /*#__PURE__*/_jsxDEV(Input, {\n              placeholder: \"\\u641C\\u7D22\\u7528\\u6237\\u540D\\u3001\\u59D3\\u540D\\u6216\\u90AE\\u7BB1\",\n              onPressEnter: e => setFilters(prev => ({\n                ...prev,\n                search: e.target.value\n              })),\n              allowClear: true\n            }, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 172,\n              columnNumber: 15\n            }, this)\n          }, void 0, false, {\n            fileName: _jsxFileName,\n            lineNumber: 171,\n            columnNumber: 13\n          }, this), /*#__PURE__*/_jsxDEV(Col, {\n            span: 4,\n            children: /*#__PURE__*/_jsxDEV(Select, {\n              placeholder: \"\\u89D2\\u8272\",\n              allowClear: true,\n              style: {\n                width: '100%'\n              },\n              onChange: value => setFilters(prev => ({\n                ...prev,\n                role: value\n              })),\n              children: [/*#__PURE__*/_jsxDEV(Option, {\n                value: \"admin\",\n                children: \"\\u8D85\\u7EA7\\u7BA1\\u7406\\u5458\"\n              }, void 0, false, {\n                fileName: _jsxFileName,\n                lineNumber: 185,\n                columnNumber: 17\n              }, this), /*#__PURE__*/_jsxDEV(Option, {\n                value: \"investment_manager\",\n                children: \"\\u6295\\u8D44\\u7ECF\\u7406\"\n              }, void 0, false, {\n                fileName: _jsxFileName,\n                lineNumber: 186,\n                columnNumber: 17\n              }, this), /*#__PURE__*/_jsxDEV(Option, {\n                value: \"analyst\",\n                children: \"\\u5206\\u6790\\u5E08\"\n              }, void 0, false, {\n                fileName: _jsxFileName,\n                lineNumber: 187,\n                columnNumber: 17\n              }, this), /*#__PURE__*/_jsxDEV(Option, {\n                value: \"user\",\n                children: \"\\u666E\\u901A\\u7528\\u6237\"\n              }, void 0, false, {\n                fileName: _jsxFileName,\n                lineNumber: 188,\n                columnNumber: 17\n              }, this)]\n            }, void 0, true, {\n              fileName: _jsxFileName,\n              lineNumber: 179,\n              columnNumber: 15\n            }, this)\n          }, void 0, false, {\n            fileName: _jsxFileName,\n            lineNumber: 178,\n            columnNumber: 13\n          }, this), /*#__PURE__*/_jsxDEV(Col, {\n            span: 14,\n            style: {\n              textAlign: 'right'\n            },\n            children: /*#__PURE__*/_jsxDEV(Button, {\n              type: \"primary\",\n              icon: /*#__PURE__*/_jsxDEV(PlusOutlined, {}, void 0, false, {\n                fileName: _jsxFileName,\n                lineNumber: 192,\n                columnNumber: 44\n              }, this),\n              onClick: openCreateModal,\n              children: \"\\u65B0\\u5EFA\\u7528\\u6237\"\n            }, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 192,\n              columnNumber: 15\n            }, this)\n          }, void 0, false, {\n            fileName: _jsxFileName,\n            lineNumber: 191,\n            columnNumber: 13\n          }, this)]\n        }, void 0, true, {\n          fileName: _jsxFileName,\n          lineNumber: 170,\n          columnNumber: 11\n        }, this)\n      }, void 0, false, {\n        fileName: _jsxFileName,\n        lineNumber: 169,\n        columnNumber: 9\n      }, this), /*#__PURE__*/_jsxDEV(Table, {\n        columns: columns,\n        dataSource: users,\n        rowKey: \"id\",\n        loading: loading,\n        pagination: {\n          ...pagination,\n          showSizeChanger: true,\n          showQuickJumper: true,\n          showTotal: total => `共 ${total} 条`,\n          onChange: (page, pageSize) => setPagination(prev => ({\n            ...prev,\n            current: page,\n            pageSize\n          }))\n        }\n      }, void 0, false, {\n        fileName: _jsxFileName,\n        lineNumber: 199,\n        columnNumber: 9\n      }, this)]\n    }, void 0, true, {\n      fileName: _jsxFileName,\n      lineNumber: 168,\n      columnNumber: 7\n    }, this), /*#__PURE__*/_jsxDEV(Modal, {\n      title: editingUser ? '编辑用户' : '新建用户',\n      open: modalVisible,\n      onOk: handleModalOk,\n      onCancel: () => setModalVisible(false),\n      width: 600,\n      children: /*#__PURE__*/_jsxDEV(Form, {\n        form: form,\n        layout: \"vertical\",\n        children: [!editingUser && /*#__PURE__*/_jsxDEV(_Fragment, {\n          children: [/*#__PURE__*/_jsxDEV(Form.Item, {\n            name: \"username\",\n            label: \"\\u7528\\u6237\\u540D\",\n            rules: [{\n              required: true,\n              message: '请输入用户名'\n            }],\n            children: /*#__PURE__*/_jsxDEV(Input, {\n              placeholder: \"\\u8BF7\\u8F93\\u5165\\u7528\\u6237\\u540D\"\n            }, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 225,\n              columnNumber: 17\n            }, this)\n          }, void 0, false, {\n            fileName: _jsxFileName,\n            lineNumber: 224,\n            columnNumber: 15\n          }, this), /*#__PURE__*/_jsxDEV(Form.Item, {\n            name: \"password\",\n            label: \"\\u5BC6\\u7801\",\n            rules: [{\n              required: true,\n              message: '请输入密码'\n            }],\n            children: /*#__PURE__*/_jsxDEV(Input.Password, {\n              placeholder: \"\\u8BF7\\u8F93\\u5165\\u5BC6\\u7801\"\n            }, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 228,\n              columnNumber: 17\n            }, this)\n          }, void 0, false, {\n            fileName: _jsxFileName,\n            lineNumber: 227,\n            columnNumber: 15\n          }, this)]\n        }, void 0, true), /*#__PURE__*/_jsxDEV(Form.Item, {\n          name: \"fullName\",\n          label: \"\\u59D3\\u540D\",\n          rules: [{\n            required: true,\n            message: '请输入姓名'\n          }],\n          children: /*#__PURE__*/_jsxDEV(Input, {\n            placeholder: \"\\u8BF7\\u8F93\\u5165\\u59D3\\u540D\"\n          }, void 0, false, {\n            fileName: _jsxFileName,\n            lineNumber: 233,\n            columnNumber: 13\n          }, this)\n        }, void 0, false, {\n          fileName: _jsxFileName,\n          lineNumber: 232,\n          columnNumber: 11\n        }, this), /*#__PURE__*/_jsxDEV(Form.Item, {\n          name: \"email\",\n          label: \"\\u90AE\\u7BB1\",\n          rules: [{\n            required: true,\n            type: 'email',\n            message: '请输入有效的邮箱'\n          }],\n          children: /*#__PURE__*/_jsxDEV(Input, {\n            placeholder: \"\\u8BF7\\u8F93\\u5165\\u90AE\\u7BB1\"\n          }, void 0, false, {\n            fileName: _jsxFileName,\n            lineNumber: 236,\n            columnNumber: 13\n          }, this)\n        }, void 0, false, {\n          fileName: _jsxFileName,\n          lineNumber: 235,\n          columnNumber: 11\n        }, this), /*#__PURE__*/_jsxDEV(Row, {\n          gutter: 16,\n          children: [/*#__PURE__*/_jsxDEV(Col, {\n            span: 12,\n            children: /*#__PURE__*/_jsxDEV(Form.Item, {\n              name: \"phone\",\n              label: \"\\u7535\\u8BDD\",\n              children: /*#__PURE__*/_jsxDEV(Input, {\n                placeholder: \"\\u8BF7\\u8F93\\u5165\\u7535\\u8BDD\"\n              }, void 0, false, {\n                fileName: _jsxFileName,\n                lineNumber: 241,\n                columnNumber: 17\n              }, this)\n            }, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 240,\n              columnNumber: 15\n            }, this)\n          }, void 0, false, {\n            fileName: _jsxFileName,\n            lineNumber: 239,\n            columnNumber: 13\n          }, this), /*#__PURE__*/_jsxDEV(Col, {\n            span: 12,\n            children: /*#__PURE__*/_jsxDEV(Form.Item, {\n              name: \"department\",\n              label: \"\\u90E8\\u95E8\",\n              children: /*#__PURE__*/_jsxDEV(Input, {\n                placeholder: \"\\u8BF7\\u8F93\\u5165\\u90E8\\u95E8\"\n              }, void 0, false, {\n                fileName: _jsxFileName,\n                lineNumber: 246,\n                columnNumber: 17\n              }, this)\n            }, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 245,\n              columnNumber: 15\n            }, this)\n          }, void 0, false, {\n            fileName: _jsxFileName,\n            lineNumber: 244,\n            columnNumber: 13\n          }, this)]\n        }, void 0, true, {\n          fileName: _jsxFileName,\n          lineNumber: 238,\n          columnNumber: 11\n        }, this), /*#__PURE__*/_jsxDEV(Form.Item, {\n          name: \"role\",\n          label: \"\\u89D2\\u8272\",\n          rules: [{\n            required: true,\n            message: '请选择角色'\n          }],\n          initialValue: \"user\",\n          children: /*#__PURE__*/_jsxDEV(Select, {\n            placeholder: \"\\u8BF7\\u9009\\u62E9\\u89D2\\u8272\",\n            children: [/*#__PURE__*/_jsxDEV(Option, {\n              value: \"admin\",\n              children: \"\\u8D85\\u7EA7\\u7BA1\\u7406\\u5458\"\n            }, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 252,\n              columnNumber: 15\n            }, this), /*#__PURE__*/_jsxDEV(Option, {\n              value: \"investment_manager\",\n              children: \"\\u6295\\u8D44\\u7ECF\\u7406\"\n            }, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 253,\n              columnNumber: 15\n            }, this), /*#__PURE__*/_jsxDEV(Option, {\n              value: \"analyst\",\n              children: \"\\u5206\\u6790\\u5E08\"\n            }, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 254,\n              columnNumber: 15\n            }, this), /*#__PURE__*/_jsxDEV(Option, {\n              value: \"user\",\n              children: \"\\u666E\\u901A\\u7528\\u6237\"\n            }, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 255,\n              columnNumber: 15\n            }, this)]\n          }, void 0, true, {\n            fileName: _jsxFileName,\n            lineNumber: 251,\n            columnNumber: 13\n          }, this)\n        }, void 0, false, {\n          fileName: _jsxFileName,\n          lineNumber: 250,\n          columnNumber: 11\n        }, this), editingUser && /*#__PURE__*/_jsxDEV(Form.Item, {\n          name: \"isActive\",\n          label: \"\\u72B6\\u6001\",\n          valuePropName: \"checked\",\n          children: /*#__PURE__*/_jsxDEV(Select, {\n            children: [/*#__PURE__*/_jsxDEV(Option, {\n              value: true,\n              children: \"\\u542F\\u7528\"\n            }, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 261,\n              columnNumber: 17\n            }, this), /*#__PURE__*/_jsxDEV(Option, {\n              value: false,\n              children: \"\\u7981\\u7528\"\n            }, void 0, false, {\n              fileName: _jsxFileName,\n              lineNumber: 262,\n              columnNumber: 17\n            }, this)]\n          }, void 0, true, {\n            fileName: _jsxFileName,\n            lineNumber: 260,\n            columnNumber: 15\n          }, this)\n        }, void 0, false, {\n          fileName: _jsxFileName,\n          lineNumber: 259,\n          columnNumber: 13\n        }, this)]\n      }, void 0, true, {\n        fileName: _jsxFileName,\n        lineNumber: 221,\n        columnNumber: 9\n      }, this)\n    }, void 0, false, {\n      fileName: _jsxFileName,\n      lineNumber: 214,\n      columnNumber: 7\n    }, this)]\n  }, void 0, true, {\n    fileName: _jsxFileName,\n    lineNumber: 163,\n    columnNumber: 5\n  }, this);\n};\n_s(Users, \"lRBCWFQdThymKzrnPT3NU5SY/v0=\", false, function () {\n  return [useAuth, Form.useForm];\n});\n_c = Users;\nexport default Users;\nvar _c;\n$RefreshReg$(_c, \"Users\");","map":{"version":3,"names":["React","useState","useEffect","Table","Card","Button","Space","Tag","Input","Select","Modal","Form","message","Popconfirm","Row","Col","PlusOutlined","EditOutlined","DeleteOutlined","LockOutlined","usersAPI","useAuth","dayjs","jsxDEV","_jsxDEV","Fragment","_Fragment","Option","Users","_s","users","setUsers","loading","setLoading","pagination","setPagination","current","pageSize","total","filters","setFilters","user","currentUser","fetchUsers","response","getAll","page","limit","data","prev","_response$data$pagina","error","handleDelete","id","delete","success","_error$response","_error$response$data","getRoleColor","role","colors","admin","investment_manager","analyst","getRoleText","texts","columns","title","dataIndex","key","render","color","children","fileName","_jsxFileName","lineNumber","columnNumber","active","date","format","_","record","type","size","icon","onClick","openEditModal","onConfirm","danger","modalVisible","setModalVisible","editingUser","setEditingUser","form","useForm","openCreateModal","resetFields","setFieldsValue","fullName","full_name","isActive","is_active","handleModalOk","values","validateFields","update","create","_error$response2","_error$response2$data","className","gutter","span","placeholder","onPressEnter","e","search","target","value","allowClear","style","width","onChange","textAlign","dataSource","rowKey","showSizeChanger","showQuickJumper","showTotal","open","onOk","onCancel","layout","Item","name","label","rules","required","Password","initialValue","valuePropName","_c","$RefreshReg$"],"sources":["/Users/nili/Documents/trae_projects/client/src/pages/Users.js"],"sourcesContent":["import React, { useState, useEffect } from 'react';\nimport { Table, Card, Button, Space, Tag, Input, Select, Modal, Form, message, Popconfirm, Row, Col } from 'antd';\nimport { PlusOutlined, EditOutlined, DeleteOutlined, LockOutlined } from '@ant-design/icons';\nimport { usersAPI } from '../services/api';\nimport { useAuth } from '../contexts/AuthContext';\nimport dayjs from 'dayjs';\n\nconst { Option } = Select;\n\nconst Users = () => {\n  const [users, setUsers] = useState([]);\n  const [loading, setLoading] = useState(false);\n  const [pagination, setPagination] = useState({ current: 1, pageSize: 20, total: 0 });\n  const [filters, setFilters] = useState({});\n  const { user: currentUser } = useAuth();\n\n  useEffect(() => {\n    fetchUsers();\n  }, [pagination.current, pagination.pageSize, filters]);\n\n  const fetchUsers = async () => {\n    setLoading(true);\n    try {\n      const response = await usersAPI.getAll({\n        page: pagination.current,\n        limit: pagination.pageSize,\n        ...filters\n      });\n      setUsers(response.data.users);\n      setPagination(prev => ({\n        ...prev,\n        total: response.data.pagination?.total || 0\n      }));\n    } catch (error) {\n      message.error('获取用户列表失败');\n    } finally {\n      setLoading(false);\n    }\n  };\n\n  const handleDelete = async (id) => {\n    try {\n      await usersAPI.delete(id);\n      message.success('用户删除成功');\n      fetchUsers();\n    } catch (error) {\n      message.error(error.response?.data?.message || '删除失败');\n    }\n  };\n\n  const getRoleColor = (role) => {\n    const colors = { admin: 'red', investment_manager: 'blue', analyst: 'purple', user: 'default' };\n    return colors[role] || 'default';\n  };\n\n  const getRoleText = (role) => {\n    const texts = { admin: '超级管理员', investment_manager: '投资经理', analyst: '分析师', user: '普通用户' };\n    return texts[role] || role;\n  };\n\n  const columns = [\n    {\n      title: '用户名',\n      dataIndex: 'username',\n      key: 'username'\n    },\n    {\n      title: '姓名',\n      dataIndex: 'full_name',\n      key: 'full_name'\n    },\n    {\n      title: '邮箱',\n      dataIndex: 'email',\n      key: 'email'\n    },\n    {\n      title: '电话',\n      dataIndex: 'phone',\n      key: 'phone'\n    },\n    {\n      title: '部门',\n      dataIndex: 'department',\n      key: 'department'\n    },\n    {\n      title: '角色',\n      dataIndex: 'role',\n      key: 'role',\n      render: (role) => <Tag color={getRoleColor(role)}>{getRoleText(role)}</Tag>\n    },\n    {\n      title: '状态',\n      dataIndex: 'is_active',\n      key: 'is_active',\n      render: (active) => <Tag color={active ? 'green' : 'red'}>{active ? '启用' : '禁用'}</Tag>\n    },\n    {\n      title: '创建时间',\n      dataIndex: 'created_at',\n      key: 'created_at',\n      render: (date) => dayjs(date).format('YYYY-MM-DD')\n    },\n    {\n      title: '操作',\n      key: 'actions',\n      render: (_, record) => (\n        <Space>\n          <Button type=\"link\" size=\"small\" icon={<EditOutlined />} onClick={() => openEditModal(record)}>\n            编辑\n          </Button>\n          {record.id !== currentUser?.id && (\n            <Popconfirm title=\"确定要删除这个用户吗?\" onConfirm={() => handleDelete(record.id)}>\n              <Button type=\"link\" size=\"small\" danger icon={<DeleteOutlined />}>\n                删除\n              </Button>\n            </Popconfirm>\n          )}\n        </Space>\n      )\n    }\n  ];\n\n  const [modalVisible, setModalVisible] = useState(false);\n  const [editingUser, setEditingUser] = useState(null);\n  const [form] = Form.useForm();\n\n  const openCreateModal = () => {\n    setEditingUser(null);\n    form.resetFields();\n    setModalVisible(true);\n  };\n\n  const openEditModal = (user) => {\n    setEditingUser(user);\n    form.setFieldsValue({\n      ...user,\n      fullName: user.full_name,\n      isActive: user.is_active === 1\n    });\n    setModalVisible(true);\n  };\n\n  const handleModalOk = async () => {\n    try {\n      const values = await form.validateFields();\n      if (editingUser) {\n        await usersAPI.update(editingUser.id, values);\n        message.success('用户更新成功');\n      } else {\n        await usersAPI.create(values);\n        message.success('用户创建成功');\n      }\n      setModalVisible(false);\n      fetchUsers();\n    } catch (error) {\n      message.error(error.response?.data?.message || '操作失败');\n    }\n  };\n\n  return (\n    <div>\n      <div className=\"page-header\">\n        <h1>用户管理</h1>\n      </div>\n\n      <Card>\n        <div className=\"filter-bar\">\n          <Row gutter={16}>\n            <Col span={6}>\n              <Input\n                placeholder=\"搜索用户名、姓名或邮箱\"\n                onPressEnter={(e) => setFilters(prev => ({ ...prev, search: e.target.value }))}\n                allowClear\n              />\n            </Col>\n            <Col span={4}>\n              <Select\n                placeholder=\"角色\"\n                allowClear\n                style={{ width: '100%' }}\n                onChange={(value) => setFilters(prev => ({ ...prev, role: value }))}\n              >\n                <Option value=\"admin\">超级管理员</Option>\n                <Option value=\"investment_manager\">投资经理</Option>\n                <Option value=\"analyst\">分析师</Option>\n                <Option value=\"user\">普通用户</Option>\n              </Select>\n            </Col>\n            <Col span={14} style={{ textAlign: 'right' }}>\n              <Button type=\"primary\" icon={<PlusOutlined />} onClick={openCreateModal}>\n                新建用户\n              </Button>\n            </Col>\n          </Row>\n        </div>\n\n        <Table\n          columns={columns}\n          dataSource={users}\n          rowKey=\"id\"\n          loading={loading}\n          pagination={{\n            ...pagination,\n            showSizeChanger: true,\n            showQuickJumper: true,\n            showTotal: (total) => `共 ${total} 条`,\n            onChange: (page, pageSize) => setPagination(prev => ({ ...prev, current: page, pageSize }))\n          }}\n        />\n      </Card>\n\n      <Modal\n        title={editingUser ? '编辑用户' : '新建用户'}\n        open={modalVisible}\n        onOk={handleModalOk}\n        onCancel={() => setModalVisible(false)}\n        width={600}\n      >\n        <Form form={form} layout=\"vertical\">\n          {!editingUser && (\n            <>\n              <Form.Item name=\"username\" label=\"用户名\" rules={[{ required: true, message: '请输入用户名' }]}>\n                <Input placeholder=\"请输入用户名\" />\n              </Form.Item>\n              <Form.Item name=\"password\" label=\"密码\" rules={[{ required: true, message: '请输入密码' }]}>\n                <Input.Password placeholder=\"请输入密码\" />\n              </Form.Item>\n            </>\n          )}\n          <Form.Item name=\"fullName\" label=\"姓名\" rules={[{ required: true, message: '请输入姓名' }]}>\n            <Input placeholder=\"请输入姓名\" />\n          </Form.Item>\n          <Form.Item name=\"email\" label=\"邮箱\" rules={[{ required: true, type: 'email', message: '请输入有效的邮箱' }]}>\n            <Input placeholder=\"请输入邮箱\" />\n          </Form.Item>\n          <Row gutter={16}>\n            <Col span={12}>\n              <Form.Item name=\"phone\" label=\"电话\">\n                <Input placeholder=\"请输入电话\" />\n              </Form.Item>\n            </Col>\n            <Col span={12}>\n              <Form.Item name=\"department\" label=\"部门\">\n                <Input placeholder=\"请输入部门\" />\n              </Form.Item>\n            </Col>\n          </Row>\n          <Form.Item name=\"role\" label=\"角色\" rules={[{ required: true, message: '请选择角色' }]} initialValue=\"user\">\n            <Select placeholder=\"请选择角色\">\n              <Option value=\"admin\">超级管理员</Option>\n              <Option value=\"investment_manager\">投资经理</Option>\n              <Option value=\"analyst\">分析师</Option>\n              <Option value=\"user\">普通用户</Option>\n            </Select>\n          </Form.Item>\n          {editingUser && (\n            <Form.Item name=\"isActive\" label=\"状态\" valuePropName=\"checked\">\n              <Select>\n                <Option value={true}>启用</Option>\n                <Option value={false}>禁用</Option>\n              </Select>\n            </Form.Item>\n          )}\n        </Form>\n      </Modal>\n    </div>\n  );\n};\n\nexport default Users;\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}