From c82de83c4f74842537ea32ec53e08642f1cc80d1 Mon Sep 17 00:00:00 2001 From: leiyun Date: Mon, 1 Jun 2026 23:08:40 +0800 Subject: [PATCH] =?UTF-8?q?feat=20:=20=E6=96=B0=E5=A2=9E=E5=8C=BB=E9=99=A2?= =?UTF-8?q?=E5=9F=8E=E5=B8=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hospital-picker/hospital-picker.vue | 289 ++++++++++++++++++ config/env.js | 4 +- pages/myinfo/myinfo.vue | 191 +++--------- 3 files changed, 328 insertions(+), 156 deletions(-) create mode 100644 components/hospital-picker/hospital-picker.vue diff --git a/components/hospital-picker/hospital-picker.vue b/components/hospital-picker/hospital-picker.vue new file mode 100644 index 0000000..5b3abe5 --- /dev/null +++ b/components/hospital-picker/hospital-picker.vue @@ -0,0 +1,289 @@ + + + + + diff --git a/config/env.js b/config/env.js index 43c7ad5..c98ce7b 100644 --- a/config/env.js +++ b/config/env.js @@ -1,8 +1,8 @@ const envConf = { // 开发版-本地环境 develop: { - // BASE_URL: 'http://192.168.10.8:8361', - BASE_URL: 'https://cytx.csybhelp.com', + BASE_URL: 'http://192.168.10.8:8361', + // BASE_URL: 'https://cytx.csybhelp.com', }, // 体验版-测试环境 trial: { diff --git a/pages/myinfo/myinfo.vue b/pages/myinfo/myinfo.vue index 90a7161..8aeab59 100644 --- a/pages/myinfo/myinfo.vue +++ b/pages/myinfo/myinfo.vue @@ -51,12 +51,10 @@ 医院名称 - - - {{ form.hospital || '请选择医院' }} + + {{ form.hospital || '请选择就诊医院' }} - 癌种 @@ -154,42 +152,8 @@ - - - - 选择医院 - - - - - - {{ item.name }} - - - - 没有找到相关医院 - - - - 找不到医院?手动填写 - - - - - - - - - 手动填写医院 - - - - - - - - - + + @@ -218,6 +182,9 @@ const form = reactive({ district_code: '', address: '', hospital: '', + hospital_province_code: '', + hospital_city_code: '', + hospital_district_code: '', emergency_contact: '', emergency_phone: '', tag: '', @@ -236,51 +203,30 @@ const agreed = ref(false) // 瘤种选项 const tagOptions = ref([]) -const showReturnRegionPicker = ref(false) -const returnRegionDefaultIndex = ref([0, 0, 0]) - -// 医院选项 -const hospitalOptions = ref([]) -const showHospitalPopup = ref(false) -const hospitalKeywords = ref('') -const showManualHospital = ref(false) -const manualHospitalName = ref('') - -const filteredHospitals = computed(() => { - const kw = hospitalKeywords.value.trim() - if (!kw) return hospitalOptions.value - return hospitalOptions.value.filter(h => h.name.includes(kw)) -}) -const openHospitalPopup = () => { - hospitalKeywords.value = '' - showHospitalPopup.value = true -} - -const searchHospital = () => { - // 本地过滤,filteredHospitals 自动响应 -} - -const onSelectHospital = (item) => { - form.hospital = item.name - showHospitalPopup.value = false -} - -const manualInputHospital = () => { - // 关闭搜索弹窗,打开手动输入弹窗,带入搜索框内容 - manualHospitalName.value = hospitalKeywords.value.trim() - showHospitalPopup.value = false - showManualHospital.value = true -} +// 医院选择器 +const hospitalTree = ref([]) +const hospitalPickerRef = ref(null) -const confirmManualHospital = () => { - const name = manualHospitalName.value.trim() - if (!name) { - uni.showToast({ title: '请输入医院名称', icon: 'none' }) +const openHospitalPicker = () => { + if (!hospitalTree.value.length) { + uni.showToast({ title: '医院列表加载中,请稍候', icon: 'none' }) + loadHospitalTree() return } - form.hospital = name - showManualHospital.value = false + hospitalPickerRef.value && hospitalPickerRef.value.open({ + hospital: form.hospital, + province_code: form.hospital_province_code, + city_code: form.hospital_city_code, + district_code: form.hospital_district_code + }) +} + +const onHospitalConfirm = (data) => { + form.hospital = data.hospitalName || '' + form.hospital_province_code = data.province_code || '' + form.hospital_city_code = data.city_code || '' + form.hospital_district_code = data.district_code || '' } // 签署时的额外信息(用于重签回显) @@ -407,7 +353,7 @@ onLoad(async () => { await loadInfo() loadSubscribeConfig() loadTagOptions() - loadHospitals() + loadHospitalTree() }) onBeforeUnmount(() => { @@ -496,6 +442,9 @@ const loadInfo = async () => { form.district_code = res.data.district_code || '' form.address = res.data.address || '' form.hospital = res.data.hospital || '' + form.hospital_province_code = res.data.hospital_province_code || '' + form.hospital_city_code = res.data.hospital_city_code || '' + form.hospital_district_code = res.data.hospital_district_code || '' form.emergency_contact = res.data.emergency_contact || '' form.emergency_phone = res.data.emergency_phone || '' form.tag = res.data.tag || '' @@ -532,10 +481,10 @@ const loadTagOptions = async () => { } catch (e) {} } -const loadHospitals = async () => { +const loadHospitalTree = async () => { try { - const res = await get('/common/hospitals') - hospitalOptions.value = res.data || [] + const res = await get('/common/hospitalTree') + hospitalTree.value = res.data || [] } catch (e) {} } @@ -628,6 +577,9 @@ const doSubmit = async () => { district_code: form.district_code, address: form.address.trim(), hospital: form.hospital, + hospital_province_code: form.hospital_province_code, + hospital_city_code: form.hospital_city_code, + hospital_district_code: form.hospital_district_code, emergency_contact: form.emergency_contact, emergency_phone: form.emergency_phone, tag: form.tag, @@ -984,73 +936,4 @@ const doSubmit = async () => { gap: 24rpx; } -.hospital-popup { - padding: 32rpx; - display: flex; - flex-direction: column; - height: 70vh; -} - -.popup-title { - font-size: 32rpx; - font-weight: 600; - color: #333; - text-align: center; - margin-bottom: 24rpx; -} - -.search-bar { - margin-bottom: 16rpx; -} - -.hospital-list { - flex: 1; - overflow: hidden; -} - -.hospital-item { - display: flex; - align-items: center; - justify-content: space-between; - padding: 28rpx 16rpx; - border-bottom: 1rpx solid #f0f0f0; - font-size: 28rpx; - color: #333; - - &:active { - background: #f5f7fa; - } -} - -.empty-tip { - text-align: center; - padding: 60rpx 0; - font-size: 26rpx; - color: #999; -} - -.add-hospital-link { - display: flex; - align-items: center; - justify-content: center; - gap: 8rpx; - padding: 28rpx 0; - font-size: 28rpx; - color: #0e63e3; - border-top: 1rpx solid #f0f0f0; -} - -.manual-hospital-popup { - padding: 48rpx 40rpx 40rpx; - width: 560rpx; -} - -.manual-input { - margin-bottom: 40rpx; -} - -.manual-btns { - display: flex; - gap: 24rpx; -}