diff --git a/pages/myinfo/myinfo.vue b/pages/myinfo/myinfo.vue
index 8aeab59..5c2ec45 100644
--- a/pages/myinfo/myinfo.vue
+++ b/pages/myinfo/myinfo.vue
@@ -1,5 +1,6 @@
+
@@ -25,33 +26,33 @@
性别
- 男
- 女
+ 男
+ 女
联系地址
-
+
{{ regionText || '请选择省/市/区' }}
›
-
紧急联系人
-
+
-
+
医院名称
-
+
{{ form.hospital || '请选择就诊医院' }}
›
@@ -60,7 +61,7 @@
癌种
+ :disabled="isInfoApproved" activeColor="#0E63E3" :customStyle="{ marginRight: '24rpx', marginBottom: '16rpx' }" />
@@ -75,9 +76,9 @@
- ×
+ ×
-
+
+
上传图片
@@ -97,9 +98,9 @@
查看
- 重签
+ 重签
- 去签署
+ 去签署
@@ -108,9 +109,9 @@
查看
- 重签
+ 重签
- 去签署
+ 去签署
@@ -119,9 +120,9 @@
查看
- 重签
+ 重签
- 去签署
+ 去签署
@@ -130,22 +131,22 @@
查看
- 重签
+ 重签
- 去签署
+ 去签署
-
+
请阅读并同意
《患者告知书》
-
+
@@ -154,18 +155,6 @@
-
-
-
-
-
@@ -196,8 +185,8 @@ const form = reactive({
income_amount: ''
})
const submitting = ref(false)
+const pageLoading = ref(true)
const showRegionPicker = ref(false)
-const showConfirmPopup = ref(false)
const subscribeTmplId = ref('')
const agreed = ref(false)
@@ -208,7 +197,25 @@ const tagOptions = ref([])
const hospitalTree = ref([])
const hospitalPickerRef = ref(null)
+const isInfoApproved = computed(() => Number(info.value.status) === 1)
+const submitButtonText = computed(() => isInfoApproved.value ? '已通过审核' : '提交审核')
+
+const showApprovedTip = () => {
+ uni.showToast({ title: '资料已审核通过,不能修改', icon: 'none' })
+}
+
+const setGender = (gender) => {
+ if (isInfoApproved.value) return showApprovedTip()
+ form.gender = gender
+}
+
+const openRegionPicker = () => {
+ if (isInfoApproved.value) return showApprovedTip()
+ showRegionPicker.value = true
+}
+
const openHospitalPicker = () => {
+ if (isInfoApproved.value) return showApprovedTip()
if (!hospitalTree.value.length) {
uni.showToast({ title: '医院列表加载中,请稍候', icon: 'none' })
loadHospitalTree()
@@ -223,6 +230,7 @@ const openHospitalPicker = () => {
}
const onHospitalConfirm = (data) => {
+ if (isInfoApproved.value) return
form.hospital = data.hospitalName || ''
form.hospital_province_code = data.province_code || ''
form.hospital_city_code = data.city_code || ''
@@ -349,11 +357,18 @@ const onSignResult = (data) => {
onLoad(async () => {
uni.$on('signResult', onSignResult)
- await loadRegions()
- await loadInfo()
- loadSubscribeConfig()
- loadTagOptions()
- loadHospitalTree()
+ pageLoading.value = true
+ try {
+ await loadRegions()
+ await Promise.all([
+ loadInfo(),
+ loadSubscribeConfig(),
+ loadTagOptions(),
+ loadHospitalTree()
+ ])
+ } finally {
+ pageLoading.value = false
+ }
})
onBeforeUnmount(() => {
@@ -361,6 +376,7 @@ onBeforeUnmount(() => {
})
const goSign = (type) => {
+ if (isInfoApproved.value) return showApprovedTip()
let url = `/pages/sign/sign?type=${type}`
if (type === 'income') {
const amt = form.income_amount || signExtra.income_amount || ''
@@ -419,6 +435,10 @@ const onRegionChange = (e) => {
}
const onRegionConfirm = (e) => {
+ if (isInfoApproved.value) {
+ showRegionPicker.value = false
+ return
+ }
const idxs = e.indexs || e.index || [0, 0, 0]
const provinces = allRegions.value
const prov = provinces[idxs[0]]
@@ -489,6 +509,7 @@ const loadHospitalTree = async () => {
}
const chooseDocument = () => {
+ if (isInfoApproved.value) return showApprovedTip()
uni.chooseImage({
count: 9 - form.documents.length,
sizeType: ['compressed'],
@@ -515,6 +536,7 @@ const openNotice = () => {
}
const handleSubmit = async () => {
+ if (isInfoApproved.value) return showApprovedTip()
if (!agreed.value) {
return uni.showToast({ title: '请阅读并同意《患者告知书》', icon: 'none' })
}
@@ -556,16 +578,11 @@ const handleSubmit = async () => {
if (!signedPromise.value) {
return uni.showToast({ title: '请签署声明与承诺', icon: 'none' })
}
- // 已通过状态需要二次确认
- if (info.value.status === 1) {
- showConfirmPopup.value = true
- return
- }
await doSubmit()
}
const doSubmit = async () => {
- showConfirmPopup.value = false
+ if (isInfoApproved.value) return showApprovedTip()
// 先请求订阅消息授权(用户拒绝也继续提交)
await requestSubscribe()
submitting.value = true
@@ -715,6 +732,11 @@ const doSubmit = async () => {
color: #0e63e3;
background: rgba(14, 99, 227, 0.05);
}
+
+ &.disabled {
+ color: #909399;
+ background: #f5f7fa;
+ }
}
.region-row {
@@ -724,6 +746,10 @@ const doSubmit = async () => {
padding: 20rpx 24rpx;
border: 1rpx solid #ddd;
border-radius: 8rpx;
+
+ &.disabled {
+ background: #f5f7fa;
+ }
}
.region-text {
diff --git a/pages/sample-info/sample-info.vue b/pages/sample-info/sample-info.vue
index 028e80b..cd60ecf 100644
--- a/pages/sample-info/sample-info.vue
+++ b/pages/sample-info/sample-info.vue
@@ -1,5 +1,6 @@
+
@@ -141,13 +142,14 @@
-
+
@@ -179,6 +181,7 @@ const form = reactive({
sample_photos: []
})
const submitting = ref(false)
+const pageLoading = ref(true)
const agreed = ref(false)
const sampleTypeList = ref([])
const sampleRequired = ref(false)
@@ -189,6 +192,7 @@ const returnTime = ref('')
const sampleEditReason = ref('')
const sampleEditRejectReason = ref('')
const sampleEditApplyTime = ref('')
+const pendingLockedTip = ref(false)
const applyEditVisible = ref(false)
const applyEditReason = ref('')
const applyEditSubmitting = ref(false)
@@ -310,10 +314,19 @@ const openRegionPicker = () => {
}
onLoad(async () => {
- await loadRegions()
- await loadPatientInfo()
- await loadSampleTypes()
- await loadSubscribeConfig()
+ pageLoading.value = true
+ try {
+ await loadRegions()
+ await loadPatientInfo()
+ await loadSampleTypes()
+ await loadSubscribeConfig()
+ } finally {
+ pageLoading.value = false
+ if (pendingLockedTip.value) {
+ pendingLockedTip.value = false
+ setTimeout(() => showLockedTip(), 100)
+ }
+ }
})
const loadSubscribeConfig = async () => {
@@ -365,9 +378,7 @@ const loadPatientInfo = async () => {
sampleEditRejectReason.value = res.data.sample_edit_reject_reason || ''
sampleEditApplyTime.value = res.data.sample_edit_apply_time || ''
sampleReceiverInfo.value = res.data.sample_receiver_info || { address: '', receiver: '', phone: '', contact_phone: '' }
- if ((sampleInfoStatus.value === 1 && !sampleEditRejectReason.value) || sampleInfoStatus.value === 3) {
- setTimeout(() => showLockedTip(), 300)
- }
+ pendingLockedTip.value = (sampleInfoStatus.value === 1 && !sampleEditRejectReason.value) || sampleInfoStatus.value === 3
}
} catch (e) {}
}
@@ -506,6 +517,10 @@ const showApplyEditDialog = () => {
applyEditVisible.value = true
}
+const closeApplyEditDialog = () => {
+ applyEditVisible.value = false
+}
+
const submitApplyEdit = async () => {
if (!applyEditReason.value.trim()) {
return uni.showToast({ title: '请填写申请原因', icon: 'none' })
@@ -639,9 +654,9 @@ const handleSubmit = async () => {
.agree-row { display: flex; align-items: center; margin-bottom: 16rpx; padding-left: 4rpx; }
.agree-text { font-size: 24rpx; color: #666; margin-left: 8rpx; }
.agree-link { font-size: 24rpx; color: #0e63e3; }
-.apply-popup { width: 620rpx; background: #fff; border-radius: 16rpx; padding: 32rpx; }
+.apply-popup { width: 100%; box-sizing: border-box; background: #fff; border-radius: 24rpx 24rpx 0 0; padding: 36rpx 32rpx 24rpx; }
.apply-title { font-size: 32rpx; font-weight: 600; color: #303133; margin-bottom: 12rpx; }
.apply-desc { font-size: 26rpx; color: #606266; line-height: 1.6; margin-bottom: 20rpx; }
-.apply-textarea { width: 100%; height: 180rpx; box-sizing: border-box; border: 1rpx solid #dcdfe6; border-radius: 8rpx; padding: 20rpx; font-size: 28rpx; color: #303133; background: #fff; }
+.apply-textarea { width: 100%; height: 150rpx; box-sizing: border-box; border: 1rpx solid #dcdfe6; border-radius: 8rpx; padding: 20rpx; font-size: 28rpx; color: #303133; background: #fff; }
.apply-actions { display: flex; gap: 20rpx; margin-top: 24rpx; }