蓝漠涵 2023-08-16 23:39 采纳率: 37.5%
浏览 16

vue3中使用element-plus的弹窗组件,引用复选框组件双向绑定值不生效?

vue3中使用element-plus的弹窗组件,引用复选框组件双向绑定值不生效?
代码如下:

<template>
    <el-dialog v-model="dialogVisible" title="新增角色" width="600px">

        <el-form ref="roleRef" :rules="roleRules" :model="roleForm" label-width="120px">
            <el-form-item label="角色名称" prop="roleName">
                <el-input v-model="roleForm.roleName" placeholder="请输入角色名称" />
            </el-form-item>
            <el-form-item label="权限字符" prop="rolePerm">
                <el-input v-model="roleForm.rolePerm" placeholder="请输入权限字符" />
            </el-form-item>
            <el-form-item label="状态" prop="enabled">
                <el-radio-group v-model="roleForm.enabled">
                    <el-radio :label="item.v" v-for="item in statusCheck" :key="item.v">{{ item.name }}</el-radio>
                </el-radio-group>
            </el-form-item>
            <el-form-item label="菜单权限">
                <div class="tree-menu">
                    <el-checkbox label="展开/折叠" v-model="permission.openAll" @change="toggleOpenAll" />
                    <el-checkbox label="全选/全不选" v-model="permission.selectAll" @change="toggleSelectAll" />
                    <el-checkbox label="父子(联动/不联动)" v-model="permission.linkage" />
                    <el-tree class="tree-box mt10" ref="menuTreeRef" :props="permission.treeProps"
                        :data="permission.treeList" :check-strictly="!permission.linkage"
                        :default-expand-all="permission.openAll" show-checkbox node-key="id"
                        @check-change="handleCheckChange" />
                </div>
            </el-form-item>
            <el-form-item label="备注">
                <el-input type="textarea" maxlength="200" v-model="roleForm.descript" placeholder="请输入内容" />
            </el-form-item>
        </el-form>
        <template #footer>
            <span class="dialog-footer">
                <el-button @click="dialogVisible = false">取消</el-button>
                <el-button type="primary" @click="submit">
                    确认
                </el-button>
            </span>
        </template>
    </el-dialog>
</template>

<script setup>
import { ref, reactive, onBeforeMount } from 'vue'
import { roleAdd } from '@/api/system/role'
import { menuTree } from "@/api/system/menu";

const roleForm = reactive({
    roleName: "",//角色名称
    rolePerm: "",//角色权限编码
    enabled: '1',//是否启用(0:禁用;1:启用)
    descript: '',//描述
    permissionIds: []//菜单ID
})
const roleRules = {
    roleName: [{ required: true, trigger: "blur", message: "请输入角色名称" }],
    rolePerm: [{ required: true, trigger: "blur", message: "请输入角色权限编码" }],
};
// 展开
const toggleOpenAll = (e) => {
    permission.openAll = e
    console.log('展开', permission.openAll);
}
// 全选
const toggleSelectAll = (e) => {
    console.log('全选', e);
    permission.selectAll = e;
}
// 权限树dom
const menuTreeRef = ref();
// 控制菜单树
const permission = reactive({
    openAll: false,
    selectAll: false,
    linkage: true,
    treeList: [],
    treeProps: {
        label: 'name'
    }
})
const handleCheckChange = (data,
    checked,
    indeterminate) => {
    console.log('选择一项', data, checked, indeterminate)

}
onBeforeMount(async () => {
    let res = await menuTree()
    permission.treeList = res.data
    console.log('菜单树', res.data);
})
const statusCheck = reactive([{ name: '启用', v: '1' }, { name: '禁用', v: '0' }])

// console.log(roleForm.enabled);
const checkList = ref(['Option A'])
const dialogVisible = ref(true)

const show = () => {
    dialogVisible.value = true
}
const roleRef = ref(null);
const emit = defineEmits(['myclick'])
const submit = () => {
    roleRef.value.validate(async (valid) => {
        if (valid) {
            let res = await roleAdd(roleForm)
            console.log('新增成功', res);
            dialogVisible.value = false
            ElMessage.success('新增成功')
            emit('myclick')
        } else {
            console.log('error submit!')
            return false
        }
    })
}


// 向外暴露属性和方法
defineExpose({
    dialogVisible,
    show,

});

</script>

<style lang="scss" scoped>
.tree-menu {
    width: 100%;
}

.tree-box {
    border: 1px solid #dcdfe6;
}
</style>

img

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-08-17 08:46
    关注

    【相关推荐】




    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 8月16日

悬赏问题

  • ¥15 微软硬件驱动认证账号申请
  • ¥15 有人知道怎么在R语言里下载Git上的miceco这个包吗
  • ¥15 GPT写作提示指令词
  • ¥20 如何在cst中建立这种螺旋扇叶结构
  • ¥20 根据动态演化博弈支付矩阵完成复制动态方程求解和演化相图分析等
  • ¥20 关于DAC输出1.000V对分辨率和精度的要求
  • ¥20 想写一个文件管理器,加载全部子文件夹后,要一级一级返回
  • ¥15 华为超融合部署环境下RedHat虚拟机分区扩容问题
  • ¥15 哪位能做百度地图导航触点播报?
  • ¥15 请问GPT语言模型怎么训练?