5. vue-element-admin 二次开发攻略指南

news2024/11/24 14:43:10

vue-element-admin一站式后端 UI框架二次开发攻略指南

    • 1.1 前言
    • 1.2 修改 Logo 名称和图标
    • 1.3 控制设置齿轮是否显示或隐藏
    • 1.4 框架安装依赖优化脚本
    • 1.5 定义多环境配置文件
    • 1.6 优化打包流程
    • 1.7 优化打包流程输出文件路径配置
    • 1.8 nginx 配置
    • 1.9 docker file 配置
  • 2. 代码地址

1.1 前言

vue-element-admin 是一款非常强大和优秀的后端管理 UI 框架。

当我们基于此框架做一些二次开发的时候,往往需要对代码进行修改。

为了加快改造流程,我们来做一些优化方便二次开发。

1.2 修改 Logo 名称和图标

  • 修改Logo组件路径: src/layout/components/Sidebar/Logo.vue 中 title 和 logo 变量的值即可。
<script>
import defaultSettings from '@/settings'

export default {
  name: 'SidebarLogo',
  props: {
    collapse: {
      type: Boolean,
      required: true
    }
  },
  data() {
    return {
      title: defaultSettings.title,
      logo: defaultSettings.logoPictureUrl
    }
  }
}
</script>

这里建议将原来写死的title为defaultSettings.title
这里建议将原来写死的logo为defaultSettings.logoPictureUrl

  • 然后以后这个 title就可以通过src/settings.js 中的常量来实现全局控制
module.exports = {
  title: 'Vue2 Element Admin',
  /**
   * @type {string} your log picture url
   * @description logo picture url path
   */
  logoPictureUrl: 'https://wpimg.wallstcn.com/69a1c46c-eb1c-4b46-8bd4-e9e686ef5251.png',
  /**
   * @type {boolean} true | false
   * @description Whether show the settings right-panel
   */
  showSettings: true,

  /**
   * @type {boolean} true | false
   * @description Whether need tagsView
   */
  tagsView: true,

  /**
   * @type {boolean} true | false
   * @description Whether fix the header
   */
  fixedHeader: true,

  /**
   * @type {boolean} true | false
   * @description Whether show the logo in sidebar
   */
  sidebarLogo: true,
  /**
   * @type {string | array} 'prod' | ['prod', 'dev']
   * @description Need show err logs component.
   * The default is only used in the prod env
   * If you want to also use it in dev, you can pass ['prod', 'dev']
   */
  errorLog: 'prod'
}

效果如下:
在这里插入图片描述

1.3 控制设置齿轮是否显示或隐藏

在这里插入图片描述
通过src/settings.js 中的常量showSettings 来实现控制设置齿轮是否显示, true 显示,false 隐藏。

module.exports = {
  title: 'Vue2 Element Admin',
  /**
   * @type {string} your log picture url
   * @description logo picture url path
   */
  logoPictureUrl: 'https://wpimg.wallstcn.com/69a1c46c-eb1c-4b46-8bd4-e9e686ef5251.png',
  /**
   * @type {boolean} true | false
   * @description Whether show the settings right-panel
   */
  showSettings: false,

  /**
   * @type {boolean} true | false
   * @description Whether need tagsView
   */
  tagsView: true,

  /**
   * @type {boolean} true | false
   * @description Whether fix the header
   */
  fixedHeader: true,

  /**
   * @type {boolean} true | false
   * @description Whether show the logo in sidebar
   */
  sidebarLogo: true,
  /**
   * @type {string | array} 'prod' | ['prod', 'dev']
   * @description Need show err logs component.
   * The default is only used in the prod env
   * If you want to also use it in dev, you can pass ['prod', 'dev']
   */
  errorLog: 'prod'
}

1.4 框架安装依赖优化脚本

项目根目录下新增如下几个脚本, 方便初始化项目,给项目安装依赖以及针对国内用户优化依赖安装速度。
在这里插入图片描述

  • 一般用户:( Mac OSX 或 Linux 系统专用)

install-for-normal-user.sh

#!/bin/bash
npm install
  • 一般用户( Windows 系统专用)

install-for-normal-user.bat

@echo off
npm install
@pause
  • 国内用户优化依赖下载速度( Mac OSX 或 Linux 系统专用)

install-for-china-user.sh

#!/bin/bash
npm install --registry=https://registry.npm.taobao.org
  • 国内用户优化依赖下载速度( Windows系统专用)
    install-for-chian-user.bat
@echo off
npm install --registry=https://registry.npm.taobao.org
@pause

1.5 定义多环境配置文件

项目根目录下创建如下多环境配置,并依次配置前端的上下文路径
在这里插入图片描述

  • 开发环境:开发环境是程序猿们专门用于开发的服务器,配置可以比较随意, 为了开发调试方便,一般打开全部错误报告。
  • 测试环境:一般是克隆一份生产环境的配置,一个程序在测试环境工作不正常,那么肯定不能把它发布到生产机上。
  • 仿真环境:顾名思义是和真正使用的环境一样的环境(即已经出售给客户的系统所在环境,也成为商用环境),所有的配置,页面展示等都应该和商家正在使用的一样,差别只在环境的性能方面。
  • 生产环境:是指正式提供对外服务的,一般会关掉错误报告,打开错误日志。可以理解为包含所有的功能的环境,任何项目所使用的环境都以这个为基础,然后根据客户的个性化需求来做调整或者修改。

.env.dev

# 当前环境标识
NODE_ENV=dev
# ui context path
VUE_CONTEXT_PATH=/admin-dev-console
# base api
VUE_APP_BASE_API=/dev-api
# 仅本地需要
# 凡是匹配到/dev-api 开头的请求都反向代理给本地接口
VUE_APP_PROXY_API=http://127.0.0.1:8080/my-spring-cloud-gateway

.env.test

# 当前环境标识
NODE_ENV=test
# ui context path
VUE_CONTEXT_PATH=/admin-test-console
# base api
VUE_APP_BASE_API=/test-api

.env.sim

# 当前环境标识
NODE_ENV=sim
# ui context path
VUE_CONTEXT_PATH=/admin-sim-console
# base api
VUE_APP_BASE_API=/sim-api

.env.prod

# 当前环境标识
NODE_ENV=prod
# ui context path
VUE_CONTEXT_PATH=/admin-prod-console
# base api
VUE_APP_BASE_API=/prod-api

修改 项目根目录下的package.json 内容如下:

...
  "scripts": {
    "dev": "vue-cli-service serve --mode dev",
    "test": "vue-cli-service serve --mode test",
    "sim": "vue-cli-service serve --mode sim",
    "prod": "vue-cli-service serve --mode prod",

    "build:test": "vue-cli-service build --mode test",
    "build:sim": "vue-cli-service build --mode sim",
    "build:prod": "vue-cli-service build --mode prod",

    "lint": "eslint --ext .js,.vue src",
    "preview": "node build/index.js --preview",
    "new": "plop",
    "svgo": "svgo -f src/icons/svg --config=src/icons/svgo.yml",
    "test:unit": "jest --clearCache && vue-cli-service test:unit",
    "test:ci": "npm run lint && npm run test:unit"
  },
...

以后就可以做到:

  • 运行 dev环境就执行 npm run dev
  • 运行test环境就执行 npm run test
  • 打包生产环境配置就执行 npm run build: prod

1.6 优化打包流程

我们可以用脚本简化打包过程:
Mac 用户或Linux 用户使用 package-all-env-ui.sh

#!/bin/bash
npm run build:test
npm run build:sim
npm run build:prod

Windows用户使用 package-all-env-ui.bat

@echo off
call build-test-ui.bat
call build-sim-ui.bat
call build-prod-ui.bat
@echo 'build all env ui finished!!! '
@pause

值得注意的是

  • 这里我们不能直接执行命令,因为 windows shell环境由于某些原因无法同时执行多个命令。
  • 如果我们想要打包完 test环境就打包sim环境,sim环境打包完就打包 prod环境。
  • 那么需要通过使用 call 命令调用批处理来实现,这里踩过坑。

build-test-ui.bat 内容如下

@echo off
npm run build:test
@echo 'build test ui finished!!! '

build-sim-ui.bat 内容如下

@echo off
npm run build:sim
@echo 'build sim ui finished!!! '

build-prod-ui.bat 内容如下

@echo off
npm run build:prod
@echo 'build prod ui finished!!! '

1.7 优化打包流程输出文件路径配置

默认打包路径是/dist/xxx

如果我们打镜像时候需要打包多个环境,怎么办?总不能打包多次吧?

修改 vue.config.jsoutputDir: 'dist/' + process.env.NODE_ENV, 详情如下:

...
  /**
   * You will need to set publicPath if you plan to deploy your site under a sub path,
   * for example GitHub Pages. If you plan to deploy your site to https://foo.github.io/bar/,
   * then publicPath should be set to "/bar/".
   * In most cases please use '/' !!!
   * Detail: https://cli.vuejs.org/config/#publicpath
   */
  publicPath: process.env.VUE_CONTEXT_PATH,
  outputDir: 'dist/' + process.env.NODE_ENV,
  assetsDir: 'static',
  lintOnSave: process.env.NODE_ENV === 'dev',
  productionSourceMap: false,
  // 本地服务器配置
  devServer: {
    port: port,
    open: true,
    overlay: {
      warnings: false,
      errors: true
    },
    // 1.本地反向代理解决跨域问题
    proxy: {
      // change xxx-api/login => mock/login
      // detail: https://cli.vuejs.org/config/#devserver-proxy
      [process.env.VUE_APP_BASE_API]: {
        target: process.env.VUE_APP_PROXY_API,
        changeOrigin: true,
        pathRewrite: {
          ['^' + process.env.VUE_APP_BASE_API]: ''
        }
      }
    },
    // 2. 禁用mock数据
    // before: require('./mock/mock-server.js')
  },
  ...

这样我们就可以打包出多个环境的配置了,输出效果如下:
在这里插入图片描述

1.8 nginx 配置

nginx-test.conf

events {
    worker_connections  1024;
}
daemon off;
http {
    include             mime.types;
    default_type        application/octet-stream;
    charset             utf-8;
    sendfile        on;
    keepalive_timeout  65;
    add_header Site NGINX-D;

    server {
        listen       80;
        server_name  localhost;
        access_log off;

        location / {
          add_header Access-Control-Allow-Origin *;
          root   /opt/app/html5/test;
          index  index.html index.htm;
          try_files $uri $uri/ /index.html;
          if ($request_uri ~* ^/index.html) {
            add_header Cache-Control 'no-cache, no-store';
          }
        }
    }
}

nignx-sim.conf

events {
    worker_connections  1024;
}
daemon off;
http {
    include             mime.types;
    default_type        application/octet-stream;
    charset             utf-8;
    sendfile        on;
    keepalive_timeout  65;
    add_header Site NGINX-D;

    server {
        listen       80;
        server_name  localhost;
        access_log off;

        location / {
          add_header Access-Control-Allow-Origin *;
          root   /opt/app/html5/sim;
          index  index.html index.htm;
          try_files $uri $uri/ /index.html;
          if ($request_uri ~* ^/index.html) {
            add_header Cache-Control 'no-cache, no-store';
          }
        }
    }
}

nignx-prod.conf

events {
    worker_connections  1024;
}
daemon off;
http {
    include             mime.types;
    default_type        application/octet-stream;
    charset             utf-8;
    sendfile        on;
    keepalive_timeout  65;
    add_header Site NGINX-D;

    server {
        listen       80;
        server_name  localhost;
        access_log off;

        location / {
          add_header Access-Control-Allow-Origin *;
          root   /opt/app/html5/prod;
          index  index.html index.htm;
          try_files $uri $uri/ /index.html;
          if ($request_uri ~* ^/index.html) {
            add_header Cache-Control 'no-cache, no-store';
          }
        }
    }
}

1.9 docker file 配置

FROM nginx
WORKDIR /opt/
# 复制当前项目的nginx-sim.conf配置到容器的/opt/app/nginx/conf/test/nginx.conf
# 复制当前项目的nginx-sim.conf配置到容器的/opt/app/nginx/conf/sim/nginx.conf
# 复制当前项目的nginx-prod.conf配置到容器的/opt/app/nginx/conf/prod/nginx.conf
COPY ./nginx-test.conf /opt/nginx/conf/nginx-test.conf
COPY ./nginx-sim.conf /opt/nginx/conf/nginx-sim.conf
COPY ./nginx-prod.conf /opt/nginx/conf/nginx-prod.conf
# 复制所有UI页面到容器的 /opt/html/
# /opt/app/html5/test/index.html
# /opt/app/html5/sim/index.html
# /opt/app/html5/prod/index.html
COPY dist/ /opt/app/html5/

# 复制脚本
COPY cloudserver.sh /opt/
# 当前不支持打镜像的时候打包,打包必须本地打包
RUN ['sh','check-build-nodejs-image.sh']
CMD ["sh","cloudserver.sh"]

为了避免打包失败,然后错误部署,我们增加一个检测脚本:
check-build-nodejs-images.sh

#!/bin/bash
# 检查test文件夹是否为空
dir_sim_path="/opt/app/html5/test/"
if [ ! -d $dir_test_path ]; then
    echo "前端项目-预发环境-未打包,[/opt/app/html5/test/]文件夹不存在"
    exit 0
fi

# 检查sim文件夹是否为空
dir_sim_path="/opt/app/html5/sim/"
if [ ! -d $dir_sim_path ]; then
    echo "前端项目-预发环境-未打包,[/opt/app/html5/sim/]文件夹不存在"
    exit 0
fi

# 检查prod文件夹是否为空
dir_prod_path="/opt/app/html5/prod/"
if [ ! -d $dir_prod_path ]; then
    echo "前端项目-生产环境-未打包,[/opt/app/html5/prod/]文件夹不存在"
    exit 0
fi

echo 'vue nodejs package checked pass !!!'

cloudserver.sh

#!/bin/bash
echo $*
echo 'options single-request-reopen' >> /etc/resolv.conf
# 启动nginx
/opt/nginx/sbin/nginx -c  /opt/nginx/conf/nginx-${CONF_ENV}.conf

2. 代码地址

  • 后续更多改造维护内容见https://github.com/geekxingyun/smart-vue2-element-admin-ui

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

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

相关文章

计算机网络-专业术语

计算机网络-专业术语 实体 实体:任何可发送或接收信息的硬件或软件进程 对等实体:收发双方相同层次中的实体 协议 控制两个对等实体进行逻辑通信的规则的集合 协议三要素 语法 定义所交换的信息的格式 是用户数据与控制信息的结构和格式 语义 定义收发双方所需要完成的操作…

STM32CubeMX之freeRTOS信号量

队列可以传输数据&#xff0c;任务之间和任务和中断之间&#xff0c;消息队列用来传数据&#xff0c;占用时间也长 但哦我们有时候只需要传递状态&#xff0c;只需要一个数值表示 如果我们屏幕按固定刷新&#xff0c;就会很消耗资源&#xff0c;如果我们数据变化了&#xff0…

Hadoop+Python+Django+Mysql热门旅游景点数据分析系统的设计与实现(包含设计报告)

系统阐述的是使用热门旅游景点数据分析系统的设计与实现&#xff0c;对于Python、B/S结构、MySql进行了较为深入的学习与应用。主要针对系统的设计&#xff0c;描述&#xff0c;实现和分析与测试方面来表明开发的过程。开发中使用了 django框架和MySql数据库技术搭建系统的整体…

人工智能讲师AIGC讲师叶梓:大模型这么火,我们在使用时应该关注些什么?-2

以下为叶老师讲义分享&#xff1a; P6-P9 一些考验大模型的经典问题: 1、鲁迅与周树人是同一个人吗?2、圆周率的最后一位3、蓝牙耳机坏了4、最新的&#xff1a;奶奶的睡前故事 关于事实的问答结果: 知识的时效性&#xff1a; 未完&#xff0c;下一章继续……

java程序打包成exe在无java环境执行

最近写了个小工具&#xff0c;但是java写的&#xff0c;给朋友用的时候不能直接用&#xff0c;因此学习了一下java打包成exe。 众所周知&#xff0c;java需要jvm环境&#xff0c;所以打包的时候需要把稍微轻一点的jre打包进去。接下来是详细步骤。 java程序打包成jar 这个在…

C#随机法 双峰函数 求极值 避免落入局部最优解

避免落入局部最优解&#xff0c;只要让步长够长即可。 x1 resultX1 random1.NextDouble()*100; 如果后面不乘以100&#xff0c;则很大概率落入负数的最大值 Random random1 new Random(DateTime.Now.Millisecond);double x1 0, resultX10,max-999999,maxTemp0;for (int i …

【学会动态规划】买卖股票的最佳时机 III(17)

目录 动态规划怎么学&#xff1f; 1. 题目解析 2. 算法原理 1. 状态表示 2. 状态转移方程 3. 初始化 4. 填表顺序 5. 返回值 3. 代码编写 写在最后&#xff1a; 动态规划怎么学&#xff1f; 学习一个算法没有捷径&#xff0c;更何况是学习动态规划&#xff0c; 跟我…

骨传导耳机对人体有什么危害,骨传导耳机优缺点是什么?

骨传导耳机对人体有没有伤害&#xff1f; 骨传导耳机的专属挂耳式佩戴方式&#xff0c;不需要将耳机塞入耳朵或者是住整个耳朵&#xff0c;开放双耳的全新佩戴体验&#xff0c;在听音乐的同时不会屏蔽我们的耳朵提取其它信息&#xff0c;能让我们及时听到周围环境音&#xff0c…

tensorRT_Pro 项目实践

参考&#xff1a;https://github.com/shouxieai/tensorRT_Pro/blob/main/tutorial/README.zh-cn.md 前提&#xff1a; https://www.cnblogs.com/odesey/p/17619218.html https://www.cnblogs.com/odesey/p/17619240.html ubuntu20.04opencv4.2cuda11.8cuDNN v8.9.0 (July 1…

【Python】背景及环境搭建

文章目录 了解计算机一、Python背景知识一、Python环境搭建 努力经营当下 直至未来明朗 了解计算机 示例&#xff1a;使用电脑访问B站 1&#xff09; 本地的计算机会给B站服务器发送一个网络请求&#xff08;如&#xff1a;谁&#xff0c;想看哪个视频&#xff09; 2&#xf…

WPS Office 代码执行漏洞(QVD-2023-17241)

目录 本地利用弹计算器&#xff08;自娱自乐&#xff09; 原理分析 msf的利用 1.修改win11中的hosts文件 2.MSF生成一个C#后门 3.shellcode替换 4.在创建html的目录&#xff0c;用python打开http服务来捕获请求 5.开启监听 6.在win11中点击poc文档&#xff0c;可以看到k…

0001nginx简介、相关模型与原理

文章目录 一. 什么是Nginx二. ngnix的一些模型1、nginx的进程模型2、worker的抢占&#xff08;锁&#xff09;机制模型3. nginx事件处理模型 三. nginx加载静态资源的过程 一. 什么是Nginx Nginx是一个高性能HTTP反向代理服务器&#xff0c;以下是nginx的相关能力 反向代理&am…

通过matlab对比music,mvdr以及tdoa三种定位算法的性能

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 MUSIC&#xff08;Multiple Signal Classification&#xff09; 4.2 MVDR&#xff08;Minimum Variance Distortionless Response&#xff09; 4.3 TDOA&#xff08;Time Difference o…

使用宝塔面板轻松部署云服务器

作者 : SYFStrive 博客首页 : HomePage &#x1f4dc;&#xff1a; 宝塔面版 &#x1f4cc;&#xff1a;个人社区&#xff08;欢迎大佬们加入&#xff09; &#x1f449;&#xff1a;社区链接&#x1f517; &#x1f4cc;&#xff1a;觉得文章不错可以点点关注 &#x1f449…

LeetCode[164]最大间距

难度&#xff1a;Hard 题目&#xff1a; 给定一个无序的数组 nums&#xff0c;返回 数组在排序之后&#xff0c;相邻元素之间最大的差值 。如果数组元素个数小于 2&#xff0c;则返回 0 。 您必须编写一个在「线性时间」内运行并使用「线性额外空间」的算法。 示例 1: 输入: …

docsify gitee 搭建个人博客

docsify & gitee 搭建个人博客 文章目录 docsify & gitee 搭建个人博客1.npm 安装1.1 在Windows上安装npm&#xff1a;1.2 在macOS上安装npm&#xff1a;1.3 linux 安装npm 2. docsify2.1 安装docsify2.2 自定义配置2.2.1 通过修改index.html&#xff0c;定制化开发页面…

如何创造千亿项目?合法合规的绿色消费增值积分,或许能冲出赛道

电商行业的竞争越来越激烈&#xff0c;大部分的电商平台都面临着这三大难题&#xff1a;如何吸引用户、如何留存用户以及如何让用户为平台带来更多的效益。为了解决这三大问题&#xff0c;我们提出了创造千亿项目的商业模式——绿色消费增值积分系统&#xff0c;帮助企业冲出赛…

git 给仓库添加新分支并上传代码,git 克隆指定分支

git 克隆指定分支 git clone -b 分支名 仓库地址 例如&#xff1a; git clone -b dev https://gitee.com/UserGuan/spring-boot-demo.git git 给仓库添加新分支并上传代码 1、初始化仓库 git init 2、创建分支并命名 git checkout -b 分支名 例如&#xff1a; git che…

分布式应用:Zabbix监控Nginx

目录 一、理论 1.Zabbix监控Nginx 二、实验 1.Zabbix监控Nginx部署 三、问题 1.重启zabbix客户端失败 2.zabbix服务端测试客户端nginx状态失败 3.nginx启动失败 4.权限不够 一、理论 1.Zabbix监控Nginx &#xff08;1&#xff09;环境 zabbix服务端&#xff1a;192.1…

从零构建深度学习推理框架-7 计算图的表达式

什么是表达式 表达式就是一个计算过程,类似于如下&#xff1a; output_mid input1 input2 output output_mid * input3用图形来表达就是这样的。 但是在PNNX的表达式&#xff08;Experssion Layer&#xff09;中不是这个样子&#xff0c;而是以一种抽象得方式&#xff0c;…