Element — 快速开发模板(含ElementUI 与 ElementPlus)"将不定期更新"

277 阅读2分钟

ElementUI (V2)

Select 选择器

:label绑定的是页面需要的名称,:value绑定不显示的(一般绑定主键id或能显示唯一值) image.png

ElementPlus (V3)

Radio单选框

两种写法
都可以实现单选按钮,只不过第二种更能动态显示,只不过需要根据后端所获得的value值进行选中 image.png

<el-radio-group v-model="radio1" >
  <el-radio label="1"></el-radio>
  <el-radio label="2"></el-radio>
</el-radio-group>
//推荐:
<el-radio-group v-model="radio1" >
  <el-radio label="男"></el-radio>
  <el-radio label="女"></el-radio>
</el-radio-group>

Tree树形控件

已实现功能

  • 自定义内容
  • 删除顶级左侧icon图标

易错问题解决

elementui 修改组件样式无效问题

image.png

Element-ui-Tree组件无法出现横向滚动条

guoshengbo.github.io_2019_02_28_%E8%A7%A3%E5%86%B3Element-ui-Tree%E7%BB%84%E4%BB%B6%E6%97%A0%E6%B3%95%E5%87%BA%E7%8E%B0%E6%A8%AA%E5%90%91%E6%BB%9A%E5%8A%A8%E6%9D%A1_.png

自定义内容

主要代码 image.png

<script setup lang="ts">
import { onMounted } from 'vue';

interface Tree {
    id: string,
    label: string
    children?: Tree[]
}

const handleNodeClick = (data: Tree) => {
    console.log(data)
}

const data: Tree[] = [
    {
        id: 'ashdkashd',
        label: 'Level one 1',
        children: [
            {
                id: 'asdasd',
                label: 'Level two 1-1',
                children: [
                    {
                        id: 'asdasd',
                        label: 'Level three 1-1-1',
                    },
                ],
            },
        ],
    }
]

const defaultProps = {
    children: 'children',
    label: 'label',
    isLeaf: 'isLeaf',
    id: 'id'
}

onMounted(() => {
    updateclass()
})
</script>

<template>
    <div>
        <el-tree :data="data" :props="defaultProps" @node-click="handleNodeClick">
            <template v-slot="{ node, data }">
                <div v-if="node.level === 1" class="levelone equalclass">
                    <div>
                        <img alt="" src="src/images/父级.svg" style="width: 20px;height: 20px;">
                    </div>
                    <div style="">
                        {{ node.label }}
                    </div>
                </div>
                <div v-if="node.level === 2" class="equalclass" style="display: flex">
                    <div><img alt="" src="src/images/页签.svg" style="width: 20px;height: 20px;"></div>
                    <div>{{ node.label }}</div>
                </div>
                <div v-if="node.level === 3" class="equalclass" style="display: flex">
                    <div><img alt="" src="src/images/父级.svg" style="width: 20px;height: 20px;"></div>
                    <div><span>{{ node.label }} </span></div>
                </div>
            </template>
        </el-tree>
    </div>
</template>

<style scoped>
.levelone {
    margin-left: 15px;
    font-size: 18px !important;
}

.equalclass {
    display: flex;
    align-items: center;
    font-size: 18px;
}

.el-tree {
    min-width: 100%;
    display: inline-block !important;
}

.el-tree-node>.el-tree-node__children {
    overflow: visible;
}
</style>

删除顶级左侧icon图标

核心代码

image.png

<script setup lang="ts">
import { onMounted } from 'vue';

interface Tree {
    id: string,
    label: string
    children?: Tree[]
}

const handleNodeClick = (data: Tree) => {
    console.log(data)
}

const data: Tree[] = [
    {
        id: 'ashdkashd',
        label: 'Level one 1',
        children: [
            {
                id: 'asdasd',
                label: 'Level two 1-1',
                children: [
                    {
                        id: 'asdasd',
                        label: 'Level three 1-1-1',
                    },
                ],
            },
        ],
    }
]

const defaultProps = {
    children: 'children',
    label: 'label',
    isLeaf: 'isLeaf',
    id: 'id'
}

//关键代码
const updateclass = () => {
    const targetElement = document.querySelectorAll('.levelone');
    // targetElement.parentNode.querySelector('i').remove();
    // console.log(siblingElements);
    targetElement.forEach(element => {
        element.parentNode?.querySelector('i')?.remove();
    });
}

onMounted(() => {
    updateclass()
})
</script>

<template>
    <div>
        <el-tree :data="data" :props="defaultProps" @node-click="handleNodeClick">
            <template v-slot="{ node, data }">
                <div v-if="node.level === 1" class="levelone equalclass">
                    <div>
                        <img alt="" src="src/images/父级.svg" style="width: 20px;height: 20px;">
                    </div>
                    <div style="">
                        {{ node.label }}
                    </div>
                </div>
                <div v-if="node.level === 2" class="equalclass" style="display: flex">
                    <div><img alt="" src="src/images/页签.svg" style="width: 20px;height: 20px;"></div>
                    <div>{{ node.label }}</div>
                </div>
                <div v-if="node.level === 3" class="equalclass" style="display: flex">
                    <div><img alt="" src="src/images/父级.svg" style="width: 20px;height: 20px;"></div>
                    <div><span>{{ node.label }} </span></div>
                </div>
            </template>
        </el-tree>
    </div>
</template>

<style scoped>
.levelone {
    margin-left: 15px;
    font-size: 18px !important;
}

.equalclass {
    display: flex;
    align-items: center;
    font-size: 18px;
}

.el-tree {
    min-width: 100%;
    display: inline-block !important;
}

.el-tree-node>.el-tree-node__children {
    overflow: visible;
}
</style>