【毕业设计】微信小程序商城购物系统

news2025/8/12 0:08:29

文章目录

  • 0 前言
  • 1 项目介绍
    • 1.1 代码工程结构
    • 1.2 前端技术
    • 1.3 后端技术
    • 1.4 实现功能
      • 1.4.1 会员管理
      • 1.4.2 商城配置
      • 1.4.3 商品编辑
      • 1.4.4 推广管理
      • 1.4.5 订单管理
      • 1.4.6 系统管理
      • 1.4.7 短信服务平台
  • 2 运行效果
    • 2.1 前端效果
    • 2.2 后端效果
  • 3 实现部分源码
    • 3.1 前端布局
    • 3.2 后端逻辑
  • 4 最后


0 前言

🔥 Hi,大家好,这里是丹成学长的毕设系列文章!

🔥 对毕设有任何疑问都可以问学长哦!

这两年开始,各个学校对毕设的要求越来越高,难度也越来越大… 毕业设计耗费时间,耗费精力,甚至有些题目即使是专业的老师或者硕士生也需要很长时间,所以一旦发现问题,一定要提前准备,避免到后面措手不及,草草了事。

为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的新项目是

🚩 基于微信小程序的商城购物系统

🥇学长这里给一个题目综合评分(每项满分5分)

  • 难度系数:4分
  • 工作量:4分
  • 创新点:3分

🧿 选题指导, 项目分享:

https://gitee.com/yaa-dc/BJH/blob/master/gg/cc/README.md


1 项目介绍

1.1 代码工程结构

platform-wechat-mall

|–platform-admin 后台管理

|–platform-api 微信小程序商城api接口

|–platform-common 公共模块

|–platform-framework 系统WEB合并,请打包发布此项目

|–platform-gen 代码生成

|–platform-mp 微信公众号模块

|–platform-schedule 定时任务

|–platform-shop 商城后台管理

|–wx-mall 微信小程序商城

|–platform-vue 微信公众号商城

1.2 前端技术

  • Vue2.5.1
  • iview
  • layer3.0.3
  • jquery2.2.4
  • bootstrap3.3.7
  • jqgrid5.1.1
  • ztree3.5.26
  • froala_editor1.2.2

1.3 后端技术

  • springframework4.3.7.RELEASE

  • mybatis3.1.0、MyBatis-Plus 3.1.0

  • shiro1.3.2

  • servlet3.1.0

  • druid1.0.28

  • slf4j1.7.19

  • fastjson1.2.30

  • poi3.15

  • velocity1.7

  • quartz2.2.3

  • mysql5.1.39

  • swagger2.4

  • j2cache2.3.22-release

  • weixin-java-mp3.2.0

  • MybatisPlus3.1.0

  • lombok

1.4 实现功能

1.4.1 会员管理

  • a 会员管理
  • b 会员等级
  • c 收货地址管理
  • d 会员优惠劵
  • e 会员收藏
  • f 会员足迹
  • g 搜索历史
  • h 购物车

1.4.2 商城配置

  • a 区域配置
  • b 商品属性种类
  • c 品牌制造商
  • d 商品规格
  • e 订单管理
  • f 商品类型
  • g 渠道管理
  • h 商品问答
  • i 反馈
  • j 关键词

1.4.3 商品编辑

  • a 所有商品
  • b 用户评论
  • c 产品设置
  • d 商品规格
  • e 商品回收站

1.4.4 推广管理

  • a 广告列表
  • b 广告位置
  • c 优惠劵管理
  • d 专题管理
  • e 专题分类

1.4.5 订单管理

  • a 所有订单管理

1.4.6 系统管理

  • a 管理员列表
  • b 角色管理
  • c 菜单管理
  • d SQL监控
  • e 定时任务
  • f 参数管理
  • g 代码生成器
  • h 系统日志
  • i 文件上传
  • j 通用字典表

1.4.7 短信服务平台

  • a 配置短信平台账户信息
  • b 向外提供发送短信接口:

2 运行效果

2.1 前端效果

在这里插入图片描述

2.2 后端效果

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

3 实现部分源码

3.1 前端布局

<view class="container">  
    <view wx:for="{{menus}}" wx:key="id" class="section">
      <view class="flex-wrp" style="flex-direction:row;">
      <image style="width: 500rpx; height: 200rpx; background-color: #eeeeee;" mode="aspectFill" src="{{item.image}}" bindtap="preview" data-imgsrc="{{item.image}}" >
      </image>
        <view class="flex-item">
         <text>{{item.name}}</text>\n
          <text class="flex-desc">{{item.description}}</text>\n
          <text class="red">¥ {{item.price}}</text>
          
        </view>   
              
      </view>
      <button type='primary' bindtap="onbuy" data-id="{{item.id}}">购买</button>  
    </view><!--section-->
</view><!--container-->

3.2 后端逻辑

namespace Api\Controller;
use Think\Controller;
class ShoppingController extends Controller {

	//***************************
	//  会员获取购物车列表接口
	//***************************
	public function index(){
        $shopping=M("shopping_char");
        $product=M("menu");
		$user_id = intval($_REQUEST['user_id']);
		if (!$user_id) {
			echo json_encode(array('status'=>0));
			exit();
		}

        /*$shop = $shopping->where(''.$qz.'shopping_char.uid='.intval($user_id))->join('left join __SHANGCHANG__ on __SHANGCHANG__.id = __SHOPPING_CHAR__.shop_id')->distinct(''.$qz.'shopping_char.shop_id')->field(''.$qz.'shangchang.id,'.$qz.'shangchang.name,'.$qz.'shangchang.logo')->select();
		foreach ($shop as $n=>$v){
			$shop[$n]['logo'] = __DATAURL__.$v['logo'];
        	$shop[$n]['slist']=$shopping->where(''.$qz.'shopping_char.uid='.intval($user_id).' and '.$qz.'shopping_char.shop_id='.intval($v['id']))->join('LEFT JOIN __PRODUCT__ ON __SHOPPING_CHAR__.pid = __PRODUCT__.id')->field(''.$qz.'shopping_char.id,'.$qz.'product.id as proid,'.$qz.'product.name,'.$qz.'product.num as pnum,'.$qz.'product.price_yh,'.$qz.'product.photo_x,'.$qz.'shopping_char.num,'.$qz.'shopping_char.buff,'.$qz.'shopping_char.price')->select();
			//获取产品规格名称
			foreach ($shop[$n]['slist'] as $k=>$vl){
        		$key=explode(',', $vl['buff']);
        		foreach ($key as $m=>$val){
        			$buff_text=M('guige')->where('id='.intval($val))->getField('name');
        			$shop[$n]['slist'][$k]['g_name'] .= '&nbsp;'.$buff_text;
        		}

        		$shop[$n]['slist'][$k]['photo_x'] = __DATAURL__.$vl['photo_x'];
        	}
		}*/

		$cart = $shopping->where('uid='.intval($user_id))->field('id,uid,pid,price,num')->select();
        foreach ($cart as $k => $v) {
        	$pro_info = $product->where('id='.intval($v['pid']))->field('name,image')->find();
        	$cart[$k]['pro_name']=$pro_info['name'];
        	$cart[$k]['photo_x']=$pro_info['image'];
        }

		echo json_encode(array('status'=>1,'cart'=>$cart));
		exit();
    }

	//购物车商品删除
	public function delete(){
		$shopping=M("shopping_char");
		$cart_id=intval($_REQUEST['cart_id']);
		$check_id = $shopping->where('id='.intval($cart_id))->getField('id');
		if (!$check_id) {
			echo json_encode(array('status'=>1));
			exit();
		}

	    $res = $shopping->where('id ='.intval($cart_id))->delete(); // 删除
		if($res){
			echo json_encode(array('status'=>1));
			exit();
		}else{
			echo json_encode(array('status'=>0));
			exit();
		}
	}

	//***************************
	//  会员修改购物车数量接口
	//***************************
	public function up_cart(){
		$shopping=M("shopping_char");
		$uid = intval($_REQUEST['user_id']);
		$cart_id = intval($_REQUEST['cart_id']);
		$num=intval($_REQUEST['num']);

		if (!$uid || !$cart_id || !$num) {
			echo json_encode(array('status'=>0,'err'=>'网络异常.'.__LINE__));
			exit();
		}

		$check = $shopping->where('id='.intval($cart_id))->find();
		if (!$check) {
			echo json_encode(array('status'=>0,'err'=>'购物车信息错误!'));
			exit();
		}


		
		$data=array();
		$data['num']=$num;

		$res = $shopping->where('id ='.intval($cart_id).' AND uid='.intval($uid))->save($data);
		if ($res) {
			echo json_encode(array('status'=>1,'succ'=>'操作成功!'));
			exit();
		}else{
			echo json_encode(array('status'=>0,'err'=>'操作失败.'));
			exit();
		}
		
	}

	//多个购物车商品删除
	public function qdelete(){
		$uid = intval($_REQUEST['uid']);
		if (!$uid) {
			echo json_encode(array('status'=>0,'err'=>'网络异常,请稍后再试.'));
			exit();
		}
		$shopping=M("shopping_char");
		$cart_id=trim($_REQUEST['cart_id'],',');
		if (!$cart_id) {
			echo json_encode(array('status'=>0,'err'=>'网络错误,请稍后再试.'));
			exit();
		}

	    $res = $shopping->where('id in ('.$cart_id.') AND uid='.intval($uid))->delete(); // 删除
		if($res){
			echo json_encode(array('status'=>1));
			exit();
		}else{
			echo json_encode(array('status'=>0,'err'=>'操作失败.'));
			exit();
		}
	}


	//添加购物车
	public function add(){
		$uid = intval($_REQUEST['uid']);
		if (!$uid) {
			echo json_encode(array('status'=>0,'err'=>'登录状态异常.'));
			exit();
		}

		$pid = intval($_REQUEST['id']);
		$num = 1;
		if (!intval($pid) || !intval($num)) {
			echo json_encode(array('status'=>0,'err'=>'参数错误.'));
			exit();
		}

		//加入购物车
		$check = $this->check_cart(intval($pid));
		if ($check['status']==0) {
			echo json_encode(array('status'=>0,'err'=>$check['err']));
			exit;
		}

		$check_info = M('menu')->where('id='.intval($pid).' AND status=1')->find();

		//判断库存
		if (!$check_info) {
			echo json_encode(array('status'=>0,'err'=>'没有这个商品!'));
			exit;
		}

		$shpp=M("shopping_char");
		// $shu=trim($_POST['val'],',');
		// if($shu){
		// 	//判断用户是否已经选择完规格,未选完则提示错误
		// 	$a = explode(',', $check_info['pro_buff']);
		// 	$b = explode(',', $shu);
		// 	if (count($a)!==count($b) || in_array('0', $b)) {
		// 		echo json_encode(array('status'=>0,'err'=>'请选择规格.'));
		// 		exit;
		// 	}
		// }else{
		// 	if ($check_info['pro_buff']) {
		// 		echo json_encode(array('status'=>0,'err'=>'请选择规格.'.__LINE__));
		// 	}
		// }

		//判断购物车内是否已经存在该商品
		$data = array();
		$cart_info = $shpp->where('pid='.intval($pid).' AND uid='.intval($uid))->field('id,num')->find();
		if ($cart_info) {
			$data['num'] = intval($cart_info['num'])+intval($num);

			$shpp->where('id='.intval($cart_info['id']))->save($data);
			$res = $cart_info['id'];
		}else{
			$data['pid']=intval($pid);
			$data['num']=intval($num);
			$data['addtime']=time();
			$data['uid']=intval($uid);
			$data['shop_id']=intval($check_info['shop_id']);
			$ptype = 1;
			if (intval($check_info['pro_type'])) {
				$ptype = intval($check_info['pro_type']);
			}
			$data['type']=$ptype;
			$data['price'] = $check_info['price'];

			$res=$shpp->add($data);
		}

		if($res){
			echo json_encode(array('status'=>1,'cart_id'=>$res)); //该商品已成功加入您的购物车
			exit;
		}else{
			echo json_encode(array('status'=>0,'err'=>'加入失败.'));
			exit;
		}
	}


	//***************************
	//  会员立即购买下单接口
	//***************************
	public function check_shop(){
		$cart_id = trim($_REQUEST['cart_id'],',');
		$id=explode(',',$cart_id);
		if (!$cart_id) {
			echo json_encode(array('status'=>0));
			exit();
		}

		foreach ($id as $k=>$v){
			$shoop[$k]=M("shopping_char")->where('id ='.intval($v))->field('shop_id,pid')->find();
        }

		foreach($shoop as $key => $value){
			$result[$key] = M("product")->where('id='.intval($value['pid']))->field('id,price,price_yh')->select();
			$price[] = i_array_column($result[$key], 'price_yh');
		}
		//dump($price);exit;
		foreach($price as $keys => $va){
			$str .= implode(",", $va).",";
		}
		$str = trim($str, ",");
		$parr = explode(",", $str);
		if(array_sum($parr) && in_array("0", $parr)){
			echo json_encode(array('status'=>0));
			exit();
		}
		
		$names = i_array_column($shoop, 'shop_id');
		
		$arr=array_unique($names);
		$val= sizeof($arr);
		if($val=='1'){
			echo json_encode(array('status'=>1));
			exit();
		}else{
			echo json_encode(array('status'=>2));
			exit();
		}	 
	}

	//购物车添加。删除检测公共方法
	public function check_cart($pid){
		//检查产品是否存在或删除
		$check_info = M('menu')->where('id='.intval($pid).' AND status=1')->find();
		if (!$check_info) {
			return array('status'=>0,'err'=>'商品不存在或已下架.');
		}

		return array('status'=>1);
	}   

    /*
       去除HTNL标签
    */
    public function html_entity($array){
    	foreach ($array as $key => $value) {
        	$array[$key]['content'] = strip_tags(html_entity_decode($value['content']));
        }
        return $array;
    }

}

4 最后

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

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

相关文章

开箱评测:双十一刚买的云服务器,到底好不好用?

目录前言1. 何为HECS2. 核心特色2.1 易搭建2.2 更实惠2.3 易维护2.4 更安全3. 实践场景3.1 宝塔面板3.2 软件开发3.3 运维部署前言 对开发者和企业来说&#xff0c;双十一首先要购买什么&#xff1f;那必是云服务器。 云服务器&#xff08;Elastic Cloud Server, ECS&#xff…

数据结构:二叉树基础

文章目录一.二叉树的概念及结构1.1概念1.2特殊的二叉树二.二叉树的性质三.小练习3.13.23.3一.二叉树的概念及结构 不熟悉树这个结构的可以看看数据结构:树这篇文章。 1.1概念 一棵二叉树是结点的一个有限集合&#xff0c;该集合: 为空由一个根节点加上两棵别称为左子树和右…

Android动画之帧动画

在Android开发时&#xff0c;为了实现一些动态的炫酷的效果&#xff0c;我们常用到帧动画&#xff0c;View动画&#xff08;补间动画&#xff09;和属性动画&#xff0c;今天就来总结下我在使用帧动画的实现方式。 1、什么是帧动画&#xff1f; 帧动画就是顺序播放一组预先定…

什么是IO

java.io.File类&#xff1a;文件和文件目录路径的抽象表示形式&#xff0c;与平台无关 File 能新建、删除、重命名文件和目录&#xff0c;但 File 不能访问文件内容本身。 如果需要访问文件内容本身&#xff0c;则需要使用输入/输出流。 想要在Java程序中表示一个真实存在的文…

谈谈RabbitMQ的五种消息模型以及SpringAMQP的使用

目录一、前言1. RabbitMQ中的基本概念2. docker部署RabbitMQ3. AMQP与JMS的简单介绍4. 演示demo搭建结构二、Basic Queue三、Work Queue四、发布订阅模式1. Fanout2. Direct3. Topic五、消息转换器1. 默认转换器2. 配置JSON转换器一、前言 1. RabbitMQ中的基本概念 message 消…

逻辑回归损失函数原理笔记

损失函数&#xff1a; 之前一直想不明白这个式子为什么可以当损失函数。所以记录一下。 首先&#xff0c;假如一个属于1类的样本&#xff0c;经过预测&#xff0c;h(x)0.3,得出0.3的概率是属于1类&#xff0c;也就是0.7的概率是属于0类&#xff0c;那么其误差就是0.7。 相反&…

配置七牛云的自定义域名以及配置域名CNAME

背景&#xff1a;最近在使用七牛云的过程中发现一个问题&#xff0c;七牛云的测试域名是有时效限制的且到期后重新申请会改变&#xff0c;自己业务方生产和测试环境需要使用固定的域名来配置图片访问&#xff0c;这时就需要绑定到自己的域名了。 1、配置七牛云自定义域名 这个…

学Golang,看这一篇

去年学了一遍 Golang&#xff0c;发现都给整忘了&#xff0c; 好饭不怕晚&#xff0c;再次二刷。 其实学好 Golang 并不难&#xff0c;关键是要找到它和其它语言不同和众里寻他千百度相通的微妙之处&#xff0c;就能很优雅地使用 Golang&#xff0c;以下会涉及较多知识点。特殊…

(Java高级教程)第一章Java多线程基础-第一节6:多线程案例

文章目录一&#xff1a;单例模式&#xff08;1&#xff09;设计模式概述&#xff08;2&#xff09;单例模式概述&#xff08;3&#xff09;单例模式实现A&#xff1a;饿汉模式B&#xff1a;懒汉模式①&#xff1a;单线程版②&#xff1a;多线程版③&#xff1a;多线程版&#x…

alpha模型:打开量化投资的黑箱;附创业板布林带策略代码:年化15%。

原创文章第108篇&#xff0c;专注“个人成长与财富自由、世界运作的逻辑&#xff0c; AI量化投资”。 关于量化投资&#xff0c;我们写了不少文章。从数据准备&#xff0c;预处理&#xff0c;因子特征工程&#xff0c;因子分析&#xff0c;规则策略&#xff0c;模型&#xff0c…

平安城市解决方案-最新全套文件

平安城市解决方案-最新全套文件一、建设背景目前平安城市视频监控面临的主要问题&#xff1a;1、看不清2、传不回3、存不下4、找不着5、易泄露二、思路架构三、建设方案四、获取 - 平安城市全套最新解决方案合集一、建设背景 平安城市是一个特大型、综合性非常强的管理系统&am…

JSP文件上传

JSP 提供了上传和下载的功能&#xff0c;用户釆用此功能&#xff0c;可以轻松实现文件的传输。下面介绍文件上传与下载的操作。 用户通过一个 JSP 页面上传文件给服务器时&#xff0c;该 JSP 页面必须含有 File 类型的表单&#xff0c; 并且表单必须将 enctype 的属性值设置为…

Node.js 是怎么找到模块的?

大家好&#xff0c;我是前端西瓜哥&#xff0c;今天我们来看看 Node.js 模块查找的原理。 模块种类 模块有三种来源。 核心模块&#xff1a;Node.js 内置的包。比如 http、fs、path&#xff1b; 自定义模块&#xff1a;NPM 包。比如 axios、express&#xff0c;位于 node_mo…

virtualBox虚拟机之间网络互通设置

环境 主机&#xff1a;Win10 虚拟机&#xff1a;Ubuntu 20.04 虚拟机&#xff1a;VirtualBox 6.1 模式虚拟机→主机主机→虚拟机虚拟机↔虚拟机虚拟机→Net/LANNet/LAN→虚拟机NAT√端口转发√端口转发NATservice√端口转发√√端口转发Host-Only√√√Internal√Bridged√√…

【快速上手系列】用于登录的验证码制作(ValidateCode)和Javaweb自带的老式验证码快速上手

【快速上手系列】用于登录的验证码制作&#xff08;ValidateCode&#xff09;和Javaweb自带的老式验证码快速上手 验证码 简介 验证码&#xff08;CAPTCHA&#xff09;是“Completely Automated Public Turing test to tell Computers and Humans Apart”&#xff08;全自动…

易基因|疾病研究:DNA甲基化和转录组学特征在高浆卵巢癌复发和耐药过程中高度保守

易基因&#xff5c;疾病研究&#xff1a;DNA甲基化和转录组学特征在高浆卵巢癌复发和耐药过程中高度保守 大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 2022年07月27日&#xff0c;《J Exp Clin Cancer Res》杂志发表了题为“DNA me…

Linux|centos7下部署安装alertmanager并实现邮箱和微信告警(三)

前言&#xff1a; 前文Linux|centos7下部署安装alertmanager并实现邮箱和微信告警&#xff08;二&#xff09;_晚风_END的博客-CSDN博客 实现了告警系统模块的部署和测试&#xff0c;主要的告警范围是服务器节点的操作系统内存&#xff0c;磁盘空间的使用率这些方面&#xff0…

甘露糖-聚乙二醇-N-羟基琥珀酰亚胺mannose-PEG-NHS

甘露糖-聚乙二醇-N-羟基琥珀酰亚胺mannose-PEG-NHS 琥珀酰亚胺又称为丁酰亚胺或丁二酰亚胺&#xff0c;是一种无色针状结晶或具有淡褐色光泽的薄片固体&#xff0c;味甜。易溶于水、醇或氢氧化钠溶液&#xff0c;不溶于醚、氯仿等&#xff0c;可以提供PEG接枝修饰甘露糖&#…

精彩回顾!2022VisionChina深圳展圆满落幕

11月16日&#xff0c;维科杯•OFweek 2022中国工业自动化及数字化行业年度评选颁奖典礼在深圳大中华喜来登酒店举行&#xff0c;经过OFweek网络投票、专家组评审及组委会综合评审三轮激烈紧张的评选&#xff0c;昂视凭借“PiqsVT智能视觉系统”在近300个参评项目中脱颖而出&…

Linux三个踩坑过程记录

今早花了一早上的时间解决了三个Linux的问题&#xff0c;分别是读写权限、克隆虚拟机开启问题和Xshell连接VM虚拟机问题。平时用虚拟机比较少&#xff0c;现在刚一开始用&#xff0c;就给我来了三个问题让我解决&#xff0c;真是含泪解决问题&#xff0c;但现在解决了&#xff…