给定坐标(星期几、第几节)前端显示问题

该博客介绍了如何使用React.js来展示教师课表,根据后端返回的按节次排序的课程信息,动态渲染并填充表格。通过条件渲染和样式设置,实现了不同科目以不同颜色区分,同时展示了如何处理空值,使得课表清晰易读。
摘要由CSDN通过智能技术生成

任课教师或大学生课表并不是相同的,也不是满课的。后端返回给前端一个课程信息的列表,要求前端正确显示。

后端没有必要补齐空,凑一个完整的课表给前端,直接返回教师所有课程给前端。只要约定按节次排序或按星期排序就行了。

这里按节次排序。
在这里插入图片描述

import React from 'react';
import 'antd-mobile/dist/antd-mobile.css';
import style from './home.css';

class CourseTable extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      courseInfos: [{}],
      tables: [
        [0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0],
        [0, 0, 0, 0, 0],
      ],
    };
  }

  componentDidMount() {
    console.log(this.state.tables);
    //有点蠢了,好像都不需要动用dom 去修改节点标签的值,直接根据请求接口返回的数据修改tables就行了
    // let course = document.getElementById('course');
    // console.log(course);
    // course.childNodes.forEach((item,index)=>{
    //   console.log(index,item);
    //   item.childNodes.forEach((item,index)=>{
    //     console.log(index,item);
    //     item.value = '语文';
    //   })
    // })

    //请求返回的数据必须要保证按节次排序
    //如此不就需要前端拼凑完整的数据给前端了嘛
    //假如这个是教师课表,一般来说一个老师只教一科,
    //这里换不同的科目,科目不同颜色不同,这不是很容易??
    const data = [
      { week: 1, segment: 1, course: '语文' },
      { week: 2, segment: 1, course: '物理' },
      { week: 2, segment: 2, course: '化学' },
      { week: 5, segment: 2, course: '数学' },
      { week: 4, segment: 4, course: '英语' },
      { week: 3, segment: 5, course: '政治' },
    ];

    let tables = this.state.tables;
    for (let i = 0; i < tables.length; i++) {
      for (let j = 0; j < 5; j++) {
        for (let k = 0; k < data.length; k++) {
          if (data[k].segment - 1 === i && data[k].week - 1 === j) {
            tables[i][j] = data[k].course;
          }
          if (tables[i][j] === 0) {
            tables[i][j] = '';
          }
        }
      }
    }
    //我好想并没有去setState,它的值就被改变了
    console.log(tables);
  }

  componentDidUpdate(prevState) {}

  render() {
    return (
      <div>
        <div className={style['table-week']}>
          <label>周一</label>
          <label>周二</label>
          <label>周三</label>
          <label>周四</label>
          <label>周五</label>
        </div>
        <div className={style['table-segment']}>
          <label>1</label>
          <label>2</label>
          <label>3</label>
          <label>4</label>
          <label>5</label>
        </div>
        <div className={style.courseTable}>
          {this.state.tables.map((item, index) => (
            <div className={style.segment} key={index}>
              {item.map((item, index) => {
                switch (item) {
                  case '语文':
                    return (
                      <label
                        style={{ backgroundColor: 'lightGreen' }}
                        key={index}
                      >
                        {item}
                      </label>
                    );
                  case '数学':
                    return (
                      <label style={{ backgroundColor: 'skyBlue' }} key={index}>
                        {item}
                      </label>
                    );
                  case '英语':
                    return (
                      <label style={{ backgroundColor: '#F66222' }} key={index}>
                        {item}
                      </label>
                    );
                  case '物理':
                    return (
                      <label style={{ backgroundColor: '#86CEA0' }} key={index}>
                        {item}
                      </label>
                    );
                  case '化学':
                    return (
                      <label style={{ backgroundColor: '#F7246C' }} key={index}>
                        {item}
                      </label>
                    );
                  case '政治':
                    return (
                      <label style={{ backgroundColor: '#24DEF7' }} key={index}>
                        {item}
                      </label>
                    );
                  case '':
                    return <label key={index}>{item}</label>;
                }
              })}
            </div>
          ))}
        </div>
        <div className={style.courseTable}>
          {this.state.tables.map((item, index) => (
            <div className={style.segment} key={index}>
              {item.map((item, index) => {
                switch (item) {
                  case '语文':
                    return (
                      <label
                        style={{ backgroundColor: 'lightGreen' }}
                        key={index}
                      >
                        {item}
                      </label>
                    );
                  case '数学':
                    return (
                      <label style={{ backgroundColor: 'skyBlue' }} key={index}>
                        {item}
                      </label>
                    );
                  case '英语':
                    return (
                      <label style={{ backgroundColor: '#F66222' }} key={index}>
                        {item}
                      </label>
                    );
                  case '物理':
                    return (
                      <label style={{ backgroundColor: '#86CEA0' }} key={index}>
                        {item}
                      </label>
                    );
                  case '化学':
                    return (
                      <label style={{ backgroundColor: '#F7246C' }} key={index}>
                        {item}
                      </label>
                    );
                  case '政治':
                    return (
                      <label style={{ backgroundColor: '#24DEF7' }} key={index}>
                        {item}
                      </label>
                    );
                  case '':
                    return <label key={index}>{item}</label>;
                }
              })}
            </div>
          ))}
        </div>
      </div>
    );
  }
}

export default CourseTable;

/**
课程表
 */

.courseTable{
  width:90%;
  border: solid 0 skyblue;
  border-left: 0 none;
  border-right: 0 none;
  padding: 0;
  margin: 2px 2px 40px 25px
}

.table-week{
  width:100%;
  padding: 0;
  margin: 2px 2px 10px 25px
}

.table-week label{
  display: inline-block;
  width: 58px;
  text-align: center;
  margin: 0 5px -14px 0;
}

.table-segment{
  width: 6%;
  height: 420px ;
  float: left;
  text-align: center;
  margin-right: 2px;
  background-color: #E5E5E5;
}

.table-segment label{
  width: 20px;
  height: 38px ;
  display: inline-block;
  padding: 9px 5px;
}

.courseTable .segment{
  width:100%;
  height: 38px;
  border-top: dashed 1px skyblue;
  border-left: 0 none;
  border-right: 0 none;
}

.courseTable .segment label{
  width: 58px;
  height: 36px;
  display: inline-block;
  padding:7px 5px;
  color: white;
  border-radius: 6px;
  text-align: center;
  margin: 0 5px -14px 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值