1.【Element Plus】

1. Element Plus 快速入门

Element:是饿了么团队研发的,基于 Vue 3,面向设计师和开发者的组件库。
组件:组成网页的部件,例如 超链接、按钮、图片、表格、表单、分页条等等。
官网:https://element-plus.org/zh-CN/#/zh-CN

准备工作
(1) 创建一个工程化的 vue 项目 npm init vue@latest
(2) 参照官方文档,安装 Element Plus 组件库(在当前工程的目录下):npm install element-plus --save

在这里插入图片描述

在这里插入图片描述

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

在这里插入图片描述

//将自动生成的main.js中的内容全部替换
import { createApp } from 'vue'//导入vue
import ElementPlus from 'element-plus'//导入element-plus
import 'element-plus/dist/index.css'//导入element-plus的样式
import App from './App.vue'//导入App.vue

const app = createApp(App)//创建应用实例

app.use(ElementPlus)//使用element-plus
app.mount('#app')//控制html元素

制作组件

(1) 访问 Element官方文档

在这里插入图片描述

(2) 复制组件代码

在这里插入图片描述

(3) 根据需要进行调整

<script lang="ts" setup>
import {
  Check,
  Delete,
  Edit,
  Message,
  Search,
  Star,
} from '@element-plus/icons-vue'
</script>

<template>
    <el-row class="mb-4">
      <el-button>Default</el-button>
      <el-button type="primary">Primary</el-button>
      <el-button type="success">Success</el-button>
      <el-button type="info">Info</el-button>
      <el-button type="warning">Warning</el-button>
      <el-button type="danger">Danger</el-button>
    </el-row>
  
    <el-row class="mb-4">
      <el-button plain>Plain</el-button>
      <el-button type="primary" plain>Primary</el-button>
      <el-button type="success" plain>Success</el-button>
      <el-button type="info" plain>Info</el-button>
      <el-button type="warning" plain>Warning</el-button>
      <el-button type="danger" plain>Danger</el-button>
    </el-row>
  
    <el-row class="mb-4">
      <el-button round>Round</el-button>
      <el-button type="primary" round>Primary</el-button>
      <el-button type="success" round>Success</el-button>
      <el-button type="info" round>Info</el-button>
      <el-button type="warning" round>Warning</el-button>
      <el-button type="danger" round>Danger</el-button>
    </el-row>
  
    <el-row>
      <el-button :icon="Search" circle />
      <el-button type="primary" :icon="Edit" circle />
      <el-button type="success" :icon="Check" circle />
      <el-button type="info" :icon="Message" circle />
      <el-button type="warning" :icon="Star" circle />
      <el-button type="danger" :icon="Delete" circle />
    </el-row>
  </template>

在 API 中,还有属性等可以设置:

在这里插入图片描述

<script lang="ts" setup>
import {
  Check,
  Delete,
  Edit,
  Message,
  Search,
  Star,
} from '@element-plus/icons-vue'
</script>

<template>
    <el-row class="mb-4">
      <el-button>Default</el-button>
      <!--设置属性-->
      <el-button type="primary" disabled="true">编辑</el-button>
      <el-button type="success" loading="true">查看</el-button>
    </el-row>
  
    <el-row class="mb-4">
      <el-button type="info" plain>Info</el-button>
      <el-button type="warning" plain>Warning</el-button>
      <el-button type="danger" plain>Danger</el-button>
    </el-row>
  </template>

在这里插入图片描述

在 App.vue 中引入 Button.vue

<script setup>
  import ButtonVue from "./Button.vue"
</script>

<template>
  <ButtonVue/>
</template>

2. 常用组件

2.1 表格

(1) 找到表格组件

在这里插入图片描述

下面以基础表格为例来进行演示:

在这里插入图片描述

(2) 复制表格组件的代码

<script lang="ts" setup>
const tableData = [
    {
        date: '2016-05-03',
        name: 'Tom',
        address: 'No. 189, Grove St, Los Angeles',
    },
    {
        date: '2016-05-02',
        name: 'Tom',
        address: 'No. 189, Grove St, Los Angeles',
    },
    {
        date: '2016-05-04',
        name: 'Tom',
        address: 'No. 189, Grove St, Los Angeles',
    },
    {
        date: '2016-05-01',
        name: 'Tom',
        address: 'No. 189, Grove St, Los Angeles',
    },
]
</script>

<template>
    <el-table :data="tableData" style="width: 100%">
        <el-table-column prop="date" label="Date" width="180" />
        <el-table-column prop="name" label="Name" width="180" />
        <el-table-column prop="address" label="Address" />
    </el-table>
</template>  

(3) 修改原始的表格代码

<script lang="ts" setup>

// 准备表格所需的数据
import {// 导入表格最后一列的图标
    Delete,
    Edit,
} from '@element-plus/icons-vue'

const tableData = [
    {
        title: '标题1',
        category: '时事',
        time: '2000-01-01',
        state: '已发布'
    },
    {
        title: '标题1',
        category: '时事',
        time: '2000-01-01',
        state: '已发布'
    },
    {
        title: '标题1',
        category: '时事',
        time: '2000-01-01',
        state: '已发布'
    },
    {
        title: '标题1',
        category: '时事',
        time: '2000-01-01',
        state: '已发布'
    },
    {
        title: '标题1',
        category: '时事',
        time: '2000-01-01',
        state: '已发布'
    }
]
</script>

<template>
    <!-- 表格 -->
    <!-- :data属性为表格绑定数据,绑定的数据为tableData -->
    <el-table :data="tableData" style="width: 100%">
        <!-- prop属性给每一列绑定每一条数据里面指定属性的值 -->
        <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-row>
                <el-button type="primary" :icon="Edit" circle />
                <el-button type="danger" :icon="Delete" circle />
            </el-row>
        </el-table-column>
    </el-table>
</template>  

<style scoped>
</style>

在这里插入图片描述

2.2 分页条

(1) 找到分页条组件

在这里插入图片描述

(2) 复制分页条组件的代码

在这里插入图片描述

(3) 修改代码

在这里插入图片描述

main.js 中导入中文环境,不然分页条上的文字是英文

在这里插入图片描述

<script lang="ts" setup>

// 准备分页条所需的数据
import { ref } from 'vue'

const currentPage4 = ref(2)
const pageSize4 = ref(5)
const small = ref(false)
const background = ref(false)
const disabled = ref(false)

const handleSizeChange = (val: number) => {
    console.log(`${val} items per page`)
}
const handleCurrentChange = (val: number) => {
    console.log(`current page: ${val}`)
}

</script>

<template>
    <!-- 分页条 -->
    <!-- v-model:current-page 当前展示的第几页 -->
    <!-- v-model:page-size 每页默认展示的条数 -->
    <!-- page-sizes下拉选择每页显示的条数 -->
    <!-- small 分页条显示的大小 -->
    <!-- disabled分页条是否禁用 -->
    <!-- layout控制分页条的显示顺序/布局 -->
    <!-- total 总条数,正常来说会绑定一个变量 -->
    <!-- @size-change="handleSizeChange": 修改每页显示的条数时,回调的函数是handleSizeChange -->
    <!-- @current-change="handleCurrentChange": 当点击了页签或前往第几页后,回调的函数是handleCurrentChange -->
    <!-- 这两个函数的参数分别是每页显示的条数和当前页 -->
    <el-pagination 
        class="el-p" 
        v-model:current-page="currentPage4" 
        v-model:page-size="pageSize4"
        :page-sizes="[5, 10, 15, 20]" 
        :small="small" 
        :disabled="disabled" 
        :background="background"
        layout="jumper, total, sizes, prev, pager, next" 
        :total="20" 
        @size-change="handleSizeChange"
        @current-change="handleCurrentChange" />
    
</template>  

<style scoped>
/* 分页条的样式 */
.el-p {
    margin-top: 20px;
    display: flex;
    justify-content: flex-end;/*右对齐*/
}
</style>

在这里插入图片描述

2.3 表单

(1) 找到表单组件

在这里插入图片描述

(2) 复制表单组件的代码

<script lang="ts" setup>

// 表单所需的数据
import { reactive } from 'vue'

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

const onSubmit = () => {
  console.log('submit!')
}
</script>

<template>
    <el-form :inline="true" :model="formInline" class="demo-form-inline">
        <el-form-item label="Approved by">
            <el-input v-model="formInline.user" placeholder="Approved by" clearable />
        </el-form-item>
        <el-form-item label="Activity zone">
            <el-select v-model="formInline.region" placeholder="Activity zone" clearable>
                <el-option label="Zone one" value="shanghai" />
                <el-option label="Zone two" value="beijing" />
            </el-select>
        </el-form-item>
        <el-form-item label="Activity time">
            <el-date-picker v-model="formInline.date" type="date" placeholder="Pick a date" clearable />
        </el-form-item>
        <el-form-item>
            <el-button type="primary" @click="onSubmit">Query</el-button>
        </el-form-item>
    </el-form>
</template>  

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

.demo-form-inline .el-select {
  --el-select-width: 220px;
}
</style>

(3) 修改原始的表单代码

<script lang="ts" setup>

// 准备表单所需的数据
import { reactive } from 'vue'

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

const onSubmit = () => {
  console.log('submit!')
}

</script>

<template>
    <!-- 表单 -->
    <el-form :inline="true" :model="formInline" class="demo-form-inline">
        <!-- 在下拉选择时,两个下拉表单最终展示的内容是相同的
        这是因为两个下拉列表绑定的都是formInline.region数据
        实际开发中只要将二者绑定上不同的数据就不会出现该问题了 -->
        <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>
            <!-- type控制按钮的样式 -->
            <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>
    
</template>  

<style scoped>
/* 下拉列表的样式 */
.demo-form-inline .el-input {
  --el-input-width: 220px;
}

.demo-form-inline .el-select {
  --el-select-width: 220px;
}
</style>

在这里插入图片描述

2.4 卡片

(1) 找到卡片组件

在这里插入图片描述

(2) 复制卡片组件的代码

<script lang="ts" setup>

</script>

<template>
    <el-card class="box-card">
        <template #header>
            <div class="card-header">
                <span>Card name</span>
                <el-button class="button" text>Operation button</el-button>
            </div>
        </template>
        <div v-for="o in 4" :key="o" class="text item">{{ 'List item ' + o }}</div>
        <template #footer>Footer content</template>
    </el-card>
</template>  

<style scoped>

</style>

(3) 修改代码

<script lang="ts" setup>

</script>

<template>
    <el-card class="box-card">
        <div class="card-header">
            <span>文章管理</span>
            <el-button type="primary" >发布文章</el-button>
        </div>
        <!-- 分隔线 -->
        <div style="margin-top: 20px;">
            <hr/>
        </div>
        <!-- 其他内容也写到卡片里面 -->
    </el-card>
</template>  

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

在这里插入图片描述

3. 案例整合

最终效果:

在这里插入图片描述

main.js

import { createApp } from 'vue'//导入vue
import ElementPlus from 'element-plus'//导入element-plus
import 'element-plus/dist/index.css'//导入element-plus的样式
import App from './App.vue'//导入App.vue
// 导入中文语言环境
import locale from 'element-plus/dist/locale/zh-cn.js'

const app = createApp(App)//创建应用实例

app.use(ElementPlus, {locale})//使用element-plus
app.mount('#app')//控制html元素

App.vue

<script setup>
  import ArticleVue from "./Article.vue"
</script>

<template>
  <ArticleVue/>
</template>

Article.vue

<script lang="ts" setup>

// 准备表单所需的数据
import { reactive } from 'vue'

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

const onSubmit = () => {
  console.log('submit!')
}

// 准备分页条所需的数据
import { ref } from 'vue'

const currentPage4 = ref(2)
const pageSize4 = ref(5)
const small = ref(false)
const background = ref(false)
const disabled = ref(false)

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: '2000-01-01',
        state: '已发布'
    },
    {
        title: '标题1',
        category: '时事',
        time: '2000-01-01',
        state: '已发布'
    },
    {
        title: '标题1',
        category: '时事',
        time: '2000-01-01',
        state: '已发布'
    },
    {
        title: '标题1',
        category: '时事',
        time: '2000-01-01',
        state: '已发布'
    },
    {
        title: '标题1',
        category: '时事',
        time: '2000-01-01',
        state: '已发布'
    }
]
</script>

<template>
    <!-- 卡片 -->
    <el-card class="box-card">
        <div class="card-header">
            <span>文章管理</span>
            <el-button type="primary" >发布文章</el-button>
        </div>
        <!-- 分隔线 -->
        <div style="margin-top: 20px;">
            <hr/>
        </div>
        <!-- 其他内容也写到卡片里面 -->

        <!-- 表单 -->
        <el-form :inline="true" :model="formInline" class="demo-form-inline">
        <!-- 在下拉选择时,两个下拉表单最终展示的内容是相同的
        这是因为两个下拉列表绑定的都是formInline.region数据
        实际开发中只要将二者绑定上不同的数据就不会出现该问题了 -->
        <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>
            <!-- type控制按钮的样式 -->
            <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>

    <!-- 表格 -->
    <!-- :data属性为表格绑定数据,绑定的数据为tableData -->
    <el-table :data="tableData" style="width: 100%">
        <!-- prop属性给每一列绑定每一条数据里面指定属性的值 -->
        <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-row>
                <el-button type="primary" :icon="Edit" circle />
                <el-button type="danger" :icon="Delete" circle />
            </el-row>
        </el-table-column>
    </el-table>

    <!-- 分页条 -->
    <!-- v-model:current-page 当前展示的第几页 -->
    <!-- v-model:page-size 每页默认展示的条数 -->
    <!-- page-sizes下拉选择每页显示的条数 -->
    <!-- small 分页条显示的大小 -->
    <!-- disabled分页条是否禁用 -->
    <!-- layout控制分页条的显示顺序/布局 -->
    <!-- total 总条数,正常来说会绑定一个变量 -->
    <!-- @size-change="handleSizeChange": 修改每页显示的条数时,回调的函数是handleSizeChange -->
    <!-- @current-change="handleCurrentChange": 当点击了页签或前往第几页后,回调的函数是handleCurrentChange -->
    <!-- 这两个函数的参数分别是每页显示的条数和当前页 -->
    <el-pagination 
        class="el-p" 
        v-model:current-page="currentPage4" 
        v-model:page-size="pageSize4"
        :page-sizes="[5, 10, 15, 20]" 
        :small="small" 
        :disabled="disabled" 
        :background="background"
        layout="jumper, total, sizes, prev, pager, next" 
        :total="20" 
        @size-change="handleSizeChange"
        @current-change="handleCurrentChange" />

    </el-card>
    
</template>  

<style scoped>
/* 卡片的样式 */
.card-header{
        display: flex;/*弹性盒布局*/
        justify-content: space-between;/*两端对齐,项目之间的间隔相等*/
    }

/* 下拉列表的样式 */
.demo-form-inline .el-input {
  --el-input-width: 220px;
}

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

/* 分页条的样式 */
.el-p {
    margin-top: 20px;
    display: flex;
    justify-content: flex-end;/*右对齐*/
}
</style>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值