mp-biz.scss 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783
  1. // 业务列表 / 详情 Pattern(对齐 mobile-ui/shanxia-mp-base.css)
  2. .mp-page--sub {
  3. padding-bottom: calc(32rpx + env(safe-area-inset-bottom, 0px));
  4. }
  5. .mp-header__row {
  6. display: flex;
  7. align-items: center;
  8. justify-content: space-between;
  9. gap: 24rpx;
  10. }
  11. .mp-subpage-back {
  12. color: #fff;
  13. font-size: 26rpx;
  14. opacity: 0.95;
  15. min-height: 44rpx;
  16. line-height: 44rpx;
  17. }
  18. .mp-header__action {
  19. min-height: 64rpx;
  20. padding: 0 24rpx;
  21. border-radius: 999rpx;
  22. border: 1rpx solid rgba(255, 255, 255, 0.38);
  23. display: inline-flex;
  24. align-items: center;
  25. font-size: 24rpx;
  26. color: #fff;
  27. background: transparent;
  28. }
  29. .mp-header__search {
  30. margin-top: 20rpx;
  31. min-height: 72rpx;
  32. background: #fff;
  33. border-radius: 999rpx;
  34. display: flex;
  35. align-items: center;
  36. padding: 0 28rpx;
  37. gap: 16rpx;
  38. }
  39. .mp-header__search-dot {
  40. width: 28rpx;
  41. height: 28rpx;
  42. border-radius: 50%;
  43. border: 4rpx solid #c5d5cd;
  44. flex-shrink: 0;
  45. }
  46. .mp-header__search-input {
  47. flex: 1;
  48. font-size: 26rpx;
  49. color: var(--mp-text);
  50. height: 72rpx;
  51. }
  52. .mp-tabs {
  53. display: flex;
  54. gap: 16rpx;
  55. white-space: nowrap;
  56. }
  57. .mp-tab {
  58. flex-shrink: 0;
  59. min-height: 64rpx;
  60. padding: 0 28rpx;
  61. border-radius: 999rpx;
  62. border: 1rpx solid var(--mp-border);
  63. background: var(--mp-surface);
  64. color: var(--mp-muted);
  65. font-size: 24rpx;
  66. display: inline-flex;
  67. align-items: center;
  68. }
  69. .mp-tab--active {
  70. background: var(--mp-brand-green-soft);
  71. border-color: #b7e6d0;
  72. color: var(--mp-brand-green-dark);
  73. font-weight: 600;
  74. }
  75. .mp-list {
  76. display: flex;
  77. flex-direction: column;
  78. gap: 20rpx;
  79. }
  80. .mp-card {
  81. background: var(--mp-surface);
  82. border: 1rpx solid var(--mp-border);
  83. border-radius: var(--mp-radius-lg);
  84. padding: 28rpx;
  85. box-shadow: 0 8rpx 24rpx rgba(10, 159, 109, 0.06);
  86. }
  87. .mp-card__head {
  88. display: flex;
  89. align-items: flex-start;
  90. justify-content: space-between;
  91. gap: 16rpx;
  92. margin-bottom: 16rpx;
  93. }
  94. .mp-card__title {
  95. font-size: 28rpx;
  96. font-weight: 600;
  97. color: var(--mp-text);
  98. line-height: 1.35;
  99. }
  100. .mp-card__sub {
  101. font-size: 24rpx;
  102. color: var(--mp-muted);
  103. margin-top: 4rpx;
  104. }
  105. .mp-card__row {
  106. display: flex;
  107. justify-content: space-between;
  108. gap: 24rpx;
  109. font-size: 24rpx;
  110. color: var(--mp-muted);
  111. margin-bottom: 12rpx;
  112. }
  113. .mp-card__row-val {
  114. color: var(--mp-text);
  115. text-align: right;
  116. flex: 1;
  117. min-width: 0;
  118. }
  119. .mp-card__foot {
  120. display: flex;
  121. align-items: center;
  122. justify-content: flex-end;
  123. gap: 16rpx;
  124. margin-top: 16rpx;
  125. padding-top: 16rpx;
  126. border-top: 1rpx solid var(--mp-border-light);
  127. }
  128. .mp-tag {
  129. flex-shrink: 0;
  130. min-height: 44rpx;
  131. padding: 0 20rpx;
  132. border-radius: 999rpx;
  133. font-size: 22rpx;
  134. font-weight: 600;
  135. display: inline-flex;
  136. align-items: center;
  137. }
  138. .mp-tag--success {
  139. background: #e9f9f2;
  140. color: #189b65;
  141. }
  142. .mp-tag--warning {
  143. background: #fff4dd;
  144. color: #cf8a19;
  145. }
  146. .mp-tag--danger {
  147. background: #fef2f2;
  148. color: #d14343;
  149. }
  150. .mp-tag--info {
  151. background: #eff6ff;
  152. color: #3b82f6;
  153. }
  154. .mp-tag--muted {
  155. background: #f1f5f3;
  156. color: var(--mp-muted);
  157. }
  158. .mp-btn {
  159. min-height: 64rpx;
  160. padding: 0 28rpx;
  161. border-radius: 999rpx;
  162. font-size: 24rpx;
  163. font-weight: 600;
  164. display: inline-flex;
  165. align-items: center;
  166. justify-content: center;
  167. line-height: 1;
  168. }
  169. .mp-btn--primary {
  170. background: var(--mp-brand-green);
  171. color: #fff;
  172. border: none;
  173. }
  174. .mp-btn--ghost {
  175. background: #fff;
  176. color: var(--mp-brand-green-dark);
  177. border: 1rpx solid #b7e6d0;
  178. }
  179. .mp-btn--danger {
  180. background: #fef2f2;
  181. color: #d14343;
  182. border: 1rpx solid #fecaca;
  183. }
  184. .mp-btn--sm {
  185. min-height: 56rpx;
  186. padding: 0 22rpx;
  187. font-size: 22rpx;
  188. }
  189. .mp-list-end,
  190. .mp-list-loading {
  191. text-align: center;
  192. font-size: 22rpx;
  193. color: var(--mp-muted);
  194. padding: 24rpx 0 8rpx;
  195. }
  196. /* 全局空态 · 方案 B 插画文件夹(组件 mp-empty;类名可复用) */
  197. .mp-empty {
  198. padding: 80rpx 40rpx 64rpx;
  199. text-align: center;
  200. }
  201. .mp-empty--compact {
  202. padding: 40rpx 24rpx 32rpx;
  203. }
  204. .mp-empty__art {
  205. position: relative;
  206. width: 296rpx;
  207. height: 224rpx;
  208. margin: 0 auto 36rpx;
  209. }
  210. .mp-empty--compact .mp-empty__art {
  211. width: 220rpx;
  212. height: 168rpx;
  213. margin-bottom: 24rpx;
  214. transform: scale(0.92);
  215. transform-origin: center top;
  216. }
  217. .mp-empty__shadow {
  218. position: absolute;
  219. left: 48rpx;
  220. right: 48rpx;
  221. bottom: 12rpx;
  222. height: 24rpx;
  223. border-radius: 50%;
  224. background: rgba(15, 30, 25, 0.08);
  225. }
  226. .mp-empty__folder {
  227. position: absolute;
  228. left: 50%;
  229. top: 20rpx;
  230. transform: translateX(-50%);
  231. width: 216rpx;
  232. height: 156rpx;
  233. }
  234. .mp-empty__folder-tab {
  235. position: absolute;
  236. left: 20rpx;
  237. top: -20rpx;
  238. width: 76rpx;
  239. height: 32rpx;
  240. border-radius: 16rpx 16rpx 0 0;
  241. background: #87d4b0;
  242. }
  243. .mp-empty__folder-back {
  244. position: absolute;
  245. inset: 0;
  246. border-radius: 24rpx 24rpx 28rpx 28rpx;
  247. background: linear-gradient(160deg, #b7e6d2, #7dcea0);
  248. }
  249. .mp-empty__folder-front {
  250. position: absolute;
  251. left: 0;
  252. right: 0;
  253. bottom: 0;
  254. height: 116rpx;
  255. border-radius: 20rpx 28rpx 28rpx 28rpx;
  256. background: linear-gradient(180deg, #ecfdf5, #dff7ec);
  257. border: 2rpx solid rgba(8, 127, 87, 0.18);
  258. box-shadow: 0 16rpx 36rpx rgba(10, 159, 109, 0.12);
  259. }
  260. .mp-empty__lines {
  261. position: absolute;
  262. left: 36rpx;
  263. right: 36rpx;
  264. top: 36rpx;
  265. }
  266. .mp-empty__line {
  267. display: block;
  268. height: 12rpx;
  269. border-radius: 999rpx;
  270. background: #cfe9dc;
  271. margin-bottom: 16rpx;
  272. }
  273. .mp-empty__line--mid {
  274. width: 70%;
  275. }
  276. .mp-empty__line--short {
  277. width: 48%;
  278. margin-bottom: 0;
  279. }
  280. .mp-empty__title {
  281. display: block;
  282. font-size: 30rpx;
  283. font-weight: 650;
  284. color: var(--mp-text);
  285. line-height: 1.4;
  286. }
  287. .mp-empty__desc {
  288. display: block;
  289. margin-top: 12rpx;
  290. font-size: 24rpx;
  291. color: var(--mp-muted);
  292. line-height: 1.55;
  293. }
  294. .mp-empty__actions {
  295. margin-top: 32rpx;
  296. display: flex;
  297. justify-content: center;
  298. flex-wrap: wrap;
  299. gap: 16rpx;
  300. }
  301. .mp-empty__actions .mp-btn {
  302. min-width: 200rpx;
  303. }
  304. /* 兼容旧写法:仅圆点 icon 时也渲染为文件夹插画占位(无内部结构则显示浅绿底) */
  305. .mp-empty__icon {
  306. width: 140rpx;
  307. height: 140rpx;
  308. margin: 0 auto 24rpx;
  309. border-radius: 28rpx;
  310. background: linear-gradient(160deg, #b7e6d2, #7dcea0);
  311. position: relative;
  312. box-shadow: 0 12rpx 28rpx rgba(10, 159, 109, 0.12);
  313. }
  314. .mp-empty__icon::before {
  315. content: '';
  316. position: absolute;
  317. left: 20rpx;
  318. top: -12rpx;
  319. width: 48rpx;
  320. height: 20rpx;
  321. border-radius: 10rpx 10rpx 0 0;
  322. background: #87d4b0;
  323. }
  324. .mp-empty__icon::after {
  325. content: '';
  326. position: absolute;
  327. left: 12rpx;
  328. right: 12rpx;
  329. bottom: 16rpx;
  330. height: 72rpx;
  331. border-radius: 14rpx 18rpx 18rpx 18rpx;
  332. background: linear-gradient(180deg, #ecfdf5, #dff7ec);
  333. border: 2rpx solid rgba(8, 127, 87, 0.16);
  334. }
  335. .mp-empty__text {
  336. display: block;
  337. font-size: 28rpx;
  338. color: var(--mp-muted);
  339. }
  340. .mp-detail-hero {
  341. margin: 24rpx 32rpx 0;
  342. background: var(--mp-surface);
  343. border: 1rpx solid var(--mp-border);
  344. border-radius: var(--mp-radius-lg);
  345. padding: 28rpx;
  346. box-shadow: 0 8rpx 24rpx rgba(10, 159, 109, 0.06);
  347. }
  348. .mp-detail-hero__top {
  349. display: flex;
  350. justify-content: space-between;
  351. gap: 16rpx;
  352. align-items: flex-start;
  353. }
  354. .mp-detail-hero__title {
  355. font-size: 32rpx;
  356. font-weight: 700;
  357. color: var(--mp-text);
  358. }
  359. .mp-detail-hero__sub {
  360. margin-top: 8rpx;
  361. font-size: 24rpx;
  362. color: var(--mp-muted);
  363. }
  364. .mp-detail-hero__meta {
  365. display: flex;
  366. flex-wrap: wrap;
  367. gap: 12rpx;
  368. margin-top: 20rpx;
  369. }
  370. .mp-detail-hero__chip {
  371. font-size: 22rpx;
  372. color: var(--mp-brand-green-dark);
  373. background: var(--mp-brand-green-soft);
  374. padding: 6rpx 16rpx;
  375. border-radius: 999rpx;
  376. }
  377. .mp-block {
  378. margin: 24rpx 32rpx 0;
  379. }
  380. .mp-block__title {
  381. font-size: 28rpx;
  382. font-weight: 700;
  383. color: var(--mp-text);
  384. margin-bottom: 16rpx;
  385. }
  386. .mp-block__panel {
  387. background: var(--mp-surface);
  388. border: 1rpx solid var(--mp-border);
  389. border-radius: var(--mp-radius-lg);
  390. overflow: hidden;
  391. }
  392. .mp-kv {
  393. display: flex;
  394. justify-content: space-between;
  395. gap: 24rpx;
  396. padding: 24rpx 28rpx;
  397. border-bottom: 1rpx solid var(--mp-border-light);
  398. font-size: 26rpx;
  399. }
  400. .mp-kv:last-child {
  401. border-bottom: none;
  402. }
  403. .mp-kv__label {
  404. color: var(--mp-muted);
  405. flex-shrink: 0;
  406. }
  407. .mp-kv__value {
  408. color: var(--mp-text);
  409. text-align: right;
  410. flex: 1;
  411. min-width: 0;
  412. word-break: break-all;
  413. }
  414. .mp-bottom-bar {
  415. position: fixed;
  416. left: 0;
  417. right: 0;
  418. bottom: 0;
  419. display: flex;
  420. gap: 16rpx;
  421. padding: 16rpx 32rpx calc(16rpx + env(safe-area-inset-bottom, 0px));
  422. background: #fff;
  423. border-top: 1rpx solid var(--mp-border);
  424. z-index: 50;
  425. }
  426. .mp-bottom-bar .mp-btn {
  427. flex: 1;
  428. }
  429. .mp-page--with-bottom {
  430. padding-bottom: calc(120rpx + env(safe-area-inset-bottom, 0px));
  431. }
  432. .mp-form-panel {
  433. margin: 24rpx 32rpx;
  434. background: var(--mp-surface);
  435. border: 1rpx solid var(--mp-border);
  436. border-radius: var(--mp-radius-lg);
  437. overflow: hidden;
  438. }
  439. .mp-form-row {
  440. padding: 24rpx 28rpx;
  441. border-bottom: 1rpx solid var(--mp-border-light);
  442. }
  443. .mp-form-row:last-child {
  444. border-bottom: none;
  445. }
  446. .mp-form-label {
  447. display: block;
  448. font-size: 24rpx;
  449. color: var(--mp-muted);
  450. margin-bottom: 12rpx;
  451. }
  452. .mp-form-label--req::after {
  453. content: ' *';
  454. color: #d14343;
  455. }
  456. .mp-form-input,
  457. .mp-form-textarea,
  458. .mp-form-picker {
  459. width: 100%;
  460. font-size: 28rpx;
  461. color: var(--mp-text);
  462. min-height: 48rpx;
  463. }
  464. .mp-form-picker {
  465. padding: 8rpx 0;
  466. color: var(--mp-text);
  467. }
  468. .mp-form-textarea {
  469. min-height: 160rpx;
  470. }
  471. .mp-load-more {
  472. text-align: center;
  473. padding: 24rpx;
  474. font-size: 24rpx;
  475. color: var(--mp-muted);
  476. }
  477. .mp-form-picker--link {
  478. color: var(--mp-brand-green-dark);
  479. }
  480. /* 底部选人 Sheet */
  481. .mp-sheet-mask {
  482. position: fixed;
  483. inset: 0;
  484. z-index: 1000;
  485. background: rgba(15, 30, 25, 0.45);
  486. display: flex;
  487. align-items: flex-end;
  488. }
  489. .mp-sheet {
  490. width: 100%;
  491. max-height: 78vh;
  492. background: #fff;
  493. border-radius: 32rpx 32rpx 0 0;
  494. padding-bottom: env(safe-area-inset-bottom, 0px);
  495. display: flex;
  496. flex-direction: column;
  497. }
  498. .mp-sheet__head {
  499. display: flex;
  500. align-items: center;
  501. justify-content: space-between;
  502. padding: 28rpx 32rpx 16rpx;
  503. border-bottom: 1rpx solid var(--mp-border-light);
  504. }
  505. .mp-sheet__title {
  506. font-size: 30rpx;
  507. font-weight: 600;
  508. color: var(--mp-text);
  509. }
  510. .mp-sheet__cancel {
  511. font-size: 28rpx;
  512. color: var(--mp-muted);
  513. min-width: 80rpx;
  514. }
  515. .mp-sheet__ok {
  516. font-size: 28rpx;
  517. color: var(--mp-brand-green-dark);
  518. font-weight: 600;
  519. min-width: 80rpx;
  520. text-align: right;
  521. }
  522. .mp-sheet__search {
  523. padding: 16rpx 32rpx;
  524. }
  525. .mp-sheet__search-input {
  526. background: var(--mp-bg);
  527. border-radius: 16rpx;
  528. padding: 16rpx 24rpx;
  529. font-size: 28rpx;
  530. }
  531. .mp-sheet__body {
  532. flex: 1;
  533. max-height: 52vh;
  534. padding: 0 16rpx 16rpx;
  535. }
  536. .mp-sheet__hint {
  537. text-align: center;
  538. padding: 48rpx;
  539. color: var(--mp-muted);
  540. font-size: 26rpx;
  541. }
  542. .mp-sheet__row {
  543. display: flex;
  544. align-items: center;
  545. gap: 20rpx;
  546. padding: 24rpx 16rpx;
  547. border-bottom: 1rpx solid var(--mp-border-light);
  548. min-height: 88rpx;
  549. }
  550. .mp-sheet__check {
  551. width: 40rpx;
  552. height: 40rpx;
  553. border-radius: 50%;
  554. border: 2rpx solid var(--mp-border);
  555. flex-shrink: 0;
  556. box-sizing: border-box;
  557. }
  558. .mp-sheet__check--on {
  559. border-color: var(--mp-brand-green);
  560. background: var(--mp-brand-green);
  561. box-shadow: inset 0 0 0 6rpx #fff;
  562. }
  563. .mp-sheet__meta {
  564. flex: 1;
  565. min-width: 0;
  566. }
  567. .mp-sheet__name {
  568. display: block;
  569. font-size: 28rpx;
  570. color: var(--mp-text);
  571. font-weight: 500;
  572. }
  573. .mp-sheet__sub {
  574. display: block;
  575. margin-top: 4rpx;
  576. font-size: 22rpx;
  577. color: var(--mp-muted);
  578. }
  579. .mp-sheet__foot {
  580. padding: 16rpx 32rpx 24rpx;
  581. font-size: 24rpx;
  582. color: var(--mp-muted);
  583. border-top: 1rpx solid var(--mp-border-light);
  584. }
  585. /* 报销模块 Header:大麦黄主调(对齐 shanxia-mp-bx-demo) */
  586. .mp-header--bx {
  587. background: linear-gradient(145deg, #a67c28 0%, #d6a343 72%, #0a9f6d 165%);
  588. box-shadow: 0 16rpx 40rpx rgba(166, 124, 40, 0.14);
  589. }
  590. .mp-card__amount {
  591. font-size: 30rpx;
  592. font-weight: 700;
  593. color: var(--mp-text);
  594. }
  595. .mp-photo-row {
  596. display: flex;
  597. flex-wrap: wrap;
  598. gap: 16rpx;
  599. }
  600. .mp-photo-item {
  601. width: 160rpx;
  602. height: 160rpx;
  603. border-radius: 16rpx;
  604. overflow: hidden;
  605. position: relative;
  606. background: var(--mp-border-light);
  607. }
  608. .mp-photo-item image {
  609. width: 100%;
  610. height: 100%;
  611. }
  612. .mp-photo-add {
  613. width: 160rpx;
  614. height: 160rpx;
  615. border-radius: 16rpx;
  616. border: 2rpx dashed #b7e6d0;
  617. display: flex;
  618. align-items: center;
  619. justify-content: center;
  620. color: var(--mp-brand-green-dark);
  621. font-size: 24rpx;
  622. background: #f7fcf9;
  623. }
  624. .mp-photo-del {
  625. position: absolute;
  626. top: 4rpx;
  627. right: 4rpx;
  628. width: 40rpx;
  629. height: 40rpx;
  630. border-radius: 50%;
  631. background: rgba(0, 0, 0, 0.5);
  632. color: #fff;
  633. font-size: 22rpx;
  634. display: flex;
  635. align-items: center;
  636. justify-content: center;
  637. }
  638. /* 地磅模块 Header(对齐 shanxia-mp-db-demo) */
  639. .mp-header--db {
  640. background: linear-gradient(145deg, #1d6b63 0%, #2b8a7e 72%, #0a9f6d 165%);
  641. box-shadow: 0 16rpx 40rpx rgba(29, 107, 99, 0.14);
  642. }
  643. /* 运输模块:默认品牌绿(对齐 shanxia-mp-pl-demo) */
  644. .mp-header--pl {
  645. background: var(--mp-header-gradient);
  646. box-shadow: 0 16rpx 40rpx rgba(10, 159, 109, 0.12);
  647. }
  648. .mp-stats {
  649. margin: -24rpx 32rpx 24rpx;
  650. background: var(--mp-surface);
  651. border: 1rpx solid var(--mp-border);
  652. border-radius: var(--mp-radius-lg);
  653. display: grid;
  654. grid-template-columns: repeat(3, 1fr);
  655. padding: 28rpx 16rpx;
  656. box-shadow: 0 8rpx 24rpx rgba(10, 159, 109, 0.06);
  657. position: relative;
  658. z-index: 2;
  659. }
  660. .mp-stats--4 {
  661. grid-template-columns: repeat(4, 1fr);
  662. }
  663. .mp-stat {
  664. text-align: center;
  665. padding: 0 8rpx;
  666. }
  667. .mp-stat__num {
  668. display: block;
  669. font-size: 36rpx;
  670. font-weight: 700;
  671. color: var(--mp-brand-green-dark);
  672. line-height: 1.2;
  673. }
  674. .mp-stat__label {
  675. display: block;
  676. font-size: 22rpx;
  677. color: var(--mp-muted);
  678. margin-top: 8rpx;
  679. }