uni-app开发微信小程序获取当前经纬度(附源码)

当时在写项目时搜索了很多帖子都不是很有用,以下是我的获取经纬度过程(包括当前时间以及扫码获取二维码信息)

首先要保证你已经配置了正确的appid,如果没有配置就去微信公众平台申请一个

https://mp.weixin.qq.com/

在配置好后并且已经创建项目后打开manifest.json配置文件,找到微信小程序配置

然后打开这个配置,之后就可以直接用uni的方法拿到经纬度

上源码(包含扫码、当前时间、经纬度)

	methods: {
			// 时间
			formatDate(date) {
			  const year = date.getFullYear();
			  const month = (date.getMonth() + 1).toString().padStart(2, '0');
			  const day = date.getDate().toString().padStart(2, '0');
			  const hours = date.getHours().toString().padStart(2, '0');
			  const minutes = date.getMinutes().toString().padStart(2, '0');
			  const seconds = date.getSeconds().toString().padStart(2, '0');
			  return `${year}-${month}-${day}T${hours}:${minutes}:${seconds}+08:00`;
			},
			
			
			scan() {
				let formData = {};
				// 先获取经纬度
				uni.getLocation({
					success: (locationRes) => {
						console.log("经纬度:", locationRes);
						console.log(locationRes.longitude);
						console.log(locationRes.latitude);
						//储存
						formData.longitude = locationRes.longitude;
						formData.latitude = locationRes.latitude;
						// 然后进行扫码
						uni.scanCode({
							success: (scanRes) => {
								console.log("扫码结果:", scanRes.result);
								// 找到 JSON 数据的起始位置
								const startIndex = scanRes.result.indexOf('{');
								const endIndex = scanRes.result.lastIndexOf('}');
								

								// 提取 JSON 数据
								const jsonString = scanRes.result.substring(startIndex, endIndex +
									1);

								// 解析 JSON 数据
								const parsedData = JSON.parse(jsonString);

								// 获取 classroom_id 和 seat_id 的值
								const classroomId = parsedData.classroom_id;
								const seatId = parsedData.seat_id;

								// 打印结果
								console.log('classroom_id:', classroomId);
								console.log('seat_id:', seatId);
								//储存
								formData.classroom_id = classroomId;
								formData.seat_id = seatId;




								// 获取当前标准时间
								//const currentTime = new Date();
							
								// 储存
								let inputTime= this.formatDate(new Date()) ;
								console.log(inputTime, '---------------时间格式')
								
								// const isoTimestamp=inputTime.toISOString();
								

								
								formData.time = inputTime; //isoTimestamp
								console.log(formData, JSON.stringify((formData), JSON.parse(JSON.stringify((formData)))), '-----------------表单数据'); // 记录储存结果
								console.log(123456789);
								//调用接口

								const realresult = qiandao(JSON.stringify(formData)).then(res => {
									console.log("拿到数据", res.code);
									if(res.code===2018){
										uni.showToast({
									title: '扫码成功',
									icon: 'success',
									mask:true,
									duration: 2000,
								});
								// 延迟一段时间等待第一个提示结束
								  setTimeout(function () {
								    uni.showToast({
								      title: '重复签到',
								      icon: 'none',
									 mask:true,
								      duration: 2000,
								    });
								
								    // 再次延迟一段时间等待第二个提示结束
								    setTimeout(function () {
								      uni.navigateBack({
								        delta: 1
								      });
								    }, 2000); // 这里的延迟时间要与第二个提示的 duration 一致
								  }, 2000); // 这里的延迟时间要与第一个提示的 duration 一致

									}if(res.code===2017){
										uni.showToast({
											title: '扫码成功',
											icon: 'success',
											mask:true,
											duration: 2000,
										});
										// 延迟一段时间等待第一个提示结束
										  setTimeout(function () {
										    uni.showToast({
										      title: '未查询到预约记录',
										      icon: 'none',
											  mask:true,
										      duration: 2000,
										    });
										
										    // 再次延迟一段时间等待第二个提示结束
										    setTimeout(function () {
										      uni.navigateBack({
										        delta: 1
										      });
										    }, 2000); // 这里的延迟时间要与第二个提示的 duration 一致
										  }, 2000); // 这里的延迟时间要与第一个提示的 duration 一致
										
									}if(res.code===2019){
										uni.showToast({
											title: '扫码成功',
											icon: 'success',
											mask:true,
											duration: 2000,
										});
										// 延迟一段时间等待第一个提示结束
										  setTimeout(function () {
										    uni.showToast({
										      title: '超出签到范围',
										      icon: 'none',
											  mask:true,
										      duration: 2000,
										    });
										}, 2000); // 这里的延迟时间要与第一个提示的 duration 一致
										
									}if(res.code===2000){
										uni.showToast({
											title: '签到成功',
											icon: 'success',
											mask:true,
											duration: 2000,
										});
									}if(res.code===2016){
										uni.showToast({
											title: '未在规定时间内签到',
											icon: 'none',
											mask:true,
											duration: 2000,
										});
									}else{
										uni.showToast({
											title: '未登录!!!',
											icon: 'none',
											mask:true,
											duration: 2000,
										});
										// 延迟一段时间等待第一个提示结束
										  setTimeout(function () {
										   uni.navigateBack({
											   delta:1
										   })
										}, 2000); // 这里的延迟时间要与第一个提示的 duration 一致
									}
								});









								
							},
							fail: (scanRes) => {
								console.error(scanRes);
								uni.showToast({
									title: '取消扫码或扫码失败',
									icon: 'none',
									duration: 2000,
								});
							},
						});
					},
					fail: (locationRes) => {
						console.error(locationRes);
						uni.showModal({
							title: '位置授权提示',
							content: '需要授权位置信息才能使用此功能,请点击确定跳转至设置页面进行授权。',
							showCancel: false,
							success: (modalRes) => {
								if (modalRes.confirm) {
									// 用户点击确定,跳转至设置页面
									uni.openSetting({
										success: (settingRes) => {
											console.log(settingRes);
											if (settingRes.authSetting[
													'scope.userLocation']) {
												// 用户授权成功,可以再次尝试获取位置信息
												this.scan();
											} else {
												// 用户仍未授权
												uni.showToast({
													title: '未授权位置信息',
													icon: 'none',
													duration: 2000,
												});
											}
										},
									});
								}
							},
						});
					},
				});


			},
		},
  • 10
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值