You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

205 lines
5.6 KiB

<template>
<HeaderNav title="2023.5.3订单" :is-back="true"></HeaderNav>
<view class="body-background" :style="{
backgroundImage:'url('+staticImage.wallpaperBgImage+')'
}"></view>
<view class="app-wallpaper">
<view class="detail-container" :style="{height:windowHeihgt-40+'px'}">
<view class="detail-content-container">
<view class="detail-content" style="height: calc(100%);overflow: auto;padding-bottom: 150px;box-sizing: border-box;">
<view :class="item.send_user_id === user_id ? 'chat-item my-chat row' : 'chat-item other-chat row'" v-for="(item, index) in messageList" wx:key="index">
<view class="chat-item-content row">
<view class="chat-avator " v-if="item.send_user_id !== user_id">
<image mode="aspectFill" class="img" :src="item.avatar ? item.avatar : user.avatar" />
</view>
<view class="chat-content-container " style="max-width: calc(100% - 50px);">
<view class="chat-time">{{ item.create_time }}</view>
<view class="chat-content" style="word-break: break-all;">{{ item.info }}</view>
</view>
<view class="chat-avator " v-if="item.send_user_id === user_id">
<image mode="aspectFill" class="img" :src="item.avatar ? item.avatar : user.avatar" />
</view>
</view>
</view>
<!-- <view class="chat-item other-chat row">-->
<!-- <view class="chat-item-content row">-->
<!-- <view class="chat-avator ">-->
<!-- <image mode="aspectFill" class="img" :src="user.avatar" />-->
<!-- </view>-->
<!-- <view class="chat-content-container ">-->
<!-- <view class="chat-time">2023/06/16 13:24</view>-->
<!-- <view class="chat-content">好的,您家狗狗脾气如何呀</view>-->
<!-- </view>-->
<!-- </view>-->
<!-- </view>-->
<!-- <view class="chat-item my-chat row">-->
<!-- <view class="chat-item-content row">-->
<!-- <view class="chat-content-container ">-->
<!-- <view class="chat-time">2023/06/16 13:24</view>-->
<!-- <view class="chat-content">狗狗脾气很好,不用担心</view>-->
<!-- </view>-->
<!-- <view class="chat-avator ">-->
<!-- <image mode="aspectFill" class="img" :src="user.avatar" />-->
<!-- </view>-->
<!-- </view>-->
<!-- </view>-->
</view>
<view class="detail-input-group-container">
<view class="detail-input-group row">
<view class="col">
<input class="detail-input" v-model="message" type="text"/>
</view>
<MzButton
title="发送"
font-color="#fff"
button-color="#4DC3B8"
button-width="auto"
class="detail-input-button"
@click.stop="sendMessage"
>
</MzButton>
</view>
</view>
</view>
<view class="detail-background-container">
<view class="detail-background"></view>
</view>
</view>
</view>
</template>
<script>
import {
imghost
} from '@/config/host'
import api from '../../utils/functions.js';
import HeaderNav from '../../components/HeaderNav/Index.vue';
import MzButton from '../../components/MzButton/Index.vue';
import {getToken} from "@/api/chat";
import log from "@/utils/log";
export default {
components: {
HeaderNav,
MzButton
},
data: {
windowHeihgt: 1000,
staticImage: {
wallpaperBgImage: imghost + '/static/image/background.png',
},
user: {
avatar: imghost + '/static/image/banner.png',
nickname: '清晨的风',
background: imghost + '/static/image/banner.png',
sex: '女',
phone: '15012345678',
coupons: 221,
id: 88685,
birthday: '2002-05-11',
},
ableChat: false,
message:'',
chat_id:0,
type:0,
user_id:0,
messageList:[]
},
onLoad(options) {
this.getToken(options.id);
},
methods: {
getToken(order_id){
getToken(order_id, this.$store.state.userInfo.store_id ? 2 : 1).then(data => {
this.chat_id = data.data.chat_id;
this.type = data.data.type;
this.user_id = data.data.user_id;
uni.connectSocket({
url: data.data.chat_url
});
uni.onSocketOpen( (res) => {
this.ableChat = true;
console.log('WebSocket连接已打开!');
});
uni.onSocketClose((res) => {
this.ableChat = false;
console.log('WebSocket 已关闭!');
});
uni.onSocketMessage((res) => {
this.newMessage(res);
})
})
},
newMessage(messages){
log(messages);
messages = JSON.parse(messages.data);
log(messages);
if (messages.do_type === 'init'){
this.messageList = messages.data;
return;
}
this.messageList.push(messages);
log(this.messageList);
},
sendMessage(){
if (!this.message){
return uni.showToast({
title:"消息不能为空",
icon:'error'
})
}
uni.showLoading({
title: '消息发送中...',
mask:true,
});
if (!this.ableChat) {
setInterval((t) =>{
if (!this.ableChat) {
return;
}
clearInterval(t);
uni.sendSocketMessage({
data:this.message
});
uni.hideLoading();
}, 50);
}else{
uni.sendSocketMessage({
data:JSON.stringify({
do_type:'add',
info:this.message,
msg_type:1,
send_user_id:this.user_id,
type:this.type,
chat_id:this.chat_id,
})
});
uni.hideLoading();
this.message = '';
}
}
},
onPageScroll(res) {
},
onUnload() {
try{
uni.closeSocket();
}catch{}
},
created() {
this.windowHeihgt = api.navHeight().windowHeihgt;
}
}
</script>
<style lang="scss">
@import './components/index.scss';
</style>