dashboard.scss 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551
  1. /* 财务工作台样式 - iOS风格设计 */
  2. .finance-dashboard {
  3. min-height: 100vh;
  4. background-color: #f2f2f7;
  5. padding: 20px;
  6. font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
  7. }
  8. /* 顶部标题区域 */
  9. .dashboard-header {
  10. display: flex;
  11. justify-content: space-between;
  12. align-items: center;
  13. margin-bottom: 24px;
  14. }
  15. .dashboard-title {
  16. font-size: 28px;
  17. font-weight: 600;
  18. color: #1c1c1e;
  19. margin: 0;
  20. }
  21. .current-date {
  22. font-size: 16px;
  23. color: #6c6c70;
  24. }
  25. /* 快捷操作区域 */
  26. .quick-actions {
  27. display: grid;
  28. grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
  29. gap: 16px;
  30. margin-bottom: 24px;
  31. }
  32. .action-btn {
  33. display: flex;
  34. flex-direction: column;
  35. align-items: center;
  36. justify-content: center;
  37. padding: 20px;
  38. background-color: #ffffff;
  39. border-radius: 16px;
  40. border: none;
  41. box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05);
  42. cursor: pointer;
  43. transition: all 0.3s ease;
  44. }
  45. .action-btn:hover {
  46. transform: translateY(-2px);
  47. box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08);
  48. }
  49. .action-icon {
  50. font-size: 32px;
  51. margin-bottom: 12px;
  52. }
  53. .action-label {
  54. font-size: 16px;
  55. font-weight: 500;
  56. color: #1c1c1e;
  57. }
  58. /* 主内容区域 */
  59. .dashboard-content {
  60. display: flex;
  61. flex-direction: column;
  62. gap: 24px;
  63. }
  64. /* 数据概览卡片 */
  65. .stats-cards {
  66. display: grid;
  67. grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
  68. gap: 20px;
  69. }
  70. .stat-card {
  71. display: flex;
  72. align-items: center;
  73. padding: 20px;
  74. background-color: #ffffff;
  75. border-radius: 16px;
  76. box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05);
  77. transition: all 0.3s ease;
  78. }
  79. .stat-card:hover {
  80. box-shadow: 0 4px 20px rgba(0, 0, 0, 0.08);
  81. }
  82. .stat-icon {
  83. display: flex;
  84. align-items: center;
  85. justify-content: center;
  86. width: 56px;
  87. height: 56px;
  88. border-radius: 12px;
  89. margin-right: 16px;
  90. background-color: #f2f2f7;
  91. color: #007aff;
  92. }
  93. .stat-icon.orders {
  94. background-color: #e0f7fa;
  95. color: #00bcd4;
  96. }
  97. .stat-icon.payment {
  98. background-color: #e8f5e9;
  99. color: #4caf50;
  100. }
  101. .stat-icon.quotes {
  102. background-color: #fff3e0;
  103. color: #ff9800;
  104. }
  105. .stat-icon.savings {
  106. background-color: #ede7f6;
  107. color: #9c27b0;
  108. }
  109. .stat-content {
  110. flex: 1;
  111. }
  112. .stat-value {
  113. font-size: 24px;
  114. font-weight: 700;
  115. color: #1c1c1e;
  116. margin-bottom: 4px;
  117. }
  118. .stat-label {
  119. font-size: 14px;
  120. color: #6c6c70;
  121. }
  122. .view-detail-btn {
  123. padding: 8px 16px;
  124. background-color: #f2f2f7;
  125. border: none;
  126. border-radius: 12px;
  127. font-size: 14px;
  128. font-weight: 500;
  129. color: #007aff;
  130. cursor: pointer;
  131. transition: all 0.3s ease;
  132. }
  133. .view-detail-btn:hover {
  134. background-color: #e5e5ea;
  135. }
  136. /* 待办任务区域 */
  137. .todo-section {
  138. background-color: #ffffff;
  139. border-radius: 16px;
  140. box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05);
  141. padding: 20px;
  142. }
  143. .section-header {
  144. display: flex;
  145. justify-content: space-between;
  146. align-items: center;
  147. margin-bottom: 16px;
  148. }
  149. .section-header h2 {
  150. font-size: 20px;
  151. font-weight: 600;
  152. color: #1c1c1e;
  153. margin: 0;
  154. }
  155. .task-count {
  156. font-size: 14px;
  157. color: #6c6c70;
  158. }
  159. .task-list {
  160. display: flex;
  161. flex-direction: column;
  162. gap: 12px;
  163. }
  164. .task-item {
  165. display: flex;
  166. align-items: center;
  167. padding: 16px;
  168. background-color: #f9f9f9;
  169. border-radius: 12px;
  170. cursor: pointer;
  171. transition: all 0.3s ease;
  172. position: relative;
  173. overflow: hidden;
  174. }
  175. .task-item:hover {
  176. background-color: #f2f2f7;
  177. transform: translateX(4px);
  178. }
  179. .task-priority-indicator {
  180. width: 4px;
  181. height: 24px;
  182. border-radius: 2px;
  183. background-color: #8e8e93;
  184. margin-right: 12px;
  185. }
  186. .task-item.high-priority .task-priority-indicator {
  187. background-color: #ff3b30;
  188. }
  189. .task-item.medium-priority .task-priority-indicator {
  190. background-color: #ff9500;
  191. }
  192. .task-content {
  193. flex: 1;
  194. }
  195. .task-title {
  196. font-size: 16px;
  197. font-weight: 500;
  198. color: #1c1c1e;
  199. margin-bottom: 4px;
  200. }
  201. .task-meta {
  202. display: flex;
  203. gap: 16px;
  204. }
  205. .due-time {
  206. font-size: 14px;
  207. color: #6c6c70;
  208. }
  209. .task-action {
  210. display: flex;
  211. align-items: center;
  212. justify-content: center;
  213. width: 32px;
  214. height: 32px;
  215. color: #6c6c70;
  216. }
  217. /* 响应式设计 */
  218. @media (max-width: 768px) {
  219. .finance-dashboard {
  220. padding: 16px;
  221. }
  222. .dashboard-title {
  223. font-size: 24px;
  224. }
  225. .quick-actions {
  226. grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
  227. gap: 12px;
  228. }
  229. .stats-cards {
  230. grid-template-columns: 1fr;
  231. gap: 16px;
  232. }
  233. .stat-card {
  234. padding: 16px;
  235. }
  236. .todo-section {
  237. padding: 16px;
  238. }
  239. }
  240. /* iOS风格动画效果 */
  241. @keyframes fadeIn {
  242. from {
  243. opacity: 0;
  244. transform: translateY(10px);
  245. }
  246. to {
  247. opacity: 1;
  248. transform: translateY(0);
  249. }
  250. }
  251. .stat-card,
  252. .action-btn,
  253. .task-item {
  254. animation: fadeIn 0.5s ease-out;
  255. }
  256. .stat-card:nth-child(2) {
  257. animation-delay: 0.1s;
  258. }
  259. .stat-card:nth-child(3) {
  260. animation-delay: 0.2s;
  261. }
  262. .stat-card:nth-child(4) {
  263. animation-delay: 0.3s;
  264. }
  265. .action-btn:nth-child(2) {
  266. animation-delay: 0.1s;
  267. }
  268. .action-btn:nth-child(3) {
  269. animation-delay: 0.2s;
  270. }
  271. .action-btn:nth-child(4) {
  272. animation-delay: 0.3s;
  273. }
  274. /* 工时统计模块样式 */
  275. .work-hour-module {
  276. background-color: #ffffff;
  277. border-radius: 16px;
  278. padding: 24px;
  279. margin-bottom: 24px;
  280. box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05);
  281. animation: slideInUp 0.5s ease-out;
  282. }
  283. .work-hour-module .section-header {
  284. display: flex;
  285. justify-content: space-between;
  286. align-items: center;
  287. margin-bottom: 20px;
  288. }
  289. .work-hour-module h2 {
  290. font-size: 20px;
  291. font-weight: 600;
  292. color: #1c1c1e;
  293. margin: 0;
  294. }
  295. .close-btn {
  296. background: none;
  297. border: none;
  298. font-size: 24px;
  299. color: #8e8e93;
  300. cursor: pointer;
  301. padding: 4px 8px;
  302. border-radius: 8px;
  303. transition: background-color 0.2s ease;
  304. }
  305. .close-btn:hover {
  306. background-color: #f2f2f7;
  307. }
  308. /* 工时概览卡片 */
  309. .work-hour-overview {
  310. display: grid;
  311. grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
  312. gap: 16px;
  313. margin-bottom: 24px;
  314. }
  315. .overview-card {
  316. display: flex;
  317. align-items: center;
  318. padding: 16px;
  319. background-color: #f8f9fa;
  320. border-radius: 12px;
  321. border: 1px solid #e9ecef;
  322. }
  323. .card-icon {
  324. font-size: 24px;
  325. margin-right: 12px;
  326. }
  327. .card-content {
  328. flex: 1;
  329. }
  330. .card-value {
  331. font-size: 18px;
  332. font-weight: 600;
  333. color: #1c1c1e;
  334. margin-bottom: 4px;
  335. }
  336. .card-label {
  337. font-size: 12px;
  338. color: #6c6c70;
  339. }
  340. /* 绩效等级分布 */
  341. .performance-distribution {
  342. margin-bottom: 24px;
  343. }
  344. .performance-distribution h3 {
  345. font-size: 16px;
  346. font-weight: 600;
  347. color: #1c1c1e;
  348. margin-bottom: 16px;
  349. }
  350. .performance-chart {
  351. display: grid;
  352. grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
  353. gap: 12px;
  354. }
  355. .performance-item {
  356. display: flex;
  357. align-items: center;
  358. padding: 12px;
  359. background-color: #f8f9fa;
  360. border-radius: 8px;
  361. }
  362. .level-indicator {
  363. width: 32px;
  364. height: 32px;
  365. border-radius: 50%;
  366. display: flex;
  367. align-items: center;
  368. justify-content: center;
  369. color: white;
  370. font-weight: 600;
  371. font-size: 14px;
  372. margin-right: 12px;
  373. }
  374. .level-info {
  375. flex: 1;
  376. }
  377. .level-count {
  378. font-size: 14px;
  379. font-weight: 600;
  380. color: #1c1c1e;
  381. margin-bottom: 2px;
  382. }
  383. .level-desc {
  384. font-size: 12px;
  385. color: #6c6c70;
  386. }
  387. /* 月度统计表格 */
  388. .monthly-stats h3 {
  389. font-size: 16px;
  390. font-weight: 600;
  391. color: #1c1c1e;
  392. margin-bottom: 16px;
  393. }
  394. .stats-table {
  395. background-color: #f8f9fa;
  396. border-radius: 8px;
  397. overflow: hidden;
  398. }
  399. .table-header {
  400. display: grid;
  401. grid-template-columns: 1fr 1fr 1fr 1fr 1fr 1fr;
  402. background-color: #e9ecef;
  403. padding: 12px 0;
  404. }
  405. .header-cell {
  406. padding: 0 16px;
  407. font-size: 12px;
  408. font-weight: 600;
  409. color: #495057;
  410. text-align: center;
  411. }
  412. .table-body {
  413. max-height: 300px;
  414. overflow-y: auto;
  415. }
  416. .table-row {
  417. display: grid;
  418. grid-template-columns: 1fr 1fr 1fr 1fr 1fr 1fr;
  419. padding: 12px 0;
  420. border-bottom: 1px solid #dee2e6;
  421. }
  422. .table-row:last-child {
  423. border-bottom: none;
  424. }
  425. .table-cell {
  426. padding: 0 16px;
  427. font-size: 14px;
  428. color: #495057;
  429. text-align: center;
  430. display: flex;
  431. align-items: center;
  432. justify-content: center;
  433. }
  434. .performance-badge {
  435. padding: 4px 8px;
  436. border-radius: 12px;
  437. color: white;
  438. font-size: 12px;
  439. font-weight: 600;
  440. }
  441. /* 工时按钮特殊样式 */
  442. .work-hour-btn {
  443. background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
  444. color: white;
  445. }
  446. .work-hour-btn .action-icon {
  447. color: white;
  448. }
  449. .work-hour-btn .action-label {
  450. color: white;
  451. }
  452. .work-hour-btn:hover {
  453. transform: translateY(-2px);
  454. box-shadow: 0 4px 20px rgba(102, 126, 234, 0.3);
  455. }
  456. /* 动画效果 */
  457. @keyframes slideInUp {
  458. from {
  459. opacity: 0;
  460. transform: translateY(20px);
  461. }
  462. to {
  463. opacity: 1;
  464. transform: translateY(0);
  465. }
  466. }