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

761 lines
13 KiB

1 month ago
  1. .market-page {
  2. min-height: 100vh;
  3. background: linear-gradient(180deg, #f8fafc 0%, #f1f5f9 100%);
  4. }
  5. /* 头部容器优化 */
  6. .header-container {
  7. position: relative;
  8. overflow: hidden;
  9. border-radius: 0 0 40rpx 40rpx;
  10. box-shadow: 0 4rpx 20rpx rgba(26, 124, 58, 0.15);
  11. }
  12. .header-bg {
  13. position: absolute;
  14. top: 0;
  15. left: 0;
  16. width: 100%;
  17. height: 100%;
  18. }
  19. .bg-gradient {
  20. position: absolute;
  21. width: 100%;
  22. height: 100%;
  23. background: linear-gradient(135deg,
  24. rgba(26, 124, 58, 0.95) 0%,
  25. rgba(46, 204, 113, 0.9) 50%,
  26. rgba(46, 204, 113, 0.85) 100%);
  27. }
  28. .bg-pattern {
  29. position: absolute;
  30. width: 100%;
  31. height: 100%;
  32. background-image:
  33. radial-gradient(circle at 20% 80%, rgba(255, 255, 255, 0.1) 2rpx, transparent 2rpx),
  34. radial-gradient(circle at 80% 20%, rgba(255, 255, 255, 0.1) 2rpx, transparent 2rpx);
  35. background-size: 60rpx 60rpx;
  36. }
  37. .header-content {
  38. position: relative;
  39. z-index: 2;
  40. padding: 40rpx 32rpx 0;
  41. }
  42. .header-main {
  43. display: flex;
  44. justify-content: space-between;
  45. align-items: flex-start;
  46. margin-bottom: 30rpx;
  47. }
  48. .title-area {
  49. flex: 1;
  50. }
  51. .app-name {
  52. font-size: 44rpx;
  53. font-weight: 700;
  54. color: white;
  55. letter-spacing: 1rpx;
  56. margin-bottom: 8rpx;
  57. text-shadow: 0 2rpx 4rpx rgba(0, 0, 0, 0.1);
  58. }
  59. .app-desc {
  60. font-size: 24rpx;
  61. color: rgba(255, 255, 255, 0.9);
  62. }
  63. .header-actions {
  64. display: flex;
  65. align-items: center;
  66. gap: 20rpx;
  67. }
  68. .time-display {
  69. display: flex;
  70. align-items: center;
  71. background: rgba(255, 255, 255, 0.15);
  72. padding: 8rpx 16rpx;
  73. border-radius: 20rpx;
  74. font-size: 22rpx;
  75. color: white;
  76. }
  77. .time-display .iconfont {
  78. font-size: 24rpx;
  79. margin-right: 8rpx;
  80. }
  81. .iconfont.rotating {
  82. animation: rotate 1s linear infinite;
  83. }
  84. @keyframes rotate {
  85. from {
  86. transform: rotate(0deg);
  87. }
  88. to {
  89. transform: rotate(360deg);
  90. }
  91. }
  92. /* 数据统计摘要优化 */
  93. .data-summary {
  94. display: flex;
  95. background: rgba(255, 255, 255, 0.15);
  96. backdrop-filter: blur(10rpx);
  97. border-radius: 20rpx;
  98. padding: 24rpx;
  99. margin-bottom: 30rpx;
  100. border: 1rpx solid rgba(255, 255, 255, 0.2);
  101. }
  102. .summary-item {
  103. flex: 1;
  104. display: flex;
  105. flex-direction: column;
  106. align-items: center;
  107. }
  108. .summary-value {
  109. font-size: 36rpx;
  110. font-weight: 700;
  111. color: white;
  112. margin-bottom: 8rpx;
  113. }
  114. .summary-label {
  115. font-size: 22rpx;
  116. color: rgba(255, 255, 255, 0.9);
  117. }
  118. .summary-divider {
  119. width: 1rpx;
  120. background: rgba(255, 255, 255, 0.3);
  121. margin: 0 20rpx;
  122. }
  123. /* 内容容器优化 */
  124. .content-container {
  125. height: calc(100vh - 280rpx);
  126. padding: 0 32rpx;
  127. box-sizing: border-box;
  128. }
  129. /* 区块标题优化 */
  130. .section-title {
  131. display: flex;
  132. align-items: center;
  133. margin: 40rpx 0 20rpx;
  134. padding-bottom: 16rpx;
  135. border-bottom: 2rpx solid #e2e8f0;
  136. position: relative;
  137. opacity: 0;
  138. transform: translateX(-20rpx);
  139. animation: slideIn 0.6s ease forwards;
  140. }
  141. .fade-in-item {
  142. opacity: 0;
  143. transform: translateX(-20rpx);
  144. animation: slideIn 0.6s ease forwards;
  145. }
  146. @keyframes slideIn {
  147. to {
  148. opacity: 1;
  149. transform: translateX(0);
  150. }
  151. }
  152. .section-text {
  153. font-size: 32rpx;
  154. font-weight: 600;
  155. color: #1e293b;
  156. margin-right: 16rpx;
  157. }
  158. .section-desc {
  159. font-size: 24rpx;
  160. color: #64748b;
  161. flex: 1;
  162. }
  163. .section-indicator {
  164. width: 6rpx;
  165. height: 32rpx;
  166. background: #1a7c3a;
  167. border-radius: 3rpx;
  168. margin-left: 20rpx;
  169. }
  170. .data-count {
  171. background: #e2e8f0;
  172. color: #64748b;
  173. font-size: 22rpx;
  174. padding: 4rpx 12rpx;
  175. border-radius: 12rpx;
  176. margin-left: 12rpx;
  177. }
  178. /* 卡片通用样式优化 */
  179. .market-card {
  180. background: white;
  181. border-radius: 24rpx;
  182. overflow: hidden;
  183. margin-bottom: 32rpx;
  184. box-shadow: 0 8rpx 32rpx rgba(0, 0, 0, 0.06);
  185. position: relative;
  186. border: 1rpx solid #e2e8f0;
  187. opacity: 0;
  188. transform: translateY(40rpx);
  189. }
  190. .market-card:active {
  191. transform: translateY(2rpx);
  192. box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.08);
  193. }
  194. .card-header {
  195. padding: 32rpx 32rpx 20rpx;
  196. border-bottom: 1rpx solid #f1f5f9;
  197. display: flex;
  198. justify-content: space-between;
  199. align-items: flex-start;
  200. }
  201. .card-title-area {
  202. flex: 1;
  203. }
  204. .card-main-title {
  205. display: flex;
  206. align-items: center;
  207. margin-bottom: 12rpx;
  208. }
  209. .card-icon {
  210. width: 56rpx;
  211. height: 56rpx;
  212. border-radius: 14rpx;
  213. margin-right: 16rpx;
  214. display: flex;
  215. align-items: center;
  216. justify-content: center;
  217. overflow: hidden;
  218. }
  219. .card-sales .card-icon {
  220. background: linear-gradient(135deg, #ff6b6b, #ff8e8e);
  221. }
  222. .card-feed .card-icon {
  223. background: linear-gradient(135deg, #4d96ff, #6bc5ff);
  224. }
  225. .card-trend .card-icon {
  226. background: linear-gradient(135deg, #ffd166, #ffde8a);
  227. }
  228. .icon-img {
  229. width: 40rpx;
  230. height: 40rpx;
  231. }
  232. .card-title-text {
  233. font-size: 32rpx;
  234. font-weight: 600;
  235. color: #1e293b;
  236. }
  237. .card-subtitle {
  238. font-size: 24rpx;
  239. color: #64748b;
  240. line-height: 1.4;
  241. }
  242. .card-status {
  243. display: flex;
  244. align-items: center;
  245. gap: 8rpx;
  246. }
  247. .status-dot {
  248. width: 12rpx;
  249. height: 12rpx;
  250. border-radius: 50%;
  251. }
  252. .status-dot.active {
  253. background: #10b981;
  254. animation: pulse 2s infinite;
  255. }
  256. .status-dot.inactive {
  257. background: #94a3b8;
  258. }
  259. @keyframes pulse {
  260. 0%, 100% {
  261. opacity: 1;
  262. }
  263. 50% {
  264. opacity: 0.5;
  265. }
  266. }
  267. .status-text {
  268. font-size: 22rpx;
  269. color: #64748b;
  270. }
  271. /* 数据滚动容器 */
  272. .data-scroll-container {
  273. padding: 0 32rpx;
  274. box-sizing: border-box;
  275. }
  276. /* 销售市场列表样式 */
  277. .price-list {
  278. padding: 20rpx 0;
  279. }
  280. .price-item {
  281. padding: 28rpx 0;
  282. border-bottom: 1rpx solid #f1f5f9;
  283. display: flex;
  284. flex-direction: column;
  285. gap: 12rpx;
  286. }
  287. .price-item:last-child {
  288. border-bottom: none;
  289. }
  290. .price-info {
  291. display: flex;
  292. justify-content: space-between;
  293. align-items: flex-start;
  294. }
  295. .product-name {
  296. font-size: 28rpx;
  297. font-weight: 500;
  298. color: #1e293b;
  299. }
  300. .product-region {
  301. font-size: 22rpx;
  302. color: #64748b;
  303. background: #f8fafc;
  304. padding: 4rpx 12rpx;
  305. border-radius: 12rpx;
  306. }
  307. .price-value {
  308. display: flex;
  309. align-items: baseline;
  310. justify-content: space-between;
  311. }
  312. .price-number {
  313. font-size: 36rpx;
  314. font-weight: 600;
  315. }
  316. .price-unit {
  317. font-size: 22rpx;
  318. color: #64748b;
  319. margin-left: 8rpx;
  320. }
  321. .trend-indicator {
  322. display: flex;
  323. align-items: center;
  324. gap: 8rpx;
  325. }
  326. .trend-icon {
  327. font-size: 28rpx;
  328. }
  329. .trend-change {
  330. font-size: 22rpx;
  331. font-weight: 500;
  332. }
  333. .price-value.up {
  334. color: #ef4444;
  335. }
  336. .price-value.down {
  337. color: #10b981;
  338. }
  339. .price-value.stable {
  340. color: #6b7280;
  341. }
  342. .price-time {
  343. display: flex;
  344. align-items: center;
  345. gap: 8rpx;
  346. font-size: 22rpx;
  347. color: #94a3b8;
  348. }
  349. .iconfont.icon-clock-small {
  350. font-size: 20rpx;
  351. }
  352. /* 饲料市场列表样式 */
  353. .supplier-list {
  354. padding: 20rpx 0;
  355. }
  356. .supplier-item {
  357. padding: 28rpx 0;
  358. border-bottom: 1rpx solid #f1f5f9;
  359. display: flex;
  360. flex-direction: column;
  361. gap: 12rpx;
  362. }
  363. .supplier-item:last-child {
  364. border-bottom: none;
  365. }
  366. .supplier-info {
  367. display: flex;
  368. justify-content: space-between;
  369. align-items: flex-start;
  370. }
  371. .supplier-name {
  372. font-size: 28rpx;
  373. font-weight: 500;
  374. color: #1e293b;
  375. }
  376. .supplier-company {
  377. font-size: 22rpx;
  378. color: #64748b;
  379. background: #f8fafc;
  380. padding: 4rpx 12rpx;
  381. border-radius: 12rpx;
  382. max-width: 200rpx;
  383. overflow: hidden;
  384. text-overflow: ellipsis;
  385. white-space: nowrap;
  386. }
  387. .price-display {
  388. display: flex;
  389. align-items: center;
  390. justify-content: space-between;
  391. }
  392. .price-tag {
  393. padding: 8rpx 20rpx;
  394. border-radius: 20rpx;
  395. font-weight: 600;
  396. display: flex;
  397. align-items: baseline;
  398. min-width: 150rpx;
  399. }
  400. .price-tag.up {
  401. background: #fef2f2;
  402. color: #ef4444;
  403. }
  404. .price-tag.down {
  405. background: #f0fdf4;
  406. color: #10b981;
  407. }
  408. .price-tag.stable {
  409. background: #f8fafc;
  410. color: #6b7280;
  411. }
  412. .price-label {
  413. font-size: 32rpx;
  414. }
  415. .price-per {
  416. font-size: 22rpx;
  417. margin-left: 4rpx;
  418. }
  419. .trend-chart-small {
  420. width: 80rpx;
  421. height: 40rpx;
  422. display: flex;
  423. align-items: flex-end;
  424. gap: 4rpx;
  425. }
  426. .chart-bar {
  427. flex: 1;
  428. border-radius: 4rpx 4rpx 0 0;
  429. min-height: 8rpx;
  430. }
  431. .chart-bar.up {
  432. background: #ef4444;
  433. }
  434. .chart-bar.down {
  435. background: #10b981;
  436. }
  437. .chart-bar.stable {
  438. background: #94a3b8;
  439. }
  440. .supplier-time {
  441. display: flex;
  442. align-items: center;
  443. gap: 8rpx;
  444. font-size: 22rpx;
  445. color: #94a3b8;
  446. }
  447. /* 市场趋势通知公告样式*/
  448. .notice-scroll-wrapper {
  449. position: relative;
  450. overflow: hidden;
  451. padding: 0 32rpx;
  452. }
  453. .notice-scroll-content {
  454. position: relative;
  455. }
  456. /* 无缝滚动列表样式 */
  457. .notice-list {
  458. padding: 20rpx 0;
  459. }
  460. .notice-item {
  461. display: flex;
  462. padding: 28rpx 0;
  463. border-bottom: 1rpx solid #f1f5f9;
  464. gap: 20rpx;
  465. }
  466. .notice-item:last-child {
  467. border-bottom: none;
  468. }
  469. .notice-left {
  470. display: flex;
  471. flex-direction: column;
  472. align-items: center;
  473. gap: 8rpx;
  474. }
  475. .notice-type {
  476. padding: 4rpx 12rpx;
  477. border-radius: 12rpx;
  478. font-size: 20rpx;
  479. font-weight: 500;
  480. min-width: 60rpx;
  481. text-align: center;
  482. }
  483. .notice-type.report {
  484. background: rgba(59, 130, 246, 0.1);
  485. color: #3b82f6;
  486. }
  487. .notice-type.prediction {
  488. background: rgba(139, 92, 246, 0.1);
  489. color: #8b5cf6;
  490. }
  491. .notice-marker {
  492. width: 8rpx;
  493. height: 8rpx;
  494. border-radius: 50%;
  495. background: #94a3b8;
  496. }
  497. .notice-marker.new {
  498. background: #3b82f6;
  499. animation: blink 2s infinite;
  500. }
  501. @keyframes blink {
  502. 0%, 100% {
  503. opacity: 1;
  504. }
  505. 50% {
  506. opacity: 0.5;
  507. }
  508. }
  509. .notice-content {
  510. flex: 1;
  511. display: flex;
  512. flex-direction: column;
  513. gap: 12rpx;
  514. }
  515. .notice-title-area {
  516. display: flex;
  517. align-items: center;
  518. gap: 12rpx;
  519. flex-wrap: wrap;
  520. }
  521. .notice-title {
  522. font-size: 28rpx;
  523. font-weight: 500;
  524. color: #1e293b;
  525. flex: 1;
  526. min-width: 200rpx;
  527. }
  528. .notice-tag {
  529. padding: 4rpx 10rpx;
  530. border-radius: 8rpx;
  531. font-size: 20rpx;
  532. font-weight: 500;
  533. }
  534. .notice-tag.hot {
  535. background: #fef2f2;
  536. color: #ef4444;
  537. }
  538. .notice-tag.new {
  539. background: #eff6ff;
  540. color: #3b82f6;
  541. }
  542. .notice-summary {
  543. font-size: 24rpx;
  544. color: #64748b;
  545. line-height: 1.4;
  546. }
  547. .notice-footer {
  548. display: flex;
  549. align-items: center;
  550. gap: 20rpx;
  551. font-size: 22rpx;
  552. color: #94a3b8;
  553. }
  554. /* 卡片底部优化 */
  555. .card-footer {
  556. padding: 24rpx 32rpx;
  557. background: #f8fafc;
  558. border-top: 1rpx solid #f1f5f9;
  559. display: flex;
  560. justify-content: space-between;
  561. align-items: center;
  562. }
  563. .update-info {
  564. display: flex;
  565. align-items: center;
  566. gap: 8rpx;
  567. }
  568. .iconfont.icon-clock {
  569. font-size: 20rpx;
  570. color: #94a3b8;
  571. }
  572. .update-text {
  573. font-size: 22rpx;
  574. color: #64748b;
  575. }
  576. .scroll-tip {
  577. display: flex;
  578. align-items: center;
  579. gap: 8rpx;
  580. font-size: 22rpx;
  581. color: #94a3b8;
  582. }
  583. .scroll-tip .iconfont {
  584. font-size: 20rpx;
  585. }
  586. .statistics-info {
  587. flex: 1;
  588. }
  589. .stat-text {
  590. font-size: 22rpx;
  591. color: #64748b;
  592. }
  593. .auto-scroll-tip {
  594. display: flex;
  595. align-items: center;
  596. gap: 8rpx;
  597. font-size: 22rpx;
  598. color: #94a3b8;
  599. }
  600. .auto-scroll-tip .iconfont {
  601. font-size: 20rpx;
  602. animation: rotate 2s linear infinite;
  603. }
  604. /* 更新页脚优化 */
  605. .update-footer {
  606. padding: 32rpx 0 100rpx;
  607. text-align: center;
  608. opacity: 0;
  609. transform: translateY(20rpx);
  610. animation: slideIn 0.6s ease 0.3s forwards;
  611. }
  612. .update-line {
  613. display: flex;
  614. align-items: center;
  615. justify-content: center;
  616. gap: 8rpx;
  617. margin-bottom: 12rpx;
  618. }
  619. .iconfont.icon-sync {
  620. font-size: 20rpx;
  621. color: #94a3b8;
  622. }
  623. .update-tip {
  624. font-size: 22rpx;
  625. color: #64748b;
  626. }
  627. /* 卡片特定样式 */
  628. .card-sales {
  629. border-top: 4rpx solid #ff6b6b;
  630. }
  631. .card-feed {
  632. border-top: 4rpx solid #4d96ff;
  633. }
  634. .card-trend {
  635. border-top: 4rpx solid #ffd166;
  636. }