认识vue-admin

认识vue-admin

**核心交付:** 为什么要基于现成架子二次开发

什么是二次开发:基于已有的代码(项目工程,脚手架)开进行新功能的开发

所以看懂已有的框架中的既有代码,变得很重要了

1. 背景知识


后台管理系统是一种最常见的应用模式,不同的管理系统之间有很多相似的地方,比如:

  1. 页面整体结构相似(Sidebar + Navbar + Main经典布局)
  1. 技术选型相似 (Vue.js + VueRouter + Vuex + Axios...)
  1. 业务类型相似 (CRUD + 导入导出 + 权限管理...)

既然这么多一样的地方,有必要每次开发后台管理系统,都重新创建一套吗?

2. vue-admin

vue-admin是基于vue-admin-template做了一些升级和改版之后的后台管理系统脚手架,内置了必要的安装包、目录结构划分、路由表设计等等,方便做二次开发,我们需要做的大部分是 填空题 ,架子搭建部分工作通常由团队Leader来做

执行下面命令,克隆脚手架到本地,并安装依赖运行

# 克隆项目
git clone http://git.itcast.cn/heimaqianduan/vue-admin.git# 安装依赖
npm i# 启动项目
npm run start

熟悉项目目录

**核心交付:** 熟悉项目的目录结构设计
 


说明:

  1. src 目录指的是源代码(source code)目录,存放项目应用的源代码,包含项目的逻辑和功能实现,实际上线之后在浏览器中跑的代码就是它们

好处:1. 维护方便 2. 语义化

    1. apis - 业务接口
    1. assets - 静态资源 (图片)
    1. components - 组件 公共组件
    1. constants - 常量 (不需要变动的数据)
    1. directive - 全局指令
    1. icons - 图标 (png svg 字体图标)
    1. Layout - 搭建项目的架子
    1. utils - 工具函数 (转化函数 校验函数 请求request)
    1. views - 页面级组件 路由级别组件 业务组件
  1. src 之外的目录和文件多数是项目的配置文件,包括babel配置,脚手架配置,环境变量配置等等

熟悉项目关键文件

1. 包文件 - package.json

**核心交付:** 拿到一个新项目之后,重点关注包文件中的哪些东西

项目包管理文件,我们重点关注 项目依赖可执行命令 两部分

  "scripts": {"dev": "vue-cli-service serve","build": "vue-cli-service build","report": "vue-cli-service build --report"},"dependencies": {"axios": "^0.18.1","core-js": "^3.30.0","element-ui": "2.13.2","js-cookie": "^2.2.0","normalize.css": "7.0.0","vue": "2.6.10","vue-router": "^3.6.5","vuex": "3.1.0"},"devDependencies": {"@vue/cli-plugin-babel": "4.4.4","@vue/cli-plugin-eslint": "4.4.4","@vue/cli-service": "4.4.4","autoprefixer": "9.5.1","babel-eslint": "10.1.0","babel-plugin-dynamic-import-node": "2.3.3","chalk": "2.4.2","connect": "3.6.6","eslint": "6.7.2","eslint-plugin-vue": "6.2.2","html-webpack-plugin": "3.2.0","runjs": "4.3.2","sass": "^1.49.10","sass-loader": "10","script-ext-html-webpack-plugin": "2.1.3","serve-static": "1.13.2","svg-sprite-loader": "^6.0.11","vue-template-compiler": "2.6.10"}

说明:

  1. 可执行命令配置 script中包含了所有可执行的项目命令,包括启动开发服务,打包等等,这些命令可以定制
  1. 依赖项(dependencies ) 对比 开发依赖项(devDependencies)在开发时注意要把当前包安装到对应的依赖项中
    |
    | npm下载方式 | 作用 |
    | --- | --- | --- |
    | 依赖项(dependencies ) | npm i dayjs | 和业务代码相关,参与打包 |
    | 开发依赖(devDependencies) | npm i sass -D | 提供开发环境下的工程化支持,不参与打包 |

为什么要把包添加到依赖项里面?

协同开发的时候保证团队里的所有人用到包都是一致的

2. 应用入口 - main.js

**核心交付:** 知道入口文件中都做了哪些重要的事情

3. 组件树 - App.vue

**核心交付:** 能够从组件树的角度理清楚各级组件是如何渲染出来的

4. 路由文件 - vueRouter

**核心交付:** 能够理清楚一级和二级路由的不同配置写法,能够自己新增路由

只有一级路由的配置写法

  {path: '/workbench',component: Layout,children: [{path: '', // 地址为空name: 'workbench',component: () => import('@/views/workbench/index'),meta: { title: '工作台', icon: 'el-icon-eleme' }}]}

同时拥有一级和二级路由的配置写法

{path: '/park',component: Layout,name: 'park',meta: { title: '园区管理', icon: 'el-icon-office-building' },children: [{path: 'building',name: 'building',meta: { title: '楼宇管理' },component: () => import('@/views/Park/Building/index')},{path: 'enterprise',name: 'enterprise',meta: { title: '企业管理' },component: () => import('@/views/Park/Enterprise/index')}]}

路由配置练习

配置要求:

  1. icon el-icon-wallet
  1. title名称 物业费管理

5. 状态管理 - Vuex

**核心交付:** 能够知道基于模块化管理的集中状态管理

请求模块说明

request.js模块说明

**核心交付:** 基于axios的基础封装都做了什么

import axios from 'axios'
const service = axios.create({baseURL: 'https://api-hmzs.itheima.net/tj',timeout: 5000 // request timeout
})
// 请求拦截器
service.interceptors.request.use(config => {return config},error => {return Promise.reject(error)}
)// 响应拦截器
service.interceptors.response.use(response => {return response.data},error => {return Promise.reject(error)}
)export default service

总结说明:

  1. 一般项目中多数的接口使用的配置是相似的,所以需要统一配置一次
  1. 请求拦截器主要做的事情是在请求发送之前,针对请求参数对象做一些事情(比如添加鉴权Token)
  1. 响应拦截器主要做的事情是在响应数据返回到业务方之前,针对响应对象做一些事情(比如简化data,错误处理等)

apis模块说明

**核心交付:** 能够知道APIS模块里的业务接口函数是如何封装以及如何使用
1- 按业务模块划分

2- 基础封装逻辑

import request from '@/utils/request'// 登录函数
/*** @description: 登录函数* @param {*} data { mobile,password}* @return {*} promise*/
export function login({ mobile, password }) {return request({url: '/sys/login',method: 'POST',data: {mobile,password}})
}

总结说明:

  1. apis中的所有业务函数都采用同样的封装逻辑(参数格式/返回值格式),方便维护
  1. apis中的所有业务函数内部都采用request.js中统一导出的axios实例达到配置一次,管控所有接口的目的

路由和菜单的关系

路由表是菜单的数据支撑

路由对象的属性和菜单显示对应

说明:

  1. 菜单通过遍历路由表来显示,路由表作为数据来源
  1. 路由对象meta属性中的icon决定了显示的图表,title决定了要显示的标题

使用Git管理项目

**核心交付:** 养成git管理项目的习惯

  1. 删除原有的.git文件,切断和原本远程仓库的链接
  1. 重新执行 git init . 命令, 初始化本地仓库
  1. 在gitee上新增远程仓库
  1. 关联远程仓库到本地
  1. 推送本地到远程
  1. 后续日常提交 git add . git commit -m "提交说明"

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

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

相关文章

无人机航迹规划:孟加拉虎优化( Savannah Bengal Tiger Optimization ,SBTO)算法求解无人机路径规划MATLAB

一、孟加拉虎优化算法 孟加拉虎优化( Savannah Bengal Tiger Optimization ,SBTO)算法模拟了孟加拉虎的群体狩猎行为,采用了猎物搜索、隐身接近和攻击狩猎三种策略。 参考文献: [1]Yujing Sun, Xingguo Xu. Savann…

sib报错:com.*.xctrunner is not in your device!

1、问题描述 在使用sonic集成IOS设备的时候,我们需要通过sonic-agent服务去识别IOS设备。但是在识别的时候提示如下问题: 本质就是在你这个设备中找不到这个设备也就是找不到WebDriverAgentRunner,但是确实安装了,甚至appium可以正常的调用。 或执行如下命令的时候报错:…

c++中什么时候应该使用final关键字?

在C中,final关键字是自C11标准引入的重要特性,主要用于类继承和虚函数重写机制的约束。下面从技术原理、使用场景和最佳实践三个维度进行系统分析,并给出工业级代码示例。 目录 一、技术原理深度解析 二、关键使用场景分析 1. 类级别的fi…

【AI】Docker中快速部署Ollama并安装DeepSeek-R1模型: 一步步指南

【AI】Docker中快速部署Ollama并安装DeepSeek-R1模型: 一步步指南 一、前言 为了确保在 Docker 环境中顺利安装并高效运行 Ollama 以及 DeepSeek 离线模型,本文将详细介绍整个过程,涵盖从基础安装到优化配置等各个方面。通过对关键参数和配置的深入理解…

文件夹上传到github分支最后github上面还是没有文件和文件夹

环境: github 问题描述: 文件夹上传到github分支最后github上面还是没有文件和文件夹, 和这样一样 解决方案: 从 git ls-tree -r HEAD 的输出中可以看到,metahuman-stream 文件夹显示为如下内容: 160000 commi…

【JavaEE进阶】验证码案例

目 🌲实现说明 🎄Hutool介绍 🌳准备工作 🌴约定前后端交互接口 🚩接口定义 🚩实现服务器后端代码 🚩前端代码 🚩整体测试 🌲实现说明 随着安全性的要求越来越⾼…

4G模块非必要,不关机!关机建议先进飞行模式

给4G模组VBAT断电关机,模组关机前未能及时退出当前基站,会有什么影响呢? 基站会误以为设备还在线,下次开机仍会拿着上次驻网信息去连基站。基站一看,上次链接还在——认为你是非法设备,拒绝链接&#xff…

Flutter中 List列表中移除特定元素

在 Dart 语言里,若要从子列表中移除特定元素,可以使用以下几种方法,下面为你详细介绍: 方法一:使用 where 方法创建新列表 where 方法会根据指定的条件筛选元素,然后通过 toList 方法将筛选结果转换为新列…

CF 148A.Insomnia cure(Java实现)

题目分析 这道题翻译出来后比较难理解,但是实际情况就是从1遍历d,看能不能被前四个值整除 思路分析 由上所述,存值后判断是否能整除,整除就答案1 代码 import java.util.*;public class Main {public static void main(String[]…

Java:单例模式(Singleton Pattern)及实现方式

一、单例模式的概念 单例模式是一种创建型设计模式,确保一个类只有一个实例,并提供一个全局访问点来访问该实例,是 Java 中最简单的设计模式之一。该模式常用于需要全局唯一实例的场景,例如日志记录器、配置管理、线程池、数据库…

企业SSL 证书管理指南

文章从以下几个部分展开 SSL证书的用途和使用场景SSL证书的申请类型和实现方式SSL证书的管理SSL证书的续签 一、SSL 证书的用途和使用场景 1.1 为什么要使用 SSL 证书? 1. 数据安全 🛡️- 在 HTTP 传输中,TCP 包可以被截获,攻…

网络安全-攻击流程-传输层

传输层攻击主要针对OSI模型的第四层,涉及TCP和UDP协议的安全漏洞。以下是常见攻击类型及其流程,以及防御措施: 1. SYN洪水攻击(TCP半连接攻击) 攻击流程: 目标选择:确定目标服务器的IP地址和开…

朝天椒USB服务器解决前置机U盾虚拟机远程连接

本文探讨朝天椒USB服务器用Usb Over Network技术,解决前置机虚拟化部署后U盾的远程连接问题。 在金融、电信等关键行业,后台核心处理系统承担着至关重要的业务数据交互职责。为保障系统安全,这些单位要求企业通过前置机与他们的内网进行数据…

探索Java中的集合类_特性与使用场景

1. 引言 1.1 Java集合框架概述 Java集合框架(Java Collections Framework, JCF)是Java中用于存储和操作一组对象的类和接口的统称。它提供了多种数据结构来满足不同的需求,如列表、集合、映射等。JCF的核心接口包括Collection、List、Set、Queue和Map,以及它们的各种实现…

MySQL数据库误删恢复_mysql 数据 误删

2、BigLog日志相关 2.1、检查biglog状态是否开启 声明: 当前为mysql版本5.7 当前为mysql版本5.7****当前为mysql版本5.7 2.1.1、Navicat工具执行 SHOW VARIABLES LIKE LOG_BIN%;OFF 是未开启状态,如果不是ON 开启状态需要开启为ON。{默认情况下就是关闭状态} 2.…

读 DeepSeek-R1 论文笔记

DeepSeek-R1:通过强化学习激发大语言模型的推理能力 DeepSeek-AI 摘要 我们推出第一代推理模型DeepSeek-R1-Zero和DeepSeek-R1。DeepSeek-R1-Zero作为无需监督微调(SFT)预训练阶段、直接通过大规模强化学习(RL)训练的基础模型,展现出卓越的推理能力。…

Vue2/Vue3分别如何使用Watch

在 Vue 2 和 Vue 3 中,watch 用于监听数据的变化并执行相应的逻辑。虽然两者的核心功能相同,但在语法和使用方式上有一些区别。以下是 Vue 2 和 Vue 3 中使用 watch 的详细说明: Vue 2 中的 watch 在 Vue 2 中,watch 是通过选项式…

分享一些处理复杂HTML结构的经验

在处理复杂HTML结构时,尤其是使用Java爬虫和Jsoup进行数据抓取时,以下是一些实用的经验和技巧,可以帮助你更高效地解析和提取数据: 1. 缩小解析范围 对于复杂的HTML结构,尽量缩小解析范围,只解析所需的元…

20250211解决荣品的RK3566核心板在Android13下出现charge_extrem_low_power的问题

20250211解决荣品的RK3566核心板在Android13下出现charge_extrem_low_power的问题 2025/2/11 17:45 缘起:荣品的RK3566核心板在Android13下,出现charge_extrem_low_power之后就直接挂住了。 由于我司使用了CW2217这个电量计,没有使用核心板自…

掌控系统性能的利器:自动化系统性能监控工具

友友们好! 我的新专栏《Python进阶》正式启动啦!这是一个专为那些渴望提升Python技能的朋友们量身打造的专栏,无论你是已经有一定基础的开发者,还是希望深入挖掘Python潜力的爱好者,这里都将是你不可错过的宝藏。 在这个专栏中,你将会找到: ● 深入解析:每一篇文章都将…