• vue3中el-tree的使用及后端传参


    实现效果:

    如上图所示,实现el-tree的基本使用,回显及联调。

    1.点击弹框弹出样式,node-key是id,与后端字段名对应

    1. <Dialog v-model="menuVisible" title="菜单分配">
    2. <el-tree
    3. :data="treeData"
    4. show-checkbox
    5. node-key="menuCode"
    6. :default-expanded-keys="expandKeys"
    7. :default-checked-keys="checkedKeys"
    8. :props="defaultProps"
    9. title="菜单分配"
    10. @check="boxCheck"
    11. ref="treeRef"
    12. />
    13. <template #footer>
    14. <ElButton
    15. v-if="actionType !== 'detail'"
    16. type="primary"
    17. :loading="saveLoading"
    18. @click="saveMenu"
    19. >
    20. {{ t('exampleDemo.save') }}
    21. </ElButton>
    22. <ElButton @click="menuVisible = false">{{ t('dialogDemo.close') }}</ElButton>
    23. </template>
    24. </Dialog>

    2.ref声明,label是文字显示,填写与后端返回数据文字对应的字段名

    3.点击按钮方法调用接口,展示数据或回显数据

    1. //菜单分配
    2. const menuAssignment = async (row: any) => {
    3. console.log(row, '表格数据')
    4. role1.value = row.roleCode
    5. menuVisible.value = true
    6. const res = await getTree()
    7. .catch(() => {})
    8. .finally(() => {})
    9. const res1 = await getMenuList({ roleCode: row.roleCode })
    10. .catch(() => {})
    11. .finally(() => {})
    12. if (res) {
    13. treeData.value = res.rows
    14. if (res1) {
    15. // 回显选中菜单
    16. let menuIds = res1.rows
    17. //避免获取不到getNode
    18. setTimeout(() => {
    19. menuIds.forEach((item: any) => {
    20. const node = treeRef.value.getNode(item)
    21. if (node.isLeaf) {
    22. treeRef.value.setChecked(item, true)
    23. chooseKeys.value.push(item)
    24. }
    25. })
    26. }, 100)
    27. }
    28. }
    29. }

    4.选中数据调用check方法,将选中的子节点和父节点连接起来存放到chooseKeys数组中

    1. const boxCheck = () => {
    2. let checkedKeys = treeRef.value.getCheckedKeys()
    3. let halfCheckedKeys = treeRef.value.getHalfCheckedKeys()
    4. chooseKeys.value = checkedKeys.concat(halfCheckedKeys)
    5. }

    5.点保存将数据传到后端(传参根据后端需求更改)

    1. //菜单保存
    2. const saveMenu = async () => {
    3. // const elTableExpose = await getElTableExpose()
    4. ElMessageBox.confirm('确定要保存吗?', '提醒', {
    5. confirmButtonText: '确定',
    6. cancelButtonText: '取消',
    7. type: 'warning'
    8. })
    9. .then(async () => {
    10. saveLoading.value = true
    11. const para = {
    12. roleCode: unref(role1),
    13. // ...multipleSelection.value
    14. rightCodes: chooseKeys.value
    15. }
    16. await saveMenuRole(para).finally(() => {
    17. saveLoading.value = false
    18. })
    19. ElMessage({
    20. type: 'success',
    21. message: '保存成功'
    22. })
    23. getList()
    24. menuVisible.value = false
    25. })
    26. .catch(() => {
    27. ElMessage({
    28. type: 'info',
    29. message: '保存失败'
    30. })
    31. menuVisible.value = false
    32. })
    33. }

    最后就完成啦

  • 相关阅读:
    流程控制结构及equal和随机函数
    猫树详解
    图像处理: 马赛克艺术
    丁鹿学堂:前端开发基础知识之像素详解
    FPGA面试题(4)(跨时钟域处理)
    2024年腾讯云优惠政策_腾讯云TOP10优惠活动
    Vue3 源码解读系列(十五)——编译
    用友NC及NC Cloud mxservlet反序列化漏洞复现
    linux主程序链接多个动态库时,若多个动态库之间存在相同的函数,则也正常调用
    Qt EventFilter 事件过滤器 及传递 鼠标键盘事件捕捉
  • 原文地址:https://blog.csdn.net/weixin_42166279/article/details/132845431