Element-Plus


Element-Plus

Element:饿了么团队开发的基于Vue3,面向设计师和开发者的组件库。

组件:组成网页的部件,例如 超链接、按钮、图片、表格、表单、分页条等。

官网:一个 Vue 3 UI 框架 | Element Plus (element-plus.org)

  • 快速入门
  • 常用组件

Element Plus 快速入门

准备工作:

  1. 创建一个工程化的 vue 项目

  2. 参照官方文档,安装 Element Plus 组件库(在当前工程的目录下):npm install element-plus --save

  3. main.js 中引入 Element Plus 组件库(参照官方文档)

    import { createApp } from 'vue' 
    import ElementPlus from 'element-plus'
    import 'element-plus/dist/index.css'
    import App from './App.vue'
    import locale from 'element-plus/dist/locale/zh-cn.js' //显示中文
    
    const app = createApp(App) // 创建实例
    
    app.use(ElementPlus, { locale }) // 使用 ElementPlus
    app.mount('#app') // 控制html元素

制作组件:

  1. 访问 Element 官方文档,复制组件代码,调整。

Element Plus 常用组件

表格

分页条

表单

卡片

案例


案例
<script lang="ts" setup>
import { reactive } from 'vue'

const formInline = reactive({
    user: '',
    region: '',
    date: '',
})

const onSubmit = () => {
    console.log('submit!')
}
import { ref } from 'vue'
import type { ComponentSize } from 'element-plus'
const currentPage = ref(1)
const pageSize = ref(5)
const size = ref<ComponentSize>('default')
const background = ref(false)
const disabled = ref(false)
const total = ref(20)

const handleSizeChange = (val: number) => {
    console.log(`${val} items per page`)
}
const handleCurrentChange = (val: number) => {
    console.log(`current page: ${val}`)
}
import {
    Delete,
    Edit
} from '@element-plus/icons-vue'

const tableData = [
    {
        title: '标题1',
        category: '时事',
        time: '2024-08-15',
        state: '已发布',
    },
    {
        title: '标题1',
        category: '时事',
        time: '2024-08-15',
        state: '已发布',
    },
    {
        title: '标题1',
        category: '时事',
        time: '2024-08-15',
        state: '已发布',
    },
    {
        title: '标题1',
        category: '时事',
        time: '2024-08-15',
        state: '已发布',
    },
]
</script>
<template>
    <el-card>
        <div class="card-header">
            <span>文章管理</span>
            <el-button type="primary" @click="onSubmit">发布文章</el-button>
        </div>
        <div style="margin-top: 20px;">
            <hr>
        </div>
        <el-form :inline="true" :model="formInline" class="demo-form-inline">
            <el-form-item label="文章分类:">
                <el-select v-model="formInline.region" placeholder="请选择" clearable>
                    <el-option label="时事" value="时事" />
                    <el-option label="篮球" value="篮球" />
                </el-select>
            </el-form-item>
            <el-form-item label="发布状态:">
                <el-select v-model="formInline.region" placeholder="请选择" clearable>
                    <el-option label="已发布" value="已发布" />
                    <el-option label="草稿" value="草稿" />
                </el-select>
            </el-form-item>
            <el-form-item>
                <el-button type="primary" @click="onSubmit">搜索</el-button>
            </el-form-item>
            <el-form-item>
                <el-button type="default" @click="onSubmit">重置</el-button>
            </el-form-item>
        </el-form>
        <el-table :data="tableData" style="width: 100%">
            <el-table-column prop="title" label="文章标题" />
            <el-table-column prop="category" label="分类" />
            <el-table-column prop="time" label="发布时间" />
            <el-table-column prop="state" label="状态" />
            <el-table-column label="操作" width="180">
                <el-button type="primary" :icon="Edit" circle />
                <el-button type="danger" :icon="Delete" circle />
            </el-table-column>
        </el-table>
        <el-pagination class="el-p" v-model:current-page="currentPage" v-model:page-size="pageSize"
            :page-sizes="[5, 10, 15, 20]" :size="size" :disabled="disabled" :background="background"
            layout="jumper, total, sizes, prev, pager, next" :total="total" @size-change="handleSizeChange"
            @current-change="handleCurrentChange" />
    </el-card>

</template>
<style scoped>
.el-p {
    margin-top: 20px;
    display: flex;
    justify-content: flex-end;
}

.demo-form-inline .el-input {
    --el-input-width: 220px;
}

.demo-form-inline .el-select {
    --el-select-width: 220px;
}

.card-header {
    display: flex;
    justify-content: space-between;
}
</style>

文章作者: nusqx
文章链接: https://nusqx.top
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 nusqx !
评论
  目录