From 668e570bd1db6bd00e4293b6977e6d3d051053ce Mon Sep 17 00:00:00 2001
From: wlzboy <66905212@qq.com>
Date: 星期四, 27 十一月 2025 00:07:46 +0800
Subject: [PATCH] feat: 修改app录入界面及车辆用户同步
---
app/pages/task/create-emergency.vue | 176 ++++++++++++++++++++++++++++++++++++++++++----------------
1 files changed, 128 insertions(+), 48 deletions(-)
diff --git a/app/pages/task/create-emergency.vue b/app/pages/task/create-emergency.vue
index ef16aec..2a6c730 100644
--- a/app/pages/task/create-emergency.vue
+++ b/app/pages/task/create-emergency.vue
@@ -30,6 +30,16 @@
/>
</view>
+ <DepartureSelector
+ :address.sync="departureAddress"
+ :longitude.sync="departureLongitude"
+ :latitude.sync="departureLatitude"
+ :region="selectedRegion"
+ :required="false"
+ @address-selected="onDepartureAddressSelected"
+ @location-success="onDepartureLocationSuccess"
+ />
+
<view class="form-item">
<view class="form-label required">浠诲姟绫诲瀷</view>
<picker mode="selector" :range="emergencyTaskTypeOptions" range-key="text" @change="onEmergencyTaskTypeChange">
@@ -321,8 +331,9 @@
import uniPopup from '@/uni_modules/uni-popup/components/uni-popup/uni-popup.vue'
import { addTask } from "@/api/task"
import { listAvailableVehicles, getUserBoundVehicle } from "@/api/vehicle"
+import { searchHospitals, searchHospitalsByDeptRegion } from "@/api/hospital"
+import DepartureSelector from '@/components/DepartureSelector.vue'
import { calculateDistance, baiduDistanceByAddress, baiduPlaceSuggestion } from "@/api/map"
-import { searchHospitals, getFrequentOutHospitals, getFrequentInHospitals, searchHospitalsByDeptRegion } from "@/api/hospital"
import { listBranchUsers } from "@/api/system/user"
import { searchIcd10 } from "@/api/icd10"
import { calculateTransferPrice } from "@/api/price"
@@ -343,7 +354,8 @@
MapSelector,
OrganizationSelector,
HospitalSelector,
- DiseaseSelector
+ DiseaseSelector,
+ DepartureSelector
},
data() {
return {
@@ -352,6 +364,9 @@
selectedOrganizationId: null, // 褰掑睘鏈烘瀯ID锛堥儴闂↖D锛�
selectedOrganizationServiceOrderClass: '', // 褰掑睘鏈烘瀯鐨勬湇鍔″崟缂栫爜
selectedRegion: '', // 浠庡綊灞炴満鏋勪腑鎻愬彇鐨勫湴鍩熶俊鎭紙濡傦細骞垮窞銆佹繁鍦崇瓑锛�
+ departureAddress: '', // 鍑哄彂鍦板湴鍧�
+ departureLongitude: null, // 鍑哄彂鍦扮粡搴�
+ departureLatitude: null, // 鍑哄彂鍦扮含搴�
selectedEmergencyTaskType: '', // 閫変腑鐨勪换鍔$被鍨嬫枃鏈�
selectedEmergencyTaskTypeId: null, // 閫変腑鐨勪换鍔$被鍨婭D
selectedDocumentType: '', // 閫変腑鐨勫崟鎹被鍨嬫枃鏈�
@@ -403,10 +418,6 @@
documentTypeOptions: [], // 鍗曟嵁绫诲瀷閫夐」锛堢敤浜巔icker鏄剧ず锛�
departmentOptions: [], // 绉戝瀛楀吀鏁版嵁
loading: false,
- addressCoordinates: {
- hospitalOutAddress: null,
- hospitalInAddress: null
- },
// 鏅鸿兘璇嗗埆鐩稿叧
rawText: '',
parseLoading: false
@@ -517,10 +528,18 @@
},
onOrganizationChange(orgData) {
- // orgData 鍖呭惈锛歞eptId, deptName, serviceOrderClass, region
+ // orgData 鍖呭惈锛歞eptId, deptName, serviceOrderClass, region, departureAddress, departureLongitude, departureLatitude
this.selectedOrganizationId = orgData.deptId
this.selectedOrganizationServiceOrderClass = orgData.serviceOrderClass
this.selectedRegion = orgData.region
+
+ // 鑷姩濉厖鍑哄彂鍦颁俊鎭紙鏈烘瀯鐨勫湴鍧�鍜屽潗鏍囷級
+ if (orgData.departureAddress) {
+ this.departureAddress = orgData.departureAddress
+ this.departureLongitude = orgData.departureLongitude || null
+ this.departureLatitude = orgData.departureLatitude || null
+ console.log('鑷姩濉厖鏈烘瀯鍑哄彂鍦�:', this.departureAddress, '鍧愭爣:', this.departureLongitude, this.departureLatitude)
+ }
console.log('閫変腑褰掑睘鏈烘瀯:', orgData.deptName, '閮ㄩ棬ID:', orgData.deptId, '鏈嶅姟鍗曠紪鐮�:', orgData.serviceOrderClass, '鍦板煙:', orgData.region)
},
@@ -635,16 +654,10 @@
}
},
- // 杞嚭鍖婚櫌鍦板潃閫夋嫨锛堝綋閫夋嫨"瀹朵腑"鏃朵娇鐢ㄧ櫨搴﹀湴鍥惧湴鍧�寤鸿锛�
+ // 杞嚭鍖婚櫌鍦板潃閫夋嫨浜嬩欢锛堢畝鍖栵紝绉婚櫎GPS澶勭悊锛�
onHospitalOutAddressSelected(data) {
- // data 鍖呭惈锛歛ddress, location
- if (data.location) {
- this.addressCoordinates.hospitalOutAddress = data.location
-
- // 濡傛灉杞叆鍦板潃涔熷凡濉啓,鑷姩璁$畻璺濈
- if (this.taskForm.hospitalIn.address) {
- this.calculateDistanceByManualAddress()
- }
+ if (this.taskForm.hospitalIn.address) {
+ this.calculateDistanceByManualAddress()
}
},
@@ -665,16 +678,10 @@
}
},
- // 杞叆鍖婚櫌鍦板潃閫夋嫨锛堝綋閫夋嫨"瀹朵腑"鏃朵娇鐢ㄧ櫨搴﹀湴鍥惧湴鍧�寤鸿锛�
+ // 杞叆鍖婚櫌鍦板潃閫夋嫨浜嬩欢锛堢畝鍖栵紝绉婚櫎GPS澶勭悊锛�
onHospitalInAddressSelected(data) {
- // data 鍖呭惈锛歛ddress, location
- if (data.location) {
- this.addressCoordinates.hospitalInAddress = data.location
-
- // 濡傛灉杞嚭鍦板潃涔熷凡濉啓,鑷姩璁$畻璺濈
- if (this.taskForm.hospitalOut.address) {
- this.calculateDistanceByManualAddress()
- }
+ if (this.taskForm.hospitalOut.address) {
+ this.calculateDistanceByManualAddress()
}
},
@@ -1072,7 +1079,7 @@
// 鐥呮儏ID鍒楄〃锛堢敤浜庡悓姝ヨ皟搴﹀崟鐨凮rdICD_ID鍙傛暟锛�
diseaseIds: this.selectedDiseases.filter(d => d.id !== null).map(d => d.id),
// 灏嗚浆鍑哄尰闄㈠湴鍧�浣滀负鍑哄彂鍦帮紝杞叆鍖婚櫌鍦板潃浣滀负鐩殑鍦�
- departureAddress: this.taskForm.hospitalOut.address || '',
+ departureAddress: this.departureAddress || this.taskForm.hospitalOut.address || '',
destinationAddress: this.taskForm.hospitalIn.address || '',
patient: {
...this.taskForm.patient,
@@ -1085,34 +1092,27 @@
icdName: d.icdName
}))
},
- // 鍖婚櫌淇℃伅锛堝寘鍚尰闄D銆佺瀹ゅ悕绉般�佺瀹D绛夊畬鏁翠俊鎭級
- hospitalOut: this.taskForm.hospitalOut, // 鍖呭惈: id, name, department, departmentId, bedNumber, address
- hospitalIn: this.taskForm.hospitalIn, // 鍖呭惈: id, name, department, departmentId, bedNumber, address
+ // 鍖婚櫌淇℃伅锛堝寘鍚尰闄D銆佺瀹ゅ悕绉般�佺瀹D銆丟PS鍧愭爣绛夊畬鏁翠俊鎭級
+ hospitalOut: {
+ ...this.taskForm.hospitalOut
+ // GPS鍧愭爣鐢卞悗绔嚜鍔ㄨ幏鍙�
+ },
+ hospitalIn: {
+ ...this.taskForm.hospitalIn
+ // GPS鍧愭爣鐢卞悗绔嚜鍔ㄨ幏鍙�
+ },
+
transferDistance: this.taskForm.transferDistance ? parseFloat(this.taskForm.transferDistance) : null,
price: this.taskForm.price ? parseFloat(this.taskForm.price) : null
}
- if (this.addressCoordinates.hospitalOutAddress) {
- // 杞嚭鍖婚櫌GPS鍧愭爣鍐欏叆鎵╁睍琛�
- if (!submitData.hospitalOut) submitData.hospitalOut = {}
- submitData.hospitalOut.longitude = this.addressCoordinates.hospitalOutAddress.lng
- submitData.hospitalOut.latitude = this.addressCoordinates.hospitalOutAddress.lat
-
- // 鍚屾椂鍐欏叆涓讳换鍔¤〃鐨勫嚭鍙戝湴缁忕含搴�
- submitData.departureLongitude = this.addressCoordinates.hospitalOutAddress.lng
- submitData.departureLatitude = this.addressCoordinates.hospitalOutAddress.lat
+ // 鍑哄彂鍦癎PS鍧愭爣锛堜紭鍏堜娇鐢ㄨ嚜瀹氫箟鐨勫嚭鍙戝湴鍧愭爣锛�
+ if (this.departureLongitude && this.departureLatitude) {
+ submitData.departureLongitude = this.departureLongitude
+ submitData.departureLatitude = this.departureLatitude
}
- if (this.addressCoordinates.hospitalInAddress) {
- // 杞叆鍖婚櫌GPS鍧愭爣鍐欏叆鎵╁睍琛�
- if (!submitData.hospitalIn) submitData.hospitalIn = {}
- submitData.hospitalIn.longitude = this.addressCoordinates.hospitalInAddress.lng
- submitData.hospitalIn.latitude = this.addressCoordinates.hospitalInAddress.lat
-
- // 鍚屾椂鍐欏叆涓讳换鍔¤〃鐨勭洰鐨勫湴缁忕含搴�
- submitData.destinationLongitude = this.addressCoordinates.hospitalInAddress.lng
- submitData.destinationLatitude = this.addressCoordinates.hospitalInAddress.lat
- }
+ // 鐩爣鍦癎PS鍧愭爣鐢卞悗绔牴鎹浆鍏ュ尰闄㈠湴鍧�鑷姩鑾峰彇
return submitData
},
@@ -1151,6 +1151,79 @@
goBack() {
uni.navigateBack()
+ },
+
+ // 鑾峰彇褰撳墠浣嶇疆
+ getCurrentLocation() {
+ uni.showLoading({
+ title: '鑾峰彇浣嶇疆涓�...'
+ })
+
+ // 浣跨敤uni-app鐨凣PS瀹氫綅鍔熻兘
+ uni.getLocation({
+ type: 'gcj02', // 杩斿洖鍥芥祴灞�鍧愭爣锛岄�傜敤浜庡浗鍐呭湴鍥�
+ success: (res) => {
+ console.log('鑾峰彇鍒癎PS鍧愭爣:', res)
+ const latitude = res.latitude
+ const longitude = res.longitude
+
+ // 淇濆瓨GPS鍧愭爣
+ this.departureLatitude = latitude
+ this.departureLongitude = longitude
+
+ // 璋冪敤閫嗗湴鐞嗙紪鐮佹帴鍙o紝灏嗗潗鏍囪浆鎹负鍦板潃
+ reverseGeocoder(latitude, longitude)
+ .then(response => {
+ uni.hideLoading()
+
+ if (response.code === 200 && response.data) {
+ // 鑾峰彇璇︾粏鍦板潃
+ const address = response.data.address || response.data.formattedAddress || ''
+ this.departureAddress = address
+
+ console.log('閫嗗湴鐞嗙紪鐮佹垚鍔�:', address)
+ this.$modal.showToast('宸茶幏鍙栧綋鍓嶄綅缃�')
+ } else {
+ console.error('閫嗗湴鐞嗙紪鐮佸け璐�:', response.msg)
+ this.$modal.showToast('浣嶇疆瑙f瀽澶辫触锛岃鎵嬪姩杈撳叆鍦板潃')
+ }
+ })
+ .catch(error => {
+ uni.hideLoading()
+ console.error('閫嗗湴鐞嗙紪鐮佸け璐�:', error)
+ // 鍗充娇鍦板潃瑙f瀽澶辫触锛屼篃淇濈暀GPS鍧愭爣
+ this.$modal.showToast('浣嶇疆瑙f瀽澶辫触锛屼絾GPS鍧愭爣宸蹭繚瀛�')
+ })
+ },
+ fail: (err) => {
+ uni.hideLoading()
+ console.error('鑾峰彇浣嶇疆澶辫触:', err)
+
+ // 鎻愮ず鐢ㄦ埛鍙兘鐨勫師鍥�
+ let errorMsg = '鑾峰彇浣嶇疆澶辫触'
+ if (err.errMsg && err.errMsg.includes('auth deny')) {
+ errorMsg = '璇峰湪璁剧疆涓紑鍚綅缃潈闄�'
+ } else if (err.errMsg && err.errMsg.includes('timeout')) {
+ errorMsg = '瀹氫綅瓒呮椂锛岃绋嶅悗閲嶈瘯'
+ }
+
+ this.$modal.showToast(errorMsg)
+ }
+ })
+ },
+
+ // 鍑哄彂鍦板湴鍧�閫夋嫨锛堜粠鍦板浘寤鸿涓�夋嫨锛�
+ onDepartureAddressSelected(data) {
+ // data 鍖呭惈: address, longitude, latitude, location
+ console.log('鍑哄彂鍦板湴鍧�閫夋嫨:', data)
+ // 缁勪欢宸茬粡閫氳繃 .sync 鏇存柊浜� departureAddress, departureLongitude, departureLatitude
+ },
+
+ // 鍑哄彂鍦癎PS瀹氫綅鎴愬姛
+ onDepartureLocationSuccess(data) {
+ // data 鍖呭惈: address, longitude, latitude
+ console.log('鍑哄彂鍦癎PS瀹氫綅鎴愬姛:', data)
+ // 缁勪欢宸茬粡閫氳繃 .sync 鏇存柊浜� departureAddress, departureLongitude, departureLatitude
},
// ==================== 鏅鸿兘璇嗗埆鐩稿叧鏂规硶 ====================
@@ -1781,6 +1854,13 @@
font-size: 28rpx;
}
+ .form-tip {
+ margin-top: 10rpx;
+ font-size: 24rpx;
+ color: #999;
+ line-height: 1.5;
+ }
+
.disease-container {
.disease-tags {
display: flex;
--
Gitblit v1.9.1