---11111111111111111111
---
title: virgox-global前端项目文档
date: 2020-07-03 09:25:00
author: lautin <1538731090@qq.com>
summary: 该文档用于技术分享,项目说明和工作交接,不得商用!
categories: Markdown
tags:
- Typora
- Markdown
node版本:14.16.1
npm版本:6.14.12
---
---
# 项目架构
## 框架环境
`virgox-global`,以下简称`VG` ,基于`vue-cli3+`开发,使用`MPA`结构,整站分为以下几个页面:
+ 首页
+ 现货交易
+ 合约交易:包含**永续合约**和**外汇合约**
+ 理财
+ 联系我们
+ 学院:包含**入口展示**、**分类列表**和**详情页**
+ 登录模块:**登录页**、**注册页**、**忘记(重置)密码**
+ 个人中心:资产、合约账户、理财账户、资金划转、现货委托、合约委托、充提记录、账号安全等
每个页面维护一套独立的`SPA`环境,拥有自己的`模板文件`、`入口文件`、`路由模块` 等,其他文件如:静态资源、工具包、接口模块为公用。页面之间为**超级链接**连接,页面内为**`hash`**路由,为达到兼容目的,将每个`SPA`设为`history`模式 :
```javascript
// router/index.js 文件
export default new VueRouter({
mode: 'history',
base: process.env.BASE_URL,
routes
})
```
采用`MPA`是为了更好的对每个页面进行**差异化**管理,虽然页面的总体结构相同,但细节差别很多,总体来说体现在以下几个方面:
+ 网页头部`SEO` 以及页面所需的依赖环境不同
+ 页面头部样式不尽相同,有包含`背景色`,有包含`背景图`,并且背景图往往自头部渗透到内容区,和当前页面的耦合度高。
+ 移动端适配的需求不同,除了基本的视口外,部分页面需要特殊处理:例如 登陆、注册页、文章详情页等
有了`MPA` ,我们可以定制不同的`HTML`模板满足不同页面的需求,例如:在登陆页面,头部和内容区放在一个容器 设置整体的背景,并且头部单独设置了移动端的下拉菜单`aside`
```html
<% include('../src/assets/html/header.tpl') %>
```
### vue/cli@3
+ `vue/cl3`配置多页面的步骤:
1. `vue.config.js ` 的`pages`选项中 添加一条记录,例如:
```javascript
login: {
entry: "src/login.js", // 入口文件
template: "public/login.html", // 模板文件
filename: "login.html", // 生成文件
chunks: ['chunk-vendors', 'chunk-common', 'login'] // 公共和第三方模块提取
}
```
2. 进入`/public`添加一个模板文件,如上配置的`login.html`,模板文件可以参照其他页面来写
3. 进入`/src`添加一个入口文件,如上配置的`login.js`,这里面的配置同样参照其他页面
4. 在`/src/router`中添加路由文件,并设置该页面的路由入口
+ `vue/cli3`接入的是`vue`中间配置,不直接匹配`webpack`,具体的配置项需要参照官方文档`配置参考`。如果要检查`vuecli`配置结果,可以通过`vue inspect`指令导出到文件,默认根目录中已经存在`output.js`
### elementUI
UI框架选型为`ELEMNET`,为了适配当前站点风格,我们改写了element样式。虽然ELEMENT本身可以定制主题,但功能有限且调试麻烦,因此我们选择手动重置`element`默认样式,即`src/assets/style/Common/ele.less`文件。
## 公共头尾
虽然每个页面头和尾的样式有所区别,但总体而言,结构和内容是相同的。为了便于维护,需要将它们提取为公共文件。公共文件中只包含基本样式,页面的特定样式还需要在每个模板文件中单独处理,例如 上面`login.html`中重置头部的背景图片:
```html
```
公共文件作为静态资源放入`src/assets/html`目录中,默认扩展名`.tpl`。模板文件通常是`.html`,但服务端部署缓存时 可能是统一设置html文件, 为了与其他html资源区分,这里特别改为`.tpl`,**勿动**。
公共头尾文件,虽然放置于`src`打包目录,但它是以`模板引擎方式`的方式加载,而不在打包资源(入口文件)中,因此不能以`vue`环境编码。模板为`html`单页面应用环境,头尾部的动画和数据交互使用`jquery`,需要注意以下几点:
+ 头部样式遵循`BEM`规范,并且将导航封装为**样式组件**,用法参见`src/assets/style/common/components.less`
+ 头尾的样式为全局加载,无需手动引入。样式文件目录同导航组件一起:`~/header.less`和`~/footer.less`
+ 头尾的国际化,使用`jquery.$i18n` ,该库存在一个`bug` -- 每次总是先查找`strings.properties`文件配置再查询相应的语言包。解决办法是,将所有变量在`strings.properties`中复制一份,默认空值,避免查询不到返回错误。当然如果你觉得这样不够优雅 也可以修改它的源码,不过需要谨慎操作。
# 规范说明
## 代码工具
编辑器推荐使用`vscode`,安装一下插件:
+ vue-helper 支持方法跳转
+ vue-format
+ vue 语法高亮
+ html snippets 支持管理各种类型的html文档 包括.tpl .art .html等
## 命名规范
+ `html`和`css`样式的**属性名**、**类名**等不得大写,可以是小驼峰,建议使用`-`来连接多个逻辑断点,例如:`login-form`、`login-button`
+ `css`尽量做到可扩展,每个组件至少需要一个模块名。模块布局和内容结构使用`__`来标记;模块状态、主题相关的结构使用`--`标记。例如:`nav-item`、`nav-item__title`、`nav-item--active`。
+ 国际化变量名应当使用**小写**, 当存在多个逻辑断点时,可以用`_`来连接,例如:`no_login_tips` 、`start_trade_now`
+ 目录和文件名通常小写,逻辑组件(`.vue`)和类文件可以使用大写。`vue`组件在`html`文件中推荐使用小写的标签引入,例如:
```html