当前位置:首页 > VUE

课程表vue实现

2026-01-07 02:33:15VUE

实现课程表的Vue组件

创建课程表需要设计数据结构、布局和交互逻辑。以下是一个基于Vue 3的实现方案:

数据结构设计

const timetableData = ref([
  {
    time: '08:00-09:00',
    Monday: '数学',
    Tuesday: '英语',
    Wednesday: '物理',
    Thursday: '化学',
    Friday: '生物'
  },
  // 其他时间段...
])

模板结构

<template>
  <div class="timetable">
    <table>
      <thead>
        <tr>
          <th>时间</th>
          <th v-for="day in days" :key="day">{{ day }}</th>
        </tr>
      </thead>
      <tbody>
        <tr v-for="slot in timetableData" :key="slot.time">
          <td>{{ slot.time }}</td>
          <td v-for="day in days" :key="day">{{ slot[day] }}</td>
        </tr>
      </tbody>
    </table>
  </div>
</template>

样式设计

.timetable {
  width: 100%;
  overflow-x: auto;
}

table {
  width: 100%;
  border-collapse: collapse;
}

th, td {
  border: 1px solid #ddd;
  padding: 8px;
  text-align: center;
}

th {
  background-color: #f2f2f2;
}

tr:nth-child(even) {
  background-color: #f9f9f9;
}

动态课程表实现

对于需要动态编辑的课程表,可以增加编辑功能:

状态管理

const editable = ref(false)
const editedItem = ref(null)
const editedDay = ref('')

编辑方法

const startEdit = (slot, day) => {
  editedItem.value = slot
  editedDay.value = day
  editable.value = true
}

const saveEdit = () => {
  editable.value = false
  editedItem.value = null
  editedDay.value = ''
}

编辑界面

<template>
  <td @click="startEdit(slot, day)">
    <span v-if="!editable || editedItem !== slot || editedDay !== day">
      {{ slot[day] || '点击编辑' }}
    </span>
    <input
      v-else
      v-model="slot[day]"
      @blur="saveEdit"
      @keyup.enter="saveEdit"
      autofocus
    />
  </td>
</template>

响应式课程表

使用计算属性处理动态数据:

周数切换

const currentWeek = ref(1)
const weeks = ref([1, 2, 3, 4])

const filteredData = computed(() => {
  return timetableData.value.filter(item => item.week === currentWeek.value)
})

科目颜色标记

const subjectColors = {
  '数学': '#FFCCCC',
  '英语': '#CCFFCC',
  '物理': '#CCCCFF',
  // 其他科目...
}

const getSubjectColor = (subject) => {
  return subjectColors[subject] || '#FFFFFF'
}

应用颜色

<td :style="{ backgroundColor: getSubjectColor(slot[day]) }">
  {{ slot[day] }}
</td>

完整组件示例

<script setup>
import { ref, computed } from 'vue'

const days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
const timetableData = ref([
  // 初始化数据
])

// 其他逻辑...
</script>

<template>
  <div class="timetable-container">
    <!-- 周数选择器 -->
    <div class="week-selector">
      <button 
        v-for="week in weeks" 
        :key="week"
        @click="currentWeek = week"
        :class="{ active: currentWeek === week }"
      >
        第{{ week }}周
      </button>
    </div>

    <!-- 课程表主体 -->
    <div class="timetable">
      <table>
        <!-- 表头和内容 -->
      </table>
    </div>
  </div>
</template>

<style scoped>
/* 样式规则 */
</style>

这个实现方案提供了基本的课程表展示功能,支持动态编辑、周数切换和科目颜色标记。可以根据实际需求进一步扩展功能,如添加课程详情弹窗、导入导出功能等。

课程表vue实现

标签: 课程表vue
分享给朋友:

相关文章

vue实现滚动截屏

vue实现滚动截屏

实现滚动截屏的基本思路 滚动截屏通常指对超出可视区域的长页面进行完整截图。在Vue中,可以通过结合DOM操作、Canvas绘制及第三方库实现。以下是具体方法: 使用html2canvas库实现…

vue实现上移下移插件

vue实现上移下移插件

实现上移下移功能的 Vue 插件 在 Vue 中实现列表项的上移和下移功能,可以通过自定义指令或组件封装的方式完成。以下是两种常见实现方式: 基于数组操作的通用方法 通过操作数组索引实现元素位置交…

vue   实现单选

vue 实现单选

Vue 实现单选功能 在 Vue 中实现单选功能可以通过多种方式,以下是几种常见的方法: 使用原生 <input type="radio"> 绑定 v-model 通过 v-model…

vue实现grid

vue实现grid

Vue 实现 Grid 布局的方法 使用 CSS Grid 布局 Vue 可以结合 CSS Grid 布局实现灵活的网格系统。CSS Grid 是现代浏览器原生支持的布局方案,无需额外依赖库。 &…

vue实现前端

vue实现前端

Vue 实现前端的核心方法与步骤 安装 Vue 项目 使用 Vue CLI 或 Vite 创建项目。Vue CLI 是传统构建工具,Vite 是新一代轻量级工具。 npm init vue@l…

vue实现编辑

vue实现编辑

Vue 实现编辑功能 在 Vue 中实现编辑功能通常涉及表单绑定、状态管理和事件处理。以下是一个常见的实现方法: 双向数据绑定 使用 v-model 指令实现表单元素与数据的双向绑定: <i…