效果图:

planTable.js

let days = ["21-05", "21-06", "21-07", "21-08", "21-09", "21-10","21-11"]
let plans = ["计划一", "计划二", "计划三"]
// let times = ['7:00', '7:30', '8:00', '8:30', '9:00', '9:30', '10:00', '10:30', '11:00', '11:30', '12:00', '12:30', '13:00', '13:30', '14:00', '14:30', '15:00', '15:30', '16:00', '16:30', '17:00', '17:30', '18:00', '18:30', '19:00', '19:30', '20:00', '20:30', '21:00', '21:30', '22:00', '22:30', '23:00']
let meeting = [// 安排的数组,开始时间和持续时间,标题[{index:0,days:"21-05",subject: '111',start:0,time: 5, //定义需要的天数pass: 0}],[{index:1,days:"21-06",subject: "222",start:1,time: 5, pass: 1}],[{index:2,days:"21-07",subject: "333",start: 2,time:3,pass: 2}]
]
export {days,plans,meeting,
}

plan组件

<template><div class="father"><span class="commonTop">工作计划</span><!-- 工作计划 --><table :style="{ height: myhoverHeight }" class="mytable"><thead class="mythead"><tr><th></th><!-- 动态绑定伪元素,与scss样式交互 --><th:style="{ '--hoverHeight': myhoverHeight + 'px' }"v-for="i in days":key="i + '' + Math.random()">{{ i }}</th></tr></thead><tbody><trv-for="(i, index) in info":key="i + new Date().valueOf() + Math.random() + ''"><th class="plans" scope="col">{{ plans[index] }}</th><tdv-for="j in i":colspan="j == 1 ? 1 : j['time']":key="Math.random() + j + new Date().valueOf() + ''":class="j.pass == 0? 'cell1': j.pass == 1? 'cell2': j.pass == 2? 'cell3': 'cell'"><div>{{meeting[index][0].days === j.days? meeting[index][0].subject: ""}}</div><!-- v-for="(j, inindex) in i"{{ meeting[index][0].index === inindex ? meeting[index][0].subject : "" }} --></td></tr></tbody></table><!-- 工作计划 --></div>
</template>
<script>
import { days, plans, meeting } from "@/utils/planTable.js";
export default {data() {return {info: [],days: days,plans: plans,meeting: meeting,hoverHeight: 0,};},computed: {myhoverHeight() {return this.hoverHeight;},},mounted() {// 工作计划表// 根据预约信息数组,处理成表格可以使用的形式// 预约信息是该周每天的预约情况,0-6表示星期一到星期天let info = [],xLength = this.days.length,yLength = this.plans.length;for (let i = 0; i < yLength; i++) {info[i] = [];for (let j = 0; j < xLength; j++) {info[i].push(1);}}for (let i = 0; i < yLength; i++) {//x周let m = meeting[i];for (let k of m) {info[k.start][i] = k;}}this.info = info;this.hoverHeight = 90 * yLength + yLength * 20;},
};
</script>
<style lang="scss" scoped>
// 工作计划
.mytable {width: 100%;.mythead {th {width: 90px;font-size: 18px;color: rgb(121, 120, 120);text-align: center;border-right: 1px solid #eee;line-height: 55px;position: relative;&::after {content: "";width: 1px;top: 55px;left: -3px;height: var(--hoverHeight);position: absolute;background: #eee;}}th:last-child {&::before {content: "";width: 1px;right: -1px;top: 55px;height: var(--hoverHeight);position: absolute;background: #eee;}}}td {width: 90px;line-height: 90px;border: none;padding: 10px 0px;}
}
tbody * {padding: 0;.plans {font-size: 18px;color: rgb(121, 120, 120);}
}
.mytd:hover {/*background: red;*/border: 2px solid blue;
}
// 针对不同状态的的样式
.cell {opacity: 0;
}
.cell1 {div {align-items: center;vertical-align: middle;background: #fff5ef;box-sizing: border-box;border-left: 3px solid #f88d4e !important;}
}
.cell2 {div {background: #e5faf1;box-sizing: border-box;border-left: 3px solid #76fac1 !important;}
}
.cell3 {div {background: #e7f2fc;box-sizing: border-box;border-left: 3px solid #80bff8 !important;}
}
// 工作计划
</style>

使用:在父组件中直接注册调用

参考:https://my.oschina.net/ahaoboy/blog/1805614

记录其它知识点

1、table表格设置border边框重复问题

外表格样式:<table border="1" cellspacing="0" cellpadding="0" style="border-collapse: collapse;”>
内表格样式:<table border="1" cellspacing="0" cellpadding="0" style="border-collapse: collapse;border-width:0px; border-style:hidden;">

2、scss与定义的数据交互使用:上述代码中有

使用vue实现日程安排表相关推荐

  1. canvas java 上传截图_在Vue项目中使用html2canvas生成页面截图并上传

    使用方法 项目中引入 npm install html2canvas html代码 //html代码 js代码 // 引入html2canvas import html2canvas from 'ht ...

  2. vue实现文件上传功能

    代码如下所示: <!DOCTYPE html> <html lang="en"> <head><meta charset="UT ...

  3. win10 4步快速安装vue

    1 安装nvm-windows 在这里下载安装nvm,目的是在同一台电脑中管理多个 Node 版本 建议采取默认安装路径安装 2 安装nodejs 以管理员模式打开命令行,然后输入 nvm list ...

  4. 前端Vue学习之路(五)插件的使用

    vant插件使用 这里我们是用的语法是vue2.0 所以是 npm i vant -S 用法 1.按需引入的话 找到package.json文件 添加以下内容 plugins:[['import', ...

  5. 前端Vue学习之路(四)axios请求数据

    axios 1.增加新知识 2.旧方案 3.新方案(一) 4.为什么要用拦截器 (新方案二) 1.增加新知识 假如每个组件都引用axios,后期如果axios库不再维护了,那每个组件都要改动 所以封装 ...

  6. 前端Vue学习之路(二)-Vue-router路由

    Vue学习之路 (二) Vue-router(基础版) 一.增加静态路由 二.动态路由+路由嵌套+404页面 三. 编程式导航 四.命名路由 五.命名视图 六.重定向和起别名 1.重定向 2.起别名 ...

  7. 前端Vue学习之路(一)-初识Vue

    Vue学习之路 (一) 1.引言 2.更换npm国内镜像源 3.用npm下载Vue 4.Vue全家桶 5.使用命令创建项目 5.推荐插件 6.推荐网站 7.学习扩展 1.引言 先安装node.js环境 ...

  8. Vue 自定义权限指令

    前述 虽然VUE 定义了一些常用的指令,例如v-on.v-bind等,但是在我们实际开发的时候,还是会自己定义一些指令用于适应我们自己的业务. 实现 这里由于我的项目做了动态权限,页面的按钮也需要根据 ...

  9. vue响应式给数组中的对象添加新属性

    需要使用到vue的全局api $set(item,'newParam','value')方法 group: [ // 对象数组{ id: '1', name: '任务1' ,disable: fals ...

最新文章

  1. 七丶青龙nvjdc部署教程+短信验证登录对接傻妞
  2. Microsoft Office Backstage(第 1 部分 – 幕后故事)
  3. 深入理解Java虚拟机-Java内存区域透彻分析
  4. 前滴滴出行产品经理刘飞:写给产品经理的说明书(上)
  5. python测试字符串类型的函数_python-02 数据类型 字符串str
  6. asp 可否压缩_怎样用ASP压缩文件
  7. godaddy mysql 乱码_Godaddy主机乱码的解决方法 | Godaddy美国主机中文指南
  8. ios3怎么取消长按弹出菜单_iOS中长按调出菜单组件UIMenuController的使用实例
  9. C++游戏编程教程(五)——项目实战
  10. 神经网络是不是分类算法,人工神经网络分类算法
  11. 什么是深度学习的视频标注?
  12. tableau实战系列(十二)-使用盒须图查看你的数据分布
  13. VS2017 LINK : fatal error LNK1104: cannot open file ‘atls.lib‘错误解决方案
  14. 抖音昵称html,抖音书单账号昵称_抖音网名大全
  15. 合工大机器人足球仿真robocup2D球队代码实验七实验验收
  16. 使用Universal Image Loader- Image can't be decoded
  17. hdoj 4417 Super Mario 【树状数组 + 思维】
  18. 多级CIC滤波器的matlab仿真
  19. 缺陷修改实践——replace函数的运用|思考?
  20. 安卓android银联支付Unionpay

热门文章

  1. fastboot命令详解
  2. 维特根斯坦思想概述南京大学陈亚军
  3. 基于MATLAB的图像分割系统
  4. ios 使用AVFoundation从视频中提取音频
  5. RoboMaster机甲大师裁判系统赛事引擎助手-RM Referee Aid
  6. (转)svn中更新工程出现如下错误:Working copy not locked; this is probably a bug, please report...
  7. Python常用模块 hashlib,pymysql,logging和datetime模块习题检测
  8. python获取每月的最后一天
  9. 推荐一款国产ECG心电芯片
  10. java实现微信小程序客服功能开发