From 8a709c8ae2929ba733efb52b741f80ac9e5d5d0d Mon Sep 17 00:00:00 2001 From: leiyun Date: Fri, 29 May 2026 14:36:11 +0800 Subject: [PATCH] =?UTF-8?q?fix=20=EF=BC=9A=20=E6=96=B0=E5=A2=9E=E9=80=81?= =?UTF-8?q?=E6=A3=80=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages.json | 7 + pages/myinfo/myinfo.vue | 240 +------------------ pages/profile/profile.vue | 16 ++ pages/sample-info/sample-info.vue | 383 ++++++++++++++++++++++++++++++ 4 files changed, 407 insertions(+), 239 deletions(-) create mode 100644 pages/sample-info/sample-info.vue diff --git a/pages.json b/pages.json index 1638727..0c0d1f0 100644 --- a/pages.json +++ b/pages.json @@ -48,6 +48,13 @@ "navigationBarTitleText": "我的资料" } }, + { + "path": "pages/sample-info/sample-info", + "style": { + "navigationStyle": "default", + "navigationBarTitleText": "送检信息" + } + }, { "path": "pages/sign/sign", "style": { diff --git a/pages/myinfo/myinfo.vue b/pages/myinfo/myinfo.vue index 845bc2f..bc00ca0 100644 --- a/pages/myinfo/myinfo.vue +++ b/pages/myinfo/myinfo.vue @@ -49,14 +49,6 @@ - - - - - - - 情况描述 - 医院名称 @@ -68,66 +60,6 @@ activeColor="#0E63E3" :customStyle="{ marginRight: '24rpx', marginBottom: '16rpx' }" /> - - 送检样本类型{{ sampleRequired ? '' : '(选填)' }} - - - - - - {{ needReturnNames }}是否需寄回 - - - - - - - - @@ -217,10 +149,6 @@ - - - @@ -252,17 +180,6 @@ const form = reactive({ emergency_phone: '', tag: '', documents: [], - sample_types: [], - wax_return: 0, - return_name: '', - return_phone: '', - return_province_code: '', - return_city_code: '', - return_district_code: '', - return_address: '', - report_email: '', - sample_tracking_no: '', - sample_photos: [], sign_income: '', sign_privacy: '', sign_privacy_jhr: '', @@ -275,75 +192,11 @@ const showConfirmPopup = ref(false) const subscribeTmplId = ref('') const agreed = ref(false) -// 瘤种选项和送检样本类型 +// 瘤种选项 const tagOptions = ref([]) -const sampleTypeList = ref([]) -const sampleRequired = ref(false) const showReturnRegionPicker = ref(false) const returnRegionDefaultIndex = ref([0, 0, 0]) -// 是否显示"是否需寄回" -const showWaxReturn = computed(() => { - if (!form.sample_types || !form.sample_types.length) return false - return form.sample_types.some(name => { - const st = sampleTypeList.value.find(s => s.name === name) - return st && st.need_return - }) -}) - -// 需要寄回的样本类型名称(用"、"分隔) -const needReturnNames = computed(() => { - if (!form.sample_types || !form.sample_types.length) return '' - const names = form.sample_types.filter(name => { - const st = sampleTypeList.value.find(s => s.name === name) - return st && st.need_return - }) - return names.join('、') -}) - -// 寄回地址文本 -const returnRegionText = computed(() => { - const parts = [] - if (form.return_province_code) { - const p = allRegions.value.find(r => r.code === form.return_province_code) - if (p) parts.push(p.name) - } - if (form.return_city_code) { - const prov = allRegions.value.find(r => r.code === form.return_province_code) - if (prov && prov.children) { - const c = prov.children.find(r => r.code === form.return_city_code) - if (c) parts.push(c.name) - } - } - if (form.return_district_code) { - const prov = allRegions.value.find(r => r.code === form.return_province_code) - if (prov && prov.children) { - const city = prov.children.find(r => r.code === form.return_city_code) - if (city && city.children) { - const d = city.children.find(r => r.code === form.return_district_code) - if (d) parts.push(d.name) - } - } - } - return parts.join(' ') -}) - -const onSampleTypesChange = () => { - // 如果取消了所有 need_return 的样本类型,重置寄回选项 - if (!showWaxReturn.value) { - form.wax_return = 0 - } -} - -const fillSelfReturn = () => { - form.return_name = info.value.name || '' - form.return_phone = info.value.phone || '' - form.return_province_code = form.province_code - form.return_city_code = form.city_code - form.return_district_code = form.district_code - form.return_address = form.address -} - // 签署时的额外信息(用于重签回显) const signExtra = reactive({ income_amount: '', @@ -468,7 +321,6 @@ onLoad(async () => { await loadInfo() loadSubscribeConfig() loadTagOptions() - loadSampleTypes() }) onBeforeUnmount(() => { @@ -561,17 +413,6 @@ const loadInfo = async () => { form.emergency_phone = res.data.emergency_phone || '' form.tag = res.data.tag || '' form.documents = res.data.documents || [] - form.sample_types = res.data.sample_types || [] - form.wax_return = res.data.wax_return || 0 - form.return_name = res.data.return_name || '' - form.return_phone = res.data.return_phone || '' - form.return_province_code = res.data.return_province_code || '' - form.return_city_code = res.data.return_city_code || '' - form.return_district_code = res.data.return_district_code || '' - form.return_address = res.data.return_address || '' - form.report_email = res.data.report_email || '' - form.sample_tracking_no = res.data.sample_tracking_no || '' - form.sample_photos = res.data.sample_photos || [] form.sign_income = res.data.sign_income || '' form.sign_privacy = res.data.sign_privacy || '' form.sign_privacy_jhr = res.data.sign_privacy_jhr || '' @@ -604,48 +445,6 @@ const loadTagOptions = async () => { } catch (e) {} } -const loadSampleTypes = async () => { - try { - const res = await get('/common/sampleTypes') - sampleTypeList.value = (res.data && res.data.list) || [] - sampleRequired.value = (res.data && res.data.required) || false - } catch (e) {} -} - -const chooseSamplePhoto = () => { - uni.chooseImage({ - count: 9 - form.sample_photos.length, - sizeType: ['compressed'], - sourceType: ['album', 'camera'], - success: async (res) => { - for (const filePath of res.tempFilePaths) { - try { - const uploadRes = await upload('/api/mp/upload', { filePath, name: 'file' }) - if (uploadRes.data && uploadRes.data.url) { - form.sample_photos.push(uploadRes.data.url) - } - } catch (e) {} - } - } - }) -} - -const previewSamplePhoto = (idx) => { - uni.previewImage({ urls: form.sample_photos, current: idx }) -} - -const onReturnRegionConfirm = (e) => { - const idxs = e.indexs || e.index || [0, 0, 0] - const provinces = allRegions.value - const prov = provinces[idxs[0]] - const city = prov && prov.children ? prov.children[idxs[1]] : null - const dist = city && city.children ? city.children[idxs[2]] : null - form.return_province_code = prov ? prov.code : '' - form.return_city_code = city ? city.code : '' - form.return_district_code = dist ? dist.code : '' - showReturnRegionPicker.value = false -} - const chooseDocument = () => { uni.chooseImage({ count: 9 - form.documents.length, @@ -697,23 +496,6 @@ const handleSubmit = async () => { if (!form.tag) { return uni.showToast({ title: '请选择癌种', icon: 'none' }) } - // 送检样本校验 - if (sampleRequired.value && (!form.sample_types || form.sample_types.length === 0)) { - return uni.showToast({ title: '请选择送检样本类型', icon: 'none' }) - } - // 寄回信息校验 - if (form.wax_return === 1 && showWaxReturn.value) { - if (!form.return_name) return uni.showToast({ title: '请输入收件人姓名', icon: 'none' }) - if (!form.return_phone) return uni.showToast({ title: '请输入收件人电话', icon: 'none' }) - if (!form.return_province_code) return uni.showToast({ title: '请选择收件地址', icon: 'none' }) - if (!form.return_address) return uni.showToast({ title: '请输入收件详细地址', icon: 'none' }) - } - // 选了送检样本后,邮箱/物流单号/送检照片必填 - if (form.sample_types && form.sample_types.length > 0) { - if (!form.report_email) return uni.showToast({ title: '请输入报告接收邮箱', icon: 'none' }) - if (!form.sample_tracking_no) return uni.showToast({ title: '请输入送检样本物流单号', icon: 'none' }) - if (!form.sample_photos || form.sample_photos.length === 0) return uni.showToast({ title: '请上传送检单照片', icon: 'none' }) - } // 资料上传校验:至少上传一个 if (!form.documents || form.documents.length === 0) { return uni.showToast({ title: '请至少上传一份检查报告或诊断证明', icon: 'none' }) @@ -756,17 +538,6 @@ const doSubmit = async () => { emergency_phone: form.emergency_phone, tag: form.tag, documents: form.documents, - sample_types: form.sample_types, - wax_return: form.wax_return, - return_name: form.return_name, - return_phone: form.return_phone, - return_province_code: form.return_province_code, - return_city_code: form.return_city_code, - return_district_code: form.return_district_code, - return_address: form.return_address, - report_email: form.report_email, - sample_tracking_no: form.sample_tracking_no, - sample_photos: form.sample_photos, sign_income: form.sign_income, sign_privacy: form.sign_privacy, sign_privacy_jhr: form.sign_privacy_jhr, @@ -863,15 +634,6 @@ const doSubmit = async () => { color: #666; } -.fill-self-btn { - font-size: 24rpx; - color: #0e63e3; - padding: 6rpx 16rpx; - border: 1rpx solid #d0e0ff; - border-radius: 20rpx; - background: #f0f5ff; -} - .form-label { font-size: 28rpx; color: #555; diff --git a/pages/profile/profile.vue b/pages/profile/profile.vue index 22e496e..9b80832 100644 --- a/pages/profile/profile.vue +++ b/pages/profile/profile.vue @@ -38,6 +38,13 @@ 已驳回 + + + + + 送检信息 + + @@ -185,6 +192,15 @@ const goMyInfo = () => { uni.navigateTo({ url: '/pages/myinfo/myinfo' }) } +const goSampleInfo = () => { + if (!checkAuth()) return + if (patientStatus.value !== 1) { + uni.showToast({ title: '审核通过后可填写送检信息', icon: 'none' }) + return + } + uni.navigateTo({ url: '/pages/sample-info/sample-info' }) +} + const goChangePhone = () => { if (!checkAuth()) return uni.navigateTo({ url: '/pages/change-phone/change-phone' }) diff --git a/pages/sample-info/sample-info.vue b/pages/sample-info/sample-info.vue new file mode 100644 index 0000000..999aff4 --- /dev/null +++ b/pages/sample-info/sample-info.vue @@ -0,0 +1,383 @@ + + + + +