From c6e38b6c66de5f5a8df5b8b2ab03a82c3b605db8 Mon Sep 17 00:00:00 2001
From: wlzboy <66905212@qq.com>
Date: 星期三, 03 十二月 2025 00:48:44 +0800
Subject: [PATCH] feat:优化同步
---
app/pagesTask/edit-emergency.vue | 226 +++++++++++++++++++++++++++++++++++++++++--------------
1 files changed, 167 insertions(+), 59 deletions(-)
diff --git a/app/pagesTask/edit-emergency.vue b/app/pagesTask/edit-emergency.vue
index e23f4b5..4b133bf 100644
--- a/app/pagesTask/edit-emergency.vue
+++ b/app/pagesTask/edit-emergency.vue
@@ -27,6 +27,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>
<uni-datetime-picker
@@ -278,6 +288,7 @@
import OrganizationSelector from './components/OrganizationSelector.vue'
import HospitalSelector from './components/HospitalSelector.vue'
import DiseaseSelector from './components/DiseaseSelector.vue'
+import DepartureSelector from './components/DepartureSelector.vue'
import distanceCalculator from '@/mixins/distanceCalculator.js'
export default {
@@ -288,7 +299,8 @@
VehicleSelector,
OrganizationSelector,
HospitalSelector,
- DiseaseSelector
+ DiseaseSelector,
+ DepartureSelector
},
mixins: [distanceCalculator],
data() {
@@ -300,12 +312,19 @@
selectedOrganizationId: null,
selectedRegion: '',
mapSelectorType: '',
+ // 鎵╁睍 addressCoordinates 鏀寔澶氱閿悕
+ addressCoordinates: {
+ start: null,
+ end: null,
+ hospitalOutAddress: null,
+ hospitalInAddress: null
+ },
// 鍑哄彂鍦颁俊鎭�
departureAddress: '',
departureLongitude: null,
departureLatitude: null,
- selectedDiseases: [], // 宸查�夋嫨鐨勭梾鎯呭垪琛�
- selectedStaff: [], // 宸查�夋嫨鐨勪汉鍛樺垪琛�
+ selectedDiseases: [], // 宸查�夋嫨鐨勭梾鎯呭垪琛紙纭繚鍒濆鍖栦负绌烘暟缁勶級
+ selectedStaff: [], // 宸查�夋嫨鐨勪汉鍛樺垪琛紙纭繚鍒濆鍖栦负绌烘暟缁勶級
allStaffList: [], // 鎵�鏈変汉鍛樺垪琛�
filteredStaffList: [], // 杩囨护鍚庣殑浜哄憳鍒楄〃
staffSearchKeyword: '', // 浜哄憳鎼滅储鍏抽敭璇�
@@ -403,8 +422,8 @@
this.taskForm.patient.idCard = info.patientIdCard || ''
this.taskForm.patient.condition = info.patientCondition || ''
- // 瑙f瀽鐥呮儏淇℃伅
- this.parseDiseaseInfo(info.patientCondition, info.diseaseIds)
+ // 瑙f瀽鐥呮儏淇℃伅锛堜慨澶嶏細浣跨敤涓庡垱寤虹晫闈竴鑷寸殑閫昏緫锛�
+ this.parseDiseaseInfo(info.patientCondition, info.diseases)
// 杞嚭鍖婚櫌淇℃伅
this.taskForm.hospitalOut.id = info.hospitalOutId || null
@@ -489,8 +508,8 @@
console.log('璁剧疆鐩爣鍦板潗鏍�:', this.taskDetail.destinationLongitude, this.taskDetail.destinationLatitude)
}
- // 璁剧疆鎵ц浜哄憳
- if (this.taskDetail.assignees && this.taskDetail.assignees.length > 0) {
+ // 璁剧疆鎵ц浜哄憳锛堜慨澶嶏細纭繚 assignees 涓嶄负 null锛�
+ if (this.taskDetail.assignees && Array.isArray(this.taskDetail.assignees) && this.taskDetail.assignees.length > 0) {
console.log('鍘熷鎵ц浜哄憳鏁版嵁:', this.taskDetail.assignees)
this.selectedStaff = this.taskDetail.assignees.map(assignee => ({
userId: assignee.userId,
@@ -503,6 +522,8 @@
} else {
console.warn('浠诲姟娌℃湁鍒嗛厤鎵ц浜哄憳鎴朼ssignees涓虹┖')
console.log('taskDetail.assignees:', this.taskDetail.assignees)
+ // 纭繚 selectedStaff 鍒濆鍖栦负绌烘暟缁�
+ this.selectedStaff = []
}
console.log('琛ㄥ崟鏁版嵁濉厖瀹屾垚:', this.taskForm)
@@ -523,9 +544,33 @@
// 褰掑睘鏈烘瀯閫夋嫨鍙樺寲
onOrganizationChange(orgData) {
- // orgData 鍖呭惈锛歞eptId, deptName, serviceOrderClass, region
+ // orgData 鍖呭惈锛歞eptId, deptName, serviceOrderClass, region, departureAddress, departureLongitude, departureLatitude
this.selectedOrganizationId = orgData.deptId
- console.log('閫変腑褰掑睘鏈烘瀯:', orgData.deptName, '閮ㄩ棬ID:', orgData.deptId)
+ 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.region)
+ },
+
+ // 鍑哄彂鍦板湴鍧�閫夋嫨锛堜粠鍦板浘寤鸿涓�夋嫨锛�
+ 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
},
// 杞嚭鍖婚櫌鍙樺寲
@@ -732,61 +777,101 @@
this.selectedStaff.splice(index, 1)
},
- // 瑙f瀽鐥呮儏淇℃伅锛堜粠瀛楃涓茶В鏋愬嚭ICD-10鐤剧梾鍒楄〃锛�
- parseDiseaseInfo(conditionText, diseaseIds) {
+ // 瑙f瀽鐥呮儏淇℃伅锛堜粠瀛楃涓茶В鏋愬嚭ICD-10鐤剧梾鍒楄〃锛�- 淇锛氫笌鍒涘缓鐣岄潰淇濇寔涓�鑷�
+ parseDiseaseInfo(conditionText, diseases) {
+ console.log('========== 寮�濮嬭В鏋愮梾鎯呬俊鎭� ==========')
+ console.log('conditionText:', conditionText)
+ console.log('diseases鏁扮粍:', diseases)
+
if (!conditionText) {
+ console.log('鐥呮儏鏂囨湰涓虹┖锛屾竻绌洪�変腑鐥呮儏')
this.selectedDiseases = []
this.taskForm.patient.otherCondition = ''
return
}
-
- // 瑙f瀽diseaseIds锛堥�楀彿鍒嗛殧鐨勫瓧绗︿覆杞负鏁扮粍锛�
- const diseaseIdArray = diseaseIds ? diseaseIds.split(',').map(id => parseInt(id.trim())).filter(id => !isNaN(id)) : []
// 濡傛灉鍖呭惈"鍏朵粬锛�"鍒嗛殧绗︼紝鎷嗗垎鐥呮儏鍜屽叾浠栨弿杩�
if (conditionText.includes('\n鍏朵粬锛�')) {
const parts = conditionText.split('\n鍏朵粬锛�')
const diseasePart = parts[0]
this.taskForm.patient.otherCondition = parts[1] || ''
+ console.log('鐥呮儏閮ㄥ垎:', diseasePart)
+ console.log('鍏朵粬鎻忚堪:', this.taskForm.patient.otherCondition)
// 瑙f瀽鐥呮儏閮ㄥ垎
- this.parseDiseaseList(diseasePart, diseaseIdArray)
+ this.parseDiseaseList(diseasePart, diseases)
} else {
- // 娌℃湁"鍏朵粬"閮ㄥ垎锛屽叏閮ㄤ綔涓哄叾浠栨弿杩�
- this.taskForm.patient.otherCondition = conditionText
- this.selectedDiseases = []
+ // 娌℃湁"鍏朵粬"閮ㄥ垎锛屽皾璇曡В鏋愭槸鍚︽湁鐤剧梾鍒楄〃
+ const hasDiseasesFormat = /([^(]+)\(([^)]+)\)/.test(conditionText)
+ console.log('鏄惁鍖呭惈鐤剧梾鏍煎紡:', hasDiseasesFormat)
+
+ if (hasDiseasesFormat) {
+ // 鏈夌柧鐥呮牸寮忥紝瑙f瀽鐤剧梾鍒楄〃
+ this.parseDiseaseList(conditionText, diseases)
+ this.taskForm.patient.otherCondition = ''
+ } else {
+ // 娌℃湁鐤剧梾鏍煎紡锛屽叏閮ㄤ綔涓哄叾浠栨弿杩�
+ console.log('鏃犵柧鐥呮牸寮忥紝浣滀负鍏朵粬鎻忚堪')
+ this.taskForm.patient.otherCondition = conditionText
+ this.selectedDiseases = []
+ }
}
+
+ console.log('瑙f瀽瀹屾垚锛宻electedDiseases:', JSON.stringify(this.selectedDiseases))
+ console.log('瑙f瀽瀹屾垚锛宱therCondition:', this.taskForm.patient.otherCondition)
+ console.log('========================================\n')
},
// 瑙f瀽鐥呮儏鍒楄〃锛堟牸寮忥細鐤剧梾鍚�(缂栫爜)銆佺柧鐥呭悕(缂栫爜)锛�
- parseDiseaseList(diseasePart, diseaseIdArray) {
+ parseDiseaseList(diseasePart, diseasesData) {
+ console.log('--- parseDiseaseList 寮�濮� ---')
+ console.log('diseasePart:', diseasePart)
+ console.log('diseasesData:', diseasesData)
+
if (!diseasePart) {
+ console.log('鐥呮儏閮ㄥ垎涓虹┖')
this.selectedDiseases = []
return
}
+ // 濡傛灉鍚庣宸茬粡杩斿洖浜哾iseases鏁扮粍锛岀洿鎺ヤ娇鐢�
+ if (diseasesData && Array.isArray(diseasesData) && diseasesData.length > 0) {
+ console.log('浣跨敤鍚庣杩斿洖鐨刣iseases鏁扮粍锛屾暟閲�:', diseasesData.length)
+ this.selectedDiseases = diseasesData.map(d => ({
+ id: d.icdId || null,
+ icdCode: d.icdCode || '',
+ icdName: d.icdName || ''
+ }))
+ console.log('瑙f瀽鍚庣殑selectedDiseases:', JSON.stringify(this.selectedDiseases))
+ return
+ }
+
+ // 鍚﹀垯锛屼粠瀛楃涓茶В鏋�
+ console.log('浠庡瓧绗︿覆瑙f瀽鐥呮儏')
// 鍖归厤鏍煎紡锛氱柧鐥呭悕(缂栫爜)
const regex = /([^(]+)\(([^)]+)\)/g
const diseases = []
let match
- let index = 0
while ((match = regex.exec(diseasePart)) !== null) {
const icdName = match[1].replace(/[銆�,\s]+$/, '').replace(/^[銆�,\s]+/, '').trim()
const icdCode = match[2].trim()
+ console.log('鍖归厤鍒扮梾鎯� - 鍚嶇О:', icdName, '缂栫爜:', icdCode)
+
// 鍙坊鍔犵梾鎯呭悕绉颁笉涓虹┖鐨勯」
if (icdName) {
diseases.push({
- icdName: icdName,
+ id: null, // 浠庡瓧绗︿覆瑙f瀽鏃讹紝娌℃湁ID
icdCode: icdCode,
- id: diseaseIdArray && index < diseaseIdArray.length ? diseaseIdArray[index] : null
+ icdName: icdName
})
- index++
}
}
+ console.log('浠庡瓧绗︿覆瑙f瀽瀹屾垚锛屾暟閲�:', diseases.length)
this.selectedDiseases = diseases
+ console.log('--- parseDiseaseList 缁撴潫 ---\n')
},
// 閫夋嫨杞嚭鍖婚櫌鍦板潃
@@ -889,6 +974,14 @@
},
buildSubmitData() {
+ // 纭繚 selectedDiseases 鍜� selectedStaff 涓嶄负 null锛堜慨澶嶏細闃叉杩唬 null 瀵艰嚧閿欒锛�
+ if (!this.selectedDiseases) {
+ this.selectedDiseases = []
+ }
+ if (!this.selectedStaff) {
+ this.selectedStaff = []
+ }
+
// 鍚堝苟鐥呮儏淇℃伅锛氶�変腑鐨処CD-10鐤剧梾 + 鍏朵粬鎻忚堪
let conditionText = ''
if (this.selectedDiseases.length > 0) {
@@ -909,47 +1002,46 @@
}
}
+ // 鏋勫缓鎻愪氦鏁版嵁 - 浣跨敤涓� TaskCreateVO 涓�鑷寸殑缁撴瀯
const submitData = {
taskId: this.taskId,
taskType: 'EMERGENCY_TRANSFER',
deptId: this.selectedOrganizationId,
vehicleIds: this.selectedVehicleId ? [this.selectedVehicleId] : [],
plannedStartTime: this.taskForm.transferTime,
- // 鍑哄彂鍦颁娇鐢� departureAddress锛堝鏋滄湁锛夛紝鍚﹀垯浣跨敤杞嚭鍖婚櫌鍦板潃
+
+ // 鍑哄彂鍦板湴鍧�鍜屽潗鏍囷紙浣跨敤杞嚭鍖婚櫌鍦板潃锛�
departureAddress: this.departureAddress || this.taskForm.hospitalOut.address,
- // 鐩爣鍦颁娇鐢ㄨ浆鍏ュ尰闄㈠湴鍧�
+ departureLongitude: this.departureLongitude || (this.addressCoordinates.hospitalOutAddress ? this.addressCoordinates.hospitalOutAddress.lng : null),
+ departureLatitude: this.departureLatitude || (this.addressCoordinates.hospitalOutAddress ? this.addressCoordinates.hospitalOutAddress.lat : null),
+
+ // 鐩爣鍦板湴鍧�鍜屽潗鏍囷紙浣跨敤杞叆鍖婚櫌鍦板潃锛�
destinationAddress: this.taskForm.hospitalIn.address,
+ destinationLongitude: this.addressCoordinates.hospitalInAddress ? this.addressCoordinates.hospitalInAddress.lng : null,
+ destinationLatitude: this.addressCoordinates.hospitalInAddress ? this.addressCoordinates.hospitalInAddress.lat : null,
+
+ // 杞繍璺濈鍜屼环鏍硷紙涓讳换鍔″瓧娈碉級
+ distance: this.taskForm.transferDistance ? parseFloat(this.taskForm.transferDistance) : null,
+ price: this.taskForm.price ? parseFloat(this.taskForm.price) : null,
+
// 鐥呮儏ID鍒楄〃锛堢敤浜庡悓姝ヨ皟搴﹀崟鐨凮rdICD_ID鍙傛暟锛�
diseaseIds: this.selectedDiseases.map(d => d.id).filter(id => id !== null),
- // 鎵ц浜哄憳鍒楄〃
- assignees: this.selectedStaff.map(staff => ({
+
+ // 鎵ц浜哄憳鍒楄〃锛堢‘淇濅笉涓� null锛�
+ assignees: (this.selectedStaff && Array.isArray(this.selectedStaff)) ? this.selectedStaff.map(staff => ({
userId: staff.userId,
userName: staff.nickName,
userType: staff.type
- })),
- emergencyInfo: {
- patientContact: this.taskForm.patient.contact,
- patientPhone: this.taskForm.patient.phone,
- patientName: this.taskForm.patient.name,
- patientGender: this.taskForm.patient.gender,
- patientIdCard: this.taskForm.patient.idCard,
- patientCondition: conditionText, // 浣跨敤鍚堝苟鍚庣殑鐥呮儏淇℃伅
- hospitalOutName: this.taskForm.hospitalOut.name,
- hospitalOutDepartment: this.taskForm.hospitalOut.department,
- hospitalOutBedNumber: this.taskForm.hospitalOut.bedNumber,
- hospitalOutAddress: this.taskForm.hospitalOut.address,
- // 杞嚭鍖婚櫌GPS鍧愭爣锛堜繚瀛樺埌鎵╁睍琛級
- hospitalOutLongitude: this.addressCoordinates.hospitalOutAddress ? this.addressCoordinates.hospitalOutAddress.lng : null,
- hospitalOutLatitude: this.addressCoordinates.hospitalOutAddress ? this.addressCoordinates.hospitalOutAddress.lat : null,
- hospitalInName: this.taskForm.hospitalIn.name,
- hospitalInDepartment: this.taskForm.hospitalIn.department,
- hospitalInBedNumber: this.taskForm.hospitalIn.bedNumber,
- hospitalInAddress: this.taskForm.hospitalIn.address,
- // 杞叆鍖婚櫌GPS鍧愭爣锛堜繚瀛樺埌鎵╁睍琛級
- hospitalInLongitude: this.addressCoordinates.hospitalInAddress ? this.addressCoordinates.hospitalInAddress.lng : null,
- hospitalInLatitude: this.addressCoordinates.hospitalInAddress ? this.addressCoordinates.hospitalInAddress.lat : null,
- transferDistance: this.taskForm.transferDistance ? parseFloat(this.taskForm.transferDistance) : null,
- transferPrice: this.taskForm.price ? parseFloat(this.taskForm.price) : null,
+ })) : [],
+
+ // 鎮h�呬俊鎭紙宓屽瀵硅薄锛�
+ patient: {
+ contact: this.taskForm.patient.contact,
+ phone: this.taskForm.patient.phone,
+ name: this.taskForm.patient.name,
+ gender: this.taskForm.patient.gender,
+ idCard: this.taskForm.patient.idCard,
+ condition: conditionText, // 浣跨敤鍚堝苟鍚庣殑鐥呮儏淇℃伅
// 鐥呮儏璇︾粏淇℃伅锛堣繃婊ゆ帀绌虹殑鐥呮儏鍚嶇О锛�
diseases: this.selectedDiseases
.filter(d => d.icdName && d.icdName.trim())
@@ -958,16 +1050,32 @@
icdCode: d.icdCode,
icdName: d.icdName
}))
+ },
+
+ // 杞嚭鍖婚櫌淇℃伅锛堝祵濂楀璞★級
+ hospitalOut: {
+ id: this.taskForm.hospitalOut.id,
+ name: this.taskForm.hospitalOut.name,
+ address: this.taskForm.hospitalOut.address,
+ longitude: this.addressCoordinates.hospitalOutAddress ? this.addressCoordinates.hospitalOutAddress.lng : null,
+ latitude: this.addressCoordinates.hospitalOutAddress ? this.addressCoordinates.hospitalOutAddress.lat : null,
+ department: this.taskForm.hospitalOut.department,
+ departmentId: this.taskForm.hospitalOut.departmentId,
+ bedNumber: this.taskForm.hospitalOut.bedNumber
+ },
+
+ // 杞叆鍖婚櫌淇℃伅锛堝祵濂楀璞★級
+ hospitalIn: {
+ id: this.taskForm.hospitalIn.id,
+ name: this.taskForm.hospitalIn.name,
+ address: this.taskForm.hospitalIn.address,
+ longitude: this.addressCoordinates.hospitalInAddress ? this.addressCoordinates.hospitalInAddress.lng : null,
+ latitude: this.addressCoordinates.hospitalInAddress ? this.addressCoordinates.hospitalInAddress.lat : null,
+ department: this.taskForm.hospitalIn.department,
+ departmentId: this.taskForm.hospitalIn.departmentId,
+ bedNumber: this.taskForm.hospitalIn.bedNumber
}
}
-
- // 鍑哄彂鍦癎PS鍧愭爣
- if (this.departureLongitude && this.departureLatitude) {
- submitData.departureLongitude = this.departureLongitude
- submitData.departureLatitude = this.departureLatitude
- }
-
- // 鐩爣鍦癎PS鍧愭爣鐢卞悗绔嚜鍔ㄨ幏鍙�
return submitData
},
--
Gitblit v1.9.1