vue3-实战-06-管理后台-品牌管理模块开发

news2025/2/26 19:44:47

目录

1-品牌列表

1.1-需求图

1.2-定义接口和数据类型

1.3-请求接口和渲染数据

2-新增和修改品牌

2.1-需求原型分析

2.2-dialog开发

2.3-请求接口封装

2.4-图片上传组件开发

2.5-新增-修改品牌信息

3-删除品牌

4-表单校验


      在开发品牌管理之前,我们先将mock接口数据替换为真实的服务器接口数据,然后将登录-获取用户信息-退出登录 ts定义修改完善。

用户模块ts类型定义:src\api\user\type.ts

1-品牌列表

1.1-需求图

我们开发之前先看需求原型

       从原型上看,我们需要一个使用到elemnet-plusel-card组件,顶部有个按钮添加品牌,我们需要使用到el-button组件,中间有个表格,我们需要使用到el-table组件;底部是分页,我们需要使用到分页组件el-pagination

       然后我们分析业务,我们在页面加载的时候,我们需要请求服务器,获取列表页面的数据,当然我们开始获取的是第一页的数据,然后渲染在table表格中。

1.2-定义接口和数据类型

我们在src\api\product\trademark\type.ts文件中定义数据类型;

export interface ResponseData {
  code: number
  message: string
  ok: boolean
}

//已有的品牌的ts数据类型
export interface TradeMark {
  id?: number
  tmName: string
  logoUrl: string
}

//包含全部品牌数据的ts类型
export type Records = TradeMark[]

//获取的已有全部品牌的数据ts类型
export interface TradeMarkResponseData extends ResponseData {
  data: {
    records: Records
    total: number
    size: number
    current: number
    searchCount: boolean
    pages: number
  }
}

1.3-请求接口和渲染数据

我们需要定义请求的数据类型和接受服务器返回的数据类型,

渲染请求返回的数据:

 表格组件:用于展示已有得平台数据 
table:---border:可以设置表格纵向是否有边框
table-column:---label:某一个列表 ---width:设置这列宽度 ---align:设置这一列对齐方式    
table-column:默认展示数据用div 如果我们需要显示我们自己的结构,就需要使用到插槽

分页器组件pagination 说明:
v-model:current-page:设置分页器当前页码;其中v-model实现了双向绑定
v-model:page-size:设置每一个展示数据条数
page-sizes:用于设置下拉菜单数据
background:设置分页器按钮的背景颜色
layout:可以设置分页器六个子组件布局调整

2-新增和修改品牌

2.1-需求原型分析

       当我们点击新增品牌的时候,我们需要弹框,用到el-dialog组件,组件里面有个表单,一个是输入框input,另外一个是上传文件组件,我们使用el-upload,使用el-form组件,新增品牌的时候,表单元素内容都是空,编辑的时候我们需要回显 表单内容。下面有个取消和确定按钮,我们需要使用具名插槽来实现。
       首先我们需要一个属性dialogFormVisible来控制dialog的显示和隐藏,然后我们需要判断到底是新增还是修改,因为dialog的标题不一样。

2.2-dialog开发

对话框组件dialog说明:
v-model:属性用户控制对话框的显示与隐藏的 true显示 false隐藏
title:设置对话框左上角标题

2.3-请求接口封装

     我们需要封装新增和修改的请求接口,新增和修改接口请求参数一样,唯一的区别是有没有id,有id就是修改,没有就是新增,我们可以将其封装到一个方法里面。 

2.4-图片上传组件开发

       在我们提交新增或者编辑的数据调用服务端的新增和编辑接口之前,我们需要先解决图片上传接口相关问题,我们点击组件,调用服务器端文件上传接口,获取到我们需要的图片链接,然后才可以提交新增或者编辑接口需要的接口参数。

 action:请求服务器地址,这里需要加上/api,否则不会请求服务器;
on-success:图片上传成功的回调;
before-upload:图片上传服务器之前的回调;

//上传图片组件->上传图片之前触发的钩子函数
const beforeAvatarUpload: UploadProps['beforeUpload'] = (rawFile) => {
    //钩子是在图片上传成功之前触发,上传文件之前可以约束文件类型与大小
    //要求:上传文件格式png|jpg|gif 4M
    if (rawFile.type == 'image/png' || rawFile.type == 'image/jpeg' || rawFile.type == 'image/gif') {
        if (rawFile.size / 1024 / 1024 < 4) {
            return true;
        } else {
            ElMessage({
                type: 'error',
                message: '上传文件大小小于4M'
            })
            return false;
        }
    } else {
        ElMessage({
            type: 'error',
            message: "上传文件格式务必PNG|JPG|GIF"
        })
        return false;
    }
}

//图片上传成功钩子
const handleAvatarSuccess: UploadProps['onSuccess'] = (response, uploadFile) => {
    //response:即为当前这次上传图片post请求服务器返回的数据
    //收集上传图片的地址,添加一个新的品牌的时候带给服务器
    trademarkParams.logoUrl = response.data;

}

2.5-新增-修改品牌信息

       当我们点击确定的时候,我们需要把我们收集到的数据提交给服务器,调用相关接口来实现新增或者修改。点击确定后,我们的业务逻辑除了需要发送请求,还需要关闭对话框。

首先,当我们点击添加品牌信息按钮时,我们需要显示对话框,还需要清除收集的数据(因为上一次用户可能先点击编辑其他品牌,如果不清除,这里会显示上次的信息)

       我们点击编辑的时候,我们显示对话框,还需要将列表数据的属性赋值给收集对象进行回显;Object.assign方法可以将属性的值赋值给另外一个对象。

 

点击取消或者确定按钮逻辑:

3-删除品牌

       当我们点击删除按钮的时候,我们需要弹框提示用户是否需要删除当前品牌信息,需要用到el-popconfirm组件;当用户点击确定后,我们调用服务端接口删除该品牌信息。注意,如果当前页数据只有一条,删除后,需要将当前页码减去1;否则停留在当前页面,再次获取列表接口,请求数据。

<el-table-column label="品牌操作">
                    <template #="{ row, $index }">
                        <el-button type="primary" size="small" icon="Edit" @click="updateTrademark(row)"></el-button>
                        <el-popconfirm :title="`您确定要删除${row.tmName}?`" width="250px" icon="Delete"
                            @confirm='removeTradeMark(row.id)'>
                            <template #reference>
                                <el-button type="primary" size="small" icon="Delete"></el-button>
                            </template>
                        </el-popconfirm>
                    </template>
                </el-table-column>

4-表单校验

       我们在新增和编辑的时候,需要对表单数据进行校验,校验成功了才可以提交请求服务器。点击新增品牌的时候,我们需要清除校验,然后点击确定后,我们需要校验信息。同理编辑的时候也是类似的逻辑。

//获取el-form组件实例
let formRef = ref();

 

 

 

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

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

相关文章

【数据分享】1929-2022年全球站点的逐年最低气温(Shp\Excel\12000个站点)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、湿度等指标&#xff0c;其中又以气温指标最为常用&#xff01;说到气温数据&#xff0c;最详细的气温数据是具体到气象监测站点的气温数据&#xff01; 之前我们分享过1929-2022年全球气象站…

物联网开发的流程是怎么样的

物联网开发流程&#xff0c;物联网是指通过各种传感设备把任何物品与互联网相连接&#xff0c;进行信息交换和通信&#xff0c;以实现智能化识别、定位、跟踪、监控和管理的一种网络。物联网开发流程&#xff0c;物联网开发的步骤是怎么样的&#xff1f;可以参考以下文章内容&a…

Nautilus Chain全球行分享会,深圳站圆满举办

在北京时间 6 月 4 日&#xff0c;由 Nautilus Chain 主办的“Layer3 模块化区块链的发展探讨”为主题的全球行活动&#xff0c;在深圳&#xff08;深圳南山区清华研究院&#xff09;顺利举办&#xff0c;本次分享会联合主办方还包括 Stanford Blockchain Accelerator、Zebec P…

基于ADME的分子过滤和 lead-likeness标准

T002 基于ADME的分子过滤和 lead-likeness标准 项目来源于TeachOpenCADD 本文目标 在药物设计的背景下&#xff0c;重要的是通过例如它们的物理化学性质来过滤候选分子。 在这个教程中&#xff0c;从 ChEMBL ( Talktorial T001 )获得的化合物将按照 Lipinsik 的五法则进行…

Android AIDL Callback的使用(配源码)

零、示例说明 本示例&#xff0c;完成的功能是&#xff1a;客户端向服务端注册一个回调&#xff0c;服务端是一个商店shop&#xff0c;当商店里的产品 Product 有变化时&#xff0c;调用回调向通知客户端&#xff0c;什么商品更新了。 一、完整源代码 完整源码链接: https:/…

电脑丢失dll文件怎么一键修复?哪种dll修复方法靠谱?

在使用电脑时&#xff0c;我们经常会遇到一些问题&#xff0c;例如电脑丢失了某些dll文件。这些文件是电脑运行所必需的&#xff0c;如果缺少了这些文件&#xff0c;电脑就无法正常运行。在这种情况下&#xff0c;我们需要使用使用一些方法去进行相关的修复&#xff01;下面我们…

微信小程序原生开发功能合集十九:大屏适配、分栏代码可视化编辑、骨架屏生成及WebView使用介绍

本章实现小程序大屏适配实现、pc端分栏展示实现、代码可视化编辑、骨架屏生成及WebView组件使用介绍。   另外还提供小程序开发基础知识讲解课程,包括小程序开发基础知识、组件封装、常用接口组件使用及常用功能实现等内容,具体如下:    1. CSDN课程: https://edu.csd…

高精度气象模拟软件WRF:天气预报、观测气温、分析降水、模拟尺度气象、模拟水汽湿度、土地利用变化影响、土壤水分通量、分析风场、分析土壤水体植被等气象变量

查看原文>>>高精度气象模拟软件WRF(Weather Research Forecasting)技术及案例应用 气候是多个领域&#xff08;生态、水资源、风资源及碳中和等问题&#xff09;的主要驱动因素&#xff0c;合理认知气候变化有利于解释生态环境变化机理及过程&#xff0c;而了解现在、…

立刻杀掉Oracle中的会话(session)

一、需求描述 我们开发项目的过程中,涉及到连接oracle数据库的操作,正常来说我们执行完对应的sql语句后且关闭了连接,数据库的连接就会释放了;但是现实的情况是我们在查询数据库建立的会话时,发现存在大量的InAactive会话(我们需要找到原因,且将当前的会话立刻手动删除掉…

从零手写操作系统之RVOS任务同步和锁实现-07

从零手写操作系统之RVOS任务同步和锁实现-07 并发与同步临界区、锁、死锁自旋锁1.0 版本2.0 版本原子指令思路测试 3.0 版本测试 小结其他同步技术 本系列参考: 学习开发一个RISC-V上的操作系统 - 汪辰 - 2021春 整理而来&#xff0c;主要作为xv6操作系统学习的一个前置基础。 …

练习:程序切片

练习&#xff1a;程序切片 1 简介 注&#xff1a;问题3提到了conditioned slicing。 我们没有给出计算条件切片的算法&#xff0c;但你不应该要求这样的算法。 2 问题 1 对于以下每个代码片段&#xff0c;绘制程序依赖图&#xff08;没有定义顺序边&#xff09;。 基于这些&am…

什么是 Vue.js 中的 v-if 和 v-show 指令?

什么是 Vue.js 中的 v-if 和 v-show 指令&#xff1f; Vue.js 是一种用于构建交互式用户界面的渐进式框架。它采用了响应式的数据绑定机制和组件化的开发模式&#xff0c;让开发者能够更加高效地构建复杂的 Web 应用。在 Vue.js 中&#xff0c;v-if 和 v-show 是两个常用的指令…

STM32开发——电动车报警装置

1.项目简介 1.1项目需求 点击遥控器 A 按键&#xff0c;系统进入警戒模式&#xff0c;一旦检测到震动&#xff08;小偷偷车&#xff09;&#xff0c;则喇叭发出声响报警&#xff0c; 吓退小偷。 点击遥控器 B 按键&#xff0c;系统退出警戒模式&#xff0c;再怎么摇晃系统都不…

通过项目驱动的学习方法快速掌握Java编程

摘要 Java作为一种广泛应用于软件开发领域的编程语言&#xff0c;对于零基础的学习者来说&#xff0c;学习Java编程可能存在一定的难度。本文将介绍如何通过项目驱动的学习方法&#xff0c;帮助零起点的学习者快速掌握Java编程。通过以项目为核心的学习路径、结合实践和理论的…

【Pytorch】自定义模型、自定义损失函数及模型删除修改层的常用操作

目录 问题一&#xff1a;更改模型最后一层&#xff0c;删除最后一层问题二&#xff1a;自定义模型及参数冻结问题三&#xff1a;自定义损失函数及广播机制 问题1&#xff1a;更改模型最后一层&#xff0c;删除最后一层&#xff0c;添加层。 改变模型最后一层 # Load the mo…

Jmter自动化

一、接口测试流程 1、拿到api接口文档&#xff0c;熟悉接口业务。 2、编写测试用例。 正例&#xff1a;正常参数&#xff0c;是否接口正常 反例&#xff1a;鉴权异常情况、参数异常、兼容性、黑名单、调用次数异常 3、使用接口测试用具&#xff08;Jmeter&#xff09; 4、…

chatgpt赋能python:Python安装gym:入门指南

Python安装gym: 入门指南 如果您是一位正在学习强化学习的学生&#xff0c;或者是一位研究者、开发人员&#xff0c;那么您一定会对OpenAI出品的gym库感兴趣。该库为编写和比较强化学习算法提供了一组标准环境。但是&#xff0c;在使用gym之前&#xff0c;您需要将其安装到您的…

ThinkPad无法进系统的解决方案(实测)

ThinkPad无法进系统如何解决&#xff1f; 不一样的笔记本进到BIOS的方法是不太一样的&#xff0c;下面就和大伙儿具体解读电脑上进到thinkpad的bios设置启动项的方法吧。 在开机或重启的Lenovo画面自检处&#xff0c;快速、连续多次按键盘的“F1”按键&#xff0c;即可进入BI…

基于html+css的图展示112

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

PHP实现文件上传

上传文件的必备三个条件&#xff1a; 1、上传到后台的文件 2、method "post";&#xff08;不可以为get方法&#xff09; 3、enctype "multipart/form-data";&#xff08;注意哦&#xff0c;是data&#xff0c;不是date&#xff09; 三者缺一不可 后台…