讲师管理表单实现

这篇博客详细介绍了讲师管理系统的添加讲师和修改讲师功能的实现过程。首先讲解了如何实现添加讲师功能,接着重点阐述了修改讲师的步骤,包括点击修改按钮后数据回显的实现,路由跳转中的隐藏路由设置,以及在表单页面中调用接口完成数据的显示。此外,还讨论了讲师修改功能的接口定义和方法实现,并提出了针对路由切换问题的解决方案,即使用Vue监听路由变化。
摘要由CSDN通过智能技术生成

一.添加讲师功能

 

 

二.修改讲师功能

1.点击修改按钮 进入表单页面,进行数据回显

根据讲师id查询数据显示

2.通过路由跳转,进入数据回显页面,在路由index中添加路由

①添加隐藏路由

隐藏路由     路由中添加router.index.js中添加

   {
        path: 'edit/:id',   
        name: 'EduTeacherEdit',
        component: () => import('@/views/edu/teacher/save'),
        meta: { title: '编辑讲师', noCache: true },
        hidden: true
      }

edit/:id 相当于一个占位符,后面根讲师id

②路由跳转

通过id跳转

list.vue中的路径要和index.js中的地址对应,后面加一个讲师id

     <router-link :to="'/teacher/edit/'+scope.row.id">
          <el-button type="primary" size="mini" icon="el-icon-edit">修改</el-button>
     </router-link>

通过路由跳转到页面中

 

3.在表单页面实现数据回显

即点击修改的时页面有数据不是空白

①.在teacher.js定义根据id查询接口

 //根据id查询讲师
       getTeacherInfo(id){
            return request({
               url:`/eduservice/teacher/getTeacher/${id}`,
               method: 'get'
          })

       }

 

②.在页面调用接口实现数据回显

//根据讲师id查询回显数据
       getInfo(id){
         teacherApi.getTeacherInfo(id)
         .then(resp=>{
           this.teacher=resp.data.teacher
         })
       }

 

③.调用根据id查询方法

因为添加和修改都使用save页面,区分是添加还是修改,只有修改时候查询数据回显

判断路径是否有讲师id值,如果有id值,则为修改,没有id值则是添加

 created(){
        //判断路径有id值,做修改
      if(this.$route.params && this.$route.params.id) {
          //从路径获取id值
          const id = this.$route.params.id
          //调用根据id查询的方法
          this.getInfo(id)
      }
    }

 

 

4.讲师修改功能实现

①在api.teacher.js中定义修改方法的接口

     //修改讲师
       updateTeacher(teacher){
          return request({
               url:`/eduservice/teacher/updateTeacher`,
               method: 'post',
               data:teacher})
       }

 

②在save.vue中定义修改讲师的方法

 //修改讲师的方法
       updateTeacher(){
         teacherApi.updateTeacher(this.teacher)
         .then(resp=>{
               //提示信息
            this.$message({
            type: 'success',
            message: '修改成功!'
             });
             //修改完成,跳转讲师列表页面,即路由跳转
             this.$router.push({path:'/teacher/table'})
         })
       }

根据teacher是否有id判断,有id则是修改,没id则是添加,因为添加的时候id会自动生成

 saveOrUpdate(){
          //判断是修改还是添加
           //根据是否有id判断,有则是修改,没有则是添加
           if(!this.teacher.id){
              this.saveTeacher()
           }else{
             this.updateTeacher()
           }
          
        }

5.关于路由切换问题

解决方案,使用vue监听,当路由变化,此方法就会执行

   watch:{//监听
      $route(to,from){//路由变化的方式,当路由发送变化,此方法执行
       this.init()
     }
    }

save.vue

<template>
    <div class="app-container">
        讲师添加

   <el-form label-width="120px">
     <el-form-item label="讲师名称">
     <el-input v-model="teacher.name"/>
     </el-form-item>
     <el-form-item label="讲师排序">
     <el-input-number v-model="teacher.sort" controls-position="right" />
    </el-form-item>
   <el-form-item label="讲师头衔">
     <el-select v-model="teacher.level" clearable placeholder="请选择">
       <!--
         数据类型一定要和取出的json中的一致,否则没法回填
         因此,这里value使用动态绑定的值,保证其数据类型是number
       -->
       <el-option :value="1" label="高级讲师"/>
       <el-option :value="2" label="首席讲师"/>
     </el-select>
   </el-form-item>
   <el-form-item label="讲师资历">
    <el-input v-model="teacher.career"/>
    </el-form-item>
    <el-form-item label="讲师简介">
    <el-input v-model="teacher.intro" :rows="10" type="textarea"/>
    </el-form-item>
    <!-- 讲师头像:TODO -->
    <el-form-item>
     <el-button :disabled="saveBtnDisabled" type="primary" @click="saveOrUpdate()">保存</el-button>
    </el-form-item>
  </el-form>
    </div>
</template>

<script>
import teacherApi from '@/api/edu/teacher'

export default {
    data(){
        return {
           teacher:{ //属性不加也可以,加了也没错
            name: '',
            sort: 0,
            level: 1,
            career: '',
            intro: '',
            avatar: ''

           },
           saveBtnDisabled:false//保存按钮是否禁用

        }
    },
    created(){
      this.init()
    },
    watch:{//监听
      $route(to,from){//路由变化的方式,当路由发送变化,此方法执行
       this.init()
     }
    },

    methods:{
      init(){
               //判断路径有id值,做修改
      if(this.$route.params && this.$route.params.id) {
          //从路径获取id值
          const id = this.$route.params.id
          //调用根据id查询的方法
          this.getInfo(id)
      }else{
        //清空表单
        this.teacher={} 
      }
      },

      //根据讲师id查询回显数据
       getInfo(id){
         teacherApi.getTeacherInfo(id)
         .then(resp=>{
           this.teacher=resp.data.teacher
         })
       },
       
       //修改讲师的方法
       updateTeacher(){
         teacherApi.updateTeacher(this.teacher)
         .then(resp=>{
               //提示信息
            this.$message({
            type: 'success',
            message: '修改成功!'
             });
             //修改完成,跳转讲师列表页面,即路由跳转
             this.$router.push({path:'/teacher/table'})
         })
       },

        saveOrUpdate(){
          //判断是修改还是添加
           //根据是否有id判断,有则是修改,没有则是添加
           if(!this.teacher.id){
              this.saveTeacher()
           }else{
             this.updateTeacher()
           }
          
        },
        saveTeacher(){
        teacherApi.addTeacher(this.teacher)
        .then(resp=>{
            //提示信息
            this.$message({
            type: 'success',
            message: '添加成功!'
             });
             //添加完成,跳转讲师列表页面,即路由跳转
             this.$router.push({path:'/teacher/table'})

        })

        }
    }

}
</script>

list.vue

<template>
<div class="app-container">
    讲师表单
    <!--查询表单-->
  <el-form :inline="true" class="demo-form-inline">
    <el-form-item>
      <el-input v-model="teacherQuery.name" placeholder="讲师名"/>
    </el-form-item>
    <el-form-item>
      <el-select v-model="teacherQuery.level" clearable placeholder="讲师头衔">
        <el-option :value="1" label="高级讲师"/>
        <el-option :value="2" label="首席讲师"/>
      </el-select>
    </el-form-item>
    <el-form-item label="添加时间">
      <el-date-picker
        v-model="teacherQuery.begin"
        type="datetime"
        placeholder="选择开始时间"
        value-format="yyyy-MM-dd HH:mm:ss"
          default-time="00:00:00"
      />
    </el-form-item>
    <el-form-item>
      <el-date-picker
          v-model="teacherQuery.end"
        type="datetime"
        placeholder="选择截止时间"
        value-format="yyyy-MM-dd HH:mm:ss"
        default-time="00:00:00"
      />
     </el-form-item>
      <el-button type="primary" icon="el-icon-search" @click="getList()">查询</el-button>
      <el-button type="default" @click="resetData()">清空</el-button>
    </el-form>
     <!-- 表格 -->
  <el-table
    :data="list"
    border
    fit
    highlight-current-row>
    <el-table-column
      label="序号"
      width="70"
      align="center">
      <template slot-scope="scope">
	  {{ (page - 1) * limit + scope.$index + 1 }}
      </template>
    </el-table-column>
    <el-table-column prop="name" label="名称" width="80" />
    <el-table-column label="头衔" width="80">
      <template slot-scope="scope">
        {{ scope.row.level===1?'高级讲师':'首席讲师' }}
      </template>
    </el-table-column>
    <el-table-column prop="intro" label="资历" />
    <el-table-column prop="gmtCreate" label="添加时间" width="160"/>
    <el-table-column prop="sort" label="排序" width="60" />
    <el-table-column label="操作" width="200" align="center">
      <template slot-scope="scope">
        <router-link :to="'/teacher/edit/'+scope.row.id">
          <el-button type="primary" size="mini" icon="el-icon-edit">修改</el-button>
          </router-link>
         <el-button type="danger" size="mini" icon="el-icon-delete" @click="removeDataById(scope.row.id)">删除</el-button>
        </template>
      </el-table-column>
    </el-table>
     <!-- 分页  page当前页  limit每页记录数  total总记录数  getList分页的方法-->
   <el-pagination
     :current-page="page"
     :page-size="limit"
     :total="total"
     style="padding: 30px 0; text-align: center;"
     layout="total, prev, pager, next, jumper" 
     @current-change="getList"
/>
  </div>
</template>

<script>
import teacher from '@/api/edu/teacher'

export default {
    data(){ //定义变量和初始值
       return{
         list:null,//查询之后接口返回集合
         page:1,
         limit:10,
         total:0, //总记录数
         teacherQuery:{} //条件封装对象
       }   
    },
    created(){//在页面渲染之前执行,调用methods定义的方法
     this.getList()
    
    },
    methods:{//创建具体的方法,调用teacher.js定义的方法
        //讲师列表的方法
        getList(page=1){
          this.page=page
           teacher.getTeacherListPage(this.page,this.limit,this.teacherQuery)
           .then(resp=>{
              //console.log(resp)
              this.list=resp.data.row
              this.total=resp.data.total
              console.log(this.list);
              console.log(this.total)
            
              
           })
           
        },
        resetData(){//清空的方法
         //表单输入数据清空 将对象清空
        this.teacherQuery={}  

         //查询所有讲师数据
         this.getList()

        },
        //删除讲师的方法
        removeDataById(id){
           this.$confirm('此操作将永久删除讲师记录, 是否继续?', '提示', {
          confirmButtonText: '确定',
          cancelButtonText: '取消',
          type: 'warning'
        }).then(() => { 
           teacher.deleteTeacherId(id)
           .then(resp=>{
              //提示信息
            this.$message({
            type: 'success',
            message: '删除成功!'
             });
              
              //回到列表页面刷新
              this.getList()
              })
         
        })

        
        }
      
    }

}
</script>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值