IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 六、教师管理-列表查询 -> 正文阅读

[大数据]六、教师管理-列表查询

一、 需求分析

教师管理主要针对充值教师进行管理,首先开发教师管理模块中的列表功能,包含条件查询、下拉框、日期功能、 数据列表、分页。

二、?教师数据列表

1 nodejs 添加数据列表接口,去node文件,在创建一个teacher.js,创建教师的一个规则

const mongoose = require('mongoose')

mongoose.connect('mongodb://localhost/test') //和test数据库创建连接

module.exports = mongoose.model('Teacher', { //数据库的规则
    jobnumber: {
        type: String,
        required: true
    },
    name: {
        type: String,
        required: true
    },
    role: {
        type: String,
        required: true
    },
    entrydate: {
        type: String,
        required: true
    },
    phone: {
        type: String,
        required: true
    }
})

2.让路由管理一下他,在router.js中引入

let Teacher = require('./teacher.js')

3.然后在下面写一个接口,在这之前,先把数据存到数据库中,创建出Teacher这个表,打开mongoose

mongo

use 数据库名称

db.createCollection("teachers")

2(教师) 1(班主任)
工号?? ?姓名?? ?职务?? ?入职时间?? ??? ?电话

db.teachers.insert([{'jobnumber':'001','name':'申秀莲','role':'1','entrydate':'2015-11-11','phone':'15022221111'},{'jobnumber':'002','name':'周蛋挞','role':'1','entrydate':'2015-11-11','phone':'15022221111'},{'jobnumber':'003','name':'千瑞珍','role':'2','entrydate':'2015-11-11','phone':'15022221111'},{'jobnumber':'004','name':'吴允熙','role':'2','entrydate':'2015-11-11','phone':'15022221111'},{'jobnumber':'005','name':'夏博士','role':'1','entrydate':'2015-11-11','phone':'15022221111'},{'jobnumber':'006','name':'杨狗蛋','role':'1','entrydate':'2015-11-11','phone':'15022221111'},{'jobnumber':'007','name':'麻辣烫','role':'1','entrydate':'2015-11-11','phone':'15022221111'},{'jobnumber':'008','name':'闵雪雅','role':'1','entrydate':'2015-11-11','phone':'15022221111'},{'jobnumber':'009','name':'周锡京','role':'2','entrydate':'2015-11-11','phone':'15022221111'},{'jobnumber':'0010','name':'夏恩星','role':'1','entrydate':'2015-11-11','phone':'15022221111'},{'jobnumber':'0011','name':'下线','role':'1','entrydate':'2015-11-11','phone':'15022221111'},{'jobnumber':'0012','name':'泡菜小锅','role':'2','entrydate':'2015-11-11','phone':'15022221111'},{'jobnumber':'0013','name':'周周','role':'1','entrydate':'2015-11-11','phone':'15022221111'},{'jobnumber':'0014','name':'下班','role':'1','entrydate':'2015-11-11','phone':'15022221111'}])

db.teachers.find()

4.写一个接口,在router.js中添加获取教师列表方法

// 查询所有---获取教师列表
router.get("/teacher/list", (req, res) => {
    Teacher.find({
        // token: body.token
    }, (err, data) => {
        if (err) {
            return res.status(500).json({ //如果err,就是错误就是数据库中没有
                code: 3000,
                flag: false,
                message: "服务器后台错误"
            })
        }
        let content = data.length

        return res.status(200).json({
            "code": 2000,
            "flag": true,
            "message": "查询成功",
            "data": {
                content,
                "rows": data
            } //把数据返回出去
        })
    })
})

三、?Api 调用接口

1. 在 src/api 下创建 teacher.js , 调用接口代码如下:?

import request from "@/utils/request.js"

export default {
    getList() {
        return request({
            url: "/teacher/list",
            method: "get",
        })
    },

}

2. 在 src\views\teacher\index.vue 中, 添加 JS 代码如下:?


<script>
import teacherApi from "@/api/teacher.js";

export default {
  data() {
    return { };
  },
  methods: {
    queryList() {
      teacherApi.getList().then((res) => {
        console.log(res);
        
      });
    },
    
  },
  created() {
    this.queryList();
  },
 
};
</script>

3.点击教师的时候,能拿到下图数据

四、列表模板

?1. 修改 src\views\teacher\index.vue ,编写模板代码:

<template>
  <div>
    <el-table :data="list" height="400" border style="width: 100%">
      <el-table-column type="index" label="序号"> </el-table-column>
      <el-table-column prop="jobnumber" label="工号"> </el-table-column>
      <el-table-column prop="name" label="姓名"> </el-table-column>
      <el-table-column prop="role" label="职务"></el-table-column>
      <el-table-column prop="entrydate" label="入职时间"> </el-table-column>
      <el-table-column prop="phone" label="电话"> </el-table-column>
    </el-table>
  </div>
</template>


<script>
import teacherApi from "@/api/teacher.js";

export default {
  data() {
    return {list: [] };
  },
  methods: {
    queryList() {
      teacherApi.getList().then((res) => {
        this.list = res.data.data.rows;
      });
    },
  },
  created() {
    this.queryList();
  },
};
</script>


<style scoped>
h1 {
  text-align: center;
}
</style>

五、解决CSS问题

之前的页面有些问题,下面改正:

1.去App.vue

<template>
  <div id="app" v-cloak>
    <router-view />
  </div>
</template>

<style >
body,
html {
  margin: 0 auto;
  width: 100%;
  height: 100%;
}
#app {
  width: 100%;
  height: 100%;
  overflow: hidden;
}
[v-cloak] {
  display: none;
}
</style>

2.layout.vue:

<template>
  <div class="layout">
    <app-header />
    <app-main />
    <app-navbar />
  </div>
</template>

<script>
import AppHeader from "./AppHeader/index.vue";
import AppMain from "./AppMain/index.vue";
import AppNavbar from "./AppNavbar/index.vue";
export default {
  components: {
    AppHeader,
    AppMain,
    AppNavbar,
  },
};
</script>

<style scoped>

.layout {
  width: 100%;
  height: 100%;
}
</style>

3AppHeader的index.vue:

<style scoped>
.header {
  position: absolute;
  line-height: 50px;
  background-color: cornflowerblue;
  padding: 0;
  top: 0;
  width: 100%;
}

.logo {
  vertical-align: middle;
  width: 30px;
  padding: 0 10px 0 50px;
}
.company {
  position:absolute;
  color: white;
}
a {
  text-decoration: none;
}
.el-dropdown {
  float: right;
  margin-right: 40px;
  cursor: pointer;
  color: white;
}
</style>

4.AppNavbar的index.vue:

<style scoped>
.navbar {
  position: absolute;
  top: 50px;
  width: 16%;
  left: 0;
  background-color: darkseagreen;
  overflow: hidden;
}

5.AppMain的index.vue:

<style scoped>
.main {
  position: absolute;
  top: 50px;
  left: 16%;
  width: 80%;
  padding: 10px;
  background-color: pink;
  overflow: hidden;
  /* z-index: 99; */
}

六、过滤器实现数据转换?

1. 用过滤器在teacher的index.vue中,添加一个规则,然后去组件当中去使用,由于他只需要在当前组件中使用,所以写局部的一个:

<script>
import teacherApi from "@/api/teacher.js";
let roleOptions = [
  { type: "1", name: "班主任" },
  { type: "2", name: "教师" },
];
export default {
  data() {
    return { list: [] };
  },
  methods: {
    queryList() {
      teacherApi.getList().then((res) => {
        this.list = res.data.data.rows;
      });
    },
  },
  created() {
    this.queryList();
  },
  filters: {
    roleFilter(type) {
      let obj = roleOptions.find((item) => {
        return item.type === type;
      });
      return obj ? obj.name : null;
    },
  },
};
</script>

2.修改 模板代码

 <el-table-column prop="role" label="职务">
        <template slot-scope="scope">
          <span>{{ scope.row.role | roleFilter }}</span> ? ? ?
        </template>
      </el-table-column>

3.在“电话”后添加删除和修改:

 <el-table-column label="操作">
        <template slot-scope="scope">
          <el-button size="mini" @click="handleEdit(scope.$index, scope.row)"
            >编辑</el-button
          >
          <el-button
            size="mini"
            type="danger"
            @click="handleDelete(scope.$index, scope.row)"
            >删除</el-button
          >
        </template>
      </el-table-column>

4.在方法里添加:

 handleEdit(index, row) {
      console.log(index, row);
    },
    handleDelete(index, row) {
      console.log(index, row);
    },

七、分页功能实现

1.为列表数据添加分页功能,使用分页组件完成分页功能,去node文件的router.js中,添加分页模拟接口

// 分页
router.post("/teacher/list", (req, res) => {
    let page = req.body.page || 1; //页数
    let size = req.body.size || 10; //一页显示多少条
    let searchMap = req.body.searchMap || {}
    console.log(page, size, searchMap);
})

2.?Api 调用接口,修改 src\api 下的 teacher.js , 在导出的默认对象中,增加分页查询方法?

search(page, size, searchMap) {
        return request({
            url: "/teacher/list",
            method: "post",
            data: {
                page,
                size,
                searchMap
            }
        })
    }

3.在 src\views\teacher\index.vue 中,?在“操作”之后,添加 JS 代码如下:

   <el-pagination
      @size-change="getList"
      @current-change="getList"
      :current-page="currentPage4"
      :page-sizes="[5, 10, 15, 20]"
      :page-size="pageSize"
      layout="total, sizes, prev, pager, next, jumper"
      :total="total"
    >
    </el-pagination>

4.在export?default的data里:

  data() {
    return { list: [], currentPage4: 1, pageSize: 10,total:0,searchMap:{}  };
  }

5.声明分页属性, 调用 getList 改为调用 search 方法,在methods和created里,把queryList()?方法注释上,?写上getList方法:

 getList() {
      teacherApi.search(this.currentPage4,this.pageSize,this.searchMap).then(res=>{
       let resArr=res.data
       this.total=resArr.data.content
       this.list=resArr.data.rows
      }).catch(err=>{
        console.log("err",err);
      });
    },




 created() {
    // this.queryList();
    this. getList()
  },

6.在node终端能拿到页码数,然后在node的router.js中:

// 分页
router.post("/teacher/list", (req, res) => {
    let page = req.body.page || 1; //页数
    let size = req.body.size || 10; //一页显示多少条
    let searchMap = req.body.searchMap || {}
        // console.log(page, size, searchMap);
    let obj = {}
    Teacher.find(obj, (err, data) => {
        if (err) {
            return res.status(500).json({
                code: 3000,
                flag: false,
                message: "服务器后台错误"
            })
        }
        let content = data.length

        //skip跳过多少条,limit查询多少个,exec当前面的代码,执行完毕后,产生的回调
        Teacher.find(obj).skip((page - 1) * parseInt(size)).limit(parseInt(size)).exec((err, data) => {
            if (err) {
                return res.status(500).json({
                    code: 3000,
                    flag: false,
                    message: "服务器后台错误"
                })
            }
            return res.status(200).json({
                "code": 2000,
                "flag": true,
                "message": "查询成功",
                "data": {
                    content,
                    "rows": data
                }
            })
        })
    })

})

7.运行效果:

八、解决动态页码和当前页?

问题:上面当你改变页码后,请求URL的 {page}/{size} 不会变,一直是初始值,那是因为没有监听到改变的值。

解决:1. 将 @size-change 和 @current-change 事件处理的函数名改变为 handleSizeChange 和handleCurrentChange

 <el-pagination
      @size-change="handleSizeChange"
      @current-change="handleCurrentChange"
      :current-page="currentPage4"

2. 在 methods 中添加函数,

    handleSizeChange(val) {
      this.pageSize = val;
      this.getList();
    },
    handleCurrentChange(val) {
      this.currentPage = val;
      this.getList();
    },

3. 测试可通过。

九、条件查询实现-----在列表上方添加查询功能。

1. 修改 src\views\teacher\index.vue ,增加条件查询模板代码:?

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-10-07 13:54:36  更:2021-10-07 13:54:42 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 1:32:29-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码