page.tsx 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. 'use client';
  2. import './style.scss';
  3. import Link from 'next/link';
  4. import useAuth from '@/hooks/useAuth';
  5. import { formatDate, stripHtmlTags } from '@/lib/utils/client';
  6. import NavTabs from '../navTabs';
  7. export default function Profile()
  8. {
  9. const { member } = useAuth();
  10. if (!member) {
  11. return null;
  12. }
  13. return (
  14. <>
  15. <NavTabs />
  16. <div id="profile">
  17. <h1>내 정보</h1>
  18. <div className="grid grid-cols-1 xl:grid-cols-2 gap-3">
  19. <table className="table-auto">
  20. <caption>등록 정보</caption>
  21. <colgroup>
  22. <col style={{width: "clamp(80px, 30%, 200px)"}}/>
  23. <col/>
  24. </colgroup>
  25. <tbody>
  26. <tr>
  27. <th>사용자 ID</th>
  28. <td colSpan={2}>{member?.sid}</td>
  29. </tr>
  30. <tr>
  31. <th>이메일</th>
  32. <td>{member?.email}</td>
  33. <td>
  34. <Link href="/change-email" className="btn btn-default">이메일 변경</Link>
  35. </td>
  36. </tr>
  37. <tr>
  38. <th>별명</th>
  39. <td>{member?.name || '-'}</td>
  40. <td>
  41. <Link href="/change-name" className="btn btn-default">별명 변경</Link>
  42. </td>
  43. </tr>
  44. <tr>
  45. <th>본인인증</th>
  46. <td>{member?.isAuthCertified ? '인증 완료' : '-'}</td>
  47. <td></td>
  48. </tr>
  49. <tr>
  50. <th>회원가입 일시</th>
  51. <td colSpan={2}>{formatDate(member.createdAt)}</td>
  52. </tr>
  53. <tr>
  54. <th>마지막 로그인 일시</th>
  55. <td colSpan={2}>{formatDate(member.lastLoginAt)}</td>
  56. </tr>
  57. <tr>
  58. <th>알림 수신</th>
  59. <td>
  60. <div className="flex items-center gap-4 flex-wrap">
  61. <label className="flex items-center gap-2 text-gray-700">
  62. <input type="checkbox" checked={member.memberApprove.isReceiveSMS} readOnly disabled className="accent-gray-500 cursor-not-allowed" />
  63. SMS
  64. </label>
  65. <label className="flex items-center gap-2 text-gray-700">
  66. <input type="checkbox" checked={member.memberApprove.isReceiveEmail} readOnly disabled className="accent-gray-500 cursor-not-allowed" />
  67. 메일
  68. </label>
  69. <label className="flex items-center gap-2 text-gray-700">
  70. <input type="checkbox" checked={member.memberApprove.isReceiveNote} readOnly disabled className="accent-gray-500 cursor-not-allowed" />
  71. 쪽지
  72. </label>
  73. </div>
  74. </td>
  75. <td>
  76. <Link href="/change-approve" className="btn btn-default">수신 설정</Link>
  77. </td>
  78. </tr>
  79. </tbody>
  80. </table>
  81. <table className="mt-3 xl:mt-0 table-auto">
  82. <caption>활동 정보</caption>
  83. <colgroup>
  84. <col style={{width: "100%", minWidth: "80px", maxWidth: "30%"}}/>
  85. <col width="*"/>
  86. <col width="*"/>
  87. </colgroup>
  88. <tbody>
  89. <tr>
  90. <th>회원 사진</th>
  91. <td>
  92. {/* {member?.thumb ? <Image src={member?.thumb} alt="회원 사진" width={98} height={98} style={{objectFit: "cover"}} unoptimized={true} /> : '-'} */}
  93. </td>
  94. <td>
  95. <Link href="/change-thumb" className="btn btn-default">사진 변경</Link>
  96. </td>
  97. </tr>
  98. <tr>
  99. <th>회원 등급</th>
  100. <td></td>
  101. <td></td>
  102. </tr>
  103. <tr>
  104. <th>한마디</th>
  105. <td colSpan={2}>
  106. <div className="grid grid-cols-[1fr_auto] gap-2 items-center">
  107. <span className="truncate">{member?.summary || '-'}</span>
  108. <Link href="/change-summary" className="btn btn-default">한마디 변경</Link>
  109. </div>
  110. </td>
  111. </tr>
  112. <tr>
  113. <th>자기소개</th>
  114. <td colSpan={2}>
  115. <div className="grid grid-cols-[1fr_auto] gap-2 items-center">
  116. <span className="truncate">{stripHtmlTags(member.intro) || '-'}</span>
  117. <Link href="/change-intro" className="btn btn-default">자기소개 변경</Link>
  118. </div>
  119. </td>
  120. </tr>
  121. <tr>
  122. <th>경험치</th>
  123. <td colSpan={2}>{member?.exp}</td>
  124. </tr>
  125. <tr>
  126. <th>작성 게시글</th>
  127. <td colSpan={2}>{member?.posts}</td>
  128. </tr>
  129. <tr>
  130. <th>작성 댓글</th>
  131. <td colSpan={2}>{member?.comments}</td>
  132. </tr>
  133. <tr>
  134. <th>구독자</th>
  135. <td colSpan={2}>{member?.following}</td>
  136. </tr>
  137. </tbody>
  138. </table>
  139. </div>
  140. <br />
  141. <dl>
  142. <dt>회원님의 개인정보는 안전하게 보호됩니다.</dt>
  143. <dd>※ 의심스러운 활동이 감지되면 즉시 비밀번호를 변경하세요.</dd>
  144. <dd>※ 보안을 위해 비밀번호를 주기적으로 변경하는 것이 좋습니다.</dd>
  145. <dd>※ 자동 로그인 기능을 사용하면, 로그인 상태가 유지됩니다.</dd>
  146. <dd>※ 공용 컴퓨터에서는 자동 로그인을 사용하지 않는 것이 좋습니다. </dd>
  147. </dl>
  148. </div>
  149. </>
  150. );
  151. }