AlarmCenter.tsx 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995
  1. import React, { useState, useEffect } from 'react';
  2. import { Popover, Radio, Avatar, Tooltip, Empty, Select } from 'antd';
  3. import style from './index.less';
  4. import moment from 'moment';
  5. import { ChartBoxTitle } from './ChartBox';
  6. import { useRequest } from '@umijs/max';
  7. import {
  8. getProjectAlarm,
  9. getIssueList,
  10. getFaultAnalysis,
  11. getBreakdownRecord,
  12. getPatrolRecord,
  13. getProjectList,
  14. } from '@/Project/services/DataMeter';
  15. const { Option } = Select;
  16. function AlarmCenter(props: DataMeter.IModelsProps) {
  17. const { child, setActive, layout, subModule, projectId } = props;
  18. // const [active, setActive] = useState();
  19. // const active = layout.active || child.find(item => item.show).key;
  20. const [active, setSelfActive] = useState(
  21. layout.active || child.find((item) => item.show)?.key,
  22. );
  23. const [showTabs, setShowTabs] = useState(false);
  24. const [title, setTitle] = useState('');
  25. const [faultActive, setFaultActive] = useState(1);
  26. const id = projectId || -1;
  27. const projectAlarmRequest = useRequest(getProjectAlarm, {
  28. defaultParams: [
  29. {
  30. pageSize: 50,
  31. currentPage: 1,
  32. msgType: '4,5,6',
  33. projectId: id,
  34. },
  35. ],
  36. });
  37. const IssueListRequest = useRequest(getIssueList, {
  38. defaultParams: [
  39. {
  40. projectId: id,
  41. pageSize: 50,
  42. currentPage: 1,
  43. },
  44. ],
  45. });
  46. const faultAnalysisRequest = useRequest(getFaultAnalysis, {
  47. defaultParams: [id],
  48. });
  49. const breakdownRecordRequest = useRequest(getBreakdownRecord, {
  50. defaultParams: [
  51. {
  52. pageSize: 50,
  53. currentPage: 1,
  54. projectId: id,
  55. },
  56. ],
  57. });
  58. const patrolRecordRequest = useRequest(getPatrolRecord, {
  59. defaultParams: [
  60. {
  61. pageSize: 50,
  62. currentPage: 1,
  63. projectId: id,
  64. status: 1,
  65. },
  66. ],
  67. });
  68. const projectRequest = useRequest(getProjectList, {
  69. cacheKey: 'projectList',
  70. staleTime: -1,
  71. });
  72. const projectAlarmList = projectAlarmRequest.data?.list || [];
  73. const issueList = IssueListRequest.data?.list || [];
  74. const faultAnalysis = faultAnalysisRequest.data?.list || [];
  75. const breakdownList = breakdownRecordRequest.data?.list || [];
  76. const patrolList = patrolRecordRequest.data?.list || [];
  77. const projectList = projectRequest.data?.list || [];
  78. const getTitle = (title: string) => {
  79. return (
  80. <Popover
  81. placement="topLeft"
  82. content={<div style={{ maxWidth: '2rem' }}>{title}</div>}
  83. >
  84. {title}
  85. </Popover>
  86. );
  87. };
  88. const onChange = (value: string) => {
  89. let id = projectId || -1;
  90. projectAlarmRequest.run({
  91. pageSize: 50,
  92. currentPage: 1,
  93. msgType: value,
  94. projectId: id,
  95. });
  96. };
  97. const onChangeFault = (value: number) => {
  98. setFaultActive(value);
  99. };
  100. const getBreakdownStatus = (status: number) => {
  101. switch (status) {
  102. case 0:
  103. return '已提交';
  104. case 1:
  105. return '已派遣';
  106. case 2:
  107. return '已处理';
  108. default:
  109. return '';
  110. }
  111. };
  112. const renderContent = () => {
  113. let content;
  114. switch (active) {
  115. case 1:
  116. if (faultActive == 1) {
  117. if (faultAnalysis.length > 0) {
  118. let col = faultAnalysis.map((item: any, index: number) => (
  119. <tr key={index}>
  120. <td
  121. style={
  122. subModule == 0
  123. ? { width: '33%', paddingRight: '0.1rem' }
  124. : { width: '50%', paddingRight: '0.1rem' }
  125. }
  126. className={style.alarmTitle}
  127. >
  128. {getTitle(`${item.DeviceName}(${item.DeviceCode})`)}
  129. </td>
  130. <td
  131. style={
  132. subModule == 0
  133. ? {
  134. width: '33%',
  135. paddingRight: '0.1rem',
  136. whiteSpace: 'nowrap',
  137. }
  138. : {
  139. width: '50%',
  140. paddingRight: '0.1rem',
  141. whiteSpace: 'nowrap',
  142. }
  143. }
  144. className={style.alarmTitle}
  145. >
  146. {getTitle(`${item.FaultDescription}`)}
  147. </td>
  148. </tr>
  149. ));
  150. content = (
  151. <div
  152. style={{
  153. paddingTop: '0.12rem',
  154. paddingLeft: '0.14rem',
  155. flex: '1',
  156. height: 0,
  157. }}
  158. >
  159. <table
  160. className={style.alarmTable}
  161. style={{
  162. width: 'calc(100% - 12px)',
  163. background:
  164. 'linear-gradient(270deg, rgba(153, 231, 255, 0.8) 0%, #60A8FF 100%)',
  165. }}
  166. >
  167. <thead>
  168. <tr>
  169. <th
  170. style={
  171. subModule == 0
  172. ? { width: '33%', paddingRight: '0.1rem' }
  173. : { width: '50%', paddingRight: '0.1rem' }
  174. }
  175. >
  176. 设备
  177. </th>
  178. <th
  179. style={
  180. subModule == 0
  181. ? { width: '33%', paddingRight: '0.1rem' }
  182. : { width: '50%', paddingRight: '0.1rem' }
  183. }
  184. >
  185. 故障类型
  186. </th>
  187. </tr>
  188. </thead>
  189. </table>
  190. <div
  191. style={{
  192. overflowY: 'scroll',
  193. height: 'calc(100% - 0.24rem)',
  194. }}
  195. >
  196. <table className={style.alarmTable}>
  197. <tbody>{col}</tbody>
  198. </table>
  199. </div>
  200. </div>
  201. );
  202. } else {
  203. content = <Empty />;
  204. }
  205. } else if (faultActive == 2) {
  206. if (breakdownList.length > 0) {
  207. let col = breakdownList.map((item: any, idx: number) => (
  208. <tr
  209. key={item.id}
  210. style={
  211. idx % 2 == 0
  212. ? {
  213. background:
  214. 'linear-gradient(to right, rgba(153, 231, 255, 0.1), rgba(96, 168, 255, 0.1))',
  215. }
  216. : {
  217. background:
  218. 'linear-gradient(to right, rgba(153, 231, 255, 0.2), rgba(96, 168, 255, 0.2))',
  219. }
  220. }
  221. >
  222. <td
  223. style={
  224. subModule == 0
  225. ? { width: '40%', paddingRight: '0.1rem' }
  226. : { width: '50%', paddingRight: '0.1rem' }
  227. }
  228. className={style.alarmTitle}
  229. >
  230. {getTitle(`${item.DeviceName}(${item.DeviceCode})`)}
  231. </td>
  232. <td
  233. style={
  234. subModule == 0
  235. ? {
  236. width: '20%',
  237. paddingRight: '0.1rem',
  238. whiteSpace: 'nowrap',
  239. }
  240. : {
  241. width: '50%',
  242. paddingRight: '0.1rem',
  243. whiteSpace: 'nowrap',
  244. }
  245. }
  246. >
  247. {moment(item.ReportTime).format('YYYY-MM-DD')}
  248. </td>
  249. {subModule == 0 && (
  250. <td
  251. style={{
  252. width: '40%',
  253. paddingRight: '0.1rem',
  254. whiteSpace: 'nowrap',
  255. }}
  256. className={style.alarmTitle}
  257. >
  258. {getTitle(
  259. projectList.find(
  260. (project: any) => project.ID == item.ProjectId,
  261. )?.Name || '无',
  262. )}
  263. </td>
  264. )}
  265. </tr>
  266. ));
  267. content = (
  268. <div
  269. style={{
  270. paddingTop: '0.12rem',
  271. paddingLeft: '0.14rem',
  272. flex: '1',
  273. height: 0,
  274. }}
  275. >
  276. <table
  277. className={style.alarmTable}
  278. style={{
  279. width: 'calc(100% - 12px)',
  280. background:
  281. 'linear-gradient(270deg, rgba(153, 231, 255, 0.8) 0%, #60A8FF 100%)',
  282. }}
  283. >
  284. <thead>
  285. <tr>
  286. <th
  287. style={
  288. subModule == 0
  289. ? { width: '40%', paddingRight: '0.1rem' }
  290. : { width: '50%', paddingRight: '0.1rem' }
  291. }
  292. >
  293. 设备
  294. </th>
  295. <th
  296. style={
  297. subModule == 0
  298. ? { width: '20%', paddingRight: '0.1rem' }
  299. : { width: '50%', paddingRight: '0.1rem' }
  300. }
  301. >
  302. 日期
  303. </th>
  304. {subModule == 0 && (
  305. <th style={{ width: '40%', paddingRight: '0.1rem' }}>
  306. 项目名称
  307. </th>
  308. )}
  309. </tr>
  310. </thead>
  311. </table>
  312. <div
  313. style={{
  314. overflowY: 'scroll',
  315. height: 'calc(100% - 0.24rem)',
  316. }}
  317. >
  318. <table className={style.alarmTable}>
  319. <tbody>{col}</tbody>
  320. </table>
  321. </div>
  322. </div>
  323. );
  324. } else {
  325. content = <Empty />;
  326. }
  327. } else {
  328. if (patrolList.length > 0) {
  329. let col = patrolList.map((item: any, idx: number) => (
  330. <tr
  331. key={item.id}
  332. style={
  333. idx % 2 == 0
  334. ? {
  335. background:
  336. 'linear-gradient(to right, rgba(153, 231, 255, 0.1), rgba(96, 168, 255, 0.1))',
  337. }
  338. : {
  339. background:
  340. 'linear-gradient(to right, rgba(153, 231, 255, 0.2), rgba(96, 168, 255, 0.2))',
  341. }
  342. }
  343. >
  344. <td
  345. style={
  346. subModule == 0
  347. ? { width: '40%', paddingRight: '0.1rem' }
  348. : { width: '50%', paddingRight: '0.1rem' }
  349. }
  350. className={style.alarmTitle}
  351. >
  352. {getTitle(`${item?.RouteInfo?.Name}`)}
  353. </td>
  354. <td
  355. style={
  356. subModule == 0
  357. ? {
  358. width: '20%',
  359. paddingRight: '0.1rem',
  360. whiteSpace: 'nowrap',
  361. }
  362. : {
  363. width: '50%',
  364. paddingRight: '0.1rem',
  365. whiteSpace: 'nowrap',
  366. }
  367. }
  368. >
  369. {' '}
  370. {moment(item.CreatedTime).format('YYYY-MM-DD')}
  371. </td>
  372. {subModule == 0 && (
  373. <td
  374. style={{ width: '40%', paddingRight: '0.1rem' }}
  375. className={style.alarmTitle}
  376. >
  377. {getTitle(
  378. projectList.find(
  379. (project: any) => project.ID == item.ProjectId,
  380. )?.Name || '无',
  381. )}
  382. </td>
  383. )}
  384. </tr>
  385. ));
  386. content = (
  387. <div
  388. style={{
  389. paddingTop: '0.12rem',
  390. paddingLeft: '0.14rem',
  391. flex: '1',
  392. height: 0,
  393. }}
  394. >
  395. <table
  396. className={style.alarmTable}
  397. style={{
  398. width: 'calc(100% - 12px)',
  399. background:
  400. 'linear-gradient(270deg, rgba(153, 231, 255, 0.8) 0%, #60A8FF 100%)',
  401. }}
  402. >
  403. <thead>
  404. <tr>
  405. <th
  406. style={
  407. subModule == 0
  408. ? { width: '40%', paddingRight: '0.1rem' }
  409. : { width: '50%', paddingRight: '0.1rem' }
  410. }
  411. >
  412. 路线名称
  413. </th>
  414. <th
  415. style={
  416. subModule == 0
  417. ? { width: '20%', paddingRight: '0.1rem' }
  418. : { width: '50%', paddingRight: '0.1rem' }
  419. }
  420. >
  421. 日期
  422. </th>
  423. {subModule == 0 && (
  424. <th style={{ width: '40%', paddingRight: '0.1rem' }}>
  425. 项目名称
  426. </th>
  427. )}
  428. </tr>
  429. </thead>
  430. </table>
  431. <div
  432. style={{
  433. overflowY: 'scroll',
  434. height: 'calc(100% - 0.24rem)',
  435. }}
  436. >
  437. <table className={style.alarmTable}>
  438. <tbody>{col}</tbody>
  439. </table>
  440. </div>
  441. </div>
  442. );
  443. } else {
  444. content = <Empty />;
  445. }
  446. }
  447. break;
  448. case 2:
  449. if (projectAlarmList.length > 0) {
  450. let col = projectAlarmList.map((item: any, idx: number) => (
  451. <tr
  452. key={item.id}
  453. style={
  454. idx % 2 == 0
  455. ? {
  456. background:
  457. 'linear-gradient(to right, rgba(153, 231, 255, 0.1), rgba(96, 168, 255, 0.1))',
  458. }
  459. : {
  460. background:
  461. 'linear-gradient(to right, rgba(153, 231, 255, 0.2), rgba(96, 168, 255, 0.2))',
  462. }
  463. }
  464. >
  465. {/* <td>{item.MsgBody}</td> */}
  466. <td
  467. style={{ width: '40%', paddingRight: '0.1rem' }}
  468. className={style.alarmTitle}
  469. >
  470. {getTitle(item.MsgBody)}
  471. </td>
  472. {/* <td>{item.ReadStatus == 1 ? '已读' : '未读'}</td> */}
  473. <td
  474. style={
  475. subModule == 0
  476. ? {
  477. width: '20%',
  478. paddingRight: '0.1rem',
  479. whiteSpace: 'nowrap',
  480. }
  481. : {
  482. width: '50%',
  483. paddingRight: '0.1rem',
  484. whiteSpace: 'nowrap',
  485. }
  486. }
  487. >
  488. {moment(item.CreatedOn).format('YYYY-MM-DD')}
  489. </td>
  490. {subModule == 0 && (
  491. <td
  492. style={{ width: '40%', paddingRight: '0.1rem' }}
  493. className={style.alarmTitle}
  494. >
  495. {getTitle(
  496. projectList.find(
  497. (project: any) => project.ID == item?.Project?.ID,
  498. )?.Name || '无',
  499. )}
  500. </td>
  501. )}
  502. </tr>
  503. ));
  504. content = (
  505. <div
  506. style={{
  507. paddingTop: '0.12rem',
  508. paddingLeft: '0.14rem',
  509. flex: '1',
  510. height: 0,
  511. }}
  512. >
  513. <table
  514. className={style.alarmTable}
  515. style={{
  516. width: 'calc(100% - 12px)',
  517. background:
  518. 'linear-gradient(270deg, rgba(153, 231, 255, 0.8) 0%, #60A8FF 100%)',
  519. }}
  520. >
  521. <thead>
  522. <tr>
  523. <th
  524. style={
  525. subModule == 0
  526. ? { width: '40%', paddingRight: '0.1rem' }
  527. : { width: '50%', paddingRight: '0.1rem' }
  528. }
  529. >
  530. 预警内容
  531. </th>
  532. {/* <th>状态</th> */}
  533. <th
  534. style={
  535. subModule == 0
  536. ? { width: '20%', paddingRight: '0.1rem' }
  537. : { width: '50%', paddingRight: '0.1rem' }
  538. }
  539. >
  540. 日期
  541. </th>
  542. {subModule == 0 && (
  543. <th style={{ width: '40%', paddingRight: '0.1rem' }}>
  544. 项目名称
  545. </th>
  546. )}
  547. </tr>
  548. </thead>
  549. </table>
  550. <div
  551. style={{
  552. overflowY: 'scroll',
  553. height: 'calc(100% - 0.24rem)',
  554. }}
  555. >
  556. <table className={style.alarmTable}>
  557. <tbody>{col}</tbody>
  558. </table>
  559. </div>
  560. </div>
  561. );
  562. } else {
  563. content = <Empty />;
  564. }
  565. break;
  566. case 3:
  567. if (issueList.length > 0) {
  568. let col = issueList.map((item: any, idx: number) => (
  569. <tr
  570. key={item.id}
  571. style={
  572. idx % 2 == 0
  573. ? {
  574. background:
  575. 'linear-gradient(to right, rgba(153, 231, 255, 0.1), rgba(96, 168, 255, 0.1))',
  576. }
  577. : {
  578. background:
  579. 'linear-gradient(to right, rgba(153, 231, 255, 0.2), rgba(96, 168, 255, 0.2))',
  580. }
  581. }
  582. >
  583. {/* <td>{item.title}</td> */}
  584. <td
  585. style={
  586. subModule == 0
  587. ? { width: '25%', paddingRight: '0.1rem' }
  588. : { width: '33%', paddingRight: '0.1rem' }
  589. }
  590. className={style.alarmTitle}
  591. >
  592. {getTitle(item.title)}
  593. </td>
  594. {/* <td>{STATUS[item.status]}</td> */}
  595. <td
  596. style={
  597. subModule == 0
  598. ? { width: '25%', paddingRight: '0.1rem' }
  599. : { width: '33%', paddingRight: '0.1rem' }
  600. }
  601. className={style.alarmTitle}
  602. >
  603. {getTitle(STATUS[item.status as keyof typeof STATUS])}
  604. </td>
  605. <td
  606. style={
  607. subModule == 0
  608. ? {
  609. width: '20%',
  610. paddingRight: '0.1rem',
  611. whiteSpace: 'nowrap',
  612. }
  613. : {
  614. width: '33%',
  615. paddingRight: '0.1rem',
  616. whiteSpace: 'nowrap',
  617. }
  618. }
  619. >
  620. {moment(item.c_time).format('YYYY-MM-DD')}
  621. </td>
  622. {subModule == 0 && (
  623. <td
  624. style={{ width: '30%', paddingRight: '0.1rem' }}
  625. className={style.alarmTitle}
  626. >
  627. {getTitle(
  628. projectList.find(
  629. (project: any) => project.ID == item.project_id,
  630. )?.Name || '无',
  631. )}
  632. </td>
  633. )}
  634. </tr>
  635. ));
  636. content = (
  637. <div
  638. style={{
  639. paddingTop: '0.12rem',
  640. paddingLeft: '0.14rem',
  641. flex: '1',
  642. height: 0,
  643. }}
  644. >
  645. <table
  646. className={style.alarmTable}
  647. style={{
  648. width: 'calc(100% - 12px)',
  649. background:
  650. 'linear-gradient(270deg, rgba(153, 231, 255, 0.8) 0%, #60A8FF 100%)',
  651. }}
  652. >
  653. <thead>
  654. <tr>
  655. <th
  656. style={
  657. subModule == 0
  658. ? { width: '25%', paddingRight: '0.1rem' }
  659. : { width: '33%', paddingRight: '0.1rem' }
  660. }
  661. >
  662. 标题
  663. </th>
  664. <th
  665. style={
  666. subModule == 0
  667. ? { width: '25%', paddingRight: '0.1rem' }
  668. : { width: '33%', paddingRight: '0.1rem' }
  669. }
  670. >
  671. 状态
  672. </th>
  673. <th
  674. style={
  675. subModule == 0
  676. ? { width: '20%', paddingRight: '0.1rem' }
  677. : { width: '33%', paddingRight: '0.1rem' }
  678. }
  679. >
  680. 日期
  681. </th>
  682. {subModule == 0 && (
  683. <th style={{ width: '30%', paddingRight: '0.1rem' }}>
  684. 项目名称
  685. </th>
  686. )}
  687. </tr>
  688. </thead>
  689. </table>
  690. <div
  691. style={{
  692. overflowY: 'scroll',
  693. height: 'calc(100% - 0.24rem)',
  694. }}
  695. >
  696. <table className={style.alarmTable}>
  697. <tbody>{col}</tbody>
  698. </table>
  699. </div>
  700. </div>
  701. );
  702. } else {
  703. content = <Empty />;
  704. }
  705. break;
  706. case 4:
  707. var total: any = [];
  708. var id = 1;
  709. issueList.forEach((item: any) => {
  710. id++;
  711. total.push({
  712. id,
  713. title: item.title,
  714. status: STATUS[item.status as keyof typeof STATUS],
  715. time: new Date(item.c_time),
  716. project_id: item.project_id,
  717. });
  718. });
  719. projectAlarmList.forEach((item: any) => {
  720. id++;
  721. total.push({
  722. id,
  723. title: item.MsgBody,
  724. status: item.ReadStatus == 1 ? '已读' : '未读',
  725. time: new Date(item.CreatedOn),
  726. project_id: item.Project?.ID,
  727. });
  728. });
  729. faultAnalysis.forEach((item: any) => {
  730. id++;
  731. total.push({
  732. id,
  733. title: item.FaultDescription,
  734. status: '-',
  735. time: new Date(item.AnalysisTime),
  736. project_id: item.ProjectId,
  737. });
  738. });
  739. patrolList.forEach((item: any) => {
  740. id++;
  741. total.push({
  742. id,
  743. title: item?.RouteInfo?.Name,
  744. status: '异常',
  745. time: new Date(item.CreatedTime),
  746. project_id: item.ProjectId,
  747. });
  748. });
  749. breakdownList.forEach((item: any) => {
  750. id++;
  751. total.push({
  752. id,
  753. title: `${item.DeviceName}(${item.DeviceCode})`,
  754. status: getBreakdownStatus(item.AcceptanceStatus),
  755. time: new Date(item.ReportTime),
  756. project_id: item.ProjectId,
  757. });
  758. });
  759. total.sort((a: any, b: any) => b.time - a.time);
  760. if (total.length > 0) {
  761. let col = total.map((item: any, idx: number) => (
  762. <tr
  763. key={item.id}
  764. style={
  765. idx % 2 == 0
  766. ? {
  767. background:
  768. 'linear-gradient(to right, rgba(153, 231, 255, 0.1), rgba(96, 168, 255, 0.1))',
  769. }
  770. : {
  771. background:
  772. 'linear-gradient(to right, rgba(153, 231, 255, 0.2), rgba(96, 168, 255, 0.2))',
  773. }
  774. }
  775. >
  776. <td
  777. style={
  778. subModule == 0
  779. ? { width: '25%', paddingRight: '0.1rem' }
  780. : { width: '33%', paddingRight: '0.1rem' }
  781. }
  782. className={style.alarmTitle}
  783. >
  784. {getTitle(item.title)}
  785. </td>
  786. <td
  787. style={
  788. subModule == 0
  789. ? { width: '15%', paddingRight: '0.1rem' }
  790. : { width: '33%', paddingRight: '0.1rem' }
  791. }
  792. className={style.alarmTitle}
  793. >
  794. {getTitle(item.status)}
  795. </td>
  796. <td
  797. style={
  798. subModule == 0
  799. ? {
  800. width: '20%',
  801. paddingRight: '0.1rem',
  802. whiteSpace: 'nowrap',
  803. }
  804. : {
  805. width: '33%',
  806. paddingRight: '0.1rem',
  807. whiteSpace: 'nowrap',
  808. }
  809. }
  810. >
  811. {moment(item.time).format('YYYY-MM-DD')}
  812. </td>
  813. {subModule == 0 && (
  814. <td
  815. style={{ width: '40%', paddingRight: '0.1rem' }}
  816. className={style.alarmTitle}
  817. >
  818. {getTitle(
  819. projectList.find(
  820. (project: any) => project.ID == item.project_id,
  821. )?.Name || '无',
  822. )}
  823. </td>
  824. )}
  825. </tr>
  826. ));
  827. content = (
  828. <div
  829. style={{
  830. paddingTop: '0.12rem',
  831. paddingLeft: '0.14rem',
  832. flex: '1',
  833. height: 0,
  834. }}
  835. >
  836. <table
  837. className={style.alarmTable}
  838. style={{
  839. width: 'calc(100% - 12px)',
  840. background:
  841. 'linear-gradient(270deg, rgba(153, 231, 255, 0.8) 0%, #60A8FF 100%)',
  842. }}
  843. >
  844. <thead>
  845. <tr>
  846. <th
  847. style={
  848. subModule == 0
  849. ? { width: '25%', paddingRight: '0.1rem' }
  850. : { width: '33%', paddingRight: '0.1rem' }
  851. }
  852. >
  853. 预警内容
  854. </th>
  855. <th
  856. style={
  857. subModule == 0
  858. ? { width: '15%', paddingRight: '0.1rem' }
  859. : { width: '33%', paddingRight: '0.1rem' }
  860. }
  861. >
  862. 状态
  863. </th>
  864. <th
  865. style={
  866. subModule == 0
  867. ? { width: '20%', paddingRight: '0.1rem' }
  868. : { width: '33%', paddingRight: '0.1rem' }
  869. }
  870. >
  871. 日期
  872. </th>
  873. {subModule == 0 && (
  874. <th style={{ width: '40%', paddingRight: '0.1rem' }}>
  875. 项目名称
  876. </th>
  877. )}
  878. </tr>
  879. </thead>
  880. </table>
  881. <div
  882. style={{
  883. overflowY: 'scroll',
  884. height: 'calc(100% - 0.24rem)',
  885. }}
  886. >
  887. <table className={style.alarmTable}>
  888. <tbody>{col}</tbody>
  889. </table>
  890. </div>
  891. </div>
  892. );
  893. } else {
  894. content = <Empty />;
  895. }
  896. break;
  897. }
  898. return content;
  899. };
  900. useEffect(() => {
  901. let current = child.find((item) => item.key == active);
  902. if (current) {
  903. setTitle(current.title);
  904. }
  905. }, [active]);
  906. // useEffect(() => {
  907. // if (child.active) {
  908. // setActive(child.active);
  909. // } else {
  910. // let firstKey = child.find(item => item.show).key;
  911. // setActive(firstKey);
  912. // }
  913. // }, [child]);
  914. const STATUS = {
  915. 0: '待处理',
  916. 1: '现场经理协同处理中',
  917. 2: '项目经理审核中',
  918. 3: '项目经理协同处理中',
  919. 4: '总监审核中',
  920. 5: '总监协同处理中',
  921. 6: 'coo协调处理中',
  922. 7: '已完成',
  923. };
  924. return (
  925. <div className={style.modelBox}>
  926. {/* <ModelTitle type={2} active={showTabs} setActive={setShowTabs}>
  927. {title == '全部' ? '报警中心' : title}
  928. </ModelTitle> */}
  929. <ChartBoxTitle
  930. title={title == '全部' ? '报警中心' : title}
  931. showTabs={showTabs}
  932. setShowTabs={setShowTabs}
  933. width={layout.w}
  934. />
  935. {showTabs && (
  936. <ul className={style.tabsList}>
  937. {(child || [])
  938. .filter((item) => item.show)
  939. .map((item) => (
  940. <li
  941. key={item.key}
  942. className={`${active == item.key ? style.active : ''}`}
  943. onClick={() => {
  944. setActive(item.key);
  945. setSelfActive(item.key);
  946. }}
  947. >
  948. {item.title}
  949. </li>
  950. ))}
  951. </ul>
  952. )}
  953. {active == 2 && (
  954. <Select
  955. className={style.activeSelect}
  956. onChange={onChange}
  957. dropdownClassName="dataMeter"
  958. // style={{ width: 200, marginLeft: '0.16rem', marginTop: 10 }}
  959. defaultValue="4,5,6"
  960. options={[
  961. { value: '4,5,6', label: '全部' },
  962. { value: '4', label: '非关键节点预警' },
  963. { value: '5', label: '关键节点预警' },
  964. { value: '6', label: '问题工单逾期预警' },
  965. ]}
  966. ></Select>
  967. )}
  968. {active == 1 && (
  969. <Select
  970. className={style.activeSelect}
  971. onChange={onChangeFault}
  972. dropdownClassName="dataMeter"
  973. // style={{ width: 200, marginLeft: '0.16rem', marginTop: 10 }}
  974. defaultValue={faultActive}
  975. >
  976. <Option value={1}>工艺诊断异常</Option>
  977. <Option value={2}>设备故障</Option>
  978. <Option value={3}>巡检故障</Option>
  979. </Select>
  980. )}
  981. {renderContent()}
  982. </div>
  983. );
  984. }
  985. export default AlarmCenter;