角色管理:调接口和 ( tree树形结构的菜单权限 )_autoexpandparent-程序员宅基地

技术标签: pandas  python  机器学习  

一、 先讲解tree树形结构:
1. key是唯一值,也就是后端接口返回的id, 

1. 5.2接口


 1.1 调5.2接口,获取treeData格式,赋值就展示出来tree的样子了

 主要是用replaceFields替换key title value标识
Ant Design 必须再data中用这个树形进行key 和title 和value的标识,对上之后就可以展示出来tree

 
1.2 展示出来

 
1.3 传id的时候看下面 2.2 怎么把id传给 后端的

 二、 角色权限,看看怎么调接口

1. 先调分页列表接口:2.6



2.1 新增调 2.2 接口: 获取下拉框和tree的数据

接口 2.2,新增调这个接口,传这些参数

 

 
2.2 赋值

 

 3. 编辑调接口: 
编辑调2.1 接口,传id,


拿到回显数据

 

 3.1 回显数据赋值

 3.2 tree树形结构的赋值

修改的时候调2.3 ,修改角色

 

三、 所有代码:

 

list.vue:
 

<template>

  <div>

    <div class="pageTitle">

      <div class="title">

        <span class="titleName">角色管理</span>

        <span class="content">系统当前所有用户</span>

      </div>

    </div>

    <div class="wrap">

      <div class="sea">

        <Input

          class="search"

          v-model="inputValue"

          placeholder="输入搜索条件"

          @keyup.enter="searchEnterFun"

        >

          搜索

        </Input>

      </div>

      <base-table

        ref="roleList"

        @onAction="onAction"

        :table="table"

        :removeUrl="removeUrl"

        :removeMsg="'是否删除该角色?'"

      ></base-table>

    </div>

  </div>

</template>

<script>

import path from '@/api/index.js'

import { BaseTable } from '@/components/index.js'

export default {

  name: 'UserList',

  components: {

    BaseTable

  },

  props: {},

  data() {

    return {

      removeUrl: path.set.role.base,

      // removeUrl: '/callsys/role/', //传接口路径-》BaseTable || 删除的接口,成功后直接删除

      table: {

        url: path.set.role.list,

        // url: '/callsys/role/page', // 传接口路径-》BaseTable || table数据的接口,成功后直接拿到数组数据 -558行 527行

        rowKey: 'roleId',

        selectable: false,

        columns: [

          {

            title: '角色名称',

            dataIndex: 'roleName'

          },

          {

            title: '处室名称',

            dataIndex: 'tcq'

          },

          {

            title: '描述',

            dataIndex: 'roleDesc',

            maxLength: 30

          }

        ]

      },

      inputValue: ''

    }

  },

  watch: {},

  computed: {},

  mounted() {},

  methods: {

    onAction({ name = '', data = {} }) {

      const actionMap = {

        onCreate: this.doCreate.bind(this), //绑定

        onEdit: this.doEdit.bind(this, data.original)

      }

      actionMap.hasOwnProperty(name) && actionMap[name]()

    },

    doCreate() {

      this.$router.push({

        path: '/home/system/roleForm',

        query: {

          mode: 'create'

        }

      })

    },

    // 1.点击编辑按钮跳转传id获取列表数据回显

    doEdit(data) {

      this.$router.push({

        path: '/home/system/roleForm',

        query: {

          mode: 'edit',

          id: data.roleId

        }

      })

    },

    // 回车搜索

    searchEnterFun() {

      console.log('调接口')

      // this.getDictys()

    }

  }

}

</script>


form.vue:
 

<template>

  <div class="formPage">

    <div class="pageTitle">角色详细信息</div>

    <a-form-model

      class="pageContent"

      ref="form"

      v-bind="formItemLayout"

      :model="formModel"

      :rules="rules"

    >

      <div class="formContent">

        <div class="fomrLeft">

          <div class="fomrLeft_box">

            <h2>角色信息</h2>

            <a-form-model-item label="名称" prop="roleName">

              <a-input v-model="formModel.roleName" placeholder="请输入角色名称"></a-input>

            </a-form-model-item>

            <a-form-model-item label="处室名称" prop="tcq">

              <a-select v-model="formModel.tcq" palaceholder="请选择处室" :allowClear="true">

                <a-select-option v-for="item in tcqList" :key="item.name" :value="item.name">{ {

                  item.name

                }}</a-select-option>

              </a-select>

            </a-form-model-item>

            <a-form-model-item label="描述" prop="roleDesc">

              <a-textarea

                v-model="formModel.roleDesc"

                palaceholder="角色描述"

                :auto-size="{ minRows: 3, maxRows: 5 }"

              ></a-textarea>

            </a-form-model-item>

          </div>

        </div>

        <div class="fomrRight">

          <div class="fomrRight_box">

            <h2>拥有的权限</h2>

            <div class="permissions">功能权限</div>

            <div class="treeing">

              <!--expandedKeys=选中的id/; autoExpandParent=true/false; onExpand/onSelect=函数;

                 replaceFields: 替换treeNode中title,key,children 字段为treeData中对应的字段 -->

              <a-tree

                v-model="checkedKeys"

                :tree-data="treeData"

                :replaceFields="replaceFields"

                checkable

                :expanded-keys="expandedKeys"

                :auto-expand-parent="autoExpandParent"

                :selected-keys="selectedKeys"

                @expand="onExpand"

              />

            </div>

          </div>

        </div>

      </div>

    </a-form-model>

    <div class="pageFoot">

      <a-button type="primary" class="saveBtn" @click="save">确定</a-button>

      <a-button @click="cancle">取消</a-button>

    </div>

  </div>

</template>

<script>

import { formItemLayout } from '@/constants/base'

import SystemService from '@/service/system.js'

import cdgl from '@/service/cdgl.js'

export default {

  name: 'RoleForm',

  components: {},

  props: {},

  data() {

    return {

      formItemLayout,

      tcqList: [],

      menuList: [],

      formModel: {

        roleName: '',

        tcq: '',

        roleDesc: '',

        permissions: [],

        tcqList: []

      },

      rules: {

        roleName: [{ required: true, message: '请填写角色名称', trigger: 'blur' }],

        tcq: [{ required: true, message: '请选择', trigger: 'blur' }],

        permissions: [{ required: true, message: '请选择', trigger: 'blur' }],

        tcqList: [{ required: true, message: '请选择', trigger: 'blur' }]

      },

      // 1. tree

      replaceFields: {

        children: 'children',

        title: 'name',

        key: 'id',

        value: 'id'

      },

      treeData: [],

      expandedKeys: ['802'], //默认打开tree - 这是key值,也就是后端返回的id

      autoExpandParent: true,

      checkedKeys: [], //3. 选中的tree-id,

      selectedKeys: []

    }

  },

  // 3. 新增-tree树形结构传选中的id

  watch: {

    checkedKeys(val) {

      // console.log(val, 'val----tree树形结构选中的id')

      this.formModel.permissions = val

    }

  },

  computed: {},

  mounted() {

    this.getAllTcqData()

    this.getAllMenu()

    this.getTrees() //1.

    if (this.$route.query.mode === 'edit') {

      this.getDetail(this.$route.query.id)

    }

  },

  methods: {

    // 1. tree-获取所有菜单tree树形结构

    getTrees() {

      cdgl.getTree().then((res) => {

        this.treeData = res

      })

    },

    // 1. tree右箭头

    onExpand(expandedKeys) {

      this.expandedKeys = expandedKeys

      this.autoExpandParent = true

      // console.log(this.autoExpandParent, 'tree-----true/false-默认打开所有选项')

    },

    // 3. 编辑回显数据(包括tree)

    getDetail(id) {

      SystemService.getRoleDetail(id).then((res) => {

        this.formModel.roleName = res.sysRole.roleName

        this.formModel.roleDesc = res.sysRole.roleDesc

        this.formModel.roleId = res.sysRole.roleId

        this.formModel.tcq = res.sysRole.tcq

        this.formModel.tcqList = res.tcqList

        res.permissions.length > 0 &&

          res.permissions.forEach((item) => {

            this.formModel.permissions.push(item.menuId)

            this.checkedKeys = this.formModel.permissions //3.1 选中的tree回显

          })

      })

    },

    // 2.获取下拉框处室名称

    getAllTcqData() {

      SystemService.getAllTcq().then((res) => {

        this.tcqList = [...res]

        // console.log(res, 'res----处室名称')

      })

    },

    // 没用

    getAllMenu() {

      SystemService.getAllMenu().then((res) => {

        this.menuList = [...res]

      })

    },

    save() {

      this.$refs.form.validate((valid) => {

        if (valid) {

          if (this.$route.query.mode === 'create') {

            SystemService.addRole(this.formModel).then((res) => {

              this.$message.success('操作成功')

              this.$router.push('/home/system/role')

            })

          } else if (this.$route.query.mode === 'edit') {

            SystemService.updateRole(this.formModel).then((res) => {

              this.$message.success('操作成功')

              this.$router.push('/home/system/role')

            })

          }

        } else {

          return false

        }

      })

    },

    cancle() {

      this.$refs.form.resetFields()

      this.$router.go(-1)

    }

  }

}

</script>





 




 

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

智能推荐

2024最新计算机毕业设计选题大全-程序员宅基地

文章浏览阅读1.6k次,点赞12次,收藏7次。大家好!大四的同学们毕业设计即将开始了,你们做好准备了吗?学长给大家精心整理了最新的计算机毕业设计选题,希望能为你们提供帮助。如果在选题过程中有任何疑问,都可以随时问我,我会尽力帮助大家。在选择毕业设计选题时,有几个要点需要考虑。首先,选题应与计算机专业密切相关,并且符合当前行业的发展趋势。选择与专业紧密结合的选题,可以使你们更好地运用所学知识,并为未来的职业发展奠定基础。要考虑选题的实际可行性和创新性。选题应具备一定的实践意义和应用前景,能够解决实际问题或改善现有技术。

dcn网络与公网_电信运营商DCN网络的演变与规划方法(The evolution and plan method of DCN)...-程序员宅基地

文章浏览阅读3.4k次。摘要:随着电信业务的发展和电信企业经营方式的转变,DCN网络的定位发生了重大的演变。本文基于这种变化,重点讨论DCN网络的规划方法和运维管理方法。Digest: With the development oftelecommunication bussiness and the change of management of telecomcarrier , DCN’s role will cha..._电信dcn

动手深度学习矩阵求导_向量变元是什么-程序员宅基地

文章浏览阅读442次。深度学习一部分矩阵求导知识的搬运总结_向量变元是什么

月薪已炒到15w?真心建议大家冲一冲数据新兴领域,人才缺口极大!-程序员宅基地

文章浏览阅读8次。近期,裁员的公司越来越多今天想和大家聊聊职场人的新出路。作为席卷全球的新概念ESG已然成为当前各个行业关注的最热风口目前,国内官方发布了一项ESG新证书含金量五颗星、中文ESG证书、完整ESG考试体系、名师主讲...而ESG又是与人力资源直接相关甚至在行业圈内成为大佬们的热门话题...当前行业下行,裁员的公司也越来越多大家还是冲一冲这个新兴领域01 ESG为什么重要?在双碳的大背景下,ESG已然成...

对比传统运营模式,为什么越拉越多的企业选择上云?_系统上云的前后对比-程序员宅基地

文章浏览阅读356次。云计算快速渗透到众多的行业,使中小企业受益于技术变革。最近微软SMB的一项研究发现,到今年年底,78%的中小企业将以某种方式使用云。企业希望投入少、收益高,来取得更大的发展机会。云计算将中小企业信息化的成本大幅降低,它们不必再建本地互联网基础设施,节省时间和资金,降低了企业经营风险。科技创新已成时代的潮流,中小企业上云是创新前提。云平台稳定、安全、便捷的IT环境,提升企业经营效率的同时,也为企业..._系统上云的前后对比

esxi网卡直通后虚拟机无网_esxi虚拟机无法联网-程序员宅基地

文章浏览阅读899次。出现选网卡的时候无法选中,这里应该是一个bug。3.保存退出,重启虚拟机即可。1.先随便选择一个网卡。2.勾先取消再重新勾选。_esxi虚拟机无法联网

随便推点

在LaTeX中使用.bib文件统一管理参考文献_egbib-程序员宅基地

文章浏览阅读913次。在LaTeX中,可在.tex文件的同一级目录下创建egbib.bib文件,所有的参考文件信息可以统一写在egbib.bib文件中,然后在.tex文件的\end{document}前加入如下几行代码:{\small\bibliographystyle{IEEEtran}\bibliography{egbib}}即可在文章中用~\cite{}宏命令便捷的插入文内引用,且文章的Reference部分会自动排序、编号。..._egbib

Unity Shader - Predefined Shader preprocessor macros 着色器预处理宏-程序员宅基地

文章浏览阅读950次。目录:Unity Shader - 知识点目录(先占位,后续持续更新)原文:Predefined Shader preprocessor macros版本:2019.1Predefined Shader preprocessor macros着色器预处理宏Unity 编译 shader programs 期间的一些预处理宏。(本篇的宏介绍随便看看就好,要想深入了解,还是直接看Unity...

大数据平台,从“治理”数据谈起-程序员宅基地

文章浏览阅读195次。本文目录:一、大数据时代还需要数据治理吗?二、如何面向用户开展大数据治理?三、面向用户的自服务大数据治理架构四、总结一、大数据时代还需要数据治理吗?数据平台发展过程中随处可见的数据问题大数据不是凭空而来,1981年第一个数据仓库诞生,到现在已经有了近40年的历史,相对数据仓库来说我还是个年轻人。而国内企业数据平台的建设大概从90年代末就开始了,从第一代架构出现到..._数据治理从0搭建

大学抢课python脚本_用彪悍的Python写了一个自动选课的脚本 | 学步园-程序员宅基地

文章浏览阅读2.2k次,点赞4次,收藏12次。高手请一笑而过。物理实验课别人已经做过3、4个了,自己一个还没做呢。不是咱不想做,而是咱不想起那么早,并且仅有的一次起得早,但是哈工大的服务器竟然超负荷,不停刷新还是不行,不禁感慨这才是真正的“万马争过独木桥“啊!服务器不给力啊……好了,废话少说。其实,我的想法很简单。写一个三重循环,不停地提交,直到所有的数据都accepted。其中最关键的是提交最后一个页面,因为提交用户名和密码后不需要再访问其..._哈尔滨工业大学抢课脚本

english_html_study english html-程序员宅基地

文章浏览阅读4.9k次。一些别人收集的英文站点 http://www.lifeinchina.cn (nice) http://www.huaren.us/ (nice) http://www.hindu.com (okay) http://www.italki.com www.talkdatalk.com (transfer)http://www.en8848.com.cn/yingyu/index._study english html

Cortex-M3双堆栈MSP和PSP_stm32 msp psp-程序员宅基地

文章浏览阅读5.5k次,点赞19次,收藏78次。什么是栈?在谈M3堆栈之前我们先回忆一下数据结构中的栈。栈是一种先进后出的数据结构(类似于枪支的弹夹,先放入的子弹最后打出,后放入的子弹先打出)。M3内核的堆栈也不例外,也是先进后出的。栈的作用?局部变量内存的开销,函数的调用都离不开栈。了解了栈的概念和基本作用后我们来看M3的双堆栈栈cortex-M3内核使用了双堆栈,即MSP和PSP,这极大的方便了OS的设计。MSP的含义是Main..._stm32 msp psp

推荐文章

热门文章

相关标签