与牧同行-小程序用户端
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.

642 lines
10 KiB

  1. .xqbox {
  2. background: linear-gradient(180deg, #F8FBFF 0%, #F0F7FF 100%);
  3. min-height: 100vh;
  4. }
  5. /* 页面内容 */
  6. .page-content {
  7. height: calc(100vh - 120rpx);
  8. box-sizing: border-box;
  9. }
  10. /* 动画效果 */
  11. @keyframes cardEnter {
  12. 0% {
  13. opacity: 0;
  14. transform: translateY(40rpx) scale(0.95);
  15. }
  16. 100% {
  17. opacity: 1;
  18. transform: translateY(0) scale(1);
  19. }
  20. }
  21. @keyframes fadeInUp {
  22. 0% {
  23. opacity: 0;
  24. transform: translateY(30rpx);
  25. }
  26. 100% {
  27. opacity: 1;
  28. transform: translateY(0);
  29. }
  30. }
  31. @keyframes fadeIn {
  32. from { opacity: 0; }
  33. to { opacity: 1; }
  34. }
  35. @keyframes pulse {
  36. 0% { transform: scale(1); }
  37. 50% { transform: scale(1.05); }
  38. 100% { transform: scale(1); }
  39. }
  40. @keyframes float {
  41. 0%, 100% { transform: translateY(0); }
  42. 50% { transform: translateY(-10rpx); }
  43. }
  44. .card-enter {
  45. animation: cardEnter 0.6s cubic-bezier(0.34, 1.56, 0.64, 1) forwards;
  46. }
  47. .fade-in-up {
  48. animation: fadeInUp 0.5s ease-out forwards;
  49. opacity: 0;
  50. }
  51. .fade-in {
  52. animation: fadeIn 0.8s ease-out forwards;
  53. opacity: 0;
  54. }
  55. .pulse {
  56. animation: pulse 2s infinite;
  57. }
  58. .hover-effect {
  59. transition: all 0.3s ease;
  60. }
  61. .hover-effect:active {
  62. transform: scale(0.95);
  63. }
  64. /* 渐变背景 */
  65. .gradient-blue {
  66. background: linear-gradient(135deg, #6D9EFF 0%, #4A7CFF 100%);
  67. color: white !important;
  68. }
  69. .gradient-orange {
  70. background: linear-gradient(135deg, #FF9500 0%, #FF7F00 100%);
  71. color: white !important;
  72. }
  73. .gradient-pink {
  74. background: linear-gradient(135deg, #FF6B9D 0%, #FF4081 100%);
  75. color: white !important;
  76. }
  77. .gradient-purple {
  78. background: linear-gradient(135deg, #9D4BFF 0%, #7C3AED 100%);
  79. color: white !important;
  80. }
  81. .gradient-gold {
  82. background: linear-gradient(135deg, #FFD700 0%, #FFB300 100%);
  83. color: white !important;
  84. }
  85. /* 用户问诊卡片 */
  86. .user-query-card {
  87. background: #FFFFFF;
  88. margin: 24rpx;
  89. border-radius: 28rpx;
  90. box-shadow: 0 12rpx 48rpx rgba(74, 144, 226, 0.15);
  91. border: 2rpx solid #FFFFFF;
  92. overflow: hidden;
  93. position: relative;
  94. backdrop-filter: blur(20rpx);
  95. }
  96. /* 卡片装饰 */
  97. .card-decoration {
  98. position: absolute;
  99. top: 0;
  100. left: 0;
  101. right: 0;
  102. bottom: 0;
  103. pointer-events: none;
  104. z-index: 1;
  105. }
  106. .decoration-dot {
  107. position: absolute;
  108. border-radius: 50%;
  109. background: linear-gradient(135deg, rgba(109, 158, 255, 0.1) 0%, rgba(74, 124, 255, 0.1) 100%);
  110. }
  111. .dot-1 {
  112. width: 120rpx;
  113. height: 120rpx;
  114. top: -40rpx;
  115. right: -40rpx;
  116. }
  117. .dot-2 {
  118. width: 80rpx;
  119. height: 80rpx;
  120. bottom: 60rpx;
  121. left: -20rpx;
  122. }
  123. .dot-3 {
  124. width: 60rpx;
  125. height: 60rpx;
  126. bottom: -20rpx;
  127. right: 80rpx;
  128. }
  129. /* 用户信息区域 */
  130. .user-info-section {
  131. padding: 40rpx 32rpx 32rpx;
  132. display: flex;
  133. align-items: flex-start;
  134. position: relative;
  135. z-index: 2;
  136. }
  137. .avatar-wrapper {
  138. position: relative;
  139. margin-right: 24rpx;
  140. flex-shrink: 0;
  141. }
  142. .user-avatar {
  143. width: 88rpx;
  144. height: 88rpx;
  145. border-radius: 50%;
  146. border: 3rpx solid #FFFFFF;
  147. box-shadow: 0 8rpx 24rpx rgba(74, 144, 226, 0.3);
  148. }
  149. .user-details {
  150. flex: 1;
  151. }
  152. .user-name-row {
  153. display: flex;
  154. align-items: center;
  155. justify-content: space-between;
  156. margin-bottom: 16rpx;
  157. }
  158. .user-name {
  159. font-size: 34rpx;
  160. font-weight: 700;
  161. color: #1A1A1A;
  162. line-height: 1.2;
  163. text-shadow: 0 1rpx 2rpx rgba(0, 0, 0, 0.1);
  164. }
  165. .status-badge {
  166. padding: 10rpx 24rpx;
  167. border-radius: 24rpx;
  168. font-size: 26rpx;
  169. font-weight: 700;
  170. min-width: 88rpx;
  171. text-align: center;
  172. box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.1);
  173. }
  174. .status-replied {
  175. background: linear-gradient(135deg, #2ECC71 0%, #27AE60 100%);
  176. color: white;
  177. }
  178. .status-pending {
  179. background: linear-gradient(135deg, #FF9500 0%, #F39C12 100%);
  180. color: white;
  181. }
  182. .pet-info {
  183. display: flex;
  184. flex-direction: column;
  185. gap: 16rpx;
  186. }
  187. .pet-info-tags {
  188. display: flex;
  189. gap: 12rpx;
  190. flex-wrap: wrap;
  191. }
  192. .pet-tag {
  193. padding: 6rpx 20rpx;
  194. border-radius: 20rpx;
  195. font-size: 24rpx;
  196. font-weight: 600;
  197. box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.1);
  198. }
  199. .time-info {
  200. display: flex;
  201. align-items: center;
  202. gap: 8rpx;
  203. background: rgba(109, 158, 255, 0.08);
  204. padding: 8rpx 16rpx;
  205. border-radius: 20rpx;
  206. align-self: flex-start;
  207. }
  208. .time-text {
  209. font-size: 24rpx;
  210. color: #6D9EFF;
  211. font-weight: 500;
  212. }
  213. /* 症状描述区域 - 调整到最左边 */
  214. .symptom-section {
  215. padding: 32rpx;
  216. position: relative;
  217. z-index: 2;
  218. }
  219. .section-header {
  220. display: flex;
  221. align-items: center;
  222. margin-bottom: 28rpx;
  223. }
  224. .section-title {
  225. font-size: 32rpx;
  226. font-weight: 700;
  227. color: #1A1A1A;
  228. position: relative;
  229. padding-right: 16rpx;
  230. }
  231. .title-decoration {
  232. flex: 1;
  233. height: 2rpx;
  234. background: linear-gradient(90deg, #E5F0FF 0%, #6D9EFF 50%, #E5F0FF 100%);
  235. margin-left: 16rpx;
  236. border-radius: 1rpx;
  237. }
  238. .symptom-content {
  239. background: #F8FBFF;
  240. border-radius: 24rpx;
  241. padding: 36rpx 32rpx;
  242. border: 2rpx solid #E5F0FF;
  243. position: relative;
  244. box-shadow: 0 4rpx 16rpx rgba(74, 144, 226, 0.1);
  245. transition: all 0.3s ease;
  246. }
  247. .symptom-content:active {
  248. transform: translateY(-2rpx);
  249. box-shadow: 0 8rpx 24rpx rgba(74, 144, 226, 0.15);
  250. }
  251. .quote-left {
  252. position: absolute;
  253. top: 20rpx;
  254. left: 20rpx;
  255. font-size: 48rpx;
  256. color: #6D9EFF;
  257. font-weight: 700;
  258. opacity: 0.3;
  259. }
  260. .symptom-text {
  261. font-size: 30rpx;
  262. color: #333;
  263. line-height: 1.8;
  264. font-weight: 400;
  265. text-align: left;
  266. }
  267. /* 图片展示区域 */
  268. .image-section {
  269. padding: 32rpx;
  270. position: relative;
  271. z-index: 2;
  272. }
  273. .image-count {
  274. margin-left: auto;
  275. padding: 6rpx 16rpx;
  276. border-radius: 20rpx;
  277. font-size: 24rpx;
  278. font-weight: 600;
  279. }
  280. .images-scroll {
  281. width: 100%;
  282. }
  283. .images-container {
  284. display: flex;
  285. padding: 8rpx 0;
  286. }
  287. .image-wrapper {
  288. margin-right: 20rpx;
  289. position: relative;
  290. border-radius: 20rpx;
  291. overflow: hidden;
  292. box-shadow: 0 8rpx 24rpx rgba(0, 0, 0, 0.15);
  293. transition: all 0.3s ease;
  294. }
  295. .image-wrapper:last-child {
  296. margin-right: 0;
  297. }
  298. .image-wrapper:active {
  299. transform: scale(0.98);
  300. }
  301. .symptom-image {
  302. width: 220rpx;
  303. height: 220rpx;
  304. border-radius: 20rpx;
  305. }
  306. .image-overlay {
  307. position: absolute;
  308. top: 12rpx;
  309. left: 12rpx;
  310. background: rgba(0, 0, 0, 0.6);
  311. width: 40rpx;
  312. height: 40rpx;
  313. border-radius: 50%;
  314. display: flex;
  315. align-items: center;
  316. justify-content: center;
  317. backdrop-filter: blur(4rpx);
  318. }
  319. .image-index {
  320. color: white;
  321. font-size: 20rpx;
  322. font-weight: 600;
  323. }
  324. /* 兽医回复区域 */
  325. .replies-section {
  326. margin: 24rpx;
  327. }
  328. .reply-count {
  329. margin-left: auto;
  330. padding: 8rpx 20rpx;
  331. border-radius: 24rpx;
  332. display: flex;
  333. align-items: center;
  334. gap: 4rpx;
  335. box-shadow: 0 4rpx 12rpx rgba(157, 75, 255, 0.3);
  336. }
  337. .count-number {
  338. font-size: 30rpx;
  339. font-weight: 700;
  340. }
  341. .count-text {
  342. font-size: 24rpx;
  343. font-weight: 500;
  344. opacity: 0.9;
  345. }
  346. /* 回复列表 */
  347. .replies-list {
  348. display: flex;
  349. flex-direction: column;
  350. gap: 24rpx;
  351. }
  352. .vet-reply-card {
  353. background: #FFFFFF;
  354. border-radius: 28rpx;
  355. padding: 36rpx;
  356. box-shadow: 0 12rpx 48rpx rgba(74, 144, 226, 0.15);
  357. border: 2rpx solid #FFFFFF;
  358. position: relative;
  359. overflow: hidden;
  360. backdrop-filter: blur(20rpx);
  361. }
  362. /* 回复装饰 */
  363. .reply-decoration {
  364. position: absolute;
  365. top: 20rpx;
  366. right: 20rpx;
  367. opacity: 0.1;
  368. }
  369. .decoration-icon {
  370. width: 40rpx;
  371. height: 40rpx;
  372. animation: float 3s ease-in-out infinite;
  373. }
  374. /* 兽医信息 */
  375. .vet-info {
  376. display: flex;
  377. align-items: center;
  378. margin-bottom: 32rpx;
  379. }
  380. .vet-avatar {
  381. width: 80rpx;
  382. height: 80rpx;
  383. border-radius: 50%;
  384. border: 3rpx solid #FFFFFF;
  385. box-shadow: 0 8rpx 24rpx rgba(255, 215, 0, 0.3);
  386. margin-right: 20rpx;
  387. flex-shrink: 0;
  388. }
  389. .vet-verified {
  390. position: absolute;
  391. bottom: 2rpx;
  392. right: 2rpx;
  393. width: 20rpx;
  394. height: 20rpx;
  395. background: #2ECC71;
  396. border: 2rpx solid white;
  397. border-radius: 50%;
  398. }
  399. .vet-details {
  400. flex: 1;
  401. }
  402. .vet-name-row {
  403. display: flex;
  404. align-items: center;
  405. margin-bottom: 12rpx;
  406. }
  407. .vet-name {
  408. font-size: 32rpx;
  409. font-weight: 700;
  410. color: #1A1A1A;
  411. margin-right: 16rpx;
  412. text-shadow: 0 1rpx 2rpx rgba(0, 0, 0, 0.1);
  413. }
  414. .vet-badge {
  415. padding: 6rpx 20rpx;
  416. border-radius: 20rpx;
  417. box-shadow: 0 4rpx 12rpx rgba(255, 215, 0, 0.3);
  418. }
  419. .vet-title {
  420. font-size: 24rpx;
  421. font-weight: 700;
  422. letter-spacing: 0.5rpx;
  423. }
  424. .vet-meta {
  425. display: flex;
  426. align-items: center;
  427. gap: 20rpx;
  428. }
  429. .meta-item {
  430. display: flex;
  431. align-items: center;
  432. gap: 6rpx;
  433. background: rgba(109, 158, 255, 0.08);
  434. padding: 6rpx 12rpx;
  435. border-radius: 16rpx;
  436. }
  437. .meta-icon {
  438. width: 20rpx;
  439. height: 20rpx;
  440. opacity: 0.7;
  441. }
  442. .vet-hospital,
  443. .vet-experience {
  444. font-size: 24rpx;
  445. color: #6D9EFF;
  446. font-weight: 500;
  447. }
  448. /* 回复内容 */
  449. .reply-content {
  450. margin-bottom: 28rpx;
  451. }
  452. .reply-bubble {
  453. background: #F8FBFF;
  454. border-radius: 24rpx;
  455. padding: 32rpx;
  456. border: 2rpx solid #E5F0FF;
  457. position: relative;
  458. box-shadow: 0 4rpx 16rpx rgba(74, 144, 226, 0.1);
  459. }
  460. .reply-bubble::before {
  461. content: '';
  462. position: absolute;
  463. top: -12rpx;
  464. left: 40rpx;
  465. width: 0;
  466. height: 0;
  467. border-left: 12rpx solid transparent;
  468. border-right: 12rpx solid transparent;
  469. border-bottom: 12rpx solid #F8FBFF;
  470. }
  471. .reply-text {
  472. font-size: 28rpx;
  473. color: #333;
  474. line-height: 1.8;
  475. font-weight: 400;
  476. }
  477. /* 回复底部 */
  478. .reply-footer {
  479. display: flex;
  480. justify-content: space-between;
  481. align-items: center;
  482. padding-top: 24rpx;
  483. border-top: 2rpx dashed #E5F0FF;
  484. }
  485. .reply-time {
  486. display: flex;
  487. align-items: center;
  488. gap: 10rpx;
  489. background: rgba(109, 158, 255, 0.1);
  490. padding: 8rpx 20rpx;
  491. border-radius: 20rpx;
  492. }
  493. /* 无回复状态 */
  494. .no-replies {
  495. background: #FFFFFF;
  496. border-radius: 28rpx;
  497. padding: 80rpx 40rpx;
  498. text-align: center;
  499. box-shadow: 0 12rpx 48rpx rgba(74, 144, 226, 0.15);
  500. border: 2rpx solid #FFFFFF;
  501. position: relative;
  502. overflow: hidden;
  503. }
  504. .no-replies-icon {
  505. width: 200rpx;
  506. height: 150rpx;
  507. margin-bottom: 32rpx;
  508. opacity: 0.6;
  509. filter: hue-rotate(200deg);
  510. }
  511. .no-replies-title {
  512. font-size: 32rpx;
  513. color: #333;
  514. font-weight: 700;
  515. margin-bottom: 16rpx;
  516. display: block;
  517. text-shadow: 0 1rpx 2rpx rgba(0, 0, 0, 0.1);
  518. }
  519. .no-replies-desc {
  520. font-size: 26rpx;
  521. color: #999;
  522. line-height: 1.4;
  523. max-width: 400rpx;
  524. margin: 0 auto;
  525. }
  526. .waiting-animation {
  527. display: flex;
  528. justify-content: center;
  529. gap: 12rpx;
  530. margin-top: 40rpx;
  531. }
  532. .loading-dot {
  533. width: 16rpx;
  534. height: 16rpx;
  535. border-radius: 50%;
  536. background: #6D9EFF;
  537. animation: pulse 1.5s infinite ease-in-out;
  538. }
  539. .loading-dot.dot-1 { animation-delay: 0s; }
  540. .loading-dot.dot-2 { animation-delay: 0.2s; }
  541. .loading-dot.dot-3 { animation-delay: 0.4s; }
  542. /* 页面底部安全区域 */
  543. .page-bottom {
  544. height: 60rpx;
  545. }