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 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> 七、教师管理-新增、修改、删除 -> 正文阅读

[JavaScript知识库]七、教师管理-新增、修改、删除

一、新增 ---- 需求分析:

1. 点击 新增 按钮后,对话框形式弹出新增窗口

2. 输入会员信息后,点击 确定 提交表单数据;?

二、新增窗口实现---模板

1.?我们先来实现一下日期查询的一个小问题,在 src\views\teacher\index.vue 中,入职时间里添加下面代码:

<el-date-picker
          type="date"
          placeholder="选择日期"
          format="yyyy-MM-dd"
          v-model="searchMap.entrydate"
          value-format="yyyy-MM-dd"
        ></el-date-picker>

2. 在 src\views\teacher\index.vue 中分页区域的下方,新增对话框形式表单数据模板

(el-dialog? title 窗口标题,visible.sync 是否弹出窗口 注意其中包含多行文本编辑框。?)

<!-- 弹出框 -->
  <!-- visible.sync 是否弹出窗口  -->
   <el-dialog title="收货地址" :visible.sync="dialogFormVisible">
  <el-form :model="form">
    <el-form-item label="活动名称" :label-width="formLabelWidth">
      <el-input v-model="form.name" autocomplete="off"></el-input>
    </el-form-item>
    <el-form-item label="活动区域" :label-width="formLabelWidth">
      <el-select v-model="form.region" placeholder="请选择活动区域">
        <el-option label="区域一" value="shanghai"></el-option>
        <el-option label="区域二" value="beijing"></el-option>
      </el-select>
    </el-form-item>
  </el-form>
  <div slot="footer" class="dialog-footer">
    <el-button @click="dialogFormVisible = false">取 消</el-button>
    <el-button type="primary" @click="dialogFormVisible = false">确 定</el-button>
  </div>
</el-dialog>

3.更改一下模板:

<!-- 弹出框 -->
    <!-- visible.sync 是否弹出窗口  -->
    <el-dialog title="新增教师" :visible.sync="dialogFormVisible">
      <el-form :model="pojo">
         <el-form-item label="工号" prop="jobnumber">
          <el-input
            style="width: 200px"
            v-model="pojo.jobnumber"
            autocomplete="off"
          ></el-input>
        </el-form-item>
        <el-form-item label="姓名" prop="name">
          <el-input
            style="width: 200px"
            v-model="pojo.name"
            autocomplete="off"
          ></el-input>
        </el-form-item>
        <el-form-item label="职务" prop="role">
          <el-select
            style="width: 200px"
            v-model="pojo.role"
            placeholder="请选择职务"
          >
            <el-option
              v-for="option in roleOptions"
              :key="option.type"
              :label="option.name"
              :value="option.type"
            ></el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="入职时间" prop="entrydate">
        <el-date-picker
          type="date"
          placeholder="选择日期"
          v-model="pojo.entrydate"
          value-format="yyyy-MM-dd"
        ></el-date-picker>
        </el-form-item>
        <el-form-item label="电话号码" prop="phone">
          <el-input
            style="width: 200px"
            v-model="pojo.phone"
            autocomplete="off"
          ></el-input>
        </el-form-item>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button @click="dialogFormVisible = false">取 消</el-button>
        <el-button type="primary" @click="dialogFormVisible = false"
          >确 定</el-button
        >
      </div>
    </el-dialog>

4.先让弹出框显示,在data里添加:

 dialogFormVisible:true

5.决定弹出框都有什么的一个指令prop,在data里添加:

  pojo: {
        id: null,
        jobnumber: "",
        name: "",
        role: "",
        entrydate: "",
        phone: "",
      },

6.在点击新增的时候,让弹出框弹出,创建点击事件,让dialogFormVisible先为false,然后在方法里,书写它的功能:

    addData() {
      this.dialogFormVisible = true;
    },

7.要实现:当输入完数据时,再次点击新增按钮,弹出框的数据要清除。

做法:给这个弹出框的表单身上,添加ref属性,在方法里用$ref拿到他绑定的对象,然后用resetFields清空。

代码段:

 <el-form :model="pojo" ref="pojoForm" >
addData() {
      this.dialogFormVisible = true;
      // 再次点击新增,清空数据的
      this.$nextTick(() => {
        //$nextTick等DOM元素渲染完,再去执行下面的回调函数
        this.$refs["pojoForm"].resetFields(); //$refs:只要使用了ref就能用它拿到ref绑定的对象
      });
    },

三、新增---表单数据校验

1. 在新增窗口的 el-form 上绑定属性 :rules="rules"

  <el-form :model="pojo" ref="pojoForm" :rules="rules">

2. 在 data 选项中添加 rules 属性进行校验,对卡号,姓名、支付类型 校验

 rules: {
        jobnumber: [{ required: true, message: "工号不能为空", trigger: "blur" }],
        name: [{ required: true, message: "电话号码不能为空", trigger: "blur" }],
        role: [{ required: true, message: "姓名不能为空", trigger: "blur" }],
        entrydate: [{ required: true, message: "入职时间不能为空", trigger: "blur" }],
        phone: [{ required: true, message: "请选择职务", trigger: "blur" }],
      },

四、表单数据提交

1.当点击新增窗口中的确认按钮时, 提交表单数据,后台API服务接口校验响应新增成功或失败。

点击确定时发生的函数:addFormData,在方法中校验一下数据,弹出提示信息是否通过:

    <el-button type="primary" @click="addFormData('pojoForm')"
          >确 定</el-button
        >
  addFormData(formName) {
      this.$refs[formName].validate((valid) => {
        if (valid) {
          alert("验证通过");
          this.dialogFormVisible = false;
        } else {
          alert("验证不通过");
          return false;
        }
      });
    },

2.nodejs 添加新增教师接口

我们新增数据要把数据存起来,然后在node文件的router.js中,写一个接口:

// 教师存储
router.post("/teacher", (req, res) => {
    console.log(req.body);
    let obj = {
        jobnumber: req.body.jobnumber,
        name: req.body.name,
        role: req.body.role,
        entrydate: req.body.entrydate,
        phone: req.body.phone
    }
    new Teacher(obj).save(function(err) {

        if (err) {
            return res.status(500).json({ //如果err,就是错误就是数据库中没有
                code: 3000,
                flag: false,
                message: "服务器后台错误"
            })
        }


        return res.status(200).json({
            "code": 2000,
            "flag": true,
            "message": "新增成功!",
        })
    })

})

3.?src\api\teacher.js 导出的默认对象中,添加调用新增接口的方法

  add(pojo) {
        return request({
            url: "/teacher",
            method: "post",
            data: pojo
        })
    },

4.在 src\views\teacher\index.vue 中的 addFormData 方法中提交数据,保存成功,代码如下:

 addFormData(formName) {
      this.$refs[formName].validate((valid) => {
        if (valid) {
          teacherApi.add(this.pojo).then((res) => {
            console.log(res.data);
            if (res.data.flag) {
              this.getList();
              this.dialogFormVisible = false;
            }
          });
        } else {
          alert("验证不通过");
          return false;
        }
      });
    },

5.新增的功能写完了。

五、修改-需求分析

1.当点击 编辑 按钮后,弹出编辑窗口,并查询出信息渲染。修改后点击确定 提交修改数据。

六、修改-实现

1.当点击 编辑 按钮后,弹出编辑窗口,在编辑方法里调用弹出框函数:

  handleEdit(index, row) {
      // console.log(index, row);
       this.addData();
    },

2.编辑完之后,也要把编辑后的数据存储起来,先要去查询数据,通过ID,所以先去node服务器(也就是node文件夹)在router.js中写一个接口

// 教师编辑
router.get("/teacher", (req, res) => {
    Teacher.findById(req.query.id, (err, data) => {
        if (err) {
            return res.status(500).json({ //如果err,就是错误就是数据库中没有
                code: 3000,
                flag: false,
                message: "服务器后台错误"
            })
        }
        return res.status(200).json({
            "code": 2000,
            "flag": true,
            "message": "根据ID查找成功!",
            "data": data
        })
    })

})

3.为了拿到ID通过scope,在教师组件(teacher文件下的index.vue文件)中,在编辑点击事件中,传参数ID:

<el-button size="mini" @click="handleEdit(scope.row._id)"
            >编辑</el-button
          >

4.然后在data中把数据创建出来,在pojo里添加?id:?null,

pojo: {
        id: null,
        jobnumber: "",
        name: "",
        role: "",
        entrydate: "",
        phone: "",
      },

5.?Api 调用接口,?在src\api\teacher.js 导出的默认对象中,添加ID查询方法 getById

 getId(id) {
        return request({
            url: "/teacher?id=" + id,
            method: "get",
        })
    },

6.在 src\views\teacher\index.vue 中的 handleEdit 方法做如下修改:

handleEdit(msg) {
      this.addData();
      console.log(msg);
      teacherApi.getId(msg).then((res) => {
        if (res.data.flag) {
          this.pojo = res.data.data;
        }
      });
    },

7.现在完成点击编辑,数据渲染在弹出框上,接下来要把编辑完的数据,发送给后台服务器,再由后台服务器?做些处理,存到数据库当中,再在页面中显示出来

先去服务器,把接口写出来:

// 教师编辑(更新操作)
router.put("/teacher", (req, res) => {
    let id = req.body._id //具体哪一条数据
    Teacher.findByIdAndUpdate(id, req.body, (err, data) => {
        if (err) {
            return res.status(500).json({ //如果err,就是错误就是数据库中没有
                code: 3000,
                flag: false,
                message: "服务器后台错误"
            })
        }
        return res.status(200).json({
            "code": 2000,
            "flag": true,
            "message": "修改教师信息成功!",
        })
    })
})

在src\api\teacher.js 导出的默认对象中,添加ID更新方法 update?

update(pojo) {
        return request({
            url: "/teacher",
            method: "put",
            data: pojo
        })
    }

8.点击编辑的确定的时候,触发更新数据update,在点击确定时在创建一个函数,用三元表达式决定是触发编辑函数还是新增函数:

<el-button
          type="primary"
          @click="
            pojo.id === null
              ? addFormData('pojoForm')
              : updataFormData('pojoForm')
          "
          >确 定</el-button
        >

9.pojo在编辑的函数里能给他重新赋值,也就是说没点击编辑的时候,pojo中的ID值一直是null,点击确定的时候,相当于新增操作,然后再次点击编辑的时候就有这个ID值了,有ID值了就相应的走后面的方法编辑函数了:

updataFormData(formName) {
      console.log("更新");
      this.$refs[formName].validate((valid) => {
        if (valid) {
          teacherApi.update(this.pojo).then((res) => {
            if (res.data.flag) {
              this.getList();
              this.dialogFormVisible = false;
              this.pojo.id = null;
              // this.pojo.name=""
              // this.pojo.jobnumber=""
              // this.pojo.entrydate=""
              // this.pojo.phone=""
              for (const key in this.pojo) {
                if (key !== "id") {
                  this.pojo[key] = "";
                }
              }
              console.log(this.pojo);
            }
          });
        } else {
          alert("验证不通过");
          return false;
        }
      });
    },
  

10.现在编辑操作完事了。

七、?教师管理-删除---需求分析

1.当点击删除按钮后, 弹出提示框,点击确定后,执行删除并刷新列表数据

八、nodejs添加删除接口

1.通过ID删除:

// 教师删除
router.delete("/teacher", (req, res) => {
    // console.log(req.body);
    Teacher.findByIdAndRemove(req.body.id, (err) => {
        if (err) {
            return res.status(500).json({ //如果err,就是错误就是数据库中没有
                code: 3000,
                flag: false,
                message: "服务器后台错误"
            })
        }
        return res.status(200).json({
            "code": 2000,
            "flag": true,
            "message": "删除教师信息成功!",
        })
    })
})

2.?Api 调用接口,src\api\teacher.js 导出的默认对象中,添加 delete方法

 delete(id) {
        return request({
            url: "/teacher",
            method: "delete",
            data: {
                id
            }
        })
    }

3.在 src\views\teacher\index.vue 中的编辑事件和 handleDele 方法做如下修改:

 <el-button size="mini" @click="handleEdit(scope.row._id)"
            >编辑</el-button
          >

?

 handleDelete(msg) {
      // console.log(index, row);
      this.$confirm("是否要删除当前数据, 是否继续?", "提示", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning",
      })
        .then(() => {
          teacherApi.delete(msg).then((res)=>{
             this.$message({
            type: "success",
            message: res.data.message,
          });
          if (res.data.flag) {
            this.getList();
          }
          })
        })
        .catch(() => {
          this.$message({
            type: "info",
            message: "已取消删除",
          });
        });
    },

4.删除操作完成!

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-10-09 16:11:30  更:2021-10-09 16:13:59 
 
开发: 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/23 22:50:49-

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