8.5 KiB
8.5 KiB
Element UI 配置指南
本文档提供了在项目中正确使用Element UI的配置步骤和最佳实践,替代之前的Tailwind CSS方案。
Element UI 简介
Element UI 是一套基于 Vue 2.0 的桌面端组件库,提供了丰富的UI组件,可以快速构建美观、一致的用户界面。对于我们的图片收集小程序后台管理页面,Element UI提供了完善的PC端组件支持,非常适合构建企业级应用界面。
配置步骤
方法一:使用CDN引入(适合原型开发)
-
在HTML文件头部引入Element UI
<!-- 引入Vue.js --> <script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.min.js"></script> <!-- 引入Element UI CSS --> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/element-ui@2.15.8/lib/theme-chalk/index.css"> <!-- 引入Element UI JavaScript --> <script src="https://cdn.jsdelivr.net/npm/element-ui@2.15.8/lib/index.js"></script> <!-- 引入Element UI 图标库 --> <link rel="stylesheet" href="https://cdn.bootcdn.net/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"> -
初始化Vue实例
<script> new Vue({ el: '#app', data: { // 数据定义 }, methods: { // 方法定义 } }) </script>
方法二:使用npm安装(适合生产环境)
-
初始化项目
npm init -y -
安装依赖
npm install vue@2.6.14 element-ui@2.15.8 -
在项目入口文件中引入Element UI
// main.js import Vue from 'vue' import ElementUI from 'element-ui' import 'element-ui/lib/theme-chalk/index.css' Vue.use(ElementUI) new Vue({ el: '#app', render: h => h(App) })
核心组件使用示例
1. 布局组件
<div id="app">
<!-- 后台管理页面布局 -->
<el-container>
<!-- 侧边栏导航 -->
<el-aside width="200px">
<el-menu :default-active="activeIndex" class="el-menu-vertical">
<el-submenu index="1">
<template slot="title">
<i class="fa fa-users"></i>
<span>用户管理</span>
</template>
<el-menu-item index="1-1">用户列表</el-menu-item>
<el-menu-item index="1-2">角色权限</el-menu-item>
</el-submenu>
<el-submenu index="2">
<template slot="title">
<i class="fa fa-building"></i>
<span>部门管理</span>
</template>
<el-menu-item index="2-1">部门结构</el-menu-item>
</el-submenu>
<!-- 更多菜单项 -->
</el-menu>
</el-aside>
<el-container>
<!-- 顶部导航 -->
<el-header>
<div class="flex justify-between items-center">
<div class="text-lg font-medium">图片收集管理系统</div>
<div class="flex items-center">
<el-dropdown>
<span class="el-dropdown-link">
<i class="fa fa-bell-o"></i>
</span>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item>通知1</el-dropdown-item>
<el-dropdown-item>通知2</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
<div class="ml-4">管理员</div>
</div>
</div>
</el-header>
<!-- 主内容区 -->
<el-main>
<!-- 页面内容 -->
</el-main>
</el-container>
</el-container>
</div>
2. 表格组件(适合数据管理页面)
<el-table :data="tableData" style="width: 100%">
<el-table-column prop="id" label="ID" width="80"></el-table-column>
<el-table-column prop="name" label="名称"></el-table-column>
<el-table-column prop="status" label="状态">
<template slot-scope="scope">
<el-tag :type="scope.row.status === 'active' ? 'success' : 'danger'">
{{ scope.row.status === 'active' ? '启用' : '禁用' }}
</el-tag>
</template>
</el-table-column>
<el-table-column prop="createTime" label="创建时间"></el-table-column>
<el-table-column label="操作" width="150">
<template slot-scope="scope">
<el-button size="small" @click="handleEdit(scope.row)">编辑</el-button>
<el-button size="small" type="danger" @click="handleDelete(scope.row)">删除</el-button>
</template>
</el-table-column>
</el-table>
<!-- 分页组件 -->
<el-pagination
layout="prev, pager, next"
:total="total"
:page-size="10"
@current-change="handleCurrentChange"
></el-pagination>
3. 表单组件
<el-form :model="formData" :rules="rules" ref="form">
<el-form-item label="名称" prop="name">
<el-input v-model="formData.name"></el-input>
</el-form-item>
<el-form-item label="描述">
<el-input type="textarea" v-model="formData.description"></el-input>
</el-form-item>
<el-form-item label="状态">
<el-switch v-model="formData.status"></el-switch>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitForm('form')">提交</el-button>
<el-button @click="resetForm('form')">重置</el-button>
</el-form-item>
</el-form>
<script>
new Vue({
el: '#app',
data: {
formData: {
name: '',
description: '',
status: true
},
rules: {
name: [
{ required: true, message: '请输入名称', trigger: 'blur' },
{ min: 2, max: 20, message: '长度在 2 到 20 个字符', trigger: 'blur' }
]
}
},
methods: {
submitForm(formName) {
this.$refs[formName].validate((valid) => {
if (valid) {
this.$message.success('提交成功!');
// 提交表单数据
} else {
this.$message.error('请检查表单信息');
return false;
}
});
},
resetForm(formName) {
this.$refs[formName].resetFields();
}
}
})
</script>
4. 图片上传组件
<el-upload
action="#"
list-type="picture-card"
:on-preview="handlePictureCardPreview"
:on-remove="handleRemove"
:before-upload="beforeUpload"
multiple
>
<i class="el-icon-plus"></i>
</el-upload>
<el-dialog :visible.sync="dialogVisible">
<img width="100%" :src="dialogImageUrl" alt="">
</el-dialog>
<script>
new Vue({
el: '#app',
data: {
dialogImageUrl: '',
dialogVisible: false
},
methods: {
handleRemove(file, fileList) {
console.log(file, fileList);
},
handlePictureCardPreview(file) {
this.dialogImageUrl = file.url;
this.dialogVisible = true;
},
beforeUpload(file) {
const isJPG = file.type === 'image/jpeg' || file.type === 'image/png';
const isLt2M = file.size / 1024 / 1024 < 2;
if (!isJPG) {
this.$message.error('上传图片只能是 JPG/PNG 格式!');
}
if (!isLt2M) {
this.$message.error('上传图片大小不能超过 2MB!');
}
return isJPG && isLt2M;
}
}
})
</script>
响应式设计
Element UI 提供了响应式工具类,可以适配不同的屏幕尺寸:
<div class="el-col-xs-24 el-col-sm-12 el-col-md-8 el-col-lg-6">
<!-- 在不同屏幕尺寸下有不同的宽度 -->
</div>
自定义主题
Element UI 支持自定义主题,可以通过以下方式修改:
-
使用在线主题生成工具 访问 Element UI 官方主题生成器,生成自定义主题包。
-
通过SCSS变量自定义
// 引入官方样式文件 @import "~element-ui/packages/theme-chalk/src/index"; // 修改变量 $--color-primary: #1989fa; $--color-success: #67c23a; $--color-warning: #e6a23c; $--color-danger: #f56c6c; $--color-info: #909399;
生产环境注意事项
-
按需引入:在生产环境中,可以使用 babel-plugin-component 实现按需引入,减小打包体积
npm install babel-plugin-component -D配置 .babelrc:
{ "presets": ["@babel/preset-env"], "plugins": [ [ "component", { "libraryName": "element-ui", "styleLibraryName": "theme-chalk" } ] ] } -
CDN优化:使用稳定的CDN源,如BootCDN,提高加载速度和稳定性
-
组件缓存:对于频繁使用的组件,可以考虑缓存策略,提高性能
-
按需加载路由:结合Vue Router的路由懒加载,提高应用启动速度