vue前端架构说明书模板示例

news2024/11/15 18:07:49

目录

1. 技术说明... 2

1.1 版本明细... 2

1.2 核心技术介绍... 2

2. 项目结构说明... 3

3. 自动化部署设置说明... 5

4. 打包及运行说明... 5

5. 导包说明... 6

5.1 方案一... 6

5.2 方案二... 7

5.3 补充说明... 7

6. 修改本地运行时链接的服务器说明... 7

7. 常用开发说明... 7

7.1 新增view.. 7

7.2 新增api 7

7.3 新增组件... 7

7.4 新增样式... 8

7.5 路由配置... 8

7.6 请求流程... 9

8. 菜单配置说明... 10

1. 技术说明

1.1 版本明细

介绍

技术

版本

前端项目运行时环境

Node

13.14.0

前端项目框架

Vue-cli

2.6.12

前端项目UI框架

element-ui

2.15.9

发送http请求依赖

axios

0.24.0

前端路由依赖

vue-router

3.4.9

全局状态管理器依赖

vuex

3.6.0

图表展示依赖

echarts

4.9.0

Word预览依赖

docx-preview

0.1.4

1.2 核心技术介绍

npmnode.js的包管理工具,用于统一管理我们前端项目中需要用到的包、插件、工具、命令等,便于开发和维护。

ES62015年发布Javascript的新版本,ECMAScript6的简称。利用ES6我们可以简化我们的JS代码,同时利用其提供的强大功能来快速实现JS逻辑。

vue-cliVue的脚手架工具,用于自动生成Vue项目的目录及文件。

axios:一个基于promise的网络请求库,作用于node.js和浏览器中,它是isomorphic(即同一套代码可以运行在浏览器和node.js)。在服务端它使用原生node.js http模块, 而在客户端(浏览端)则使用XMLHttpRequest

vue-routerVue提供的前端路由工具,利用其我们实现页面的路由控制,局部刷新及按需加载,构建单页应用,实现前后端分离。

vuexVue提供的状态管理工具,用于统一管理我们项目中各种数据的交互和重用,存储我们需要用到数据对象。

element-ui:基于MVVM框架Vue开源出来的一套前端ui组件。

2. 项目结构说明

├── build // 构建相关

├── bin // 执行脚本

├── public // 公共文件

│ ├── download // 模板下载文件

│ ├── favicon.ico // favicon图标

│ └── index.html // html模板

│ └── robots.txt // 反爬虫

├── src // 源代码

│ ├── api // 所有请求接口

│ ├── assets // 主题 字体等静态资源

│ ├── components // 全局公用组件

│ ├── directive // 全局指令

│ ├── layout // 布局

│ ├── plugins // 通用方法

│ ├── router // 路由

│ ├── store // 全局store管理

│ ├── utils // 全局公用方法

│ ├── views // 页面

│ ├── App.vue // 入口页面

│ ├── main.js // 入口 加载组件 初始化等

│ ├── permission.js // 权限管理

│ └── settings.js // 系统配置

├── .editorconfig // 编码格式

├── .env.dev // 开发测试环境配置

├── .env.development // 开发环境配置

├── .env.release // 生产环境配置

├── .env.simulate // 压力测试环境配置

├── .env.sit // sit测试环境配置

├── .env.uat // uat测试环境配置

├── .eslintignore // 忽略语法检查

├── .eslintrc.js // eslint 配置项

├── .gitignore // git 忽略项

├── babel.config.js // babel兼容配置

├── deploy.js // 自动化部署配置

├── package-lock.json // 依赖版本信息

├── package.json // 项目基本信息

└── vue.config.js // vue-cli配置

3. 自动化部署设置说明

使用scp2实现自动化上传及部署,使用shh2实现对服务器的文件操作,配置文件路径为/deploy.js

  1. host: "", //服务器IP
  2. port: 22, //服务器端口
  3. username: "", //服务器ssh登录用户名
  4. password: "", //服务器ssh登录密码
  5. delete:
  6. `cd /home/pes/projects/` + //进入到服务器上项目所处位置
  7. `\nmv pes-dev pes-dev-${filename}-replace` + //将现有项目进行名称修改
  8. `\nmv pes-dev-${filename}-replace record/`, //将完成修改的项目放入到record文件夹进行备份
  9. filePath: "dist/pes-dev", //打包后的文件所处的文件目录,会将目录下所有文件部署到服务器
  10. path: "/home/pes/projects/pes-dev", //项目文件的具体路径

如果想添加一个新的服务器进行自动化部署,则应该在temp对象中添加对应的名字,并配置相关信息,同时需要在package.json文件中的scripts属性中增加对应的执行语句,当然亦可以直接使用node命令进行操作。

4. 打包及运行说明

执行前需要启动命令行窗口,进入到与package.jsont同级的目录,启动scripts对象中的任意一个属性值。

  1. "dev": "vue-cli-service serve", //项目运行
  2. "build": "vue-cli-service build --mode dev", //打包dev测试环境
  3. "build:prod": "vue-cli-service build  --mode sit", //打包sit测试环境
  4. "build:sit": "vue-cli-service build  --mode sit", //打包sit测试环境
  5. "build:dev": "vue-cli-service build --mode dev", //打包dev测试环境
  6. "build:uat": "vue-cli-service build --mode uat", //打包uat测试环境
  7. "build:rel": "vue-cli-service build --mode release", //打包生产环境
  8. "preview": "node build/index.js --preview", //预览
  9. "lint": "eslint --ext .js,.vue src", //执行eslint
  10. "auto": "vue-cli-service build --mode dev --report && vue-cli-service build --mode sit --report && cross-env TARGET=dev node ./deploy.js && cross-env TARGET=sit node ./deploy.js", //自动打包及部署dev测试和sit测试环境
  11. "auto:dev": "vue-cli-service build --mode dev --report && cross-env TARGET=dev node ./deploy.js", //自动打包及部署dev测试环境
  12. "auto:sit": "vue-cli-service build --mode sit --report && cross-env TARGET=sit node ./deploy.js", // 自动打包及部署sit测试环境
  13. "auto:uat": "vue-cli-service build --mode uat && cross-env TARGET=uat node ./deploy.js", // 自动打包及部署uat测试环境
  14. "auto:simulate": "vue-cli-service build --mode simulate && cross-env TARGET=simulate node ./deploy.js", // 自动打包及部署压力测试环境
  15. "deploy:dev": "cross-env TARGET=dev node ./deploy.js", // 自动部署dev打包文件至dev测试环境
  16. "deploy:sit": "cross-env TARGET=sit node ./deploy.js", // 自动部署sit打包文件至dev测试环境
  17. "deploy:uat": "cross-env TARGET=uat node ./deploy.js" // 自动部署uat打包文件至dev测试环境

5. 导包说明

5.1 方案一

将项目中的package.json(项目基本信息)文件与package-lock.json(指定依赖库的具体版本)文件复制到外网一个文件夹下,进入该文件夹,进入命令行窗口,输入“npm install”安装依赖。

如果导入速度过慢,强烈建议不要用直接使用cnpm安装,会有各种诡异的 bug,可以通过重新指定registry来解决npm安装速度慢的问题。

“npm install --registry=https://registry.npmmirror.com”。

导入成功后将node_modules诺入到内网的具体项目下,将原来的node_modules全部删除,进行替换。

5.2 方案二

将git上项目完整的拉取下来,运行项目,观察系统提示的依赖包错误,针对性的在外网下载依赖文件,将下载下来的文件放入到项目对应的文件中。

5.3 补充说明

1、node版本至少大于12.0.0,最好保持在13.14.0;

2、可以通过全局安装nvm进行node版本的管理;

3、可以通过全局安装nrm进行registry的管理。

6. 修改本地运行时链接的服务器说明

设置本地代理的位置在前端项目根目录下的vue.config.js文件,devServer.proxy.target对象下。

7. 常用开发说明

7.1 新增view

在@/views文件下创建对应的文件夹,一般性一个路由对应一个文件,该模块下的功能就建议在本文件夹下创建一个新文件夹,各个功能模块维护自己的utils或components组件。

7.2 新增api

在@/ap文件夹下创建本模块对应的api服务。

7.3 新增组件

在全局的@/components写一些全局的组件,如富文本,各种搜索组件,封装的分页组件等等能被公用的组件。每个页面或者模块特定的业务组件则会写在当前@/views下面。

如:@/views/system/user/components/xxx.vue。这样拆分大大减轻了维护成本。

7.4 新增样式

页面的样式和组件是一个道理,全局的@/style放置一下全局公用的样式,每一个页面的样式就写在当前views下面,请记住加上scoped就只会作用在当前组件内了,避免造成全局的样式污染。

7.5 路由配置

  1. // 当设置 true 的时候该路由不会在侧边栏出现 401login等页面,或者如一些编辑页面/edit/1
  2. hidden: true // (默认 false)
  3. //当设置 noRedirect 的时候该路由在面包屑导航中不可被点击
  4. redirect: 'noRedirect'
  5. // 当你一个路由下面的 children 声明的路由大于1个时,自动会变成嵌套的模式--如组件页面
  6. // 只有一个时,会将那个子路由当做根路由显示在侧边栏--如引导页面
  7. // 若你想不管路由下面的 children 声明的个数都显示你的根路由
  8. // 你可以设置 alwaysShow: true,这样它就会忽略之前定义的规则,一直显示根路由
  9. alwaysShow: true
  10. name: 'router-name' // 设定路由的名字,一定要填写不然使用<keep-alive>时会出现各种问题
  11. query: '{"id": 1, "name": "ry"}'     // 访问路由的默认传递参数
  12. roles: ['admin', 'common']           // 访问路由的角色权限
  13. permissions: ['a:a:a', 'b:b:b']      // 访问路由的菜单权限
  14. meta: {
  15.   title: 'title' // 设置该路由在侧边栏和面包屑中展示的名字
  16.   icon: 'svg-name' // 设置该路由的图标,支持 svg-class,也支持 el-icon-x element-ui icon
  17.   noCache: true // 如果设置为true,则不会被 <keep-alive> 缓存(默认 false)
  18.   breadcrumb: false //  如果设置为false,则不会在breadcrumb面包屑中显示(默认 true)
  19.   affix: true // 如果设置为true,它则会固定在tags-view(默认 false)
  20.   // 当路由设置了该属性,则会高亮相对应的侧边栏。
  21.   // 这在某些场景非常有用,比如:一个文章的列表页路由为:/article/list
  22.   // 点击文章进入文章详情页,这时候路由为/article/1,但你想在侧边栏高亮文章列表的路由,就可以进行如下设置
  23.   activeMenu: '/article/list'

7.6 请求流程

一个完整的前端 UI 交互到服务端处理流程是这样的:

1.UI 组件交互操作;

2.调用统一管理的 api service 请求函数;

3.使用封装的 request.js 发送请求;

4.获取服务端返回;

5.更新data。

为了方便管理维护,统一的请求处理都放在@/src/api文件夹中,并且一般按照model维度进行拆分文件。

其中,@/src/utils/request.js是基于axios的封装,便于统一处理POST,GET等请求参数,请求头,以及错误提示信息等。它封装了全局request拦截器、response拦截器、统一的错误处理、统一做了超时处理、baseURL设置等。

请求示例:

  1. // api/system/user.js
  2. import request from '@/utils/request'
  3. // 查询用户列表
  4. export function listUser(query) {
  5.   return request({
  6.     url: '/system/user/list',
  7.     method: 'get',
  8.     params: query
  9.   })
  10. }
  11. // views/system/user/index.vue
  12. import { listUser } from "@/api/system/user";
  13. export default {
  14.   data() {
  15.     userList: null,
  16.     loading: true
  17.   },
  18.   methods: {
  19.     getList() {
  20.       this.loading = true
  21.       listUser().then(response => {
  22.         this.userList = response.rows
  23.         this.loading = false
  24.       })
  25.     }
  26.   }
  27. }

8. 菜单配置说明

上级菜单:判断本菜单或者按钮在那个菜单下展示。

菜单类型:目录,为一级菜单,在左侧菜单列表中显示;菜单为二级及多级菜单,在左侧菜单列表中显示;按钮一般在页面已按钮的形式展现,亦可以将判断代码写在其他的标签上。

菜单图表:控制菜单中,本级菜单前侧的图表的展示。

菜单名称:控制菜单中,本级菜单名称的展示。

显示排序:由小到大排序,控制在菜单中和菜单列表的显示顺序。

是否外链:可以控制点击该菜单打开的页面是内部内容还是外部内容。

路由地址:为浏览器url地址中最后显示的路径,同时为代码跳转的目标。

组件地址:为项目目录下views下的文件相对路径。

权限字符:当有需要配置权限的地方,在代码中与此中配置保持一致。

路由地址:当前端需要跳转的参数时,配置此项。

是否缓存:是否在具有当前页面标签的时候缓存页面的数据及样式。

是否显示:控制是否在菜单中显示,显示与否不影响通过代码跳转。

菜单状态:控制是否在菜单中显示,影响通过代码跳转。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/376467.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从 B 站出发,用 Chrome devTools performance 分析页面如何渲染

页面是如何渲染的&#xff1f;通常会得到“解析 HTML、css 合成 Render Tree&#xff0c;就可以渲染了”的回答。但是具体都做了些什么&#xff0c;却很少有人细说&#xff0c;我们今天就从 Chrome 的性能工具开始&#xff0c;具体看看一个页面是如何进行渲染的&#xff0c;以及…

视频传输协议详解(RTMP、RTSP、HLS)

RTMP——Real Time Messaging Protocol&#xff08;实时消息传输协议&#xff09;RTMP是由Adobe公司提出的&#xff0c;在互联网TCP/IP五层体系结构中应用层&#xff0c;RTMP协议是基于TCP协议的&#xff0c;也就是说RTMP实际上是使用TCP作为传输协议。TCP协议在处在传输层&…

sql学习一

文章目录一、if 语句二、去重问题三、concat,upper,lower四、group_concat五、like 模糊匹配六、union和union all七、流程控制语句case八、limit一、if 语句 if(expr1, expr2, expr3)当expr1的值为真时函数的返回值为expr2&#xff0c;当expr1的值为假时&#xff0c;函数的返…

安装redis并设置开机自启动允许远程链接

一、进入/usr/local目录下面&#xff1b;下载redis包wget https://download.redis.io/releases/redis-5.0.14.tar.gz二、安装gccyum install gcc-c三、解压、进入目录、编译tar -xvf redis-5.0.14.tar.gzcd redis-5.0.14make ##如果报错zmalloc.h:50:31: 致命错误&#xff1a;j…

打破单片机开发模式--胶水语言(JavaScript)

概述 传统的嵌入式单片机开发基本上形式如下图&#xff1a; 该流程对于功能单一或者功能变更极少的场景是比较友好的&#xff0c;但是对于设备应用层变更比较多或者公板方案开发应用的场景&#xff0c;上述场景显的有些累赘。那么有什么方式可以解决呢&#xff1f;&#xff1f…

U-Boot 之七 详解 Driver Model 架构、配置、命令、初始化流程

U-Boot 在 2014 年 4 月参考 Linux Kernel 的驱动模型设计并引入了自己的 Driver Model&#xff08;官方简称 DM&#xff09; 驱动架构。这个驱动模型&#xff08;DM&#xff09;为驱动的定义和访问接口提供了统一的方法&#xff0c;提高了驱动之间的兼容性以及访问的标准性。 …

和月薪3W的聊过后,才知道自己一直在打杂...

前几天和一个朋友聊面试&#xff0c;他说上个月同时拿到了腾讯和阿里的offer&#xff0c;最后选择了阿里。 我了解了下他的面试过程&#xff0c;就一点&#xff0c;不管是阿里还是腾讯的面试&#xff0c;这个级别的程序员&#xff0c;都会考察项目管理能力&#xff0c;并且权重…

[牛客网] HJ35 蛇形矩阵(写了好久才写出来)

链接https://www.nowcoder.com/practice/649b210ef44446e3b1cd1be6fa4cab5e?tpId37&tqId21258&rp1&ru/exam/oj/ta&qru/exam/oj/ta&sourceUrl%2Fexam%2Foj%2Fta%3Fdifficulty%3D2%26page%3D1%26pageSize%3D50%26search%3D%26tpId%3D37%26type%3D37&dif…

区块链行业遭供应链攻击,上万加密钱包被“抄底”损失上亿美元

当地时间8月2日晚间&#xff0c; 区块链行业遭遇了一次行业重创 。据科技媒体TechCrunch报道&#xff0c; 若干名攻击者“抄底”了上万个加密钱包&#xff0c;钱包内有价值上亿美元的代币。 据了解遭受攻击的加密钱包包括Phantom、Slope和TrustWallet等。涉及到的币种除了SOL、…

Vue2的tsx开发入门完全指南

本篇文章尽量不遗漏重要环节&#xff0c;本着真正分享的心态&#xff0c;不做标题党 下面进入正题&#xff1a; 由于现在vue的官方脚手架已经非常完善我们就不单独配置webpack了&#xff0c;节省大量的时间成本。 首先使用vue/cli创建一个vue模版项目&#xff08;记得是vue/…

Dockerfile详解

一、能干嘛&#xff1f; 我们总会遇到下面这种情况&#xff1a;使用docker pull 拉取下来的镜像发现其提供的功能并不完善&#xff0c;比如拉下来个centos的镜像&#xff0c;运行该镜像生成容器发现连vim&#xff0c;ifconfig命令都没有&#xff01;想要在该镜像的基础上扩充其…

[SQL]增删查改语法概览

数据定义 基本概念 基本表 本身独立存在的表SQL中一个关系就对应一个基本表一个(或多个)基本表对应一个存储文件一个表可以带若干索引 存储文件 物理结构对用户透明索引存放在存储文件中 视图 从一个或几个基本表导出的表数据库中至存放数据的定义而不存放视图对应的数据视…

Moonlight iPad全屏无边框串流方法

环境&#xff1a;iPad MoonLight 串流PC 问题&#xff1a;iPad无法全屏&#xff0c;有边框 解决办法&#xff1a;将电脑分辨率和MoonLight自定义分辨率调整为iPad原始分辨率 背景&#xff1a;在使用iPad进行MoonLight串流PC游戏时&#xff0c;发现客户端不论如何设定iPad都有边…

SQL函数

SQL函数 DATE_SUB()函数 1.1函数语法定义 1.2函数实际应用&#xff1a; 语法: 获取当前日期&#xff1a;select curdate()获取当前日期前一天&#xff1a;select date_sub(curdate(),interval 1 day)获取当前日期后一天&#xff1a;select date_sub(curdate(),interval -1 …

mysql(一) 使用注意事项及优化

初学mysql的时候、写了一份 "什么是CRUD&#xff1f; CRUD的操作" 的文章&#xff08;18年的&#xff09; 我开心看到有朋友经常在下面讨论一些问题、 但是以现在&#xff08;今天 23年&#xff09;回头看觉得 那些只是入门需要知道和掌握的、也刚好最近不是很忙 所…

S3C2440开发环境搭建

拿出了之前的S3C2440开发板&#xff0c;然后把移植uboot、移植内核、制作根文件系统、设备树编写驱动等几项再做一遍&#xff0c;这篇文章先记录下环境搭建过程&#xff0c;以及先把现成的uboot、内核、根文件系统下载进去&#xff0c;看看开发板还能不能用&#xff0c;先熟悉一…

【C++】踏入C++的大门(万字总结)

文章目录&#x1f3aa; 踏入C的大门&#x1f680;1.什么是C&#x1f680;2.C发展史&#x1f680;3.C关键字&#x1f680;4.命名空间⭐4.1 命名空间定义⭐4.2 命名空间使用⭐4.3 C输入和输出&#x1f680;5.缺省参数⭐5.1 缺省参数概念⭐5.2 缺省参数分类&#x1f680;6.函数重载…

Unreal Engine10:Character的实现

写在前面 这里主要是介绍一下Character的实现&#xff0c;顺带也介绍一下UE4资源的获取&#xff1b; 一、UE4资源获取 1. 地图的获取 1.1 下载资源 在Epic Games Launcher的虚幻商城中搜索内容&#xff0c;带有环境标签的就主要是地图资源&#xff1b;有一些是免费的资源和…

C#--耗时操作实现UI界面实时更新不阻塞(耗时操作解决窗体卡顿)

前言C#实现窗体加载进度条或者百分比实时显示耗时操作的进度&#xff0c;方法有很多。但是经过我的学习、查找与实际应用&#xff0c;发现Task配合MethodInvoker最为高效便捷。下面我就来结合代码讲一下要注意的问题。基础知识C#在winform上进行耗时操作往往会放置progressbar&…

JavaWeb 实战 01 - 计算机是如何工作的

计算机是如何工作的1. 计算机发展史2. 计算机的基本组成2.1 冯诺依曼体系结构2.2 CPU的内部结构2.3 指令2.3.1 指令表2.3.1.1 寄存器2.3.2 CPU的工作流程2.4 小结3. 操作系统3.1 核心功能3.2 操作系统的软硬件结构3.3 什么是进程 / 任务3.4 进程管理3.4.1 管理3.4.2 PCB : 进程…