P10 属性分组

P71 属性分组页面搭建

前端组件抽取&父子组件交互

前端页面中:

菜单

1、sys_admin.sql语句在gulimail_admin数据库执行。注意自己的数据库名称是否和文件中的一致。刷新页面后,发现页面新增。找到平台属性—属性分组。

2、在product文件夹,新建attrgroup.vue分组。设计为栅格格式。左侧菜单占6列,右侧表格占18列。见element-ui官网layout布局的分栏间隔。刷新,查看效果。

3、product同级新建common文件夹,建 category.vue文件。抽取出来一个简单的树形结构,用于上面的树形分组菜单展示。

attrgroup.vue导入并注册组件

<script>
import Category from "../common/category.vue";
components: { Category}
<el-col :span="6"><category></category>
</el-col>

模板、数据、方法、创建页面时获取数据。

getmenus
<el-tree:data="menus":props="defaultProps"node-key="catId"ref="menuTree"></el-tree>
	menus: [],defaultProps: {children: "children",label: "name",},

表格

在上面的目录中,也就是生成器生成的文件。把attrgroup.vue同名文件下的内容div格式粘贴到表格模块,还有data、方法cv。

特别是AddOrUpdate导入和注册,需要cv一个新的文件进来。不要弄错了。

整体页面布局显示完成!

子传父值

要求左边菜单点击后,右边呈现详细信息。

子组件给父组件传递数据,事件机制。发送一个事件,携带上数据。

el-tree中有个 node-click 事件,包含3个参数。

@node-click="nodeclick"
nodeclick(data, node, component){console.log("树节点被点击:",data, node, component)console.log("刚才被点击的节点id:",data.catId)//向父组件发送事件this.$emit("tree-node-click",data, node, component)}

此外,父组件

<category @tree-node-click="treeNodeClick"></category>
treeNodeClick(data, node, component){console.log("父感知到子节点:",data.catId)},

P72 获取属性分组

后端

在AttrGroupController.java文件中有list路径获取信息,在此基础上面改为按catelogId查找

@RequestMapping("/list/{catelogId }")public R list(@RequestParam Map<String, Object> params,@PathVariable("catelogId") Integer catelogId){PageUtils page = attrGroupService.queryPage(params, catelogId);return R.ok().put("page", page);}

然后创建方法、添加实现

接口转到实现类,ctrl+alt+B;查看这个接口的所有实现类,ctrl+H,或者右边栏的层次结构

实现接口方法如下:接着之前的思路,包括按页查找

不要写错类名

SELECT * FROM `pms_attr_group` WHERE catelog_id = 1 and (attr_group_name like '%%'  or attr_group_id = )
public PageUtils queryPage(Map<String, Object> params, Integer categoryId) {if(categoryId == 0){ //跟原来一样IPage<AttrGroupEntity> page = this.page(new Query<AttrGroupEntity>().getPage(params),new QueryWrapper<AttrGroupEntity>());return new PageUtils(page);}else{QueryWrapper<AttrGroupEntity> wrapper = new QueryWrapper<AttrGroupEntity>().eq("catelog_id", categoryId);String s = (String) params.get("key");if(!StringUtils.isEmpty(s)){ // 优秀的字符串处理方法wrapper.and((obj)->{   // consumer 函数式编程obj.eq("attr_group_id",s).or().like("attr_group_name",s);});}IPage<AttrGroupEntity> page = this.page(new Query<AttrGroupEntity>().getPage(params),wrapper);return new PageUtils(page);}

前端

data中默认catId:0

只有节点level为3时才传递数据

if(node.level == 3){this.catId = data.catIdthis.getDataList()}

添加请求路径,记得改为飘号,动态的;否则,前端还是显示this.catId

url: this.$http.adornUrl(`/product/attrgroup/list/${this.catId}`),

P73 分组新增&级联选择器

第一步

Cascader 级联选择器

在属性分组新增页面,的分类号模块,初始化catelogs:[], 改为

		<el-cascaderv-model="dataForm.catelogId"    绑定:options="catelogs"    有哪些数据可以选择></el-cascader>

把隔壁category.vue的getmenus方法,在这新建一个getCategory方法,数据传入catelogs里,并且初始化created

发现级联结构出现,但是没有文字!

第二步

在上面的选择器增加配置属性:并且data新加

:props="props"
props:{value:"catId",label:"name",children:"children"},

显示成功!但是三级目录下,即使子为空,仍显示

第三步

[localhost:20000/product/category/list/tree](http://localhost:20000/product/category/list/tree)中把目录的子属性当为空时去掉,在categoryEntity.java中子属性增加注释 @JsonInclude(JsonInclude.Include.NON_EMPTY)

测试正常!

第四步

在vue页面查看,控制选择,找到正确的页面,发现绑定的catelogId为3个。父父子

data中改为数组格式,并且发送请求,改为:-1不管用

catelogId: this.dataForm.catelogId[this.dataForm.catelogId.length-1]

P74 级联回显

第一步

将初始化数据获取,的分类号变为path

this.dataForm.catelogPath = data.attrGroup.catelogPath;

包括分类号 v-model绑定部分

第二步

attrGroup新增catelogPath属性,并标注为数据库不存在

@TableField(exist = false)
private Long[] catelogPath;

在info请求获取数据后,根据分类号id查找完整路径,再返回实体

Long catelogId = attrGroup.getCatelogId();
Long[] path =  categoryService.findCatelogPath(catelogId);
attrGroup.setCatelogPath(path);

categoryService中新建方法,实现方法,记得反转

这里有List类型转为数组Long[] 类型toArray

	@Overridepublic Long[] findCatelogPath(Long catelogId) {List<Long> path = new ArrayList<>();// 递归查找List parentPath = findParentPath(catelogId, path);Collections.reverse(parentPath);return (Long[]) parentPath.toArray(new Long[parentPath.size()]);}
    private List findParentPath(Long catelogId, List<Long> path) {path.add(catelogId);CategoryEntity byId = this.getById(catelogId);if(byId.getParentCid() != 0){findParentPath(byId.getParentCid(), path);}return path;}

在测试类中测试,可以用@Slf4j打印查看输出

	@Testpublic void categoryAllPath(){Long[] catelogPath = categoryService.findCatelogPath(225L);log.info(Arrays.toString(catelogPath));}

成功!

第三步

发现问题,关闭页面后,分类号数据仍存在。

在dialog对话框存在回调函数,@closed="dialogClose"

新建方法,进行清除

	dialogClose(){this.dataForm.catelogPath = []},

并在级联选择器附近放入,可搜索 filterable 搜索框提示 placeholder="搜索"

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

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

相关文章

JeeSite 快速开发平台 Vue3 前端版介绍

JeeSite 快速开发平台 Vue3 前端版介绍&#xff1a; 它构建于 Vue3、Vite、Ant-Design-Vue、TypeScript 以及 Vue Vben Admin 等最前沿的技术栈之上&#xff0c;能助力初学者迅速上手并顺利融入团队开发进程。涵盖的模块包括组织机构、角色用户、菜单授权、数据权限、系统参数…

LLM的基础模型6:注意力机制

大模型技术论文不断&#xff0c;每个月总会新增上千篇。本专栏精选论文重点解读&#xff0c;主题还是围绕着行业实践和工程量产。若在某个环节出现卡点&#xff0c;可以回到大模型必备腔调或者LLM背后的基础模型新阅读。而最新科技&#xff08;Mamba,xLSTM,KAN&#xff09;则提…

leetcode刷题-二叉树01

代码随想录二叉树part01|二叉树的理论基础 理论基础种类&#xff1a;存储方式&#xff1a;二叉树的遍历&#xff1a;二叉树定义方式&#xff1a; 理论基础 代码随想录文档讲解 种类&#xff1a; 满二叉树&#xff0c;节点数量&#xff1a; 2 n − 1 2^n-1 2n−1完全二叉树&a…

MongoDB~索引使用与优化

Study by&#xff1a; https://docs.mongoing.com/indexeshttps://www.cnblogs.com/Neeo/articles/14325130.html#%E5%85%B6%E4%BB%96%E7%B4%A2%E5%BC%95 作用 如果你把数据库类比为一本书&#xff0c;那书的具体内容是数据&#xff0c;书的目录就是索引&#xff0c;所以索引…

NIST 电子病历中的疫苗部分的认证

美国国家标准与技术研究院&#xff08;National Institute of Standards and Technology&#xff0c;NIST&#xff09;对电子病历的认证 分几个阶段&#xff0c;每个阶段又分门诊和住院&#xff0c;然后又分若干模块。下面是疫苗模块的数据提交的测试脚本。 170.302k_Immuniza…

数据提取:构建企业智能决策的基石

在数字化时代&#xff0c;数据已成为企业最宝贵的资产之一。而数据提取&#xff0c;作为数据分析和智能决策的第一步&#xff0c;正日益成为企业构建竞争优势的关键环节。本文将探讨数据提取的重要性、方法以及它如何为企业的智能决策奠定坚实基础。 一、数据提取的重要性 洞…

Rust 实现 kvmsample

GitHub - BillXiang/kvmsample at rust cd kvmsample make cp test*.bin kvmsample-rust cd kvmsample-rust cargo run两个vm中分别执行IO_OUT和IO_IN: KVM_EXIT_IO_OUT addr:16 data:84 KVM_EXIT_IO_IN addr 16 KVM_EXIT_IO_OUT addr:16 data:85 KVM_EXIT_IO_IN addr 16 KVM_…

多线程..

线程定义&#xff1a;线程是操作系统能够进行运算调度的最小单位&#xff0c;它被包含在进程之中&#xff0c;是进程中实际运作单位。简单来说&#xff0c;应用软件中相互独立&#xff0c;可以同时运作的功能。 多线程作用&#xff1a;有了多线程&#xff0c;我们就可以让程序…

【机器学习300问】108、什么是多项式回归模型?

一、多项式回归是什么 &#xff08;1&#xff09;举例说明 假设你经营着一家农场&#xff0c;想要根据土地面积来预测作物的产量。如果你只用线性模型&#xff08;即&#xff09;&#xff0c;你可能会发现它并不足以描述实际的产量情况&#xff0c;因为实际产量可能会随着土地…

NLP--机器学习

1.定义&#xff1a;机器学习是一种从经验中学习关于某类任务和该任务执行性能衡量参数&#xff0c;并且性能衡量参数会随着经验的增加而提高的计算机程序。机器如何做我们能做的事&#xff0c;这是早期关于机器学习思想的起源。机器学习和程序编码最大的区别之一就是可以在没有…

java国际化配置文件如何使用UTF8

1.直接设置SpringMessage的编码 import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.context.MessageSource; import org.springframework.context.annotation.Bean; import org.springframework.context.support.ReloadableResou…

Acwing 786.第K个数

Acwing 786.第K个数 题目描述 786. 第k个数 - AcWing题库 运行代码 #include <iostream> #include <algorithm> using namespace std; const int N 100010; int q[N];int main() {int n, k;scanf("%d%d", &n, &k);for (int i 0; i < n; …

opencv进阶 ——(十三)基于三角剖分实现换脸

换脸的关键在于人脸对齐&#xff0c;人脸对齐主要包括以下几点&#xff1a; 1、人脸可能存在一定的角度&#xff0c;因此需要先将倾斜方向进行对齐 2、大小对齐&#xff0c;将模板人脸的大小缩放到同一大小 3、要想有好的效果&#xff0c;关键点选取很重要 4、人脸对齐后&a…

#04 Stable Diffusion与其他AI图像生成技术的比较

文章目录 前言1. Stable Diffusion2. DALL-E3. GAN&#xff08;生成对抗网络&#xff09;4. VQ-VAE比较总结 前言 随着人工智能技术的飞速发展&#xff0c;AI图像生成技术已成为创意产业和科研领域的热点。Stable Diffusion作为其中的佼佼者&#xff0c;其性能和应用广受关注。…

黑马python-JavaScript

1.JavaScript的定义&#xff1a; JavaScript是运行在浏览器端的脚步语言&#xff0c;是由浏览器解释执行的、简称js。它能够让网页和用户有交互功能&#xff0c;增加良好的用户体验效果 2.使用方式&#xff1a; 1.行内式&#xff08;主要用于事件&#xff09; <input type&q…

开发常用软件

开发相关 代码编译 Visual Studio 2019 Visual Studio 2022 代码测试工具 LINQPad Premium 5 LINQPad 7 打包工具 Advanced Installer 反编译工具 ILSpy dnSpy spy 数据库相关 SQLite Expert Professional 5 DLL扫描工具 depends 界面设计 SvgToXaml Materi…

【大数据】计算引擎:Spark核心概念

目录 前言 1.什么是Spark 2.核心概念 2.1.Spark如何拉高计算性能 2.2.RDD 2.3.Stage 3.运行流程 前言 本文是作者大数据系列中的一文&#xff0c;专栏地址&#xff1a; https://blog.csdn.net/joker_zjn/category_12631789.html?spm1001.2014.3001.5482 该系列会成体…

JAVA技术设计模式

设计模式结构图 设计原则 职责单一原则接口隔离原则 一个类对另一个类的依赖应该建立在最小的接口上 依赖倒置面向接口编程,参数或变量,依赖注入,使用父类 开闭原则 对扩展开放(对提供方),对修改关闭(对使用方) 用抽象构建框架,用实现扩展细节 里氏替换原则…

java中的双列集合(Map,HashMap,TreeMap,LinkedHashMap)

双列集合的特点 双列集合一次需要存一对数据&#xff0c;分别为键和值 键不能重复&#xff0c;值可以重复 键和值是一一对应的&#xff0c;每一个键只能找到自己对应的值 键值这个整体 &#xff0c;我们称之为“键值对”或者“键值对对象”&#xff0c;在Java中叫做“Entry对象…

CAPL如何发送一条UDP报文

UDP作为传输层协议,本身并不具有可靠性传输特点,所以不需要建立连接通道,可以直接发送数据。当然,前提是需要知道对方的通信端点,也就是IP地址和端口号。 端口号是传输层协议中最显著的特征,传输层根据它来确定上层绑定的应用程序,以达到把数据交给上层应用处理的目的。…