123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200 |
- <template>
- <view>
- <cu-custom :bgColor="fetch.bgcolor" :isBack="true"><block slot="backText">返回</block><block slot="content">{{fetch.title}}</block></cu-custom>
- <view class="cu-chat">
- <graceLoading :loadingType="loadingType"></graceLoading>
- <block v-for="(v, k) in fetch.chat" :key="k">
- <view class="cu-item self" v-if="v.self">
- <view class="main">
- <view class="content bg-green shadow" v-if="v.text">
- <text>{{v.text}}</text>
- </view>
- <view v-if="v.pic">
- <image @click="Dever.viewPic(pic, v.pic)" :src="v.pic" class="radius chat-pic" mode="widthFix"></image>
- </view>
- </view>
- <view class="cu-avatar radius" :style="{backgroundImage:'url('+fetch.user[v.uid].avatar+')'}" @click="Dever.viewPic([fetch.user[v.uid].avatar], fetch.user[v.uid].avatar)"></view>
- <view class="date">{{v.date}}</view>
- </view>
- <view class="cu-item" v-if="!v.self">
- <view class="cu-avatar radius" :style="{backgroundImage:'url('+fetch.user[v.uid].avatar+')'}" @click="Dever.viewPic([fetch.user[v.uid].avatar], fetch.user[v.uid].avatar)"></view>
- <view class="main">
- <view class="content shadow" v-if="v.text">
- <text>{{v.text}}</text>
- </view>
- <view v-if="v.pic">
- <image @click="Dever.viewPic(pic, v.pic)" :src="v.pic" class="radius chat-pic" mode="widthFix"></image>
- </view>
- </view>
- <view class="date">{{v.date}}</view>
- </view>
- </block>
- </view>
- <view class="cu-bar foot input" :style="[{bottom:InputBottom+'px'}]">
- <view class="action" style="display:none;">
- <text class="cuIcon-sound text-grey"></text>
- </view>
- <view class="action" @click="upload">
- <text class="cuIcon-picfill text-grey"></text>
- </view>
- <input class="solid-bottom" :adjust-position="false" :focus="false" maxlength="300" cursor-spacing="10"
- @focus="InputFocus" @blur="InputBlur" v-model="msg"></input>
- <view class="action" style="display:none;">
- <text class="cuIcon-emojifill text-grey"></text>
- </view>
- <button class="cu-btn bg-green shadow" @click="send()">发送</button>
- </view>
- <graceFixedMsg v-if="noticeShow" :msg="notice" :width="280" @tapme="noticeClick" :bottom="120"></graceFixedMsg>
- </view>
- </template>
- <script>
- export default {
- data() {
- return {
- InputBottom: 0,
- uid : 0,
- msg : '',
- fetch : {
- chat : [],
- bgcolor : '',
- title : '聊天',
- },
- loadingType: 1,
- bottomState : false,
- pic : [],
- notice : '',
- noticeShow : false,
- };
- },
- onLoad(option) {
- this.uid = option.uid;
- this.fetch.title = option.title;
- this.Dever.config.code = option.code;
- this.im();
- this.getInfo(1);
- },
- onHide() {
-
- },
- onPageScroll(e) {
- if (e.scrollTop == 0 && this.loadingType != 2) {
- this.bottomState = false;
- this.loadingType = 1;
- this.getInfo(2);
- }
- },
- onReachBottom() {
- this.bottomState = true;
- },
- methods: {
- InputFocus(e) {
- this.InputBottom = e.detail.height
- },
- InputBlur(e) {
- this.InputBottom = 0
- },
-
- im : function() {
- var self = this;
- this.Dever.im('chat', false, function(t) {
- if (t.type == 'init') {
- self.Dever.post('app/community/?l=chat.init', {code:self.Dever.config.code, client_id: t.client_id, uid:self.uid, noloading:1});
- } else if (t.type == 'ping') {
-
- } else if (t.type == 'msg') {
- self.add(t, 2);
- }
- });
- },
- getInfo : function(page) {
- var self = this;
- if (self.loadingType == 2) {
- return;
- }
- this.Dever.page([page,'chat'], this, 'app/community/?l=chat.getList', {code:this.Dever.config.code, uid: this.uid, noloading:1, concat:-1}, function(t) {
- if (t.chat) {
- for (var i in t.chat) {
- if (t.chat[i].pic) {
- self.pic.push(t.chat[i].pic);
- }
- }
- }
- if (self.Dever.pageData.status == 0) {
- self.loadingType = 2;
- } else {
- self.loadingType = 3;
- }
- if (page == 1) {
- self.bottom();
- }
- });
- },
-
- send : function(pic) {
- var self = this;
- var data = {};
- data.code = this.Dever.config.code;
- data.uid = this.uid;
- data.noloading = 1;
- if (!pic) {
- data.msg = this.msg;
- } else {
- data.pic = pic;
- }
- self.Dever.post('app/community/?l=chat.send', data, function(t) {
- self.msg = '';
- self.add(t.msg, 1);
- });
- },
-
- add : function(t, type) {
- if (t.pic) {
- this.pic.push(t.pic);
- }
- this.fetch.chat.push(t);
- if (type == 1 || this.bottomState) {
- this.bottom();
- } else {
- this.notice = '你有新的消息';
- this.noticeShow = true;
- }
- },
- noticeClick : function() {
- this.noticeShow = false;
- this.bottom();
- },
- upload : function() {
- var self = this;
- this.Dever.upload('pic', 1, function(type, file) {
- self.send(file);
- });
- },
- bottom : function() {
- var self = this;
- setTimeout(() => {
- var query = uni.createSelectorQuery();
- query.select('.cu-chat').boundingClientRect();
- query.exec((res) => {
- var height = res[0].height + res[0].bottom;
- self.bottomState = true;
- uni.pageScrollTo({
- scrollTop: height,
- duration: 50
- });
- })
- });
- }
- }
- }
- </script>
- <style>
- page{
- padding-bottom: 100upx;
- }
- .chat-pic {
- width: 150rpx;
- }
- </style>
|