vue+element-ui实现权限角色添加编辑删除效果代码

代码语言:html

所属分类:布局界面

代码描述:vue+element-ui实现权限角色添加编辑删除效果代码

代码标签: 角色 添加 编辑 删除 效果

下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开

<!DOCTYPE html>
<html lang="en">

<head>
   
<meta charset="UTF-8">
   
<meta http-equiv="X-UA-Compatible" content="IE=edge">
   
<meta name="viewport" content="width=device-width, initial-scale=1.0">
   
<title>权限管理模块</title>
   
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/vue@2.6.1.js"></script>
   
<style>
       
* {
           
box-sizing: border-box;
           
padding: 0;
           
margin: 0;
       
}

       
.oneMenu {
           
width: 32%;
           
float: left;
           
margin-left: 1%;
       
}
       
.sonMenu {
           
width: 49%;
           
float: left;
           
margin-left: 0.5%;
           
margin-right: 0.5%;
       
}

       
.mg-t20 {
           
margin-top: 20px;
       
}

       
.pd-t10-b20 {
           
padding-top: 10px;
           
padding-bottom: 20px;
       
}
       
.pd-lr10 {
           
padding-left: 10px;
           
padding-right: 10px;
       
}
       
.pd-t2-l10 {
           
padding: 2px 10px;
       
}

       
.textL {
           
text-align: left;
       
}

       
/* reset */
       
* {
           
box-sizing: border-box;
           
padding: 0;
           
margin: 0;
           
list-style: none;
       
}

       
.wrapBox {
           
position: absolute;
           
top: 0;
           
right: 0;
           
bottom: 0;
           
left: 0;
           
margin: auto;
       
}
       
.h50 {
           
height: 50px;
           
line-height: 50px;
           
font-size: 16px;
           
padding: 0 10px;
           
text-align: left;
           
margin-bottom: 5px;
       
}

       
.pd10 {
           
padding: 10px;
       
}
       
.pd-lr10 {
           
padding-left: 10px;
           
padding-right: 10px;
       
}
       
.pd-l10 {
           
padding-left: 10px;
       
}
       
.pd-10 {
           
padding-bottom: 10px;

       
}
       
.mg-b5 {
           
margin-bottom: 5px;
       
}
       
.vCenter {
           
display: flex;
           
align-items: center;
       
}


       
/* 瀛椾綋 */
       
.font12 {
           
font-size: 12px;
       
}

       
.myDialog .el-dialog {
           
border-radius: 5px;
           
overflow: hidden;
       
}
       
.myDialog .el-dialog__body {
           
padding: 10px;

       
}

       
.blueHead .el-dialog__header {
           
/* background-color: #9eaab7; */
           
background-color: #5eb198;

       
}
       
.blueHead .el-dialog__title {
           
font-size: 16px;
           
color: #fff;
       
}
       
.blueHead .el-dialog__close {
           
color: #fff;
       
}
       
.el-dialog__header {
           
padding: 10px;
       
}
       
.radius_tl5 {
           
border-top-left-radius: 5px;
       
}
       
.radius_bl5 {
           
border-bottom-left-radius: 5px;
       
}
       
.radius_tbl5 {
           
border-top-left-radius: 5px;
           
border-bottom-left-radius: 5px;
       
}
       
.hand {
           
cursor: pointer;
       
}
       
.myBlue {
           
color: #409EFF;
       
}
       
.redColor,.myRed {
           
color: #f73f3f;
       
}
   
</style>

   
<!-- 饿了么 图标库 引入样式 -->
   
<link type="text/css" rel="stylesheet" href="//repo.bfw.wiki/bfwrepo/css/elementui.css">
   
<!-- 饿了么 引入组件库 -->
   
<script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/elementui.js"></script>

   
<style>
       
.pageTitle {
           
text-align: center;
           
font-size: 18px;
           
background: #91ccb1;
           
height: 40px;
           
line-height: 40px;
           
padding: 0 10px;
       
}
   
</style>
</head>

<body>

   
<div id="app">
       
<p class="pageTitle" style="margin-bottom: 10px">
            权限管理模块
       
</p>

       
<p class="textL" style="margin-bottom: 10px;padding: 0 20px;">
            角色列表:
<el-button @click="addRole" size="mini" type="primary"
               
>增加角色</el-button
           
>
       
</p>

       
<div style="margin:20px;">
           
<el-table :data="allRole" border size="mini">
               
<el-table-column type="index" label="序号" width="60"></el-table-column>
               
<el-table-column prop="name" label="角色名" width="200"></el-table-column>
               
<el-table-column label="操作">
                   
<template slot-scope="scope">
                       
<el-button type="primary" size="mini" @click="editRow(scope.row)">编辑</el-button>
                       
<el-button type="danger" size="mini" @click="delRow(scope.row)">删除</el-button>
                   
</template>
               
</el-table-column>
           
</el-table>
       
</div>

       
<!-- 弹框部分 -->
       
<el-dialog :title="isAdd ? '新增角色' : '修改角色'" class="myDialog blueHead textL" :visible.sync="showRight"
            :
close-on-click-modal="false" width="1200px">
           
<div style="padding: 0 15px;">
               
<p v-if="isAdd" style="background-color: #eee; padding: 5px">
                    角色名称:
                   
<el-input style="width: 250px" size="mini" @blur="blurFun(currentRole.name)" v-model="currentRole.name">
                   
</el-input>
               
</p>
               
<p v-else>
                    当前角色:{{ currentRole.name }}
               
</p>
               
<div style="max-height: 560px; overflow: auto;">

                   
<todo-box class="sonMenu textL mg-t20" style="border: 1px solid #eee;"
                       
v-for="(item,index) in currentRole.allRight"
                       
v-bind:item="item"
                       
v-bind:key="item.name+index"
                        @
topClicka="topClickF"
                        @
titleClickson="titleClickFa">
                   
</todo-box>

                   
<!--
                                现在我们为每个 todo-item 提供待办项对象
                                待办项对象是变量,即其内容可以是动态的。
                                我们也需要为每个组件提供一个“key”,晚些时候我们会做个解释。
                              -->

                   
<!-- <div id="app-7">
                                <ol>
                                  <todo-item
                                    v-for="item in groceryList"
                                    v-bind:todo="item"
                                    v-bind:key="item.id">
                                  </todo-item>
                                </ol>
                              </div> -->


                   
<!--
                                <anchored-heading :level="1">
                                asdfasdf
                              </anchored-heading>
                              <button-counter></button-counter> -->

               
</div>
               
<p style="text-align: right; margin-bottom: 15px; margin-top: 10px">
                   
<el-button @click="showRight = false" size="mini">取 消</el-button>
                   
<el-button v-if="isAdd" size="mini" type="primary" @click="saveRole(currentRole)">确 定</el-button>
                   
<el-button v-else size="mini" type="primary" @click="updateRole(currentRole)">修 改</el-button>
               
</p>
           
</div>
       
</el-dialog>
   
</div>


   
<script>

        // 1.至于过程和实现,有不懂的,都可以问喔!我的微信号 yizheng369
        // 2.github源码地址https://github.com/banana618859/workArrange.git


        Vue.component('todo-item', {
            props: ['todo'],
            template: '
<li>{{ todo.text }}</li>'
        })



        // render Vue.component注册的组件,必须要在vue实例创建之前(即在 new Vue()之前),否则不生效
        Vue.component('anchored-heading22', {
            render: function (createElement) {
                console.warn('render:', this);
                return createElement(
                    'h' + this.level, // 标签名称
                    this.$slots.default // 子节点数组
                )
            },
            props: {
                level: {
                    type: Number,
                    required: true
                }
            }
        })

        Vue.component('content-box', {
            template: `
           
<div style="border:1px solid #eee;" class="pd-t10-b20 pd-lr10">
           
<span v-for="(item,index) in data" :key="faName+'_'+item.name+index" style="margin-right:10px;">
           
<el-checkbox v-model="item.check" @change="changeFun(faName+'_'+item.name, item.check)">{{item.name}}</el-checkbox>
           
</span>
           
</div>`,
            props: {
                data: {
                    type: Array,
                    default: () => []
                    },
                    faName: {
                        type: String,
                        default: ''
                        }
                    },
                    methods: {
                        changeFun() {
                            console.error('content-box-changeFun:');
                            this.$emit('clickOne', ...arguments)
                        }
                    },
                    data() {
                        return {}
                    }
                })


            Vue.component('list-box', {
                template: `
               
<div>
               
<div v-for="(item,index) in data" :key="item.name+index" class="sonMenu" style="padding:5px; margin-top:10px; margin-bottom:10px;" >
               
<p style="background-color: #d5dfdc;" class="pd-t2-l10">
               
<el-checkbox v-model="item.check" @change="titleClick(faName+'_'+item.name,item.check)">{{item.name}}</el-checkbox>
               
</p>
               
<list-box v-if="item.children && item.children[0].children" :data="item.children" :faName="faName+'_'+item.name"></list-box>
               
<content-box v-else :data="item.children" :faName="faName+'_'+item.name" @clickOne="clickOne"></content-box>

               
</div>
               
</div>`,
                props: {
                    data: {
                        type: Array,
                        default: () => []
                        },
                        faName: {
                            type: String,
                            default: ''
                            }
                        },
                        methods: {
                            titleClick() {
                                console.error('l-b-titleClick:', arguments);
                                this.$emit('titleClick', ...arguments)
                            },
                            clickOne(a) {
                                console.error('l-b-clickOne:', arguments);
                                this.$emit('clickOne', ...arguments)
                            }
                        },
                        data() {
                            return {}
                        }
                    })

                Vue.component('button-counter', {
                    data: function () {
                        return {
                            count: 0
                        }
                    },
                    template: '
<button v-on:click="count++">You clicked me {{ count }} times.</button>'
                })

                // 创建组件
                var login = {
                    template: "
<h1>登录组件</h1>"
                }

                var vm = new Vue({
                    el: '#app',
                    data() {
                        return {
                            bllRight: [],
                            groceryList: [],
                            isAdd: true,
                            showRight: false,
                            baseRole: {
                                name: "",
                                allRight: [{
                                    name: "用户权限管理",
                                    check: true,
                                    children: [{
                                        name: "用户管理",
                                        check: true,
                                        children: [{
                                            name: "增",
                                            action: "add",
                                            check: true
                                        },
                                            {
                                                name: "删",
                                                action: "delete",
                                                check: true
                                            },
                                            {
                                       .........完整代码请登录后点击上方下载按钮下载查看

网友评论0