转诊方功能优化
This commit is contained in:
@@ -50,4 +50,12 @@ export async function getTransferQuestionsApi() {
|
||||
*/
|
||||
export async function submitTransferQuestionsApi(params) {
|
||||
return await post('/transfer-prescription/submit-questions', params, 3)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取转诊助理配置(移动端)
|
||||
* @returns {Promise<*>}
|
||||
*/
|
||||
export async function getTransferAssistantConfigApi() {
|
||||
return await get('/transfer-assistant-config/get-config', {}, 3)
|
||||
}
|
||||
@@ -96,7 +96,7 @@
|
||||
<view class="chat-footer safe-area-inset-bottom" :style="{ bottom: keyboardHeight + 'px' }">
|
||||
<view v-if="isConsultationEnded" class="consultation-ended-notice">
|
||||
<u-icon name="checkmark-circle-fill" size="18" color="#999"></u-icon>
|
||||
<text>本次问诊已结束</text>
|
||||
<text>本次问诊未开始或已结束</text>
|
||||
</view>
|
||||
|
||||
<template v-else>
|
||||
@@ -161,6 +161,7 @@ import MessageBubble from './components/MessageBubble.vue'; // 引入组件
|
||||
import { webSocketManager } from '@/utils/ws/websocket';
|
||||
import { ChatManager } from '@/store/chat/chat.js';
|
||||
import {getChatRegisterInfoApi, sendToUserApi, upLoadChatFileApi, getDoctorInfoApi, getRoomStatusApi} from "@/request/api/im";
|
||||
import {getTransferAssistantConfigApi} from "@/request/api/transferPrescription";
|
||||
import { checkDev } from '@/utils/utils';
|
||||
|
||||
// 根据环境获取上传URL
|
||||
@@ -192,6 +193,7 @@ export default {
|
||||
doctorId: 'doctor-1',
|
||||
doctorAvatar: 'https://xiaokang88.oss-cn-hangzhou.aliyuncs.com/xk_upload_20250108/29bdb9560340373bb3096394a845afa5.jpg',
|
||||
userAvatar: 'https://xiaokang88.oss-cn-hangzhou.aliyuncs.com/xk_upload_20250108/29bdb9560340373bb3096394a845afa5.jpg',
|
||||
assistantConfig: { name: '医生助理', avatar: '' }, // 助理配置信息
|
||||
messages: [],
|
||||
newMessage: '',
|
||||
voiceInputActive: false, // 默认文字输入
|
||||
@@ -256,6 +258,9 @@ export default {
|
||||
// 无论是否有nickName,都需要获取医生详情信息(职称、医院、擅长)
|
||||
this.fetchDoctorInfo(doctorId);
|
||||
|
||||
// 加载助理配置信息
|
||||
this.loadAssistantConfig();
|
||||
|
||||
const nickName = this.doctorUserInfo.nick_name;
|
||||
if (nickName && nickName !== 'undefined' && nickName !== 'null') {
|
||||
uni.setNavigationBarTitle({ title: `与${nickName}医生的对话` });
|
||||
@@ -328,6 +333,17 @@ export default {
|
||||
if (this.isMsgMine(msg)) {
|
||||
return this.userAvatar;
|
||||
}
|
||||
// 如果是医生助理发送的消息
|
||||
const senderId = msg.sender_user_id || msg.senderId;
|
||||
if (senderId === 'doctor_assistant') {
|
||||
const avatar = this.assistantConfig.avatar || 'https://xiaokang88.oss-cn-hangzhou.aliyuncs.com/xk_upload_20250108/29bdb9560340373bb3096394a845afa5.jpg';
|
||||
try {
|
||||
return decodeURIComponent(avatar);
|
||||
} catch (e) {
|
||||
return avatar;
|
||||
}
|
||||
}
|
||||
// 其他情况(医生发送的消息)
|
||||
let avatar = this.doctorUserInfo.avatar || this.doctorAvatar || 'https://xiaokang88.oss-cn-hangzhou.aliyuncs.com/xk_upload_20250108/29bdb9560340373bb3096394a845afa5.jpg';
|
||||
try {
|
||||
return decodeURIComponent(avatar);
|
||||
@@ -335,6 +351,23 @@ export default {
|
||||
return avatar;
|
||||
}
|
||||
},
|
||||
|
||||
// 加载助理配置信息
|
||||
async loadAssistantConfig() {
|
||||
try {
|
||||
const res = await getTransferAssistantConfigApi();
|
||||
if (res.data && res.data.code === 0) {
|
||||
const config = res.data.result || {};
|
||||
this.assistantConfig = {
|
||||
name: config.name || '医生助理',
|
||||
avatar: config.avatar || ''
|
||||
};
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('加载助理配置失败:', error);
|
||||
// 失败不影响继续,使用默认值
|
||||
}
|
||||
},
|
||||
|
||||
// === 音频播放逻辑 ===
|
||||
playAudio(msg) {
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<view class="transfer-message-bubble">
|
||||
<view class="bubble-header">
|
||||
<view class="header-icon">
|
||||
<text class="iconfont icon-zhuanzhen"></text>
|
||||
<text class="iconfont icon-mendian"></text>
|
||||
</view>
|
||||
<view class="header-title">转诊消息</view>
|
||||
</view>
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<view class="transfer-card">
|
||||
<view class="card-header">
|
||||
<view class="header-icon">
|
||||
<text class="iconfont icon-zhuanzhen"></text>
|
||||
<text class="iconfont icon-mendian"></text>
|
||||
</view>
|
||||
<view class="header-title">转诊处方</view>
|
||||
<view class="status-tag" :class="statusClass">
|
||||
@@ -13,7 +13,7 @@
|
||||
<view class="card-body">
|
||||
<view class="info-row" v-if="transferData.transfer_store">
|
||||
<view class="info-icon">
|
||||
<text class="iconfont icon-yiyuan"></text>
|
||||
<text class="iconfont icon-mendian"></text>
|
||||
</view>
|
||||
<view class="info-content">
|
||||
<view class="info-label">转诊诊所</view>
|
||||
@@ -23,7 +23,7 @@
|
||||
|
||||
<view class="info-row" v-if="transferData.delegate_store">
|
||||
<view class="info-icon">
|
||||
<text class="iconfont icon-zhensuo"></text>
|
||||
<text class="iconfont icon-mendian"></text>
|
||||
</view>
|
||||
<view class="info-content">
|
||||
<view class="info-label">委托诊所</view>
|
||||
|
||||
@@ -21,12 +21,12 @@
|
||||
<scroll-view class="messages-scroll" scroll-y="true" :scroll-into-view="scrollIntoView" scroll-with-animation>
|
||||
<view class="messages-container">
|
||||
<!-- 按时间顺序渲染消息 -->
|
||||
<template v-for="(message, index) in displayedMessages" :key="message.id || index">
|
||||
<view v-for="(message, index) in displayedMessages" :key="message.id || index">
|
||||
<!-- 欢迎消息 -->
|
||||
<view v-if="message.type === 'welcome'" class="message-item other">
|
||||
<image class="avatar" :src="assistantAvatar" mode="aspectFill"></image>
|
||||
<view class="message-content">
|
||||
<view class="assistant-label">医生助理</view>
|
||||
<view class="assistant-label">{{ assistantName }}</view>
|
||||
<view class="message-bubble">
|
||||
<text>您好! 我是医生助理, 已收到您的用药申请:「{{ prescriptionInfo }}」, 为了帮助医生判断准确, 请按照您的真实情况回答以下问题。</text>
|
||||
</view>
|
||||
@@ -37,7 +37,7 @@
|
||||
<view v-else-if="message.type === 'question'" class="message-item other" :id="'question-' + message.questionId">
|
||||
<image class="avatar" :src="assistantAvatar" mode="aspectFill"></image>
|
||||
<view class="message-content">
|
||||
<view class="assistant-label">医生助理</view>
|
||||
<view class="assistant-label">{{ assistantName }}</view>
|
||||
<view class="message-bubble">
|
||||
<text>{{ message.content }}</text>
|
||||
</view>
|
||||
@@ -58,13 +58,13 @@
|
||||
<view v-else-if="message.type === 'waiting'" class="message-item other">
|
||||
<image class="avatar" :src="assistantAvatar" mode="aspectFill"></image>
|
||||
<view class="message-content">
|
||||
<view class="assistant-label">医生助理</view>
|
||||
<view class="assistant-label">{{ assistantName }}</view>
|
||||
<view class="message-bubble">
|
||||
<text>请稍等, 正在为您转接医生进行复诊开方...</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
</view>
|
||||
|
||||
<!-- 底部锚点 -->
|
||||
<view id="bottom-anchor" style="height: 1px;"></view>
|
||||
@@ -91,7 +91,8 @@
|
||||
import {
|
||||
getTransferPrescriptionDetailApi,
|
||||
getTransferQuestionsApi,
|
||||
submitTransferQuestionsApi
|
||||
submitTransferQuestionsApi,
|
||||
getTransferAssistantConfigApi
|
||||
} from '@/request/api/transferPrescription.js'
|
||||
|
||||
export default {
|
||||
@@ -107,7 +108,8 @@ export default {
|
||||
showWaiting: false, // 显示等待转接消息
|
||||
isSubmitting: false, // 是否正在提交
|
||||
scrollIntoView: '', // 滚动到指定位置
|
||||
assistantAvatar: '/static/images/assistant-avatar.png', // 医生助理头像(需要替换为实际路径)
|
||||
assistantAvatar: '/static/images/assistant-avatar.png', // 医生助理头像(默认值,会从后端获取)
|
||||
assistantName: '医生助理', // 医生助理名字(默认值,会从后端获取)
|
||||
userAvatar: '/static/images/user-avatar.png', // 用户头像(需要替换为实际路径)
|
||||
prescriptionInfo: '炒黄芪等共2味' // 处方信息(可以从转诊详情中获取)
|
||||
}
|
||||
@@ -182,9 +184,10 @@ export default {
|
||||
return
|
||||
}
|
||||
|
||||
// 加载转诊详情和问题列表
|
||||
// 加载转诊详情、问题列表和助理配置
|
||||
this.loadTransferDetail()
|
||||
this.loadQuestions()
|
||||
this.loadAssistantConfig()
|
||||
},
|
||||
methods: {
|
||||
// 加载转诊详情(获取药品信息)
|
||||
@@ -265,6 +268,20 @@ export default {
|
||||
if (drugNames.length === 1) return drugNames[0]
|
||||
return drugNames[0] + '等共' + drugNames.length + '味'
|
||||
},
|
||||
// 加载助理配置
|
||||
async loadAssistantConfig() {
|
||||
try {
|
||||
const res = await getTransferAssistantConfigApi()
|
||||
if (res.data && res.data.code === 0) {
|
||||
const config = res.data.result || {}
|
||||
this.assistantName = config.name || '医生助理'
|
||||
this.assistantAvatar = config.avatar || '/static/images/assistant-avatar.png'
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('加载助理配置失败:', error)
|
||||
// 失败不影响继续,使用默认值
|
||||
}
|
||||
},
|
||||
// 加载问题列表
|
||||
async loadQuestions() {
|
||||
try {
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
<view class="card">
|
||||
<view class="card-header">
|
||||
<view class="header-icon">
|
||||
<text class="iconfont icon-zhuanzhen"></text>
|
||||
<text class="iconfont icon-mendian"></text>
|
||||
</view>
|
||||
<view class="header-title">转诊处方</view>
|
||||
<!-- 修复:不直接调用方法,而是使用预处理好的属性 -->
|
||||
|
||||
Reference in New Issue
Block a user