Browse Source

视频聊天相关内容修改

raolu 6 years ago
parent
commit
00ae14f443

+ 2 - 2
.env.development

@ -1,6 +1,6 @@
VUE_APP_USE_SERVER = 'http://172.19.103.88:9092/wlyy'
VUE_APP_IM_SERVER = 'http://172.19.103.88:3000/api/v2'
VUE_APP_SOCKET_URL = 'http://172.19.103.88:3000'
VUE_APP_IM_SERVER = 'https://202.101.157.194:9000/api/v2'
VUE_APP_SOCKET_URL = 'https://202.101.157.194:9000'
VUE_APP_IMG_UPLOAD_URL = 'http://ehr.yihu.com/wlyy'
VUE_APP_IMG_URL_DOMAIN = 'http://172.19.103.54/'
VUE_APP_AUTH_LOGIN_URL = 'http://172.19.103.88:9092/wlyy/PC-prescription/login.html'

+ 2 - 2
.env.production

@ -1,6 +1,6 @@
VUE_APP_USE_SERVER = 'http://www.xmtyw.cn/wlyy'
VUE_APP_IM_SERVER = 'http://www.xmtyw.cn/im/api/v2'
VUE_APP_SOCKET_URL = 'http://27.155.101.77:3000'
VUE_APP_IM_SERVER = 'https://202.101.157.194:9000/api/v2'
VUE_APP_SOCKET_URL = 'https://202.101.157.194:9000'
VUE_APP_IMG_UPLOAD_URL = 'http://www.xmtyw.cn/wlyy'
VUE_APP_IMG_URL_DOMAIN = 'http://www.xmtyw.cn/'
VUE_APP_AUTH_LOGIN_URL = 'http://www.xmtyw.cn/wlyy/prescription/login.html'

+ 0 - 2
package.json

@ -12,12 +12,10 @@
  },
  "dependencies": {
    "axios": "^0.18.0",
    "element-ui": "^2.4.9",
    "jquery": "^3.3.1",
    "vee-validate": "^2.0.0-rc.7",
    "vue": "^2.5.17",
    "vue-js-modal": "^1.3.26",
    "vue-layer": "^0.9.9",
    "vue-router": "^3.0.1",
    "vue2-toast": "^2.0.0",
    "vuex": "^3.0.1",

+ 1 - 0
public/index.html

@ -3,6 +3,7 @@
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests">
    <meta name="renderer" content="webkit" />
    <meta http-equiv="X-UA-Compatible" content="chrome=1">

+ 290 - 266
src/Main.vue

@ -1,287 +1,311 @@
<template>
    <div id="app">
        <div class="c-h100">
            <transition name="fade" appear>
                <keep-alive>
                    <router-view></router-view>
                </keep-alive>
            </transition>
        </div>
        
        <!-- 弹出层 -->
        <modals-container/>
  <div id="app">
    <div class="c-h100">
      <transition name="fade" appear>
        <keep-alive>
          <router-view></router-view>
        </keep-alive>
      </transition>
    </div>
    <!-- 弹出层 -->
    <modals-container/>
  </div>
</template>
<script>
    import videoChat from '@/components/videoChat/video-chat'
    import storage from './assets/js/storage'
    import ajaxUrl from './assets/js/ajaxurl'
    import SocketService from './assets/js/apis/api-p2psocket'
import videoChat from "@/components/videoChat/video-chat";
import storage from "./assets/js/storage";
import ajaxUrl from "./assets/js/ajaxurl";
import SocketService from "./assets/js/apis/api-p2psocket";
import store from "./store";
    let loginer = storage.getItem(storage.API_LOGIN_DOCTOR)
    let userAgent = ''
    let agentStr = ''
    if (loginer) {
        userAgent = {
            uid: loginer.uid,
            id: loginer.id,
            token: loginer.token,
            platform: 4,
            imei: storage.getItem(storage.IMEI)
        }
    }
let loginer = storage.getItem(storage.API_LOGIN_DOCTOR);
let userAgent = "";
let agentStr = "";
if (loginer) {
  userAgent = {
    uid: loginer.uid,
    id: loginer.id,
    token: loginer.token,
    platform: 4,
    imei: storage.getItem(storage.IMEI)
  };
}
    export default {
        data() {
            return {
                // authLoginUrl: authLoginUrl,
                patient: null,
                teamCode: null,
                selectTapObj: null,
                signMsg: null,
                delSignMsg: null,
                isBook: false,
                isServer: false,
                isArticle: false,
                isSpecialMsg: false,
                isDelSign: false,
                isVideoChat: false,
                chatMembers: []
            }
        },
        mounted() {
            let socket2 = SocketService.loginLocalSocket(),
                vm = this
export default {
  data() {
    return {
      // authLoginUrl: authLoginUrl,
      patient: null,
      teamCode: null,
      selectTapObj: null,
      signMsg: null,
      delSignMsg: null,
      isBook: false,
      isServer: false,
      isArticle: false,
      isSpecialMsg: false,
      isDelSign: false,
      isVideoChat: false,
      chatMembers: []
    };
  },
  mounted() {
    let socket2 = SocketService.loginLocalSocket();
    // let socket2 = new WebSocket("ws://localhost:30001/socket.io/?EIO=3&transport=websocket&sid=EP0Cejs68HHAXmcGn19z&t=MTIiRCK");
    let vm = this;
            //底部托盘消息提醒
            socket2.on('showChatWindow', (data) => {
                console.log("local socket = ", data);
                vm.$root.bus.$emit("showChatWindow", {chatMembers: [], sessionId: data.sessionId});
            })
    //底部托盘消息提醒
    socket2.onmessage = function(message) {
      console.log(message);
    };
    socket2.on("showChatWindow", data => {
      console.log("local socket = ", data);
      if (!vm.isVideoChat) {
        vm.$root.bus.$emit("showChatWindow", {
          chatMembers: [],
          sessionId: data.sessionId
        });
      }
    });
            socket2.on('syncServerHost', (data) => {
                console.log('syncServerHost', data)
                ajaxUrl.socketUrl = 'http://'+data.server_host+":"+data.port
                ajaxUrl.imServer = ajaxUrl.socketUrl+"/api/v2"
                ajaxUrl.videoScoketUrl = data.server_host+":8443/groupcall"
    socket2.on("syncServerHost", data => {
      console.log("syncServerHost", data);
      ajaxUrl.socketUrl = "https://" + data.server_host + ":9000";
      ajaxUrl.imServer =
        "https://" + data.server_host + ":" + data.port + "/api/v2";
      ajaxUrl.videoScoketUrl = data.server_host + ":9000/groupcall";
      window.localStorage.setItem(
        "serverUrl",
        "https://" + data.server_host + ":" + data.port
      );
      vm.loginIM();
      this.$router.replace("/message");
    });
                vm.loginIM()
                this.$router.replace("/message")
            })
    // 错误提醒
    socket2.on("error", function(data) {
      console.log("socket2 Error");
    });
    // scoket连接成功
    socket2.on("ack", function(data) {});
            // 错误提醒
            socket2.on('error', function (data) {
                console.log('socket2 Error')
            })
            // scoket连接成功
            socket2.on('ack', function (data) {
            })
    this.$root.bus.$on("app:imlogout", function() {
      socket.close();
    });
    this.$root.bus.$on("sel-tap", function(arg) {
      vm.patient = arg.info.code;
      vm.teamCode = arg.info.jtAdminTeam;
      vm.selectTapObj = arg.tapObj;
      vm.signCode = arg.info.signCode;
    });
            
    //视频聊天窗口弹出
    this.$root.bus.$on("showChatWindow", value => {
      this.chatMembers = value;
      this.isVideoChat = true;
            this.$root.bus.$on('app:imlogout', function() {
                socket.close()
            })
            this.$root.bus.$on('sel-tap', function(arg) {
                vm.patient = arg.info.code
                vm.teamCode = arg.info.jtAdminTeam
                vm.selectTapObj = arg.tapObj
                vm.signCode = arg.info.signCode
            })
            
            //视频聊天窗口弹出
            this.$root.bus.$on('showChatWindow', value => {
                this.chatMembers = value;
                
                this.$modal.show(videoChat, {
                    chatMembers: value.chatMembers,
                    sessionId: value.sessionId,
                    createChat: value.createChat || false
                }, {
                    draggable: true, 
                    width: '800px',
                    height: '500px'
                })
            })
      this.$modal.show(
        videoChat,
        {
          chatMembers: value.chatMembers,
          sessionId: value.sessionId,
          createChat: value.createChat || false
        },
        methods: {
            loginIM(){
                let socket = SocketService.mesPushLogin(),
                    str = '',
                    vm = this
                // 实时收到消息
                socket.on('message', (data) => {
                    let type = null
                    switch (Number(data.session_type)) {
                        case 0:
                            type = '0'; break
                        case 1:
                        case 8:
                            type = '1'; break
                        case 2:
                        case 3:
                        case 4:
                            type = '2'; break
                        default:
                            type = null
                    }
                    try {
                        str = JSON.parse(data.data).path
                    } catch (error) {
                        str = data.data
                    }
                    let msg = ''
                    try {
                        let res = str.split(','),
                            arr,
                            len
                        if (res.length > 2) {
                            arr = res[1].split('.')
                        } else {
                            arr = res[0].split('.')
                        }
                        len = arr.length
                        switch (arr[len - 1]) {
                            case 'mp3':
                                msg = '[语音]'; break
                            case 'mov':
                            case 'mp4':
                            case 'avi':
                            case 'wmv':
                            case 'asf':
                            case 'rm':
                                msg = '[视频]'; break
                            case 'jpg':
                            case 'jpeg':
                            case 'png':
                            case 'gif':
                            case 'bmp':
                                msg = '[图片]'; break
                            default:
                                msg = data.data
                        }
                    } catch (error) {
                        msg = data.data
                    }
                    // this.$electron.ipcRenderer.send('app:flashFrame', true)
                    // 托盘图标闪烁
                    // this.$electron.ipcRenderer.send('mainWindow:flashTray', {tip: '您有新的消息'})
                    this.$root.bus.$emit('msgRenovate')
                    let notice = new Notification('您有新的消息', {
                        dir: 'auto',
                        lang: 'zh-CN',
                        // tag: 'msgNotice',
                        body: msg
                    })
                    notice.onclick = () => {
                        // this.$electron.ipcRenderer.send('app:flashFrame', false)
                        // 停止托盘图标闪烁
                        // this.$electron.ipcRenderer.send('mainWindow:stopFlashTray', {tip: ''})
                        // 如果通知消息被点击,通知窗口将被激活
                        // this.$electron.ipcRenderer.send('mainWindow:focus')
                        this.$root.bus.$emit('menuIndex', true)
                        this.$root.bus.$emit('scrollCon', true)
                        this.$router.push({ path: 'message' })
                        this.$root.bus.$emit('msgRenovate', type)
                    }
                })
                // 错误提醒
                socket.on('error', function (data) {
                    alert('Error')
                })
                // scoket连接成功
                socket.on('ack', function (data) {
                })
            }
        {
          draggable: true,
          clickToClose: false,
          width: "800px",
          height: "500px"
        }
      );
    });
  },
  methods: {
    loginIM() {
      let socket = SocketService.mesPushLogin(),
        str = "",
        vm = this;
      // 实时收到消息
      socket.on("message", data => {
        let type = null;
        switch (Number(data.session_type)) {
          case 0:
            type = "0";
            break;
          case 1:
          case 8:
            type = "1";
            break;
          case 2:
          case 3:
          case 4:
            type = "2";
            break;
          default:
            type = null;
        }
        try {
          str = JSON.parse(data.data).path;
        } catch (error) {
          str = data.data;
        }
        let msg = "";
        try {
          let res = str.split(","),
            arr,
            len;
          if (res.length > 2) {
            arr = res[1].split(".");
          } else {
            arr = res[0].split(".");
          }
          len = arr.length;
          switch (arr[len - 1]) {
            case "mp3":
              msg = "[语音]";
              break;
            case "mov":
            case "mp4":
            case "avi":
            case "wmv":
            case "asf":
            case "rm":
              msg = "[视频]";
              break;
            case "jpg":
            case "jpeg":
            case "png":
            case "gif":
            case "bmp":
              msg = "[图片]";
              break;
            default:
              msg = data.data;
          }
        } catch (error) {
          msg = data.data;
        }
        // this.$electron.ipcRenderer.send('app:flashFrame', true)
        // 托盘图标闪烁
        // this.$electron.ipcRenderer.send('mainWindow:flashTray', {tip: '您有新的消息'})
        this.$root.bus.$emit("msgRenovate");
        let notice = new Notification("您有新的消息", {
          dir: "auto",
          lang: "zh-CN",
          // tag: 'msgNotice',
          body: msg
        });
        notice.onclick = () => {
          // this.$electron.ipcRenderer.send('app:flashFrame', false)
          // 停止托盘图标闪烁
          // this.$electron.ipcRenderer.send('mainWindow:stopFlashTray', {tip: ''})
          // 如果通知消息被点击,通知窗口将被激活
          // this.$electron.ipcRenderer.send('mainWindow:focus')
          this.$root.bus.$emit("menuIndex", true);
          this.$root.bus.$emit("scrollCon", true);
          this.$router.push({ path: "message" });
          this.$root.bus.$emit("msgRenovate", type);
        };
      });
      // 错误提醒
      socket.on("error", function(data) {
        alert("Error");
      });
      // scoket连接成功
      socket.on("ack", function(data) {});
    }
  }
};
</script>
<style rel="stylesheet/scss" lang="scss">
    /* CSS */
    @import 'assets/sass/style.scss';
    html,
    body,
    #app {
        height: 100%;
        min-width: 750px;
    }
    .c-h100 {
        height: 100%;
    }
    .c-width-50 {
        width: 50px;
    }
    .win-ctrl-wrapper {
        width: 120px;
        float: right;
    }
    .c-app-drag {
        -webkit-app-region: drag;
    }
    .notify .notify-alert h2.notice-title {
        padding: 0;
        text-align: center;
    }
    .mask {
        position: absolute;
        top: 0;
        left: 0;
        width: 100%;
        height: 100%;
        background: #111;
        opacity: 0.1;
        z-index: 9;
    }
    .sel-tap {
        overflow-y: scroll;
        position: absolute;
        top: 0;
        left: 0;
        bottom: 0;
        right: 0;
        width: 500px;
        height: 400px;
        margin: auto;
        border: 1px solid #e1e1e1;
        background-color: #fff;
        z-index: 10;
    }
    .sel-article {
        width: 80%;
        height: 80%;
    }
    .sel-tap:hover::-webkit-scrollbar-thumb {
        background-color: #dcdce1;
        border-radius: 5px;
    }
    .modify-tit {
        position: fixed;
        height: 40px;
        width: 460px;
        padding: 0 10px 0 30px;
        border-bottom: 1px solid #e1e1e1;
        line-height: 40px;
        background: #fff url('./assets/images/shezi_tankuang_icon.png') no-repeat 10px center;
    }
    .c-w80 {
        width: calc(80% - 40px);
    }
    .close {
        float: right;
        width: 12px;
        height: 25px;
        background: url('./assets/images/guanbi_icon.png') no-repeat 0 16px;
    }
    .w400{
        width: 400px;
    }
    .w360{
        width: 360px;
    }
    .h440{
        height: 440px;
    }
/* CSS */
@import "assets/sass/style.scss";
html,
body,
#app {
  height: 100%;
  min-width: 750px;
}
.c-h100 {
  height: 100%;
}
.c-width-50 {
  width: 50px;
}
.win-ctrl-wrapper {
  width: 120px;
  float: right;
}
.c-app-drag {
  -webkit-app-region: drag;
}
.notify .notify-alert h2.notice-title {
  padding: 0;
  text-align: center;
}
.mask {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background: #111;
  opacity: 0.1;
  z-index: 9;
}
.sel-tap {
  overflow-y: scroll;
  position: absolute;
  top: 0;
  left: 0;
  bottom: 0;
  right: 0;
  width: 500px;
  height: 400px;
  margin: auto;
  border: 1px solid #e1e1e1;
  background-color: #fff;
  z-index: 10;
}
.sel-article {
  width: 80%;
  height: 80%;
}
.sel-tap:hover::-webkit-scrollbar-thumb {
  background-color: #dcdce1;
  border-radius: 5px;
}
.modify-tit {
  position: fixed;
  height: 40px;
  width: 460px;
  padding: 0 10px 0 30px;
  border-bottom: 1px solid #e1e1e1;
  line-height: 40px;
  background: #fff url("./assets/images/shezi_tankuang_icon.png") no-repeat 10px
    center;
}
.c-w80 {
  width: calc(80% - 40px);
}
.close {
  float: right;
  width: 12px;
  height: 25px;
  background: url("./assets/images/guanbi_icon.png") no-repeat 0 16px;
}
.w400 {
  width: 400px;
}
.w360 {
  width: 360px;
}
.h440 {
  height: 440px;
}
</style>

+ 8 - 10
src/assets/js/ajaxurl.js

@ -1,15 +1,13 @@
import store from '../../store'
// var NODE_ENV=process.env.NODE_ENV
let useServer = process.env.VUE_APP_USE_SERVER
let imServer = process.env.VUE_APP_IM_SERVER
let socketUrl = process.env.VUE_APP_SOCKET_URL
let imgUploadUrl = process.env.VUE_APP_IMG_UPLOAD_URL
let videoScoketUrl = process.env.VUE_APP_VIDEO_CHAT_SOCKET
let serverUrl = window.localStorage.getItem("serverUrl");
export default {
    useServer: useServer,
    imServer: imServer,
    socketUrl: socketUrl,
    imgUploadUrl: imgUploadUrl,
    videoScoketUrl: videoScoketUrl,
    localSocket: 'localhost:30001'
  useServer: serverUrl,
  imServer: serverUrl + "/api/v2",
  socketUrl: serverUrl,
  imgUploadUrl: imgUploadUrl,
  videoScoketUrl: serverUrl + '/groupcall',
  localSocket: 'http://localhost:30001'
}

+ 61 - 60
src/assets/js/apis/api-p2psocket.js

@ -3,93 +3,94 @@ import io from '../vendor/socket.io'
import ajaxurl from '../ajaxurl'
import storage from '../storage'
import IMService from './api-im'
import store from '../../../store'
let loginDoctor = storage.getItem(storage.API_LOGIN_DOCTOR)
// socket 发送登录事件
function loginIM(sessionId) {
    let socket = io.connect(ajaxurl.socketUrl)
    socket.emit('login', { userId: loginDoctor.uid, password: loginDoctor.uid, sessionId: sessionId, clientType: 'pc_doctor' })
    return socket
  let socket = io.connect(ajaxurl.socketUrl)
  socket.emit('login', { userId: loginDoctor.uid, password: loginDoctor.uid, sessionId: sessionId, clientType: 'pc_doctor' })
  return socket
}
// 消息推送IM
function mesPushLogin() {
    let socket = io.connect(ajaxurl.socketUrl)
    socket.emit('login', { userId: loginDoctor.uid, password: loginDoctor.uid, sessionId: '', clientType: 'pc_doctor' })
    return socket
  let socket = io.connect(ajaxurl.socketUrl)
  socket.emit('login', { userId: loginDoctor.uid, password: loginDoctor.uid, sessionId: '', clientType: 'pc_doctor' })
  return socket
}
//登录本地的托盘socket
function loginLocalSocket(){
    let socket = io.connect(ajaxurl.localSocket)
    socket.emit('login', {userId: loginDoctor.uid})
    return socket
function loginLocalSocket() {
  let socket = io.connect(ajaxurl.localSocket)
  socket.emit('login', { userId: loginDoctor.uid })
  return socket
}
async function createP2pSession(patientCode, patientName) {
    // let hasPatientRes = await IMService.Sessions.getParticipants(),
    //     existingPatient = hasPatient(hasPatientRes)
  // let hasPatientRes = await IMService.Sessions.getParticipants(),
  //     existingPatient = hasPatient(hasPatientRes)
    // // p2p: sessionId是由(患者code+医生code)的hash值构成,所以对于确定的一对一聊天sessionId是不变的
    let sessionRes = await IMService.Sessions.createP2pSession(loginDoctor.uid, patientCode, patientName),
        sessionResult = sessionRes.data,
        sessionData = sessionResult.data,
        sessionId = sessionData.id
  // // p2p: sessionId是由(患者code+医生code)的hash值构成,所以对于确定的一对一聊天sessionId是不变的
  let sessionRes = await IMService.Sessions.createP2pSession(loginDoctor.uid, patientCode, patientName),
    sessionResult = sessionRes.data,
    sessionData = sessionResult.data,
    sessionId = sessionData.id
    // // 登录
    // emitLogin(sessionId)
  // // 登录
  // emitLogin(sessionId)
    // // 消息监听
    // onMessage(existingPatient)
  // // 消息监听
  // onMessage(existingPatient)
    // // 错误监听
    // onError()
  // // 错误监听
  // onError()
    // // 应答监听
    // onAck()
  // // 应答监听
  // onAck()
    return sessionId
  return sessionId
}
async function createGroupSession(sesstionId, sessionType, sessionName, participants, videoconferencing){
    let sessionRes = await IMService.Sessions.createGroupSession(sesstionId, sessionType, sessionName, participants, videoconferencing),
        sessionResult = sessionRes.data,
        sessionData = sessionResult.data,
        sessionId = sessionData.id
    return sessionId
async function createGroupSession(sesstionId, sessionType, sessionName, participants, videoconferencing) {
  let sessionRes = await IMService.Sessions.createGroupSession(sesstionId, sessionType, sessionName, participants, videoconferencing),
    sessionResult = sessionRes.data,
    sessionData = sessionResult.data,
    sessionId = sessionData.id
  return sessionId
}
async function addParticipant(sessionId, participantId){
    let sessionRes = await IMService.Sessions.addParticipant(sessionId, participantId),
        sessionResult = sessionRes.data;
    return sessionResult;
async function addParticipant(sessionId, participantId) {
  let sessionRes = await IMService.Sessions.addParticipant(sessionId, participantId),
    sessionResult = sessionRes.data;
  return sessionResult;
}
export default {
    async createSocketConnect({ patientCode, patientName }) {
        let sessionId = await createP2pSession(patientCode, patientName)
        return sessionId
    },
    async createGroupSession({sessionId, sessionType, sessionName, participants}){
        console.log("createGroupSession sessionId = "+sessionId);
        let sessionId1 = await createGroupSession(sessionId, sessionType, sessionName, participants)
        return sessionId1
    },
    async addParticipant({sessionId, participantId}){
        let res = await addParticipant(sessionId, participantId)
        return res
    },
    loginIM: loginIM,
    mesPushLogin: mesPushLogin,
    loginLocalSocket: loginLocalSocket,
    /**
     * @api {GET}  /doctor/admin-teams/{team_id}/members
     * @apiVersion 0.0.1
     * @desc 根据医生code返回所有团队的医生
     */
    getAllDocMembers() {
        return http.get(`/doctor/admin-teams/doctorTeamMembers`, {})
    }
  async createSocketConnect({ patientCode, patientName }) {
    let sessionId = await createP2pSession(patientCode, patientName)
    return sessionId
  },
  async createGroupSession({ sessionId, sessionType, sessionName, participants }) {
    console.log("createGroupSession sessionId = " + sessionId);
    let sessionId1 = await createGroupSession(sessionId, sessionType, sessionName, participants)
    return sessionId1
  },
  async addParticipant({ sessionId, participantId }) {
    let res = await addParticipant(sessionId, participantId)
    return res
  },
  loginIM: loginIM,
  mesPushLogin: mesPushLogin,
  loginLocalSocket: loginLocalSocket,
  /**
   * @api {GET}  /doctor/admin-teams/{team_id}/members
   * @apiVersion 0.0.1
   * @desc 根据医生code返回所有团队的医生
   */
  getAllDocMembers() {
    return http.get(`/doctor/admin-teams/doctorTeamMembers`, {})
  }
}

+ 12 - 6
src/assets/js/vendor/socket.io.js

@ -3971,7 +3971,7 @@ return /******/ (function(modules) { // webpackBootstrap
	Socket.prototype.createTransport = function (name) {
		debug('creating transport "%s"', name);
		console.log('creating transport "%s"', name);
	  var query = clone(this.query);
		var query = clone(this.query);
	  // append engine.io protocol identifier
	  query.EIO = parser.protocol;
@ -4113,7 +4113,7 @@ return /******/ (function(modules) { // webpackBootstrap
	    }
	    if (failed) return;
	    debug('probe transport "%s" opened', name);
			debug('probe transport "%s" opened', name);
	    transport.send([{ type: 'ping', data: 'probe' }]);
	    transport.once('packet', function (msg) {
	      if (failed) return;
@ -7345,7 +7345,7 @@ return /******/ (function(modules) { // webpackBootstrap
	    return;
	  }
	  var uri = this.uri();
		var uri = this.uri();
	  var protocols = void (0);
	  var opts = {
	    agent: this.agent,
@ -7502,8 +7502,10 @@ return /******/ (function(modules) { // webpackBootstrap
	 */
	WS.prototype.uri = function () {
		// debugger
	  var query = this.query || {};
	  var schema = this.secure ? 'wss' : 'ws';
		var schema = this.secure ? 'wss' : 'ws';
		// var schema = 'ws';
	  var port = '';
	  // avoid port if default for schema
@ -7512,10 +7514,14 @@ return /******/ (function(modules) { // webpackBootstrap
	    port = ':' + this.port;
	  }
		// if(this.secure){
		// 	port = ':3000';
		// }
	  // append timestamp to URI
	  if (this.timestampRequests) {
	  // if (this.timestampRequests) {
	    query[this.timestampParam] = yeast();
	  }
	  // }
	  // communicate binary support capabilities
	  if (!this.supportsBinary) {

+ 1 - 1
src/components/loginForm.vue

@ -391,7 +391,7 @@ export default {
                    }
                    let data = {
                        id: '',
                        uid: 'rll201703150333',// this.phone,
                        uid:  this.phone, //'rll201703150333', //
                        token: '',
                        level: '1',
                        photo: ''

+ 27 - 35
src/components/videoChat/video-chat.vue

@ -1,7 +1,7 @@
<template>
    <div class="chat-panel">
        <div class="c-f16 c-fff header">视频聊天
            <win-ctrl-bar @close="closeWin" @minimize="minWin" @maximize="maxWin"></win-ctrl-bar>
            <win-ctrl-bar @close="leaveRoom" @minimize="minWin" @maximize="maxWin"></win-ctrl-bar>
        </div>
        <div class="main-content clearfix">
            <div class="main-chat fl">
@ -229,7 +229,7 @@ export default {
            // _.each(list, function(o){
            //     participants[o.code] = o;
            // });
            _.map(this.memberList, function(o){
            _.map(this.chatMembers1, function(o){
                participants[o.code] = o;
                return o;
            })
@ -250,10 +250,7 @@ export default {
        initWS(){
            var vm = this;
            vm.ws.onmessage = function(message) {
             debugger
                var parsedMessage = JSON.parse(message.data);
                console.info('Received message: ' + message.data);
                switch (parsedMessage.id) {
                case 'existingParticipants':
                    vm.onExistingParticipants(parsedMessage);
@ -268,13 +265,6 @@ export default {
                    vm.receiveVideoResponse(parsedMessage);
                    break;
                case 'iceCandidate':
                    var audioCtx = new AudioContext();
                    var analyser = audioCtx.createAnalyser();
                    analyser.fftSize = 2048;
                    var bufferLength = analyser.fftSize;
                    var dataArray = new Uint8Array(bufferLength);
                    analyser.getByteTimeDomainData(dataArray);
                    vm.participants[parsedMessage.userId].rtcPeer.addIceCandidate(parsedMessage.candidate, function (error) {
                        if (error) {
                        console.error("Error adding candidate: " + error);
@ -303,17 +293,19 @@ export default {
        },
        leaveRoom() {
            debugger
            this.sendMessage({
                id : 'leaveRoom'
            });
            for ( var key in this.participants) {
                this.participants[key].dispose();
            }
            this.ws.close();
            // this.ws = new WebSocket('wss://172.19.103.86:8443/groupcall');
            // this.$root.bus.$emit('closeSignMsg')
            this.$emit('close');
            var vm = this;
            new Promise(function(resolve, reject){
                vm.sendMessage({
                    id : 'leaveRoom'
                });
                resolve();
            }).then(function(){
                for ( var key in vm.participants) {
                    vm.participants[key].dispose();
                }
                vm.ws.close();
                vm.$emit('close');
            })
        },
        sendMessage(message) {
            var jsonMessage = JSON.stringify(message);
@ -323,12 +315,12 @@ export default {
        },
        onNewParticipant(request) {
            debugger
            console.log("receiveVideoResponse");
            console.log("onNewParticipant", request);
            this.receiveVideo(request.userId);
        },
        receiveVideoResponse(result) {
            debugger
            console.log("receiveVideoResponse");
            console.log("receiveVideoResponse", result);
            this.participants[result.userId].rtcPeer.processAnswer (result.sdpAnswer, function (error) {
                if (error) return console.error (error);
            });
@ -401,10 +393,10 @@ export default {
        },
        onParticipantLeft(request) {
            debugger
            console.log('onParticipantLeft Participant ' + request.code + ' left');
            var participant1 = this.participants[request.code];
            console.log('onParticipantLeft Participant ' + request.userId + ' left');
            var participant1 = this.participants[request.userId];
            participant1.dispose();
            delete this.participants[request.code];
            delete this.participants[request.userId];
        },
        participant(code, vm){
            let container = document.getElementById("par_"+code),
@ -482,13 +474,13 @@ export default {
                this.$set(this.chatMembers1, this.chatMembers1.length, list[i])
            }
        },
        closeWin(){
            this.sendMessage({
                id : 'leaveRoom'
            });
            this.ws.close();
            this.$emit('close');
        },
        // closeWin(){
        //     this.sendMessage({
        //         id : 'leaveRoom'
        //     });
        //     this.ws.close();
        //     this.$emit('close');
        // },
        minWin(){
        },

+ 0 - 2
src/main.js

@ -10,7 +10,6 @@ import Toast from 'vue2-toast'
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
import layer from 'vue-layer'
import VModal from 'vue-js-modal'
import $ from 'jquery'
@ -26,7 +25,6 @@ Vue.use(VModal, {
    dynamic: true,
});
Vue.prototype.$layer = layer(Vue)
/* eslint-disable no-new */

+ 25 - 8
src/store/index.js

@ -1,16 +1,33 @@
import Vue from 'vue'
import Vuex from 'vuex'
import modules from './modules'
Vue.use(Vuex)
export default new Vuex.Store({
    modules,
    mutations: {
        changeMenuIndex(state, payload) {
            state.menuIndex = payload
        }
  state: {
    url: "",
    port: ""
  },
  mutations: {
    SET_SERVER_DOMAIN(state, url) {
      state.url = url
    },
    SET_SERVER_PORT(state, port) {
      state.port = port
    }
  },
  actions: {
    syncServer({ commit }, url) {
      // do something async
      commit('SET_SERVER_DOMAIN', url)
    },
    strict: process.env.NODE_ENV !== 'production'
    syncServerPort({ commit }, port) {
      commit('SET_SERVER_PORT', port)
    }
  },
  getters: {
    serverUrl: state => {
      return state.url + ":" + state.port;
    }
  }
})