vue3+ts+elementui制作精美的课表

news/2024/5/19 12:04:42/文章来源:https://blog.csdn.net/shiyu1157758655/article/details/131511089

使用vue3+ts+elementui 如何制作出精美的课表呢,

最终效果图如下:

 

直接上代码:

这里直接把封装成一个课表的组件:

<script setup lang="ts">
import { ref, watch, onMounted } from "vue";
import IconText from "@/views/common/IconText.vue";
import {Timer,Location,HomeFilled,UserFilled
} from "@element-plus/icons-vue";
const props = defineProps({//下午节次数afternoonLength: {type: [Number],default: 4},// 总节次length: {type: [Number],default: 12},//课表数据events: {type: Array<any>,default: null}
});
const tableCellStyle = ({ row, column }) => {if (row[column.property].title !== undefined) {//return { color: "#FFFFFF", "text-align": "center" };if (row[column.property].type === 1) {return {"background-color": "#2B65EC","border-radius": "10px",color: "#fff"};} else if (row[column.property].type === 2) {return {"background-color": "#7F38EC","border-radius": "10px",color: "#fff"};}}
};
// let maxHeight = 400;
const timetable = ref([]);
const makeTimetable = () => {timetable.value = [];for (let i = 0; i < props.length; i++) {const one = {sjd: "",jc: i + 1,mon: {},tue: {},wed: {},thu: {},fri: {},sat: {},sun: {}};if (i < 4) {one.sjd = "上午";} else if (i > 3 && i < props.afternoonLength + 4) {one.sjd = "下午";} else {one.sjd = "晚上";}timetable.value.push(one);}
};
const weeks = ["mon", "tue", "wed", "thu", "fri", "sat", "sun"];
const mergeData = () => {// 合并数据if (props.events.length > 0) {for (let i = 0; i < props.events.length; i++) {// 获取星期几const week = weeks[props.events[i].xq - 1];timetable.value[props.events[i].start - 1][week] = props.events[i];}}
};const objectSpanMethod = ({ row, rowIndex, columnIndex }) => {if (columnIndex === 0) {if (rowIndex < 4) {if (rowIndex === 0) {return {rowspan: 4,colspan: 1};} else {return {rowspan: 0,colspan: 0};}} else if (rowIndex > 3 && rowIndex < 4 + props.afternoonLength) {if (rowIndex === 4) {return {rowspan: props.afternoonLength,colspan: 1};} else {return {rowspan: 0,colspan: 0};}} else {if (rowIndex === 4 + props.afternoonLength) {return {rowspan: props.length - 4 - props.afternoonLength,colspan: 1};} else {return {rowspan: 0,colspan: 0};}}}if (columnIndex === 2) {if (row.mon.title !== undefined) {return {rowspan: row.mon.end - row.mon.start + 1,colspan: 1};} else {return {rowspan: 1,colspan: 1};}}if (columnIndex === 3) {if (row.tue.title !== undefined) {return {rowspan: row.tue.end - row.tue.start + 1,colspan: 1};} else {return {rowspan: 1,colspan: 1};}}if (columnIndex === 4) {if (row.wed.title !== undefined) {return {rowspan: row.wed.end - row.wed.start + 1,colspan: 1};} else {return {rowspan: 1,colspan: 1};}}if (columnIndex === 5) {if (row.thu.title !== undefined) {return {rowspan: row.thu.end - row.thu.start + 1,colspan: 1};} else {return {rowspan: 1,colspan: 1};}}if (columnIndex === 6) {if (row.fri.title !== undefined) {return {rowspan: row.fri.end - row.fri.start + 1,colspan: 1};} else {return {rowspan: 1,colspan: 1};}}if (columnIndex === 7) {if (row.sat.title !== undefined) {return {rowspan: row.sat.end - row.sat.start + 1,colspan: 1};} else {return {rowspan: 1,colspan: 1};}}if (columnIndex === 8) {if (row.sun.title !== undefined) {return {rowspan: row.sun.end - row.sun.start + 1,colspan: 1};} else {return {rowspan: 1,colspan: 1};}}
};
makeTimetable();
onMounted(() => {// maxHeight = document.documentElement.clientHeight;mergeData();
});
watch(props,(_newValue, _oldValue) => {mergeData();},{ immediate: true, deep: true }
);
</script><template><div><div class="panel"><el-table:data="timetable":border="true":span-method="objectSpanMethod":header-cell-style="{background: '#d9e5fd',color: 'black',fontWeight: 1000}"style="width: 100%":cell-style="tableCellStyle"><el-table-column prop="sjd" label="时间段" width="80" align="center" /><el-table-column prop="jc" label="节次" width="80" align="center" /><el-table-column prop="mon" label="星期一" align="left"><template v-slot="scope"><div v-if="scope.row.mon.title !== undefined"><h4>{{ scope.row.mon.title.toString().split(';').join('<br />') }}</h4><h5><IconText :icon="Timer" :text="scope.row.mon.skjc" /></h5><h5><IconText :icon="Location" :text="scope.row.mon.addr" /></h5><h5><IconText :icon="HomeFilled" :text="scope.row.mon.jxbzc" /></h5><h5><IconText :icon="UserFilled" :text="scope.row.mon.num" /></h5></div><div v-else /></template></el-table-column><el-table-column prop="tue" label="星期二" align="left"><template v-slot="scope"><div v-if="scope.row.tue.title !== undefined"><h4>{{ scope.row.tue.title }}</h4><h5><IconText :icon="Timer" :text="scope.row.tue.skjc" /></h5><h5><IconText :icon="Location" :text="scope.row.tue.addr" /></h5><h5><IconText :icon="HomeFilled" :text="scope.row.tue.jxbzc" /></h5><h5><IconText :icon="UserFilled" :text="scope.row.tue.num" /></h5></div><div v-else /></template></el-table-column><el-table-column prop="wed" label="星期三" align="left"><template v-slot="scope"><div v-if="scope.row.wed.title !== undefined"><h4>{{ scope.row.wed.title }}</h4><h5><IconText :icon="Timer" :text="scope.row.wed.skjc" /></h5><h5><IconText :icon="Location" :text="scope.row.wed.addr" /></h5><h5><IconText :icon="HomeFilled" :text="scope.row.wed.jxbzc" /></h5><h5><IconText :icon="UserFilled" :text="scope.row.wed.num" /></h5></div><div v-else /></template></el-table-column><el-table-column prop="thu" label="星期四" align="left"><template v-slot="scope"><div v-if="scope.row.thu.title !== undefined"><h4><spanv-html="scope.row.thu.title.toString().split(';').join('<br />')"/></h4><h5><IconText :icon="Timer" :text="scope.row.thu.skjc" /></h5><h5><IconText :icon="Location" :text="scope.row.thu.addr" /></h5><h5><IconText :icon="HomeFilled" :text="scope.row.thu.jxbzc" /></h5><h5><IconText :icon="UserFilled" :text="scope.row.thu.num" /></h5></div><div v-else /></template></el-table-column><el-table-column prop="fri" label="星期五" align="left"><template v-slot="scope"><div v-if="scope.row.fri.title !== undefined"><h4>{{ scope.row.fri.title }}</h4><h5><IconText :icon="Timer" :text="scope.row.fri.skjc" /></h5><h5><IconText :icon="Location" :text="scope.row.fri.addr" /></h5><h5><IconText :icon="HomeFilled" :text="scope.row.fri.jxbzc" /></h5><h5><IconText :icon="UserFilled" :text="scope.row.fri.num" /></h5></div><div v-else /></template></el-table-column><el-table-column prop="sat" label="星期六" align="left"><template v-slot="scope"><div v-if="scope.row.sat.title !== undefined"><h4>{{ scope.row.sat.title }}</h4><h5><IconText :icon="Timer" :text="scope.row.sat.skjc" /></h5><h5><IconText :icon="Location" :text="scope.row.sat.addr" /></h5><h5><IconText :icon="HomeFilled" :text="scope.row.sat.jxbzc" /></h5><h5><IconText :icon="UserFilled" :text="scope.row.sat.num" /></h5></div><div v-else /></template></el-table-column><el-table-column prop="sun" label="星期日" align="left"><template v-slot="scope"><div v-if="scope.row.sun.title !== undefined"><h4>{{ scope.row.sun.title }}</h4><h5><IconText :icon="Timer" :text="scope.row.sun.skjc" /></h5><h5><IconText :icon="Location" :text="scope.row.sun.addr" /></h5><h5><IconText :icon="HomeFilled" :text="scope.row.sun.jxbzc" /></h5><h5><IconText :icon="UserFilled" :text="scope.row.sun.num" /></h5></div><div v-else /></template></el-table-column></el-table></div></div>
</template>
<style scoped lang="scss">
.cellStyle {background-color: rgb(24 144 255 / 80%);color: #fff;border-radius: 10px;
}
</style>

引用timetable组件:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_325860.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android Studio实现内容丰富的安卓志愿者平台

如需源码可以添加q-------3290510686&#xff0c;也有演示视频演示具体功能&#xff0c;源码不免费&#xff0c;尊重创作&#xff0c;尊重劳动。 项目编号122 1.开发环境 android stuido jdk1.8 eclipse mysql tomcat 2.功能介绍 安卓端&#xff1a; 1.注册登录 2.查看公告 3.…

网页的动静分离设置

我们都知道nginx处理静态网页是强项,而tomcat处理动态网页是强项.我们可以发挥他们共同的优点.nginx处理静态页面而tomcat处理动态页面 进入nginx配置文件改 总结 1.改配置文件最好复制一份 2.做一步验证一步 才知道哪里出错了 3.出错了别着急先看页面在浏览器能不能打开 不…

nRF52832蓝牙概述

基本概念 RSSI&#xff08;Received Signal Strength Indicator&#xff09;是接收信号的强度指示。 接收包RSSI是指无线模块发送信息后&#xff0c;接收端的无线模块接收到数据后&#xff0c;当前接收数据的信号强度的寄存器值&#xff0c;也就是接收模块获取到发送模块当前发…

【Verilog HDL】FPGA-testbench基础知识

&#x1f389;欢迎来到FPGA专栏~testbench基础知识 ☆* o(≧▽≦)o *☆嗨~我是小夏与酒&#x1f379; ✨博客主页&#xff1a;小夏与酒的博客 &#x1f388;该系列文章专栏&#xff1a;FPGA学习之旅 文章作者技术和水平有限&#xff0c;如果文中出现错误&#xff0c;希望大家能…

20230704测试STC32G实验箱9.6(STC32G12K128)开发板的虚拟串口(C语言深入了解)

20230704测试STC32G实验箱9.6&#xff08;STC32G12K128&#xff09;开发板的虚拟串口&#xff08;C语言深入了解&#xff09; 06第五集&#xff1a;C语言运算符和进制数入门上.mp4 07第五集&#xff1a;C语言运算符和进制数入门下.mp4 2023/7/4 19:00 下次 在【冲哥】录视频的时…

PSI算法极简概述

什么是隐私求交PSI 隐私求交是多方安全计算中的密码学技术&#xff0c;它允许数据持有方通过比较加密集合计算得到交集&#xff0c;且任何一方都不会获得其他信息。PSI还存在一种变体&#xff0c;即CS场景。客户端可以获取其与服务器的交集但是服务器无法学习到该集合。如果在…

netty学习(2):多个客户端与服务器通信

1. 基于前面一节netty学习&#xff08;1&#xff09;:1个客户端与服务器通信 只需要把服务器的handler改造一下即可&#xff0c;通过ChannelGroup 找到所有的客户端channel&#xff0c;发送消息即可。 package server;import io.netty.channel.*; import io.netty.channel.gr…

Android Studio实现内容丰富的安卓汽车租赁平台

如需源码可以添加q-------3290510686&#xff0c;也有演示视频演示具体功能&#xff0c;源码不免费&#xff0c;尊重创作&#xff0c;尊重劳动。 项目编号101 1.开发环境 android stuido jdk1.8 eclipse mysql tomcat 2.功能介绍 安卓端&#xff1a; 1.注册登录 2.查看公告 3.查…

登录校验-Filter/过滤器

过滤器 概念&#xff1a;Filter过滤器&#xff0c;是javaweb的三大组件&#xff08;servlet,Filter,Listener&#xff09;之一 作用&#xff1a;可以把对资源的请求拦截下来&#xff0c;从而实现一些特殊的功能 过滤器的常见操作&#xff1a;登录校验&#xff0c;统一编码&…

Word公式大括号左对齐

1、大括号公式如下&#xff1a; 2、依次选中每一行&#xff0c;然后在开头输入一个&&#xff0c;然后回车&#xff1a; 3、当最后一行输入完立马可以发现左对齐了&#xff1a; The higher I got, the more amazed I was by the view.

win下实现Linux的tab自动补全

声明 &#xff1a;如果不是确定的话 注册表这个东西不建议更改 如果更改的话建议先备份系统 以防意外 1.找到注册表编辑器 2. 展开HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor 3.找到Completion Char 双击 把橙色的数值改成9 4.重新打开cmd 就可以了 参考文章…

github上传超过100M的大文件

当上传的工程中有超过100M的文件时&#xff0c;直接上传github会产生如下报错&#xff1a; remote: error: File retinaface-R50/R50-0000.params is 112.54 MB; this exceeds GitHubs file size limit of 100.00 MB! [remote rejected] master -> master (pre-receive ho…

vue打包到生产环境

1.进入到项目根目录执行 npm run build此时会自动打包在dist目录下 2.安装服务 npm install -g serve3.启动 serve dist以上是生产环境打包的过程。 npm run dev 是开发环境, npm run build 是生产环境

微软发布「升级版」多模态大模型 Kosmos-2!新增局部理解能力,解锁实体级交互

夕小瑶科技说 原创 作者 | 小戏、ZenMoore 三个多月前&#xff0c;微软亚洲研究院在论文《Language Is Not All You Need: Aligning Perception with Language Models》中发布了一个强大的多模态大模型 Kosmos-1&#xff0c;成功将感知与语言对齐&#xff0c;在 ChatGPT 的多…

银河麒麟服务器v10 sp1 安装mysql

可以先用 dpkg --list|grep mysql 查看自己的mysql有哪些依赖&#xff1a; 上图已经是安装后的截图&#xff0c;然后再卸载 sudo apt-get autoremove --purge mysql-common 本文在没有安装之前&#xff0c;只有mysql-common包&#xff0c;再用dpkg --list|grep mysql查看&…

HTML5开发工程师岗位的职责说明文(合集)

HTML5开发工程师岗位的职责说明文1 职责&#xff1a; 1、根据产品设计文档和视觉文件&#xff0c;利用HTML5&#xff0c;Javascript相关技术实现web端的界面效果、交互和功能; 2、基于HTML5.0的标准进行页面制作&#xff0c;编写可复用的用户界面组件; 3、负责分析和解决前端…

【Java从入门到大牛】Java快速入门

目录 简单认识JavaJava背景知识Java能做什么Java技术体系 如何使用Java搭建Java开发环境总结 开发第一个Java程序开发过程HelloWorld案例常见错误总结 Java程序的执行原理总结 JDK的组成和跨平台原理JDK的组成Java的跨平台、工作原理总结 JDK安装后设置Path和Java_home环境变量…

【服务器】群辉 NAS 安装 Mysql 远程访问连接

群辉安装MySQL具有高效、安全、可靠、灵活等优势&#xff0c;可以为用户提供一个优秀的数据管理和分析环境。同时具有良好的硬件性能和稳定性&#xff0c;可以保障MySQL数据库的高效运行和数据安全. cpolar 是一款内网穿透工具,通过简单的设置,我们即可实现远程访问群辉中mysq…

FPGA实验二:模可变计数器设计

目录 一、实验目的 二、实验要求 三、实验代码 1.实验源码 2.部分代码设计思路分析 四、实验结果及分析 1、引脚锁定 2、仿真波形及分析 3、下载测试结果及分析 五、实验心得 1.解决实验中遇到的困难及解决 2.完成实验后的心得 一、实验目的 &#xff08;1&#xf…

暑期学JavaScript【第四天】

日期对象 创建 //创建 const date new Date(); // 默认使用现在时间常用方法 时间戳的获取方式 date.getTime()new Date()Date.now() 倒计时案例 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta htt…