编辑 | blame | 历史 | 原始文档

急救转运任务车辆自动填充功能说明

功能概述

在创建非急救转运任务时,车牌号选择器加载当前用户所在分公司的所有车辆,并自动默认选中当前用户绑定的车牌号。

修改文件

  • app/pages/task/create-emergency.vue

功能实现

1. 车辆列表加载逻辑

加载范围

  • 加载当前用户所在**分公司的所有车辆**
  • 通过后端 /task/vehicle/available 接口实现
  • 后端SQL会根据用户的 deptId 自动查找所属分公司及其所有子部门的车辆

实现代码

getAvailableVehicles() {
  const deptId = this.currentUser.deptId
  return listAvailableVehicles(deptId, 'EMERGENCY').then(response => {
    const vehicleList = response.data || response.rows || []
    this.vehicleOptions = vehicleList.map(vehicle => ({
      id: vehicle.vehicleId,
      name: vehicle.vehicleNo,
      type: vehicle.vehicleType,
      status: vehicle.status
    }))
    this.vehicles = this.vehicleOptions.map(v => v.name)
  }).catch(() => {
    this.vehicles = []
  })
}

2. 默认选中绑定车辆

实现流程

  1. 页面加载时,先获取车辆列表
  2. 车辆列表加载完成后,获取用户绑定的车辆信息
  3. 在车辆列表中查找匹配的绑定车辆
  4. 自动设置为选中状态

实现代码

// 新增方法:获取用户绑定的车辆信息
getUserBoundVehicleInfo() {
  getUserProfile().then(response => {
    const userInfo = response.data || response
    if (userInfo.boundVehicle) {
      const boundVehicleNo = userInfo.boundVehicle.vehicleNumber
      const boundVehicleId = userInfo.boundVehicle.vehicleId
      
      // 在车辆列表中查找绑定的车辆
      const vehicleIndex = this.vehicleOptions.findIndex(v => 
        v.id === boundVehicleId || v.name === boundVehicleNo
      )
      
      if (vehicleIndex !== -1) {
        // 设置默认选中的车辆
        this.selectedVehicle = this.vehicleOptions[vehicleIndex].name
        this.selectedVehicleId = this.vehicleOptions[vehicleIndex].id
      }
    }
  }).catch(error => {
    console.error('获取用户绑定车辆信息失败:', error)
  })
}

页面加载逻辑优化

onLoad(options) {
  // 先加载车辆列表,然后加载绑定车辆信息
  this.getAvailableVehicles().then(() => {
    this.getUserBoundVehicleInfo()
  })
  this.initSelectedStaff()
  this.loadDeptStaff()
  // 设置默认归属机构
  if (this.currentUser.branchCompanyName) {
    this.selectedOrganization = this.currentUser.branchCompanyName
  }
}

3. API接口依赖

引入的新API

import { getUserProfile } from "@/api/system/user"

使用的现有API

  • listAvailableVehicles(deptId, taskType) - 获取可用车辆列表
  • getUserProfile() - 获取用户详细信息(包含绑定车辆)

用户体验

操作流程

  1. 用户进入"创建非急救转运任务"页面
  2. 页面自动加载:
  • 当前分公司的所有可用车辆
  • 用户绑定的车辆信息
  1. 车辆选择器显示:
  • 下拉列表包含分公司所有车辆
  • 默认选中当前用户绑定的车辆
  1. 用户可以:
  • 直接使用默认选中的车辆(最常见情况)
  • 手动更改为其他车辆(特殊情况)

场景示例

场景1:用户已绑定车辆

用户:张三(司机)
绑定车辆:粤A12345
所在分公司:广州分公司

打开创建任务页面时:
- 车辆选择器显示:"粤A12345" ✓(默认选中)
- 可选择列表:粤A12345、粤A67890、粤B11111...

场景2:用户未绑定车辆

用户:李四(护士)
绑定车辆:无
所在分公司:深圳分公司

打开创建任务页面时:
- 车辆选择器显示:"请选择任务车辆"
- 可选择列表:粤B22222、粤B33333、粤B44444...

场景3:绑定车辆不在可用列表中

用户:王五(司机)
绑定车辆:粤C55555(已调往其他分公司)
所在分公司:珠海分公司

打开创建任务页面时:
- 车辆选择器显示:"请选择任务车辆"
- 可选择列表:粤C66666、粤C77777...
(绑定车辆不在当前分公司,不显示)

数据流程图

sequenceDiagram
    participant U as 用户
    participant P as 创建任务页面
    participant API as 后端接口
    participant DB as 数据库

    U->>P: 打开创建任务页面
    P->>API: 获取可用车辆列表(deptId, EMERGENCY)
    API->>DB: 查询分公司所有车辆
    DB-->>API: 返回车辆列表
    API-->>P: 返回车辆数据
    
    P->>API: 获取用户信息(getUserProfile)
    API->>DB: 查询用户绑定车辆
    DB-->>API: 返回用户信息
    API-->>P: 返回绑定车辆信息
    
    P->>P: 匹配绑定车辆ID
    P->>P: 设置默认选中
    P-->>U: 显示默认选中的车辆

后端支持

车辆查询接口

接口: GET /task/vehicle/available

参数:
- deptId: 用户所在部门ID
- taskType: 任务类型(EMERGENCY)

返回数据结构:
json { "code": 200, "data": [ { "vehicleId": 1, "vehicleNo": "粤A12345", "vehicleType": "急救车", "status": "AVAILABLE" } ] }

用户信息接口

接口: GET /system/user/profile

返回数据结构:
json { "code": 200, "data": { "userId": 1, "userName": "zhangsan", "nickName": "张三", "deptId": 101, "boundVehicle": { "vehicleId": 1, "vehicleNumber": "粤A12345" } } }

与普通任务的一致性

此功能与普通任务(维修保养、加油等)的车辆选择逻辑保持一致:
- ✅ 都加载分公司所有车辆
- ✅ 都默认选中用户绑定车辆
- ✅ 都支持手动切换车辆
- ✅ 统一的用户体验

优势分析

1. 提升效率

  • ✅ 减少手动选择步骤
  • ✅ 大部分情况下无需更改
  • ✅ 符合用户习惯

2. 减少错误

  • ✅ 避免选错车辆
  • ✅ 确保车辆归属正确
  • ✅ 符合权限范围

3. 统一体验

  • ✅ 与普通任务保持一致
  • ✅ 降低学习成本
  • ✅ 提高用户满意度

注意事项

1. 数据权限

  • 只能看到当前分公司的车辆
  • 后端SQL自动处理权限过滤
  • 前端无需额外判断

2. 绑定车辆有效性

  • 绑定车辆可能已调走
  • 绑定车辆可能已停用
  • 这些情况下不会默认选中

3. 加载顺序

  • 必须先加载车辆列表
  • 然后再匹配绑定车辆
  • 顺序错误会导致匹配失败

4. 异常处理

  • 接口调用失败时静默处理
  • 不影响其他功能正常使用
  • 控制台记录错误日志

测试要点

功能测试

  1. ✅ 已绑定车辆的用户,进入页面时默认选中
  2. ✅ 未绑定车辆的用户,显示"请选择任务车辆"
  3. ✅ 车辆列表包含当前分公司所有车辆
  4. ✅ 可以手动切换为其他车辆
  5. ✅ 切换后能正常保存

数据权限测试

  1. ✅ 广州分公司用户只能看到广州分公司车辆
  2. ✅ 深圳分公司用户只能看到深圳分公司车辆
  3. ✅ 跨分公司绑定车辆不会显示

异常场景测试

  1. ✅ 接口超时时的处理
  2. ✅ 返回数据为空时的处理
  3. ✅ 绑定车辆不存在时的处理

相关文件

前端文件

  • app/pages/task/create-emergency.vue - 急救转运任务创建页面
  • app/pages/task/create-normal.vue - 普通任务创建页面(参考实现)
  • app/api/vehicle.js - 车辆相关API
  • app/api/system/user.js - 用户相关API

后端文件

  • 车辆查询接口控制器
  • 用户信息接口控制器
  • 用户车辆绑定服务

修改日期

2025-10-18

参考文档