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

770 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. .unread-badge {
  179. background: #ef4444;
  180. color: white;
  181. font-size: 20rpx;
  182. padding: 4rpx 12rpx;
  183. border-radius: 12rpx;
  184. margin-left: 12rpx;
  185. font-weight: 500;
  186. }
  187. /* 卡片通用样式优化 */
  188. .market-card {
  189. background: white;
  190. border-radius: 24rpx;
  191. overflow: hidden;
  192. margin-bottom: 32rpx;
  193. box-shadow: 0 8rpx 32rpx rgba(0, 0, 0, 0.06);
  194. position: relative;
  195. border: 1rpx solid #e2e8f0;
  196. opacity: 0;
  197. transform: translateY(40rpx);
  198. }
  199. .market-card:active {
  200. transform: translateY(2rpx);
  201. box-shadow: 0 4rpx 16rpx rgba(0, 0, 0, 0.08);
  202. }
  203. .card-header {
  204. padding: 32rpx 32rpx 20rpx;
  205. border-bottom: 1rpx solid #f1f5f9;
  206. display: flex;
  207. justify-content: space-between;
  208. align-items: flex-start;
  209. }
  210. .card-title-area {
  211. flex: 1;
  212. }
  213. .card-main-title {
  214. display: flex;
  215. align-items: center;
  216. margin-bottom: 12rpx;
  217. }
  218. .card-icon {
  219. width: 56rpx;
  220. height: 56rpx;
  221. border-radius: 14rpx;
  222. margin-right: 16rpx;
  223. display: flex;
  224. align-items: center;
  225. justify-content: center;
  226. overflow: hidden;
  227. }
  228. .card-sales .card-icon {
  229. background: linear-gradient(135deg, #ff6b6b, #ff8e8e);
  230. }
  231. .card-feed .card-icon {
  232. background: linear-gradient(135deg, #4d96ff, #6bc5ff);
  233. }
  234. .card-trend .card-icon {
  235. background: linear-gradient(135deg, #ffd166, #ffde8a);
  236. }
  237. .icon-img {
  238. width: 40rpx;
  239. height: 40rpx;
  240. }
  241. .card-title-text {
  242. font-size: 32rpx;
  243. font-weight: 600;
  244. color: #1e293b;
  245. }
  246. .card-subtitle {
  247. font-size: 24rpx;
  248. color: #64748b;
  249. line-height: 1.4;
  250. }
  251. .card-status {
  252. display: flex;
  253. align-items: center;
  254. gap: 8rpx;
  255. }
  256. .status-dot {
  257. width: 12rpx;
  258. height: 12rpx;
  259. border-radius: 50%;
  260. }
  261. .status-dot.active {
  262. background: #10b981;
  263. animation: pulse 2s infinite;
  264. }
  265. .status-dot.inactive {
  266. background: #94a3b8;
  267. }
  268. @keyframes pulse {
  269. 0%, 100% {
  270. opacity: 1;
  271. }
  272. 50% {
  273. opacity: 0.5;
  274. }
  275. }
  276. .status-text {
  277. font-size: 22rpx;
  278. color: #64748b;
  279. }
  280. /* 数据滚动容器 */
  281. .data-scroll-container {
  282. padding: 0 32rpx;
  283. box-sizing: border-box;
  284. }
  285. /* 销售市场列表样式 */
  286. .price-list {
  287. padding: 20rpx 0;
  288. }
  289. .price-item {
  290. padding: 28rpx 0;
  291. border-bottom: 1rpx solid #f1f5f9;
  292. display: flex;
  293. flex-direction: column;
  294. gap: 12rpx;
  295. }
  296. .price-item:last-child {
  297. border-bottom: none;
  298. }
  299. .price-info {
  300. display: flex;
  301. justify-content: space-between;
  302. align-items: flex-start;
  303. }
  304. .product-name {
  305. font-size: 28rpx;
  306. font-weight: 500;
  307. color: #1e293b;
  308. }
  309. .product-region {
  310. font-size: 22rpx;
  311. color: #64748b;
  312. background: #f8fafc;
  313. padding: 4rpx 12rpx;
  314. border-radius: 12rpx;
  315. }
  316. .price-value {
  317. display: flex;
  318. align-items: baseline;
  319. justify-content: space-between;
  320. }
  321. .price-number {
  322. font-size: 36rpx;
  323. font-weight: 600;
  324. }
  325. .price-unit {
  326. font-size: 22rpx;
  327. color: #64748b;
  328. margin-left: 8rpx;
  329. }
  330. .trend-indicator {
  331. display: flex;
  332. align-items: center;
  333. gap: 8rpx;
  334. }
  335. .trend-icon {
  336. font-size: 28rpx;
  337. }
  338. .trend-change {
  339. font-size: 22rpx;
  340. font-weight: 500;
  341. }
  342. .price-value.up {
  343. color: #ef4444;
  344. }
  345. .price-value.down {
  346. color: #10b981;
  347. }
  348. .price-value.stable {
  349. color: #6b7280;
  350. }
  351. .price-time {
  352. display: flex;
  353. align-items: center;
  354. gap: 8rpx;
  355. font-size: 22rpx;
  356. color: #94a3b8;
  357. }
  358. .iconfont.icon-clock-small {
  359. font-size: 20rpx;
  360. }
  361. /* 饲料市场列表样式 */
  362. .supplier-list {
  363. padding: 20rpx 0;
  364. }
  365. .supplier-item {
  366. padding: 28rpx 0;
  367. border-bottom: 1rpx solid #f1f5f9;
  368. display: flex;
  369. flex-direction: column;
  370. gap: 12rpx;
  371. }
  372. .supplier-item:last-child {
  373. border-bottom: none;
  374. }
  375. .supplier-info {
  376. display: flex;
  377. justify-content: space-between;
  378. align-items: flex-start;
  379. }
  380. .supplier-name {
  381. font-size: 28rpx;
  382. font-weight: 500;
  383. color: #1e293b;
  384. }
  385. .supplier-company {
  386. font-size: 22rpx;
  387. color: #64748b;
  388. background: #f8fafc;
  389. padding: 4rpx 12rpx;
  390. border-radius: 12rpx;
  391. max-width: 200rpx;
  392. overflow: hidden;
  393. text-overflow: ellipsis;
  394. white-space: nowrap;
  395. }
  396. .price-display {
  397. display: flex;
  398. align-items: center;
  399. justify-content: space-between;
  400. }
  401. .price-tag {
  402. padding: 8rpx 20rpx;
  403. border-radius: 20rpx;
  404. font-weight: 600;
  405. display: flex;
  406. align-items: baseline;
  407. min-width: 150rpx;
  408. }
  409. .price-tag.up {
  410. background: #fef2f2;
  411. color: #ef4444;
  412. }
  413. .price-tag.down {
  414. background: #f0fdf4;
  415. color: #10b981;
  416. }
  417. .price-tag.stable {
  418. background: #f8fafc;
  419. color: #6b7280;
  420. }
  421. .price-label {
  422. font-size: 32rpx;
  423. }
  424. .price-per {
  425. font-size: 22rpx;
  426. margin-left: 4rpx;
  427. }
  428. .trend-chart-small {
  429. width: 80rpx;
  430. height: 40rpx;
  431. display: flex;
  432. align-items: flex-end;
  433. gap: 4rpx;
  434. }
  435. .chart-bar {
  436. flex: 1;
  437. border-radius: 4rpx 4rpx 0 0;
  438. min-height: 8rpx;
  439. }
  440. .chart-bar.up {
  441. background: #ef4444;
  442. }
  443. .chart-bar.down {
  444. background: #10b981;
  445. }
  446. .chart-bar.stable {
  447. background: #94a3b8;
  448. }
  449. .supplier-time {
  450. display: flex;
  451. align-items: center;
  452. gap: 8rpx;
  453. font-size: 22rpx;
  454. color: #94a3b8;
  455. }
  456. /* 市场趋势通知公告样式*/
  457. .notice-scroll-wrapper {
  458. position: relative;
  459. overflow: hidden;
  460. padding: 0 32rpx;
  461. }
  462. .notice-scroll-content {
  463. position: relative;
  464. }
  465. /* 无缝滚动列表样式 */
  466. .notice-list {
  467. padding: 20rpx 0;
  468. }
  469. .notice-item {
  470. display: flex;
  471. padding: 28rpx 0;
  472. border-bottom: 1rpx solid #f1f5f9;
  473. gap: 20rpx;
  474. }
  475. .notice-item:last-child {
  476. border-bottom: none;
  477. }
  478. .notice-left {
  479. display: flex;
  480. flex-direction: column;
  481. align-items: center;
  482. gap: 8rpx;
  483. }
  484. .notice-type {
  485. padding: 4rpx 12rpx;
  486. border-radius: 12rpx;
  487. font-size: 20rpx;
  488. font-weight: 500;
  489. min-width: 60rpx;
  490. text-align: center;
  491. }
  492. .notice-type.report {
  493. background: rgba(59, 130, 246, 0.1);
  494. color: #3b82f6;
  495. }
  496. .notice-type.prediction {
  497. background: rgba(139, 92, 246, 0.1);
  498. color: #8b5cf6;
  499. }
  500. .notice-marker {
  501. width: 8rpx;
  502. height: 8rpx;
  503. border-radius: 50%;
  504. background: #94a3b8;
  505. }
  506. .notice-marker.new {
  507. background: #3b82f6;
  508. animation: blink 2s infinite;
  509. }
  510. @keyframes blink {
  511. 0%, 100% {
  512. opacity: 1;
  513. }
  514. 50% {
  515. opacity: 0.5;
  516. }
  517. }
  518. .notice-content {
  519. flex: 1;
  520. display: flex;
  521. flex-direction: column;
  522. gap: 12rpx;
  523. }
  524. .notice-title-area {
  525. display: flex;
  526. align-items: center;
  527. gap: 12rpx;
  528. flex-wrap: wrap;
  529. }
  530. .notice-title {
  531. font-size: 28rpx;
  532. font-weight: 500;
  533. color: #1e293b;
  534. flex: 1;
  535. min-width: 200rpx;
  536. }
  537. .notice-tag {
  538. padding: 4rpx 10rpx;
  539. border-radius: 8rpx;
  540. font-size: 20rpx;
  541. font-weight: 500;
  542. }
  543. .notice-tag.hot {
  544. background: #fef2f2;
  545. color: #ef4444;
  546. }
  547. .notice-tag.new {
  548. background: #eff6ff;
  549. color: #3b82f6;
  550. }
  551. .notice-summary {
  552. font-size: 24rpx;
  553. color: #64748b;
  554. line-height: 1.4;
  555. }
  556. .notice-footer {
  557. display: flex;
  558. align-items: center;
  559. gap: 20rpx;
  560. font-size: 22rpx;
  561. color: #94a3b8;
  562. }
  563. /* 卡片底部优化 */
  564. .card-footer {
  565. padding: 24rpx 32rpx;
  566. background: #f8fafc;
  567. border-top: 1rpx solid #f1f5f9;
  568. display: flex;
  569. justify-content: space-between;
  570. align-items: center;
  571. }
  572. .update-info {
  573. display: flex;
  574. align-items: center;
  575. gap: 8rpx;
  576. }
  577. .iconfont.icon-clock {
  578. font-size: 20rpx;
  579. color: #94a3b8;
  580. }
  581. .update-text {
  582. font-size: 22rpx;
  583. color: #64748b;
  584. }
  585. .scroll-tip {
  586. display: flex;
  587. align-items: center;
  588. gap: 8rpx;
  589. font-size: 22rpx;
  590. color: #94a3b8;
  591. }
  592. .scroll-tip .iconfont {
  593. font-size: 20rpx;
  594. }
  595. .statistics-info {
  596. flex: 1;
  597. }
  598. .stat-text {
  599. font-size: 22rpx;
  600. color: #64748b;
  601. }
  602. .auto-scroll-tip {
  603. display: flex;
  604. align-items: center;
  605. gap: 8rpx;
  606. font-size: 22rpx;
  607. color: #94a3b8;
  608. }
  609. .auto-scroll-tip .iconfont {
  610. font-size: 20rpx;
  611. animation: rotate 2s linear infinite;
  612. }
  613. /* 更新页脚优化 */
  614. .update-footer {
  615. padding: 32rpx 0 100rpx;
  616. text-align: center;
  617. opacity: 0;
  618. transform: translateY(20rpx);
  619. animation: slideIn 0.6s ease 0.3s forwards;
  620. }
  621. .update-line {
  622. display: flex;
  623. align-items: center;
  624. justify-content: center;
  625. gap: 8rpx;
  626. margin-bottom: 12rpx;
  627. }
  628. .iconfont.icon-sync {
  629. font-size: 20rpx;
  630. color: #94a3b8;
  631. }
  632. .update-tip {
  633. font-size: 22rpx;
  634. color: #64748b;
  635. }
  636. /* 卡片特定样式 */
  637. .card-sales {
  638. border-top: 4rpx solid #ff6b6b;
  639. }
  640. .card-feed {
  641. border-top: 4rpx solid #4d96ff;
  642. }
  643. .card-trend {
  644. border-top: 4rpx solid #ffd166;
  645. }