使用vue实现超级课程表的功能【附完整源码】

效果图展示:
Alt
在这里插入图片描述
实现思路:
(1)使用table表格实现的
(2)接口数据需要返回一个二位数组即可。

代码实现:
封装一个超级课程表组件ClassTable如下:

<template>
  <!-- 课表组件 -->
  <div class="class-table">
    <div class="table-wrapper">
      <div class="tabel-container">
        <table>
          <thead>
            <tr>
              <th v-for="(item,index) in classTableData.weeks" :key="index">{{item?'周'+item:''}}</th>
            </tr>
          </thead>
          <tbody>
            <tr v-for="(item,index) in classTableData.courses" :key="index">
              <td
                style="font-size:12px;background:#d4f7fd;word-wrap: break-word; 
  word-break: break-all;"
              >{{changeCharacter(index)}}</td>
              <td v-for="(innerItem,idx) in item" :key="idx" @click="toScanDetail(innerItem,idx)">
                <div style v-if="innerItem.lessonsName">
                  {{innerItem.lessonsName}}
                  <br />
                  {{innerItem.lessonsTime}}
                </div>
              </td>
            </tr>
          </tbody>
        </table>
      </div>
    </div>
  </div>
</template>
 
<script>
var that;
import { Dialog } from "vant";
export default {
  props: {
    classTableData: {
      type: Object
    }
  },
  computed: {
    // 将数字转换成汉字
    changeCharacter(num) {
      return function(num) {
        var digArr = [1, 2, 3, 4, 5, 6, 7, 8, 9];
        var characterArr = [
          "一",
          "二",
          "三",
          "四",
          "五",
          "六",
          "七",
          "八",
          "九"
        ];
        return characterArr[num];
      };
    }
  },
  methods: {
    // 查看该课程的相关详情
    toScanDetail(item, idx) {
      var con = `<div style="width:180px;text-align:left!important;margin:0 auto;color:#999;font-size:16px">课程名称:${item.lessonsName}<br/>上课时间:${item.lessonsTime}<br/>上课地点:${item.lessonsAddress}<br/>授课老师:${item.lessonsTeacher}<br/>课程课时:${item.lessonsRemark}</div>`;
      if (item.lessonsName) {
        Dialog.alert({
          message: con
        });
      }
    }
  }
};
</script>
 
<style scoped>
* {
  margin: 0;
  padding: 0;
}
.table-wrapper {
  width: 100%;
  overflow: auto;
  margin-bottom: 60px;
}
table {
  table-layout: fixed;
  width: 100%;
  border-collapse: collapse;
  color: #677998;
}

thead {
  background: #d4f7fd;
}
th {
  font-weight: normal;
  height: 46px !important;
}
tbody {
  font-size: 12px;
}
th,
td {
  text-align: center;
  height: 80px;
  border-right: 1px solid #fefefe;
  border-bottom: 1px solid #fefefe;
}
tr td div {
  background: #a5d16d;
  width: 100%;
  height: 100%;
  color: #efefef;
  border-radius: 10px;
  padding: 5px;
  box-sizing: border-box;
}

tr td:first-child {
  color: #333;
}
.course {
  background-color: #ebbbbb;
  color: #fff;
  display: inline-block;
  border-radius: 3px;
  width: 47%;
  margin: 1px 1%;
}
.bgColor {
  background-color: #89b2e5;
}
</style>

使用该组件如下:

<template>
  <div>
    <v-ClassTable :classTableData="classTableData" />
  </div>
</template>
<script>
var that;
import ClassTable from "../../components/ClassTable";
import { reqFindTeacherLesson } from "../../config/api";
export default {
  data() {
    return {
      msg: "",
      classTableData:{
          weeks: ["", "一", "二", "三", "四", "五","六","日"],
          courses: [],
      }
    };
  },
  components: {
    "v-ClassTable": ClassTable
  },
  created() {
    const { userId, userName, roleId } = JSON.parse(
      this.$cookie.get("userInfo")
    );
    this.findTeacherLesson(userName);
  },
  methods: {
    // 查询教师课表
    async findTeacherLesson(userName) {
      that = this;
      var params = {
        userName: userName
      };
      const { msg, status, info } = await reqFindTeacherLesson(params);
      that.classTableData.courses = info;
    }
  }
};
</script>

接口返回的数据格式如下:

{
    "msg": "查询成功",
    "status": 1,
    "info": [
        [
            {
                "id": 1,
                "classId": 2,
                "lessonsTime": "8:00-9:40",
                "lessonsName": "计算机导论",
                "lessonsAddress": "二教302",
                "lessonsTeacher": "吴老师",
                "lessonsRemark": "1-17周",
                "lessonsNumber": "一",
                "weekday": "星期一"
            },
            {
                "id": 19,
                "classId": 2,
                "lessonsTime": "8:00-9:40",
                "lessonsName": "编译原理",
                "lessonsAddress": "二教302",
                "lessonsTeacher": "吴老师",
                "lessonsRemark": "1-5,8-12周",
                "lessonsNumber": "一",
                "weekday": "星期四"
            },
        ],
        [{},{},{}],
        [{},{},{}]
    ]
}
  • 15
    点赞
  • 86
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
### 回答1: Vue.js 是一个用于构建用户界面的框架。下面是一个简单的示例,演示如何使用 Vue.js 实现登录注册功能。 首先,在 HTML 文件中创建一个 Vue 实例,并在其中定义组件: ```html <div id="app"> <login-form v-if="!loggedIn"></login-form> <logout-form v-else></logout-form> </div> ``` 然后,在 JavaScript 文件中定义组件: ```javascript Vue.component('login-form', { template: ` <form @submit.prevent="login"> <label> 用户名: <input v-model="username" type="text" /> </label> <br /> <label> 密码: <input v-model="password" type="password" /> </label> <br /> <button type="submit">登录</button> </form> `, data() { return { username: '', password: '', } }, methods: { login() { // 使用 axios 发送登录请求 axios.post('/login', { username: this.username, password: this.password }) .then(response => { // 登录成功 this.$emit('logged-in') }) .catch(error => { // 登录失败 console.log(error) }) } } }) Vue.component('logout-form', { template: ` <form @submit.prevent="logout"> <p>欢迎 {{ username }}</p> <button type="submit">登出</button> </form> `, props: ['username'], methods: { logout() { // 使用 axios 发送登出请求 axios.post('/logout') .then(response => { // 登出成功 this.$emit('logged-out') }) .catch(error => { // 登出失败 console.log(error) }) } } }) new Vue({ el: '#app', data: { loggedIn: false ### 回答2: 使用Vue实现登录注册功能可以通过以下步骤来完成: 1. 创建Vue项目:首先,你需要创建一个Vue项目。在终端中运行以下命令来创建一个新的Vue项目: ``` vue create login-registration ``` 然后,选择适合你的配置预设,并等待项目创建完成。 2. 创建登录和注册组件:在Vue项目的src目录下,创建Login.vue和Register.vue两个组件文件。 Login.vue源码示例: ```html <template> <div> <h2>Login</h2> <form @submit.prevent="login"> <input type="email" v-model="email" placeholder="Email" required> <input type="password" v-model="password" placeholder="Password" required> <button type="submit">Login</button> </form> </div> </template> <script> export default { data() { return { email: '', password: '' } }, methods: { login() { // 实现登录逻辑 } } } </script> ``` Register.vue源码示例: ```html <template> <div> <h2>Register</h2> <form @submit.prevent="register"> <input type="text" v-model="username" placeholder="Username" required> <input type="email" v-model="email" placeholder="Email" required> <input type="password" v-model="password" placeholder="Password" required> <button type="submit">Register</button> </form> </div> </template> <script> export default { data() { return { username: '', email: '', password: '' } }, methods: { register() { // 实现注册逻辑 } } } </script> ``` 3. 添加路由:在Vue项目中的src目录下创建一个router文件夹,并创建index.js文件。在index.js文件中添加如下代码: ```javascript import Vue from 'vue' import Router from 'vue-router' import Login from '@/components/Login' import Register from '@/components/Register' Vue.use(Router) export default new Router({ routes: [ { path: '/login', name: 'Login', component: Login }, { path: '/register', name: 'Register', component: Register } ] }) ``` 4. 在main.js中注册路由:在Vue项目的src目录下的main.js文件中添加如下代码: ```javascript import Vue from 'vue' import App from './App.vue' import router from './router' Vue.config.productionTip = false new Vue({ router, render: h => h(App), }).$mount('#app') ``` 5. 修改App.vue文件:将App.vue文件中的内容修改为以下示例代码: ```html <template> <div id="app"> <router-link to="/login">Login</router-link> | <router-link to="/register">Register</router-link> <router-view></router-view> </div> </template> <script> export default { name: 'App' } </script> ``` 6. 启动项目:在终端中运行以下命令来启动项目: ``` npm run serve ``` 然后在浏览器中访问http://localhost:8080,你就可以看到登录和注册页面了。 以上是使用Vue实现登录注册功能的基本步骤和源码示例。你可以根据自己的需求和设计来进一步完善和优化代码。 ### 回答3: 使用Vue实现登录注册功能,以下是一个简单的实例: ``` <template> <div> <h1>登录</h1> <form @submit.prevent="login"> <input type="text" v-model="username" placeholder="用户名"> <input type="password" v-model="password" placeholder="密码"> <button type="submit">登录</button> </form> <h1>注册</h1> <form @submit.prevent="register"> <input type="text" v-model="newUsername" placeholder="用户名"> <input type="password" v-model="newPassword" placeholder="密码"> <button type="submit">注册</button> </form> </div> </template> <script> export default { data() { return { username: "", password: "", newUsername: "", newPassword: "", }; }, methods: { login() { // 发送登录请求,校验用户名和密码 console.log("登录成功"); }, register() { // 发送注册请求,保存新用户信息 console.log("注册成功"); }, }, }; </script> <style> h1 { margin-top: 20px; } input { margin-bottom: 10px; } button { margin-top: 10px; } </style> ``` 这个实例包含了一个登录和一个注册表单,通过v-model指令绑定输入框的value值。表单提交时,会调用相应的方法。在这个简单实例中,登录和注册的方法只打印了成功的信息,您可以根据需求进行更具体的处理,比如向后端发送请求进行验证和保存用户信息等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

派大星_study

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值