This commit is contained in:
huxuejian 2026-02-02 08:52:43 +08:00
commit b08830c7ad
11 changed files with 68 additions and 56 deletions

View File

@ -50,7 +50,7 @@
"quickapp" : {},
/* */
"mp-weixin" : {
"appid" : "wx93af55767423938e",
"appid" : "wx1d8337a40c11d66c",
"setting" : {
"urlCheck" : false
},

View File

@ -5,12 +5,12 @@
<view class="mt-12 text-base text-dark">生命全周期健康管理伙伴</view>
</view>
<view class="login-btn-wrap">
<!-- <button v-if="checked" class="login-btn" type="primary" open-type="getPhoneNumber" @getphonenumber="getPhoneNumber">
手机号快捷登录
</button> -->
<button v-if="checked" class="login-btn" type="primary" @click="getPhoneNumber()">
<button v-if="checked" class="login-btn" type="primary" open-type="getPhoneNumber" @getphonenumber="getPhoneNumber">
手机号快捷登录
</button>
<!-- <button v-if="checked" class="login-btn" type="primary" @click="getPhoneNumber()">
手机号快捷登录
</button> -->
<button v-else class="login-btn" type="primary" @click="remind()">
手机号快捷登录
</button>

View File

@ -120,7 +120,7 @@ const corpId = env.MP_CORP_ID;
//
const pageParams = ref({
groupId: "",
userId: "",
patientId: "",
corpId: "",
});
@ -323,8 +323,19 @@ const sendArticle = async (article) => {
imgUrl: article.cover || "",
desc: "点击查看详情",
});
if (result.success) {
//
try {
await api("addArticleSendRecord", {
articleId: article._id,
userId: doctorInfo.userid,
customerId: pageParams.value.patientId,
corpId: corpId,
});
} catch (recordError) {
console.error("记录文章发送失败:", recordError);
}
uni.navigateBack();
} else {
throw new Error(result.message || "发送失败");
@ -350,8 +361,8 @@ onLoad((options) => {
if (options.groupId) {
pageParams.value.groupId = options.groupId;
}
if (options.userId) {
pageParams.value.userId = options.userId;
if (options.patientId) {
pageParams.value.patientId = options.patientId;
}
if (options.corpId) {
pageParams.value.corpId = options.corpId;

View File

@ -436,10 +436,8 @@ $primary-color: #0877F1;
height: 80rpx;
display: flex;
align-items: center;
justify-content: center;
padding: 0 46rpx;
}
.voice-input-btn {
text-align: center;
line-height: 80rpx;
}
@ -1003,7 +1001,15 @@ $primary-color: #0877F1;
.text-input::-moz-placeholder,
.text-input:-ms-input-placeholder,
.text-input::placeholder {
line-height: 96rpx;
line-height: normal;
}
.voice-input-btn::-webkit-input-placeholder,
.voice-input-btn:-moz-placeholder,
.voice-input-btn::-moz-placeholder,
.voice-input-btn:-ms-input-placeholder,
.voice-input-btn::placeholder {
line-height: 80rpx;
}
/* 时间分割线 */

View File

@ -75,6 +75,7 @@ const props = defineProps({
formatTime: { type: Function, required: true },
groupId: { type: String, default: '' },
userId: { type: String, default: '' },
patientId: { type: String, default: '' },
corpId: { type: String, default: '' },
});
@ -385,7 +386,7 @@ const goToCommonPhrases = () => {
//
const goToArticleList = () => {
uni.navigateTo({
url: `/pages/message/article-list?groupId=${props.groupId}&userId=${props.userId}&corpId=${props.corpId}`
url: `/pages/message/article-list?groupId=${props.groupId}&patientId=${props.patientId}&corpId=${props.corpId}`
});
};

View File

@ -5,7 +5,9 @@
<view class="patient-info-content">
<view class="patient-basic-info">
<text class="patient-name">{{ patientInfo.name }}</text>
<text class="patient-detail">{{ patientInfo.sex }} · {{ patientInfo.age }}</text>
<text class="patient-detail"
>{{ patientInfo.sex }} · {{ patientInfo.age }}</text
>
</view>
<view class="patient-detail-btn" @click="handleViewPatientDetail">
<text class="detail-btn-text">查看档案</text>
@ -164,6 +166,7 @@
: ''
"
:userId="openid"
:patientId="patientId"
:corpId="corpId"
@scrollToBottom="() => scrollToBottom(true)"
@messageSent="() => scrollToBottom(true)"
@ -247,6 +250,9 @@ const patientInfo = ref({
mobile: "",
});
// ID
const patientId = ref("");
// - pending
const showConsultAccept = computed(() => orderStatus.value === "pending");
@ -320,6 +326,10 @@ const fetchGroupOrderStatus = async () => {
mobile: result.data.patient.mobile || "",
};
}
// ID
if (result.data.patientId) {
patientId.value = result.data.patientId.toString();
}
console.log("获取群组订单状态:", {
orderStatus: orderStatus.value,
@ -335,12 +345,6 @@ const fetchGroupOrderStatus = async () => {
}
};
//
function checkConsultPendingStatus() {
//
fetchGroupOrderStatus();
}
//
function getBubbleClass(message) {
//
@ -454,11 +458,6 @@ const initTIMCallbacks = async () => {
})
.then(() => {
console.log("✓ 收到新消息后已标记为已读");
// 0
timChatManager.triggerCallback("onConversationListUpdated", {
conversationID: chatInfo.value.conversationID,
unreadCount: 0,
});
})
.catch((error) => {
console.error("✗ 标记已读失败:", error);
@ -518,9 +517,6 @@ const initTIMCallbacks = async () => {
isCompleted.value = data.isCompleted || false;
isLoadingMore.value = false;
//
checkConsultPendingStatus();
nextTick(() => {
if (data.isRefresh) {
console.log("后台刷新完成,保持当前滚动位置");
@ -615,11 +611,6 @@ const loadMessageList = async () => {
})
.then(() => {
console.log("✓ 会话已标记为已读:", chatInfo.value.conversationID);
//
timChatManager.triggerCallback("onConversationListUpdated", {
conversationID: chatInfo.value.conversationID,
unreadCount: 0,
});
})
.catch((error) => {
console.error("✗ 标记会话已读失败:", error);
@ -776,6 +767,9 @@ onShow(() => {
//
onHide(() => {
stopIMMonitoring();
// ID
timChatManager.currentConversationID = null;
console.log("✓ 页面隐藏已清空当前会话ID");
});
const sendCommonPhrase = (content) => {
@ -900,10 +894,16 @@ const handleRejectReasonCancel = () => {
//
const handleViewPatientDetail = () => {
// TODO:
uni.showToast({
title: "患者详情功能开发中",
icon: "none",
if (!patientId.value) {
uni.showToast({
title: "患者信息不完整",
icon: "none",
});
return;
}
uni.navigateTo({
url: `/pages/case/archive-detail?id=${patientId.value}`,
});
};
//

View File

@ -84,7 +84,7 @@
</template>
<script setup>
import { ref, watch, computed } from "vue";
import { ref, computed } from "vue";
import { onLoad, onShow, onHide } from "@dcloudio/uni-app";
import { storeToRefs } from "pinia";
import useAccountStore from "@/store/account.js";
@ -108,15 +108,6 @@ const { withInfo } = useInfoCheck();
//
const currentTeamId = ref(""); // ""
// IM
watch(isIMInitialized, (newValue) => {
console.log("IM初始化状态变化:", newValue);
if (newValue) {
// IM
loadConversationList();
}
});
//
const conversationList = ref([]);
const loading = ref(false);
@ -522,7 +513,10 @@ onShow(async () => {
return;
}
//
//
await loadConversationList();
//
setupConversationListener();
} catch (error) {
console.error("页面初始化失败:", error);

View File

@ -26,7 +26,7 @@
</view>
</view>
<view v-if="i.qrcode" class="flex justify-center overflow-hidden">
<uqrcode ref="qrcodes" :canvas-id="`qrcode-${idx}`" :value="i.qrcode" :options="options">
<uqrcode ref="qrcodes" :canvasId="`qrcode-${idx}`" :value="i.qrcode" :options="options">
</uqrcode>
</view>
</swiper-item>

View File

@ -19,7 +19,7 @@ export default defineStore("accountStore", () => {
// 从缓存中恢复数据
const account = ref(cache.get(CACHE_KEYS.ACCOUNT, null));
const loading = ref(false);
const loginPromise = ref(null);
// IM 相关
const openid = ref(cache.get(CACHE_KEYS.OPENID, ""));
@ -48,7 +48,7 @@ export default defineStore("accountStore", () => {
});
if (code) {
const res = await api('wxAppLogin', {
appId:appid,
appId: appid,
phoneCode,
code,
corpId,

View File

@ -140,7 +140,7 @@ const urls = Object.keys(urlsConfig).reduce((acc, path) => {
}, {})
console.log('urls: ', urls)
export default async function api(urlId, data) {
export default async function api(urlId, data, loading) {
const config = urls[urlId];
if (!config) {
throw new Error(`Unknown URL ID: ${urlId}`);
@ -151,7 +151,7 @@ export default async function api(urlId, data) {
data: {
...data,
type,
}
})
},
}, loading)
}

View File

@ -42,7 +42,7 @@ export async function mergeConversationWithGroupDetails(conversationList, option
groupIds,
...options // 支持传入额外的查询参数corpId, teamId, keyword等
}
const response = await api('getGroupList', requestData)
const response = await api('getGroupList', requestData, false)
// 4. 检查响应
if (!response || !response.success) {
console.error('获取群组详细信息失败:', response?.message || '未知错误')