From 26bd604e45e89fa38cbc561f54d9625a57fbb7cd Mon Sep 17 00:00:00 2001
From: wangdongbo <949818794@qq.com>
Date: Wed, 4 Feb 2026 17:09:20 +0800
Subject: [PATCH 1/6] no message
---
.../archive-detail/follow-up-manage-tab.vue | 56 +--
pages/message/article-list.vue | 77 +---
pages/message/components/chat-input.vue | 25 +-
pages/message/index.vue | 38 ++
pages/message/survey-list.vue | 58 +--
utils/send-message-helper.js | 330 ++++++++++++++++++
6 files changed, 454 insertions(+), 130 deletions(-)
create mode 100644 utils/send-message-helper.js
diff --git a/pages/case/components/archive-detail/follow-up-manage-tab.vue b/pages/case/components/archive-detail/follow-up-manage-tab.vue
index e041c9d..9d1ba92 100644
--- a/pages/case/components/archive-detail/follow-up-manage-tab.vue
+++ b/pages/case/components/archive-detail/follow-up-manage-tab.vue
@@ -64,7 +64,7 @@
{{ i.taskContent || "暂无内容" }}
- 【发送内容】
+ 发送内容:
{{ i.sendContent }}
@@ -204,6 +204,7 @@ import dayjs from "dayjs";
import api from "@/utils/api";
import useAccountStore from "@/store/account";
import { toast } from "@/utils/widget";
+import { handleFollowUpMessages } from "@/utils/send-message-helper";
import {
getTodoEventTypeLabel,
getTodoEventTypeOptions,
@@ -221,6 +222,15 @@ const accountStore = useAccountStore();
const { account, doctorInfo } = storeToRefs(accountStore);
const { getDoctorInfo } = accountStore;
+function getUserId() {
+ return doctorInfo.value?.userid || "";
+}
+
+function getCorpId() {
+ const team = uni.getStorageSync("ykt_case_current_team") || {};
+ return team.corpId || doctorInfo.value?.corpId || "";
+}
+
const statusTabs = [
{ label: "全部", value: "all" },
{ label: "待处理", value: "processing" },
@@ -275,23 +285,6 @@ const typeSelectedMap = computed(() => {
}, {});
});
-function getUserId() {
- const d = doctorInfo.value || {};
- const a = account.value || {};
- return (
- String(
- d.userid || d.userId || d.corpUserId || a.userid || a.userId || ""
- ) || ""
- );
-}
-
-function getCorpId() {
- const t = uni.getStorageSync("ykt_case_current_team") || {};
- const a = account.value || {};
- const d = doctorInfo.value || {};
- return String(t.corpId || a.corpId || d.corpId || "") || "";
-}
-
async function ensureDoctor() {
if (doctorInfo.value) return;
if (!account.value?.openid) return;
@@ -537,9 +530,12 @@ async function sendFollowUp(todo) {
messages.push({
type: "article",
content: {
+ _id: file.file?._id || file._id,
title: file.file?.name || file.name || "宣教文章",
url: file.file?.url || file.URL,
- desc: file.file?.subtitle || "",
+ subtitle: file.file?.subtitle || "",
+ cover: file.file?.cover || "",
+ articleId: file.file?._id || file._id,
},
});
} else if (file.type === "questionnaire" && file.file?.surveryId) {
@@ -547,7 +543,8 @@ async function sendFollowUp(todo) {
messages.push({
type: "questionnaire",
content: {
- title: file.file?.name || file.name || "问卷",
+ _id: file.file?._id || file._id,
+ name: file.file?.name || file.name || "问卷",
surveryId: file.file?.surveryId || file.surveryId,
url: file.file?.url || file.URL,
},
@@ -556,15 +553,19 @@ async function sendFollowUp(todo) {
}
}
- // 触发事件,通知父组件发送消息
- uni.$emit("send-followup-message", {
- messages,
- followupId: todo._id,
- followupData: todo,
+ // 调用统一的消息发送处理函数
+ const success = await handleFollowUpMessages(messages, {
+ userId: getUserId(),
+ customerId: props.archiveId,
+ customerName: props.data?.name || "",
+ corpId: getCorpId(),
+ env: __VITE_ENV__,
});
- toast("消息已发送");
- uni.navigateBack();
+ if (success) {
+ toast("消息已发送");
+ uni.navigateBack();
+ }
}
// ---- filter popup ----
@@ -863,6 +864,7 @@ watch(
text-overflow: ellipsis;
white-space: nowrap;
flex: 1;
+ width: 330rpx;
}
.file-type-image .file-name {
color: #0877f1;
diff --git a/pages/message/article-list.vue b/pages/message/article-list.vue
index 9f7576a..4c68713 100644
--- a/pages/message/article-list.vue
+++ b/pages/message/article-list.vue
@@ -111,6 +111,7 @@ import { ref, onMounted } from "vue";
import { onLoad } from "@dcloudio/uni-app";
import api from "@/utils/api.js";
import useAccountStore from "@/store/account.js";
+import { sendArticleMessage } from "@/utils/send-message-helper.js";
import EmptyData from "@/components/empty-data.vue";
const accountStore = useAccountStore();
@@ -316,69 +317,25 @@ const sendArticle = async (article) => {
try {
const { doctorInfo } = useAccountStore();
- // 1. 调用后端API记录发送
- const result = await api("sendArticleMessage", {
- groupId: pageParams.value.groupId,
- fromAccount: doctorInfo.userid,
- articleId: article._id,
- title: article.title || "宣教文章",
- imgUrl: article.cover || "",
- desc: "点击查看详情",
- });
-
- if (result.success) {
- // 2. 通过IM系统发送自定义消息到聊天列表
- try {
- // 获取全局IM管理器
- const { globalTimChatManager } = await import("@/utils/tim-chat.js");
-
- if (globalTimChatManager && globalTimChatManager.tim && globalTimChatManager.isLoggedIn) {
- // 重要:设置当前会话ID,确保消息发送到正确的群聊
- const conversationID = `GROUP${pageParams.value.groupId}`;
- globalTimChatManager.currentConversationID = conversationID;
-
- console.log("设置当前会话ID:", conversationID);
-
- // 构建自定义消息数据
- const customMessageData = {
- messageType: "article",
- title: article.title || "宣教文章",
- articleId: article._id,
- cover: article.cover || "",
- desc: "点击查看详情",
- content: article.title || "宣教文章"
- };
-
- // 发送自定义消息
- const sendResult = await globalTimChatManager.sendCustomMessage(customMessageData);
- if (sendResult && sendResult.success) {
- console.log("✓ 文章消息已通过IM系统发送");
- } else {
- console.warn("⚠️ 文章消息发送失败:", sendResult?.error);
- }
- } else {
- console.warn("⚠️ IM系统未就绪,消息可能不会显示在聊天列表");
- }
- } catch (imError) {
- console.error("通过IM系统发送消息失败:", imError);
- // IM发送失败不影响后端记录,继续返回
- }
-
- // 3. 记录文章发送记录
- try {
- await api("addArticleSendRecord", {
- articleId: article._id,
- userId: doctorInfo.userid,
- customerId: pageParams.value.patientId,
- corpId: corpId,
- });
- } catch (recordError) {
- console.error("记录文章发送失败:", recordError);
+ // 使用统一的消息发送助手
+ const success = await sendArticleMessage(
+ {
+ _id: article._id,
+ title: article.title || "宣教文章",
+ cover: article.cover || "",
+ url: article.url || "",
+ subtitle: article.subtitle || "",
+ },
+ {
+ articleId: article._id,
+ userId: doctorInfo?.userid,
+ customerId: pageParams.value.patientId,
+ corpId: corpId,
}
+ );
+ if (success) {
uni.navigateBack();
- } else {
- throw new Error(result.message || "发送失败");
}
} catch (error) {
console.error("发送文章失败:", error);
diff --git a/pages/message/components/chat-input.vue b/pages/message/components/chat-input.vue
index 391e1bf..f8f7ac0 100644
--- a/pages/message/components/chat-input.vue
+++ b/pages/message/components/chat-input.vue
@@ -81,7 +81,7 @@ const props = defineProps({
});
// Emits
-const emit = defineEmits(["messageSent", "scrollToBottom", "endConsult"]);
+const emit = defineEmits(["messageSent", "scrollToBottom", "endConsult", "openConsult"]);
// 输入相关状态
const inputText = ref("");
@@ -404,6 +404,24 @@ const handleEndConsult = () => {
});
};
+// 开启会话
+const handleOpenConsult = () => {
+ uni.showModal({
+ title: "确认开启会话",
+ content: "确定要重新开启本次会话吗?",
+ confirmText: "确定开启",
+ cancelText: "取消",
+ success: (res) => {
+ if (res.confirm) {
+ // 关闭功能面板
+ showMorePanel.value = false;
+ // 触发父组件的开启会话事件
+ emit("openConsult");
+ }
+ },
+ });
+};
+
const morePanelButtons = [
{ text: "照片", icon: "/static/icon/zhaopian.png", action: showImagePicker },
{
@@ -431,6 +449,11 @@ const morePanelButtons = [
icon: "/static/icon/jieshuzixun.png",
action: handleEndConsult,
},
+ {
+ text: "开启会话",
+ icon: "/static/icon/kaiqihuihua.png",
+ action: handleOpenConsult,
+ },
];
function handleInputFocus() {
diff --git a/pages/message/index.vue b/pages/message/index.vue
index a4061d8..f40deff 100644
--- a/pages/message/index.vue
+++ b/pages/message/index.vue
@@ -166,6 +166,7 @@
@scrollToBottom="() => scrollToBottom(true)"
@messageSent="() => scrollToBottom(true)"
@endConsult="handleEndConsult"
+ @openConsult="handleOpenConsult"
/>
@@ -962,6 +963,43 @@ const handleEndConsult = async () => {
}
};
+// 处理开启会话
+const handleOpenConsult = async () => {
+ try {
+ uni.showLoading({
+ title: "处理中...",
+ });
+ // 调用开启会话接口
+ const result = await api("openConsultation", {
+ groupId: groupId.value,
+ adminAccount: account.value?.userId || "",
+ extraData: {
+ openedBy: account.value?.userId || "",
+ openedByName: account.value?.name || "医生",
+ openReason: "重新开启会话",
+ },
+ });
+ uni.hideLoading();
+ if (result.success) {
+ // 重新获取订单状态
+ await fetchGroupOrderStatus();
+ uni.showToast({
+ title: "会话已开启",
+ icon: "success",
+ });
+ } else {
+ throw new Error(result.message || "操作失败");
+ }
+ } catch (error) {
+ console.error("开启会话失败:", error);
+ uni.hideLoading();
+ uni.showToast({
+ title: error.message || "操作失败",
+ icon: "none",
+ });
+ }
+};
+
// 页面卸载
onUnmounted(() => {
clearMessageCache();
diff --git a/pages/message/survey-list.vue b/pages/message/survey-list.vue
index c681815..03b6ce3 100644
--- a/pages/message/survey-list.vue
+++ b/pages/message/survey-list.vue
@@ -90,6 +90,7 @@ import { ref, onMounted } from "vue";
import api from "@/utils/api.js";
import useAccountStore from "@/store/account.js";
import { globalTimChatManager } from "@/utils/tim-chat.js";
+import { sendSurveyMessage } from "@/utils/send-message-helper.js";
import EmptyData from "@/components/empty-data.vue";
import { onLoad } from "@dcloudio/uni-app";
const env = __VITE_ENV__;
@@ -315,48 +316,23 @@ const sendSurvey = async (survey) => {
const doctorInfo = accountStore.doctorInfo;
userId.value = doctorInfo?.userid;
- // 生成发送ID
- const sendSurveyId = generateRandomString(10);
-
- // 创建问卷记录
- const createRecordRes = await api("createSurveyRecord", {
- corpId: corpId,
- userId: userId.value,
- surveryId: survey._id,
- memberId: customerId.value,
- customer: customerName.value,
- sendSurveyId: sendSurveyId,
- });
-
- if (!createRecordRes.success) {
- uni.showToast({
- title: createRecordRes.message || "创建问卷记录失败",
- icon: "none",
- });
- loading.value = false;
- return;
- }
-
- const answerId = createRecordRes?.id || "";
-
- // 生成发送链接
- const sendLink = generateSendLink(
- survey,
- answerId,
- customerId.value,
- customerName.value,
- sendSurveyId
+ // 使用统一的消息发送助手
+ const success = await sendSurveyMessage(
+ {
+ _id: survey._id,
+ name: survey.name || "问卷",
+ surveryId: survey.surveryId || survey._id,
+ url: survey.url || "",
+ },
+ {
+ userId: userId.value,
+ customerId: customerId.value,
+ customerName: customerName.value,
+ corpId: corpId,
+ }
);
- // 构建自定义消息
- const customMessage = buildSurveyMessage(survey, sendLink);
-
- // 发送自定义消息到IM
- const result = await timChatManager.sendCustomMessage(
- customMessage,
- "SURVEY"
- );
- if (result.success) {
+ if (success) {
uni.showToast({
title: "发送成功",
icon: "success",
@@ -365,8 +341,6 @@ const sendSurvey = async (survey) => {
setTimeout(() => {
uni.navigateBack();
}, 500);
- } else {
- throw new Error(result.error || "发送失败");
}
} catch (error) {
console.error("发送问卷失败:", error);
diff --git a/utils/send-message-helper.js b/utils/send-message-helper.js
new file mode 100644
index 0000000..05f477a
--- /dev/null
+++ b/utils/send-message-helper.js
@@ -0,0 +1,330 @@
+/**
+ * 消息发送助手 - 统一处理不同类型消息的发送
+ */
+
+import { globalTimChatManager } from './tim-chat.js';
+import api from './api.js';
+import { toast } from './widget.js';
+
+/**
+ * 发送文字消息
+ * @param {string} content - 文字内容
+ * @returns {Promise} 发送是否成功
+ */
+export async function sendTextMessage(content) {
+ if (!content || !content.trim()) {
+ toast('文字内容不能为空');
+ return false;
+ }
+
+ try {
+ if (!globalTimChatManager?.isLoggedIn) {
+ toast('IM系统未就绪,请稍后重试');
+ return false;
+ }
+
+ // 直接调用 tim-chat 的 sendTextMessage 方法
+ const result = await globalTimChatManager.sendTextMessage(content.trim());
+
+ if (result?.success) {
+ return true;
+ } else {
+ toast(result?.error || '发送文字消息失败');
+ return false;
+ }
+ } catch (error) {
+ console.error('发送文字消息异常:', error);
+ toast('发送文字消息失败');
+ return false;
+ }
+}
+
+/**
+ * 发送图片消息
+ * @param {string} imageUrl - 图片URL(字符串)
+ * @param {string} imageName - 图片名称(可选)
+ * @returns {Promise} 发送是否成功
+ */
+export async function sendImageMessage(imageUrl, imageName = '图片') {
+ if (!imageUrl) {
+ toast('图片URL不能为空');
+ return false;
+ }
+
+ try {
+ if (!globalTimChatManager?.isLoggedIn) {
+ toast('IM系统未就绪,请稍后重试');
+ return false;
+ }
+
+ // 直接调用 tim-chat 的 sendImageMessage 方法
+ // tim-chat.js 中的 getImageUrl 方法可以处理 URL 字符串
+ const result = await globalTimChatManager.sendImageMessage(imageUrl);
+
+ if (result?.success) {
+ return true;
+ } else {
+ toast(result?.error || '发送图片消息失败');
+ return false;
+ }
+ } catch (error) {
+ console.error('发送图片消息异常:', error);
+ toast('发送图片消息失败');
+ return false;
+ }
+}
+
+/**
+ * 发送宣教文章消息
+ * @param {Object} article - 文章对象 { _id, title, cover, url }
+ * @param {Object} options - 额外选项 { groupId, patientId, corpId }
+ * @returns {Promise} 发送是否成功
+ */
+export async function sendArticleMessage(article, options = {}) {
+ if (!article || !article._id) {
+ toast('文章信息不完整');
+ return false;
+ }
+
+ try {
+ if (!globalTimChatManager?.isLoggedIn) {
+ toast('IM系统未就绪,请稍后重试');
+ return false;
+ }
+
+ // 构建自定义消息 - 直接传递对象,sendCustomMessage会处理JSON序列化
+ const customMessageData = {
+ type: 'article',
+ title: article.title || '宣教文章',
+ articleId: article._id,
+ cover: article.cover || '',
+ desc: article.subtitle || '点击查看详情',
+ url: article.url || '',
+ messageType: 'article',
+ };
+
+ // 发送自定义消息
+ const result = await globalTimChatManager.sendCustomMessage(customMessageData);
+
+ if (result?.success) {
+ // 记录文章发送记录(异步,不阻塞)
+ if (options.articleId && options.userId && options.customerId && options.corpId) {
+ api('addArticleSendRecord', {
+ articleId: options.articleId,
+ userId: options.userId,
+ customerId: options.customerId,
+ corpId: options.corpId,
+ }).catch((err) => {
+ console.error('记录文章发送失败:', err);
+ });
+ }
+ return true;
+ } else {
+ toast(result?.error || '发送文章消息失败');
+ return false;
+ }
+ } catch (error) {
+ console.error('发送文章消息异常:', error);
+ toast('发送文章消息失败');
+ return false;
+ }
+}
+
+/**
+ * 发送问卷消息
+ * @param {Object} survey - 问卷对象 { _id, name, surveryId, url, createBy }
+ * @param {Object} options - 额外选项 { userId, customerId, customerName, corpId, env }
+ * @returns {Promise} 发送是否成功
+ */
+export async function sendSurveyMessage(survey, options = {}) {
+ if (!survey || !survey._id) {
+ toast('问卷信息不完整');
+ return false;
+ }
+
+ try {
+ if (!globalTimChatManager?.isLoggedIn) {
+ toast('IM系统未就绪,请稍后重试');
+ return false;
+ }
+
+ // 生成发送ID
+ const sendSurveyId = generateRandomString(10);
+
+ // 创建问卷记录
+ const createRecordRes = await api('createSurveyRecord', {
+ corpId: options.corpId,
+ userId: options.userId,
+ surveryId: survey._id,
+ memberId: options.customerId,
+ customer: options.customerName,
+ sendSurveyId: sendSurveyId,
+ });
+
+ if (!createRecordRes?.success) {
+ toast(createRecordRes?.message || '创建问卷记录失败');
+ return false;
+ }
+
+ const answerId = createRecordRes?.id || '';
+
+ // 生成问卷链接
+ const surveyLink = generateSendLink(
+ survey,
+ answerId,
+ options.customerId,
+ options.customerName,
+ sendSurveyId,
+ {
+ corpId: options.corpId,
+ userId: options.userId,
+ env: options.env,
+ }
+ );
+
+ // 构建自定义消息
+ const customMessageData = buildSurveyMessage(survey, surveyLink);
+
+ // 发送自定义消息 - 直接传递消息对象,不再进行额外序列化
+ const result = await globalTimChatManager.sendCustomMessage(customMessageData);
+
+ if (result?.success) {
+ return true;
+ } else {
+ toast(result?.error || '发送问卷消息失败');
+ return false;
+ }
+ } catch (error) {
+ console.error('发送问卷消息异常:', error);
+ toast('发送问卷消息失败');
+ return false;
+ }
+}
+
+/**
+ * 生成随机字符串
+ * @param {number} length - 字符串长度
+ * @returns {string} 随机字符串
+ */
+function generateRandomString(length) {
+ const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
+ let result = '';
+ for (let i = 0; i < length; i++) {
+ result += chars.charAt(Math.floor(Math.random() * chars.length));
+ }
+ return result;
+}
+
+/**
+ * 生成问卷发送链接
+ * @param {Object} survey - 问卷对象
+ * @param {string} answerId - 答卷ID
+ * @param {string} customerId - 客户ID
+ * @param {string} customerName - 客户名称
+ * @param {string} sendSurveyId - 发送问卷ID
+ * @param {Object} context - 上下文信息 { corpId, userId, env }
+ * @returns {string} 问卷链接
+ */
+function generateSendLink(survey, answerId, customerId, customerName, sendSurveyId, context = {}) {
+ const { corpId, userId, env } = context;
+ const isSystem = survey.createBy === 'system';
+ let url = '';
+
+ if (isSystem) {
+ // 系统问卷:使用 VITE_SURVEY_URL
+ url = `${env?.MP_SURVEY_URL}?corpId=${corpId}&surveryId=${survey.surveryId}&memberId=${customerId}&sendSurveyId=${sendSurveyId}&userId=${userId}`;
+ } else {
+ // 自定义问卷:使用 VITE_PATIENT_PAGE_BASE_URL
+ url = `${env?.MP_PATIENT_PAGE_BASE_URL}pages/survery/fill?corpId=${corpId}&surveryId=${survey._id}&memberId=${customerId}&unionid=unionid&answerId=${answerId}&name=${customerName || ''}`;
+ }
+
+ // 如果已有链接,直接使用并拼接额外参数
+ if (survey.url && survey.url.trim()) {
+ const separator = survey.url.includes('?') ? '&' : '?';
+ const params = [];
+ if (answerId) params.push(`answerId=${answerId}`);
+ if (sendSurveyId) params.push(`sendSurveyId=${sendSurveyId}`);
+ if (userId) params.push(`userId=${userId}`);
+ if (customerId) params.push(`memberId=${customerId}`);
+
+ if (params.length > 0) {
+ url = `${survey.url}${separator}${params.join('&')}`;
+ } else {
+ url = survey.url;
+ }
+ }
+
+ return url;
+}
+
+/**
+ * 构建问卷自定义消息
+ * @param {Object} survey - 问卷对象
+ * @param {string} surveyLink - 问卷链接
+ * @returns {Object} 自定义消息对象
+ */
+function buildSurveyMessage(survey, surveyLink) {
+ return {
+ type: 'survey',
+ title: survey.name || '填写问卷',
+ desc: '请填写问卷',
+ url: surveyLink,
+ imgUrl:
+ 'https://796f-youcan-clouddev-1-8ewcqf31dbb2b5-1317294507.tcb.qcloud.la/other/19-%E9%97%AE%E5%8D%B7.png?sign=55a4cd77c418b2c548b65792a2cf6bce&t=1701328694',
+ messageType: 'survey',
+ };
+}
+
+/**
+ * 处理回访任务消息发送
+ * @param {Object} messages - 消息数组
+ * @param {Object} context - 上下文信息 { userId, customerId, customerName, corpId }
+ * @returns {Promise} 是否全部发送成功
+ */
+export async function handleFollowUpMessages(messages, context = {}) {
+ if (!Array.isArray(messages) || messages.length === 0) {
+ toast('没有要发送的消息');
+ return false;
+ }
+
+ try {
+ let allSuccess = true;
+
+ for (const msg of messages) {
+ let success = false;
+
+ if (msg.type === 'text') {
+ success = await sendTextMessage(msg.content);
+ } else if (msg.type === 'image') {
+ success = await sendImageMessage(msg.content, msg.name);
+ } else if (msg.type === 'article') {
+ success = await sendArticleMessage(msg.content, {
+ articleId: msg.content.articleId,
+ userId: context.userId,
+ customerId: context.customerId,
+ corpId: context.corpId,
+ });
+ } else if (msg.type === 'questionnaire') {
+ success = await sendSurveyMessage(msg.content, {
+ userId: context.userId,
+ customerId: context.customerId,
+ customerName: context.customerName,
+ corpId: context.corpId,
+ env: context.env,
+ });
+ }
+
+ if (!success) {
+ allSuccess = false;
+ // 继续发送其他消息,不中断
+ }
+ }
+
+ return allSuccess;
+ } catch (error) {
+ console.error('处理回访任务消息异常:', error);
+ toast('消息发送过程中出现错误');
+ return false;
+ }
+}
+
From bbef274c6e980e19e56cd1c62d2fe467c62b46dd Mon Sep 17 00:00:00 2001
From: wangdongbo <949818794@qq.com>
Date: Wed, 4 Feb 2026 17:13:27 +0800
Subject: [PATCH 2/6] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=BC=80=E5=90=AF?=
=?UTF-8?q?=E4=BC=9A=E8=AF=9D=E7=9A=84=E5=8A=9F=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pages/message/components/chat-input.vue | 78 ++++++++++++---------
pages/message/components/system-message.vue | 2 +
pages/message/index.vue | 1 +
utils/api.js | 1 +
4 files changed, 49 insertions(+), 33 deletions(-)
diff --git a/pages/message/components/chat-input.vue b/pages/message/components/chat-input.vue
index f8f7ac0..d31c866 100644
--- a/pages/message/components/chat-input.vue
+++ b/pages/message/components/chat-input.vue
@@ -78,6 +78,7 @@ const props = defineProps({
userId: { type: String, default: "" },
patientId: { type: String, default: "" },
corpId: { type: String, default: "" },
+ orderStatus: { type: String, default: "" },
});
// Emits
@@ -422,39 +423,50 @@ const handleOpenConsult = () => {
});
};
-const morePanelButtons = [
- { text: "照片", icon: "/static/icon/zhaopian.png", action: showImagePicker },
- {
- text: "回访任务",
- icon: "/static/icon/huifangrenwu.png",
- action: showFollowUpTasks,
- },
- {
- text: "常用语",
- icon: "/static/icon/changyongyu.png",
- action: goToCommonPhrases,
- },
- {
- text: "宣教",
- icon: "/static/icon/xuanjiaowenzhang.png",
- action: goToArticleList,
- },
- {
- text: "问卷",
- icon: "/static/icon/wenjuan.png",
- action: goToSurveyList,
- },
- {
- text: "结束问诊",
- icon: "/static/icon/jieshuzixun.png",
- action: handleEndConsult,
- },
- {
- text: "开启会话",
- icon: "/static/icon/kaiqihuihua.png",
- action: handleOpenConsult,
- },
-];
+const morePanelButtons = computed(() => {
+ const buttons = [
+ { text: "照片", icon: "/static/icon/zhaopian.png", action: showImagePicker },
+ {
+ text: "回访任务",
+ icon: "/static/icon/huifangrenwu.png",
+ action: showFollowUpTasks,
+ },
+ {
+ text: "常用语",
+ icon: "/static/icon/changyongyu.png",
+ action: goToCommonPhrases,
+ },
+ {
+ text: "宣教",
+ icon: "/static/icon/xuanjiaowenzhang.png",
+ action: goToArticleList,
+ },
+ {
+ text: "问卷",
+ icon: "/static/icon/wenjuan.png",
+ action: goToSurveyList,
+ },
+ ];
+
+ // 根据订单状态显示不同的按钮
+ if (props.orderStatus === "finished") {
+ // 已结束状态:显示"开启会话"按钮
+ buttons.push({
+ text: "开启会话",
+ icon: "/static/icon/kaiqihuihua.png",
+ action: handleOpenConsult,
+ });
+ } else {
+ // 处理中状态:显示"结束问诊"按钮
+ buttons.push({
+ text: "结束问诊",
+ icon: "/static/icon/jieshuzixun.png",
+ action: handleEndConsult,
+ });
+ }
+
+ return buttons;
+});
function handleInputFocus() {
console.log("handleInputFocus");
diff --git a/pages/message/components/system-message.vue b/pages/message/components/system-message.vue
index de4a907..df33d00 100644
--- a/pages/message/components/system-message.vue
+++ b/pages/message/components/system-message.vue
@@ -75,6 +75,8 @@ const text = computed(() => {
return '问诊已结束';
case 'consult_timeout':
return '问诊已超时';
+ case 'consult_reopened':
+ return '会话已重新开启';
default:
return systemMessageData.value.content || '[系统消息]';
}
diff --git a/pages/message/index.vue b/pages/message/index.vue
index f40deff..af3b417 100644
--- a/pages/message/index.vue
+++ b/pages/message/index.vue
@@ -163,6 +163,7 @@
:patientId="patientId"
:corpId="corpId"
:patientInfo="patientInfo"
+ :orderStatus="orderStatus"
@scrollToBottom="() => scrollToBottom(true)"
@messageSent="() => scrollToBottom(true)"
@endConsult="handleEndConsult"
diff --git a/utils/api.js b/utils/api.js
index 618ee68..ba46fa2 100644
--- a/utils/api.js
+++ b/utils/api.js
@@ -94,6 +94,7 @@ const urlsConfig = {
getChatRecordsByGroupId: "getChatRecordsByGroupId",
sendConsultRejectedMessage: "sendConsultRejectedMessage",
endConsultation: "endConsultation",
+ openConsultation: "openConsultation",
getGroupListByGroupId: "getGroupListByGroupId",
acceptConsultation: "acceptConsultation",
sendArticleMessage: "sendArticleMessage",
From e309705af841a869387e6dc0ae58daa0cb4b715a Mon Sep 17 00:00:00 2001
From: wangdongbo <949818794@qq.com>
Date: Wed, 4 Feb 2026 18:00:49 +0800
Subject: [PATCH 3/6] no message
---
pages/work/profile copy.vue | 4 ++--
pages/work/profile.vue | 2 +-
utils/tim-chat.js | 8 +++++++-
3 files changed, 10 insertions(+), 4 deletions(-)
diff --git a/pages/work/profile copy.vue b/pages/work/profile copy.vue
index cde3235..dd6f598 100644
--- a/pages/work/profile copy.vue
+++ b/pages/work/profile copy.vue
@@ -71,7 +71,7 @@
@@ -110,7 +110,7 @@ const formData = ref({
department: "",
departmentName: "",
departmentId: "",
- intro: "",
+ memberTroduce: "",
});
// 选项数据
diff --git a/pages/work/profile.vue b/pages/work/profile.vue
index 3124fa1..cb8cb8d 100644
--- a/pages/work/profile.vue
+++ b/pages/work/profile.vue
@@ -79,7 +79,7 @@
autoHeight
:border="false"
:form="formData"
- title="intro"
+ title="memberTroduce"
name="个人介绍"
:wordLimit="300"
@change="onChange($event)"
diff --git a/utils/tim-chat.js b/utils/tim-chat.js
index 1a1fd4f..f6f1e35 100644
--- a/utils/tim-chat.js
+++ b/utils/tim-chat.js
@@ -911,7 +911,7 @@ class TimChatManager {
uni.removeStorageSync('account')
uni.removeStorageSync('openid')
uni.reLaunch({
- url: '/pages-center/login/login'
+ url: '/pages/login/login'
})
}
})
@@ -1153,6 +1153,9 @@ class TimChatManager {
case "consult_ended":
lastMessageText = '已结束当前会话'
break
+ case "consult_reopened":
+ lastMessageText = '会话已重新开启'
+ break
default:
lastMessageText = '[自定义消息]'
}
@@ -2580,6 +2583,9 @@ class TimChatManager {
case 'consult_ended':
messageText = '已结束当前会话'
break
+ case 'consult_reopened':
+ messageText = '会话已重新开启'
+ break
default:
messageText = customData.content || '[自定义消息]'
}
From 4a21b231338575c8e6f7c2cd03fe8b56c7e2fe3f Mon Sep 17 00:00:00 2001
From: huxuejian
Date: Wed, 4 Feb 2026 18:30:18 +0800
Subject: [PATCH 4/6] =?UTF-8?q?fix:=20=E9=97=AE=E9=A2=98=E4=BF=AE=E5=A4=8D?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.env.ip | 2 +-
baseData/index.js | 3 +
pages/home/components/cert-popup.vue | 3 +
pages/login/login.vue | 2 +-
pages/login/redirect-page.vue | 2 +-
pages/work/profile.vue | 122 ++++++++-----------------
pages/work/service/contact-service.vue | 2 +-
pages/work/team/list/team-list.vue | 7 +-
8 files changed, 54 insertions(+), 89 deletions(-)
diff --git a/.env.ip b/.env.ip
index 93481d6..22cd3e5 100644
--- a/.env.ip
+++ b/.env.ip
@@ -1,7 +1,7 @@
MP_API_BASE_URL=http://192.168.60.2:8080
MP_IMAGE_URL=https://patient.youcan365.com
MP_CACHE_PREFIX=development
-MP_WX_APP_ID=wx93af55767423938e
+MP_WX_APP_ID=wx1d8337a40c11d66c
MP_CORP_ID=wwe3fb2faa52cf9dfb
MP_TIM_SDK_APP_ID=1600123876
MP_INVITE_TEAMMATE_QRCODE=https://patient.youcan365.com/invite-teammate
diff --git a/baseData/index.js b/baseData/index.js
index 9d252b0..eb40923 100644
--- a/baseData/index.js
+++ b/baseData/index.js
@@ -37,3 +37,6 @@ export const statusClassNames = {
cancelled: "text-gray",
expired: "text-gray",
}
+
+
+export const titleList = ['主任医师', '副主任医师', '主治医师', '住院医师', '护士长', '主管护师', '护师', '护士', '技师', '其他']
\ No newline at end of file
diff --git a/pages/home/components/cert-popup.vue b/pages/home/components/cert-popup.vue
index 59632b6..8deb31c 100644
--- a/pages/home/components/cert-popup.vue
+++ b/pages/home/components/cert-popup.vue
@@ -93,6 +93,9 @@ function confirm() {
}
function toService() {
+ uni.navigateTo({
+ url: '/pages/work/service/contact-service'
+ })
close()
}
diff --git a/pages/login/login.vue b/pages/login/login.vue
index 6cd4ed2..087be87 100644
--- a/pages/login/login.vue
+++ b/pages/login/login.vue
@@ -63,7 +63,7 @@ function remind() {
function toHome() {
uni.switchTab({
- url: "/pages/work/work",
+ url: "/pages/home/work-home",
});
}
diff --git a/pages/login/redirect-page.vue b/pages/login/redirect-page.vue
index 37359bb..cbe9bd4 100644
--- a/pages/login/redirect-page.vue
+++ b/pages/login/redirect-page.vue
@@ -39,7 +39,7 @@ async function toJoinTeam(teamId) {
if (res && res.success) {
await toast('加入团队成功');
return uni.switchTab({
- url: '/pages/work/work'
+ url: '/pages/home/work-home'
})
} else {
await toast(res?.message || '加入团队失败')
diff --git a/pages/work/profile.vue b/pages/work/profile.vue
index 3124fa1..7eaf18b 100644
--- a/pages/work/profile.vue
+++ b/pages/work/profile.vue
@@ -2,97 +2,53 @@
-
+
-
-
-
+
+
+
-
-
+
+
-
-
- {{ jobStr }}
-
-
-
+
+
+
+ {{ jobStr }}
+
+
+
-
-
-
-
-
+
+
+
+ {{ formData.jobName }}
+
+
+
-
-
+
-
+
@@ -100,6 +56,7 @@