JAVA低空经济无人机飞手接单小程序源码(UniApp实现)
以下是一个基于UniApp框架的无人机飞手接单小程序的核心代码片段和实现思路,涵盖用户端、飞手端、订单管理等功能模块。
项目结构
src/ ├── common/ # 公共资源 ├── components/ # 组件 ├── pages/ │ ├── index/ # 首页 │ ├── order/ # 订单模块 │ ├── pilot/ # 飞手模块 │ └── user/ # 用户中心 ├── static/ # 静态资源 └── store/ # Vuex状态管理核心功能实现
1. 用户登录与角色判断
// store/user.js export default { state: { userInfo: null, isPilot: false }, mutations: { login(state, user) { state.userInfo = user state.isPilot = user.role === 'pilot' } } }2. 首页地图展示(高德地图API)
<!-- pages/index/index.vue --> <template> <view> <map id="map" :latitude="location.lat" :longitude="location.lng" :markers="markers" @tap="handleMapTap"> </map> </view> </template>3. 订单发布功能
// pages/order/create.vue methods: { submitOrder() { uni.request({ url: '/api/orders', method: 'POST', data: { title: this.title, location: this.location, price: this.price, description: this.desc }, success: (res) => { uni.showToast({ title: '订单发布成功' }) } }) } }4. 飞手接单逻辑
// pages/pilot/order-list.vue methods: { acceptOrder(orderId) { uni.request({ url: `/api/orders/${orderId}/accept`, method: 'POST', success: (res) => { uni.showToast({ title: '接单成功' }) } }) } }5. 订单状态管理
// store/order.js export default { state: { orders: [] }, mutations: { updateOrderStatus(state, { id, status }) { const order = state.orders.find(o => o.id === id) if (order) order.status = status } } }后端接口示例(Spring Boot)
1. 订单实体类
// Order.java @Entity public class Order { @Id @GeneratedValue private Long id; private String title; private String status; // NEW, ACCEPTED, COMPLETED private Double latitude; private Double longitude; @ManyToOne private User creator; @ManyToOne private User pilot; }2. 订单控制器
// OrderController.java @RestController @RequestMapping("/api/orders") public class OrderController { @PostMapping public ResponseEntity<Order> createOrder(@RequestBody Order order) { order.setStatus("NEW"); return ResponseEntity.ok(orderRepository.save(order)); } @PostMapping("/{id}/accept") public ResponseEntity<Order> acceptOrder( @PathVariable Long id, @RequestParam Long pilotId) { Order order = orderRepository.findById(id).orElseThrow(); order.setStatus("ACCEPTED"); order.setPilot(userRepository.findById(pilotId).orElseThrow()); return ResponseEntity.ok(orderRepository.save(order)); } }数据库设计(MySQL)
CREATE TABLE users ( id BIGINT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(50) UNIQUE, password VARCHAR(100), role ENUM('user', 'pilot'), certification VARCHAR(100) ); CREATE TABLE orders ( id BIGINT PRIMARY KEY AUTO_INCREMENT, title VARCHAR(100), status ENUM('NEW', 'ACCEPTED', 'COMPLETED'), creator_id BIGINT, pilot_id BIGINT, FOREIGN KEY (creator_id) REFERENCES users(id), FOREIGN KEY (pilot_id) REFERENCES users(id) );关键注意事项
地图服务选择
需申请高德或腾讯地图API密钥,在manifest.json中配置:"mp-weixin": { "appid": "YOUR_APPID", "setting": { "urlCheck": false }, "usingComponents": true, "plugins": { "chooseLocation": { "version": "1.0.10", "provider": "wx76a9a06e5b4e693e" } } }权限控制
在路由跳转时验证用户角色:// router/index.js router.beforeEach((to, from, next) => { if (to.meta.requiresPilot && !store.state.user.isPilot) { next('/auth/login') } else { next() } })实时通信
使用WebSocket实现订单状态实时更新:// utils/socket.js const socket = new WebSocket('wss://your-domain.com/ws') socket.onmessage = (event) => { const data = JSON.parse(event.data) store.commit('updateOrderStatus', data) }
扩展功能建议
信用评价系统
在订单完成后增加双向评价机制无人机设备管理
飞手可绑定多台无人机设备信息保险服务接入
对接第三方保险API为订单提供保障飞行计划报备
自动生成符合民航局要求的飞行计划文档
