【java项目分享】springboot农产品销售平台14952

源码获取

私信联系我即可~
大家点赞、收藏、关注、评论啦
精彩专栏推荐订阅:在下方专栏👇🏻

👇🏻 精彩专栏 推荐订阅👇🏻

java精品项目案例【3000套】

Java精品项目案例【3000套】https://blog.csdn.net/weixin_mz_zxd001/category_13187364.html

Python精品项目案例【500套】

uniapp/微信小程序/安卓app【1800套】

✅文末获取源码✅

感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以找我咨询,希望帮助更多的人❤️

目录

[++++1 绪论++++](#1 绪论)

[++++1.1 研究背景与意义++++](#1.1 研究背景与意义)

[++++1.1.1 研究背景++++](#1.1.1 研究背景)

[++++1.1.2 研究意义++++](#1.1.2 研究意义)

[++++1.2 国内外研究现状++++](#1.2 国内外研究现状)

[++++1.2.1 国内现状++++](#1.2.1 国内现状)

[++++1.2.2 国外现状++++](#1.2.2 国外现状)

[++++1.3 发展趋势++++](#1.3 发展趋势)

[++++2 相关技术介绍++++](#2 相关技术介绍)

[++++2.1 Java语言++++](#2.1 Java语言)

[++++2.2 uni-app++++](#2.2 uni-app)

[++++2.3 微信小程序++++](#2.3 微信小程序)

[++++2.4 Spring Boot框架++++](#2.4 Spring Boot框架)

[++++2.5 Vue框架++++](#2.5 Vue框架)

[++++2.6 2.6++++ ++++数据库技术++++](#2.6 2.6 数据库技术)

[++++3 系统分析++++](#3 系统分析)

[++++3.1.1 技术可行性++++](#3.1.1 技术可行性)

[++++3.1.2 操作可行性++++](#3.1.2 操作可行性)

[++++3.1.3 经济可行性++++](#3.1.3 经济可行性)

[++++3.2 功能需求分析++++](#3.2 功能需求分析)

[++++3.2.1++++ ++++普通用户++++ ++++功能++++](#3.2.1 普通用户功能)

[++++3.2.2 学生功能++++](#3.2.2 学生功能)

[++++3.2.3 管理员功能++++](#3.2.3 管理员功能)

[++++3.3 非功能需求分析++++](#3.3 非功能需求分析)

[++++4 系统设计++++](#4 系统设计)

[++++4.1 系统架构设计++++](#4.1 系统架构设计)

[++++4.2 系统结构功能设计++++](#4.2 系统结构功能设计)

[++++4.3 系统流程设计++++](#4.3 系统流程设计)

[++++4.3.1 报修申请流程++++](#4.3.1 报修申请流程)

[++++4.3.2 任务分配流程++++](#4.3.2 任务分配流程)

[++++4.3.3 维修处理流程++++](#4.3.3 维修处理流程)

[++++4.3.4++++ ++++订单配送++++ ++++流程++++](#4.3.4 订单配送流程)

[++++4.3.5 系统管理流程++++](#4.3.5 系统管理流程)

[++++4.4 数据库设计++++](#4.4 数据库设计)

[++++4.4.1 E-R图设计++++](#4.4.1 E-R图设计)

[++++4.4.2 数据库表设计++++](#4.4.2 数据库表设计)

[++++5 系统实现++++](#5 系统实现)

[++++5.1++++ ++++普通用户++++ ++++功能实现++++](#5.1 普通用户功能实现)

[++++5.2 学生功能实现++++](#5.2 学生功能实现)

[++++5.3 管理员功能实现++++](#5.3 管理员功能实现)

[++++6 系统测试++++](#6 系统测试)

[++++6.1 测试目的++++](#6.1 测试目的)

[++++6.2 测试方法++++](#6.2 测试方法)

[++++6.3 测试内容++++](#6.3 测试内容)

[++++6.4 测试结论++++](#6.4 测试结论)

[++++7 全文总结++++](#7 全文总结)

[++++7.1 主要结论++++](#7.1 主要结论)

[++++7.2 研究展望++++](#7.2 研究展望)

++++参考文献++++

[++++致 谢++++](#致 谢)

[++++附 录++++](#附 录)

普通用户功能

普通用户用例图以普通用户的工作流程为主,主要功能为查看新闻资讯、限时秒杀、商城中心查看购买、我的购物车、我的个人中心等功能。用例之间包含关系保证基本业务逻辑连续性,扩展关系满足特定场景功能增强要求,两者共同保证普通用户高效完成维修工作。普通用户用例图如图3-2所示。

商家功能

商家用例图以商家为系统的主要用户,主要用例完成限时秒杀管理和商城管理、订单进度跟踪等功能。学生用例图如图3-2所示。

管理员功能

管理员用例图表示系统管理、监控的功能,基本功能包含统计图表查看、限时秒杀管理、商城管理的查看审核等基本的管理操作。包含关系保障基础管理流程的稳定,扩展关系为数据分析和决策支持提供补充,构建起多层次的管理体系,保证系统稳定运行。管理员用例图如图3-3所示。

系统架构设计

该系统采用分层的结构,分为客户层、表示层、业务逻辑层、持久化层、数据库层。客户层负责和用户交互,表示层处理请求、展示结果;业务逻辑层实现核心功能,通过Spring Service做逻辑处理;持久化层和数据库交互,用MyBatis或者JPA做数据操作;数据库层存储系统数据,用MySQL等数据库18。整个系统使用Spring Boot框架,简化开发过程,提高模块化、可维护性19。系统架构图如图4-1所示。

系统结构功能设计

本系统采用了基于角色的权限管理架构,有商家用户、普通用户、管理员三类用户。商家用户主要具有限时秒杀管理、秒杀订单管理、商城管理等;普通用户主要是有查看限时秒杀活动、新闻资讯、商城中心、领取优惠券、购买申请等功能;管理员有最高权限,可以对数据进行监控、管理、维护,有数据统计分析、各种信息的增删改查、审核导出等全流程管理功能。各个角色的功能相对独立又互相配合,一起形成完整的宿舍报修管理体系。系统功能结构图如图4-2所示。

系统流程设计

注册登录流程

系统将面向不同角色提供统一的账户管理机制,确保其能够合法访问系统资源并管理个人数据。在登录界面,用户可根据自身账户状态选择相应的操作路径:未注册用户可点击"注册"按钮,进入注册页面,填写必要信息并完成账号的创建;而已注册用户则可选择"登录"选项,跳转至登录界面,输入正确的用户名与密码进行身份认证,经系统验证通过后进入相应功能界面。注册登录流程如图4-4所示。

系统操作流程

用户通过浏览器访问系统的指定URL,即可进入应用程序的主页面。在登录界面,用户可根据自身账户状态选择相应的操作路径,系统在后台对登录凭证进行验证,确认无误后,用户将被授权进入系统的核心功能操作界面。在核心功能操作界面中,用户可根据导航提示和功能布局,依次开展各项业务操作。系统操作流程如图4-5所示。

查询信息流程

用户可通过在系统搜索框中输入关键词,实现对系统内海量数据的快速查找。在输入所需查询的关键字并确认操作后,系统将启动检索机制,对后台数据库进行匹配查询,并将与关键词相关的结果进行筛选与整理,最终以结构化形式呈现于系统界面,查询信息流程如图4-6所示。

数据库

java 复制代码
DROP TABLE IF EXISTS `logistics_delivery`;
CREATE TABLE `logistics_delivery` (
  `logistics_delivery_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '物流配送ID',
  `order_number` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '订单号',
  `product_name` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '商品名称',
  `purchase_quantity` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '购买数量',
  `total_transaction_amount` double(10,2) DEFAULT '0.00' COMMENT '交易总额',
  `the_date_of_issuance` date DEFAULT NULL COMMENT '发货日期',
  `delivery_number` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '配送订单',
  `ordinary_users` int(11) DEFAULT '0' COMMENT '普通用户',
  `shipping_address` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '收货地址',
  `delivery_status` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '配送状态',
  `signing_status` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '签收状态',
  `recommend` int(11) NOT NULL DEFAULT '0' COMMENT '智能推荐',
  `contact_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '联系人名字',
  `merchant_id` int(11) DEFAULT NULL COMMENT '商家id',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',


DROP TABLE IF EXISTS `order`;
CREATE TABLE `order` (
  `order_id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '订单ID',
  `order_number` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '订单号',
  `goods_id` mediumint(8) unsigned NOT NULL COMMENT '商品ID',
  `title` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '商品标题',
  `img` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '商品图片',
  `price` double(10,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '价格',
  `price_ago` double(10,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '原价',
  `num` int(8) NOT NULL DEFAULT '1' COMMENT '数量',
  `price_count` double(8,2) unsigned NOT NULL DEFAULT '0.00' COMMENT '总价',
  `norms` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '规格',
  `type` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '未分类' COMMENT '商品分类',
  `contact_name` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '联系人姓名',
  `contact_email` varchar(125) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '联系人邮箱',
  `contact_phone` varchar(11) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '联系人手机',
  `contact_address` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '收件地址',
  `postal_code` varchar(9) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '邮政编码',
  `user_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '买家ID',
  `merchant_id` mediumint(8) unsigned NOT NULL DEFAULT '0' COMMENT '商家ID',
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '描述',
  `state` varchar(16) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '待付款' COMMENT '订单状态:待付款,待发货,待签收,已签收,待退款,已退款,已拒绝,已完成',
  `remark` text CHARACTER SET utf8 COLLATE utf8_general_ci COMMENT '订单备注',
  `delivery_state` varchar(16) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT '未配送' COMMENT '发货状态:未配送,已配送',
  `vip_discount` double(10,2) DEFAULT '0.00' COMMENT '折扣',
  `integral` int(11) DEFAULT '0' COMMENT '积分',
  `buy_type` tinyint(2) DEFAULT '1' COMMENT '1-全额购买,2-积分兑换,3-钱包购买',
  `desc` varchar(64) COLLATE utf8mb4_general_ci DEFAULT '其他原因' COMMENT '取消订单原因',

代码

java 复制代码
<template>
  <view class="page_diy_table page_second_kill_order_table" :style="{ paddingTop: vuex_custom_bar_height + 'px' }">
    <tn-nav-bar backUrl="/pages/user/index">秒杀订单列表</tn-nav-bar>
    <view class="page-list" id="page_diy_table">
      <!-- 筛选模块(开始) -->
      <view class="search-wrap">
        <!-- 搜索栏 -->
        <uni-forms :modelValue="query" labelWidth="70px">
              <uni-forms-item label="商品名称" name="product_name">
                <uni-easyinput type="text" v-model="query.product_name" placeholder="商品名称" />
              </uni-forms-item>
              <uni-forms-item label="商品类型" name="commodity_type">
                <uni-easyinput type="text" v-model="query.commodity_type" placeholder="商品类型" />
              </uni-forms-item>
                        <uni-forms-item label="支付状态" name="pay_state">
              <uni-data-select placeholder="请选择支付状态"
                               v-model="query['pay_state']"
                               :localdata="list_pay_state"
              ></uni-data-select>
            </uni-forms-item>
        </uni-forms>
        <!-- /搜索栏 -->
        <view class="search-btn-wrap">
          <view class="me-btn btn-reset" @click="reset()"> 重置 </view>
          <view class="me-btn btn-search" @click="search_()"> 查询 </view>
        </view>
		<view class="toolbar">
				        		</view>
      </view>
      <!-- 列表 -->
      <view class="list-wrap-row">
        <view v-for="(o, i) in list" :key="i" class="list-item">
          <view class="item-row " v-if="0 && $check_field('get','order_number')">
            <view class="label" v-if="true">
              <span>订单编号</span>
            </view>
              <view class="value">
                              <span>{{ o['order_number'] }}</span>
                          </view>
            </view>
          <view class="item-row " v-if="1 && $check_field('get','product_name')">
            <view class="label" v-if="true">
              <span>商品名称</span>
            </view>
              <view class="value">
                              <span>{{ o['product_name'] }}</span>
                          </view>
            </view>
          <view class="item-row " v-if="1 && $check_field('get','commodity_type')">
            <view class="label" v-if="true">
              <span>商品类型</span>
            </view>
              <view class="value">
                              <span>{{ o['commodity_type'] }}</span>
                          </view>
            </view>
          <view class="item-row " v-if="0 && $check_field('get','merchant_user')">
            <view class="label" v-if="true">
              <span>商家用户</span>
            </view>
              <view class="value">
              <span>{{ get_user_merchant_user(o['merchant_user']) }}</span>
            </view>
            </view>
          <view class="item-row " v-if="0 && $check_field('get','second_kill_price')">
            <view class="label" v-if="true">
              <span>秒杀价格</span>
            </view>
              <view class="value">
                              <span>{{ o['second_kill_price'] }}</span>
                          </view>
            </view>
          <view class="item-row " v-if="0 && $check_field('get','ordinary_user')">
            <view class="label" v-if="true">
              <span>普通用户</span>
            </view>
              <view class="value">
              <span>{{ get_user_ordinary_user(o['ordinary_user']) }}</span>
            </view>
            </view>
          <view class="item-row " v-if="1 && $check_field('get','order_date')">
            <view class="label" v-if="true">
              <span>订单日期</span>
            </view>
              <view class="value">
                              <span>{{ $toTime(o['order_date'], 'yyyy-MM-dd') }}</span>
                          </view>
            </view>
          <view class="item-row " v-if="0 && $check_field('get','order_notes')">
            <view class="label" v-if="true">
              <span>订单备注</span>
            </view>
              <view class="value">
                              <span>{{ o['order_notes'] }}</span>
                          </view>
            </view>
          <view class="content">
          </view>
          <view class="operate-bar">
            <view width="100%" class="me-btn btn-delete" @click="delInfo(i)"
                  v-if="$check_action('/second_kill_order/table', 'del') || $check_action('/second_kill_order/view', 'del')">
              删除
            </view>
            <view width="100%" class="me-btn btn-info" @click="$navTo('/pagesC/second_kill_order/view?' + field + '=' + o[field])"
                  v-if="$check_action('/second_kill_order/table', 'set') || $check_action('/second_kill_order/view', 'set') || $check_action('/second_kill_order/view', 'get')">
              详情
            </view>
              <view width="100%"
                    @click="goto_pay(o)"
                    v-if="o.pay_state === '未支付' && $check_pay('/second_kill_order/table') "
                    class="me-btn btn-pay">支付</view>
          </view>
        </view>
      </view>
      <!-- /列表 -->
      <!-- 分页器 -->
      <uni-pagination
        class="pager"
        show-icon="true"
        :total="count"
        :pageSize="query.size"
        :current="query.page"
        @change="page_change"
      ></uni-pagination>
      <!-- /分页器 -->
																														      <view class="pay-model" v-if="payModalVisible">
        <view class="mask" @click="payModalVisible = false"></view>
        <view class="pay-model-inn">
          <view v-if="pay_step === 1">
            <view class="pay-info">
    		            		                <view class="pay-info-item">
                <view class="pay-info-title">支付内容</view>
                <view class="pay-info-content">{{ pay_data.product_name }}</view>
              </view>
                		            		            		                      <view class="pay-info-item">
                <view class="pay-info-title">订单金额</view>
                <view class="pay-info-content">¥{{ pay_data.second_kill_price }}</view>
              </view>
          		            		            		                              <view class="pay-info-item pay-amount">
                <view class="pay-info-title">实付金额</view>
                <view class="pay-info-content pay-info-amount">¥{{ pay_data.amount_paid }}</view>
              </view>
            </view>
            <view class="pay-type">
              <view class="pay-type-title">支付方式</view>
              <view class="pay-type-list">
                <view v-for="(item, index) in pay_source" :key="index"
                  :class="['pay-type-item', pay_obj.payActiveName === item.name ? 'pay-type-item-active' : '']"
                  @click="pay_obj.payActiveName = item.name">
                  <view class="pay-type-content">
                    <image class="pay-type-img" :src="item.img" mode="aspectFit"></image>
                    <view class="pay-type-name">{{ item.name }}</view>
                  </view>
                    </view>
              </view>
            </view>
            <view class="pay-btn-wrap">
              <button class="me-btn" type="primary" @click="confirmPayStep">确认</button>
            </view>
          </view>
          <view v-if="pay_step === 2">
            <view class="pay-op">
              <image v-if="pay_obj.payActiveName === '微信支付'" :src="pay_source[0].pay_img" mode="widthFix" class="pay-image"></image>
              <image v-if="pay_obj.payActiveName === '支付宝支付'" :src="pay_source[1].pay_img" mode="widthFix" class="pay-image"></image>
              <view v-if="pay_obj.payActiveName === '网银支付'" class="pay-ebank">
                <view class="pay-ebank-item">
                  <view class="pay-ebank-title">请输入网银账号:</view>
                  <input class="pay-ebank-input" v-model="pay_obj.account" placeholder="请输入网银账号" />
                </view>
                <view class="pay-ebank-item">
                  <view class="pay-ebank-title">请输入支付密码,6位数字:</view>
                  <input class="pay-ebank-input" placeholder="请输入密码" v-model="pay_obj.password" type="password"
                    maxlength="6" />
                </view>
              </view>
            </view>
            <view class="pay-btn-wrap">
              <button class="me-btn me-btn-plain" @click="pay_step = 1">其他支付方式</button>
              <button class="me-btn" type="primary" @click="submit_pay">确认支付</button>
            </view>
          </view>
        </view>
      </view>
      </view>
                                                                                                                                                                                      <dateRangePicker
          style="z-index: 9999;"
          :show="order_date_date_range_picker_show"
          :minYear="2022"
          @close="order_date_date_range_picker_show=false"
          @confirm="order_date_date_range_picker_confirm"
        />
                                                      </view>
</template>
<script>
import mixin from '@/libs/mixins/page.js';
import dateRangePicker from '@/components/date-range-picker/date-range-picker.vue';
import DateSelector from '@/components/dengrq-datetime-picker/dateSelector/index.vue';

					
export default {
  mixins: [mixin],
  components: {
    dateRangePicker,
    DateSelector,
  },
  data() {
    return {
      // 获取数据地址
      url_get_list: '~/api/second_kill_order/get_list?like=1',
      url_del: '~/api/second_kill_order/del',

      // 字段ID
      field: 'second_kill_order_id',
      // 查询
      query: {
        size: 7,
        page: 1,
                product_name: "",
                    commodity_type: "",
                        "pay_state":"",
        login_time: '',
        create_time: '',
      },
								      // 数据
      list: [],
                                                // 用户列表
      list_user_merchant_user: [],
                	  second_kill_price_input_timer: null,
                      // 用户列表
      list_user_ordinary_user: [],
                      order_date_date_range_picker_show: false,
    order_date_date_text: '请选择订单日期',
                  list_pay_state: [
        { value: '', text: '全部' },
        { value: '未支付', text: '未支付' },
        { value: '已支付', text: '已支付' },
        ],
      model:false,
      paywayact:0,
      // 支付方式
      payway:[
        { name: '微信', url: '/static/img/wx.png', id: 1 },
        { name: '支付宝', url: '/static/img/aplipay.png', id: 2 },
        {
          name: '其他',
          url: 'https://dzgj.yuyuebus.com/static/front/dist/static/img/icon-question.png',
          id: 3,
        }
      ],
      pay_obj:{
        payActiveName:"微信支付",
        account:"",
        password:"",
        id:""
      },
        payModalVisible: false,
      pay_step: 1,
      pay_data: {},
      pay_source: [
        {
          name: "微信支付",
          img: "/static/icon/wechat.svg",
          pay_img: "/static/img/wx.png"
        },
        {
          name: "支付宝支付",
          img: "/static/icon/alipay.svg",
          pay_img: "/static/img/aplipay.png"
        },
        {
          name: "网银支付",
          img: "/static/icon/ebank.svg"
        },
          ],
      };
  },
  methods: {
                              order_date_date_range_picker_confirm(date) {
      this.query.order_date_min = date[0];
      this.query.order_date_max = date[1];
      this.order_date_date_text = `${date[0]} - ${date[1]}`;
      this.search_();
    },
    order_date_date_select_clear() {
      this.query.order_date_min = '';
      this.query.order_date_max = '';
      this.order_date_date_text = '请选择订单日期';
      this.search_();
    },
        							second_kill_price_input() {
			this.second_kill_price_input_timer && clearTimeout(this.second_kill_price_input_timer);
			this.second_kill_price_input_timer = setTimeout(() => {
				if((this.query.second_kill_price_min && this.query.second_kill_price_max) || (!this.query.second_kill_price_min && !this.query.second_kill_price_max)) {
					this.search_();
				}
			}, 300);
		},
				    search_() {
      this.query.page = 1;
      this.get_list();
    },
    /**
     * 重置
     */
    reset: function reset() {
                                this.order_date_date_range_picker_show = false;
    this.order_date_date_text = '请选择订单日期';
            uni.clear(this.query);
      uni.push(this.query, this.config);
      this.get_list();
    },
    get_list_before(param){
      var user_group = this.user.user_group;
      if(user_group != "管理员"){
          let sqlwhere = "(";
                                                if(user_group=="商家用户"){
          sqlwhere+= "merchant_user = " + this.user.user_id + " or ";
        }
                                  if(user_group=="普通用户"){
          sqlwhere+= "ordinary_user = " + this.user.user_id + " or ";
        }
                                      if (sqlwhere.length>1){
          sqlwhere = sqlwhere.substr(0,sqlwhere.length-4);
          sqlwhere += ")";
          param["sqlwhere"] = sqlwhere;
        }
        }
      return param;
    },
    async delInfo(v) {
      let _this = this;
      let type = this.list[v];
			let res
                                                                                                                                                                                                                                                                                                                                                                                                                          uni.showModal({
        title: '删除',
        content: '此操作将永久删除该文件, 是否继续?',
        success: function (res) {
          if (res.confirm) {
            let list = [v];
            _this.delAll(list);
          } else if (res.cancel) {
            console.log('用户点击取消');
          }
        },
      });
    },
	get_list_after(param){
	      let _this = this;
	  	},
                                  /**
     * 获取商家用户用户列表
     */
    async get_list_user_merchant_user() {
      var json = await this.$get("~/api/user/get_list?user_group=商家用户");
      if(json.result && json.result.list){
        this.list_user_merchant_user = json.result.list;
      }
      else if(json.error){
        console.error(json.error);
      }
    },

    get_user_merchant_user(id){
      let obj = this.list_user_merchant_user;
      let ret = "";
      for(let i=0;i<obj.length;i++){
        if(obj[i].user_id==id){
          ret = obj[i].nickname+"-"+obj[i].username;
        }
      }
      return ret;
    },
                      /**
     * 获取普通用户用户列表
     */
    async get_list_user_ordinary_user() {
      var json = await this.$get("~/api/user/get_list?user_group=普通用户");
      if(json.result && json.result.list){
        this.list_user_ordinary_user = json.result.list;
      }
      else if(json.error){
        console.error(json.error);
      }
    },

    get_user_ordinary_user(id){
      let obj = this.list_user_ordinary_user;
      let ret = "";
      for(let i=0;i<obj.length;i++){
        if(obj[i].user_id==id){
          ret = obj[i].nickname+"-"+obj[i].username;
        }
      }
      return ret;
    },
                        /**
     * 打开支付
     */
    goto_pay(v) {
      //打开选择支付方式
      this.pay_obj.id = v.second_kill_order_id;
        this.pay_data = v;
                                                        this.pay_data.amount_paid = v.second_kill_price;
                                                  
      this.payModalVisible = true;
      this.pay_step = 1;
        
    },
      confirmPayStep() {
      if (['微信支付', '支付宝支付', '网银支付'].includes(this.pay_obj.payActiveName)) {
        this.pay_step = 2;
      }
        },
      choosepayway(idx) {
      switch (idx) {
        case 0:
          this.pay_obj.payActiveName = '微信';
          break;
        case 1:
          this.pay_obj.payActiveName = '支付宝';
          break;
        case 2:
          this.pay_obj.payActiveName = '网银';
          break;
      }
      this.paywayact = idx;
    },
    closemodel() {
      //关闭选择支付方式
        this.payModalVisible = false;
      this.pay_step = 1;
      this.pay_obj.account = "";
      this.pay_obj.password = "";
      },
    /**
     * 支付
     */
    submit_pay() {
            let _this = this;
      let url = this.$toUrl(
              this.query,
              '~/api/second_kill_order/set?second_kill_order_id=' + this.pay_obj.id
      );
      let name = this.pay_obj.payActiveName;
      let payType = name.endsWith("支付") ? name.slice(0, -2) : name;
      let param = { pay_state: '已支付', pay_type: payType };
                                                                                          this.$post(url, param, (res) => {
        if (res.result) {
          _this.$toast('支付成功');
                              setTimeout(() => {
            _this.$nav('/pagesC/second_kill_order/table');
            _this.pay_obj.payActiveName = "微信支付";
            _this.pay_step = 1;
            _this.pay_obj.account = "";
            _this.pay_obj.password = "";
          }, 700);
        } else if (res.error) {
          _this.$toast(res.error.message);
          console.log(res.error);
        }
      });
    },
  },
  created() {
                        this.get_list_user_merchant_user();
                  this.get_list_user_ordinary_user();
            },
};
</script>

<style lang="scss" scoped>
  @import 'styles/pagesC/index.scss';
  .num_range {
    display: flex;
    align-items: center;
    font-size: 28px;
  }
  .date_select {
    position: relative;
    text-align: center;
    padding: 8px 0;
    border: 1px solid #e5e5e5;
    border-radius: 5px;
    color: #6a6a6a;
  }

  .date_select_clear {
    position: absolute;
    right: 10px;
    top: 50%;
    transform: translateY(-50%);
  }

  /* 弹窗样式 */
  .popup-mask {
    position: fixed;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    background-color: rgba(0, 0, 0, 0.5);
    z-index: 999;
  }

  .date-selector-popup {
    position: fixed;
    left: 0;
    right: 0;
    bottom: 0;
    background-color: #fff;
    border-radius: 16px 16px 0 0;
    z-index: 1000;
    transform: translateY(100%);
    transition: transform 0.3s ease;
    max-height: 80vh;
    display: flex;
    flex-direction: column;
  }

  .date-selector-popup.popup-show {
    transform: translateY(0);
  }

  .popup-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 16px 20px;
    border-bottom: 1px solid #f0f0f0;
    flex-shrink: 0;
  }

  .popup-title {
    font-size: 18px;
    font-weight: 600;
    color: #333;
  }

  .popup-close {
    width: 32px;
    height: 32px;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 24px;
    color: #666;
    cursor: pointer;
  }

  .popup-content {
    flex: 1;
    overflow-y: auto;
    padding: 20px;
  }
.pay-model {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  z-index: 1000;
  
  .mask {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background: rgba(0, 0, 0, 0.5);
  }
  
  .pay-model-inn {
    position: absolute;
    bottom: 0;
    left: 0;
    width: 100%;
    background: #fff;
    border-radius: 20rpx 20rpx 0 0;
    padding: 40rpx 30rpx;
    box-sizing: border-box;
    max-height: 80vh;
    overflow-y: auto;
  }
}
.pay-info {
  .pay-info-item {
    display: flex;
    justify-content: space-between;
    align-items: baseline;
    margin-bottom: 30rpx;
    font-size: 28rpx;
    
    .pay-info-title {
      color: #666;
      width: 80px;
    }
    
    .pay-info-content {
      color: #999;
      text-align: right;
    }
  }
  
  .pay-amount {
    margin-top: 40rpx;
    padding-top: 30rpx;
    border-top: 1rpx solid #eee;
    border-bottom: 1rpx solid #eee;
    padding-bottom: 30rpx;
    
    .pay-info-amount {
      font-weight: bold;
      font-size: 36rpx;
      color: #f5222d;
    }
  }
}
.pay-type {
  margin-top: 40rpx;
  
  .pay-type-title {
    color: #999;
    margin-bottom: 20rpx;
    font-size: 28rpx;
  }
  
  .pay-type-list {
    display: grid;
    grid-template-columns: repeat(1, 1fr);
    gap: 20rpx;
  }
  
  .pay-type-item {
    background: #f8f8f8;
    border: 2rpx solid #f8f8f8;
    border-radius: 10rpx;
    padding: 30rpx 20rpx;
    display: flex;
    flex-direction: row;
    align-items: center;
    justify-content: space-between;
    .pay-type-content{
      display: flex;
      align-items: center;
      justify-content: center;
    }
    .pay-type-img {
      width: 40rpx;
      height: 40rpx;
      margin-right: 20px;
    }
    
    .pay-type-name {
      font-size: 28rpx;
    }
    
    .pay-type-remark {
      font-size: 24rpx;
      color: #999;
    }
  }
  
  .pay-type-item-active {
    border-color: #2c70f6;
    background: #e8f0ff;
  }
}
.pay-btn-wrap {
  margin-top: 40rpx;
  display: flex;
  gap: 20rpx;
  
  .me-btn {
    flex: 1;
    height: 80rpx;
    line-height: 80rpx;
    border-radius: 10rpx;
    
    &.me-btn-plain {
      background: #fff;
      border: 1rpx solid #ddd;
      color: #333;
    }
  }
}
.pay-ebank {
  .pay-ebank-item {
    margin-top: 40rpx;
    
    .pay-ebank-title {
      margin-bottom: 20rpx;
      color: #666;
    }
    
    .pay-ebank-input {
      border: 1rpx solid #ddd;
      border-radius: 10rpx;
      padding: 20rpx;
      font-size: 28rpx;
      height: 50px;
    }
  }
}

.pay-image {
  width: 96%;
  margin: 0 auto;
  display: block;
}
</style>

普通用户功能实现

用户注册功能

户可通过系统的注册功能创建个人账户。在注册过程中,需填写用户名、登录密码、电子邮箱或手机号码等必要信息。系统将对提交的数据进行完整性与格式校验,包括密码强度、邮箱有效性或手机号格式的验证,并检查用户名及联系方式是否已存在,以确保信息的唯一性。校验通过后,用户数据将被加密存储至数据库,保障信息安全。注册界面设计如下图所示。普通用户注册界面如图5-1所示。

图5-1 普通用户注册界面

用户登录功能

用户登录模块为用户提供一种安全、便捷的身份认证途径。登录界面采用简洁直观的布局设计,用户仅需在指定字段中输入用户名和密码,系统即对其进行身份核验。验证通过后,用户将自动跳转至系统主页面,进入相应的功能操作环境。用户登录面如图5-2所示。

图5-2 用户登录界面

用户商城中心功能

用户点击"商城中心"可以查看商品所有详情,可以通过过分类展示点击想要查看的产品,产品详情包括商家用户名称、产品产地、价格、来源、优惠券领取等操作,然后可以点击加入购物车,添加我的地址,然后进行点击购买。用户登录面如图5-3所示。

图5-3 用户商城中心界面

图5-4 购物订单详情界面

商家用户功能实现

限时秒杀管理

限时秒杀管理:商家用户可以查看添加限时秒杀所有列表及添加内容详情,包括商品名称、商品类型、商家用户、秒杀价格、商品详情等信息。限时秒杀管理界面如下5-6图所示:

图5-6 限时秒杀管理添加界面

商城管理

商城管理:商家用户可以对商城管理进行查看,包括商城中心列表的添加,分类列表、订单列表、订单配送、订单售后、优惠券的管理,可以进行增删查的操作。商城管理界面如下5-6图所示:

图5-7 商城管理界面

图5-8商城中心商品添加界面

管理员功能实现

系统用户模块

管理员点击"系统用户"菜单可以对系统中存在的用户进行管理,包含了管理员用户、普通用户和商家用户,支持添加、封禁、查询及审核系统用户信息。界面设计如下图所示。

图5-9 系统用户管理界面

资源管理模块

管理员可管理产品信息资讯和资讯分类等信息,支持发布和更新产品信息资讯,提供搜索功能,可删除无效资讯,并进行分类管理,允许管控评论内容。界面设计如下图所示。

图5-10 资源管理界面

源码获取

私信联系我即可~
大家点赞、收藏、关注、评论啦
精彩专栏推荐订阅:在下方专栏👇🏻

👇🏻 精彩专栏 推荐订阅👇🏻

java精品项目案例【3000套】

Java精品项目案例【3000套】https://blog.csdn.net/weixin_mz_zxd001/category_13187364.html

Python精品项目案例【500套】

uniapp/微信小程序/安卓app【1800套】

✅文末获取源码✅

感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以找我咨询,希望帮助更多的人❤️

相关推荐
城管不管1 小时前
rabbitmq如何保证消息不丢失?解决方案又是什么?
开发语言·ai·面试·职场和发展·rabbitmq·php·agent
程序员良辰1 小时前
【TongWeb7】启动接近两分钟问题排查
java·开发语言·中间件
八角.。1 小时前
Java案例-学生管理系统
java
Cobyte1 小时前
Vite & Rollup 插件开发实践
前端·javascript·vue.js
朝阳391 小时前
react19【系列实用教程】实用组件封装
开发语言·前端·javascript
Wesleyblue2 小时前
python计算余弦相似性和汉明距离
python·余弦相似性·汉明距离·二进制编码·数值向量
古韵2 小时前
小程序上传进度条,还要自己监听 onProgressUpdate 吗?
前端·javascript·uni-app
古韵2 小时前
axios 已经跑得好好的,还要不要上 alova?
前端·javascript·axios
噗噗122 小时前
企业微信侧边栏应用与前端 JS-SDK 的深度整合指南
前端·javascript·企业微信