anomaly-detail.scss 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772
  1. .anomaly-detail-page {
  2. height: 100%;
  3. min-height: 0;
  4. overflow-y: auto;
  5. padding: 16px;
  6. box-sizing: border-box;
  7. font-family: "Microsoft YaHei", system-ui, sans-serif;
  8. }
  9. .anomaly-detail-toolbar-container {
  10. gap: 14px;
  11. flex-wrap: wrap;
  12. border-radius: 12px;
  13. padding: 10px 14px;
  14. margin-bottom: 20px;
  15. }
  16. .anomaly-detail-toolbar {
  17. display: flex;
  18. align-items: center;
  19. justify-content: flex-start;
  20. gap: 14px;
  21. flex-wrap: wrap;
  22. border-radius: 12px;
  23. padding: 10px 14px;
  24. margin-bottom: 20px;
  25. }
  26. .anomaly-detail-back {
  27. flex-shrink: 0;
  28. }
  29. .anomaly-detail-tabs {
  30. display: flex;
  31. align-items: center;
  32. gap: 8px;
  33. // flex-wrap: wrap;
  34. flex: 1;
  35. min-width: 0;
  36. }
  37. .anomaly-detail-tab {
  38. border: 0;
  39. background: transparent;
  40. font-size: 12px;
  41. padding: 8px 10px;
  42. border-radius: 8px;
  43. cursor: pointer;
  44. border-bottom: 2px solid transparent;
  45. transition: all 0.25s ease;
  46. }
  47. .anomaly-detail-filters {
  48. display: flex;
  49. align-items: center;
  50. gap: 12px;
  51. flex-wrap: wrap;
  52. margin-left: auto;
  53. }
  54. .anomaly-detail-meta {
  55. display: flex;
  56. align-items: center;
  57. gap: 10px;
  58. flex-wrap: wrap;
  59. font-size: 12px;
  60. }
  61. .anomaly-detail-meta__item {
  62. display: inline-flex;
  63. align-items: center;
  64. max-width: 180px;
  65. overflow: hidden;
  66. text-overflow: ellipsis;
  67. white-space: nowrap;
  68. color: var(--anomaly-muted, #606266);
  69. }
  70. .anomaly-detail-filter {
  71. font-size: 12px;
  72. display: flex;
  73. align-items: center;
  74. gap: 6px;
  75. }
  76. .anomaly-detail-filter-select {
  77. width: 180px;
  78. }
  79. .anomaly-detail-filter-date {
  80. width: 150px;
  81. }
  82. .anomaly-detail-main {
  83. display: grid;
  84. grid-template-columns: minmax(380px, 44%) minmax(0, 1fr);
  85. gap: 20px;
  86. }
  87. .anomaly-detail-accordion,
  88. .anomaly-detail-chart-panel,
  89. .anomaly-detail-table-wrap,
  90. .anomaly-detail-chart-card {
  91. border-radius: 12px;
  92. padding: 14px;
  93. }
  94. .anomaly-detail-acc-item {
  95. border-radius: 8px;
  96. margin-bottom: 10px;
  97. overflow: hidden;
  98. }
  99. .anomaly-detail-acc-head {
  100. min-height: 40px;
  101. display: flex;
  102. align-items: center;
  103. gap: 8px;
  104. padding: 8px 12px;
  105. cursor: pointer;
  106. font-size: 13px;
  107. font-weight: 600;
  108. transition: background 0.2s ease, color 0.2s ease, box-shadow 0.2s ease;
  109. }
  110. .anomaly-detail-acc-item.open .anomaly-detail-acc-head {
  111. font-weight: 700;
  112. }
  113. .anomaly-detail-acc-grid {
  114. display: grid;
  115. grid-template-columns:
  116. minmax(96px, 0.9fr) minmax(0, 1.25fr) minmax(120px, 1fr)
  117. minmax(74px, 0.85fr);
  118. }
  119. .anomaly-detail-acc-grid .acc-cell {
  120. min-height: 38px;
  121. display: flex;
  122. align-items: center;
  123. padding: 0 10px;
  124. font-size: 12px;
  125. border-bottom: 1px solid rgba(141, 171, 194, 0.25);
  126. border-right: 1px solid rgba(141, 171, 194, 0.25);
  127. }
  128. .anomaly-detail-acc-grid .acc-cell:nth-child(4n) {
  129. border-right: 0;
  130. }
  131. .anomaly-detail-acc-grid .sensor-title,
  132. .anomaly-detail-acc-grid .status-title {
  133. font-weight: 600;
  134. }
  135. .anomaly-detail-acc-grid .sensor-value,
  136. .anomaly-detail-acc-grid .status-value {
  137. grid-column: span 3;
  138. border-right: 0;
  139. white-space: normal;
  140. line-height: 1.5;
  141. padding: 7px 10px;
  142. }
  143. .anomaly-detail-chart {
  144. height: 380px;
  145. width: 100%;
  146. }
  147. .anomaly-detector-plot {
  148. display: flex;
  149. flex-direction: column;
  150. min-height: 380px;
  151. }
  152. .anomaly-detector-plot__head {
  153. display: flex;
  154. align-items: center;
  155. justify-content: center;
  156. gap: 8px;
  157. min-height: 32px;
  158. margin-bottom: 6px;
  159. }
  160. .anomaly-detector-plot__title {
  161. flex: 1;
  162. text-align: center;
  163. font-size: 12px;
  164. font-weight: 600;
  165. line-height: 1.4;
  166. color: var(--anomaly-title, #e3f2ff);
  167. }
  168. .anomaly-detector-plot__nav {
  169. width: 28px;
  170. height: 28px;
  171. border: 1px solid rgba(0, 242, 255, 0.35);
  172. border-radius: 6px;
  173. background: rgba(0, 242, 255, 0.08);
  174. color: #22e8ff;
  175. cursor: pointer;
  176. display: inline-flex;
  177. align-items: center;
  178. justify-content: center;
  179. flex-shrink: 0;
  180. &:disabled {
  181. opacity: 0.35;
  182. cursor: not-allowed;
  183. }
  184. }
  185. .anomaly-detector-plot__counter {
  186. font-size: 11px;
  187. color: var(--anomaly-muted, #8da3c7);
  188. flex-shrink: 0;
  189. }
  190. .anomaly-detector-plot__chart {
  191. flex: 1;
  192. min-height: 320px;
  193. }
  194. .anomaly-detector-plot__dots {
  195. display: flex;
  196. justify-content: center;
  197. gap: 6px;
  198. margin-top: 8px;
  199. }
  200. .anomaly-detector-plot__dot {
  201. width: 8px;
  202. height: 8px;
  203. border-radius: 50%;
  204. border: 0;
  205. padding: 0;
  206. background: rgba(141, 171, 194, 0.45);
  207. cursor: pointer;
  208. &.active {
  209. background: #22e8ff;
  210. box-shadow: 0 0 6px rgba(34, 232, 255, 0.6);
  211. }
  212. }
  213. .anomaly-detector-plot__loading,
  214. .anomaly-detector-plot__empty {
  215. flex: 1;
  216. display: flex;
  217. align-items: center;
  218. justify-content: center;
  219. font-size: 13px;
  220. color: var(--anomaly-muted, #8da3c7);
  221. min-height: 320px;
  222. }
  223. .anomaly-detector-plot__image-wrap {
  224. flex: 1;
  225. display: flex;
  226. align-items: center;
  227. justify-content: center;
  228. min-height: 320px;
  229. overflow: hidden;
  230. }
  231. .anomaly-detector-plot__image {
  232. max-width: 100%;
  233. max-height: 360px;
  234. object-fit: contain;
  235. }
  236. .anomaly-detail-table-wrap {
  237. margin-top: 16px;
  238. }
  239. .anomaly-detail-table-tabs {
  240. display: flex;
  241. gap: 8px;
  242. margin-bottom: 12px;
  243. border-bottom: 1px solid rgba(0, 242, 255, 0.15);
  244. }
  245. .detail-table-tab {
  246. border: 0;
  247. background: transparent;
  248. font-size: 12px;
  249. padding: 8px 12px;
  250. border-radius: 8px 8px 0 0;
  251. cursor: pointer;
  252. border-bottom: 2px solid transparent;
  253. }
  254. .anomaly-detail-table-title {
  255. font-size: 14px;
  256. font-weight: 600;
  257. margin-bottom: 10px;
  258. }
  259. .anomaly-detail-table {
  260. width: 100%;
  261. background: transparent !important;
  262. &::before {
  263. display: none;
  264. }
  265. th.el-table__cell {
  266. font-size: 12px;
  267. font-weight: 600;
  268. }
  269. td.el-table__cell {
  270. font-size: 12px;
  271. line-height: 1.5;
  272. }
  273. .el-table__body .cell {
  274. line-height: 1.5;
  275. }
  276. }
  277. .anomaly-detail-table-pagination {
  278. margin-top: 12px;
  279. text-align: right;
  280. }
  281. .anomaly-detail-charts-grid {
  282. display: grid;
  283. grid-template-columns: repeat(2, minmax(0, 1fr));
  284. gap: 20px;
  285. }
  286. .anomaly-detail-chart-card__head {
  287. display: flex;
  288. justify-content: space-between;
  289. align-items: center;
  290. margin-bottom: 10px;
  291. flex-wrap: wrap;
  292. gap: 8px;
  293. }
  294. .anomaly-detail-chart-card__title {
  295. font-size: 15px;
  296. font-weight: 500;
  297. }
  298. .anomaly-detail-toggle span {
  299. font-size: 12px;
  300. padding: 4px 12px;
  301. border-radius: 20px;
  302. cursor: pointer;
  303. margin-left: 6px;
  304. border: 1px solid transparent;
  305. }
  306. .anomaly-detail-trend-custom {
  307. width: 100px;
  308. margin-left: 6px;
  309. vertical-align: middle;
  310. }
  311. .anomaly-detail-chart-box {
  312. height: 310px;
  313. width: 100%;
  314. }
  315. .status-tag {
  316. display: inline-flex;
  317. align-items: center;
  318. justify-content: center;
  319. min-width: 52px;
  320. height: 22px;
  321. padding: 0 10px;
  322. border-radius: 11px;
  323. font-size: 12px;
  324. font-weight: 600;
  325. line-height: 1;
  326. letter-spacing: 0.02em;
  327. border: 1px solid transparent;
  328. box-sizing: border-box;
  329. }
  330. @media (max-width: 1100px) {
  331. .anomaly-detail-main {
  332. grid-template-columns: 1fr;
  333. }
  334. .anomaly-detail-charts-grid {
  335. grid-template-columns: 1fr;
  336. }
  337. }
  338. /* 非科技蓝浅色 */
  339. html:not([data-theme="tech-blue"]) {
  340. .anomaly-detail-page {
  341. background: var(--anomaly-page-bg, #f5f7fa);
  342. color: var(--anomaly-page-text, #303133);
  343. .el-loading-mask {
  344. background-color: var(
  345. --anomaly-loading-bg,
  346. rgba(255, 255, 255, 0.72)
  347. ) !important;
  348. }
  349. }
  350. .anomaly-detail-toolbar,
  351. .anomaly-detail-accordion,
  352. .anomaly-detail-chart-panel,
  353. .anomaly-detail-table-wrap,
  354. .anomaly-detail-chart-card {
  355. background: var(--anomaly-card-bg, #ffffff);
  356. border: 1px solid var(--anomaly-card-border, #ebeef5);
  357. box-shadow: 0 2px 12px rgba(0, 0, 0, 0.06);
  358. }
  359. .anomaly-detail-tab {
  360. color: var(--anomaly-muted, #909399);
  361. &:hover,
  362. &.active {
  363. color: var(--primary-color, #008080);
  364. background: var(--bgopacity-color, rgba(0, 128, 128, 0.08));
  365. border-bottom-color: var(--primary-color, #008080);
  366. }
  367. }
  368. .anomaly-detail-filter {
  369. color: var(--anomaly-page-text, #606266);
  370. }
  371. .anomaly-detail-acc-item {
  372. border: 1px solid var(--anomaly-card-border, #ebeef5);
  373. }
  374. .anomaly-detail-acc-head {
  375. background: var(--anomaly-radar-panel-bg, #f5f7fa);
  376. color: var(--anomaly-title, #303133);
  377. &.active {
  378. background: var(--bgopacity-color, rgba(0, 128, 128, 0.12));
  379. color: var(--primary-color, #008080);
  380. box-shadow: inset 3px 0 0 var(--primary-color, #008080);
  381. }
  382. }
  383. .anomaly-detail-acc-grid .acc-cell {
  384. color: var(--anomaly-page-text, #606266);
  385. border-color: var(--anomaly-card-border, #ebeef5);
  386. }
  387. .status-tag.normal {
  388. color: #529b2e;
  389. background: #f0f9eb;
  390. border-color: #b3e19d;
  391. }
  392. .status-tag.error {
  393. color: #c45656;
  394. background: #fef0f0;
  395. border-color: #f5c4c4;
  396. }
  397. .status-tag.over {
  398. color: #b88230;
  399. background: #fdf6ec;
  400. border-color: #f3d19e;
  401. }
  402. .status-tag.under {
  403. color: #c45656;
  404. background: #fef0f0;
  405. border-color: #f5c4c4;
  406. }
  407. .status-tag.muted {
  408. color: #909399;
  409. background: #f4f4f5;
  410. border-color: #e9e9eb;
  411. }
  412. .detail-table-tab {
  413. color: var(--anomaly-muted, #909399);
  414. &.active {
  415. color: var(--primary-color, #008080);
  416. border-bottom-color: var(--primary-color, #008080);
  417. }
  418. }
  419. .anomaly-detail-table-title,
  420. .anomaly-detail-chart-card__title {
  421. color: var(--anomaly-title, #303133);
  422. }
  423. .anomaly-detail-table {
  424. th.el-table__cell {
  425. background: var(--table-header-bg, #9c9a3f) !important;
  426. color: var(--table-header-text, #ffffff) !important;
  427. border-color: #e4e7ed !important;
  428. .cell {
  429. color: var(--table-header-text, #ffffff) !important;
  430. }
  431. }
  432. td.el-table__cell {
  433. background: #ffffff !important;
  434. color: #303133 !important;
  435. border-color: #ebeef5 !important;
  436. .cell {
  437. color: #303133 !important;
  438. }
  439. }
  440. &.el-table--striped
  441. .el-table__body
  442. tr.el-table__row--striped
  443. td.el-table__cell {
  444. background: #f2f4f7 !important;
  445. }
  446. .el-table__body tr:hover > td.el-table__cell {
  447. background: #e8f4f4 !important;
  448. .cell {
  449. color: #303133 !important;
  450. }
  451. }
  452. }
  453. .anomaly-detail-table-pagination {
  454. .el-pagination__total,
  455. .el-pagination__jump {
  456. color: var(--anomaly-muted, #606266);
  457. }
  458. }
  459. .anomaly-detail-toggle span {
  460. color: var(--anomaly-muted, #909399);
  461. border-color: var(--anomaly-card-border, #dcdfe6);
  462. &.active {
  463. color: var(--primary-color, #008080);
  464. border-color: var(--primary-color, #008080);
  465. background: var(--bgopacity-color, rgba(0, 128, 128, 0.08));
  466. }
  467. }
  468. .anomaly-detail-meta__item {
  469. color: var(--anomaly-muted, #606266);
  470. }
  471. .anomaly-detail-trend-custom {
  472. .el-input__inner {
  473. background: var(--anomaly-input-bg, #ffffff);
  474. color: var(--anomaly-text, #303133);
  475. border-color: var(--anomaly-card-border, #dcdfe6);
  476. }
  477. }
  478. }
  479. /* 科技蓝大屏 */
  480. html[data-theme="tech-blue"] {
  481. .anomaly-detail-page {
  482. background-color: #050e23;
  483. background-image: radial-gradient(
  484. circle at 50% 50%,
  485. rgba(16, 33, 79, 0.8) 0%,
  486. transparent 80%
  487. ),
  488. linear-gradient(rgba(18, 16, 16, 0.4) 1px, transparent 1px),
  489. linear-gradient(90deg, rgba(18, 16, 16, 0.4) 1px, transparent 1px);
  490. background-size: 100% 100%, 30px 30px, 30px 30px;
  491. color: #e2e8f0;
  492. }
  493. .anomaly-detail-toolbar,
  494. .anomaly-detail-accordion,
  495. .anomaly-detail-chart-panel,
  496. .anomaly-detail-table-wrap,
  497. .anomaly-detail-chart-card {
  498. background: rgba(13, 25, 48, 0.7);
  499. backdrop-filter: blur(12px);
  500. border: 1px solid rgba(0, 242, 255, 0.2);
  501. box-shadow: 0 8px 32px 0 rgba(0, 0, 0, 0.8);
  502. }
  503. .anomaly-detail-tab {
  504. color: #64748b;
  505. &:hover {
  506. color: #00f2ff;
  507. }
  508. &.active {
  509. color: #00f2ff;
  510. background: rgba(0, 242, 255, 0.1);
  511. border-bottom-color: #00f2ff;
  512. font-weight: 600;
  513. }
  514. }
  515. .anomaly-detail-filter {
  516. color: #9ecce6;
  517. }
  518. .anomaly-detail-acc-item {
  519. border: 1px solid rgba(0, 242, 255, 0.2);
  520. }
  521. .anomaly-detail-acc-head {
  522. background: rgba(13, 25, 48, 0.7);
  523. color: #ffffff;
  524. &.active {
  525. background: rgba(0, 242, 255, 0.14);
  526. color: #00f2ff;
  527. box-shadow: inset 3px 0 0 #00f2ff, 0 0 12px rgba(0, 242, 255, 0.12);
  528. }
  529. }
  530. .anomaly-detail-acc-grid .acc-cell {
  531. color: #c7dcef;
  532. border-color: rgba(141, 171, 194, 0.25);
  533. }
  534. .anomaly-detail-acc-grid .sensor-title,
  535. .anomaly-detail-acc-grid .status-title {
  536. color: #e3f2ff;
  537. }
  538. .status-tag.normal {
  539. color: #00ff88;
  540. background: rgba(0, 255, 136, 0.12);
  541. border-color: rgba(0, 255, 136, 0.45);
  542. box-shadow: 0 0 8px rgba(0, 255, 136, 0.15);
  543. }
  544. .status-tag.error {
  545. color: #ff6b81;
  546. background: rgba(255, 71, 87, 0.16);
  547. border-color: rgba(255, 107, 129, 0.55);
  548. box-shadow: 0 0 8px rgba(255, 71, 87, 0.2);
  549. }
  550. .status-tag.over {
  551. color: #ffb454;
  552. background: rgba(255, 180, 84, 0.16);
  553. border-color: rgba(255, 180, 84, 0.55);
  554. box-shadow: 0 0 8px rgba(255, 180, 84, 0.2);
  555. }
  556. .status-tag.under {
  557. color: #ff6b81;
  558. background: rgba(255, 71, 87, 0.16);
  559. border-color: rgba(255, 107, 129, 0.55);
  560. box-shadow: 0 0 8px rgba(255, 71, 87, 0.2);
  561. }
  562. .status-tag.muted {
  563. color: #9fb3c8;
  564. background: rgba(159, 179, 200, 0.14);
  565. border-color: rgba(159, 179, 200, 0.4);
  566. }
  567. .detail-table-tab {
  568. color: #64748b;
  569. &:hover,
  570. &.active {
  571. color: #00f2ff;
  572. }
  573. &.active {
  574. background: rgba(0, 242, 255, 0.08);
  575. border-bottom-color: #00f2ff;
  576. }
  577. }
  578. .anomaly-detail-table-title,
  579. .anomaly-detail-chart-card__title {
  580. color: #ffffff;
  581. }
  582. .anomaly-detail-table {
  583. th.el-table__cell {
  584. background: rgba(0, 48, 88, 0.96) !important;
  585. color: #f5fbff !important;
  586. border-color: rgba(130, 185, 230, 0.22) !important;
  587. .cell {
  588. color: #f5fbff !important;
  589. }
  590. }
  591. td.el-table__cell {
  592. background: rgba(10, 22, 44, 0.92) !important;
  593. color: #eaf6ff !important;
  594. border-color: rgba(120, 165, 200, 0.12) !important;
  595. .cell {
  596. color: #eaf6ff !important;
  597. }
  598. }
  599. &.el-table--striped
  600. .el-table__body
  601. tr.el-table__row--striped
  602. td.el-table__cell {
  603. background: rgba(16, 36, 64, 0.96) !important;
  604. }
  605. .el-table__body tr:hover > td.el-table__cell {
  606. background: rgba(0, 88, 140, 0.42) !important;
  607. color: #ffffff !important;
  608. .cell {
  609. color: #ffffff !important;
  610. }
  611. }
  612. }
  613. .anomaly-detail-table-pagination {
  614. .el-pagination__total,
  615. .el-pagination__jump,
  616. .el-input__inner {
  617. color: #94a3b8;
  618. }
  619. .btn-prev,
  620. .btn-next,
  621. .el-pager li {
  622. background: rgba(10, 22, 44, 0.92) !important;
  623. color: #94a3b8 !important;
  624. border: 1px solid rgba(0, 242, 255, 0.15);
  625. }
  626. .el-pager li.active {
  627. color: #00f2ff !important;
  628. border-color: #00f2ff;
  629. }
  630. }
  631. .anomaly-detail-toggle span {
  632. color: #64748b;
  633. border-color: rgba(0, 242, 255, 0.2);
  634. &:hover {
  635. color: #00f2ff;
  636. }
  637. &.active {
  638. color: #00f2ff;
  639. background: rgba(0, 242, 255, 0.1);
  640. border-color: #00f2ff;
  641. box-shadow: 0 0 8px rgba(0, 242, 255, 0.4);
  642. }
  643. }
  644. .anomaly-detail-meta__item {
  645. color: rgba(183, 223, 245, 0.78);
  646. }
  647. .anomaly-detail-trend-custom {
  648. .el-input__inner {
  649. background: rgba(0, 16, 32, 0.92);
  650. color: #c8e8f8;
  651. border-color: rgba(0, 140, 210, 0.45);
  652. }
  653. }
  654. }