与牧同行-小程序用户端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

591 lines
9.2 KiB

  1. .personal-center{
  2. min-height: 100vh;
  3. background: linear-gradient(180deg, #86D8D0 0%, #a9dfda 30%, #cfe9e7 60%, #ECF8F7 90%);
  4. }
  5. /* 淡入动画 */
  6. .fade-in {
  7. animation: fadeIn 0.6s ease forwards;
  8. opacity: 0;
  9. transform: translateY(20rpx);
  10. }
  11. .fade-in-delay-1 {
  12. animation: fadeIn 0.6s 0.2s ease forwards;
  13. opacity: 0;
  14. transform: translateY(20rpx);
  15. }
  16. .fade-in-delay-2 {
  17. animation: fadeIn 0.6s 0.4s ease forwards;
  18. opacity: 0;
  19. transform: translateY(20rpx);
  20. }
  21. .fade-in-delay-3 {
  22. animation: fadeIn 0.6s 0.6s ease forwards;
  23. opacity: 0;
  24. transform: translateY(20rpx);
  25. }
  26. @keyframes fadeIn {
  27. to {
  28. opacity: 1;
  29. transform: translateY(0);
  30. }
  31. }
  32. /* 用户信息区域 */
  33. .user-section {
  34. padding: 40rpx 30rpx 30rpx;
  35. }
  36. .user-card {
  37. background: white;
  38. border-radius: 24rpx;
  39. padding: 40rpx 30rpx;
  40. box-shadow: 0 10rpx 30rpx rgba(0, 0, 0, 0.08);
  41. display: flex;
  42. align-items: center;
  43. transition: all 0.3s ease;
  44. }
  45. .user-card:active {
  46. transform: scale(0.99);
  47. box-shadow: 0 5rpx 20rpx rgba(0, 0, 0, 0.05);
  48. }
  49. .avatar-btn {
  50. position: relative;
  51. width: 120rpx;
  52. height: 120rpx;
  53. margin-right: 30rpx;
  54. flex-shrink: 0;
  55. padding: 0;
  56. background: transparent;
  57. border: none;
  58. border-radius: 50%;
  59. }
  60. .avatar-btn::after {
  61. border: none;
  62. }
  63. .avatar {
  64. width: 100%;
  65. height: 100%;
  66. border-radius: 50%;
  67. border: 4rpx solid white;
  68. box-shadow: 0 8rpx 24rpx rgba(0, 0, 0, 0.1);
  69. }
  70. .user-info {
  71. flex: 1;
  72. }
  73. .nickname-section {
  74. display: flex;
  75. align-items: center;
  76. margin-bottom: 16rpx;
  77. }
  78. .nickname {
  79. font-size: 36rpx;
  80. font-weight: 700;
  81. color: #1e293b;
  82. margin-right: 20rpx;
  83. max-width: 300rpx;
  84. overflow: hidden;
  85. text-overflow: ellipsis;
  86. white-space: nowrap;
  87. }
  88. .nickname-section image {
  89. width: 26rpx;
  90. height: 26rpx;
  91. opacity: 0.6;
  92. }
  93. .user-meta {
  94. display: flex;
  95. align-items: center;
  96. flex-wrap: wrap;
  97. gap: 16rpx;
  98. }
  99. .auth-tag {
  100. display: flex;
  101. align-items: center;
  102. padding: 6rpx 12rpx;
  103. background: #fef3c7;
  104. border-radius: 16rpx;
  105. transition: all 0.3s ease;
  106. }
  107. .auth-tag.verified {
  108. background: #d1fae5;
  109. }
  110. .auth-tag:active {
  111. transform: scale(0.95);
  112. }
  113. .auth-tag image {
  114. width: 20rpx;
  115. height: 20rpx;
  116. margin-right: 6rpx;
  117. }
  118. .auth-tag text {
  119. font-size: 22rpx;
  120. color: #92400e;
  121. }
  122. .auth-tag.verified text {
  123. color: #065f46;
  124. }
  125. /* 卡片样式 */
  126. .section-card {
  127. background: white;
  128. margin: 0 30rpx 30rpx;
  129. border-radius: 20rpx;
  130. overflow: hidden;
  131. box-shadow: 0 6rpx 20rpx rgba(0, 0, 0, 0.05);
  132. }
  133. .section-header {
  134. padding: 30rpx 30rpx 20rpx;
  135. border-bottom: 1rpx solid #f1f5f9;
  136. display: flex;
  137. align-items: center;
  138. justify-content: space-between;
  139. }
  140. .section-title {
  141. font-size: 32rpx;
  142. font-weight: 600;
  143. color: #1e293b;
  144. position: relative;
  145. padding-left: 20rpx;
  146. }
  147. .section-title::before {
  148. content: '';
  149. position: absolute;
  150. left: 0;
  151. top: 50%;
  152. transform: translateY(-50%);
  153. width: 6rpx;
  154. height: 24rpx;
  155. background: linear-gradient(135deg, #667eea, #764ba2);
  156. border-radius: 3rpx;
  157. }
  158. /* 消息行 */
  159. .message-row {
  160. display: flex;
  161. align-items: center;
  162. padding: 30rpx;
  163. }
  164. .message-item {
  165. flex: 1;
  166. display: flex;
  167. flex-direction: column;
  168. align-items: center;
  169. transition: all 0.3s ease;
  170. }
  171. .message-item:active {
  172. transform: scale(0.95);
  173. }
  174. .message-icon-wrapper {
  175. position: relative;
  176. width: 80rpx;
  177. height: 80rpx;
  178. margin-bottom: 16rpx;
  179. display: flex;
  180. align-items: center;
  181. justify-content: center;
  182. background: #f8fafc;
  183. border-radius: 50%;
  184. border: 1rpx solid #e2e8f0;
  185. }
  186. .message-icon {
  187. width: 60rpx;
  188. height: 60rpx;
  189. }
  190. .message-label {
  191. font-size: 26rpx;
  192. color: #475569;
  193. font-weight: 500;
  194. }
  195. .divider {
  196. width: 1rpx;
  197. height: 60rpx;
  198. background: #e2e8f0;
  199. margin: 0 40rpx;
  200. }
  201. /* 功能列表 */
  202. .function-list {
  203. padding: 0 30rpx 20rpx;
  204. }
  205. .function-item {
  206. display: flex;
  207. align-items: center;
  208. justify-content: space-between;
  209. padding: 30rpx 0;
  210. border-bottom: 1rpx solid #f1f5f9;
  211. transition: all 0.3s ease;
  212. }
  213. .function-item:last-child {
  214. border-bottom: none;
  215. }
  216. .function-item:active {
  217. background: #f8fafc;
  218. border-radius: 12rpx;
  219. }
  220. .item-left {
  221. display: flex;
  222. align-items: center;
  223. }
  224. .item-icon {
  225. width: 32rpx;
  226. height: 32rpx;
  227. margin-right: 20rpx;
  228. opacity: 0.8;
  229. }
  230. .item-title {
  231. font-size: 30rpx;
  232. color: #1e293b;
  233. font-weight: 500;
  234. }
  235. .item-status {
  236. font-size: 26rpx;
  237. color: #f59e0b;
  238. font-weight: 500;
  239. }
  240. .item-status.verified {
  241. color: #10b981;
  242. }
  243. .function-item:active .arrow {
  244. opacity: 0.8;
  245. transform: translateX(4rpx);
  246. }
  247. /* 反馈弹窗 */
  248. .feedback-modal {
  249. position: fixed;
  250. top: 0;
  251. left: 0;
  252. width: 100%;
  253. height: 100%;
  254. z-index: 1000;
  255. display: flex;
  256. align-items: center;
  257. justify-content: center;
  258. opacity: 0;
  259. visibility: hidden;
  260. transition: all 0.3s ease;
  261. }
  262. .feedback-modal.show {
  263. opacity: 1;
  264. visibility: visible;
  265. }
  266. .modal-mask {
  267. position: absolute;
  268. top: 0;
  269. left: 0;
  270. width: 100%;
  271. height: 100%;
  272. background: rgba(0, 0, 0, 0.5);
  273. backdrop-filter: blur(4rpx);
  274. }
  275. .modal-content {
  276. position: relative;
  277. width: 90%;
  278. max-width: 660rpx;
  279. background: white;
  280. border-radius: 24rpx;
  281. overflow: hidden;
  282. box-shadow: 0 30rpx 80rpx rgba(0, 0, 0, 0.2);
  283. transform: translateY(100rpx);
  284. transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
  285. }
  286. .feedback-modal.show .modal-content {
  287. transform: translateY(0);
  288. }
  289. .modal-header {
  290. padding: 40rpx 40rpx 20rpx;
  291. border-bottom: 1rpx solid #f1f5f9;
  292. display: flex;
  293. justify-content: space-between;
  294. align-items: center;
  295. }
  296. .modal-title {
  297. font-size: 36rpx;
  298. font-weight: 700;
  299. color: #1e293b;
  300. }
  301. .modal-close {
  302. display: flex;
  303. align-items: center;
  304. justify-content: center;
  305. transition: all 0.3s ease;
  306. }
  307. .modal-close:active {
  308. background: #e2e8f0;
  309. transform: scale(0.9);
  310. }
  311. .modal-close image {
  312. width: 36rpx;
  313. height: 36rpx;
  314. opacity: 0.5;
  315. }
  316. /* 反馈输入框 */
  317. .modal-body {
  318. padding: 40rpx;
  319. }
  320. .feedback-input {
  321. width: 100%;
  322. min-height: 240rpx;
  323. padding: 24rpx;
  324. box-sizing: border-box;
  325. background: #f8fafc;
  326. border: 2rpx solid #e2e8f0;
  327. border-radius: 16rpx;
  328. font-size: 28rpx;
  329. line-height: 1.5;
  330. color: #1e293b;
  331. transition: all 0.3s ease;
  332. }
  333. .feedback-input:focus {
  334. border-color: #667eea;
  335. background: white;
  336. box-shadow: 0 0 0 4rpx rgba(102, 126, 234, 0.1);
  337. }
  338. .placeholder {
  339. color: #94a3b8;
  340. }
  341. .char-count {
  342. text-align: right;
  343. margin-top: 12rpx;
  344. font-size: 24rpx;
  345. display: flex;
  346. justify-content: flex-end;
  347. align-items: baseline;
  348. gap: 4rpx;
  349. }
  350. .char-count .current {
  351. color: #1e293b;
  352. font-weight: 500;
  353. }
  354. .char-count .total {
  355. color: #94a3b8;
  356. }
  357. .modal-footer {
  358. padding: 0 40rpx 40rpx;
  359. }
  360. .submit-btn {
  361. width: 100%;
  362. height: 88rpx;
  363. background: #e2e8f0;
  364. border-radius: 44rpx;
  365. font-size: 32rpx;
  366. font-weight: 600;
  367. color: #94a3b8;
  368. border: none;
  369. transition: all 0.3s ease;
  370. }
  371. .submit-btn.active {
  372. background: linear-gradient(135deg, #667eea, #764ba2);
  373. color: white;
  374. box-shadow: 0 8rpx 24rpx rgba(102, 126, 234, 0.3);
  375. }
  376. .submit-btn.active:active {
  377. transform: scale(0.98);
  378. opacity: 0.9;
  379. }
  380. .submit-btn[disabled] {
  381. opacity: 0.6;
  382. }
  383. /* 昵称修改弹窗 */
  384. .nickname-modal {
  385. position: fixed;
  386. top: 0;
  387. left: 0;
  388. width: 100%;
  389. height: 100%;
  390. z-index: 1000;
  391. display: flex;
  392. align-items: center;
  393. justify-content: center;
  394. opacity: 0;
  395. visibility: hidden;
  396. transition: all 0.3s ease;
  397. }
  398. .nickname-modal.show {
  399. opacity: 1;
  400. visibility: visible;
  401. }
  402. .nickname-modal .modal-content {
  403. width: 600rpx;
  404. background: white;
  405. border-radius: 20rpx;
  406. overflow: hidden;
  407. box-shadow: 0 20rpx 60rpx rgba(0, 0, 0, 0.2);
  408. transform: scale(0.8);
  409. transition: all 0.3s ease;
  410. }
  411. .nickname-modal.show .modal-content {
  412. transform: scale(1);
  413. }
  414. .nickname-modal .modal-header {
  415. padding: 40rpx 40rpx 20rpx;
  416. border-bottom: 1rpx solid #f1f5f9;
  417. }
  418. .nickname-modal .modal-body {
  419. padding: 40rpx;
  420. }
  421. .nickname-input {
  422. width: 100%;
  423. height: 80rpx;
  424. background: #f8fafc;
  425. border: 2rpx solid #e2e8f0;
  426. border-radius: 12rpx;
  427. font-size: 28rpx;
  428. color: #1e293b;
  429. text-align: center;
  430. transition: all 0.3s ease;
  431. }
  432. .nickname-input:focus {
  433. border-color: #667eea;
  434. background: white;
  435. box-shadow: 0 0 0 4rpx rgba(102, 126, 234, 0.1);
  436. }
  437. .input-tip {
  438. display: block;
  439. font-size: 24rpx;
  440. color: #94a3b8;
  441. text-align: center;
  442. margin-top: 16rpx;
  443. }
  444. .nickname-modal .modal-footer {
  445. padding: 0 40rpx 40rpx;
  446. display: flex;
  447. gap: 20rpx;
  448. }
  449. .cancel-btn,
  450. .confirm-btn {
  451. flex: 1;
  452. height: 80rpx;
  453. border-radius: 40rpx;
  454. font-size: 28rpx;
  455. font-weight: 500;
  456. transition: all 0.3s ease;
  457. border: none;
  458. }
  459. .cancel-btn {
  460. background: #f1f5f9;
  461. color: #64748b;
  462. }
  463. .cancel-btn:active {
  464. background: #e2e8f0;
  465. }
  466. .confirm-btn {
  467. background: linear-gradient(135deg, #667eea, #764ba2);
  468. color: white;
  469. box-shadow: 0 4rpx 16rpx rgba(102, 126, 234, 0.3);
  470. }
  471. .confirm-btn:active {
  472. transform: scale(0.98);
  473. opacity: 0.9;
  474. }
  475. /* 提示信息 */
  476. .toast {
  477. position: fixed;
  478. top: 150rpx;
  479. left: 50%;
  480. transform: translateX(-50%) translateY(-100rpx);
  481. background: rgba(30, 41, 59, 0.9);
  482. backdrop-filter: blur(20rpx);
  483. color: white;
  484. padding: 20rpx 40rpx;
  485. border-radius: 12rpx;
  486. font-size: 28rpx;
  487. opacity: 0;
  488. visibility: hidden;
  489. transition: all 0.3s ease;
  490. z-index: 1001;
  491. box-shadow: 0 10rpx 40rpx rgba(0, 0, 0, 0.2);
  492. }
  493. .toast.show {
  494. opacity: 1;
  495. visibility: visible;
  496. transform: translateX(-50%) translateY(0);
  497. }