From d233a42754db85418cca4ed534e46607e2edd53f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E7=90=A6?= Date: Sat, 7 Feb 2026 09:42:08 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BD=AC=E8=AF=8A=E6=96=B9=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages.json | 7 + pages/index/index.vue | 67 +++- request/api/request.js | 3 +- request/api/transferPrescription.js | 36 ++ subPackages/chat/components/MessageBubble.vue | 106 +++++- .../chat/components/TransferMessageBubble.vue | 171 +++++++++ .../components/TransferPrescriptionCard.vue | 247 ++++++++++++ subPackages/my/myappiont.vue | 85 +++++ subPackages/transfer/transfer-message.vue | 356 ++++++++++++++++++ 9 files changed, 1072 insertions(+), 6 deletions(-) create mode 100644 request/api/transferPrescription.js create mode 100644 subPackages/chat/components/TransferMessageBubble.vue create mode 100644 subPackages/my/components/TransferPrescriptionCard.vue create mode 100644 subPackages/transfer/transfer-message.vue diff --git a/pages.json b/pages.json index afd7c54..c66f920 100644 --- a/pages.json +++ b/pages.json @@ -468,6 +468,13 @@ "navigationBarTitleText": "在线问诊", "enablePullDownRefresh": false } + }, + { + "path": "transfer/transfer-message", + "style": { + "navigationBarTitleText": "转诊消息", + "enablePullDownRefresh": true + } } ] } diff --git a/pages/index/index.vue b/pages/index/index.vue index 2f80f77..a93946e 100644 --- a/pages/index/index.vue +++ b/pages/index/index.vue @@ -85,6 +85,32 @@ + + + + + + + + + + + + + + 转诊消息 + {{ transfer.time }} + + + 您有{{ transfer.num }}条转诊消息待处理 + + + 暂无转诊消息 + + + + @@ -157,6 +183,7 @@ import { } from '../../request/api/api' import {getSystemNoticeIndexApi} from '../../request/api/systemNotice' import {getChatFriendsListApi} from "@/request/api/im"; +import {getTransferPrescriptionListApi} from "@/request/api/transferPrescription"; import {checkDev} from "@/utils/utils"; import MessageNotification from "@/components/MessageNotification/MessageNotification.vue"; @@ -169,6 +196,10 @@ export default { order: [], system: [], doctor: [], + transfer: { + num: 0, + time: '' + }, imChat: [], onlineConsultationList: [], // 在线咨询列表 (type=1) onlineReconsultationList: [], // 在线复诊列表 (type=3) @@ -258,6 +289,12 @@ export default { // console.log(res, 'res'); }) }, + // 转诊消息 + goTransfer() { + uni.navigateTo({ + url: '/subPackages/transfer/transfer-message' + }) + }, goChat(item, index) { uni.navigateTo({ url: `/subPackages/chat/chat?room_id=${item.room_id}&nick_name=${item.nick_name}&user_id=${item.id}&avatar=${encodeURIComponent(item.avatar || '')}&room_status=${item.room_status || 0}` @@ -292,10 +329,33 @@ export default { const allChatList = res.data.result || [] // 根据type字段区分在线咨询和在线复诊 this.onlineConsultationList = allChatList.filter(item => item.type === 1 || !item.type) // type=1或未设置type的为在线咨询 - this.onlineReconsultationList = allChatList.filter(item => item.type === 3) // type=3的为在线复诊 + this.onlineReconsultationList = allChatList.filter(item => (item.type === 3 || item.type === 2)) // type=3的为在线复诊 // 保持imChat兼容性(包含所有) this.imChat = allChatList }) + }, + // 获取转诊消息列表 + getTransferList() { + getTransferPrescriptionListApi().then((res) => { + if (res.data && res.data.code == 0) { + const transferList = res.data.result || [] + // 统计待确认的转诊消息数量 + const pendingCount = transferList.filter(item => item.status === 0).length + this.transfer.num = pendingCount + + // 获取最新的转诊时间 + if (transferList.length > 0) { + const latestTransfer = transferList[0] + if (latestTransfer.transfer_time) { + this.transfer.time = latestTransfer.transfer_time + } else if (latestTransfer.created_at) { + this.transfer.time = latestTransfer.created_at + } + } + } + }).catch((error) => { + console.error('获取转诊消息列表失败:', error) + }) } }, mounted() { @@ -305,10 +365,15 @@ export default { this.order = [] this.system = [] this.doctor = [] + this.transfer = { + num: 0, + time: '' + } this.onlineConsultationList = [] this.onlineReconsultationList = [] this.getInfo() this.getMyChatFriendsList() + this.getTransferList() } } diff --git a/request/api/request.js b/request/api/request.js index 4741047..d58f6ba 100644 --- a/request/api/request.js +++ b/request/api/request.js @@ -153,7 +153,8 @@ function request(url, params, method = 0) { if (url.split('/').indexOf('xkApi') !== -1) { baseURL = envUrls.xkApi; // 如果是guest模式且是xkApi请求,添加/guest/前缀(但避免重复添加) - if (isGuestRequest && url.indexOf('/guest/') === -1) { + // 转诊相关接口需要登录,不转换为guest路由 + if (isGuestRequest && url.indexOf('/guest/') === -1 && url.indexOf('/transfer-prescription') === -1) { url = url.replace('/xkApi', '/guest/xkApi'); } } diff --git a/request/api/transferPrescription.js b/request/api/transferPrescription.js new file mode 100644 index 0000000..13cc7e4 --- /dev/null +++ b/request/api/transferPrescription.js @@ -0,0 +1,36 @@ +import {post, get} from './http' + +/** + * 获取转诊消息列表 + * @returns {Promise<*>} + */ +export async function getTransferPrescriptionListApi() { + return await post('/transfer-prescription/list', {}, 3) +} + +/** + * 获取转诊详情 + * @param params { id: number } + * @returns {Promise<*>} + */ +export async function getTransferPrescriptionDetailApi(params) { + return await get('/transfer-prescription/detail', params, 3) +} + +/** + * 同意转诊 + * @param params { id: number } + * @returns {Promise<*>} + */ +export async function agreeTransferPrescriptionApi(params) { + return await post('/transfer-prescription/agree', params, 3) +} + +/** + * 拒绝转诊 + * @param params { id: number, reason?: string } + * @returns {Promise<*>} + */ +export async function rejectTransferPrescriptionApi(params) { + return await post('/transfer-prescription/reject', params, 3) +} diff --git a/subPackages/chat/components/MessageBubble.vue b/subPackages/chat/components/MessageBubble.vue index 7d35ac0..74e9aaf 100644 --- a/subPackages/chat/components/MessageBubble.vue +++ b/subPackages/chat/components/MessageBubble.vue @@ -202,6 +202,15 @@ + + + + + 不支持的消息类型 @@ -217,8 +226,17 @@ diff --git a/subPackages/chat/components/TransferMessageBubble.vue b/subPackages/chat/components/TransferMessageBubble.vue new file mode 100644 index 0000000..0ea2140 --- /dev/null +++ b/subPackages/chat/components/TransferMessageBubble.vue @@ -0,0 +1,171 @@ + + + + + diff --git a/subPackages/my/components/TransferPrescriptionCard.vue b/subPackages/my/components/TransferPrescriptionCard.vue new file mode 100644 index 0000000..6eb46a4 --- /dev/null +++ b/subPackages/my/components/TransferPrescriptionCard.vue @@ -0,0 +1,247 @@ + + + + + diff --git a/subPackages/my/myappiont.vue b/subPackages/my/myappiont.vue index 2e62d5f..57f1ffc 100644 --- a/subPackages/my/myappiont.vue +++ b/subPackages/my/myappiont.vue @@ -62,6 +62,15 @@ {{item.store}} + + + + 查看详情 @@ -78,7 +87,15 @@ import { getRegisterListApi } from '../../request/api/register' + import { + agreeTransferPrescriptionApi, + rejectTransferPrescriptionApi + } from '../../request/api/transferPrescription' + import TransferPrescriptionCard from './components/TransferPrescriptionCard.vue' export default { + components: { + TransferPrescriptionCard + }, data() { return { status: 'nomore', @@ -112,6 +129,74 @@ url: "/subPackages/register/register-info?id=" + id + '&type=' + 1 }) }, + // 同意转诊 + handleTransferAgree(transferData) { + uni.showModal({ + title: '确认转诊', + content: '确定同意转诊吗?', + success: (res) => { + if (res.confirm) { + agreeTransferPrescriptionApi({ id: transferData.id }).then((result) => { + if (result.data.code == 0) { + uni.showToast({ + title: '同意转诊成功', + icon: 'success' + }) + // 刷新列表 + this.page = 1 + this.infoList = [] + this.getInfos() + } else { + uni.showToast({ + title: result.data.message || '操作失败', + icon: 'none' + }) + } + }).catch((error) => { + console.error('同意转诊失败:', error) + uni.showToast({ + title: '操作失败,请重试', + icon: 'none' + }) + }) + } + } + }) + }, + // 拒绝转诊 + handleTransferReject(transferData) { + uni.showModal({ + title: '拒绝转诊', + content: '确定拒绝转诊吗?', + success: (res) => { + if (res.confirm) { + rejectTransferPrescriptionApi({ id: transferData.id }).then((result) => { + if (result.data.code == 0) { + uni.showToast({ + title: '已拒绝转诊', + icon: 'success' + }) + // 刷新列表 + this.page = 1 + this.infoList = [] + this.getInfos() + } else { + uni.showToast({ + title: result.data.message || '操作失败', + icon: 'none' + }) + } + }).catch((error) => { + console.error('拒绝转诊失败:', error) + uni.showToast({ + title: '操作失败,请重试', + icon: 'none' + }) + }) + } + } + }) + }, // 就诊人列表 getInfolist() { userList({ diff --git a/subPackages/transfer/transfer-message.vue b/subPackages/transfer/transfer-message.vue new file mode 100644 index 0000000..777974a --- /dev/null +++ b/subPackages/transfer/transfer-message.vue @@ -0,0 +1,356 @@ + + + + + \ No newline at end of file