From f16e28c7f0645d4cd5092e90ceba9638b160949d Mon Sep 17 00:00:00 2001 From: Jafeng <2998840497@qq.com> Date: Wed, 28 Jan 2026 19:09:20 +0800 Subject: [PATCH 1/6] =?UTF-8?q?feat:=E8=AE=A4=E8=AF=81=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E6=8E=A5=E5=85=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages/case/case.vue | 42 ++++++++++++++++++++++++++++++++++++++---- 1 file changed, 38 insertions(+), 4 deletions(-) diff --git a/pages/case/case.vue b/pages/case/case.vue index 2ca2d57..4802e5b 100644 --- a/pages/case/case.vue +++ b/pages/case/case.vue @@ -163,11 +163,12 @@ const tabs = computed(() => { const isBatchMode = ref(false); const selectedItems = ref([]); // Stores patient phone or unique ID -// 新增流程所需状态(后续接接口替换) +// 新增流程所需状态(认证相关) const managedArchiveCountAllTeams = ref(0); // 在管档案数(所有团队) -const isVerified = ref(true); // 是否已认证 +const verifyStatus = ref(''); // unverified | verifying | verified | failed +const isVerified = ref(false); // 是否已认证 const hasVerifyFailedHistory = ref(false); // 是否有历史认证失败 -const verifyFailedReason = ref('资料不完整,请补充营业执照/资质证明后重新提交。'); +const verifyFailedReason = ref(''); const DETAIL_STORAGE_KEY = 'ykt_case_archive_detail'; const CURRENT_TEAM_STORAGE_KEY = 'ykt_case_current_team'; @@ -220,6 +221,29 @@ function getTeamId() { return String(currentTeam.value?.teamId || '') || ''; } +function applyVerifyStatus(status, reason) { + verifyStatus.value = status || ''; + isVerified.value = verifyStatus.value === 'verified'; + hasVerifyFailedHistory.value = verifyStatus.value === 'failed'; + verifyFailedReason.value = hasVerifyFailedHistory.value ? (reason || '') : ''; +} + +async function refreshVerifyStatus() { + const corpId = String(account.value?.corpId || doctorInfo.value?.corpId || getCorpId() || ''); + const weChatOpenId = String(account.value?.openid || account.value?.openId || ''); + const id = String(doctorInfo.value?._id || doctorInfo.value?.id || ''); + if (!corpId || !weChatOpenId || !id) { + applyVerifyStatus(String(doctorInfo.value?.verifyStatus || ''), ''); + return; + } + const res = await api('getMemberVerifyStatus', { corpId, weChatOpenId, id }); + if (res && res.success) { + applyVerifyStatus(String(res.data?.verifyStatus || ''), String(res.data?.reason || '')); + return; + } + applyVerifyStatus(String(doctorInfo.value?.verifyStatus || ''), ''); +} + function sortGroupList(list) { const { orderList, corpList, restList } = (Array.isArray(list) ? list : []).reduce( (p, c) => { @@ -574,6 +598,10 @@ const handleCreate = () => { // 未认证 + 达到10上限:提示去认证 if (!isVerified.value && managedArchiveCountAllTeams.value >= 10) { + if (verifyStatus.value === 'verifying') { + toast('信息认证中,请耐心等待!'); + return; + } uni.showModal({ title: '提示', content: '当前管理档案数已达上限 10 个,完成认证即可升级至 100 个。', @@ -603,6 +631,10 @@ const handleCreate = () => { // 新增流程:认证分支 const startVerifyFlow = () => { + if (verifyStatus.value === 'verifying') { + toast('信息认证中,请耐心等待!'); + return; + } // 有历史失败记录 -> 展示失败原因 & 重新认证 if (hasVerifyFailedHistory.value) { uni.showModal({ @@ -625,7 +657,7 @@ const startVerifyFlow = () => { // ===== 预留入口(后续对接真实页面/接口) ===== const openVerifyEntry = () => { - uni.showToast({ title: '认证功能待接入', icon: 'none' }); + uni.navigateTo({ url: '/pages/work/profile?type=cert' }); }; const openAddCustomerServiceEntry = () => { @@ -717,6 +749,7 @@ onLoad(async () => { await loadGroups(); await reload(true); } + await refreshVerifyStatus(); }); onShow(async () => { @@ -737,6 +770,7 @@ onShow(async () => { } else { await loadGroups(); } + await refreshVerifyStatus(); }); From 7da14980a499c76e9d887d9a9c65a6d64bd5cc95 Mon Sep 17 00:00:00 2001 From: Jafeng <2998840497@qq.com> Date: Wed, 28 Jan 2026 20:01:28 +0800 Subject: [PATCH 2/6] =?UTF-8?q?fix:=E4=BC=98=E5=8C=96=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../archive-detail/health-profile-tab.vue | 98 ++++---- .../archive-detail/service-info-tab.vue | 118 ++++----- .../form-cell/form-diagnosis-picker.vue | 19 +- .../form-cell/form-positive-find.vue | 29 ++- components/form-template/form-cell/index.vue | 1 + pages/case/archive-detail.vue | 224 +++++++++--------- pages/case/visit-record-detail.vue | 48 ++-- pages/case/visit-record-view.vue | 60 ++--- pages/library/diagnosis-list.vue | 34 +-- pages/others/edit-positive-find.vue | 36 +-- 10 files changed, 333 insertions(+), 334 deletions(-) diff --git a/components/archive-detail/health-profile-tab.vue b/components/archive-detail/health-profile-tab.vue index 0a65209..ba41576 100644 --- a/components/archive-detail/health-profile-tab.vue +++ b/components/archive-detail/health-profile-tab.vue @@ -381,57 +381,57 @@ watch( diff --git a/components/archive-detail/service-info-tab.vue b/components/archive-detail/service-info-tab.vue index e928aae..7f8cf87 100644 --- a/components/archive-detail/service-info-tab.vue +++ b/components/archive-detail/service-info-tab.vue @@ -420,16 +420,16 @@ watch( - diff --git a/components/form-template/form-cell/form-positive-find.vue b/components/form-template/form-cell/form-positive-find.vue index 7576ef1..4b25961 100644 --- a/components/form-template/form-cell/form-positive-find.vue +++ b/components/form-template/form-cell/form-positive-find.vue @@ -101,8 +101,8 @@ function remove(idx) { - diff --git a/components/form-template/form-cell/index.vue b/components/form-template/form-cell/index.vue index da38666..1dc13bf 100644 --- a/components/form-template/form-cell/index.vue +++ b/components/form-template/form-cell/index.vue @@ -13,6 +13,7 @@ :disableChange="disableChange" @change="change" /> + { .page { min-height: 100vh; background: #f5f6f8; - padding-bottom: calc(80px + env(safe-area-inset-bottom)); + padding-bottom: calc(160rpx + env(safe-area-inset-bottom)); } .card { @@ -772,69 +772,69 @@ const saveAddGroup = async () => { .header { display: flex; align-items: flex-start; - padding: 14px 14px 10px; - border-bottom: 1px solid #f2f2f2; + padding: 28rpx 28rpx 20rpx; + border-bottom: 2rpx solid #f2f2f2; } .avatar { - width: 56px; - height: 56px; - border-radius: 6px; - border: 1px solid #e8e8e8; + width: 112rpx; + height: 112rpx; + border-radius: 12rpx; + border: 2rpx solid #e8e8e8; background: #fafafa; overflow: hidden; flex-shrink: 0; } .avatar-img { - width: 56px; - height: 56px; + width: 112rpx; + height: 112rpx; } .header-main { flex: 1; min-width: 0; - padding: 0 10px; + padding: 0 20rpx; } .name-row { display: flex; align-items: center; - gap: 8px; - padding-top: 2px; + gap: 16rpx; + padding-top: 4rpx; } .name { - font-size: 18px; + font-size: 36rpx; font-weight: 600; color: #1f1f1f; - max-width: 220px; + max-width: 440rpx; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .meta { - font-size: 13px; + font-size: 26rpx; color: #666; } .sub-line { - margin-top: 6px; - font-size: 12px; + margin-top: 12rpx; + font-size: 24rpx; color: #666; } .id-rows { - margin-top: 6px; + margin-top: 12rpx; } .id-row { display: flex; align-items: center; - font-size: 12px; + font-size: 24rpx; color: #666; - line-height: 18px; + line-height: 36rpx; } .id-label { @@ -849,58 +849,58 @@ const saveAddGroup = async () => { } .create-row { - margin-top: 6px; + margin-top: 12rpx; } .create-text { - font-size: 12px; + font-size: 24rpx; color: #999; } .header-right { - width: 28px; - height: 28px; + width: 56rpx; + height: 56rpx; display: flex; align-items: center; justify-content: center; flex-shrink: 0; - margin-top: 6px; + margin-top: 12rpx; } .cells { background: #fff; - padding: 0 14px; + padding: 0 28rpx; } .border-bottom { - border-bottom: 1px solid #f2f2f2; + border-bottom: 2rpx solid #f2f2f2; } .info-row { display: flex; align-items: center; justify-content: space-between; - padding: 16px 0; - min-height: 24px; + padding: 32rpx 0; + min-height: 48rpx; } .info-block { - padding: 16px 0; + padding: 32rpx 0; } .block-header { display: flex; align-items: center; justify-content: space-between; - margin-bottom: 8px; + margin-bottom: 16rpx; } .block-content { - min-height: 20px; + min-height: 40rpx; } .input-label { - font-size: 15px; + font-size: 30rpx; color: #666; } @@ -912,15 +912,15 @@ const saveAddGroup = async () => { .phone-area { display: flex; align-items: center; - margin-right: 12px; + margin-right: 24rpx; } .mr-4 { - margin-right: 4px; + margin-right: 8rpx; } .phone-text { - font-size: 16px; + font-size: 32rpx; color: #4f6ef7; font-weight: 500; } @@ -929,17 +929,17 @@ const saveAddGroup = async () => { display: flex; align-items: center; justify-content: center; - width: 24px; - height: 24px; + width: 48rpx; + height: 48rpx; } .placeholder { - font-size: 14px; + font-size: 28rpx; color: #999; } .note-content { - font-size: 14px; + font-size: 28rpx; color: #333; line-height: 1.5; word-break: break-all; @@ -948,16 +948,16 @@ const saveAddGroup = async () => { .tags-wrap { display: flex; flex-wrap: wrap; - gap: 8px; + gap: 16rpx; } .tag-item { - height: 24px; - line-height: 22px; - padding: 0 10px; - border: 1px solid #4f6ef7; - border-radius: 12px; - font-size: 12px; + height: 48rpx; + line-height: 44rpx; + padding: 0 20rpx; + border: 2rpx solid #4f6ef7; + border-radius: 24rpx; + font-size: 24rpx; color: #4f6ef7; box-sizing: border-box; } @@ -968,11 +968,11 @@ const saveAddGroup = async () => { } .tabs { - margin-top: 10px; + margin-top: 20rpx; background: #fff; display: flex; - border-top: 1px solid #f2f2f2; - border-bottom: 1px solid #f2f2f2; + border-top: 2rpx solid #f2f2f2; + border-bottom: 2rpx solid #f2f2f2; position: sticky; top: 0; z-index: 30; @@ -981,9 +981,9 @@ const saveAddGroup = async () => { .tab { flex: 1; text-align: center; - height: 44px; - line-height: 44px; - font-size: 14px; + height: 88rpx; + line-height: 88rpx; + font-size: 28rpx; color: #333; position: relative; } @@ -998,11 +998,11 @@ const saveAddGroup = async () => { position: absolute; left: 50%; bottom: 0; - width: 32px; - height: 3px; + width: 64rpx; + height: 6rpx; background: #4f6ef7; transform: translateX(-50%); - border-radius: 2px; + border-radius: 4rpx; } .content { @@ -1017,14 +1017,14 @@ const saveAddGroup = async () => { } .empty-img { - width: 160px; - height: 160px; + width: 320rpx; + height: 320rpx; opacity: 0.9; } .empty-text { - margin-top: 10px; - font-size: 13px; + margin-top: 20rpx; + font-size: 26rpx; color: #9aa0a6; } @@ -1034,21 +1034,21 @@ const saveAddGroup = async () => { right: 0; bottom: 0; background: #fff; - padding: 12px 14px calc(12px + env(safe-area-inset-bottom)); - box-shadow: 0 -4px 12px rgba(0, 0, 0, 0.06); + padding: 24rpx 28rpx calc(24rpx + env(safe-area-inset-bottom)); + box-shadow: 0 -8rpx 24rpx rgba(0, 0, 0, 0.06); } .bind-btn { width: 100%; - height: 44px; + height: 88rpx; background: #4f6ef7; color: #fff; - border-radius: 6px; + border-radius: 12rpx; display: flex; align-items: center; justify-content: center; - gap: 8px; - font-size: 15px; + gap: 16rpx; + font-size: 30rpx; } .bind-text { @@ -1057,52 +1057,52 @@ const saveAddGroup = async () => { /* ===== 弹窗样式(居中) ===== */ .modal { - width: 320px; + width: 640rpx; background: #fff; - border-radius: 8px; + border-radius: 16rpx; overflow: hidden; } .modal-title { - font-size: 16px; + font-size: 32rpx; font-weight: 600; text-align: center; - padding: 14px 12px; + padding: 28rpx 24rpx; color: #333; - border-bottom: 1px solid #f0f0f0; + border-bottom: 2rpx solid #f0f0f0; } .modal-body { - padding: 14px 14px 8px; + padding: 28rpx 28rpx 16rpx; } .modal-input { width: 100%; - height: 40px; - border: 1px solid #e6e6e6; - border-radius: 4px; - padding: 0 10px; - font-size: 14px; + height: 80rpx; + border: 2rpx solid #e6e6e6; + border-radius: 8rpx; + padding: 0 20rpx; + font-size: 28rpx; box-sizing: border-box; } .modal-actions { display: flex; - gap: 12px; - padding: 12px 14px 14px; + gap: 24rpx; + padding: 24rpx 28rpx 28rpx; } .modal-btn { flex: 1; - height: 40px; - line-height: 40px; + height: 80rpx; + line-height: 80rpx; text-align: center; - border-radius: 4px; - font-size: 14px; + border-radius: 8rpx; + font-size: 28rpx; } .modal-btn.cancel { - border: 1px solid #4f6ef7; + border: 2rpx solid #4f6ef7; color: #4f6ef7; background: #fff; } @@ -1115,69 +1115,69 @@ const saveAddGroup = async () => { /* ===== 底部弹层样式 ===== */ .sheet { background: #fff; - border-top-left-radius: 10px; - border-top-right-radius: 10px; + border-top-left-radius: 20rpx; + border-top-right-radius: 20rpx; overflow: hidden; } .sheet-header { - height: 48px; + height: 96rpx; display: flex; align-items: center; - padding: 0 14px; - border-bottom: 1px solid #f0f0f0; + padding: 0 28rpx; + border-bottom: 2rpx solid #f0f0f0; } .sheet-title { flex: 1; text-align: center; - font-size: 16px; + font-size: 32rpx; font-weight: 600; color: #333; } .sheet-close { - width: 24px; - height: 24px; + width: 48rpx; + height: 48rpx; display: flex; align-items: center; justify-content: center; } .sheet-header-left { - width: 24px; + width: 48rpx; } .sheet-link { - min-width: 60px; + min-width: 120rpx; text-align: right; - font-size: 14px; + font-size: 28rpx; color: #4f6ef7; } .sheet-body { - padding: 14px; + padding: 28rpx; } .notes-textarea { width: 100%; - height: 140px; - border: 1px solid #e6e6e6; - border-radius: 4px; - padding: 10px; - font-size: 14px; + height: 280rpx; + border: 2rpx solid #e6e6e6; + border-radius: 8rpx; + padding: 20rpx; + font-size: 28rpx; box-sizing: border-box; } .counter { text-align: right; - margin-top: 8px; - font-size: 12px; + margin-top: 16rpx; + font-size: 24rpx; color: #999; } .group-list { - padding: 8px 14px 14px; + padding: 16rpx 28rpx 28rpx; max-height: 55vh; overflow: auto; } @@ -1185,26 +1185,26 @@ const saveAddGroup = async () => { .group-item { display: flex; align-items: center; - padding: 12px 0; + padding: 24rpx 0; } .group-name { - margin-left: 10px; - font-size: 14px; + margin-left: 20rpx; + font-size: 28rpx; color: #333; } .sheet-footer { - padding: 12px 14px calc(12px + env(safe-area-inset-bottom)); + padding: 24rpx 28rpx calc(24rpx + env(safe-area-inset-bottom)); } .primary-btn { width: 100%; - height: 44px; + height: 88rpx; background: #4f6ef7; color: #fff; - border-radius: 4px; - font-size: 15px; - line-height: 44px; + border-radius: 8rpx; + font-size: 30rpx; + line-height: 88rpx; } diff --git a/pages/case/visit-record-detail.vue b/pages/case/visit-record-detail.vue index 529c736..98f8769 100644 --- a/pages/case/visit-record-detail.vue +++ b/pages/case/visit-record-detail.vue @@ -28,7 +28,7 @@ - + @@ -328,7 +328,7 @@ function previewFile(idx) { .page { min-height: 100vh; background: #f5f6f8; - padding-bottom: calc(76px + env(safe-area-inset-bottom)); + padding-bottom: calc(152rpx + env(safe-area-inset-bottom)); } .body { height: 100vh; @@ -340,24 +340,24 @@ function previewFile(idx) { } .header { background: #fff; - box-shadow: 0 4px 12px rgba(0, 0, 0, 0.06); + box-shadow: 0 8rpx 24rpx rgba(0, 0, 0, 0.06); } .header-title { - padding: 14px 14px; - font-size: 16px; + padding: 28rpx 28rpx; + font-size: 32rpx; font-weight: 600; color: #333; } .form-wrap { background: #fff; - margin-top: 10px; - padding: 4px 0; + margin-top: 20rpx; + padding: 8rpx 0; } .upload-wrap { background: #fff; padding: 24rpx 30rpx; - border-bottom: 1px solid #eee; + border-bottom: 2rpx solid #eee; } .upload-row { display: flex; @@ -384,7 +384,7 @@ function previewFile(idx) { width: 180rpx; height: 140rpx; position: relative; - border: 1px solid #e5e7eb; + border: 2rpx solid #e5e7eb; border-radius: 8rpx; overflow: hidden; background: #f9fafb; @@ -408,7 +408,7 @@ function previewFile(idx) { .upload-add { width: 180rpx; height: 140rpx; - border: 1px dashed #d1d5db; + border: 2rpx dashed #d1d5db; border-radius: 8rpx; display: flex; align-items: center; @@ -425,17 +425,17 @@ function previewFile(idx) { right: 0; bottom: 0; background: #fff; - padding: 12px 14px calc(12px + env(safe-area-inset-bottom)); + padding: 24rpx 28rpx calc(24rpx + env(safe-area-inset-bottom)); display: flex; - gap: 12px; - box-shadow: 0 -4px 12px rgba(0, 0, 0, 0.06); + gap: 24rpx; + box-shadow: 0 -8rpx 24rpx rgba(0, 0, 0, 0.06); } .btn { flex: 1; - height: 44px; - line-height: 44px; - border-radius: 6px; - font-size: 15px; + height: 88rpx; + line-height: 88rpx; + border-radius: 12rpx; + font-size: 30rpx; } .btn::after { border: none; @@ -443,7 +443,7 @@ function previewFile(idx) { .btn.plain { background: #fff; color: #4f6ef7; - border: 1px solid #4f6ef7; + border: 2rpx solid #4f6ef7; } .btn.primary { background: #4f6ef7; @@ -452,16 +452,16 @@ function previewFile(idx) { .delete-fab { position: fixed; - right: 16px; - bottom: calc(96px + env(safe-area-inset-bottom)); - width: 52px; - height: 52px; - border-radius: 26px; + right: 32rpx; + bottom: calc(192rpx + env(safe-area-inset-bottom)); + width: 104rpx; + height: 104rpx; + border-radius: 52rpx; background: #fff; display: flex; align-items: center; justify-content: center; - box-shadow: 0 10px 18px rgba(0, 0, 0, 0.12); + box-shadow: 0 20rpx 36rpx rgba(0, 0, 0, 0.12); z-index: 30; } diff --git a/pages/case/visit-record-view.vue b/pages/case/visit-record-view.vue index 7c9deba..c1632de 100644 --- a/pages/case/visit-record-view.vue +++ b/pages/case/visit-record-view.vue @@ -267,70 +267,70 @@ function remove() { .page { min-height: 100vh; background: #fff; - padding-bottom: calc(76px + env(safe-area-inset-bottom)); + padding-bottom: calc(152rpx + env(safe-area-inset-bottom)); } .topbar { background: #5d6df0; - padding: 10px 14px; + padding: 20rpx 28rpx; } .topbar-text { color: #fff; - font-size: 14px; + font-size: 28rpx; text-align: center; } .content { - padding: 14px 14px 0; + padding: 28rpx 28rpx 0; } .section { - margin-bottom: 14px; + margin-bottom: 28rpx; } .row { display: flex; - padding: 10px 0; + padding: 20rpx 0; } .label { - width: 90px; - font-size: 14px; + width: 180rpx; + font-size: 28rpx; font-weight: 600; color: #111827; } .value { flex: 1; - font-size: 14px; + font-size: 28rpx; color: #111827; word-break: break-all; } .h2 { - font-size: 14px; + font-size: 28rpx; font-weight: 700; color: #111827; - padding: 8px 0; + padding: 16rpx 0; } .p { - font-size: 14px; + font-size: 28rpx; color: #111827; - line-height: 20px; + line-height: 40rpx; white-space: pre-wrap; } .files { display: flex; - gap: 10px; + gap: 20rpx; flex-wrap: wrap; } .file { - width: 90px; - height: 70px; - border: 1px solid #d1d5db; + width: 180rpx; + height: 140rpx; + border: 2rpx solid #d1d5db; background: #f9fafb; } .thumb { - width: 90px; - height: 70px; + width: 180rpx; + height: 140rpx; } .files-empty { - font-size: 13px; + font-size: 26rpx; color: #9aa0a6; - padding: 8px 0; + padding: 16rpx 0; } .footer { position: fixed; @@ -338,18 +338,18 @@ function remove() { right: 0; bottom: 0; background: #fff; - padding: 12px 14px calc(12px + env(safe-area-inset-bottom)); + padding: 24rpx 28rpx calc(24rpx + env(safe-area-inset-bottom)); display: flex; justify-content: flex-end; - gap: 14px; - box-shadow: 0 -4px 12px rgba(0, 0, 0, 0.06); + gap: 28rpx; + box-shadow: 0 -8rpx 24rpx rgba(0, 0, 0, 0.06); } .btn { - width: 120px; - height: 44px; - line-height: 44px; - border-radius: 6px; - font-size: 15px; + width: 240rpx; + height: 88rpx; + line-height: 88rpx; + border-radius: 12rpx; + font-size: 30rpx; } .btn::after { border: none; @@ -357,7 +357,7 @@ function remove() { .btn.danger { background: #fff; color: #ff4d4f; - border: 1px solid #ff4d4f; + border: 2rpx solid #ff4d4f; } .btn.primary { background: #4f6ef7; diff --git a/pages/library/diagnosis-list.vue b/pages/library/diagnosis-list.vue index 07bda93..e6b2cd0 100644 --- a/pages/library/diagnosis-list.vue +++ b/pages/library/diagnosis-list.vue @@ -10,7 +10,7 @@ 暂无诊断数据 - + @@ -132,32 +132,32 @@ function save() { .page { min-height: 100vh; background: #fff; - padding-bottom: calc(76px + env(safe-area-inset-bottom)); + padding-bottom: calc(152rpx + env(safe-area-inset-bottom)); } .top { - padding: 12px 14px; - box-shadow: 0 4px 12px rgba(0, 0, 0, 0.06); + padding: 24rpx 28rpx; + box-shadow: 0 8rpx 24rpx rgba(0, 0, 0, 0.06); } .scroll { - height: calc(100vh - 140px); + height: calc(100vh - 280rpx); } .row { display: flex; align-items: center; justify-content: space-between; - padding: 14px 14px; - border-bottom: 1px solid #f2f2f2; + padding: 28rpx 28rpx; + border-bottom: 2rpx solid #f2f2f2; } .label { - font-size: 14px; + font-size: 28rpx; color: #111827; - margin-right: 10px; + margin-right: 20rpx; } .empty { - padding: 60px 0; + padding: 120rpx 0; text-align: center; color: #9aa0a6; - font-size: 13px; + font-size: 26rpx; } .footer { position: fixed; @@ -165,15 +165,15 @@ function save() { right: 0; bottom: 0; background: #fff; - padding: 12px 14px calc(12px + env(safe-area-inset-bottom)); - box-shadow: 0 -4px 12px rgba(0, 0, 0, 0.06); + padding: 24rpx 28rpx calc(24rpx + env(safe-area-inset-bottom)); + box-shadow: 0 -8rpx 24rpx rgba(0, 0, 0, 0.06); } .btn { width: 100%; - height: 44px; - line-height: 44px; - border-radius: 6px; - font-size: 15px; + height: 88rpx; + line-height: 88rpx; + border-radius: 12rpx; + font-size: 30rpx; } .btn::after { border: none; diff --git a/pages/others/edit-positive-find.vue b/pages/others/edit-positive-find.vue index f5320a7..59b9d84 100644 --- a/pages/others/edit-positive-find.vue +++ b/pages/others/edit-positive-find.vue @@ -23,7 +23,7 @@ /> - + @@ -68,28 +68,28 @@ function save() { .page { min-height: 100vh; background: #fff; - padding-bottom: calc(76px + env(safe-area-inset-bottom)); + padding-bottom: calc(152rpx + env(safe-area-inset-bottom)); } .scroll { height: 100vh; } .section { - padding: 16px 14px 0; + padding: 32rpx 28rpx 0; } .title { - font-size: 15px; + font-size: 30rpx; font-weight: 700; color: #111827; - margin-bottom: 10px; + margin-bottom: 20rpx; } .textarea { width: 100%; - min-height: 120px; - border: 1px solid #e5e7eb; - border-radius: 8px; - padding: 10px; + min-height: 240rpx; + border: 2rpx solid #e5e7eb; + border-radius: 16rpx; + padding: 20rpx; box-sizing: border-box; - font-size: 14px; + font-size: 28rpx; color: #111827; } .placeholder { @@ -101,17 +101,17 @@ function save() { right: 0; bottom: 0; background: #fff; - padding: 12px 14px calc(12px + env(safe-area-inset-bottom)); + padding: 24rpx 28rpx calc(24rpx + env(safe-area-inset-bottom)); display: flex; - gap: 12px; - box-shadow: 0 -4px 12px rgba(0, 0, 0, 0.06); + gap: 24rpx; + box-shadow: 0 -8rpx 24rpx rgba(0, 0, 0, 0.06); } .btn { flex: 1; - height: 44px; - line-height: 44px; - border-radius: 6px; - font-size: 15px; + height: 88rpx; + line-height: 88rpx; + border-radius: 12rpx; + font-size: 30rpx; } .btn::after { border: none; @@ -119,7 +119,7 @@ function save() { .btn.plain { background: #fff; color: #4f6ef7; - border: 1px solid #4f6ef7; + border: 2rpx solid #4f6ef7; } .btn.primary { background: #4f6ef7; From ea559229153d328bf28ba12ad45ec039c648ad80 Mon Sep 17 00:00:00 2001 From: Jafeng <2998840497@qq.com> Date: Thu, 29 Jan 2026 13:36:43 +0800 Subject: [PATCH 3/6] =?UTF-8?q?fix:=E5=86=85=E9=83=A8=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E6=98=BE=E7=A4=BAbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/form-template/common-cell.vue | 8 +- .../form-cell/form-tag-picker.vue | 100 ++++++++ components/form-template/form-cell/index.vue | 32 ++- components/form-template/index.vue | 7 +- components/form-template/verify.js | 1 + pages.json | 6 + pages/case/archive-edit.vue | 101 +++++++- pages/case/patient-create.vue | 11 +- pages/case/patient-inner-info.vue | 156 +++++++++++- pages/library/tag-list/tag-list.vue | 224 ++++++++++++++++++ routes/index.js | 4 + utils/api.js | 5 + utils/form-alias.js | 66 ++++++ 13 files changed, 705 insertions(+), 16 deletions(-) create mode 100644 components/form-template/form-cell/form-tag-picker.vue create mode 100644 pages/library/tag-list/tag-list.vue create mode 100644 utils/form-alias.js diff --git a/components/form-template/common-cell.vue b/components/form-template/common-cell.vue index b23c40b..301a120 100644 --- a/components/form-template/common-cell.vue +++ b/components/form-template/common-cell.vue @@ -1,5 +1,5 @@ diff --git a/components/form-template/form-cell/index.vue b/components/form-template/form-cell/index.vue index 1dc13bf..439fccf 100644 --- a/components/form-template/form-cell/index.vue +++ b/components/form-template/form-cell/index.vue @@ -38,11 +38,36 @@ :disableChange="disableChange" @change="change" /> + - - {{ attrs.name || attrs.title }}(暂不支持:{{ attrs.type }}) - + + + - - - {{ t.label }} - - - 基本信息 @@ -55,7 +43,7 @@ 院内来源 - {{ forms.creator || '点击查看' }} + {{ latestTransferRecord?.executeTeamName || '点击查看' }} @@ -88,26 +76,33 @@ - 院内流转记录(mock) + 院内流转记录 - + - {{ r.time }} + {{ r.createTime }} - 转入团队:{{ r.team }} - 转入方式:{{ r.type }} - 操作人:{{ r.user }} + 转入团队:{{ r.executeTeamName }} + 转入方式:{{ r.eventTypeName }} + + 操作人: + 系统自动建档 + {{ r.creatorUserId }} + + + 暂无流转记录 + @@ -115,9 +110,13 @@ diff --git a/pages/case/archive-detail.vue b/pages/case/archive-detail.vue index b2c4264..8618b30 100644 --- a/pages/case/archive-detail.vue +++ b/pages/case/archive-detail.vue @@ -249,11 +249,7 @@ function switchTab(key) { currentTab.value = key; // 切换 tab 后,将 tab 滚动到页面顶部(隐藏头部信息区域) nextTick(() => { - // tabs 高度可能随数据变化,先测量一次再滚动 - measureTabsTop(); - setTimeout(() => { - uni.pageScrollTo({ scrollTop: tabsScrollTop.value || 0, duration: 0 }); - }, 0); + uni.pageScrollTo({ scrollTop: tabsScrollTop.value || 0, duration: 300 }); }); } @@ -303,6 +299,9 @@ function normalizeArchiveFromApi(raw) { outpatientNo: r.outpatientNo || '', inpatientNo: r.inpatientNo || '', medicalRecordNo: r.medicalRecordNo || '', + customerNumber: r.customerNumber || '', + customerProfileNo2: r.customerProfileNo2 || '', + customerProfileNo3: r.customerProfileNo3 || '', createTime: r.createTime || '', creator: r.creator || '', notes: r.notes || r.remark || '', @@ -548,9 +547,9 @@ const sexOrAge = computed(() => { const idRows = computed(() => { const rows = []; - if (archive.value.outpatientNo) rows.push({ label: '门诊号', value: String(archive.value.outpatientNo) }); - if (archive.value.inpatientNo) rows.push({ label: '住院号', value: String(archive.value.inpatientNo) }); - if (archive.value.medicalRecordNo) rows.push({ label: '病案号', value: String(archive.value.medicalRecordNo) }); + if (archive.value.customerNumber) rows.push({ label: '病案号1', value: String(archive.value.customerNumber) }); + if (archive.value.customerProfileNo2) rows.push({ label: '病案号2', value: String(archive.value.customerProfileNo2) }); + if (archive.value.customerProfileNo3) rows.push({ label: '病案号3', value: String(archive.value.customerProfileNo3) }); return rows; }); diff --git a/utils/api.js b/utils/api.js index 3430116..74766be 100644 --- a/utils/api.js +++ b/utils/api.js @@ -116,6 +116,8 @@ const urlsConfig = { addServiceRecord: 'addServiceRecord', updateServiceRecord: 'updateServiceRecord', removeServiceRecord: 'removeServiceRecord', + // 客户流转记录 + customerTransferRecord: 'customerTransferRecord', // sendConsultRejectedMessage: "sendConsultRejectedMessage" } From 4e0bbbf3e36ad79e0865a365f94c1c06e8f59577 Mon Sep 17 00:00:00 2001 From: Jafeng <2998840497@qq.com> Date: Fri, 30 Jan 2026 10:45:36 +0800 Subject: [PATCH 6/6] =?UTF-8?q?fix:=E6=A0=B7=E5=BC=8F=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../archive-detail/customer-profile-tab.vue | 150 +++++++++++------ pages/case/case.vue | 151 +++++++++++------- 2 files changed, 190 insertions(+), 111 deletions(-) diff --git a/components/archive-detail/customer-profile-tab.vue b/components/archive-detail/customer-profile-tab.vue index 58c1687..8178965 100644 --- a/components/archive-detail/customer-profile-tab.vue +++ b/components/archive-detail/customer-profile-tab.vue @@ -91,10 +91,9 @@ 转入团队:{{ r.executeTeamName }} 转入方式:{{ r.eventTypeName }} - + 操作人: - 系统自动建档 - {{ r.creatorUserId }} + {{ r.creatorUserName }} @@ -271,6 +270,7 @@ function scrollToAnchor(key) { const transferPopupRef = ref(null); const transferRecords = ref([]); const latestTransferRecord = computed(() => transferRecords.value[0]); +const userNameMap = ref({}); const CURRENT_TEAM_STORAGE_KEY = 'ykt_case_current_team'; @@ -281,18 +281,55 @@ function getCorpId() { return String(d.corpId || a.corpId || team.corpId || '') || ''; } +async function loadTeamMembers() { + const corpId = getCorpId(); + const team = uni.getStorageSync(CURRENT_TEAM_STORAGE_KEY) || {}; + const teamId = team?.teamId ? String(team.teamId) : ''; + if (!corpId || !teamId) return; + if (Object.keys(userNameMap.value || {}).length > 0) return; + + try { + const res = await api('getTeamData', { corpId, teamId }); + if (!res?.success) return; + const t = res?.data && typeof res.data === 'object' ? res.data : {}; + const members = Array.isArray(t.memberList) ? t.memberList : []; + userNameMap.value = members.reduce((acc, m) => { + const uid = String(m?.userid || ''); + if (!uid) return acc; + acc[uid] = String(m?.anotherName || m?.name || m?.userid || '') || uid; + return acc; + }, {}); + } catch (e) { + console.error('获取团队成员失败', e); + } +} + +function resolveUserName(userId) { + const id = String(userId || ''); + if (!id) return ''; + const map = userNameMap.value || {}; + return String(map[id] || id) || id; +} + const ServiceType = { remindFiling: '自主开拓', adminTransferTeams: '团队流转', adminRemoveTeams: '移出团队', systemAutoDistribute: '系统分配', bindWechatCustomer: '绑定企业微信', + share: '共享', + transfer: '转移', + importCustomer: '导入客户', + addCustomer: '新增客户', }; async function fetchTransferRecords() { const customerId = props.data?._id; if (!customerId) return; + // 先加载团队成员信息 + await loadTeamMembers(); + try { const res = await api('customerTransferRecord', { customerId }); if (res?.success && res.list) { @@ -302,6 +339,7 @@ async function fetchTransferRecords() { record.createTime = dayjs(item.createTime).format('YYYY-MM-DD HH:mm:ss'); record.executeTeamName = allTeams.find((team) => team.teamId === item.executeTeamId)?.name || item.executeTeamName; record.eventTypeName = ServiceType[item.eventType] || item.eventType; + record.creatorUserName = item.creatorUserId === 'system' ? '系统自动建档' : resolveUserName(item.creatorUserId); if (item.transferToTeamIds && Array.isArray(item.transferToTeamIds)) { record.teamName = item.transferToTeamIds.map((teamId) => allTeams.find((team) => team.teamId === teamId)?.name).join('、'); } @@ -337,48 +375,48 @@ watch(() => props.data?._id, () => { diff --git a/pages/case/case.vue b/pages/case/case.vue index a72c6ac..49472f3 100644 --- a/pages/case/case.vue +++ b/pages/case/case.vue @@ -85,7 +85,7 @@