React+antd Table Date

 

 要求表头显示本周剩余的日期(包括今天)+本周后四周的日期,第一行是当前日期是今年的第几周,第二行是周几,第三行是日期

import {Card, Col, message, Row} from 'antd';
import React, {useEffect, useRef, useState} from 'react';
import ProTable from '@ant-design/pro-table';
import {connect} from 'umi';
// import * as columns from '@/data/tableColumns'
import {queryAdvancedProfile} from './service';
import {formDateString, formTrimParams} from '@/utils/utils';

const TableList = ({dispatch}) => {
  const actionRef = useRef();
  const formRef = useRef();
  useEffect(() => {
    let basicColumns = [
      {
        title: '序号',
        dataIndex: 'index',
        valueType: 'indexBorder',
        width: 72,
      }
    ]
    /*let currentDay=new Date()
    console.log(getYearWeek(currentDay))
    console.log(currentDay.getDate()+1)
    console.log(currentDay.getDay())
    console.log(getMonthLength(currentDay))
    console.log(todayBefore(3))
    console.log(todayAfter(30))*/
    //本周、下一周日期
    let currentDate=new Date();
    let thisWeek=setDate(addDate(currentDate,0,currentDate));//本周
    let currentFirstDate=new Date(thisWeek[0]);
    let nextWeek=setDate(addDate(currentFirstDate,7,currentFirstDate));//下周
    let currentSecondDate=new Date(nextWeek[0]);
    let nextNextWeek=setDate(addDate(currentSecondDate,7,currentSecondDate));//下下周
    let currentThirdDate=new Date(nextNextWeek[0]);
    let nextNextNextWeek=setDate(addDate(currentThirdDate,7,currentThirdDate));//下下下周
    let currentForthDate=new Date(nextNextNextWeek[0]);
    let nextNextNextNextWeek=setDate(addDate(currentForthDate,7,currentForthDate));//下下下下周
    // console.log(thisWeek);
    // console.log(nextWeek);
    // console.log(nextNextWeek);
    // console.log(nextNextNextWeek);
    // console.log(nextNextNextNextWeek);
    let dayArr=['7','1','2','3','4','5','6']
    // console.log(currentDate.getDate())
    console.log(thisWeek)
    console.log(new Date().getDay())
    let newThisWeek
    if(new Date().getDay()===0){
      newThisWeek=thisWeek.slice(6)
    }else{
      newThisWeek=thisWeek.slice(new Date().getDay()-1)
    }
    let thisWeekArr=getWeekObj(newThisWeek)
    let nextWeekArr=getWeekObj(nextWeek)
    let nextNextWeekArr=getWeekObj(nextNextWeek)
    let nextNextNextWeekArr=getWeekObj(nextNextNextWeek)
    let nextNextNextNextWeekArr=getWeekObj(nextNextNextNextWeek)
  /*  newThisWeek.map(day=>{
      console.log(day)
      let dayObj={}
      dayObj.title='第'+thisWeekNum+'周'
      dayObj.search=false
      dayObj.children={}
      dayObj.children.title=dayArr[new Date(day).getDay()]
      dayObj.children.children={}
      let strArr=day.split('.')
      dayObj.children.children.title=strArr[1]+'月'+strArr[2]+'日'
      thisWeekArr.push(dayObj)
    })*/
    console.log(thisWeekArr)
    console.log(nextWeekArr)
    console.log(nextNextWeekArr)
    console.log(nextNextNextWeekArr)
    console.log(nextNextNextNextWeekArr)
    basicColumns.push(...thisWeekArr,...nextWeekArr,...nextNextWeekArr,...nextNextNextWeekArr,...nextNextNextNextWeekArr)
    setColumns(basicColumns)
  }, [])
  const getWeekObj=(week)=>{
    let thisWeekNum=getYearWeek(week[0])
    let thisWeekArr=[]
    let dayArr=['7','1','2','3','4','5','6']
    week.map(day=>{
      // console.log(day)
      let dayObj={}
      let strArr=day.split('.')
      dayObj.title='第'+thisWeekNum+'周'
      dayObj.search=false
      dayObj.dataIndex=strArr[1]+'月'+strArr[2]+'日'
      dayObj.children=[]
      let childrenObj={}
      childrenObj.title=dayArr[new Date(day).getDay()]
      childrenObj.children=[]
      let grandchild={}
      grandchild.title=strArr[1]+'月'+strArr[2]+'日'
      childrenObj.children.push(grandchild)
      dayObj.children.push(childrenObj)
      thisWeekArr.push(dayObj)
    })
    return thisWeekArr
  }
  let formatDate = function(date){
    let year = date.getFullYear();//年
    let month = (date.getMonth()+1);//月
    let day = date.getDate();//日;
    return year+'.'+month+'.'+day
  };
  let addDate= function(date,n,currentFirstDate){
    date.setDate(date.getDate()+n);
    return date;
  };
  let setDate = function(date){
    // console.log(currentFirstDate)
    let week = date.getDay()-1;
    date = addDate(date,week*-1);
    // currentFirstDate = new Date(date);
    let weekList=[];
    for(let i = 0;i<7;i++){
      weekList[i]=formatDate(i===0 ? date : addDate(date,1));
    }
    return weekList
  };

  function getMonthLength(date) {  // 获取每月有多少天
    let d = new Date(date)
    // 将日期设置为下月一号
    d.setMonth(d.getMonth()+1)
    d.setDate('1')
    // 获取本月最后一天
    d.setDate(d.getDate()-1)
    return d.getDate()
  }
  const getYearWeek = function (dt) { //获得当前是第几周
    let d1 = new Date(dt);
    let d2 = new Date(dt);
    d2.setMonth(0);
    d2.setDate(1);
    let rq = d1-d2;
    let days = Math.ceil(rq/(24*60*60*1000));
    return Math.ceil(days / 7);
  };

  function todayBefore(day) {//今天前的第day天
    let today = new Date();
    let beforMilliseconds = today.getTime() - 1000 * 3600 * 24 * day;
    let beforday = new Date();
    beforday.setTime(beforMilliseconds);
    let strYear = beforday.getFullYear();
    let strDay = beforday.getDate();
    let strMonth = beforday.getMonth() + 1;
    if (strMonth < 10) {
      strMonth = "0" + strMonth;
    }
    return strMonth + "月" + strDay + '日';
  }

  function todayAfter(day) {//今天后的第day天
    let today = new Date();
    let afterMilliseconds = today.getTime() + 1000 * 3600 * 24 * day;
    let afterDay = new Date();
    afterDay.setTime(afterMilliseconds);
    let strYear = afterDay.getFullYear();
    let strDay = afterDay.getDate();
    let strMonth = afterDay.getMonth() + 1;
    if (strMonth < 10) {
      strMonth = "0" + strMonth;
    }
    return strMonth + "月" + strDay + '日';
  }

  const [columns, setColumns] = useState([]);
  const [xWidth, setXWidth] = useState(2000)
  //处理数据请求
  const handleRequest = async (params) => {
    // console.log("curent---------------->")
    const otherParams = formTrimParams(formRef.current.getFieldsValue())
    const res = await queryAdvancedProfile({
      page: params.current,
      row: params.pageSize,
      ...otherParams
    });
    // console.log(res);
    if (res.code === 200) {

      return {
        // data: newList,
        data: res.data.list,
        total: res.data.total,
        success: true,
        pageSize: res.data.row,
        current: res.data.page,
      };
    } else {
      message.error('获取数据失败');
      return {
        data: [],
        total: 0,
        success: true,
      };
    }
  }
  useEffect(() => {
     console.log("useEffect------>")
    setXWidth(columns.reduce((total, item) => {
      item.width = item.width ? item.width : 120;
      total += item.width;
      return total;
    }, 0))
  }, [columns])

  return (
    <Row gutter={24}>
      <Col xl={24} lg={24} sm={24} xs={24}>
        <Card>
          <ProTable
            bordered
            columns={columns}
            pagination={
   
   {
              showQuickJumper: true,
              pageSize: 20,
            }}
            actionRef={actionRef}
            scroll={
   
   {
              x: xWidth,
              y: 300
            }}
            formRef={formRef}
            request={handleRequest}
            rowKey="id"
            dateFormatter="string"
            search={
   
   {
              layout: "inline",
              defaultCollapsed: false,
            }}
          />
        </Card>
      </Col>
    </Row>
  );
};

export default connect(({}) => ({}))(TableList);

猜你喜欢

转载自blog.csdn.net/ifmushroom/article/details/120199955