小程序云开发接单员在订单列表的签到按钮点击定位签到,定位签到要符合学生下单时填的地址,签到成功后,订单状态改为完成中代码示例
时间: 2024-05-11 14:18:07 浏览: 164
这里提供一个基于小程序云开发的接单员签到功能的代码示例:
1. 在订单列表页面,给签到按钮绑定点击事件:
```
// 订单列表页面 wxml 文件
<view wx:for="{{orders}}" wx:key="id">
<view>订单编号:{{item.id}}</view>
<view>下单人地址:{{item.address}}</view>
<button wx:if="{{item.status === 1}}" data-id="{{item.id}}" bindtap="handleSignin">签到</button>
<view>订单状态:{{getStatusText(item.status)}}</view>
</view>
```
```
// 订单列表页面 js 文件
const app = getApp()
Page({
data: {
orders: []
},
onLoad() {
// 获取订单列表数据...
},
handleSignin(e) {
const orderId = e.currentTarget.dataset.id
wx.getLocation({
type: 'gcj02',
success: (res) => {
const { latitude, longitude } = res
wx.cloud.callFunction({
name: 'signin',
data: {
orderId,
latitude,
longitude
},
success: (res) => {
console.log(res)
wx.showToast({
title: '签到成功',
icon: 'success'
})
this.setData({
orders: this.data.orders.map((item) => {
if (item.id === orderId) {
item.status = 2
}
return item
})
})
},
fail: (err) => {
console.error(err)
wx.showToast({
title: '签到失败',
icon: 'none'
})
}
})
},
fail: () => {
wx.showToast({
title: '获取位置失败',
icon: 'none'
})
}
})
},
getStatusText(status) {
// 根据订单状态码返回对应的文本
}
})
```
2. 在云函数中实现签到逻辑:
```
// signin 云函数的代码
const cloud = require('wx-server-sdk')
cloud.init()
exports.main = async (event, context) => {
const { orderId, latitude, longitude } = event
const db = cloud.database()
const _ = db.command
const order = await db.collection('orders').doc(orderId).get()
if (order.data.status !== 1) {
return {
success: false,
errMsg: '订单状态不正确'
}
}
const res = await cloud.openapi.wxacode.getUnlimited({
scene: orderId,
page: '/pages/order-detail/index'
})
if (res.errCode) {
return {
success: false,
errMsg: res.errMsg
}
}
const result = await cloud.openapi.wxa.getPhoneNumber({
...event,
iv: order.data.iv,
encryptedData: order.data.encryptedData
})
if (result.errCode) {
return {
success: false,
errMsg: result.errMsg
}
}
const phoneNumber = result.phoneNumber
if (order.data.address !== event.address) {
return {
success: false,
errMsg: '签到地址与下单地址不符'
}
}
await db.collection('orders').doc(orderId).update({
data: {
status: 2,
signinTime: new Date(),
signinLocation: new db.Geo.Point(longitude, latitude),
signinQRCode: res.buffer,
signinPhoneNumber: phoneNumber
}
})
return {
success: true
}
}
```
这里使用了云函数来处理签到逻辑,云函数中的代码实现了以下功能:
- 检查订单状态,只有订单状态为「待接单」才能进行签到;
- 生成订单的签到二维码,用于接单员扫描;
- 获取订单的手机号码,用于后续的短信通知;
- 检查签到地址是否与下单地址一致;
- 更新订单状态、签到时间、签到位置、签到二维码、签到手机号码等信息。
这个代码示例仅供参考,具体的签到功能实现需要根据实际场景进行调整。
阅读全文