This commit is contained in:
huxuejian 2026-02-06 14:37:26 +08:00
commit 21a59da3d2
10 changed files with 88 additions and 23 deletions

View File

@ -1,7 +1,7 @@
MP_API_BASE_URL=https://patient.youcan365.com
MP_IMAGE_URL=https://patient.youcan365.com
MP_CACHE_PREFIX=development
MP_WX_APP_ID=wx6ee11733526b4f04
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

View File

@ -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=wx6ee11733526b4f04
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

View File

@ -1,7 +1,7 @@
MP_API_BASE_URL=http://localhost:8080
MP_IMAGE_URL=https://patient.youcan365.com
MP_CACHE_PREFIX=development
MP_WX_APP_ID=wx6ee11733526b4f04
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

21
App.vue
View File

@ -5,18 +5,21 @@ import { globalTimChatManager } from "@/utils/tim-chat.js";
export default {
onLaunch: function () {
// pinia store getActivePinia
const { account, login, initIMAfterLogin } = useAccountStore();
const { account, login, initIMAfterLogin, getDoctorInfo } =
useAccountStore();
// IM
debugger;
if (account && account.openid) {
console.log("App Launch: 已有登录信息,初始化 IM");
initIMAfterLogin().catch(err => {
console.error('IM初始化失败:', err);
initIMAfterLogin().catch((err) => {
console.error("IM初始化失败:", err);
});
getDoctorInfo();
} else {
console.log("App Launch: 无登录信息,开始登录");
login().catch(err => {
console.error('自动登录失败:', err);
login().catch((err) => {
console.error("自动登录失败:", err);
});
}
},
@ -40,7 +43,7 @@ export default {
</script>
<style lang="scss">
$primary-color: #0877F1;
$primary-color: #0877f1;
page {
height: 100%;
@ -82,7 +85,7 @@ uni-button[type="primary"]:not([disabled]):active {
.relative {
position: relative;
}
.absolute{
.absolute {
position: absolute;
}
@ -159,7 +162,7 @@ uni-button[type="primary"]:not([disabled]):active {
}
.bg-light-text-color::after {
content: '';
content: "";
position: absolute;
top: 0;
left: 0;

View File

@ -123,8 +123,24 @@ const pageParams = ref({
groupId: "",
patientId: "",
corpId: "",
teamId: "",
});
const ensureTeamId = async () => {
if (pageParams.value.teamId) return pageParams.value.teamId;
if (!pageParams.value.groupId) return "";
try {
const res = await api("getGroupListByGroupId", { groupId: pageParams.value.groupId }, false);
const team = res?.data?.team || {};
const resolved = res?.data?.teamId || team.teamId || team._id || "";
if (resolved) pageParams.value.teamId = resolved;
return pageParams.value.teamId;
} catch (err) {
console.error("ensureTeamId failed:", err);
return "";
}
};
const isSelectMode = ref(false);
const selectEventName = ref("");
@ -334,6 +350,7 @@ const sendArticle = async (article) => {
try {
const { doctorInfo } = useAccountStore();
await ensureTeamId();
// 使
const success = await sendArticleMessage(
{
@ -348,6 +365,7 @@ const sendArticle = async (article) => {
userId: doctorInfo?.userid,
customerId: pageParams.value.patientId,
corpId: corpId,
teamId: pageParams.value.teamId,
}
);
@ -383,6 +401,10 @@ onLoad((options) => {
if (options.corpId) {
pageParams.value.corpId = options.corpId;
}
if (options.teamId) {
pageParams.value.teamId = options.teamId;
}
ensureTeamId();
});
onMounted(() => {

View File

@ -76,6 +76,7 @@ const props = defineProps({
formatTime: { type: Function, required: true },
groupId: { type: String, default: "" },
userId: { type: String, default: "" },
teamId: { type: String, default: "" },
patientId: { type: String, default: "" },
corpId: { type: String, default: "" },
orderStatus: { type: String, default: "" },
@ -381,14 +382,14 @@ const showFollowUpTasks = () => {
//
const goToArticleList = () => {
uni.navigateTo({
url: `/pages/message/article-list?groupId=${props.groupId}&patientId=${props.patientId}&corpId=${props.corpId}`,
url: `/pages/message/article-list?groupId=${props.groupId}&patientId=${props.patientId}&corpId=${props.corpId}&teamId=${props.teamId}`,
});
};
//
const goToSurveyList = () => {
uni.navigateTo({
url: `/pages/message/survey-list?groupId=${props.groupId}&patientId=${props.patientId}&corpId=${props.corpId}&customerName=${props.patientInfo.name}`,
url: `/pages/message/survey-list?groupId=${props.groupId}&patientId=${props.patientId}&corpId=${props.corpId}&teamId=${props.teamId}&customerName=${props.patientInfo.name}`,
});
};
@ -510,4 +511,4 @@ onUnmounted(() => {
<style scoped lang="scss">
@import "../chat.scss";
</style>
</style>

View File

@ -160,6 +160,7 @@
: ''
"
:userId="openid"
:teamId="teamId"
:patientId="patientId"
:corpId="corpId"
:patientInfo="patientInfo"
@ -249,6 +250,7 @@ const patientInfo = ref({
// ID
const patientId = ref("");
const teamId = ref("");
// - pending
const showConsultAccept = computed(() => orderStatus.value === "pending");
@ -314,6 +316,8 @@ const fetchGroupOrderStatus = async () => {
const teamName = result.data.team?.name || "群聊";
updateNavigationTitle(teamName);
teamId.value = result.data.teamId || result.data.team?.teamId || result.data.team?._id || "";
//
if (result.data.patient) {
patientInfo.value = {
@ -1018,4 +1022,4 @@ onUnmounted(() => {
<style scoped lang="scss">
@import "./chat.scss";
</style>
</style>

View File

@ -102,6 +102,23 @@ const timChatManager = globalTimChatManager;
//
const customerId = ref("");
const customerName = ref("");
const teamId = ref("");
const groupId = ref("");
const ensureTeamId = async () => {
if (teamId.value) return teamId.value;
if (!groupId.value) return "";
try {
const res = await api("getGroupListByGroupId", { groupId: groupId.value }, false);
const team = res?.data?.team || {};
const resolved = res?.data?.teamId || team.teamId || team._id || "";
if (resolved) teamId.value = resolved;
return teamId.value;
} catch (err) {
console.error("ensureTeamId failed:", err);
return "";
}
};
//
const searchName = ref("");
@ -126,8 +143,11 @@ const selectEventName = ref("");
onLoad((options) => {
isSelectMode.value = String(options?.select || '') === '1';
selectEventName.value = String(options?.eventName || '');
groupId.value = options?.groupId || "";
customerId.value = options?.patientId || "";
customerName.value = options?.customerName || "";
teamId.value = options?.teamId || "";
ensureTeamId();
getCategoryList();
loadSurveyList();
});
@ -335,6 +355,7 @@ const sendSurvey = async (survey) => {
const doctorInfo = accountStore.doctorInfo;
userId.value = doctorInfo?.userid;
await ensureTeamId();
// 使
const success = await sendSurveyMessage(
{
@ -348,6 +369,7 @@ const sendSurvey = async (survey) => {
customerId: customerId.value,
customerName: customerName.value,
corpId: corpId,
teamId: teamId.value,
}
);

View File

@ -41,6 +41,7 @@ export default defineStore("accountStore", () => {
async function loginByCode(phoneCode = '') {
try {
debugger
const { code } = await uni.login({
appid,
provider: "weixin",
@ -82,13 +83,16 @@ export default defineStore("accountStore", () => {
async function getDoctorInfo(data = {}) {
try {
debugger
const res = await api('getCorpMemberData', {
...data,
weChatOpenId: account.value.openid,
});
doctorInfo.value = res?.data || null;
// 持久化医生信息
if (doctorInfo.value.accountState && doctorInfo.value.accountState == "disable") {
uni.redirectTo({ url: "/pages/login/login" });
return;
}
if (res?.data) {
cache.set(CACHE_KEYS.DOCTOR_INFO, res.data);
}

View File

@ -109,12 +109,16 @@ export async function sendArticleMessage(article, options = {}) {
if (result?.success) {
// 记录文章发送记录(异步,不阻塞)
if (options.articleId && options.userId && options.customerId && options.corpId) {
api('addArticleSendRecord', {
const params = {
articleId: options.articleId,
userId: options.userId,
customerId: options.customerId,
corpId: options.corpId,
}).catch((err) => {
};
if (options.teamId) {
params.teamId = options.teamId;
}
api('addArticleSendRecord', params).catch((err) => {
console.error('记录文章发送失败:', err);
});
}
@ -151,15 +155,20 @@ export async function sendSurveyMessage(survey, options = {}) {
// 生成发送ID
const sendSurveyId = generateRandomString(10);
// 创建问卷记录
const createRecordRes = await api('createSurveyRecord', {
const recordParams = {
corpId: options.corpId,
userId: options.userId,
surveryId: survey._id,
memberId: options.customerId,
customer: options.customerName,
sendSurveyId: sendSurveyId,
});
};
if (options.teamId) {
recordParams.teamId = options.teamId;
}
// 创建问卷记录
const createRecordRes = await api('createSurveyRecord', recordParams);
if (!createRecordRes?.success) {
toast(createRecordRes?.message || '创建问卷记录失败');