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

379 lines
6.9 KiB

  1. .page {
  2. background: linear-gradient(145deg, #f5f7fa 0%, #f0f2f5 100%);
  3. }
  4. .notice-page {
  5. min-height: 100vh;
  6. background: transparent;
  7. position: relative;
  8. font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Helvetica Neue', Helvetica, sans-serif;
  9. }
  10. .bg-blur {
  11. position: fixed;
  12. top: 0;
  13. left: 0;
  14. width: 100%;
  15. height: 100%;
  16. background: radial-gradient(circle at 20% 30%, rgba(235, 245, 255, 0.7) 0%, rgba(255, 255, 255, 0.9) 70%);
  17. backdrop-filter: blur(20px);
  18. -webkit-backdrop-filter: blur(20px);
  19. z-index: 0;
  20. pointer-events: none;
  21. }
  22. .content {
  23. position: relative;
  24. z-index: 2;
  25. display: flex;
  26. flex-direction: column;
  27. padding: 30rpx 32rpx 0;
  28. box-sizing: border-box;
  29. }
  30. /* 头部与搜索 */
  31. .header {
  32. margin-bottom: 36rpx;
  33. }
  34. .title {
  35. font-size: 48rpx;
  36. font-weight: 700;
  37. color: #1e293b;
  38. letter-spacing: 2rpx;
  39. display: block;
  40. margin-bottom: 24rpx;
  41. text-shadow: 0 4rpx 12rpx rgba(0,0,0,0.02);
  42. }
  43. .search-box {
  44. background: rgba(255,255,255,0.7);
  45. backdrop-filter: blur(8px);
  46. -webkit-backdrop-filter: blur(8px);
  47. border-radius: 48rpx;
  48. padding: 16rpx 32rpx;
  49. display: flex;
  50. align-items: center;
  51. border: 1rpx solid rgba(255,255,255,0.9);
  52. box-shadow: 0 8rpx 20rpx rgba(0,0,0,0.02), 0 2rpx 4rpx rgba(0,0,0,0.02);
  53. transition: all 0.2s;
  54. }
  55. .search-box:focus-within {
  56. border-color: #b2d9ff;
  57. background: rgba(255,255,255,0.9);
  58. box-shadow: 0 12rpx 28rpx rgba(0,120,255,0.08);
  59. }
  60. .search-box .icon {
  61. font-size: 32rpx;
  62. color: #7c8ea0;
  63. margin-right: 16rpx;
  64. }
  65. .search-box input {
  66. flex: 1;
  67. font-size: 30rpx;
  68. padding: 8rpx 0;
  69. color: #1e293b;
  70. }
  71. .placeholder {
  72. color: #9aa6b2;
  73. font-weight: 400;
  74. }
  75. .clear-icon {
  76. font-size: 36rpx;
  77. color: #8e9dac;
  78. padding: 8rpx;
  79. border-radius: 50%;
  80. background: rgba(0,0,0,0.02);
  81. width: 40rpx;
  82. height: 40rpx;
  83. display: flex;
  84. align-items: center;
  85. justify-content: center;
  86. }
  87. /* 分类导航 */
  88. .category-scroll {
  89. white-space: nowrap;
  90. margin-bottom: 32rpx;
  91. background: rgba(255,255,255,0.5);
  92. backdrop-filter: blur(12px);
  93. -webkit-backdrop-filter: blur(12px);
  94. border-radius: 60rpx;
  95. padding: 8rpx 0;
  96. border: 1rpx solid rgba(255,255,255,0.8);
  97. }
  98. .category-list {
  99. display: inline-flex;
  100. padding: 0 24rpx;
  101. }
  102. .category-item {
  103. display: inline-flex;
  104. flex-direction: column;
  105. align-items: center;
  106. justify-content: center;
  107. padding: 16rpx 36rpx;
  108. margin-right: 12rpx;
  109. border-radius: 60rpx;
  110. font-size: 30rpx;
  111. color: #475569;
  112. background: transparent;
  113. transition: all 0.18s;
  114. position: relative;
  115. font-weight: 500;
  116. }
  117. .category-item.active {
  118. background: #ffffff;
  119. color: #1e4bd2;
  120. font-weight: 600;
  121. box-shadow: 0 6rpx 14rpx rgba(0,80,255,0.1);
  122. }
  123. .dot {
  124. width: 8rpx;
  125. height: 8rpx;
  126. background: #1e4bd2;
  127. border-radius: 50%;
  128. margin-top: 6rpx;
  129. }
  130. /* 列表容器 */
  131. .list-container {
  132. flex: 1;
  133. height: calc(100vh - 280rpx);
  134. background: transparent;
  135. border-radius: 40rpx 40rpx 0 0;
  136. margin-top: 8rpx;
  137. }
  138. .notice-scroll {
  139. height: 100%;
  140. padding-bottom: 20rpx;
  141. }
  142. .notice-list {
  143. display: flex;
  144. flex-direction: column;
  145. gap: 28rpx;
  146. }
  147. /* 卡片设计 */
  148. .notice-card {
  149. background: rgba(255,255,255,0.7);
  150. backdrop-filter: blur(16px);
  151. -webkit-backdrop-filter: blur(16px);
  152. border-radius: 36rpx;
  153. border: 1rpx solid rgba(255,255,255,0.9);
  154. box-shadow: 0 8rpx 18rpx rgba(0,0,0,0.02);
  155. display: flex;
  156. overflow: hidden;
  157. transition: transform 0.2s, box-shadow 0.3s;
  158. }
  159. .notice-card:active {
  160. transform: scale(0.99);
  161. box-shadow: 0 4rpx 12rpx rgba(0,0,0,0.04);
  162. }
  163. .card-left-bar {
  164. width: 12rpx;
  165. flex-shrink: 0;
  166. background: #3b82f6;
  167. }
  168. .card-content {
  169. flex: 1;
  170. padding: 32rpx 28rpx;
  171. }
  172. .card-header {
  173. display: flex;
  174. align-items: center;
  175. justify-content: space-between;
  176. margin-bottom: 16rpx;
  177. }
  178. .notice-title {
  179. font-size: 34rpx;
  180. font-weight: 600;
  181. color: #0a1e3c;
  182. max-width: 460rpx;
  183. overflow: hidden;
  184. text-overflow: ellipsis;
  185. white-space: nowrap;
  186. }
  187. .notice-tag {
  188. font-size: 24rpx;
  189. padding: 8rpx 24rpx;
  190. border-radius: 48rpx;
  191. background: #eef2ff;
  192. color: #1e4bd2;
  193. font-weight: 500;
  194. letter-spacing: 1rpx;
  195. }
  196. .notice-abstract {
  197. font-size: 28rpx;
  198. color: #55657a;
  199. line-height: 1.5;
  200. margin-bottom: 28rpx;
  201. display: -webkit-box;
  202. -webkit-line-clamp: 2;
  203. -webkit-box-orient: vertical;
  204. overflow: hidden;
  205. text-overflow: ellipsis;
  206. }
  207. .card-footer {
  208. display: flex;
  209. justify-content: space-between;
  210. align-items: center;
  211. color: #778a9b;
  212. font-size: 26rpx;
  213. }
  214. .date-time {
  215. display: flex;
  216. align-items: center;
  217. gap: 8rpx;
  218. }
  219. .warning-level {
  220. font-size: 26rpx;
  221. font-weight: 500;
  222. padding: 4rpx 16rpx;
  223. border-radius: 30rpx;
  224. background: rgba(255,255,255,0.5);
  225. }
  226. /* 加载更多*/
  227. .load-more {
  228. text-align: center;
  229. padding: 48rpx 0 36rpx;
  230. color: #8f9eb0;
  231. font-size: 28rpx;
  232. display: flex;
  233. align-items: center;
  234. justify-content: center;
  235. gap: 12rpx;
  236. }
  237. .loading-icon {
  238. font-size: 48rpx;
  239. line-height: 1;
  240. animation: pulse 1.2s infinite;
  241. }
  242. @keyframes pulse {
  243. 0%, 100% { opacity: 0.6; }
  244. 50% { opacity: 1; }
  245. }
  246. /* 骨架屏 */
  247. .skeleton-list {
  248. padding: 0 8rpx;
  249. }
  250. .skeleton-item {
  251. background: rgba(255,255,255,0.6);
  252. border-radius: 32rpx;
  253. height: 220rpx;
  254. margin-bottom: 28rpx;
  255. position: relative;
  256. overflow: hidden;
  257. }
  258. .skeleton-item::after {
  259. content: "";
  260. position: absolute;
  261. top: 0;
  262. left: -150%;
  263. width: 200%;
  264. height: 100%;
  265. background: linear-gradient(90deg, transparent, rgba(255,255,255,0.7), transparent);
  266. animation: shimmer 1.5s infinite;
  267. }
  268. @keyframes shimmer {
  269. 100% { left: 100%; }
  270. }
  271. /* 空状态 */
  272. .empty-state {
  273. display: flex;
  274. flex-direction: column;
  275. align-items: center;
  276. justify-content: center;
  277. padding: 120rpx 0;
  278. color: #6f7d8c;
  279. font-size: 32rpx;
  280. background: rgba(255,255,255,0.4);
  281. backdrop-filter: blur(8px);
  282. border-radius: 48rpx;
  283. margin-top: 60rpx;
  284. }
  285. .empty-state text:first-of-type {
  286. font-size: 64rpx;
  287. margin-bottom: 24rpx;
  288. }
  289. .warning-level {
  290. font-size: 26rpx;
  291. font-weight: 500;
  292. padding: 6rpx 20rpx;
  293. border-radius: 30rpx;
  294. background: rgba(59, 130, 246, 0.1);
  295. backdrop-filter: blur(4px);
  296. -webkit-backdrop-filter: blur(4px);
  297. }
  298. /* 搜索状态提示 */
  299. .searching-indicator {
  300. position: fixed;
  301. top: 50%;
  302. left: 50%;
  303. transform: translate(-50%, -50%);
  304. background: rgba(0, 0, 0, 0.7);
  305. color: white;
  306. padding: 20rpx 40rpx;
  307. border-radius: 60rpx;
  308. font-size: 28rpx;
  309. z-index: 100;
  310. backdrop-filter: blur(10px);
  311. -webkit-backdrop-filter: blur(10px);
  312. }
  313. /* 优化空状态提示 */
  314. .empty-state {
  315. background: rgba(255, 255, 255, 0.5);
  316. backdrop-filter: blur(10px);
  317. -webkit-backdrop-filter: blur(10px);
  318. border-radius: 40rpx;
  319. margin-top: 80rpx;
  320. padding: 80rpx 40rpx;
  321. }
  322. .empty-state text:first-of-type {
  323. font-size: 60rpx;
  324. margin-bottom: 24rpx;
  325. opacity: 0.8;
  326. }
  327. .empty-state text:last-of-type {
  328. background: rgba(255, 255, 255, 0.6);
  329. padding: 12rpx 32rpx;
  330. border-radius: 60rpx;
  331. color: #666;
  332. font-size: 28rpx;
  333. margin-top: 24rpx;
  334. }