orders.wxss 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755
  1. /* 页面基础样式 */
  2. page {
  3. overflow-x: hidden;
  4. width: 100%;
  5. }
  6. .orders-page {
  7. background: linear-gradient(180deg, #5B9BD5 0%, #4A90C2 100%);
  8. min-height: 100vh;
  9. padding-top: env(safe-area-inset-top);
  10. padding-bottom: calc(50px + env(safe-area-inset-bottom));
  11. overflow-x: hidden;
  12. width: 100%;
  13. box-sizing: border-box;
  14. display: flex;
  15. flex-direction: column;
  16. align-items: center;
  17. }
  18. /* 状态选项卡 */
  19. .status-tabs {
  20. background: rgba(255, 255, 255, 0.95);
  21. padding: 24rpx 20rpx;
  22. border-bottom: none;
  23. margin: 24rpx auto 0 auto;
  24. border-radius: 24rpx;
  25. box-shadow: 0 8rpx 24rpx rgba(0, 0, 0, 0.12);
  26. max-width: 700rpx;
  27. width: calc(100% - 32rpx);
  28. backdrop-filter: blur(12rpx);
  29. }
  30. .tabs-scroll {
  31. display: flex;
  32. justify-content: space-between;
  33. align-items: center;
  34. width: 100%;
  35. box-sizing: border-box;
  36. padding: 0;
  37. gap: 12rpx;
  38. }
  39. .tab-item {
  40. display: flex;
  41. align-items: center;
  42. justify-content: center;
  43. padding: 16rpx 20rpx;
  44. border-radius: 50rpx;
  45. font-size: 26rpx;
  46. font-weight: 500;
  47. color: #666;
  48. background: rgba(74, 144, 194, 0.08);
  49. transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
  50. border: 2rpx solid rgba(74, 144, 194, 0.15);
  51. flex: 1;
  52. text-align: center;
  53. white-space: nowrap;
  54. overflow: hidden;
  55. text-overflow: ellipsis;
  56. min-width: 0;
  57. letter-spacing: 0.5rpx;
  58. }
  59. .tab-item.active {
  60. background: linear-gradient(135deg, #4A90C2 0%, #357ABD 100%);
  61. color: #fff;
  62. font-weight: 600;
  63. transform: translateY(-2rpx);
  64. box-shadow: 0 6rpx 20rpx rgba(74, 144, 194, 0.35);
  65. border-color: rgba(74, 144, 194, 0.3);
  66. }
  67. /* 订单列表 */
  68. .orders-list {
  69. padding: 40rpx 16rpx 32rpx;
  70. display: flex;
  71. flex-direction: column;
  72. align-items: center;
  73. width: 100%;
  74. box-sizing: border-box;
  75. }
  76. .order-card {
  77. background: rgba(255, 255, 255, 0.96);
  78. border-radius: 28rpx;
  79. margin-bottom: 36rpx;
  80. box-shadow: 0 12rpx 40rpx rgba(74, 144, 194, 0.18);
  81. border: 1rpx solid rgba(255, 255, 255, 0.4);
  82. overflow: hidden;
  83. backdrop-filter: blur(16rpx);
  84. width: 100%;
  85. max-width: 700rpx;
  86. box-sizing: border-box;
  87. transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
  88. }
  89. .order-card:active {
  90. transform: translateY(2rpx);
  91. box-shadow: 0 8rpx 24rpx rgba(74, 144, 194, 0.12);
  92. }
  93. /* 包车订单样式 */
  94. .charter-order {
  95. background: linear-gradient(135deg, #1a1a1a 0%, #2d2d2d 100%);
  96. border: 2rpx solid #d4af37;
  97. box-shadow: 0 8rpx 32rpx rgba(212, 175, 55, 0.3);
  98. }
  99. /* 订单头部 */
  100. .order-header {
  101. display: flex;
  102. justify-content: space-between;
  103. align-items: flex-start;
  104. padding: 36rpx 36rpx 28rpx 36rpx;
  105. border-bottom: 1rpx solid rgba(240, 240, 240, 0.6);
  106. }
  107. .charter-order .order-header {
  108. border-bottom-color: #444;
  109. }
  110. .order-info {
  111. flex: 1;
  112. }
  113. .order-no {
  114. font-size: 24rpx;
  115. color: #999;
  116. margin-bottom: 8rpx;
  117. }
  118. .charter-order .order-no {
  119. color: #ccc;
  120. }
  121. .activity-name {
  122. font-size: 34rpx;
  123. font-weight: 600;
  124. color: #333;
  125. line-height: 1.4;
  126. letter-spacing: 0.5rpx;
  127. }
  128. .charter-order .activity-name {
  129. color: #d4af37;
  130. }
  131. .order-status {
  132. padding: 8rpx 20rpx;
  133. border-radius: 20rpx;
  134. font-size: 24rpx;
  135. font-weight: bold;
  136. }
  137. .order-status.pending {
  138. background: rgba(250, 140, 22, 0.15);
  139. color: #fa8c16;
  140. border: 1rpx solid rgba(250, 140, 22, 0.3);
  141. }
  142. .order-status.ongoing {
  143. background: rgba(74, 144, 194, 0.15);
  144. color: #4A90C2;
  145. border: 1rpx solid rgba(74, 144, 194, 0.3);
  146. }
  147. .order-status.completed {
  148. background: rgba(82, 196, 26, 0.15);
  149. color: #52c41a;
  150. border: 1rpx solid rgba(82, 196, 26, 0.3);
  151. }
  152. .order-status.cancelled {
  153. background: rgba(255, 77, 79, 0.15);
  154. color: #ff4d4f;
  155. border: 1rpx solid rgba(255, 77, 79, 0.3);
  156. }
  157. .charter-order .order-status.pending {
  158. background: #d4af37;
  159. color: #1a1a1a;
  160. }
  161. .charter-order .order-status.ongoing {
  162. background: #1890ff;
  163. color: #fff;
  164. }
  165. /* 行程信息 */
  166. .trip-info {
  167. padding: 28rpx 36rpx 32rpx;
  168. }
  169. .trip-route {
  170. display: flex;
  171. align-items: center;
  172. margin-bottom: 28rpx;
  173. padding: 20rpx;
  174. background: rgba(74, 144, 194, 0.05);
  175. border-radius: 16rpx;
  176. border: 1rpx solid rgba(74, 144, 194, 0.1);
  177. }
  178. .route-item {
  179. flex: 1;
  180. }
  181. .route-label {
  182. font-size: 24rpx;
  183. color: #999;
  184. margin-bottom: 8rpx;
  185. }
  186. .charter-order .route-label {
  187. color: #ccc;
  188. }
  189. .route-location {
  190. font-size: 30rpx;
  191. color: #333;
  192. font-weight: 600;
  193. line-height: 1.3;
  194. }
  195. .charter-order .route-location {
  196. color: #fff;
  197. }
  198. .route-arrow {
  199. font-size: 36rpx;
  200. color: #4A90C2;
  201. margin: 0 28rpx;
  202. font-weight: 600;
  203. opacity: 0.8;
  204. }
  205. .charter-order .route-arrow {
  206. color: #d4af37;
  207. }
  208. .trip-details {
  209. background: rgba(74, 144, 194, 0.06);
  210. padding: 24rpx;
  211. border-radius: 18rpx;
  212. border: 1rpx solid rgba(74, 144, 194, 0.08);
  213. }
  214. .charter-order .trip-details {
  215. background: #333;
  216. }
  217. .detail-item {
  218. display: flex;
  219. margin-bottom: 16rpx;
  220. align-items: center;
  221. }
  222. .detail-item:last-child {
  223. margin-bottom: 0;
  224. }
  225. .detail-label {
  226. font-size: 26rpx;
  227. color: #666;
  228. width: 160rpx;
  229. flex-shrink: 0;
  230. }
  231. .charter-order .detail-label {
  232. color: #ccc;
  233. }
  234. .detail-value {
  235. font-size: 26rpx;
  236. color: #333;
  237. flex: 1;
  238. }
  239. .charter-order .detail-value {
  240. color: #fff;
  241. }
  242. /* 司机信息 */
  243. .driver-info {
  244. padding: 24rpx 32rpx;
  245. background: rgba(74, 144, 194, 0.05);
  246. border-top: 1rpx solid rgba(74, 144, 194, 0.1);
  247. border-bottom: 1rpx solid rgba(74, 144, 194, 0.1);
  248. }
  249. .charter-order .driver-info {
  250. background: #333;
  251. border-top-color: #444;
  252. border-bottom-color: #444;
  253. }
  254. .driver-header {
  255. display: flex;
  256. justify-content: space-between;
  257. align-items: center;
  258. margin-bottom: 20rpx;
  259. }
  260. .driver-title {
  261. font-size: 28rpx;
  262. font-weight: bold;
  263. color: #333;
  264. }
  265. .charter-order .driver-title {
  266. color: #d4af37;
  267. }
  268. .driver-tip {
  269. font-size: 22rpx;
  270. color: #999;
  271. max-width: 400rpx;
  272. }
  273. .charter-order .driver-tip {
  274. color: #ccc;
  275. }
  276. .driver-details {
  277. display: flex;
  278. align-items: center;
  279. gap: 20rpx;
  280. }
  281. .driver-avatar {
  282. width: 80rpx;
  283. height: 80rpx;
  284. border-radius: 50%;
  285. overflow: hidden;
  286. flex-shrink: 0;
  287. }
  288. .avatar-img {
  289. width: 100%;
  290. height: 100%;
  291. }
  292. .driver-basic {
  293. flex: 1;
  294. }
  295. .driver-name {
  296. font-size: 28rpx;
  297. font-weight: bold;
  298. color: #333;
  299. margin-bottom: 8rpx;
  300. }
  301. .charter-order .driver-name {
  302. color: #fff;
  303. }
  304. .driver-car {
  305. font-size: 24rpx;
  306. color: #666;
  307. }
  308. .car-number {
  309. font-weight: bold;
  310. }
  311. .charter-order .driver-car {
  312. color: #ccc;
  313. }
  314. .driver-phone {
  315. font-size: 24rpx;
  316. color: #666;
  317. margin-bottom: 8rpx;
  318. }
  319. .driver-rating {
  320. font-size: 22rpx;
  321. color: #ff9500;
  322. font-weight: 600;
  323. }
  324. .vehicle-info {
  325. margin-top: 12rpx;
  326. padding: 12rpx;
  327. background: rgba(74, 144, 194, 0.05);
  328. border-radius: 8rpx;
  329. border-left: 4rpx solid #4A90C2;
  330. }
  331. .vehicle-model {
  332. font-size: 24rpx;
  333. font-weight: 600;
  334. color: #4A90C2;
  335. margin-bottom: 4rpx;
  336. }
  337. .vehicle-plate {
  338. font-size: 22rpx;
  339. color: #666;
  340. margin-bottom: 4rpx;
  341. }
  342. .vehicle-capacity {
  343. font-size: 20rpx;
  344. color: #999;
  345. }
  346. .driver-actions {
  347. display: flex;
  348. gap: 16rpx;
  349. }
  350. .action-btn {
  351. padding: 12rpx 20rpx;
  352. border-radius: 20rpx;
  353. font-size: 24rpx;
  354. border: none;
  355. font-weight: bold;
  356. box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.1);
  357. }
  358. .call-btn {
  359. background: linear-gradient(135deg, #52c41a 0%, #389e0d 100%);
  360. color: #fff;
  361. }
  362. .location-btn {
  363. background: linear-gradient(135deg, #4A90C2 0%, #357ABD 100%);
  364. color: #fff;
  365. }
  366. /* 司机状态 */
  367. .driver-status {
  368. display: flex;
  369. align-items: center;
  370. }
  371. .status-assigned {
  372. background: rgba(24, 144, 255, 0.1);
  373. color: #1890ff;
  374. padding: 6rpx 12rpx;
  375. border-radius: 12rpx;
  376. font-size: 22rpx;
  377. font-weight: 500;
  378. }
  379. .status-picked {
  380. background: rgba(255, 193, 7, 0.1);
  381. color: #ffc107;
  382. padding: 6rpx 12rpx;
  383. border-radius: 12rpx;
  384. font-size: 22rpx;
  385. font-weight: 500;
  386. }
  387. .status-transit {
  388. background: rgba(82, 196, 26, 0.1);
  389. color: #52c41a;
  390. padding: 6rpx 12rpx;
  391. border-radius: 12rpx;
  392. font-size: 22rpx;
  393. font-weight: 500;
  394. }
  395. .status-completed {
  396. background: rgba(146, 146, 146, 0.1);
  397. color: #929292;
  398. padding: 6rpx 12rpx;
  399. border-radius: 12rpx;
  400. font-size: 22rpx;
  401. font-weight: 500;
  402. }
  403. .driver-rating {
  404. font-size: 22rpx;
  405. color: #f39c12;
  406. margin-top: 4rpx;
  407. }
  408. .charter-order .driver-rating {
  409. color: #f1c40f;
  410. }
  411. /* 司机未分配状态 */
  412. .driver-pending {
  413. padding: 40rpx 32rpx;
  414. background: rgba(74, 144, 194, 0.05);
  415. border-top: 1rpx solid rgba(74, 144, 194, 0.1);
  416. border-bottom: 1rpx solid rgba(74, 144, 194, 0.1);
  417. text-align: center;
  418. }
  419. .charter-order .driver-pending {
  420. background: #333;
  421. border-top-color: #444;
  422. border-bottom-color: #444;
  423. }
  424. .pending-icon {
  425. font-size: 60rpx;
  426. margin-bottom: 16rpx;
  427. animation: rotate 2s linear infinite;
  428. }
  429. @keyframes rotate {
  430. from {
  431. transform: rotate(0deg);
  432. }
  433. to {
  434. transform: rotate(360deg);
  435. }
  436. }
  437. .pending-text {
  438. font-size: 28rpx;
  439. color: #666;
  440. font-weight: 500;
  441. margin-bottom: 8rpx;
  442. }
  443. .charter-order .pending-text {
  444. color: #ccc;
  445. }
  446. .pending-desc {
  447. font-size: 24rpx;
  448. color: #999;
  449. }
  450. .charter-order .pending-desc {
  451. color: #999;
  452. }
  453. /* 价格信息 */
  454. .price-info {
  455. display: flex;
  456. justify-content: space-between;
  457. align-items: center;
  458. padding: 24rpx 32rpx;
  459. }
  460. .price-label {
  461. font-size: 28rpx;
  462. color: #666;
  463. }
  464. .charter-order .price-label {
  465. color: #ccc;
  466. }
  467. .price-value {
  468. font-size: 36rpx;
  469. font-weight: bold;
  470. color: #4A90C2;
  471. }
  472. .charter-order .price-value {
  473. color: #d4af37;
  474. }
  475. /* 订单操作 */
  476. .order-actions {
  477. display: flex;
  478. justify-content: space-between;
  479. align-items: center;
  480. padding: 28rpx 36rpx;
  481. background: rgba(74, 144, 194, 0.04);
  482. border-top: 1rpx solid rgba(74, 144, 194, 0.08);
  483. }
  484. .charter-order .order-actions {
  485. background: #333;
  486. }
  487. .create-time {
  488. font-size: 26rpx;
  489. color: #999;
  490. flex: 1;
  491. min-width: 0;
  492. font-weight: 500;
  493. line-height: 1.4;
  494. }
  495. .charter-order .create-time {
  496. color: #ccc;
  497. }
  498. .action-buttons {
  499. display: flex;
  500. gap: 16rpx;
  501. align-items: center;
  502. flex-shrink: 0;
  503. }
  504. .cancel-btn,
  505. .detail-btn {
  506. padding: 16rpx 28rpx;
  507. border-radius: 50rpx;
  508. font-size: 26rpx;
  509. border: none;
  510. font-weight: 600;
  511. white-space: nowrap;
  512. overflow: hidden;
  513. text-overflow: ellipsis;
  514. min-width: 140rpx;
  515. max-width: 180rpx;
  516. text-align: center;
  517. transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
  518. letter-spacing: 0.5rpx;
  519. }
  520. .cancel-btn {
  521. background: rgba(255, 255, 255, 0.95);
  522. color: #ff4d4f;
  523. border: 2rpx solid #ff4d4f;
  524. box-shadow: 0 2rpx 8rpx rgba(255, 77, 79, 0.2);
  525. }
  526. .detail-btn {
  527. background: linear-gradient(135deg, #4A90C2 0%, #357ABD 100%);
  528. color: #fff;
  529. box-shadow: 0 6rpx 20rpx rgba(74, 144, 194, 0.35);
  530. }
  531. .detail-btn:active {
  532. transform: translateY(1rpx);
  533. box-shadow: 0 4rpx 12rpx rgba(74, 144, 194, 0.25);
  534. }
  535. .charter-order .detail-btn {
  536. background: #d4af37;
  537. color: #1a1a1a;
  538. }
  539. /* 空状态 */
  540. .empty-orders {
  541. text-align: center;
  542. padding: 120rpx 32rpx;
  543. background: rgba(255, 255, 255, 0.1);
  544. border-radius: 24rpx;
  545. margin: 32rpx auto;
  546. backdrop-filter: blur(10rpx);
  547. border: 1rpx solid rgba(255, 255, 255, 0.2);
  548. width: 100%;
  549. max-width: 680rpx;
  550. box-sizing: border-box;
  551. }
  552. .empty-icon {
  553. font-size: 120rpx;
  554. margin-bottom: 32rpx;
  555. color: rgba(255, 255, 255, 0.8);
  556. }
  557. .empty-text {
  558. font-size: 32rpx;
  559. color: rgba(255, 255, 255, 0.9);
  560. margin-bottom: 16rpx;
  561. font-weight: bold;
  562. }
  563. .empty-desc {
  564. font-size: 26rpx;
  565. color: rgba(255, 255, 255, 0.7);
  566. }
  567. /* 中等屏幕适配 */
  568. @media screen and (max-width: 414px) and (min-width: 376px) {
  569. .tabs-scroll {
  570. gap: 6rpx;
  571. }
  572. .tab-item {
  573. font-size: 22rpx;
  574. padding: 12rpx 8rpx;
  575. }
  576. .cancel-btn,
  577. .detail-btn {
  578. font-size: 24rpx;
  579. padding: 15rpx 24rpx;
  580. min-width: 130rpx;
  581. max-width: 170rpx;
  582. border-radius: 45rpx;
  583. }
  584. .action-buttons {
  585. gap: 14rpx;
  586. }
  587. .create-time {
  588. font-size: 25rpx;
  589. }
  590. .order-actions {
  591. padding: 26rpx 34rpx;
  592. }
  593. }
  594. /* 小屏幕适配 */
  595. @media screen and (max-width: 375px) {
  596. .status-tabs {
  597. margin: 15rpx auto 0 auto;
  598. width: calc(100% - 30rpx);
  599. max-width: 100%;
  600. padding: 16rpx 12rpx;
  601. }
  602. .tabs-scroll {
  603. gap: 4rpx;
  604. }
  605. .orders-list {
  606. padding: 24rpx 15rpx;
  607. }
  608. .order-card {
  609. max-width: 100%;
  610. margin-bottom: 24rpx;
  611. }
  612. .tab-item {
  613. font-size: 20rpx;
  614. padding: 12rpx 6rpx;
  615. border-radius: 30rpx;
  616. }
  617. .cancel-btn,
  618. .detail-btn {
  619. font-size: 22rpx;
  620. padding: 14rpx 20rpx;
  621. min-width: 120rpx;
  622. max-width: 160rpx;
  623. border-radius: 40rpx;
  624. }
  625. .action-buttons {
  626. gap: 12rpx;
  627. }
  628. .create-time {
  629. font-size: 24rpx;
  630. }
  631. .order-actions {
  632. padding: 24rpx 32rpx;
  633. }
  634. .empty-orders {
  635. margin: 24rpx auto;
  636. width: calc(100% - 30rpx);
  637. padding: 100rpx 24rpx;
  638. }
  639. }