uniapp-商城-57-后台 新增商品(弹窗属性数据添加父级)
后台增加商品,需要添加相关的数据信息,这里还要添加属性,前面已经对相关的界面布局继续了编写。这里还要对页面添加的数据,置入到云数据库,继续永久保存,便于后期的使用。这里主要是讲属性数据 父级信息的添加,后面再继续子级数据添加。(父级就是颜色,子级就是红,绿等)
1、概述
本文介绍了在后台系统中添加商品属性(父级信息)并存储到云数据库的过程。首先,回顾了界面布局和属性显示的嵌套结构。接着,详细说明了如何通过云对象处理商品属性数据,包括建立数据库模式(db schema)和创建云对象以定义数据库操作。文章还描述了页面逻辑的实现,如通过云对象获取和添加数据,以及如何处理父级和子级属性的添加。最后,介绍了如何通过弹窗交互实现属性的动态添加,并将新数据即时更新到页面和数据库中,确保数据的永久保存和后续使用。
2、界面情况回顾
属性显示其实是个一嵌套的数据显示。
3、需要添加的商品属性(父级)
这里涉及一个sku,就一个库存量单位,商品的库存量。包含商品信息、规格、数量、价格等等。
从前面商家信息 52 章节看出,我们还是要使用云对象,云对象是一种通用的处理方式。
3.1 第一步,建立db schema文件(常用方式,最好这样处理)
这样后期移植代码就比较方便,直接上传 db schema 就可以创建数据库了
注:但是在云对象使用中,你不创建db schema 也可以,云对象会自己创建数据库
内容默认就好:不用修改
// 文档教程: https://uniapp.dcloud.net.cn/uniCloud/schema
{"bsonType": "object","required": [],"permission": {"read": false,"create": false,"update": false,"delete": false},"properties": {"_id": {"description": "ID,系统自动生成"}}
}
3.2 第二步,创建云对象
主要是定义 db 定义dbcmd等等
使用方法,还是预处理获取前台传来的值,this.getParams()[0]
然后定义 get add update等等,另外也要注意,我们前端页面传来的数据中,选中的标识是true。
这是为了在我们添加当前商品时是选中的
但是在后台数据应该是默认不选中,便于下一个商品添加时,看到的是干净的,可选的。不然一上来就都是选中的,也很搞笑。 慢慢悟一下。
里面注意写法和格式:
const db = uniCloud.database();
const cmd = db.command
module.exports = {_before: function () { // 通用预处理器this.params = this.getParams()[0]},async get(){return await db.collection("green-mall-sku").get()},async add(){this.params.checked = false;return await db.collection("green-mall-sku").add(this.params)},async updateChild(id,obj){obj.checked=falsereturn await db.collection("green-mall-sku").doc(id).update({ children:cmd.push([obj])})}
}
3.3 页面的使用
3.3.1 页面使用需要先引入:
const skuCloudObj = uniCloud.importObject("green-mall-sku", {
"customUI": true
});
这里写了一个 "customUI": true 表示不用提示 加载,但一般保持为默认,不用添加这一项,保持有提示的情况更加人性化。
3.3.2 页面逻辑,前面定义了skuArr的数据,这里我们就不用固定死了,直接通过云对象添加,传到数库,以后使用就可以调用数据库的数据了。
所以就讲固定的删除,直接定义一个空 skuArr
/*skuArr: [{_id:1,skuName:"颜色",checked:false,children:[{name:"红",checked:false},{name:"蓝",checked:false}]},{_id:2,skuName:"规格",checked:false,children:[{name:"M",checked:false},{name:"S",checked:false}]}],*/// 上面是一个数据结构例子,后台数据就应该着这样存// 实际是下面的[]skuArr: [],
3.3.3 点击选择属性,弹出选择属性的窗口
继续页面数据的获取,并使用云对象中的get 方法
//点击选择属性clickSelect() {this.$refs.attrWrapPop.open(); //使用open方法弹出来if (this.skuArr.length) return;this.getSkuData();
//获取sku列表async getSkuData() {let res = await skuCloudObj.get();this.skuArr = res.dataconsole.log(res);},
3.3.4 添加属性(父级)
两个函数,一个点击添加的方法,一个是点击后的弹窗处理。
如果有index 就是子级点击添加,且定义个子级child 属性;如果没有index 就是父级添加,第一个父级属性 parent 实现的是一个函数两个功能使用
针对弹窗,就是弹出一个添加值的对话窗口 请输入新增内容 使用的 addAttrPop 弹窗 ,该弹窗的动作就是 dialogConfirm 唯一的差异就是带的属性值不一样。
如果 dialogConfirm 中的没有获取到值 e,那么就不会再继续执行下面的操作。
是父级就添加到数据库中,调用add ,
然后还要将刚刚添加的值更新到本地的data 中定义的skuArr数组,用于页面立即回显。
是子级就更新对应id 的子级 数据。然后将刚刚添加的数据,传入到 skuArr 对应id的数组中。用于页面立即回显。
另外这里的 id 我也回填到 skuArr中,便于这里添加父级下的子级,不然你添加子级你都不知道往哪里添加。
//点击添加属性 index 存在就是嵌套下 父类属性的子类选项 ,不存在就是添加父类属性clickAddAttr(index = null) {if (index == null) {this.addAttrType = "parent"this.attrIndex = null} else {this.addAttrType = "child"this.attrIndex = index}this.$refs.addAttrPop.open();},//添加属性弹窗的确认按钮async dialogConfirm(e) {if (!e) return;if (this.addAttrType == "parent") {let obj = {skuName: e,checked: true,children: []}let res = await skuCloudObj.add(obj)obj._id = res.id;this.skuArr.push(obj)//向数组中添加一个元素,就弹窗的确认按钮} else if (this.addAttrType == "child") {let obj = {name: e,checked: true}let id = this.skuArr[this.attrIndex]._id;let res = await skuCloudObj.updateChild(id, obj)this.skuArr[this.attrIndex].children.push(obj)}},
相关文章:

uniapp-商城-57-后台 新增商品(弹窗属性数据添加父级)
后台增加商品,需要添加相关的数据信息,这里还要添加属性,前面已经对相关的界面布局继续了编写。这里还要对页面添加的数据,置入到云数据库,继续永久保存,便于后期的使用。这里主要是讲属性数据 父级信息的添…...

摩方 12 代 N200 迷你主机(Ubuntu 系统)WiFi 抓包环境配置教程
摩方12代N200迷你主机标配 Intel AX201无线网卡,支持 WiFi 6 协议(802.11ax)及蓝牙5.2。此网卡兼容主流抓包工具,但需注意: 驱动兼容性:Ubuntu 20.04及以上内核版本(5.4)默认支持AX2…...
matlab多智能体网络一致性研究
一个基于连续时间多智能体系统(Multi-Agent Systems, MAS)的一阶一致性协议的MATLAB仿真代码,包含网络拓扑建模、一致性协议设计和收敛性分析。代码支持固定拓扑和时变拓扑,适用于学术研究。 1. 基础模型与代码框架 (1) 网络拓扑…...

Unity(URP渲染管线)的后处理、动画制作、虚拟相机(Virtual Camera)
一、URP渲染管线 渲染管线是一系列渲染操作的集合,Unity提供了内置渲染管线(Built-In)和可编程渲染管线(SRP)两类渲染管线。内置渲染管线是Unity的默认渲染管线,其自定义选项有限。而可编程渲染管线可以通…...
C语言:在 Win 10 上,gcc 如何编译 gtk 应用程序
在 Windows 10 上使用 g(或 gcc)编译基于 GTK 的 C 语言程序是完全可行的,且相比 Tcc 更为推荐,因为 g(GNU 编译器套件)对 GTK 的支持更加完善,配置也更简单。以下是详细步骤和注意事项…...
阿里云CMH镜像迁移与SMC整机迁移对比及功能详解(同地域跨主体账号场景)
文章目录 一、核心功能对比二、CMH镜像迁移操作流程1.资源调研2.镜像共享3.迁移验证4.限制: 三、SMC整机迁移操作流程1.迁移源导入2.任务配置3.增量同步4.应用验证…...
用vue和go实现登录加密
前端使用CryptoJS默认加密方法: var pass CryptoJS.AES.encrypt(formData.password, key.value).toString()使用 CryptoJS.AES.encrypt() 时不指定加密模式和参数时,CryptoJS 默认会执行以下操作 var encrypted CryptoJS.AES.encrypt("明文&quo…...
政府数据开放试点企业如何抢占特许经营协议黄金席位
首席数据官高鹏律师团队 《中共中央办公厅 国务院办公厅关于 加快公共数据资源开发利用的意见》的落地,标志着数据从“封闭管理的行政资源”正式转变为“可流通的市场要素”。但机遇与风险从来是一枚硬币的两面——特许经营协议的黄金席位背后,隐藏着…...
CSS 锚点滑动效果的技术
CSS 锚点滑动效果的技术 引言 介绍锚点滑动效果的概念及其在网页设计中的重要性。简要说明 基本锚点链接 如何使用HTML中的<a>标签创建基本的锚点链接。示例代码: <a href"#section1">跳转到第一部分</a> <div id"section…...

mac-M系列芯片安装软件报错:***已损坏,无法打开。推出磁盘问题
因为你安装的软件在Intel 或arm芯片的mac上没有签名导致。 首先打开任何来源操作 在系统设置中配置,如下图: 2. 然后打开终端,输入: sudo spctl --master-disable然后输入电脑锁屏密码 打开了任何来源,还遇到已损坏…...

Echart地图数据源获取
DataV.GeoAtlas地理小工具系列 选择需要的区域地图,选中后输出即可: 地图钻取代码 <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>map</title><style>html, body, #map{margin: 0;…...

GNSS数据自动化下载系统的设计与实现
摘要 本文详细介绍了三种不同设计的GNSS数据自动化下载系统,分别针对IGS观测数据、GRACE-FO Level-1B数据以及通过代理服务器获取数据的需求场景。系统采用Python实现,具备断点续传、完整性校验、异常处理和进度显示等核心功能。实验结果表明࿰…...
MySQL 中 JOIN 和子查询的区别与使用场景
目录 一、JOIN:表连接1.1 INNER JOIN:内连接1.2 LEFT JOIN:左连接1.3 RIGHT JOIN:右连接1.4 FULL JOIN:全连接二、子查询:嵌套查询2.1 WHERE 子句中的子查询2.2 FROM 子句中的子查询2.3 SELECT 子句中的子查询三、JOIN 和子查询的区别3.1 功能差异3.2 性能差异3.3 使用场…...
【深度学习-Day 12】从零认识神经网络:感知器原理、实现与局限性深度剖析
Langchain系列文章目录 01-玩转LangChain:从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块:四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain:从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…...
谈谈未来iOS越狱或巨魔是否会消失
2024年10月的预测,先说结论: 巨魔iOS17.1消失概率为99%。 因为巨魔强依赖的漏洞就是一个签名漏洞,攻击面有限又经过2轮修复,第3次出现漏洞的概率极低。而越狱的话由于系统组件和服务较多,所以出现漏洞概率高攻击面多&…...

Unity3D仿星露谷物语开发43之农作物生长
1、目标 把防风草种子种在地里,并展示植物种子,防风草种子将随着时间变化而生长成植株。 2、创建Crop.cs脚本 在Assets -> Scripts下创建新的目录命名为Crop,在其下创建新的脚本命名为Crop.cs。 代码如下: using System.C…...

从0到1上手Kafka:开启分布式消息处理之旅
目录 一、Kafka 是什么 二、Kafka 的基础概念 2.1 核心术语解读 2.2 工作模式剖析 三、Kafka 的应用场景 四、Kafka 与其他消息队列的比较 五、Kafka 的安装与配置 5.1 环境准备 5.2 安装步骤 5.3 常见问题及解决 六、Kafka 的基本操作 6.1 命令行工具使用 6.1.1 …...
GTS-400 系列运动控制器板卡介绍(三十四)---运动程序多线程累加求和
运动控制器函数库的使用 运动控制器驱动程序、dll 文件、例程、Demo 等相关文件请通过固高科技官网下载,网 址为:www.googoltech.com.cn/pro_view-3.html 1 Windows 系统下动态链接库的使用 在 Windows 系统下使用运动控制器,首先要安装驱动程序。在安装前需要提前下载运动…...

Python爬虫如何应对网站的反爬加密策略?
在当今的互联网环境中,网络爬虫已经成为数据采集的重要工具之一。然而,随着网站安全意识的不断提高,反爬虫技术也越来越复杂,尤其是数据加密策略的广泛应用,给爬虫开发者带来了巨大的挑战。本文将详细介绍Python爬虫如…...

第一次经历项目上线
这几天没写csdn,因为忙着项目上线的问题,我这阶段改了非常多的前端bug哈哈哈哈,说几个比较好的bug思想! 这个页面算是我遇到的比较大的bug,因为我一开始的逻辑都写好了,询价就是在点击快递公司弹出弹框的时…...

Conda配置完全指南——Windows系统Anaconda/Miniconda的安装、配置、基础使用、清理缓存空间和Pycharm/VSCode配置指南
本文同步发布在个人博客: Conda配置完全指南Conda 是一个开源的跨平台包管理与环境管理工具,广泛应用于数据科学、机器学习及 Python 开发领域。它不仅能帮助用户快速安装、更新和卸载第三方库,还能创建相互隔离的虚拟环境,解决不…...

Quasar组件 Carousel走马灯
通过对比两个q-carousel组件来,了解该组件的属性 官方文档请参阅:Carousel 预览 源代码 <template><div class"q-pa-md"><div class"q-gutter-md"><q-carouselv-model"slide"transition-prev&quo…...
AI日报 - 2024年5月17日
🌟 今日概览 (60秒速览) ▎🤖 大模型前沿 | OpenAI推出自主编码代理Codex;Google DeepMind发布Gemini驱动的编码代理AlphaEvolve,能设计先进算法;Meta旗舰AI模型Llama 4 Behemoth发布推迟。 Codex能并行处理多任务&…...
R语言数据框(datafram)数据的构建及简单分析
代码完成的功能: 创建数据集(数据框), 写入到文件中, 显示数据, 分组计算平均年龄, 在Rstudio中,创建R markdown或R notebook文件运行。以下是添加了注释的完整R代码࿰…...

风控域——风控决策引擎系统设计
摘要 本文详细介绍了风控决策引擎系统的设计与应用。决策引擎系统是一种智能化工具,可自动化、数据驱动地辅助或替代人工决策,广泛应用于金融、医疗、营销、风控等领域。文章阐述了决策引擎的核心功能,包括自动化决策、动态规则管理、实时处…...

CAPL Class: TcpSocket (此类用于实现 TCP 网络通信 )
目录 Class: TcpSocketacceptopenclosebindconnectgetLastSocketErrorgetLastSocketErrorAsStringlistenreceivesendsetSocketOptionshutdown函数调用的基本流程服务器端的基本流程客户端的基本流程Class: TcpSocket学习笔记。来自CANoe帮助文档。 Class: TcpSocket accept /…...

数据分析 —— 数据预处理
一、什么是数据预处理 数据预处理(Data Preprocessing)是数据分析和机器学习中至关重要的步骤,旨在将原始数据转换为更高质量、更适合分析或建模的形式。由于真实世界的数据通常存在不完整、不一致、噪声或冗余等问题,预处理可以…...

软件架构风格系列(4):事件驱动架构
文章目录 前言一、从“用户下单”场景看懂事件驱动核心概念(一)什么是事件驱动架构?(二)核心优势:解耦与异步的双重魔法 二、架构设计图:三要素构建事件流转闭环三、Java实战:从简单…...
windows系统各版本下载
以下各版本Windows系统链接来自网友整理,请通过迅雷或者其他支持ED2K或BT的下载工具进行下载。 注:以下为原版系统,未激活、非破解版,仅供下载体验学习,请勿从事商业活动。 Windows 11 Windows 11 (consumer editions…...

arduino平台读取鼠标光电传感器
鼠标坏掉了,大抵是修不好了。(全剧终—) 但是爱动手的小明不会浪费这个鼠标,确认外观没有明显烧毁痕迹后,尝试从电路板上利用光电传感器进行位移的测量,光电传感器(型号:FCT3065&am…...