news 2026/9/30 4:01:24

【免费】基于Python的微信小程序鲜花商城(花店)管理系统(FastAPI+Vue3) python课程设计 微信小程序课程设计,微信小程序毕业设计 锋哥原创出品,必属精品

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【免费】基于Python的微信小程序鲜花商城(花店)管理系统(FastAPI+Vue3) python课程设计 微信小程序课程设计,微信小程序毕业设计 锋哥原创出品,必属精品

大家好,我是Java1234_小锋老师,分享一套锋哥原创的基于Python的微信小程序校园失物招领管理系统(FastAPI+Vue3)。

项目介绍

鲜花消费已经从节日礼品延伸到日常探望、毕业纪念和商务拜访。传统花店依赖店员记库存、手工开单,订单状态不容易同步给顾客,节假日还容易出现超卖和漏单。微信小程序适合作为会员侧入口,管理后台则需要在浏览器中完成商品、订单和经营统计。本文设计并实现微信小程序鲜花商城(花店)管理系统,形成“小程序购物、Vue3运营、FastAPI服务、MySQL存储”的完整方案。

系统使用Python语言和FastAPI框架实现统一接口。会员端采用微信小程序,完成注册登录、分类浏览、购物车、下单支付、收货地址、收藏、浏览记录、评价和个人中心。管理端采用Vue3、Vite、Element Plus、Pinia和ECharts,完成数据统计、分类与鲜花维护、会员启停、订单发货、评价回复、公告发布以及管理员个人中心。身份认证使用JWT,角色分为管理员和会员。数据库名为db_flower_shop,业务表以t_开头,界面日期统一显示为2026-11-02,日期时间统一显示为2026-11-02 17:25:17。

论文按软件工程过程组织。先分析花店业务和两种角色的需求,再给出功能结构、总体架构、实体属性图、实体联系图和关键时序图,然后列出十二张数据表的字段名、字段类型、长度、是否为空和备注,并在系统实现中给出注册登录、购物车、下单、发货和统计等核心代码。测试表明,会员可以从浏览走到确认收货,管理员可以完成日常运营和首页图表查看。系统结构清楚,适合作为本科毕业设计,也可作为中小花店的信息化原型。

源码下载

链接: https://pan.baidu.com/s/1fP8GJCNVPVw8QQnnTvR4Mg?pwd=1234
提取码: 1234

系统展示

核心代码

""" 订单业务实现,负责下单、支付、发货和收货 """ import random from decimal import Decimal from sqlalchemy import select from sqlalchemy.orm import Session from app.common.convert import now, order_dict from app.common.exceptions import BizException from app.models import Address, Cart, Flower, Order, OrderItem def build_order_no() -> str: """生成订单号:FS + 时间 + 3位随机数""" time_part = now().strftime("%Y%m%d%H%M%S") return "FS" + time_part + f"{random.randint(0, 999):03d}" def list_items(db: Session, order_id: int): """查询订单明细""" return db.scalars(select(OrderItem).where(OrderItem.order_id == order_id)).all() def detail(db: Session, order_id: int, user_nickname=None): """查询订单详情并带上明细""" order = db.get(Order, order_id) if order is None: raise BizException("订单不存在") return order_dict(order, items=list_items(db, order_id), user_nickname=user_nickname) def must_own(db: Session, user_id: int, order_id: int) -> Order: """校验订单属于当前会员""" order = db.get(Order, order_id) if order is None or order.user_id != user_id: raise BizException("订单不存在") return order def create_order(db: Session, user_id: int, address_id, cart_ids, remark): """根据购物车生成待付款订单,并扣减库存""" if not cart_ids: raise BizException("请选择要结算的商品") address = db.get(Address, address_id) if address is None or address.user_id != user_id: raise BizException("收货地址不存在") carts = db.scalars( select(Cart).where(Cart.user_id == user_id, Cart.id.in_(cart_ids)) ).all() if len(carts) != len(cart_ids): raise BizException("购物车商品已变化,请刷新后重试") order = Order( order_no=build_order_no(), user_id=user_id, receiver=address.receiver, phone=address.phone, address=f"{address.province}{address.city}{address.district}{address.detail}", status=0, remark=remark, total_amount=Decimal("0"), create_time=now(), ) db.add(order) db.flush() total = Decimal("0") for cart in carts: flower = db.get(Flower, cart.flower_id) if flower is None or flower.status is None or flower.status != 1: raise BizException("存在已下架商品,无法下单") if cart.quantity is None or cart.quantity < 1: raise BizException("商品数量不正确") if flower.stock is None or flower.stock < cart.quantity: raise BizException(f"{flower.name}库存不足") flower.stock = flower.stock - cart.quantity item = OrderItem( order_id=order.id, flower_id=flower.id, flower_name=flower.name, cover=flower.cover, price=flower.price, quantity=cart.quantity, commented=0, ) db.add(item) total = total + (Decimal(str(flower.price)) * Decimal(cart.quantity)) db.delete(cart) order.total_amount = total db.flush() return detail(db, order.id) def pay(db: Session, user_id: int, order_id: int): """模拟支付,支付成功后增加销量""" order = must_own(db, user_id, order_id) if order.status is None or order.status != 0: raise BizException("当前订单不能支付") order.status = 1 order.pay_time = now() for item in list_items(db, order_id): flower = db.get(Flower, item.flower_id) if flower is not None: sales = 0 if flower.sales is None else flower.sales flower.sales = sales + item.quantity def receive(db: Session, user_id: int, order_id: int): """会员确认收货""" order = must_own(db, user_id, order_id) if order.status is None or order.status != 2: raise BizException("当前订单不能确认收货") order.status = 3 order.finish_time = now() def cancel(db: Session, user_id: int, order_id: int): """取消未支付订单并退回库存""" order = must_own(db, user_id, order_id) if order.status is None or order.status != 0: raise BizException("只有待付款订单可以取消") order.status = 4 for item in list_items(db, order_id): flower = db.get(Flower, item.flower_id) if flower is not None: stock = 0 if flower.stock is None else flower.stock flower.stock = stock + item.quantity def deliver(db: Session, order_id: int): """管理员发货""" order = db.get(Order, order_id) if order is None: raise BizException("订单不存在") if order.status is None or order.status != 1: raise BizException("只有待发货订单可以发货") order.status = 2 order.deliver_time = now()
<template> <div class="page-card"> <div class="toolbar"> <el-input v-model="query.flowerName" placeholder="鲜花名称" clearable style="width: 220px" @keyup.enter="load" /> <el-button type="primary" @click="load">查询</el-button> </div> <el-table :data="list" style="width: 100%"> <el-table-column prop="flowerName" label="鲜花" min-width="140" /> <el-table-column prop="nickname" label="会员" min-width="100" /> <el-table-column prop="score" label="评分" min-width="80" /> <el-table-column prop="content" label="评价内容" min-width="220" /> <el-table-column prop="reply" label="商家回复" min-width="180" /> <el-table-column prop="createTime" label="评价时间" min-width="180" /> <el-table-column label="操作" min-width="100"> <template #default="{ row }"> <el-button link type="primary" @click="open(row)">回复</el-button> </template> </el-table-column> </el-table> <div class="pager"> <el-pagination background layout="total, prev, pager, next" :total="total" v-model:current-page="query.pageNum" :page-size="query.pageSize" @current-change="load" /> </div> <el-dialog v-model="visible" title="回复评价" width="520px"> <el-input v-model="reply" type="textarea" :rows="4" placeholder="请输入回复" /> <template #footer> <el-button @click="visible = false">取消</el-button> <el-button type="primary" @click="save">提交</el-button> </template> </el-dialog> </div> </template> <script setup> import { onMounted, reactive, ref } from 'vue' import { ElMessage } from 'element-plus' import { commentPage, commentReply } from '../../api/admin' const list = ref([]) const total = ref(0) const visible = ref(false) const reply = ref('') const currentId = ref(null) const query = reactive({ pageNum: 1, pageSize: 10, flowerName: '' }) /** * 加载评价分页 */ async function load() { const res = await commentPage(query) list.value = res.data.records total.value = res.data.total } /** * 打开回复框 */ function open(row) { currentId.value = row.id reply.value = row.reply || '' visible.value = true } /** * 提交商家回复 */ async function save() { await commentReply({ id: currentId.value, reply: reply.value }) ElMessage.success('回复成功') visible.value = false load() } onMounted(load) </script>
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/30 4:01:20

启智平台Git协同开发实战指南:从环境搭建到CI构建

1. 项目概述&#xff1a;这不是一个“平台使用教程”&#xff0c;而是一份面向真实开发场景的启智平台协同工作手册“启智平台使用教程|20240310更新”——这个标题乍看平平无奇&#xff0c;像极了那种点开就弹出三页PDF、最后只教你怎么点“运行”按钮的应付式文档。但如果你真…

作者头像 李华
网站建设 2026/9/30 4:00:44

SpringBoot+SSM+Thymeleaf剧团管理系统实战:从数据库设计到上线部署

前阵子有朋友把一份毕设项目压缩包丢给我&#xff0c;文件夹名是 springboot_ssm872曲艺黄梅戏剧团管理系统哈尔。第一次看到这个命名&#xff0c;我的第一反应是&#xff1a;SpringBoot 和 SSM 怎么会同时出现在一个项目名里&#xff1f;后来打开源码发现&#xff0c;实际用的…

作者头像 李华
网站建设 2026/9/30 4:00:31

云计算平台运维与开发认证备考指南:从OpenStack到Kubernetes

简介&#xff1a;这是一份面向云计算平台运维与开发职业技能等级认证备考者的PDF教程&#xff0c;系统讲解工程项目文档编写与管理、项目管理核心概念、瀑布与敏捷开发模型、项目开发全流程等知识点&#xff0c;适合参加中级认证培训或从事云平台运维开发工作的人员作为理论复习…

作者头像 李华
网站建设 2026/9/30 4:00:14

字符串API避坑指南:从length到编码转换的实战要点

1. 字符串不是小儿科&#xff1a;先厘清"字符"与"编码"这两层地基做开发的这十来年&#xff0c;我几乎每天都要和字符串打交道。前端传来的参数是字符串&#xff0c;后端返回的 JSON 是字符串&#xff0c;日志里躺着的一大半内容也是字符串。很多人觉得字符…

作者头像 李华
网站建设 2026/9/30 3:59:44

Thrift跨语言RPC实战:从IDL设计到服务端选型与踩坑记录

你们有没有遇到过这种场景&#xff1a;一个服务端用 Java 写得好好的&#xff0c;客户端突然来了个 Python 脚本要对接&#xff0c;后来又冒出个 Go 服务要调同一个接口。刚开始还能靠 RESTful 接口硬扛&#xff0c;JSON 来 JSON 去也能跑&#xff0c;可一旦接口字段多起来、调…

作者头像 李华
网站建设 2026/9/30 3:59:12

大模型推理优化实战:从vLLM到TensorRT-LLM的工程落地

1. 项目概述&#xff1a;Model-Optimizer 不是工具名&#xff0c;而是一类工程实践的统称“Model-Optimizer”这个词在当前大模型部署生态里&#xff0c;根本不是某个具体开源项目的官方名称&#xff0c;也不是NVIDIA或Hugging Face发布的标准产品代号。它本质上是一个行业共识…

作者头像 李华