Element UI 使用 前后端数据对接 添加 删除 修改

<el-container style="height: 500px; border: 1px solid #eee">
        <!--  el-container  构建整个页面框架 -->
        <el-aside width="200px" style="background-color: rgb(238, 241, 246)">
              el-aside  构建左侧菜单 
                    <el-menu :default-openeds="['1', '3']" :default-active="'1-1'">
                      <!--  el-menu  构建左侧菜单内容  常用属性如下 -->
                          <!--  :default-openeds  设置默认展开的选项 通过菜单的 index值来关联
                                :default-active 设置默认选中的选项  通过菜单的 index值来关联-->
                      <el-submenu index="1">
                        <!--  el-submenu:可展开的菜单,常用属性:
                            index:菜单下标,文本类型,不能是数组类型。
                        -->
                        <template slot="title"><i class="el-icon-message"></i>导航一</template>
                        <!--  template: 对应el-submenu的菜单名。-->
                        <!-- i:设置菜单图标:通过class属性实例 :
                              el-icon-message,
                              el-icon-menu
                              el-icon-setting
                              -->
                        <el-menu-item-group>
                          <!--  el-menu-item-group:设置分组  此处可省略不写-->
                          <template slot="title">分组一</template>
                          <el-menu-item index="1-1">选项1</el-menu-item>
                          <!--  el-menu-item:菜单的子节点,不可再展开,常用属性:
                                  index: index:菜单下标,文本类型,不能是数组类型。 -->
                          <el-menu-item index="1-2">选项2</el-menu-item>
                        </el-menu-item-group>

                        <el-submenu index="1-3">
                          <template slot="title">选项3</template>
                          <el-menu-item index="1-3-1">选项3-1</el-menu-item>
                          <el-menu-item index="1-3-2">选项3-2</el-menu-item>
                        </el-submenu>
                      </el-submenu>
                    </el-menu>
        </el-aside>
        <el-main>
            <router-view></router-view>
        </el-main>
    </el-container>

vue router动态构建左侧菜单:

 <template>
    <el-container style="height: 500px; border: 1px solid #eee">
        <!--  el-container  构建整个页面框架 -->
        <el-aside width="200px" style="background-color: rgb(238, 241, 246)">
            <el-menu router>
                <!--    $router.options.routes  $router.options读取到配置文件  然后 .routes 获取到数组routes-->
                <!--这里先获取到index下标  然后给el-submenu 设置属性index  给他动态的值index 防止点击时同时展开 +‘’ 是为了让他转换为字符串-->
                <el-submenu v-for="(item,index) in $router.options.routes" :index="index+''">
                    <template slot="title">{{item.name}}</template>
                    <el-menu-item v-for="(item2,index2) in item.children" :index="item2.path">{{item2.name}}</el-menu-item>
                </el-submenu>
            </el-menu>
        </el-aside>
        <el-main>
            <router-view></router-view>
        </el-main>
    </el-container>
</template>

menu与router的绑定:

 实现点击后跳转到对应页面
  1. <el-menu> 标签添加router属性
    
<el-menu router>
</el-menu>
  1. 在页面添加 <router-view></router-view>标签  他是一个容器,动态渲染你的router
    
<el-main>
   <router-view></router-view>
</el-main>
  1. <el-menu-item>标签的index值,就是要跳转的router。
    
<el-menu-item v-for="(item2,index2) in item.children" :index="item2.path">{{item2.name}}</el-menu-item>

设置默认加载的页面:

redirect: “/pageOne”,

const routes = [
  {
    path: '/',
    name: "导航一",
    component: Index,
    redirect: "/pageOne",
    children: [
      ·················
      ]
    }
]

设置选中的选项高亮显示:

$route.path 字符串,等于当前路由对象的路径,会被解析为绝对路径,
如 "/home/news" 。
<el-menu-item v-for="(item2,index2) in item.children"
        :index="item2.path"
        :class="$route.path == item2.path ? 'is-active' : '' ">
    {{item2.name}}</el-menu-item>

设置默认展开:

:default-openeds="[]"
<el-menu router :default-openeds="['0','1']">
</el-menu>

引入一个表格组件,并进行修改,放入到页面一

<template>
    <div>
        <el-table
                :data="tableData"
                border
                style="width: 100%">
            <el-table-column
                    fixed
                    prop="id"
                    label="编号"
                    width="150">
            </el-table-column>
            <el-table-column
                    prop="name"
                    label="用户名"
                    width="120">
            </el-table-column>
            <el-table-column
                    prop="pwd"
                    label="密码"
                    width="120">
            </el-table-column>
            <el-table-column
                    prop="perms"
                    label="权限"
                    width="120">
            </el-table-column>
            <el-table-column
                    fixed="right"
                    label="操作"
                    width="100">
                <template slot-scope="scope">
                    <el-button @click="handleClick(scope.row)" type="text" size="small">查看</el-button>
                    <el-button type="text" size="small">编辑</el-button>
                </template>
            </el-table-column>
        </el-table>
    </div>

</template>

<script>
    export default {
        methods: {
            handleClick(row) {
                console.log(row);
            }
            ,
            page(currentPage){
                alert(currentPage);
            }
        },

        data() {
            return {
                tableData: [{
                    id: '2016-05-02',
                    name: '王小虎',
                    pwd: '上海',
                    perms: '普陀区'
                }, {
                    date: '2016-05-04',
                    name: '王小虎',
                    province: '上海',
                    city: '普陀区',
                    address: '上海市普陀区金沙江路 1517 弄',
                    zip: 200333
                }, {
                    date: '2016-05-01',
                    name: '王小虎',
                    province: '上海',
                    city: '普陀区',
                    address: '上海市普陀区金沙江路 1519 弄',
                    zip: 200333
                }, {
                    date: '2016-05-03',
                    name: '王小虎',
                    province: '上海',
                    city: '普陀区',
                    address: '上海市普陀区金沙江路 1516 弄',
                    zip: 200333
                }]
            }
        }
    }
</script>

引用一个分页组件:

<el-pagination
      background
      layout="prev, pager, next"
      page-size="5"
      :total="50"
      @current-change="page"
      >
<!--  page-size设置每页的数据条数   
	:total="1000" 设置总记录数
@current-change:实现分页操作
      -->
</el-pagination>

写一个方法 page 实现分页切换:
这个方法在上面已经使用 :@current-change=“page”

<script>
    export default {
        methods: {
            handleClick(row) {
                console.log(row);
            }
            ,
            page(currentPage){
                alert(currentPage);
            }
        },

        data() {
            return {
              
            }
        }
    }
</script>

修改springboot:

@Autowired
    private UserRepository userRepository;

//    @GetMapping("/findAll")
//    public List<User> findAll() {
//        return userRepository.findAll();
//    }
    //使用带分页查询的findAll方法
    @GetMapping("/findAll/{page}/{size}")
       public Page<User> findAll(@PathVariable("page") Integer page, @PathVariable("size") Integer size) {
        PageRequest pageable = PageRequest.of(page-1,size);
        //因为是默认从0开始  所以把输入的page 进行-1操作
        //参数: page:要查询的页数   size每页的数据条数
        return userRepository.findAll(pageable);
       }
}

导入axios:
使用created():

<script>
    export default {
        methods: {
            handleClick(row) {
                
            }
            ,
            page(currentPage){
                console.log(currentPage);
                })
            }
        },
        created() {
            axios.get('http://localhost:8181/user/findAll/1/1').then((resp) =>{
                console.log(resp)
                this.tableData = resp.data.content  //获取实际的数据内容
            })
        },
        data() {
            return {
               *********
            }
        }
    }
</script>

获取总数据数 在分页组件中使用:

<script>
    export default {
        methods: {
            handleClick(row) {
                console.log(row);
            }
            ,
            page(currentPage){
             
                })
            }
        },
        created() {
            axios.get('http://localhost:8181/user/findAll/1/1').then((resp) =>{
                console.log(resp)
                this.tableData = resp.data.content  //获取实际的数据内容
                this.total = resp.data.totalElements//获取总数据数
            })
        },
        data() {
            return {
                total: null,
                tableData: null
            }
        }
    }
</script>
<el-pagination
                background
                layout="prev, pager, next"
                page-size="1"
                :total="total"
                @current-change="page"
                >
<!--     page-size设置每页的数据条数   :total="1000" 设置总记录数      -->
        </el-pagination>

实现分页 切换数据:

methods: {
            handleClick(row) {
                console.log(row);
            }
            ,
            page(currentPage){
                axios.get('http://localhost:8181/user/findAll/'+currentPage+'/1').then((resp) =>{
                    console.log(resp)
                    this.tableData = resp.data.content  //获取实际的数据内容
                    this.total = resp.data.totalElements//获取总数据数
                })
            }
        },

使用表单组件实现添加数据:

<template>
    <el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
<!--     :model:用于绑定数据  :rules:用于绑定检验规则 和prop=""关联   -->
        <el-form-item label="用户名" prop="name">
            <el-input v-model="ruleForm.name"></el-input>
        </el-form-item>
        <el-form-item label="密码" prop="pwd">
            <el-input v-model="ruleForm.pwd"></el-input>
        </el-form-item>
        <el-form-item label="权限" prop="perms">
            <el-input v-model="ruleForm.perms"></el-input>
        </el-form-item>

        <el-form-item>
            <el-button type="primary" @click="submitForm('ruleForm')">提交</el-button>
            <el-button @click="resetForm('ruleForm')">重置</el-button>
        </el-form-item>

    </el-form>
</template>

<script>
    export default {
        data() {
            return {
                ruleForm: {
                    name: '',
                    pwd: '',
                    perms: '',
                },
                rules: {
                    name: [
                        { required: true, message: '请输入用户名称', trigger: 'blur' },
                        //required 是否必填 message 提示信息 trigger 触发事件 blur 失去焦点时触发
                        { min: 3, max: 5, message: '长度在 3 到 5 个字符', trigger: 'blur' }
                    ],
                    pwd: [
                        { required: true, message: '请输入密码', trigger: 'change' }
                    ],
                    perms: [
                        { type: 'date', required: true, message: '请选择权限', trigger: 'change' }
                    ],
                    date2: [
                        { type: 'date', required: true, message: '请选择时间', trigger: 'change' }
                    ],
                    type: [
                        { type: 'array', required: true, message: '请至少选择一个活动性质', trigger: 'change' }
                    ],
                    resource: [
                        { required: true, message: '请选择活动资源', trigger: 'change' }
                    ],
                    desc: [
                        { required: true, message: '请填写活动形式', trigger: 'blur' }
                    ]
                }
            };
        },
        methods: {
            submitForm(formName) {
                this.$refs[formName].validate((valid) => {
                    if (valid) {
                        alert('submit!');
                    } else {
                        console.log('error submit!!');
                        return false;
                    }
                });
            },
            resetForm(formName) {
                this.$refs[formName].resetFields();
                //this.$refs[formName] 获取表单
                //resetFields() 重置表单为空
            }
        }
    }
</script>

在springboot中 写添加代码:

@PostMapping("/save")
       public String save(@RequestBody User user) {
        //@RequestBody这里使用注解将 user转为 json格式
           User result = userRepository.save(user);
           if (result != null) {
               return "success";
           }else {
               return "error";
           }
       }

在前端进行调用 并设置:

<template>
    <el-form style="width: 40%" :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
<!--     :model:用于绑定数据  :rules:用于绑定检验规则 和prop=""关联   -->
        <el-form-item label="用户名" prop="name">
            <el-input v-model="ruleForm.name"></el-input>
        </el-form-item>
        <el-form-item label="密码" prop="pwd">
            <el-input v-model="ruleForm.pwd"></el-input>
        </el-form-item>
        <el-form-item label="权限" prop="perms">
            <el-input v-model="ruleForm.perms"></el-input>
        </el-form-item>

        <el-form-item>
            <el-button type="primary" @click="submitForm('ruleForm')">提交</el-button>
            <el-button @click="resetForm('ruleForm')">重置</el-button>
        </el-form-item>

    </el-form>
</template>

<script>
    export default {
        data() {
            return {
                ruleForm: {
                    name: '',
                    pwd: '',
                    perms: '',
                },
                rules: {
                    ****************
            };
        },
        methods: {
            submitForm(formName) {
                this.$refs[formName].validate((valid) => {
                    if (valid) {
                        axios.post('http://localhost:8181/user/save',this.ruleForm).then((resp) =>{
                            if (resp.data == 'success'){
                                this.$router.push('/pageOne')
                                //跳转到查询页面
                                const h = this.$createElement;
                                this.$message({
                                    message: h('p', null, [
                                        h('i', { style: 'color: teal' }, '添加成功')
                                    ])
                                });
                            }
                        })
                    } else {
                        console.log('error submit!!');
                        return false;
                    }
                });
            },
            resetForm(formName) {
                this.$refs[formName].resetFields();
                //this.$refs[formName] 获取表单
                //resetFields() 重置表单为空
            }
        }
    }
</script>

修改:

@GetMapping("/findById/{id}")
    public User findById(@PathVariable("id") Integer id) {

        return userRepository.findById(id).get();
    }

    @PutMapping("/update")
    public String update(@RequestBody User user) {
        User result = userRepository.save(user);
        if (result != null) {
            return "success";
        }else {
            return "error";
        }
    }
<el-button  @click="edit(scope.row)" type="text" size="small">修改</el-button>
<script>
    export default {
        methods: {
            edit(row) {
                //跳转到修改页面  并获取到当前点击的 id
                this.$router.push({
                    path: '/update',
                    query: {
                        id: row.id
                    }
                })
            }
    }
</script>
<template>
    <el-form style="width: 40%" :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
        <!--     :model:用于绑定数据  :rules:用于绑定检验规则 和prop=""关联   -->
       ********************
    </el-form>
</template>

<script>
    export default {
        data() {
            return {
                ruleForm: {
                    id: '',
                    name: '',
                    pwd: '',
                    perms: '',
                },
                rules: {
                   **********************
                }
            };
        },
        methods: {
            submitForm(formName) {
                this.$refs[formName].validate((valid) => {
                    if (valid) {
                        axios.put('http://localhost:8181/user/update',this.ruleForm).then((resp) =>{
                            if (resp.data == 'success'){
                                this.$router.push('/pageOne')
                                //跳转到查询页面
                                const h = this.$createElement;
                                this.$message({
                                    message: h('p', null, [
                                        h('i', { style: 'color: teal' }, '修改成功')
                                    ])
                                });
                            }
                        })
                    } else {
                        console.log('error submit!!');
                        return false;
                    }
                });
            },
            resetForm(formName) {
                this.$refs[formName].resetFields();
                //this.$refs[formName] 获取表单
                //resetFields() 重置表单为空
            }
        }
        ,created() {
            //拿到id
            //this.route.query.id
                axios.get('http://localhost:8181/user/findById/'+this.$route.query.id).then((resp) =>{
                this.ruleForm = resp.data

            })
        }
    }
</script>

删除:

@DeleteMapping("/deleteById/{id}")
    public void deleteById(@PathVariable("id") Integer id) {

        userRepository.deleteById(id);

    }
<el-button @click="deleteUser(scope.row)" slot="reference" type="text" size="small">删除</el-button>
deleteUser(row) {
    axios.delete('http://localhost:8181/user/deleteById/'+row.id).then((resp) =>{
       window.location.reload();//动态刷新一次

     })
     }
      ,
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值