lhl 1 year ago
parent
commit
bddcbb0181
6 changed files with 1407 additions and 1035 deletions
  1. 144 48
      components/messageitem.vue
  2. 15 4
      components/sender.vue
  3. 448 341
      pages/friend/chat.vue
  4. 147 40
      pages/group/chat.vue
  5. 652 602
      pages/index/index.vue
  6. 1 0
      pages/index/record.vue

+ 144 - 48
components/messageitem.vue

@@ -165,8 +165,47 @@
                     </view>
 
                 </view>
-                <view class="qute" v-if="m.message.qute">
-                    {{parseQuery(m.message.qute).nickname}}:{{parseQuery(m.message.qute).content}}
+                <!-- 引用 -->
+                <view class="qute" v-if="m.message.qute" :class="{'qute-reverse': m.sender.id==userid}">
+                    <!-- 文本引用其他 -->
+                    <template v-if="m.message.type == 'text'">
+                      <view class="msg" >
+                           {{m.message.qute.nickname}}:
+                           <block v-if="m.message.qute.ttype == 'emotion'" v-for="(m2,index2) in getFace(m.message.qute.content)" :key="index2">
+                               <block v-if="m2.type=='img'">
+                                   <image :src="m2.content" class="emotion1" ></image>
+                               </block>
+                               <block v-else>{{m2.content}}</block>
+                           </block>
+                           <block v-else-if="m.message.qute.ttype == 'image'">
+                                <image :src="m.message.qute.content" mode="" style="width: 60rpx;height: 60rpx;" @click.stop="showImage(m.message.qute.content)"></image>
+                           </block>
+                           <block v-else>
+                                {{m.message.qute.content}}
+                           </block>
+                       </view>
+                    </template>
+                    <!-- 表情引用其他 -->
+                    <template v-if="m.message.type == 'emotion'">
+                      <view class="msg" >
+                           {{m.message.qute.nickname}}:
+                            <template v-if="m.message.qute.ttype == 'text' || m.message.qute.ttype == 'remind' ">
+                                {{m.message.qute.content}}
+                            </template>
+                           <block v-if="m.message.qute.ttype=='emotion'" v-for="(m2,index2) in getFace(m.message.qute.content)" :key="index2">
+                               <block v-if="m2.type=='img'">
+                                   <image :src="m2.content" class="emotion1" ></image>
+                               </block>
+                               <block v-else>{{m2.content}}</block>
+                           </block>
+                           <template v-if="m.message.qute.ttype=='image'">
+                                <image :src="m.message.qute.content" mode="" style="width: 60rpx;height: 60rpx;" @click.stop="showImage(m.message.qute.content)"></image>
+                           </template>
+                       </view>
+                    </template>
+                   <!-- <view class="">
+                        {{m.message.qute.content}}
+                    </view> -->
                 </view>
 
                 <!-- 加载中 -->
@@ -224,6 +263,25 @@
 
         },
         methods: {
+            getFace(item) {
+                var content = item.replace(/\[\S{1,3}\]/gi, this.emotion);
+                content = content.split('^');
+                var imgs = [];
+                for (var i = 0; i < content.length; i++) {
+                    if (content[i] >= 100 && content[i] <= 222) {
+                        imgs.push({
+                            'type': 'img',
+                            'content': "/static/emoji/" + content[i] + '.gif'
+                        })
+                    } else {
+                        imgs.push({
+                            'type': 'text',
+                            'content': content[i]
+                        })
+                    }
+                }
+                return imgs
+            },
             touchend() {
                 return false;
             },
@@ -271,13 +329,11 @@
                 var arr = ['<br', '&nbsp;', "<div", "<span"];
                 str = str.toString();
                 for (var i = 0; i < arr.length; i++) {
-                    //console.log(str,arr[i])
                     if (str.indexOf(arr[i]) > -1) return true;
                 }
                 return false;
             },
             poster_show(m) {
-                console.log(m, '-------------');
                 if (m.isloading == 1) {
                     return false;
                 } else {
@@ -295,14 +351,12 @@
                     //   return "/static/img/vediobanner.jpg";
                     // }
                     if (m.message.content && m.message.content.src) {
-                        console.log(m.message.content.src, 'm.message.content.src');
                         var src = m.message.content.src;
                         var arr = src.split('/');
                         var filename = arr[arr.length - 1];
                         var arr1 = filename.split('.');
                         var newname = arr1[0] + "_video.jpg";
                         var poster = src.replace(filename, newname);
-                        console.log(poster, 'poster');
                         return poster;
                     } else {
                         return "/static/img/vediobanner.jpg";
@@ -312,7 +366,6 @@
 
             },
             clickurl(url) {
-                //  console.log(url);
                 if (url.indexOf('http') <= -1) url = 'http://' + url;
                 let params = {
                     url: url
@@ -324,13 +377,11 @@
                 if (str.toString().indexOf('http') <= -1) {
                     //  str='https://'+str;
                     //  str=str.toString()
-                    // console.log(str)
                 }
 
                 // var reg = /(?=^.{3,255}$)(http(s)?:\/\/)?(www\.)?[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]/g;
                 var reg =
                     /(?=^.{3,255}$)(http(s)?:\/\/)?(www\.)?[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9\/][-a-zA-Z0-9\/]{0,62})+(:\d+)*(\/\w+\.\w+)*$/g
-                // console.log(str);
 
                 try {
 
@@ -415,6 +466,13 @@
                     });
                 }
             },
+            showImage(url) {
+                console.log('img');
+                uni.previewImage({
+                    current: url,
+                    urls: [url]
+                });
+            },
             emotion(res) {
 
                 let word = res.replace(/\[|\]/gi, '')
@@ -454,50 +512,76 @@
                     try {
                         
                         v.message.content = JSON.parse(v.message.content);
-                        console.log(v.message.content,'v.message.content');
-                        // console.log(v.message.content,'v.message.content');
                     } catch (e) {
                         var content = v.message.content;
                     }
                     var type = v.message.content.type;
                     if (type == 'remind') {
-                        console.log(v,'+++++++++++++++++');
+                       // console.log('');
                         if (v.message.content.remind.id == uni.getStorageSync('access_token')) {
                             // 区分
-                            console.log(v.message.content.content);
                             let arr = v.message.content.content.split('-qute-')
-                            // v.message.content.content = arr[0]
-                            v.message.qute = arr[1]
-                            console.log(arr,'v.message.qute.rmd');
+                            v.message.content.content = arr[0]
+                            v.message.content.qute = ''
+                            if(arr[1]) {
+                                 v.message.qute = this.parseQuery(arr[1])
+                            }
+                            console.log('call本人的qute',v.message.content.qute);
+                            // v.message.content.content = v.message.content.content.replace('@{' + v.message.content
+                            //     .remind.id + '}', '<span style="color:#ff0000;">有人@我</span>');
                             v.message.content.content = v.message.content.content.replace('@{' + v.message.content
                                 .remind.id + '}', '<span style="color:#ff0000;">有人@我</span>');
                         } else {
                             var str = v.message.content.content;
                             //    var reg =/@{(.*)}/g;
                             // var tt=reg.exec(str);
+                                var mem = this.getGroupmemebrs(v.group_id, v.message.content.remind.id);
+                                
+                                if (mem.id == v.message.content.remind.id) {
+                                    var atname = mem.nickname;
+                                } else
+                                    var atname = v.message.content.remind.nickname;
+                                if (v.self == 1) var color = "#ff0000;"
+                                else var color = "#2319dc";
+                                let arr = v.message.content.content.split('-qute-')
+                                v.message.content.content = arr[0]
+                                console.log(arr[1],'arr[1]');
+                                v.message.qute = arr[1] ? this.parseQuery(arr[1]) : ''
+                                console.log('call他人的qute',v.message.qute);
+                                v.message.content.content = v.message.content.content.replace('@{' + v.message.content
+                                    .remind.id + '}', '<span style="color:' + color + ';">@' + atname + "</span>");
 
-                            var mem = this.getGroupmemebrs(v.group_id, v.message.content.remind.id);
-
-                            if (mem.id == v.message.content.remind.id) {
-                                var atname = mem.nickname;
-                            } else
-                                var atname = v.message.content.remind.nickname;
-                            if (v.self == 1) var color = "#ff0000;"
-                            else var color = "#2319dc";
-                            let arr = v.message.content.content.split('-qute-')
-                            v.message.content.content = arr[0]
-                            v.message.content.qute = arr[1]
-                            v.message.content.content = v.message.content.content.replace('@{' + v.message.content
-                                .remind.id + '}', '<span style="color:' + color + ';">@' + atname + "</span>");
 
                         }
                         var content = v.message.content.content;
 
                     } else {
-                        let arr = v.message.content.split('-qute-')
-                        v.message.content = arr[0]
-                        v.message.qute = arr[1]
-                        var content = v.message.content;
+                        // 文本
+                        // console.log('处理文本');
+                        
+                        try{
+                            let arr = v.message.content.split('-qute-')
+                            v.message.content = arr[0]
+                            var content = v.message.content;
+                            v.message.qute = ''
+                            if(arr[1]) {
+                                 v.message.qute = this.parseQuery(arr[1])
+                            }
+                        }catch(e){
+                            //TODO handle the exception
+                            console.log('错误',e);
+                        }
+                       
+                        // console.log(v.message.);
+                        // try{
+                        //     v.message.content.qute = arr[1] ? this.parseQuery(arr[1]) : ''
+                        // }catch(e){
+                        //     var content = v.message.content;
+                        //     //TODO handle the exception
+                        //     console.log('完成处理',e);
+                        // }
+                       
+                        
                     }
 
                     if (this.isindexhtml(content)) var content1 = this.toText(content);
@@ -518,13 +602,12 @@
                     } catch (e) {
                         //TODO handle the exception
                     }
-                    //console.log( v.message.content)
                 }
                 this.isshow = true;
                 return v;
             },
             parseQuery(query) {
-                let baseArr = query.split('&')
+                let baseArr = query.split('q&q')
                 let result = {}
                 baseArr.forEach(item => {
                     let arr = item.split('=')
@@ -537,25 +620,22 @@
             init() {
 
                 try {
+                    // 处理表情
                     if (this.item.message.type == 'emotion') {
                         try {
                             this.item.message.content = JSON.parse(this.item.message.content);
 
                         } catch (e) {
                             //TODO handle the exception
-
-
                         }
                         let arr = this.item.message.content.content.split('-qute-')
                         this.item.message.content.content = arr[0]
-                        this.item.message.content.qute = arr[1] ? this.parseQuery(arr[1]) : ''
+                        this.item.message.qute = arr[1] ? this.parseQuery(arr[1]) : ''
 
-                        // console.log(this.item.message.content.qute);
                         var content = this.item.message.content.content.replace(/\[\S{1,3}\]/gi, this.emotion);
-
+                        
                         content = content.split('^');
-
-
+                       
                         var imgs = [];
                         for (var i = 0; i < content.length; i++) {
                             if (content[i] >= 100 && content[i] <= 222) {
@@ -581,9 +661,8 @@
                 }
 
                 try {
-
+                    // 处理文本
                     this.m = this.message_format(this.item);
-                    //console.log(this.m)
                 } catch (e) {
                     //TODO handle the exception
 
@@ -1265,9 +1344,26 @@
         vertical-align: middle;
     }
     .qute {
-        text-overflow:ellipsis;
-        white-space:nowrap;
-        overflow:hidden;
-        max-width: 90%;
+        // text-overflow:ellipsis;
+        // white-space:nowrap;
+        // overflow:hidden;
+      
+        margin-top: 10rpx;
+        display: flex;
+        font-size: 22rpx;
+        &-reverse {
+           // flex-direction:;
+           justify-content: flex-end;
+        }
+        .msg {
+            padding: 5rpx;
+            display: inline-block;
+            border-radius: 5rpx;
+            background-color: #e0e0e0;
+        }
+    }
+    .emotion1 {
+        width: 32rpx;
+        height: 32rpx;
     }
 </style>

+ 15 - 4
components/sender.vue

@@ -12,17 +12,25 @@
                 <view class=" textarea qute-wrap">
                     <!-- 文本 -->
                     <template  v-if="qute.message.type == 'text'">
+                        <!-- @文本 -->
                         <view class="content" v-if="qute.message.content.type && qute.message.content.type == 'remind'">
-                            {{qute.sender.nickname}}: <text v-html="showCall(qute.message.content.content)"></text>
+                            {{qute.sender.nickname}}: <text v-html="qute.message.qute"></text>
                         </view>
+                        <!-- 纯文本 -->
                         <view class="content" v-else>
-                            {{qute.sender.nickname}}:{{qute.message && qute.message.content ? qute.message.content: ''}}
+                            {{qute.sender.nickname}}:{{qute.message && qute.message.qute ? qute.message.qute: ''}}
                         </view>
                     </template>
                     
                     <!--  -->
                    <view class="content" v-if="qute.message.type == 'emotion'">
-                         {{qute.sender.nickname}}:{{qute.message && qute.message.content.content ? qute.message.content.content: ''}}
+                         {{qute.sender.nickname}}:
+                         <block v-for="(m1,index1) in qute.message.face" :key="index1">
+                             <block v-if="m1.type=='img'">
+                                 <image :src="m1.content" class="emotion"></image>
+                             </block>
+                             <block v-else>{{m1.content}}</block>
+                         </block>
                     </view>
                     <view class="content" v-if="qute.message.type == 'image'">
                          {{qute.sender.nickname}}:[图片]
@@ -300,7 +308,9 @@
             },
             // 清理引用
             clearQute() {
-              this.qute = {}  
+              this.qute = {}
+               // 清理父的qute
+               this.$emit('clearQute')
             },
             // 保存引用
             setQute(item) {
@@ -899,6 +909,7 @@
                 white-space:nowrap;
                 overflow:hidden;
                 max-width: 90%;
+                height: 45rpx;
                }
                image {
                    flex-shrink: 0;

+ 448 - 341
pages/friend/chat.vue

@@ -3,389 +3,496 @@
         <view style="display: none;position: fixed;left: 50%;top: 50%;">{{ $store.state.hackUpdate }}</view>
         <load-more status="loading" v-if="initializing" />
         <!-- 消息记录 -->
-        <chat-panel :storeKey="storeKey" :sending="sending" :sendingdata="sendingdata" @click-avatar="openProfile" @setSending="setSending" :boardheight="boardheight" @chooseQuote="setQuote" ref="panel" />
+        <chat-panel :storeKey="storeKey" :sending="sending" :sendingdata="sendingdata" @click-avatar="openProfile"
+            @setSending="setSending" :boardheight="boardheight" @chooseQuote="setQuote" ref="panel" />
         <!-- 底部 -->
-       <v-sender
-            v-if="!initializing"
-            v-model="message"
-            ref="sender"
-            @send="sendTextMessage"
-            @face="sendVoice"
-            @sendImage="sendImg"
-            @sendVedio="sendVedio"
-            @emoji="sendEmoji"
-            @input="inputMessage"
-            @handleEmotion="handleEmotion"
-            @senderheight="set_sheight"
-            @keyboardheight="keyboardheight"
-            :showboard="showboard"
-            :sendtype="type"
-            :isgroup="0"
-            :groupid="friend.id"
-            :quote="quoteItem"
-        />
+        <v-sender v-if="!initializing" v-model="message" ref="sender" @send="sendTextMessage" @face="sendVoice"
+            @sendImage="sendImg" @sendVedio="sendVedio" @emoji="sendEmoji" @input="inputMessage"
+            @handleEmotion="handleEmotion" @senderheight="set_sheight" @keyboardheight="keyboardheight"
+            :showboard="showboard" :sendtype="type" :isgroup="0" :groupid="friend.id" :quote="quoteItem" />
     </view>
 </template>
 
 
 <script>
-	import {
-		mapState,
-		mapGetters
-	} from 'vuex';
-import ChatPanel from '../../components/chat-panel.vue';
-import api from '../../library/index.js';
-import http from '../../library/http.js';
-import config from '../../config.js';
-
-export default {
-    components: {
-        ChatPanel
-    },
-    data() {
-        return {
-            quoteItem: {},
-            friend: {},
-            message: '',
-            initializing: false,
-            getPick: false,
-            showPickMoney: '',
-            pickMsg: '',
-            pickId: '',
-            pickSender: {},
-            pickTitle: '',
-            pickErrorText: '',
-            storeKey: '',
-            redpackInfo: {},
-            sending: false,
-            sendingdata:[],
-            senderheight: 120,
-            sender: [],
-            receiver: [],
-            inpuvalue: '',
-            boardheight: 0,
-            showboard: false,
-            type: '',
-            user:uni.getStorageSync('userInfo'),
-            system:uni.getStorageSync('system'),
+    import {
+        mapState,
+        mapGetters
+    } from 'vuex';
+    import ChatPanel from '../../components/chat-panel.vue';
+    import api from '../../library/index.js';
+    import http from '../../library/http.js';
+    import config from '../../config.js';
+
+    export default {
+        components: {
+            ChatPanel
+        },
+        data() {
+            return {
+                quoteItem: {},
+                friend: {},
+                message: '',
+                initializing: false,
+                getPick: false,
+                showPickMoney: '',
+                pickMsg: '',
+                pickId: '',
+                pickSender: {},
+                pickTitle: '',
+                pickErrorText: '',
+                storeKey: '',
+                redpackInfo: {},
+                sending: false,
+                sendingdata: [],
+                senderheight: 120,
+                sender: [],
+                receiver: [],
+                inpuvalue: '',
+                boardheight: 0,
+                showboard: false,
+                type: '',
+                user: uni.getStorageSync('userInfo'),
+                system: uni.getStorageSync('system'),
+                
+                list: [
+                    ['微笑', '撇嘴', '色', '发呆', '得意', '流泪', '害羞', '闭嘴'],
+                    ['睡', '大哭', '尴尬', '发怒', '调皮', '呲牙', '惊讶', '难过'],
+                    ['酷', '冷汗', '抓狂', '吐', '偷笑', '可爱', '白眼', '傲慢'],
+                    ['饥饿', '困', '惊恐', '流汗', '憨笑', '大兵', '奋斗', '咒骂'],
+                    ['疑问', '嘘', '晕', '折磨', '衰', '骷髅', '敲打', '再见'],
+                    ['擦汗', '抠鼻', '鼓掌', '糗大了', '坏笑', '左哼哼', '右哼哼', '哈欠'],
+                    ['鄙视', '委屈', '快哭了', '阴险', '亲亲', '吓', '可怜', '菜刀'],
+                    ['西瓜', '啤酒', '篮球', '乒乓', '咖啡', '饭', '猪头', '玫瑰', ],
+                    ['凋谢', '示爱', '爱心', '心碎', '蛋糕', '闪电', '炸弹', '刀'],
+                    ['足球', '瓢虫', '便便', '月亮', '太阳', '礼物', '拥抱', '强'],
+                    ['弱', '握手', '胜利', '抱拳', '勾引', '拳头', '差劲', '爱你'],
+                    ['NO', 'OK', '爱情', '飞吻', '跳跳', '发抖', '怄火', '转圈'],
+                    ['磕头', '回头', '跳绳', '挥手', '激动', '闭嘴', '笑哭', '吐舌'],
+                    ['耶', '跳舞', '恐惧', '失望', '脸红', '无语', '奸笑', '嘿哈'],
+                    ['鬼混', '福', '合十', '强壮', '红包', '发财', '庆祝', '礼物']
+                ],
+                reg: /\S{1,3}/gi,
+                lists: [],
+                listss: []
+            };
+        },
+        onShow(event) {
+            uni.setNavigationBarTitle({
+                title: decodeURI(this.friend.nickname)
+            });
+
+            var value = '';
+            this.list = this.list.map((line, index) => {
+                this.listss = [];
+                line = line.map((item, idx) => {
+            
+                    value = item;
+            
+                    item = item.replace(/\S{1,3}/gi, this.getemotion(item));
+            
+                    this.listss.push({
+                        "name": item,
+                        "index": index,
+                        "value": value,
+                        "idx": idx
+                    })
+            
+                    return item;
             
-        };
-    },
-    onShow(event) {
-        uni.setNavigationBarTitle({
-            title: decodeURI(this.friend.nickname)
-        });
- 
-             
-  
-    },
-
-    onLoad(opts) {
-    
+                })
+            
+                this.lists.push(this.listss);
+            
+                return line;
+            })
+
+        },
+
+        onLoad(opts) {
+
             uni.setNavigationBarTitle({
                 title: decodeURI(opts.nickname)
             });
-                         // #ifdef APP-PLUS  
-                         let currentWebview = this.$mp.page.$getAppWebview();  
-                         currentWebview.setStyle({  
-                         titleNView: {  
-                         titleText:''  
-                         },  
-                         })  
-                         // #endif
-
-        this.friend = opts;
-
-        this.storeKey = 'U' + this.friend.id;
-         uni.setStorageSync('cache_key',this.storeKey);
-        
-        this.getUserInfo(this.friend.id);
-        this.sender =this.user;
-        this.receiver = this.friend;
-        
-    },
-    onUnload() {
-       
-           uni.setStorageSync('cache_key',''); 
-    },
-       
-
-    methods: {
-        // 选择引用的聊天记录
-        setQuote(item) {
-            this.$refs.sender.setQute(item)
-            this.quoteItem = item
-        },
-        // 检测输入值
-        inputMessage(e) {
-            //  console.log(e);
-            this.emotion = e;
+            // #ifdef APP-PLUS  
+            let currentWebview = this.$mp.page.$getAppWebview();
+            currentWebview.setStyle({
+                titleNView: {
+                    titleText: ''
+                },
+            })
+            // #endif
+
+            this.friend = opts;
+
+            this.storeKey = 'U' + this.friend.id;
+            uni.setStorageSync('cache_key', this.storeKey);
+
+            this.getUserInfo(this.friend.id);
+            this.sender = this.user;
+            this.receiver = this.friend;
+
         },
-        getUserInfo(id) {
-            if(id>0){
-                
-               id = parseInt(id);
-             http.setWait(false).get('user.php?act=userdetail',{id:id,group_id:0,userid:this.user.id}).then(res=>{
-                 this.friend = res.data;
-                 uni.setNavigationBarTitle({
-                     title: decodeURI(this.friend.nickname)
-                 });
-                 
-             })
-             
-              
-            }else{
-                var avatar=this.system.admin_logo;
-                if(avatar.indexOf('http')<=-1) avatar=config.imgUri+avatar;
-                  this.friend={id:0,nickname:this.system.admin_nickname,avatar:avatar};
-          
-            }
-           
+        onUnload() {
+
+            uni.setStorageSync('cache_key', '');
         },
-        toHtml(str) {
-                str=str.replace(/ /g,"&nbsp;");
-                str=str.replace(/\n/g,"<br>");
+
+
+        methods: {
+            getemotion(res) {
+            
+                let word = res.replace(/\[|\]/gi, '')
+            
+                const list = ['微笑', '撇嘴', '色', '发呆', '得意', '流泪', '害羞', '闭嘴', '睡', '大哭', '尴尬', '发怒', '调皮', '呲牙', '惊讶',
+                    '难过', '酷', '冷汗', '抓狂', '吐', '偷笑', '可爱', '白眼', '傲慢', '饥饿', '困', '惊恐', '流汗', '憨笑', '大兵', '奋斗',
+                    '咒骂', '疑问', '嘘', '晕', '折磨', '衰', '骷髅', '敲打', '再见', '擦汗', '抠鼻', '鼓掌', '糗大了', '坏笑', '左哼哼', '右哼哼',
+                    '哈欠', '鄙视', '委屈', '快哭了', '阴险', '亲亲', '吓', '可怜', '菜刀', '西瓜', '啤酒', '篮球', '乒乓', '咖啡', '饭', '猪头',
+                    '玫瑰', '凋谢', '示爱', '爱心', '心碎', '蛋糕', '闪电', '炸弹', '刀', '足球', '瓢虫', '便便', '月亮', '太阳', '礼物', '拥抱',
+                    '强', '弱', '握手', '胜利', '抱拳', '勾引', '拳头', '差劲', '爱你', 'NO', 'OK', '爱情', '飞吻', '跳跳', '发抖', '怄火',
+                    '转圈', '磕头', '回头', '跳绳', '挥手', '激动',
+                    '闭嘴', '笑哭', '吐舌', '耶', '跳舞', '恐惧', '失望', '脸红', '无语', '奸笑', '嘿哈', '鬼混', '福', '合十', '强壮', '红包',
+                    '发财', '庆祝', '礼物'
+                ]
+                let index = list.indexOf(word);
+                var index1 = index + 100;
+                return '^' + index1 + '^';
+            
+            },
+            // 选择引用的聊天记录
+            setQuote(item) {
+                if (item.message.type == 'text') {
+                    if (!item.message.content.type) {
+                        item.ttype = 'text'
+                        // 空格替换回车
+                        item.message.qute = item.message.content.replace(/<br>/g, " ").replace(/&nbsp;/g, ' ')
+                    } else if (item.message.content.type == "remind") {
+                        // 去除html 标签 && 去除 回车替换成空格
+                        if(item.message.content.remind && item.message.content.remind.nickname) {
+                            item.message.qute = item.message.content.content.replace(/<span.*?>.*?<\/span>/g, '@' + item.message.content.remind.nickname).replace(
+                                /<br>/g, " ").replace(/&nbsp;/g, ' ')
+                        }else {
+                            item.message.qute = item.message.content.content.replace(/<span.*?>|<\/span>/g, '@' + '').replace(
+                                /<br>/g, " ").replace(/&nbsp;/g, ' ')
+                        }
+                       
+                        item.ttype = 'remind'
+                    }
+                }
+                if (item.message.type == 'emotion') {
+                    item.ttype = 'emotion'
+                    console.log(item.message.content,'item.message.content');
+                    item.message.qute = item.message.content.content.replace(/<br>/g, " ")
+                    var content = item.message.qute.replace(/\[\S{1,3}\]/gi, this.getemotion).split('^');
+                    var imgs = [];
+                    for (var i = 0; i < content.length; i++) {
+                        if (content[i] >= 100 && content[i] <= 222) {
+                            imgs.push({
+                                'type': 'img',
+                                'content': "/static/emoji/" + content[i] + '.gif'
+                            })
+                        } else {
+                            imgs.push({
+                                'type': 'text',
+                                'content': content[i]
+                            })
+                        }
+                    }
+                    
+                   item.message.face = imgs;
+                    console.log('content', content);
+                }
+                if(item.message.type == 'image') {
+                    console.log('引用图片');
+                    item.ttype = 'image'
+                    item.message.qute = item.message.content
+                }
+                this.$refs.sender.setQute(item)
+                this.quoteItem = item
+                console.log("设置item", item);
+            },
+            // 检测输入值
+            inputMessage(e) {
+                //  console.log(e);
+                this.emotion = e;
+            },
+            getUserInfo(id) {
+                if (id > 0) {
+
+                    id = parseInt(id);
+                    http.setWait(false).get('user.php?act=userdetail', {
+                        id: id,
+                        group_id: 0,
+                        userid: this.user.id
+                    }).then(res => {
+                        this.friend = res.data;
+                        uni.setNavigationBarTitle({
+                            title: decodeURI(this.friend.nickname)
+                        });
+
+                    })
+
+
+                } else {
+                    var avatar = this.system.admin_logo;
+                    if (avatar.indexOf('http') <= -1) avatar = config.imgUri + avatar;
+                    this.friend = {
+                        id: 0,
+                        nickname: this.system.admin_nickname,
+                        avatar: avatar
+                    };
+
+                }
+
+            },
+            toHtml(str) {
+                str = str.replace(/ /g, "&nbsp;");
+                str = str.replace(/\n/g, "<br>");
                 return str;
             },
-        set_sheight(e) {
-             this.$refs.panel.setAutoHeight(e); 
-        },
-        keyboardheight(e) {
-            this.boardheight = e;
+            set_sheight(e) {
+                this.$refs.panel.setAutoHeight(e);
+            },
+            keyboardheight(e) {
+                this.boardheight = e;
 
-            this.$refs.panel.setAutoHeight(0);
-        },
+                this.$refs.panel.setAutoHeight(0);
+            },
 
-        // 选择表情
-        handleEmotion(value) {
-            //  console.log(value);
-            this.emotion = value;
-            this.type = 'emotion';
-        },
-        sendEmoji(e) {
-            this.commitMessage('face', e);
-        },
-        sendImg(e) {
-            this.commitMessage('image', e);
-        },
-        sendVedio(e) {
-            this.commitMessage('vedio', e);
-        },
-       
-        // 发送文本消息
-        sendTextMessage() {
-            // this.commitMessage('text',this.message);
-            let that = this
-            let addStr = '-qute-';
-           if(this.quoteItem && this.quoteItem.id) {
-               addStr += 'nickname=' + that.quoteItem.sender.nickname + '&content=' + ( that.quoteItem.type == 'emotion'?that.quoteItem.message.content.content:that.quoteItem.message.content) + '&type=' + that.quoteItem.type
-           }
-           this.emotionInfo = {
-               "type": "emotion",
-               "value": that.quoteItem.id ? (this.emotion + addStr): this.emotion,
-               "content": that.quoteItem.id ? (this.emotion + addStr): this.emotion
-           }
-           if (this.type == "emotion") {
-               console.log( 'emotion',this.emotion);
-               this.commitMessage('emotion', this.emotionInfo);
-           } else {
-               var msg=this.toHtml(this.message);
-               if(that.quoteItem.id) {
-                   msg += addStr
-               }
-               console.log( 'text',msg);
-               this.commitMessage('text', msg);
-           }
-           this.quoteItem = {}
-           this.$refs.sender.clearQute()
-        },
+            // 选择表情
+            handleEmotion(value) {
+                //  console.log(value);
+                this.emotion = value;
+                this.type = 'emotion';
+            },
+            sendEmoji(e) {
+                this.commitMessage('face', e);
+            },
+            sendImg(e) {
+                this.commitMessage('image', e);
+            },
+            sendVedio(e) {
+                this.commitMessage('vedio', e);
+            },
 
-       setSending(e){
-        
-       this.sending=e;
-           
-       },
-
-        commitMessage(type, sendData) {
-            this.message = '';
-            //   this.showboard=true
-
-            if (type == 'image') {
-                var mid = sendData.mid;
-                sendData = sendData.src;
-            } else if (type == 'vedio') {
-                var mid = sendData.mid;
-                //  sendData=sendData.src;
-            } else if (type == 'voice') {
-                var mid = sendData.mid;
-            } else {
-                var mid =
-                    'm' +
-                    Math.random()
+            // 发送文本消息
+            sendTextMessage() {
+                // this.commitMessage('text',this.message);
+                let that = this;
+                let addStr = '';
+                console.log(that.quoteItem,'发送that.quoteItem');
+                if (this.quoteItem && this.quoteItem.id) {
+                    addStr += '-qute-nickname=' + that.quoteItem.sender.nickname + 'q&qcontent=' + that.quoteItem
+                        .message
+                        .qute + 'q&qttype=' + that.quoteItem.ttype
+                }
+                if (this.type == "emotion") {
+                    this.emotionInfo = {
+                        "type": "emotion",
+                        "value": this.emotion + addStr,
+                        "content": this.emotion + addStr
+                    }
+                    console.log('-------------表情---------------', this.emotionInfo);
+                    this.commitMessage('emotion', this.emotionInfo);
+                } else {
+                    var msg = this.toHtml(this.message) + addStr;
+                    console.log('---------文本发送---------', msg);
+                    this.commitMessage('text', msg,1);
+                }
+                this.quoteItem = {}
+                this.$refs.sender.clearQute()
+            },
+            setSending(e) {
+                this.sending = e;
+            },
+            commitMessage(type, sendData) {
+                this.message = '';
+                //   this.showboard=true
+                if (type == 'image') {
+                    var mid = sendData.mid;
+                    sendData = sendData.src;
+                } else if (type == 'vedio') {
+                    var mid = sendData.mid;
+                    //  sendData=sendData.src;
+                } else if (type == 'voice') {
+                    var mid = sendData.mid;
+                } else {
+                    var mid =
+                        'm' +
+                        Math.random()
                         .toString(36)
                         .substring(2);
-            }
+                }
 
-            let data = {
-                userid: this.user.id,
-                friend_uid: this.friend.id,
-                type: 'chat',
-                msgtype: type,
-                content: sendData,
-                mid: mid
-            };
-       //    console.log(data);
-         
-         var sendlocal=0;
-         if((type=='image' && sendData.indexOf('http')<=-1) || (type=='vedio' && sendData.src.indexOf('http')<=-1) || (type=='voice'&& sendData.url.indexOf('http')<=-1) ){
-           //本地图片不发到服务器  
-           // console.log(sendData);
-            sendlocal=1;
-         }
-          else {
-             this.$socket.send(data);   
-          }
-           if(type!=='image' && type!=='voice')  sendlocal=1;
-            // uni.showLoading({
-            //     title: '发送中'
-            // });
-
-            var that = this;
-            if (sendlocal == 1) {
-               
-                        var arr = {};
-                        arr.id = that.receiver.id;
-                        arr.cache_key = 'U' + arr.id;
-                        arr['self'] = 1;
-                        arr['isloading'] = 1;
-                        arr['receiver_id'] = arr['id'];
-                        arr['sender_id'] = that.sender.id;
-                        arr['group_id'] = 0;
-                        arr['timestamp'] = parseInt(new Date().getTime() / 1000);
-                        arr['time'] = '';
-                        arr['message'] = { type: type, content: sendData };
-                        arr['sender'] = that.sender;
-                        arr['receiver'] = that.receiver;
-                        arr['nickname'] = that.sender.nickname;
-                        arr['avatar'] = that.sender.avatar;
-                        arr['msg_id'] = '';
-                        arr['_mid'] = mid;
-                         that.sendingdata=arr;
-                      that.sending=true;
-                        this.type='text';
-                     
-                        //that.sendmsg(arr);
-               // console.log(sendlocal);
-            }
-            
-              //that.sending=true;
-        },
+                let data = {
+                    userid: this.user.id,
+                    friend_uid: this.friend.id,
+                    type: 'chat',
+                    msgtype: type,
+                    content: sendData,
+                    mid: mid
+                };
+                //    console.log(data);
+
+                var sendlocal = 0;
+                if ((type == 'image' && sendData.indexOf('http') <= -1) || (type == 'vedio' && sendData.src.indexOf(
+                        'http') <= -1) || (type == 'voice' && sendData.url.indexOf('http') <= -1)) {
+                    //本地图片不发到服务器  
+                    // console.log(sendData);
+                    sendlocal = 1;
+                } else {
+                    this.$socket.send(data);
+                }
+                if (type !== 'image' && type !== 'voice') sendlocal = 1;
+                // uni.showLoading({
+                //     title: '发送中'
+                // });
+
+                var that = this;
+                if (sendlocal == 1) {
+
+                    var arr = {};
+                    arr.id = that.receiver.id;
+                    arr.cache_key = 'U' + arr.id;
+                    arr['self'] = 1;
+                    arr['isloading'] = 1;
+                    arr['receiver_id'] = arr['id'];
+                    arr['sender_id'] = that.sender.id;
+                    arr['group_id'] = 0;
+                    arr['timestamp'] = parseInt(new Date().getTime() / 1000);
+                    arr['time'] = '';
+                    arr['message'] = {
+                        type: type,
+                        content: sendData
+                    };
+                    arr['sender'] = that.sender;
+                    arr['receiver'] = that.receiver;
+                    arr['nickname'] = that.sender.nickname;
+                    arr['avatar'] = that.sender.avatar;
+                    arr['msg_id'] = '';
+                    arr['_mid'] = mid;
+                    that.sendingdata = arr;
+                    that.sending = true;
+                    this.type = 'text';
 
-        sendVoice(e) {
-            this.commitMessage('voice', e);
+                    //that.sendmsg(arr);
+                    // console.log(sendlocal);
+                }
+
+                //that.sending=true;
+            },
+
+            sendVoice(e) {
+                this.commitMessage('voice', e);
+            },
+            openProfile(e) {
+                //     console.log(JSON.stringify(e));
+                let params = {
+                    id: e.id,
+                    status: 'friend'
+                };
+                return this.$jump('friend.detail', params);
+            }
         },
-        openProfile(e) {
-            //     console.log(JSON.stringify(e));
-            let params = { id: e.id, status: 'friend' };
-            return this.$jump('friend.detail', params);
+        onNavigationBarButtonTap(e) {
+            let params = {
+                ...this.friend,
+                status: 'friend'
+            };
+            return this.$jump('friend.userset', params);
         }
-    },
-    onNavigationBarButtonTap(e) {
-        let params = { ...this.friend, status: 'friend' };
-        return this.$jump('friend.userset', params);
-    }
-};
+    };
 </script>
 
 <style lang="scss">
-$avatar-width: 80upx;
-$control-height: 100upx;
-$control-input-height: $control-height - $uni-spacing-col-base * 2;
-
+    $avatar-width: 80upx;
+    $control-height: 100upx;
+    $control-input-height: $control-height - $uni-spacing-col-base * 2;
 
-.placeholder {
-    width: 750upx;
-    height: 1upx;
-}
 
-.message {
-    &-time {
-        color: #999;
-        font-size: 24upx;
-        text-align: center;
+    .placeholder {
+        width: 750upx;
+        height: 1upx;
     }
 
-    &-info {
-        display: flex;
-        flex-direction: row;
-        justify-content: flex-start;
-        align-items: flex-start;
-        padding: $uni-spacing-col-lg $uni-spacing-row-lg;
+    .message {
+        &-time {
+            color: #999;
+            font-size: 24upx;
+            text-align: center;
+        }
 
-        .spacing {
-            width: $uni-spacing-row-lg;
-            height: $avatar-width;
-            position: relative;
+        &-info {
             display: flex;
-            flex-direction: column;
-            align-items: center;
-            justify-content: center;
-            flex-shrink: 0;
+            flex-direction: row;
+            justify-content: flex-start;
+            align-items: flex-start;
+            padding: $uni-spacing-col-lg $uni-spacing-row-lg;
 
-            &::before {
-                display: block;
-                content: '';
-                border: $uni-spacing-row-lg/2 solid transparent;
-                border-right-color: #fff;
+            .spacing {
+                width: $uni-spacing-row-lg;
+                height: $avatar-width;
+                position: relative;
+                display: flex;
+                flex-direction: column;
+                align-items: center;
+                justify-content: center;
+                flex-shrink: 0;
+
+                &::before {
+                    display: block;
+                    content: '';
+                    border: $uni-spacing-row-lg/2 solid transparent;
+                    border-right-color: #fff;
+                }
             }
         }
-    }
 
-    &.right &-info {
-        flex-direction: row-reverse;
-        padding-left: $uni-spacing-row-lg;
-        padding-right: $uni-spacing-row-lg * 2 + $avatar-width;
+        &.right &-info {
+            flex-direction: row-reverse;
+            padding-left: $uni-spacing-row-lg;
+            padding-right: $uni-spacing-row-lg * 2 + $avatar-width;
 
-        .spacing::before {
-            border-right-color: transparent;
-            border-left-color: $uni-color-primary;
+            .spacing::before {
+                border-right-color: transparent;
+                border-left-color: $uni-color-primary;
+            }
         }
-    }
 
-    &.right &-info {
-        padding-left: $uni-spacing-row-lg * 2 + $avatar-width;
-        padding-right: $uni-spacing-row-lg;
-    }
+        &.right &-info {
+            padding-left: $uni-spacing-row-lg * 2 + $avatar-width;
+            padding-right: $uni-spacing-row-lg;
+        }
 
-    &-avatar {
-        width: $avatar-width;
-        height: $avatar-width;
-        vertical-align: middle;
-        border-radius: $uni-border-radius-base;
-        flex-shrink: 0;
-    }
+        &-avatar {
+            width: $avatar-width;
+            height: $avatar-width;
+            vertical-align: middle;
+            border-radius: $uni-border-radius-base;
+            flex-shrink: 0;
+        }
 
-    &-content {
-        font-size: 32upx;
-        background: rgba(255, 255, 255, 1);
-        border-radius: $uni-border-radius-base;
-    }
+        &-content {
+            font-size: 32upx;
+            background: rgba(255, 255, 255, 1);
+            border-radius: $uni-border-radius-base;
+        }
 
-    &.right &-content {
-        color: white;
-        background-color: $uni-color-primary;
-    }
+        &.right &-content {
+            color: white;
+            background-color: $uni-color-primary;
+        }
 
-    &--text &-content {
-        padding: 20upx $uni-spacing-row-base;
-    }
+        &--text &-content {
+            padding: 20upx $uni-spacing-row-base;
+        }
 
-    &-failed {
-        width: 30upx;
-        height: 30upx;
-        background-color: $uni-color-error;
-        border-radius: 50%;
-        margin: ($avatar-width - 30upx)/2 $uni-spacing-row-base 0;
+        &-failed {
+            width: 30upx;
+            height: 30upx;
+            background-color: $uni-color-error;
+            border-radius: 50%;
+            margin: ($avatar-width - 30upx)/2 $uni-spacing-row-base 0;
+        }
     }
-}
-</style>
+</style>

+ 147 - 40
pages/group/chat.vue

@@ -4,11 +4,12 @@
         <load-more status="loading" v-if="initializing" />
         <chat-panel :store-key="storeKey" :thistype="thistype" :atme="atme" :at_msg_id='at_msg_id' @close='atuser1'
             :sending="sending" :sendingdata="sendingdata" :manager="ismanage" :no_add="no_add"
-            @click-avatar="openProfile" @setSending='setSending' :boardheight='boardheight' ref="panel" @chooseQuote="setQuote"/>
+            @click-avatar="openProfile" @setSending='setSending' :boardheight='boardheight' ref="panel"
+            @chooseQuote="setQuote" />
         <view class="placeholder"></view>
         <v-sender ref='sender' v-if="!initializing" v-model="message" @send="sendTextMessage" :groupid="group.id"
             :isgroup="1" @face="sendVoice" @sendImage="sendImg" @sendVedio="sendVedio" @emoji="sendEmoji"
-            :no-speaking="no_speaking" :speaking_tips='speaking_tips'
+            @clearQute="clearQute" :no-speaking="no_speaking" :speaking_tips='speaking_tips'
             :forbid-redpack="group.forbid_redpack==1 && !group.owner && !ismanage?true:false"
             @handleEmotion="handleEmotion" @input="inputMessage" @keyboardheight='keyboardheight'
             @senderheight="set_sheight" :sendtype='type' />
@@ -35,7 +36,7 @@
         },
         data() {
             return {
-                quoteItem: {},//引用内容
+                quoteItem: {}, //引用内容
                 userid: uni.getStorageSync('access_token'),
                 user: uni.getStorageSync('userInfo'),
 
@@ -62,8 +63,27 @@
                 atme: 0,
                 at_msg_id: 0,
                 thistype: '',
-                storeKey: ''
-
+                storeKey: '',
+                list: [
+                    ['微笑', '撇嘴', '色', '发呆', '得意', '流泪', '害羞', '闭嘴'],
+                    ['睡', '大哭', '尴尬', '发怒', '调皮', '呲牙', '惊讶', '难过'],
+                    ['酷', '冷汗', '抓狂', '吐', '偷笑', '可爱', '白眼', '傲慢'],
+                    ['饥饿', '困', '惊恐', '流汗', '憨笑', '大兵', '奋斗', '咒骂'],
+                    ['疑问', '嘘', '晕', '折磨', '衰', '骷髅', '敲打', '再见'],
+                    ['擦汗', '抠鼻', '鼓掌', '糗大了', '坏笑', '左哼哼', '右哼哼', '哈欠'],
+                    ['鄙视', '委屈', '快哭了', '阴险', '亲亲', '吓', '可怜', '菜刀'],
+                    ['西瓜', '啤酒', '篮球', '乒乓', '咖啡', '饭', '猪头', '玫瑰', ],
+                    ['凋谢', '示爱', '爱心', '心碎', '蛋糕', '闪电', '炸弹', '刀'],
+                    ['足球', '瓢虫', '便便', '月亮', '太阳', '礼物', '拥抱', '强'],
+                    ['弱', '握手', '胜利', '抱拳', '勾引', '拳头', '差劲', '爱你'],
+                    ['NO', 'OK', '爱情', '飞吻', '跳跳', '发抖', '怄火', '转圈'],
+                    ['磕头', '回头', '跳绳', '挥手', '激动', '闭嘴', '笑哭', '吐舌'],
+                    ['耶', '跳舞', '恐惧', '失望', '脸红', '无语', '奸笑', '嘿哈'],
+                    ['鬼混', '福', '合十', '强壮', '红包', '发财', '庆祝', '礼物']
+                ],
+                reg: /\S{1,3}/gi,
+                lists: [],
+                listss: []
             };
         },
         onLoad(opts) {
@@ -111,11 +131,107 @@
             this.getInfo();
             this.getGroupUsers();
 
+            var value = '';
+            this.list = this.list.map((line, index) => {
+                this.listss = [];
+                line = line.map((item, idx) => {
+
+                    value = item;
+
+                    item = item.replace(/\S{1,3}/gi, this.getemotion(item));
+
+                    this.listss.push({
+                        "name": item,
+                        "index": index,
+                        "value": value,
+                        "idx": idx
+                    })
+
+                    return item;
+
+                })
+
+                this.lists.push(this.listss);
+
+                return line;
+            })
+            console.log(this.list, 'this.list');
+
         },
         methods: {
+            getemotion(res) {
+
+                let word = res.replace(/\[|\]/gi, '')
+
+                const list = ['微笑', '撇嘴', '色', '发呆', '得意', '流泪', '害羞', '闭嘴', '睡', '大哭', '尴尬', '发怒', '调皮', '呲牙', '惊讶',
+                    '难过', '酷', '冷汗', '抓狂', '吐', '偷笑', '可爱', '白眼', '傲慢', '饥饿', '困', '惊恐', '流汗', '憨笑', '大兵', '奋斗',
+                    '咒骂', '疑问', '嘘', '晕', '折磨', '衰', '骷髅', '敲打', '再见', '擦汗', '抠鼻', '鼓掌', '糗大了', '坏笑', '左哼哼', '右哼哼',
+                    '哈欠', '鄙视', '委屈', '快哭了', '阴险', '亲亲', '吓', '可怜', '菜刀', '西瓜', '啤酒', '篮球', '乒乓', '咖啡', '饭', '猪头',
+                    '玫瑰', '凋谢', '示爱', '爱心', '心碎', '蛋糕', '闪电', '炸弹', '刀', '足球', '瓢虫', '便便', '月亮', '太阳', '礼物', '拥抱',
+                    '强', '弱', '握手', '胜利', '抱拳', '勾引', '拳头', '差劲', '爱你', 'NO', 'OK', '爱情', '飞吻', '跳跳', '发抖', '怄火',
+                    '转圈', '磕头', '回头', '跳绳', '挥手', '激动',
+                    '闭嘴', '笑哭', '吐舌', '耶', '跳舞', '恐惧', '失望', '脸红', '无语', '奸笑', '嘿哈', '鬼混', '福', '合十', '强壮', '红包',
+                    '发财', '庆祝', '礼物'
+                ]
+                let index = list.indexOf(word);
+                var index1 = index + 100;
+                return '^' + index1 + '^';
+
+            },
+            // 清除qute
+            clearQute() {
+                this.quoteItem = {}
+            },
             setQuote(item) {
+                if (item.message.type == 'text') {
+                    if (!item.message.content.type) {
+                        item.ttype = 'text'
+                        // 空格替换回车
+                        item.message.qute = item.message.content.replace(/<br>/g, " ").replace(/&nbsp;/g, ' ')
+                    } else if (item.message.content.type == "remind") {
+                        // 去除html 标签 && 去除 回车替换成空格
+                        if(item.message.content.remind && item.message.content.remind.nickname) {
+                            item.message.qute = item.message.content.content.replace(/<span.*?>.*?<\/span>/g, '@' + item.message.content.remind.nickname).replace(
+                                /<br>/g, " ").replace(/&nbsp;/g, ' ')
+                        }else {
+                            item.message.qute = item.message.content.content.replace(/<span.*?>|<\/span>/g, '@' + '').replace(
+                                /<br>/g, " ").replace(/&nbsp;/g, ' ')
+                        }
+                       
+                        item.ttype = 'remind'
+                    }
+                }
+                if (item.message.type == 'emotion') {
+                    item.ttype = 'emotion'
+                    console.log(item.message.content,'item.message.content');
+                    item.message.qute = item.message.content.content.replace(/<br>/g, " ")
+                    var content = item.message.qute.replace(/\[\S{1,3}\]/gi, this.getemotion).split('^');
+                    var imgs = [];
+                    for (var i = 0; i < content.length; i++) {
+                        if (content[i] >= 100 && content[i] <= 222) {
+                            imgs.push({
+                                'type': 'img',
+                                'content': "/static/emoji/" + content[i] + '.gif'
+                            })
+                        } else {
+                            imgs.push({
+                                'type': 'text',
+                                'content': content[i]
+                            })
+                        }
+                    }
+                    
+                   item.message.face = imgs;
+                    console.log('content', content);
+                }
+                if(item.message.type == 'image') {
+                    console.log('引用图片');
+                    item.ttype = 'image'
+                    item.message.qute = item.message.content
+                }
                 this.$refs.sender.setQute(item)
                 this.quoteItem = item
+                console.log("设置item", item);
             },
             // 检测输入值
             inputMessage(e) {
@@ -271,46 +387,32 @@
             },
             // 发送文本消息
             sendTextMessage() {
-                let that = this
-                let addStr = '-qute-';
-                if(this.quoteItem && this.quoteItem.id) {
-                    addStr +='nickname=' + that.quoteItem.sender.nickname + '&content=' + ( that.quoteItem.type == 'emotion'?that.quoteItem.message.content.content:that.quoteItem.message.content) + '&type=' + that.quoteItem.type
+                let that = this;
+                let addStr = '';
+                console.log(that.quoteItem,'发送that.quoteItem');
+                if (this.quoteItem && this.quoteItem.id) {
+                    addStr += '-qute-nickname=' + that.quoteItem.sender.nickname + 'q&qcontent=' + that.quoteItem
+                        .message
+                        .qute + 'q&qttype=' + that.quoteItem.ttype
                 }
-                this.emotionInfo = {
-                    "type": "emotion",
-                    "value": that.quoteItem.id ? (this.emotion + addStr): this.emotion,
-                    "content": that.quoteItem.id ? (this.emotion + addStr): this.emotion
-                }
-                // this.emotionInfo = {
-                //     "type": "emotion",
-                //     "value": this.emotion,
-                //     "content": this.emotion
-                // }
-                
                 if (this.type == "emotion") {
+                    this.emotionInfo = {
+                        "type": "emotion",
+                        "value": this.emotion + addStr,
+                        "content": this.emotion + addStr
+                    }
+                    console.log('-------------表情---------------', this.emotionInfo);
                     this.commitMessage('emotion', this.emotionInfo);
                 } else {
-                    var msg=this.toHtml(this.message);
-                    if(that.quoteItem.id) {
-                        // msg += addStr
-                        if(that.quoteItem.type == 'text' && that.quoteItem.message.content.type == "remind") {
-                            // console.log();
-                            let str = that.quoteItem.message.content.content.replace(/<span.*?>|<\/span>/g, "")
-                            console.log(str);
-                            addStr = '-qute-' + 'nickname=' + that.quoteItem.sender.nickname + '&content=' + str + '&type=text'
-                        }else {
-                            
-                        }
-                        msg += addStr
-                    }
-                    // var msg = this.toHtml(this.message);
-                    this.commitMessage('text', msg);
+                    var msg = this.toHtml(this.message) + addStr;
+                    console.log('---------文本发送---------', msg);
+                    this.commitMessage('text', msg,1);
                 }
                 this.quoteItem = {}
                 this.$refs.sender.clearQute()
                 // this.commitMessage('text', this.message);
             },
-            commitMessage(type, sendData) {
+            commitMessage(type, sendData,ttype=0) {
 
 
                 this.message = '';
@@ -332,8 +434,14 @@
                 if (type == 'text' && parseInt(this.atusers.id) > 0) {
 
                     if (sendData.indexOf(this.atusers.nickname) > -1) {
-
-                        var content = sendData.replace('@' + this.atusers.nickname, '@{' + this.atusers.id + '}');
+                        let arr = sendData.split('-qute-')
+                        if(arr[0].indexOf('@' + this.atusers.nickname) != -1) {
+                            console.log('包含');
+                            var content = sendData.replace('@' + this.atusers.nickname, '@{' + this.atusers.id + '}');
+                        }else {
+                             var content = sendData
+                        }
+                        
                         sendData = {
                             type: 'remind',
                             remind: this.atusers,
@@ -360,7 +468,7 @@
 
                 if ((type == 'image' && sendData.indexOf(config.imgUri) <= -1) || (type == 'vedio' && sendData.src
                         .indexOf(config.imgUri) <= -1) || (type == 'voice' && sendData.url.indexOf(config.imgUri) <= -
-                    1)) {
+                        1)) {
 
                     sendlocal = 1;
                 } else {
@@ -431,5 +539,4 @@
         }
 
     }
-   
 </script>

+ 652 - 602
pages/index/index.vue

@@ -1,724 +1,774 @@
 <!-- 聊天 -->
 <template>
-	<view class="page page--divider">
-	<headerline   navstyle="left:18%;width:60%;" :reditem="unreadnum" issearch="true" :showsearch="showsearch" searchtips="请输入搜索内容"  @clicksearch='clicksearch' :shownav="false"  :title="navtitle" :menuitem="menuitem" :navselect="navselect" :statusbarheight='statusBarHeight'   :islogo="false"  @tapnav="tapnav"    @tapmenu="tapmenu" rightmenu="true"></headerline>
-		
-		<view class="widget" v-if="navselect==0  && !showsearch">
-			<scroll-view  v-if="chats.length>0"  refresher-enabled='true' refresher-threshold='60' :refresher-triggered="isfresh" :refresher-default-style='refreshstyle' @refresherpulling='refresherpulling'  @refresherrefresh='refresherrefresh'>
-                  <view class="fresh" v-if="isfresh==true">
-                      {{fresh_tip}}
-                  </view>
-				<view :class="{'item':true,'istop':item.istop}" v-for="(item, index) in chats" :key="item.key"
-                 @tap="handleClick(item)" @longtap="msgAction(item)">
-                   
-					<image :src="image_cache(item.avatar)" class="leftImg" />
-					<view class="rightContent">
-						<view class="topCont"> 
-							<view class="userName">{{item.nickname||'匿名'}}</view>
-							<view class="time">{{ timestamp(item.timestamp) || '--:--' }}</view>
-						</view>
-						<view class="bottomCont">
-							<view class="content" v-if="item.message.type!='tips'">
+    <view class="page page--divider">
+        <headerline navstyle="left:18%;width:60%;" :reditem="unreadnum" issearch="true" :showsearch="showsearch"
+            searchtips="请输入搜索内容" @clicksearch='clicksearch' :shownav="false" :title="navtitle" :menuitem="menuitem"
+            :navselect="navselect" :statusbarheight='statusBarHeight' :islogo="false" @tapnav="tapnav"
+            @tapmenu="tapmenu" rightmenu="true"></headerline>
+
+        <view class="widget" v-if="navselect==0  && !showsearch">
+            <scroll-view v-if="chats.length>0" refresher-enabled='true' refresher-threshold='60'
+                :refresher-triggered="isfresh" :refresher-default-style='refreshstyle'
+                @refresherpulling='refresherpulling' @refresherrefresh='refresherrefresh'>
+                <view class="fresh" v-if="isfresh==true">
+                    {{fresh_tip}}
+                </view>
+                <view :class="{'item':true,'istop':item.istop}" v-for="(item, index) in chats" :key="item.key"
+                    @tap="handleClick(item)" @longtap="msgAction(item)">
+
+                    <image :src="image_cache(item.avatar)" class="leftImg" />
+                    <view class="rightContent">
+                        <view class="topCont">
+                            <view class="userName">{{item.nickname||'匿名'}}</view>
+                            <view class="time">{{ timestamp(item.timestamp) || '--:--' }}</view>
+                        </view>
+                        <view class="bottomCont">
+                            <view class="content" v-if="item.message.type!='tips'">
                                 <block v-if="item.self || item.sender.nickname!=undefined">
-                                {{item.self? '[我]': item.sender.nickname+':'}}
+                                    {{item.self? '[我]': item.sender.nickname+':'}}
                                 </block>
-								<text style='color: #666666;font-size: 28upx' v-if="item.message.type=='voice'">[语音]</text>
-								<text style='color: #666666;font-size: 28upx' v-else-if="item.message.type=='redpacket'">[红包]</text>
-								<text style='color: #666666;font-size: 28upx' v-else-if="item.message.type=='image'">[图片]</text>
-                                 <text style='color: #666666;font-size: 28upx' v-else-if="item.message.type=='vedio'">[视频]</text>
-								<text style='color: #666666;font-size: 28upx' v-else-if="item.message.type=='emotion'">[表情]</text>
-                                <text style='color: #666666;font-size: 28upx' v-else-if="item.message.type=='apply'">{{item.message.content.text}}</text>
-                                    <text style='color: #666666;font-size: 28upx' v-else-if="item.message.type=='tips'">
+                                <text style='color: #666666;font-size: 28upx'
+                                    v-if="item.message.type=='voice'">[语音]</text>
+                                <text style='color: #666666;font-size: 28upx'
+                                    v-else-if="item.message.type=='redpacket'">[红包]</text>
+                                <text style='color: #666666;font-size: 28upx'
+                                    v-else-if="item.message.type=='image'">[图片]</text>
+                                <text style='color: #666666;font-size: 28upx'
+                                    v-else-if="item.message.type=='vedio'">[视频]</text>
+                                <text style='color: #666666;font-size: 28upx'
+                                    v-else-if="item.message.type=='emotion'">[表情]</text>
+                                <text style='color: #666666;font-size: 28upx'
+                                    v-else-if="item.message.type=='apply'">{{item.message.content.text}}</text>
+                                <text style='color: #666666;font-size: 28upx' v-else-if="item.message.type=='tips'">
                                     <block v-if="item.message.content.type=='time'">
-                                         {{item.message.content.text}}
-                                        
+                                        {{item.message.content.text}}
+
                                     </block>
                                     <block v-else>
-                                {{item.message.content}}                                        
+                                        {{item.message.content}}
                                     </block>
-                                   
-                                    
-                                    </text>
-								
-                                
+
+
+                                </text>
+
+
                                 <text style='color: #666666;font-size: 28upx' v-else-if="item.message.type=='text'">
 
-								<text v-if="item.message.content.type!='emotion' ">
-								
-								<block v-if="item.message.content.type=='remind' && toText(item.message.content.content).indexOf('@我')>-1 ">
-                                <text style="color:#1d830a"> {{item.message.content.type=="remind"?toText(item.message.content.content):toText(item.message.content)  }}</text>
-                                </block>
-                                <block v-else>
-                                     {{item.message.content.type=="remind"?toText(item.message.content.content):toText(item.message.content)  }}
-                                </block>
-                               
-								</text>
-								<text v-if="item.message.content.type=='emotion' ">
-								{{item.message.content.content}}
-								</text>
-								
-								</text>
-								<text  style='color: #999999;font-size: 28upx'  v-else-if="item.message.msg_type=='show'">
-                                  {{item.message.content.text}}  
+                                    <text v-if="item.message.content.type!='emotion' ">
+
+                                        <block
+                                            v-if="item.message.content.type=='remind' && toText(item.message.content.content).indexOf('@我')>-1 ">
+                                            <text style="color:#1d830a">
+                                                {{item.message.content.type=="remind"?toText(item.message.content.content):toText(item.message.content) }}</text>
+                                        </block>
+                                        <block v-else>
+                                            {{item.message.content.type=="remind"?toText(item.message.content.content):toText(item.message.content) }}
+                                        </block>
+
+                                    </text>
+                                    <text v-if="item.message.content.type=='emotion' ">
+                                        {{item.message.content.content}}
+                                    </text>
+
+                                </text>
+                                <text style='color: #999999;font-size: 28upx' v-else-if="item.message.msg_type=='show'">
+                                    {{item.message.content.text}}
                                 </text>
-							</view>
+                            </view>
                             <view class="content" v-else>
-                                <text  style='color: #999999;font-size: 28upx'  >
-                               <block v-if="item.message.content.type=='time'">
+                                <text style='color: #999999;font-size: 28upx'>
+                                    <block v-if="item.message.content.type=='time'">
                                         {{item.message.content.text}}
-                                       
-                                   </block>
-                                   <block v-else>
-                               {{item.message.content}}                                        
-                                   </block>
-                                  
+
+                                    </block>
+                                    <block v-else>
+                                        {{item.message.content}}
+                                    </block>
+
                                 </text>
                             </view>
-							<view class="badge" v-if="item.unread && item.unread>99" style="width: auto;padding: 0 5px;">99+</view>
-							<view class="badge" v-if="item.unread && item.unread<=99">{{item.unread}}</view>
-						</view>
-					</view>
-				</view>
-			</scroll-view>
-            <view v-else class="nodata" >
+                            <view class="badge" v-if="item.unread && item.unread>99"
+                                style="width: auto;padding: 0 5px;">99+</view>
+                            <view class="badge" v-if="item.unread && item.unread<=99">{{item.unread}}</view>
+                        </view>
+                    </view>
+                </view>
+            </scroll-view>
+            <view v-else class="nodata">
                 您还没有任何消息
             </view>
-		</view>
-        
-      
-	</view>
+        </view>
+
+
+    </view>
 </template>
 
 <script>
-
-	import scode from "../../library/scode.js"
-	import api from "../../library/index.js"
+    import scode from "../../library/scode.js"
+    import api from "../../library/index.js"
     import chat from "../../library/chat.js"
-    	import http from "../../library/http.js"
-	import message from "../../library/message.js"
-    	import action from "../../library/action.js"
-        import headerline from '../../components/header.vue'
-              
-            var windowHeight= uni.getSystemInfoSync().windowHeight;	
-            var statusBarHeight = uni.getSystemInfoSync().statusBarHeight ;
-            var contenttop=statusBarHeight+45;
-            var conentheight=windowHeight-contenttop;
-            var lottHeight= conentheight-30;
-            var lottTop= contenttop + 30;
-	export default {
-		components: {
+    import http from "../../library/http.js"
+    import message from "../../library/message.js"
+    import action from "../../library/action.js"
+    import headerline from '../../components/header.vue'
+
+    var windowHeight = uni.getSystemInfoSync().windowHeight;
+    var statusBarHeight = uni.getSystemInfoSync().statusBarHeight;
+    var contenttop = statusBarHeight + 45;
+    var conentheight = windowHeight - contenttop;
+    var lottHeight = conentheight - 30;
+    var lottTop = contenttop + 30;
+    export default {
+        components: {
             headerline,
-           
-		},
-		data() {
-			return {
-                statusBarHeight: statusBarHeight+ 'px',
-                contenttop:contenttop+'px',
-                contentheight:conentheight+'px',
-                 lottHeight:lottHeight+'px',
-                 lottTop:lottTop+'px',
-                 shownav:false,
-                 // navtitle:'消息',
-                 navselect:0,
-                 menuitem:[],
-				newfriendNotify: false,
-				showMenu: false,
-                newfriendnum:0,
-                clickkey:false,
-                reading_id:-1,
-				actions: [],
-                user:uni.getStorageSync('userInfo'),
-                showsearch:false,
-                friends:uni.getStorageSync(uni.getStorageSync('access_token')+'_frienddata'),
-                pinyin:[],
-                char_select:false,
-                kefunum:0,
-                unreadnum:[0,0,0],
-                refreshstyle:'none',
-                isfresh:false,
-                fresh_tip:'下拉刷新'
-			}
-		},
-		computed: {
-		chats(){
-          var res  = this.$store.getters['chat/msglist'];
-          return res;
+
         },
-        navtitle(){
-          var num=0;
-             var msg_list=this.$store.getters['chat/msglist'];
-            msg_list.map(item=>{
-            
-              num+=parseInt(item.unread)
-            })
-            if(num==0) return '消息';else return '消息('+num+')'
-        }
-     
-		},
-        watch:{
-          chats(val){
-              var num=0;
-               for(var i=0;i<val.length;i++){
-                  num+=val[i].unread;              
-              }
-          
-              this.unreadnum.splice(0,3);
-              this.unreadnum.push(num);
-               this.unreadnum.push(0);
+        data() {
+            return {
+                statusBarHeight: statusBarHeight + 'px',
+                contenttop: contenttop + 'px',
+                contentheight: conentheight + 'px',
+                lottHeight: lottHeight + 'px',
+                lottTop: lottTop + 'px',
+                shownav: false,
+                // navtitle:'消息',
+                navselect: 0,
+                menuitem: [],
+                newfriendNotify: false,
+                showMenu: false,
+                newfriendnum: 0,
+                clickkey: false,
+                reading_id: -1,
+                actions: [],
+                user: uni.getStorageSync('userInfo'),
+                showsearch: false,
+                friends: uni.getStorageSync(uni.getStorageSync('access_token') + '_frienddata'),
+                pinyin: [],
+                char_select: false,
+                kefunum: 0,
+                unreadnum: [0, 0, 0],
+                refreshstyle: 'none',
+                isfresh: false,
+                fresh_tip: '下拉刷新'
+            }
+        },
+        computed: {
+            chats() {
+                var res = this.$store.getters['chat/msglist'];
+                return res;
+            },
+            navtitle() {
+                var num = 0;
+                var msg_list = this.$store.getters['chat/msglist'];
+                msg_list.map(item => {
+
+                    num += parseInt(item.unread)
+                })
+                if (num == 0) return '消息';
+                else return '消息(' + num + ')'
+            }
+
+        },
+        watch: {
+            chats(val) {
+                var num = 0;
+                for (var i = 0; i < val.length; i++) {
+                    num += val[i].unread;
+                }
+
+                this.unreadnum.splice(0, 3);
+                this.unreadnum.push(num);
                 this.unreadnum.push(0);
-                 this.$forceUpdate();
-          }  
+                this.unreadnum.push(0);
+                this.$forceUpdate();
+            }
         },
-	  
-      
-		methods: {
-            refresherpulling(){
-         
-              this.refreshstyle='none';
-             this.isfresh=true;
-             this.fresh_tip='下拉刷新...';
-             
+
+
+        methods: {
+            refresherpulling() {
+
+                this.refreshstyle = 'none';
+                this.isfresh = true;
+                this.fresh_tip = '下拉刷新...';
+
             },
-            refresherrefresh(){
-             
-               this.refreshstyle='black';
-               this.fresh_tip='正在刷新...';
-               this.lastchat();
-       
+            refresherrefresh() {
+
+                this.refreshstyle = 'black';
+                this.fresh_tip = '正在刷新...';
+                this.lastchat();
+
             },
-            href(path,opts){
-              
-               if(!opts || opts==undefined  || opts == null) opts={}; 
-                this.$jump(path,opts);
-                
+            href(path, opts) {
+
+                if (!opts || opts == undefined || opts == null) opts = {};
+                this.$jump(path, opts);
+
             },
-            open_detail(item){
-            
-                 this.$jump('friend.detail',{id:item.id});
+            open_detail(item) {
+
+                this.$jump('friend.detail', {
+                    id: item.id
+                });
             },
             toText(str) {
-                str=str.toString()
-                    str=str.replace(/&nbsp;/g," ");
-                    str=str.replace(/<br>/g," ");
-                   str= str.replace(/<[^<>]+>/g,'')
-                    return str;
-                },
-            timestamp(time){
-              // return  action.timestampFormat(new Date(time.replace(/(-|年|月)/g, '/').replace('日', '')).getTime()/1000)
-          return action.timestampFormat(time)
+                str = str.toString()
+                str = str.split('-qute-')[0]
+                str = str.replace(/&nbsp;/g, " ");
+                str = str.replace(/<br>/g, " ");
+                str = str.replace(/<[^<>]+>/g, '')
+                return str;
             },
-		
-            tapnav(num){
-              this.navselect=num;  
-              if(num==1) this.friendlist();
-              else this.lastchat();
+            timestamp(time) {
+                // return  action.timestampFormat(new Date(time.replace(/(-|年|月)/g, '/').replace('日', '')).getTime()/1000)
+                return action.timestampFormat(time)
             },
-            clicksearch(e){
-              this.showsearch=e;  
+
+            tapnav(num) {
+                this.navselect = num;
+                if (num == 1) this.friendlist();
+                else this.lastchat();
             },
-            go_search(e){
-                http.setWait(true).get('user.php?act=searchUser',{keywords:e}).then(res=>{
-                   if(res.data.length>0){
-                       var id=res.data[0].id;
-                       uni.navigateTo({
-                           url:'../friend/detail?id='+id+'&from='+res.data[0].from
-                       })
-                       
-                   }else{
-                       uni.showToast({
-                           icon:'none',
-                           title:'没有搜索到相关用户',
-                           duration:1500
-                       })
-                   }
+            clicksearch(e) {
+                this.showsearch = e;
+            },
+            go_search(e) {
+                http.setWait(true).get('user.php?act=searchUser', {
+                    keywords: e
+                }).then(res => {
+                    if (res.data.length > 0) {
+                        var id = res.data[0].id;
+                        uni.navigateTo({
+                            url: '../friend/detail?id=' + id + '&from=' + res.data[0].from
+                        })
+
+                    } else {
+                        uni.showToast({
+                            icon: 'none',
+                            title: '没有搜索到相关用户',
+                            duration: 1500
+                        })
+                    }
                 })
-              
+
             },
-            tapmenu(num){
-             
-                if(this.$action.loginTips('未登录用户,无法完成此操作','/pages/game/index') ==false) return false;
-                 if(this.$action.check_userlock()==false) return false;
-               
-              if(num==0){
-                    
-                      if(this.user.nickname=='' || this.user.nickname==this.user.name){
-                        this.$action.profileTips('未设置昵称,不能创建群','/pages/group/create')   ;
-                       return false;
-                      }
-                      else
-                    this.$jump('group.create');
-                 }
-                 else if(num==1){
-                       this.$jump('group.list',{method:0});
-                 }
-                 else if(num==2){
-                       this.$jump('group.list',{method:1});
-                 }
-                 else if(num==3){
-                       this.$jump('mine.note');
-                 }
-                 else if(num==4){
-                     return uni.scanCode({
-                     	success(res) {
-                     		scode.getScode(res)
-                     	},
-                     	fail(e) {
-                     		console.log(JSON.stringify(e));
-                     		console.log('扫码失败')
-                     	}
-                     }); 
-                 }
+            tapmenu(num) {
+
+                if (this.$action.loginTips('未登录用户,无法完成此操作', '/pages/game/index') == false) return false;
+                if (this.$action.check_userlock() == false) return false;
+
+                if (num == 0) {
+
+                    if (this.user.nickname == '' || this.user.nickname == this.user.name) {
+                        this.$action.profileTips('未设置昵称,不能创建群', '/pages/group/create');
+                        return false;
+                    } else
+                        this.$jump('group.create');
+                } else if (num == 1) {
+                    this.$jump('group.list', {
+                        method: 0
+                    });
+                } else if (num == 2) {
+                    this.$jump('group.list', {
+                        method: 1
+                    });
+                } else if (num == 3) {
+                    this.$jump('mine.note');
+                } else if (num == 4) {
+                    return uni.scanCode({
+                        success(res) {
+                            scode.getScode(res)
+                        },
+                        fail(e) {
+                            console.log(JSON.stringify(e));
+                            console.log('扫码失败')
+                        }
+                    });
+                }
             },
-            group_read(group_id){
-                
-                http.setWait(false).post('group.php?act=setReadTime',{group_id:group_id,userid:this.user.id}).then(res=>{
-                  
-                     this.lastchat();  
+            group_read(group_id) {
+
+                http.setWait(false).post('group.php?act=setReadTime', {
+                    group_id: group_id,
+                    userid: this.user.id
+                }).then(res => {
+
+                    this.lastchat();
                 })
-                
+
             },
-            user_read(userid){
-               
-             
-                http.setWait(false).post('group.php?act=setReadTime',{group_id:0,userid:this.userid,sendid:this.user.id}).then(res=>{
-                     this.lastchat();  
+            user_read(userid) {
+
+
+                http.setWait(false).post('group.php?act=setReadTime', {
+                    group_id: 0,
+                    userid: this.userid,
+                    sendid: this.user.id
+                }).then(res => {
+                    this.lastchat();
                 })
-                
+
+            },
+            handleClick(info) {
+
+
+                if (info.unread > 0) this.$store.commit('chat/clearunread', info.cache_key);
+
+                if (this.clickkey == info.cache_key) return false;
+
+                this.clickkey = info.cache_key;
+                if (info.cache_key == "U1") {
+
+                    return this.$jump('friend.request?type=' + info.sender.id);
+                } else {
+                    if (info.cache_key.indexOf('U') > -1) {
+                        let friend = {
+                            id: info.id,
+                            nickname: info.nickname
+                        }
+                        //this.user_read(info.id);
+                        return this.$jump('friend.chat', friend);
+                    } else {
+                        if (info.message.content.type == 'remind' && this.toText(info.message.content.content).indexOf(
+                                '@我') > -1)
+                            var atme = 1;
+                        else var atme = 0;
+                        // this.group_read(info.id);
+                        this.$jump('group.chat', {
+                            id: info.id,
+                            nickname: info.nickname,
+                            atme: atme,
+                            msg_id: info.msg_id
+                        });
+                    }
+
+                }
+
             },
-			handleClick(info) {
-                
-               
-               if(info.unread>0) this.$store.commit('chat/clearunread', info.cache_key);  
-            
-               if(this.clickkey==info.cache_key) return false;
-               
-               this.clickkey=info.cache_key;
-               if(info.cache_key=="U1"){
-                   
-                 	return this.$jump('friend.request?type='+info.sender.id);
-               }
-               
-               else{
-                   if (info.cache_key.indexOf('U')>-1) {
-                   	let friend = {
-                   		id: info.id,
-                   		nickname: info.nickname
-                   	}
-                      //this.user_read(info.id);
-                   	return this.$jump('friend.chat', friend);
-                   }
-                   else{
-                       if(info.message.content.type=='remind' && this.toText(info.message.content.content).indexOf('@我')>-1)
-                        var atme=1;
-                        else var atme=0;
-                       // this.group_read(info.id);
-                       this.$jump('group.chat', {
-                       	id: info.id,
-                       	nickname: info.nickname,
-                        atme:atme,
-                        msg_id:info.msg_id
-                       });
-                   }
-                  
-               }
-				
-			},
-	
-            msgtopChanage(istop,cache_key){
-              istop=!istop
-           
-                 var msgtop =  uni.getStorageSync('msgtop')?uni.getStorageSync('msgtop'):[];
-               if(istop){
-                   msgtop.push(cache_key)
-               }else{
-                   for (var i = 0; i < msgtop.length; i++) {
-                      if(msgtop[i]==cache_key) {
-                        msgtop.splice(i,1)
-                      }
-                   }
-               }
-            
-               uni.setStorageSync('msgtop',msgtop);
-               this.$store.commit('chat/set_istop');
-                var  data = {cache_key:cache_key,userid: this.user.id,istop:istop};
-                                 
-                       http.setWait(false).get('group.php?act=set_msgtop',data).then(res=>{
-                            
-                           })
-                
+
+            msgtopChanage(istop, cache_key) {
+                istop = !istop
+
+                var msgtop = uni.getStorageSync('msgtop') ? uni.getStorageSync('msgtop') : [];
+                if (istop) {
+                    msgtop.push(cache_key)
+                } else {
+                    for (var i = 0; i < msgtop.length; i++) {
+                        if (msgtop[i] == cache_key) {
+                            msgtop.splice(i, 1)
+                        }
+                    }
+                }
+
+                uni.setStorageSync('msgtop', msgtop);
+                this.$store.commit('chat/set_istop');
+                var data = {
+                    cache_key: cache_key,
+                    userid: this.user.id,
+                    istop: istop
+                };
+
+                http.setWait(false).get('group.php?act=set_msgtop', data).then(res => {
+
+                })
+
             },
-            msgAction(msg){
-                
- 
-                   var user_id=uni.getStorageSync('access_token');
-                   // console.log(msg);
-                   let that=this;
-                   var itemList=[];
-                   if(msg.istop<1) itemList.push('置顶');
-                   else itemList.push('取消置顶');
-                   if(msg.unread>0) itemList.push('标记已读');
-                   else itemList.push('标记未读');
-                    itemList.push('删除会话')
-                   uni.showActionSheet({
-                   	itemList:itemList,
-                   	success: function (res) {
-                   		switch (res.tapIndex){
-                   			case 2:
-
-                            that.delete_msg(msg.cache_key)
-                   				break;
-                   			case 0:
-                          that.msgtopChanage(msg.istop,msg.cache_key)
-                              // console.log(msg.cache_key)
-                   				break;
-                                case 1:
-                                  that.$store.commit('chat/set_read',msg);
+            msgAction(msg) {
+
+
+                var user_id = uni.getStorageSync('access_token');
+                // console.log(msg);
+                let that = this;
+                var itemList = [];
+                if (msg.istop < 1) itemList.push('置顶');
+                else itemList.push('取消置顶');
+                if (msg.unread > 0) itemList.push('标记已读');
+                else itemList.push('标记未读');
+                itemList.push('删除会话')
+                uni.showActionSheet({
+                    itemList: itemList,
+                    success: function(res) {
+                        switch (res.tapIndex) {
+                            case 2:
+
+                                that.delete_msg(msg.cache_key)
                                 break;
-                   			default:
-                   				break;
-                   		}
-                   },
-                   	fail: function (res) {
-                   		//console.log(res.errMsg);
-                   	}
-                   });
-                   
-                   
-                              
+                            case 0:
+                                that.msgtopChanage(msg.istop, msg.cache_key)
+                                // console.log(msg.cache_key)
+                                break;
+                            case 1:
+                                that.$store.commit('chat/set_read', msg);
+                                break;
+                            default:
+                                break;
+                        }
+                    },
+                    fail: function(res) {
+                        //console.log(res.errMsg);
+                    }
+                });
+
+
+
             },
-            lastchat(){
-                var userid=parseInt(uni.getStorageSync('access_token'));
-                var postdata={userid:userid,reading_id:this.reading_id};
-                var msg_list_key=userid+'_chat_msglist';
-              var  temp1=[];
-              var  temp2=[];
-                
-              http.setWait(false).get('group.php?act=lastchat',postdata).then(res=>{
-               var data=res.data;
-               var msglist=[];
-            
-               for(var i=0;i<data.length;i++){
-                     
-                   var item=data[i];
-                 //  console.log(item)
-//           console.log(item.cache_key,item.unread,this.timestamp(item.readtime))
-                   var result={};
-                    result['key']=userid+'_chat_'+item['cache_key'];
-                   var msg={};
-                     msg['id']=item.group.id;
-                     msg['cache_key']=item['cache_key'];
-                     msg['group_id']=item.group.id;
-                     msg['nickname']=item.group['nickname'];
-                    // msg['kefu']=item.group.kefu
-                    msg['avatar']=item.group['avatar'];
-                    msg['isloading']=1;
-                    msg['istop']=item.istop;
-                    msg['msg_id']=item.id;
-                     msg['timestamp']=item.addtime;
-                     if(parseInt(item.userid)==userid) msg['self']=1;
-                     else msg['self']=0;
-                     msg['none']=false;
-                     msg['sender_id']=item.userid;
-                     
-                     msg['message']={'type':item.type,'content':item.content};
-                     msg['unread']=parseInt(item.unread);
-                     msg['readtime']=item.readtime;
-                     if(item.groupid==1){
-                         msg['sender']={'nickname':item.sender_name,id:item.reqtype}
-                     }
-                     else   msg['sender']={'nickname':item.sender_name};
-                     result['msg']=msg;
-              
-                     if(msg.istop)temp1.push(result)
-                     else temp2.push(result)
-               }
-               
-                 temp1.sort((a, b) =>b.timestamp - a.timestamp);
-                temp2.sort((a, b) => b.timestamp - a.timestamp);
-                msglist=temp1.concat(temp2);
-        
-                 this.update_msglist(msglist);
-           
-                var that=this;
-                this.fresh_tip='刷新成功'
-                  this.refreshstyle='none';
-                setTimeout(function(){   that.isfresh=false;},500)
-         
-              })  
+            lastchat() {
+                var userid = parseInt(uni.getStorageSync('access_token'));
+                var postdata = {
+                    userid: userid,
+                    reading_id: this.reading_id
+                };
+                var msg_list_key = userid + '_chat_msglist';
+                var temp1 = [];
+                var temp2 = [];
+
+                http.setWait(false).get('group.php?act=lastchat', postdata).then(res => {
+                    var data = res.data;
+                    var msglist = [];
+
+                    for (var i = 0; i < data.length; i++) {
+
+                        var item = data[i];
+                        //  console.log(item)
+                        //           console.log(item.cache_key,item.unread,this.timestamp(item.readtime))
+                        var result = {};
+                        result['key'] = userid + '_chat_' + item['cache_key'];
+                        var msg = {};
+                        msg['id'] = item.group.id;
+                        msg['cache_key'] = item['cache_key'];
+                        msg['group_id'] = item.group.id;
+                        msg['nickname'] = item.group['nickname'];
+                        // msg['kefu']=item.group.kefu
+                        msg['avatar'] = item.group['avatar'];
+                        msg['isloading'] = 1;
+                        msg['istop'] = item.istop;
+                        msg['msg_id'] = item.id;
+                        msg['timestamp'] = item.addtime;
+                        if (parseInt(item.userid) == userid) msg['self'] = 1;
+                        else msg['self'] = 0;
+                        msg['none'] = false;
+                        msg['sender_id'] = item.userid;
+
+                        msg['message'] = {
+                            'type': item.type,
+                            'content': item.content
+                        };
+                        msg['unread'] = parseInt(item.unread);
+                        msg['readtime'] = item.readtime;
+                        if (item.groupid == 1) {
+                            msg['sender'] = {
+                                'nickname': item.sender_name,
+                                id: item.reqtype
+                            }
+                        } else msg['sender'] = {
+                            'nickname': item.sender_name
+                        };
+                        result['msg'] = msg;
+
+                        if (msg.istop) temp1.push(result)
+                        else temp2.push(result)
+                    }
+
+                    temp1.sort((a, b) => b.timestamp - a.timestamp);
+                    temp2.sort((a, b) => b.timestamp - a.timestamp);
+                    msglist = temp1.concat(temp2);
+
+                    this.update_msglist(msglist);
+
+                    var that = this;
+                    this.fresh_tip = '刷新成功'
+                    this.refreshstyle = 'none';
+                    setTimeout(function() {
+                        that.isfresh = false;
+                    }, 500)
+
+                })
             },
-            
-            
-            setrightmenu(){
-                var action=[
-               
+
+
+            setrightmenu() {
+                var action = [
+
                     {
-                    	title: '新建群',
-                    	icon: 'plus'
+                        title: '新建群',
+                        icon: 'plus'
                     },
                     {
-                    	title: '我的创建',
-                    	icon: 'personadd'
+                        title: '我的创建',
+                        icon: 'personadd'
                     },
                     {
-                    	title: '加入的群',
-                    	icon: 'person'
+                        title: '加入的群',
+                        icon: 'person'
+                    },
+
+                    // #ifdef APP-PLUS
+                    {
+                        title: '通知设置',
+                        icon: 'gear'
                     },
-                   
-                     // #ifdef APP-PLUS
-                     {
-                     	title: '通知设置',
-                     	icon: 'gear'
-                     },
                     {
-                    	title: '扫一扫',
-                    	icon: 'scan'
+                        title: '扫一扫',
+                        icon: 'scan'
                     },
-                     // #endif 
+                    // #endif 
                 ]
-              this.menuitem=action;
+                this.menuitem = action;
             },
-            fresh_msg(){
-                 var msglist=uni.getStorageSync(uni.getStorageSync('access_token') + '_chat_msglist');
+            fresh_msg() {
+                var msglist = uni.getStorageSync(uni.getStorageSync('access_token') + '_chat_msglist');
                 this.update_msglist(msglist);
                 this.$action.setStatusTips();
             },
-          
-		},
+
+        },
         created() {
-            uni.$on('toChat',message=>{
+            uni.$on('toChat', message => {
                 //console.log('index')
-            this.$action.toChat(message);
+                this.$action.toChat(message);
             })
         },
-		onShow() {
-         this.unreadnum[0]=this.$action.setStatusTips()
-            this.clickkey=false
-             uni.setStorageSync('cache_key','');
-                  uni.hideKeyboard();
- var userid=parseInt(uni.getStorageSync('access_token'));
-     if(userid>0) {
-        this.lastchat();
-      
-        this.$action.setStatusTips();
-           if(uni.getStorageSync('ispush')==true){
-              
-           var message=uni.getStorageSync('pushmessage');
-                this.$action.toChat(message);
-              uni.setStorageSync('ispush',false)
-              }
-        
-     }else{
-     
-         uni.setStorageSync('gourl','/pages/index/index');
-        
-         this.$jump('login.index');
-     }
-     
-
-		},
-        onLoad(){
-          
-            var userid=parseInt(uni.getStorageSync('access_token'));
-                if(userid>0){
-                     var that=this;
-                    this.$socket.on('chat', (res) => {
-                          setTimeout(function(){
-                              that.fresh_msg();
-                          },100)
-                     })
-                       that.setrightmenu();
-                     setTimeout(function(){
-                       
-                             api.getMyGroup({userid:userid}).then(res => {
-                                // console.log(res.data)
-                             	uni.setStorageSync(userid+'_groups',res.data)
-                             })
-                             
-                                                
-                             api.getMyFriend({userid:userid}).then(resss => {
-                                 uni.setStorageSync(userid+'_frienddata',resss.data);
-                             })   
-                     },3000)
-                    
+        onShow() {
+            this.unreadnum[0] = this.$action.setStatusTips()
+            this.clickkey = false
+            uni.setStorageSync('cache_key', '');
+            uni.hideKeyboard();
+            var userid = parseInt(uni.getStorageSync('access_token'));
+            if (userid > 0) {
+                this.lastchat();
+
+                this.$action.setStatusTips();
+                if (uni.getStorageSync('ispush') == true) {
+
+                    var message = uni.getStorageSync('pushmessage');
+                    this.$action.toChat(message);
+                    uni.setStorageSync('ispush', false)
                 }
-        
+
+            } else {
+
+                uni.setStorageSync('gourl', '/pages/index/index');
+
+                this.$jump('login.index');
+            }
+
+
+        },
+        onLoad() {
+
+            var userid = parseInt(uni.getStorageSync('access_token'));
+            if (userid > 0) {
+                var that = this;
+                this.$socket.on('chat', (res) => {
+                    setTimeout(function() {
+                        that.fresh_msg();
+                    }, 100)
+                })
+                that.setrightmenu();
+                setTimeout(function() {
+
+                    api.getMyGroup({
+                        userid: userid
+                    }).then(res => {
+                        // console.log(res.data)
+                        uni.setStorageSync(userid + '_groups', res.data)
+                    })
+
+
+                    api.getMyFriend({
+                        userid: userid
+                    }).then(resss => {
+                        uni.setStorageSync(userid + '_frienddata', resss.data);
+                    })
+                }, 3000)
+
+            }
+
         }
-	}
-    
-  
+    }
 </script>
 
 <style lang="scss">
-
-    .fresh{
+    .fresh {
         height: 30px;
         line-height: 30px;
         font-size: 14px;
         text-align: center;
         color: #666;
     }
-    .btn_yellow{
+
+    .btn_yellow {
         background-color: yellow;
         color: #000;
         font-size: 12px;
         display: inline-block;
-        height:18px;
+        height: 18px;
         line-height: 18px;
         padding: 0px 5px;
         border-radius: 5px;
         text-align: center;
-         margin: 0px 2px;
+        margin: 0px 2px;
     }
-    .btn_green{
+
+    .btn_green {
         background-color: #0aad6c;
-        color: #fff;font-size: 12px;
+        color: #fff;
+        font-size: 12px;
         display: inline-block;
         height: 18px;
         line-height: 18px;
         padding: 0px 5px;
         border-radius: 5px;
         text-align: center;
-    
+
         margin: 0px 2px;
     }
-    .btn_blue{
+
+    .btn_blue {
         background-color: $uni-color-primary;
-        color: #fff;font-size: 12px;
+        color: #fff;
+        font-size: 12px;
         display: inline-block;
         height: 18px;
         line-height: 18px;
         padding: 0px 5px;
         border-radius: 5px;
         text-align: center;
-     margin: 0px 2px;
+        margin: 0px 2px;
     }
-    
-    .btn_grey{
+
+    .btn_grey {
         background-color: #ddd;
-        color: #000;font-size: 12px;
+        color: #000;
+        font-size: 12px;
         display: inline-block;
         height: 18px;
         line-height: 18px;
         padding: 0px 5px;
         border-radius: 5px;
         text-align: center;
-         margin: 0px 2px;
+        margin: 0px 2px;
     }
-    .nodata{
+
+    .nodata {
         height: 35px;
         line-height: 35px;
         color: #666;
         font-size: 12px;
         text-align: center;
     }
-  
-	.item {
+
+    .item {
         height: 120upx;
-		
-		overflow: hidden;
-		padding:0px 30upx;
-		display: flex;
-		flex-direction: row;
-		justify-content: flex-start;
-		align-items: center;
+
+        overflow: hidden;
+        padding: 0px 30upx;
+        display: flex;
+        flex-direction: row;
+        justify-content: flex-start;
+        align-items: center;
         margin-top: 5px;
-   
-	}
-    .item:hover{
+
+    }
+
+    .item:hover {
         background-color: #eee;
     }
 
-	.leftImg {
-		width: 100upx;
-		height: 100upx;
-		margin-right: $uni-spacing-row-base;
-		border-radius: $uni-border-radius-base;
-		display: flex;
-		flex-flow: wrap;
-		justify-content: center;
-		background-color: #eee;
-		align-items: center;
-
-		&:not(image) {
-			padding: 1upx;
-		}
-
-		view,
-		image {
-			width: (76upx-2upx*4)/3;
-			height: (76upx-2upx*4)/3;
-			margin: 1upx;
-		}
-	}
-
-	.rightContent {
-		flex: 1;
+    .leftImg {
+        width: 100upx;
+        height: 100upx;
+        margin-right: $uni-spacing-row-base;
+        border-radius: $uni-border-radius-base;
+        display: flex;
+        flex-flow: wrap;
+        justify-content: center;
+        background-color: #eee;
+        align-items: center;
+
+        &:not(image) {
+            padding: 1upx;
+        }
+
+        view,
+        image {
+            width: (76upx-2upx*4)/3;
+            height: (76upx-2upx*4)/3;
+            margin: 1upx;
+        }
+    }
+
+    .rightContent {
+        flex: 1;
         border-bottom: 1px solid #fbfbfb;
-	}
-
-	.rightContent,
-	.topCont {
-		overflow: hidden;
-		line-height:50upx;
-	}
-
-	.topCont {
-		display: flex;
-		flex-direction: row;
-		justify-content: space-between;
-		align-items: center;
+    }
+
+    .rightContent,
+    .topCont {
+        overflow: hidden;
+        line-height: 50upx;
+    }
+
+    .topCont {
+        display: flex;
+        flex-direction: row;
+        justify-content: space-between;
+        align-items: center;
         vertical-align: top;
-	}
-
-	.userName {
-		color: $uni-text-color;
-		font-size: 32upx;
-	}
-
-	.time {
-		color: #999999;
-		font-size: 24upx;
-	}
-
-	.bottomCont {
-		width: 100%;
-		font-size: 24upx;
-		color: #999999;
-
-		display: flex;
-		align-items: center;
-		justify-content: space-between;
+    }
+
+    .userName {
+        color: $uni-text-color;
+        font-size: 32upx;
+    }
+
+    .time {
+        color: #999999;
+        font-size: 24upx;
+    }
+
+    .bottomCont {
+        width: 100%;
+        font-size: 24upx;
+        color: #999999;
+
+        display: flex;
+        align-items: center;
+        justify-content: space-between;
         flex-direction: row;
-	}
+    }
 
-	.content {
+    .content {
         font-size: 28upx;
-	white-space: nowrap;
-	text-overflow: ellipsis;
-	overflow: hidden;
-	word-break: break-all;
-    height: 30px;
-    line-height: 30px;
-    display: flex;
-    flex-direction: row;
-    max-width:100%;
-	}
-.content text{
-   white-space: nowrap;
-   text-overflow: ellipsis;
-   overflow: hidden;
-   word-break: break-all; 
-      max-width:100%;
-}
-	.badge {
-		background-color: red;
-		color: #fff;
-		border-radius: 40upx;
-		line-height: 40upx;
-		width: 40upx;
-		height: 40upx;
-		font-size: 24upx;
-		text-align: center;
-		flex-shrink: 0;
-	}
-</style>
+        white-space: nowrap;
+        text-overflow: ellipsis;
+        overflow: hidden;
+        word-break: break-all;
+        height: 30px;
+        line-height: 30px;
+        display: flex;
+        flex-direction: row;
+        max-width: 100%;
+    }
+
+    .content text {
+        white-space: nowrap;
+        text-overflow: ellipsis;
+        overflow: hidden;
+        word-break: break-all;
+        max-width: 100%;
+    }
+
+    .badge {
+        background-color: red;
+        color: #fff;
+        border-radius: 40upx;
+        line-height: 40upx;
+        width: 40upx;
+        height: 40upx;
+        font-size: 24upx;
+        text-align: center;
+        flex-shrink: 0;
+    }
+</style>

+ 1 - 0
pages/index/record.vue

@@ -130,6 +130,7 @@
                         let data = [];
                         res.data.forEach(item => {
                             if(item.type != 'time') {
+                                item.content = item.content.split('-qute-')[0]
                                 data.push(item)
                             }
                         })