基于vue3实现的课堂点名程序

devtools/2025/2/19 0:55:06/

设计思路

采用vue3实现的课堂点名程序,模拟课堂座位布局,点击开始点名按钮后,一朵鲜花在座位间传递,直到点击结束点名按钮,鲜花停留的座位被点名。

课堂点名

座位组件 seat.vue

javascript"><script setup>//组合式APIimport { ref,reactive,onMounted } from 'vue';const seatImage=ref('/src/assets/desk.jpg')const props=defineProps({ // 当前图片索引row:{type:Number,default:0},col:{type:Number,default:0},callRow:{type:Number,default:0},callCol:{type:Number,default:0},sName:{type:String,default:""}})
</script>
<template ><div style="height: 94px;"> <button  ><img :src="seatImage" alt="Button Image"></button><div style="width: 42px; text-align: center;">{{props.sName}}</div><div v-if="props.callRow===props.row && props.callCol===props.col">🌺 </div>
</div>
</template>
<style >
</style>

教室组件 classroom.vue

javascript"><template><div>  <el-button type="primary" @click="startCall">开始点名</el-button><el-button type="danger" @click="overCall">结束点名</el-button></div><br><el-table :data="tableData" style="width: 100%" table-layout="auto"><el-table-column  :label= item.col v-for="(item, index) in tableData[0]" :key="index"><template v-slot="scope"><seat :col=scope.row[index].col  :row=scope.row[index].row :callRow=callRow           :callCol=callCol:sName=scope.row[index].sName:key="componentKey"></seat></template></el-table-column></el-table></template><script  setup>import { ref,reactive,onMounted} from 'vue';import seat from './seat.vue';var timer=ref("")const callRow=ref(0)const callCol=ref(0)var componentKey=0const classroom=ref( {rows:3,cols:3,seatsMap:[{row: 0,col: 0,sName:"樊兰英"}, {row: 0,col: 1,sName:"张磊"},{row: 0,col: 2,sName:"朱旭"},{row: 1,col: 0,sName:"沈玉"},   {row: 1,col: 1,sName:"邓平"},{row: 1,col: 2,sName:"蒋兰英"},{row: 2,col: 0,sName:"程晨"},   {row: 2,col: 1,sName:"张承"},{row: 2,col: 2,sName:"陈楚华"}]})const tableData = ref([])makeTable();mergeData();function makeTable () {for (let i = 0; i < classroom.value.rows; i++) tableData.value.push({})for(let i = 0; i < classroom.value.cols; i++){tableData.value.forEach((tableRow,idxRow)=>{let fieldName='c'+i; tableRow[fieldName]={row:idxRow,col:i,sName:""};})}}function mergeData () {// 合并数据for (let i = 0; i < classroom.value.seatsMap.length; i++) {			  let fieldName='c'+classroom.value.seatsMap[i].col;tableData.value[classroom.value.seatsMap[i].row][fieldName] = classroom.value.seatsMap[i]}}function startCall(){  timer = setInterval(genRowCol, 200); }function genRowCol() { //随机产生座位号callRow.value= parseInt(Math.random()*classroom.value.rows) ;callCol.value= parseInt(Math.random()*classroom.value.cols) ;componentKey += 1;//组件key加1,强制子组件刷新}function overCall(){ clearInterval(timer);}</script>

调用

javascript"> <classroom ></classroom>

扩展

程序还可以作一下扩展:

1)按性别点名,比如这次抽取男生或女生;

2)按成绩排名点名,比如这次抽取成绩好的学生;

3)按课堂表现点名,比如抽取不爱发言的学生;

4)优先抽取没有点过名的学生

以上条件可以组合


http://www.ppmy.cn/devtools/159162.html

相关文章

在 PyCharm 中接入deepseek的API的各种方法

在 PyCharm 中接入 DeepSeek 的 API&#xff0c;通常需要以下步骤&#xff1a; 1. 获取 DeepSeek API 密钥 首先&#xff0c;确保你已经在 DeepSeek 平台上注册并获取了 API 密钥&#xff08;API Key&#xff09;。如果没有&#xff0c;请访问 DeepSeek 的官方网站注册并申请 …

Kali linux搭建wifi绵羊墙

复现了获取SSID&#xff0c;但手机连不上来获取主机名&#xff0c;可能是因为手机保存的热点是有密码的。 设置网卡 网卡支持的情况下&#xff0c;kali下直接运行 ifconfig wlan0 up airmon-ng check kill airmon-ng start wlan0 airbase-ng -P -C 30 -v wlan0mon | tee noh…

2025年02月12日Github流行趋势

项目名称&#xff1a;data-formulator 项目地址url&#xff1a;https://github.com/microsoft/data-formulator 项目语言&#xff1a;TypeScript 历史star数&#xff1a;4427 今日star数&#xff1a;729 项目维护者&#xff1a;danmarshall, Chenglong-MS, apps/dependabot, mi…

vue 文件下载(导出)excel的方法

目前有一个到处功能的需求&#xff0c;这是我用过DeepSeek生成的导出&#xff08;下载&#xff09;excel的一个方法。 1.excel的文件名是后端生成的&#xff0c;放在了响应头那里。 2.这里也可以自己制定文件名。 3.axios用的是原生的axios&#xff0c;不要用处理过的&#xff…

【Azure 架构师学习笔记】- Azure Databricks (11) -- UC搭建

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Databricks】系列。 接上文 【Azure 架构师学习笔记】- Azure Databricks (10) – UC 使用 前言 由于ADB 的更新速度很快&#xff0c;在几个月之后重新搭建ADB 时发现UC 已经更新了很多&#xff0c;为了后续做ADB 的功…

PostgreSQL 数据库压力测试指南

一、为什么需要压力测试&#xff1f; 数据库需要进行压力测试的原因主要包括以下几个方面&#xff1a; 性能评估&#xff1a;通过压力测试&#xff0c;可以了解数据库在高负载情况下的性能表现&#xff0c;包括响应时间、吞吐量和资源利用率等。这有助于确定系统的性能瓶颈。 …

3.1 严格Stubbing模式

严格Stubbing&#xff08;Strict Stubbing&#xff09;是Mockito提供的一种增强测试严谨性的模式&#xff0c;旨在检测以下问题&#xff1a; 多余的Stubbing&#xff1a;配置了未被调用的方法桩。不必要的Stubbing&#xff1a;Stubbing未被使用且不影响测试结果。桩顺序错误&a…

游戏APP如何通过精准广告策略实现广告变现收益增长?

不同类型的游戏APP合作AdSet聚合广告平台&#xff0c;量身定制广告变现方案&#xff0c;以提升变现收益的表现。#app广告变现 1、智能选择广告形式 基于用户的行为习惯&#xff0c;推荐优化广告格式&#xff0c;包括插屏广告、激励视频广告和Banner广告等&#xff0c;最大化广…