弹框组件el-tree+vue3必坑指南
1.使用递归的方式实现数组、对象的深拷贝2.js获取url的参数
3.弹框组件el-tree+vue3必坑指南
4.在Vue 3中,与Vue 2相比,有一些改进和优化的diff算法。5.浏览器解析html6.浏览器渲染HTML7.Object.entries()8.vue实现虚拟dom转换成真是dom的原理9.全局封装组件处理并发请求不连续的loading10.为什么vue数组下标修改监听不到11.vue里表单验证的v-model.number的坑12.有意思的css13.js原生语音转文字14.js手写一个call15.js手写一个apply16. 手写一个 bind 方法17.js寄生组合式继承18.react中的useState修改状态获取最新状态值19.函数柯里化js20.axios请求中断_下载中断和下载进度21.axios请求重试_核心原理22.axios请求重试_axios-retry插件23.虚拟列表-渲染 10 万条数据24.vue-office 组件25.threejs26.把原生 DOM 标签转换后加入到 3D 场景空间中显示27.three.js 物体要使用光线投射技术,计算是否点击位置与物体有交叉28.threejs基本函数29.二分查找算法30.js判断字符串是否连贯31.世界坐标系和模型坐标系32.设置车模型中每个小物体 castShadow = true33.Vue3 echarts 组件化使用 resizeObserver34.网页验证码的作用 *网页中几种常见验证码35.多个装饰器一起es6装饰器36.flex属性37.移动端兼容问题38.那什么是URL、URI、URN?39.threejs的坐标渲染和着色40.着色器41.基于 three.js 加载器分别加载模型42.echarts自适应大屏方案 亲测有用43.有趣的工具44.关于threejs中鼠标左右移动,左动看右边,右动看左边45.有趣的知识点threejs46.uniapp底层跨端原理47.防止XSS(跨站脚本攻击)漏洞48.启动vite和electron项目配置多个主进程49.margin-bottom:-1px无效的问题50.九宫格css51.css伪类选择器52.uniapp关于uni.getUserProfile的使用53.uniapp获取用户信息54.在项目中使用UEditor碰到的几个问题55.一维数组转二位数组56.使用此函数对数组进行分块,并在最后一组添加特定的值57.如果win报错无法加载文件 C:\Users\xx\AppData\Roaming\npm\pnpm.ps1,因为在此系统上禁止运行脚本58.阅读时间缓存(快应用)59.uniapp中OnShow获取缓存60.之前使用抖音的担保支付,后俩转换成通用的交易方式61.width:100%与width:auto区别62.leetcode1047字符串反复去重(栈)63.由于<textarea>在某些平台上会创建一个原生控件,这可能会导致层级问题,尤其是在安卓设备上。在uni-app中,对于这种情况,通常推荐的解决方案是使用<cover-view>组件来覆盖原生组件,但是这种做法通常用于覆盖地图、视频等原生组件,而不是<textarea>64.记录一次uniapp使用scrollview65.微前端(矩阵项目)代码将单个文件合并到指定分支66.推荐一个炫酷爆炸例子67.思维导图推荐包68.自适应高度的过渡69.自定义滚动条边角70.实现下划线动画71.js不同类型比较72.css73.sse74.ECMAScript 语言规范每年都会进行一次更新,而备受期待的 ECMAScript 2024 将于 2024 年 6 月正式亮相。目前,ECMAScript 2024 的候选版本已经发布,为我们带来了一系列实用的新功能。75.前端scale负数表示翻转76.关于小说阅读前端翻页插件推荐turn.js77.数组扁平化78.Vue-Plugin-HiPrint79.好玩的vue组件80.DOMRect对象81.js中关于return和if条件处理82.关于文心一言不能打开F12开发者工具83.js文字处理两端展示中间省略号84.[popover, select] el-popover内有select的时候在选择后会自动关闭85.说一下flex的属性86.vue3中404路由匹配规则87.shape-outside88.createRange表示文档中的一个范围——用于js判断文字添加省略号情况89.uniapp+vue3 使用list触底+下拉90.diff算法vue91.动态修改manifest.json92.记录一下大小写导致的问题93.微信小程序关于小说类使用官方阅读器94.VS Code侧边栏的“资源管理器”丢了95.nestjs中服务引入控制器和模块的作用点击查看代码
<script setup lang="ts">
import { ref, reactive, computed, onBeforeMount } from 'vue'
import { menuPage, addRole, getRole, updateRole } from '@/utils/api/role'
import { ElTree } from 'element-plus'
import type Node from 'element-plus/es/components/tree/src/model/node'
interface Isex {
createBy: String
createTime: Number
id: String
remark: String
sort: Number
k: String
v: String
typeId: String
updateBy: String
updateTime: Number
}
let emit = defineEmits()
let props = defineProps<{
id?: string
show: boolean
}>()
const id = ref(props.id)
const formRef = ref(null)
let form = reactive({
roleName: '',
rolePerm: '',
enabled: 1,
descript: '',
})
let _show = computed({
get() {
return props.show
},
set(value) {
emit('update:show', value)
},
})
//控制菜单树
const permission = reactive({
openAll: false,
selectAll: false,
linkage: true,
treeList: [],
})
const treeRef = ref<InstanceType<typeof ElTree>>()
const onCancel = () => {
_show.value = false
}
const defaultProps = {
children: 'children',
label: 'name',
}
const toggleTreeCollapse = (value) => {
const nodes = treeRef.value.store.nodesMap
for (let i in nodes) {
nodes[i].expanded = value
}
}
const toggleTreeChecked = (value) => {
if (value) {
console.log('permission.linkage', permission.linkage)
permission.treeList.map((m) => {
treeRef.value?.setChecked(m, true, true)
})
} else {
treeRef.value?.setCheckedKeys([])
}
}
const toggleTreeCheckedFs = (value) => {
permission.linkage = value
}
const normalizeData = (list) => {
// parentId 和 id 有联系 parentId为-1是一级列表
let newArr = []
let mapObj = {}
list.forEach((m) => {
mapObj[m.id] = m
})
list.forEach((mn) => {
if (mn.id === '-1') {
return newArr.push(mn)
}
const parObj = mapObj[mn.parentId]
if (parObj) {
parObj.children.push(mn)
} else {
newArr.push(mn)
}
})
return newArr
}
onBeforeMount(async () => {
let {
data: { records },
} = await menuPage({ current: 1, size: 1000 })
// permission.treeList = records
// 数据处理tree
let treeLists = normalizeData(records)
permission.treeList = treeLists
})
</script>
<template>
<div class="roleEditor-page">
<el-dialog
:modelValue="_show"
width="600px"
:title="id ? '修改' : '新增'"
:append-to-body="true"
:destroy-on-close="true"
>
<el-form v-model="form" ref="formRef">
<el-form-item label="角色名称" prop="roleName">
<el-input placeholder="请输入角色名称" v-model="form.roleName" />
</el-form-item>
<el-form-item label="权限字符" prop="rolePerm">
<el-input placeholder="请输入权限字符" v-model="form.rolePerm" />
</el-form-item>
<el-form-item label="状态" prop="rolePerm">
<el-radio-group v-model="form.enabled">
<el-radio :label="1">启用</el-radio>
<el-radio :label="0">禁用</el-radio>
</el-radio-group>
</el-form-item>
<!-- start -->
<el-form-item label="菜单权限">
<div class="checkB">
<el-checkbox
v-model="permission.openAll"
@change="toggleTreeCollapse"
>
展开/折叠
</el-checkbox>
<el-checkbox
v-model="permission.selectAll"
@change="toggleTreeChecked"
>全选/全不选</el-checkbox
>
<el-checkbox
v-model="permission.linkage"
@change="toggleTreeCheckedFs"
>父子(联动/不联动)
</el-checkbox>
<el-tree
ref="treeRef"
:data="permission.treeList"
:check-strictly="!permission.linkage"
show-checkbox
node-key="id"
:props="defaultProps"
class="treeB"
/>
</div>
</el-form-item>
<!-- end -->
<el-form-item label="备注" prop="descript">
<el-input
type="textarea"
placeholder="请输入内容"
v-model="form.descript"
:maxlength="200"
show-word-limit
/>
</el-form-item>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="onCancel">取消</el-button>
<el-button type="primary">确认 </el-button>
</span>
</template>
</el-dialog>
</div>
</template>
<style lang="scss" scoped>
.checkB {
width: 100%;
}
.treeB {
margin-top: 0.5rem;
background-color: #fff;
border: 1px solid #dcdfe6;
border-radius: 4px;
}
</style>
本文来自博客园,作者:jialiangzai,转载请注明原文链接:https://www.cnblogs.com/zsnhweb/articles/17677919.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!