uniapp-商城-62-后台 商品列表(分类展示商品的布局)

news2025/5/24 16:37:50

        每一个商品都有类别,比如水果,蔬菜,肉,粮油等等,另外每一个商品都有自己的属性,这些都在前面的章节进行了大量篇幅的介绍。这里我们终于完成了商品类的添加,商品的添加,现在到了该进行商品列表的展示。 

        本文介绍了商品列表展示的实现过程。首先,通过界面设计,点击商品列表时,商品的基本信息会显示在右侧界面。页面布局代码包括新增商品按钮和商品展示部分,新增商品按钮允许用户跳转到新增商品页面。商品展示部分通过循环遍历商品列表,显示每个商品的类别、缩略图和基本信息,并提供编辑和删除功能。在数据库操作方面,通过异步方法获取商品列表,并根据商品类别进行归类。最后,页面逻辑通过调用云对象获取数据,并将结果赋值给商品列表进行展示。

1、界面情况

点击 商品列表,应该将商品的基本信息显示在右边的界面上。

2、页面布局代码

2.1 页面代码分析

2.1.1 新增商品按钮

        <!-- 添加一个增加按钮,通过这里也可以跳转到新增商品的页面 -->
        <navigator url="./add" class="row add">
            <view class="left">
                <!-- 一个按钮 u-icon  +  -->
                <u-icon name="plus" color="#576b95" size="22"></u-icon>
                <text class="text">新增商品</text>
            </view>
        </navigator>

2.1.2 商品的展示

2.1.3 页面代码(带注释)

<template>
	<view class="goodsList">
		<!-- 添加一个增加按钮,通过这里也可以跳转到新增商品的页面 -->
		<navigator url="./add" class="row add">
			<view class="left">
				<!-- 一个按钮 u-icon  +  -->
				<u-icon name="plus" color="#576b95" size="22"></u-icon>
				<text class="text">新增商品</text>
			</view>
		</navigator>
		
		<!-- 对商品列表goodsList 进行循环展示 -->
		<view class="row" v-for="item in goodsList" :key="item._id">
			
			<view class="title">
				<!-- 
				标题栏显示 商品类别名
				https://uniapp.dcloud.net.cn/component/uniui/uni-section.html#%E4%BB%8B%E7%BB%8D -->
				<uni-section :title="item.name" type="line"></uni-section>
			</view>
			
			<!-- 下面是该类下的商品 循环展示 在该类商品的 proGroup 列表中-->
			<view class="goodsRow" v-for="row in item.proGroup" :key="row._id">
				<view class="view">
					<!-- 左边显示商品缩略图 -->
					<view class="left">
						<!-- 如果存在就显示图的第一张【0】,不存在就显示默认图 -->
						<image v-if="row.thumb.length" class="pic" :src="row.thumb[0].url" mode="aspectFill"></image>
						<image v-else class="pic" src="../../static/images/logo.png" mode="aspectFill"></image>
					</view>
					<!-- 右边显示商品信息 -->
					<view class="right">
						<!-- 显示名字,没有描述信息显示 -->
						<view class="top">{{row.name}}</view>
						<view class="info">
							<!-- 编辑修改 -->
							<view class="icon" @click="clickEdit(row._id)">
								<u-icon name="edit-pen" size="25"></u-icon>
							</view>
							<!-- 删除该商品 -->
							<view class="icon" @click="clickRemove(row._id)">
								<u-icon name="trash" size="25"></u-icon>
							</view>
						</view>
					</view>
				</view>
			</view>
		</view>
	</view>
</template>

3.基本方法

3.1、在数据库中获取数据,并归类商品

3.2 数据库 getList的操作 代码分析

	//获取商品列表
	async getList() {
		// 获取商品类的信息 在 green-mall-category 的数据库中,数据都在  navData.data
		let navData = await db.collection("green-mall-category").get();
		let goods = []; // 所有用户列表
		let limit = 100; // 每次查询的数量
		let offset = 0; // 偏移量	
		let {total} = await db.collection('green-mall-goods').count(); // 总数量		
						
		do {
			// 获取一个对象  商品列表的对象 并放到goods列表,
			let {data} = await db.collection('green-mall-goods').skip(offset).limit(limit).get();
			goods = goods.concat(data); // 将查询到的数据添加到列表中	 concat功能:新获得的data 直接放到goods,不会改变原来的值
			offset += limit; // 更新偏移量
		} while (offset < total);  //判断偏移是否小于总数,只要等于大于总数就停止执行循环了。避免10000个商品一次读出来,如果那样,憋憋卡死,效率低下 相当于死循环
		
		//对 navData.data 进行循环,对每一个分类找到属于自类的商品,是不是自己的类商品就类ID是不是一致
		// 过滤 goods中 categroy id 和 item中id一样的数据,并将过滤出来的数据 给item.proGrou
		navData.data.forEach(item => {
			let proGroup = goods.filter(g => {
				return g.category_id == item._id
			})
			item.proGroup = proGroup
		})
		// 返回商品类数据  navData.data   中 item.proGroup 不为空的  newsArr 新数组
		let newsArr = navData.data.filter(item => {
			return item.proGroup.length
		})
		return newsArr
	},

3.3 list.vue 页面中 的引入

const goodsCloudObj = uniCloud.importObject("green-mall-goods")

3.4 页面中逻辑获取数据  调用的是云对象 3.3 ,然后再返数据   res给  goodsList   

            //获取商品列表
            async getGoodsList() {
                let res =await goodsCloudObj.getList();
                console.log(res);
                this.goodsList = res
            }

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

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

相关文章

初识C++:模版

本篇博客主要讲解C模版的相关内容。 目录 1.泛型编程 2.函数模板 2.1 函数模版概念 2.2 函数模版格式 2.3 函数模版的原理 2.4 函数模版的实例化 1.隐式实例化&#xff1a;让编译器根据实参推演模板参数的实际类型 2. 显式实例化&#xff1a;在函数名后的<>中指定模…

突破认知边界:神经符号AI的未来与元认知挑战

目录 一、神经符号AI的核心领域与研究方法 &#xff08;一&#xff09;知识表示&#xff1a;构建智能世界的语言 &#xff08;二&#xff09;学习与推理&#xff1a;让机器“思考”与“学习” &#xff08;三&#xff09;可解释性与可信度&#xff1a;让AI更透明 &#xf…

Java 处理地理信息数据[DEM TIF文件数据获取高程]

目录 1、导入依赖包 2、读取方法 3、其他相关地理信息相关内容&#xff1a; 1️⃣常用的坐标系 1、GIS 中的坐标系一般分为两大类&#xff1a; 2. ✅常见的地理坐标系 2.0 CGCS2000&#xff08;EPSG:4490&#xff09; 2.1 WGS84 (World Geodetic System 1984) &#xff08;EPSG…

谈谈对dubbo的广播机制的理解

目录 1、介绍 1.1、广播调用 1、工作原理 1.2、调用方式 1、Reference 注解 2、XML 配置 3、全局配置 1.3、 广播机制的特性 2、重试机制 2.1、默认行为 2.2、自定义逻辑 1、在业务层封装重试逻辑 2、使用 Reference 3、广播调用的实践 3.1、常用参数 1.…

003-类和对象(二)

类和对象&#xff08;二&#xff09; 1. 类的6个默认成员函数 如果一个类中什么成员都没有&#xff0c;简称为空类。 空类中真的什么都没有吗&#xff1f;并不是&#xff0c;任何类在什么都不写时&#xff0c;编译器会自动生成以下6个默认成员函数。 默认成员函数&#xff…

Linux火墙管理及优化

网络环境配置 使用3个新的虚拟机【配置好软件仓库和网络的】 F1 192.168.150.133 NAT F2 192.168.150.134 192.168.10.20 NAT HOST-ONLY 网络适配仅主机 F3 192.168.10.30 HOST-ONLY 网络适配仅主机 1 ~]# hostnamectl hostname double1.timinglee.org 【更…

Visual Studio 制作msi文件环境搭建

一、插件安装 a. 插件寻找 在 Visual Studio 2017 中&#xff0c;如果你希望安装用于创建 MSI 安装包的插件&#xff0c;第一步是&#xff1a;打开 Visual Studio 后&#xff0c;点击顶部菜单栏中的 “工具”&#xff08;Tools&#xff09;&#xff0c;然后选择下拉菜单中的 “…

鸿蒙进阶——Framework之Want 隐式匹配机制概述

文章大纲 引言一、Want概述二、Want的类型1、显式Want2、隐式Want3、隐式Want的匹配 三、隐式启动Want 源码概述1、有且仅有一个Ability匹配2、有多个Ability 匹配需要弹出选择对话框3、ImplicitStartProcessor::ImplicitStartAbility3.1、GenerateAbilityRequestByAction3.1.1…

antv/g6 图谱封装配置(二)

继上次实现图谱后&#xff0c;后续发现如果要继续加入不同样式的图谱实现起来太过麻烦&#xff0c;因此考虑将配置项全部提取封装到js文件中&#xff0c;图谱组件只专注于实现各种不同的组件&#xff0c;其中主要封装的点就是各个节点的横坐标&#xff08;x&#xff09;,纵坐标…

OpenCV CUDA模块图像过滤------用于创建一个最小值盒式滤波器(Minimum Box Filter)函数createBoxMinFilter()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 该函数创建的是一个 最小值滤波器&#xff08;Minimum Filter&#xff09;&#xff0c;它对图像中每个像素邻域内的像素值取最小值。常用于&…

网络抓包命令tcpdump及分析工具wireshark使用

文章目录 环境文档用途详细信息 环境 系统平台&#xff1a;Linux x86-64 Red Hat Enterprise Linux 8,Linux x86-64 Red Hat Enterprise Linux 7,Linux x86-64 SLES 12,银河麒麟 &#xff08;鲲鹏&#xff09;,银河麒麟 &#xff08;X86_64&#xff09;,银河麒麟&#xff08;龙…

车载诊断架构 --- 车载诊断有那些内容(上)

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 钝感力的“钝”,不是木讷、迟钝,而是直面困境的韧劲和耐力,是面对外界噪音的通透淡然。 生活中有两种人,一种人格外在意别人的眼光;另一种人无论…

【Hadoop】大数据技术之 HDFS

目录 一、HDFS 概述 1.1 HDFS 产出背景及定义 1.2 HDFS 优缺点 1.3 HDFS 组成架构 1.4 HDFS 文件块大小 二、HDFS 的Shell 操作 三、HDFS 的读写流程&#xff08;面试重点&#xff09; 3.1 HDFS 写数据流程 3.2 HDFS 读数据流程 四、DataNode 4.1 DataNode 的工作机制…

聊一下CSS中的标准流,浮动流,文本流,文档流

在网络上关于CSS的文章中&#xff0c;有时候能听到“标准流”&#xff0c;“浮动流”&#xff0c;“定位流”等等词语&#xff0c;还有像“文档流”&#xff0c;“文本流”等词&#xff0c;这些流是什么意思&#xff1f;它们是CSS中的一些布局方案和特性。今天我们就来聊一下CS…

ATGM332D-F8N22单北斗多频定位导航模块

ATGM332D-F8N 系列模块是 12.216mm 尺寸的高性能单北斗多频定位导航模块。该系列模块产品基于中科微新一代 SOC 单北斗多频芯片 AT9880B&#xff0c;支持北斗二号和北斗三号的 B1I、B1C、B2I、B3I、B2a 和 B2b 频点信号。 主要特征 多频点单北斗接收机 支持北斗二号、北斗三号…

2024年热门AI趋势及回顾

人工智能的崛起 2024 年可能会被铭记为人工智能不再是一种技术新奇事物&#xff0c;而是成为现实的一年。微软、Salesforce 和 Intuit 等巨头将人工智能融入主流企业解决方案&#xff1b;从文案写作到数据分析&#xff0c;专门的人工智能应用程序和服务如雨后春笋般涌现&#…

3. OpenManus-RL中使用AgentGym建立强化学习环境

AgentGym概述 AgentGym是为评估和开发大模型agent而设计的支持多环境和多任务的框架。该框架统一采用ReAct格式&#xff0c;提供多样化的交互环境和任务&#xff0c;支持实时反馈和并发操作。 What is Ai Agent&#xff08;基于大模型的智能体&#xff09;? 首先是人造实体&…

C++性能测试工具——sysprof的使用

一、sysprof sysprof相对于前面的一些性能测试工具来说&#xff0c;要简单不少。特别是其图形界面的操作&#xff0c;非常容易上手&#xff0c;它还支持分析文件的保存和导入功能&#xff0c;这是一个非常不错的功能。做为一款系统性能测试工具&#xff0c;它支持多种硬件平台…

树莓派内核源码的下载,配置,编译和替换

共享文件夹的创建 ubuntu创建共享文件夹可以实现和本地windows跨系统文件共享 下面是创建步骤 先在windows准备一个文件夹来当做共享文件夹 树莓派内核源码下载 1.在树莓派终端输入以下指令查看内核版本 uname -r我这里是已经编译替换过后的版本 2.选择树莓派对应的版本号下…

CentOS停止维护了,解决yum不能安装软件的问题

最近在使用CentOS的yum命令安装软件时&#xff0c;出现了如下错误&#xff1a; 原因&#xff1a; 这是因为CentOS在2024 年 6 月 30 日停止维护了&#xff0c;同时也移除了相关的软件镜像仓库&#xff0c;导致网站地址访问不了&#xff0c;从而下载不了软件。 解决方法&#xf…