index.js 8.32 KB
import React, { Component, Fragment } from 'react';
import { connect } from 'dva';
import { Toast } from 'antd-mobile';
import { Menu, Dropdown, Icon ,Row,Col} from 'antd';
import shareHide from "../../utils/shareHide";
import css from './index.css';
import Iscroll from "../../components/Iscroll";
import moment from 'moment';
import {getPlanInListWithCode} from '../../utils/dataFilter'

const monthM = ['一月','二月','三月','四月','五月','六月','七月','八月','九月','十月','十一月','十二月'];
const menuListM = [];
const nowM = new Date().getMonth()+1;
monthM.map((item,index)=>{
  if(index<nowM){
    let num = (String(index+1).length == 1) ? "0"+(index+1) : ""+(index+1);
    menuListM.push({lable:item,id:num})
  }
});
class Index extends Component{
  constructor(props) {
    super(props);
    let userInfo = JSON.parse(localStorage.getItem('userInfo'));
    let monthName = getPlanInListWithCode("id",moment().format('MM'),menuListM).lable || "";
    this.state = {
      userInfo: userInfo || {},
      menuList1:[{lable:'全国',id:""},{lable:userInfo.orgName,id:userInfo.orgId}],
      menuList2:menuListM,
      managerList:[],
      area:"全国",
      areaId:"",
      month: moment().format('MM'),
      monthName: monthName,
      scrollH:300,
      ranking:"-",//排名
      cusManAllNum:'0',//总人数
      amountGap:0,//同上一名相差额度
      selfRank:null,//自己的排行列表信息
      otherRankList:[],//所有排行的人列表
    }
  }

  componentDidMount() {
    document.title = '排行榜';
    const _this = this;
    const windowH = window.screen.height;
    const listH = document.getElementById("rankList").offsetHeight;
    shareHide();
    let isIPhone = new RegExp('\\biPhone\\b|\\biPod\\b', 'i').test(window.navigator.userAgent);
    let disH = isIPhone ? windowH-listH-138 : windowH-listH-90;
    this.setState({scrollH:disH})
    this.getAchievementRank();
  }
   //当月排行列表
  getAchievementRank(){
    let that = this;
    Toast.loading('loading...',0);
    this.props.dispatch({
      type: 'Performance/achievementRank',
      payload: {
        "month": this.state.month,
        "orgId": this.state.areaId,
        "roleId": this.state.userInfo.roleId,
        "userId": this.state.userInfo.id
      },
      callback(data){
        Toast.hide();
        if(data){
          let selfRank = null;
          //返回列表数据第一条是不是本人,不是的话就是没有本人数据,如果有则取第一条
          if(data.rankingList[0]){
            if(data.rankingList[0].userId == that.state.userInfo.id){
              selfRank = data.rankingList[0]
            }
          }
           that.setState({
              ranking:data.ranking,
              cusManAllNum:data.cusManAllNum,
              amountGap:data.amountGap,
              selfRank:selfRank,
              otherRankList:selfRank ? data.rankingList.slice(1,) : data.rankingList,
            })
        }
      },
      error(data){
        Toast.info(data.message)
      }
    })
  }
  _menuList(props,key){
    return (
         <Menu className={css.overlayClassName}>
          {props && props.map((item,index)=>{
              return (
                  <Menu.Item key={index}>
                    <p onClick={()=>{
                      if(key=='month'){
                        this.setState({month:item.id,monthName:item.lable},()=>{
                          this.getAchievementRank();
                        });
                      }else {
                        this.setState({area:item.lable,areaId:item.id},()=>{
                          this.getAchievementRank();
                        });
                      }
                    }}>{item.lable}</p>
                  </Menu.Item>
                )
          })}
        </Menu>
      )
  }
  arrowUpDown(item){
    if(item){
      if(item.ratio == '+1'){
        return <Icon type="arrow-up" style={{color:'#FB5150'}} />
      }
      if(item.ratio == '-1'){
        return <Icon type="arrow-down" style={{color: '#31DEB6'}} />
      }
      return <Icon type="line" style={{color: '#6c6c6c'}} />
    }
  }
  render() {
    const { userInfo ,menuList1,menuList2,managerList,area,monthName,scrollH,ranking,cusManAllNum,amountGap,selfRank,otherRankList} = this.state;
    return (
        <div className={css.myRank}>
          <div className={css.section1}>
            <div className={css.part1}>
              <div className={css.select}>
                <Dropdown 
                  overlay={this._menuList(menuList1,'area')}
                  placement="bottomCenter"
                  trigger={['click']}
                  >
                  <div><span style={{marginRight:'.20rem'}}>{area}</span><Icon type="caret-down" /></div>
                </Dropdown>
              </div>
            </div>
            <img src={require('../../assets/image/lineH.png')} style={{height:'.30rem',width:'1px'}}/>
            <div className={css.part2}>
              <div className={css.select}>
                <Dropdown 
                  overlay={this._menuList(menuList2,'month')}
                  placement="bottomCenter"
                  trigger={['click']}
                  >
                  <div><span style={{marginRight:'.20rem'}}>{monthName}</span><Icon type="caret-down" /></div>
                </Dropdown>
              </div>
            </div>
          </div>
          <div className={css.section2}>
            <div>{area+"共有"}<span>{userInfo.roleId===3 ? '督训':'客户经理'}</span><span style={{color:'#FF9D5C',padding:"0 .05rem"}}>{cusManAllNum}</span></div>
            <div>排名第<span style={{color:'#FF9D5C',fontSize:'.28rem',padding:"0 .05rem"}}>{ranking ? ranking : '-'}</span></div>
            <div>同上一名业绩相差<span style={{color:'#FF9D5C',padding:"0 .05rem"}}>{amountGap ? parseInt(amountGap) : '-'}</span>元</div>
          </div>
          <div className={css.section3}>
            <Row className={css.rankHeader}>
              <Col span={3}>排名</Col>
              <Col span={8} style={{textAlign:'center',}}>姓名</Col>
              <Col span={9} style={{textAlign:'center',}}>标准保费 ()</Col>
              <Col span={3}>环比</Col>
            </Row>
            <Row className={css.rankMe}>
              <Col span={3}>{selfRank ? selfRank.ranking : "-"}</Col>
              <Col span={8} className={css.listName}>
                {/*<img src={selfRank && selfRank.headUrl ? selfRank.headUrl : require('../../assets/image/defaultHead.png')} />*/}
                {selfRank && selfRank.name ? (selfRank.name.length>4 ? selfRank.name.substr(0,4)+".." : selfRank.name) : userInfo.name}
              </Col>
              <Col span={9} className={css.premNumber}>{selfRank ? parseInt(selfRank.amount) : "-"}</Col>
              <Col span={3}>{selfRank ? this.arrowUpDown(selfRank) : <Icon type="line" style={{color: '#6c6c6c'}} />}
              </Col>
            </Row>
            <div className={css.rankList} id="rankList">
              <div style={{minHeight:'100px',height:scrollH,position:'relative'}}>
                <Iscroll  id="planResult" 
                    iscrollOptions={{
                      probeType:2
                    }}>
                      {
                        otherRankList.length>0 && otherRankList.map((item,index)=>{
                          return(
                            <Row className={css.rankListItem} key={index}>
                              <Col span={3}>{item.ranking}</Col>
                              <Col span={8} className={css.listName}>
                                {/*<img src={item.headUrl ? item.headUrl : require('../../assets/image/defaultHead.png')} />*/}
                                {item.name ? (item.name.length>4 ? item.name.substr(0,4)+".." : item.name) : ""}</Col>
                              <Col span={9} className={css.premNumber} >{item.amount ? parseInt(item.amount) : "0"}</Col>
                              <Col span={3}>{this.arrowUpDown(item)}
                              </Col>
                            </Row>
                            )
                        })
                      }
                    </Iscroll>
              </div>
              <div className={css.tipNum}>{'共'+cusManAllNum+'名'}<span>{userInfo.roleId===3 ? '督训':'客户经理'}</span>参加了排名</div>
            </div>
          </div>
        </div>
      )
  }
}

export default connect()(Index);