From 656d6f8029f8bf9b2daa9dcc89101a879a70b860 Mon Sep 17 00:00:00 2001
From: wlzboy <66905212@qq.com>
Date: 星期三, 03 十二月 2025 23:10:05 +0800
Subject: [PATCH] feat:优先添加执行人
---
app/pagesTask/edit-emergency.vue | 618 ++++++++++++++++---------------------------------------
1 files changed, 182 insertions(+), 436 deletions(-)
diff --git a/app/pagesTask/edit-emergency.vue b/app/pagesTask/edit-emergency.vue
index e23f4b5..67c10f4 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
@@ -37,27 +47,14 @@
/>
</view>
- <view class="form-item">
- <view class="form-label">鎵ц浠诲姟浜哄憳</view>
- <view class="staff-list">
- <view class="staff-item" v-for="(staff, index) in selectedStaff" :key="staff.userId">
- <view class="staff-info">
- <text class="staff-name">{{ staff.nickName }}</text>
- <text class="staff-role">({{ getUserTypeName(staff.type) || '鏈煡鑱屼綅' }})</text>
- </view>
- <uni-icons
- type="closeempty"
- size="20"
- color="#ff4d4f"
- @click="removeStaff(index)"
- ></uni-icons>
- </view>
- <view class="add-staff" @click="showStaffSelector">
- <uni-icons type="plusempty" size="20" color="#007AFF"></uni-icons>
- <text>娣诲姞浜哄憳</text>
- </view>
- </view>
- </view>
+ <StaffSelector
+ v-model="selectedStaff"
+ label="鎵ц浠诲姟浜哄憳"
+ :required="false"
+ :auto-add-current-user="false"
+ :current-user-removable="true"
+ @change="onStaffChange"
+ />
<view class="form-section-title">鎮h�呬俊鎭�</view>
<view class="form-item">
@@ -188,80 +185,6 @@
></map-selector>
</view>
</uni-popup>
-
- <!-- 浜哄憳閫夋嫨鍣ㄥ脊绐� -->
- <uni-popup ref="staffPopup" type="bottom" :mask-click="false">
- <view class="staff-popup-container">
- <view class="popup-header">
- <view class="popup-title">閫夋嫨鎵ц浜哄憳</view>
- <view class="close-btn" @click="closeStaffSelector">
- <uni-icons type="closeempty" size="20" color="#999"></uni-icons>
- </view>
- </view>
-
- <view class="search-bar">
- <input
- class="search-input"
- placeholder="鎼滅储濮撳悕鎴栫數璇�"
- v-model="staffSearchKeyword"
- @input="onStaffSearch"
- />
- </view>
-
- <view class="filter-tabs">
- <view
- class="filter-tab"
- :class="{ active: staffFilterType === 'driver' }"
- @click="filterStaff('driver')"
- >
- 鍙告満
- </view>
- <view
- class="filter-tab"
- :class="{ active: staffFilterType === 'doctor' }"
- @click="filterStaff('doctor')"
- >
- 鍖荤敓
- </view>
- <view
- class="filter-tab"
- :class="{ active: staffFilterType === 'nurse' }"
- @click="filterStaff('nurse')"
- >
- 鎶ゅ+
- </view>
- </view>
-
- <scroll-view class="staff-list-scroll" scroll-y="true">
- <view
- class="staff-list-item"
- v-for="staff in filteredStaffList"
- :key="staff.userId"
- @click="toggleStaffSelection(staff)"
- >
- <view class="staff-item-info">
- <text class="staff-item-name">{{ staff.nickName }}</text>
- <text class="staff-item-dept">{{ staff.deptName }}</text>
- </view>
- <view class="staff-item-check">
- <uni-icons
- v-if="isStaffSelected(staff.userId)"
- type="checkmarkempty"
- size="24"
- color="#007AFF"
- ></uni-icons>
- </view>
- </view>
- <view v-if="filteredStaffList.length === 0" class="empty-tip">
- 鏆傛棤浜哄憳鏁版嵁
- </view>
- </scroll-view>
-
- <view class="popup-footer">
- <button class="confirm-btn" @click="confirmStaffSelection">纭畾(宸查�墈{ selectedStaff.length }})</button>
- </view>
- </view>
- </uni-popup>
</scroll-view>
</template>
@@ -270,7 +193,6 @@
import uniDatetimePicker from '@/uni_modules/uni-datetime-picker/components/uni-datetime-picker/uni-datetime-picker.vue'
import uniPopup from '@/uni_modules/uni-popup/components/uni-popup/uni-popup.vue'
import { getTask, updateTask } from "@/api/task"
-import { listBranchUsers } from "@/api/system/user"
import { baiduDistanceByAddress } from "@/api/map"
import { calculateTransferPrice } from "@/api/price"
import MapSelector from './components/map-selector.vue'
@@ -278,6 +200,8 @@
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 StaffSelector from './components/StaffSelector.vue'
import distanceCalculator from '@/mixins/distanceCalculator.js'
export default {
@@ -288,7 +212,9 @@
VehicleSelector,
OrganizationSelector,
HospitalSelector,
- DiseaseSelector
+ DiseaseSelector,
+ DepartureSelector,
+ StaffSelector
},
mixins: [distanceCalculator],
data() {
@@ -300,16 +226,19 @@
selectedOrganizationId: null,
selectedRegion: '',
mapSelectorType: '',
+ // 鎵╁睍 addressCoordinates 鏀寔澶氱閿悕
+ addressCoordinates: {
+ start: null,
+ end: null,
+ hospitalOutAddress: null,
+ hospitalInAddress: null
+ },
// 鍑哄彂鍦颁俊鎭�
departureAddress: '',
departureLongitude: null,
departureLatitude: null,
- selectedDiseases: [], // 宸查�夋嫨鐨勭梾鎯呭垪琛�
- selectedStaff: [], // 宸查�夋嫨鐨勪汉鍛樺垪琛�
- allStaffList: [], // 鎵�鏈変汉鍛樺垪琛�
- filteredStaffList: [], // 杩囨护鍚庣殑浜哄憳鍒楄〃
- staffSearchKeyword: '', // 浜哄憳鎼滅储鍏抽敭璇�
- staffFilterType: 'driver', // 浜哄憳绛涢�夌被鍨�
+ selectedDiseases: [], // 宸查�夋嫨鐨勭梾鎯呭垪琛紙纭繚鍒濆鍖栦负绌烘暟缁勶級
+ selectedStaff: [], // 宸查�夋嫨鐨勪汉鍛樺垪琛紙纭繚鍒濆鍖栦负绌烘暟缁勶級
taskForm: {
transferTime: '',
patient: {
@@ -356,7 +285,6 @@
if (options.id) {
this.taskId = options.id
this.loadTaskDetail()
- this.loadDeptStaff() // 鍔犺浇浜哄憳鍒楄〃
} else {
this.$modal.showToast('浠诲姟ID涓嶈兘涓虹┖')
setTimeout(() => {
@@ -403,8 +331,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 +417,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 +431,8 @@
} else {
console.warn('浠诲姟娌℃湁鍒嗛厤鎵ц浜哄憳鎴朼ssignees涓虹┖')
console.log('taskDetail.assignees:', this.taskDetail.assignees)
+ // 纭繚 selectedStaff 鍒濆鍖栦负绌烘暟缁�
+ this.selectedStaff = []
}
console.log('琛ㄥ崟鏁版嵁濉厖瀹屾垚:', this.taskForm)
@@ -523,9 +453,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
},
// 杞嚭鍖婚櫌鍙樺寲
@@ -582,211 +536,107 @@
// 缁勪欢宸茬粡閫氳繃 v-model 鏇存柊浜� selectedDiseases
},
- // 鍔犺浇褰撳墠鐢ㄦ埛鎵�鍦ㄥ垎鍏徃鐨勬墍鏈変汉鍛�
- loadDeptStaff() {
- console.log('寮�濮嬪姞杞戒汉鍛樺垪琛�')
+ // 浜哄憳鍙樺寲
+ onStaffChange(staff) {
+ console.log('閫変腑浜哄憳鍙樺寲:', staff)
+ // 缁勪欢宸茬粡閫氳繃 v-model 鏇存柊浜� selectedStaff
+ },
+
+ // 瑙f瀽鐥呮儏淇℃伅锛堜粠瀛楃涓茶В鏋愬嚭ICD-10鐤剧梾鍒楄〃锛�- 淇锛氫笌鍒涘缓鐣岄潰淇濇寔涓�鑷�
+ parseDiseaseInfo(conditionText, diseases) {
+ console.log('========== 寮�濮嬭В鏋愮梾鎯呬俊鎭� ==========')
+ console.log('conditionText:', conditionText)
+ console.log('diseases鏁扮粍:', diseases)
- listBranchUsers().then(response => {
- console.log('浜哄憳鍒楄〃API鍝嶅簲:', response)
- const userList = response.data || []
- console.log('瑙f瀽鍑虹殑鐢ㄦ埛鍒楄〃:', userList, '鏁伴噺:', userList.length)
-
- this.allStaffList = userList.map(user => ({
- userId: user.userId,
- nickName: user.nickName,
- phonenumber: user.phonenumber,
- deptName: user.dept?.deptName || '',
- postName: user.posts && user.posts.length > 0 ? user.posts[0].postName : '',
- roleName: user.roles && user.roles.length > 0 ? user.roles[0].roleName : '',
- type: this.getUserType(user)
- }))
-
- console.log('澶勭悊鍚庣殑浜哄憳鍒楄〃:', this.allStaffList, '鏁伴噺:', this.allStaffList.length)
-
- this.filterStaffList()
- }).catch(error => {
- console.error('鍔犺浇浜哄憳鍒楄〃澶辫触:', error)
- this.$modal.showToast('鍔犺浇浜哄憳鍒楄〃澶辫触')
- })
- },
-
- // 鏍规嵁鐢ㄦ埛鐨勫矖浣嶆垨瑙掕壊鍒ゆ柇绫诲瀷
- getUserType(user) {
- const postName = user.posts && user.posts.length > 0 ? user.posts[0].postName : ''
- const roleName = user.roles && user.roles.length > 0 ? user.roles[0].roleName : ''
- const deptName = user.dept?.deptName || ''
-
- if (postName.includes('鍙告満') || roleName.includes('鍙告満') || deptName.includes('杞﹂槦') || deptName.includes('鍙告満')) {
- return 'driver'
- }
- if (postName.includes('鎶ゅ+') || roleName.includes('鎶ゅ+') || deptName.includes('鎶ゅ+')) {
- return 'nurse'
- }
- if (postName.includes('鍖荤敓') || roleName.includes('鍖荤敓') || deptName.includes('鍖荤敓')) {
- return 'doctor'
- }
- if (deptName.includes('鍖绘姢')) {
- return 'doctor'
- }
-
- return 'driver'
- },
-
- getUserTypeName(staffType) {
- switch(staffType) {
- case 'nurse':
- return '鎶ゅ+'
- case 'doctor':
- return '鍖荤敓'
- case 'driver':
- return '鍙告満'
- default:
- return '鍙告満'
- }
- },
-
- // 鏄剧ず浜哄憳閫夋嫨寮圭獥
- showStaffSelector() {
- this.$refs.staffPopup.open()
- this.filterStaffList()
- },
-
- // 鍏抽棴浜哄憳閫夋嫨寮圭獥
- closeStaffSelector() {
- this.$refs.staffPopup.close()
- this.staffSearchKeyword = ''
- this.staffFilterType = 'driver'
- },
-
- // 浜哄憳鎼滅储
- onStaffSearch(e) {
- this.staffSearchKeyword = e.detail.value
- this.filterStaffList()
- },
-
- // 绛涢�変汉鍛樼被鍨�
- filterStaff(type) {
- this.staffFilterType = type
- this.filterStaffList()
- },
-
- // 杩囨护浜哄憳鍒楄〃
- filterStaffList() {
- console.log('寮�濮嬭繃婊や汉鍛樺垪琛紝鍘熷鏁伴噺:', this.allStaffList.length)
- let list = [...this.allStaffList]
-
- // 鎸夌被鍨嬭繃婊�
- if (this.staffFilterType === 'driver') {
- list = list.filter(staff => staff.type === 'driver')
- } else if (this.staffFilterType === 'doctor') {
- list = list.filter(staff => staff.type === 'doctor')
- } else if (this.staffFilterType === 'nurse') {
- list = list.filter(staff => staff.type === 'nurse')
- }
-
- console.log('鎸夌被鍨嬭繃婊ゅ悗:', this.staffFilterType, '鏁伴噺:', list.length)
-
- // 鎸夊叧閿瘝鎼滅储
- if (this.staffSearchKeyword && this.staffSearchKeyword.trim() !== '') {
- const keyword = this.staffSearchKeyword.trim().toLowerCase()
- list = list.filter(staff => {
- return staff.nickName.toLowerCase().includes(keyword) ||
- (staff.phonenumber && staff.phonenumber.includes(keyword))
- })
- }
-
- console.log('鎸夊叧閿瘝杩囨护鍚庯紝鏁伴噺:', list.length)
-
- this.filteredStaffList = list
- },
-
- // 鍒囨崲浜哄憳閫変腑鐘舵��
- toggleStaffSelection(staff) {
- const index = this.selectedStaff.findIndex(s => s.userId === staff.userId)
-
- if (index > -1) {
- // 宸查�変腑锛岀Щ闄�
- this.selectedStaff.splice(index, 1)
- } else {
- // 鏈�変腑锛屾坊鍔�
- this.selectedStaff.push(staff)
- }
- },
-
- // 鍒ゆ柇浜哄憳鏄惁宸查�変腑
- isStaffSelected(userId) {
- return this.selectedStaff.some(staff => staff.userId === userId)
- },
-
- // 纭浜哄憳閫夋嫨
- confirmStaffSelection() {
- if (this.selectedStaff.length === 0) {
- this.$modal.showToast('璇疯嚦灏戦�夋嫨涓�鍚嶄汉鍛�')
- return
- }
- this.closeStaffSelector()
- },
-
- // 绉婚櫎浜哄憳
- removeStaff(index) {
- this.selectedStaff.splice(index, 1)
- },
-
- // 瑙f瀽鐥呮儏淇℃伅锛堜粠瀛楃涓茶В鏋愬嚭ICD-10鐤剧梾鍒楄〃锛�
- parseDiseaseInfo(conditionText, diseaseIds) {
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 +739,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 +767,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 +815,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
},
@@ -1343,133 +1216,6 @@
display: flex;
align-items: center;
justify-content: center;
- }
- }
- }
-
- .staff-popup-container {
- height: 80vh;
- background-color: white;
- border-top-left-radius: 20rpx;
- border-top-right-radius: 20rpx;
- display: flex;
- flex-direction: column;
-
- .popup-header {
- display: flex;
- justify-content: space-between;
- align-items: center;
- padding: 20rpx 30rpx;
- border-bottom: 1rpx solid #f0f0f0;
-
- .popup-title {
- font-size: 32rpx;
- font-weight: bold;
- color: #333;
- }
-
- .close-btn {
- width: 50rpx;
- height: 50rpx;
- display: flex;
- align-items: center;
- justify-content: center;
- }
- }
-
- .search-bar {
- padding: 20rpx 30rpx;
- border-bottom: 1rpx solid #f0f0f0;
-
- .search-input {
- height: 70rpx;
- padding: 0 20rpx;
- background-color: #f5f5f5;
- border-radius: 10rpx;
- font-size: 28rpx;
- }
- }
-
- .filter-tabs {
- display: flex;
- padding: 20rpx 30rpx;
- gap: 20rpx;
- border-bottom: 1rpx solid #f0f0f0;
-
- .filter-tab {
- flex: 1;
- height: 60rpx;
- line-height: 60rpx;
- text-align: center;
- background-color: #f5f5f5;
- border-radius: 10rpx;
- font-size: 28rpx;
- color: #666;
-
- &.active {
- background-color: #007AFF;
- color: white;
- }
- }
- }
-
- .staff-list-scroll {
- flex: 1;
- padding: 20rpx 30rpx;
-
- .staff-list-item {
- display: flex;
- justify-content: space-between;
- align-items: center;
- padding: 20rpx;
- margin-bottom: 15rpx;
- background-color: #f8f8f8;
- border-radius: 10rpx;
-
- .staff-item-info {
- flex: 1;
-
- .staff-item-name {
- display: block;
- font-size: 30rpx;
- color: #333;
- margin-bottom: 8rpx;
- }
-
- .staff-item-dept {
- display: block;
- font-size: 24rpx;
- color: #999;
- }
- }
-
- .staff-item-check {
- width: 50rpx;
- display: flex;
- align-items: center;
- justify-content: center;
- }
- }
-
- .empty-tip {
- text-align: center;
- padding: 100rpx 0;
- color: #999;
- font-size: 28rpx;
- }
- }
-
- .popup-footer {
- padding: 20rpx 30rpx;
- border-top: 1rpx solid #f0f0f0;
-
- .confirm-btn {
- width: 100%;
- height: 80rpx;
- background-color: #007AFF;
- color: white;
- border-radius: 10rpx;
- font-size: 32rpx;
}
}
}
--
Gitblit v1.9.1