dashboard.scss 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373
  1. @import '../ios-theme.scss';
  2. :host {
  3. display: block;
  4. background-color: $ios-background-secondary;
  5. min-height: 100vh;
  6. padding: $ios-spacing-lg;
  7. }
  8. .dashboard-header {
  9. margin-bottom: $ios-spacing-xxl;
  10. h1 {
  11. font-size: $ios-font-size-xl;
  12. font-weight: $ios-font-weight-bold;
  13. color: $ios-text-primary;
  14. margin: 0;
  15. }
  16. }
  17. .dashboard-main {
  18. max-width: 1400px;
  19. margin: 0 auto;
  20. }
  21. .section-header {
  22. display: flex;
  23. justify-content: space-between;
  24. align-items: center;
  25. margin-bottom: $ios-spacing-lg;
  26. h2 {
  27. font-size: $ios-font-size-lg;
  28. font-weight: $ios-font-weight-semibold;
  29. color: $ios-text-primary;
  30. margin: 0;
  31. }
  32. }
  33. .section-filters {
  34. display: flex;
  35. gap: $ios-spacing-md;
  36. select {
  37. padding: $ios-spacing-sm $ios-spacing-md;
  38. border: 1px solid $ios-border;
  39. border-radius: $ios-radius-md;
  40. background-color: $ios-background;
  41. font-size: $ios-font-size-sm;
  42. color: $ios-text-primary;
  43. cursor: pointer;
  44. &:focus {
  45. outline: none;
  46. border-color: $ios-primary;
  47. }
  48. }
  49. }
  50. /* 项目监控大盘样式 */
  51. .monitoring-section {
  52. background-color: $ios-card-background;
  53. border-radius: $ios-radius-lg;
  54. padding: $ios-spacing-xl;
  55. margin-bottom: $ios-spacing-xl;
  56. box-shadow: $ios-shadow-card;
  57. }
  58. .project-gantt-chart {
  59. .project-bar {
  60. display: flex;
  61. gap: $ios-spacing-lg;
  62. padding: $ios-spacing-lg 0;
  63. border-bottom: 1px solid $ios-border;
  64. &:last-child {
  65. border-bottom: none;
  66. }
  67. .project-info {
  68. flex: 0 0 300px;
  69. .project-name {
  70. font-size: $ios-font-size-base;
  71. font-weight: $ios-font-weight-medium;
  72. color: $ios-primary;
  73. cursor: pointer;
  74. margin: 0 0 $ios-spacing-xs 0;
  75. &:hover {
  76. text-decoration: underline;
  77. }
  78. }
  79. .project-details {
  80. font-size: $ios-font-size-sm;
  81. color: $ios-text-secondary;
  82. margin: 0 0 $ios-spacing-xs 0;
  83. }
  84. .project-deadline {
  85. font-size: $ios-font-size-sm;
  86. color: $ios-text-secondary;
  87. margin: 0;
  88. &.overdue-warning {
  89. color: $ios-danger;
  90. font-weight: $ios-font-weight-medium;
  91. }
  92. }
  93. }
  94. .gantt-bars {
  95. flex: 1;
  96. position: relative;
  97. height: 40px;
  98. background-color: $ios-background-secondary;
  99. border-radius: $ios-radius-md;
  100. overflow: hidden;
  101. .phase-bar {
  102. position: absolute;
  103. top: 50%;
  104. transform: translateY(-50%);
  105. height: 24px;
  106. border-radius: $ios-radius-sm;
  107. display: flex;
  108. align-items: center;
  109. justify-content: center;
  110. transition: $ios-feedback-hover;
  111. .phase-label {
  112. font-size: $ios-font-size-xs;
  113. color: $ios-background;
  114. font-weight: $ios-font-weight-medium;
  115. text-shadow: 0 1px 2px rgba(0,0,0,0.2);
  116. }
  117. }
  118. .phase-建模 {
  119. background-color: $ios-primary-light;
  120. }
  121. .phase-渲染 {
  122. background-color: $ios-info;
  123. }
  124. .phase-后期 {
  125. background-color: $ios-warning;
  126. }
  127. .phase-交付 {
  128. background-color: $ios-success;
  129. }
  130. .phase-bar.current {
  131. box-shadow: 0 0 0 2px $ios-primary;
  132. transform: translateY(-50%) scale(1.05);
  133. }
  134. .phase-bar.completed {
  135. opacity: 0.6;
  136. }
  137. }
  138. }
  139. }
  140. /* 工作量评估样式 */
  141. .workload-section {
  142. background-color: $ios-card-background;
  143. border-radius: $ios-radius-lg;
  144. padding: $ios-spacing-xl;
  145. margin-bottom: $ios-spacing-xl;
  146. box-shadow: $ios-shadow-card;
  147. }
  148. .workload-calculator {
  149. display: flex;
  150. gap: $ios-spacing-xl;
  151. .calculator-form {
  152. flex: 1;
  153. display: flex;
  154. flex-direction: column;
  155. gap: $ios-spacing-lg;
  156. .form-group {
  157. display: flex;
  158. flex-direction: column;
  159. gap: $ios-spacing-sm;
  160. label {
  161. font-size: $ios-font-size-sm;
  162. font-weight: $ios-font-weight-medium;
  163. color: $ios-text-primary;
  164. }
  165. input,
  166. select {
  167. padding: $ios-spacing-sm $ios-spacing-md;
  168. border: 1px solid $ios-border;
  169. border-radius: $ios-radius-md;
  170. background-color: $ios-background;
  171. font-size: $ios-font-size-base;
  172. color: $ios-text-primary;
  173. &:focus {
  174. outline: none;
  175. border-color: $ios-primary;
  176. }
  177. }
  178. }
  179. .btn-calculate {
  180. background-color: $ios-primary;
  181. color: $ios-background;
  182. border: none;
  183. border-radius: $ios-radius-md;
  184. padding: $ios-spacing-md;
  185. font-size: $ios-font-size-base;
  186. font-weight: $ios-font-weight-medium;
  187. cursor: pointer;
  188. transition: $ios-feedback-tap;
  189. &:hover {
  190. background-color: $ios-primary-light;
  191. transform: translateY(-1px);
  192. }
  193. &:active {
  194. transform: translateY(0);
  195. }
  196. }
  197. }
  198. .workload-result {
  199. flex: 1;
  200. background-color: $ios-background-secondary;
  201. border-radius: $ios-radius-md;
  202. padding: $ios-spacing-lg;
  203. h3 {
  204. font-size: $ios-font-size-base;
  205. font-weight: $ios-font-weight-medium;
  206. color: $ios-text-primary;
  207. margin: 0 0 $ios-spacing-lg 0;
  208. }
  209. p {
  210. margin: 0 0 $ios-spacing-md 0;
  211. font-size: $ios-font-size-base;
  212. color: $ios-text-primary;
  213. strong {
  214. font-weight: $ios-font-weight-medium;
  215. }
  216. }
  217. .btn-sync {
  218. background-color: $ios-success;
  219. color: $ios-background;
  220. border: none;
  221. border-radius: $ios-radius-md;
  222. padding: $ios-spacing-sm $ios-spacing-lg;
  223. font-size: $ios-font-size-sm;
  224. font-weight: $ios-font-weight-medium;
  225. cursor: pointer;
  226. transition: $ios-feedback-tap;
  227. &:hover {
  228. background-color: #2AA049;
  229. transform: translateY(-1px);
  230. }
  231. }
  232. }
  233. }
  234. /* 待办任务样式 */
  235. .todo-section {
  236. background-color: $ios-card-background;
  237. border-radius: $ios-radius-lg;
  238. padding: $ios-spacing-xl;
  239. margin-bottom: $ios-spacing-xl;
  240. box-shadow: $ios-shadow-card;
  241. }
  242. .todo-list {
  243. .todo-item {
  244. padding: $ios-spacing-lg;
  245. border-radius: $ios-radius-md;
  246. margin-bottom: $ios-spacing-md;
  247. background-color: $ios-background;
  248. border: 1px solid $ios-border;
  249. transition: $ios-feedback-hover;
  250. &:last-child {
  251. margin-bottom: 0;
  252. }
  253. &.priority-high {
  254. border-left: 4px solid $ios-danger;
  255. }
  256. &.priority-medium {
  257. border-left: 4px solid $ios-warning;
  258. }
  259. &.priority-low {
  260. border-left: 4px solid $ios-info;
  261. }
  262. &:hover {
  263. transform: translateY(-1px);
  264. box-shadow: $ios-shadow-sm;
  265. }
  266. .todo-header {
  267. display: flex;
  268. justify-content: space-between;
  269. align-items: center;
  270. margin-bottom: $ios-spacing-md;
  271. h3 {
  272. font-size: $ios-font-size-base;
  273. font-weight: $ios-font-weight-medium;
  274. color: $ios-text-primary;
  275. margin: 0;
  276. }
  277. .task-priority {
  278. font-size: $ios-font-size-xs;
  279. padding: $ios-spacing-xs $ios-spacing-sm;
  280. border-radius: $ios-radius-full;
  281. font-weight: $ios-font-weight-medium;
  282. }
  283. }
  284. .todo-info {
  285. margin-bottom: $ios-spacing-md;
  286. p {
  287. margin: 0 0 $ios-spacing-xs 0;
  288. font-size: $ios-font-size-sm;
  289. color: $ios-text-secondary;
  290. }
  291. .task-deadline {
  292. font-size: $ios-font-size-xs;
  293. color: $ios-text-tertiary;
  294. }
  295. }
  296. .todo-actions {
  297. .btn-handle {
  298. background-color: $ios-primary;
  299. color: $ios-background;
  300. border: none;
  301. border-radius: $ios-radius-md;
  302. padding: $ios-spacing-sm $ios-spacing-lg;
  303. font-size: $ios-font-size-sm;
  304. font-weight: $ios-font-weight-medium;
  305. cursor: pointer;
  306. transition: $ios-feedback-tap;
  307. &:hover {
  308. background-color: $ios-primary-light;
  309. }
  310. }
  311. }
  312. }
  313. }
  314. /* 超期提醒样式 */
  315. .overdue-alert {
  316. position: fixed;
  317. top: 50%;
  318. left: 50%;
  319. transform: translate(-50%, -50%);
  320. background-color: $ios-card-background;
  321. border-radius: $ios-radius-lg;
  322. padding: $ios-spacing-xl;
  323. box-shadow: $ios-shadow-lg;
  324. z-index: 1000;
  325. min-width: 400px;
  326. .alert-content {
  327. h3 {
  328. font-size: $ios-font-size-lg;
  329. font-weight: $ios-font-weight-semibold;
  330. color: $ios-danger;
  331. margin: 0 0 $ios-spacing-lg 0;
  332. }
  333. ul {
  334. margin: 0 0 $ios-spacing-lg 0;
  335. padding-left: $ios-spacing-xl;
  336. li {
  337. font-size: $ios-font-size-base;
  338. color: $ios-text-primary;
  339. margin-bottom: $ios-spacing-sm;
  340. &:last-child {
  341. margin-bottom: 0;
  342. }
  343. }
  344. }
  345. .btn-close {
  346. background-color: $ios-text-tertiary;
  347. color: $ios-text-primary;
  348. border: none;
  349. border-radius: $ios-radius-md;
  350. padding: $ios-spacing-sm $ios-spacing-lg;
  351. font-size: $ios-font-size-sm;
  352. font-weight: $ios-font-weight-medium;
  353. cursor: pointer;
  354. transition: $ios-feedback-tap;
  355. &:hover {
  356. background-color: $ios-text-secondary;
  357. color: $ios-background;
  358. }
  359. }
  360. }
  361. }