从0到1:商场导览小程序开发笔记一

2024-05-06 12:52

本文主要是介绍从0到1:商场导览小程序开发笔记一,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

背景

购物中心与商场小程序:旨在提供便捷的购物、导航、活动报名、服务查询等功能,让用户更好地体验购物和享受服务。通过提供便捷的购物、信息查询和互动预约等功能,提升了商场的服务水平和用户体验,帮助商场与消费者建立更紧密的联系,促进消费和提升品牌形象。

功能规划

其主要功能如下: 提供商场的基本信息,包括位置、营业时间、商户组成等,让用户了解商场的概况和特色

  • 品牌模块:按业态,楼层或者首字母提供商户列表指引,帮助用户快速找到目标店铺
  • 排行榜:品牌商铺可按评论,浏览数,点赞数,收藏数进行排行
  • 资讯模块:展示商户的优惠活动、打折信息等,让用户了解最新的优惠信息,促进消费
  • 活动模块:展示商场内举办的活动、展览、讲座等信息,吸引用户参与和了解商场文化。
  • 投诉建议:提供用户反馈通道,收集用户对商场服务和体验的意见建议,帮助商场改进服务质量
  • 会员系统:可修改个人资料,查看自己的活动报名,点赞,浏览,收藏,评论,投诉建议记录等。

概要设计

在这里插入图片描述

数据设计

ProductModel.DB_STRUCTURE = {_pid: 'string|true',PRODUCT_ID: 'string|true',PRODUCT_TITLE: 'string|false|comment=标题',PRODUCT_STATUS: 'int|true|default=1|comment=状态 0/1',PRODUCT_CATE_ID: 'array|true|comment=分类编号',PRODUCT_CATE_NAME: 'array|true|comment=分类冗余',PRODUCT_FIRST: 'string|false',PRODUCT_ORDER: 'int|true|default=9999',PRODUCT_VOUCH: 'int|true|default=0',PRODUCT_COMMENT_CNT: 'int|true|default=0',PRODUCT_QR: 'string|false',PRODUCT_VIEW_CNT: 'int|true|default=0|comment=访问次数',PRODUCT_COMMENT_CNT: 'int|true|default=0|comment=评价数',PRODUCT_FAV_CNT: 'int|true|default=0|comment=收藏数',PRODUCT_LIKE_CNT: 'int|true|default=0|comment=点赞数',PRODUCT_LIKE_LIST: 'array|true|default=[]|comment=点赞记录',PRODUCT_FORMS: 'array|true|default=[]',PRODUCT_OBJ: 'object|true|default={}',PRODUCT_ADD_TIME: 'int|true',PRODUCT_EDIT_TIME: 'int|true',PRODUCT_ADD_IP: 'string|false',PRODUCT_EDIT_IP: 'string|false',
};ActivityModel.DB_STRUCTURE = {_pid: 'string|true',ACTIVITY_ID: 'string|true',ACTIVITY_TITLE: 'string|true|comment=标题',ACTIVITY_STATUS: 'int|true|default=1|comment=状态 0=未启用,1=使用中',ACTIVITY_CATE_ID: 'string|true|default=0|comment=分类',ACTIVITY_CATE_NAME: 'string|false|comment=分类冗余',ACTIVITY_CANCEL_SET: 'int|true|default=1|comment=取消设置 0=不允,1=允许,2=仅截止前可取消',ACTIVITY_CHECK_SET: 'int|true|default=0|comment=审核 0=不需要审核,1=需要审核', ACTIVITY_IS_MENU: 'int|true|default=1|comment=是否公开展示名单',ACTIVITY_MAX_CNT: 'int|true|default=20|comment=人数上限 0=不限',ACTIVITY_START: 'int|false|comment=活动开始时间',ACTIVITY_END: 'int|false|comment=活动截止时间',ACTIVITY_STOP: 'int|true|default=0|comment=报名截止时间 0=永不过期',ACTIVITY_ORDER: 'int|true|default=9999',ACTIVITY_VOUCH: 'int|true|default=0',ACTIVITY_FORMS: 'array|true|default=[]',ACTIVITY_OBJ: 'object|true|default={}',ACTIVITY_JOIN_FORMS: 'array|true|default=[]',ACTIVITY_ADDRESS: 'string|false|comment=详细地址',ACTIVITY_ADDRESS_GEO: 'object|false|comment=详细地址坐标参数',ACTIVITY_QR: 'string|false',ACTIVITY_VIEW_CNT: 'int|true|default=0',ACTIVITY_JOIN_CNT: 'int|true|default=0',ACTIVITY_COMMENT_CNT: 'int|true|default=0',ACTIVITY_ADD_TIME: 'int|true',ACTIVITY_EDIT_TIME: 'int|true',ACTIVITY_ADD_IP: 'string|false',ACTIVITY_EDIT_IP: 'string|false',
};

关键实现

async getAllProduct(floorOptions) {// 所有记录let orderBy = {PRODUCT_ORDER: 'asc',PRODUCT_ADD_TIME: 'desc'}let fields = 'PRODUCT_TITLE,PRODUCT_CATE_NAME,PRODUCT_CATE_ID,PRODUCT_FIRST,PRODUCT_CATE_ID,PRODUCT_CATE_NAME,PRODUCT_OBJ.floor,PRODUCT_OBJ.logo,PRODUCT_OBJ.address';let where = { PRODUCT_STATUS: 1 };let productList = await ProductModel.getAll(where, fields, orderBy, 1000);for (let k = 0; k < productList.length; k++) {productList[k].PRODUCT_CATE_NAME = productList[k].PRODUCT_CATE_NAME.join(' - ');}//### 按楼层 let floorList = [];for (let k = 0; k < floorOptions.length; k++) {let name = floorOptions[k];let list = [];for (let j = 0; j < productList.length; j++) {if (productList[j].PRODUCT_OBJ.floor == name) {list.push({id: productList[j]._id,img: productList[j].PRODUCT_OBJ.logo[0],name: productList[j].PRODUCT_TITLE,cate: productList[j].PRODUCT_CATE_NAME ,detail: productList[j].PRODUCT_OBJ.address,floor: productList[j].PRODUCT_OBJ.floor,});}}let node = {name,list}floorList.push(node);}//### 按字母let charList = [];for (let k = 65; k <= 90; k++) {let name = String.fromCharCode(k);let list = [];for (let j = 0; j < productList.length; j++) {if (productList[j].PRODUCT_FIRST == name) {list.push({id: productList[j]._id,img: productList[j].PRODUCT_OBJ.logo[0],name: productList[j].PRODUCT_TITLE,cate: productList[j].PRODUCT_CATE_NAME ,detail: productList[j].PRODUCT_OBJ.address,floor: productList[j].PRODUCT_OBJ.floor,});}}let node = {name,list}charList.push(node);}// 其他字符let otherList = [];for (let j = 0; j < productList.length; j++) {let first = productList[j].PRODUCT_FIRST;first = first.charCodeAt(0);if (first < 65 || first > 90) {otherList.push({id: productList[j]._id,img: productList[j].PRODUCT_OBJ.logo[0],name: productList[j].PRODUCT_TITLE,cate: productList[j].PRODUCT_CATE_NAME ,detail: productList[j].PRODUCT_OBJ.address,floor: productList[j].PRODUCT_OBJ.floor,});}}charList.push({ name: '其他', list: otherList });//### 按分类let cateList = [];let cate1Options = await Cate1Model.getAll({ CATE1_STATUS: 1 }, 'CATE1_TITLE', { 'CATE1_ORDER': 'asc', 'CATE1_ADD_TIME': 'desc' });for (let k = 0; k < cate1Options.length; k++) {let name = cate1Options[k].CATE1_TITLE;let list = [];for (let j = 0; j < productList.length; j++) {if (productList[j].PRODUCT_CATE_ID.includes(cate1Options[k]._id)) {list.push({id: productList[j]._id,img: productList[j].PRODUCT_OBJ.logo[0],name: productList[j].PRODUCT_TITLE,cate: productList[j].PRODUCT_CATE_NAME ,detail: productList[j].PRODUCT_OBJ.address,floor: productList[j].PRODUCT_OBJ.floor,});}}let node = {name,list}cateList.push(node);}return { productList, floorList, charList, cateList }}async likeProduct(userId, id) {// 是否点赞let product = await ProductModel.getOne(id, 'PRODUCT_LIKE_LIST');if (!product) this.AppError('记录不存在');let arr = product.PRODUCT_LIKE_LIST;let flag = false;if (arr.includes(userId)) {arr = arr.filter(item => item != userId);flag = false;}else {arr.push(userId);flag = true;}await ProductModel.edit(id, {PRODUCT_LIKE_LIST: arr,PRODUCT_LIKE_CNT: arr.length});return flag;}/** 浏览资讯信息 */async viewProduct(userId, id) {let fields = '*';let where = {_id: id,PRODUCT_STATUS: 1}let product = await ProductModel.getOne(where, fields);if (!product) return null;product.like = product.PRODUCT_LIKE_LIST.includes(userId) ? true : false;delete product.PRODUCT_LIKE_LIST;ProductModel.inc(id, 'PRODUCT_VIEW_CNT', 1);return product;}/** 取得分页列表 */async getProductList({cateId,search, // 搜索条件sortType, // 搜索菜单sortVal, // 搜索菜单orderBy, // 排序 page,size,isTotal = true,oldTotal}) {orderBy = orderBy || {'PRODUCT_ORDER': 'asc','PRODUCT_ADD_TIME': 'desc'};let fields = 'PRODUCT_LIKE_CNT,PRODUCT_FAV_CNT,PRODUCT_COMMENT_CNT,PRODUCT_VIEW_CNT,PRODUCT_TITLE,PRODUCT_CATE_ID,PRODUCT_ADD_TIME,PRODUCT_ORDER,PRODUCT_STATUS,PRODUCT_CATE_NAME,PRODUCT_OBJ';let where = {};where.and = {_pid: this.getProjectId() //复杂的查询在此处标注PID};where.and.PRODUCT_STATUS = 1; // 状态 if (cateId && cateId !== '0') where.and.PRODUCT_CATE_ID = cateId;if (util.isDefined(search) && search) {where.or = [{ PRODUCT_TITLE: ['like', search] },];} else if (sortType && util.isDefined(sortVal)) {// 搜索菜单switch (sortType) {case 'sort': {orderBy = this.fmtOrderBySort(sortVal, 'PRODUCT_ADD_TIME');break;}case 'cateId': {if (sortVal) where.and.PRODUCT_CATE_ID = String(sortVal);break;}}}return await ProductModel.getList(where, fields, orderBy, page, size, isTotal, oldTotal);}async getMyLikeProductList(userId, {search, // 搜索条件sortType, // 搜索菜单sortVal, // 搜索菜单orderBy, // 排序 page,size,isTotal = true,oldTotal}) {orderBy = orderBy || {'PRODUCT_ORDER': 'asc','PRODUCT_ADD_TIME': 'desc'};let fields = 'PRODUCT_LIKE_CNT,PRODUCT_FAV_CNT,PRODUCT_COMMENT_CNT,PRODUCT_VIEW_CNT,PRODUCT_TITLE,PRODUCT_CATE_ID,PRODUCT_ADD_TIME,PRODUCT_ORDER,PRODUCT_STATUS,PRODUCT_CATE_NAME,PRODUCT_OBJ';let where = {};where.and = {_pid: this.getProjectId() //复杂的查询在此处标注PID};where.and.PRODUCT_LIKE_LIST = userId;if (util.isDefined(search) && search) {where.or = [{ PRODUCT_TITLE: ['like', search] },];} else if (sortType && util.isDefined(sortVal)) {// 搜索菜单switch (sortType) {case 'sort': {orderBy = this.fmtOrderBySort(sortVal, 'PRODUCT_ADD_TIME');break;}}}return await ProductModel.getList(where, fields, orderBy, page, size, isTotal, oldTotal);}

UI设计

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

后台管理系统

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

代码分享

git下载

这篇关于从0到1:商场导览小程序开发笔记一的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/964406

相关文章

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

论文阅读笔记: Segment Anything

文章目录 Segment Anything摘要引言任务模型数据引擎数据集负责任的人工智能 Segment Anything Model图像编码器提示编码器mask解码器解决歧义损失和训练 Segment Anything 论文地址: https://arxiv.org/abs/2304.02643 代码地址:https://github.com/facebookresear

数学建模笔记—— 非线性规划

数学建模笔记—— 非线性规划 非线性规划1. 模型原理1.1 非线性规划的标准型1.2 非线性规划求解的Matlab函数 2. 典型例题3. matlab代码求解3.1 例1 一个简单示例3.2 例2 选址问题1. 第一问 线性规划2. 第二问 非线性规划 非线性规划 非线性规划是一种求解目标函数或约束条件中有一个或几个非线性函数的最优化问题的方法。运筹学的一个重要分支。2

【C++学习笔记 20】C++中的智能指针

智能指针的功能 在上一篇笔记提到了在栈和堆上创建变量的区别,使用new关键字创建变量时,需要搭配delete关键字销毁变量。而智能指针的作用就是调用new分配内存时,不必自己去调用delete,甚至不用调用new。 智能指针实际上就是对原始指针的包装。 unique_ptr 最简单的智能指针,是一种作用域指针,意思是当指针超出该作用域时,会自动调用delete。它名为unique的原因是这个

查看提交历史 —— Git 学习笔记 11

查看提交历史 查看提交历史 不带任何选项的git log-p选项--stat 选项--pretty=oneline选项--pretty=format选项git log常用选项列表参考资料 在提交了若干更新,又或者克隆了某个项目之后,你也许想回顾下提交历史。 完成这个任务最简单而又有效的 工具是 git log 命令。 接下来的例子会用一个用于演示的 simplegit

记录每次更新到仓库 —— Git 学习笔记 10

记录每次更新到仓库 文章目录 文件的状态三个区域检查当前文件状态跟踪新文件取消跟踪(un-tracking)文件重新跟踪(re-tracking)文件暂存已修改文件忽略某些文件查看已暂存和未暂存的修改提交更新跳过暂存区删除文件移动文件参考资料 咱们接着很多天以前的 取得Git仓库 这篇文章继续说。 文件的状态 不管是通过哪种方法,现在我们已经有了一个仓库,并从这个仓

忽略某些文件 —— Git 学习笔记 05

忽略某些文件 忽略某些文件 通过.gitignore文件其他规则源如何选择规则源参考资料 对于某些文件,我们不希望把它们纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。通常它们都是些自动生成的文件,比如日志文件、编译过程中创建的临时文件等。 通过.gitignore文件 假设我们要忽略 lib.a 文件,那我们可以在 lib.a 所在目录下创建一个名为 .gi

取得 Git 仓库 —— Git 学习笔记 04

取得 Git 仓库 —— Git 学习笔记 04 我认为, Git 的学习分为两大块:一是工作区、索引、本地版本库之间的交互;二是本地版本库和远程版本库之间的交互。第一块是基础,第二块是难点。 下面,我们就围绕着第一部分内容来学习,先不考虑远程仓库,只考虑本地仓库。 怎样取得项目的 Git 仓库? 有两种取得 Git 项目仓库的方法。第一种是在本地创建一个新的仓库,第二种是把其他地方的某个

Git 的特点—— Git 学习笔记 02

文章目录 Git 简史Git 的特点直接记录快照,而非差异比较近乎所有操作都是本地执行保证完整性一般只添加数据 参考资料 Git 简史 众所周知,Linux 内核开源项目有着为数众多的参与者。这么多人在世界各地为 Linux 编写代码,那Linux 的代码是如何管理的呢?事实是在 2002 年以前,世界各地的开发者把源代码通过 diff 的方式发给 Linus,然后由 Linus