模块化开发: 创建Element控制面板

来自CloudWiki
跳转至: 导航搜索

效果图

Vue2022081001.png

页面主要参考:Element:Container布局容器中“实例:用布局容器做控制面板”

前期准备

创建项目

参考使用Hbuilder 创建Vue应用创建项目

安装Node.js

因为安装Element包需要npm 安装工具,

而后者是Node.js自带的,所以我们首先需要安装Node.js

安装方法参见:Windows 安装Node.js

安装Element

打开Windows命令提示符窗口,

切换到项目所在目录(如我的项目叫Hello123-2:

d:

cd D:\cloud\2022\Tech\element-ui\Hello123-2

执行 npm i element-ui -S

安装完成之后,会在node_modules目录下看到element-ui的包

也会在package.json中看到element-ui的有关应用:

{
  "name": "default",
  "version": "0.1.0",
  "private": true,
  "scripts": {
    "serve": "vue-cli-service serve",
    "build": "vue-cli-service build"
  },
  "dependencies": {
    "core-js": "^2.6.5",
    "element-ui": "^2.15.9",
    "vue": "^2.6.10"
  },
  "devDependencies": {
    "@vue/cli-plugin-babel": "^3.8.0",
    "@vue/cli-service": "^3.8.0",
    "vue-template-compiler": "^2.6.10"
  }
}


编写代码

目录结构

Vue2022080901.png

以下内容参考 Element:Container布局容器中“实例:用布局容器做控制面板”的代码进行了改写,

代码基本类似,只不过应用工程化思维把他们分拆了一下。

public/index.html

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <link rel="icon" href="<%= BASE_URL %>favicon.ico">

    <title>default</title>
  </head>
  <body>
    <noscript>
      <strong>We're sorry but default doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
    </noscript>
    <div id="app"></div>
    <!-- built files will be auto injected -->
  </body>
</html>

APP.vue

App.vue: 项目入口文件

将下述内容覆盖至app.vue原有内容。

下述内容主要分为三部分,html模板,scrpit代码, css代码,

这一个文件相当于创建了一个vue模块,并通过export default输出,以供其他文件使用。

export default作用可参考: vue中的export default

<template>
  <div id="app">
			<el-container style="height: 700px; border: 1px solid #eee">

				<Aside></Aside>

				<el-container>
					<Header></Header>
					<Main></Main>					
					<el-footer></el-footer>
				</el-container>
			</el-container>
  </div>
</template>

<script>
import HelloWorld from './components/HelloWorld.vue'
import Aside from './components/Aside.vue'
import Header from './components/Header.vue'
import Main from './components/Main.vue'
// const item = {
// 				date: '2016-05-02',
// 				name: '马小虎',
// 				address: '上海市普陀区金沙江路 1518 弄'
// 			};
export default {
  name: 'app',
  components: {
    HelloWorld,
	Aside,
	Header,
	Main
  },
 //  data() {
 //     return {
	// 	tableData: Array(20).fill(item)
	// }
  
 //  }
}

		
</script>


<style>

</style>

Aside组件

components/Aside.vue:

<template>
	<el-aside width="250px" style="background-color: #545c64;color:#FFF">
		<h3>丝路通供应商数据中台</h3>
		<el-menu :default-openeds="['1', '3']" default-active="2" class="el-menu-vertical-demo"
			background-color="#545c64" text-color="#fff" active-text-color="#ffd04b">
			<el-submenu index="1">
				<template slot="title"><i class="el-icon-message"></i>整体行情</template>
				<el-menu-item-group>
					<template slot="title">分组一</template>
					<el-menu-item index="1-1">选项1</el-menu-item>
					<el-menu-item index="1-2">选项2</el-menu-item>
				</el-menu-item-group>
				<el-menu-item-group title="分组2">
					<el-menu-item index="1-3">选项3</el-menu-item>
				</el-menu-item-group>
				<el-submenu index="1-4">
					<template slot="title">选项4</template>
					<el-menu-item index="1-4-1">选项4-1</el-menu-item>
				</el-submenu>
			</el-submenu>
			<el-submenu index="2">
				<template slot="title"><i class="el-icon-menu"></i>产品搜索</template>
				<el-menu-item-group>
					<template slot="title">分组一</template>
					<el-menu-item index="2-1">选项1</el-menu-item>
					<el-menu-item index="2-2">选项2</el-menu-item>
				</el-menu-item-group>
				<el-menu-item-group title="分组2">
					<el-menu-item index="2-3">选项3</el-menu-item>
				</el-menu-item-group>
				<el-submenu index="2-4">
					<template slot="title">选项4</template>
					<el-menu-item index="2-4-1">选项4-1</el-menu-item>
				</el-submenu>
			</el-submenu>
			<el-submenu index="3">
				<template slot="title"><i class="el-icon-setting"></i>高级搜索</template>
				<el-menu-item-group>
					<template slot="title">分组一</template>
					<el-menu-item index="3-1">选项1</el-menu-item>
					<el-menu-item index="3-2">选项2</el-menu-item>
				</el-menu-item-group>
				<el-menu-item-group title="分组2">
					<el-menu-item index="3-3">选项3</el-menu-item>
				</el-menu-item-group>
				<el-submenu index="3-4">
					<template slot="title">选项4</template>
					<el-menu-item index="3-4-1">选项4-1</el-menu-item>
				</el-submenu>
			</el-submenu>
			<el-submenu index="4">
				<template slot="title"><i class="el-icon-setting"></i>选品调研</template>
				<el-menu-item-group>
					<template slot="title">分组一</template>
					<el-menu-item index="3-1">选项1</el-menu-item>
					<el-menu-item index="3-2">选项2</el-menu-item>
				</el-menu-item-group>
				<el-menu-item-group title="分组2">
					<el-menu-item index="3-3">选项3</el-menu-item>
				</el-menu-item-group>
				<el-submenu index="3-4">
					<template slot="title">选项4</template>
					<el-menu-item index="3-4-1">选项4-1</el-menu-item>
				</el-submenu>
			</el-submenu>
			<el-submenu index="5">
				<template slot="title"><i class="el-icon-setting"></i>利润对比</template>
				<el-menu-item-group>
					<template slot="title">分组一</template>
					<el-menu-item index="3-1">选项1</el-menu-item>
					<el-menu-item index="3-2">选项2</el-menu-item>
				</el-menu-item-group>
				<el-menu-item-group title="分组2">
					<el-menu-item index="3-3">选项3</el-menu-item>
				</el-menu-item-group>
				<el-submenu index="3-4">
					<template slot="title">选项4</template>
					<el-menu-item index="3-4-1">选项4-1</el-menu-item>
				</el-submenu>
			</el-submenu>
		</el-menu>
	</el-aside>
</template>

<script>
	export default {
		name: 'Aside',
		}
</script>

<style>
			.el-header {
				background-color: #B3C0D1;
				color: #333;
				line-height: 60px;
			}

			.el-aside {
				color: #333;

			}
</style>

Header组件

components/Header.vue:

<template>
	<el-header style="text-align: right; font-size: 12px">
		<el-dropdown>
			<i class="el-icon-setting" style="margin-right: 15px"></i>
			<el-dropdown-menu slot="dropdown">
				<el-dropdown-item>查看</el-dropdown-item>
				<el-dropdown-item>新增</el-dropdown-item>
				<el-dropdown-item>删除</el-dropdown-item>
			</el-dropdown-menu>
		</el-dropdown>
		<span>王小虎</span>
	</el-header>
</template>

<script>
	export default {
		name: 'Header',
	}
</script>

<style>
	.el-header {
		background-color: #B3C0D1;
		color: #333;
		line-height: 60px;
	}
</style>

Main组件

components/Main组件:

<template>
	<el-main>
		<el-table :data="tableData">
			<el-table-column prop="date" label="日期" width="140">
			</el-table-column>
			<el-table-column prop="name" label="姓名" width="120">
			</el-table-column>
			<el-table-column prop="address" label="地址">
			</el-table-column>
		</el-table>
	</el-main>
</template>

<script>
	const item = {
					date: '2016-05-02',
					name: '马小虎',
					address: '上海市普陀区金沙江路 1518 弄'
				};
	export default {
		name: 'Main',
		data() {
		   return {
			tableData: Array(20).fill(item)
			}
		
		}
	}
</script>

<style>
</style>

main.js

main.js: 项目的核心文件。

这里由它来创建实例,绑定页面节点。

render函数可参考:vue中的render函数

这里主要是添加了这么几行,引用了Elment UI:

import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
Vue.use(ElementUI);

具体代码:

import Vue from 'vue'
import App from './App.vue'
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';


Vue.use(ElementUI);

Vue.config.productionTip = false

new Vue({
  render: h => h(App),
 
}).$mount('#app')


运行项目

Vue2022080703.png

浏览器打 开地址localhost:8080

如果一一切正常,会看到如下画面

Vue2022081002.png