NodeJS Vue2 ElementUI
- 高保真还原效果图,具体文字内容也需要保持和效果图一致;
- 工程可运行,运行后,呈现还原效果
- 首页REMADE.md 结合自身项目情况作说明介绍
npm install
npm run start
npm run build
运行成功后,浏览器输入指定地址(默认http://localhost:8080/),进入考核页面。
为保证界面效果,登录后请进入
全屏
预览(默认按F11
),为了演示Loading效果增加使用了setTimeout
。
根据原型图,结合实际项目,修改elemenUI
主题颜色。
修改src/themes/white/variables.scss
中的主体颜色、统一elementUI
风格
$--color-primary: #1d4691 !default;
导入需要的iconfont
和文字字体文件、同时在src/themes/white/theme.scss
和src/themes/black/theme.scss
对字体进行引用。
@font-face{
font-family: 'ProximaNovaBold';
src: url(../icons/ProximaNova-Bold.ttf)format("truetype");;
font-style: normal;
font-weight: normal;
}
│ ├──assets
| ├──├── style
| ├──│ ├── base
| ├──│ │ └── reset.scss 全局样式、重置默认样式文件
| ├──│ ├── helper
| ├──│ │ ├── mixin.scss 混合(Mixin)文件
| ├──│ │ └── screen.scss 响应式分辨率样式文件
| ├──│ ├── special
| ├──│ │ ├── animation.scss 动画样式文件
| ├──│ │ ├── element-ui.scss 修改element-ui样式文件
| ├──│ │ └── iconfont.scss 修改iconfont文件
| ├──│ ├── themes
| ├──│ │ ├── black.scss 夜晚模式样式文件
| ├──│ │ ├── theme.scss 皮肤公共样式
| ├──│ │ ├── variables.scss 全局通用样式文件
| ├──│ │ └── white.scss 白天样式文件
| ├──│ ├── index.scss
需要 在 vue.config.js 文件中进行打包配置
css: {
loaderOptions: {
sass: {
prependData: `@import "@/assets/styles/index.scss";`
}
}
},
分析整个页面布局为上下结构,主体部分左侧包括菜单和内容页,使用的container
布局容器进行布局。
<el-container class="layout-container">
<el-header >
<Header />
</el-header>
<el-container class="layout-main">
<el-aside width="250px" :class="{'hidden-aside':isSidebar}">
<SliderBar />
</el-aside>
<el-main>
<transition :name="transitionState" >
<router-view class="main">
</router-view>
</transition>
</el-main>
</el-container>
</el-container>
将基础页面
和 业务页面
分开
├─ src/
├─ components
├─ header-components
├─ close.app
├─ menu
├─ user-info
├─ ...
├─ views
├─ header
├─ ...
├─...
子组件预留slot
父组件可以进行填充
<div class="commom-tilte">
<p class="title">{{title}}</p>
<div class="operate-btn">
<slot name="add"></slot>
<slot name="delete"></slot>
</div>
</div>
可使用@mixin()
/*
* iconFont hover效果
* $hoverColor hover时的颜色
*/
@mixin iconFontHover($hoverColor) {
cursor: pointer;
&:hover {
color: $hoverColor;
}
}
.icon-power-off {
@include iconFontHover(#fff);
}
import Vue from 'vue';
Vue.filter('status-icon', (status: any) => {
if (status) {
return `iconfont icon-succeed`;
} else {
return `iconfont icon-defeated`;
}
});
在高保真还原效果图的前提下对考核进行的一些优化。
简单实现了页面数据的刷新、搜索、删除功能
实现方式
模拟数据存储在public/data.json文件
通过
Vuex
对数据进行简单的持久化对数据进行操作实现简单功能
F12
打开控制台、点击左上角手机标志可以进行手机模拟查看。也可以直接对浏览器窗口进行缩放操作查看。
实现方式
使用
flex
布局。使用
rem
对字体大小、宽、高、间距进行比例缩放。使用媒体查询元素@media screen 对不同分辨率模块显示做适配。
点击radio
按钮切换不同的主题
实现方式
准备俩套皮肤的公共样式皮肤。可看
src/assets/style/themes/theme.scss
。通过
sass
的map-get
方法对全局变量进行封装。通过body加载不同的class,加载对应的css文件实现换肤功能。
为了展示此效果、特意加了个定时器。
点击刷新
按钮可查看效果
实现方式
使用vue的
directives
。可看src/common/directives/
文件夹。通过
DirectiveOptions
暴露的接口进行DOME 的操作。给添加的DOME 编写样式。
main.ts 文件中对
directives
进行全局引用。在需要使用的地方进行使用
v-customLoading="loading"
可切换菜单查看效果
实现方式
路由中添加
meta
index
值。通过监听路由中
index
的的变化、判断当前路由方向。为
transition
标签添加name
属性。
相关CSS属性
animation
transform
background-clip