源码获取
私信联系我即可~
大家点赞、收藏、关注、评论啦
精彩专栏推荐订阅:在下方专栏👇🏻
👇🏻 精彩专栏 推荐订阅👇🏻
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套】
✅文末获取源码✅
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以找我咨询,希望帮助更多的人❤️