基于微信小程序的CMS内容管理系统开发笔记

背景调研

内容管理CMS小程序的帮助运营者创建和管理小程序内容,提供一个直观的操作界面,能够轻松地添加、编辑和发布内容,而无需了解复杂的编程知识。可以进行栏目管理,文章管理,编辑文章内容,包括文字、图片等操作

功能设计

管理端:
  • 分类管理:提供一级分类,二级分类管理
  • 文章管理:方便的进行文章录入和修改,提供适应小程序排版的图文混排编辑器。
  • 首页轮播图:可设置首页轮播图,支持链接到本地文章或者外部文章
用户端:
  • 分类展示:按一级,二级分类展示
  • 文章展示:文章检索,文章点赞,评论,分享(海报,卡片),
  • 排行榜:可按评论,浏览数,点赞数,收藏数进行排行
  • 个人中心:可修改个人资料,查看自己的点赞,浏览,收藏,评论记录等。

结构图

在这里插入图片描述

数据设计

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_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',
};Cate1Model.DB_STRUCTURE = {_pid: 'string|true',CATE1_ID: 'string|true',CATE1_ORDER: 'int|true|default=9999',CATE1_VOUCH: 'int|true|default=0',CATE1_TITLE: 'string|false|comment=标题',CATE1_STATUS: 'int|true|default=1|comment=状态 0/1',CATE1_CNT: 'int|true|default=0',CATE1_FORMS: 'array|true|default=[]',CATE1_OBJ: 'object|true|default={}',CATE1_ADD_TIME: 'int|true',CATE1_EDIT_TIME: 'int|true',CATE1_ADD_IP: 'string|false',CATE1_EDIT_IP: 'string|false',
};Cate2Model.DB_STRUCTURE = {_pid: 'string|true',CATE2_ID: 'string|true',CATE2_ORDER: 'int|true|default=9999',CATE2_CATE1_ID: 'string|true',CATE2_TITLE: 'string|false|comment=标题',CATE2_STATUS: 'int|true|default=1|comment=状态 0/1',CATE2_CNT: 'int|true|default=0',CATE2_FORMS: 'array|true|default=[]',CATE2_OBJ: 'object|true|default={}',CATE2_ADD_TIME: 'int|true',CATE2_EDIT_TIME: 'int|true',CATE2_ADD_IP: 'string|false',CATE2_EDIT_IP: 'string|false',
};

核心实现

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下载

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

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

相关文章

React腳手架已經創建好了,想使用Vite作為開發依賴

使用Vite作為開發依賴 安裝VITE配置VITE配置文件簡單的VITE配置項更改package.json中的scripts在根目錄中添加index.html現在可以瀏覽你的頁面了 安裝VITE 首先,在現有的React項目中安裝VITE npm install vite --save-dev || yarn add vite --dev配置VITE配置文件 …

【UE5】动画蒙太奇简述

项目资源文末百度网盘自取 动画蒙太奇基本功能 动画蒙太奇(Animation Montage) 可以将多个 动画序列(Animation Sequences) 合并为单个资产并通过蓝图播放,还可以将一个蒙太奇动画切分为多个 蒙太奇分段(M…

六大排序精解

排序概念 排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序&#x…

安装nginx和PHP

首先规划四台虚拟机,之前的主从数据库已经两台,其余两台,一个设置nginx,一个是php 首先NGINX的概念,请参考https://blog.csdn.net/hyfsbxg/article/details/122322125。正向代理,反向代理,可以…

【每日八股】Java基础经典面试题4

前言:哈喽大家好,我是黑洞晓威,25届毕业生,正在为即将到来的秋招做准备。本篇将记录学习过程中经常出现的知识点以及自己学习薄弱的地方进行总结🥰。 本篇文章记录的Java基础面试题,如果你也在复习的话不妨…

【独立版】海之心陪诊系统-陪诊陪护小程序-V3.0

商品介绍 陪诊这个词在近两年才出现在人们的视野中,随着人口老龄化,社会信息化。我们的父母很多不会操作信息化的系统,以至于在手机上挂号和线下取号取报告比较困难,年轻人需要工作时间有限,陪诊需求因此而来。 陪诊…

Introduction to Data Mining 数据挖掘

Why Data Mining? • The Explosive Growth of Data: from terabytes to petabytes — Data collection and data availability ◦ Automated data collection tools, database systems, Web, computerized society — Major sources of abundant data ◦ Business: Web, e-co…

vue3 + ts +element-plus + vue-router + scss + axios搭建项目

本地环境: node版本:20.10.0 目录 一、搭建环境 二、创建项目 三、修改页面 四、封装路由vue-router 五、element-plus 六、安装scss 七、封装axios 一、搭建环境 1、安装vue脚手架 npm i -g vue/cli 2、查看脚手架版本 vue -V3、切换路径到需…

flask+ flask_socketio HTTP/1.1“ 400 公网IP 问题解决方案

很经典的一个跨域问题 在服务端改成socketio SocketIO(app, cors_allowed_origins"*")就可以了

数据可视化-ECharts Html项目实战(4)

在之前的文章中,我们学习了如何创建圆环图、嵌套圆环图、蓝丁格尔玫瑰图。想了解的朋友可以查看这篇文章。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错,请留下你宝贵的点赞,谢谢。 数据可视化-ECharts Htm…

四、C语言中的数组:如何输入与输出二维数组(数组,完)

本章的学习内容如下 四、C语言中的数组:数组的创建与初始化四、C语言中的数组:数组的输入与元素个数C语言—第6次作业—十道代码题掌握一维数组四、C语言中的数组:二维数组 1.二维数组的输入与输出 当我们输入一维数组时需要一个循环来遍历…

uniApp中使用小程序XR-Frame创建3D场景(1)环境搭建

1.XR-Frame简介 XR-Frame作为微信小程序官方推出的3D框架,是目前所有小程序平台中3D效果最好的一个,由于其本身针对微信小程序做了优化,在性能方面比其他第三方库都要高很多。 2.与Three.js的区别 做3D小程序的同学们对Three.js一定不陌生…

huggingface_hub

文章目录 一、关于 huggingface_hub二、安装三、快速入门指南1、下载文件1.1 下载单个文件 hf_hub_download1.2 下载整个库 snapshot_download 2、登录3、创建一个存储库 create_repo4、上传文件4.1 上传单个文件 upload_file4.2 上传整个存储库 upload_folder 四、集成到 Hub …

图论06-飞地的数量(Java)

6.飞地的数量 题目描述 给你一个大小为 m x n 的二进制矩阵 grid ,其中 0 表示一个海洋单元格、1 表示一个陆地单元格。 一次 移动 是指从一个陆地单元格走到另一个相邻(上、下、左、右)的陆地单元格或跨过 grid 的边界。 返回网格中 无法…

【PyCaret】使用PyCaret创建机器学习Pipeline进行多分类任务

发现一个好东西,PyCaret机器学习Pipeline,记录一下用其进行多分类任务的使用方法。 1、简介 PyCaret是一个开源的、不用写很多代码的Python机器学习库,可以自动化机器学习工作流程,是一个端到端的机器学习和模型管理工具&#xff…

登录与注册功能(简单版)(3)登录时使用Cookie增加记住我功能

目录 1、实现分析 2、步骤 1)新建login.jsp 2)修改LoginServlet: 3)启动访问: 3、安全性考虑 4、最佳实践思路 1)选择安全的认证机制 2)强化会话管理 3)安全地存储用户凭证…

Unity 粒子在UI中使用时需要注意的地方

最近项目中要在UI中挂载粒子特效,美术给过来的粒子直接放到UI中会有一些问题,查询一些资料后,总结了一下 一: 粒子的大小发生变化,与在预制件编辑中设计的大小不同 在预制件编辑模式下,大小正常 实际使用的时候特别大或者特别小 经过检查,发现预制件编辑模式下,默认画布的Rend…

上位机图像处理和嵌入式模块部署(qmacvisual点线测量)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 上面一篇文章,我们完成了直线的拟合操作。在实际场景中,拟合之后更多地是需要进行长度的测量。既然是测量,那么…

【JavaScript 漫游】【040】Blob 对象

文章简介 本篇文章为【JavaScript 漫游】专栏的第 040 篇文章,对浏览器模型中的 Blob 对象进行了总结。 概述 Blob 对象表示一个二进制文件的数据内容,比如一个图片文件的内容就可以通过 Blob 对象读写。它通常用来读写文件,它的名字是 Bi…

哪些企业适合构建企业新媒体矩阵?

⭐关注矩阵通服务号,探索企业新媒体矩阵搭建与营销策略 新媒体矩阵就是在某个平台或多个平台开设、联动多个账号,组建有关系的不同账号集群。 在数字化转型的浪潮下,矩阵已然成为企业实现品牌塑造、市场开拓与用户互动的重要阵地。 然而&…