StatCard.jsx 1.1KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import React from 'react';
  2. import { View } from '@tarojs/components';
  3. import { ROLE_CITIZEN } from '@/utils/user';
  4. import { getIndexData } from '@/services/stat';
  5. import style from './stat-card.module.less';
  6. export default React.forwardRef((props, ref) => {
  7. const { duty } = props;
  8. const [list, setList] = React.useState([]);
  9. const classNames = React.useMemo(() => {
  10. return [
  11. style['stat-card-box'],
  12. !duty || duty == ROLE_CITIZEN ? style['no-bg-effect'] : false
  13. ].filter(Boolean).join(' ');
  14. }, [duty])
  15. React.useEffect(() => {
  16. if (duty) {
  17. getIndexData(duty).then(setList);
  18. }
  19. }, [duty]);
  20. React.useImperativeHandle(ref, () => ({
  21. refresh: () => {
  22. if (duty) {
  23. getIndexData(duty).then(setList);
  24. }
  25. }
  26. }), [duty]);
  27. return (
  28. <View className={classNames}>
  29. <View className={style['stat-card']}>
  30. {
  31. list.map(x => (
  32. <View key={x.name} className={style.item}>
  33. <View>{x.value}</View>
  34. <View className={style.sub}>{x.name}</View>
  35. </View>
  36. ))
  37. }
  38. </View>
  39. </View>
  40. )
  41. })