Browse Source

聊天室

main
kola-web 4 months ago
parent
commit
b4c4d8c13b
  1. 9
      project.private.config.json
  2. 27
      src/module1/pages/casesDetail/index.ts
  3. 12
      src/module1/pages/casesDetail/index.wxml
  4. 12
      src/module1/pages/chatRoom/index.scss
  5. 324
      src/module1/pages/chatRoom/index.ts
  6. 77
      src/module1/pages/chatRoom/index.wxml
  7. 64
      src/module1/pages/setChatDoctor/index.ts
  8. 12
      src/module1/pages/setChatDoctor/index.wxml
  9. 1
      src/pages/chatRoomList/index.wxml

9
project.private.config.json

@ -11,7 +11,14 @@
{ {
"name": "聊天室", "name": "聊天室",
"pathName": "module1/pages/chatRoom/index", "pathName": "module1/pages/chatRoom/index",
"query": "id=2", "query": "id=4",
"launchMode": "default",
"scene": null
},
{
"name": "module1/pages/setChatDoctor/index",
"pathName": "module1/pages/setChatDoctor/index",
"query": "cid=39&create=1",
"launchMode": "default", "launchMode": "default",
"scene": null "scene": null
}, },

27
src/module1/pages/casesDetail/index.ts

@ -517,6 +517,33 @@ Page({
}, },
}); });
}, },
handleCreateRoomShow() {
this.setData({
show6: true,
});
},
handleRoom() {
wx.navigateTo({
url: `/module1/pages/chatRoom/index?id=${this.data.id}`,
});
},
handleCreateRoomInvite() {
wx.navigateTo({
url: `/module1/pages/setChatDoctor/index?cid=${this.data.id}&create=1`,
});
},
handleCreateRoom() {
wx.ajax({
method: "POST",
url: "?r=takeda/chat/create-room",
data: { caseId: this.data.id },
}).then((res) => {
wx.navigateTo({
url: `/module1/pages/chatRoom/index?id=${res.roomId}`,
});
});
},
}); });
export {}; export {};

12
src/module1/pages/casesDetail/index.wxml

@ -244,11 +244,11 @@
<image class="icon" src="{{imageUrl}}case-detail-footer-icon3.png?t={{Timestamp}}"></image> <image class="icon" src="{{imageUrl}}case-detail-footer-icon3.png?t={{Timestamp}}"></image>
<view class="name">更多操作</view> <view class="name">更多操作</view>
<view class="more" wx:if="{{moreShow}}"> <view class="more" wx:if="{{moreShow}}">
<view class="m-item" wx:if="{{auth.canCreateChatRoom && foldAuth.canCreateChatRoom}}"> <view class="m-item" wx:if="{{auth.canCreateChatRoom && foldAuth.canCreateChatRoom}}" bind:tap="handleCreateRoomShow">
<image class="icon" src="{{imageUrl}}case-detail-footer-icon2.png?t={{Timestamp}}"></image> <image class="icon" src="{{imageUrl}}case-detail-footer-icon2.png?t={{Timestamp}}"></image>
<view class="name">创建聊天室</view> <view class="name">创建聊天室</view>
</view> </view>
<view class="m-item" wx:if="{{auth.canEnterChatRoom && foldAuth.canCreateChatRoom}}"> <view class="m-item" wx:if="{{auth.canEnterChatRoom && foldAuth.canCreateChatRoom}}" bind:tap="handleRoom">
<image class="icon" src="{{imageUrl}}case-detail-footer-icon2.png?t={{Timestamp}}"></image> <image class="icon" src="{{imageUrl}}case-detail-footer-icon2.png?t={{Timestamp}}"></image>
<view class="name">进入聊天室</view> <view class="name">进入聊天室</view>
</view> </view>
@ -305,11 +305,11 @@
<image class="icon" src="{{imageUrl}}case-detail-footer-icon1.png?t={{Timestamp}}"></image> <image class="icon" src="{{imageUrl}}case-detail-footer-icon1.png?t={{Timestamp}}"></image>
<view class="name">驳回原因</view> <view class="name">驳回原因</view>
</view> </view>
<view class="w-item" wx:if="{{auth.canCreateChatRoom && !foldAuth.canCreateChatRoom}}"> <view class="w-item" wx:if="{{auth.canCreateChatRoom && !foldAuth.canCreateChatRoom}}" bind:tap="handleCreateRoomShow">
<image class="icon" src="{{imageUrl}}case-detail-footer-icon2.png?t={{Timestamp}}"></image> <image class="icon" src="{{imageUrl}}case-detail-footer-icon2.png?t={{Timestamp}}"></image>
<view class="name">创建聊天室</view> <view class="name">创建聊天室</view>
</view> </view>
<view class="w-item" wx:if="{{auth.canEnterChatRoom && !foldAuth.canCreateChatRoom}}"> <view class="w-item" wx:if="{{auth.canEnterChatRoom && !foldAuth.canCreateChatRoom}}" bind:tap="handleRoom">
<image class="icon" src="{{imageUrl}}case-detail-footer-icon2.png?t={{Timestamp}}"></image> <image class="icon" src="{{imageUrl}}case-detail-footer-icon2.png?t={{Timestamp}}"></image>
<view class="name">进入聊天室</view> <view class="name">进入聊天室</view>
</view> </view>
@ -452,11 +452,11 @@
<view class="dialog6"> <view class="dialog6">
<van-icon name="cross" class="close" /> <van-icon name="cross" class="close" />
<view class="title">确认创建聊天室</view> <view class="title">确认创建聊天室</view>
<view class="btn1"> <view class="btn1" wx:if="{{auth.canCreateChatRoomInvite}}" bind:tap="handleCreateRoomInvite">
邀约并创建 邀约并创建
<view class="content">您可邀约一位您的合作医生讨论病历</view> <view class="content">您可邀约一位您的合作医生讨论病历</view>
</view> </view>
<view class="btn2">直接创建</view> <view class="btn2" bind:tap="handleCreateRoom">直接创建</view>
<view class="btn3">取消</view> <view class="btn3">取消</view>
</view> </view>
</van-dialog> </van-dialog>

12
src/module1/pages/chatRoom/index.scss

@ -109,6 +109,12 @@ page {
color: rgba(173, 179, 180, 1); color: rgba(173, 179, 180, 1);
text-align: center; text-align: center;
} }
.create {
padding-top: 20rpx;
font-size: 28rpx;
color: rgba(173, 179, 180, 1);
text-align: center;
}
.doctor { .doctor {
padding: 15rpx 30rpx; padding: 15rpx 30rpx;
display: flex; display: flex;
@ -208,6 +214,12 @@ page {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: flex-end; align-items: flex-end;
.user {
padding: 12rpx 0;
font-size: 28rpx;
color: rgba(153, 153, 153, 1);
line-height: 32rpx;
}
.message { .message {
margin-bottom: 32rpx; margin-bottom: 32rpx;
padding: 26rpx 32rpx; padding: 26rpx 32rpx;

324
src/module1/pages/chatRoom/index.ts

@ -8,15 +8,14 @@ interface IMessageItem {
content: any; content: any;
fromDoctorId: string; fromDoctorId: string;
doctorImg: string; doctorImg: string;
msgVisitTime: string; createTime: string;
createTime: ""; createTimeName?: string;
isSelf: 1 | 2; isSelf: 1 | 2;
isRead: 1 | 2; isRead: 1 | 2;
} doctorName: string;
hospitalName: string;
interface Item { showTime?: boolean;
questionId: string; isPlay?: boolean;
question: string;
} }
Page({ Page({
@ -30,104 +29,21 @@ Page({
scrollIntoView: "", scrollIntoView: "",
doctorDetail: {} as any, doctorDetail: {} as any,
questionActive: 0,
questionList: [] as any,
questionActiveList: [] as Item[],
roomDoctors: [], roomDoctors: [],
newRoomDoctors: [], newRoomDoctors: [],
case: {} as any, case: {} as any,
chatGroupInfo: {}, chatGroupInfo: {} as any,
chatDoctor: {}, chatDoctor: {} as any,
isLoad: false, isLoad: false,
isFinish: false, isFinish: false,
messageList: [ messageList: [] as IMessageItem[],
{
msgId: "686",
contentType: "2",
msgContent: "重症肌无力患者复查的频率取决于多种因素",
welcomeMsg: "",
msgVisitTime: "",
msgFromType: "2",
msgCreateTime: "2024-10-10 09:37:40",
},
{
msgId: "686",
contentType: "3",
msgContent: "重症肌无力患者复查的频率取决于多种因素",
welcomeMsg: "",
msgVisitTime: "",
msgFromType: "2",
msgCreateTime: "2024-10-10 09:37:40",
},
{
msgId: "686",
contentType: "2",
msgContent: "重症肌无力患者复查的频率取决于多种因素",
welcomeMsg: "",
msgVisitTime: "",
msgFromType: "1",
msgCreateTime: "2024-10-10 09:37:40",
},
{
msgId: "686",
contentType: "3",
msgContent: "重症肌无力患者复查的频率取决于多种因素",
welcomeMsg: "",
msgVisitTime: "",
msgFromType: "1",
msgCreateTime: "2024-10-10 09:37:40",
},
{
msgId: "681",
contentType: "1",
msgContent: "重症肌无力是否有遗传性?",
welcomeMsg: "",
msgVisitTime: "",
msgFromType: "1",
msgCreateTime: "2024-10-10 09:37:17",
},
{
msgId: "681",
contentType: "1",
msgContent: "重症肌无力是否有遗传性?",
welcomeMsg: "",
msgVisitTime: "",
msgFromType: "1",
msgCreateTime: "2024-10-10 09:37:17",
},
{
msgId: "483",
contentType: "4",
msgContent:
'[{"duration":8,"url":"https://circlehbsaas.oss-cn-beijing.aliyuncs.com/audio/20240907757_tmp_acf4f18c59553a8d2d9f74e173a16328.m4a.mp3"}]',
welcomeMsg: "",
msgVisitTime: "",
msgFromType: "2",
msgCreateTime: "2024-10-08 15:24:19",
},
{
msgId: "483",
contentType: "4",
msgContent:
'[{"duration":8,"url":"https://circlehbsaas.oss-cn-beijing.aliyuncs.com/audio/20240907757_tmp_acf4f18c59553a8d2d9f74e173a16328.m4a.mp3"}]',
welcomeMsg: "",
msgVisitTime: "",
msgFromType: "1",
msgCreateTime: "2024-10-08 15:24:19",
},
],
lastMsgId: "", lastMsgId: "",
unReadCount: 0, unReadCount: 0,
firstNotReadMsgId: 0,
isVisitAdl: 2,
adlMsgId: 0,
week: ["周一", "周二", "周三", "周四", "周五", "周六", "周日"], userInfo: {} as any,
timeDay: { 1: "上午", 2: "下午" },
userInfo: {}, sendMessage: [],
}, },
innerAudioContext: null as WechatMiniprogram.InnerAudioContext | null, innerAudioContext: null as WechatMiniprogram.InnerAudioContext | null,
videoContext: null as WechatMiniprogram.VideoContext | null, videoContext: null as WechatMiniprogram.VideoContext | null,
@ -141,9 +57,12 @@ Page({
this.getMessageList(); this.getMessageList();
this.getDetail(); this.getDetail();
this.listenMessage();
app.getUserInfo(this);
}); });
}, },
onUnload() { onUnload() {
wx.WebIM.conn.close();
if (this.innerAudioContext) { if (this.innerAudioContext) {
this.innerAudioContext.stop(); this.innerAudioContext.stop();
} }
@ -190,6 +109,7 @@ Page({
chatGroupInfo: res.chatGroupInfo, chatGroupInfo: res.chatGroupInfo,
chatDoctor: res.chatDoctor, chatDoctor: res.chatDoctor,
}); });
this.WebIMLogin();
}); });
}, },
handleRoomDetail() { handleRoomDetail() {
@ -203,29 +123,14 @@ Page({
scrollIntoView: index > -1 ? `view${index}` : `place`, scrollIntoView: index > -1 ? `view${index}` : `place`,
}); });
}, },
getDoctorDetail() { listenMessage() {
wx.ajax({ wx.WebIM.conn.addEventHandler("room", {
method: "GET", onConnected: (message) => {
url: "?r=zd/message-interact/get-bind-doctor-info", console.log("message: ", message);
data: {},
}).then((res) => {
this.setData({
doctorDetail: {
...res,
}, },
}); onTextMessage: (meessage) => {
}); console.log("meessage1: ", meessage);
}, },
getQuestionList() {
wx.ajax({
method: "GET",
url: "?r=zd/message-interact/get-question-list",
data: {},
}).then((res) => {
this.setData({
questionList: res,
questionActiveList: res[0].questionList,
});
}); });
}, },
getMessageList() { getMessageList() {
@ -242,23 +147,23 @@ Page({
roomId: this.data.id, roomId: this.data.id,
}, },
}).then((res) => { }).then((res) => {
if (res.length === 0) {
this.setData({
isFinite: true,
});
return;
}
res.map((item) => { res.map((item) => {
//消息内容类型,1-文本,2-语音,3-图片,4-视频,5-提示信息 //消息内容类型,1-文本,2-语音,3-图片,4-视频,5-提示信息
if (["2", "3", "4"].includes(item.contentType)) { if (["2", "3", "4"].includes(item.contentType)) {
item.msgContent = JSON.parse(item.msgContent); item.msgContent = JSON.parse(item.msgContent);
} }
return item; return item;
}); });
this.setData({ this.setData({
messageList: [...res.messageList.reverse(), ...this.data.messageList], messageList: [...res.reverse(), ...this.data.messageList],
lastMsgId: res.lastMsgId, lastMsgId: res[0].msgId,
unReadCount: res.unReadCount,
firstNotReadMsgId: res.firstNotReadMsgId,
isVisitAdl: res.isVisitAdl,
adlMsgId: res.adlMsgId,
isLoad: false, isLoad: false,
isFinish: lastMsgId === res.lastMsgId,
}); });
this.filterCreateTime(); this.filterCreateTime();
if (!lastMsgId) { if (!lastMsgId) {
@ -267,87 +172,114 @@ Page({
}); });
}, },
scrolltoupper(e) { scrolltoupper(e) {
// if (e.detail.direction === 'top') { if (e.detail.direction === "top") {
// this.getMessageList() this.getMessageList();
// } }
},
handleHot(e) {
const { index, mindex } = e.currentTarget.dataset;
const { messageList } = this.data;
const hotList = messageList[mindex].welcomeMsg?.hotQuestion;
const hot = hotList?.[index];
this.setData({
messageList: [
...messageList,
{
msgId: "",
contentType: "1",
msgContent: hot?.question,
msgVisitTime: "",
msgFromType: "1",
msgCreateTime: dayjs().format("YYYY-MM-DD HH:mm:ss"),
}, },
], WebIMLogin() {
const { chatDoctor } = this.data;
wx.WebIM.conn.open({
user: chatDoctor.chatUserId,
pwd: chatDoctor.chatUserPwd,
}); });
this.handleView();
this.sendQuestion(hot?.questionId);
}, },
handleQuestion(e) { handleSendMessage() {
const { index } = e.currentTarget.dataset; const { sendMessage, userInfo } = this.data;
const { questionActiveList, messageList } = this.data; if (!sendMessage) {
const question = questionActiveList[index]; wx.showToast({
this.setData({ icon: "none",
messageList: [ title: "请输入内容",
...messageList, });
{ return;
}
const message: IMessageItem = {
msgId: "", msgId: "",
contentType: "1", contentType: "1",
msgContent: question.question, content: sendMessage,
msgVisitTime: "", fromDoctorId: userInfo.DoctorId,
msgFromType: "1", createTime: dayjs().format("YYYY-MM-DD HH:mm:ss"),
msgCreateTime: dayjs().format("YYYY-MM-DD HH:mm:ss"), isSelf: 1,
}, isRead: 1,
], doctorImg: userInfo.Img,
doctorName: userInfo.Name,
hospitalName: userInfo.HospitalName,
};
this.WebIMSendMessage(message);
},
WebIMSendMessage(message: IMessageItem) {
const { chatGroupInfo } = this.data;
const option = {
type: "txt",
msg: message.content,
to: chatGroupInfo.ChatGroupId,
chatType: "groupChat",
ext: {
...message,
},
};
const msg = wx.WebIM.message.create(option);
wx.WebIM.conn
.send(msg)
.then((res) => {
this.sendMessage({ ...message, uniqueCode: res.serverMsgId });
this.setData({
messageList: [...this.data.messageList, message],
});
})
.catch(() => {
wx.showToast({
icon: "none",
title: "发送失败",
});
}); });
this.sendQuestion(question.questionId);
}, },
sendQuestion(questionId) { sendMessage({ uniqueCode, ...message }) {
wx.ajax({ wx.ajax({
method: "POST", method: "POST",
url: "?r=zd/message-interact/send-question-message", url: "?r=takeda/chat/send-message",
data: { data: {
questionId, roomId: this.data.id,
message: {
contentType: message.contentType,
content: message.content,
uniqueCode,
}, },
}).then((res) => { },
});
},
handleHot(e) {
const { index, mindex } = e.currentTarget.dataset;
const { messageList } = this.data;
const hotList = messageList[mindex].welcomeMsg?.hotQuestion;
const hot = hotList?.[index];
this.setData({ this.setData({
messageList: [ messageList: [
...this.data.messageList, ...messageList,
{ {
msgId: "", msgId: "",
contentType: "1", contentType: "1",
msgContent: res, msgContent: hot?.question,
msgVisitTime: "", msgVisitTime: "",
msgFromType: "2", msgFromType: "1",
msgCreateTime: dayjs().format("YYYY-MM-DD HH:mm:ss"), createTime: dayjs().format("YYYY-MM-DD HH:mm:ss"),
}, },
], ],
}); });
this.filterCreateTime();
this.handleView(); this.handleView();
}); this.sendQuestion(hot?.questionId);
}, },
formatTime(date: string) { formatTime(date: string) {
let msgCreateTimeName = ""; let createTimeName = "";
if (dayjs().format("YYYY-MM-DD") === dayjs(date).format("YYYY-MM-DD")) { if (dayjs().format("YYYY-MM-DD") === dayjs(date).format("YYYY-MM-DD")) {
msgCreateTimeName = dayjs(date).format("HH:mm"); createTimeName = dayjs(date).format("HH:mm");
} else if (dayjs().format("YYYY-MM-DD") === dayjs(date).add(1, "day").format("YYYY-MM-DD")) { } else if (dayjs().format("YYYY-MM-DD") === dayjs(date).add(1, "day").format("YYYY-MM-DD")) {
msgCreateTimeName = `昨天 ${dayjs(date).format("HH:mm")}`; createTimeName = `昨天 ${dayjs(date).format("HH:mm")}`;
} else if (dayjs().diff(date, "day") < 7) { } else if (dayjs().diff(date, "day") < 7) {
msgCreateTimeName = dayjs(date).format(`dddd HH:mm`); createTimeName = dayjs(date).format(`dddd HH:mm`);
} else { } else {
msgCreateTimeName = dayjs(date).format("YYYY-MM-DD HH:mm"); createTimeName = dayjs(date).format("YYYY-MM-DD HH:mm");
} }
return msgCreateTimeName; return createTimeName;
}, },
filterCreateTime() { filterCreateTime() {
const gapTime = 5 * 60 * 1000; const gapTime = 5 * 60 * 1000;
@ -357,14 +289,14 @@ Page({
messageList.forEach((item, index) => { messageList.forEach((item, index) => {
if (index === 0) { if (index === 0) {
item.showTime = true; item.showTime = true;
preTime = dayjs(item.msgCreateTime).valueOf(); preTime = dayjs(item.createTime).valueOf();
item.msgCreateTimeName = this.formatTime(item.msgCreateTime); item.createTimeName = this.formatTime(item.createTime);
} else { } else {
const curTime = dayjs(item.msgCreateTime).valueOf(); const curTime = dayjs(item.createTime).valueOf();
if (curTime - preTime > gapTime) { if (curTime - preTime > gapTime) {
item.showTime = true; item.showTime = true;
item.msgCreateTimeName = this.formatTime(item.msgCreateTime); item.createTimeName = this.formatTime(item.createTime);
preTime = dayjs(item.msgCreateTime).valueOf(); preTime = dayjs(item.createTime).valueOf();
} }
} }
}); });
@ -372,27 +304,6 @@ Page({
messageList, messageList,
}); });
}, },
handleQuestionTab(e) {
const { index } = e.currentTarget.dataset;
this.setData({
questionActive: index,
questionActiveList: this.data.questionList[index].questionList,
});
},
handleDoctorDetail() {
const { doctorId } = this.data.doctorDetail;
wx.navigateTo({
url: `/pages/doctorDetail/index?id=${doctorId}`,
});
},
handleRead() {
const { firstNotReadMsgId, messageList } = this.data;
const index = messageList.findIndex((item) => `${item.msgId}` === `${firstNotReadMsgId}`);
this.handleView(index);
this.setData({
unReadCount: 0,
});
},
handleFooter() { handleFooter() {
this.setData({ this.setData({
fold: !this.data.fold, fold: !this.data.fold,
@ -403,16 +314,11 @@ Page({
}, 300); }, 300);
} }
}, },
handleAdl() {
wx.navigateTo({
url: "/pages/adl/index",
});
},
handleAudio(e) { handleAudio(e) {
const { index } = e.currentTarget.dataset; const { index } = e.currentTarget.dataset;
const { messageList } = this.data; const { messageList } = this.data;
const messageItem = messageList[index]; const messageItem = messageList[index];
const { url } = messageItem.msgContent[0]; const { url } = messageItem.content[0];
if (this.innerAudioContext) { if (this.innerAudioContext) {
if (messageItem.isPlay) { if (messageItem.isPlay) {
this.innerAudioContext.stop(); this.innerAudioContext.stop();

77
src/module1/pages/chatRoom/index.wxml

@ -18,7 +18,7 @@
<view class="line">|</view> <view class="line">|</view>
<view class="hostipal">{{case.hospitalName}}</view> <view class="hostipal">{{case.hospitalName}}</view>
<view class="site" wx:if="{{case.cityName}}"> <view class="site" wx:if="{{case.cityName}}">
{{case.cityName}}{{case.countyName?'/':''}}{{case.countyName}} {{case.cityName}}{{case.countyName ? '/' : ''}}{{case.countyName}}
</view> </view>
</view> </view>
</view> </view>
@ -35,8 +35,9 @@
> >
<van-loading wx:if="{{isLoad && !isFinish}}" /> <van-loading wx:if="{{isLoad && !isFinish}}" />
<view wx:for="{{messageList}}" wx:key="msgId" wx:for-item="message" wx:for-index="mIndex" id="view{{mIndex}}"> <view wx:for="{{messageList}}" wx:key="msgId" wx:for-item="message" wx:for-index="mIndex" id="view{{mIndex}}">
<view class="date" wx:if="{{message.showTime}}">{{message.msgCreateTimeName}}</view> <view class="date" wx:if="{{message.showTime}}">{{message.createTimeName}}</view>
<view class="doctor" wx:if="{{message.msgFromType==='2'}}"> <view class="create" wx:if="{{message.contentType==='5'}}">{{message.content}}</view>
<view class="doctor" wx:elif="{{message.isSelf===2}}">
<view class="avatar"> <view class="avatar">
<image <image
class="a-img" class="a-img"
@ -46,8 +47,18 @@
</view> </view>
<view class="d-container"> <view class="d-container">
<view class="user">李倩 中南大学湘雅医院李倩</view> <view class="user">李倩 中南大学湘雅医院李倩</view>
<view class="message" wx:if="{{message.contentType==='1'}}">{{message.msgContent}}</view> <view class="message" wx:if="{{message.contentType==='1'}}">{{message.content}}</view>
<view class="photo" wx:elif="{{message.contentType==='2'}}"> <view class="audio" wx:elif="{{message.contentType==='2'}}" bind:tap="handleAudio" data-index="{{mIndex}}">
<image
wx:if="{{message.isPlay}}"
class="icon"
src="{{imageUrl}}/audio-right.gif?t={{Timestamp}}"
mode="aspectFit"
></image>
<image wx:else class="icon" src="{{imageUrl}}/audio-right.png?t={{Timestamp}}" mode="aspectFit"></image>
{{message.msgContent[0].duration}}''
</view>
<view class="photo" wx:elif="{{message.contentType==='3'}}">
<image <image
class="p-img" class="p-img"
src="https://pic1.zhimg.com/50/v2-dcfbab1219ae4f7a7a6db168bb1580a2_720w.jpg?source=2c26e567" src="https://pic1.zhimg.com/50/v2-dcfbab1219ae4f7a7a6db168bb1580a2_720w.jpg?source=2c26e567"
@ -57,7 +68,7 @@
data-url="https://pic1.zhimg.com/50/v2-dcfbab1219ae4f7a7a6db168bb1580a2_720w.jpg?source=2c26e567" data-url="https://pic1.zhimg.com/50/v2-dcfbab1219ae4f7a7a6db168bb1580a2_720w.jpg?source=2c26e567"
></image> ></image>
</view> </view>
<view class="video" wx:elif="{{message.contentType==='3'}}" bind:tap="handleVideo"> <view class="video" wx:elif="{{message.contentType==='4'}}" bind:tap="handleVideo">
<image <image
class="v-img" class="v-img"
src="https://pic1.zhimg.com/50/v2-dcfbab1219ae4f7a7a6db168bb1580a2_720w.jpg?source=2c26e567" src="https://pic1.zhimg.com/50/v2-dcfbab1219ae4f7a7a6db168bb1580a2_720w.jpg?source=2c26e567"
@ -68,32 +79,13 @@
></image> ></image>
<image class="play" src="{{imageUrl}}icon-video-play.png?t={{Timestamp}}"></image> <image class="play" src="{{imageUrl}}icon-video-play.png?t={{Timestamp}}"></image>
</view> </view>
<view
class="audio"
wx:elif="{{message.contentType==='4'}}"
bind:tap="handleAudio"
data-index="{{mIndex}}"
>
<image
wx:if="{{message.isPlay}}"
class="icon"
src="{{imageUrl}}/audio-right.gif?t={{Timestamp}}"
mode="aspectFit"
></image>
<image wx:else class="icon" src="{{imageUrl}}/audio-right.png?t={{Timestamp}}" mode="aspectFit"></image>
{{message.msgContent[0].duration}}''
</view>
</view> </view>
</view> </view>
<view class="patient" wx:if="{{message.msgFromType==='1'}}"> <view class="patient" wx:elif="{{message.isSelf===1}}">
<view class="p-container"> <view class="p-container">
<view class="message" wx:if="{{message.contentType==='1'}}">{{message.msgContent}}</view> <view class="user">{{message.doctorName}} {{message.hospitalName}}</view>
<view <view class="message" wx:if="{{message.contentType==='1'}}">{{message.content}}</view>
class="audio" <view class="audio" wx:elif="{{message.contentType==='2'}}" bind:tap="handleAudio" data-index="{{mIndex}}">
wx:elif="{{message.contentType==='4'}}"
bind:tap="handleAudio"
data-index="{{mIndex}}"
>
{{message.msgContent[0].duration}}'' {{message.msgContent[0].duration}}''
<image <image
class="icon" class="icon"
@ -103,7 +95,7 @@
></image> ></image>
<image class="icon" wx:else src="{{imageUrl}}/audio-left.png?t={{Timestamp}}" mode="aspectFit"></image> <image class="icon" wx:else src="{{imageUrl}}/audio-left.png?t={{Timestamp}}" mode="aspectFit"></image>
</view> </view>
<view class="photo" wx:elif="{{message.contentType==='2'}}"> <view class="photo" wx:elif="{{message.contentType==='3'}}">
<image <image
class="p-img" class="p-img"
src="https://pic1.zhimg.com/50/v2-dcfbab1219ae4f7a7a6db168bb1580a2_720w.jpg?source=2c26e567" src="https://pic1.zhimg.com/50/v2-dcfbab1219ae4f7a7a6db168bb1580a2_720w.jpg?source=2c26e567"
@ -113,7 +105,7 @@
data-url="https://pic1.zhimg.com/50/v2-dcfbab1219ae4f7a7a6db168bb1580a2_720w.jpg?source=2c26e567" data-url="https://pic1.zhimg.com/50/v2-dcfbab1219ae4f7a7a6db168bb1580a2_720w.jpg?source=2c26e567"
></image> ></image>
</view> </view>
<view class="video" wx:elif="{{message.contentType==='3'}}" bind:tap="handleVideo"> <view class="video" wx:elif="{{message.contentType==='4'}}" bind:tap="handleVideo">
<image <image
class="v-img" class="v-img"
src="https://pic1.zhimg.com/50/v2-dcfbab1219ae4f7a7a6db168bb1580a2_720w.jpg?source=2c26e567" src="https://pic1.zhimg.com/50/v2-dcfbab1219ae4f7a7a6db168bb1580a2_720w.jpg?source=2c26e567"
@ -126,11 +118,7 @@
</view> </view>
</view> </view>
<view class="avatar"> <view class="avatar">
<image <image class="a-img" mode="aspectFill" src="{{message.doctorImg}}"></image>
class="a-img"
mode="aspectFill"
src="https://pic1.zhimg.com/50/v2-dcfbab1219ae4f7a7a6db168bb1580a2_720w.jpg?source=2c26e567"
></image>
</view> </view>
</view> </view>
</view> </view>
@ -140,7 +128,15 @@
<view class="page-footer"> <view class="page-footer">
<view class="header"> <view class="header">
<image class="icon" src="{{imageUrl}}icon-voice.png?t={{Timestamp}}"></image> <image class="icon" src="{{imageUrl}}icon-voice.png?t={{Timestamp}}"></image>
<input class="input" placeholder-class="place-class" type="text" placeholder="请输入要查询的内容" /> <input
class="input"
placeholder-class="place-class"
type="text"
model:value="{{sendMessage}}"
placeholder="请输入要查询的内容"
confirm-type="send"
bindconfirm="handleSendMessage"
/>
<image <image
class="icon-add" class="icon-add"
src="{{imageUrl}}icon-circle-add.png?t={{Timestamp}}" src="{{imageUrl}}icon-circle-add.png?t={{Timestamp}}"
@ -159,12 +155,11 @@
</view> </view>
</view> </view>
</view> </view>
</view> <video
<video
id="video" id="video"
src="http://wxsnsdy.tc.qq.com/105/20210/snsdyvideodownload?filekey=30280201010421301f0201690402534804102ca905ce620b1241b726bc41dcff44e00204012882540400&bizid=1023&hy=SH&fileparam=302c020101042530230204136ffd93020457e3c4ff02024ef202031e8d7f02030f42400204045a320a0201000400" src="http://wxsnsdy.tc.qq.com/105/20210/snsdyvideodownload?filekey=30280201010421301f0201690402534804102ca905ce620b1241b726bc41dcff44e00204012882540400&bizid=1023&hy=SH&fileparam=302c020101042530230204136ffd93020457e3c4ff02024ef202031e8d7f02030f42400204045a320a0201000400"
></video> ></video>
</view>
<van-popup show="{{ show1 }}" bind:close="onAgreeClose" closeable round> <van-popup show="{{ show1 }}" bind:close="onAgreeClose" closeable round>
<view class="popup1"> <view class="popup1">

64
src/module1/pages/setChatDoctor/index.ts

@ -37,23 +37,26 @@ Page({
}, },
list: [], list: [],
DoctorId: "", DoctorId: [] as any,
params: {},
caseId: "", caseId: "",
detailInvite: false, roomId: "",
feedBackInvite: false, create: false,
userInfo: {} as any,
}, },
onLoad(options) { onLoad(options) {
this.setData({ this.setData({
roomId: options.rid,
caseId: options.cid, caseId: options.cid,
create: options.create === "1",
}); });
app.waitLogin().then(() => { app.waitLogin().then(() => {
this.getList(); this.getList();
this.getDoctorDict(); this.getDoctorDict();
this.getHostipalDict(); this.getHostipalDict();
this.getArea(); this.getArea();
app.getUserInfo(this);
}); });
}, },
getDoctorDict() { getDoctorDict() {
@ -227,59 +230,40 @@ Page({
handleRadio(e) { handleRadio(e) {
const { index } = e.currentTarget.dataset; const { index } = e.currentTarget.dataset;
const { list } = this.data; const { list, DoctorId, userInfo } = this.data;
const id: any = (list as any)[index].doctorId;
if (userInfo.DoctorLevel > 3) {
this.setData({ this.setData({
DoctorId: (list as any)[index].doctorId, DoctorId: DoctorId.includes(id) ? DoctorId.filter((item: any) => item !== id) : [...DoctorId, id],
}); });
} else {
this.setData({
DoctorId: DoctorId.includes(id) ? [] : [id],
});
}
}, },
handleSubmit() { handleSubmit() {
const { feedBackInvite, caseId, DoctorId, params, detailInvite } = this.data; const { caseId, roomId, DoctorId, create } = this.data;
if (!DoctorId) { if (DoctorId.length === 0) {
wx.showToast({ wx.showToast({
title: "请选择指派医生", title: "请选择医生",
icon: "none", icon: "none",
}); });
}
if (feedBackInvite) {
wx.ajax({
method: "POST",
url: "?r=takeda/case/add-feedback",
data: {
caseId,
dealDoctorId: DoctorId,
...params,
},
}).then(() => {
wx.redirectTo({
url: `/module1/pages/casesDetail/index?id=${caseId}`,
});
});
return; return;
} }
if (detailInvite) { const url = create ? "?r=takeda/chat/create-room" : "?r=takeda/chat/invite-doctor";
wx.ajax({ method: "POST", url: "?r=takeda/case/invite-doctor", data: { caseId, dealDoctorId: DoctorId } }).then(
(res) => {
wx.navigateTo({
url: `/module1/pages/entryCasesResult/index?isf=${res.isSubscribe}&wxi=${encodeURIComponent(res.wxImg)}&cid=${res.caseId}`,
});
},
);
return;
}
const url = caseId ? "?r=takeda/case/save-case" : "?r=takeda/case/create-case";
wx.ajax({ wx.ajax({
method: "POST", method: "POST",
url, url,
data: { data: {
...params,
caseId, caseId,
isSubmit: 1, roomId,
dealDoctorId: DoctorId, inviteDoctorId: DoctorId,
}, },
}).then((res) => { }).then((res) => {
wx.reLaunch({ wx.reLaunch({
url: `/module1/pages/entryCasesResult/index?isf=${res.isSubscribe}&wxi=${encodeURIComponent(res.wxImg)}&cid=${res.caseId || caseId}`, url: `/module1/pages/chatRoom/index?id=${res.roomId || roomId}`,
}); });
}); });
}, },

12
src/module1/pages/setChatDoctor/index.wxml

@ -1,6 +1,7 @@
<wxs src="/utils/util.wxs" module="tools" />
<view class="page"> <view class="page">
<view class="header"> <view class="header">
<view class="tip">邀请医生进行病历反馈,提交后医生将收到消息提醒</view> <view class="tip">邀请合作医生加入聊天室讨论病历</view>
<view class="search-wrap"> <view class="search-wrap">
<view class="search"> <view class="search">
<image class="icon" src="{{imageUrl}}icon-search.png?t={{Timestamp}}"></image> <image class="icon" src="{{imageUrl}}icon-search.png?t={{Timestamp}}"></image>
@ -38,10 +39,14 @@
</view> </view>
</view> </view>
<view class="container"> <view class="container">
<radio-group>
<view class="list"> <view class="list">
<view class="list-item" wx:for="{{list}}" wx:key="DoctorId"> <view class="list-item" wx:for="{{list}}" wx:key="DoctorId">
<radio class="radio" value="{{item.DoctorId}}" bind:tap="handleRadio" data-index="{{index}}"></radio> <radio
class="radio"
checked="{{tools.include(item.doctorId,DoctorId)}}"
bind:tap="handleRadio"
data-index="{{index}}"
></radio>
<view class="card" bind:tap="handlePopupDetail" data-index="{{index}}"> <view class="card" bind:tap="handlePopupDetail" data-index="{{index}}">
<doctorAvatar class="avatar" src="{{item.doctorImg}}" level="{{item.doctorLevel}}"></doctorAvatar> <doctorAvatar class="avatar" src="{{item.doctorImg}}" level="{{item.doctorLevel}}"></doctorAvatar>
<view class="wrap"> <view class="wrap">
@ -71,7 +76,6 @@
</view> </view>
<pagination pagination="{{pagination}}"></pagination> <pagination pagination="{{pagination}}"></pagination>
</view> </view>
</radio-group>
</view> </view>
<view class="footer"> <view class="footer">
<view class="cancel" bind:tap="handleBack">返回</view> <view class="cancel" bind:tap="handleBack">返回</view>

1
src/pages/chatRoomList/index.wxml

@ -153,6 +153,7 @@
</view> </view>
</view> </view>
</view> </view>
<pagination pagination="{{pagination}}"></pagination>
</view> </view>
</view> </view>

Loading…
Cancel
Save