userManage.tsx 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. import { App, Avatar, Button, Drawer, Space } from "antd"
  2. import React, { useContext, useMemo, useState } from "react"
  3. import { DispatchContext } from "../../App";
  4. import AvatarImg from '../../assets/image/mine_touxiang.png'
  5. import { CloseOutlined, PoweroffOutlined, SyncOutlined, UserOutlined } from "@ant-design/icons";
  6. import UserImg from '../../assets/image/userImg.png'
  7. import BindPhoneImg from '../../assets/image/icon_mine_bangdingshouji.png'
  8. import AuthImg from '../../assets/image/icon_shimingrenzheng.png'
  9. import LeftImg from '../../assets/image/personal_core_back.png'
  10. import CopyImg from '../../assets/image/icon_fz@2x.png'
  11. import EditImg from '../../assets/image/icon_bj@2x.png'
  12. import { copy } from "../../utils";
  13. interface Props {
  14. isVer: boolean
  15. handle?: (type: 'BIND' | 'AUTH' | 'MODIFY' | 'LOGOUT') => void
  16. onClose?: () => void
  17. open?: boolean,
  18. }
  19. /**
  20. * 悬浮窗用户信息
  21. * @param param0
  22. * @returns
  23. */
  24. const UserManage: React.FC<Props> = ({ onClose, open, handle, isVer }) => {
  25. /*********************************/
  26. const { state: { userData: { cardId, phoneNum, userName, userId, authentication }, isPut } } = useContext(DispatchContext)!;
  27. const [userInfoOpen, setUserInfoOpen] = useState<boolean>(false)
  28. const bodyH = document.body.clientWidth
  29. const { message } = App.useApp();
  30. /*********************************/
  31. const El = useMemo(() => {
  32. if (isVer) {
  33. return <Drawer
  34. placement={'top'}
  35. closable={false}
  36. onClose={onClose}
  37. open={open}
  38. height={324}
  39. bodyStyle={{ backgroundColor: '#f0f0f0', padding: 0, position: 'relative' }}
  40. headerStyle={{ padding: 0 }}
  41. >
  42. <div className="sb" style={{
  43. height: bodyH,
  44. left: document.body.clientWidth,
  45. }}>
  46. <div className="um_userinfo">
  47. <Space>
  48. <Avatar size="large" src={AvatarImg} icon={<UserOutlined />} />
  49. {/* <Avatar style={{ backgroundColor: '#ff984a' }} size="large">{userName?.charAt(0)}</Avatar> */}
  50. <div className="um_nickname">
  51. <p className="nickname">{userName}</p>
  52. <p className="id">ID:{userId ? Array(8 - ((userId + '').length)).fill('').map(() => '0').join('') : ''}{userId}</p>
  53. </div>
  54. </Space>
  55. <div className="um_link">
  56. <Button icon={<CloseOutlined />} type="text" style={{ color: '#FFF' }} onClick={onClose} />
  57. </div>
  58. </div>
  59. <div style={{ height: bodyH - 60 - 51, overflow: 'auto' }}>
  60. <div className="um_top" >
  61. <div className="content_list" onClick={() => setUserInfoOpen(!userInfoOpen)}>
  62. <Space align="center">
  63. <img src={UserImg} />
  64. <span>我的账号</span>
  65. </Space>
  66. <Space align="center">
  67. <img src={LeftImg} style={{ width: 13, height: 13 }} />
  68. </Space>
  69. </div>
  70. {userInfoOpen && <>
  71. <div className="content_list" onClick={() => copy(userName, message)}>
  72. <Space align="center">
  73. <span style={{ fontSize: 14, color: 'gray', marginLeft: 6 }}>用户名</span>
  74. </Space>
  75. <Space align="center">
  76. <span style={{ color: 'gray' }}>{userName}</span>
  77. <img src={CopyImg} style={{ width: 13, height: 13 }} />
  78. </Space>
  79. </div>
  80. <div className="content_list" onClick={() => handle?.('MODIFY')}>
  81. <Space align="center">
  82. <span style={{ fontSize: 14, color: 'gray', marginLeft: 6 }}>修改密码</span>
  83. </Space>
  84. <Space align="center">
  85. <img src={EditImg} style={{ width: 13, height: 13 }} />
  86. </Space>
  87. </div>
  88. </>}
  89. <div className="content_list" onClick={() => { handle?.('BIND') }}>
  90. <Space align="center">
  91. <img src={BindPhoneImg} />
  92. <span>绑定手机</span>
  93. </Space>
  94. <Space align="center">
  95. <span style={{ color: '#5f5f5f' }}>{phoneNum}</span>
  96. <img src={LeftImg} style={{ width: 13, height: 13 }} />
  97. </Space>
  98. </div>
  99. <div className="content_list" onClick={() => { if (authentication === 0) handle?.('AUTH') }}>
  100. <Space align="center">
  101. <img src={AuthImg} />
  102. <span>实名认证</span>
  103. </Space>
  104. <Space align="center">
  105. <span style={{ color: '#5f5f5f' }}>{cardId}</span>
  106. <img src={LeftImg} style={{ width: 13, height: 13 }} />
  107. </Space>
  108. </div>
  109. </div>
  110. </div>
  111. <div className="um_bottom">
  112. {!isPut && <Button icon={<PoweroffOutlined />} danger type="text" onClick={() => { handle?.('LOGOUT') }}>退出登录</Button>}
  113. <Button icon={<SyncOutlined />} type="text" onClick={() => { window.location.reload() }}>刷新游戏</Button>
  114. </div>
  115. </div>
  116. </Drawer>
  117. } else {
  118. return <Drawer
  119. placement={'left'}
  120. closable={false}
  121. onClose={onClose}
  122. open={open}
  123. width={324}
  124. bodyStyle={{ backgroundColor: '#f0f0f0', padding: 0 }}
  125. headerStyle={{ padding: 0 }}
  126. title={<div className="um_userinfo">
  127. <Space>
  128. <Avatar size="large" src={AvatarImg} icon={<UserOutlined />} />
  129. {/* <Avatar style={{ backgroundColor: '#ff984a' }} size="large">{userName?.charAt(0)}</Avatar> */}
  130. <div className="um_nickname">
  131. <p className="nickname">{userName}</p>
  132. <p className="id">ID:{userId ? Array(8 - ((userId + '').length)).fill('').map(() => '0').join('') : ''}{userId}</p>
  133. </div>
  134. </Space>
  135. <div className="um_link">
  136. <Button icon={<CloseOutlined />} type="text" style={{ color: '#FFF' }} onClick={onClose} />
  137. </div>
  138. </div>}
  139. >
  140. <div className="um_top">
  141. <div className="content_list" onClick={() => setUserInfoOpen(!userInfoOpen)}>
  142. <Space align="center">
  143. <img src={UserImg} />
  144. <span>我的账号</span>
  145. </Space>
  146. <Space align="center">
  147. <img src={LeftImg} style={{ width: 13, height: 13 }} />
  148. </Space>
  149. </div>
  150. {userInfoOpen && <>
  151. <div className="content_list" onClick={() => copy(userName, message)}>
  152. <Space align="center">
  153. <span style={{ fontSize: 14, color: 'gray', marginLeft: 6 }}>用户名</span>
  154. </Space>
  155. <Space align="center">
  156. <span style={{ color: 'gray' }}>{userName}</span>
  157. <img src={CopyImg} style={{ width: 13, height: 13 }} />
  158. </Space>
  159. </div>
  160. <div className="content_list" onClick={() => handle?.('MODIFY')}>
  161. <Space align="center">
  162. <span style={{ fontSize: 14, color: 'gray', marginLeft: 6 }}>修改密码</span>
  163. </Space>
  164. <Space align="center">
  165. <img src={EditImg} style={{ width: 13, height: 13 }} />
  166. </Space>
  167. </div>
  168. </>}
  169. <div className="content_list" onClick={() => { handle?.('BIND') }}>
  170. <Space align="center">
  171. <img src={BindPhoneImg} />
  172. <span>绑定手机</span>
  173. </Space>
  174. <Space align="center">
  175. <span style={{ color: '#5f5f5f' }}>{phoneNum}</span>
  176. <img src={LeftImg} style={{ width: 13, height: 13 }} />
  177. </Space>
  178. </div>
  179. <div className="content_list" onClick={() => { if (authentication === 0) handle?.('AUTH') }}>
  180. <Space align="center">
  181. <img src={AuthImg} />
  182. <span>实名认证</span>
  183. </Space>
  184. <Space align="center">
  185. <span style={{ color: '#5f5f5f' }}>{cardId}</span>
  186. <img src={LeftImg} style={{ width: 13, height: 13 }} />
  187. </Space>
  188. </div>
  189. </div>
  190. <div className="um_bottom">
  191. {!isPut && <Button icon={<PoweroffOutlined />} danger type="text" onClick={() => { handle?.('LOGOUT') }}>退出登录</Button>}
  192. <Button icon={<SyncOutlined />} type="text" onClick={() => { window.location.reload() }}>刷新游戏</Button>
  193. </div>
  194. </Drawer>
  195. }
  196. }, [isVer, userInfoOpen])
  197. return El
  198. }
  199. export default React.memo(UserManage)