十次方项目前端,“活动”的增删查改(六)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/Eknaij/article/details/93734681

一、增加

1.对话框
(1)修改src/api/gathering.js,在template中增加对话框组件

        <el-dialog title="活动编辑" :visible.sync="dialogFormVisible" ></el-dialog>

属性title为对话框标题, visible为是否显示。
(2)变量dialogFormVisible用于控制对话框的显示。我们在脚本代码中定义

    data(){
        return{
       		......
            dialogFormVisible: false //对话框是否显示
        }
    },

(3)template中增加按钮,用于打开对话框

        <el-button type="primary" @click="dialogFormVisible = true">添加</el-button>

这样点击添加按钮就会弹出一个“活动编辑”的对话框:
在这里插入图片描述
dialog属性详见官方文档:http://element-cn.eleme.io/#/zh-CN/component/dialog
2. 编辑表单
修改src/views/table/gathering.vue,在弹出窗口添加编辑表单

        <el-dialog title="活动编辑" :visible.sync="dialogFormVisible" width="30%">
            <el-form label-width="80px">
                <el-form-item label="活动名称">
                    <el-input v-model="pojo.name" placeholder="活动名称"  ></el-input>
                </el-form-item>
                    <el-form-item label="基本地址">
                    <el-input v-model="pojo.address" placeholder="基本地址"></el-input>
                </el-form-item>
                <el-form-item label="开始日期">
                    <el-date-picker type="date" v-model="pojo.starttime" placeholder="开始日期"></el-date-picker>
                </el-form-item>
                <el-form-item label="截至日期">
                    <el-date-picker type="date" v-model="pojo.endtime" placeholder="截至日期"></el-date-picker>
                </el-form-item>
                <el-form-item label="报名截止">
                    <el-date-picker type="date" v-model="pojo.enrolltime" placeholder="报名截止"></el-date-picker>
                </el-form-item>
                <el-form-item label="活动详情">
                    <el-input v-model="pojo.detail" placeholder="活动详情" type="textarea" :rows="2"></el-input>
                </el-form-item>
                <el-form-item label="是否可见">
                    <el-switch active-value="1" inactive-value="0" v-model="pojo.status"></el-switch>
                </el-form-item>
                <el-form-item>
                    <el-button type="primary" >保存</el-button>
                    <el-button @click="dialogFormVisible = false" >关闭</el-button>
                </el-form-item>
            </el-form>
        </el-dialog>

脚本中添加编辑表单绑定的实体对象

    data(){
        return{
			......
            pojo:{} //编辑表单绑定的实体对象
        }
    },

3.下拉选择框
我们这里需要使用elementUI提供的下拉选择框
(1)准备工作:修改easyMock 中的/base/city (GET)

{
  "flag": true,
  "code": 20000,
  'message': "查询成功",
  'data|10': [{
    "id|+1": 1,
    "name": "@city",
    "ishot": "1",
  }]
}

(2)创建src/api/city.js

import request from '@/utils/request'
export default {
    getList(){
    return request({
            url: '/base/city',
            method: 'get'
        })
    }
}

(3)修改src/views/table/gathering.vue的js脚本部分

为data添加属性

cityList: []

引入城市API

import cityApi from '@/api/city'

修改created,增加对城市方法的调用

    created(){
        this.fetchDate();   //页面完成时自动加载fetchDate函数
        cityApi.getList().then(response =>{
            this.cityList = response.data
        });
    },

(4)修改src/views/table/gathering.vue,增加城市下拉框

                <el-form-item label="城市">
                    <el-select v-model="pojo.city" placeholder="请选择">
                        <el-option
                        v-for="item in cityList"
                        :key="item.id"
                        :label="item.name"
                        :value="item.id">
                        </el-option>
                    </el-select>
                </el-form-item>

显示效果:
在这里插入图片描述
4.表单提交
(1)修改easymock中的/gathering/gathering (增加活动 POST),删除多余的一个/gathering

{
	"flag": true,
	"code": 20000,
	'message': "执行成功"
}

(2)修改src/api/gathering.js,增加方法导出

    save(pojo) {
        return request({
            url: `/gathering`,
            method: 'post',
            data: pojo
        })
    }

(3)修改src/views/table/gathering.vue的js脚本部分 增加方法执行保存

 handleSave(){
            gatheringApi.save(this.pojo).then(response=>{
                alert(response.message)
                if(response.flag){//如果成功
                    this.fetchData()//刷新列表
                }
            })
            this.dialogFormVisible=false//关闭窗口
        }

(4)修改弹出框中的“保存”按钮,调用保存方法

<el-button type="primary" @click="handleSave()">保存</el-button>

二、修改

  1. 根据ID查找数据
    修改需要先查询到需要修改的数据信息,所以要先完成根据ID查询的接口
    (1) 修改easymock 接口 /gathering/{id} (GET)
{
  "flag": true,
  "code": 20000,
  'message': "查询成功",
  'data': {
    "id": "1",
    "name": "测试活动",
    "sponsor": "主办方",
    "image": "@image",
    "starttime": "@date",
    "endtime": "@date",
    "address": "@county(true)",
    "enrolltime": "@date",
    "state": "1"
  }
}

(2)修改src/api/gathering.js,增加方法定义

    findById(id) {
        return request({
            url: `/gathering/gathering/${id}`,
            method: 'get'
        })
    }

(3)修改src/views/table/gathering.vue的js脚本部分
新增handleEdit方法

    handleEdit(id){
            this.dialogFormVisible=true//打开窗口
            if(id!=''){
                //调用查询
                gatheringApi.findById(id).then( response=>{
                    if(response.flag){
                        this.pojo=response.data
                    }
                })
            }else{
                this.pojo={}//清空表单
                this.id =''//清空ID
            }
        }

按照视频实际学习时发现,如果不添加this.id=’‘的话,如果一点击修改数据之后,就会查询当前ID并进行记录,当添加时的ID不为空,所以就回触发不了添加的事件,所以我个人在此添加了this.id=’’,这样点击添加时,就会把当前的ID和其他数据全部清空。
修改修改新增按钮,调用handleEdit方法时传递空字符串

 <el-button type="primary" @click="handleEdit('')">添加</el-button>

(4)在表格table中增加模板列 ,模板列中防止修改按钮,调用handleEdit方法

            <el-table-column  label="操作" width="100">
                <template slot-scope="scope">
                    <el-button @click="handleEdit(scope.row.id)" type="text" size="small"> 修改</el-button>
                </template>
          </el-table-column>

fixed="right"的作用是定义此列为右固定列
slot-scope用于指定当前行的上下文。使用scope.row可以获取行对象
2.保存修改
(1)准备工作
修改easymock 接口 /gathering/{id} (PUT)

{
	"flag": true,
	"code": 20000,
	'message': "修改成功"
}

(1)修改src/api/gathering.js,增加方法定义

    update(id,pojo) {
        return request({
            url: `/gathering/${id}`,
            method: 'put',
            data: pojo
        })
    }

(2)修改src/views/table/gathering.vue的js脚本部分
增加属性id

data(){
	return {
		......
		id:''//当前编辑的ID
	}
}

修改handleEdit,增加

this.id=id

修改方法handleSave

 handleSave(){
            if(this.id!=''){    //修改
                gatheringApi.update(this.id,this.pojo).then(response=>{
                    alert(response.message)
                    if(response.flag){//如果成功
                        this.fetchData()//刷新列表
                    }
                })
            }else{  //添加
                gatheringApi.save(this.pojo).then(response=>{
                    alert(response.message)
                    if(response.flag){//如果成功
                        this.fetchDate()//刷新列表
                    }
                })            
            }
           
            this.dialogFormVisible=false//关闭窗口
        }

以上代码我们可以做一下优化:
修改src/api/gathering.js

    update(id,pojo){
        if(id == null || id == ''|| pojo== null){
            return request({    //保存
                url: `/gathering`,
                method: 'post',
                data: pojo
            })
        }
        return request({        //修改
            url: `/gathering/${id}`,
            method: 'put',
            data: pojo
        })
    }

保存部分的代码为之前save的代码,本来是直接调用save,但是发现识别不出来,控制台老是显示save未声明,所以在此直接把函数体复制了过来= =
修改src/views/table/gathering.vue的handleSave

handleSave(){
            gatheringApi.update(this.id,this.pojo).then(response=>{
                this.$message({
                    message: response.message,
                    type: (response.flag?'success':'error')
                });
                if(response.flag){//如果成功
                    this.fetchDate()//刷新列表
                }
            })
            this.dialogFormVisible=false//关闭窗口
        }

三、删除

修改接口:
URL:gathering/:id Method: delete
内容:

{
	"flag": true,
	"code": 20000,
	'message': "执行成功"
}

(1)修改src/api/gathering.js,增加方法定义

    deleteById(id){
        return request({
            url: `/gathering/${id}`,
            method: 'delete'
        })
    }

(2)修改src/views/table/gathering.vue的js脚本部分
增加方法

 handleDelete(id){
            this.$confirm('确定要删除此纪录吗?', '提示', {
                confirmButtonText: '确定',
                cancelButtonText: '取消',
                type: 'warning'
            }).then(() => {
            gatheringApi.deleteById(id).then(response=>{
                    this.$message({
                        message: response.message,
                        type: (response.flag?'success':'error')
                    })
                    if(response.flag){
                        this.fetchData()// 刷新数据
                    }
                })
            }).catch(() => {
                });
        }

(3)修改src/views/table/gathering.vue ,在操作列增加删除按钮

<el-button @click="handleDelete(scope.row.id)" type="text" size="small">删除</el-button>

猜你喜欢

转载自blog.csdn.net/Eknaij/article/details/93734681