管理后台项目-02-平台属性组件模块

news2024/9/30 9:34:49

目录

1-分类三级列表

2-属性列表

2.1-需求功能分析

2.2-功能代码实现数据获取和变动

2.3-动态渲染数据

3-新增修改属性

3.1-点击新增属性逻辑处理

3.2-点击列表页面修改属性逻辑

3.3-新增和修改属性

3.4-点击删除属性值

3.5-点击删除属性


1-分类三级列表

需求:当我们点击菜单平台属性管理,我们需要跳转到平台属性页面,页面加载时候,需要获取一级分类的数据,当选择一个一级分类时,需要获取对应二级分类的数据,当选择一个二级分类时,需要获取对应三级分类的数据...并且改变一级分类时候,对应的二级,三级分类应该置空...

技术分析:我们观察发现三级分类联动需要在项目多个地方使用,所以我们可以将这个功能封装为一个全局组件;而且在组件加载的时候,我们需要向调用服务端接口,获取相关数据。

需要使用到行内表单:<el-form :inline="true" :model="formInline" class="demo-form-inline">

 

 引入全局自定义组件

v-model只能收集value的属性值;所以value动态获取分类的id;因为需要分类id获取下一级的数据。

//获取一级分类数据接口 /admin/product/getCategory1   get

export const reqCategory1List = ()=>request({url:'/admin/product/getCategory1',method:'get'});

//获取二级分类数据接口 admin/product/getCategory2/{category1Id} get

export const reqCategory2List = (category1Id)=>request({url:`/admin/product/getCategory2/${category1Id}`,method:'get'});

//获取三级分类数据接口 /admin/product/getCategory3/{category2Id}  get

export const reqCategory3List = (category2Id)=>request({url:`/admin/product/getCategory3/${category2Id}`,method:'get'});

 

2-属性列表

2.1-需求功能分析

当用户点击三级分类的时候,需要向服务器发起请求获取三级分类的属性数据,三级分类在全局组件中,需要将相关分类id传递给父组件,子父通信需要使用到自定义事件。当我们点击添加-修改 属性的时候,我们需要将三级分类置灰(disabled)不可更改状态,因为添加-修改 属性按钮在父组件中,点击时触发变量的变化需要传递给子组件,父子通信需要用到props属性

2.2-功能代码实现数据获取和变动

 先实现自定义事件,实现分类id改变来传递给父组件获取数据;这里需要优化点:每次变更了分类id,都需要将属性列表数据置空。核心代码:@getCategoryId="getCategoryId" :show="!isShowTable"

 

 

 一级分类id发生变化,想父组件通信,传递数据:this.$emit("getCategoryId", { categoryId: category1Id, level: 1 });level: 1表示一级分类发生变化(为了方便区分是哪个id发生变化),同理在handler2和handler3中需要分别添加
this.$emit("getCategoryId", { categoryId: category1Id, level: 2 }),this.$emit("getCategoryId", { categoryId: category1Id, level: 3 });

 

 

 

 

2.3-动态渲染数据

当获取到服务器数据后,我们需要动态展示服务器端数据。添加属性按钮只有当三级id有值的时候才可用,否则disabled;

 

3-新增修改属性

3.1-点击新增属性逻辑处理

当用户点击添加属性按钮时,需要隐藏之前展示的列表,显示新增属性名和属性值操作。

 

 清除之前填写的属性数据(用户可能点击一次添加属性,然后点击取消,当我们再次点击添加属性需要清空attrName和attrValueList

3.2-点击列表页面修改属性逻辑

 

当我们点击页面的修改按钮,需要把相关属性名称和属性值带过去,因为这里属性对象不是简单的对象,对象里面包含数组,数组里面又包含对象,不能使用浅拷贝this.attrInfo ={...row}来实现;而是需要深拷贝来实现,这里我们使用lodash当中的深拷贝this.attrInfo = cloneDeep(row)来实现。当我们修改某一个属性的时候,我们可以再新增属性值,此时需要在点击新增属性值按钮的时候,我们需要将当前的属性id赋值过去。

需求细节问题:当我们新增属性值的时候input的时候,我们可以编辑属性值,当我们的焦点失去或者按下键盘的enter键,我们需要将数据变为span;当我们再次点击的时候,我们需要再次变为input输入框,这里我们可以采用一个变量来标记。如果我们在data中定义标记位,那么添加多个属性的时候,会同时控制多行,这个时候我们需要在每个对象元素里面给一个标记位来控制,我们可以在新增对象属性的时候给对象添加一个字段flag,默认为truev-if和v-else中间不能出现任何的div,否则失效

点击修改的时候,需要将数据回显,数据复杂,需要深拷贝;为了实现在input和span之间进行切换,我们需要在元素上面新增一个flag属性,如果我们只是简单赋值(item.flag=false)就不是响应式属性(因为Vue无法探测普通的新增 property,这样书写的属性并非响应式属性),这个时候我们需要用到$set来实现

 

 

我们点击添加属性值的时候除了需要多设置一个flag变量标记外,还需要实现焦点,最后一条新增的属性值需要实现焦点定位。

 

在toLook函数中设置为row.flag = false;在toEditk函数中设置为row.flag = true;
toLook函数中除了设置完flag后,用户输入,失去焦点或者按下enter键后,我们需要对用户输入的数据进行校验(不能为空,不能和已经存在的重复)相关逻辑。row也存在于数组中,我们需要把自己拿出去和其他的进行比较。this.attrInfo.attrValueList.some中if判断就是把自己和其他进行比较。

toEditk函数中除了需要设置完flag后,点击span的时候,切换为input变为编辑模式,点击span的时候,重绘重拍一个input它是需要耗费事件,因此我们不可能一点击span立马获取到input;我们使用$nextTick,当节点渲染完毕,会执行一次。

 

3.3-新增和修改属性

我们需要收集表单数据(我们首先需要删除我们自定义的flag字段,然后需要过滤掉属性值为空的),然后点击保存按钮,向服务器发送请求,实现属性和属性值的变更。当我们属性值列表为空的时候,保存按钮应该不可用。

 

 

 

3.4-点击删除属性值

 

当我们点击属性值列表的删除属性值的时候,弹出气泡框,当我们点击确定的时候,我们先从数组中将属性值删除,真正删除后台数据是点击下面的保存按钮,提交数据。

 

 

3.5-点击删除属性

 

当我们点击属性列表页面的删除按钮,我们需要删除对应的属性。目前没有看到接口文档,暂时先忽略。

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

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

相关文章

通过案例来了解响应式开发的音频控件

目录 前言 一、视频控件的使用方法 1.语法 2、部分功能介绍 二、案例举例 三、播放效果 前言 1.本文讲解的响应式开发技术&#xff08;HTML5CSS3Bootstrap&#xff09;的HTML5表单等功能方法的代码&#xff0c;这也是很多教材的一个典型案例&#xff1b; 2.本文将讲解涉…

IMX6ULL裸机篇之中断实验-通用中断驱动说明二

一. 通用中断驱动 本文是 IMX6ULL 裸机篇---中断实验。旨在用 C 语言编写一套简单的中断驱动框架代码。 在 start.S 文件中&#xff0c;我们在中断服务函数 IRQ_Handler 中调用了 C 函数 system_irqhandler 来处 理具体的中断。 本实验会认识中断控制器&#xff1a;…

RT-DETR论文学习笔记(DETRs Beat YOLOs on Real-time Object Detection)

论文地址&#xff1a;https://arxiv.org/abs/2304.08069 代码地址&#xff1a;GitHub - PaddlePaddle/PaddleDetection: Object Detection toolkit based on PaddlePaddle. It supports object detection, instance segmentation, multiple object tracking and real-time mult…

完美解决丨ValueError: time data ‘2018/12/24‘ does not match format ‘%Y/%m/%d‘

这里我选择的是&#xff1a; python from datetime import datetime date datetime.strptime(2018/12/24, %Y/%m/%d) 如果你可以执行这段代码&#xff0c;那么你可能会收到这样的报错&#xff1a; python Traceback (most recent call last): File "C:\Users\Administra…

机器学习中最基本的概念之一:数据集、样本、特征和标签

本文重点 数据集、样本、特征和标签是机器学习中的重要概念,这些概念在机器学习算法的设计和实现过程中起着至关重要的作用。在本文中,我们将对这些概念进行详细的讲解,以便更好地理解机器学习算法的基本原理和应用。 一、数据集 数据集是机器学习中最基本的概念之一,它…

VUE3 取Slot元素方法

VUE3 取Slot元素方法 话说前面,这方法诡异的很…尽量不要用. 我这里要实现一个对slot元素进行方法拓展的事情 就比如说我要给一个元素添加自定义拖放事件,正常来说大概是这样的 //vue3 <template><div class"custom" ref"el"><slot> …

Visual Instruction Tuning: 用LLaVA近似多模态GPT-4

©Paperweekly 原创 作者 | Chunyuan Li 使用 GPT-4 进行视觉指令学习&#xff01;Visual Instruction Tuning with GPT-4! ▲ Generated by GLIGEN (https://gligen.github.io/): A cute lava llama and glasses 我们分享了 LLaVA (Language-and-Vision Assistant)&#…

linux工具gcc/g++/gdb/git的使用

目录 gcc/g 基本概念 指令集 函数库 &#xff08;重要&#xff09; gdb使用 基本概念 指令集 项目自动化构建工具make/makefile 进度条小程序 ​编辑 git三板斧 创建仓库 git add git commit git push git status git log gcc/g 基本概念 gcc/g称为编译器…

集合详解之(五)Map集合

文章目录 &#x1f412;个人主页&#x1f3c5;JavaSE系列专栏&#x1f4d6;前言&#xff1a;&#x1f380;Map集合的介绍&#x1fa85;如何保证键的不重复性&#xff1f;&#xff08;equals()与hashCode()方法的联用&#xff09;&#x1f380;HashMap集合及常用方法&#x1f38…

电能计量自动化系统在用电管理上的应用

【摘要】&#xff1a;电能计量自动化系统在用电管理上的应用&#xff0c;不仅能够实现远程自动抄表&#xff0c;减少企业在人力资源成本上的投入&#xff0c;切实地维护企业的核心利益&#xff0c;创造出更多的经济效益。还能够通过装置在线监测与配网防窥电功能实现对电能计量…

D. Tokitsukaze, CSL and Stone Game(博弈)

Problem - D - Codeforces 时津风和CSL正在玩一个石头的小游戏。 一开始&#xff0c;有n个石子堆&#xff0c;其中第ii堆有aiai石子。两位玩家轮流走棋。时津风先走。每一回合&#xff0c;棋手选择一个非空的棋堆&#xff0c;并从该棋堆中准确地取出一块石头。如果在轮到他之前…

2 路 500MSPS/1GSPS/1.25GSPS 14 位直流耦合 AD 采集 FMC 子卡模块

板卡概述 FMC155 是一款基于 VITA57.1 标准的&#xff0c;实现 2 路 14-bit、 500MSPS/1GSPS/1.25GSPS 直流耦合 ADC 同步采集 FMC 子卡模 块。该模块遵循 VITA57.1 规范&#xff0c;可直接与 FPGA 载卡配合使用&#xff0c;板 卡 ADC 器件采用 ADI 的 AD9680 芯片&#xf…

Python每日一练(20230420)

目录 1. 数组逐位判断 &#x1f31f; 2. 交错字符串 &#x1f31f;&#x1f31f; 3. 二进制求和 &#x1f31f; 4. 四舍六入五成双规则 &#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 J…

12、HOOK原理下

一、去符号和恢复符号 1.1 Stip和 Strip Type解释 strip在iOS中的作用是 剥掉目标文件中一些符号信息和调试信息&#xff0c;使文件变小。dead code strip &#xff1a; 死代码剥离、然后再去链接。那么strip在哪些地方不能起作用呢&#xff1f; 动态库 不能strip全局符号、因…

Windows下使用SSH密钥实现免密登陆Linux服务器

工具&#xff1a; win10、WinSCP 生成ssh密钥&#xff1a; 打开终端&#xff0c;使账号密码登录&#xff0c;输入命令 ssh-keygen -t rsa 会提示密钥存放路径&#xff0c;一般存放在默认路径&#xff0c;直接回车即可&#xff0c;中间会提示输入密码&#xff0c;这里需要注…

工作流自动化和RPA自动化,哪个更适合你?

2018年&#xff0c;一款名为《Overcooked!2》&#xff08;又名“胡闹厨房”、“分手厨房”&#xff09;的多人合作模拟类游戏风靡全球&#xff0c;在游戏中&#xff0c;玩家扮演厨师在充满各种障碍和危险的厨房里准备食材、烹饪、上菜和清理&#xff0c;需要在尽可能短的时间内…

window11开启wsl2

前言 以前玩linux&#xff0c;总是习惯装双系统&#xff0c;其实双系统特别麻烦。wsl现在的功能其实挺强大的&#xff0c;完全可以代替双系统&#xff0c;去完成一些在linux上的环境搭建。这篇文章记录下window11如何开启wsl2功能&#xff0c;并且安装ubuntu系统。 开启wsl2功…

2023自助洗车店系统解决方案共享洗车无人洗车风口

2021年中国汽车保有量预计超6.3亿辆,洗车市场需求巨大,传统洗车投资大、费用贵、成本高耗水大、占地面积大,而自助洗车机占据传统洗车耗水量1/4 ,占地面积1/70 ;节能环保得到政府的大力支持,且结合信息物联技术,实现智能化管理,高效能运营,灵活便捷服务,符合智慧城市发展原则,成…

开放式耳机有什么好处,列举几款性能高的开放式蓝牙耳机

骨传导耳机也称为“不入耳式”耳机&#xff0c;是一种通过颅骨、骨迷路、内耳淋巴液和听神经之间的信号传导&#xff0c;来达到听力保护目的的一种技术。由于它可以开放双耳&#xff0c;所以在跑步、骑行等运动时使用十分安全&#xff0c;可以避免外界的干扰。这种耳机在佩戴时…

AAAI 2023 | 基于Conductance的高效率和高质量的图聚类算法

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入&#xff01; ╱ 作者简介╱ 林隆龙 博士、副教授 目前任职于西南大学计算机与信息科学学院 软件学院。2022年6月于华中科技大学计算机科学与技术学院获博士学位。目前主要研究兴趣包括(时序)社区挖掘、局部聚类、Personaliz…