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">
|
2025-02-11 14:16:34 +08:00
|
|
|
|
<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;">
|
2025-02-11 14:16:34 +08:00
|
|
|
|
{{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;">
|
2025-02-11 14:16:34 +08:00
|
|
|
|
<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>
|
2025-02-11 14:16:34 +08:00
|
|
|
|
<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>
|
2025-02-11 14:16:34 +08:00
|
|
|
|
<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">
|
2025-02-11 14:16:34 +08:00
|
|
|
|
<!-- 表情 -->
|
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">
|
2025-02-11 14:16:34 +08:00
|
|
|
|
<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">
|
2025-02-11 14:16:34 +08:00
|
|
|
|
|
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">
|
2025-02-11 14:16:34 +08:00
|
|
|
|
<view class="text-mode" :class="isVoice?'hidden':''">
|
2024-07-25 15:36:46 +08:00
|
|
|
|
<view class="box">
|
2025-02-11 14:16:34 +08:00
|
|
|
|
<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: [],
|
2025-02-11 14:16:34 +08:00
|
|
|
|
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: '',
|
|
|
|
|
//文字消息
|
2025-02-11 14:16:34 +08:00
|
|
|
|
textMsg: '',
|
2024-07-25 15:36:46 +08:00
|
|
|
|
//消息列表
|
2025-02-11 14:16:34 +08:00
|
|
|
|
msgList: [],
|
|
|
|
|
msgImgList: [],
|
|
|
|
|
myuid: 0,
|
|
|
|
|
isVoice: false,
|
2024-07-25 15:36:46 +08:00
|
|
|
|
// 抽屉参数
|
2025-02-11 14:16:34 +08:00
|
|
|
|
popupLayerClass: '',
|
2024-07-25 15:36:46 +08:00
|
|
|
|
// more参数
|
2025-02-11 14:16:34 +08:00
|
|
|
|
hideMore: true,
|
2024-07-25 15:36:46 +08:00
|
|
|
|
//表情定义
|
2025-02-11 14:16:34 +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
|
|
|
|
],
|
|
|
|
|
//表情图片图床名称 ,由于我上传的第三方图床名称会有改变,所以有此数据来做对应,您实际应用中应该不需要
|
2025-02-11 14:16:34 +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();
|
2025-02-11 14:16:34 +08:00
|
|
|
|
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 '尚未连接'
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
},
|
2025-02-11 14:16:34 +08:00
|
|
|
|
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() {
|
2025-02-11 14:16:34 +08:00
|
|
|
|
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({
|
2025-02-11 14:16:34 +08:00
|
|
|
|
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);
|
2025-02-11 14:16:34 +08:00
|
|
|
|
this.timer = null;
|
2024-06-05 19:16:02 +08:00
|
|
|
|
},
|
2025-02-11 14:16:34 +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();
|
|
|
|
|
},
|
2025-02-11 14:16:34 +08:00
|
|
|
|
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";
|
2025-02-11 14:16:34 +08:00
|
|
|
|
|
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;
|
2025-02-11 14:16:34 +08:00
|
|
|
|
|
|
|
|
|
|
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) {
|
|
|
|
|
// 这里是接口调用失败的回调,不是连接失败的回调,请注意
|
2025-02-11 14:16:34 +08:00
|
|
|
|
console.log("--------------" + JSON.stringify(err))
|
2024-06-05 19:16:02 +08:00
|
|
|
|
}
|
|
|
|
|
});
|
2025-02-11 14:16:34 +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
|
|
|
|
});
|
2025-02-11 14:16:34 +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)
|
2025-02-11 14:16:34 +08:00
|
|
|
|
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()
|
|
|
|
|
},
|
2025-02-11 14:16:34 +08:00
|
|
|
|
|
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("接受数据测试");
|
2025-02-11 14:16:34 +08:00
|
|
|
|
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 => {
|
2025-02-11 14:16:34 +08:00
|
|
|
|
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);
|
|
|
|
|
});
|
2025-02-11 14:16:34 +08:00
|
|
|
|
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) {
|
2025-02-11 14:16:34 +08:00
|
|
|
|
// 正则表达式,用于匹配包含中括号的字符串
|
|
|
|
|
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,
|
2025-02-11 14:16:34 +08:00
|
|
|
|
|
2024-06-05 19:16:02 +08:00
|
|
|
|
}
|
2025-02-11 14:16:34 +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);
|
2025-02-11 14:16:34 +08:00
|
|
|
|
|
2024-06-05 19:16:02 +08:00
|
|
|
|
let that = this;
|
|
|
|
|
uni.sendSocketMessage({
|
|
|
|
|
data: data,
|
|
|
|
|
success(res) {
|
2025-02-11 14:16:34 +08:00
|
|
|
|
|
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
|
|
|
|
},
|
2025-02-11 14:16:34 +08:00
|
|
|
|
|
2024-07-25 15:36:46 +08:00
|
|
|
|
//查看大图
|
|
|
|
|
viewImg(item) {
|
|
|
|
|
let imgsArray = [];
|
|
|
|
|
imgsArray[0] = item;
|
|
|
|
|
uni.previewImage({
|
|
|
|
|
current: 0,
|
|
|
|
|
urls: imgsArray
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
//处理图片尺寸,如果不处理宽高,新进入页面加载图片时候会闪
|
2025-02-11 14:16:34 +08:00
|
|
|
|
setPicSize(content) {
|
2024-07-25 15:36:46 +08:00
|
|
|
|
// 让图片最长边等于设置的最大长度,短边等比例缩小,图片控件真实改变,区别于aspectFit方式。
|
2025-02-11 14:16:34 +08:00
|
|
|
|
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;
|
|
|
|
|
},
|
2025-02-11 14:16:34 +08:00
|
|
|
|
|
2024-07-25 15:36:46 +08:00
|
|
|
|
//更多功能(点击+弹出)
|
2025-02-11 14:16:34 +08:00
|
|
|
|
showMore() {
|
2024-07-25 15:36:46 +08:00
|
|
|
|
this.isVoice = false;
|
|
|
|
|
this.hideEmoji = true;
|
2025-02-11 14:16:34 +08:00
|
|
|
|
if (this.hideMore) {
|
2024-07-25 15:36:46 +08:00
|
|
|
|
this.hideMore = false;
|
|
|
|
|
this.openDrawer();
|
2025-02-11 14:16:34 +08:00
|
|
|
|
} else {
|
2024-07-25 15:36:46 +08:00
|
|
|
|
this.hideDrawer();
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
// 打开抽屉
|
2025-02-11 14:16:34 +08:00
|
|
|
|
openDrawer() {
|
2024-07-25 15:36:46 +08:00
|
|
|
|
this.popupLayerClass = 'showLayer';
|
|
|
|
|
},
|
|
|
|
|
// 隐藏抽屉
|
2025-02-11 14:16:34 +08:00
|
|
|
|
hideDrawer() {
|
2024-07-25 15:36:46 +08:00
|
|
|
|
this.popupLayerClass = '';
|
2025-02-11 14:16:34 +08:00
|
|
|
|
setTimeout(() => {
|
2024-07-25 15:36:46 +08:00
|
|
|
|
this.hideMore = true;
|
|
|
|
|
this.hideEmoji = true;
|
2025-02-11 14:16:34 +08:00
|
|
|
|
}, 150);
|
2024-07-25 15:36:46 +08:00
|
|
|
|
},
|
|
|
|
|
// 选择图片发送
|
2025-02-11 14:16:34 +08:00
|
|
|
|
chooseImage() {
|
2024-07-25 15:36:46 +08:00
|
|
|
|
this.getImage('album');
|
|
|
|
|
},
|
|
|
|
|
//拍照发送
|
2025-02-11 14:16:34 +08:00
|
|
|
|
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 拍照
|
2025-02-11 14:16:34 +08:00
|
|
|
|
getImage(type) {
|
2024-07-25 15:36:46 +08:00
|
|
|
|
this.hideDrawer();
|
|
|
|
|
uni.chooseImage({
|
2025-02-11 14:16:34 +08:00
|
|
|
|
sourceType: [type],
|
2024-07-25 15:36:46 +08:00
|
|
|
|
sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
|
2025-02-11 14:16:34 +08:00
|
|
|
|
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
|
|
|
|
// 选择表情
|
2025-02-11 14:16:34 +08:00
|
|
|
|
chooseEmoji() {
|
2024-07-25 15:36:46 +08:00
|
|
|
|
this.hideMore = true;
|
2025-02-11 14:16:34 +08:00
|
|
|
|
if (this.hideEmoji) {
|
2024-07-25 15:36:46 +08:00
|
|
|
|
this.hideEmoji = false;
|
|
|
|
|
this.openDrawer();
|
2025-02-11 14:16:34 +08:00
|
|
|
|
} else {
|
2024-07-25 15:36:46 +08:00
|
|
|
|
this.hideDrawer();
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
//添加表情
|
2025-02-11 14:16:34 +08:00
|
|
|
|
addEmoji(em) {
|
|
|
|
|
this.content += em.alt;
|
2024-07-25 15:36:46 +08:00
|
|
|
|
},
|
|
|
|
|
//获取焦点,如果不是选表情ing,则关闭抽屉
|
2025-02-11 14:16:34 +08:00
|
|
|
|
textareaFocus() {
|
|
|
|
|
if (this.popupLayerClass == 'showLayer' && this.hideMore == false) {
|
2024-07-25 15:36:46 +08:00
|
|
|
|
this.hideDrawer();
|
|
|
|
|
}
|
|
|
|
|
},
|
2025-02-11 14:16:34 +08:00
|
|
|
|
|
2024-07-25 15:36:46 +08:00
|
|
|
|
//替换表情符号为图片
|
2025-02-11 14:16:34 +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];
|
2025-02-11 14:16:34 +08:00
|
|
|
|
for (let j = 0; j < row.length; j++) {
|
2024-07-25 15:36:46 +08:00
|
|
|
|
let EM = row[j];
|
2025-02-11 14:16:34 +08:00
|
|
|
|
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/'
|
2025-02-11 14:16:34 +08:00
|
|
|
|
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
|
|
|
|
});
|
2025-02-11 14:16:34 +08:00
|
|
|
|
return '<div style="display: flex;align-items: center;word-wrap:break-word;">' + replacedStr + '</div>';
|
2024-06-05 19:16:02 +08:00
|
|
|
|
},
|
2025-02-11 14:16:34 +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>
|
2025-02-11 14:16:34 +08:00
|
|
|
|
@import "@/static/HM-chat/css/style.scss";
|
|
|
|
|
|
|
|
|
|
/deep/.popup-layer {
|
|
|
|
|
width: 100%;
|
2024-08-02 10:01:09 +08:00
|
|
|
|
}
|
2025-02-11 14:16:34 +08:00
|
|
|
|
|
2024-06-05 19:16:02 +08:00
|
|
|
|
page {
|
2025-02-11 14:16:34 +08:00
|
|
|
|
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 {
|
2025-02-11 14:16:34 +08:00
|
|
|
|
/* 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>
|