mp-biz.scss 14 KB

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