index.tsx 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289
  1. /*
  2. * @Author: your name
  3. * @Date: 2021-09-26 16:56:46
  4. * @LastEditTime: 2021-10-09 15:55:56
  5. * @LastEditors: Please set LastEditors
  6. * @Description: In User Settings Edit
  7. * @FilePath: /MedicalWisdomCheckSys/src/pages/KeepImprove/ qualityRating/index.tsx
  8. */
  9. import React, { useState, useEffect } from 'react'
  10. import MccsPageContainer from '@/components/MccsPageContainer/index';
  11. import { Column, DualAxes } from '@ant-design/charts';
  12. import { getTableData, getColumnData } from './serve';
  13. import './index.less';
  14. type QualityRatingType = {
  15. }
  16. type TableDataItemType = {
  17. typeLevel: string,
  18. requirements: string,
  19. site: string,
  20. target: string,
  21. self: string,
  22. system: string
  23. }
  24. const setColor = (type:string) => {
  25. switch (type) {
  26. case 'A':
  27. return '#69D1CC';
  28. break
  29. case 'B':
  30. return '#80ABFF';
  31. break
  32. case 'C':
  33. return '#FFC080';
  34. break
  35. case 'D':
  36. return '#3377FF';
  37. break
  38. case 'E':
  39. return '#690';
  40. break
  41. }
  42. }
  43. const QualityRating: React.FC<QualityRatingType> = (props) => {
  44. const [tableData, setTableData] = useState<TableDataItemType[]>([]);
  45. const [mapData, setMapData] = useState<any>([]);
  46. const [lineData, setLineData] = useState<any>([]);
  47. const getTableDataFunc = async () => {
  48. const resp = await getTableData();
  49. if (resp) {
  50. setTableData(resp);
  51. const lineArr = resp.map((t: any) => {
  52. //设置辅助线
  53. return {
  54. type: 'line',
  55. start: ['min', Number(t.requirements.replace(/[^0-9]/ig, ""))],
  56. end: ['max', Number(t.requirements.replace(/[^0-9]/ig, ""))],
  57. text: {
  58. content: `要求值${Number(t.requirements.replace(/[^0-9]/ig, ""))}%`,
  59. position: 'right',
  60. offsetY: 7,
  61. offsetX:70,
  62. style: { textAlign: 'right', fill:setColor(t.typeLevel)},
  63. },
  64. style: {
  65. lineDash: [5, 5],
  66. stroke:setColor(t.typeLevel),
  67. },
  68. }
  69. });
  70. setLineData(lineArr);
  71. }
  72. }
  73. const getMapData = async () => {
  74. const resp = await getColumnData();
  75. if (resp) {
  76. const mapData = resp;
  77. let dataArr: any[] = [];//柱形图数据
  78. mapData[0].qualityTypeList.forEach((a: any, index: number) => {
  79. const tempArr = mapData.map((a: any) => {
  80. return {
  81. name: a.qualityTypeList[index].levelType,
  82. xname: a.labelName,
  83. value: Number(a.qualityTypeList[index].levelValue.replace("%", ""))
  84. }
  85. });
  86. dataArr = dataArr.concat([...tempArr]);
  87. });
  88. setMapData([...dataArr]);
  89. }
  90. }
  91. useEffect(() => {
  92. getTableDataFunc();
  93. getMapData();
  94. }, []);
  95. return (
  96. <MccsPageContainer>
  97. <div className='QualityRatingContent'>
  98. <div className='blockTitle'>质量评级统计表单</div>
  99. <div className='tableWrap'>
  100. <div className='columnsWrap'>
  101. <div className='list'>类型</div>
  102. <div className='list'>要求</div>
  103. {/* <div className='list'>现场查核</div> */}
  104. <div className='list'>目标</div>
  105. <div className='list'>自评</div>
  106. <div className='list'>系统评分</div>
  107. </div>
  108. <div className='row'>
  109. {
  110. tableData.map((item, index) => {
  111. return (
  112. <div className='rowList' key={index}>
  113. <div className='list'>{item.typeLevel}</div>
  114. <div className='list'>{item.requirements}</div>
  115. {/* <div className='list'>{item.site}</div> */}
  116. <div className='list'>{item.target}</div>
  117. <div className='list'>{item.self}</div>
  118. <div className='list'>{item.system}</div>
  119. </div>
  120. )
  121. })
  122. }
  123. </div>
  124. </div>
  125. <div className='blockTitle'>质量评级分析图</div>
  126. {
  127. lineData && (
  128. <Column
  129. data={mapData}
  130. isGroup={true}
  131. xField='xname'
  132. yField='value'
  133. seriesField='name'
  134. annotations={
  135. lineData
  136. // {
  137. // type: 'line',
  138. // start: ['min', 25],
  139. // end: ['max', 25],
  140. // text: {
  141. // content: '要求值25%',
  142. // position: 'right',
  143. // offsetY: 18,
  144. // style: { textAlign: 'right',fill: '#69D1CC',},
  145. // },
  146. // style: {
  147. // lineDash: [5, 5],
  148. // stroke: '#69D1CC',
  149. // },
  150. // },
  151. // {
  152. // type: 'line',
  153. // start: ['min', 50],
  154. // end: ['max', 50],
  155. // text: {
  156. // content: '要求值50%',
  157. // position: 'right',
  158. // offsetY: 18,
  159. // style: { textAlign: 'right',fill: '#80ABFF',},
  160. // },
  161. // style: {
  162. // lineDash: [5, 5],
  163. // stroke: '#80ABFF',
  164. // },
  165. // },
  166. // {
  167. // type: 'line',
  168. // start: ['min', 90],
  169. // end: ['max', 90],
  170. // text: {
  171. // content: '要求值90%',
  172. // position: 'right',
  173. // offsetY: 18,
  174. // style: { textAlign: 'right',fill: '#FFC080',},
  175. // },
  176. // style: {
  177. // lineDash: [5, 5],
  178. // stroke: '#FFC080',
  179. // },
  180. // },
  181. // {
  182. // type: 'line',
  183. // start: ['min', 25],
  184. // end: ['max', 25],
  185. // text: {
  186. // content: '要求值',
  187. // position: 'right',
  188. // offsetY: 18,
  189. // style: { textAlign: 'right',fill: '#3377FF',},
  190. // },
  191. // style: {
  192. // lineDash: [5, 5],
  193. // stroke: '#3377FF',
  194. // },
  195. // },
  196. // {
  197. // type: 'line',
  198. // start: ['min', 25],
  199. // end: ['max', 25],
  200. // text: {
  201. // content: '要求值',
  202. // position: 'right',
  203. // offsetY: 18,
  204. // style: { textAlign: 'right',fill: '#690',},
  205. // },
  206. // style: {
  207. // lineDash: [5, 5],
  208. // stroke: '#690',
  209. // },
  210. // },
  211. // ]
  212. }
  213. label={{
  214. position: 'middle',
  215. content: function content(item) {
  216. return '';
  217. },
  218. layout: [
  219. { type: 'interval-adjust-position' },
  220. { type: 'interval-hide-overlap' },
  221. { type: 'adjust-color' },
  222. ],
  223. }}
  224. tooltip={{
  225. formatter: (datum: any) => {
  226. return { name: datum.name, value: datum.value + '%' };
  227. },
  228. }}
  229. color={
  230. (_ref) => {
  231. var type = _ref.name;
  232. if (type === 'A') {
  233. return '#69D1CC';
  234. }
  235. if (type === 'B') {
  236. return '#80ABFF';
  237. }
  238. if (type === 'C') {
  239. return '#FFC080';
  240. }
  241. if (type === 'D') {
  242. return '#3377FF';
  243. }
  244. if (type === 'E') {
  245. return '#690';
  246. }
  247. return '#3070F2';
  248. }
  249. }
  250. maxColumnWidth={40}
  251. />
  252. )
  253. }
  254. </div>
  255. </MccsPageContainer>
  256. )
  257. }
  258. export default QualityRating