如何快速搭建自己同城跑腿系统?尚无忧跑腿小程序源码

news2024/11/18 19:30:55

是一款集代买、代送、代取等服务为一体的本地同城跑腿配送系统,支持二次开发,功能定制。

跑腿系统可众包模式,提供全套解决方案,包括跑腿系统配送端、用户端以及强大的后台管理系统。

使用uniapp+thinkphp技术
适配支持公众号+APP+H5+小程序,使用Hbuilder导入即可运行

配送端

        配送端、地图导航等功能。

用户端

        适合大众用户使用,支持代买、代送、代取、代排队、代办等,支持一键下单、预约跑腿时间等功能。

 

<template>
	<view>
		<view class="margin-lr" v-if="modelSwt == '否'">
			<view class="">
				<swiper class="swiper" autoplay="1500" :indicator-dots="true" :circular='true'
					indicator-active-color="#ffffff" indicator-color="#cccccc">
					<swiper-item class="swiper-wrap" v-for="(item,index) in bannerList" :key='index'
						style="height: 300upx;">
						<image :src="item.imageUrl" style="width: 100%;border-radius: 8upx;height: 300upx;"
							@click="goWeb(item.url)" mode="scaleToFill"></image>
					</swiper-item>
				</swiper>
			</view>
 
			<view class="flex justify-between align-center bg-white margin-tb padding-lr-sm radius"
				style="width: 100%;height: 100rpx;">
				<image src="../../static/image/index/xinxi.png" style="width: 126rpx;height: 30rpx;" mode=""></image>
				<view class="flex-sub margin-left-sm">
					<swiper class="swiper" autoplay="1500" :vertical='true' style="height: 40rpx;overflow: hidden;">
						<swiper-item class="" v-for="(item,index) in noticeList" :key='index' @click="goWeb1(item.url)">
							<text>{{item.title}}</text>
						</swiper-item>
					</swiper>
				</view>
			</view>
			<view>
				<view class="text-black text-xl text-bold margin-bottom">帮帮跑腿</view>
				<view class="flex justify-between flex-wrap">
					<view class="bg-video margin-tb-xs" v-for="(item,index) in classifyLsit" :key='index'
						@click="goNav(item.url)">
						<image :src="item.imageUrl" mode="" style="width: 340rpx;height: 200rpx;"></image>
						<view class="flex flex-direction justify-end"
							style="position: absolute;top: 0;padding: 30rpx;width: 100%;height: 100%;">
							<view class="text-white text-lg text-bold">{{item.name}}</view>
						</view>
					</view>
				</view>
			</view>
 
			<!-- 红包 -->
			<view class="hongbao" v-if="HBShow">
				<view style="width: 52%;margin: 0 auto;position: relative;">
					<view @click="HBShow=false"
						style="position: absolute;right: -10rpx;top: -10rpx;font-size: 32rpx;font-weight: bold;">X
					</view>
					<image src="../../static/image/hb_bg.png" class="hb_img"></image>
					<image src="../../static/image/hb_btn.png" class="hb_btn" @click="takemoney()"></image>
				</view>
			</view>
		</view>
 
		<view class="content" v-if="modelSwt == '是'">
			<!-- #ifndef MP-WEIXIN  -->
			<view class="page-body">
				<view class="page-section page-section-gap">
					<map id="map" style="width: 100%; height: 700px;" :latitude="latitude" :longitude="longitude"
						:markers="covers" :show-location="true">
						<cover-view style="position: fixed;top: 345px;right: 30px;" @click="onToGetLocation()">
							<cover-image class="img-map1" src="../../static/image/dw.png">
							</cover-image>
						</cover-view>
					</map>
				</view>
			</view>
 
			<!-- #endif -->
 
			<!-- #ifdef MP-WEIXIN -->
			<view class="page-body">
				<view class="page-section page-section-gap">
					<map id="map" style="width: 100%; height: 700px;" :latitude="latitude" :longitude="longitude"
						:markers="covers" :show-location="true" :customCallout="customCallout">
						<cover-view style="position: fixed;bottom: 430rpx;right: 60rpx;" @click="onToGetLocation()">
							<cover-image class="img-map1" src="../../static/image/dw.png">
							</cover-image>
						</cover-view>
					</map>
				</view>
			</view>
			<!-- #endif -->
 
 
			<cover-view class="controls-title">
				<cover-view class="controls-tabs">
					<cover-view v-for="(item,index) in classifyLsit" :key="index" v-if="index<4"
						@tap="change(index,item)" class="atabs_ds">
						<cover-view>{{item.name}}</cover-view>
						<cover-view :class="{btna:count == index}"></cover-view>
					</cover-view>
				</cover-view>
 
				<!-- 同城服务 -->
				<cover-view class="tabs_box">
					<cover-view class="pay_tit">
						<cover-view class="pay_name">请写明{{modelDet.name }}的内容</cover-view>
						<cover-view class="pay_set">请填写您的具体要求等</cover-view>
						<cover-view class="pay_radius" @click="bindcity(4)">下单</cover-view>
					</cover-view>
				</cover-view>
			</cover-view>
 
			<cover-view class="hongbao" v-if="HBShow">
				<cover-view style="width: 52%;margin: 0 auto;position: relative;">
					<cover-view @click="HBShow=false"
						style="position: absolute;right: -10rpx;top: -10rpx;font-size: 32rpx;font-weight: bold;">X
					</cover-view>
					<cover-image src="../../static/image/hb_bg.png" class="hb_img"></cover-image>
					<cover-image src="../../static/image/hb_btn.png" class="hb_btn" @click="takemoney()"></cover-image>
				</cover-view>
			</cover-view>
			<cover-view v-else></cover-view>
		</view>
	</view>
</template>
 
<script>
	export default {
		data() {
			return {
				HBShow: false,
				modelSwt: "",
				modelDet: {},
				id: 0, // 使用 marker点击事件 需要填写id
				title: 'map',
				latitude: '',
				longitude: '',
				iconPath: '../../static/image/location.png',
				covers: [{
					latitude: '',
					longitude: '',
					iconPath: '../../static/image/location.png',
					width: 40,
					height: 40,
					callout: { //自定义标记点上方的气泡窗口 点击有效
						content: '当前附近骑手', //文本
						color: '#ffffff', //文字颜色
						fontSize: 10, //文本大小
						padding: 10, //附近留白
						borderRadius: 2, //边框圆角
						bgColor: '#00c16f', //背景颜色
						display: 'ALWAYS', //常显
					},
				}],
				count: "",
				list: [{
					id: 0,
					name: '帮我送'
				}, {
					id: 1,
					name: '帮我取'
				}, {
					id: 2,
					name: '同城帮买'
				}, {
					id: 3,
					name: '同城服务'
				}],
				current: 0,
				value0: '',
				value1: '',
				value2: '',
				value3: '',
				type: 'text',
				clearable: false,
				riderNumber: '',
 
 
				// 用户红包
				newUserFlag: 2,
 
				token: '',
				bannerList: [],
				noticeList: [],
				classifyLsit: [],
 
				tuiguang: '',
				tuiguangImg: '',
				arr: [],
				showModal1: true,
				invitationCode:''
 
			}
		},
		// 开源省钱兄同城跑腿源码,目前只开源用户端V2版本部分核心模块源码提供学习研究,使用uniapp技术,提供学习使用不可商业,商业使用请联系13895585204授权
		// 适配支持公众号+APP+H5+小程序,使用Hbuilder导入即可运行
		onLoad(option) {
			if (option.scene) {
				console.log('邀请人的码:', option.scene)
				this.$queue.setData("userByinvitationId", option.scene);
			}
			// 获取邀请码保存到本地
			if (option.invitation) {
				that.$queue.setData('userByinvitationId', option.invitation);
			}
			this.invitationCode = this.$queue.getData('invitationCode');
			this.getBannerList()
			this.getNoticeList()
			this.getZiZhi()
			let takeAddress = {
				data1: '',
				data2: '',
			}
			let closeAddress = {
				data1: '',
				data2: '',
				data3: '',
				data4: '',
				citydata: ''
			}
			uni.setStorageSync('takeAddress', takeAddress)
			uni.setStorageSync('closeAddress', closeAddress)
			if (uni.getStorageSync('disinfo')) {
				uni.removeStorageSync('disinfo')
			}
		},
		onShow() {
			// 首页是否展示地图
			this.$Request.getT('/app/common/type/275').then(res => {
				if (res.code == 0) {
					if (res.data && res.data.value) {
						this.modelSwt = res.data.value
						this.$queue.setData('modelSwt', res.data.value)
					}
				}
			});
			this.token = uni.getStorageSync('token')
			if (this.token) {
				this.getUser()
			}
 
 
			this.$Request.getT('/app/common/type/307').then(res => { //用户端骑手取消订单通知 307
				if (res.code == 0) {
					if (res.data && res.data.value) {
						this.arr.push(res.data.value)
					}
				}
			})
			if (this.showModal1) {
				// #ifdef MP-WEIXIN
				this.openMsg()
				// #endif
			}
		},
		onReady() {
			this.map = uni.createMapContext("map", this)
		},
		onShareAppMessage(res) { //发送给朋友
			return {
				title: this.tuiguang,
				path: '/pages/index/index?invitation='+this.invitationCode,
				imageUrl: this.tuiguangImg,
			}
		},
		onShareTimeline(res) { //分享到朋友圈
			return {
				title: this.tuiguang,
				path: '/pages/index/index?invitation='+this.invitationCode,
				imageUrl: this.tuiguangImg,
			}
		},
		methods: {
			// 分享文案和图片
			getZiZhi() {
				this.$Request.getT('/app/common/type/276').then(res => {
					if (res.code === 0) {
						this.tuiguang = res.data.value;
					}
				});
				this.$Request.getT('/app/common/type/277').then(res => {
					if (res.code === 0) {
						this.tuiguangImg = res.data.value;
					}
				});
			},
			goWeb(url) {
				console.log(url.indexOf('/pages/') !== -1)
				return
				if (url.indexOf('/pages/') !== -1) {
					uni.navigateTo({
						url
					});
				} else {
					//#ifndef H5
					uni.navigateTo({
						url: '/pages/index/webView?url=' + url
					});
					//#endif
					//#ifdef H5
					window.location.href = url;
					//#endif
				}
			},
			goWeb1(url) {
				if (url.indexOf('http') !== -1) {
					//#ifndef H5
					uni.navigateTo({
						url: '/pages/index/webView?url=' + url
					});
					//#endif
					//#ifdef H5
					window.location.href = url;
					//#endif
				}
			},
			// 跳转发布页面
			goNav(e) {
				if (this.token) {
					uni.navigateTo({
						url: e
					})
				} else {
					uni.navigateTo({
						url: '/pages/my/register'
					})
				}
 
			},
			// 获取轮播图
			getBannerList() {
				this.$Request.get("/app/banner/selectBannerList?classify=1&state=1").then(res => {
					if (res.code == 0) {
						this.bannerList = res.data
					}
				});
				this.$Request.get("/app/banner/selectBannerList?classify=4&state=1").then(res => {
					if (res.code == 0) {
						this.classifyLsit = res.data
						this.modelDet = this.classifyLsit[0]
					}
				});
			},
			// 获取公告
			getNoticeList() {
				let data = {
					page: 1,
					limit: 100
				}
				this.$Request.get("/app/notice/selectNoticeList", data).then(res => {
					if (res.code == 0) {
						this.noticeList = res.data.list
					}
				});
			},
 
			// 获取用户当前定位
			getUser() {
				console.log('执行')
				var that = this
				uni.getLocation({
					type: 'wgs84',
					success: function(res) {
						// console.log('成功')
						// console.log(res)
						console.log('当前位置的经度:' + res.longitude);
						console.log('当前位置的纬度:' + res.latitude);
						that.longitude = res.longitude
						that.latitude = res.latitude
 
 
						that.covers[0].longitude = res.longitude
						that.covers[0].latitude = res.latitude
						that.getAdd(that.longitude, that.latitude)
						that.getuserinfo()
					},
					fail: function(err) {
						console.log('授权失败', err)
						uni.showToast({
							title: "获取位置授权失败",
							icon: "none"
						})
					}
				});
 
			},
			//右下角定位按钮的点击事件
			onToGetLocation() {
				console.log('11')
				// this.	getUser() 
				// this.map.moveToLocation(); 
				let mapContext = uni.createMapContext('map');
				mapContext.moveToLocation(); //moveToLocation将地图中心移动到当前定位点,需要配合map组件的show-location使用
 
 
			},
			// 跑腿人位置
			getAdd(lng, lat) {
				this.$Request.getT('/app/indent/find5KmRider?lng=' + lng + '&lat=' + lat).then(res => {
					// console.log('```````````````', res)
					if (res.code == 0) {
						this.riderNumber = res.data.length
						if (res.data.length > 0) {
							var arr = []
 
							for (var i in res.data) {
								var obj = {}
								obj.latitude = res.data[i].stationLat
								obj.longitude = res.data[i].stationLng
								obj.iconPath = '../../static/image/rider.png'
								obj.width = 30
								obj.height = 30
								arr.push(obj)
							}
							this.covers[0].callout.content = '当前附近骑手' + res.data.length + '人'
							// this.covers = arr
							this.covers = [...this.covers, ...arr];
							// console.log('this.covers ', this.covers)
 
						}
					}
				});
			},
			change(index, item) {
				// console.log(index)
				this.modelDet = item
				this.current = index;
				this.count = index;
				console.log(this.count)
				// uni.removeStorageSync('takeAddress')
			},
			bindHelppay(index) {
				// console.log(index)
				let token = this.$queue.getData("token");
				if (token) {
					uni.navigateTo({
						url: '/pages/Helppay/Helppay'
					})
				} else {
					uni.navigateTo({
						url: '/pages/my/register'
					})
				}
 
			},
			bindcity(index) {
				// console.log(index)
				let token = this.$queue.getData("token");
				if (token) {
					uni.navigateTo({
						url: this.modelDet.url
					})
				} else {
					uni.navigateTo({
						url: '/pages/my/register'
					})
				}
 
			},
			bindtake(index) {
				// console.log(index)
				let token = this.$queue.getData("token");
				if (token) {
					if (this.longitude == '') {
						this.getUser()
					} else {
						uni.navigateTo({
							url: '/pages/takeaddress/takeaddress?index=' + index
						})
					}
				} else {
					uni.navigateTo({
						url: '/pages/my/register'
					})
				}
 
 
			},
			bindclose(index) {
				// console.log(index)
				let token = this.$queue.getData("token");
				if (token) {
					uni.navigateTo({
						url: '/pages/closeaddress/closeaddress?index=' + index
					})
				} else {
					uni.navigateTo({
						url: '/pages/my/register'
					})
				}
 
			},
			// 获取用户信息
			getuserinfo() {
				this.$Request.getT('/app/userinfo/findUserInfoById').then(res => {
					console.log(res)
					if (res.code == 0) {
						this.newUserFlag = res.data.newUserFlag
						console.log(this.newUserFlag)
						if (this.newUserFlag == 1) {
							this.HBShow = true
						} else {
							this.HBShow = false
						}
					}
				});
			},
			// 红包
			takemoney() {
				this.$Request.getT('/app/userinfo/getNewUserRedPacket').then(res => {
					console.log(res)
					if (res.code === 0) {
						this.HBShow = false
						this.getuserinfo()
						setTimeout(function() {
							uni.navigateTo({
								url: '/pages/my/hongbao/hongbao'
							})
						}, 100)
					} else {
						uni.showToast({
							title: res.msg,
							icon: "none"
						})
						this.newUserFlag = ''
					}
				});
			},
			// 开启订阅消息
			openMsg() {
				console.log('订阅消息')
				var that = this
				uni.getSetting({
					withSubscriptions: true, //是否获取用户订阅消息的订阅状态,默认false不返回
					success(ret) {
						console.log(ret.subscriptionsSetting, '------------------')
						// if (ret.subscriptionsSetting.itemSettings && Object.keys(ret.subscriptionsSetting.itemSettings).length == 2) {
						if (ret.subscriptionsSetting.itemSettings) {
							uni.setStorageSync('sendMsg', true)
							uni.openSetting({ // 打开设置页 
								success(rea) {
									console.log(rea.authSetting)
								}
							});
						} else { // 用户没有点击“总是保持以上,不再询问”则每次都会调起订阅消息
							console.log(99999)
							uni.setStorageSync('sendMsg', false)
							uni.showModal({
								title: '提示',
								content: '为了更好的体验,请绑定消息推送',
								confirmText: '确定',
								cancelText: '取消',
								success: function(res) {
									if (res.confirm) {
										console.log(that.arr)
										wx.requestSubscribeMessage({
											tmplIds: that.arr,
											success(re) {
												console.log(JSON.stringify(re),
													'++++++++++++++')
												var datas = JSON.stringify(re);
												if (datas.indexOf("accept") != -1) {
													console.log(re)
													// uni.setStorageSync('sendMsg', true)
												}
											},
											fail: (res) => {
												console.log(res)
											}
										})
										// uni.setStorageSync('sendMsg', true)
										console.log('确认')
										that.showModal1 = false
									} else if (res.cancel) {
										console.log('取消')
										// uni.setStorageSync('sendMsg', false)
										that.showModal1 = true
									}
								}
							})
						}
					}
				})
			},
		}
	}
</script>
 
<style>
	.content {
		width: 100%;
		position: fixed;
		top: 0upx;
		left: 0upx;
		right: 0upx;
		bottom: 0upx;
 
	}
 
	.controls-title {
		width: 90%;
		height: 370upx;
		background: #FFFFFF;
		position: fixed;
		bottom: 0rpx;
		margin: 40upx;
		border-radius: 26upx;
		box-shadow: 0upx 30upx 40upx 0upx rgba(187, 170, 163, 0.20);
		/* #ifndef MP-WEIXIN */
		width: 90%;
		margin: 0 40rpx;
		margin-bottom: 150rpx;
		/* #endif */
	}
 
	/* tab选项卡 */
	.controls-tabs {
		display: flex;
		font-size: 33rpx;
		overflow-x: auto;
	}
 
	.atabs_ds {
		flex-grow: 1;
		text-align: center;
		height: 55rpx;
	}
 
	/* .tabs_box {
			display: none;
			background: #C8C7CC;
		} */
 
	.btna {
		background: #FF6A04;
		width: 68%;
		height: 8rpx;
		margin: 9rpx 10rpx 10rpx 29rpx;
		border-radius: 35rpx;
	}
 
	.tabs_box {
		/* display: none; */
	}
 
	.dis {
		display: block;
	}
 
 
	.controls-tabs {
		width: 100%;
		height: 90rpx;
		display: flex;
		justify-content: center;
		align-items: center;
		margin-top: 10rpx;
	}
 
	.box_bg {
		width: 90%;
		height: 100upx;
		background: #FFFFFF;
		margin: 0 auto;
		border-radius: 12upx;
		display: flex;
		margin-top: 20upx;
	}
 
	.box {
		width: 90%;
		height: 100upx;
		background: #F5F5F5;
		margin: 0 auto;
		border-radius: 12upx;
		display: flex;
		margin-top: 20upx;
	}
 
	.box_dian {
		flex: 1;
		display: flex;
		justify-content: center;
		align-items: center;
 
	}
 
	.box_dian cover-image {
		width: 20upx;
		height: 20upx;
	}
 
	.box_name {
		flex: 5;
		display: flex;
		justify-content: left;
		align-items: center;
		color: #333333;
		font-weight: 700;
		font-size: 34rpx;
	}
 
	.box_addres {
		flex: 5;
 
	}
 
	.add {
		color: #333333;
		font-size: 26upx;
		letter-spacing: 2upx;
		font-weight: bold;
		line-height: 50upx;
	}
 
	.name {
		display: inline;
		font-size: 24upx;
		color: #999999;
	}
 
	.number {
		display: initial;
		color: #999999;
		font-size: 24upx;
		margin-left: 30upx;
	}
 
	.box_image {
		flex: 1;
		display: flex;
		justify-content: center;
		align-items: center;
	}
 
	.icon_you {
		color: #CCCCCC !important;
	}
 
	/* 同城购买 */
	.pay_tit {
		width: 90%;
		margin: 0 auto;
		height: 200upx;
		position: relative;
	}
 
	.pay_name {
		font-size: 31rpx;
		font-weight: bold;
		width: 95%;
		margin: 0 auto;
		letter-spacing: 2upx;
	}
 
	.pay_set {
		color: #333333;
		font-size: 28rpx;
		width: 95%;
		margin: 0 auto;
		margin-top: 20upx;
	}
 
	.pay_radius {
		width: 100upx;
		height: 100upx;
		background: #FF7F00;
		color: white;
		text-align: center;
		line-height: 100upx;
		border-radius: 68upx;
		position: absolute;
		right: 20upx;
 
	}
 
	.hongbao {
		width: 100%;
		/* height: 100px; */
		/* background: #007AFF; */
		position: fixed;
		top: 24%;
		/* bottom: 50%; */
		left: 0rpx;
		right: 0rpx;
		/* display: none; */
	}
 
	.hb_img {
		width: 100%;
		height: 435rpx;
	}
 
	.hb_btn {
		width: 60%;
		height: 72rpx;
		position: absolute;
		top: 315rpx;
		left: 80rpx;
	}
 
	.img-map1 {
		width: 80rpx;
		height: 80rpx;
	}
</style>

 

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

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

相关文章

【问卷分析】调节效应检验的操作②

文章目录 2.2 当调节变量是分类变量时&#xff08;1&#xff09; 确定组别区分&#xff08;2&#xff09;检验调节效应值&#xff08;3&#xff09;结果解读 接上一篇文章&#xff1a; 【问卷分析】调节效应检验的操作① 2.2 当调节变量是分类变量时 我们将以该模型中的调节变…

ASO优化之在海外如何进行竞品分析

进行竞争对手研究&#xff0c;需要分析当前的市场形势&#xff0c;确定竞争对手表现的模式&#xff0c;并将其应用到我们应用营销策略中。不同的应用可以在直观的用户界面上进行简单的比较&#xff0c;很容易看到长期趋势。 在App Store和Google Play上获取竞争对手评论区的信…

promise规范及应用

##promise解析 *啥是异步? //异步执行let count 1let timer setTimeout(function () {countconsole.log(in, count);}, 1000);console.log(out);// out>1000>in//循环执行let count 1let timer setInterval(function () {countconsole.log(in, count);}, 1000);con…

YOLO学习笔记1. YOLOV1的基本概念

YOLO学习笔记1. YOLOV1的基本概念 一、 YOLO简介二、一些基本概念1. two-stage和one-stage2. 指标分析&#xff08;1&#xff09;精度的概念&#xff08;2&#xff09;召回率的概念&#xff08;3&#xff09;IOU&#xff08;4&#xff09;置信度阈值&#xff08;5&#xff09; …

成功解决VScode每次只能打开一个文件,即只能打开一个编辑窗口。

成功解决VScode每次只能打开一个文件&#xff0c;即只能打开一个编辑窗口。 解决方案 解决方案 点击文件 --> 首选项 --> 设置 --> 工作台 --> 编辑管理 --> 取消勾选Enable Preview 如下图所示&#xff1a; 下拉&#xff0c;取消勾选Enable Preview

[JVM] 1. 初步认识JVM

核心思想&#xff1a; “Write Once, Run anywhere”. 各种语言通过编译器转换成字节码文件&#xff0c;在JVM上运行。 一、Java虚拟机 Java虚拟机是一台执行Java字节码的虚拟计算机&#xff0c;它拥有独立的运行机制&#xff0c;其运行的Java字节码也未必由Java语言编译而成…

Netty核心技术十一--用Netty 自己 实现 dubbo RPC

1. RPC基本介绍 RPC&#xff08;Remote Procedure Call&#xff09;:远程 过程调用&#xff0c;是一个计算机 通信协议。该协议允许运 行于一台计算机的程序调 用另一台计算机的子程序&#xff0c; 而程序员无需额外地为这 个交互作用编程 两个或多个应用程序都分 布在不同的服…

AJAX与axios框架

文章目录 前言案例跨域访问总结❗ 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 通过 ajax 进行前后端交互 案例 此项目用到了javaweb知识 首先创建JavaWeb项目编写代码&#xff1a; package ajax;import java.io.IOException; import java.util.A…

个人引导页源码带三个按钮可添加

个人引导页源码带三个按钮可添加 简洁优雅引导页

SpingBoot配置文件

普通参数配置 之前用阿里云oss&#xff0c;如果在每一个都程序都写这个 1.代码一旦修改要一个一个改 2.代码复用性低 所以可以配置到springBoot的配置文件来进行对应的读取&#xff0c;这样复用性就高了 赋值Value&#xff08;和最下面注解功能相同&#xff09; 在applicat…

淘宝app商品详情原数据API接口【详情页优惠券数据】Python语言示例请求范例,多种语言均支持

首先以Python语言请求示例为介绍 请求示例 # coding:utf-8 """ Compatible for python2.x and python3.x requirement: pip install requests """ from __future__ import print_function import requests # 请求示例 url 默认请求参数已经做U…

密码学学习笔记(十一):哈希函数 - Merkle–Damgård结构

Merkle–Damgrd是一种算法&#xff0c;由Ralph Merkle和Ivan Damgrd提出。它通过迭代调用压缩函数来计算消息的哈希值。 应用 拿SHA-2举例&#xff0c;首先我们需要对需要进行哈希运算的输入做填充&#xff0c;然后将填充后的输入划分为等长的分组&#xff0c;每个分组的长度…

中级课程——SSRF

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言挖掘 前言 挖掘

【网站开发】jq (jquery)实现瀑布流布局

要实现网站瀑布流效果&#xff0c;可以使用HTML、CSS和jquery来完成。下面是一种常见的实现方式&#xff1a; 注意要引入jQuery库。 代码如下&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title>…

git下载源码及环境搭建之数据库(二)

学习目标&#xff1a; 数据库 新项目使用 数据库文件 的配置 及相关属性的设置 步骤&#xff1a; 数据库 下图所示为开发时所用数据库 第一步&#xff1a;新建一个数据库 注意&#xff1a; 字符集与排序规则我们应该选择utf-8 相关 选中新创建的表&#xff0c;点击备份—还…

【雕爷学编程】Arduino动手做(06)---KY-038声音传感器模块4

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

Flutter:网络图像缓存插件——cached_network_image

前言 为什么要使用这个插件&#xff0c;有什么用呢&#xff1f;毕竟官方提供了Image.network来进行网络图片加载 Image.network和CachedNetworkImage都可以用于在Flutter中加载网络图片&#xff0c;但它们之间有一些区别。 Image.network是Flutter核心库提供的一个构造函数&…

趣味:关于AI是否具备自我意识的探究方案之一

随着gpt等其他NLP大语言模型的爆火&#xff0c;AI技术再次成为我们谈论的焦点&#xff0c;AI是一种拟人的、能够通过学习和自我优化执行各种任务的技术&#xff0c;关于ai是否具备自我意识的答案很明显是否定的&#xff0c;以下将使用一个例子来论证的观点 1.实验准备 我们将…

收拾屋子找出10年前的三维教程

明天找个带光驱的电脑&#xff0c;打开看看。那会还是刻盘&#xff0c; 那会我还是小鲜肉&#xff0c;只是喜欢PS2游戏。所以才接触到三维软件&#xff0c;可惜没干这行。现在变成中年大叔了&#xff0c;拿出来玩会。 想当初现在e维网&#xff0c;下载最新的教程。后面电驴里…

高并发下保证接口幂等性的常用策略

接口幂等性问题&#xff0c;对于开发人员来说是一个常见的公共问题。这里分享一些我在项目中用到过的一些方法&#xff0c;给有需要的同学们一个参考。 你是否遇到过以下的场景&#xff1a; 在填写form页面表单时&#xff0c;如果前端没做loading或者防抖操作&#xff0c;保存…