Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | 66x 66x | import React, { ReactElement, useEffect, useState } from 'react'; import { ColumnType, RecordProps } from '@props/RecordProps'; import { fetchCurrentValue } from '@utils/FetchUtils'; import { isNumber } from 'lodash'; import { Rate, Spin } from 'antd'; export interface RatingsProps { value: RecordProps; type: ColumnType; } const translates: {[propName: string]: string} = { "modifyRatio": "修改率", "usageRatio": "使用率", "overallScore": "综合评分", }; // 备注: 后台要将 API 返回的数值转换为 0 - 5 的一个数值,用以显示为 rating const Ratings = (props: RatingsProps): ReactElement => { const { value, type} = props; const { id } = value; const [currentValue, setCurrentValue] = useState<RecordProps>(); const [loading, setLoading] = useState<boolean>(true); useEffect(() => { fetchCurrentValue(type, id).then(value => { setCurrentValue(value); }).catch((e) => { console.error('fetch current value error', e); }).finally(() => { setLoading(false); }); }, [type, id]); const ratings: Array<ReactElement> = []; for (const key in currentValue) { if(key === "id") { continue; } const value = currentValue[key]; const trans = translates[key]; // 暂时只支持 translates 列表中的字段显示 if(value != null && isNumber(value) && trans != null) { // 接口返回的数值为 0 - 5 的一个数值,乘 20 以得到 0 - 100 的数值(百分比) const percent = value * 20; ratings.push( <span key={key}> <span className="ant-rate-text">{trans}: {percent}%</span> <Rate value={value} disabled={true} allowHalf={true} /> </span> ); } } return loading? <Spin /> : (<>{ratings}</>); }; export default Ratings; |