最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue?element實(shí)現(xiàn)權(quán)限管理業(yè)務(wù)流程詳解

 更新時(shí)間:2022年08月30日 14:23:03   作者:benlalagang  
目前本人再使用vue-element-admin項(xiàng)目時(shí)都是通過(guò)直接刪除一些用不上的路由來(lái)進(jìn)行側(cè)邊欄的清除,但是其實(shí)有一個(gè)更加好的辦法來(lái)對(duì)項(xiàng)目的側(cè)邊欄顯示的內(nèi)用進(jìn)行管理,就是權(quán)限管理,其實(shí)也不知道這個(gè)方法好不好,原理上來(lái)說(shuō)時(shí)跟直接刪除該路由的方式時(shí)一樣的

添加 編輯 刪除 角色 都與上一篇 用戶類似 只是接口不同

我們只關(guān)注其他不一樣的:

展開(kāi)渲染標(biāo)簽編輯權(quán)限

el-table-column type="expand"設(shè)置了expand則顯示為一個(gè)可展開(kāi)的按鈕

顯示圖上的效果 使用了 三重for循環(huán) 按照 tree 數(shù)據(jù)結(jié)構(gòu) .children 取得下一級(jí)數(shù)據(jù)

<el-table-column type="expand">
          <template slot-scope="scope">
            <el-row v-for="(rights1,index) in scope.row.children" class="vertical" :key="index">
              <el-col :span="5">
                <el-tag class="tag1"
                        disable-transitions
                        closable
                        @close="remRight(scope.row,rights1.id)">
                  {{rights1.authName}}
                </el-tag>
                <i class="el-icon-caret-right"></i>
              </el-col>
              <el-col :span="19">
                <el-row v-for="(rights2,index2) in rights1.children" class="vertical" :key="index2">
                  <el-col :span="6">
                    <el-tag class="tag2"
                            type="success"
                            disable-transitions
                            closable
                            @close="remRight(scope.row,rights2.id)">
                      {{rights2.authName}}
                    </el-tag>
                    <i class="el-icon-caret-right"></i>
                  </el-col>
                  <el-col :span="18">
                    <el-tag class="tag3"
                            type="warning"
                            v-for="(rights3,index3) in rights2.children"
                            disable-transitions
                            :key="index3"
                            closable
                            @close="remRight(scope.row,rights3.id)">
                      {{rights3.authName}}
                    </el-tag>
                  </el-col>
                </el-row>
              </el-col>
            </el-row>
pre 標(biāo)簽 整齊的排列 文本 代碼
<!--            <pre>-->
<!--              {{scope.row.children}}-->
<!--            </pre>-->
          </template>
        </el-table-column>
     // 關(guān)閉下拉的權(quán)限標(biāo)簽 事件
      async remRight(role,rightId){
        //彈窗詢問(wèn)用戶是否刪除數(shù)據(jù)
        const confirmResult = await  this.$queding(
          '確定要為該角色刪除此權(quán)限嗎?',
          '提示',
          {
            confirmButtonText: '確定',
            cancelButtonText: '取消',
            type: 'warning'
          }
        ).catch(err => err)
        // 如果用戶確認(rèn)刪除,則返回值為字符串 confirm
        // 如果用戶取消刪除,則返回值為字符串 cancel
        // console.log(confirmResult)
        if (confirmResult !== 'confirm'){
          return this.$Msg.info('已取消刪除')
        }
        const {data:res} = await this.$http.delete(`roles/${role.id}/rights/${rightId}`)
        if (res.meta.status !== 200) return this.$Msg.error('刪除此權(quán)限失?。?)
        this.$Msg.success('刪除用戶成功!')
        // 參數(shù)不直接引用role.id 為了給 role.children 重新賦值 動(dòng)態(tài)更新 不用刷新頁(yè)面 再展開(kāi)查看
        // 返回的data, 是當(dāng)前角色下最新的權(quán)限數(shù)據(jù)
        role.children = res.data
      },

對(duì)話框內(nèi)樹(shù)形組件編輯權(quán)限

顯示樹(shù)形組件的對(duì)話框:

    <!--    編輯角色權(quán)限的對(duì)話框-->
    <el-dialog
      title="修改角色權(quán)限"
      :visible.sync="editNPCRightBox"
      @close="ERNPCClose"
      width="45%">
<!--      樹(shù)形控件組件-->
      <el-tree
        展示數(shù)據(jù)源
        :data="RightList"
        適用于需要選擇層級(jí)時(shí)使用
        show-checkbox
        每個(gè)樹(shù)節(jié)點(diǎn)用來(lái)作為唯一標(biāo)識(shí)的屬性,整棵樹(shù)應(yīng)該是唯一的
        node-key="id"
        ref="PushRoleRef"
        默認(rèn)全部展開(kāi)
        default-expand-all
        默認(rèn)勾選的節(jié)點(diǎn)的 key 的數(shù)組
        :default-checked-keys="defKeys"
        配置選項(xiàng)
        :props="treeProps">
      </el-tree>
      <span slot="footer" class="dialog-footer">
        <el-button type="primary" @click="ToEditRightNPC">確 定</el-button>
        <el-button @click="editNPCRightBox = false">取 消</el-button>
      </span>
    </el-dialog>
<script>
        editNPCRightBox:false,
        RightList:null,
        // 樹(shù)形配置 根據(jù)哪一個(gè)來(lái)渲染 名字和children屬性
        treeProps:{
          label:'authName',// 看到的是哪一個(gè)屬性
          children:'children'// 父子嵌套的關(guān)系
        },
        defKeys:[],
        // 點(diǎn)擊編輯權(quán)限按鈕時(shí) 記錄當(dāng)前ID 供應(yīng)其他方法使用
        PushRolesId:null
</script>

點(diǎn)擊編輯權(quán)限按鈕 先把要展示的數(shù)據(jù)源 RightList 再使用遞歸把擁有權(quán)限的id push到 defKeys里 之后顯示對(duì)話框

// 點(diǎn)擊表單內(nèi)的編輯按鈕
      async editNPCRightBoxShow(role){
        this.PushRolesId = role.id
        const {data:res} = await this.$http.get('rights/tree')
        if (res.meta.status !==200) return this.$Msg.error('獲取權(quán)限列表失敗')
        this.RightList = res.data
        //console.log(role)
        await this.getThreeKeys(role,this.defKeys)
        this.editNPCRightBox = true
      },
      // 通過(guò)遞歸的方式 獲取角色下所有的三級(jí)權(quán)限的id 并保存到defKeys 數(shù)組中
      getThreeKeys(node,arr){
        // 如果當(dāng)前節(jié)點(diǎn)不包含 children 那么他就是三級(jí)節(jié)點(diǎn)
        if(!node.children){
          return arr.push(node.id)
        }
        node.children.forEach(item =>{
          this.getThreeKeys(item,arr)
        })
      },

點(diǎn)擊體檢按鈕時(shí) 通過(guò)ref調(diào)用

getCheckedKeys(返回目前被選中的節(jié)點(diǎn)所組成的數(shù)組)

getHalfCheckedKeys (返回目前半選中的節(jié)點(diǎn)的 key 所組成的數(shù)組)

把他倆合并 并轉(zhuǎn)成字符串 按照接口約定 向服務(wù)器發(fā)送請(qǐng)求

      // 編輯角色權(quán)限的對(duì)話框 內(nèi)的確定按鈕 發(fā)送請(qǐng)求
      async ToEditRightNPC(){
        const prams = [
          ...this.$refs.PushRoleRef.getCheckedKeys(),
          ...this.$refs.PushRoleRef.getHalfCheckedKeys()
        ]
        const xxx = prams.join(',')
        //console.log(prams)
        const {data:res} = await this.$http.post(`roles/${this.PushRolesId}/rights`,{rids:xxx})
        if (res.meta.status !==200) return this.$Msg.error('為此角色修改權(quán)限失敗')
        await this.getNPCList()
        this.editNPCRightBox = false
        this.$Msg.success('修改角色權(quán)限成功')
      },
      // 編輯角色權(quán)限的對(duì)話框被關(guān)閉時(shí) 清空默認(rèn)選中的值 防止打開(kāi)時(shí)id 重復(fù)
      ERNPCClose(){
        this.defKeys = []
      }

展示所有權(quán)限

很簡(jiǎn)單 就是請(qǐng)求數(shù)據(jù) 表格渲染

<template>
  <div>
    <!--    面包屑導(dǎo)航-->
    <el-breadcrumb separator-class="el-icon-arrow-right">
      <el-breadcrumb-item :to="{ path: '/home' }" >首頁(yè)</el-breadcrumb-item>
      <el-breadcrumb-item>權(quán)限管理</el-breadcrumb-item>
      <el-breadcrumb-item>權(quán)限列表</el-breadcrumb-item>
    </el-breadcrumb>
    <!--卡片區(qū)域-->
    <el-card>
      <el-table
        :data="RightsList"
        style="width: 100%"
        stripe
        border>
        <el-table-column type="index" label="#"></el-table-column>
        <el-table-column prop="authName" label="權(quán)限名稱"></el-table-column>
        <el-table-column prop="path" label="路徑"></el-table-column>
        <el-table-column label="權(quán)限等級(jí)">
          <template slot-scope="scope">
            <el-tag v-if="scope.row.level == 0">一級(jí)</el-tag>
            <el-tag v-else-if="scope.row.level == 1" type="success">二級(jí)</el-tag>
            <el-tag v-else type="warning">三級(jí)</el-tag>
          </template>
        </el-table-column>
      </el-table>
    </el-card>
  </div>
</template>
<script>
  export default {
    name: 'Rights-content',
    created() {
      this.getRightsList()
    },
    data(){
      return{
        RightsList:null
      }
    },
    methods:{
       async getRightsList(){
        const {data:res} = await this.$http.get('rights/list')
         if (res.meta.status !==200) return this.$Msg.error('獲取權(quán)限列表失敗')
         this.RightsList = res.data
      }
    }
  }
</script>

到此這篇關(guān)于Vue element實(shí)現(xiàn)權(quán)限管理業(yè)務(wù)流程詳解的文章就介紹到這了,更多相關(guān)Vue element權(quán)限管理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vue前端實(shí)現(xiàn)dhtmlxgantt甘特圖代碼示例(個(gè)人需求)

    vue前端實(shí)現(xiàn)dhtmlxgantt甘特圖代碼示例(個(gè)人需求)

    這篇文章主要介紹了如何使用dhtmlx-gantt和chinese-days插件在項(xiàng)目中實(shí)現(xiàn)節(jié)假日置灰顯示的功能,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-03-03
  • vue的template模板是如何轉(zhuǎn)為render函數(shù)的過(guò)程

    vue的template模板是如何轉(zhuǎn)為render函數(shù)的過(guò)程

    Vue從template到render函數(shù)的轉(zhuǎn)換經(jīng)歷模板解析、AST構(gòu)建、優(yōu)化、生成渲染函數(shù)等步驟,首先進(jìn)行詞法分析將模板拆解為tokens,再進(jìn)行語(yǔ)法分析構(gòu)建AST,然后對(duì)AST進(jìn)行靜態(tài)標(biāo)記和提升優(yōu)化,最后轉(zhuǎn)換成JavaScript渲染函數(shù),生成虛擬DOM,完成組件的渲染和更新,實(shí)現(xiàn)了模板的高效轉(zhuǎn)化
    2024-10-10
  • Ant?Design?of?Vue?select框獲取key和name的問(wèn)題

    Ant?Design?of?Vue?select框獲取key和name的問(wèn)題

    這篇文章主要介紹了Ant?Design?of?Vue?select框獲取key和name的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Vue取消Axios發(fā)出的請(qǐng)求

    Vue取消Axios發(fā)出的請(qǐng)求

    axios 是一個(gè)基于 promise 的 HTTP 庫(kù),可以用在瀏覽器和 node.js 中。首先需要知道:axios不是一種新的技術(shù)。axios 是一個(gè)基于Promise 用于瀏覽器和 nodejs 的 HTTP 客戶端,本質(zhì)上也是對(duì)原生XHR的封裝,只不過(guò)它是Promise的實(shí)現(xiàn)版本,符合最新的ES規(guī)范
    2022-09-09
  • Vue 實(shí)現(xiàn)撥打電話操作

    Vue 實(shí)現(xiàn)撥打電話操作

    這篇文章主要介紹了Vue 實(shí)現(xiàn)撥打電話操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-11-11
  • 結(jié)合axios對(duì)項(xiàng)目中的api請(qǐng)求進(jìn)行封裝操作

    結(jié)合axios對(duì)項(xiàng)目中的api請(qǐng)求進(jìn)行封裝操作

    這篇文章主要介紹了結(jié)合axios對(duì)項(xiàng)目中的api請(qǐng)求進(jìn)行封裝操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09
  • vue項(xiàng)目自適應(yīng)屏幕分辨率實(shí)現(xiàn)步驟

    vue項(xiàng)目自適應(yīng)屏幕分辨率實(shí)現(xiàn)步驟

    這篇文章主要給大家介紹了關(guān)于vue項(xiàng)目自適應(yīng)屏幕分辨率實(shí)現(xiàn)的相關(guān)資料,作為前端人員,為了適配各種型號(hào)的電腦、手機(jī),我們往往離不開(kāi)屏幕分辨率的適配,需要的朋友可以參考下
    2023-09-09
  • vue面試??贾甤omputed是如何實(shí)現(xiàn)的

    vue面試常考之computed是如何實(shí)現(xiàn)的

    對(duì)于每天都在用的計(jì)算屬性(computed),小編猜大家肯定也想窺探其奧妙與原理對(duì)吧,所以這篇文章就來(lái)講講computed是如何實(shí)現(xiàn)的吧,感興趣的小伙伴可以學(xué)習(xí)一下
    2023-08-08
  • Vue混入mixins分發(fā)組件可復(fù)用功能

    Vue混入mixins分發(fā)組件可復(fù)用功能

    混入 (mixin) 提供了一種非常靈活的方式,來(lái)分發(fā) Vue 組件中的可復(fù)用功能。一個(gè)混入對(duì)象可以包含任意組件選項(xiàng)。當(dāng)組件使用混入對(duì)象時(shí),所有混入對(duì)象的選項(xiàng)將被“混合”進(jìn)入該組件本身的選項(xiàng)
    2022-09-09
  • vue父子組件通訊的所有方法小結(jié)

    vue父子組件通訊的所有方法小結(jié)

    本文將介紹父組件與子組件之間傳遞數(shù)據(jù)的四種方法,以一個(gè)簡(jiǎn)單的小demo為例,通過(guò)實(shí)例全方位解析和代碼演示,便于大家理解,需要的朋友可以參考下
    2024-07-07

最新評(píng)論

贵溪市| 富宁县| 阳西县| 民勤县| 女性| 来凤县| 永修县| 遂溪县| 南通市| 天台县| 金寨县| 乃东县| 抚顺市| 吴江市| 讷河市| 和平区| 兴和县| 磴口县| 略阳县| 安塞县| 江津市| 营山县| 重庆市| 伊宁县| 马边| 和田县| 平顶山市| 古蔺县| 平山县| 醴陵市| 山丹县| 启东市| 阳原县| 曲阜市| 彭水| 永春县| 渝北区| 措美县| 临西县| 沂水县| 班戈县|