gitee开源商城diygw-mall

news2024/10/10 18:44:13

DIYGW可视化开源商城系统。所的界面布局显示都通过低代码可视化开发工具生成源码实现。支持集成微信小程序支付。 DIYGW可视化开源商城系统是一款基于thinkphp8 framework、 element plus admin、uniapp开发而成的前后端分离系统。

开源商城项目源码地址:diygw商城: DIYGW可视化商户开源商城系统。所的界面布局显示都通过diygw.com可视化开发工具生成源码实现。支持集成微信小程序支付。icon-default.png?t=O83Ahttps://gitee.com/diygw/diygw-mall

 💒 server代码仓库来源

  • 基于thinkphp8实现的DIYGW-UI-PHPicon-default.png?t=O83Ahttps://gitee.com/diygw/diygw-ui-php

💒 admin代码仓库来源

  • diygw-ui-admin: 基于vite、vue3.x 、router、pinia、Typescript、Element plus等,适配手机、平板、pc 的后台开源免费模板库icon-default.png?t=O83Ahttps://gitee.com/diygw/diygw-ui-admin

⚡ 可视化截图

DIYGW可视化商城移动端

DIYGW可视化商城PC端

DIYGW可视化商城PC端

DIYGW可视化商城PC端

DIYGW可视化商城PC端

首页可视化生成源码

 

<template>
	<view class="container container329916">
		<view class="flex flex-wrap diygw-col-24 justify-center items-center flex15-clz" @tap="navigateTo" data-type="page" data-url="/pages/goods">
			<text class="flex icon diygw-col-0 diy-icon-search"></text>
			<text class="diygw-col-0"> 搜索 </text>
		</view>
		<view class="flex diygw-col-24 swiper-clz">
			<swiper :current="swiperIndex" class="swiper" @change="changeSwiper" indicator-color="rgba(51, 51, 51, 0.39)" indicator-active-color="#fff" indicator-dots="true" autoplay interval="3000" circular="true" style="height: 276rpx">
				<swiper-item v-for="(item, index) in swipers.rows" :key="index" class="diygw-swiper-item">
					<view class="diygw-swiper-item-wrap">
						<image :src="item.img" class="diygw-swiper-image"></image>
						<view class="diygw-swiper-item-title swiper-title">
							{{ item.title }}
						</view>
					</view>
				</swiper-item>
			</swiper>
		</view>
		<view class="flex diygw-col-24 noticebar-clz">
			<diy-noticebar class="flex1 diy-notice-bar" :remote="true" :list="notices.rows" color="#fb4833" bgColor="#ffe8e8" leftIcon="diy-icon-notification">
				<block v-slot:content>
					<text class="diy-notice-item" v-for="(item, index) in notices.rows" :key="index">
						{{ item.title }}
					</text>
				</block>
			</diy-noticebar>
		</view>
		<view v-if="goods.total > 0" class="flex diygw-col-24 items-stretch flex-wrap flex-clz">
			<view v-for="(item, index) in goods.rows" :key="index" class="flex flex-wrap diygw-col-12 flex-direction-column items-stretch flex6-clz" @tap="navigateTo" data-type="page" data-url="/pages/goods/detail" :data-id="item.id">
				<view class="flex flex-wrap diygw-col-0 flex-direction-column items-center">
					<image :src="item.img" class="image-size diygw-image diygw-col-24" mode="aspectFit"></image>
				</view>
				<view class="flex flex-wrap diygw-col-0 flex-direction-column justify-between flex20-clz">
					<text class="diygw-col-0 text11-clz">
						{{ item.title }}
					</text>
					<text class="diygw-text-line2 diygw-col-0">
						{{ item.remark }}
					</text>
					<view class="flex flex-wrap diygw-col-0 items-center">
						<text class="diygw-col-0 text7-clz"> ¥{{ item.price }} </text>
						<text class="diygw-text-line2 diygw-col-0 text8-clz"> ¥{{ item.linePrice }} </text>
					</view>
				</view>
			</view>
		</view>
		<view v-if="globalData.isshow && goods.code == 200 && goods.total == 0" class="flex flex-wrap diygw-col-24 flex-direction-column items-center flex1-clz">
			<image src="/static/zwjl.png" class="image1-size diygw-image diygw-col-0" mode="widthFix"></image>
			<text class="diygw-col-0 text-clz"> 未找到任何数据 </text>
		</view>
		<view class="flex flex-wrap diygw-col-24 items-end diygw-bottom flex2-clz">
			<view class="flex flex-wrap diygw-col-6 flex-direction-column items-center flex8-clz">
				<view class="flex flex-wrap diygw-col-0 flex-direction-column items-center">
					<image src="/static/sy3on.png" class="image2-size diygw-image diygw-col-0" mode="widthFix"></image>
				</view>
				<text class="diygw-text-line1 diygw-col-0"> 首页 </text>
			</view>
			<view class="flex flex-wrap diygw-col-6 flex-direction-column items-center flex11-clz" @tap="navigateTo" data-type="page" data-url="/pages/goods" data-redirect="1">
				<view class="flex flex-wrap diygw-col-0 flex-direction-column items-center">
					<image src="/static/fl.png" class="image8-size diygw-image diygw-col-0" mode="widthFix"></image>
				</view>
				<text class="diygw-text-line1 diygw-col-0"> 分类 </text>
			</view>
			<view class="flex flex-wrap diygw-col-6 flex-direction-column items-center flex9-clz" @tap="navigateTo" data-type="page" data-url="/pages/cart" data-redirect="1">
				<view class="flex flex-wrap diygw-col-0 flex-direction-column items-center">
					<text v-if="userInfo.carts && userInfo.carts.length > 0" class="diygw-text-line1 diygw-col-0 animate__animated animate__heartBeat animate__infinite text2-clz"> </text>
					<image src="/static/gwc.png" class="image5-size diygw-image diygw-col-0" mode="widthFix"></image>
				</view>
				<text class="diygw-text-line1 diygw-col-0"> 购物车 </text>
			</view>
			<view class="flex flex-wrap diygw-col-6 flex-direction-column items-center flex4-clz" @tap="navigateTo" data-type="page" data-url="/pages/articles" data-redirect="1">
				<view class="flex flex-wrap diygw-col-0 flex-direction-column items-center">
					<image src="/static/cp1.png" class="image3-size diygw-image diygw-col-0" mode="widthFix"></image>
				</view>
				<text class="diygw-text-line1 diygw-col-0"> 文章 </text>
			</view>
			<view class="flex flex-wrap diygw-col-6 flex-direction-column items-center flex12-clz" @tap="navigateTo" data-type="page" data-url="/pages/user" data-redirect="1">
				<view class="flex flex-wrap diygw-col-0 flex-direction-column items-center">
					<image src="/static/wd.png" class="image4-size diygw-image diygw-col-0" mode="widthFix"></image>
				</view>
				<text class="diygw-text-line1 diygw-col-0"> 我的 </text>
			</view>
		</view>
		<view class="clearfix"></view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				//用户全局信息
				userInfo: {},
				//页面传参
				globalOption: {},
				//自定义全局变量
				globalData: { isshow: false },
				swipersNum: 1,
				swipers: {
					rows: [
						{
							id: 0,
							title: '',
							remark: '',
							img: '',
							path: null,
							userId: 0,
							createTime: '',
							updateTime: '',
							deleteTime: null
						}
					],
					total: 0,
					code: 0,
					msg: ''
				},
				noticesNum: 1,
				notices: {
					rows: [
						{
							id: 0,
							title: '',
							remark: '',
							userId: 0,
							createTime: '',
							updateTime: '',
							deleteTime: null
						}
					],
					total: 0,
					code: 0,
					msg: ''
				},
				goodsNum: 1,
				goods: {
					rows: [
						{
							id: 0,
							title: '',
							remark: '',
							img: '',
							imgs: '',
							status: '',
							content: '',
							price: '',
							amount: 0,
							sellamonut: null,
							skus: '',
							sortnum: null,
							cateId: 0,
							userId: 0,
							createTime: '',
							updateTime: '',
							deleteTime: null,
							linePrice: '',
							skuType: ''
						}
					],
					total: 0,
					code: 0,
					msg: ''
				},
				swiperIndex: 0
			};
		},
		onShow() {
			this.setCurrentPage(this);
		},
		onLoad(option) {
			this.setCurrentPage(this);
			if (option) {
				this.setData({
					globalOption: this.getOption(option)
				});
			}

			this.init();
		},
		methods: {
			async init() {
				await this.swipersApi();
				await this.noticesApi();
				await this.goodsApi();
			},
			// 轮播数据 API请求方法
			async swipersApi(param) {
				let thiz = this;
				param = param || {};

				//请求地址及请求数据,可以在加载前执行上面增加自己的代码逻辑
				let http_url = '/cms/api.swiper/list';
				let http_data = {
					pageNum: this.swipersNum,
					pageSize: 10,
					pageSize: param.pageSize || '5'
				};
				let http_header = {};

				let swipers = await this.$http.post(http_url, http_data, http_header, 'json');

				this.swipers = swipers;
				this.globalData.isshow = true;
			},
			// 公告数据 API请求方法
			async noticesApi(param) {
				let thiz = this;
				param = param || {};

				//请求地址及请求数据,可以在加载前执行上面增加自己的代码逻辑
				let http_url = '/cms/api.notice/list';
				let http_data = {
					pageNum: this.noticesNum,
					pageSize: 10,
					pageSize: param.pageSize || '5'
				};
				let http_header = {};

				let notices = await this.$http.post(http_url, http_data, http_header, 'json');

				this.notices = notices;
			},
			// 商品数据 API请求方法
			async goodsApi(param) {
				let thiz = this;
				param = param || {};

				//如果请求要重置页面,请配置点击附加参数refresh=1  增加判断如输入框回调param不是对象
				if (param.refresh || typeof param != 'object') {
					this.goodsNum = 1;
				}

				//请求地址及请求数据,可以在加载前执行上面增加自己的代码逻辑
				let http_url = '/shop/api.goods/list';
				let http_data = {
					pageNum: this.goodsNum,
					pageSize: 10
				};
				let http_header = {};

				let goods = await this.$http.post(http_url, http_data, http_header, 'json');

				let datarows = goods.rows;
				if (http_data.pageNum == 1) {
					this.goods = goods;
				} else if (datarows) {
					let rows = this.goods.rows.concat(datarows);
					goods.rows = rows;
					this.goods = goods;
				}
				if (datarows && datarows.length > 0) {
					this.goodsNum = this.goodsNum + 1;
				}
				this.globalData.isshow = true;
			},
			changeSwiper(evt) {
				let swiperIndex = evt.detail.current;
				this.setData({ swiperIndex });
			}
		},
		onPullDownRefresh() {
			// 商品数据 API请求方法
			this.goodsNum = 1;
			this.goodsApi();

			uni.stopPullDownRefresh();
		},
		onReachBottom() {
			// 商品数据 API请求方法
			this.goodsApi();
		}
	};
</script>

<style lang="scss" scoped>
	.flex15-clz {
		padding-top: 16rpx;
		border-bottom-left-radius: 120rpx;
		padding-left: 10rpx;
		padding-bottom: 16rpx;
		border-top-right-radius: 120rpx;
		margin-right: 20rpx;
		background-color: #ffffff;
		margin-left: 20rpx;
		box-shadow: 0rpx 0rpx 12rpx 2px rgba(219, 219, 219, 0.31);
		overflow: hidden;
		width: calc(100% - 20rpx - 20rpx) !important;
		border-top-left-radius: 120rpx;
		margin-top: 10rpx;
		border-bottom-right-radius: 120rpx;
		margin-bottom: 10rpx;
		padding-right: 10rpx;
	}
	.icon {
		font-size: 36rpx;
	}
	.swiper-clz {
		margin-left: 20rpx;
		border-bottom-left-radius: 12rpx;
		overflow: hidden;
		width: calc(100% - 20rpx - 20rpx) !important;
		border-top-left-radius: 12rpx;
		margin-top: 10rpx;
		border-top-right-radius: 12rpx;
		border-bottom-right-radius: 12rpx;
		margin-bottom: 10rpx;
		margin-right: 20rpx;
	}
	.swiper-title {
		background-color: rgba(0, 0, 0, 0.281);
		color: #e6e6e6;
	}
	.noticebar-clz {
		margin-left: 20rpx;
		border-bottom-left-radius: 12rpx;
		overflow: hidden;
		width: calc(100% - 20rpx - 20rpx) !important;
		border-top-left-radius: 12rpx;
		margin-top: 10rpx;
		border-top-right-radius: 12rpx;
		border-bottom-right-radius: 12rpx;
		margin-bottom: 10rpx;
		margin-right: 20rpx;
	}
	.flex-clz {
		padding-top: 10rpx;
		padding-left: 10rpx;
		padding-bottom: 10rpx;
		padding-right: 10rpx;
	}
	.flex6-clz {
		padding-top: 20rpx;
		border-bottom-left-radius: 12rpx;
		padding-left: 20rpx;
		padding-bottom: 20rpx;
		border-top-right-radius: 12rpx;
		margin-right: 10rpx;
		background-color: #ffffff;
		margin-left: 10rpx;
		box-shadow: 0rpx 0rpx 12rpx 2px rgba(219, 219, 219, 0.31);
		overflow: hidden;
		width: calc(50% - 10rpx - 10rpx) !important;
		border-top-left-radius: 12rpx;
		margin-top: 10rpx;
		border-bottom-right-radius: 12rpx;
		margin-bottom: 10rpx;
		padding-right: 20rpx;
	}
	.image-size {
		height: 200rpx !important;
		width: 100%;
	}
	.flex20-clz {
		padding-top: 10rpx;
		flex: 1;
		padding-left: 10rpx;
		padding-bottom: 10rpx;
		padding-right: 10rpx;
	}
	.text11-clz {
		font-weight: bold;
		font-size: 28rpx !important;
	}
	.text7-clz {
		color: #f20000;
		font-weight: bold;
		font-size: 28rpx !important;
	}
	.text8-clz {
		text-decoration: line-through;
	}
	.flex1-clz {
		padding-top: 20rpx;
		padding-left: 20rpx;
		padding-bottom: 20rpx;
		padding-right: 20rpx;
	}
	.image1-size {
		height: 400rpx !important;
		width: 400rpx !important;
	}
	.text-clz {
		color: #969696;
		font-size: 28rpx !important;
	}
	.flex2-clz {
		border-top: 2rpx solid #e4e4e4;
		padding-top: 16rpx;
		border-bottom-left-radius: 0rpx;
		bottom: 0rpx;
		padding-left: 16rpx;
		padding-bottom: 16rpx;
		border-top-right-radius: 24rpx;
		background-color: #ffffff;
		box-shadow: 0rpx 4rpx 12rpx rgba(31, 31, 31, 0.16);
		overflow: visible;
		left: 0rpx;
		border-top-left-radius: 24rpx;
		border-bottom-right-radius: 0rpx;
		padding-right: 16rpx;
	}
	.flex8-clz {
		color: #fa240b;
		flex: 1;
	}
	.image2-size {
		height: 48rpx !important;
		width: 48rpx !important;
	}
	.flex11-clz {
		flex: 1;
	}
	.image8-size {
		height: 48rpx !important;
		width: 48rpx !important;
	}
	.flex9-clz {
		flex: 1;
	}
	.text2-clz {
		border: 2rpx solid #eee;
		border-bottom-left-radius: 40rpx;
		-webkit-animation-duration: 5000ms;
		color: #ffffff;
		animation-delay: 1000ms;
		-webkit-animation-delay: 1000ms;
		border-top-right-radius: 40rpx;
		right: -8rpx;
		background-color: rgba(255, 17, 17, 0.91);
		animation-duration: 5000ms;
		flex-shrink: 0;
		overflow: hidden;
		top: -8rpx;
		width: 16rpx !important;
		border-top-left-radius: 40rpx;
		border-bottom-right-radius: 40rpx;
		position: absolute;
		height: 16rpx !important;
	}
	.image5-size {
		height: 48rpx !important;
		width: 48rpx !important;
	}
	.flex4-clz {
		flex: 1;
	}
	.image3-size {
		height: 48rpx !important;
		width: 48rpx !important;
	}
	.flex12-clz {
		flex: 1;
	}
	.image4-size {
		height: 48rpx !important;
		width: 48rpx !important;
	}
	.container329916 {
		padding-bottom: 160rpx;
		background-color: #f5f5f5;
	}
</style>

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

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

相关文章

funasr: 报错 CUDA error: invalid device ordinal

问题描述 使用案例中的代码加载模型的时候&#xff0c;会报错 CUDA error: invalid device ordinal 运行的代码是 model AutoModel(modelmodel_dir,vad_model"fsmn-vad",vad_kwargs{"max_single_segment_time": 30000},device"cuda:0", ) 解…

C语言预处理详解(下)(31)

文章目录 前言一、命令行定义二、条件编译三、文件包含头文件被包含的方式嵌套文件包含 总结 前言 再介绍几点吧&#xff01; 一、命令行定义 许多C 的编译器提供了一种能力&#xff0c;允许在命令行中定义符号。用于启动编译过程 当我们根据同一个源文件要编译出不同的一个程序…

VScode连接远程服务器踩坑实战(新版离线vscode-server安装)

想要用VScode连接远程服务器&#xff0c;但远程服务器并没有连接外网&#xff0c;因此需要离线手动安装vscode-server但网上的方法都是旧版本的安装&#xff0c;没有新版本的配置。因此记录一下我都踩坑实战。 1、VScode扩展安装与配置 &#xff08;1&#xff09;vscode扩展安…

双十一买什么最划算?2024年双十一选购攻略汇总!

随着一年一度的双十一购物狂欢节日益临近&#xff0c;消费者们纷纷摩拳擦掌&#xff0c;准备在这个全球最大的购物盛宴中抢购心仪已久的商品。双十一不仅是一场购物的狂欢&#xff0c;更是商家们推出优惠、促销的绝佳时机。然而&#xff0c;面对琳琅满目的商品和纷繁复杂的优惠…

《数据密集型应用系统设计》笔记——第二部分 分布式数据系统(ch5-9)

第5章 数据复制 目的&#xff1a; 地理位置更近&#xff0c;降低延迟故障冗余提高读吞吐量 主节点与从节点&#xff08;主从复制&#xff09; 主从复制&#xff1a; 写请求发送给主节点&#xff0c;主节点将新数据写入本地存储&#xff1b;主节点将数据更改作为复制的日志发送…

医学图像处理入门:VS2019+DCMTK3.6.8编译及环境配置

1. 下载DCMTK的源文件包和支持库 首先下载dcmtk软件包&#xff0c;此处我们下载源码和支持库来进行自己编译。下载网址&#xff1a; https://dicom.offis.de/en/dcmtk/dcmtk-software-development/ 如图所示&#xff0c;选择合适的版本进行下载&#xff0c;此处采用VS2019进行…

AI生成视频

分享一个免费的根据文案脚本AI生成视频的网站&#xff1a; https://pictory.ai/?el2000&htrafficsourcepictorybloghttps://pictory.ai/?el2000&htrafficsourcepictoryblog 1、点击Get Started For Free登录 2、登录进入个人主页&#xff0c;可以选择不同的方式生成视…

快速理解OPTIONS请求

快速理解OPTIONS请求 简述实际遇到的问题 简述 OPTIONS请求常被用作一种“预检”请求&#xff0c;以检查实际请求&#xff08;如POST或PUT&#xff09;是否可以被服务器接受。 为什么要有OPTIONS请求&#xff1f; 比如当一个POST请求比较复杂时&#xff0c;传输一个POST请求比…

pdf怎么删除多余不想要的页面?删除pdf多余页面的多个方法

pdf怎么删除多余不想要的页面&#xff1f;在日常办公或学习中&#xff0c;我们经常会遇到需要处理PDF文件的情况。PDF文件因其格式稳定、不易被篡改的特点而广受青睐&#xff0c;但在编辑方面却相对不如Word等文档灵活。有时&#xff0c;在接收或创建的PDF文件中&#xff0c;可…

【含文档】基于Springboot+Android的校园论坛系统(含源码+数据库+lw)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 系统定…

Linux-sed和gawk

文本处理-sed编辑器 文本处理-gawk程序 文本处理-sed编辑器基础 文本处理-sed编辑器基础-使用地址 文本处理-sed编辑器基础-删除行 文本处理-sed编辑器基础-插入和附加文本 文本处理-sed编辑器基础-修改行/转换命令 文本处理-sed编辑器基础-回顾打印-打印行/打印行号/列出行 文…

如何用一套商业模式 整合本地商业 打造强有力的商家联盟!

大家好&#xff0c;我是吴军&#xff0c;来自一家专注于软件开发的公司。 近年来&#xff0c;一种新颖的商业模式异军突起&#xff0c;它不仅为消费者和零售商带来了实质性的利益&#xff0c;也为平台创造了可观的经济回报。 在当前经济环境下&#xff0c;消费者行为愈发理性&…

[SQL] 安装

一 Windows 1.1 下载 进入Mysql的官方网站,点击下载->找到社区版本 选择对应操作系统进行下载。 点击下载 选择直接下载即可 1.2 安装 选择Full安装&#xff1a; MySQL服务器、客户端程序和其他附加工具如果只需要服务端那就选择Server only即可 点击执行,等待组件下载完…

如何批量下载淘宝主图、详情图和SKU图?

如何批量下载淘宝主图、详情图和SKU图&#xff1f;在电商行业竞争日益激烈的今天&#xff0c;电商从业者面临着前所未有的挑战与机遇。为了提升商品竞争力&#xff0c;深入分析对手策略及优化自家产品展示成为日常工作的重中之重。其中&#xff0c;批量下载淘宝主图、详情图和S…

vue cli配置环境变量并使用

1.在根路径下创建.env文件 2.写.env文件内容 文件里存储的值的key要以 VUE_APP 开头 VUE_APP VUE_APP_PUBLIC_PATH/ VUE_APP_PUBLIC_PATH/helper/ 3.使用 publicPath: process.env.VUE_APP_PUBLIC_PATH, 4.配置package.json "serve:production": "vue-cli-s…

FreeRTOS-软件定时器

FreeRTOS-软件定时器 一、软件定时器简介1.1 软件定时器的状态和工作模式 二、软件定时器结构体成员和API函数三、软件定时器实验 一、软件定时器简介 定时器&#xff1a;指定时间开始&#xff0c;经过一个指定的时间&#xff0c;触发一个超时事件&#xff0c;用户可自定义定时…

ThinkPHP5bootstrapMySQL开发学习平台(包括后台管理功能、PC端网页、移动端网页)手把手运行源码

一、项目预览(全部源码链接在最下面) 功能及页面持续优化中...... 二、本地运行方式 1、下载源码包进行解压(源码在最下面) 2、下载phpstudy_pro,并运行Apache&

精华帖分享 | 判定策略失效的新方法——统计假设检验

本文来源于量化小论坛策略分享会板块精华帖&#xff0c;作者为元亨利贞&#xff0c;发布于2023年12月25日。 以下为精华帖正文&#xff1a; 1、起因 去年刚入门B圈&#xff0c;由于之前有做商品期货择时的经验&#xff0c;通常来讲&#xff0c;趋势跟随&#xff0c;并且回测结…

谁说电商选品找货源没有捷径,只要你用对工具!

最近跟很多同行聊&#xff0c;都在抱怨选品难的问题&#xff0c;都说7分靠选品&#xff0c;3分靠运营&#xff0c;对于选品来说&#xff0c;并没有捷径可走&#xff0c;但其实是有很多不同的角度的。 现在市面上大部分开发做的选品&#xff0c;“选品方法”或“产品分析方法”…

SiLM266x系列SiLM2661高压电池组前端充/放电高边NFET驱动器 为电池系统保护提供可靠性和设计灵活性

SiLM2661产品概述&#xff1a; SiLM2661能够灵活的应对不同应用场景对锂电池进行监控和保护的需求&#xff0c;为电池系统保护提供可靠性和设计灵活性。是用于电池充电/放电系统控制的低功耗、高边 N 沟道 FET 驱动器&#xff0c;高边保护功能可避免系统的接地引脚断开连接&am…