Skip to content
  • P
    Projects
  • G
    Groups
  • S
    Snippets
  • Help

杨树贤 / kefu_server

  • This project
    • Loading...
  • Sign in
Go to a project
  • Project
  • Repository
  • Issues 0
  • Merge Requests 0
  • Pipelines
  • Wiki
  • Snippets
  • Settings
  • Activity
  • Graph
  • Charts
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
  • Files
  • Commits
  • Branches
  • Tags
  • Contributors
  • Graph
  • Compare
  • Charts
Find file
BlameHistoryPermalink
Switch branch/tag
  • kefu_server
  • ui
  • kefu_client
  • kefu_plugin
  • mini_im.js
  • chenxianqi's avatar
    update · 882da828
    chenxianqi committed 5 years ago
    882da828
mini_im.js 7.88 KB
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166
// eslint-disable-next-line no-unused-vars
var MiniIM = {
    showChat: false,
    miniImClientBar: null,
    miniImclientIframe: null,
    miniImclientIframeBox: null,
    miniImClientFixed: null,
    miniImClientNewMessageTag: null,
    isShowMiniIM: false,
    isFlashTag: true,
    // 配置信息
    // query 介绍
    // h == header  0 不显示 1显示 默认值显示,PC端不显示
    // m == mobile  0 不是移动端 1是移动端
    // p == platform  平台ID(渠道)
    // r == robot   0 当前为客服 1机器人
    // a == account 当前提供对话服务的账号,客服账号,或机器人账号
    // u == userAccount  会话用户账号
    // uid == userId  业务平台的ID
    options: {
        isShowPcBar: true,// 是否显示PC右下角的bar
        url: "localhost", // 项目地址
        platform: 5,      // 平台
        isHeader: 1,      // 移动端是否显示header
        isMobile: 1,      // 是否是移动端
        isRobot: 1,       // 当前是否机器人提供服务(默认即可)
        account: 0,       // 当前提供对话服务的账号,即客服账号,或机器人默认即可)
        userAccount: 0,   // 会话用户账号
        uid: 0,           // 业务平台的ID
        isFlashTag: true, // 有新消息是否闪烁
    },
    // 初始化
    init: function(options){
        if(!options.url){
            alert("URL不能为空!")
            return
        }
        if(options.url != undefined) this.options.url = options.url
        if(options.platform != undefined) this.options.platform = options.platform
        if(options.isHeader != undefined) this.options.isHeader = options.isHeader
        if(options.isMobile != undefined) this.options.isMobile = options.isMobile
        if(options.isRobot != undefined) this.options.isRobot = options.isRobot
        if(options.account != undefined) this.options.account = options.account
        if(options.isShowPcBar != undefined) this.options.isShowPcBar = options.isShowPcBar
        if(options.userAccount != undefined) this.options.userAccount = options.userAccount
        if(options.uid != undefined) this.options.uid = options.uid
        if(options.isFlashTag != undefined) this.isFlashTag= options.isFlashTag
        var self = this
        if(options.isMobile == 0){
            this.createStyle()
            this.createElement()
            window.addEventListener('message',function(event){
                if(event.data.clickCloseWindow) self.hideChatWindow()
                if(event.data.newMessage > 0 && !this.isShowMiniIM){
                    self.flashTag()
                }else{
                    if(this.flashTagInterval) clearInterval(this.flashTagInterval)
                    this.miniImClientNewMessageTag.innerHTML = "在线客服" 
                }
            }, false)
        }
        return this
    },
    // flash tag
    flashTagInterval: null,
    flashTag(){
        if(!this.isFlashTag) return
        if(this.flashTagInterval) clearInterval(this.flashTagInterval)
        var self = this
        var timer = 0
        this.flashTagInterval = setInterval(function(){
            timer ++
            if(timer%2 == 0){
                self.miniImClientNewMessageTag.innerHTML = " 您有新消息"
            }else{
                self.miniImClientNewMessageTag.innerHTML = ""
            }
        }, 500)
    },
    // showChat
    showChatWindow(){
        if(this.flashTagInterval) clearInterval(this.flashTagInterval)
        this.miniImClientNewMessageTag.innerHTML = "在线客服" 
        if(this.isShowMiniIM) return
        this.isShowMiniIM = true
        this.miniImClientBar.style.display = "none"
        this.miniImclientIframeBox.style.display = "block"
        // 加点动画效果
        var right = -360;
        this.miniImClientFixed.style.right = right + 'px'
        var interval = setInterval(function(){
            right = right + 5
            this.miniImClientFixed.style.right = right + 'px'
            if(right == 10) clearInterval(interval)
        }, 1);
    },
    // hideChat
    hideChatWindow(){
        if(this.flashTagInterval) clearInterval(this.flashTagInterval)
        this.miniImClientNewMessageTag.innerHTML = "在线客服" 
        if(!this.isShowMiniIM) return
        this.isShowMiniIM = false
        // 加点动画效果
        var right = 10;
        var interval = setInterval(function(){
            right = right - 5
            this.miniImClientFixed.style.right = right + 'px'
            if(right <= -360){
                this.miniImClientBar.style.display = "flex"
                this.miniImClientBar.style.display = "flex"
                this.miniImclientIframeBox.style.display = "none"
                this.miniImClientFixed.style.right = 10 + 'px'
                clearInterval(interval)
            }
        }, 1);
    },
    // 创建连接
    createLink(){
        var options = this.options
        var host = options.url +'/'
        var r = options.isRobot
        var a = options.account
        var m = options.isMobile
        var h = options.isHeader
        var p = options.platform
        var u = options.userAccount
        var uid = options.uid
        var query = "?h=" + h + "&m=" + m + "&p=" + p + "&r=" + r + "&a=" + a + "&u=" + u + "&uid=" + uid
        return host + query
    },
    // PC 创建一个element悬浮在右下角
    createElement: function(){
        var htmlString = '<div class="mini-im-client-iframe"id="miniImclientIframeBox"><iframe id="miniImclientIframe"height="500"width="360"frameborder="0"></iframe></div><div class="mini-im-client-bar"id="miniImClientBar"><div class="mini-im-client-bar-icon"><img src="http://qiniu.cmp520.com/kefu_icon_2000.png"alt=""></div><div class="mini-im-client-bar-title" id="miniImClientNewMessageTag">在线客服</div></div>'
        var miniImClientFixedBox = document.createElement("div")
        miniImClientFixedBox.setAttribute("class", "mini-im-client-fixed")
        miniImClientFixedBox.setAttribute("id", "miniImClientFixed")
        miniImClientFixedBox.innerHTML = htmlString
        document.body.append(miniImClientFixedBox)
        this.miniImClientFixed = document.getElementById("miniImClientFixed")
        this.miniImClientNewMessageTag = document.getElementById("miniImClientNewMessageTag")
        this.miniImClientBar = document.getElementById("miniImClientBar")
        this.miniImclientIframe = document.getElementById("miniImclientIframe")
        this.miniImclientIframeBox = document.getElementById("miniImclientIframeBox")
        var link = this.createLink()
        this.miniImclientIframe.src = link
        var self = this
        if(!this.options.isShowPcBar){
            this.miniImClientFixed.style.background = "none";
            this.miniImClientFixed.style.minHeight = "1px"
            this.miniImClientBar.style.height = "1px"
            this.miniImClientBar.style.opacity = 0;
        }
        
        this.options.isShowPcBar && this.miniImClientBar.addEventListener("click", function(){
            self.showChatWindow()
        }, false)
        
    },
    // PC 页面写入样式
    createStyle: function(){
        var style = '.mini-im-client-fixed{position:fixed;z-index: 9999999;bottom:10px;right:10px;min-width:200px;max-width:360px;min-height:40px}.mini-im-client-bar{width:200px;height:40px;border-radius:3px;overflow:hidden;display:flex;cursor:pointer}.mini-im-client-bar-icon{width:40px;height:40px;background-color:#1779ca;display:flex;justify-content:center;align-items:center}.mini-im-client-bar-icon img{width:30px;height:30px}.mini-im-client-bar-title{width:160px;height:40px;background-color:#1898fc;display:flex;justify-content:center;align-items:center;color:#fff;font-size:15px;text-align:center}.mini-im-client-iframe{width:360px;height:500px;box-shadow:1px 1px 8px 2px rgba(0, 0, 0, 0.16);display:none}'
        var styleElement = document.createElement("style")
        styleElement.innerHTML = style
        document.head.append(styleElement)
    }
}