zoukankan      html  css  js  c++  java
  • 【react】 手lu日历小组件

    初级版本

    本月之前不可点击 ;

    默认选中 今日 ;

    日历排版从每月1号开始找对应星期的下标进行对照,前或后为空,不做上下月份的铺满

    升级版本

    可无限上月;

    默认当日 ;

    日历铺满;翻月默认显示排列得第一个;全选所有未被操作过的日历(历史日历不可被操作,只可查看详情,所以即使“”从未操作“”也不被选中);

    点击已操作日历显示操作详情,选择未操作的日历则进入批量操作的交互

     

     

    贴部分代码 记录一下

     dateInit = (setYear, setMonth, next) => {
                console.log("schedulings", this.state.schedulings)
                const { schedulings } = this.state
                //全部时间的月份都是按0~11基准,显示月份才+1
                let dateArr = []; //需要遍历的日历数组数据
                let arrLen = 0; //dateArr的数组长度
                let now = setYear && setYear != "1" ? new Date(setYear, setMonth) : new Date();
                let year = setYear && setYear != "1" ? setYear : now.getFullYear();
                let nextYear = 0;
                let month = setMonth || now.getMonth(); //没有+1方便后面计算当月总天数
                let nextMonth = (month + 1) > 11 ? 1 : (month + 1);
                let startWeek = new Date(year + '/' + (month + 1) + '/' + 1).getDay(); //目标月1号对应的星期 星期数组对应下标 0 日 1 一 2 二
                // let startWeek = 0
                let dayNums = new Date(year, nextMonth, 0).getDate(); //获取目标月有多少天
                // console.log("new Date(year + '/' + (month + 1) + '/' + 1).getDay()",new Date(year + '/' + (month + 1) + '/' + 1).getDay(),"dayNums",dayNums)
                let obj = {};
                let num = 0;
                //月份大于12 年份增加 1
                if (month + 1 > 11) {
                    nextYear = year + 1;
                    dayNums = new Date(nextYear, nextMonth, 0).getDate();
                }
    
                arrLen = schedulings.length;
                console.log("aeeLen", arrLen, "startWeek", startWeek, "dayNums", dayNums)
                //设置日历显示
                // for (let i = 0; i < arrLen; i++) {
                //         num = i - startWeek + 1;
                //         obj = {
                //             dateLine: '' + year + "" + (month + 1 > 9 ? month + 1 : "0" + (month + 1)) + "" + (num > 9 ? num : "0" + num),//日期格式 20200803
                //             isToday: '' + year + "-" + (month + 1) + "-" + num,
                //             dateNum: num,
                //             nowYearMonthDate: new Date(year + "/" + (month + 1) + "/" + num).getTime(),//时间戳
                //             nowYearMDate: new Date(year + "/" + (month + 1)).getTime(),//时间戳
                //             lookDateBActive: false
                //         }
                //         console.log("---",'' + year + "" + (month + 1 > 9 ? month + 1 : "0" + (month + 1)) + "" + (num > 9 ? num : "0" + num))
                //         if (this.state.schedulings.length > 0) {
                //             let sObj = this.state.schedulings[num - 1];
                //             obj.dateSub = sObj && sObj.text ? sObj.text : "";
                //             obj.textCode = sObj && sObj.textCode ? sObj.textCode : "";
                //         }
                //     else {
                //         obj = {};
                //     }
                //     dateArr[i] = obj;
                // }
                schedulings && schedulings.forEach((item, i) => {
                    item.isToday ='' + Number(item.year) + "-" + (item.month) + "-" + item.dateNum
                    item.nowYearMonthDate = new Date(Number(item.year) + "/" + (item.month) + "/" + item.dateNum).getTime()//时间戳
                    item.nowYearMDate = new Date(Number(item.year) + "/" + (item.month)).getTime()//时间戳
                    item.lookDateBActive=false
                    dateArr[i]=item
                })
               
                this.setState({
                    // allDate,
                    dateArr:this.state.schedulings
                    // result,
                }, () => {
                    // console.log("dateArr------------", dateArr)
                    if (setYear == "1") {
                        this.handleDefaultActive()
                        this.initBatch()
                        this.updateDate("1")
                    }
                    let newArr = []
                    let arr = []
                    //点击下一个月
                    if (next) {
                        console.log("下个月", this.state.nowYearMonthDate, "dateArr", dateArr)
                        try {
                            dateArr && dateArr.map((item, i) => {
                                item.lookDateBActive = false
                                if (item.isToday) {
                                    //点击的下一个月
                                    if (item.dateLine >= this.state.nowDateLine) {
                                        arr.push(item)
                                        //未排 进入批量
                                        if (arr[0].textCode == "U") {
                                            // this.handleDefalutChick(arr[0].dateLine, "1")
                                            throw 'out';
                                        } else {
                                            //已排或历史
                                            newArr.push(item)
                                        }
                                        //历史上一个月 小于当前月份的情况
                                    }if(item.dateLine < this.state.nowDateLine){
                                        arr.push(item)
                                        newArr.push(item)
                                    }
                                }
                            })
                        } catch (e) {
    
                        }
                        this.setState({
                            activeDate: (arr[0] && arr[0].textCode && arr[0].textCode != "U") && newArr[0] ? newArr[0].isToday : "",
                            lookDateBLength: 0,
                            lookDateBArr: []
                        }, () => {
                            // console.log("arrrr",arr,"arr[0]",arr[0]
                            this.lookActive((arr[0] && arr[0].textCode && arr[0].textCode != "U") ? newArr[0] : arr[0])
                        })
                    }
                    //点击上一个月 需注意当前月日 默认当日 不是月份第一天 
                    // if (next == "prev") {
                    //     if (this.state.typeValue == "batch") {
                    //         dateArr && dateArr.map((item, i) => {
                    //             item.lookDateBActive = false
                    //         })
                    //         this.setState({
                    //             activeDate: "",
                    //             dateArr,
                    //         }, () => {
    
                    //         })
                    //     }
                    // }
                    //保存批量之后 再次默认
                    if (next == "1") {
                        // this.handleDefaultActive()
                        // if (this.state.typeValue == "batch") {
                        this.handleDefaultActive()
                        // } 
                    }
                });
    }
    

      

     //全选
            handleCheckAll = (e) => {
                const { dateArr, year, month, nowYearMDate, nowYearMonthDate } = this.state
                let lookDateBArr = []
                if (e.target.checked) {
                    this.setState({
                        checkValue: e.target.checked
                    })
                    dateArr && dateArr.map((item, i) => {
                        if (item.dateNum && item.textCode == "U" && item.nowYearMonthDate >= nowYearMonthDate) {
                            item.lookDateBActive = true
                            lookDateBArr.push(item)
                            this.setState({
                                lookDateBLength: lookDateBArr.length,
                                lookDateBArr,
                            })
    
                        }
                    })
                    this.setState({
                        dateArr
                    })
                    // this.handleBatchTime()
                } else {
                    this.setState({
                        checkValue: false
                    })
                    dateArr && dateArr.map((item, i) => {
                        if (item.dateNum && item.textCode == "U") {
                            item.lookDateBActive = false
                            this.setState({
                                lookDateBLength: 0,
                                lookDateBArr: []
                            })
                        }
                    })
                    this.setState({
                        dateArr
                    })
                }
            }
    

      

  • 相关阅读:
    hdu 2709 Sumsets
    hdu 2004 成绩转换
    hihocoder 1043 完全背包
    hihocoder 1038 01背包
    hihocoder 1066 无间道之并查集
    并查集小结
    hdu 1232 畅通工程
    并查集学习2
    并查集知识学习
    js 禁止表单提交的方法(文件上传)
  • 原文地址:https://www.cnblogs.com/522040-m/p/13948768.html
Copyright © 2011-2022 走看看