| | |
| | | |
| | | <view class="form-section-title">转出医院信息</view> |
| | | <HospitalSelector |
| | | label="区院名称" |
| | | label="医院名称" |
| | | address-label="转出地址" |
| | | :required="true" |
| | | :show-department="false" |
| | | v-model="taskForm.hospitalOut" |
| | | :dept-id="selectedOrganizationId" |
| | | @change="onHospitalOutChange" |
| | | @address-selected="onHospitalOutAddressSelected" |
| | | /> |
| | | <DepartmentSelector |
| | | label="转出科室" |
| | | :required="true" |
| | | v-model="taskForm.hospitalOut.department" |
| | | :department-id="taskForm.hospitalOut.departmentId" |
| | | :is-home="taskForm.hospitalOut.name === '家中'" |
| | | @change="onHospitalOutDepartmentChange" |
| | | /> |
| | | |
| | | <view class="form-item"> |
| | | <view class="form-label">床号</view> |
| | | <input |
| | | class="form-input" |
| | | placeholder="请输入床号" |
| | | v-model="taskForm.hospitalOut.bedNumber" |
| | | /> |
| | | </view> |
| | | |
| | | <view class="form-section-title">转入医院信息</view> |
| | | <HospitalSelector |
| | | label="医院名称" |
| | | address-label="转入地址" |
| | | :required="true" |
| | | :show-department="false" |
| | | v-model="taskForm.hospitalIn" |
| | | :dept-id="selectedOrganizationId" |
| | | @change="onHospitalInChange" |
| | | @address-selected="onHospitalInAddressSelected" |
| | | /> |
| | | <DepartmentSelector |
| | | label="转入科室" |
| | | :required="true" |
| | | v-model="taskForm.hospitalIn.department" |
| | | :department-id="taskForm.hospitalIn.departmentId" |
| | | :is-home="taskForm.hospitalIn.name === '家中'" |
| | | @change="onHospitalInDepartmentChange" |
| | | /> |
| | | |
| | | <view class="form-item"> |
| | | <view class="form-label">床号</view> |
| | | <input |
| | | class="form-input" |
| | | placeholder="请输入床号" |
| | | v-model="taskForm.hospitalIn.bedNumber" |
| | | /> |
| | | </view> |
| | | |
| | | <view class="form-item"> |
| | | <view class="form-label">转运距离</view> |
| | |
| | | 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 { baiduDistanceByAddress } from "@/api/map" |
| | | import { tiandituDistanceByAddress } from "@/api/map" |
| | | import { calculateTransferPrice } from "@/api/price" |
| | | import MapSelector from './components/map-selector.vue' |
| | | import VehicleSelector from './components/VehicleSelector.vue' |
| | |
| | | import DiseaseSelector from './components/DiseaseSelector.vue' |
| | | import DepartureSelector from './components/DepartureSelector.vue' |
| | | import StaffSelector from './components/StaffSelector.vue' |
| | | import DepartmentSelector from './components/DepartmentSelector.vue' |
| | | import distanceCalculator from '@/mixins/distanceCalculator.js' |
| | | |
| | | export default { |
| | |
| | | HospitalSelector, |
| | | DiseaseSelector, |
| | | DepartureSelector, |
| | | StaffSelector |
| | | StaffSelector, |
| | | DepartmentSelector |
| | | }, |
| | | mixins: [distanceCalculator], |
| | | data() { |
| | |
| | | console.log('转出医院变化:', hospitalData) |
| | | // 组件已经通过 v-model 更新了 taskForm.hospitalOut |
| | | |
| | | // 如果选择的是"家中",自动设置科室为"其它" |
| | | if (hospitalData.name === '家中') { |
| | | this.taskForm.hospitalOut.department = '其它' |
| | | this.taskForm.hospitalOut.departmentId = null |
| | | } |
| | | // 注意:选择新的医院时,不自动更新科室信息,保持用户已选择的科室 |
| | | |
| | | // 如果转入地址已填写,自动计算距离 |
| | | if (this.taskForm.hospitalIn.address) { |
| | | // 如果两个都不是"家中",使用医院距离计算 |
| | |
| | | console.log('转入医院变化:', hospitalData) |
| | | // 组件已经通过 v-model 更新了 taskForm.hospitalIn |
| | | |
| | | // 如果选择的是"家中",自动设置科室为"其它" |
| | | if (hospitalData.name === '家中') { |
| | | this.taskForm.hospitalIn.department = '其它' |
| | | this.taskForm.hospitalIn.departmentId = null |
| | | } |
| | | // 注意:选择新的医院时,不自动更新科室信息,保持用户已选择的科室 |
| | | |
| | | // 如果转出地址已填写,自动计算距离 |
| | | if (this.taskForm.hospitalOut.address) { |
| | | // 如果两个都不是"家中",使用医院距离计算 |
| | |
| | | onHospitalInAddressSelected(data) { |
| | | if (this.taskForm.hospitalOut.address) { |
| | | this.calculateDistanceByManualAddress() |
| | | } |
| | | }, |
| | | |
| | | // 转出科室变化 |
| | | onHospitalOutDepartmentChange(data) { |
| | | console.log('转出科室变化:', data) |
| | | if (data && typeof data === 'object') { |
| | | this.taskForm.hospitalOut.department = data.department |
| | | this.taskForm.hospitalOut.departmentId = data.departmentId |
| | | } else { |
| | | this.taskForm.hospitalOut.department = data |
| | | this.taskForm.hospitalOut.departmentId = null |
| | | } |
| | | }, |
| | | |
| | | // 转入科室变化 |
| | | onHospitalInDepartmentChange(data) { |
| | | console.log('转入科室变化:', data) |
| | | if (data && typeof data === 'object') { |
| | | this.taskForm.hospitalIn.department = data.department |
| | | this.taskForm.hospitalIn.departmentId = data.departmentId |
| | | } else { |
| | | this.taskForm.hospitalIn.department = data |
| | | this.taskForm.hospitalIn.departmentId = null |
| | | } |
| | | }, |
| | | |
| | |
| | | return false |
| | | } |
| | | |
| | | // 验证联系电话格式 |
| | | if (this.taskForm.patient.phone && !/^1[3-9]\d{9}$/.test(this.taskForm.patient.phone)) { |
| | | this.$modal.showToast('请输入正确的手机号码') |
| | | return false |
| | | } |
| | | |
| | | if (!this.taskForm.hospitalOut.name) { |
| | | this.$modal.showToast('请输入转出医院名称') |
| | | return false |
| | |
| | | return false |
| | | } |
| | | |
| | | if (!this.taskForm.hospitalOut.department) { |
| | | this.$modal.showToast('请选择转出科室') |
| | | return false |
| | | } |
| | | |
| | | if (!this.taskForm.hospitalIn.name) { |
| | | this.$modal.showToast('请输入转入医院名称') |
| | | return false |
| | |
| | | |
| | | if (!this.taskForm.hospitalIn.address) { |
| | | this.$modal.showToast('请选择转入医院地址') |
| | | return false |
| | | } |
| | | |
| | | if (!this.taskForm.hospitalIn.department) { |
| | | this.$modal.showToast('请选择转入科室') |
| | | return false |
| | | } |
| | | |
| | | // 验证成交价必填 |
| | | if (!this.taskForm.price || this.taskForm.price.trim() === '') { |
| | | this.$modal.showToast('请输入成交价') |
| | | return false |
| | | } |
| | | |
| | | // 验证成交价格式(必须是数字) |
| | | if (isNaN(this.taskForm.price) || parseFloat(this.taskForm.price) < 0) { |
| | | this.$modal.showToast('请输入有效的成交价') |
| | | return false |
| | | } |
| | | |
| | | // 验证患者身份证格式(如果填写了) |
| | | if (this.taskForm.patient.idCard && this.taskForm.patient.idCard.trim() !== '') { |
| | | const idCard = this.taskForm.patient.idCard.trim() |
| | | // 简单验证18位身份证 |
| | | if (!/^\d{17}[\dXx]$/.test(idCard)) { |
| | | this.$modal.showToast('请输入正确的18位身份证号码') |
| | | return false |
| | | } |
| | | } |
| | | |
| | | // 验证病情至少选择一项或填写其他描述 |
| | | if ((!this.selectedDiseases || this.selectedDiseases.length === 0) && |
| | | (!this.taskForm.patient.otherCondition || this.taskForm.patient.otherCondition.trim() === '')) { |
| | | this.$modal.showToast('请选择病情或填写其他病情描述') |
| | | return false |
| | | } |
| | | |
| | | // 验证执行人员至少选择一个 |
| | | if (!this.selectedStaff || this.selectedStaff.length === 0) { |
| | | this.$modal.showToast('请至少选择一个执行人员') |
| | | return false |
| | | } |
| | | |
| | |
| | | |
| | | // 调用百度地图API计算距离 |
| | | const region = this.selectedRegion || '广州' |
| | | baiduDistanceByAddress(fromAddress, region, toAddress, region) |
| | | //baiduDistanceByAddress(fromAddress, region, toAddress, region) |
| | | tiandituDistanceByAddress(fromAddress,toAddress) |
| | | .then(response => { |
| | | uni.hideLoading() |
| | | |
| | |
| | | } |
| | | } |
| | | } |
| | | } |
| | | </style> |
| | | } |