1 定义登录组件
![](https://i-blog.csdnimg.cn/blog_migrate/63d1279e6792187d0b94bcfe083b841c.png)
2 通过router.js渲染到app.vue当中
![](https://i-blog.csdnimg.cn/blog_migrate/2a17aa2a66c3881de27b1dd97475bd8c.png)
3 在根组件中放一个路由的占位符:
通过路由匹配到的组件都会渲染到 router-view当中进行展示
![](https://i-blog.csdnimg.cn/blog_migrate/b301171182ba223d4a4df6041d51eda2.png)
4 测试:
![](https://i-blog.csdnimg.cn/blog_migrate/398ffff5e10fd433b9d25779ba02aaef.png)
5只有用户访问根路径(/),就让他重定向到login上(/login)
![](https://i-blog.csdnimg.cn/blog_migrate/da2a9897bb776c6d0c22871393b5e85f.png)
main.js中:
启动报错1:
![](https://i-blog.csdnimg.cn/blog_migrate/a283c852d86989432548cf560392bbd8.png)
没有安装 vue-router,注意看看在进行 npm 安装的时候,使用的文件位置是否正确(在项目目录下安装才对)
![](https://i-blog.csdnimg.cn/blog_migrate/fe95c7ff97bd8e1d0ca3770f3a07ac17.png)
vue-router 要指定版本,否则会报错:Cannot read properties of undefined (reading 'install')
启动报错2:
Vue报错:Unknown custom element: router-view - did you register the component correctly
Unknown custom element: <router-view> - did you register the component correctly?_咸鱼肥美妖娆的博客-CSDN博客
7 添加背景
![](https://i-blog.csdnimg.cn/blog_migrate/6b4e055830fc5ebdff104ebdb450031f.png)
![](https://i-blog.csdnimg.cn/blog_migrate/357d5c612af541e0041ad0aa42fb14d3.png)
没有安装less
![](https://i-blog.csdnimg.cn/blog_migrate/495923f2f936f5477ae95989737e08ca.png)
![](https://i-blog.csdnimg.cn/blog_migrate/7a099989cc3964b651bb8366ac737069.png)
记得重启服务器
![](https://i-blog.csdnimg.cn/blog_migrate/7a1702e8eb6c1e108900c9516a4963c5.png)
或者:
第三步:安装less和less-loader
在vue项目打开终端,进入项目安装(我记得less好像全局安装没用,每个vue项目要单独安装)
less目前的最高版本是5+,但保险起见,我们还是安装4+比较好(我不知道安装5+会不会报错)
npm install less@4 --save-dev
less-loader的版本号要搭配webpack的版本号来选择,webpack@4+可以选择的less-loader版本是5~7(忘记在哪里查到的了,不确定一定是对的,不过我安7是没问题的)
npm install less-loader@7 --save-dev
第四步:使用less
完成less的安装后,我们只需要在style节点上加上lang=‘less’,就可以使用less语法了
<style lang='less' scoped>
</style>
8 创建全局样式表
![](https://i-blog.csdnimg.cn/blog_migrate/af141c3061a4ef5ca7fcc6b67b419877.png)
![](https://i-blog.csdnimg.cn/blog_migrate/0f1470cdb194a53a5db854b1ee666470.png)
![](https://i-blog.csdnimg.cn/blog_migrate/60b68f98ba5c5555a1ff141d3461dbb2.png)
给页面设置背景, 可以给大盒子添加样式
测试:
![](https://i-blog.csdnimg.cn/blog_migrate/abac706a7d86fca4bf3745cf5ac92a6b.png)
9 绘制盒子
![](https://i-blog.csdnimg.cn/blog_migrate/542980cd5d429ed80dd602b4e51ef2e3.png)
![](https://i-blog.csdnimg.cn/blog_migrate/a4fb897527100168d585e7d1b0b8d563.png)
10 登录组件头部布局
<img src="@/assets/logo.png" alt="" />
现在的脚手架可以直接使用@
![](https://i-blog.csdnimg.cn/blog_migrate/dab3ef1afa8d5b9193f0fe29f989e5ad.png)
![](https://i-blog.csdnimg.cn/blog_migrate/0c1ffc2407bc4a01be41896d07746bf1.png)
<template>
<div class="login_container">
<div class="login-box">
<div class="avatar_box">
<img src="@/assets/logo.png" alt="" />
</div>
</div>
</div>
</template>
<script>
export default {
name: 'my-login'
}
</script>
<style lang="less" scoped>
.login_container{
background-color: #2b4b6b;
height: 100%;
}
.login-box{
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 450px;
height: 300px;
background-color: #fff;
border-radius: 3px;
.avatar_box {
position: absolute;
left: 50%;
transform: translate(-50%, -50%);
padding: 10px;
width: 130px;
height: 130px;
border: 1px solid #eee;
border-radius: 50%;
box-shadow: 0 0 10px #ddd;
background-color: #fff;
img {
width: 100%;
height: 100%;
border-radius: 50%;
background-color: #eeeeee;
}
}
}
</style>
11 登录组件表单布局
首先下载element-ui :
npm install --save element-ui
然后进行按需导入
11.1 按需导入
![](https://i-blog.csdnimg.cn/blog_migrate/5d0fd89c59f0f3f7f947d9dc392b256b.png)
![](https://i-blog.csdnimg.cn/blog_migrate/0a54e069266f3620beb316ef4cbf066c.png)
elementui是按需导入的:
![](https://i-blog.csdnimg.cn/blog_migrate/a10b9d19f46bce8432db47843d567042.png)
![](https://i-blog.csdnimg.cn/blog_migrate/4288ae5a3ecf48790f7cefda1e9e037a.png)
{
"presets": [["es2015", { "modules": false }]],
"plugins": [
[
"component",
{
"libraryName": "element-ui",
"styleLibraryName": "theme-chalk"
}
]
]
}
![](https://i-blog.csdnimg.cn/blog_migrate/f4568940ed00491fce2b9894cb7800ad.png)
import Vue from 'vue'
// 引入弹框提示组件 Message 需要全局引用 使用 Vue.prototype
import {
Button,
Form,
FormItem,
Input,
Message,
Container,
Header,
Aside,
Main,
Menu,
Submenu,
MenuItem,
Breadcrumb,
BreadcrumbItem,
Card,
Row,
Col,
Table,
TableColumn,
Switch,
Tooltip,
Pagination,
Dialog,
MessageBox,
Tag,
Tree,
Select,
Option,
Cascader,
Alert,
Tabs,
TabPane,
Steps,
Step,
CheckboxGroup,
Checkbox,
Upload,
Timeline,
TimelineItem
} from 'element-ui'
Vue.use(Button)
Vue.use(Form)
Vue.use(FormItem)
Vue.use(Input)
Vue.use(Container)
Vue.use(Input)
Vue.use(Header)
Vue.use(Aside)
Vue.use(Main)
Vue.use(Menu)
Vue.use(MenuItem)
Vue.use(Submenu)
Vue.use(Breadcrumb)
Vue.use(BreadcrumbItem)
Vue.use(Card)
Vue.use(Row)
Vue.use(Col)
Vue.use(Table)
Vue.use(TableColumn)
Vue.use(Switch)
Vue.use(Tooltip)
Vue.use(Pagination)
Vue.use(Dialog)
Vue.use(Tag)
Vue.use(Tree)
Vue.use(Select)
Vue.use(Option)
Vue.use(Cascader)
Vue.use(Alert)
Vue.use(Tabs)
Vue.use(TabPane)
Vue.use(Steps)
Vue.use(Step)
Vue.use(Checkbox)
Vue.use(CheckboxGroup)
Vue.use(Upload)
Vue.use(Timeline)
Vue.use(TimelineItem)
Vue.prototype.$message = Message
Vue.prototype.$confirm = MessageBox.confirm
3 在 main.js当中导入
![](https://i-blog.csdnimg.cn/blog_migrate/14a86749f3d7c8679973c891e6d96159.png)
Can't resolve 'element-ui'如果没有安装,安装命令:
npm install --save element-ui
4 查看效果:
![](https://i-blog.csdnimg.cn/blog_migrate/e715a59071832927635e77f67e20a02a.png)
label-width控制文本宽度,去掉就没有宽度了
input宽度 需要通过 style设置 style="width:80%"
vscode element ui 提示 插件
我在vscode里找到了应该提示很强的elementUI提示库,Element UI Snippets。提示功能很强大。我就喜欢这种不需要怎么敲的插件,真的太好用了!
11.2 编写样式
![](https://i-blog.csdnimg.cn/blog_migrate/55791de99faad50f6f597b426d6fa69c.png)
![](https://i-blog.csdnimg.cn/blog_migrate/055a150e2a390d4a7467d272bc4f10ff.png)
或者:
![](https://i-blog.csdnimg.cn/blog_migrate/57ba7d64ea8d3e1758ccfceec0132e4b.png)
1 表单的位置: 通过给el-form添加class进行设置
2 按钮的位置: 可以添加el-row进行控制 <el-row type="flex" justify="end">
12 小图标布局
![](https://i-blog.csdnimg.cn/blog_migrate/5ed8b5fb036246bda0f77237c2f1f809.png)
![](https://i-blog.csdnimg.cn/blog_migrate/4acb52350e11c4c077b1913c934155b1.png)
![](https://i-blog.csdnimg.cn/blog_migrate/a03953225fc80bb9eb58e6c4fc029ca3.png)
12.2 导入用户名密码图片
因为element里边没有我们需要的图标,所以我们 用阿里的图标库
![](https://i-blog.csdnimg.cn/blog_migrate/1c4b1ac63b1a860786893f08b6e0ed18.png)
1 导入图标:导入到assets文件夹中
![](https://i-blog.csdnimg.cn/blog_migrate/193fd6960de3cda6eac2d3ed3cebcb66.png)
2 导入字体图标
![](https://i-blog.csdnimg.cn/blog_migrate/212d23a99a82ddc9c7f584f409de8966.png)
3 使用
![](https://i-blog.csdnimg.cn/blog_migrate/c1666e49522ad7f3889faf2c3b1847bc.png)
![](https://i-blog.csdnimg.cn/blog_migrate/b95367a1716eef0c6942f7e6d20e88b4.png)
![](https://i-blog.csdnimg.cn/blog_migrate/34ce4207e0b153ab882de8e916ffaff9.png)
有可能eslint 校验icon font的js报错,进行忽略
![](https://i-blog.csdnimg.cn/blog_migrate/1a4c4a58247f8e70eaedd4788f57e70c.png)
如果esllint校验iconfont.js失败, 忽略文件
![](https://i-blog.csdnimg.cn/blog_migrate/2e2c803b4b00b64e0d33d5930785bc2c.png)
===============
el-form
label-width控制文本宽度,去掉就没有宽度了
input宽度 需要通过 style设置 style="width:80%"
通过设置 label-position
属性可以改变表单域标签的位置,可选值为 top
、left
,当设为 top
时标签会置于表单域的顶部
多选和单选
input添加 按钮
input当中包含一个el-button
<el-input placeholder="请输入内容">
<el-button slot="append" icon="el-icon-search"></el-button>
</el-input>
设置宽度:
栏栅布局: 分24分 使用el-row el-col 来划分
间隔 :gutter =20