luke пре 6 година
родитељ
комит
6283a89f06
100 измењених фајлова са 5 додато и 322 уклоњено
  1. 5 1
      pc_chat/src/components/chat.vue
  2. 0 287
      service/src/src/App.vue
  3. 0 34
      service/src/src/api/ports.js
  4. BIN
      service/src/src/assets/img/0.gif
  5. BIN
      service/src/src/assets/img/1.gif
  6. BIN
      service/src/src/assets/img/10.gif
  7. BIN
      service/src/src/assets/img/11.gif
  8. BIN
      service/src/src/assets/img/12.gif
  9. BIN
      service/src/src/assets/img/13.gif
  10. BIN
      service/src/src/assets/img/14.gif
  11. BIN
      service/src/src/assets/img/15.gif
  12. BIN
      service/src/src/assets/img/16.gif
  13. BIN
      service/src/src/assets/img/17.gif
  14. BIN
      service/src/src/assets/img/18.gif
  15. BIN
      service/src/src/assets/img/19.gif
  16. BIN
      service/src/src/assets/img/2.gif
  17. BIN
      service/src/src/assets/img/20.gif
  18. BIN
      service/src/src/assets/img/21.gif
  19. BIN
      service/src/src/assets/img/22.gif
  20. BIN
      service/src/src/assets/img/23.gif
  21. BIN
      service/src/src/assets/img/24.gif
  22. BIN
      service/src/src/assets/img/25.gif
  23. BIN
      service/src/src/assets/img/26.gif
  24. BIN
      service/src/src/assets/img/27.gif
  25. BIN
      service/src/src/assets/img/28.gif
  26. BIN
      service/src/src/assets/img/29.gif
  27. BIN
      service/src/src/assets/img/3.gif
  28. BIN
      service/src/src/assets/img/30.gif
  29. BIN
      service/src/src/assets/img/31.gif
  30. BIN
      service/src/src/assets/img/32.gif
  31. BIN
      service/src/src/assets/img/33.gif
  32. BIN
      service/src/src/assets/img/34.gif
  33. BIN
      service/src/src/assets/img/35.gif
  34. BIN
      service/src/src/assets/img/36.gif
  35. BIN
      service/src/src/assets/img/37.gif
  36. BIN
      service/src/src/assets/img/38.gif
  37. BIN
      service/src/src/assets/img/39.gif
  38. BIN
      service/src/src/assets/img/4.gif
  39. BIN
      service/src/src/assets/img/40.gif
  40. BIN
      service/src/src/assets/img/41.gif
  41. BIN
      service/src/src/assets/img/42.gif
  42. BIN
      service/src/src/assets/img/43.gif
  43. BIN
      service/src/src/assets/img/44.gif
  44. BIN
      service/src/src/assets/img/45.gif
  45. BIN
      service/src/src/assets/img/46.gif
  46. BIN
      service/src/src/assets/img/47.gif
  47. BIN
      service/src/src/assets/img/48.gif
  48. BIN
      service/src/src/assets/img/49.gif
  49. BIN
      service/src/src/assets/img/5.gif
  50. BIN
      service/src/src/assets/img/50.gif
  51. BIN
      service/src/src/assets/img/51.gif
  52. BIN
      service/src/src/assets/img/52.gif
  53. BIN
      service/src/src/assets/img/53.gif
  54. BIN
      service/src/src/assets/img/54.gif
  55. BIN
      service/src/src/assets/img/55.gif
  56. BIN
      service/src/src/assets/img/56.gif
  57. BIN
      service/src/src/assets/img/57.gif
  58. BIN
      service/src/src/assets/img/58.gif
  59. BIN
      service/src/src/assets/img/59.gif
  60. BIN
      service/src/src/assets/img/6.gif
  61. BIN
      service/src/src/assets/img/60.gif
  62. BIN
      service/src/src/assets/img/61.gif
  63. BIN
      service/src/src/assets/img/62.gif
  64. BIN
      service/src/src/assets/img/63.gif
  65. BIN
      service/src/src/assets/img/64.gif
  66. BIN
      service/src/src/assets/img/65.gif
  67. BIN
      service/src/src/assets/img/66.gif
  68. BIN
      service/src/src/assets/img/67.gif
  69. BIN
      service/src/src/assets/img/68.gif
  70. BIN
      service/src/src/assets/img/69.gif
  71. BIN
      service/src/src/assets/img/7.gif
  72. BIN
      service/src/src/assets/img/70.gif
  73. BIN
      service/src/src/assets/img/71.gif
  74. BIN
      service/src/src/assets/img/8.gif
  75. BIN
      service/src/src/assets/img/9.gif
  76. BIN
      service/src/src/assets/img/Multitap.png
  77. BIN
      service/src/src/assets/img/account.png
  78. BIN
      service/src/src/assets/img/bottom.png
  79. BIN
      service/src/src/assets/img/del.png
  80. BIN
      service/src/src/assets/img/end.png
  81. BIN
      service/src/src/assets/img/frce.png
  82. BIN
      service/src/src/assets/img/frcea.png
  83. BIN
      service/src/src/assets/img/hader1.png
  84. BIN
      service/src/src/assets/img/hader1a.png
  85. BIN
      service/src/src/assets/img/hader2.png
  86. BIN
      service/src/src/assets/img/hader3.png
  87. BIN
      service/src/src/assets/img/hader3a.png
  88. BIN
      service/src/src/assets/img/hader4.png
  89. BIN
      service/src/src/assets/img/headerPortrait.png
  90. BIN
      service/src/src/assets/img/img.png
  91. BIN
      service/src/src/assets/img/left1.png
  92. BIN
      service/src/src/assets/img/left1a.png
  93. BIN
      service/src/src/assets/img/left2.png
  94. BIN
      service/src/src/assets/img/left2a.png
  95. BIN
      service/src/src/assets/img/left3.png
  96. BIN
      service/src/src/assets/img/left3a.png
  97. BIN
      service/src/src/assets/img/left4.png
  98. BIN
      service/src/src/assets/img/left4a.png
  99. BIN
      service/src/src/assets/img/left5.png
  100. BIN
      service/src/src/assets/img/left5a.png

+ 5 - 1
pc_chat/src/components/chat.vue

@@ -19,7 +19,7 @@
 						<div class="imgBox">
 							<!-- <el-button v-if="!service_on"  size="mini" type="primary" @click="exit" style="margin-right: 10px;">退出聊天</el-button>-->
 							<el-button v-if="machineAndAtl == 100" size="mini" type="primary" @click="exit" style="margin-right: 10px;">退出聊天</el-button>
-							<i v-if="(selNum + tokNum) > 2" @click="ejectEvl(10)" class="sc pointer" :class="selType?'scActy':''">
+							<i v-if="(selNum + tokNum) >= 4" @click="ejectEvl(10)" class="sc pointer" :class="selType?'scActy':''">
 							</i>
 							<div v-if="showleaveIcon" style="float: right" class="pointer" @click="leaveMsg()">
 								<span style="font-size: 25px; color: #b3c1e7; margin-top: 13px;" @click="back()"
@@ -805,6 +805,8 @@
 					// this.automaticRolling();
 					this.customerSviceChat = [];
 					this.reconnect();
+					this.selNum = 0;
+					this.tokNum = 0;
 				}
 			},
 
@@ -1076,6 +1078,8 @@
 					this.comtSuccess = false;
 					this.showleaveIcon = false;
 					this.waitingMsg = false;
+					this.selNum = 0;
+					this.tokNum = 0;
 				}
 				// 暂无客服
 				if (redata.message_type == 'wait') {

+ 0 - 287
service/src/src/App.vue

@@ -1,287 +0,0 @@
-<template>
-  <div id="app">
-    <transition name='fade' mode="out-in">
-      <router-view/>
-    </transition>
-  </div>
-</template>
-
-<script>
-import Vue from 'vue';
-export default {
-  name: 'App',
-  // apiToken:'',//WebSocket链接凭证
-  // time:'',
-  data(){
-    return{
-      reconnectData:null,
-      lockReconnect:false,    //避免重复连接,因为onerror之后会立即触发 onclose
-      timeout:10000,          //10s一次心跳检测
-      timeoutObj:null,
-      serverTimeoutObj:null,
-      apiToken:'',
-      linkfailure:true,
-
-    }
-  },
-  methods:{
-    /**************************************/
-    //初始化weosocket
-    initWebSocket(apiToken) {
-      // 书写接口信息
-      const wsuri = "ws://103.108.43.176:9101?apiToken=" + apiToken;//www.service.com 线上
-      //const wsuri = "ws://192.168.2.186:9101?apiToken=" + apiToken;//www.service.com //192.168.2.186 本地
-      // 创建websocket实例
-      Vue.prototype.$websocket = new WebSocket(wsuri);
-      this.$websocket.onopen = this.websocketonopen; //连接成功
-      this.$websocket.onmessage = this.websocketonmessage; //接收消息
-      this.$websocket.onerror = this.websocketonerror;//链接错误提示
-      this.$websocket.onclose = this.socket_close;//链接断开提示
-    },
-
-    
-    /**************************************/
-    //连接成功
-    websocketonopen() {
-      console.log('已经链接');
-      Vue.prototype.$socket_open = true;
-      this.heatBeat();
-    },
-
-    /*******************************************/  
-    //连接关闭触发
-    socket_close(e){  
-      console.log('断开连接',e);
-      //this.init()
-      this.reconnect();
-    },
-
-    /******************************************/
-    //数据接收
-    websocketonmessage(e){
-      this.heatBeat();//收到消息会刷新心跳检测,如果一直收到消息,就推迟心跳发送
-      const redata = JSON.parse(e.data);//接收数据源
-      if(redata.type != "pong"){
-        console.log(redata);
-      }
-      let  getters = this.$store.getters;
-      //获取vuex数据
-      let session = getters.get_session;//会话列表
-      let offline  = getters.get_offline;//离线列表
-      let sessionType  = getters.get_type;//选择状态(会话/离线)
-      let dataIndex  = getters.get_num;//列表下标
-      let current_session  = getters.get_current;//当前会话
-      let session_name  = getters.get_session_name;//当前用户名
-      
-      if(e.data.type == "pong" ) return
-      this.$store.dispatch("SET_SESSION_MESSAGE",JSON.parse(e.data));
-
-      	// 用户接入数据
-				if(redata.message_type == "connect"){
-					let _this  = this;
-					let arr =[
-						redata.data,
-						offline,
-						session,
-						sessionType,
-						dataIndex,
-						current_session,
-						session_name
-					]
-					_this.$public.visitorsConnect(arr,function(data){
-						//离线匹配列表访客链接回调
-            _this.$store.dispatch("SET_OFFLINE",data);
-            
-					},function(data,session,offline,type,num,dataList,name){
-						//将用户添加到会话列表中
-						session.push(data.user_info);
-						//获取接入的用户信息
-						//_this.get_user_info(list);
-						//获取接入的用户信息写入vuex
-						_this.$store.dispatch("SET_SESSION",session);//会话列表
-						_this.$store.dispatch("SET_OFFLINE",offline);//离线列表
-						_this.$store.dispatch("SET_TYPE",type);//选择类型(会话/离线)
-						_this.$store.dispatch("SET_NUM",num);//列表下标
-						_this.$store.dispatch("SET_CURRENT",dataList);//当前会话数据
-						_this.$store.dispatch("SET_SESSION_NAME",name);//当前会话对象名
-						
-					})
-				}
-				
-
-				//用户离线后会话窗口切换
-				if(redata.message_type == "userClose"){
-					let _this =this;
-					let	arr= [
-						redata.data,
-						session,
-            offline,
-						sessionType,
-						dataIndex,
-						session_name,
-						current_session,
-					]
-					_this.$public.userOffline(arr,function(session,offline,type,index,name,list,userInfo){
-            _this.$store.dispatch("SET_CURRENT",list);//当前会话数据
-						_this.$store.dispatch("SET_SESSION_NAME",name);//当前会话对象名
-						_this.$store.dispatch("SET_NUM",index);
-						_this.$store.dispatch("SET_TYPE",type);
-						_this.$store.dispatch("SET_SESSION",session);
-						_this.$store.dispatch("SET_OFFLINE",offline);
-						// _this.get_user_info(userInfo);
-					})
-				}
-
-
-				//用户会话结束窗口切换
-				if(redata.message_type == "delUser"){
-					let _this =this;
-					let	arr= [
-						redata.data,
-						session,
-            offline,
-						sessionType,
-						dataIndex,
-						session_name,
-						current_session,
-					]
-					_this.$public.sessionEnd(arr,function(session,offline,type,index,name,list,userInfo){
-            _this.$store.dispatch("SET_CURRENT",list);//当前会话数据
-						_this.$store.dispatch("SET_SESSION_NAME",name);//当前会话对象名
-						_this.$store.dispatch("SET_NUM",index);
-						_this.$store.dispatch("SET_TYPE",type);
-						_this.$store.dispatch("SET_SESSION",session);
-						_this.$store.dispatch("SET_OFFLINE",offline);
-					//	_this.get_user_info(userInfo);
-					})
-				}
-
-				//接收用户消息数据
-				if(redata.message_type == "chatMessage"){
-					let _this =this;
-					this.$public.receivesMessage(redata.data,session,this.$frce,function(data,chatList,index){
-						//判断是否是当前对话信息
-						if(dataIndex == index){
-						    // _this.data =[];
-                // _this.data = chatList.data;
-                _this.$store.dispatch("SET_CURRENT",chatList.data);//当前会话数据
-						}else{
-						    let num = Number.isInteger(chatList.num) ? chatList.num : 0;
-                // _this.$set(chatList,'num',num+1)
-                session[index].num = num+1
-						}
-						//更新会话时间
-            // _this.$set(chatList,'intime',data.time);
-            session[index].intime =data.time
-				
-						//更新会话列表中最新回复消息
-						if(data.content.text){
-              // _this.$set(chatList,'text',data.content.text)
-              session[index].text =data.content.text
-            }
-             _this.$store.dispatch("SET_SESSION",session);
-					})
-				}
-      
-        //reLoginErr
-        if(redata.message_type == "reLoginErr"){
-          console.log('haha');
-          this.init()
-        }
-
-    },   
-
-    /**************************************/
-    //连接断开,失败
-    websocketonerror(e) {
-      console.log('失败',e);
-      if(this.linkfailure){
-        this.init()
-      }
-    },
-
-    /******************************************/
-    //断开链接数据初始化
-    init(){
-      this.$store.dispatch("SET_STATEVALUE",'隐身');
-      this.$store.dispatch("SET_SESSION",[]);
-      this.$store.dispatch("SET_OFFLINE",[]);
-      this.$store.dispatch("SET_SESSION",[]);//会话列表
-			this.$store.dispatch("SET_OFFLINE",[]);//离线列表
-		  this.$store.dispatch("SET_TYPE",1);//选择类型(会话/离线)
-			this.$store.dispatch("SET_NUM",0);//列表下标
-			this.$store.dispatch("SET_CURRENT",[]);//当前会话数据
-      this.$store.dispatch("SET_SESSION_NAME",'');//当前会话对象名
-      this.$store.dispatch("SET_SESSION_MESSAGE",{});
-      this.$store.dispatch("SET_IS_INIT",false);
-      this.$token = '';
-      this.$router.push('/login')
-      this.linkfailure = true;
-      //this.reconnect();
-    },
-
-    /***************************************/
-    //socket重连
-    reconnect(){
-      if(this.lockReconnect){   //这里很关键,因为连接失败之后之后会相继触发 连接关闭,不然会连接上两个 WebSocket
-          return
-      }
-      this.lockReconnect = true;
-      this.reconnectData && clearTimeout(this.reconnectData);
-      this.reconnectData = setTimeout(()=>{
-          this.initWebSocket(this.apiToken);
-          this.lockReconnect = false;
-      },3000)
-    },  
-
-    /*************************************/
-    //心跳检测
-    heatBeat(){
-      this.timeoutObj && clearTimeout(this.timeoutObj);
-      this.serverTimeoutObj && clearTimeout(this.serverTimeoutObj);
-      this.timeoutObj = setTimeout(()=>{
-        // console.log('发送',{type:'ping'});
-        this.$websocket.send(JSON.stringify({type:'ping'}))   //根据后台要求发送
-        this.serverTimeoutObj = setTimeout(()=> {
-            this.$websocket.close(); //如果  5秒之后我们没有收到 后台返回的心跳检测数据 断开socket,断开后会启动重连机制
-        }, 5000);
-      }, this.timeout)
-    }, 
-    
-    /******************************/
-    
-  },
-  mounted() {
-    // 获取系统时间
-    let t = new Date().getTime();
-    // this.get('api'+this.$ports.TIME+'?t='+t).then(res => {
-    this.get('http://kfadmin.bocai186.com'+this.$ports.TIME+'?t='+t).then(res => {
-      if (res.data.code == 1) {
-        let time = res.data.data.time.split(' ');
-        time[0] =(new Date( time[0].replace(/-/g,'/')).getTime()) /1000;
-        sessionStorage.setItem("time",JSON.stringify(time));
-        sessionStorage.setItem("logo",res.data.data.logo);
-        this.apiToken = this.$md5('customer-service'+time[0]+window.location.origin)
-        this.initWebSocket(this.apiToken);
-      }
-    });
-  },
-  destroyed() {
-    this.lockReconnect = true;
-    this.websock.close()                   //离开路由之后断开websocket连接
-    clearTimeout(this.reconnectData);      //离开清除 timeout
-    clearTimeout(this.timeoutObj);         //离开清除 timeout
-    clearTimeout(this.serverTimeoutObj);   //离开清除 timeout
-  }
-}
-</script>
-
-<style>
-  .fade-enter-active, .fade-leave-active {
-      transition: opacity .5s;
-  }
-     
-  .fade-enter, .fade-leave-to {
-    opacity: 0;
-  }
-</style>

+ 0 - 34
service/src/src/api/ports.js

@@ -1,34 +0,0 @@
-export default {
-  login: '/service/Login/doLogin',
-  // 获取时间
-  TIME:'/index/index/systime',
-  // 快捷回复
-  FastReply:{
-    userWords:'/service/index/userWords',//获取快捷回复列表
-    addWords:'/service/words/addWords',//新增快捷回复
-    deleteWords:'/service/words/deleteWords',//删除快捷回复/service/words/deleteWords
-    updateWords:'/service/words/updateWords',//修改快捷语
-
-    
-  },
-  // 历史会话
-  SessionHistory:{
-    historyList:'/service/history/historyList',//历史会话列表
-  },
-
-  //图片上传
-  uploadImg:'index/upload/uploadImg',
-
-  //获取配置信息
-  minRound:'/index/evaluate/minRound',
-
-  //获取敏感词
-  sensitiveWords:'/index/index/sensitiveWords',
-
-  //用户信息 
-  userInfo:{
-    updateinfo:'/service/Services/updateinfo',
-    updatepwd:'/service/Services/updatepwd'
-  }
-  
-}

BIN
service/src/src/assets/img/0.gif


BIN
service/src/src/assets/img/1.gif


BIN
service/src/src/assets/img/10.gif


BIN
service/src/src/assets/img/11.gif


BIN
service/src/src/assets/img/12.gif


BIN
service/src/src/assets/img/13.gif


BIN
service/src/src/assets/img/14.gif


BIN
service/src/src/assets/img/15.gif


BIN
service/src/src/assets/img/16.gif


BIN
service/src/src/assets/img/17.gif


BIN
service/src/src/assets/img/18.gif


BIN
service/src/src/assets/img/19.gif


BIN
service/src/src/assets/img/2.gif


BIN
service/src/src/assets/img/20.gif


BIN
service/src/src/assets/img/21.gif


BIN
service/src/src/assets/img/22.gif


BIN
service/src/src/assets/img/23.gif


BIN
service/src/src/assets/img/24.gif


BIN
service/src/src/assets/img/25.gif


BIN
service/src/src/assets/img/26.gif


BIN
service/src/src/assets/img/27.gif


BIN
service/src/src/assets/img/28.gif


BIN
service/src/src/assets/img/29.gif


BIN
service/src/src/assets/img/3.gif


BIN
service/src/src/assets/img/30.gif


BIN
service/src/src/assets/img/31.gif


BIN
service/src/src/assets/img/32.gif


BIN
service/src/src/assets/img/33.gif


BIN
service/src/src/assets/img/34.gif


BIN
service/src/src/assets/img/35.gif


BIN
service/src/src/assets/img/36.gif


BIN
service/src/src/assets/img/37.gif


BIN
service/src/src/assets/img/38.gif


BIN
service/src/src/assets/img/39.gif


BIN
service/src/src/assets/img/4.gif


BIN
service/src/src/assets/img/40.gif


BIN
service/src/src/assets/img/41.gif


BIN
service/src/src/assets/img/42.gif


BIN
service/src/src/assets/img/43.gif


BIN
service/src/src/assets/img/44.gif


BIN
service/src/src/assets/img/45.gif


BIN
service/src/src/assets/img/46.gif


BIN
service/src/src/assets/img/47.gif


BIN
service/src/src/assets/img/48.gif


BIN
service/src/src/assets/img/49.gif


BIN
service/src/src/assets/img/5.gif


BIN
service/src/src/assets/img/50.gif


BIN
service/src/src/assets/img/51.gif


BIN
service/src/src/assets/img/52.gif


BIN
service/src/src/assets/img/53.gif


BIN
service/src/src/assets/img/54.gif


BIN
service/src/src/assets/img/55.gif


BIN
service/src/src/assets/img/56.gif


BIN
service/src/src/assets/img/57.gif


BIN
service/src/src/assets/img/58.gif


BIN
service/src/src/assets/img/59.gif


BIN
service/src/src/assets/img/6.gif


BIN
service/src/src/assets/img/60.gif


BIN
service/src/src/assets/img/61.gif


BIN
service/src/src/assets/img/62.gif


BIN
service/src/src/assets/img/63.gif


BIN
service/src/src/assets/img/64.gif


BIN
service/src/src/assets/img/65.gif


BIN
service/src/src/assets/img/66.gif


BIN
service/src/src/assets/img/67.gif


BIN
service/src/src/assets/img/68.gif


BIN
service/src/src/assets/img/69.gif


BIN
service/src/src/assets/img/7.gif


BIN
service/src/src/assets/img/70.gif


BIN
service/src/src/assets/img/71.gif


BIN
service/src/src/assets/img/8.gif


BIN
service/src/src/assets/img/9.gif


BIN
service/src/src/assets/img/Multitap.png


BIN
service/src/src/assets/img/account.png


BIN
service/src/src/assets/img/bottom.png


BIN
service/src/src/assets/img/del.png


BIN
service/src/src/assets/img/end.png


BIN
service/src/src/assets/img/frce.png


BIN
service/src/src/assets/img/frcea.png


BIN
service/src/src/assets/img/hader1.png


BIN
service/src/src/assets/img/hader1a.png


BIN
service/src/src/assets/img/hader2.png


BIN
service/src/src/assets/img/hader3.png


BIN
service/src/src/assets/img/hader3a.png


BIN
service/src/src/assets/img/hader4.png


BIN
service/src/src/assets/img/headerPortrait.png


BIN
service/src/src/assets/img/img.png


BIN
service/src/src/assets/img/left1.png


BIN
service/src/src/assets/img/left1a.png


BIN
service/src/src/assets/img/left2.png


BIN
service/src/src/assets/img/left2a.png


BIN
service/src/src/assets/img/left3.png


BIN
service/src/src/assets/img/left3a.png


BIN
service/src/src/assets/img/left4.png


BIN
service/src/src/assets/img/left4a.png


BIN
service/src/src/assets/img/left5.png


BIN
service/src/src/assets/img/left5a.png


Неке датотеке нису приказане због велике количине промена