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

606 lines
9.8 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. /* 兽医回复区域 */
  307. .replies-section {
  308. margin: 24rpx;
  309. }
  310. .reply-count {
  311. margin-left: auto;
  312. padding: 8rpx 20rpx;
  313. border-radius: 24rpx;
  314. display: flex;
  315. align-items: center;
  316. gap: 4rpx;
  317. box-shadow: 0 4rpx 12rpx rgba(157, 75, 255, 0.3);
  318. }
  319. .count-number {
  320. font-size: 30rpx;
  321. font-weight: 700;
  322. }
  323. .count-text {
  324. font-size: 24rpx;
  325. font-weight: 500;
  326. opacity: 0.9;
  327. }
  328. /* 回复列表 */
  329. .replies-list {
  330. display: flex;
  331. flex-direction: column;
  332. gap: 24rpx;
  333. }
  334. .vet-reply-card {
  335. background: #FFFFFF;
  336. border-radius: 28rpx;
  337. padding: 36rpx;
  338. box-shadow: 0 12rpx 48rpx rgba(74, 144, 226, 0.15);
  339. border: 2rpx solid #FFFFFF;
  340. position: relative;
  341. overflow: hidden;
  342. backdrop-filter: blur(20rpx);
  343. }
  344. /* 兽医信息 */
  345. .vet-info {
  346. display: flex;
  347. align-items: center;
  348. margin-bottom: 32rpx;
  349. }
  350. .vet-avatar {
  351. width: 80rpx;
  352. height: 80rpx;
  353. border-radius: 50%;
  354. border: 3rpx solid #FFFFFF;
  355. box-shadow: 0 8rpx 24rpx rgba(255, 215, 0, 0.3);
  356. margin-right: 20rpx;
  357. flex-shrink: 0;
  358. }
  359. .vet-verified {
  360. position: absolute;
  361. bottom: 2rpx;
  362. right: 2rpx;
  363. width: 20rpx;
  364. height: 20rpx;
  365. background: #2ECC71;
  366. border: 2rpx solid white;
  367. border-radius: 50%;
  368. }
  369. .vet-details {
  370. flex: 1;
  371. }
  372. .vet-name-row {
  373. display: flex;
  374. align-items: center;
  375. margin-bottom: 12rpx;
  376. }
  377. .vet-name {
  378. font-size: 32rpx;
  379. font-weight: 700;
  380. color: #1A1A1A;
  381. margin-right: 16rpx;
  382. text-shadow: 0 1rpx 2rpx rgba(0, 0, 0, 0.1);
  383. }
  384. .vet-badge {
  385. padding: 2rpx 10rpx;
  386. border-radius: 20rpx;
  387. box-shadow: 0 4rpx 12rpx rgba(255, 215, 0, 0.3);
  388. }
  389. .vet-title {
  390. font-size: 24rpx;
  391. font-weight: 700;
  392. letter-spacing: 0.5rpx;
  393. }
  394. .vet-meta {
  395. display: flex;
  396. align-items: center;
  397. gap: 20rpx;
  398. }
  399. .meta-item {
  400. display: flex;
  401. align-items: center;
  402. gap: 6rpx;
  403. background: rgba(109, 158, 255, 0.08);
  404. padding: 6rpx 12rpx;
  405. border-radius: 16rpx;
  406. }
  407. .vet-hospital,
  408. .vet-experience {
  409. font-size: 24rpx;
  410. color: #6D9EFF;
  411. font-weight: 500;
  412. }
  413. /* 回复内容 */
  414. .reply-content {
  415. margin-bottom: 28rpx;
  416. }
  417. .reply-bubble {
  418. background: #F8FBFF;
  419. border-radius: 24rpx;
  420. padding: 32rpx;
  421. border: 2rpx solid #E5F0FF;
  422. position: relative;
  423. box-shadow: 0 4rpx 16rpx rgba(74, 144, 226, 0.1);
  424. }
  425. .reply-bubble::before {
  426. content: '';
  427. position: absolute;
  428. top: -12rpx;
  429. left: 40rpx;
  430. width: 0;
  431. height: 0;
  432. border-left: 12rpx solid transparent;
  433. border-right: 12rpx solid transparent;
  434. border-bottom: 12rpx solid #F8FBFF;
  435. }
  436. .reply-text {
  437. font-size: 28rpx;
  438. color: #333;
  439. line-height: 1.8;
  440. font-weight: 400;
  441. }
  442. /* 回复底部 */
  443. .reply-footer {
  444. display: flex;
  445. justify-content: space-between;
  446. align-items: center;
  447. padding-top: 24rpx;
  448. border-top: 2rpx dashed #E5F0FF;
  449. }
  450. .reply-time {
  451. display: flex;
  452. align-items: center;
  453. gap: 10rpx;
  454. background: rgba(109, 158, 255, 0.1);
  455. padding: 8rpx 20rpx;
  456. border-radius: 20rpx;
  457. }
  458. /* 无回复状态 */
  459. .no-replies {
  460. background: #FFFFFF;
  461. border-radius: 28rpx;
  462. padding: 80rpx 40rpx;
  463. text-align: center;
  464. box-shadow: 0 12rpx 48rpx rgba(74, 144, 226, 0.15);
  465. border: 2rpx solid #FFFFFF;
  466. position: relative;
  467. overflow: hidden;
  468. }
  469. .no-replies-icon {
  470. width: 200rpx;
  471. height: 150rpx;
  472. margin-bottom: 32rpx;
  473. opacity: 0.6;
  474. filter: hue-rotate(200deg);
  475. }
  476. .no-replies-title {
  477. font-size: 32rpx;
  478. color: #333;
  479. font-weight: 700;
  480. margin-bottom: 16rpx;
  481. display: block;
  482. text-shadow: 0 1rpx 2rpx rgba(0, 0, 0, 0.1);
  483. }
  484. .no-replies-desc {
  485. font-size: 26rpx;
  486. color: #999;
  487. line-height: 1.4;
  488. max-width: 400rpx;
  489. margin: 0 auto;
  490. }
  491. .waiting-animation {
  492. display: flex;
  493. justify-content: center;
  494. gap: 12rpx;
  495. margin-top: 40rpx;
  496. }
  497. .loading-dot {
  498. width: 16rpx;
  499. height: 16rpx;
  500. border-radius: 50%;
  501. background: #6D9EFF;
  502. animation: pulse 1.5s infinite ease-in-out;
  503. }
  504. .loading-dot.dot-1 { animation-delay: 0s; }
  505. .loading-dot.dot-2 { animation-delay: 0.2s; }
  506. .loading-dot.dot-3 { animation-delay: 0.4s; }
  507. /* 页面底部安全区域 */
  508. .page-bottom {
  509. height: 60rpx;
  510. }