当前位置:首页 > 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;
}

动态课程表实现

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

课程表vue实现

状态管理

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 = ''
}

编辑界面

课程表vue实现

<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
分享给朋友:

相关文章

jq 实现 vue

jq 实现 vue

jq 实现 Vue 的核心功能 jq 是一个轻量级的 JavaScript 库,主要用于 DOM 操作和事件处理。虽然它不能完全替代 Vue,但可以通过一些技巧模拟 Vue 的核心功能,如数据绑定、事…

vue实现jqueryui

vue实现jqueryui

Vue 实现 jQuery UI 功能 在 Vue 项目中实现类似 jQuery UI 的功能,可以通过原生 Vue 组件或第三方库来实现。以下是几种常见 jQuery UI 功能的 Vue 替代方案…

通过vue实现

通过vue实现

Vue 实现方法 安装 Vue 确保已安装 Node.js 和 npm,通过以下命令安装 Vue CLI: npm install -g @vue/cli 创建 Vue 项目 使用 Vue CLI…

vue实现active

vue实现active

Vue 实现 active 状态的方法 在 Vue 中实现 active 状态可以通过以下几种方式实现,具体取决于使用场景和需求。 使用 v-bind:class 动态绑定类名 通过 v-bind:…

vue 实现工具

vue 实现工具

Vue 实现工具的方法 使用 Vue 实现工具功能可以通过多种方式完成,具体取决于工具的类型和需求。以下是几种常见的方法: 组件化实现 创建一个独立的 Vue 组件来封装工具功能。例如,实现一个计…

vue实现展开

vue实现展开

展开功能的实现方法 在Vue中实现展开功能可以通过多种方式完成,常见的有使用v-show、v-if指令,结合CSS过渡动画或第三方组件库。 使用v-show控制显示隐藏 通过v-show指令可以简单…