mp-shell.scss 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327
  1. // 山峡小程序壳层样式(对齐 mobile-ui/shanxia-mp-base.css 工作台 / Header / 占位)
  2. page {
  3. --mp-brand-green: #0a9f6d;
  4. --mp-brand-green-dark: #087f57;
  5. --mp-brand-green-soft: #e9f9f2;
  6. --mp-barley: #d6a343;
  7. --mp-bg: #f5f8f7;
  8. --mp-surface: #ffffff;
  9. --mp-text: #1f2a26;
  10. --mp-muted: #6b7b74;
  11. --mp-border: #dcebe4;
  12. --mp-border-light: #edf5f1;
  13. --mp-danger: #d14343;
  14. --mp-radius-lg: 32rpx;
  15. --mp-radius-xl: 44rpx;
  16. --mp-header-gradient: linear-gradient(145deg, #087f57 0%, #0a9f6d 72%, #d6a343 165%);
  17. background-color: var(--mp-bg);
  18. color: var(--mp-text);
  19. }
  20. .mp-page {
  21. min-height: 100vh;
  22. background: var(--mp-bg);
  23. box-sizing: border-box;
  24. }
  25. .mp-page--tab {
  26. padding-bottom: calc(24rpx + env(safe-area-inset-bottom, 0px));
  27. }
  28. .mp-header {
  29. background: var(--mp-header-gradient);
  30. color: #fff;
  31. padding: calc(28rpx + env(safe-area-inset-top, 0px)) 32rpx 32rpx;
  32. border-bottom-left-radius: var(--mp-radius-xl);
  33. border-bottom-right-radius: var(--mp-radius-xl);
  34. box-shadow: 0 16rpx 40rpx rgba(10, 159, 109, 0.12);
  35. }
  36. .mp-header__title {
  37. display: block;
  38. font-size: 36rpx;
  39. font-weight: 700;
  40. line-height: 1.3;
  41. }
  42. .mp-header__meta {
  43. margin-top: 8rpx;
  44. font-size: 24rpx;
  45. opacity: 0.9;
  46. line-height: 1.4;
  47. }
  48. .mp-section {
  49. padding: 24rpx 32rpx;
  50. }
  51. .mp-module-block {
  52. background: var(--mp-surface);
  53. border: 1rpx solid var(--mp-border);
  54. border-radius: var(--mp-radius-lg);
  55. overflow: hidden;
  56. box-shadow: 0 8rpx 24rpx rgba(10, 159, 109, 0.06);
  57. }
  58. .mp-module-block + .mp-module-block {
  59. margin-top: 24rpx;
  60. }
  61. .mp-module-block__head {
  62. display: flex;
  63. align-items: center;
  64. gap: 20rpx;
  65. padding: 24rpx 28rpx;
  66. border-bottom: 1rpx solid var(--mp-border-light);
  67. background: #fafcfb;
  68. }
  69. .mp-module-block__icon {
  70. width: 64rpx;
  71. height: 64rpx;
  72. border-radius: 16rpx;
  73. color: #fff;
  74. font-size: 20rpx;
  75. font-weight: 700;
  76. display: flex;
  77. align-items: center;
  78. justify-content: center;
  79. flex-shrink: 0;
  80. }
  81. .mp-module-block--crm .mp-module-block__icon {
  82. background: linear-gradient(145deg, #0a9f6d, #11b37a);
  83. }
  84. .mp-module-block--bx .mp-module-block__icon {
  85. background: linear-gradient(145deg, #c9922f, #d6a343);
  86. }
  87. .mp-module-block--db .mp-module-block__icon {
  88. background: linear-gradient(145deg, #247a70, #2b8a7e);
  89. }
  90. .mp-module-block--pl .mp-module-block__icon {
  91. background: linear-gradient(145deg, #066b49, #087f57);
  92. }
  93. .mp-module-block__title-wrap {
  94. flex: 1;
  95. min-width: 0;
  96. }
  97. .mp-module-block__title {
  98. display: block;
  99. font-size: 30rpx;
  100. font-weight: 700;
  101. color: var(--mp-text);
  102. }
  103. .mp-module-block__desc {
  104. display: block;
  105. margin-top: 4rpx;
  106. font-size: 22rpx;
  107. color: var(--mp-muted);
  108. }
  109. .mp-menu-grid {
  110. display: flex;
  111. flex-wrap: wrap;
  112. background: var(--mp-border-light);
  113. }
  114. .mp-menu-card {
  115. width: 33.333%;
  116. box-sizing: border-box;
  117. min-height: 156rpx;
  118. background: var(--mp-surface);
  119. display: flex;
  120. flex-direction: column;
  121. align-items: center;
  122. justify-content: center;
  123. gap: 12rpx;
  124. padding: 20rpx 12rpx;
  125. text-align: center;
  126. border-right: 1rpx solid var(--mp-border-light);
  127. border-bottom: 1rpx solid var(--mp-border-light);
  128. }
  129. .mp-menu-card:nth-child(3n) {
  130. border-right: none;
  131. }
  132. .mp-menu-card:active {
  133. background: #f4fbf8;
  134. }
  135. .mp-menu-card__icon {
  136. width: 60rpx;
  137. height: 60rpx;
  138. border-radius: 16rpx;
  139. background: linear-gradient(145deg, #e8f5ef, #d9efe5);
  140. }
  141. .mp-module-block--bx .mp-menu-card__icon {
  142. background: linear-gradient(145deg, #faf0dc, #f3e4c4);
  143. }
  144. .mp-module-block--db .mp-menu-card__icon {
  145. background: linear-gradient(145deg, #dff0ee, #cce5e2);
  146. }
  147. .mp-module-block--pl .mp-menu-card__icon {
  148. background: linear-gradient(145deg, #dff1e8, #c8e8d8);
  149. }
  150. .mp-menu-card__name {
  151. font-size: 22rpx;
  152. color: #3f4f48;
  153. line-height: 1.35;
  154. }
  155. .mp-menu-card--disabled {
  156. opacity: 0.45;
  157. pointer-events: none;
  158. }
  159. .mp-placeholder {
  160. min-height: 60vh;
  161. display: flex;
  162. flex-direction: column;
  163. align-items: center;
  164. justify-content: center;
  165. padding: 80rpx 48rpx;
  166. text-align: center;
  167. }
  168. .mp-placeholder__icon {
  169. width: 176rpx;
  170. height: 176rpx;
  171. border-radius: 50%;
  172. background: linear-gradient(145deg, #edf5f1, #dcebe4);
  173. margin-bottom: 32rpx;
  174. }
  175. .mp-placeholder__title {
  176. font-size: 32rpx;
  177. font-weight: 600;
  178. color: var(--mp-text);
  179. margin-bottom: 12rpx;
  180. }
  181. .mp-placeholder__desc {
  182. font-size: 26rpx;
  183. color: var(--mp-muted);
  184. line-height: 1.6;
  185. }
  186. .mp-profile-hero {
  187. background: var(--mp-header-gradient);
  188. color: #fff;
  189. padding: calc(40rpx + env(safe-area-inset-top, 0px)) 32rpx 48rpx;
  190. border-bottom-left-radius: var(--mp-radius-xl);
  191. border-bottom-right-radius: var(--mp-radius-xl);
  192. }
  193. .mp-profile-hero__user {
  194. display: flex;
  195. align-items: center;
  196. gap: 24rpx;
  197. }
  198. .mp-profile-hero__avatar {
  199. width: 112rpx;
  200. height: 112rpx;
  201. border-radius: 50%;
  202. background: rgba(255, 255, 255, 0.22);
  203. border: 4rpx solid rgba(255, 255, 255, 0.35);
  204. flex-shrink: 0;
  205. overflow: hidden;
  206. }
  207. .mp-profile-hero__avatar image {
  208. width: 100%;
  209. height: 100%;
  210. }
  211. .mp-profile-hero__name {
  212. font-size: 36rpx;
  213. font-weight: 700;
  214. }
  215. .mp-profile-hero__dept {
  216. margin-top: 8rpx;
  217. font-size: 24rpx;
  218. opacity: 0.9;
  219. }
  220. .mp-profile-panel {
  221. margin: 24rpx 32rpx;
  222. background: var(--mp-surface);
  223. border: 1rpx solid var(--mp-border);
  224. border-radius: var(--mp-radius-lg);
  225. overflow: hidden;
  226. }
  227. .mp-form-item {
  228. display: flex;
  229. align-items: center;
  230. justify-content: space-between;
  231. gap: 24rpx;
  232. padding: 28rpx 32rpx;
  233. border-bottom: 1rpx solid var(--mp-border-light);
  234. }
  235. .mp-form-item:last-child {
  236. border-bottom: none;
  237. }
  238. .mp-form-item__label {
  239. font-size: 28rpx;
  240. color: var(--mp-muted);
  241. flex-shrink: 0;
  242. }
  243. .mp-form-item__value {
  244. font-size: 28rpx;
  245. color: var(--mp-text);
  246. text-align: right;
  247. flex: 1;
  248. min-width: 0;
  249. overflow: hidden;
  250. text-overflow: ellipsis;
  251. white-space: nowrap;
  252. }
  253. .mp-profile-actions {
  254. padding: 8rpx 32rpx 48rpx;
  255. display: flex;
  256. flex-direction: column;
  257. gap: 20rpx;
  258. }
  259. .mp-btn {
  260. height: 88rpx;
  261. line-height: 88rpx;
  262. border-radius: 16rpx;
  263. font-size: 30rpx;
  264. text-align: center;
  265. }
  266. .mp-btn--primary {
  267. background: var(--mp-brand-green);
  268. color: #fff;
  269. }
  270. .mp-btn--ghost {
  271. background: #fff;
  272. color: var(--mp-danger);
  273. border: 1rpx solid #fecaca;
  274. }
  275. .mp-btn--block {
  276. width: 100%;
  277. }
  278. .mp-hint {
  279. margin: 0 32rpx 24rpx;
  280. font-size: 22rpx;
  281. color: var(--mp-muted);
  282. text-align: center;
  283. }