后台管理系统:项目路由搭建与品牌管理

路由的搭建 

先删除一些不需要的界面

然后发现跑不起来,我们需要去配置

 

 删减成这样,然后自己新建需要的路由组件

改成这样,这里要注意。我们是在layout这个大的组件下面的,meta 中的title就是我们侧边栏的标题,icon可以使用element-ui的也可以是svg 

然后效果就是这样

 这里有一个细节,那就是要改成app-main,这样就能空出点内容

品牌管理静态组件

组件 | Element

表格组件

data:表格组件将来需要展示的数据--数组类型

border:是给表格添加边框

column属性

label:显示标签

width:对应列的宽度

aligin:对齐方式

当前第几页,数据总条数,每一页战术条数,连续页码数

      @size-change="sizeChange"

      @current-change="currentChange"

      current-page:代表的是当前是第几页

      total:代表分页器一共需要展示数据条数

      page-size:代表的是每一页需要展示多少条数据

      page-sizes:代表可以设置每一页展示多少条数据

      layout:可以实现分页器布局

      pager-count:按钮的数量 如果是9 连续页码是7

品牌列表展示

有了静态页面,然后就去接口捞数据

Swagger UI

反正都是对外暴露,我们可以将四个模块统一起来,一起暴露。方便后期的使用

挂载到vue的原型上,这样你就可以在任一一个组件中去使用它

 组件实例的原型的原型指向的是Vue.prototype

任一组件可以使用APi相关的接口

 测试了一下,这里出现了很让人头疼的跨域问题

因为尚品汇后台管理项目接口地址有两个:登录时候用的是:http://39.98.123.211:8170/

商品接口信息用的是:http://39.98.123.211:8510/

可见前面是地址是一致的,但是端口号不一样。

这就会导致,登录进得去,但是获取数据的时候,没有办法取数据;或者登录不进,但是数据取得到。无论哪一种都不是我们想要的。

不使用这种自我拼接的方式

直接为空

手动添加

然后成功

 注意:elementui当中的table组件,展示的数据是以一列一列进行展示数据

  现在搞分页,因为我们现在展示是死数据 

 @size-change="sizeChange"

@current-change="currentChange"

我们需要这俩个数据

没有点击时,默认为1.如果传递了参数,就修改参数为传递的那个,然后发起请求

  @size-change只的是展示的条数 

添加品牌与修改品牌静态完成

组件 | Element

 这就是我们想要的效果

<el-dialog title="收货地址" :visible.sync="dialogFormVisible"><el-form :model="form"><el-form-item label="活动名称" :label-width="formLabelWidth"><el-input v-model="form.name" autocomplete="off"></el-input></el-form-item><el-form-item label="活动区域" :label-width="formLabelWidth"><el-select v-model="form.region" placeholder="请选择活动区域"><el-option label="区域一" value="shanghai"></el-option><el-option label="区域二" value="beijing"></el-option></el-select></el-form-item></el-form><div slot="footer" class="dialog-footer"><el-button @click="dialogFormVisible = false">取 消</el-button><el-button type="primary" @click="dialogFormVisible = false">确 定</el-button></div>
</el-dialog>

 现在的效果是这样的,而我们应该修改为上传图片那种方式

应该是这样的 

<el-uploadclass="avatar-uploader"action="https://jsonplaceholder.typicode.com/posts/":show-file-list="false":on-success="handleAvatarSuccess":before-upload="beforeAvatarUpload"><img v-if="imageUrl" :src="imageUrl" class="avatar"><i v-else class="el-icon-plus avatar-uploader-icon"></i>
</el-upload><style>.avatar-uploader .el-upload {border: 1px dashed #d9d9d9;border-radius: 6px;cursor: pointer;position: relative;overflow: hidden;}.avatar-uploader .el-upload:hover {border-color: #409EFF;}.avatar-uploader-icon {font-size: 28px;color: #8c939d;width: 178px;height: 178px;line-height: 178px;text-align: center;}.avatar {width: 178px;height: 178px;display: block;}
</style><script>export default {data() {return {imageUrl: ''};},methods: {handleAvatarSuccess(res, file) {this.imageUrl = URL.createObjectURL(file.raw);},beforeAvatarUpload(file) {const isJPG = file.type === 'image/jpeg';const isLt2M = file.size / 1024 / 1024 < 2;if (!isJPG) {this.$message.error('上传头像图片只能是 JPG 格式!');}if (!isLt2M) {this.$message.error('上传头像图片大小不能超过 2MB!');}return isJPG && isLt2M;}}}
</script>

 完成

添加品牌完成

把表单信息传送到后台,后台插入到数据库中

先写接口

处理添加品牌

新增品牌:/admin/product/baseTrademark/save post 携带俩个参数:品牌名称,品牌logo

切记:对于新增的品牌,给服务器传递数据,不需要传递id。id是由服务器生成

修改品牌的

修改品牌

/admin/product/baseTrademark/update post 携带三个参数:id,品牌名称,品牌logo

切记:对于修改某一个品牌的操作,前端携带的参数需要带上id,你需要告诉服务器修改的是哪一个品牌

而这俩个接口类似,我们可以封装成一个

这里传的对象是有讲究的,要跟服务器一样。然后用v-model传过去

 这里要说到俩个事件

action:设置图片上传的路径

on-succes:图片上传成功执行一次

before-upload:图片上传之前,执行一次

 写添加事件

 添加成功,我这里有刚刚报了个错误,是接口弄反了。下面才是正确接口

修改品牌完成

原先我们写了一个回调,我们需要传入一个参数,因为我们需要知道修改的是哪一个品牌

row:当前用户选中这个品牌信息

 其实很简单,就是把值重新赋值

前三页没有权限修改  这里要用浅拷贝的方式,不要直接改表单存储的值。这里我们采用有关传入有id那么就是修改,否则就是添加 

品牌的表单验证(自定义校验规则)

组件 | Element

 

 Form 组件提供了表单验证的功能,只需要通过 rules 属性传入约定的验证规则,并将 Form-Item 的 prop 属性设置为需校验的字段名即可。

rules:{// require:必须要校验字段(前面5角星有关) message提示信息 trigger:用户行为设置(事件的设置:blur change)tmName: [{ required: true, message: '请输入品牌名称', trigger: 'blur' },// 品牌长度为2-10{ min: 2, max: 10, message: '长度在 2 到 10 个字符', trigger: 'change' }],logoUrl: [{ required: true, message: '请选择品牌的图片' }],}}

 只有校验都成功后,才能点确定

 

  自定义表单验证 

删除品牌操作

点击删除按钮时,出现弹框

 

 this.$confirm(`你确定删除${row.tmName}?`,  '提示', {confirmButtonText: '确定',cancelButtonText: '取消',type: 'warning'}).then(() => {this.$message({type: 'success',message: '删除成功!'});}).catch(() => {// this.$message({type: 'info',message: '已取消删除'});          });}

 我们需要考虑的一点,就是删除这个品牌信息需要,告诉服务器,也就是发起请求

/admin/product/baseTrademark/remove/{id}

 ​​​​​​​

 deleteTradMark(row){this.$confirm(`你确定删除${row.tmName}?`,  '提示', {confirmButtonText: '确定',cancelButtonText: '取消',type: 'warning'}).then(async () => {// 向服务器发请求let result=await this.$Api.trademark.reqDeleteTradeMark(row.id);if(result.code==200){this.$message({type: 'success',message: '删除成功!'});this.getPageList(this.list.length>1?this.page:this.page-1);}}).catch(() => {// this.$message({type: 'info',message: '已取消删除'});          });}

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

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

相关文章

Java eight 解读流(Stream)、文件(File)、IO和异常处理的使用方法

目录 Java 流(Stream)、文件(File)和IO读取控制台输入读写文件FileInputStreamFileOutputStream Java目录 Java 异常处理 Java 流(Stream)、文件(File)和IO java.io 包几乎包含了所有操作输入、输出需要的类。所有这些流类代表了输入源和输出目标。 Java.io 包中的流支持很多种…

51页企业数字化转型战略实践与启示PPT(附400份转型资料)

本资料来源公开网络&#xff0c;仅供个人学习&#xff0c;请勿商用&#xff0c;如有侵权请联系删除&#xff0c;更多内容浏览公众号&#xff1a;智慧方案文库 企业数字化转型之路.pptx企业数字化转型大数据湖一体化平台项目建设方案PPT.pptx企业数字化转型大数据湖一体化运营管…

Angular安全专辑之四 —— 避免服务端可能的资源耗尽(NodeJS)

express-rate-limit是一个简单实用的npm包,用于在Express应用程序中实现速率限制。它可以帮助防止DDoS攻击和暴力破解,同时还允许对API端点进行流控。 express-rate-limit及其主要功能 express-rate-limit是Express框架的一个流行中间件,它允许根据IP地址或其他标准轻松地对请求…

U盘文件恢复软件推荐,这几款高效恢复数据!

“我真的可以算得上是一个u盘杀手了&#xff0c;好多资料保存在u盘中&#xff0c;但经常都会由于粗心导致u盘中的数据丢失。大家有什么u盘文件恢复软件可以推荐吗&#xff1f;救救我的u盘吧&#xff01;” 在现代社会&#xff0c;人手一个u盘一点也不夸张。尤其是学生党和打工人…

阿里云架构

负载均衡slb 分类以及应用场景 负载均衡slb clb 传统的负载均衡(原slb) 支持4层和7层(仅支持对uri(location),域名进行转发) 一般使用slb(clb) alb 应用负载均衡 只支持7层,整合了nginx负载均衡的各种功能,可以根据用户请求头,响应头 如果需要详细处理用户请求(浏…

华为数通方向HCIP-DataCom H12-821题库(单选题:141-160)

第141题 Router-LSA 能够描述不同的链路类型&#xff0c;不属于Router LSA 链路类型的是以下哪一项? A、Link Type 可以用来描述到末梢网络的连接&#xff0c;即 SubNet B、Link Type 可以用来描述到中转网络的连接&#xff0c;即 TranNet C、Link Type 可以用来描述到另一…

2023京东口腔护理赛道行业数据分析(京东销售数据分析)

近年来&#xff0c;口腔护理逐渐成为年轻人重视的健康领域&#xff0c;从口腔护理整体市场来看&#xff0c;牙膏和牙刷等基础口腔护理产品仍占据主导地位。不过&#xff0c;随着口腔护理市场逐步朝向精致化、专业化、多元化等方向发展&#xff0c;不少新兴口腔护理产品受到消费…

算法通关村第8关【白银】| 二叉树的深度和高度问题

1.最大深度问题 思路&#xff1a;递归三部曲 第一步&#xff1a;确定参数和返回值 题目要求求二叉树的深度&#xff0c;也就是有多少层&#xff0c;需要传递一个root从底层向上统计 int maxDepth(TreeNode root) 第二步&#xff1a;确定终止条件 当递归到null时就说明到底了…

SpringMVC中Controller层获取前端请求参数的几种方式

SpringMVC中Controller层获取前端请求参数的几种方式 1、SpringMVC自动绑定2、使用RequestParam 注解进行接收3、RequestBody注解&#xff08;1&#xff09; 使用实体来接收JSON&#xff08;2&#xff09;使用 Map 集合接收JSON&#xff08;3&#xff09; 使用 List集合接收JSO…

持续性能优化:确保应用保持高性能

在当今数字化时代&#xff0c;应用程序的性能已经成为用户体验和业务成功的关键因素之一。无论是Web应用、移动应用还是企业级软件&#xff0c;用户对于速度和响应性的要求越来越高。因此&#xff0c;持续性能优化已经成为保证应用在竞争激烈的市场中脱颖而出的重要策略。 什么…

线性代数的学习和整理15:线性代数的快速方法

1 数学/线性代数里&#xff0c;其实很多东西的求得都有多种解决办法 很多概念&#xff0c;界定狠清晰&#xff0c;但是不好求 多种方法&#xff0c;拓宽思维 方法1&#xff1a;按定义直接去求解 方法2&#xff1a;按 2 比如求逆矩阵 概念方法&#xff0c;线性变化 增广矩阵…

JS 常见的 6 种继承方式

原型链继承 原型链继承是比较常见的继承方式之一&#xff0c;其中涉及的构造函数、原型和实例&#xff0c;三者之间存在着一定的关系&#xff0c;即每一个构造函数都有一个原型对象&#xff0c;原型对象又包含一个指向构造函数的指针&#xff0c;而实例则包含一个原型对象的指…

【遮天】李小曼回归,新形象无差云曦,短板竟是身材?

Hello,小伙伴们&#xff0c;我是小郑继续为大家深度解析遮天 最新一集《遮天》已经更新&#xff0c;在成功卖掉段德之后&#xff0c;叶凡便离开妖帝坟冢&#xff0c;毕竟他身上拥有庞博从妖帝坟冢带出来的道经和被誉为中州至宝的绿铜 虽然这两样物品都在叶凡的苦海中&#xff0…

【Linux】序列化与反序列化

目录 前言 什么是应用层&#xff1f; 再谈"协议" 什么是序列化和反序列化 网络版计算器 整体流程实现 Sock.hpp的实现 TcpServer.hpp的实现 Protocol.hpp的实现 CalServer.cc的编写 CalClient.cc的编写 整体代码 前言 本章是属于TCP/UDP四层模型中的第一层…

VSCode连接服务器

Pycharm连接服务器参考我的另一篇文章Pycharm远程连接服务器_pycharm进入服务器虚拟环境终端_Jumbo星的博客-CSDN博客 本质上Pycharm和VSCode都只是IDE&#xff0c;没有什么好坏之分。但是因为Pycharm连接服务器&#xff08;准确来说是部署&#xff09;需要买professional。而…

Shell 脚本入门

目录 一、Shell是什么 1.1 我们为什么要学习Shell和使用Shell&#xff1f; 1.2 Shell的分类有哪些&#xff1f; 二、Shell脚本入门知识 2.1 Shell文件命名规范 2.2 Shell解析器 2.3 用Shell 编写hello World 三、Shell的四种变量类型 3.1 系统预定义变量 3.2 自定义变…

JavaWeb 速通Ajax

目录 一、Ajax快速入门 1.基本介绍 : 2.使用原理 : 二、Ajax经典入门案例 1.需求 : 2.前端页面实现 : 3. 处理HTTP请求的servlet实现 4.引入jar包及druid配置文件、工具类 : 5.Domain层实现 : 6.DAO层实现 : 7.Service层实现 : 8.运行测试 : 三、JQuery操作Ajax 1 …

kvm虚拟机开启VNC功能

停止kvm虚拟机 virsh shutdown 虚拟机名称 在kvm虚拟机配置文件里面添加如下内容 <graphics typevnc port-1 autoportyes listen0.0.0.0 keymapen-us passwd123456> 启动kvm虚拟机 virsh start 虚拟机名称 得到虚拟机进程id ps -ef|grep 虚拟机名称 得到虚拟机vnc…

kubernetes deploy standalone mysql demo

kubernetes 集群内部署 单节点 mysql ansible all -m shell -a "mkdir -p /mnt/mysql/data"cat mysql-pv-pvc.yaml apiVersion: v1 kind: PersistentVolume metadata:name: mysql-pv-volumelabels:type: local spec:storageClassName: manualcapacity:storage: 5Gi…

使用Rust开发命令行工具

生成二进制文件&#xff0c;将其扔到环境变量的path下即可~ 用rust打造实时天气命令行工具[1] 找到合适的API 使用该api[2] 如请求 api.openweathermap.org/data/2.5/weather?qBeijing&appidyour_key: { "coord": { "lon": 116.3972, "lat&quo…