index.tsx 5.1 KB

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