From 3ccdc954c26d539c0042b16544fc3dc9e0505ab5 Mon Sep 17 00:00:00 2001
From: wangdongbo <949818794@qq.com>
Date: Mon, 2 Feb 2026 13:27:48 +0800
Subject: [PATCH 1/2] no message
---
pages/case/medical-case-form.vue | 577 +++++++++---------
.../components/ai-assistant-buttons.vue | 13 +-
.../components/medical-case-progress.vue | 152 ++---
.../components/medical-case-type-selector.vue | 44 +-
pages/message/index.vue | 3 +-
5 files changed, 394 insertions(+), 395 deletions(-)
diff --git a/pages/case/medical-case-form.vue b/pages/case/medical-case-form.vue
index c650169..532e89b 100644
--- a/pages/case/medical-case-form.vue
+++ b/pages/case/medical-case-form.vue
@@ -1,214 +1,48 @@
-
-
-
- 就诊机构
-
-
-
-
- 就诊日期
-
-
- {{ formData.visitTime || '暂无' }}
-
-
-
-
-
- 门诊诊断
-
-
-
-
- 治疗方案
-
-
-
-
-
-
-
- 就诊机构
-
-
-
-
- 入院日期
-
-
- {{ formData.inhosDate || '暂无' }}
-
-
-
-
-
- 住院主诊断
-
-
-
-
- 手术名称
-
-
-
-
- 手术日期
-
-
- {{ formData.operationDate || '暂无' }}
-
-
-
-
-
- 治疗方案
-
-
-
-
-
-
-
- 就诊机构
-
-
-
-
- 体检日期
-
-
- {{ formData.inspectTime || '暂无' }}
-
-
-
-
-
- 体检小结
-
-
-
-
- 阳性发现及处理意见
-
-
-
-
-
-
-
- 主诉
-
-
-
-
- 现病史
-
-
-
-
- 既往史
-
-
-
-
-
-
- 1、门诊、住院病历记录生成,生成后支持医生在线编辑,并保存至档案,或者重新生成;
-
-
- 2、若未来集到有效信息则以模板字段中默认项写无内容生成,医生可以直接在存字段上进行编辑。
-
+
+
+ {{ field.label }}
+
+
+
+
+ {{ formData[field.key] || "暂无" }}
+
+
+
+
+
+
+
+
-
+
@@ -363,26 +349,26 @@ const getRequiredFields = () => {
min-height: 100vh;
background-color: #f5f5f5;
padding-bottom: 120rpx;
-
+
.form-container {
background-color: #ffffff;
padding: 32rpx;
-
+
.form-item {
margin-bottom: 32rpx;
-
+
&.required .item-label::before {
- content: '*';
+ content: "*";
color: #ff4d4f;
margin-right: 8rpx;
}
-
+
.item-label {
font-size: 28rpx;
color: #333333;
margin-bottom: 16rpx;
}
-
+
.item-input,
.picker-value {
width: 100%;
@@ -392,64 +378,65 @@ const getRequiredFields = () => {
border-radius: 8rpx;
font-size: 28rpx;
color: #333333;
-
+
&[disabled] {
color: #999999;
}
}
-
+
.picker-value {
display: flex;
align-items: center;
color: #999999;
}
-
+
.item-textarea {
width: 100%;
- min-height: 160rpx;
+ min-height: 100rpx;
padding: 20rpx 24rpx;
background-color: #f8f9fa;
border-radius: 8rpx;
font-size: 28rpx;
color: #333333;
-
+ height: 100px;
&[disabled] {
color: #999999;
}
}
}
-
+
.tips-box {
margin-top: 32rpx;
padding: 24rpx;
background-color: #fffbe6;
border-radius: 8rpx;
-
+
.tips-text {
display: block;
font-size: 24rpx;
color: #666666;
line-height: 1.6;
margin-bottom: 8rpx;
-
+
&:last-child {
margin-bottom: 0;
}
}
}
}
-
+
.footer-buttons {
position: fixed;
bottom: 0;
left: 0;
right: 0;
+ z-index: 100;
display: flex;
gap: 24rpx;
padding: 24rpx 32rpx;
background-color: #ffffff;
box-shadow: 0 -4rpx 16rpx rgba(0, 0, 0, 0.08);
-
+
.btn-regenerate,
.btn-save {
flex: 1;
@@ -458,25 +445,25 @@ const getRequiredFields = () => {
align-items: center;
justify-content: center;
border-radius: 44rpx;
-
+
.btn-text {
font-size: 32rpx;
font-weight: 500;
}
}
-
+
.btn-regenerate {
background-color: #ffffff;
border: 2rpx solid #1890ff;
-
+
.btn-text {
color: #1890ff;
}
}
-
+
.btn-save {
background-color: #1890ff;
-
+
.btn-text {
color: #ffffff;
}
diff --git a/pages/message/components/ai-assistant-buttons.vue b/pages/message/components/ai-assistant-buttons.vue
index 3ac4854..9c8f2a1 100644
--- a/pages/message/components/ai-assistant-buttons.vue
+++ b/pages/message/components/ai-assistant-buttons.vue
@@ -44,6 +44,10 @@ const props = defineProps({
type: String,
default: "",
},
+ patientId: {
+ type: String,
+ default: "",
+ },
corpId: {
type: String,
default: "",
@@ -333,12 +337,15 @@ const handleRegenerateFromProgress = (data) => {
// 处理从进度弹窗点击下一步
const handleNextFromProgress = (data) => {
+ // 根据病历类型动态构建表单数据
+ const extractedData = data.data?.extractedData || {};
+
// 跳转到病历填写页面
uni.navigateTo({
- url: `/pages/case/medical-case-form?caseType=${data.caseType}&customerId=${
- props.customerId || props.patientAccountId
+ url: `/pages/case/medical-case-form?caseType=${data.caseType}&patientId=${
+ props.patientId
}&groupId=${props.groupId}&formData=${encodeURIComponent(
- JSON.stringify(data.data?.extractedData || {})
+ JSON.stringify(extractedData)
)}`,
});
};
diff --git a/pages/message/components/medical-case-progress.vue b/pages/message/components/medical-case-progress.vue
index c1fb044..c2803ab 100644
--- a/pages/message/components/medical-case-progress.vue
+++ b/pages/message/components/medical-case-progress.vue
@@ -4,29 +4,32 @@
✕
-
+
{{ progressTitle }}
-
+
-
+
{{ progress }}%
-
-
+
+
检测到以下{{ caseTypeName }}信息:
-
✓
-
{{ item.label }}:{{ item.value }}
@@ -34,11 +37,11 @@
-
+
正在生成结构化{{ caseTypeName }}
-
+
@@ -54,48 +57,47 @@
@@ -183,7 +185,7 @@ defineExpose({
position: relative;
max-height: 80vh;
overflow-y: auto;
-
+
.close-btn {
position: absolute;
top: 20rpx;
@@ -194,13 +196,13 @@ defineExpose({
align-items: center;
justify-content: center;
z-index: 10;
-
+
.close-icon {
font-size: 40rpx;
color: #999999;
}
}
-
+
.progress-content {
.progress-title {
font-size: 32rpx;
@@ -209,27 +211,27 @@ defineExpose({
margin-bottom: 32rpx;
text-align: center;
}
-
+
.progress-bar-wrapper {
display: flex;
align-items: center;
gap: 16rpx;
margin-bottom: 32rpx;
-
+
.progress-bar {
flex: 1;
height: 16rpx;
background-color: #e5e5e5;
border-radius: 8rpx;
overflow: hidden;
-
+
.progress-fill {
height: 100%;
background: linear-gradient(90deg, #1890ff 0%, #40a9ff 100%);
transition: width 0.5s ease;
}
}
-
+
.progress-text {
font-size: 28rpx;
color: #1890ff;
@@ -238,21 +240,21 @@ defineExpose({
text-align: right;
}
}
-
+
.detected-info {
margin-bottom: 24rpx;
-
+
.detected-title {
font-size: 28rpx;
color: #666666;
display: block;
margin-bottom: 16rpx;
}
-
+
.info-list {
max-height: 400rpx;
overflow-y: auto;
-
+
.info-item {
display: flex;
align-items: flex-start;
@@ -260,25 +262,25 @@ defineExpose({
margin-bottom: 12rpx;
opacity: 0;
transform: translateX(-20rpx);
-
+
&.fade-in {
animation: fadeInSlide 0.4s ease forwards;
}
-
+
.check-icon {
font-size: 28rpx;
color: #52c41a;
font-weight: bold;
margin-top: 2rpx;
}
-
+
.info-text {
flex: 1;
font-size: 26rpx;
color: #333333;
line-height: 1.6;
word-break: break-all;
-
+
// 暂无数据的样式
&.empty-value {
color: #999999;
@@ -287,24 +289,24 @@ defineExpose({
}
}
}
-
+
.generating-text {
font-size: 28rpx;
color: #1890ff;
text-align: center;
padding: 16rpx 0;
-
+
.dot-animation::after {
- content: '...';
+ content: "...";
animation: dots 1.5s steps(4, end) infinite;
}
}
-
+
.action-buttons {
display: flex;
gap: 16rpx;
margin-top: 32rpx;
-
+
.action-button {
flex: 1;
height: 80rpx;
@@ -313,34 +315,34 @@ defineExpose({
align-items: center;
justify-content: center;
transition: all 0.3s ease;
-
+
&.primary {
background: linear-gradient(90deg, #1890ff 0%, #40a9ff 100%);
-
+
.button-text {
color: #ffffff;
}
-
+
&:active {
opacity: 0.8;
transform: scale(0.98);
}
}
-
+
&.secondary {
background-color: #ffffff;
border: 2rpx solid #d9d9d9;
-
+
.button-text {
color: #666666;
}
-
+
&:active {
background-color: #f5f5f5;
transform: scale(0.98);
}
}
-
+
.button-text {
font-size: 30rpx;
font-weight: 500;
@@ -358,17 +360,19 @@ defineExpose({
}
@keyframes dots {
- 0%, 20% {
- content: '';
+ 0%,
+ 20% {
+ content: "";
}
40% {
- content: '.';
+ content: ".";
}
60% {
- content: '..';
+ content: "..";
}
- 80%, 100% {
- content: '...';
+ 80%,
+ 100% {
+ content: "...";
}
}
diff --git a/pages/message/components/medical-case-type-selector.vue b/pages/message/components/medical-case-type-selector.vue
index 9b696a2..6c5cab6 100644
--- a/pages/message/components/medical-case-type-selector.vue
+++ b/pages/message/components/medical-case-type-selector.vue
@@ -7,7 +7,7 @@
✕
-
+
@@ -73,38 +73,38 @@ defineExpose({
background-color: #ffffff;
border-radius: 24rpx;
padding: 40rpx;
-
+
.selector-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 40rpx;
-
+
.header-title {
font-size: 36rpx;
font-weight: 600;
color: #333333;
}
-
+
.close-btn {
width: 48rpx;
height: 48rpx;
display: flex;
align-items: center;
justify-content: center;
-
+
.close-icon {
font-size: 40rpx;
color: #999999;
}
}
}
-
+
.case-type-grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 24rpx;
-
+
.case-type-item {
display: flex;
flex-direction: column;
@@ -115,13 +115,13 @@ defineExpose({
border: 2rpx solid #e5e5e5;
border-radius: 16rpx;
transition: all 0.3s ease;
-
+
&:active {
background-color: #e8f4ff;
border-color: #1890ff;
transform: scale(0.98);
}
-
+
.type-name {
font-size: 30rpx;
color: #333333;
diff --git a/pages/message/index.vue b/pages/message/index.vue
index b8d2aa8..f817983 100644
--- a/pages/message/index.vue
+++ b/pages/message/index.vue
@@ -149,6 +149,7 @@
"
:groupId="groupId"
:patientAccountId="chatInfo.userID || ''"
+ :patientId="patientId"
:corpId="corpId"
@streamText="handleStreamText"
@clearInput="handleClearInput"
@@ -1048,4 +1049,4 @@ uni.$on("sendSurvey", async (data) => {
+
\ No newline at end of file
From 65c9a3efe54e61678974622de79dec758f5ffbff Mon Sep 17 00:00:00 2001
From: wangdongbo <949818794@qq.com>
Date: Mon, 2 Feb 2026 14:12:46 +0800
Subject: [PATCH 2/2] =?UTF-8?q?=E5=A4=B4=E5=83=8F=E8=B0=83=E6=95=B4?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pages/message/hooks/use-group-chat.js | 84 +++++++++--
pages/message/index.vue | 13 +-
pages/work/profile.vue | 200 +++++++++++++++++---------
pages/work/work.vue | 2 +-
static/default-patient-avatar.png | Bin 0 -> 3694 bytes
store/team.js | 15 +-
utils/api.js | 3 +-
utils/conversation-merger.js | 4 +-
utils/tim-chat.js | 11 +-
9 files changed, 227 insertions(+), 105 deletions(-)
create mode 100644 static/default-patient-avatar.png
diff --git a/pages/message/hooks/use-group-chat.js b/pages/message/hooks/use-group-chat.js
index e550907..73d7a8e 100644
--- a/pages/message/hooks/use-group-chat.js
+++ b/pages/message/hooks/use-group-chat.js
@@ -1,5 +1,7 @@
import { ref, computed } from 'vue'
import { onShow, onUnload } from '@dcloudio/uni-app'
+import api from '@/utils/api.js'
+import useTeamStore from '@/store/team.js'
/**
* 简单的群聊hook
@@ -8,6 +10,9 @@ import { onShow, onUnload } from '@dcloudio/uni-app'
export default function useGroupChat(groupID) {
const groupInfo = ref({})
const members = ref([])
+ const teamMemberIds = ref([]) // 存储团队成员的userId列表
+ const patientId = ref('') // 存储患者ID
+ const teamStore = useTeamStore()
// 群聊成员映射
const chatMember = computed(() => {
@@ -15,30 +20,79 @@ export default function useGroupChat(groupID) {
members.value.forEach(member => {
res[member.id] = {
name: member.name,
- avatar: member.avatar || '/static/default-avatar.png'
+ avatar: member.avatar,
+ isTeamMember: member.isTeamMember // 标记是否为团队成员
}
})
return res
})
- // 获取群聊信息
+ // 判断某个userId是否为团队成员
+ const isTeamMember = (userId) => {
+ return teamMemberIds.value.includes(userId)
+ }
+
+ // 获取用户头像(根据是否为团队成员返回不同的默认头像)
+ const getUserAvatar = (userId) => {
+ const member = chatMember.value[userId]
+ if (!member) {
+ // 如果找不到成员信息,根据是否为团队成员返回默认头像
+ return isTeamMember(userId) ? '/static/home/avatar.svg' : '/static/default-patient-avatar.png'
+ }
+
+ // 如果有头像且不为空字符串,返回头像
+ if (member.avatar && member.avatar.trim() !== '') {
+ return member.avatar
+ }
+
+ // 否则根据是否为团队成员返回默认头像
+ return member.isTeamMember ? '/static/home/avatar.svg' : '/static/default-patient-avatar.png'
+ }
+
+ // 获取群聊信息和成员头像
async function getGroupInfo() {
const gid = typeof groupID === 'string' ? groupID : groupID.value
if (!gid) return
try {
- // 这里可以调用API获取群聊信息
- // const res = await getGroupDetail(gid)
- // if (res && res.success) {
- // groupInfo.value = res.data
- // members.value = res.data.members || []
- // }
+ // 1. 获取群聊基本信息
+ const groupResult = await api('getGroupListByGroupId', { groupId: gid })
- // 暂时使用本地数据
- groupInfo.value = {
- groupID: gid,
- name: '群聊',
- status: 'active'
+ if (groupResult && groupResult.success && groupResult.data) {
+ groupInfo.value = {
+ groupID: gid,
+ name: groupResult.data.team?.name || '群聊',
+ status: groupResult.data.orderStatus || 'active',
+ teamId: groupResult.data.teamId
+ }
+
+ // 2. 如果有teamId,获取团队成员头像
+ if (groupResult.data.teamId) {
+ const avatarMap = await teamStore.getTeamMemberAvatars(groupResult.data.teamId)
+
+ // 3. 存储团队成员ID列表
+ teamMemberIds.value = Object.keys(avatarMap)
+
+ // 4. 构建团队成员列表
+ members.value = teamMemberIds.value.map(userId => ({
+ id: userId,
+ name: userId, // 这里可以从其他地方获取真实姓名
+ avatar: avatarMap[userId] || '',
+ isTeamMember: true
+ }))
+
+ // 5. 添加患者信息(使用默认患者头像)
+ if (groupResult.data.patient) {
+ const pid = groupResult.data.patientId?.toString() || ''
+ patientId.value = pid
+ members.value.push({
+ id: pid,
+ name: groupResult.data.patient.name || '患者',
+ avatar: '', // 患者不设置头像,使用默认
+ isTeamMember: false
+ })
+ }
+ }
}
} catch (error) {
console.error('获取群聊信息失败:', error)
@@ -57,6 +111,8 @@ export default function useGroupChat(groupID) {
groupInfo,
members,
chatMember,
- getGroupInfo
+ getGroupInfo,
+ isTeamMember,
+ getUserAvatar
}
}
diff --git a/pages/message/index.vue b/pages/message/index.vue
index f817983..a2d1c8f 100644
--- a/pages/message/index.vue
+++ b/pages/message/index.vue
@@ -65,23 +65,16 @@
-
-
-
@@ -222,7 +215,7 @@ const { initIMAfterLogin } = useAccountStore();
const chatInputRef = ref(null);
const groupId = ref("");
-const { chatMember, getGroupInfo } = useGroupChat(groupId);
+const { chatMember, getGroupInfo, getUserAvatar } = useGroupChat(groupId);
// 动态设置导航栏标题
const updateNavigationTitle = (title = "群聊") => {
diff --git a/pages/work/profile.vue b/pages/work/profile.vue
index 06bd33a..3124fa1 100644
--- a/pages/work/profile.vue
+++ b/pages/work/profile.vue
@@ -2,23 +2,59 @@
-
+
-
-
-
+
+
+
-
-
+
+
-
-
+
+
{{ jobStr }}
@@ -39,12 +75,24 @@
-
+
-
+
@@ -58,46 +106,56 @@ import api from "@/utils/api.js";
import { upload } from "@/utils/http.js";
import { toast } from "@/utils/widget";
-import buttonFooter from '@/components/button-footer.vue';
+import buttonFooter from "@/components/button-footer.vue";
import commonCell from "@/components/form-template/common-cell.vue";
import FormInput from "@/components/form-template/form-cell/form-input.vue";
import FormSelect from "@/components/form-template/form-cell/form-select.vue";
import FormTextarea from "@/components/form-template/form-cell/form-textarea.vue";
-import fullPage from '@/components/full-page.vue';
+import fullPage from "@/components/full-page.vue";
const { account, doctorInfo } = storeToRefs(useAccountStore());
const { useLoad, useShow } = useGuard();
const { getDoctorInfo } = useAccountStore();
-const job = { assistant: '医生助理', doctor: '医生' };
+const job = { assistant: "医生助理", doctor: "医生" };
const form = ref({});
-const inviteTeamId = ref('')
-const type = ref('');
+const inviteTeamId = ref("");
+const type = ref("");
-const formData = computed(() => ({ ...(doctorInfo.value || {}), ...form.value, mobile: account.value?.mobile }));
-const cancelText = computed(() => doctorInfo.value ? '取消' : '暂不填写');
-const confirmText = computed(() => type.value === 'cert' ? '下一步' : '保存');
+const formData = computed(() => ({
+ ...(doctorInfo.value || {}),
+ ...form.value,
+ mobile: account.value?.mobile,
+}));
+const cancelText = computed(() => (doctorInfo.value ? "取消" : "暂不填写"));
+const confirmText = computed(() => (type.value === "cert" ? "下一步" : "保存"));
const jobStr = computed(() => {
- const jobs = formData.value && Array.isArray(formData.value.job) ? formData.value.job.filter(i => i === 'assistant' || i === 'doctor') : [];
- return jobs[0] && job[jobs[0]] ? job[jobs[0]] : '';
-})
+ const jobs =
+ formData.value && Array.isArray(formData.value.job)
+ ? formData.value.job.filter((i) => i === "assistant" || i === "doctor")
+ : [];
+ return jobs[0] && job[jobs[0]] ? job[jobs[0]] : "";
+});
const rule = computed(() => {
- if (doctorInfo.value && ['verified', 'verifying'].includes(doctorInfo.value.verifyStatus)) {
+ if (
+ doctorInfo.value &&
+ ["verified", "verifying"].includes(doctorInfo.value.verifyStatus)
+ ) {
return {
- anotherName: { name: '姓名 (不可修改)', required: false, disabled: true },
- job: { name: '岗位 (不可修改)', disabled: true },
- title: { name: '职称 (不可修改)', disabled: true },
- dept: { name: '科室 (不可修改)', disabled: true },
- }
+ anotherName: { name: "姓名 (不可修改)", required: false, disabled: true },
+ job: { name: "岗位 (不可修改)", disabled: true },
+ title: { name: "职称 (不可修改)", disabled: true },
+ dept: { name: "科室 (不可修改)", disabled: true },
+ };
}
return {
- anotherName: { name: '姓名', required: true, disabled: false },
- job: { name: '岗位', disabled: false },
- title: { name: '职称', disabled: false },
- dept: { name: '科室', disabled: false },
- }
-})
+ anotherName: { name: "姓名", required: true, disabled: false },
+ job: { name: "岗位", disabled: false },
+ title: { name: "职称", disabled: false },
+ dept: { name: "科室", disabled: false },
+ };
+});
// 选项数据
const genderOptions = [
@@ -139,55 +197,60 @@ function chooseAvatar() {
if (url) {
form.value.avatar = url;
} else {
- toast('上传失败')
+ toast("上传失败");
}
- }
- })
+ },
+ });
}
function onChange({ title, value }) {
- form.value[title] = value
+ form.value[title] = value;
}
function selectJob() {
if (rule.value.job.disabled) return;
uni.showActionSheet({
- itemList: ['医生', '医生助理', '无'],
+ itemList: ["医生", "医生助理", "无"],
success: ({ tapIndex }) => {
- const job = ['doctor', 'assistant',][tapIndex];
+ const job = ["doctor", "assistant"][tapIndex];
form.value.job = job ? [job] : [];
- }
- })
+ },
+ });
}
function toCert() {
- if (jobStr.value === '医生') {
+ if (jobStr.value === "医生") {
uni.navigateTo({
- url: '/pages/work/verify/doctor'
- })
- } else if (jobStr.value === '医生助理') {
+ url: "/pages/work/verify/doctor",
+ });
+ } else if (jobStr.value === "医生助理") {
uni.navigateTo({
- url: '/pages/work/verify/assistant'
- })
+ url: "/pages/work/verify/assistant",
+ });
} else {
- toast('请选择岗位信息')
+ toast("请选择岗位信息");
}
}
async function save() {
- if (typeof formData.value.anotherName !== 'string' || !formData.value.anotherName.trim()) {
- return toast('请输入姓名')
+ if (
+ typeof formData.value.anotherName !== "string" ||
+ !formData.value.anotherName.trim()
+ ) {
+ return toast("请输入姓名");
}
- if (type.value === 'cert' && !jobStr.value) {
- return toast('请选择岗位信息')
+ if (type.value === "cert" && !jobStr.value) {
+ return toast("请选择岗位信息");
}
- const apiName = doctorInfo.value ? 'updateCorpMemberFromWxapp' : 'addCorpMemberFromWxapp';
+ const apiName = doctorInfo.value
+ ? "updateCorpMemberFromWxapp"
+ : "addCorpMemberFromWxapp";
const data = {
...form.value,
weChatOpenId: account.value.openid,
mobile: account.value.mobile,
corpId: account.value.corpId,
- }
+ };
if (doctorInfo.value) {
data.id = doctorInfo.value._id;
}
@@ -196,30 +259,29 @@ async function save() {
}
const res = await api(apiName, data);
if (res && res.success) {
- await getDoctorInfo()
+ await getDoctorInfo();
form.value = {};
- if (type.value === 'cert') {
- toCert()
+ if (type.value === "cert") {
+ toCert();
} else {
- await toast('保存成功');
- back()
+ await toast("保存成功");
+ back();
}
} else {
- await toast(res?.message || '保存失败');
+ await toast(res?.message || "保存失败");
}
}
-useLoad(opts => {
+useLoad((opts) => {
type.value = opts?.type;
- if (type.value === 'joinTeam' && opts.teamId) {
- inviteTeamId.value = opts.teamId
+ if (type.value === "joinTeam" && opts.teamId) {
+ inviteTeamId.value = opts.teamId;
}
-})
-
-useShow(() => {
- getDoctorInfo()
});
+useShow(() => {
+ getDoctorInfo();
+});