fcc-core
Version:
Fusion communication center.
181 lines (175 loc) • 5.93 kB
JavaScript
// 获取UDC的服务地址跟端口
import CallManage from '../../../utils/call-center/ucccontrol/uccmanage'
import { changeEmployeeStatus } from '../../../utils/nats/natsApi'
// import { addOPTRecord } from '@/views/dispatch-GIS/api/recordApi'
function loginIn (xw) {
let CALLOUT_WAY = xw.getSysParam('CALLOUT_WAY')
// udc地址和端口
let udcaddr = xw.getSysParam('UDC_IP_PORT')
// vcaddr
let vcaddr = xw.getSysParam('VC_IP_PORT')
// vcnaddr
let vcnaddr = xw.getSysParam('VCN_IP_PORT')
// 平台版本
let version = xw.getSysParam('PLATFORM_VERSION')
const agentAttr = {
// 坐席属性
userInfo: {},
// udc地址和端口
udcaddr,
vcaddr,
vcnaddr,
version
}
Object.defineProperty(agentAttr, 'userInfo', {
get () {
return xw.userInfo
}
})
return {
// 封装统一的签入方法
async loginIn (exeSocket) {
// udc
let udcip = agentAttr.udcaddr.split(':')[0]
let udcport = agentAttr.udcaddr.split(':')[1]
// vc
let vcip = agentAttr.vcaddr.split(':')[0]
let vcport = agentAttr.vcaddr.split(':')[1]
// vcn
let vcnip = agentAttr.vcnaddr.split(':')[0]
let vcnport = agentAttr.vcnaddr.split(':')[1]
let loginData = {
dispatch: false,
monitor: false,
phone: false,
cluster: false
}
let param = {
sdkVer: version,
userName: String(agentAttr.userInfo.USER_CODE)
}
if (version === '1') {
param.cluster = null
param.monitor = null
param.dispatch = {
'userName': agentAttr.userInfo.ICP_CODE,
'password': agentAttr.userInfo.ICP_PWD,
'serverIp': udcip,
'serverPort': udcport
}
} else {
param.dispatch = {
'userName': agentAttr.userInfo.ICP_CODE,
'password': agentAttr.userInfo.ICP_PWD,
'serverIp': vcip,
'serverPort': vcport
}
param.cluster = {
'userName': agentAttr.userInfo.UDC_CODE,
'password': agentAttr.userInfo.UDC_PWD,
'serverIp': udcip,
'serverPort': udcport
}
param.monitor = {
'userName': xw.getSysParam('VCN_USER_ACCOUNT'),
'password': xw.getSysParam('VCN_USER_PASS'),
'serverIp': vcnip,
'serverPort': vcnport
}
}
// 通过exe程序去登录
if (xw.agentState === '3') {
exeSocket.emit('Login', param)
let promiseAllArr = []
if (xw.public.pointToPointCall || xw.public.meeting) {
let OnDispatchLogin = new Promise((resolve, reject) => {
exeSocket.once('OnDispatchLogin', data => {
if (data.resultCode === 0) {
loginData.dispatch = true
loginData.exePhone = true
if (version === '1') {
loginData.monitor = true
}
resolve()
}
})
})
promiseAllArr.push(OnDispatchLogin)
}
if (version === '2' && xw.public.monitor) {
let OnMonitorLogin = new Promise((resolve, reject) => {
exeSocket.once('OnMonitorLogin', data => {
if (data.resultCode === 0) {
loginData.monitor = true
resolve()
}
})
})
promiseAllArr.push(OnMonitorLogin)
}
if (xw.public.cluster) {
let OnClusterLogin = new Promise((resolve, reject) => {
console.log('集群登录')
exeSocket.once('OnClusterLogin', data => {
if (data.resultCode === 0) {
loginData.cluster = true
resolve()
}
})
})
promiseAllArr.push(OnClusterLogin)
}
if (xw.userInfo.AGENT_ID) {
xw.ucc = new CallManage(xw)
window.xw = xw
let uccSignIn = new Promise((resolve, reject) => {
xw.ucc.signIn().then(res => {
loginData.fsPhone = true
resolve()
}).catch((err) => {
reject(err)
})
})
promiseAllArr.push(uccSignIn)
}
let timeout = setTimeout(() => {
throw (new xw.BaseException(501, '登录失败!'))
}, 60000)
console.log(promiseAllArr)
return new Promise((resolve, reject) => {
Promise.all(promiseAllArr).then(() => {
clearTimeout(timeout)
xw.sysLoginStatus = loginData // 成功之后才全部修改
changeEmployeeStatus('1', xw) // 广播并且修改agent_state状态 在线
resolve()
}).catch((err) => { reject(err) })
})
} else {
changeEmployeeStatus('1', xw) // 广播并且修改agent_state状态 在线
}
},
// 封装统一的签出方法
loginOut (exeSocket) {
let param = {
'userName': agentAttr.userInfo.ICP_CODE,
'sdkVer': version
}
// 通过exe程序去登出
exeSocket.emit('Logout', param)
exeSocket.once('OnLogout', (data) => {
if (data.resultCode === 0) {
window.app.$message.success('退出登录成功')
changeEmployeeStatus('3', xw) // 广播并且修改agent_state状态 登出
window.app.$store.commit('M_SYS_LOGIN_STATUS', { dispatch: false, monitor: false, cluster: false })
} else {
window.app.$message.error(`退出登录失败,${data.resultMsg}`)
}
})
},
// 封装统一的示忙方法
sayBusy () {
changeEmployeeStatus('2', xw) // 广播并且修改agent_state状态 忙碌
}
}
}
export default loginIn