sadjv3_user/pages/msg/im.vue

1173 lines
28 KiB
Vue
Raw Normal View History

2024-06-05 19:16:02 +08:00
<template>
<view>
2024-07-25 15:36:46 +08:00
<view style="width: 100%;padding-bottom: 140rpx;padding-top: 40rpx;" @click="guanbi">
<view style="display: flex;flex-direction: column;" v-for="(item,index) in ListItem" :key='index'>
2024-06-05 19:16:02 +08:00
<view style="margin-top: 15rpx;width: 100%;text-align: center;font-size: 26rpx;color: #999999;">
{{item.createTime}}
</view>
2024-06-05 19:16:02 +08:00
<view v-if="item.userId === userId" style="width: 83%;margin-left: 15%;">
<view class="chat-listitem" style="float: right;">
<rich-text @longpress="copy(item.content)" v-if="item.content && item.messageType === 3"
:nodes="item.content"></rich-text>
<view @longpress="copy(item.content)" v-if="item.content && item.messageType === 1"
class="chat-listitem-text" style="margin-right: 20rpx;">{{item.content}}</view>
<image @tap="viewImg(item.content)" v-if="item.content && item.messageType === 2"
:src="item.content" style="height: 200rpx;width: 200rpx;margin-right: 20rpx;"></image>
2024-06-05 19:16:02 +08:00
<view>
<image v-if="item.avatar" :src="item.avatar" class="chat-listitem-image"></image>
<image v-else src="../../static/logo.png" class="chat-listitem-image"></image>
</view>
</view>
</view>
<view v-if="item.userId != userId" style="width: 83%;margin-right: 15%;">
<view class="chat-listitem" style="float: left;margin-left: 10rpx;">
<view>
<image :src="item.avatar?item.avatar:'../../static/logo.png'" class="chat-listitem-image">
</image>
2024-06-05 19:16:02 +08:00
</view>
<view v-if="item.content && item.messageType === 1" class="chat-listitem-text1"
style="margin-left: 20rpx;">{{item.content}}</view>
<image @tap="viewImg(item.content)" v-if="item.content && item.messageType === 2"
:src="item.content" style="height: 200rpx;width: 200rpx;margin-left: 20rpx;"></image>
2024-06-05 19:16:02 +08:00
</view>
</view>
</view>
</view>
2024-07-25 15:36:46 +08:00
<!-- 抽屉栏 -->
<view class="popup-layer" :class="popupLayerClass" @touchmove.stop.prevent="discard">
<!-- 表情 -->
2024-07-25 15:36:46 +08:00
<swiper class="emoji-swiper" :class="{hidden:hideEmoji}" indicator-dots="true" duration="150">
<swiper-item v-for="(page,pid) in emojiList" :key="pid">
<view v-for="(em,eid) in page" :key="eid" @tap="addEmoji(em)">
<image mode="widthFix" :src="'/static/imgLt/emoji/'+em.url"></image>
</view>
</swiper-item>
</swiper>
<!-- 更多功能 相册-拍照-红包 -->
<view class="more-layer" :class="{hidden:hideMore}">
<view class="list">
<view class="box" @tap="chooseImage">
<view class="icon tupian2"></view>
</view>
2024-07-25 15:36:46 +08:00
<!-- <view class="box" @tap="camera"><view class="icon paizhao"></view></view> -->
</view>
</view>
</view>
<!-- 底部输入栏 -->
<view class="input-box" :class="popupLayerClass" @touchmove.stop.prevent="discard">
2024-07-25 15:36:46 +08:00
<!-- #ifdef H5 -->
<view class="more" @tap="showMore">
<view class="icon add"></view>
</view>
<!-- #endif -->
<view class="textbox">
<view class="text-mode" :class="isVoice?'hidden':''">
2024-07-25 15:36:46 +08:00
<view class="box">
<textarea auto-height="true" @confirm='setChatSave(1)' v-model="content" />
2024-07-25 15:36:46 +08:00
</view>
<view class="em" @tap="chooseEmoji">
<view class="icon biaoqing"></view>
</view>
</view>
</view>
<!-- #ifndef H5 -->
<view class="more" @tap="showMore">
<view class="icon add"></view>
</view>
<!-- #endif -->
<view class="send" :class="isVoice?'hidden':''" @tap='setChatSave(1)'>
<view class="btn">发送</view>
2024-06-05 19:16:02 +08:00
</view>
</view>
</view>
</template>
<script>
import * as websocketUtils from 'utils/websocketUtils.js';
2024-08-30 15:28:08 +08:00
const maxReconnectMaxCn = 30;
2024-06-05 19:16:02 +08:00
export default {
data() {
return {
2024-07-25 15:36:46 +08:00
videos: [],
charShow: 0,
2024-06-05 19:16:02 +08:00
connected: false,
connecting: false,
msg: false,
type4: [],
listRight: {
chat: {
userHead: ""
},
content: "",
sendType: 1,
type: 1
},
content: '',
chatId: '',
type: 1,
ListItem: [],
ShopState: false,
ShopordersId: '',
Shopimage: '',
Shopmoney: '',
ShopTitle: '',
orderState: false,
ordersId: '',
userId: '',
orderimage: '',
orderNum: '',
teamId: '',
hand: 1,
index: 0,
page: 0,
size: 1000,
countDown: '',
chatConversationId: '',
2024-07-25 15:36:46 +08:00
byUserId: '',
//文字消息
textMsg: '',
2024-07-25 15:36:46 +08:00
//消息列表
msgList: [],
msgImgList: [],
myuid: 0,
isVoice: false,
2024-07-25 15:36:46 +08:00
// 抽屉参数
popupLayerClass: '',
2024-07-25 15:36:46 +08:00
// more参数
hideMore: true,
2024-07-25 15:36:46 +08:00
//表情定义
hideEmoji: true,
emojiList: [
[{
"url": "100.gif",
alt: "[微笑]"
}, {
"url": "101.gif",
alt: "[伤心]"
}, {
"url": "102.gif",
alt: "[美女]"
}, {
"url": "103.gif",
alt: "[发呆]"
}, {
"url": "104.gif",
alt: "[墨镜]"
}, {
"url": "105.gif",
alt: "[哭]"
}, {
"url": "106.gif",
alt: "[羞]"
}, {
"url": "107.gif",
alt: "[哑]"
}, {
"url": "108.gif",
alt: "[睡]"
}, {
"url": "109.gif",
alt: "[哭]"
}, {
"url": "110.gif",
alt: "[囧]"
}, {
"url": "111.gif",
alt: "[怒]"
}, {
"url": "112.gif",
alt: "[调皮]"
}, {
"url": "113.gif",
alt: "[笑]"
}, {
"url": "114.gif",
alt: "[惊讶]"
}, {
"url": "115.gif",
alt: "[难过]"
}, {
"url": "116.gif",
alt: "[酷]"
}, {
"url": "117.gif",
alt: "[汗]"
}, {
"url": "118.gif",
alt: "[抓狂]"
}, {
"url": "119.gif",
alt: "[吐]"
}, {
"url": "120.gif",
alt: "[笑]"
}, {
"url": "121.gif",
alt: "[快乐]"
}, {
"url": "122.gif",
alt: "[奇]"
}, {
"url": "123.gif",
alt: "[傲]"
}],
[{
"url": "124.gif",
alt: "[饿]"
}, {
"url": "125.gif",
alt: "[累]"
}, {
"url": "126.gif",
alt: "[吓]"
}, {
"url": "127.gif",
alt: "[汗]"
}, {
"url": "128.gif",
alt: "[高兴]"
}, {
"url": "129.gif",
alt: "[闲]"
}, {
"url": "130.gif",
alt: "[努力]"
}, {
"url": "131.gif",
alt: "[骂]"
}, {
"url": "132.gif",
alt: "[疑问]"
}, {
"url": "133.gif",
alt: "[秘密]"
}, {
"url": "134.gif",
alt: "[乱]"
}, {
"url": "135.gif",
alt: "[疯]"
}, {
"url": "136.gif",
alt: "[哀]"
}, {
"url": "137.gif",
alt: "[鬼]"
}, {
"url": "138.gif",
alt: "[打击]"
}, {
"url": "139.gif",
alt: "[bye]"
}, {
"url": "140.gif",
alt: "[汗]"
}, {
"url": "141.gif",
alt: "[抠]"
}, {
"url": "142.gif",
alt: "[鼓掌]"
}, {
"url": "143.gif",
alt: "[糟糕]"
}, {
"url": "144.gif",
alt: "[恶搞]"
}, {
"url": "145.gif",
alt: "[什么]"
}, {
"url": "146.gif",
alt: "[什么]"
}, {
"url": "147.gif",
alt: "[累]"
}],
[{
"url": "148.gif",
alt: "[看]"
}, {
"url": "149.gif",
alt: "[难过]"
}, {
"url": "150.gif",
alt: "[难过]"
}, {
"url": "151.gif",
alt: "[坏]"
}, {
"url": "152.gif",
alt: "[亲]"
}, {
"url": "153.gif",
alt: "[吓]"
}, {
"url": "154.gif",
alt: "[可怜]"
}, {
"url": "155.gif",
alt: "[刀]"
}, {
"url": "156.gif",
alt: "[水果]"
}, {
"url": "157.gif",
alt: "[酒]"
}, {
"url": "158.gif",
alt: "[篮球]"
}, {
"url": "159.gif",
alt: "[乒乓]"
}, {
"url": "160.gif",
alt: "[咖啡]"
}, {
"url": "161.gif",
alt: "[美食]"
}, {
"url": "162.gif",
alt: "[动物]"
}, {
"url": "163.gif",
alt: "[鲜花]"
}, {
"url": "164.gif",
alt: "[枯]"
}, {
"url": "165.gif",
alt: "[唇]"
}, {
"url": "166.gif",
alt: "[爱]"
}, {
"url": "167.gif",
alt: "[分手]"
}, {
"url": "168.gif",
alt: "[生日]"
}, {
"url": "169.gif",
alt: "[电]"
}, {
"url": "170.gif",
alt: "[炸弹]"
}, {
"url": "171.gif",
alt: "[刀子]"
}],
[{
"url": "172.gif",
alt: "[足球]"
}, {
"url": "173.gif",
alt: "[瓢虫]"
}, {
"url": "174.gif",
alt: "[翔]"
}, {
"url": "175.gif",
alt: "[月亮]"
}, {
"url": "176.gif",
alt: "[太阳]"
}, {
"url": "177.gif",
alt: "[礼物]"
}, {
"url": "178.gif",
alt: "[抱抱]"
}, {
"url": "179.gif",
alt: "[拇指]"
}, {
"url": "180.gif",
alt: "[贬低]"
}, {
"url": "181.gif",
alt: "[握手]"
}, {
"url": "182.gif",
alt: "[剪刀手]"
}, {
"url": "183.gif",
alt: "[抱拳]"
}, {
"url": "184.gif",
alt: "[勾引]"
}, {
"url": "185.gif",
alt: "[拳头]"
}, {
"url": "186.gif",
alt: "[小拇指]"
}, {
"url": "187.gif",
alt: "[拇指八]"
}, {
"url": "188.gif",
alt: "[食指]"
}, {
"url": "189.gif",
alt: "[ok]"
}, {
"url": "190.gif",
alt: "[情侣]"
}, {
"url": "191.gif",
alt: "[爱心]"
}, {
"url": "192.gif",
alt: "[蹦哒]"
}, {
"url": "193.gif",
alt: "[颤抖]"
}, {
"url": "194.gif",
alt: "[怄气]"
}, {
"url": "195.gif",
alt: "[跳舞]"
}],
[{
"url": "196.gif",
alt: "[发呆]"
}, {
"url": "197.gif",
alt: "[背着]"
}, {
"url": "198.gif",
alt: "[伸手]"
}, {
"url": "199.gif",
alt: "[耍帅]"
}, {
"url": "200.png",
alt: "[微笑]"
}, {
"url": "201.png",
alt: "[生病]"
}, {
"url": "202.png",
alt: "[哭泣]"
}, {
"url": "203.png",
alt: "[吐舌]"
}, {
"url": "204.png",
alt: "[迷糊]"
}, {
"url": "205.png",
alt: "[瞪眼]"
}, {
"url": "206.png",
alt: "[恐怖]"
}, {
"url": "207.png",
alt: "[忧愁]"
}, {
"url": "208.png",
alt: "[眨眉]"
}, {
"url": "209.png",
alt: "[闭眼]"
}, {
"url": "210.png",
alt: "[鄙视]"
}, {
"url": "211.png",
alt: "[阴暗]"
}, {
"url": "212.png",
alt: "[小鬼]"
}, {
"url": "213.png",
alt: "[礼物]"
}, {
"url": "214.png",
alt: "[拜佛]"
}, {
"url": "215.png",
alt: "[力量]"
}, {
"url": "216.png",
alt: "[金钱]"
}, {
"url": "217.png",
alt: "[蛋糕]"
}, {
"url": "218.png",
alt: "[彩带]"
}, {
"url": "219.png",
alt: "[礼物]"
}, ]
2024-07-25 15:36:46 +08:00
],
//表情图片图床名称 ,由于我上传的第三方图床名称会有改变,所以有此数据来做对应,您实际应用中应该不需要
onlineEmoji: {
"100.gif": "AbNQgA.gif",
"101.gif": "AbN3ut.gif",
"102.gif": "AbNM3d.gif",
"103.gif": "AbN8DP.gif",
"104.gif": "AbNljI.gif",
"105.gif": "AbNtUS.gif",
"106.gif": "AbNGHf.gif",
"107.gif": "AbNYE8.gif",
"108.gif": "AbNaCQ.gif",
"109.gif": "AbNN4g.gif",
"110.gif": "AbN0vn.gif",
"111.gif": "AbNd3j.gif",
"112.gif": "AbNsbV.gif",
"113.gif": "AbNwgs.gif",
"114.gif": "AbNrD0.gif",
"115.gif": "AbNDuq.gif",
"116.gif": "AbNg5F.gif",
"117.gif": "AbN6ET.gif",
"118.gif": "AbNcUU.gif",
"119.gif": "AbNRC4.gif",
"120.gif": "AbNhvR.gif",
"121.gif": "AbNf29.gif",
"122.gif": "AbNW8J.gif",
"123.gif": "AbNob6.gif",
"124.gif": "AbN5K1.gif",
"125.gif": "AbNHUO.gif",
"126.gif": "AbNIDx.gif",
"127.gif": "AbN7VK.gif",
"128.gif": "AbNb5D.gif",
"129.gif": "AbNX2d.gif",
"130.gif": "AbNLPe.gif",
"131.gif": "AbNjxA.gif",
"132.gif": "AbNO8H.gif",
"133.gif": "AbNxKI.gif",
"134.gif": "AbNzrt.gif",
"135.gif": "AbU9Vf.gif",
"136.gif": "AbUSqP.gif",
"137.gif": "AbUCa8.gif",
"138.gif": "AbUkGQ.gif",
"139.gif": "AbUFPg.gif",
"140.gif": "AbUPIS.gif",
"141.gif": "AbUZMn.gif",
"142.gif": "AbUExs.gif",
"143.gif": "AbUA2j.gif",
"144.gif": "AbUMIU.gif",
"145.gif": "AbUerq.gif",
"146.gif": "AbUKaT.gif",
"147.gif": "AbUmq0.gif",
"148.gif": "AbUuZV.gif",
"149.gif": "AbUliF.gif",
"150.gif": "AbU1G4.gif",
"151.gif": "AbU8z9.gif",
"152.gif": "AbU3RJ.gif",
"153.gif": "AbUYs1.gif",
"154.gif": "AbUJMR.gif",
"155.gif": "AbUadK.gif",
"156.gif": "AbUtqx.gif",
"157.gif": "AbUUZ6.gif",
"158.gif": "AbUBJe.gif",
"159.gif": "AbUdIO.gif",
"160.gif": "AbU0iD.gif",
"161.gif": "AbUrzd.gif",
"162.gif": "AbUDRH.gif",
"163.gif": "AbUyQA.gif",
"164.gif": "AbUWo8.gif",
"165.gif": "AbU6sI.gif",
"166.gif": "AbU2eP.gif",
"167.gif": "AbUcLt.gif",
"168.gif": "AbU4Jg.gif",
"169.gif": "AbURdf.gif",
"170.gif": "AbUhFS.gif",
"171.gif": "AbU5WQ.gif",
"172.gif": "AbULwV.gif",
"173.gif": "AbUIzj.gif",
"174.gif": "AbUTQs.gif",
"175.gif": "AbU7yn.gif",
"176.gif": "AbUqe0.gif",
"177.gif": "AbUHLq.gif",
"178.gif": "AbUOoT.gif",
"179.gif": "AbUvYF.gif",
"180.gif": "AbUjFU.gif",
"181.gif": "AbaSSJ.gif",
"182.gif": "AbUxW4.gif",
"183.gif": "AbaCO1.gif",
"184.gif": "Abapl9.gif",
"185.gif": "Aba9yR.gif",
"186.gif": "AbaFw6.gif",
"187.gif": "Abaiex.gif",
"188.gif": "AbakTK.gif",
"189.gif": "AbaZfe.png",
"190.gif": "AbaEFO.gif",
"191.gif": "AbaVYD.gif",
"192.gif": "AbamSH.gif",
"193.gif": "AbaKOI.gif",
"194.gif": "Abanld.gif",
"195.gif": "Abau6A.gif",
"196.gif": "AbaQmt.gif",
"197.gif": "Abal0P.gif",
"198.gif": "AbatpQ.gif",
"199.gif": "Aba1Tf.gif",
"200.png": "Aba8k8.png",
"201.png": "AbaGtS.png",
"202.png": "AbaJfg.png",
"203.png": "AbaNlj.png",
"204.png": "Abawmq.png",
"205.png": "AbaU6s.png",
"206.png": "AbaaXn.png",
"207.png": "Aba000.png",
"208.png": "AbarkT.png",
"209.png": "AbastU.png",
"210.png": "AbaB7V.png",
"211.png": "Abafn1.png",
"212.png": "Abacp4.png",
"213.png": "AbayhF.png",
"214.png": "Abag1J.png",
"215.png": "Aba2c9.png",
"216.png": "AbaRXR.png",
"217.png": "Aba476.png",
"218.png": "Abah0x.png",
"219.png": "Abdg58.png"
},
webSocketTask: null,
2024-08-05 10:50:50 +08:00
timer: null,
2024-08-30 15:28:08 +08:00
reconnectCn: 1
2024-06-05 19:16:02 +08:00
};
},
2024-07-25 15:36:46 +08:00
onLoad(d) {
this.userId = this.$queue.getData('userId');
2024-08-01 13:50:54 +08:00
// let scoket = uni.getStorageSync('wbescokt')
this.byUserId = d.byUserId
this.chatConversationId = d.chatConversationId;
2024-07-25 15:36:46 +08:00
this.connect();
this.$queue.setData('kfHaveNewMsg', false)
2024-07-25 15:36:46 +08:00
},
2024-06-05 19:16:02 +08:00
computed: {
showMsg() {
if (this.connected) {
if (this.msg) {
return '收到消息:' + this.msg
} else {
return '等待接收消息'
}
} else {
return '尚未连接'
}
}
},
onShow() {
// 接收websocket消息及处理
this.webSocketTask.onMessage((res) => {
let data = JSON.parse(res.data);
console.log("消息及处理", data)
});
2024-08-05 10:50:50 +08:00
},
mounted() {
2024-08-30 15:28:08 +08:00
// this.timer = setInterval(() => {
// this.getTimeOrListItem1();
// }, 3000);
2024-08-05 10:50:50 +08:00
},
2024-06-05 19:16:02 +08:00
onUnload() {
this.selectMsg()
2024-08-30 15:28:08 +08:00
// uni.closeSocket({
// success: () => {
// console.info("退出成功")
// },
// })
this.reconnectCn = 101;
2024-08-05 10:50:50 +08:00
uni.closeSocket({
code: 500,
complete: (res) => {
console.log("主动断开", res);
2024-08-30 15:28:08 +08:00
}
2024-08-05 10:50:50 +08:00
})
uni.hideLoading();
clearInterval(this.timer);
this.timer = null;
2024-06-05 19:16:02 +08:00
},
methods: {
selectMsg() {
let that = this
let data = {
userId: uni.getStorageSync('userId'),
focusedUserId: '0',
// userName:this.order.userName
}
// app/chat/insertChatConversation
this.$Request.postJson('/app/chat/insertChatConversation', data).then(res => {
if (res.data) {
that.$Request.get('/app/chat/selectChatContent?page=1&limit=1000&chatConversationId=' + res
.data.chatConversationId).then(
res => {
if (res.data) {
//将新的查询结果进行保存 isRefresh意义首次进入页面时才查询
that.$queue.setData('keFuLastMsgCount', res.data.totalCount);
}
});
}
})
},
guanbi() {
2024-07-25 15:36:46 +08:00
this.hideDrawer();
},
showChar(index) {
this.charShow != this.charShow
2024-07-25 15:36:46 +08:00
},
2024-06-05 19:16:02 +08:00
copy(content) {
uni.showModal({
title: '温馨提示',
content: '确认要复制此文字吗?',
showCancel: true,
cancelText: '取消',
confirmText: '确认',
success: res => {
if (res.confirm) {
uni.setClipboardData({
data: content,
success: r => {
this.$queue.showToast('复制成功');
}
});
}
}
});
},
getDateDiff(data) {
// 传进来的data必须是日期格式不能是时间戳
//var str = data;
//将字符串转换成时间格式
var timePublish = new Date(data);
var timeNow = new Date();
var minute = 1000 * 60;
var hour = minute * 60;
var day = hour * 24;
var month = day * 30;
var result = "2";
2024-06-05 19:16:02 +08:00
var diffValue = timeNow - timePublish;
var diffMonth = diffValue / month;
var diffWeek = diffValue / (7 * day);
var diffDay = diffValue / day;
var diffHour = diffValue / hour;
var diffMinute = diffValue / minute;
2024-06-05 19:16:02 +08:00
if (diffMonth > 3) {
result = timePublish.getFullYear() + "-";
result += timePublish.getMonth() + "-";
result += timePublish.getDate();
} else if (diffMonth > 1) { //月
result = data.substring(0, 10);
} else if (diffWeek > 1) { //周
result = data.substring(0, 10);
} else if (diffDay > 1) { //天
result = data.substring(0, 10);
} else if (diffHour > 1) { //小时
result = parseInt(diffHour) + "小时前";
} else if (diffMinute > 1) { //分钟
result = parseInt(diffMinute) + "分钟前";
} else {
result = "刚刚";
}
return result;
},
connect() {
let that = this;
let userId = that.$queue.getData('userId');
2024-08-28 23:37:17 +08:00
if (that.connected && that.connecting) {
// uni.showModal({
// content: '正在连接或者已经连接,请勿重复连接',
// showCancel: false
// })
2024-06-05 19:16:02 +08:00
return false
}
that.connecting = true
uni.showLoading({
title: '连接中...'
})
2024-08-02 10:01:09 +08:00
// websocketUtils.getWsBaseUrl()
2024-08-30 15:28:08 +08:00
uni.connectSocket({
2024-07-24 22:49:57 +08:00
url: websocketUtils.getWsBaseUrl() + userId,
2024-06-05 19:16:02 +08:00
data() {
return {
msg: 'Hello'
}
},
header: {
'content-type': 'application/json'
},
method: 'GET',
success(res) {
uni.hideLoading();
that.getTimeOrListItem1();
// 这里是接口调用成功的回调,不是连接成功的回调,请注意
},
fail(err) {
// 这里是接口调用失败的回调,不是连接失败的回调,请注意
console.log("--------------" + JSON.stringify(err))
2024-06-05 19:16:02 +08:00
}
});
// 监听WebSocket连接打开事件
2024-08-30 15:28:08 +08:00
uni.onSocketOpen((res) => {
uni.hideLoading()
2024-08-05 10:50:50 +08:00
console.info("监听WebSocket连接打开事件", res)
2024-06-05 19:16:02 +08:00
});
2024-08-05 10:50:50 +08:00
// 监听WebSocket错误
uni.onSocketError((res) => {
2024-08-30 15:28:08 +08:00
that.connecting = false
that.connected = false
uni.hideLoading()
2024-08-05 10:50:50 +08:00
console.info("监听WebSocket错误" + res)
2024-06-05 19:16:02 +08:00
});
uni.onSocketMessage(function(res) {
2024-08-30 15:28:08 +08:00
console.log('收到服务器内容:' + JSON.stringify(res));
setTimeout(() => {
that.hideDrawer();
that.getTimeOrListItem1();
}, 50);
});
uni.onSocketClose((res) => {
that.connected = false
that.startRecive = false
that.msg = false
console.log('onClose', res)
if (this.reconnectCn < maxReconnectMaxCn) {
2024-08-30 15:28:08 +08:00
this.reconnectCn = this.reconnectCn + 1;
this.connect();
}
});
2024-06-05 19:16:02 +08:00
},
close() {
uni.closeSocket()
},
2024-07-25 15:36:46 +08:00
// 加载初始页面消息
2024-06-05 19:16:02 +08:00
getTimeOrListItem1() {
2024-08-05 10:50:50 +08:00
console.log("接受数据测试");
this.$Request.get('/app/chat/selectChatContent?page=1&limit=1000&chatConversationId=' + this
.chatConversationId).then(
2024-06-05 19:16:02 +08:00
res => {
this.ListItem = [];
if (res.data) {
var time = '';
res.data.list.forEach(d => {
var sf = this.checkBrackets(d.content)
if (sf == true) {
var sss = this.replaceEmoji(d.content);
d.content = sss;
d.messageType = 3;
2024-06-05 19:16:02 +08:00
}
this.ListItem.push(d);
});
console.log('jjj')
2024-08-30 15:28:08 +08:00
this.ListItem = this.ListItem.reverse();
2024-06-05 19:16:02 +08:00
setTimeout(() => {
uni.pageScrollTo({
scrollTop: 99999,
duration: 0
});
}, 50);
}
uni.hideLoading();
});
},
2024-07-25 15:36:46 +08:00
checkBrackets(data) {
// 正则表达式,用于匹配包含中括号的字符串
const regex = /\[|\]/;
// 使用正则表达式的test方法检查数据
return regex.test(data);
2024-06-05 19:16:02 +08:00
},
setChatSave(type) {
//type:1文字 2图片
if (type === 1 && this.content == '') {
this.$queue.showToast('请输入聊天内容');
return;
}
2024-08-01 09:24:07 +08:00
// if (this.chatId == '' || this.chatId == undefined) {
// this.$queue.showToast('网络较差,请稍后再试');
// return;
// }
2024-06-05 19:16:02 +08:00
let userId = this.$queue.getData('userId');
let avatar = this.$queue.getData('avatar');
let phone = this.$queue.getData('phone');
let userName = this.$queue.getData('userName');
if (!phone) {
phone = this.$queue.getData('userName');
}
let data = {
content: this.content,
messageType: type,
userId: this.byUserId,
chatConversationId: this.chatConversationId,
2024-06-05 19:16:02 +08:00
}
if (data.messageType == 2) {
data.width = "100"
2024-07-25 15:36:46 +08:00
}
2024-06-05 19:16:02 +08:00
data = JSON.stringify(data);
2024-06-05 19:16:02 +08:00
let that = this;
uni.sendSocketMessage({
data: data,
success(res) {
2024-06-05 19:16:02 +08:00
let avatar = that.$queue.getData('avatar');
if (!avatar) {
avatar = '../../static/logo.png';
}
let data = {
chat: {
userHead: avatar
},
content: that.content,
type: type,
userId: userId
}
// that.ListItem.push(data);
2024-08-30 15:28:08 +08:00
// setTimeout(() => {
// that.hideDrawer();
// that.getTimeOrListItem1();
// }, 500);
2024-06-05 19:16:02 +08:00
},
fail(err) {
2024-08-28 23:37:17 +08:00
that.connect();
2024-06-05 19:16:02 +08:00
console.log(err);
}
})
this.content = '';
2024-07-25 15:36:46 +08:00
this.textMsg = '';
2024-06-05 19:16:02 +08:00
},
2024-07-25 15:36:46 +08:00
//查看大图
viewImg(item) {
let imgsArray = [];
imgsArray[0] = item;
uni.previewImage({
current: 0,
urls: imgsArray
});
},
//处理图片尺寸,如果不处理宽高,新进入页面加载图片时候会闪
setPicSize(content) {
2024-07-25 15:36:46 +08:00
// 让图片最长边等于设置的最大长度短边等比例缩小图片控件真实改变区别于aspectFit方式。
let maxW = uni.upx2px(350); //350是定义消息图片最大宽度
let maxH = uni.upx2px(350); //350是定义消息图片最大高度
if (content.w > maxW || content.h > maxH) {
let scale = content.w / content.h;
content.w = scale > 1 ? maxW : maxH * scale;
content.h = scale > 1 ? maxW / scale : maxH;
2024-07-25 15:36:46 +08:00
}
return content;
},
2024-07-25 15:36:46 +08:00
//更多功能(点击+弹出)
showMore() {
2024-07-25 15:36:46 +08:00
this.isVoice = false;
this.hideEmoji = true;
if (this.hideMore) {
2024-07-25 15:36:46 +08:00
this.hideMore = false;
this.openDrawer();
} else {
2024-07-25 15:36:46 +08:00
this.hideDrawer();
}
},
// 打开抽屉
openDrawer() {
2024-07-25 15:36:46 +08:00
this.popupLayerClass = 'showLayer';
},
// 隐藏抽屉
hideDrawer() {
2024-07-25 15:36:46 +08:00
this.popupLayerClass = '';
setTimeout(() => {
2024-07-25 15:36:46 +08:00
this.hideMore = true;
this.hideEmoji = true;
}, 150);
2024-07-25 15:36:46 +08:00
},
// 选择图片发送
chooseImage() {
2024-07-25 15:36:46 +08:00
this.getImage('album');
},
//拍照发送
camera() {
2024-07-25 15:36:46 +08:00
let that = this
uni.chooseVideo({
2024-06-05 19:16:02 +08:00
count: 1,
sourceType: ['album', 'camera'],
success: res => {
2024-07-25 15:36:46 +08:00
that.videos.push(res.tempFilePath);
for (let i = 0; i < that.videos.length; i++) {
that.$queue.showLoading("上传中...");
uni.uploadFile({ // 上传接口
url: websocketUtils.uploadFileUrl(), //真实的接口地址
filePath: that.videos[i],
name: 'file',
success: (uploadFileRes) => {
this.content = JSON.parse(uploadFileRes.data).data;
this.setChatSave(2);
uni.hideLoading();
}
});
}
}
})
},
//选照片 or 拍照
getImage(type) {
2024-07-25 15:36:46 +08:00
this.hideDrawer();
uni.chooseImage({
sourceType: [type],
2024-07-25 15:36:46 +08:00
sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
success: (res) => {
2024-06-05 19:16:02 +08:00
for (let i = 0; i < res.tempFilePaths.length; i++) {
this.$queue.showLoading("上传中...");
uni.uploadFile({ // 上传接口
url: websocketUtils.uploadFileUrl(), //真实的接口地址
filePath: res.tempFilePaths[i],
name: 'file',
success: (uploadFileRes) => {
console.log(uploadFileRes)
this.content = JSON.parse(uploadFileRes.data).data;
this.setChatSave(2);
uni.hideLoading();
}
});
}
}
2024-07-25 15:36:46 +08:00
});
2024-06-05 19:16:02 +08:00
},
2024-07-25 15:36:46 +08:00
// 选择表情
chooseEmoji() {
2024-07-25 15:36:46 +08:00
this.hideMore = true;
if (this.hideEmoji) {
2024-07-25 15:36:46 +08:00
this.hideEmoji = false;
this.openDrawer();
} else {
2024-07-25 15:36:46 +08:00
this.hideDrawer();
}
},
//添加表情
addEmoji(em) {
this.content += em.alt;
2024-07-25 15:36:46 +08:00
},
//获取焦点如果不是选表情ing,则关闭抽屉
textareaFocus() {
if (this.popupLayerClass == 'showLayer' && this.hideMore == false) {
2024-07-25 15:36:46 +08:00
this.hideDrawer();
}
},
2024-07-25 15:36:46 +08:00
//替换表情符号为图片
replaceEmoji(str) {
let replacedStr = str.replace(/\[([^(\]|\[)]*)\]/g, (item, index) => {
for (let i = 0; i < this.emojiList.length; i++) {
2024-07-25 15:36:46 +08:00
let row = this.emojiList[i];
for (let j = 0; j < row.length; j++) {
2024-07-25 15:36:46 +08:00
let EM = row[j];
if (EM.alt == item) {
2024-07-25 15:36:46 +08:00
//在线表情路径,图文混排必须使用网络路径,请上传一份表情到你的服务器后再替换此路径
//比如你上传服务器后你的100.gif路径为https://www.xxx.com/emoji/100.gif 则替换onlinePath填写为https://www.xxx.com/emoji/
let onlinePath = 'https://s2.ax1x.com/2019/04/12/'
let imgstr = '<img src="' + onlinePath + this.onlineEmoji[EM.url] + '">';
2024-07-25 15:36:46 +08:00
return imgstr;
}
}
}
2024-06-05 19:16:02 +08:00
});
return '<div style="display: flex;align-items: center;word-wrap:break-word;">' + replacedStr + '</div>';
2024-06-05 19:16:02 +08:00
},
discard() {
2024-07-25 15:36:46 +08:00
return;
}
}
}
2024-06-05 19:16:02 +08:00
</script>
2024-07-25 15:36:46 +08:00
<style lang="scss" scoped>
@import "@/static/HM-chat/css/style.scss";
/deep/.popup-layer {
width: 100%;
2024-08-02 10:01:09 +08:00
}
2024-06-05 19:16:02 +08:00
page {
background-color: #F7F7F7;
}
.bg {
background-color: #FFFFFF;
}
.input-box {
position: fixed;
bottom: 0;
left: 0;
height: 120rpx;
width: 100%;
display: flex;
box-sizing: content-box;
z-index: 999;
/* background-color: #ececec; */
/* padding: 0 5rpx; */
}
.chat-listitem {
display: flex;
margin-top: 20rpx;
padding: 10rpx;
}
.chat-listitem-text {
color: #FFFFFF;
background: #005DFF;
margin-top: 10rpx;
width: fit-content;
padding: 15rpx;
font-size: 30rpx;
height: max-content;
word-wrap: break-word;
word-break: break-all;
border-radius: 10rpx;
}
2024-07-25 15:36:46 +08:00
.chat-listitem-text1 {
/* color: #FFFFFF; */
background: #FFFFFF;
margin-top: 10rpx;
width: fit-content;
padding: 15rpx;
font-size: 30rpx;
height: max-content;
word-wrap: break-word;
word-break: break-all;
border-radius: 10rpx;
}
.chat-listitem-image-type4 {
/* color: #FFFFFF; */
background: #FFFFFF;
width: fit-content;
font-size: 30rpx;
height: max-content;
word-wrap: break-word;
word-break: break-all;
border-top-left-radius: 20rpx;
border-top-right-radius: 20rpx;
}
.chat-listitem-image {
margin-top: 5rpx;
width: 75rpx;
height: 75rpx;
border-radius: 5rpx;
}
.save {
width: 130rpx;
text-align: center;
border-radius: 70rpx;
height: 70rpx;
color: #FFF;
background: #005DFF;
margin: 5rpx 10rpx 0;
line-height: 70rpx;
}
2024-07-25 15:36:46 +08:00
</style>