Newer
Older
XuZhouCallCenterFront / src / views / monitor / seatMonitor / seatMonitor.vue
StephanieGitHub on 6 May 2020 5 KB MOD: 统计调试
<template>
  <app-container>
    <all-show :data="showData" @refresh="refreshData"/>
    <el-row>
      <el-col :span="6">
        <ivr-area :current-user="currentUser"/>
      </el-col>
      <el-col :span="12">
        <el-row>
          <div v-show="extensionList.length>0" class="realtime-seats">
            <el-col v-for="exten in extensionList" :key="exten.exten" :span="6">
              <seat :data="exten" :current="exten.exten==currentUser.exten" @detail="fetchUserDetail"/>
            </el-col>
          </div>
          <div v-show="extensionList.length==0" class="realtime-seats">
            <el-col v-for="i in 8" :key="i" :span="6">
              <seat :i="'600'+i"/>
            </el-col>
          </div>
        </el-row>
      </el-col>
      <el-col :span="6">
        <realtime-check :seat-form="currentUser"/>
      </el-col>
    </el-row>

  </app-container>
</template>

<script>
import AppContainer from '../../../components/layout/AppContainer'
import Seat from './components/seat'
import AllShow from './components/allShow'
import RealtimeCheck from './components/realtimeCheck'
import IvrArea from './components/ivrArea'
import { mapState } from 'vuex'
import { getUserSimpleList } from '@/api/system/user'
import { getSeatsState, getCurrentCalls } from '@/api/cti'

export default {
  name: 'SeatMonitor',
  components: { IvrArea, RealtimeCheck, AllShow, Seat, AppContainer },
  data() {
    return {
      showData: {
        all: 8,
        signin: 0,
        signout: 8,
        showbusy: 0,
        showidle: 0,
        busy: 0,
        wait: 0
      }, // 总览数据
      userList: [], // 从后台获取的用户列表
      currentUser: {
        agentUserName: '--',
        agentName: '--',
        phone: '--',
        state: '--',
        exten: '--',
        callerNumber: '--',
        calleeNumber: '--',
        callid: ''
      },
      callList: [] // 正在通话列表
    }
  },
  computed: {
    ...mapState({
      exten: state => state.user.exten, // 用户绑定的分机号
      wsStatus: state => state.ivr.wsStatus,
      signStatus: state => state.ivr.signStatus, // 签入签出状态
      callStatus: state => state.ivr.callStatus,
      isInCall: state => state.ivr.isInCall,
      isInComming: state => state.ivr.isInComming,
      extensionList: state => state.ivr.extensionList,
      reg: state => state.ivr.reg,
      webSocket: state => state.ivr.websocket,
      websocketObj: state => state.ivr.websocketObj
    })
  },
  watch: {
    extensionList(val) {
      this.handleExtensionListChange(val)
    },
    signStatus(val) {
      if (val) {
        this.getExtentionList()
      }
    }
  },
  created() {
    this.fetchUserList()
    this.refreshData()
  },
  methods: {
    refreshData() {
      this.getExtentionList()
      this.fetchCurrentCalls()
    },
    // 当extensionList变化之后的处理
    handleExtensionListChange(val) {
      const data = {
        all: val.length,
        signin: 0,
        signout: 0,
        showbusy: 0,
        showidle: 0,
        busy: 0,
        wait: 0
      }
      for (const item of val) {
        if (item.loginId) { // 有loginId表示已签入,否则表示未签入
          data.signin += 1
          if (item.state === '空闲') { // 话机为空闲状态,等待数+1,否则忙碌数+1
            data.wait += 1
          } else {
            data.busy += 1
          }
          if (item.busy) { // 如果busy不为空,示忙数+1
            data.showbusy += 1
          } else {
            data.showidle += 1
          }
        }
      }
      data.signout = data.all - data.signin
      this.showData = data
    },
    // 获取已登录坐席列表
    getExtentionList() {
      if (this.wsStatus) {
        const params = {
          type: 'all'
        }
        this.$store.dispatch('getExtensionList', params)
      }
      // getSeatsState().then(response => {
      //   console.log(response)
      // })
    },
    // 获取用户列表
    fetchUserList() {
      const params = {
        roleTips: 'receiver,monitor,administrator'
      }
      getUserSimpleList(params).then(response => {
        if (response.code === 200) {
          this.userList = response.data
        }
      })
    },
    // 根据坐席号获取当前用户详情
    fetchUserDetail(loginId, name, exten, state) {
      console.log('fetchUserDetail')
      console.log(loginId)
      if (loginId) {
        for (const user of this.userList) {
          if (user.id === loginId) {
            this.currentUser.agentUserName = user.name
            this.currentUser.agentName = name
            this.currentUser.phone = user.phone
            this.currentUser.exten = exten
            this.currentUser.state = state
            // 测试数据
            // this.currentUser.callid = 'test'
            // this.currentUser.callerNumber = 'test'
            // this.currentUser.calleeNumber = 'test'
            if (state.includes('通话')) {
              this.fetchCurrentCalls(loginId)
            }
            break
          }
        }
      } else {
        this.currentUser = {
          agentUserName: '--',
          agentName: '--',
          phone: '--',
          state: '--',
          exten: '--',
          callerNumber: '--',
          calleeNumber: '--',
          callid: ''
        }
      }
    },
    // 获取当前正在通话列表
    fetchCurrentCalls(loginId) {
      getCurrentCalls().then(response => {
        console.log(response.data)
        this.callList = response.data.root
        for (const call of this.callList) {
          if (call.Call_agentStaffid === loginId) {
            console.log('find')
            this.currentUser.callerNumber = call.Call_number
            this.currentUser.calleeNumber = call.Call_number
            this.currentUser.callid = call.Call_id
          }
        }
      })
    }
  }
}
</script>

<style scoped>
.realtime-seats{
  padding:30px 20px;
}
</style>