后台管理项目重构为vue3.0

news2024/11/16 9:00:45

目录

  • 前言:
  • 为什么要重构项目?
  • 重构的目的
  • 具体案例
  • 下载项目
    • 一. 为什么要重构后台管理项目
    • 二. 安装项目所需的vue3.0 插件
    • 三. 具体代码重构
    • 四. 在更改中遇到的`bug`
  • 总结

前言:

  • 我们平常玩的游戏有时需要更新出新的内容,我们的项目也需要更新迭代,这就需要项目的重新构建,这样就能向用户展现更好的,更优秀的项目。

为什么要重构项目?

项目重构的理由我觉得应该是下面几个原因:

1、项目代码结构混乱,层次不清,代码风格不统一
2、漏洞多,稳定性差
3、有新的功能需求,但是之前的框架已经不能满足了
4、各种大量接口回调导致内存泄漏严重
5、业务代码和通用代码混合
6、包含大量重复代码
7、参数列表过长,参数太多的话,应该考虑用对象去替换参数列表

其实,重构是一个不断发现问题、解决问题的过程。

重构的目的

使代码更容易理解,方便后期维护,也就是要让每个模块的定位清晰明确
发现隐藏的代码缺陷
代码风格要优雅~,内容质量高,按照合理的设计模式和编程思想去重构
同步新的需求
项目功能交互来个极致体验,功能上要要尽量做到不卡顿 不闪退,要满足产品需求的细节
从长远来看,可以提高编程效率

具体案例

下载项目

  • 下载地址
  • project-onevue2.0的后台管理系统
  • vue3-projectvue3.0的后台管理系统

下面是我重构后台管理项目的一个组件

一. 为什么要重构后台管理项目

由于vue3.0的推广,vue2.0已经不能满足相应功能,所以需要vue3.0来重构此项目

二. 安装项目所需的vue3.0 插件

1.安装element-plus
	element-plsu是element-ui的vue3.0版本所以需要安装

element-plus官网

# 选择一个你喜欢的包管理器

# NPM
$ npm install element-plus --save

# Yarn
$ yarn add element-plus

# pnpm
$ pnpm install element-plus

在main.js中引入

import ElementPlus from 'element-plus'
// 引入的是element-plus 的css样式
import 'element-plus/dist/index.css'
// 国际版(翻译)
import local from 'element-plus/es/locale/lang/zh-cn'
//挂载
app.use(ElementPlus, { local })
2. 安装axios 
	npm i axios
在main.js中引入:
	import axios from 'axios'
	//挂载
	app.config.globalProperties.$https = axios
  • 安装和在main.js中引入完成之后项目基本就可以使用了

三. 具体代码重构

<template>
  <div class="student">
    <!-- 查询 -->
    <el-form :inline="true" :model="formInline" class="demo-form-inline" size="small">
      <el-form-item label="姓名">
        <el-input v-model="formInline.name" placeholder="请输入姓名"></el-input>
      </el-form-item>
      <el-form-item>
        <el-button type="primary" @click="find">查询</el-button>
      </el-form-item>
      <el-form-item>
        <el-button type="primary" @click="reset">重置</el-button>
      </el-form-item>
    </el-form>
    <!-- 表格 -->
    <!-- 1: 0-9 2: 10-19 3: 20-29 slice((当前页数-1)*每页的条数,当前页数*当前的条数) -->
    <el-table :data="compDate" border style="width: 100%">
      <el-table-column prop="name" label="姓名" align="center">
      </el-table-column>
      <el-table-column prop="age" label="年龄" align="center">
      </el-table-column>
      <el-table-column prop="sex_text" label="性别" align="center">
      </el-table-column>
      <el-table-column prop="number" label="学号" align="center">
      </el-table-column>
      <el-table-column prop="class" label="班级号" align="center">
      </el-table-column>
      <el-table-column prop="state_text" label="状态" align="center">
      </el-table-column>
      <el-table-column prop="phone" label="联系方式" align="center" width="110">
      </el-table-column>
      <el-table-column prop="address" label="地址" align="center">
      </el-table-column>

      <el-table-column align="center" label="操作" width="100">
        <template slot-scope="scope">
          <el-button type="danger" size="mini" :icon="Delete" @click="del(scope.row)">
          </el-button>
        </template>
      </el-table-column>
    </el-table>
    <!-- 分页 -->
    <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="currentPage"
      :page-sizes="[5, 10, 20, 30, 50]" :page-size="pageSize" layout="total, sizes, prev, pager, next, jumper"
      :total="total">
    </el-pagination>
  </div>
</template>

<script setup>
import { Delete } from '@element-plus/icons-vue'
import { student, studentDel } from "../../api/api.js";
import { ref, reactive, computed } from 'vue'
import { onMounted } from 'vue'

// 表格内的总数据
let tableData = ref([])
// 查询
let formInline = reactive({
  name: "",
})
// 总条数
let total = ref(0)
// 每页显示的数量
let pageSize = ref(10)
// 当前页
let currentPage = ref(1)
onMounted(() => {
  getData();
})

let compDate = computed(() => {
  return tableData.value.slice(// 起点
    (currentPage.value - 1) * pageSize.value,
    // 终点(数据截取在终点的前一个结束)
    currentPage.value * pageSize.value
  )

})
// 修改每页显示的数量
let handleSizeChange = function (val) {
  pageSize.value = val;
  // 每次修改完成后,回到当前第一页
  currentPage.value = 1;
}
// 修改当前页
let handleCurrentChange = function (val) {
  currentPage.value = val;
}
// 获取数据
let getData = function (params) {
  student(params).then((res) => {
    if (res.data.status === 200) {
      // 表格内的总数据
      tableData.value = res.data.data;
      // 总条数
      total.value = res.data.total;
      // 循环遍历
      tableData.value.forEach((item) => {
        // 因有些后台是数组,前端显示时需要改变为汉字
        // 尽量不要去修改原数据,因为后续的使用会造成影响
        item.sex === 1 ? (item.sex_text = "男") : (item.sex_text = "女");
        item.state === "1"
          ? (item.state_text = "已入学")
          : item.state === "2"
            ? (item.state_text = "未入学")
            : (item.state_text = "休学中");
      });
    }
  });
}
// 删除
let del = function (row) {
  studentDel(row.id).then((res) => {
    if (res.data.status === 200) {
      $message({ message: "数据删除成功", type: "success" });
      // 重新获取数据
      getData();
    }
  });
  console.log(row);
}
// 查询
let find = function () {
  getData(formInline);
}
// 重置
let reset = function () {
  formInline = {};
  getData(formInline);
}


</script>

四. 在更改中遇到的bug

1.无法读取绝对路径

在这里插入图片描述

更改方案:

1.不用绝对路径使用相对路径
在这里插入图片描述
2.安装vite-aliases插件: npm i vite-aliases
在vite.config.js中进行配置
在这里插入图片描述

2.无法读取文件

在这里插入图片描述

解决方案:

找到相应的路由在其后面加上文件后缀名即可
在这里插入图片描述

3.element-ui的升级一些语法的警告:

在这里插入图片描述

原因:

在这里插入图片描述

解决方案:

在这里插入图片描述

总结

以上就是后台管理项目重构为vue3.0的小案例以及我在更改的过程中遇见的bug以及更改方法。希望本篇文章能够帮助到你,不懂得可以评论区或者私信问我,我也会一 一解答。谢谢观看!
我的其他文章:https://blog.csdn.net/m0_60970928?type=blog

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

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

相关文章

组件化、模块化、集中式、分布式、服务化、面向服务的架构、微服务架构

目录 1.组件化与模块化 1.1.组件化 2.模块化 2.1.模块化和组件化的区别 3.集中式与分布式 3.1.集中式 3.2.分布式 4.服务化 5.面向服务的架构 5.1.什么是SOA 5.2.实现SOA 5.3.面向对象和面向服务的对比 6.微服务架构 6.1.SOA和微服务 7.总结 最近最火的词是什么…

1月份 GameFi 行业报告

Jan. 2023&#xff0c; DanielData Source&#xff1a; January Monthly GameFi Report在经历了艰难的一年之后&#xff0c;1 月是对加密货币市场最有利的月份。虽然可以说的大部分内容适用于其他看涨周期&#xff0c;但有几个统计数据令 1 月在区块链领域非常有趣。例如&#…

花3个月面过京东测开岗,拿个20K不过分吧?

背景介绍 计算机专业&#xff0c;代码能力一般&#xff0c;之前有过两段实习以及一个学校项目经历。第一份实习是大二暑期在深圳的一家互联网公司做前端开发&#xff0c;第二份实习由于大三暑假回国的时间比较短&#xff08;小于两个月&#xff09;&#xff0c;于是找的实习是在…

GPU并行效率问题——通过MPS提升GPU计算收益

现象描述使用V100_32G型号的GPU运行计算程序时&#xff0c;发现程序每5秒能够完成一次任务&#xff0c;耗费显存6G。鉴于V100 GPU拥有32G的显存&#xff0c;还有很多空闲&#xff0c;决定同时运行多个计算程序&#xff0c;来提升GPU计算收益。然而&#xff0c;这一切都是想当然…

Kotlin新手教程一(Kotlin简介及环境搭建)

目录一、 什么是Kotlin&#xff1f;二、为什么要使用Kotlin&#xff1f;三、使用IntelliJ IDEA搭建Kotlin四、Kotlin使用命令行编译一、 什么是Kotlin&#xff1f; Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言&#xff0c;它也可以被编译成为 JavaScript 源代码&…

IDEA入门安装使用教程

一、背景 作为一个Java开发者&#xff0c;有非常多编辑工具供我们选择&#xff0c;比如Eclipse、IntelliJ IDEA、NetBeans、Visual Studio Code、Sublime Text等等&#xff0c;这些有免费也有收费的&#xff0c;但是就目前市场占比来说普遍使用Eclipse和IntelliJ IDEA这两款主…

字节软件测试岗:惨不忍睹的三面,幸好做足了准备,月薪19k,已拿offer

我今年25岁&#xff0c;专业是电子信息工程本科&#xff0c;19年年末的时候去面试&#xff0c;统一投了测试的岗位&#xff0c;软件硬件都有&#xff0c;那时候面试的两家公司都是做培训的&#xff0c;当初没啥钱&#xff0c;他们以面试为谎言再推荐去培训这点让我特别难受。后…

让huggingface/transformers的AutoTokenizer从本地读词表

https://stackoverflow.com/questions/62472238/autotokenizer-from-pretrained-fails-to-load-locally-saved-pretrained-tokenizer

ArcGIS网络分析之构建网络分析数据集(一)

说明: 1. 本文主要用于演示网络分析服务的搭建过程。所以在此不会深入讨论网络分析服务的每一个细节,本文的目的就是让初学者学会使用网络分析服务进行基本的分析(主要针对后续的WEB开发):路径分析,最近设施点分析,以及服务区分析。 2.关于OD成本矩阵分析,多路径配送,…

如何解决 Python 错误 NameError: name ‘X‘ is not defined

Python“NameError: name is not defined”发生在我们试图访问一个未定义的变量或函数时&#xff0c;或者在它被定义之前。 要解决该错误&#xff0c;需要确保我们没有拼错变量名并在声明后访问它。 确保你没有拼错变量或函数 下面是产生上述错误的示例代码。 employee {na…

【MySQL进阶】SQL优化

&#x1f60a;&#x1f60a;作者简介&#x1f60a;&#x1f60a; &#xff1a; 大家好&#xff0c;我是南瓜籽&#xff0c;一个在校大二学生&#xff0c;我将会持续分享Java相关知识。 &#x1f389;&#x1f389;个人主页&#x1f389;&#x1f389; &#xff1a; 南瓜籽的主页…

论文阅读笔记《Common Visual Pattern Discovery via Spatially Coherent Correspondences》

核心思想 两组点集中共有的匹配区域通常具备两个特点&#xff1a;1.局部的特征相似&#xff1b;2.特征点在空间上的分布也相似。作者将候选匹配点对作为图的节点&#xff0c;将两种相似性统一到边的权重来表示。通过寻找图中稠密连接的子图来寻找两个点集中的匹配区域&#xff…

2023年浙江建筑特种工(施工升降机)真题题库及答案

百分百题库提供特种工&#xff08;施工升降机&#xff09;考试试题、特种工&#xff08;施工升降机&#xff09;考试预测题、特种工&#xff08;施工升降机&#xff09;考试真题、特种工&#xff08;施工升降机&#xff09;证考试题库等,提供在线做题刷题&#xff0c;在线模拟考…

大数据DataX(一):DataX的框架设计和插件体系

文章目录 DataX的框架设计和插件体系 一、DataX是什么

Python客户端使用SASL_SSL连接Kafka需要将jks密钥转换为pem密钥,需要转化成p12格式再转换pem才能适配confluent_kafka包

证书生成 生成证书以及jks参考以下文章 https://blog.csdn.net/qq_41527073/article/details/121148600 证书转换jks -> pem 需要转化成p12以下转换才能适配confluent_kafka包&#xff0c;直接jks转pem会报错不能使用&#xff0c;具体参考以下文章 https://www.ngui.cc/z…

我的Android启动优化—【黑白屏优化】

简述 在Android App使用过程中&#xff0c;对于应用的优化是一个加分项&#xff0c;举个例子&#xff0c;打开你的App需要2秒&#xff0c;人家0.5秒&#xff0c;这就是很大的用户体验上的优化。 问题的产生 在开发中&#xff0c;我们在启动app的时候&#xff0c;屏幕会出现一…

C语言之函数

函数不可嵌套定义&#xff0c;函数之间为平行关系#include<stdio.h> //比较大小 int max(int x,int y){int z;if(x>y){zx;}else{zy;}return z;//带返回值 }//不带参数 void help(void){printf("**********hello********\n"); }int main(){int num;nummax(3,…

Kubernetes集群编排工具helm3 工作学习记录

文章目录1. helm 介绍、组件、安装和目录结构1.1 helm 介绍1.2 helm 组件1.2.1 helm2 和 helm3 的区别1.3 helm 安装1.4 helm 目录结构2. 编写一个chart 和 helm3 内置对象讲解2.1 创建编写一个chart2.1.1 创建chart,引用内置对象的变量值2.1.2 helm通过各种类型chart包安装一个…

微信上线外卖小程序“门店快送”

我是卢松松&#xff0c;点点上面的头像&#xff0c;欢迎关注我哦&#xff01; 抖音入局外卖&#xff0c;微信都开始下场做外卖了&#xff0c;难道都知道这块儿特赚钱吗&#xff0c;只能说如今大环境还是不太好&#xff0c;南山必胜客都开始搞兼职了…… 2月15日&#xff0c;有…

【管理您的整个软件供应链】上海道宁与​Sonatype助力您以更安全的开源更快地交付产品

Sonatype是 美国一家开源DevOps服务供应商 支持开源组件&#xff08;中央仓&#xff09; 为开发者提供资源库管理器&#xff08;Nexus&#xff09; 帮助加速软件创新 配备Nexus产品的组织 可以做出更好的决策 更快地进行大规模创新 并且知道他们的应用程序 始终由最高质…