index.tsx 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. import { FC, useEffect, useMemo, useState } from "react";
  2. import { Table } from "antd";
  3. import style from "../../index.module.scss";
  4. import { DageLoading } from "@dage/pc-components";
  5. import { getAssIndexDetailApi } from "@/api";
  6. import { IAssIndexDetail, YES_OR_NO } from "@/types";
  7. import { CONNECT_WITH_SYMBOL_OPTIONS, SYMBOL_OPTIONS } from "../../constants";
  8. export interface ContainerProps {
  9. currentId: number | null;
  10. }
  11. export const Container: FC<ContainerProps> = ({ currentId }) => {
  12. const [loading, setLoading] = useState(false);
  13. const [detail, setDetail] = useState<IAssIndexDetail | null>(null);
  14. // 打分点
  15. const isPoint = detail?.isPoint === YES_OR_NO.YES;
  16. const point = useMemo(
  17. () => (detail && isPoint ? JSON.parse(detail.jsonPoint) : null),
  18. [detail]
  19. );
  20. // 告警阈值
  21. const isWarn = detail?.isWarn === YES_OR_NO.YES;
  22. const warnStr = useMemo(() => {
  23. if (!isWarn) return;
  24. const data = JSON.parse(detail.jsonWarn);
  25. const symbol = SYMBOL_OPTIONS.find((i) => i.value === data.symbol);
  26. let str = `${symbol?.label}${data.num}`;
  27. const connect = CONNECT_WITH_SYMBOL_OPTIONS.find(
  28. (i) => i.value === data.and
  29. );
  30. const symbol2 = SYMBOL_OPTIONS.find((i) => i.value === data.symbol2);
  31. if (connect && symbol2 && data.num2) {
  32. str += ` ${connect.label} ${symbol2.label}${data.num2}`;
  33. }
  34. return str;
  35. }, [detail]);
  36. const getDetail = async () => {
  37. if (!currentId) return;
  38. try {
  39. setLoading(true);
  40. const data = await getAssIndexDetailApi(currentId);
  41. setDetail(data);
  42. } finally {
  43. setLoading(false);
  44. }
  45. };
  46. useEffect(() => {
  47. getDetail();
  48. }, [currentId]);
  49. return (
  50. <div className={style.container}>
  51. <h4 className={style.containerTitle}>指标详情</h4>
  52. <div className={style.tableItem}>
  53. <p className={style.tableItemLabel}>指标名称</p>
  54. <div className={style.tableItemInner}>{detail?.name}</div>
  55. </div>
  56. <div className={style.tableItem}>
  57. <p className={style.tableItemLabel}>指标编号</p>
  58. <div className={style.tableItemInner}>{detail?.num}</div>
  59. </div>
  60. <div className={style.tableItem}>
  61. <p className={style.tableItemLabel}>指标说明</p>
  62. <div className={style.tableItemInner}>{detail?.remark}</div>
  63. </div>
  64. <div className={style.tableItem}>
  65. <p className={style.tableItemLabel}>是否为打分点</p>
  66. <div className={style.tableItemInner}>{!isPoint ? "否" : "是"}</div>
  67. </div>
  68. {isPoint && point && (
  69. <>
  70. <div className={style.tableItem}>
  71. <p className={style.tableItemLabel}>数据API</p>
  72. <div className={style.tableItemInner}>{point.api || "--"}</div>
  73. </div>
  74. <div className={style.tableItem}>
  75. <p className={style.tableItemLabel}>是否为加分项</p>
  76. <div className={style.tableItemInner}>
  77. {point.isAdd === 1 ? "是" : "否"}
  78. </div>
  79. </div>
  80. <div className={style.tableItem}>
  81. <p className={style.tableItemLabel}>分值</p>
  82. <div className={style.tableItemInner}>{point.score}</div>
  83. </div>
  84. </>
  85. )}
  86. <div className={style.tableItem}>
  87. <p className={style.tableItemLabel}>告警阈值</p>
  88. {!isWarn ? (
  89. "未开启"
  90. ) : (
  91. <div className={style.tableItemInner}>{warnStr}</div>
  92. )}
  93. </div>
  94. <div className={style.tableItem}>
  95. <p className={style.tableItemLabel}>需上传资料</p>
  96. <div className={style.tableItemInner}>
  97. <Table
  98. className="cus-table"
  99. rowKey="id"
  100. dataSource={detail?.materials}
  101. columns={[
  102. {
  103. title: "资料名称",
  104. dataIndex: "name",
  105. key: "name",
  106. align: "center",
  107. },
  108. {
  109. title: "必须上传",
  110. align: "center",
  111. render: (e) => (e.isUpload === YES_OR_NO.YES ? "是" : "否"),
  112. },
  113. {
  114. title: "模板",
  115. dataIndex: "fileName",
  116. key: "fileName",
  117. align: "center",
  118. },
  119. ]}
  120. />
  121. </div>
  122. </div>
  123. <div className={style.tableItem}>
  124. <p className={style.tableItemLabel}>排序值</p>
  125. <div className={style.tableItemInner}>{detail?.sort}</div>
  126. </div>
  127. <div className={style.tableItem}>
  128. <p className={style.tableItemLabel}>编辑时间</p>
  129. <div className={style.tableItemInner}>{detail?.updateTime}</div>
  130. </div>
  131. <div className={style.tableItem}>
  132. <p className={style.tableItemLabel}>编辑人</p>
  133. <div className={style.tableItemInner}>{detail?.creatorName}</div>
  134. </div>
  135. {loading && <DageLoading />}
  136. </div>
  137. );
  138. };