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

603 lines
10 KiB

  1. /* 全局样式 */
  2. .wzbox {
  3. min-height: 100vh;
  4. position: relative;
  5. background: linear-gradient(180deg, #F8FBFF 0%, #F0F7FF 100%);
  6. }
  7. /* 头部样式优化 */
  8. .header {
  9. padding: 20rpx 40rpx 20rpx;
  10. background: linear-gradient(135deg, #6D9EFF 0%, #4A7CFF 100%);
  11. border-radius: 0 0 36rpx 36rpx;
  12. box-shadow: 0 4rpx 20rpx rgba(74, 144, 226, 0.15);
  13. position: relative;
  14. overflow: hidden;
  15. }
  16. .header-content {
  17. position: relative;
  18. z-index: 2;
  19. }
  20. .title-section {
  21. display: flex;
  22. flex-direction: column;
  23. gap: 8rpx;
  24. }
  25. .title {
  26. font-size: 44rpx;
  27. font-weight: 700;
  28. color: #FFFFFF;
  29. letter-spacing: 0.5rpx;
  30. text-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.1);
  31. }
  32. .subtitle {
  33. font-size: 28rpx;
  34. color: rgba(255, 255, 255, 0.9);
  35. font-weight: 400;
  36. }
  37. /* 头部装饰元素 */
  38. .header-decoration {
  39. position: absolute;
  40. top: 0;
  41. left: 0;
  42. right: 0;
  43. bottom: 0;
  44. overflow: hidden;
  45. z-index: 1;
  46. }
  47. .decoration-circle {
  48. position: absolute;
  49. border-radius: 50%;
  50. background: rgba(255, 255, 255, 0.08);
  51. }
  52. .circle-1 {
  53. width: 200rpx;
  54. height: 200rpx;
  55. top: -80rpx;
  56. right: -40rpx;
  57. }
  58. .circle-2 {
  59. width: 120rpx;
  60. height: 120rpx;
  61. bottom: -40rpx;
  62. left: -20rpx;
  63. }
  64. /* 问诊记录列表 */
  65. .record-list {
  66. height: calc(100vh - 200rpx);
  67. padding: 0 32rpx 20rpx;
  68. box-sizing: border-box;
  69. }
  70. .records-container {
  71. padding-top: 24rpx;
  72. }
  73. /* 问诊记录卡片 */
  74. .record-card {
  75. background: #FFFFFF;
  76. border-radius: 24rpx;
  77. margin-bottom: 24rpx;
  78. box-shadow: 0 6rpx 24rpx rgba(74, 144, 226, 0.08);
  79. position: relative;
  80. overflow: hidden;
  81. transition: all 0.3s cubic-bezier(0.2, 0, 0.2, 1);
  82. border: 1rpx solid #F0F7FF;
  83. }
  84. .record-card:active {
  85. transform: translateY(-2rpx);
  86. box-shadow: 0 10rpx 30rpx rgba(74, 144, 226, 0.15);
  87. }
  88. /* 卡片头部 */
  89. .card-header {
  90. display: flex;
  91. justify-content: space-between;
  92. align-items: center;
  93. padding: 24rpx 28rpx;
  94. border-bottom: 1rpx solid #F5F9FF;
  95. }
  96. .user-section {
  97. display: flex;
  98. align-items: center;
  99. gap: 16rpx;
  100. flex: 1;
  101. }
  102. .user-avatar {
  103. width: 60rpx;
  104. height: 60rpx;
  105. border-radius: 50%;
  106. border: 2rpx solid rgba(255, 255, 255, 0.8);
  107. box-shadow: 0 2rpx 12rpx rgba(0, 0, 0, 0.08);
  108. }
  109. .user-name {
  110. font-size: 28rpx;
  111. color: #1A1A1A;
  112. font-weight: 600;
  113. }
  114. /* 状态标签 */
  115. .status-tag {
  116. padding: 8rpx 20rpx;
  117. border-radius: 20rpx;
  118. font-size: 22rpx;
  119. font-weight: 600;
  120. min-width: 80rpx;
  121. text-align: center;
  122. flex-shrink: 0;
  123. }
  124. .status-replied {
  125. background: linear-gradient(135deg, rgba(76, 217, 100, 0.12) 0%, rgba(46, 204, 113, 0.12) 100%);
  126. color: #2ECC71;
  127. border: 1rpx solid rgba(46, 204, 113, 0.2);
  128. }
  129. .status-pending {
  130. background: linear-gradient(135deg, rgba(255, 149, 0, 0.12) 0%, rgba(255, 127, 0, 0.12) 100%);
  131. color: #FF9500;
  132. border: 1rpx solid rgba(255, 149, 0, 0.2);
  133. }
  134. /* 牲畜信息 */
  135. .livestock-section {
  136. padding: 20rpx 28rpx;
  137. }
  138. /* 牲畜信息标题优化 */
  139. .livestock-title-wrapper {
  140. display: flex;
  141. align-items: center;
  142. justify-content: center;
  143. margin-bottom: 20rpx;
  144. position: relative;
  145. }
  146. .livestock-title-line {
  147. flex: 1;
  148. height: 2rpx;
  149. background: linear-gradient(90deg, transparent, #4A7CFF 50%, transparent);
  150. opacity: 0.3;
  151. }
  152. .livestock-title-content {
  153. display: flex;
  154. align-items: center;
  155. gap: 12rpx;
  156. padding: 0 20rpx;
  157. position: relative;
  158. }
  159. .livestock-title-text {
  160. font-size: 30rpx;
  161. font-weight: 700;
  162. color: #333;
  163. background: linear-gradient(135deg, #4A7CFF 0%, #8CB4FF 100%);
  164. -webkit-background-clip: text;
  165. -webkit-text-fill-color: transparent;
  166. background-clip: text;
  167. text-shadow: 0 2rpx 4rpx rgba(74, 124, 255, 0.1);
  168. letter-spacing: 1rpx;
  169. }
  170. .livestock-tags {
  171. display: flex;
  172. gap: 16rpx;
  173. flex-wrap: wrap;
  174. }
  175. .livestock-tag {
  176. padding: 5rpx 20rpx;
  177. border-radius: 20rpx;
  178. font-size: 26rpx;
  179. font-weight: 600;
  180. display: flex;
  181. align-items: center;
  182. justify-content: center;
  183. box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.1);
  184. }
  185. .type-tag {
  186. background: linear-gradient(135deg, #6D9EFF 0%, #4A7CFF 100%);
  187. color: #FFFFFF;
  188. border: 2rpx solid rgba(255, 255, 255, 0.3);
  189. }
  190. .age-tag {
  191. background: linear-gradient(135deg, #FFB347 0%, #FFA033 100%);
  192. color: #FFFFFF;
  193. border: 2rpx solid rgba(255, 255, 255, 0.3);
  194. }
  195. .gender-tag {
  196. background: linear-gradient(135deg, #42E695 0%, #3BB2B8 100%);
  197. color: #FFFFFF;
  198. border: 2rpx solid rgba(255, 255, 255, 0.3);
  199. }
  200. .tag-text {
  201. font-size: 26rpx;
  202. font-weight: 600;
  203. color: #FFFFFF;
  204. }
  205. /* 症状描述 */
  206. .symptom-section {
  207. padding: 24rpx 28rpx 28rpx;
  208. }
  209. .symptom-content {
  210. background: #F9FAFF;
  211. padding: 20rpx 24rpx;
  212. border-radius: 16rpx;
  213. border: 1rpx solid #E6ECFF;
  214. position: relative;
  215. }
  216. .symptom-content::before {
  217. content: '症状描述';
  218. position: absolute;
  219. top: -12rpx;
  220. left: 24rpx;
  221. background: #FFFFFF;
  222. padding: 0 12rpx;
  223. font-size: 24rpx;
  224. font-weight: 600;
  225. color: #4A7CFF;
  226. z-index: 1;
  227. }
  228. .symptom-text {
  229. font-size: 28rpx;
  230. color: #333;
  231. line-height: 1.6;
  232. font-weight: 400;
  233. }
  234. /* 卡片底部 */
  235. .card-footer {
  236. display: flex;
  237. justify-content: space-between;
  238. align-items: center;
  239. padding: 20rpx 28rpx;
  240. border-top: 1rpx solid #F5F9FF;
  241. }
  242. .time-info {
  243. display: flex;
  244. align-items: center;
  245. gap: 8rpx;
  246. }
  247. .time-text {
  248. font-size: 24rpx;
  249. color: #999;
  250. font-weight: 400;
  251. }
  252. .reply-info {
  253. display: flex;
  254. align-items: center;
  255. gap: 8rpx;
  256. padding: 8rpx 16rpx;
  257. background: #F0F7FF;
  258. border-radius: 16rpx;
  259. border: 1rpx solid #E5EFFF;
  260. }
  261. .reply-count {
  262. font-size: 24rpx;
  263. font-weight: 500;
  264. color: #4A7CFF;
  265. display: inline-block;
  266. padding: 8rpx 16rpx;
  267. }
  268. /* 空状态优化 */
  269. .empty-state {
  270. display: flex;
  271. flex-direction: column;
  272. align-items: center;
  273. padding-top: 120rpx;
  274. text-align: center;
  275. }
  276. .empty-icon {
  277. width: 400rpx;
  278. margin-bottom: 32rpx;
  279. opacity: 0.5;
  280. }
  281. .empty-text {
  282. font-size: 32rpx;
  283. color: #666;
  284. margin-bottom: 12rpx;
  285. font-weight: 600;
  286. }
  287. .empty-tip {
  288. font-size: 26rpx;
  289. color: #999;
  290. margin-bottom: 40rpx;
  291. line-height: 1.4;
  292. }
  293. /* 列表底部 */
  294. .list-footer {
  295. text-align: center;
  296. padding: 40rpx 0;
  297. color: #999;
  298. font-size: 24rpx;
  299. }
  300. .footer-text {
  301. opacity: 0.6;
  302. letter-spacing: 1rpx;
  303. }
  304. /* 卡片入场动画 */
  305. @keyframes cardSlideIn {
  306. from {
  307. opacity: 0;
  308. transform: translateY(30rpx);
  309. }
  310. to {
  311. opacity: 1;
  312. transform: translateY(0);
  313. }
  314. }
  315. .record-card {
  316. animation: cardSlideIn 0.4s ease-out forwards;
  317. opacity: 0;
  318. }
  319. .record-card:nth-child(1) { animation-delay: 0.1s; }
  320. .record-card:nth-child(2) { animation-delay: 0.15s; }
  321. .record-card:nth-child(3) { animation-delay: 0.2s; }
  322. .record-card:nth-child(4) { animation-delay: 0.25s; }
  323. .record-card:nth-child(5) { animation-delay: 0.3s; }
  324. /* ========== 弹窗样式(适配新增标题字段) ========== */
  325. .plan-popup {
  326. position: fixed;
  327. top: 0;
  328. left: 0;
  329. right: 0;
  330. bottom: 0;
  331. z-index: 1000;
  332. display: flex;
  333. align-items: flex-end;
  334. }
  335. .popup-mask {
  336. position: absolute;
  337. top: 0;
  338. left: 0;
  339. right: 0;
  340. bottom: 0;
  341. background-color: rgba(0, 0, 0, 0.4);
  342. animation: fadeIn 0.2s ease;
  343. }
  344. /* 弹窗内容 */
  345. .popup-content {
  346. position: relative;
  347. width: 100%;
  348. background-color: #ffffff;
  349. border-radius: 32rpx 32rpx 0 0;
  350. box-shadow: 0 -8rpx 40rpx rgba(74, 124, 255, 0.12);
  351. animation: slideUp 0.3s cubic-bezier(0.2, 0.6, 0.4, 1);
  352. max-height: 80vh;
  353. display: flex;
  354. flex-direction: column;
  355. }
  356. /* 弹窗头部 */
  357. .popup-header {
  358. padding: 30rpx 40rpx;
  359. display: flex;
  360. justify-content: space-between;
  361. align-items: center;
  362. border-bottom: 2rpx solid #F0F7FF;
  363. background: linear-gradient(90deg, #F8FBFF, #ffffff);
  364. border-top-left-radius: 30rpx;
  365. border-top-right-radius: 30rpx;
  366. }
  367. .popup-title {
  368. font-size: 36rpx;
  369. font-weight: 700;
  370. color: #1A1A1A;
  371. background: linear-gradient(135deg, #4A7CFF 0%, #8CB4FF 100%);
  372. -webkit-background-clip: text;
  373. -webkit-text-fill-color: transparent;
  374. background-clip: text;
  375. letter-spacing: 1rpx;
  376. }
  377. .popup-close {
  378. width: 48rpx;
  379. height: 48rpx;
  380. line-height: 48rpx;
  381. text-align: center;
  382. font-size: 36rpx;
  383. color: #999;
  384. background: #F5F9FF;
  385. border-radius: 50%;
  386. transition: all 0.2s;
  387. }
  388. .popup-close:active {
  389. background: #E6ECFF;
  390. color: #4A7CFF;
  391. }
  392. /* 表单滚动区 */
  393. .popup-form {
  394. flex: 1;
  395. padding: 30rpx 40rpx 20rpx;
  396. box-sizing: border-box;
  397. max-height: 60vh;
  398. }
  399. .form-item {
  400. margin-bottom: 36rpx;
  401. position: relative;
  402. }
  403. .item-label-wrapper {
  404. display: flex;
  405. align-items: center;
  406. margin-bottom: 12rpx;
  407. }
  408. .item-label {
  409. font-size: 30rpx;
  410. font-weight: 600;
  411. color: #333;
  412. }
  413. .required-star {
  414. color: #FF6B6B;
  415. margin-left: 6rpx;
  416. font-size: 28rpx;
  417. }
  418. .optional-tip {
  419. color: #999;
  420. font-size: 26rpx;
  421. margin-left: 12rpx;
  422. font-weight: 400;
  423. }
  424. .item-input {
  425. width: 100%;
  426. height: 88rpx;
  427. background: #F9FAFF;
  428. border: 2rpx solid #E6ECFF;
  429. border-radius: 20rpx;
  430. padding: 0 28rpx;
  431. font-size: 30rpx;
  432. color: #1A1A1A;
  433. box-sizing: border-box;
  434. transition: border 0.2s;
  435. }
  436. .item-input:focus {
  437. border-color: #4A7CFF;
  438. }
  439. .item-input.disabled {
  440. background: #F0F2F6;
  441. color: #666;
  442. border-color: #DDD;
  443. }
  444. .item-textarea {
  445. width: 100%;
  446. background: #F9FAFF;
  447. border: 2rpx solid #E6ECFF;
  448. border-radius: 20rpx;
  449. padding: 24rpx 28rpx;
  450. font-size: 30rpx;
  451. color: #1A1A1A;
  452. line-height: 1.6;
  453. min-height: 160rpx;
  454. box-sizing: border-box;
  455. }
  456. .word-count {
  457. position: absolute;
  458. right: 16rpx;
  459. bottom: 5rpx;
  460. font-size: 24rpx;
  461. color: #AAA;
  462. background: #F9FAFF;
  463. padding: 0 8rpx;
  464. z-index: 2;
  465. }
  466. /* 弹窗底部按钮 */
  467. .popup-footer {
  468. padding: 24rpx 40rpx 40rpx;
  469. display: flex;
  470. gap: 24rpx;
  471. border-top: 2rpx solid #F0F7FF;
  472. background: #ffffff;
  473. }
  474. .btn-cancel, .btn-submit {
  475. flex: 1;
  476. height: 88rpx;
  477. border-radius: 44rpx;
  478. font-size: 32rpx;
  479. font-weight: 600;
  480. display: flex;
  481. align-items: center;
  482. justify-content: center;
  483. box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.05);
  484. }
  485. .btn-cancel {
  486. background: #F5F9FF;
  487. color: #666;
  488. border: none;
  489. }
  490. .btn-cancel:active {
  491. background: #E6ECFF;
  492. }
  493. .btn-submit {
  494. background: linear-gradient(135deg, #6D9EFF 0%, #4A7CFF 100%);
  495. color: #FFFFFF;
  496. border: none;
  497. }
  498. .btn-submit:active {
  499. opacity: 0.9;
  500. transform: scale(0.98);
  501. }
  502. /* placeholder样式 */
  503. .placeholder-style {
  504. color: #B0B8C5;
  505. font-size: 28rpx;
  506. }
  507. /* 动画定义 */
  508. @keyframes slideUp {
  509. from {
  510. transform: translateY(100%);
  511. }
  512. to {
  513. transform: translateY(0);
  514. }
  515. }
  516. @keyframes fadeIn {
  517. from { opacity: 0; }
  518. to { opacity: 1; }
  519. }
  520. /* 响应式适配 */
  521. @media screen and (min-width: 768px) {
  522. .record-card {
  523. max-width: 600rpx;
  524. margin-left: auto;
  525. margin-right: auto;
  526. }
  527. }